From 9c3104e1f16e6fd493bc2f4a43c211624814f91c Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sat, 25 Jan 2014 14:18:05 +0800 Subject: [PATCH 01/82] add plugin print message --- app/plugin/email.go | 4 +--- app/plugin/plugin.go | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/plugin/email.go b/app/plugin/email.go index 3e0ab49..18db75c 100644 --- a/app/plugin/email.go +++ b/app/plugin/email.go @@ -280,7 +280,5 @@ func (p *EmailPlugin) sendSmtp(from mail.Address, to mail.Address, title string, []string{to.Address}, []byte(message), ) - if err != nil { - fmt.Println(err) - } + println("send to email ", to.String(), fmt.Sprint(err)) } diff --git a/app/plugin/plugin.go b/app/plugin/plugin.go index f4f8744..e612e29 100644 --- a/app/plugin/plugin.go +++ b/app/plugin/plugin.go @@ -108,6 +108,7 @@ func Activate(name string) { p.Activate() pluginStorage[p.Key()] = p.ToStorage() model.Storage.Set("plugins", pluginStorage) + println("activate", p.Key()) } func Deactivate(name string) { @@ -119,4 +120,5 @@ func Deactivate(name string) { p.Deactivate() pluginStorage[p.Key()] = p.ToStorage() model.Storage.Set("plugins", pluginStorage) + println("deactivate", p.Key()) } From 9e8e2459e40c3c960b97c2c674bbc89f181746f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Mon, 27 Jan 2014 23:58:15 +0800 Subject: [PATCH 02/82] update to 0.1.6, fix bugs --- app/app.go | 2 +- app/cmd/zip.go | 2 +- app/model/content.go | 57 +++++++------- app/model/locker.go | 9 +++ app/model/storage.go | 13 ++- app/upgrade/v20140130.go | 2 + app/upgrade/v20140131.go | 32 ++++++++ static/css/ling.css | 141 ++++++++++++++++++++++++++++++++- static/css/style.css | 144 +++++++++++++++++++++++++++++++++- static/less/ling.less | 8 +- static/less/style.less | 11 ++- view/ling/error/error.html | 14 ++++ view/ling/error/notfound.html | 14 ++++ view/ling/home.layout | 1 + 14 files changed, 411 insertions(+), 39 deletions(-) create mode 100644 app/model/locker.go create mode 100644 app/upgrade/v20140131.go create mode 100644 view/ling/error/error.html create mode 100644 view/ling/error/notfound.html diff --git a/app/app.go b/app/app.go index 784441c..ed08dd3 100644 --- a/app/app.go +++ b/app/app.go @@ -16,7 +16,7 @@ import ( ) var ( - VERSION = 20140130 + VERSION = 20140131 App *GoInk.App staticFileSuffix = ".css,.js,.jpg,.jpeg,.png,.gif,.ico,.xml,.zip,.txt,.html,.otf,.svg,.eot,.woff,.ttf,.doc,.ppt,.xls,.docx,.pptx,.xlsx" uploadFileSuffix = ".jpg,.png,.gif,.zip,.txt,.doc,.docx,.xls,.xlsx,.ppt,.pptx" diff --git a/app/cmd/zip.go b/app/cmd/zip.go index a2d9e49..526fa1b 100644 --- a/app/cmd/zip.go +++ b/app/cmd/zip.go @@ -1,2 +1,2 @@ package cmd -const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9aGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja310YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH1maWVsZHNldCxpbWd7Ym9yZGVyOjB9YWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH1vbCx1bHtsaXN0LXN0eWxlOm5vbmV9Y2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfXE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ31hYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH1zdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9c3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfWlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9bGVnZW5ke2NvbG9yOiMwMDB9aHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9YXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn1we21hcmdpbi1ib3R0b206MThweH1oMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH1oMXtmb250LXNpemU6MjhweH1oMntmb250LXNpemU6MjRweH1oM3tmb250LXNpemU6MjFweH1oNHtmb250LXNpemU6MTlweH1oNXtmb250LXNpemU6MTZweH1oNntmb250LXNpemU6MTRweH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0ubGVmdHtmbG9hdDpsZWZ0fS5yaWdodHtmbG9hdDpyaWdodH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9LnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5mYWRlLW91dHtvcGFjaXR5OjB9LmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fS5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0ubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fSNoZWFkZXJ7aGVpZ2h0OjM5cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk7bGluZS1oZWlnaHQ6MzlweDtib3gtc2hhZG93OjAgMCAycHggI2NjYzstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICNjY2N9I2hlYWRlciAubmF2PmF7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzowIDE4cHg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6LTFweH0jaGVhZGVyIC5uYXY+YTpob3Zlcntib3JkZXItY29sb3I6IzAwNzliYztiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0jaGVhZGVyIC5sb2dve2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE0cHggMCAwO21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4fSNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0jaGVhZGVyIC5vdXR7Y29sb3I6I2M3MzgzYX0jaGVhZGVyIC5vdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNlNjQzNDY7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9I2Zvb3RlcntwYWRkaW5nOjI0cHg7YmFja2dyb3VuZDojZjZmNmY2O2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGQ7bWFyZ2luLXRvcDozMHB4O2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHh9I2Zvb3RlciBwe21hcmdpbi1ib3R0b206MH0jZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0uYWRtaW57bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I3Byb2ZpbGV7d2lkdGg6ODAwcHg7bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I3Byb2ZpbGUgLmF2YXRhciBpbWd7d2lkdGg6MTgwcHg7cGFkZGluZzo0cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7aGVpZ2h0OjE4MHB4fSNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9I3Byb2ZpbGUgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0jcHJvZmlsZSAuYmlve21hcmdpbi1sZWZ0Ojc1cHg7aGVpZ2h0OjE2MHB4fSNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0jYXJ0aWNsZS1saXN0e21hcmdpbi1ib3R0b206MjRweH0jYXJ0aWNsZS1saXN0IGxpe21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jYXJ0aWNsZS1saXN0IGxpPip7bWFyZ2luLXJpZ2h0OjE2cHh9I2FydGljbGUtbGlzdCBsaSAudGltZSwjYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Y29sb3I6Izk5OX0jYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0jYXJ0aWNsZS1saXN0IGxpIC5pcy1jb21tZW50e2NvbG9yOiNmZjQ0NDd9I2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0jYXJ0aWNsZS1saXN0IGxpIC5kZWwsI2FydGljbGUtbGlzdCBsaSAuZWRpdHtvcGFjaXR5OjB9I2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfSNhcnRpY2xlLWxpc3QgbGk6Zmlyc3QtY2hpbGQgaDR7cGFkZGluZy10b3A6MH0jYXJ0aWNsZS1mb3Jte21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfSNhcnRpY2xlLWZvcm0gaW5wdXQudGl0bGV7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLWJvdHRvbTpub25lO21hcmdpbi1ib3R0b206LTFweDtmb250LXNpemU6MThweH0jYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9I2FydGljbGUtZm9ybSAucHJldmlld3tib3JkZXI6MXB4IHNvbGlkICM5OTk7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTJweDtoZWlnaHQ6NzAwcHg7bWFyZ2luLWxlZnQ6LTFweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdy14OnNjcm9sbH0jYXJ0aWNsZS1mb3JtIC5mb3JtLXZlcnRpY2Fse3dpZHRoOjEwMCU7bWFyZ2luLXRvcDoxOHB4fSNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgaW5wdXQuaXB0e3dpZHRoOjMwMHB4fSNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0jYXJ0aWNsZS1mb3JtIC5mb3JtLXZlcnRpY2FsIC5idG57bWFyZ2luLXJpZ2h0OjE2cHh9I2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzc3twYWRkaW5nOjAgMTJweDtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMik7Y29sb3I6IzY2Njtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9I2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9I3NldHRpbmctZm9ybXt3aWR0aDo4MjBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jc2V0dGluZy1mb3JtIC5pcHR7d2lkdGg6NDgwcHh9I3NldHRpbmctZm9ybSAuaW52YWxpZHttYXJnaW4tbGVmdDo3NXB4fSNzZXR0aW5nLWZvcm0gbGFiZWx7bWluLXdpZHRoOjEwZW19I3NldHRpbmctZm9ybSAudGlwLmJsb2Nre21hcmdpbi1sZWZ0OjEyZW19I3NldHRpbmctZm9ybS5jdXN0b217d2lkdGg6MTAwMHB4fSNzZXR0aW5nLWZvcm0uY3VzdG9tIGlucHV0LmtleXt3aWR0aDoyNTBweH0jc2V0dGluZy1mb3JtLmN1c3RvbSBpbnB1dC52YWx1ZXt3aWR0aDo2NTBweH0jc2V0dGluZy1mb3JtLmN1c3RvbSAuaXRlbXttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jc2V0dGluZy1mb3JtLmN1c3RvbSAuZGVse21hcmdpbi1sZWZ0OjEycHg7Y29sb3I6I2U2NDM0Nn0jc2V0dGluZy1mb3JtLmN1c3RvbSAudGlwe21hcmdpbi1sZWZ0OjB9I2NvbW1lbnQtbGlzdCAuYy1hdmF0YXJ7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjJweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O21hcmdpbi1yaWdodDoxOHB4fSNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9I2NvbW1lbnQtbGlzdCAuYy10aW1le2NvbG9yOiM5OTk7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jY29tbWVudC1saXN0IC5jLXRpbWUgLmZhe21hcmdpbi1yaWdodDo2cHh9I2NvbW1lbnQtbGlzdCAuYy1jbnR7Y29sb3I6Izk5OX0jY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfSNjb21tZW50LWxpc3QgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxM3B4fSNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifSNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiM2NjZ9I2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0jY29tbWVudC1saXN0IC5jLWNoZWNrLCNjb21tZW50LWxpc3QgLmMtZGVse2NvbG9yOiNlNjQzNDZ9I2NvbW1lbnQtbGlzdCAuYy1jaGVjayAuZmEsI2NvbW1lbnQtbGlzdCAuYy1kZWwgLmZhe21hcmdpbi1yaWdodDo2cHh9I2NvbW1lbnQtbGlzdCAuYy1jaGVjazpob3ZlciwjY29tbWVudC1saXN0IC5jLWRlbDpob3Zlcntjb2xvcjojYWEzOTNjfSNjb21tZW50LWZvcm17cGFkZGluZy10b3A6MTJweDtkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6NzJweH0jY29tbWVudC1mb3JtIC5idG57bWFyZ2luLXJpZ2h0OjI0cHh9I2NvbW1lbnQtY29udGVudHt3aWR0aDo1MDBweDtoZWlnaHQ6ODBweDttYXJnaW4tcmlnaHQ6MjRweH0jZmlsZXMtbGlzdCBsaS5maWxle21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZmlsZXMtbGlzdCBsaS5maWxlPip7bWFyZ2luLXJpZ2h0OjE2cHh9I2ZpbGVzLWxpc3QgbGkuZmlsZTpob3ZlciAuZGVse29wYWNpdHk6MSAhaW1wb3J0YW50fSNmaWxlcy1saXN0IC51cGxvYWQtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2ZpbGVzLWxpc3QgLmRlbHtjb2xvcjojZTY0MzQ2fSNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0jZmlsZXMtbGlzdCAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9I2ZpbGVzLWxpc3QgLnNpemV7d2lkdGg6NGVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfSNwbHVnaW4tbGlzdCBsaXttYXJnaW4tYm90dG9tOjE2cHg7cGFkZGluZy1ib3R0b206MTZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jcGx1Z2luLWxpc3QgbGkgLmRlc2N7bWFyZ2luLWJvdHRvbTowO3dpZHRoOjk5JTtjb2xvcjojOTk5fSNwbHVnaW4tbGlzdCBsaSBhLmxibHtwYWRkaW5nOjAgOHB4O21hcmdpbi1sZWZ0OjE2cHh9I3BsdWdpbi1saXN0IGxpIC52ZXJzaW9ue2NvbG9yOiM1MDc2NTA7bWFyZ2luLWxlZnQ6MTZweH0jcGx1Z2luLWxpc3QgbGkgLm5hbWV7Zm9udC1zaXplOjE2cHh9I3BsdWdpbi1saXN0IGxpIC5hY3RpdmV7d2lkdGg6MTJweDtoZWlnaHQ6MTJweDttYXJnaW4tcmlnaHQ6MTZweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDoxMHB4fSNwbHVnaW4tbGlzdCBsaSAuc2V0dGluZ3ttYXJnaW4tbGVmdDoxNnB4fSNwbHVnaW4tc2V0dGluZy1mb3JtIHAuaXRlbXtjbGVhcjpib3RofSNwbHVnaW4tc2V0dGluZy1mb3JtIGxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjZlbTt0ZXh0LWFsaWduOnJpZ2h0O21hcmdpbi1yaWdodDoyZW19I3BsdWdpbi1zZXR0aW5nLWZvcm0gLnRpdGxle3BhZGRpbmctdG9wOjA7bWFyZ2luLWJvdHRvbToxOHB4fSNwbHVnaW4tc2V0dGluZy1mb3JtIGlucHV0LmlwdHt3aWR0aDo2MDBweH0jZGFzaGJvYXJkIC5ncmlkLTEtNXttYXJnaW4tcmlnaHQ6NCV9I2Rhc2hib2FyZCAucXVpY2stbGluayBsaXtsaXN0LXN0eWxlOmluc2lkZSBkaXNjO21hcmdpbi1ib3R0b206NnB4O3BhZGRpbmctYm90dG9tOjZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZGFzaGJvYXJkIC5zdGF0cyAubGJse3BhZGRpbmc6MXB4IDVweDttYXJnaW46MCAzcHh9UEsHCNzwws9OLAAATiwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAHN0YXRpY1xjc3NcY21kLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9aGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja310YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH1maWVsZHNldCxpbWd7Ym9yZGVyOjB9YWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH1vbCx1bHtsaXN0LXN0eWxlOm5vbmV9Y2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfXE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ31hYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH1zdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9c3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfWlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9bGVnZW5ke2NvbG9yOiMwMDB9aHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9YXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn1we21hcmdpbi1ib3R0b206MThweH1oMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH1oMXtmb250LXNpemU6MjhweH1oMntmb250LXNpemU6MjRweH1oM3tmb250LXNpemU6MjFweH1oNHtmb250LXNpemU6MTlweH1oNXtmb250LXNpemU6MTZweH1oNntmb250LXNpemU6MTRweH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0ubGVmdHtmbG9hdDpsZWZ0fS5yaWdodHtmbG9hdDpyaWdodH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9LnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5mYWRlLW91dHtvcGFjaXR5OjB9LmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fS5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0ubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fS5jbWR7bWFyZ2luOjI0cHggNDhweH0uY21kLWhlYWRlcnttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jYmFja3VwLWJ0bnttYXJnaW46MTBweCAwIDAgMzBweH0uY21kLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2JhY2t1cC1saXN0IGxpe2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGU7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jYmFja3VwLWxpc3QgbGk+c3BhbiwjYmFja3VwLWxpc3QgbGk+YXttYXJnaW4tcmlnaHQ6MTZweH0jYmFja3VwLWxpc3QgbGkgLmRlbHtjb2xvcjojZTY0MzQ2O29wYWNpdHk6MH0jYmFja3VwLWxpc3QgbGk6aG92ZXIgLmRlbHtvcGFjaXR5OjF9UEsHCDARqHlDFgAAQxYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHN0YXRpY1xjc3NcY29kZW1pcnJvci5jc3MvKiBCQVNJQ1MgKi8KCi5Db2RlTWlycm9yIHsKICAgIC8qIFNldCBoZWlnaHQsIHdpZHRoLCBib3JkZXJzLCBhbmQgZ2xvYmFsIGZvbnQgcHJvcGVydGllcyBoZXJlICovCiAgICBmb250LWZhbWlseTogQ29uc29sYXMsICJNaWNyb3NvZnQgWWFIZWkiLCAiQ291cmllciBOZXciLCBBcmlhbDsKICAgIGhlaWdodDogNjYwcHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBib3JkZXI6MXB4IHNvbGlkICM5OTk7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiBTZXQgc2Nyb2xsaW5nIGJlaGF2aW91ciBoZXJlICovCiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLyogUEFERElORyAqLwoKLkNvZGVNaXJyb3ItbGluZXMgewogICAgcGFkZGluZzogNHB4IDA7IC8qIFZlcnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAqLwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyAvKiBUaGUgbGl0dGxlIHNxdWFyZSBiZXR3ZWVuIEggYW5kIFYgc2Nyb2xsYmFycyAqLwp9CgovKiBHVVRURVIgKi8KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVycyB7Cn0KCi5Db2RlTWlycm9yLWxpbmVudW1iZXIgewogICAgcGFkZGluZzogMCAzcHggMCA1cHg7CiAgICBtaW4td2lkdGg6IDIwcHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIGNvbG9yOiAjNTU1OwogICAgbGluZS1oZWlnaHQ6IDIwcHg7Cn0KCi8qIENVUlNPUiAqLwoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7CiAgICB6LWluZGV4OiAzOwp9CgovKiBTaG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0ICovCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHNpbHZlcjsKfQoKLkNvZGVNaXJyb3IuY20ta2V5bWFwLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHdpZHRoOiBhdXRvOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogIzdlNzsKICAgIHotaW5kZXg6IDE7Cn0KCi8qIENhbiBzdHlsZSBjdXJzb3IgZGlmZmVyZW50IGluIG92ZXJ3cml0ZSAobm9uLWluc2VydCkgbW9kZSAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IuQ29kZU1pcnJvci1vdmVyd3JpdGUgewp9CgouY20tdGFiIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLyogREVGQVVMVCBUSEVNRSAqLwoKLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7CiAgICBjb2xvcjogIzcwODsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7CiAgICBjb2xvcjogIzIxOTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHsKICAgIGNvbG9yOiAjMTY0Owp9CgouY20tcy1kZWZhdWx0IC5jbS1kZWYgewogICAgY29sb3I6ICMwMGY7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzA1YTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMyB7CiAgICBjb2xvcjogIzA4NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcHJvcGVydHkgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICNhNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZyB7CiAgICBjb2xvcjogI2ExMTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nLTIgewogICAgY29sb3I6ICNmNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW1ldGEgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1YWxpZmllciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnVpbHRpbiB7CiAgICBjb2xvcjogIzMwYTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnJhY2tldCB7CiAgICBjb2xvcjogIzk5NzsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdGFnIHsKICAgIGNvbG9yOiAjMTcwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICMwMGM7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhlYWRlciB7CiAgICBjb2xvcjogYmx1ZTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUgewogICAgY29sb3I6ICMwOTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhyIHsKICAgIGNvbG9yOiAjOTk5Owp9CgouY20tcy1kZWZhdWx0IC5jbS1saW5rIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tbmVnYXRpdmUgewogICAgY29sb3I6ICNkNDQ7Cn0KCi5jbS1wb3NpdGl2ZSB7CiAgICBjb2xvcjogIzI5MjsKfQoKLmNtLWhlYWRlciwgLmNtLXN0cm9uZyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLWVtIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmNtLWxpbmsgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWVycm9yIHsKICAgIGNvbG9yOiAjZjAwOwp9CgouY20taW52YWxpZGNoYXIgewogICAgY29sb3I6ICNmMDA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICMwZjA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICNmMjI7Cn0KCi5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjZThmMmZmOwp9CgovKiBTVE9QICovCgovKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgY29udGFpbnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZgogICB0aGUgZWRpdG9yLiBZb3UgcHJvYmFibHkgc2hvdWxkbid0IHRvdWNoIHRoZW0uICovCgouQ29kZU1pcnJvciB7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIGNvbG9yOiBibGFjazsKfQoKLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIC8qIDMwcHggaXMgdGhlIG1hZ2ljIG1hcmdpbiB1c2VkIHRvIGhpZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJhcnMgKi8KICAgIC8qIFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAgICBtYXJnaW4tYm90dG9tOiAtMzBweDsKICAgIG1hcmdpbi1yaWdodDogLTMwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdXRsaW5lOiBub25lOyAvKiBQcmV2ZW50IGRyYWdnaW5nIGZyb20gaGlnaGxpZ2h0aW5nIHRoZSBlbGVtZW50ICovCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KCi5Db2RlTWlycm9yLXNpemVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLyogVGhlIGZha2UsIHZpc2libGUgc2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSByZWRyYXcgZHVyaW5nIHNjcm9sbGluZwogICBiZWZvcmUgYWN0dWFsbCBzY3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNoYWtpbmcgYW5kCiAgIGZsaWNrZXJpbmcgYXJ0aWZhY3RzLiAqLwouQ29kZU1pcnJvci12c2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHotaW5kZXg6IDY7CiAgICBkaXNwbGF5OiBub25lOwp9CgouQ29kZU1pcnJvci12c2Nyb2xsYmFyIHsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcmZsb3cteTogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1oc2Nyb2xsYmFyIHsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBvdmVyZmxvdy14OiBzY3JvbGw7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIgewogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIgewogICAgbGVmdDogMDsKICAgIGJvdHRvbTogMDsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVycyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgdG9wOiAwOwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICB6LWluZGV4OiAzOwp9CgouQ29kZU1pcnJvci1ndXR0ZXIgewogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGhlaWdodDogMTAwJTsKICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgbWFyZ2luLWJvdHRvbTogLTMycHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAvKiBIYWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqLwogICAgKnpvb206IDE7CiAgICAqZGlzcGxheTogaW5saW5lOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZWx0IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIHotaW5kZXg6IDQ7Cn0KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIGN1cnNvcjogdGV4dDsKfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIC8qIFJlc2V0IHNvbWUgc3R5bGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgbWlnaHQgaGF2ZSBzZXQgKi8KICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItd2lkdGg6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgbWFyZ2luOiAwOwogICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIHotaW5kZXg6IDI7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKfQoKLkNvZGVNaXJyb3Itd3JhcCBwcmUgewogICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC1icmVhazogbm9ybWFsOwp9CgouQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICB3aWR0aDogLXdlYmtpdC1maXQtY29udGVudDsKICAgIHdpZHRoOiAtbW96LWZpdC1jb250ZW50OwogICAgd2lkdGg6IGZpdC1jb250ZW50Owp9CgouQ29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLWNvZGUgcHJlIHsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiBhdXRvOwp9CgouQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB6LWluZGV4OiAwOwp9CgouQ29kZU1pcnJvci1saW5ld2lkZ2V0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLkNvZGVNaXJyb3Itd2lkZ2V0IHsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwgewogICAgb3ZlcmZsb3cteDogaGlkZGVuOwp9CgouQ29kZU1pcnJvci1tZWFzdXJlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUgewogICAgcG9zaXRpb246IHN0YXRpYzsKfQoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiAwOwp9CgouQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgouQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDlkOWQ5Owp9CgouQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICNkN2Q0ZjA7Cn0KCi5jbS1zZWFyY2hpbmcgewogICAgYmFja2dyb3VuZDogI2ZmYTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDAsIC40KTsKfQoKLyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVybmluZyBmdW5ueSBvZmZzZXRUb3BzIG9uIHRoZSBzcGFucyAqLwouQ29kZU1pcnJvciBzcGFuIHsKICAgICp2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207Cn0KCkBtZWRpYSBwcmludCB7CiAgICAvKiBIaWRlIHRoZSBjdXJzb3Igd2hlbiBwcmludGluZyAqLwogICAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9Cn0KCi5jbS1zLWJhc2UxNi1kYXJrLkNvZGVNaXJyb3IgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGNvbG9yOiAjZTBlMGUwOwp9CgouY20tcy1iYXNlMTYtZGFyayBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjMjAyMDIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGJvcmRlci1yaWdodDogMHB4Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1jdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYjBiMGIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tY29tbWVudCB7CiAgICBjb2xvcjogIzhmNTUzNjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdG9tIHsKICAgIGNvbG9yOiAjYWE3NTlmOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLW51bWJlciB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1wcm9wZXJ0eSwgLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20ta2V5d29yZCB7CiAgICBjb2xvcjogI2FjNDE0MjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1zdHJpbmcgewogICAgY29sb3I6ICNmNGJmNzU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzZhOWZiNTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1kZWYgewogICAgY29sb3I6ICNkMjg0NDU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYnJhY2tldCB7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS10YWcgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tbGluayB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1lcnJvciB7CiAgICBiYWNrZ3JvdW5kOiAjYWM0MTQyOwogICAgY29sb3I6ICNiMGIwYjA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjMkYyRjJGICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9ClBLBwgjAzWCTiAAAE4gAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAABzdGF0aWNcY3NzXGNvbW1vbi5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfWhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9dGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9ZmllbGRzZXQsaW1ne2JvcmRlcjowfWFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9b2wsdWx7bGlzdC1zdHlsZTpub25lfWNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH1xOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9YWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9c3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfXN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWxlZ2VuZHtjb2xvcjojMDAwfWh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifWF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9cHttYXJnaW4tYm90dG9tOjE4cHh9aDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9aDF7Zm9udC1zaXplOjI4cHh9aDJ7Zm9udC1zaXplOjI0cHh9aDN7Zm9udC1zaXplOjIxcHh9aDR7Zm9udC1zaXplOjE5cHh9aDV7Zm9udC1zaXplOjE2cHh9aDZ7Zm9udC1zaXplOjE0cHh9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmxlZnR7ZmxvYXQ6bGVmdH0ucmlnaHR7ZmxvYXQ6cmlnaHR9LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfS52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uYmxvY2t7ZGlzcGxheTpibG9ja30uZmFkZS1vdXR7b3BhY2l0eTowfS5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5jb250YWluZXJ7d2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7d2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99LmdyaWQtMS0ye3dpZHRoOjUwJX0uZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9LmdyaWQtMS00e3dpZHRoOjI1JX0uZ3JpZC0xLTV7d2lkdGg6MjAlfS5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0uZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9LmdyaWQtMy00e3dpZHRoOjc1JX0uZ3JpZC0zLTV7d2lkdGg6NjAlfS5ncmlkLTQtNXt3aWR0aDo4MCV9LmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfWlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9LmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0uZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9LmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfS5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9LmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9LmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0uZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9LmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn1hLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9LmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfS5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifS5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9LmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn1hLmxibHtsaW5lLWhlaWdodDoyNnB4fWEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0ubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9YS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0ubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifWEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifS5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfS5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9LnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifS5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Lm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0ubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHg7cGFkZGluZy1ib3R0b206MTJweH0ubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Lm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fS5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0ubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Lm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fS5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0ubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0ubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0ubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfS5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0ubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0ubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0ubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Lm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfS5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fS5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9UEsHCHu8/YwmFAAAJhQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xjc3NcaGlnaGxpZ2h0LmNzcy8qDQoNClN1bmJ1cnN0LWxpa2Ugc3R5bGUgKGMpIFZhc2lseSBQb2xvdm55b3YgPHZhc3RAd2hpdGVhbnRzLm5ldD4NCg0KKi8NCg0KcHJlIGNvZGUgew0KICAgIGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAwLjVlbTsNCiAgICBiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2Y4ZjhmODsNCn0NCg0KcHJlIC5jb21tZW50LA0KcHJlIC50ZW1wbGF0ZV9jb21tZW50LA0KcHJlIC5qYXZhZG9jIHsNCiAgICBjb2xvcjogI2FlYWVhZTsNCiAgICBmb250LXN0eWxlOiBpdGFsaWM7DQp9DQoNCnByZSAua2V5d29yZCwNCnByZSAucnVieSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnJlcXVlc3QsDQpwcmUgLnN0YXR1cywNCnByZSAubmdpbnggLnRpdGxlIHsNCiAgICBjb2xvcjogI0UyODk2NDsNCn0NCg0KcHJlIC5mdW5jdGlvbiAua2V5d29yZCwNCnByZSAuc3ViIC5rZXl3b3JkLA0KcHJlIC5tZXRob2QsDQpwcmUgLmxpc3QgLnRpdGxlIHsNCiAgICBjb2xvcjogIzk5Q0Y1MDsNCn0NCg0KcHJlIC5zdHJpbmcsDQpwcmUgLnRhZyAudmFsdWUsDQpwcmUgLmNkYXRhLA0KcHJlIC5maWx0ZXIgLmFyZ3VtZW50LA0KcHJlIC5hdHRyX3NlbGVjdG9yLA0KcHJlIC5hcGFjaGUgLmNicmFja2V0LA0KcHJlIC5kYXRlLA0KcHJlIC50ZXggLmNvbW1hbmQsDQpwcmUgLmNvZmZlZXNjcmlwdCAuYXR0cmlidXRlIHsNCiAgICBjb2xvcjogIzY1QjA0MjsNCn0NCg0KcHJlIC5zdWJzdCB7DQogICAgY29sb3I6ICNEQUVGQTM7DQp9DQoNCnByZSAucmVnZXhwIHsNCiAgICBjb2xvcjogI0U5QzA2MjsNCn0NCg0KcHJlIC50aXRsZSwNCnByZSAuc3ViIC5pZGVudGlmaWVyLA0KcHJlIC5waSwNCnByZSAudGFnLA0KcHJlIC50YWcgLmtleXdvcmQsDQpwcmUgLmRlY29yYXRvciwNCnByZSAuc2hlYmFuZywNCnByZSAucHJvbXB0IHsNCiAgICBjb2xvcjogIzg5QkRGRjsNCn0NCg0KcHJlIC5jbGFzcyAudGl0bGUsDQpwcmUgLmhhc2tlbGwgLnR5cGUsDQpwcmUgLnNtYWxsdGFsayAuY2xhc3MsDQpwcmUgLmphdmFkb2N0YWcsDQpwcmUgLnlhcmRvY3RhZywNCnByZSAucGhwZG9jIHsNCiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCg0KcHJlIC5zeW1ib2wsDQpwcmUgLnJ1YnkgLnN5bWJvbCAuc3RyaW5nLA0KcHJlIC5udW1iZXIgew0KICAgIGNvbG9yOiAjMzM4N0NDOw0KfQ0KDQpwcmUgLnBhcmFtcywNCnByZSAudmFyaWFibGUsDQpwcmUgLmNsb2p1cmUgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICMzRTg3RTM7DQp9DQoNCnByZSAuY3NzIC50YWcsDQpwcmUgLnJ1bGVzIC5wcm9wZXJ0eSwNCnByZSAucHNldWRvLA0KcHJlIC50ZXggLnNwZWNpYWwgew0KICAgIGNvbG9yOiAjQ0RBODY5Ow0KfQ0KDQpwcmUgLmNzcyAuY2xhc3Mgew0KICAgIGNvbG9yOiAjOUI3MDNGOw0KfQ0KDQpwcmUgLnJ1bGVzIC5rZXl3b3JkIHsNCiAgICBjb2xvcjogI0M1QUY3NTsNCn0NCg0KcHJlIC5ydWxlcyAudmFsdWUgew0KICAgIGNvbG9yOiAjQ0Y2QTRDOw0KfQ0KDQpwcmUgLmNzcyAuaWQgew0KICAgIGNvbG9yOiAjOEI5OEFCOw0KfQ0KDQpwcmUgLmFubm90YXRpb24sDQpwcmUgLmFwYWNoZSAuc3FicmFja2V0LA0KcHJlIC5uZ2lueCAuYnVpbHRfaW4gew0KICAgIGNvbG9yOiAjOUI4NTlEOw0KfQ0KDQpwcmUgLnByZXByb2Nlc3NvciwNCnByZSAucHJhZ21hIHsNCiAgICBjb2xvcjogIzg5OTZBODsNCn0NCg0KcHJlIC5oZXhjb2xvciwNCnByZSAuY3NzIC52YWx1ZSAubnVtYmVyIHsNCiAgICBjb2xvcjogI0REN0IzQjsNCn0NCg0KcHJlIC5jc3MgLmZ1bmN0aW9uIHsNCiAgICBjb2xvcjogI0RBRDA4NTsNCn0NCg0KcHJlIC5kaWZmIC5oZWFkZXIsDQpwcmUgLmNodW5rLA0KcHJlIC50ZXggLmZvcm11bGEgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwRTIyMzE7DQogICAgY29sb3I6ICNGOEY4Rjg7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmRpZmYgLmNoYW5nZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzRBNDEwRDsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5hZGRpdGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI1M0IyMjsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5kZWxldGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzQyMEUwOTsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5jb2ZmZWVzY3JpcHQgLmphdmFzY3JpcHQsDQpwcmUgLmphdmFzY3JpcHQgLnhtbCwNCnByZSAudGV4IC5mb3JtdWxhLA0KcHJlIC54bWwgLmphdmFzY3JpcHQsDQpwcmUgLnhtbCAudmJzY3JpcHQsDQpwcmUgLnhtbCAuY3NzLA0KcHJlIC54bWwgLmNkYXRhIHsNCiAgICBvcGFjaXR5OiAwLjU7DQp9DQoNCnByZSAuZ28gLnR5cGVuYW1lew0KICAgIGNvbG9yOiAjZmZiYzU0Ow0KfVBLBwjDaOPeXQkAAF0JAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcY3NzXGxpbmcuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH1oZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfWZpZWxkc2V0LGltZ3tib3JkZXI6MH1hZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfW9sLHVse2xpc3Qtc3R5bGU6bm9uZX1jYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9cTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfWFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfXN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH1zdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1sZWdlbmR7Y29sb3I6IzAwMH1odG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn1he3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifXB7bWFyZ2luLWJvdHRvbToxOHB4fWgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfWgxe2ZvbnQtc2l6ZToyOHB4fWgye2ZvbnQtc2l6ZToyNHB4fWgze2ZvbnQtc2l6ZToyMXB4fWg0e2ZvbnQtc2l6ZToxOXB4fWg1e2ZvbnQtc2l6ZToxNnB4fWg2e2ZvbnQtc2l6ZToxNHB4fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5sZWZ0e2Zsb2F0OmxlZnR9LnJpZ2h0e2Zsb2F0OnJpZ2h0fS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0udmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmZhZGUtb3V0e29wYWNpdHk6MH0uaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99LmNvbnRhaW5lcjk2MHttYXgtd2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99LmdyaWQtMS0ye3dpZHRoOjUwJX0uZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9LmdyaWQtMS00e3dpZHRoOjI1JX0uZ3JpZC0xLTV7d2lkdGg6MjAlfS5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0uZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9LmdyaWQtMy00e3dpZHRoOjc1JX0uZ3JpZC0zLTV7d2lkdGg6NjAlfS5ncmlkLTQtNXt3aWR0aDo4MCV9LmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfWlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9LmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0uZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9LmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfS5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9LmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9LmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0uZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9LmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn1hLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9LmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfS5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifS5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9LmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn1hLmxibHtsaW5lLWhlaWdodDoyNnB4fWEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0ubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9YS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0ubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifWEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifS5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfS5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9LnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifS5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Lm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0ubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHh9Lm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fS5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Lm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fS5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0ubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Lm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fS5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0ubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0ubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0ubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfS5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0ubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0ubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0ubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Lm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfS5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fS5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9aHRtbCxib2R5e2JhY2tncm91bmQ6I2YzZjNmM30jaGVhZGVye2JhY2tncm91bmQ6IzAwOTNjNDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzo0MHB4IDAgNDhweCAwO2NvbG9yOiNmYmZiZmJ9I2hlYWRlciBhOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy1tb3otdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy13ZWJraXQtdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzfSNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7Ym9yZGVyLXJhZGl1czo1MHB4Oy1tb3otYm9yZGVyLXJhZGl1czo1MHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo1MHB4fSNoZWFkZXItaHtsaW5lLWhlaWdodDo5NHB4O2NvbG9yOiNmYmZiZmI7cGFkZGluZzowO21hcmdpbi1sZWZ0OjI0cHh9I2hlYWRlci1oIGF7Y29sb3I6I2ZiZmJmYn0jbmF2e2xpbmUtaGVpZ2h0OjkwcHh9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O21hcmdpbi1sZWZ0OjQ0cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiNmM2YzZjM7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9I2Zvb3RlcntwYWRkaW5nOjMwcHggNDBweDtjb2xvcjojOTk5fSNtYWlue21hcmdpbjozMHB4IGF1dG99I2dvLXRvcHtib3R0b206NTBweDtyaWdodDo0MHB4O3Bvc2l0aW9uOmZpeGVkO2NvbG9yOiNmZmY7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjhweDtvcGFjaXR5Oi40fSNhcnRpY2xlLWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0jYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAudmlld3N7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRze3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czozNnB4Oy1tb3otYm9yZGVyLXJhZGl1czozNnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozNnB4O2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1zaXplOjI0cHg7cGFkZGluZzowO21hcmdpbi10b3A6NDBweDttYXJnaW4tbGVmdDo4cHg7Ym9yZGVyOjZweCBzb2xpZCAjZmZmO2JveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy1tb3otYm94LXNoYWRvdzowIDAgMnB4ICM5OTk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggIzk5OX0jYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzIGF7Y29sb3I6I2ZmZn0jYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzOmhvdmVye2JveC1zaGFkb3c6MCAwIDRweCAjNjY2Oy1tb3otYm94LXNoYWRvdzowIDAgNHB4ICM2NjY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA0cHggIzY2Nn0jYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze3RvcDoxNHB4O2xlZnQ6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czozMHB4Oy1tb3otYm9yZGVyLXJhZGl1czozMHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozMHB4O3BhZGRpbmc6MDtib3JkZXI6NHB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDoxMTZweDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDFweCAycHggI2JiYjstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiO2JhY2tncm91bmQ6I2ZmZjtwYWRkaW5nOjE4cHggMjRweH0jYXJ0aWNsZS1jb250YWluZXIgLm1haW46YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztib3JkZXI6MTFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtY29sb3I6I2ZmZjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NjNweDtsZWZ0Oi0yMnB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbiAudGl0bGV7Zm9udC1zaXplOjI4cHg7cGFkZGluZy1ib3R0b206MjRweH0jYXJ0aWNsZS1jb250YWluZXIgLm1haW4gLnRpbWUtaW5mb3tjb2xvcjojOTk5O21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO3RleHQtaW5kZW50OjFlbTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNhcnRpY2xlLWNvbnRhaW5lciBhcnRpY2xle21hcmdpbi1ib3R0b206NTBweH0jYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWlue21hcmdpbi1sZWZ0OjB9I2FydGljbGUtY29udGFpbmVyIC5hcnRpY2xlLXNpbmdsZSAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfSNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1ldGF7cmlnaHQ6NDRweDt0b3A6LTM2cHh9I2FydGljbGUtY29udGFpbmVyIC5hcnRpY2xlLXNpbmdsZSAudmlld3N7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjM2cHg7LW1vei1ib3JkZXItcmFkaXVzOjM2cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjM2cHg7bGluZS1oZWlnaHQ6NTZweDtmb250LXNpemU6MjRweDtwYWRkaW5nOjA7Ym9yZGVyOjZweCBzb2xpZCAjZmZmfSNhcnRpY2xlLWNvbnRhaW5lciAudGFne2NvbG9yOiM5OTl9I2FydGljbGUtcGFnZXJ7bWFyZ2luLWxlZnQ6MTE2cHh9I2FydGljbGUtcGFnZXIgLml0ZW17bWFyZ2luOjA7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM5OTk7cGFkZGluZzoxMnB4IDE4cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQ6IzAwNzliY30jY29tbWVudHtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDFweCAycHggI2JiYjstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiO2JhY2tncm91bmQ6I2ZmZjtwYWRkaW5nOjE4cHggMjRweH0jY29tbWVudCAubWV0YXtyaWdodDotMjRweDt0b3A6LTMwcHh9I2NvbW1lbnQgLm1ldGEgLmNvbW1lbnRze21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDowfSNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbTozMnB4fSNjb21tZW50LWxpc3QgLmMtYXZhdGFye21hcmdpbi1yaWdodDoxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDttYXJnaW4tdG9wOjZweH0jY29tbWVudC1saXN0IC5jLW1ldGEgcHttYXJnaW4tYm90dG9tOjB9I2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3J7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmJsb2NrfSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3I6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0jY29tbWVudC1saXN0IC5jLW1ldGEgLmMtcmVwbHl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNkZGQ7cGFkZGluZzozcHggMTBweH0jY29tbWVudC1saXN0IC5jLW1ldGEgLmMtcmVwbHk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfSNjb21tZW50LWxpc3QgLmMtY29udGVudHtwYWRkaW5nLXRvcDo0cHh9I2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2O21hcmdpbi1sZWZ0OjEycHh9I2NvbW1lbnQtbGlzdCAuYy1wLW1ke21hcmdpbi10b3A6MTJweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9I2NvbW1lbnQtc2hvd3ttYXJnaW4tYm90dG9tOjMycHh9I2NvbW1lbnQtdGl0bGV7bWFyZ2luLWJvdHRvbToyMHB4O3BhZGRpbmctYm90dG9tOjIwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2NvbW1lbnQtZm9ybXt3aWR0aDo4MCU7bWFyZ2luOmF1dG87bWFyZ2luLWJvdHRvbTozMHB4fSNjb21tZW50LWZvcm0gLmMtaW5mb3t3aWR0aDoyNiV9I2NvbW1lbnQtZm9ybSAuYy1pbmZvIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjB9I2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjcwJX0jY29tbWVudC1mb3JtIC5jLWF2YXRhcntib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHg7d2lkdGg6NTBweH0jY29tbWVudC1mb3JtIC5yZXBseS1tZHttYXJnaW4tYm90dG9tOjE2cHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9I2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDowfSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXtkaXNwbGF5Om5vbmV9I2FydGljbGUtY29udGFpbmVyIC5tYWluOmJlZm9yZXtkaXNwbGF5Om5vbmV9I2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9I2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH0jbmF2LCNoZWFkZXItaHtsaW5lLWhlaWdodDo1MHB4fX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30jaGVhZGVyLWh7bWFyZ2luLWxlZnQ6MH0jaGVhZGVyLWltZ3tkaXNwbGF5Om5vbmV9I2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfSNuYXZ7ZmxvYXQ6bGVmdH0jbmF2IGxpe21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjQ0cHh9fVBLBwiNoKylpCkAAKQpAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXHN0eWxlLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9aGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja310YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH1maWVsZHNldCxpbWd7Ym9yZGVyOjB9YWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH1vbCx1bHtsaXN0LXN0eWxlOm5vbmV9Y2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfXE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ31hYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH1zdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9c3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfWlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9bGVnZW5ke2NvbG9yOiMwMDB9aHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9YXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn1we21hcmdpbi1ib3R0b206MThweH1oMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH1oMXtmb250LXNpemU6MjhweH1oMntmb250LXNpemU6MjRweH1oM3tmb250LXNpemU6MjFweH1oNHtmb250LXNpemU6MTlweH1oNXtmb250LXNpemU6MTZweH1oNntmb250LXNpemU6MTRweH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0ubGVmdHtmbG9hdDpsZWZ0fS5yaWdodHtmbG9hdDpyaWdodH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9LnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5mYWRlLW91dHtvcGFjaXR5OjB9LmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fS5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0ubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fWh0bWwsYm9keXtiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2JnLnBuZyIpIHJlcGVhdH0jaGVhZGVye2JhY2tncm91bmQ6dXJsKCIuLi9pbWcvaGVhZGVyLmdpZiIpIHJlcGVhdCAjNGM3Mjk4O21pbi13aWR0aDoxMjBweDtwYWRkaW5nOjMwcHggMDtjb2xvcjojZmJmYmZifSNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjUwcHg7LW1vei1ib3JkZXItcmFkaXVzOjUwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwcHh9I2hlYWRlci1oe3BhZGRpbmctdG9wOjI0cHg7Zm9udC1zaXplOjMycHh9I2hlYWRlci1oIGF7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfSNuYXZ7aGVpZ2h0OjU0cHg7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZiO2JveC1zaGFkb3c6MCAwIDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDAgMnB4ICNiYmI7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggI2JiYjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfSNuYXYgbGl7bGluZS1oZWlnaHQ6NTBweDtwYWRkaW5nOjAgMThweH0jbmF2IGxpIGF7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzMzMztwYWRkaW5nOjAgMzJweDtkaXNwbGF5OmJsb2NrfSNuYXYgbGkgYTpob3Zlcntib3JkZXItYm90dG9tOjRweCBzb2xpZCAjMDA3OWJjfSNuYXYuZml4ZWR7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTt0b3A6MH0jbWFpbnttYXJnaW46MzBweCBhdXRvfSNmb290ZXJ7Y29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOiMxYzI0Mjk7cGFkZGluZzoyNHB4IDB9I2Zvb3RlciBwe21hcmdpbi1ib3R0b206OXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGV0dGVyLXNwYWNpbmc6MXB4fSNmb290ZXIgcCBhe2NvbG9yOiNjY2M7bWFyZ2luOjAgMTZweH0jZm9vdGVyIHAgYTpob3Zlcntjb2xvcjojZmJmYmZifSNmb290ZXIgcCBhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fSNnby10b3B7Ym90dG9tOjUwcHg7cmlnaHQ6NDBweDtwb3NpdGlvbjpmaXhlZDtjb2xvcjojZmZmO3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo4cHg7b3BhY2l0eTouNH0jYXJ0aWNsZS1jb250YWluZXIgLm1ldGF7d2lkdGg6MTA4cHg7bGluZS1oZWlnaHQ6MjRweH0jYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLmZhe21hcmdpbi1yaWdodDo4cHh9I2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnZpZXdzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtjb2xvcjojZmZmfSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSBhe2NvbG9yOiNmZmZ9I2FydGljbGUtY29udGFpbmVyIC5tZXRhIGE6aG92ZXJ7Y29sb3I6I2ZmZn0jYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTQwcHh9I2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxle3BhZGRpbmc6OHB4IDE2cHg7YmFja2dyb3VuZC1jb2xvcjojNGM3Mjk4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjJweH0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYXtjb2xvcjojZWVlfSNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZSBhOmhvdmVye2NvbG9yOiNmZmZ9I2FydGljbGUtY29udGFpbmVyIC5jb250ZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcDpub25lO3BhZGRpbmc6MThweCAyNHB4IDI0cHh9I2FydGljbGUtY29udGFpbmVyIC5pbmZve21hcmdpbi1ib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoycHg7Y29sb3I6Izk5OX0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLmZhe21hcmdpbi1yaWdodDo4cHh9I2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5zaGFyZSAuZmF7bWFyZ2luLXJpZ2h0OjB9I2FydGljbGUtY29udGFpbmVyIC5pbmZvPip7cGFkZGluZzo2cHggMThweH0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8+c3Bhbntib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9I2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZX0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLnJlYWR7Y29sb3I6Izk5OX0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLnJlYWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9I2FydGljbGUtY29udGFpbmVyIC5pbmZvIC50aW1lLCNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAudmlld3Mgc3Bhbntmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNhcnRpY2xlLWNvbnRhaW5lciBhcnRpY2xle21hcmdpbi1ib3R0b206NDhweH0jY29tbWVudHttYXJnaW4tdG9wOi0yNHB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7cGFkZGluZzoyNHB4O2JhY2tncm91bmQ6I2ZmZn0jY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0b30jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfSNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDo3MCV9I2NvbW1lbnQtZm9ybSAuYy1hdmF0YXJ7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjJweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fSNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9I2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0jY29tbWVudC1jb250ZW50e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxODBweDtyZXNpemU6bm9uZX0jY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9I2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjE4cHg7cGFkZGluZy1ib3R0b206MThweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jY29tbWVudC1saXN0IC5jLW1ldGE+KnttYXJnaW4tcmlnaHQ6MTZweH0jY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0jY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfSNjb21tZW50LWxpc3QgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxM3B4fSNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifSNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fSNjb21tZW50LWxpc3QgLmMtc2VjdGlvbnttYXgtd2lkdGg6ODMwcHh9I2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhe21hcmdpbi1yaWdodDo2cHh9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDowfSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YS5sZWZ0e2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0jY29tbWVudC1mb3JtIC5jLWluZm97dGV4dC1hbGlnbjpsZWZ0fX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30jaGVhZGVyLWltZ3tmbG9hdDpsZWZ0O3dpZHRoOjY0cHg7aGVpZ2h0OjY0cHh9I2hlYWRlci1oe3BhZGRpbmc6MTdweCAwO2ZvbnQtc2l6ZToyNHB4fSNoZWFkZXItc3Vie2Rpc3BsYXk6bm9uZX0jYXJ0aWNsZS1jb250YWluZXIgLnRhZ3tkaXNwbGF5Om5vbmV9I2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30jaGVhZGVyLWltZ3tkaXNwbGF5Om5vbmV9I2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSNjb21tZW50LWxpc3QgLmMtYXZhdGFye2Rpc3BsYXk6bm9uZX19UEsHCIgTx+zLJwAAyycAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAHN0YXRpY1xmYXZpY29uLmljbwAAAQABACAgAAABACAAqBAAABYAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAASCwAAEgsAAAAAAAAAAAAAs34H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfgfbs34H27N+B9uzfgfbs34H27N+B9uzfQfbs34H27N+B9uzfQfbs34H27N+B9uzfgfbs34H27J8B9avegfHrX4YrbWTSpC6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6gw3/uoYX/7mBCP+5gQj/uYEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+6gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+6gQj/uoEI/7mBCP+5ggj/uoEI/7qCCP+6ggj/uYEI/7mBCP+5ggj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+6ggj/uYEI/7mBCP+6gQj/uoEI/7qCCP+6ggj/uoEI/7qCCP+6gQj/uoII/7qBCP+6ggj/uoII/7qBCP+6ggj/uoEI/7qBCP+5gQj/uYEI/7mCB/+5ggf/uYIH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7yEBf+8hAX/u4MF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIMF/7yEBf+8hAX/vIMF/7yEBv+8hAb/wIcD/8CGA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CHBP/AhwT/wIYD/8CGAv/FiQL/xYkB/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FigL/xYkB/8WKA//Hjw7/zJon/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mTF//Wr1P/4cB1/+nSn//z583/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjQD/y6A9//Lr3f7+/fr+//////////7KjgD+yo0A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAf/LjgD/y44A/8uNAP/KjgD/y44A/8uOAP/LjgH/y44B/8uOAP/LjgD/y44A/8uOAP/LjgH/yo0A/8uPBv/YuXP/+vn1/v7///7+/v7//v7+/sqOAP7KjQD/y44A/8uOAP/KjgD/yo4A/8qOAP/KjgD/y44A/8uOAP/KjgD/y44A/8uOAP/KjQD/y40A/8uOAf/JjQH/x40I/8qOA//KjQD/y40A/8qNAP/KjQD/yo0A/8uPAv/Qmhv/375x//Xv4P/+/v7+/////v7+/v/+/v7+y44B+suOAP/KjQD/y44A/8uOAf/KjgD/yo4A/8qOAP/LjgD/yo4A/8qOAP/LjgD/y44B/8qOAP/KjQD/yYwA/8eaNP/Bq3n/qItI/82mTv/FmDD/z58x/9amOf/asE//4sJ3//Dfuf/7+PL//v7///7+/v////////////7+/v+8kjK+u4oZ/8ySDP/KjgD/yo0A/8qNAP/KjQD/yo4A/8qOAP/KjgD/yo0A/8qNAP/KjQD/y44B/9CZGP/Jo03/0Mat/+Xl5v+mpaP/6ebf/8S+sf/h2sn++fPj/vv27P/9/Pn//////v////7+/v7//v7+/////////////v7+/5WTjZSZj3n/5s6Z/+C9av/ZrUj/1KMy/9GbH//PlhP/z5UR/8+VEf/Plxf/058o/9mrQ//hv3H/7duz/9DMxP/Dw8P+6urq/ra2tv7o6Oj+tLS1/trb2/79/f3+/v///v7+/v/////+/////v7+/v/+/v7//////v////7////+l5aWlZKSk//29vX//fv3//n05//27df/8uTF//DfuP/u3LL/79yz//Hhu//16c7/+fPk//f18v/Jycr/r6+v/6WkpP+9vb3/lJSU/7m5uf+np6f/sbGx/9HR0f/8/Pz///////7+/v/+/v7//v7+//7+/v////////////7+/v+pqamYkZGR//Ly8v////7//v7+//////////////////7+/v/+/v7//v7///7/////////4eHg/7q5uf/v7+//7Ozs/9fX1//Gxsb/3t7e//X19f/q6uv/uLi4//Hx8f///////v7+/v/////+/v7//v7+/////////////v7+/5ubm2eDg4Pw7e3t///////////+///+/v7+/v/+/v7+//7+/v7+/v75+fn+9vb2/vr6+v7n5+j/t7e3/+3t7f/4+Pj+3d3d/tjY2P7y8vL+/v7+/tjY2P6+vr7++Pj4/v/////////+/////v7+/v/+/v7//////v////7////+NTU1I3Fxcdjm5ub//////v////7//////v7+///////v7+/+0NDQ/76+vv66urr+vr6+/9HR0f7Pz8/+rKys/2dnZ/4rKyv/IyMj/1tbW/+rq6v/vb29/uTk5P7l5eX/2tra/9/f3/7w8PD+/f39//////7+/v7+//////////6NjY0ndXV12tvb2//////+/////v/////+/v7/4eHh/7W1tf7Kysr/4+Pj/ufn5/7j4+P/ycnJ/r6+vv63t7f/LCws/gAAAP8AAAD/BgYG/4aGhv/X19f+vr6+/ry8vP/BwcH/vr6+/rm5uf7Hx8f/8fHx/v////7//////////uDg4CSEhITZxcXF///////////+/////+fn5/+1tbX/5OTk///////////+//////////7+/v7+4ODg/7a2tv+urq7/bm5u/1lZWf+Dg4P/u7u7/76+vv/k5OT++vr6//39/f/8/Pz+8PDw/8rKyv+3t7f/8PDw////////////h4eHgF1dXfGjo6P///////////77+/v/wcHB/8HBwf+tra3/xsbG//r6+v///////v7+//7+/v7/////1tbW/8TExP/29vb/9vb2/93d3f++vr7/5OTk//Hx8f/+/v7//v7+//7+/v7//////f39/83Nzf/Dw8P/+/v7//////+Ghob4lpaW/4uLi//39/f//////+7u7v+rq6v/UlJS/xMTE/9nZ2f/0dHR//39/f/+/v7////////////y8vL/uLi4/+/v7//6+vr/wMDA/5ycnP9UVFT/bm5u/9zc3P/+/v7//////v7+/v//////9PT0/7e3t//r6+v//////+/v7//s7Oz/fHx8/9jY2P7////+5+fn/5OTk/8WFhb/BQUF/zc3N/+ZmZn/+/v7//7+/v/////+//////r6+v/Dw8P/5+fn//Pz8/+srKz/OTk5/wAAAP9FRUX+mJiY//X19f/////+/v7+///////9/f3/xMTE/97e3v///////////9HR0f8zMzP/l5eX///////n5+f/s7Oz/2hoaP8XFxf/Ojo6/8jIyP/+/v7//v7+////////////+Pj4/729vf/r6+v/8PDw/7Ozs/9MTEz/AAAA/w4ODv6CgoL/+vr6//////7+/v7///////7+/v/Hx8f/3Nzc////////////uLi4/xkZGf8/Pz/+39/f/vb29v69vb3/29vb/sTExP7b29v//f39/v7+/v7////+/////v////7l5eX+ubm5/vb29v/z8/P/vr6+/8HBwf5ycnL+fn5+/uDg4P///////v7+/v7+/v7/////+Pj4/ry8vP7m5ub//////v////7x8fH/srKy/4WFhf6Li4v+9PT0/9TU1P+9vb3/+fn5/v/////+/v7+/////v/////////+9vb2/r29vf/W1tb///////39/f/Hx8f/zs7O//n5+f78/Pz+///////////////+/////v/////f39/+ubm5/vj4+P/u7u7+ycnJ//j4+P7/////8vLy/oiIiP6bm5v/9PT0/8jIyP+9vb3+5+fn//r6+v78/Pz++vr6/+fn5/69vb3+ycnJ//r6+v////////////Dw8P+3t7f/2NjY/v39/f7///////////////7////+6enp/7e3t/7i4uL/8fHx/46Ojv5zc3PlkJCQ/qOjo/+goKD+fn5++k5OTuGcnJz74eHh/9bW1v69vb3/wMDA/8HBwf++vr7/ubm5/tbW1v76+vr//////////////////////+np6f+5ubn+w8PD/t/f3//o6Oj/5OTk/szMzP+2trb/3d3d/urq6v+Dg4P/cHBw/6urqz9wcHBmRUVFaUpKSmeFhYVfjIyMOG1tbZt3d3frra2t/9jY2P/k5OT+5eXl/+np6f/29vb+/////////////////v7+//////////////////X19f/W1tb/wsLC/729vf/BwcH/0dHR/+Tk5P/Gxsb/fX1982NjY85ra2vSERERAP///wD///8AvLy8AAAAAAAAAAAAzs7OC3Z2dkVtbW2je3t765mZmf+3t7f/19fX/+jo6P/w8PD/9vb2//r6+v/9/f3////////////////////////////39/f/6urq/93d3f63t7f/jo6O/nx8fOCHh4dyvLy8F3BwcB3Dw8MAgICAACAgIAA/Pz8AmJiYAMbGxgCXl5cB////AMrKyg2pqalTfX19jnBwcMV7e3v3d3d39YGBgfmRkZH8o6Oj+7Ozs/u/v7/7xcXF+8bGxvvAwMD7s7Oz+5ycnPyBgYH6eHh4+nFxccyJiYmLvr6+PP///wWqqqoB////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAAAAAAAUEsHCKlzE/C+EAAAvhAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHN0YXRpY1xpbWcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHN0YXRpY1xpbWdcYmcucG5niVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAIAAACzY+a1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNkU0RkNCRTU1QUFFMjExOTcwMEI1OTlFMjkzRUEwNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowOTcwRjNDRUI1RjgxMUUyOENDMEVGQTk3Q0MyNEI5NSIgeG1wTU06SW5zdGFuY2VJRD0i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ZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjAtYzA2MCA2MS4xMzQ3NzcsIDIwMTAvMDIvMTItMTc6MzI6MDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgTWFjaW50b3NoIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIwMTVBQUMxNTI0NDExRTI4RjEzQTA0OUM5QUZBOTdDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIwMTVBQUMyNTI0NDExRTI4RjEzQTA0OUM5QUZBOTdDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjAxNUFBQkY1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjAxNUFBQzA1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1M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ZWQiKS5yZW1vdmVDbGFzcygidGV4dC1jZW50ZXIiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRuYXYucmVtb3ZlQ2xhc3MoImZpeGVkIikuYWRkQ2xhc3MoInRleHQtY2VudGVyIik7DQogICAgICAgIH0NCiAgICB9KTsNCn0NCg0KZnVuY3Rpb24gdG9wQnV0dG9uKCkgew0KICAgIHZhciB0b3AgPSAkKCcjbmF2Jykub2Zmc2V0KCkudG9wOw0KICAgIHZhciAkdG9wID0gJCgnI2dvLXRvcCcpOw0KICAgICQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAodG9wIDwgJCh0aGlzKS5zY3JvbGxUb3AoKSkgew0KICAgICAgICAgICAgJHRvcC5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJHRvcC5hZGRDbGFzcygnaGlkZScpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJHRvcC5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJ2JvZHksaHRtbCcpLmFuaW1hdGUoe3Njcm9sbFRvcDogMH0sIDUwMCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KQ0KfQ0KDQpmdW5jdGlvbiByZW5kZXJNYXJrZG93bigpIHsNCiAgICB2YXIgJG1kID0gJCgnLm1hcmtkb3duJyk7DQogICAgJG1kLmVhY2goZnVuY3Rpb24gKGksIGl0ZW0pIHsNCiAgICAgICAgJChpdGVtKS5odG1sKG1hcmtlZCgkKGl0ZW0pLmh0bWwoKS5yZXBsYWNlKC8mZ3Q7L2csICc+JykpKTsNCiAgICB9KTsNCiAgICB2YXIgY29kZSA9ICRtZC5maW5kKCdwcmUgY29kZScpOw0KICAgIGlmIChjb2RlLmxlbmd0aCkgew0KICAgICAgICAkKCI8bGluaz4iKS5hdHRyKHsgcmVsOiAic3R5bGVzaGVldCIsIHR5cGU6ICJ0ZXh0L2NzcyIsIGhyZWY6ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIn0pLmFwcGVuZFRvKCJoZWFkIik7DQogICAgICAgICQuZ2V0U2NyaXB0KCIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgY29kZS5lYWNoKGZ1bmN0aW9uIChpLCBpdGVtKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhpdGVtKQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gaW5pdENvbW1lbnQoKSB7DQogICAgdmFyICRsaXN0ID0gJCgnI2NvbW1lbnQtbGlzdCcpOw0KICAgIGlmICghJGxpc3QubGVuZ3RoKSB7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF1dGhvciIpKSB7DQogICAgICAgICQoJyNjb21tZW50LWF1dGhvcicpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1hdXRob3IiKSk7DQogICAgICAgICQoJyNjb21tZW50LWVtYWlsJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWVtYWlsIikpOw0KICAgICAgICAkKCcjY29tbWVudC11cmwnKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtdXJsIikpOw0KICAgICAgICAkKCcjY29tbWVudC1hdmF0YXInKS5hdHRyKCJzcmMiLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1hdmF0YXIiKSk7DQogICAgICAgICQoJy5jLWF2YXRhcicpLnJlbW92ZUNsYXNzKCJudWxsIik7DQogICAgfQ0KICAgICQoJyNjb21tZW50LWNvbnRlbnQnKS5vbigiZm9jdXMiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICgkKCcuYy1hdmF0YXInKS5oYXNDbGFzcygibnVsbCIpKSB7DQogICAgICAgICAgICAkKCcuYy1hdmF0YXItZmllbGQnKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICQoJy5jLWluZm8tZmllbGRzJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgICQoJy5ub3QtbWUnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5jLWF2YXRhci1maWVsZCcpLnJlbW92ZSgpOw0KICAgICAgICAkKCcuYy1pbmZvLWZpZWxkcycpLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCiAgICAkKCcjY29tbWVudC1zaG93Jykub24oImNsaWNrIiwgIi5lbmFibGUiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoIiNjb21tZW50LXNob3ciKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZm9ybScpLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgfSk7DQogICAgJCgnI2NvbW1lbnQtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtYXV0aG9yIiwgJCgnI2NvbW1lbnQtYXV0aG9yJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtZW1haWwiLCAkKCcjY29tbWVudC1lbWFpbCcpLnZhbCgpKTsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LXVybCIsICQoJyNjb21tZW50LXVybCcpLnZhbCgpKTsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWF2YXRhciIsIGpzb24uY29tbWVudC5hdmF0YXIpOw0KICAgICAgICAgICAgdmFyIHRwbCA9ICQoJCgnI2NvbW1lbnQtdHBsJykuaHRtbCgpKTsNCiAgICAgICAgICAgIHRwbC5maW5kKCIuYy1hdmF0YXIiKS5hdHRyKCJzcmMiLCBqc29uLmNvbW1lbnQuYXZhdGFyKS5hdHRyKCJhbHQiLCBqc29uLmNvbW1lbnQuYXV0aG9yKTsNCiAgICAgICAgICAgIHRwbC5maW5kKCIuYy1hdXRob3IiKS5hdHRyKCJocmVmIiwganNvbi5jb21tZW50LnVybCkudGV4dChqc29uLmNvbW1lbnQuYXV0aG9yKTsNCiAgICAgICAgICAgIHRwbC5maW5kKCIuYy1yZXBseSIpLmF0dHIoInJlbCIsIGpzb24uY29tbWVudC5pZCk7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtY29udGVudCIpLmh0bWwoanNvbi5jb21tZW50LmNvbnRlbnQpOw0KICAgICAgICAgICAgaWYgKGpzb24uY29tbWVudC5wYXJlbnRfbWQpIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtcC1tZCIpLmh0bWwobWFya2VkKGpzb24uY29tbWVudC5wYXJlbnRfbWQpKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXAtbWQiKS5yZW1vdmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRwbC5hdHRyKCJpZCIsICJjb21tZW50LSIgKyBqc29uLmNvbW1lbnQuaWQpOw0KICAgICAgICAgICAgaWYgKGpzb24uY29tbWVudC5zdGF0dXMgPT0gImFwcHJvdmVkIikgew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1jaGVjayIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGxpc3QuYXBwZW5kKHRwbCk7DQogICAgICAgICAgICAkKCcuY2FuY2VsLXJlcGx5JykudHJpZ2dlcigiY2xpY2siKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LWNvbnRlbnQnKS52YWwoIiIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgYWxlcnQoIuaPkOS6pOWksei0pSEiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgICRsaXN0Lm9uKCJjbGljayIsICIuYy1yZXBseSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlcGx5LW1kJykucmVtb3ZlKCk7DQogICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgIHZhciBwYyA9ICQoJyNjb21tZW50LScgKyBpZCk7DQogICAgICAgIHZhciBtZCA9ICI+IEAiICsgcGMuZmluZCgiLmMtYXV0aG9yIikudGV4dCgpICsgIlxuXG4iOw0KICAgICAgICBtZCArPSAiPiAiICsgcGMuZmluZCgiLmMtY29udGVudCIpLmh0bWwoKSArICJcbiI7DQogICAgICAgICQoJyNjb21tZW50LWNvbnRlbnQnKS5iZWZvcmUoJzxkaXYgY2xhc3M9InJlcGx5LW1kIG1hcmtkb3duIj4nICsgbWFya2VkKG1kKSArICc8L2Rpdj4nKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKGlkKTsNCiAgICAgICAgaWYgKCQoJyNjb21tZW50LXNob3cnKS5sZW5ndGgpIHsNCiAgICAgICAgICAgICQoJyNjb21tZW50LXNob3cgLmVuYWJsZScpLnRyaWdnZXIoImNsaWNrIik7DQogICAgICAgIH0NCiAgICAgICAgJCgnLmNhbmNlbC1yZXBseScpLnNob3coKTsNCiAgICAgICAgdmFyIHRvcCA9ICQoJyNjb21tZW50LWZvcm0nKS5vZmZzZXQoKS50b3A7DQogICAgICAgICQoJ2JvZHksaHRtbCcpLmFuaW1hdGUoe3Njcm9sbFRvcDogdG9wfSwgNTAwKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KICAgICQoJy5jYW5jZWwtcmVwbHknKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZXBseS1tZCcpLnJlbW92ZSgpOw0KICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoMCk7DQogICAgICAgICQodGhpcykuaGlkZSgpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQp9DQpQSwcIHuEecnUSAAB1EgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAc3RhdGljXGpzXHVwbG9hZC5qc2Z1bmN0aW9uIGluaXRVcGxvYWQocCkgew0KICAgICQoJyNhdHRhY2gtc2hvdycpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI2F0dGFjaC11cGxvYWQnKS50cmlnZ2VyKCJjbGljayIpOw0KICAgIH0pOw0KICAgICQoJyNhdHRhY2gtdXBsb2FkJykub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKGNvbmZpcm0oIueri+WNs+S4iuS8oD8iKSkgew0KICAgICAgICAgICAgdmFyIGJhciA9ICQoJzxwIGNsYXNzPSJmaWxlLXByb2dyZXNzIGlubGluZS1ibG9jayI+MCU8L3A+Jyk7DQogICAgICAgICAgICAkKCcjYXR0YWNoLWZvcm0nKS5hamF4U3VibWl0KHsNCiAgICAgICAgICAgICAgICAiYmVmb3JlU3VibWl0IjogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAkKHApLmJlZm9yZShiYXIpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgInVwbG9hZFByb2dyZXNzIjogZnVuY3Rpb24gKGV2ZW50LCBwb3NpdGlvbiwgdG90YWwsIHBlcmNlbnRDb21wbGV0ZSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgcGVyY2VudFZhbCA9IHBlcmNlbnRDb21wbGV0ZSArICclJzsNCiAgICAgICAgICAgICAgICAgICAgYmFyLmNzcygid2lkdGgiLCBwZXJjZW50VmFsKS5odG1sKHBlcmNlbnRWYWwpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgInN1Y2Nlc3MiOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAoIWpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBiYXIuaHRtbChqc29uLm1zZykuYWRkQ2xhc3MoImVyciIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwMCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBiYXIuaHRtbCgiLyIgKyBqc29uLmZpbGUuVXJsICsgIiZuYnNwOyZuYnNwOyZuYnNwOyhAIiArIGpzb24uZmlsZS5OYW1lICsgIikiKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLnZhbCgiIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkKHRoaXMpLnZhbCgiIik7DQogICAgICAgIH0NCiAgICB9KTsNCn1QSwcIiIkX+/YEAAD2BAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAc3RhdGljXGxpYi9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAc3RhdGljXGxpYlxjb2RlbWlycm9yLW1vZGUubWluLmpzIWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PS9eKFxzKikoWyorLV18KFxkKylcLikoXHMqKS8sZT0iKistIjtDb2RlTWlycm9yLmNvbW1hbmRzLm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdD1mdW5jdGlvbihyKXt2YXIgbixpPXIuZ2V0Q3Vyc29yKCksbz1yLmdldFN0YXRlQWZ0ZXIoaS5saW5lKS5saXN0IT09ITE7aWYoIW98fCEobj1yLmdldExpbmUoaS5saW5lKS5tYXRjaCh0KSkpcmV0dXJuIHIuZXhlY0NvbW1hbmQoIm5ld2xpbmVBbmRJbmRlbnQiKSx2b2lkIDA7dmFyIGw9blsxXSxhPW5bNF0scz1lLmluZGV4T2YoblsyXSk+PTA/blsyXTpwYXJzZUludChuWzNdLDEwKSsxKyIuIjtyLnJlcGxhY2VTZWxlY3Rpb24oIlxuIitsK3MrYSwiZW5kIil9fSgpLENvZGVNaXJyb3IuZGVmaW5lTW9kZSgibWFya2Rvd24iLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUscil7cmV0dXJuIGUuZj1lLmlubGluZT1yLHIodCxlKX1mdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gZS5mPWUuYmxvY2s9cixyKHQsZSl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5saW5rVGl0bGU9ITEsdC5lbT0hMSx0LnN0cm9uZz0hMSx0LnF1b3RlPTAsZ3x8dC5mIT1sfHwodC5mPWMsdC5ibG9jaz1vKSx0LnRyYWlsaW5nU3BhY2U9MCx0LnRyYWlsaW5nU3BhY2VOZXdMaW5lPSExLHQudGhpc0xpbmVIYXNDb250ZW50PSExLG51bGx9ZnVuY3Rpb24gbyh0LGkpe3ZhciBvPWkubGlzdCE9PSExO2kubGlzdCE9PSExJiZpLmluZGVudGF0aW9uRGlmZj49MD8oaS5pbmRlbnRhdGlvbkRpZmY8NCYmKGkuaW5kZW50YXRpb24tPWkuaW5kZW50YXRpb25EaWZmKSxpLmxpc3Q9bnVsbCk6aS5saXN0IT09ITEmJmkuaW5kZW50YXRpb24+MD8oaS5saXN0PW51bGwsaS5saXN0RGVwdGg9TWF0aC5mbG9vcihpLmluZGVudGF0aW9uLzQpKTppLmxpc3QhPT0hMSYmKGkubGlzdD0hMSxpLmxpc3REZXB0aD0wKTt2YXIgbD1udWxsO2lmKGkuaW5kZW50YXRpb25EaWZmPj00KXJldHVybiBpLmluZGVudGF0aW9uLT00LHQuc2tpcFRvRW5kKCksaztpZih0LmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7aWYobD10Lm1hdGNoKFIpKWkuaGVhZGVyPWxbMF0ubGVuZ3RoPD02P2xbMF0ubGVuZ3RoOjY7ZWxzZSBpZihpLnByZXZMaW5lSGFzQ29udGVudCYmKGw9dC5tYXRjaChHKSkpaS5oZWFkZXI9Ij0iPT1sWzBdLmNoYXJBdCgwKT8xOjI7ZWxzZSBpZih0LmVhdCgiPiIpKWZvcihpLmluZGVudGF0aW9uKyssaS5xdW90ZT0xLHQuZWF0U3BhY2UoKTt0LmVhdCgiPiIpOyl0LmVhdFNwYWNlKCksaS5xdW90ZSsrO2Vsc2V7aWYoIlsiPT09dC5wZWVrKCkpcmV0dXJuIHIodCxpLGgpO2lmKHQubWF0Y2goSSwhMCkpcmV0dXJuIEE7aWYoaS5wcmV2TGluZUhhc0NvbnRlbnQmJiFvfHwhdC5tYXRjaChQLCEwKSYmIXQubWF0Y2goRiwhMCkpe2lmKGUuZmVuY2VkQ29kZUJsb2NrcyYmdC5tYXRjaCgvXmBgYChbXHcrI10qKS8sITApKXJldHVybiBpLmxvY2FsTW9kZT14KFJlZ0V4cC4kMSksaS5sb2NhbE1vZGUmJihpLmxvY2FsU3RhdGU9aS5sb2NhbE1vZGUuc3RhcnRTdGF0ZSgpKSxuKHQsaSxhKSxrfWVsc2UgaS5pbmRlbnRhdGlvbis9NCxpLmxpc3Q9ITAsaS5saXN0RGVwdGgrKyxlLnRhc2tMaXN0cyYmdC5tYXRjaChCLCExKSYmKGkudGFza0xpc3Q9ITApfXJldHVybiByKHQsaSxpLmlubGluZSl9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXYudG9rZW4odCxlLmh0bWxTdGF0ZSk7cmV0dXJuIGcmJiJ0YWciPT09ciYmIm9wZW5UYWciIT09ZS5odG1sU3RhdGUudHlwZSYmIWUuaHRtbFN0YXRlLmNvbnRleHQmJihlLmY9YyxlLmJsb2NrPW8pLGUubWRfaW5zaWRlJiYtMSE9dC5jdXJyZW50KCkuaW5kZXhPZigiPiIpJiYoZS5mPWMsZS5ibG9jaz1vLGUuaHRtbFN0YXRlLmNvbnRleHQ9dm9pZCAwKSxyfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5zb2woKSYmdC5tYXRjaCgvXmBgYC8sITApPyhlLmxvY2FsTW9kZT1lLmxvY2FsU3RhdGU9bnVsbCxlLmY9YyxlLmJsb2NrPW8sayk6ZS5sb2NhbE1vZGU/ZS5sb2NhbE1vZGUudG9rZW4odCxlLmxvY2FsU3RhdGUpOih0LnNraXBUb0VuZCgpLGspfWZ1bmN0aW9uIHModCl7dmFyIGU9W107aWYodC50YXNrT3BlbilyZXR1cm4ibWV0YSI7aWYodC50YXNrQ2xvc2VkKXJldHVybiJwcm9wZXJ0eSI7aWYodC5zdHJvbmcmJmUucHVzaCh6KSx0LmVtJiZlLnB1c2goRSksdC5saW5rVGV4dCYmZS5wdXNoKE8pLHQuY29kZSYmZS5wdXNoKGspLHQuaGVhZGVyJiYoZS5wdXNoKEMpLGUucHVzaChDK3QuaGVhZGVyKSksdC5xdW90ZSYmZS5wdXNoKHQucXVvdGUlMj93OkwpLHQubGlzdCE9PSExKXt2YXIgcj0odC5saXN0RGVwdGgtMSklMztyPzE9PT1yP2UucHVzaChNKTplLnB1c2goVCk6ZS5wdXNoKFMpfXJldHVybiB0LnRyYWlsaW5nU3BhY2VOZXdMaW5lP2UucHVzaCgidHJhaWxpbmctc3BhY2UtbmV3LWxpbmUiKTp0LnRyYWlsaW5nU3BhY2UmJmUucHVzaCgidHJhaWxpbmctc3BhY2UtIisodC50cmFpbGluZ1NwYWNlJTI/ImEiOiJiIikpLGUubGVuZ3RoP2Uuam9pbigiICIpOm51bGx9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0Lm1hdGNoKF8sITApP3MoZSk6dm9pZCAwfWZ1bmN0aW9uIGModCxpKXt2YXIgbz1pLnRleHQodCxpKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG8pcmV0dXJuIG87aWYoaS5saXN0KXJldHVybiBpLmxpc3Q9bnVsbCxzKGkpO2lmKGkudGFza0xpc3Qpe3ZhciBhPSJ4IiE9PXQubWF0Y2goQiwhMClbMV07cmV0dXJuIGE/aS50YXNrT3Blbj0hMDppLnRhc2tDbG9zZWQ9ITAsaS50YXNrTGlzdD0hMSxzKGkpfWkudGFza09wZW49ITEsaS50YXNrQ2xvc2VkPSExO3ZhciB1PXQuc29sKCksYz10Lm5leHQoKTtpZigiXFwiPT09YylyZXR1cm4gdC5uZXh0KCkscyhpKTtpZihpLmxpbmtUaXRsZSl7aS5saW5rVGl0bGU9ITE7dmFyIGg9YzsiKCI9PT1jJiYoaD0iKSIpLGg9KGgrIiIpLnJlcGxhY2UoLyhbLj8qK14kW1xdXFwoKXt9fC1dKS9nLCJcXCQxIik7dmFyIGQ9Il5cXHMqKD86W14iK2grIlxcXFxdK3xcXFxcXFxcXHxcXFxcLikiK2g7aWYodC5tYXRjaChuZXcgUmVnRXhwKGQpLCEwKSlyZXR1cm4gV31pZigiYCI9PT1jKXt2YXIgcD1zKGkpLGc9dC5wb3M7dC5lYXRXaGlsZSgiYCIpO3ZhciB2PTErdC5wb3MtZztyZXR1cm4gaS5jb2RlP3Y9PT1iPyhpLmNvZGU9ITEscCk6cyhpKTooYj12LGkuY29kZT0hMCxzKGkpKX1pZihpLmNvZGUpcmV0dXJuIHMoaSk7aWYoIiEiPT09YyYmdC5tYXRjaCgvXFtbXlxdXSpcXSA/KD86XCh8XFspLywhMSkpcmV0dXJuIHQubWF0Y2goL1xbW15cXV0qXF0vKSxpLmlubGluZT1pLmY9ZixOO2lmKCJbIj09PWMmJnQubWF0Y2goLy4qXF0oXCh8ID9cWykvLCExKSlyZXR1cm4gaS5saW5rVGV4dD0hMCxzKGkpO2lmKCJdIj09PWMmJmkubGlua1RleHQpe3ZhciB5PXMoaSk7cmV0dXJuIGkubGlua1RleHQ9ITEsaS5pbmxpbmU9aS5mPWYseX1pZigiPCI9PT1jJiZ0Lm1hdGNoKC9eKGh0dHBzP3xmdHBzPyk6XC9cLyg/OlteXFw+XXxcXC4pKz4vLCExKSlyZXR1cm4gcih0LGksbShILCI+IikpO2lmKCI8Ij09PWMmJnQubWF0Y2goL15bXj4gXFxdK0AoPzpbXlxcPl18XFwuKSs+LywhMSkpcmV0dXJuIHIodCxpLG0oRCwiPiIpKTtpZigiPCI9PT1jJiZ0Lm1hdGNoKC9eXHcvLCExKSl7aWYoLTEhPXQuc3RyaW5nLmluZGV4T2YoIj4iKSl7dmFyIHg9dC5zdHJpbmcuc3Vic3RyaW5nKDEsdC5zdHJpbmcuaW5kZXhPZigiPiIpKTsvbWFya2Rvd25ccyo9XHMqKCd8Iil7MCwxfTEoJ3wiKXswLDF9Ly50ZXN0KHgpJiYoaS5tZF9pbnNpZGU9ITApfXJldHVybiB0LmJhY2tVcCgxKSxuKHQsaSxsKX1pZigiPCI9PT1jJiZ0Lm1hdGNoKC9eXC9cdyo/Pi8pKXJldHVybiBpLm1kX2luc2lkZT0hMSwidGFnIjt2YXIgQz0hMTtpZighZS51bmRlcnNjb3Jlc0JyZWFrV29yZHMmJiJfIj09PWMmJiJfIiE9PXQucGVlaygpJiZ0Lm1hdGNoKC8oXHcpLywhMSkpe3ZhciBrPXQucG9zLTI7aWYoaz49MCl7dmFyIHc9dC5zdHJpbmcuY2hhckF0KGspOyJfIiE9PXcmJncubWF0Y2goLyhcdykvLCExKSYmKEM9ITApfX12YXIgcD1zKGkpO2lmKCIqIj09PWN8fCJfIj09PWMmJiFDKWlmKHUmJiIgIj09PXQucGVlaygpKTtlbHNle2lmKGkuc3Ryb25nPT09YyYmdC5lYXQoYykpcmV0dXJuIGkuc3Ryb25nPSExLHA7aWYoIWkuc3Ryb25nJiZ0LmVhdChjKSlyZXR1cm4gaS5zdHJvbmc9YyxzKGkpO2lmKGkuZW09PT1jKXJldHVybiBpLmVtPSExLHA7aWYoIWkuZW0pcmV0dXJuIGkuZW09YyxzKGkpfWVsc2UgaWYoIiAiPT09YyYmKHQuZWF0KCIqIil8fHQuZWF0KCJfIikpKXtpZigiICI9PT10LnBlZWsoKSlyZXR1cm4gcyhpKTt0LmJhY2tVcCgxKX1yZXR1cm4iICI9PT1jJiYodC5tYXRjaCgvICskLywhMSk/aS50cmFpbGluZ1NwYWNlKys6aS50cmFpbGluZ1NwYWNlJiYoaS50cmFpbGluZ1NwYWNlTmV3TGluZT0hMCkpLHMoaSl9ZnVuY3Rpb24gZih0LGUpe2lmKHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDt2YXIgbj10Lm5leHQoKTtyZXR1cm4iKCI9PT1ufHwiWyI9PT1uP3IodCxlLG0oVywiKCI9PT1uPyIpIjoiXSIpKToiZXJyb3IifWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdC5tYXRjaCgvXlteXF1dKlxdOi8sITApPyhlLmY9ZCxPKTpyKHQsZSxjKX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQuZWF0U3BhY2UoKT9udWxsOih0Lm1hdGNoKC9eW15cc10rLywhMCksdm9pZCAwPT09dC5wZWVrKCk/ZS5saW5rVGl0bGU9ITA6dC5tYXRjaCgvXig/OlxzKyg/OiIoPzpbXiJcXF18XFxcXHxcXC4pKyJ8Jyg/OlteJ1xcXXxcXFxcfFxcLikrJ3xcKCg/OlteKVxcXXxcXFxcfFxcLikrXCkpKT8vLCEwKSxlLmY9ZS5pbmxpbmU9YyxXKX1mdW5jdGlvbiBwKHQpe3JldHVybiBWW3RdfHwodD0odCsiIikucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csIlxcJDEiKSxWW3RdPW5ldyBSZWdFeHAoIl4oPzpbXlxcXFxdfFxcXFwuKSo/KCIrdCsiKSIpKSxWW3RdfWZ1bmN0aW9uIG0odCxlLHIpe3JldHVybiByPXJ8fGMsZnVuY3Rpb24obixpKXtyZXR1cm4gbi5tYXRjaChwKGUpKSxpLmlubGluZT1pLmY9cix0fX12YXIgZz1Db2RlTWlycm9yLm1vZGVzLmhhc093blByb3BlcnR5KCJ4bWwiKSx2PUNvZGVNaXJyb3IuZ2V0TW9kZSh0LGc/e25hbWU6InhtbCIsaHRtbE1vZGU6ITB9OiJ0ZXh0L3BsYWluIikseT17aHRtbDoiaHRtbG1peGVkIixqczoiamF2YXNjcmlwdCIsanNvbjoiYXBwbGljYXRpb24vanNvbiIsYzoidGV4dC94LWNzcmMiLCJjKysiOiJ0ZXh0L3gtYysrc3JjIixqYXZhOiJ0ZXh0L3gtamF2YSIsY3NoYXJwOiJ0ZXh0L3gtY3NoYXJwIiwiYyMiOiJ0ZXh0L3gtY3NoYXJwIixzY2FsYToidGV4dC94LXNjYWxhIn0seD1mdW5jdGlvbigpe3ZhciBlLHIsbj17fSxpPXt9LG89W107Zm9yKHZhciBsIGluIENvZGVNaXJyb3IubW9kZXMpQ29kZU1pcnJvci5tb2Rlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShsKSYmby5wdXNoKGwpO2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspbltvW2VdXT1vW2VdO3ZhciBhPVtdO2Zvcih2YXIgbCBpbiBDb2RlTWlycm9yLm1pbWVNb2RlcylDb2RlTWlycm9yLm1pbWVNb2Rlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShsKSYmYS5wdXNoKHttaW1lOmwsbW9kZTpDb2RlTWlycm9yLm1pbWVNb2Rlc1tsXX0pO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspcj1hW2VdLm1pbWUsaVtyXT1hW2VdLm1pbWU7Zm9yKHZhciBzIGluIHkpKHlbc11pbiBufHx5W3NdaW4gaSkmJihuW3NdPXlbc10pO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbltlXT9Db2RlTWlycm9yLmdldE1vZGUodCxuW2VdKTpudWxsfX0oKTt2b2lkIDA9PT1lLnVuZGVyc2NvcmVzQnJlYWtXb3JkcyYmKGUudW5kZXJzY29yZXNCcmVha1dvcmRzPSEwKSx2b2lkIDA9PT1lLmZlbmNlZENvZGVCbG9ja3MmJihlLmZlbmNlZENvZGVCbG9ja3M9ITEpLHZvaWQgMD09PWUudGFza0xpc3RzJiYoZS50YXNrTGlzdHM9ITEpO3ZhciBiPTAsQz0iaGVhZGVyIixrPSJjb21tZW50Iix3PSJhdG9tIixMPSJudW1iZXIiLFM9InZhcmlhYmxlLTIiLE09InZhcmlhYmxlLTMiLFQ9ImtleXdvcmQiLEE9ImhyIixOPSJ0YWciLEg9ImxpbmsiLEQ9ImxpbmsiLE89ImxpbmsiLFc9InN0cmluZyIsRT0iZW0iLHo9InN0cm9uZyIsST0vXihbKlwtPV9dKSg/OlxzKlwxKXsyLH1ccyokLyxQPS9eWypcLStdXHMrLyxGPS9eWzAtOV0rXC5ccysvLEI9L15cWyh4fCApXF0oPz1ccykvLFI9L14jKy8sRz0vXig/Olw9ezEsfXwtezEsfSkkLyxfPS9eW14hXFtcXSpfXFw8PmAgIicoXSsvLFY9W107cmV0dXJue3N0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57ZjpvLHByZXZMaW5lSGFzQ29udGVudDohMSx0aGlzTGluZUhhc0NvbnRlbnQ6ITEsYmxvY2s6byxodG1sU3RhdGU6Q29kZU1pcnJvci5zdGFydFN0YXRlKHYpLGluZGVudGF0aW9uOjAsaW5saW5lOmMsdGV4dDp1LGxpbmtUZXh0OiExLGxpbmtUaXRsZTohMSxlbTohMSxzdHJvbmc6ITEsaGVhZGVyOjAsdGFza0xpc3Q6ITEsbGlzdDohMSxsaXN0RGVwdGg6MCxxdW90ZTowLHRyYWlsaW5nU3BhY2U6MCx0cmFpbGluZ1NwYWNlTmV3TGluZTohMX19LGNvcHlTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm57Zjp0LmYscHJldkxpbmVIYXNDb250ZW50OnQucHJldkxpbmVIYXNDb250ZW50LHRoaXNMaW5lSGFzQ29udGVudDp0LnRoaXNMaW5lSGFzQ29udGVudCxibG9jazp0LmJsb2NrLGh0bWxTdGF0ZTpDb2RlTWlycm9yLmNvcHlTdGF0ZSh2LHQuaHRtbFN0YXRlKSxpbmRlbnRhdGlvbjp0LmluZGVudGF0aW9uLGxvY2FsTW9kZTp0LmxvY2FsTW9kZSxsb2NhbFN0YXRlOnQubG9jYWxNb2RlP0NvZGVNaXJyb3IuY29weVN0YXRlKHQubG9jYWxNb2RlLHQubG9jYWxTdGF0ZSk6bnVsbCxpbmxpbmU6dC5pbmxpbmUsdGV4dDp0LnRleHQsbGlua1RpdGxlOnQubGlua1RpdGxlLGVtOnQuZW0sc3Ryb25nOnQuc3Ryb25nLGhlYWRlcjp0LmhlYWRlcix0YXNrTGlzdDp0LnRhc2tMaXN0LGxpc3Q6dC5saXN0LGxpc3REZXB0aDp0Lmxpc3REZXB0aCxxdW90ZTp0LnF1b3RlLHRyYWlsaW5nU3BhY2U6dC50cmFpbGluZ1NwYWNlLHRyYWlsaW5nU3BhY2VOZXdMaW5lOnQudHJhaWxpbmdTcGFjZU5ld0xpbmUsbWRfaW5zaWRlOnQubWRfaW5zaWRlfX0sdG9rZW46ZnVuY3Rpb24odCxlKXtpZih0LnNvbCgpKXtpZih0Lm1hdGNoKC9eXHMqJC8sITApKXJldHVybiBlLnByZXZMaW5lSGFzQ29udGVudD0hMSxpKGUpO2UucHJldkxpbmVIYXNDb250ZW50PWUudGhpc0xpbmVIYXNDb250ZW50LGUudGhpc0xpbmVIYXNDb250ZW50PSEwLGUuaGVhZGVyPTAsZS50YXNrTGlzdD0hMSxlLmNvZGU9ITEsZS50cmFpbGluZ1NwYWNlPTAsZS50cmFpbGluZ1NwYWNlTmV3TGluZT0hMSxlLmY9ZS5ibG9jazt2YXIgcj10Lm1hdGNoKC9eXHMqLywhMClbMF0ucmVwbGFjZSgvXHQvZywiICAgICIpLmxlbmd0aCxuPTQqTWF0aC5mbG9vcigoci1lLmluZGVudGF0aW9uKS80KTtuPjQmJihuPTQpO3ZhciBvPWUuaW5kZW50YXRpb24rbjtpZihlLmluZGVudGF0aW9uRGlmZj1vLWUuaW5kZW50YXRpb24sZS5pbmRlbnRhdGlvbj1vLHI+MClyZXR1cm4gbnVsbH1yZXR1cm4gZS5mKHQsZSl9LGJsYW5rTGluZTppLGdldFR5cGU6c319LCJ4bWwiKSxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1tYXJrZG93biIsIm1hcmtkb3duIiksQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe2Z1bmN0aW9uIHIocil7cmV0dXJuIGUudG9rZW5pemU9cixyKHQsZSl9dmFyIGk9dC5uZXh0KCk7aWYoIjwiPT1pKXtpZih0LmVhdCgiISIpKXJldHVybiB0LmVhdCgiWyIpP3QubWF0Y2goIkNEQVRBWyIpP3IobygiYXRvbSIsIl1dPiIpKTpudWxsOnQubWF0Y2goIi0tIik/cihvKCJjb21tZW50IiwiLS0+IikpOnQubWF0Y2goIkRPQ1RZUEUiLCEwLCEwKT8odC5lYXRXaGlsZSgvW1x3XC5fXC1dLykscihsKDEpKSk6bnVsbDtpZih0LmVhdCgiPyIpKXJldHVybiB0LmVhdFdoaWxlKC9bXHdcLl9cLV0vKSxlLnRva2VuaXplPW8oIm1ldGEiLCI/PiIpLCJtZXRhIjt2YXIgYT10LmVhdCgiLyIpO3g9IiI7Zm9yKHZhciBzO3M9dC5lYXQoL1teXHNcdTAwYTA9PD5cIlwnXC8/XS8pOyl4Kz1zO3JldHVybiB4PyhiPWE/ImNsb3NlVGFnIjoib3BlblRhZyIsZS50b2tlbml6ZT1uLCJ0YWciKToidGFnIGVycm9yIn1pZigiJiI9PWkpe3ZhciB1O3JldHVybiB1PXQuZWF0KCIjIik/dC5lYXQoIngiKT90LmVhdFdoaWxlKC9bYS1mQS1GXGRdLykmJnQuZWF0KCI7Iik6dC5lYXRXaGlsZSgvW1xkXS8pJiZ0LmVhdCgiOyIpOnQuZWF0V2hpbGUoL1tcd1wuXC06XS8pJiZ0LmVhdCgiOyIpLHU/ImF0b20iOiJlcnJvciJ9cmV0dXJuIHQuZWF0V2hpbGUoL1teJjxdLyksbnVsbH1mdW5jdGlvbiBuKHQsZSl7dmFyIG49dC5uZXh0KCk7aWYoIj4iPT1ufHwiLyI9PW4mJnQuZWF0KCI+IikpcmV0dXJuIGUudG9rZW5pemU9cixiPSI+Ij09bj8iZW5kVGFnIjoic2VsZmNsb3NlVGFnIiwidGFnIjtpZigiPSI9PW4pcmV0dXJuIGI9ImVxdWFscyIsbnVsbDtpZigiPCI9PW4pe2UudG9rZW5pemU9cjt2YXIgbz1lLnRva2VuaXplKHQsZSk7cmV0dXJuIG8/bysiIGVycm9yIjoiZXJyb3IifXJldHVybi9bXCdcIl0vLnRlc3Qobik/KGUudG9rZW5pemU9aShuKSxlLnN0cmluZ1N0YXJ0Q29sPXQuY29sdW1uKCksZS50b2tlbml6ZSh0LGUpKToodC5lYXRXaGlsZSgvW15cc1x1MDBhMD08PlwiXCddLyksIndvcmQiKX1mdW5jdGlvbiBpKHQpe3ZhciBlPWZ1bmN0aW9uKGUscil7Zm9yKDshZS5lb2woKTspaWYoZS5uZXh0KCk9PXQpe3IudG9rZW5pemU9bjticmVha31yZXR1cm4ic3RyaW5nIn07cmV0dXJuIGUuaXNJbkF0dHJpYnV0ZT0hMCxlfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtmb3IoOyFuLmVvbCgpOyl7aWYobi5tYXRjaChlKSl7aS50b2tlbml6ZT1yO2JyZWFrfW4ubmV4dCgpfXJldHVybiB0fX1mdW5jdGlvbiBsKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe2Zvcih2YXIgaTtudWxsIT0oaT1lLm5leHQoKSk7KXtpZigiPCI9PWkpcmV0dXJuIG4udG9rZW5pemU9bCh0KzEpLG4udG9rZW5pemUoZSxuKTtpZigiPiI9PWkpe2lmKDE9PXQpe24udG9rZW5pemU9cjticmVha31yZXR1cm4gbi50b2tlbml6ZT1sKHQtMSksbi50b2tlbml6ZShlLG4pfX1yZXR1cm4ibWV0YSJ9fWZ1bmN0aW9uIGEoKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aC0xO3Q+PTA7dC0tKUMuY2MucHVzaChhcmd1bWVudHNbdF0pfWZ1bmN0aW9uIHMoKXtyZXR1cm4gYS5hcHBseShudWxsLGFyZ3VtZW50cyksITB9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPVQuZG9Ob3RJbmRlbnQuaGFzT3duUHJvcGVydHkodCl8fEMuY29udGV4dCYmQy5jb250ZXh0Lm5vSW5kZW50O0MuY29udGV4dD17cHJldjpDLmNvbnRleHQsdGFnTmFtZTp0LGluZGVudDpDLmluZGVudGVkLHN0YXJ0T2ZMaW5lOmUsbm9JbmRlbnQ6cn19ZnVuY3Rpb24gYygpe0MuY29udGV4dCYmKEMuY29udGV4dD1DLmNvbnRleHQucHJldil9ZnVuY3Rpb24gZih0KXtpZigib3BlblRhZyI9PXQpcmV0dXJuIEMudGFnTmFtZT14LEMudGFnU3RhcnQ9ay5jb2x1bW4oKSxzKG0saChDLnN0YXJ0T2ZMaW5lKSk7aWYoImNsb3NlVGFnIj09dCl7dmFyIGU9ITE7cmV0dXJuIEMuY29udGV4dD9DLmNvbnRleHQudGFnTmFtZSE9eCYmKFQuaW1wbGljaXRseUNsb3NlZC5oYXNPd25Qcm9wZXJ0eShDLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSYmYygpLGU9IUMuY29udGV4dHx8Qy5jb250ZXh0LnRhZ05hbWUhPXgpOmU9ITAsZSYmKHc9ImVycm9yIikscyhkKGUpKX1yZXR1cm4gcygpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPUMudGFnTmFtZTtyZXR1cm4gQy50YWdOYW1lPUMudGFnU3RhcnQ9bnVsbCwic2VsZmNsb3NlVGFnIj09ZXx8ImVuZFRhZyI9PWUmJlQuYXV0b1NlbGZDbG9zZXJzLmhhc093blByb3BlcnR5KHIudG9Mb3dlckNhc2UoKSk/KHAoci50b0xvd2VyQ2FzZSgpKSxzKCkpOiJlbmRUYWciPT1lPyhwKHIudG9Mb3dlckNhc2UoKSksdShyLHQpLHMoKSk6cygpfX1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCYmKHc9ImVycm9yIiksImVuZFRhZyI9PWU/KGMoKSxzKCkpOih3PSJlcnJvciIscyhhcmd1bWVudHMuY2FsbGVlKSl9fWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlOzspe2lmKCFDLmNvbnRleHQpcmV0dXJuO2lmKGU9Qy5jb250ZXh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSwhVC5jb250ZXh0R3JhYmJlcnMuaGFzT3duUHJvcGVydHkoZSl8fCFULmNvbnRleHRHcmFiYmVyc1tlXS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm47YygpfX1mdW5jdGlvbiBtKHQpe3JldHVybiJ3b3JkIj09dD8odz0iYXR0cmlidXRlIixzKGcsbSkpOiJlbmRUYWciPT10fHwic2VsZmNsb3NlVGFnIj09dD9hKCk6KHc9ImVycm9yIixzKG0pKX1mdW5jdGlvbiBnKHQpe2lmKCJlcXVhbHMiPT10KXJldHVybiBzKHYsbSk7aWYoVC5hbGxvd01pc3Npbmcpe2lmKCJ3b3JkIj09dClyZXR1cm4gdz0iYXR0cmlidXRlIixzKGcsbSl9ZWxzZSB3PSJlcnJvciI7cmV0dXJuImVuZFRhZyI9PXR8fCJzZWxmY2xvc2VUYWciPT10P2EoKTpzKCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4ic3RyaW5nIj09dD9zKHkpOiJ3b3JkIj09dCYmVC5hbGxvd1VucXVvdGVkPyh3PSJzdHJpbmciLHMoKSk6KHc9ImVycm9yIiwiZW5kVGFnIj09dHx8InNlbGZDbG9zZVRhZyI9PXQ/YSgpOnMoKSl9ZnVuY3Rpb24geSh0KXtyZXR1cm4ic3RyaW5nIj09dD9zKHkpOmEoKX12YXIgeCxiLEMsayx3LEw9dC5pbmRlbnRVbml0LFM9ZS5tdWx0aWxpbmVUYWdJbmRlbnRGYWN0b3J8fDEsTT1lLm11bHRpbGluZVRhZ0luZGVudFBhc3RUYWd8fCEwLFQ9ZS5odG1sTW9kZT97YXV0b1NlbGZDbG9zZXJzOnthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGNvbW1hbmQ6ITAsZW1iZWQ6ITAsZnJhbWU6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGtleWdlbjohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMH0saW1wbGljaXRseUNsb3NlZDp7ZGQ6ITAsbGk6ITAsb3B0Z3JvdXA6ITAsb3B0aW9uOiEwLHA6ITAscnA6ITAscnQ6ITAsdGJvZHk6ITAsdGQ6ITAsdGZvb3Q6ITAsdGg6ITAsdHI6ITB9LGNvbnRleHRHcmFiYmVyczp7ZGQ6e2RkOiEwLGR0OiEwfSxkdDp7ZGQ6ITAsZHQ6ITB9LGxpOntsaTohMH0sb3B0aW9uOntvcHRpb246ITAsb3B0Z3JvdXA6ITB9LG9wdGdyb3VwOntvcHRncm91cDohMH0scDp7YWRkcmVzczohMCxhcnRpY2xlOiEwLGFzaWRlOiEwLGJsb2NrcXVvdGU6ITAsZGlyOiEwLGRpdjohMCxkbDohMCxmaWVsZHNldDohMCxmb290ZXI6ITAsZm9ybTohMCxoMTohMCxoMjohMCxoMzohMCxoNDohMCxoNTohMCxoNjohMCxoZWFkZXI6ITAsaGdyb3VwOiEwLGhyOiEwLG1lbnU6ITAsbmF2OiEwLG9sOiEwLHA6ITAscHJlOiEwLHNlY3Rpb246ITAsdGFibGU6ITAsdWw6ITB9LHJwOntycDohMCxydDohMH0scnQ6e3JwOiEwLHJ0OiEwfSx0Ym9keTp7dGJvZHk6ITAsdGZvb3Q6ITB9LHRkOnt0ZDohMCx0aDohMH0sdGZvb3Q6e3Rib2R5OiEwfSx0aDp7dGQ6ITAsdGg6ITB9LHRoZWFkOnt0Ym9keTohMCx0Zm9vdDohMH0sdHI6e3RyOiEwfX0sZG9Ob3RJbmRlbnQ6e3ByZTohMH0sYWxsb3dVbnF1b3RlZDohMCxhbGxvd01pc3Npbmc6ITB9OnthdXRvU2VsZkNsb3NlcnM6e30saW1wbGljaXRseUNsb3NlZDp7fSxjb250ZXh0R3JhYmJlcnM6e30sZG9Ob3RJbmRlbnQ6e30sYWxsb3dVbnF1b3RlZDohMSxhbGxvd01pc3Npbmc6ITF9LEE9ZS5hbGlnbkNEQVRBO3JldHVybntzdGFydFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue3Rva2VuaXplOnIsY2M6W10saW5kZW50ZWQ6MCxzdGFydE9mTGluZTohMCx0YWdOYW1lOm51bGwsdGFnU3RhcnQ6bnVsbCxjb250ZXh0Om51bGx9fSx0b2tlbjpmdW5jdGlvbih0LGUpe2lmKCFlLnRhZ05hbWUmJnQuc29sKCkmJihlLnN0YXJ0T2ZMaW5lPSEwLGUuaW5kZW50ZWQ9dC5pbmRlbnRhdGlvbigpKSx0LmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7dz1iPXg9bnVsbDt2YXIgcj1lLnRva2VuaXplKHQsZSk7aWYoZS50eXBlPWIsKHJ8fGIpJiYiY29tbWVudCIhPXIpZm9yKEM9ZSxrPXQ7Oyl7dmFyIG49ZS5jYy5wb3AoKXx8ZjtpZihuKGJ8fHIpKWJyZWFrfXJldHVybiBlLnN0YXJ0T2ZMaW5lPSExLHcmJihyPSJlcnJvciI9PXc/cisiIGVycm9yIjp3KSxyfSxpbmRlbnQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBvPXQuY29udGV4dDtpZih0LnRva2VuaXplLmlzSW5BdHRyaWJ1dGUpcmV0dXJuIHQuc3RyaW5nU3RhcnRDb2wrMTtpZih0LnRva2VuaXplIT1uJiZ0LnRva2VuaXplIT1yfHxvJiZvLm5vSW5kZW50KXJldHVybiBpP2kubWF0Y2goL14oXHMqKS8pWzBdLmxlbmd0aDowO2lmKHQudGFnTmFtZSlyZXR1cm4gTT90LnRhZ1N0YXJ0K3QudGFnTmFtZS5sZW5ndGgrMjp0LnRhZ1N0YXJ0K0wqUztpZihBJiYvPCFcW0NEQVRBXFsvLnRlc3QoZSkpcmV0dXJuIDA7Zm9yKG8mJi9ePFwvLy50ZXN0KGUpJiYobz1vLnByZXYpO28mJiFvLnN0YXJ0T2ZMaW5lOylvPW8ucHJldjtyZXR1cm4gbz9vLmluZGVudCtMOjB9LGVsZWN0cmljQ2hhcnM6Ii8iLGJsb2NrQ29tbWVudFN0YXJ0OiI8IS0tIixibG9ja0NvbW1lbnRFbmQ6Ii0tPiIsY29uZmlndXJhdGlvbjplLmh0bWxNb2RlPyJodG1sIjoieG1sIixoZWxwZXJUeXBlOmUuaHRtbE1vZGU/Imh0bWwiOiJ4bWwifX0pLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94bWwiLCJ4bWwiKSxDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3htbCIsInhtbCIpLENvZGVNaXJyb3IubWltZU1vZGVzLmhhc093blByb3BlcnR5KCJ0ZXh0L2h0bWwiKXx8Q29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2h0bWwiLHtuYW1lOiJ4bWwiLGh0bWxNb2RlOiEwfSk7UEsHCJPWD12IMgAAiDIAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAHN0YXRpY1xsaWJcY29kZW1pcnJvci5taW4uanN3aW5kb3cuQ29kZU1pcnJvcj1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KHIsbil7aWYoISh0aGlzIGluc3RhbmNlb2YgdCkpcmV0dXJuIG5ldyB0KHIsbik7dGhpcy5vcHRpb25zPW49bnx8e307Zm9yKHZhciBpIGluIGFvKSFuLmhhc093blByb3BlcnR5KGkpJiZhby5oYXNPd25Qcm9wZXJ0eShpKSYmKG5baV09YW9baV0pO2gobik7dmFyIG89InN0cmluZyI9PXR5cGVvZiBuLnZhbHVlPzA6bi52YWx1ZS5maXJzdCxsPXRoaXMuZGlzcGxheT1lKHIsbyk7bC53cmFwcGVyLkNvZGVNaXJyb3I9dGhpcyx1KHRoaXMpLG4uYXV0b2ZvY3VzJiYhVmkmJnBlKHRoaXMpLHRoaXMuc3RhdGU9e2tleU1hcHM6W10sb3ZlcmxheXM6W10sbW9kZUdlbjowLG92ZXJ3cml0ZTohMSxmb2N1c2VkOiExLHN1cHByZXNzRWRpdHM6ITEscGFzdGVJbmNvbWluZzohMSxkcmFnZ2luZ1RleHQ6ITEsaGlnaGxpZ2h0Om5ldyAkbn0scyh0aGlzKSxuLmxpbmVXcmFwcGluZyYmKHRoaXMuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLXdyYXAiKTt2YXIgYT1uLnZhbHVlOyJzdHJpbmciPT10eXBlb2YgYSYmKGE9bmV3IHdvKG4udmFsdWUsbi5tb2RlKSksbGUodGhpcyxwbikodGhpcyxhKSxBaSYmc2V0VGltZW91dChpaShkZSx0aGlzLCEwKSwyMCksbWUodGhpcyk7dmFyIGM7dHJ5e2M9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09bC5pbnB1dH1jYXRjaChmKXt9Y3x8bi5hdXRvZm9jdXMmJiFWaT9zZXRUaW1lb3V0KGlpKEVlLHRoaXMpLDIwKTp6ZSh0aGlzKSxsZSh0aGlzLGZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHNvKXNvLnByb3BlcnR5SXNFbnVtZXJhYmxlKHQpJiZzb1t0XSh0aGlzLG5bdF0sdW8pO2Zvcih2YXIgZT0wO2U8cG8ubGVuZ3RoOysrZSlwb1tlXSh0aGlzKX0pKCl9ZnVuY3Rpb24gZSh0LGUpe3ZhciByPXt9LG49ci5pbnB1dD1zaSgidGV4dGFyZWEiLG51bGwsbnVsbCwicG9zaXRpb246IGFic29sdXRlOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbTsgb3V0bGluZTogbm9uZTsgZm9udC1zaXplOiA0cHg7Iik7cmV0dXJuIFdpP24uc3R5bGUud2lkdGg9IjEwMDBweCI6bi5zZXRBdHRyaWJ1dGUoIndyYXAiLCJvZmYiKSxHaSYmKG4uc3R5bGUuYm9yZGVyPSIxcHggc29saWQgYmxhY2siKSxuLnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCJvZmYiKSxuLnNldEF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUiLCJvZmYiKSxuLnNldEF0dHJpYnV0ZSgic3BlbGxjaGVjayIsImZhbHNlIiksci5pbnB1dERpdj1zaSgiZGl2Iixbbl0sbnVsbCwib3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6IDBweDsiKSxyLnNjcm9sbGJhckg9c2koImRpdiIsW3NpKCJkaXYiLG51bGwsbnVsbCwiaGVpZ2h0OiAxcHgiKV0sIkNvZGVNaXJyb3ItaHNjcm9sbGJhciIpLHIuc2Nyb2xsYmFyVj1zaSgiZGl2Iixbc2koImRpdiIsbnVsbCxudWxsLCJ3aWR0aDogMXB4IildLCJDb2RlTWlycm9yLXZzY3JvbGxiYXIiKSxyLnNjcm9sbGJhckZpbGxlcj1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIiKSxyLmd1dHRlckZpbGxlcj1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlci1maWxsZXIiKSxyLmxpbmVEaXY9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1jb2RlIiksci5zZWxlY3Rpb25EaXY9c2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDEiKSxyLmN1cnNvcj1zaSgiZGl2IiwiwqAiLCJDb2RlTWlycm9yLWN1cnNvciIpLHIub3RoZXJDdXJzb3I9c2koImRpdiIsIsKgIiwiQ29kZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IiKSxyLm1lYXN1cmU9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1tZWFzdXJlIiksci5saW5lU3BhY2U9c2koImRpdiIsW3IubWVhc3VyZSxyLnNlbGVjdGlvbkRpdixyLmxpbmVEaXYsci5jdXJzb3Isci5vdGhlckN1cnNvcl0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlOyBvdXRsaW5lOiBub25lIiksci5tb3Zlcj1zaSgiZGl2Iixbc2koImRpdiIsW3IubGluZVNwYWNlXSwiQ29kZU1pcnJvci1saW5lcyIpXSxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmUiKSxyLnNpemVyPXNpKCJkaXYiLFtyLm1vdmVyXSwiQ29kZU1pcnJvci1zaXplciIpLHIuaGVpZ2h0Rm9yY2VyPXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IGFic29sdXRlOyBoZWlnaHQ6ICIrVG8rInB4OyB3aWR0aDogMXB4OyIpLHIuZ3V0dGVycz1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlcnMiKSxyLmxpbmVHdXR0ZXI9bnVsbCxyLnNjcm9sbGVyPXNpKCJkaXYiLFtyLnNpemVyLHIuaGVpZ2h0Rm9yY2VyLHIuZ3V0dGVyc10sIkNvZGVNaXJyb3Itc2Nyb2xsIiksci5zY3JvbGxlci5zZXRBdHRyaWJ1dGUoInRhYkluZGV4IiwiLTEiKSxyLndyYXBwZXI9c2koImRpdiIsW3IuaW5wdXREaXYsci5zY3JvbGxiYXJILHIuc2Nyb2xsYmFyVixyLnNjcm9sbGJhckZpbGxlcixyLmd1dHRlckZpbGxlcixyLnNjcm9sbGVyXSwiQ29kZU1pcnJvciIpLEhpJiYoci5ndXR0ZXJzLnN0eWxlLnpJbmRleD0tMSxyLnNjcm9sbGVyLnN0eWxlLnBhZGRpbmdSaWdodD0wKSx0LmFwcGVuZENoaWxkP3QuYXBwZW5kQ2hpbGQoci53cmFwcGVyKTp0KHIud3JhcHBlciksR2kmJihuLnN0eWxlLndpZHRoPSIwcHgiKSxXaXx8KHIuc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwKSxGaT8oci5pbnB1dERpdi5zdHlsZS5oZWlnaHQ9IjFweCIsci5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiKTpIaSYmKHIuc2Nyb2xsYmFySC5zdHlsZS5taW5XaWR0aD1yLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGg9IjE4cHgiKSxyLnZpZXdPZmZzZXQ9ci5sYXN0U2l6ZUM9MCxyLnNob3dpbmdGcm9tPXIuc2hvd2luZ1RvPWUsci5saW5lTnVtV2lkdGg9ci5saW5lTnVtSW5uZXJXaWR0aD1yLmxpbmVOdW1DaGFycz1udWxsLHIucHJldklucHV0PSIiLHIuYWxpZ25XaWRnZXRzPSExLHIucG9sbGluZ0Zhc3Q9ITEsci5wb2xsPW5ldyAkbixyLmNhY2hlZENoYXJXaWR0aD1yLmNhY2hlZFRleHRIZWlnaHQ9bnVsbCxyLm1lYXN1cmVMaW5lQ2FjaGU9W10sci5tZWFzdXJlTGluZUNhY2hlUG9zPTAsci5pbmFjY3VyYXRlU2VsZWN0aW9uPSExLHIubWF4TGluZT1udWxsLHIubWF4TGluZUxlbmd0aD0wLHIubWF4TGluZUNoYW5nZWQ9ITEsci53aGVlbERYPXIud2hlZWxEWT1yLndoZWVsU3RhcnRYPXIud2hlZWxTdGFydFk9bnVsbCxyfWZ1bmN0aW9uIHIoZSl7ZS5kb2MubW9kZT10LmdldE1vZGUoZS5vcHRpb25zLGUuZG9jLm1vZGVPcHRpb24pLGUuZG9jLml0ZXIoZnVuY3Rpb24odCl7dC5zdGF0ZUFmdGVyJiYodC5zdGF0ZUFmdGVyPW51bGwpLHQuc3R5bGVzJiYodC5zdHlsZXM9bnVsbCl9KSxlLmRvYy5mcm9udGllcj1lLmRvYy5maXJzdCxXKGUsMTAwKSxlLnN0YXRlLm1vZGVHZW4rKyxlLmN1ck9wJiZ1ZShlKX1mdW5jdGlvbiBuKHQpe3Qub3B0aW9ucy5saW5lV3JhcHBpbmc/KHQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLXdyYXAiLHQuZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aD0iIik6KHQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itd3JhcCIsIiIpLGYodCkpLG8odCksdWUodCksXyh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZCh0KX0sMTAwKX1mdW5jdGlvbiBpKHQpe3ZhciBlPXJlKHQuZGlzcGxheSkscj10Lm9wdGlvbnMubGluZVdyYXBwaW5nLG49ciYmTWF0aC5tYXgoNSx0LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgvbmUodC5kaXNwbGF5KS0zKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIFZyKHQuZG9jLGkpPzA6cj8oTWF0aC5jZWlsKGkudGV4dC5sZW5ndGgvbil8fDEpKmU6ZX19ZnVuY3Rpb24gbyh0KXt2YXIgZT10LmRvYyxyPWkodCk7ZS5pdGVyKGZ1bmN0aW9uKHQpe3ZhciBlPXIodCk7ZSE9dC5oZWlnaHQmJnluKHQsZSl9KX1mdW5jdGlvbiBsKHQpe3ZhciBlPXZvW3Qub3B0aW9ucy5rZXlNYXBdLHI9ZS5zdHlsZTt0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLWtleW1hcC1cUysvZywiIikrKHI/IiBjbS1rZXltYXAtIityOiIiKSx0LnN0YXRlLmRpc2FibGVJbnB1dD1lLmRpc2FibGVJbnB1dH1mdW5jdGlvbiBzKHQpe3QuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20tcy1cUysvZywiIikrdC5vcHRpb25zLnRoZW1lLnJlcGxhY2UoLyhefFxzKVxzKi9nLCIgY20tcy0iKSxfKHQpfWZ1bmN0aW9uIGEodCl7dSh0KSx1ZSh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zyh0KX0sMjApfWZ1bmN0aW9uIHUodCl7dmFyIGU9dC5kaXNwbGF5Lmd1dHRlcnMscj10Lm9wdGlvbnMuZ3V0dGVyczthaShlKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXSxvPWUuYXBwZW5kQ2hpbGQoc2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXIgIitpKSk7IkNvZGVNaXJyb3ItbGluZW51bWJlcnMiPT1pJiYodC5kaXNwbGF5LmxpbmVHdXR0ZXI9byxvLnN0eWxlLndpZHRoPSh0LmRpc3BsYXkubGluZU51bVdpZHRofHwxKSsicHgiKX1lLnN0eWxlLmRpc3BsYXk9bj8iIjoibm9uZSJ9ZnVuY3Rpb24gYyh0LGUpe2lmKDA9PWUuaGVpZ2h0KXJldHVybiAwO2Zvcih2YXIgcixuPWUudGV4dC5sZW5ndGgsaT1lO3I9UnIoaSk7KXt2YXIgbz1yLmZpbmQoKTtpPWduKHQsby5mcm9tLmxpbmUpLG4rPW8uZnJvbS5jaC1vLnRvLmNofWZvcihpPWU7cj1CcihpKTspe3ZhciBvPXIuZmluZCgpO24tPWkudGV4dC5sZW5ndGgtby5mcm9tLmNoLGk9Z24odCxvLnRvLmxpbmUpLG4rPWkudGV4dC5sZW5ndGgtby50by5jaH1yZXR1cm4gbn1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuZGlzcGxheSxyPXQuZG9jO2UubWF4TGluZT1nbihyLHIuZmlyc3QpLGUubWF4TGluZUxlbmd0aD1jKHIsZS5tYXhMaW5lKSxlLm1heExpbmVDaGFuZ2VkPSEwLHIuaXRlcihmdW5jdGlvbih0KXt2YXIgbj1jKHIsdCk7bj5lLm1heExpbmVMZW5ndGgmJihlLm1heExpbmVMZW5ndGg9bixlLm1heExpbmU9dCl9KX1mdW5jdGlvbiBoKHQpe3ZhciBlPXRpKHQuZ3V0dGVycywiQ29kZU1pcnJvci1saW5lbnVtYmVycyIpOy0xPT1lJiZ0LmxpbmVOdW1iZXJzP3QuZ3V0dGVycz10Lmd1dHRlcnMuY29uY2F0KFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKTplPi0xJiYhdC5saW5lTnVtYmVycyYmKHQuZ3V0dGVycz10Lmd1dHRlcnMuc2xpY2UoMCksdC5ndXR0ZXJzLnNwbGljZShlLDEpKX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQuZGlzcGxheSxyPXQuZG9jLmhlaWdodCxuPXIrRihlKTtlLnNpemVyLnN0eWxlLm1pbkhlaWdodD1lLmhlaWdodEZvcmNlci5zdHlsZS50b3A9bisicHgiLGUuZ3V0dGVycy5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgobixlLnNjcm9sbGVyLmNsaWVudEhlaWdodC1UbykrInB4Ijt2YXIgaT1NYXRoLm1heChuLGUuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0KSxvPWUuc2Nyb2xsZXIuc2Nyb2xsV2lkdGg+ZS5zY3JvbGxlci5jbGllbnRXaWR0aCsxLGw9aT5lLnNjcm9sbGVyLmNsaWVudEhlaWdodCsxO2w/KGUuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJWLnN0eWxlLmJvdHRvbT1vP2RpKGUubWVhc3VyZSkrInB4IjoiMCIsZS5zY3JvbGxiYXJWLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0PWktZS5zY3JvbGxlci5jbGllbnRIZWlnaHQrZS5zY3JvbGxiYXJWLmNsaWVudEhlaWdodCsicHgiKTooZS5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXk9IiIsZS5zY3JvbGxiYXJWLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0PSIwIiksbz8oZS5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhckguc3R5bGUucmlnaHQ9bD9kaShlLm1lYXN1cmUpKyJweCI6IjAiLGUuc2Nyb2xsYmFySC5maXJzdENoaWxkLnN0eWxlLndpZHRoPWUuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtZS5zY3JvbGxlci5jbGllbnRXaWR0aCtlLnNjcm9sbGJhckguY2xpZW50V2lkdGgrInB4Iik6KGUuc2Nyb2xsYmFySC5zdHlsZS5kaXNwbGF5PSIiLGUuc2Nyb2xsYmFySC5maXJzdENoaWxkLnN0eWxlLndpZHRoPSIwIiksbyYmbD8oZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmhlaWdodD1lLnNjcm9sbGJhckZpbGxlci5zdHlsZS53aWR0aD1kaShlLm1lYXN1cmUpKyJweCIpOmUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9IiIsbyYmdC5vcHRpb25zLmNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyJiZ0Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/KGUuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLmd1dHRlckZpbGxlci5zdHlsZS5oZWlnaHQ9ZGkoZS5tZWFzdXJlKSsicHgiLGUuZ3V0dGVyRmlsbGVyLnN0eWxlLndpZHRoPWUuZ3V0dGVycy5vZmZzZXRXaWR0aCsicHgiKTplLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSIiLFBpJiYwPT09ZGkoZS5tZWFzdXJlKSYmKGUuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aD1lLnNjcm9sbGJhckguc3R5bGUubWluSGVpZ2h0PVJpPyIxOHB4IjoiMTJweCIsZS5zY3JvbGxiYXJWLnN0eWxlLnBvaW50ZXJFdmVudHM9ZS5zY3JvbGxiYXJILnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiKX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj10LnNjcm9sbGVyLnNjcm9sbFRvcCxpPXQud3JhcHBlci5jbGllbnRIZWlnaHQ7Im51bWJlciI9PXR5cGVvZiByP249cjpyJiYobj1yLnRvcCxpPXIuYm90dG9tLXIudG9wKSxuPU1hdGguZmxvb3Iobi1JKHQpKTt2YXIgbz1NYXRoLmNlaWwobitpKTtyZXR1cm57ZnJvbTp4bihlLG4pLHRvOnhuKGUsbyl9fWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5kaXNwbGF5O2lmKGUuYWxpZ25XaWRnZXRzfHxlLmd1dHRlcnMuZmlyc3RDaGlsZCYmdC5vcHRpb25zLmZpeGVkR3V0dGVyKXtmb3IodmFyIHI9eShlKS1lLnNjcm9sbGVyLnNjcm9sbExlZnQrdC5kb2Muc2Nyb2xsTGVmdCxuPWUuZ3V0dGVycy5vZmZzZXRXaWR0aCxpPXIrInB4IixvPWUubGluZURpdi5maXJzdENoaWxkO287bz1vLm5leHRTaWJsaW5nKWlmKG8uYWxpZ25hYmxlKWZvcih2YXIgbD0wLHM9by5hbGlnbmFibGU7bDxzLmxlbmd0aDsrK2wpc1tsXS5zdHlsZS5sZWZ0PWk7dC5vcHRpb25zLmZpeGVkR3V0dGVyJiYoZS5ndXR0ZXJzLnN0eWxlLmxlZnQ9cituKyJweCIpfX1mdW5jdGlvbiBtKHQpe2lmKCF0Lm9wdGlvbnMubGluZU51bWJlcnMpcmV0dXJuITE7dmFyIGU9dC5kb2Mscj12KHQub3B0aW9ucyxlLmZpcnN0K2Uuc2l6ZS0xKSxuPXQuZGlzcGxheTtpZihyLmxlbmd0aCE9bi5saW5lTnVtQ2hhcnMpe3ZhciBpPW4ubWVhc3VyZS5hcHBlbmRDaGlsZChzaSgiZGl2Iixbc2koImRpdiIscildLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IikpLG89aS5maXJzdENoaWxkLm9mZnNldFdpZHRoLGw9aS5vZmZzZXRXaWR0aC1vO3JldHVybiBuLmxpbmVHdXR0ZXIuc3R5bGUud2lkdGg9IiIsbi5saW5lTnVtSW5uZXJXaWR0aD1NYXRoLm1heChvLG4ubGluZUd1dHRlci5vZmZzZXRXaWR0aC1sKSxuLmxpbmVOdW1XaWR0aD1uLmxpbmVOdW1Jbm5lcldpZHRoK2wsbi5saW5lTnVtQ2hhcnM9bi5saW5lTnVtSW5uZXJXaWR0aD9yLmxlbmd0aDotMSxuLmxpbmVHdXR0ZXIuc3R5bGUud2lkdGg9bi5saW5lTnVtV2lkdGgrInB4IiwhMH1yZXR1cm4hMX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIFN0cmluZyh0LmxpbmVOdW1iZXJGb3JtYXR0ZXIoZSt0LmZpcnN0TGluZU51bWJlcikpfWZ1bmN0aW9uIHkodCl7cmV0dXJuIGZpKHQuc2Nyb2xsZXIpLmxlZnQtZmkodC5zaXplcikubGVmdH1mdW5jdGlvbiBiKHQsZSxyLG4pe2Zvcih2YXIgaSxvPXQuZGlzcGxheS5zaG93aW5nRnJvbSxsPXQuZGlzcGxheS5zaG93aW5nVG8scz1wKHQuZGlzcGxheSx0LmRvYyxyKSxhPSEwOzthPSExKXt2YXIgdT10LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg7aWYoIXgodCxlLHMsbikpYnJlYWs7aWYoaT0hMCxlPVtdLEEodCksZCh0KSxhJiZ0Lm9wdGlvbnMubGluZVdyYXBwaW5nJiZ1IT10LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpbj0hMDtlbHNlIGlmKG49ITEsciYmKHI9TWF0aC5taW4odC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbEhlaWdodC10LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LCJudW1iZXIiPT10eXBlb2Ygcj9yOnIudG9wKSkscz1wKHQuZGlzcGxheSx0LmRvYyxyKSxzLmZyb20+PXQuZGlzcGxheS5zaG93aW5nRnJvbSYmcy50bzw9dC5kaXNwbGF5LnNob3dpbmdUbylicmVha31yZXR1cm4gaSYmKFVuKHQsInVwZGF0ZSIsdCksKHQuZGlzcGxheS5zaG93aW5nRnJvbSE9b3x8dC5kaXNwbGF5LnNob3dpbmdUbyE9bCkmJlVuKHQsInZpZXdwb3J0Q2hhbmdlIix0LHQuZGlzcGxheS5zaG93aW5nRnJvbSx0LmRpc3BsYXkuc2hvd2luZ1RvKSksaX1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBpPXQuZGlzcGxheSxvPXQuZG9jO2lmKCFpLndyYXBwZXIuY2xpZW50V2lkdGgpcmV0dXJuIGkuc2hvd2luZ0Zyb209aS5zaG93aW5nVG89by5maXJzdCxpLnZpZXdPZmZzZXQ9MCx2b2lkIDA7aWYoISghbiYmMD09ZS5sZW5ndGgmJnIuZnJvbT5pLnNob3dpbmdGcm9tJiZyLnRvPGkuc2hvd2luZ1RvKSl7bSh0KSYmKGU9W3tmcm9tOm8uZmlyc3QsdG86by5maXJzdCtvLnNpemV9XSk7dmFyIGw9aS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0PWkuZ3V0dGVycy5vZmZzZXRXaWR0aCsicHgiO2kuc2Nyb2xsYmFySC5zdHlsZS5sZWZ0PXQub3B0aW9ucy5maXhlZEd1dHRlcj9sOiIwIjt2YXIgcz0xLzA7aWYodC5vcHRpb25zLmxpbmVOdW1iZXJzKWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKWVbYV0uZGlmZiYmZVthXS5mcm9tPHMmJihzPWVbYV0uZnJvbSk7dmFyIHU9by5maXJzdCtvLnNpemUsYz1NYXRoLm1heChyLmZyb20tdC5vcHRpb25zLnZpZXdwb3J0TWFyZ2luLG8uZmlyc3QpLGY9TWF0aC5taW4odSxyLnRvK3Qub3B0aW9ucy52aWV3cG9ydE1hcmdpbik7aWYoaS5zaG93aW5nRnJvbTxjJiZjLWkuc2hvd2luZ0Zyb208MjAmJihjPU1hdGgubWF4KG8uZmlyc3QsaS5zaG93aW5nRnJvbSkpLGkuc2hvd2luZ1RvPmYmJmkuc2hvd2luZ1RvLWY8MjAmJihmPU1hdGgubWluKHUsaS5zaG93aW5nVG8pKSxRaSlmb3IoYz1ibihHcihvLGduKG8sYykpKTt1PmYmJlZyKG8sZ24obyxmKSk7KSsrZjt2YXIgaD1be2Zyb206TWF0aC5tYXgoaS5zaG93aW5nRnJvbSxvLmZpcnN0KSx0bzpNYXRoLm1pbihpLnNob3dpbmdUbyx1KX1dO2lmKGg9aFswXS5mcm9tPj1oWzBdLnRvP1tdOkwoaCxlKSxRaSlmb3IodmFyIGE9MDthPGgubGVuZ3RoOysrYSlmb3IodmFyIGQscD1oW2FdO2Q9QnIoZ24obyxwLnRvLTEpKTspe3ZhciBnPWQuZmluZCgpLmZyb20ubGluZTtpZighKGc+cC5mcm9tKSl7aC5zcGxpY2UoYS0tLDEpO2JyZWFrfXAudG89Z31mb3IodmFyIHY9MCxhPTA7YTxoLmxlbmd0aDsrK2Epe3ZhciBwPWhbYV07cC5mcm9tPGMmJihwLmZyb209YykscC50bz5mJiYocC50bz1mKSxwLmZyb20+PXAudG8/aC5zcGxpY2UoYS0tLDEpOnYrPXAudG8tcC5mcm9tfWlmKCFuJiZ2PT1mLWMmJmM9PWkuc2hvd2luZ0Zyb20mJmY9PWkuc2hvd2luZ1RvKXJldHVybiB3KHQpLHZvaWQgMDtoLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5mcm9tLWUuZnJvbX0pO3RyeXt2YXIgeT1kb2N1bWVudC5hY3RpdmVFbGVtZW50fWNhdGNoKGIpe30uNyooZi1jKT52JiYoaS5saW5lRGl2LnN0eWxlLmRpc3BsYXk9Im5vbmUiKSxTKHQsYyxmLGgscyksaS5saW5lRGl2LnN0eWxlLmRpc3BsYXk9IiIseSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9eSYmeS5vZmZzZXRIZWlnaHQmJnkuZm9jdXMoKTt2YXIgeD1jIT1pLnNob3dpbmdGcm9tfHxmIT1pLnNob3dpbmdUb3x8aS5sYXN0U2l6ZUMhPWkud3JhcHBlci5jbGllbnRIZWlnaHQ7cmV0dXJuIHgmJihpLmxhc3RTaXplQz1pLndyYXBwZXIuY2xpZW50SGVpZ2h0LFcodCw0MDApKSxpLnNob3dpbmdGcm9tPWMsaS5zaG93aW5nVG89ZixDKHQpLHcodCksITB9fWZ1bmN0aW9uIEModCl7Zm9yKHZhciBlLHI9dC5kaXNwbGF5LG49ci5saW5lRGl2Lm9mZnNldFRvcCxpPXIubGluZURpdi5maXJzdENoaWxkO2k7aT1pLm5leHRTaWJsaW5nKWlmKGkubGluZU9iail7aWYoSGkpe3ZhciBvPWkub2Zmc2V0VG9wK2kub2Zmc2V0SGVpZ2h0O2U9by1uLG49b31lbHNle3ZhciBsPWZpKGkpO2U9bC5ib3R0b20tbC50b3B9dmFyIHM9aS5saW5lT2JqLmhlaWdodC1lO2lmKDI+ZSYmKGU9cmUocikpLHM+LjAwMXx8LS4wMDE+cyl7eW4oaS5saW5lT2JqLGUpO3ZhciBhPWkubGluZU9iai53aWRnZXRzO2lmKGEpZm9yKHZhciB1PTA7dTxhLmxlbmd0aDsrK3UpYVt1XS5oZWlnaHQ9YVt1XS5ub2RlLm9mZnNldEhlaWdodH19fWZ1bmN0aW9uIHcodCl7dmFyIGU9dC5kaXNwbGF5LnZpZXdPZmZzZXQ9Q24odCxnbih0LmRvYyx0LmRpc3BsYXkuc2hvd2luZ0Zyb20pKTt0LmRpc3BsYXkubW92ZXIuc3R5bGUudG9wPWUrInB4In1mdW5jdGlvbiBMKHQsZSl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aHx8MDtuPnI7KytyKXtmb3IodmFyIGk9ZVtyXSxvPVtdLGw9aS5kaWZmfHwwLHM9MCxhPXQubGVuZ3RoO2E+czsrK3Mpe3ZhciB1PXRbc107aS50bzw9dS5mcm9tJiZpLmRpZmY/by5wdXNoKHtmcm9tOnUuZnJvbStsLHRvOnUudG8rbH0pOmkudG88PXUuZnJvbXx8aS5mcm9tPj11LnRvP28ucHVzaCh1KTooaS5mcm9tPnUuZnJvbSYmby5wdXNoKHtmcm9tOnUuZnJvbSx0bzppLmZyb219KSxpLnRvPHUudG8mJm8ucHVzaCh7ZnJvbTppLnRvK2wsdG86dS50bytsfSkpfXQ9b31yZXR1cm4gdH1mdW5jdGlvbiBrKHQpe2Zvcih2YXIgZT10LmRpc3BsYXkscj17fSxuPXt9LGk9ZS5ndXR0ZXJzLmZpcnN0Q2hpbGQsbz0wO2k7aT1pLm5leHRTaWJsaW5nLCsrbylyW3Qub3B0aW9ucy5ndXR0ZXJzW29dXT1pLm9mZnNldExlZnQsblt0Lm9wdGlvbnMuZ3V0dGVyc1tvXV09aS5vZmZzZXRXaWR0aDtyZXR1cm57Zml4ZWRQb3M6eShlKSxndXR0ZXJUb3RhbFdpZHRoOmUuZ3V0dGVycy5vZmZzZXRXaWR0aCxndXR0ZXJMZWZ0OnIsZ3V0dGVyV2lkdGg6bix3cmFwcGVyV2lkdGg6ZS53cmFwcGVyLmNsaWVudFdpZHRofX1mdW5jdGlvbiBTKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyhlKXt2YXIgcj1lLm5leHRTaWJsaW5nO3JldHVybiBXaSYmS2kmJnQuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQ9PWU/KGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsZS5saW5lT2JqPW51bGwpOmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSxyfXZhciBsPWsodCkscz10LmRpc3BsYXksYT10Lm9wdGlvbnMubGluZU51bWJlcnM7bi5sZW5ndGh8fFdpJiZ0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0fHxhaShzLmxpbmVEaXYpO3ZhciB1PXMubGluZURpdixjPXUuZmlyc3RDaGlsZCxmPW4uc2hpZnQoKSxoPWU7Zm9yKHQuZG9jLml0ZXIoZSxyLGZ1bmN0aW9uKGUpe2lmKGYmJmYudG89PWgmJihmPW4uc2hpZnQoKSksVnIodC5kb2MsZSkpe2lmKDAhPWUuaGVpZ2h0JiZ5bihlLDApLGUud2lkZ2V0cyYmYyYmYy5wcmV2aW91c1NpYmxpbmcpZm9yKHZhciByPTA7cjxlLndpZGdldHMubGVuZ3RoOysrcil7dmFyIHM9ZS53aWRnZXRzW3JdO2lmKHMuc2hvd0lmSGlkZGVuKXt2YXIgZD1jLnByZXZpb3VzU2libGluZztpZigvcHJlL2kudGVzdChkLm5vZGVOYW1lKSl7dmFyIHA9c2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmUiKTtkLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHAsZCkscC5hcHBlbmRDaGlsZChkKSxkPXB9dmFyIGc9ZC5hcHBlbmRDaGlsZChzaSgiZGl2Iixbcy5ub2RlXSwiQ29kZU1pcnJvci1saW5ld2lkZ2V0IikpO3MuaGFuZGxlTW91c2VFdmVudHN8fChnLmlnbm9yZUV2ZW50cz0hMCksVChzLGcsZCxsKX19fWVsc2UgaWYoZiYmZi5mcm9tPD1oJiZmLnRvPmgpe2Zvcig7Yy5saW5lT2JqIT1lOyljPW8oYyk7YSYmaD49aSYmYy5saW5lTnVtYmVyJiZjaShjLmxpbmVOdW1iZXIsdih0Lm9wdGlvbnMsaCkpLGM9Yy5uZXh0U2libGluZ31lbHNle2lmKGUud2lkZ2V0cylmb3IodmFyIG0seT0wLGI9YztiJiYyMD55OysreSxiPWIubmV4dFNpYmxpbmcpaWYoYi5saW5lT2JqPT1lJiYvZGl2L2kudGVzdChiLm5vZGVOYW1lKSl7bT1iO2JyZWFrfXZhciB4PU0odCxlLGgsbCxtKTtpZih4IT1tKXUuaW5zZXJ0QmVmb3JlKHgsYyk7ZWxzZXtmb3IoO2MhPW07KWM9byhjKTtjPWMubmV4dFNpYmxpbmd9eC5saW5lT2JqPWV9KytofSk7YzspYz1vKGMpfWZ1bmN0aW9uIE0odCxlLHIsbixpKXt2YXIgbyxsPXJuKHQsZSkscz1sLnByZSxhPWUuZ3V0dGVyTWFya2Vycyx1PXQuZGlzcGxheSxjPWwuYmdDbGFzcz9sLmJnQ2xhc3MrIiAiKyhlLmJnQ2xhc3N8fCIiKTplLmJnQ2xhc3M7aWYoISh0Lm9wdGlvbnMubGluZU51bWJlcnN8fGF8fGN8fGUud3JhcENsYXNzfHxlLndpZGdldHMpKXJldHVybiBzO2lmKGkpe2kuYWxpZ25hYmxlPW51bGw7Zm9yKHZhciBmLGg9ITAsZD0wLHA9bnVsbCxnPWkuZmlyc3RDaGlsZDtnO2c9ZilpZihmPWcubmV4dFNpYmxpbmcsL1xiQ29kZU1pcnJvci1saW5ld2lkZ2V0XGIvLnRlc3QoZy5jbGFzc05hbWUpKXtmb3IodmFyIG09MDttPGUud2lkZ2V0cy5sZW5ndGg7KyttKXt2YXIgeT1lLndpZGdldHNbbV07aWYoeS5ub2RlPT1nLmZpcnN0Q2hpbGQpe3kuYWJvdmV8fHB8fChwPWcpLFQoeSxnLGksbiksKytkO2JyZWFrfX1pZihtPT1lLndpZGdldHMubGVuZ3RoKXtoPSExO2JyZWFrfX1lbHNlIGkucmVtb3ZlQ2hpbGQoZyk7aS5pbnNlcnRCZWZvcmUocyxwKSxoJiZkPT1lLndpZGdldHMubGVuZ3RoJiYobz1pLGkuY2xhc3NOYW1lPWUud3JhcENsYXNzfHwiIil9aWYob3x8KG89c2koImRpdiIsbnVsbCxlLndyYXBDbGFzcywicG9zaXRpb246IHJlbGF0aXZlIiksby5hcHBlbmRDaGlsZChzKSksYyYmby5pbnNlcnRCZWZvcmUoc2koImRpdiIsbnVsbCxjKyIgQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCIpLG8uZmlyc3RDaGlsZCksdC5vcHRpb25zLmxpbmVOdW1iZXJzfHxhKXt2YXIgYj1vLmluc2VydEJlZm9yZShzaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogIisodC5vcHRpb25zLmZpeGVkR3V0dGVyP24uZml4ZWRQb3M6LW4uZ3V0dGVyVG90YWxXaWR0aCkrInB4Iiksby5maXJzdENoaWxkKTtpZih0Lm9wdGlvbnMuZml4ZWRHdXR0ZXImJihvLmFsaWduYWJsZXx8KG8uYWxpZ25hYmxlPVtdKSkucHVzaChiKSwhdC5vcHRpb25zLmxpbmVOdW1iZXJzfHxhJiZhWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl18fChvLmxpbmVOdW1iZXI9Yi5hcHBlbmRDaGlsZChzaSgiZGl2Iix2KHQub3B0aW9ucyxyKSwiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsImxlZnQ6ICIrbi5ndXR0ZXJMZWZ0WyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0rInB4OyB3aWR0aDogIit1LmxpbmVOdW1Jbm5lcldpZHRoKyJweCIpKSksYSlmb3IodmFyIHg9MDt4PHQub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsrK3gpe3ZhciBDPXQub3B0aW9ucy5ndXR0ZXJzW3hdLHc9YS5oYXNPd25Qcm9wZXJ0eShDKSYmYVtDXTt3JiZiLmFwcGVuZENoaWxkKHNpKCJkaXYiLFt3XSwiQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIituLmd1dHRlckxlZnRbQ10rInB4OyB3aWR0aDogIituLmd1dHRlcldpZHRoW0NdKyJweCIpKX19aWYoSGkmJihvLnN0eWxlLnpJbmRleD0yKSxlLndpZGdldHMmJm8hPWkpZm9yKHZhciBtPTAsTD1lLndpZGdldHM7bTxMLmxlbmd0aDsrK20pe3ZhciB5PUxbbV0saz1zaSgiZGl2IixbeS5ub2RlXSwiQ29kZU1pcnJvci1saW5ld2lkZ2V0Iik7eS5oYW5kbGVNb3VzZUV2ZW50c3x8KGsuaWdub3JlRXZlbnRzPSEwKSxUKHksayxvLG4pLHkuYWJvdmU/by5pbnNlcnRCZWZvcmUoayx0Lm9wdGlvbnMubGluZU51bWJlcnMmJjAhPWUuaGVpZ2h0P2I6cyk6by5hcHBlbmRDaGlsZChrKSxVbih5LCJyZWRyYXciKX1yZXR1cm4gb31mdW5jdGlvbiBUKHQsZSxyLG4pe2lmKHQubm9IU2Nyb2xsKXsoci5hbGlnbmFibGV8fChyLmFsaWduYWJsZT1bXSkpLnB1c2goZSk7dmFyIGk9bi53cmFwcGVyV2lkdGg7ZS5zdHlsZS5sZWZ0PW4uZml4ZWRQb3MrInB4Iix0LmNvdmVyR3V0dGVyfHwoaS09bi5ndXR0ZXJUb3RhbFdpZHRoLGUuc3R5bGUucGFkZGluZ0xlZnQ9bi5ndXR0ZXJUb3RhbFdpZHRoKyJweCIpLGUuc3R5bGUud2lkdGg9aSsicHgifXQuY292ZXJHdXR0ZXImJihlLnN0eWxlLnpJbmRleD01LGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIix0Lm5vSFNjcm9sbHx8KGUuc3R5bGUubWFyZ2luTGVmdD0tbi5ndXR0ZXJUb3RhbFdpZHRoKyJweCIpKX1mdW5jdGlvbiBBKHQpe3ZhciBlPXQuZGlzcGxheSxyPWplKHQuZG9jLnNlbC5mcm9tLHQuZG9jLnNlbC50byk7aWYocnx8dC5vcHRpb25zLnNob3dDdXJzb3JXaGVuU2VsZWN0aW5nP0godCk6ZS5jdXJzb3Iuc3R5bGUuZGlzcGxheT1lLm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHI/ZS5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheT0ibm9uZSI6Tih0KSx0Lm9wdGlvbnMubW92ZUlucHV0V2l0aEN1cnNvcil7dmFyIG49USh0LHQuZG9jLnNlbC5oZWFkLCJkaXYiKSxpPWZpKGUud3JhcHBlciksbz1maShlLmxpbmVEaXYpO2UuaW5wdXREaXYuc3R5bGUudG9wPU1hdGgubWF4KDAsTWF0aC5taW4oZS53cmFwcGVyLmNsaWVudEhlaWdodC0xMCxuLnRvcCtvLnRvcC1pLnRvcCkpKyJweCIsZS5pbnB1dERpdi5zdHlsZS5sZWZ0PU1hdGgubWF4KDAsTWF0aC5taW4oZS53cmFwcGVyLmNsaWVudFdpZHRoLTEwLG4ubGVmdCtvLmxlZnQtaS5sZWZ0KSkrInB4In19ZnVuY3Rpb24gSCh0KXt2YXIgZT10LmRpc3BsYXkscj1RKHQsdC5kb2Muc2VsLmhlYWQsImRpdiIpO2UuY3Vyc29yLnN0eWxlLmxlZnQ9ci5sZWZ0KyJweCIsZS5jdXJzb3Iuc3R5bGUudG9wPXIudG9wKyJweCIsZS5jdXJzb3Iuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KDAsci5ib3R0b20tci50b3ApKnQub3B0aW9ucy5jdXJzb3JIZWlnaHQrInB4IixlLmN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLHIub3RoZXI/KGUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0iIixlLm90aGVyQ3Vyc29yLnN0eWxlLmxlZnQ9ci5vdGhlci5sZWZ0KyJweCIsZS5vdGhlckN1cnNvci5zdHlsZS50b3A9ci5vdGhlci50b3ArInB4IixlLm90aGVyQ3Vyc29yLnN0eWxlLmhlaWdodD0uODUqKHIub3RoZXIuYm90dG9tLXIub3RoZXIudG9wKSsicHgiKTplLm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXk9Im5vbmUifWZ1bmN0aW9uIE4odCl7ZnVuY3Rpb24gZSh0LGUscixuKXswPmUmJihlPTApLGwuYXBwZW5kQ2hpbGQoc2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1zZWxlY3RlZCIsInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogIit0KyJweDsgdG9wOiAiK2UrInB4OyB3aWR0aDogIisobnVsbD09cj9zLXQ6cikrInB4OyBoZWlnaHQ6ICIrKG4tZSkrInB4IikpfWZ1bmN0aW9uIHIocixuLG8pe2Z1bmN0aW9uIGwoZSxuKXtyZXR1cm4gcSh0LFllKHIsZSksImRpdiIsZixuKX12YXIgdSxjLGY9Z24oaSxyKSxoPWYudGV4dC5sZW5ndGg7cmV0dXJuIGdpKHduKGYpLG58fDAsbnVsbD09bz9oOm8sZnVuY3Rpb24odCxyLGkpe3ZhciBmLGQscCxnPWwodCwibGVmdCIpO2lmKHQ9PXIpZj1nLGQ9cD1nLmxlZnQ7ZWxzZXtpZihmPWwoci0xLCJyaWdodCIpLCJydGwiPT1pKXt2YXIgbT1nO2c9ZixmPW19ZD1nLmxlZnQscD1mLnJpZ2h0fW51bGw9PW4mJjA9PXQmJihkPWEpLGYudG9wLWcudG9wPjMmJihlKGQsZy50b3AsbnVsbCxnLmJvdHRvbSksZD1hLGcuYm90dG9tPGYudG9wJiZlKGQsZy5ib3R0b20sbnVsbCxmLnRvcCkpLG51bGw9PW8mJnI9PWgmJihwPXMpLCghdXx8Zy50b3A8dS50b3B8fGcudG9wPT11LnRvcCYmZy5sZWZ0PHUubGVmdCkmJih1PWcpLCghY3x8Zi5ib3R0b20+Yy5ib3R0b218fGYuYm90dG9tPT1jLmJvdHRvbSYmZi5yaWdodD5jLnJpZ2h0KSYmKGM9ZiksYSsxPmQmJihkPWEpLGUoZCxmLnRvcCxwLWQsZi5ib3R0b20pfSkse3N0YXJ0OnUsZW5kOmN9fXZhciBuPXQuZGlzcGxheSxpPXQuZG9jLG89dC5kb2Muc2VsLGw9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHM9bi5saW5lU3BhY2Uub2Zmc2V0V2lkdGgsYT1QKHQuZGlzcGxheSk7aWYoby5mcm9tLmxpbmU9PW8udG8ubGluZSlyKG8uZnJvbS5saW5lLG8uZnJvbS5jaCxvLnRvLmNoKTtlbHNle3ZhciB1PWduKGksby5mcm9tLmxpbmUpLGM9Z24oaSxvLnRvLmxpbmUpLGY9R3IoaSx1KT09R3IoaSxjKSxoPXIoby5mcm9tLmxpbmUsby5mcm9tLmNoLGY/dS50ZXh0Lmxlbmd0aDpudWxsKS5lbmQsZD1yKG8udG8ubGluZSxmPzA6bnVsbCxvLnRvLmNoKS5zdGFydDtmJiYoaC50b3A8ZC50b3AtMj8oZShoLnJpZ2h0LGgudG9wLG51bGwsaC5ib3R0b20pLGUoYSxkLnRvcCxkLmxlZnQsZC5ib3R0b20pKTplKGgucmlnaHQsaC50b3AsZC5sZWZ0LWgucmlnaHQsaC5ib3R0b20pKSxoLmJvdHRvbTxkLnRvcCYmZShhLGguYm90dG9tLG51bGwsZC50b3ApfXVpKG4uc2VsZWN0aW9uRGl2LGwpLG4uc2VsZWN0aW9uRGl2LnN0eWxlLmRpc3BsYXk9IiJ9ZnVuY3Rpb24gRCh0KXtpZih0LnN0YXRlLmZvY3VzZWQpe3ZhciBlPXQuZGlzcGxheTtjbGVhckludGVydmFsKGUuYmxpbmtlcik7dmFyIHI9ITA7ZS5jdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT1lLm90aGVyQ3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9IiIsdC5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZT4wJiYoZS5ibGlua2VyPXNldEludGVydmFsKGZ1bmN0aW9uKCl7ZS5jdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT1lLm90aGVyQ3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9KHI9IXIpPyIiOiJoaWRkZW4ifSx0Lm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlKSl9fWZ1bmN0aW9uIFcodCxlKXt0LmRvYy5tb2RlLnN0YXJ0U3RhdGUmJnQuZG9jLmZyb250aWVyPHQuZGlzcGxheS5zaG93aW5nVG8mJnQuc3RhdGUuaGlnaGxpZ2h0LnNldChlLGlpKE8sdCkpfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5kb2M7aWYoZS5mcm9udGllcjxlLmZpcnN0JiYoZS5mcm9udGllcj1lLmZpcnN0KSwhKGUuZnJvbnRpZXI+PXQuZGlzcGxheS5zaG93aW5nVG8pKXt2YXIgcixuPStuZXcgRGF0ZSt0Lm9wdGlvbnMud29ya1RpbWUsaT1icihlLm1vZGUseih0LGUuZnJvbnRpZXIpKSxvPVtdO2UuaXRlcihlLmZyb250aWVyLE1hdGgubWluKGUuZmlyc3QrZS5zaXplLHQuZGlzcGxheS5zaG93aW5nVG8rNTAwKSxmdW5jdGlvbihsKXtpZihlLmZyb250aWVyPj10LmRpc3BsYXkuc2hvd2luZ0Zyb20pe3ZhciBzPWwuc3R5bGVzO2wuc3R5bGVzPVFyKHQsbCxpLCEwKTtmb3IodmFyIGE9IXN8fHMubGVuZ3RoIT1sLnN0eWxlcy5sZW5ndGgsdT0wOyFhJiZ1PHMubGVuZ3RoOysrdSlhPXNbdV0hPWwuc3R5bGVzW3VdO2EmJihyJiZyLmVuZD09ZS5mcm9udGllcj9yLmVuZCsrOm8ucHVzaChyPXtzdGFydDplLmZyb250aWVyLGVuZDplLmZyb250aWVyKzF9KSksbC5zdGF0ZUFmdGVyPWJyKGUubW9kZSxpKX1lbHNlIHRuKHQsbC50ZXh0LGkpLGwuc3RhdGVBZnRlcj0wPT1lLmZyb250aWVyJTU/YnIoZS5tb2RlLGkpOm51bGw7cmV0dXJuKytlLmZyb250aWVyLCtuZXcgRGF0ZT5uPyhXKHQsdC5vcHRpb25zLndvcmtEZWxheSksITApOnZvaWQgMH0pLG8ubGVuZ3RoJiZsZSh0LGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxvLmxlbmd0aDsrK3QpdWUodGhpcyxvW3RdLnN0YXJ0LG9bdF0uZW5kKX0pKCl9fWZ1bmN0aW9uIEUodCxlLHIpe2Zvcih2YXIgbixpLG89dC5kb2MsbD1yPy0xOmUtKHQuZG9jLm1vZGUuaW5uZXJNb2RlPzFlMzoxMDApLHM9ZTtzPmw7LS1zKXtpZihzPD1vLmZpcnN0KXJldHVybiBvLmZpcnN0O3ZhciBhPWduKG8scy0xKTtpZihhLnN0YXRlQWZ0ZXImJighcnx8czw9by5mcm9udGllcikpcmV0dXJuIHM7dmFyIHU9Wm4oYS50ZXh0LG51bGwsdC5vcHRpb25zLnRhYlNpemUpOyhudWxsPT1pfHxuPnUpJiYoaT1zLTEsbj11KX1yZXR1cm4gaX1mdW5jdGlvbiB6KHQsZSxyKXt2YXIgbj10LmRvYyxpPXQuZGlzcGxheTtpZighbi5tb2RlLnN0YXJ0U3RhdGUpcmV0dXJuITA7dmFyIG89RSh0LGUsciksbD1vPm4uZmlyc3QmJmduKG4sby0xKS5zdGF0ZUFmdGVyO3JldHVybiBsPWw/YnIobi5tb2RlLGwpOnhyKG4ubW9kZSksbi5pdGVyKG8sZSxmdW5jdGlvbihyKXt0bih0LHIudGV4dCxsKTt2YXIgcz1vPT1lLTF8fDA9PW8lNXx8bz49aS5zaG93aW5nRnJvbSYmbzxpLnNob3dpbmdUbztyLnN0YXRlQWZ0ZXI9cz9icihuLm1vZGUsbCk6bnVsbCwrK299KSxyJiYobi5mcm9udGllcj1vKSxsfWZ1bmN0aW9uIEkodCl7cmV0dXJuIHQubGluZVNwYWNlLm9mZnNldFRvcH1mdW5jdGlvbiBGKHQpe3JldHVybiB0Lm1vdmVyLm9mZnNldEhlaWdodC10LmxpbmVTcGFjZS5vZmZzZXRIZWlnaHR9ZnVuY3Rpb24gUCh0KXt2YXIgZT11aSh0Lm1lYXN1cmUsc2koInByZSIsbnVsbCxudWxsLCJ0ZXh0LWFsaWduOiBsZWZ0IikpLmFwcGVuZENoaWxkKHNpKCJzcGFuIiwieCIpKTtyZXR1cm4gZS5vZmZzZXRMZWZ0fWZ1bmN0aW9uIFIodCxlLHIsbixpKXt2YXIgbz0tMTtpZihuPW58fFYodCxlKSxuLmNydWRlKXt2YXIgbD1uLmxlZnQrcipuLndpZHRoO3JldHVybntsZWZ0OmwscmlnaHQ6bCtuLndpZHRoLHRvcDpuLnRvcCxib3R0b206bi5ib3R0b219fWZvcih2YXIgcz1yOztzKz1vKXt2YXIgYT1uW3NdO2lmKGEpYnJlYWs7MD5vJiYwPT1zJiYobz0xKX1yZXR1cm4gaT1zPnI/ImxlZnQiOnI+cz8icmlnaHQiOmksImxlZnQiPT1pJiZhLmxlZnRTaWRlP2E9YS5sZWZ0U2lkZToicmlnaHQiPT1pJiZhLnJpZ2h0U2lkZSYmKGE9YS5yaWdodFNpZGUpLHtsZWZ0OnI+cz9hLnJpZ2h0OmEubGVmdCxyaWdodDpzPnI/YS5sZWZ0OmEucmlnaHQsdG9wOmEudG9wLGJvdHRvbTphLmJvdHRvbX19ZnVuY3Rpb24gQih0LGUpe2Zvcih2YXIgcj10LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZSxuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07aWYoaS50ZXh0PT1lLnRleHQmJmkubWFya2VkU3BhbnM9PWUubWFya2VkU3BhbnMmJnQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aD09aS53aWR0aCYmaS5jbGFzc2VzPT1lLnRleHRDbGFzcysifCIrZS53cmFwQ2xhc3MpcmV0dXJuIGl9fWZ1bmN0aW9uIEcodCxlKXt2YXIgcj1CKHQsZSk7ciYmKHIudGV4dD1yLm1lYXN1cmU9ci5tYXJrZWRTcGFucz1udWxsKX1mdW5jdGlvbiBWKHQsZSl7dmFyIHI9Qih0LGUpO2lmKHIpcmV0dXJuIHIubWVhc3VyZTt2YXIgbj1LKHQsZSksaT10LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZSxvPXt0ZXh0OmUudGV4dCx3aWR0aDp0LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgsbWFya2VkU3BhbnM6ZS5tYXJrZWRTcGFucyxtZWFzdXJlOm4sY2xhc3NlczplLnRleHRDbGFzcysifCIrZS53cmFwQ2xhc3N9O3JldHVybiAxNj09aS5sZW5ndGg/aVsrK3QuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zJTE2XT1vOmkucHVzaChvKSxufWZ1bmN0aW9uIEsodCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPXQudG9wLXAudG9wLHI9dC5ib3R0b20tcC50b3A7cj52JiYocj12KSwwPmUmJihlPTApO2Zvcih2YXIgbj1nLmxlbmd0aC0yO24+PTA7bi09Mil7dmFyIGk9Z1tuXSxvPWdbbisxXTtpZighKGk+cnx8ZT5vKSYmKGU+PWkmJm8+PXJ8fGk+PWUmJnI+PW98fE1hdGgubWluKHIsbyktTWF0aC5tYXgoZSxpKT49ci1lPj4xKSl7Z1tuXT1NYXRoLm1pbihlLGkpLGdbbisxXT1NYXRoLm1heChyLG8pO2JyZWFrfX1yZXR1cm4gMD5uJiYobj1nLmxlbmd0aCxnLnB1c2goZSxyKSkse2xlZnQ6dC5sZWZ0LXAubGVmdCxyaWdodDp0LnJpZ2h0LXAubGVmdCx0b3A6bixib3R0b206bnVsbH19ZnVuY3Rpb24gbih0KXt0LmJvdHRvbT1nW3QudG9wKzFdLHQudG9wPWdbdC50b3BdfWlmKCF0Lm9wdGlvbnMubGluZVdyYXBwaW5nJiZlLnRleHQubGVuZ3RoPj10Lm9wdGlvbnMuY3J1ZGVNZWFzdXJpbmdGcm9tKXJldHVybiBVKHQsZSk7dmFyIGk9dC5kaXNwbGF5LG89bmkoZS50ZXh0Lmxlbmd0aCksbD1ybih0LGUsbywhMCkucHJlO2lmKEFpJiYhSGkmJiF0Lm9wdGlvbnMubGluZVdyYXBwaW5nJiZsLmNoaWxkTm9kZXMubGVuZ3RoPjEwMCl7Zm9yKHZhciBzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxhPTEwLHU9bC5jaGlsZE5vZGVzLmxlbmd0aCxjPTAsZj1NYXRoLmNlaWwodS9hKTtmPmM7KytjKXtmb3IodmFyIGg9c2koImRpdiIsbnVsbCxudWxsLCJkaXNwbGF5OiBpbmxpbmUtYmxvY2siKSxkPTA7YT5kJiZ1OysrZCloLmFwcGVuZENoaWxkKGwuZmlyc3RDaGlsZCksLS11O3MuYXBwZW5kQ2hpbGQoaCl9bC5hcHBlbmRDaGlsZChzKX11aShpLm1lYXN1cmUsbCk7dmFyIHA9ZmkoaS5saW5lRGl2KSxnPVtdLG09bmkoZS50ZXh0Lmxlbmd0aCksdj1sLm9mZnNldEhlaWdodDtOaSYmaS5tZWFzdXJlLmZpcnN0IT1sJiZ1aShpLm1lYXN1cmUsbCk7Zm9yKHZhciB5LGM9MDtjPG8ubGVuZ3RoOysrYylpZih5PW9bY10pe3ZhciBiPXkseD1udWxsO2lmKC9cYkNvZGVNaXJyb3Itd2lkZ2V0XGIvLnRlc3QoeS5jbGFzc05hbWUpJiZ5LmdldENsaWVudFJlY3RzKXsxPT15LmZpcnN0Q2hpbGQubm9kZVR5cGUmJihiPXkuZmlyc3RDaGlsZCk7dmFyIEM9Yi5nZXRDbGllbnRSZWN0cygpO0MubGVuZ3RoPjEmJih4PW1bY109cihDWzBdKSx4LnJpZ2h0U2lkZT1yKENbQy5sZW5ndGgtMV0pKX14fHwoeD1tW2NdPXIoZmkoYikpKSx5Lm1lYXN1cmVSaWdodCYmKHgucmlnaHQ9ZmkoeS5tZWFzdXJlUmlnaHQpLmxlZnQpLHkubGVmdFNpZGUmJih4LmxlZnRTaWRlPXIoZmkoeS5sZWZ0U2lkZSkpKX1haSh0LmRpc3BsYXkubWVhc3VyZSk7Zm9yKHZhciB5LGM9MDtjPG0ubGVuZ3RoOysrYykoeT1tW2NdKSYmKG4oeSkseS5sZWZ0U2lkZSYmbih5LmxlZnRTaWRlKSx5LnJpZ2h0U2lkZSYmbih5LnJpZ2h0U2lkZSkpO3JldHVybiBtfWZ1bmN0aW9uIFUodCxlKXt2YXIgcj1uZXcgYm8oZS50ZXh0LnNsaWNlKDAsMTAwKSxudWxsKTtlLnRleHRDbGFzcyYmKHIudGV4dENsYXNzPWUudGV4dENsYXNzKTt2YXIgbj1LKHQsciksaT1SKHQsciwwLG4sImxlZnQiKSxvPVIodCxyLDk5LG4sInJpZ2h0Iik7cmV0dXJue2NydWRlOiEwLHRvcDppLnRvcCxsZWZ0OmkubGVmdCxib3R0b206aS5ib3R0b20sd2lkdGg6KG8ucmlnaHQtaS5sZWZ0KS8xMDB9fWZ1bmN0aW9uIFgodCxlKXt2YXIgcj0hMTtpZihlLm1hcmtlZFNwYW5zKWZvcih2YXIgbj0wO248ZS5tYXJrZWRTcGFuczsrK24pe3ZhciBpPWUubWFya2VkU3BhbnNbbl07IWkuY29sbGFwc2VkfHxudWxsIT1pLnRvJiZpLnRvIT1lLnRleHQubGVuZ3RofHwocj0hMCl9dmFyIG89IXImJkIodCxlKTtpZihvfHxlLnRleHQubGVuZ3RoPj10Lm9wdGlvbnMuY3J1ZGVNZWFzdXJpbmdGcm9tKXJldHVybiBSKHQsZSxlLnRleHQubGVuZ3RoLG8mJm8ubWVhc3VyZSwicmlnaHQiKS5yaWdodDt2YXIgbD1ybih0LGUsbnVsbCwhMCkucHJlLHM9bC5hcHBlbmRDaGlsZChwaSh0LmRpc3BsYXkubWVhc3VyZSkpO3JldHVybiB1aSh0LmRpc3BsYXkubWVhc3VyZSxsKSxmaShzKS5yaWdodC1maSh0LmRpc3BsYXkubGluZURpdikubGVmdH1mdW5jdGlvbiBfKHQpe3QuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aD10LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcz0wLHQuZGlzcGxheS5jYWNoZWRDaGFyV2lkdGg9dC5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ9bnVsbCx0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwodC5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKSx0LmRpc3BsYXkubGluZU51bUNoYXJzPW51bGx9ZnVuY3Rpb24gWSgpe3JldHVybiB3aW5kb3cucGFnZVhPZmZzZXR8fChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnR9ZnVuY3Rpb24gaigpe3JldHVybiB3aW5kb3cucGFnZVlPZmZzZXR8fChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcH1mdW5jdGlvbiAkKHQsZSxyLG4pe2lmKGUud2lkZ2V0cylmb3IodmFyIGk9MDtpPGUud2lkZ2V0cy5sZW5ndGg7KytpKWlmKGUud2lkZ2V0c1tpXS5hYm92ZSl7dmFyIG89WXIoZS53aWRnZXRzW2ldKTtyLnRvcCs9byxyLmJvdHRvbSs9b31pZigibGluZSI9PW4pcmV0dXJuIHI7bnx8KG49ImxvY2FsIik7dmFyIGw9Q24odCxlKTtpZigibG9jYWwiPT1uP2wrPUkodC5kaXNwbGF5KTpsLT10LmRpc3BsYXkudmlld09mZnNldCwicGFnZSI9PW58fCJ3aW5kb3ciPT1uKXt2YXIgcz1maSh0LmRpc3BsYXkubGluZVNwYWNlKTtsKz1zLnRvcCsoIndpbmRvdyI9PW4/MDpqKCkpO3ZhciBhPXMubGVmdCsoIndpbmRvdyI9PW4/MDpZKCkpO3IubGVmdCs9YSxyLnJpZ2h0Kz1hfXJldHVybiByLnRvcCs9bCxyLmJvdHRvbSs9bCxyfWZ1bmN0aW9uIFoodCxlLHIpe2lmKCJkaXYiPT1yKXJldHVybiBlO3ZhciBuPWUubGVmdCxpPWUudG9wO2lmKCJwYWdlIj09ciluLT1ZKCksaS09aigpO2Vsc2UgaWYoImxvY2FsIj09cnx8IXIpe3ZhciBvPWZpKHQuZGlzcGxheS5zaXplcik7bis9by5sZWZ0LGkrPW8udG9wfXZhciBsPWZpKHQuZGlzcGxheS5saW5lU3BhY2UpO3JldHVybntsZWZ0Om4tbC5sZWZ0LHRvcDppLWwudG9wfX1mdW5jdGlvbiBxKHQsZSxyLG4saSl7cmV0dXJuIG58fChuPWduKHQuZG9jLGUubGluZSkpLCQodCxuLFIodCxuLGUuY2gsbnVsbCxpKSxyKX1mdW5jdGlvbiBRKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyhlLG8pe3ZhciBsPVIodCxuLGUsaSxvPyJyaWdodCI6ImxlZnQiKTtyZXR1cm4gbz9sLmxlZnQ9bC5yaWdodDpsLnJpZ2h0PWwubGVmdCwkKHQsbixsLHIpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1zW2VdLG49ci5sZXZlbCUyO3JldHVybiB0PT1taShyKSYmZSYmci5sZXZlbDxzW2UtMV0ubGV2ZWw/KHI9c1stLWVdLHQ9dmkociktKHIubGV2ZWwlMj8wOjEpLG49ITApOnQ9PXZpKHIpJiZlPHMubGVuZ3RoLTEmJnIubGV2ZWw8c1tlKzFdLmxldmVsJiYocj1zWysrZV0sdD1taShyKS1yLmxldmVsJTIsbj0hMSksbiYmdD09ci50byYmdD5yLmZyb20/byh0LTEpOm8odCxuKX1uPW58fGduKHQuZG9jLGUubGluZSksaXx8KGk9Vih0LG4pKTt2YXIgcz13bihuKSxhPWUuY2g7aWYoIXMpcmV0dXJuIG8oYSk7dmFyIHU9TGkocyxhKSxjPWwoYSx1KTtyZXR1cm4gbnVsbCE9Um8mJihjLm90aGVyPWwoYSxSbykpLGN9ZnVuY3Rpb24gSih0LGUscixuKXt2YXIgaT1uZXcgWWUodCxlKTtyZXR1cm4gaS54UmVsPW4sciYmKGkub3V0c2lkZT0hMCksaX1mdW5jdGlvbiB0ZSh0LGUscil7dmFyIG49dC5kb2M7aWYocis9dC5kaXNwbGF5LnZpZXdPZmZzZXQsMD5yKXJldHVybiBKKG4uZmlyc3QsMCwhMCwtMSk7dmFyIGk9eG4obixyKSxvPW4uZmlyc3Qrbi5zaXplLTE7aWYoaT5vKXJldHVybiBKKG4uZmlyc3Qrbi5zaXplLTEsZ24obixvKS50ZXh0Lmxlbmd0aCwhMCwxKTtmb3IoMD5lJiYoZT0wKTs7KXt2YXIgbD1nbihuLGkpLHM9ZWUodCxsLGksZSxyKSxhPUJyKGwpLHU9YSYmYS5maW5kKCk7aWYoIWF8fCEocy5jaD51LmZyb20uY2h8fHMuY2g9PXUuZnJvbS5jaCYmcy54UmVsPjApKXJldHVybiBzO2k9dS50by5saW5lfX1mdW5jdGlvbiBlZSh0LGUscixuLGkpe2Z1bmN0aW9uIG8obil7dmFyIGk9USh0LFllKHIsbiksImxpbmUiLGUsdSk7cmV0dXJuIHM9ITAsbD5pLmJvdHRvbT9pLmxlZnQtYTpsPGkudG9wP2kubGVmdCthOihzPSExLGkubGVmdCl9dmFyIGw9aS1Dbih0LGUpLHM9ITEsYT0yKnQuZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoLHU9Vih0LGUpLGM9d24oZSksZj1lLnRleHQubGVuZ3RoLGg9eWkoZSksZD1iaShlKSxwPW8oaCksZz1zLG09byhkKSx2PXM7aWYobj5tKXJldHVybiBKKHIsZCx2LDEpO2Zvcig7Oyl7aWYoYz9kPT1ofHxkPT1TaShlLGgsMSk6MT49ZC1oKXtmb3IodmFyIHk9cD5ufHxtLW4+PW4tcD9oOmQsYj1uLSh5PT1oP3A6bSk7RG8udGVzdChlLnRleHQuY2hhckF0KHkpKTspKyt5O3ZhciB4PUoocix5LHk9PWg/Zzp2LDA+Yj8tMTpiPzE6MCk7cmV0dXJuIHh9dmFyIEM9TWF0aC5jZWlsKGYvMiksdz1oK0M7aWYoYyl7dz1oO2Zvcih2YXIgTD0wO0M+TDsrK0wpdz1TaShlLHcsMSl9dmFyIGs9byh3KTtrPm4/KGQ9dyxtPWssKHY9cykmJihtKz0xZTMpLGY9Qyk6KGg9dyxwPWssZz1zLGYtPUMpfX1mdW5jdGlvbiByZSh0KXtpZihudWxsIT10LmNhY2hlZFRleHRIZWlnaHQpcmV0dXJuIHQuY2FjaGVkVGV4dEhlaWdodDtpZihudWxsPT1faSl7X2k9c2koInByZSIpO2Zvcih2YXIgZT0wOzQ5PmU7KytlKV9pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IikpLF9pLmFwcGVuZENoaWxkKHNpKCJiciIpKTtfaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKX11aSh0Lm1lYXN1cmUsX2kpO3ZhciByPV9pLm9mZnNldEhlaWdodC81MDtyZXR1cm4gcj4zJiYodC5jYWNoZWRUZXh0SGVpZ2h0PXIpLGFpKHQubWVhc3VyZSkscnx8MX1mdW5jdGlvbiBuZSh0KXtpZihudWxsIT10LmNhY2hlZENoYXJXaWR0aClyZXR1cm4gdC5jYWNoZWRDaGFyV2lkdGg7dmFyIGU9c2koInNwYW4iLCJ4Iikscj1zaSgicHJlIixbZV0pO3VpKHQubWVhc3VyZSxyKTt2YXIgbj1lLm9mZnNldFdpZHRoO3JldHVybiBuPjImJih0LmNhY2hlZENoYXJXaWR0aD1uKSxufHwxMH1mdW5jdGlvbiBpZSh0KXt0LmN1ck9wPXtjaGFuZ2VzOltdLGZvcmNlVXBkYXRlOiExLHVwZGF0ZUlucHV0Om51bGwsdXNlclNlbENoYW5nZTpudWxsLHRleHRDaGFuZ2VkOm51bGwsc2VsZWN0aW9uQ2hhbmdlZDohMSxjdXJzb3JBY3Rpdml0eTohMSx1cGRhdGVNYXhMaW5lOiExLHVwZGF0ZVNjcm9sbFBvczohMSxpZDorK0ppfSxNbysrfHwoU289W10pfWZ1bmN0aW9uIG9lKHQpe3ZhciBlPXQuY3VyT3Ascj10LmRvYyxuPXQuZGlzcGxheTtpZih0LmN1ck9wPW51bGwsZS51cGRhdGVNYXhMaW5lJiZmKHQpLG4ubWF4TGluZUNoYW5nZWQmJiF0Lm9wdGlvbnMubGluZVdyYXBwaW5nJiZuLm1heExpbmUpe3ZhciBpPVgodCxuLm1heExpbmUpO24uc2l6ZXIuc3R5bGUubWluV2lkdGg9TWF0aC5tYXgoMCxpKzMrVG8pKyJweCIsbi5tYXhMaW5lQ2hhbmdlZD0hMTt2YXIgbz1NYXRoLm1heCgwLG4uc2l6ZXIub2Zmc2V0TGVmdCtuLnNpemVyLm9mZnNldFdpZHRoLW4uc2Nyb2xsZXIuY2xpZW50V2lkdGgpO288ci5zY3JvbGxMZWZ0JiYhZS51cGRhdGVTY3JvbGxQb3MmJk1lKHQsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxMZWZ0LG8pLCEwKX12YXIgbCxzO2lmKGUudXBkYXRlU2Nyb2xsUG9zKWw9ZS51cGRhdGVTY3JvbGxQb3M7ZWxzZSBpZihlLnNlbGVjdGlvbkNoYW5nZWQmJm4uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KXt2YXIgYT1RKHQsci5zZWwuaGVhZCk7bD11cih0LGEubGVmdCxhLnRvcCxhLmxlZnQsYS5ib3R0b20pfWlmKChlLmNoYW5nZXMubGVuZ3RofHxlLmZvcmNlVXBkYXRlfHxsJiZudWxsIT1sLnNjcm9sbFRvcCkmJihzPWIodCxlLmNoYW5nZXMsbCYmbC5zY3JvbGxUb3AsZS5mb3JjZVVwZGF0ZSksdC5kaXNwbGF5LnNjcm9sbGVyLm9mZnNldEhlaWdodCYmKHQuZG9jLnNjcm9sbFRvcD10LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wKSksIXMmJmUuc2VsZWN0aW9uQ2hhbmdlZCYmQSh0KSxlLnVwZGF0ZVNjcm9sbFBvcyl7dmFyIHU9TWF0aC5tYXgoMCxNYXRoLm1pbihuLnNjcm9sbGVyLnNjcm9sbEhlaWdodC1uLnNjcm9sbGVyLmNsaWVudEhlaWdodCxsLnNjcm9sbFRvcCkpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbihuLnNjcm9sbGVyLnNjcm9sbFdpZHRoLW4uc2Nyb2xsZXIuY2xpZW50V2lkdGgsbC5zY3JvbGxMZWZ0KSk7bi5zY3JvbGxlci5zY3JvbGxUb3A9bi5zY3JvbGxiYXJWLnNjcm9sbFRvcD1yLnNjcm9sbFRvcD11LG4uc2Nyb2xsZXIuc2Nyb2xsTGVmdD1uLnNjcm9sbGJhckguc2Nyb2xsTGVmdD1yLnNjcm9sbExlZnQ9YyxnKHQpLGUuc2Nyb2xsVG9Qb3MmJnNyKHQsUWUodC5kb2MsZS5zY3JvbGxUb1Bvcy5mcm9tKSxRZSh0LmRvYyxlLnNjcm9sbFRvUG9zLnRvKSxlLnNjcm9sbFRvUG9zLm1hcmdpbil9ZWxzZSBsJiZscih0KTtlLnNlbGVjdGlvbkNoYW5nZWQmJkQodCksdC5zdGF0ZS5mb2N1c2VkJiZlLnVwZGF0ZUlucHV0JiZkZSh0LGUudXNlclNlbENoYW5nZSk7dmFyIGg9ZS5tYXliZUhpZGRlbk1hcmtlcnMsZD1lLm1heWJlVW5oaWRkZW5NYXJrZXJzO2lmKGgpZm9yKHZhciBwPTA7cDxoLmxlbmd0aDsrK3ApaFtwXS5saW5lcy5sZW5ndGh8fEtuKGhbcF0sImhpZGUiKTtpZihkKWZvcih2YXIgcD0wO3A8ZC5sZW5ndGg7KytwKWRbcF0ubGluZXMubGVuZ3RoJiZLbihkW3BdLCJ1bmhpZGUiKTt2YXIgbTtpZigtLU1vfHwobT1TbyxTbz1udWxsKSxlLnRleHRDaGFuZ2VkJiZLbih0LCJjaGFuZ2UiLHQsZS50ZXh0Q2hhbmdlZCksZS5jdXJzb3JBY3Rpdml0eSYmS24odCwiY3Vyc29yQWN0aXZpdHkiLHQpLG0pZm9yKHZhciBwPTA7cDxtLmxlbmd0aDsrK3ApbVtwXSgpfWZ1bmN0aW9uIGxlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dHx8dGhpcyxuPSFyLmN1ck9wO24mJmllKHIpO3RyeXt2YXIgaT1lLmFwcGx5KHIsYXJndW1lbnRzKX1maW5hbGx5e24mJm9lKHIpfXJldHVybiBpfX1mdW5jdGlvbiBzZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMuY20mJiF0aGlzLmNtLmN1ck9wO3ImJmllKHRoaXMuY20pO3RyeXtlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7ciYmb2UodGhpcy5jbSl9cmV0dXJuIGV9fWZ1bmN0aW9uIGFlKHQsZSl7dmFyIHIsbj0hdC5jdXJPcDtuJiZpZSh0KTt0cnl7cj1lKCl9ZmluYWxseXtuJiZvZSh0KX1yZXR1cm4gcn1mdW5jdGlvbiB1ZSh0LGUscixuKXtudWxsPT1lJiYoZT10LmRvYy5maXJzdCksbnVsbD09ciYmKHI9dC5kb2MuZmlyc3QrdC5kb2Muc2l6ZSksdC5jdXJPcC5jaGFuZ2VzLnB1c2goe2Zyb206ZSx0bzpyLGRpZmY6bn0pfWZ1bmN0aW9uIGNlKHQpe3QuZGlzcGxheS5wb2xsaW5nRmFzdHx8dC5kaXNwbGF5LnBvbGwuc2V0KHQub3B0aW9ucy5wb2xsSW50ZXJ2YWwsZnVuY3Rpb24oKXtoZSh0KSx0LnN0YXRlLmZvY3VzZWQmJmNlKHQpfSl9ZnVuY3Rpb24gZmUodCl7ZnVuY3Rpb24gZSgpe3ZhciBuPWhlKHQpO258fHI/KHQuZGlzcGxheS5wb2xsaW5nRmFzdD0hMSxjZSh0KSk6KHI9ITAsdC5kaXNwbGF5LnBvbGwuc2V0KDYwLGUpKX12YXIgcj0hMTt0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITAsdC5kaXNwbGF5LnBvbGwuc2V0KDIwLGUpfWZ1bmN0aW9uIGhlKHQpe3ZhciBlPXQuZGlzcGxheS5pbnB1dCxyPXQuZGlzcGxheS5wcmV2SW5wdXQsbj10LmRvYyxpPW4uc2VsO2lmKCF0LnN0YXRlLmZvY3VzZWR8fElvKGUpfHxnZSh0KXx8dC5zdGF0ZS5kaXNhYmxlSW5wdXQpcmV0dXJuITE7dC5zdGF0ZS5wYXN0ZUluY29taW5nJiZ0LnN0YXRlLmZha2VkTGFzdENoYXImJihlLnZhbHVlPWUudmFsdWUuc3Vic3RyaW5nKDAsZS52YWx1ZS5sZW5ndGgtMSksdC5zdGF0ZS5mYWtlZExhc3RDaGFyPSExKTt2YXIgbz1lLnZhbHVlO2lmKG89PXImJmplKGkuZnJvbSxpLnRvKSlyZXR1cm4hMTtpZihBaSYmIU5pJiZ0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249PT1vKXJldHVybiBkZSh0LCEwKSwhMTt2YXIgbD0hdC5jdXJPcDtsJiZpZSh0KSxpLnNoaWZ0PSExO2Zvcih2YXIgcz0wLGE9TWF0aC5taW4oci5sZW5ndGgsby5sZW5ndGgpO2E+cyYmci5jaGFyQ29kZUF0KHMpPT1vLmNoYXJDb2RlQXQocyk7KSsrczt2YXIgdT1pLmZyb20sYz1pLnRvO3M8ci5sZW5ndGg/dT1ZZSh1LmxpbmUsdS5jaC0oci5sZW5ndGgtcykpOnQuc3RhdGUub3ZlcndyaXRlJiZqZSh1LGMpJiYhdC5zdGF0ZS5wYXN0ZUluY29taW5nJiYoYz1ZZShjLmxpbmUsTWF0aC5taW4oZ24obixjLmxpbmUpLnRleHQubGVuZ3RoLGMuY2grKG8ubGVuZ3RoLXMpKSkpO3ZhciBmPXQuY3VyT3AudXBkYXRlSW5wdXQsaD17ZnJvbTp1LHRvOmMsdGV4dDp6byhvLnNsaWNlKHMpKSxvcmlnaW46dC5zdGF0ZS5wYXN0ZUluY29taW5nPyJwYXN0ZSI6IitpbnB1dCJ9O3JldHVybiBCZSh0LmRvYyxoLCJlbmQiKSx0LmN1ck9wLnVwZGF0ZUlucHV0PWYsVW4odCwiaW5wdXRSZWFkIix0LGgpLG8ubGVuZ3RoPjFlM3x8by5pbmRleE9mKCJcbiIpPi0xP2UudmFsdWU9dC5kaXNwbGF5LnByZXZJbnB1dD0iIjp0LmRpc3BsYXkucHJldklucHV0PW8sbCYmb2UodCksdC5zdGF0ZS5wYXN0ZUluY29taW5nPSExLCEwfWZ1bmN0aW9uIGRlKHQsZSl7dmFyIHIsbixpPXQuZG9jO2lmKGplKGkuc2VsLmZyb20saS5zZWwudG8pKWUmJih0LmRpc3BsYXkucHJldklucHV0PXQuZGlzcGxheS5pbnB1dC52YWx1ZT0iIixBaSYmIU5pJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW51bGwpKTtlbHNle3QuZGlzcGxheS5wcmV2SW5wdXQ9IiIscj1GbyYmKGkuc2VsLnRvLmxpbmUtaS5zZWwuZnJvbS5saW5lPjEwMHx8KG49dC5nZXRTZWxlY3Rpb24oKSkubGVuZ3RoPjFlMyk7dmFyIG89cj8iLSI6bnx8dC5nZXRTZWxlY3Rpb24oKTt0LmRpc3BsYXkuaW5wdXQudmFsdWU9byx0LnN0YXRlLmZvY3VzZWQmJkpuKHQuZGlzcGxheS5pbnB1dCksQWkmJiFOaSYmKHQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1vKX10LmRpc3BsYXkuaW5hY2N1cmF0ZVNlbGVjdGlvbj1yfWZ1bmN0aW9uIHBlKHQpeyJub2N1cnNvciI9PXQub3B0aW9ucy5yZWFkT25seXx8VmkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PXQuZGlzcGxheS5pbnB1dHx8dC5kaXNwbGF5LmlucHV0LmZvY3VzKCl9ZnVuY3Rpb24gZ2UodCl7cmV0dXJuIHQub3B0aW9ucy5yZWFkT25seXx8dC5kb2MuY2FudEVkaXR9ZnVuY3Rpb24gbWUodCl7ZnVuY3Rpb24gZSgpe3Quc3RhdGUuZm9jdXNlZCYmc2V0VGltZW91dChpaShwZSx0KSwwKX1mdW5jdGlvbiByKCl7bnVsbD09cyYmKHM9c2V0VGltZW91dChmdW5jdGlvbigpe3M9bnVsbCxsLmNhY2hlZENoYXJXaWR0aD1sLmNhY2hlZFRleHRIZWlnaHQ9T289bnVsbCxfKHQpLGFlKHQsaWkodWUsdCkpfSwxMDApKX1mdW5jdGlvbiBuKCl7Zm9yKHZhciB0PWwud3JhcHBlci5wYXJlbnROb2RlO3QmJnQhPWRvY3VtZW50LmJvZHk7dD10LnBhcmVudE5vZGUpO3Q/c2V0VGltZW91dChuLDVlMyk6Vm4od2luZG93LCJyZXNpemUiLHIpfWZ1bmN0aW9uIGkoZSl7WG4odCxlKXx8dC5vcHRpb25zLm9uRHJhZ0V2ZW50JiZ0Lm9wdGlvbnMub25EcmFnRXZlbnQodCxFbihlKSl8fFBuKGUpfWZ1bmN0aW9uIG8oKXtsLmluYWNjdXJhdGVTZWxlY3Rpb24mJihsLnByZXZJbnB1dD0iIixsLmluYWNjdXJhdGVTZWxlY3Rpb249ITEsbC5pbnB1dC52YWx1ZT10LmdldFNlbGVjdGlvbigpLEpuKGwuaW5wdXQpKX12YXIgbD10LmRpc3BsYXk7R24obC5zY3JvbGxlciwibW91c2Vkb3duIixsZSh0LGJlKSksQWk/R24obC5zY3JvbGxlciwiZGJsY2xpY2siLGxlKHQsZnVuY3Rpb24oZSl7aWYoIVhuKHQsZSkpe3ZhciByPXllKHQsZSk7aWYociYmIXdlKHQsZSkmJiF2ZSh0LmRpc3BsYXksZSkpe3puKGUpO3ZhciBuPW1yKGduKHQuZG9jLHIubGluZSkudGV4dCxyKTtlcih0LmRvYyxuLmZyb20sbi50byl9fX0pKTpHbihsLnNjcm9sbGVyLCJkYmxjbGljayIsZnVuY3Rpb24oZSl7WG4odCxlKXx8em4oZSl9KSxHbihsLmxpbmVTcGFjZSwic2VsZWN0c3RhcnQiLGZ1bmN0aW9uKHQpe3ZlKGwsdCl8fHpuKHQpfSksWml8fEduKGwuc2Nyb2xsZXIsImNvbnRleHRtZW51IixmdW5jdGlvbihlKXtJZSh0LGUpfSksR24obC5zY3JvbGxlciwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiYoU2UodCxsLnNjcm9sbGVyLnNjcm9sbFRvcCksTWUodCxsLnNjcm9sbGVyLnNjcm9sbExlZnQsITApLEtuKHQsInNjcm9sbCIsdCkpfSksR24obC5zY3JvbGxiYXJWLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJlNlKHQsbC5zY3JvbGxiYXJWLnNjcm9sbFRvcCl9KSxHbihsLnNjcm9sbGJhckgsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmTWUodCxsLnNjcm9sbGJhckguc2Nyb2xsTGVmdCl9KSxHbihsLnNjcm9sbGVyLCJtb3VzZXdoZWVsIixmdW5jdGlvbihlKXtUZSh0LGUpfSksR24obC5zY3JvbGxlciwiRE9NTW91c2VTY3JvbGwiLGZ1bmN0aW9uKGUpe1RlKHQsZSl9KSxHbihsLnNjcm9sbGJhckgsIm1vdXNlZG93biIsZSksR24obC5zY3JvbGxiYXJWLCJtb3VzZWRvd24iLGUpLEduKGwud3JhcHBlciwic2Nyb2xsIixmdW5jdGlvbigpe2wud3JhcHBlci5zY3JvbGxUb3A9bC53cmFwcGVyLnNjcm9sbExlZnQ9MH0pO3ZhciBzO0duKHdpbmRvdywicmVzaXplIixyKSxzZXRUaW1lb3V0KG4sNWUzKSxHbihsLmlucHV0LCJrZXl1cCIsbGUodCxmdW5jdGlvbihlKXtYbih0LGUpfHx0Lm9wdGlvbnMub25LZXlFdmVudCYmdC5vcHRpb25zLm9uS2V5RXZlbnQodCxFbihlKSl8fDE2PT1lLmtleUNvZGUmJih0LmRvYy5zZWwuc2hpZnQ9ITEpfSkpLEduKGwuaW5wdXQsImlucHV0IixmdW5jdGlvbigpe0FpJiYhTmkmJnQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiYmKHQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSxmZSh0KX0pLEduKGwuaW5wdXQsImtleWRvd24iLGxlKHQsV2UpKSxHbihsLmlucHV0LCJrZXlwcmVzcyIsbGUodCxPZSkpLEduKGwuaW5wdXQsImZvY3VzIixpaShFZSx0KSksR24obC5pbnB1dCwiYmx1ciIsaWkoemUsdCkpLHQub3B0aW9ucy5kcmFnRHJvcCYmKEduKGwuc2Nyb2xsZXIsImRyYWdzdGFydCIsZnVuY3Rpb24oZSl7a2UodCxlKX0pLEduKGwuc2Nyb2xsZXIsImRyYWdlbnRlciIsaSksR24obC5zY3JvbGxlciwiZHJhZ292ZXIiLGkpLEduKGwuc2Nyb2xsZXIsImRyb3AiLGxlKHQsTGUpKSksR24obC5zY3JvbGxlciwicGFzdGUiLGZ1bmN0aW9uKGUpe3ZlKGwsZSl8fChwZSh0KSxmZSh0KSl9KSxHbihsLmlucHV0LCJwYXN0ZSIsZnVuY3Rpb24oKXtpZihXaSYmIXQuc3RhdGUuZmFrZWRMYXN0Q2hhciYmIShuZXcgRGF0ZS10LnN0YXRlLmxhc3RNaWRkbGVEb3duPDIwMCkpe3ZhciBlPWwuaW5wdXQuc2VsZWN0aW9uU3RhcnQscj1sLmlucHV0LnNlbGVjdGlvbkVuZDtsLmlucHV0LnZhbHVlKz0iJCIsbC5pbnB1dC5zZWxlY3Rpb25TdGFydD1lLGwuaW5wdXQuc2VsZWN0aW9uRW5kPXIsdC5zdGF0ZS5mYWtlZExhc3RDaGFyPSEwfXQuc3RhdGUucGFzdGVJbmNvbWluZz0hMCxmZSh0KX0pLEduKGwuaW5wdXQsImN1dCIsbyksR24obC5pbnB1dCwiY29weSIsbyksRmkmJkduKGwuc2l6ZXIsIm1vdXNldXAiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09bC5pbnB1dCYmbC5pbnB1dC5ibHVyKCkscGUodCl9KX1mdW5jdGlvbiB2ZSh0LGUpe2Zvcih2YXIgcj1SbihlKTtyIT10LndyYXBwZXI7cj1yLnBhcmVudE5vZGUpaWYoIXJ8fHIuaWdub3JlRXZlbnRzfHxyLnBhcmVudE5vZGU9PXQuc2l6ZXImJnIhPXQubW92ZXIpcmV0dXJuITB9ZnVuY3Rpb24geWUodCxlLHIpe3ZhciBuPXQuZGlzcGxheTtpZighcil7dmFyIGk9Um4oZSk7aWYoaT09bi5zY3JvbGxiYXJIfHxpPT1uLnNjcm9sbGJhckguZmlyc3RDaGlsZHx8aT09bi5zY3JvbGxiYXJWfHxpPT1uLnNjcm9sbGJhclYuZmlyc3RDaGlsZHx8aT09bi5zY3JvbGxiYXJGaWxsZXJ8fGk9PW4uZ3V0dGVyRmlsbGVyKXJldHVybiBudWxsfXZhciBvLGwscz1maShuLmxpbmVTcGFjZSk7dHJ5e289ZS5jbGllbnRYLGw9ZS5jbGllbnRZfWNhdGNoKGUpe3JldHVybiBudWxsfXJldHVybiB0ZSh0LG8tcy5sZWZ0LGwtcy50b3ApfWZ1bmN0aW9uIGJlKHQpe2Z1bmN0aW9uIGUodCl7aWYoIWplKHYsdCkpe2lmKHY9dCwic2luZ2xlIj09YylyZXR1cm4gZXIoaS5kb2MsUWUobCxhKSx0KSx2b2lkIDA7CmlmKGc9UWUobCxnKSxtPVFlKGwsbSksImRvdWJsZSI9PWMpe3ZhciBlPW1yKGduKGwsdC5saW5lKS50ZXh0LHQpOyRlKHQsZyk/ZXIoaS5kb2MsZS5mcm9tLG0pOmVyKGkuZG9jLGcsZS50byl9ZWxzZSJ0cmlwbGUiPT1jJiYoJGUodCxnKT9lcihpLmRvYyxtLFFlKGwsWWUodC5saW5lLDApKSk6ZXIoaS5kb2MsZyxRZShsLFllKHQubGluZSsxLDApKSkpfX1mdW5jdGlvbiByKHQpe3ZhciBuPSsrYixzPXllKGksdCwhMCk7aWYocylpZihqZShzLGgpKXt2YXIgYT10LmNsaWVudFk8eS50b3A/LTIwOnQuY2xpZW50WT55LmJvdHRvbT8yMDowO2EmJnNldFRpbWVvdXQobGUoaSxmdW5jdGlvbigpe2I9PW4mJihvLnNjcm9sbGVyLnNjcm9sbFRvcCs9YSxyKHQpKX0pLDUwKX1lbHNle2kuc3RhdGUuZm9jdXNlZHx8RWUoaSksaD1zLGUocyk7dmFyIHU9cChvLGwpOyhzLmxpbmU+PXUudG98fHMubGluZTx1LmZyb20pJiZzZXRUaW1lb3V0KGxlKGksZnVuY3Rpb24oKXtiPT1uJiZyKHQpfSksMTUwKX19ZnVuY3Rpb24gbih0KXtiPTEvMCx6bih0KSxwZShpKSxWbihkb2N1bWVudCwibW91c2Vtb3ZlIix4KSxWbihkb2N1bWVudCwibW91c2V1cCIsQyl9aWYoIVhuKHRoaXMsdCkpe3ZhciBpPXRoaXMsbz1pLmRpc3BsYXksbD1pLmRvYyxzPWwuc2VsO2lmKHMuc2hpZnQ9dC5zaGlmdEtleSx2ZShvLHQpKXJldHVybiBXaXx8KG8uc2Nyb2xsZXIuZHJhZ2dhYmxlPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMH0sMTAwKSksdm9pZCAwO2lmKCF3ZShpLHQpKXt2YXIgYT15ZShpLHQpO3N3aXRjaChCbih0KSl7Y2FzZSAzOnJldHVybiBaaSYmSWUuY2FsbChpLGksdCksdm9pZCAwO2Nhc2UgMjpyZXR1cm4gV2kmJihpLnN0YXRlLmxhc3RNaWRkbGVEb3duPStuZXcgRGF0ZSksYSYmZXIoaS5kb2MsYSksc2V0VGltZW91dChpaShwZSxpKSwyMCksem4odCksdm9pZCAwfWlmKCFhKXJldHVybiBSbih0KT09by5zY3JvbGxlciYmem4odCksdm9pZCAwO2kuc3RhdGUuZm9jdXNlZHx8RWUoaSk7dmFyIHU9K25ldyBEYXRlLGM9InNpbmdsZSI7aWYoamkmJmppLnRpbWU+dS00MDAmJmplKGppLnBvcyxhKSljPSJ0cmlwbGUiLHpuKHQpLHNldFRpbWVvdXQoaWkocGUsaSksMjApLHZyKGksYS5saW5lKTtlbHNlIGlmKFlpJiZZaS50aW1lPnUtNDAwJiZqZShZaS5wb3MsYSkpe2M9ImRvdWJsZSIsamk9e3RpbWU6dSxwb3M6YX0sem4odCk7dmFyIGY9bXIoZ24obCxhLmxpbmUpLnRleHQsYSk7ZXIoaS5kb2MsZi5mcm9tLGYudG8pfWVsc2UgWWk9e3RpbWU6dSxwb3M6YX07dmFyIGg9YTtpZihpLm9wdGlvbnMuZHJhZ0Ryb3AmJldvJiYhZ2UoaSkmJiFqZShzLmZyb20scy50bykmJiEkZShhLHMuZnJvbSkmJiEkZShzLnRvLGEpJiYic2luZ2xlIj09Yyl7dmFyIGQ9bGUoaSxmdW5jdGlvbihlKXtXaSYmKG8uc2Nyb2xsZXIuZHJhZ2dhYmxlPSExKSxpLnN0YXRlLmRyYWdnaW5nVGV4dD0hMSxWbihkb2N1bWVudCwibW91c2V1cCIsZCksVm4oby5zY3JvbGxlciwiZHJvcCIsZCksTWF0aC5hYnModC5jbGllbnRYLWUuY2xpZW50WCkrTWF0aC5hYnModC5jbGllbnRZLWUuY2xpZW50WSk8MTAmJih6bihlKSxlcihpLmRvYyxhKSxwZShpKSl9KTtyZXR1cm4gV2kmJihvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCksaS5zdGF0ZS5kcmFnZ2luZ1RleHQ9ZCxvLnNjcm9sbGVyLmRyYWdEcm9wJiZvLnNjcm9sbGVyLmRyYWdEcm9wKCksR24oZG9jdW1lbnQsIm1vdXNldXAiLGQpLEduKG8uc2Nyb2xsZXIsImRyb3AiLGQpLHZvaWQgMH16bih0KSwic2luZ2xlIj09YyYmZXIoaS5kb2MsUWUobCxhKSk7dmFyIGc9cy5mcm9tLG09cy50byx2PWEseT1maShvLndyYXBwZXIpLGI9MCx4PWxlKGksZnVuY3Rpb24odCl7QWl8fEJuKHQpP3IodCk6bih0KX0pLEM9bGUoaSxuKTtHbihkb2N1bWVudCwibW91c2Vtb3ZlIix4KSxHbihkb2N1bWVudCwibW91c2V1cCIsQyl9fX1mdW5jdGlvbiB4ZSh0LGUscixuLGkpe3RyeXt2YXIgbz1lLmNsaWVudFgsbD1lLmNsaWVudFl9Y2F0Y2goZSl7cmV0dXJuITF9aWYobz49TWF0aC5mbG9vcihmaSh0LmRpc3BsYXkuZ3V0dGVycykucmlnaHQpKXJldHVybiExO24mJnpuKGUpO3ZhciBzPXQuZGlzcGxheSxhPWZpKHMubGluZURpdik7aWYobD5hLmJvdHRvbXx8IVluKHQscikpcmV0dXJuIEZuKGUpO2wtPWEudG9wLXMudmlld09mZnNldDtmb3IodmFyIHU9MDt1PHQub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsrK3Upe3ZhciBjPXMuZ3V0dGVycy5jaGlsZE5vZGVzW3VdO2lmKGMmJmZpKGMpLnJpZ2h0Pj1vKXt2YXIgZj14bih0LmRvYyxsKSxoPXQub3B0aW9ucy5ndXR0ZXJzW3VdO3JldHVybiBpKHQscix0LGYsaCxlKSxGbihlKX19fWZ1bmN0aW9uIENlKHQsZSl7cmV0dXJuIFluKHQsImd1dHRlckNvbnRleHRNZW51Iik/eGUodCxlLCJndXR0ZXJDb250ZXh0TWVudSIsITEsS24pOiExfWZ1bmN0aW9uIHdlKHQsZSl7cmV0dXJuIHhlKHQsZSwiZ3V0dGVyQ2xpY2siLCEwLFVuKX1mdW5jdGlvbiBMZSh0KXt2YXIgZT10aGlzO2lmKCEoWG4oZSx0KXx8dmUoZS5kaXNwbGF5LHQpfHxlLm9wdGlvbnMub25EcmFnRXZlbnQmJmUub3B0aW9ucy5vbkRyYWdFdmVudChlLEVuKHQpKSkpe3puKHQpLEFpJiYodG89K25ldyBEYXRlKTt2YXIgcj15ZShlLHQsITApLG49dC5kYXRhVHJhbnNmZXIuZmlsZXM7aWYociYmIWdlKGUpKWlmKG4mJm4ubGVuZ3RoJiZ3aW5kb3cuRmlsZVJlYWRlciYmd2luZG93LkZpbGUpZm9yKHZhciBpPW4ubGVuZ3RoLG89QXJyYXkoaSksbD0wLHM9ZnVuY3Rpb24odCxuKXt2YXIgcz1uZXcgRmlsZVJlYWRlcjtzLm9ubG9hZD1mdW5jdGlvbigpe29bbl09cy5yZXN1bHQsKytsPT1pJiYocj1RZShlLmRvYyxyKSxCZShlLmRvYyx7ZnJvbTpyLHRvOnIsdGV4dDp6byhvLmpvaW4oIlxuIikpLG9yaWdpbjoicGFzdGUifSwiYXJvdW5kIikpfSxzLnJlYWRBc1RleHQodCl9LGE9MDtpPmE7KythKXMoblthXSxhKTtlbHNle2lmKGUuc3RhdGUuZHJhZ2dpbmdUZXh0JiYhJGUocixlLmRvYy5zZWwuZnJvbSkmJiEkZShlLmRvYy5zZWwudG8scikpcmV0dXJuIGUuc3RhdGUuZHJhZ2dpbmdUZXh0KHQpLHNldFRpbWVvdXQoaWkocGUsZSksMjApLHZvaWQgMDt0cnl7dmFyIG89dC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgiVGV4dCIpO2lmKG8pe3ZhciB1PWUuZG9jLnNlbC5mcm9tLGM9ZS5kb2Muc2VsLnRvO25yKGUuZG9jLHIsciksZS5zdGF0ZS5kcmFnZ2luZ1RleHQmJl9lKGUuZG9jLCIiLHUsYywicGFzdGUiKSxlLnJlcGxhY2VTZWxlY3Rpb24obyxudWxsLCJwYXN0ZSIpLHBlKGUpfX1jYXRjaCh0KXt9fX19ZnVuY3Rpb24ga2UodCxlKXtpZihBaSYmKCF0LnN0YXRlLmRyYWdnaW5nVGV4dHx8K25ldyBEYXRlLXRvPDEwMCkpcmV0dXJuIFBuKGUpLHZvaWQgMDtpZighWG4odCxlKSYmIXZlKHQuZGlzcGxheSxlKSl7dmFyIHI9dC5nZXRTZWxlY3Rpb24oKTtpZihlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJUZXh0IixyKSxlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UmJiFJaSl7dmFyIG49c2koImltZyIsbnVsbCxudWxsLCJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDsiKTtuLnNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBQUFBQ0g1QkFFS0FBRUFMQUFBQUFBQkFBRUFBQUlDVEFFQU93PT0iLHppJiYobi53aWR0aD1uLmhlaWdodD0xLHQuZGlzcGxheS53cmFwcGVyLmFwcGVuZENoaWxkKG4pLG4uX3RvcD1uLm9mZnNldFRvcCksZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4sMCwwKSx6aSYmbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfX19ZnVuY3Rpb24gU2UodCxlKXtNYXRoLmFicyh0LmRvYy5zY3JvbGxUb3AtZSk8Mnx8KHQuZG9jLnNjcm9sbFRvcD1lLFRpfHxiKHQsW10sZSksdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A9ZSksdC5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wIT1lJiYodC5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wPWUpLFRpJiZiKHQsW10pLFcodCwxMDApKX1mdW5jdGlvbiBNZSh0LGUscil7KHI/ZT09dC5kb2Muc2Nyb2xsTGVmdDpNYXRoLmFicyh0LmRvYy5zY3JvbGxMZWZ0LWUpPDIpfHwoZT1NYXRoLm1pbihlLHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aC10LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpLHQuZG9jLnNjcm9sbExlZnQ9ZSxnKHQpLHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0IT1lJiYodC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQ9ZSksdC5kaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQ9ZSkpfWZ1bmN0aW9uIFRlKHQsZSl7dmFyIHI9ZS53aGVlbERlbHRhWCxuPWUud2hlZWxEZWx0YVk7bnVsbD09ciYmZS5kZXRhaWwmJmUuYXhpcz09ZS5IT1JJWk9OVEFMX0FYSVMmJihyPWUuZGV0YWlsKSxudWxsPT1uJiZlLmRldGFpbCYmZS5heGlzPT1lLlZFUlRJQ0FMX0FYSVM/bj1lLmRldGFpbDpudWxsPT1uJiYobj1lLndoZWVsRGVsdGEpO3ZhciBpPXQuZGlzcGxheSxvPWkuc2Nyb2xsZXI7aWYociYmby5zY3JvbGxXaWR0aD5vLmNsaWVudFdpZHRofHxuJiZvLnNjcm9sbEhlaWdodD5vLmNsaWVudEhlaWdodCl7aWYobiYmS2kmJldpKWZvcih2YXIgbD1lLnRhcmdldDtsIT1vO2w9bC5wYXJlbnROb2RlKWlmKGwubGluZU9iail7dC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD1sO2JyZWFrfWlmKHImJiFUaSYmIXppJiZudWxsIT1ybylyZXR1cm4gbiYmU2UodCxNYXRoLm1heCgwLE1hdGgubWluKG8uc2Nyb2xsVG9wK24qcm8sby5zY3JvbGxIZWlnaHQtby5jbGllbnRIZWlnaHQpKSksTWUodCxNYXRoLm1heCgwLE1hdGgubWluKG8uc2Nyb2xsTGVmdCtyKnJvLG8uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aCkpKSx6bihlKSxpLndoZWVsU3RhcnRYPW51bGwsdm9pZCAwO2lmKG4mJm51bGwhPXJvKXt2YXIgcz1uKnJvLGE9dC5kb2Muc2Nyb2xsVG9wLHU9YStpLndyYXBwZXIuY2xpZW50SGVpZ2h0OzA+cz9hPU1hdGgubWF4KDAsYStzLTUwKTp1PU1hdGgubWluKHQuZG9jLmhlaWdodCx1K3MrNTApLGIodCxbXSx7dG9wOmEsYm90dG9tOnV9KX0yMD5lbyYmKG51bGw9PWkud2hlZWxTdGFydFg/KGkud2hlZWxTdGFydFg9by5zY3JvbGxMZWZ0LGkud2hlZWxTdGFydFk9by5zY3JvbGxUb3AsaS53aGVlbERYPXIsaS53aGVlbERZPW4sc2V0VGltZW91dChmdW5jdGlvbigpe2lmKG51bGwhPWkud2hlZWxTdGFydFgpe3ZhciB0PW8uc2Nyb2xsTGVmdC1pLndoZWVsU3RhcnRYLGU9by5zY3JvbGxUb3AtaS53aGVlbFN0YXJ0WSxyPWUmJmkud2hlZWxEWSYmZS9pLndoZWVsRFl8fHQmJmkud2hlZWxEWCYmdC9pLndoZWVsRFg7aS53aGVlbFN0YXJ0WD1pLndoZWVsU3RhcnRZPW51bGwsciYmKHJvPShybyplbytyKS8oZW8rMSksKytlbyl9fSwyMDApKTooaS53aGVlbERYKz1yLGkud2hlZWxEWSs9bikpfX1mdW5jdGlvbiBBZSh0LGUscil7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYoZT1tb1tlXSwhZSkpcmV0dXJuITE7dC5kaXNwbGF5LnBvbGxpbmdGYXN0JiZoZSh0KSYmKHQuZGlzcGxheS5wb2xsaW5nRmFzdD0hMSk7dmFyIG49dC5kb2MsaT1uLnNlbC5zaGlmdCxvPSExO3RyeXtnZSh0KSYmKHQuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMCksciYmKG4uc2VsLnNoaWZ0PSExKSxvPWUodCkhPUFvfWZpbmFsbHl7bi5zZWwuc2hpZnQ9aSx0LnN0YXRlLnN1cHByZXNzRWRpdHM9ITF9cmV0dXJuIG99ZnVuY3Rpb24gSGUodCl7dmFyIGU9dC5zdGF0ZS5rZXlNYXBzLnNsaWNlKDApO3JldHVybiB0Lm9wdGlvbnMuZXh0cmFLZXlzJiZlLnB1c2godC5vcHRpb25zLmV4dHJhS2V5cyksZS5wdXNoKHQub3B0aW9ucy5rZXlNYXApLGV9ZnVuY3Rpb24gTmUodCxlKXt2YXIgcj1Dcih0Lm9wdGlvbnMua2V5TWFwKSxuPXIuYXV0bztjbGVhclRpbWVvdXQobm8pLG4mJiFMcihlKSYmKG5vPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtDcih0Lm9wdGlvbnMua2V5TWFwKT09ciYmKHQub3B0aW9ucy5rZXlNYXA9bi5jYWxsP24uY2FsbChudWxsLHQpOm4sbCh0KSl9LDUwKSk7dmFyIGk9a3IoZSwhMCksbz0hMTtpZighaSlyZXR1cm4hMTt2YXIgcz1IZSh0KTtyZXR1cm4gbz1lLnNoaWZ0S2V5P3dyKCJTaGlmdC0iK2kscyxmdW5jdGlvbihlKXtyZXR1cm4gQWUodCxlLCEwKX0pfHx3cihpLHMsZnVuY3Rpb24oZSl7cmV0dXJuKCJzdHJpbmciPT10eXBlb2YgZT8vXmdvW0EtWl0vLnRlc3QoZSk6ZS5tb3Rpb24pP0FlKHQsZSk6dm9pZCAwfSk6d3IoaSxzLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUpfSksbyYmKHpuKGUpLEQodCksTmkmJihlLm9sZEtleUNvZGU9ZS5rZXlDb2RlLGUua2V5Q29kZT0wKSxVbih0LCJrZXlIYW5kbGVkIix0LGksZSkpLG99ZnVuY3Rpb24gRGUodCxlLHIpe3ZhciBuPXdyKCInIityKyInIixIZSh0KSxmdW5jdGlvbihlKXtyZXR1cm4gQWUodCxlLCEwKX0pO3JldHVybiBuJiYoem4oZSksRCh0KSxVbih0LCJrZXlIYW5kbGVkIix0LCInIityKyInIixlKSksbn1mdW5jdGlvbiBXZSh0KXt2YXIgZT10aGlzO2lmKGUuc3RhdGUuZm9jdXNlZHx8RWUoZSksIShYbihlLHQpfHxlLm9wdGlvbnMub25LZXlFdmVudCYmZS5vcHRpb25zLm9uS2V5RXZlbnQoZSxFbih0KSkpKXtBaSYmMjc9PXQua2V5Q29kZSYmKHQucmV0dXJuVmFsdWU9ITEpO3ZhciByPXQua2V5Q29kZTtlLmRvYy5zZWwuc2hpZnQ9MTY9PXJ8fHQuc2hpZnRLZXk7dmFyIG49TmUoZSx0KTt6aSYmKG9vPW4/cjpudWxsLCFuJiY4OD09ciYmIUZvJiYoS2k/dC5tZXRhS2V5OnQuY3RybEtleSkmJmUucmVwbGFjZVNlbGVjdGlvbigiIikpfX1mdW5jdGlvbiBPZSh0KXt2YXIgZT10aGlzO2lmKCEoWG4oZSx0KXx8ZS5vcHRpb25zLm9uS2V5RXZlbnQmJmUub3B0aW9ucy5vbktleUV2ZW50KGUsRW4odCkpKSl7dmFyIHI9dC5rZXlDb2RlLG49dC5jaGFyQ29kZTtpZih6aSYmcj09b28pcmV0dXJuIG9vPW51bGwsem4odCksdm9pZCAwO2lmKCEoemkmJighdC53aGljaHx8dC53aGljaDwxMCl8fEZpKXx8IU5lKGUsdCkpe3ZhciBpPVN0cmluZy5mcm9tQ2hhckNvZGUobnVsbD09bj9yOm4pO3RoaXMub3B0aW9ucy5lbGVjdHJpY0NoYXJzJiZ0aGlzLmRvYy5tb2RlLmVsZWN0cmljQ2hhcnMmJnRoaXMub3B0aW9ucy5zbWFydEluZGVudCYmIWdlKHRoaXMpJiZ0aGlzLmRvYy5tb2RlLmVsZWN0cmljQ2hhcnMuaW5kZXhPZihpKT4tMSYmc2V0VGltZW91dChsZShlLGZ1bmN0aW9uKCl7aHIoZSxlLmRvYy5zZWwudG8ubGluZSwic21hcnQiKX0pLDc1KSxEZShlLHQsaSl8fChBaSYmIU5pJiYoZS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW51bGwpLGZlKGUpKX19fWZ1bmN0aW9uIEVlKHQpeyJub2N1cnNvciIhPXQub3B0aW9ucy5yZWFkT25seSYmKHQuc3RhdGUuZm9jdXNlZHx8KEtuKHQsImZvY3VzIix0KSx0LnN0YXRlLmZvY3VzZWQ9ITAsLTE9PXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5zZWFyY2goL1xiQ29kZU1pcnJvci1mb2N1c2VkXGIvKSYmKHQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLWZvY3VzZWQiKSx0LmN1ck9wfHwoZGUodCwhMCksV2kmJnNldFRpbWVvdXQoaWkoZGUsdCwhMCksMCkpKSxjZSh0KSxEKHQpKX1mdW5jdGlvbiB6ZSh0KXt0LnN0YXRlLmZvY3VzZWQmJihLbih0LCJibHVyIix0KSx0LnN0YXRlLmZvY3VzZWQ9ITEsdC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1mb2N1c2VkIiwiIikpLGNsZWFySW50ZXJ2YWwodC5kaXNwbGF5LmJsaW5rZXIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnN0YXRlLmZvY3VzZWR8fCh0LmRvYy5zZWwuc2hpZnQ9ITEpfSwxNTApfWZ1bmN0aW9uIEllKHQsZSl7ZnVuY3Rpb24gcigpe2lmKG51bGwhPWkuaW5wdXQuc2VsZWN0aW9uU3RhcnQpe3ZhciB0PWkuaW5wdXQudmFsdWU9IuKAiyIrKGplKG8uZnJvbSxvLnRvKT8iIjppLmlucHV0LnZhbHVlKTtpLnByZXZJbnB1dD0i4oCLIixpLmlucHV0LnNlbGVjdGlvblN0YXJ0PTEsaS5pbnB1dC5zZWxlY3Rpb25FbmQ9dC5sZW5ndGh9fWZ1bmN0aW9uIG4oKXtpZihpLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsaS5pbnB1dC5zdHlsZS5jc3NUZXh0PXUsTmkmJihpLnNjcm9sbGJhclYuc2Nyb2xsVG9wPWkuc2Nyb2xsZXIuc2Nyb2xsVG9wPXMpLGNlKHQpLG51bGwhPWkuaW5wdXQuc2VsZWN0aW9uU3RhcnQpeyghQWl8fE5pKSYmcigpLGNsZWFyVGltZW91dChpbyk7dmFyIGU9MCxuPWZ1bmN0aW9uKCl7IiAiPT1pLnByZXZJbnB1dCYmMD09aS5pbnB1dC5zZWxlY3Rpb25TdGFydD9sZSh0LG1vLnNlbGVjdEFsbCkodCk6ZSsrPDEwP2lvPXNldFRpbWVvdXQobiw1MDApOmRlKHQpfTtpbz1zZXRUaW1lb3V0KG4sMjAwKX19aWYoIVhuKHQsZSwiY29udGV4dG1lbnUiKSl7dmFyIGk9dC5kaXNwbGF5LG89dC5kb2Muc2VsO2lmKCF2ZShpLGUpJiYhQ2UodCxlKSl7dmFyIGw9eWUodCxlKSxzPWkuc2Nyb2xsZXIuc2Nyb2xsVG9wO2lmKGwmJiF6aSl7dmFyIGE9dC5vcHRpb25zLnJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudTthJiYoamUoby5mcm9tLG8udG8pfHwkZShsLG8uZnJvbSl8fCEkZShsLG8udG8pKSYmbGUodCxucikodC5kb2MsbCxsKTt2YXIgdT1pLmlucHV0LnN0eWxlLmNzc1RleHQ7aWYoaS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGkuaW5wdXQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IGZpeGVkOyB3aWR0aDogMzBweDsgaGVpZ2h0OiAzMHB4OyB0b3A6ICIrKGUuY2xpZW50WS01KSsicHg7IGxlZnQ6ICIrKGUuY2xpZW50WC01KSsicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6IHdoaXRlOyBvdXRsaW5lOiBub25lOyIrImJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyAtbXMtb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7IixwZSh0KSxkZSh0LCEwKSxqZShvLmZyb20sby50bykmJihpLmlucHV0LnZhbHVlPWkucHJldklucHV0PSIgIiksQWkmJiFOaSYmcigpLFppKXtQbihlKTt2YXIgYz1mdW5jdGlvbigpe1ZuKHdpbmRvdywibW91c2V1cCIsYyksc2V0VGltZW91dChuLDIwKX07R24od2luZG93LCJtb3VzZXVwIixjKX1lbHNlIHNldFRpbWVvdXQobiw1MCl9fX19ZnVuY3Rpb24gRmUodCxlLHIpe2lmKCEkZShlLmZyb20scikpcmV0dXJuIFFlKHQscik7dmFyIG49ZS50ZXh0Lmxlbmd0aC0xLShlLnRvLmxpbmUtZS5mcm9tLmxpbmUpO2lmKHIubGluZT5lLnRvLmxpbmUrbil7dmFyIGk9ci5saW5lLW4sbz10LmZpcnN0K3Quc2l6ZS0xO3JldHVybiBpPm8/WWUobyxnbih0LG8pLnRleHQubGVuZ3RoKTpKZShyLGduKHQsaSkudGV4dC5sZW5ndGgpfWlmKHIubGluZT09ZS50by5saW5lK24pcmV0dXJuIEplKHIsUW4oZS50ZXh0KS5sZW5ndGgrKDE9PWUudGV4dC5sZW5ndGg/ZS5mcm9tLmNoOjApK2duKHQsZS50by5saW5lKS50ZXh0Lmxlbmd0aC1lLnRvLmNoKTt2YXIgbD1yLmxpbmUtZS5mcm9tLmxpbmU7cmV0dXJuIEplKHIsZS50ZXh0W2xdLmxlbmd0aCsobD8wOmUuZnJvbS5jaCkpfWZ1bmN0aW9uIFBlKHQsZSxyKXtpZihyJiYib2JqZWN0Ij09dHlwZW9mIHIpcmV0dXJue2FuY2hvcjpGZSh0LGUsci5hbmNob3IpLGhlYWQ6RmUodCxlLHIuaGVhZCl9O2lmKCJzdGFydCI9PXIpcmV0dXJue2FuY2hvcjplLmZyb20saGVhZDplLmZyb219O3ZhciBuPWxvKGUpO2lmKCJhcm91bmQiPT1yKXJldHVybnthbmNob3I6ZS5mcm9tLGhlYWQ6bn07aWYoImVuZCI9PXIpcmV0dXJue2FuY2hvcjpuLGhlYWQ6bn07dmFyIGk9ZnVuY3Rpb24odCl7aWYoJGUodCxlLmZyb20pKXJldHVybiB0O2lmKCEkZShlLnRvLHQpKXJldHVybiBuO3ZhciByPXQubGluZStlLnRleHQubGVuZ3RoLShlLnRvLmxpbmUtZS5mcm9tLmxpbmUpLTEsaT10LmNoO3JldHVybiB0LmxpbmU9PWUudG8ubGluZSYmKGkrPW4uY2gtZS50by5jaCksWWUocixpKX07cmV0dXJue2FuY2hvcjppKHQuc2VsLmFuY2hvciksaGVhZDppKHQuc2VsLmhlYWQpfX1mdW5jdGlvbiBSZSh0LGUscil7dmFyIG49e2NhbmNlbGVkOiExLGZyb206ZS5mcm9tLHRvOmUudG8sdGV4dDplLnRleHQsb3JpZ2luOmUub3JpZ2luLGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsZWQ9ITB9fTtyZXR1cm4gciYmKG4udXBkYXRlPWZ1bmN0aW9uKGUscixuLGkpe2UmJih0aGlzLmZyb209UWUodCxlKSksciYmKHRoaXMudG89UWUodCxyKSksbiYmKHRoaXMudGV4dD1uKSx2b2lkIDAhPT1pJiYodGhpcy5vcmlnaW49aSl9KSxLbih0LCJiZWZvcmVDaGFuZ2UiLHQsbiksdC5jbSYmS24odC5jbSwiYmVmb3JlQ2hhbmdlIix0LmNtLG4pLG4uY2FuY2VsZWQ/bnVsbDp7ZnJvbTpuLmZyb20sdG86bi50byx0ZXh0Om4udGV4dCxvcmlnaW46bi5vcmlnaW59fWZ1bmN0aW9uIEJlKHQsZSxyLG4pe2lmKHQuY20pe2lmKCF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLEJlKSh0LGUscixuKTtpZih0LmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpcmV0dXJufWlmKCEoWW4odCwiYmVmb3JlQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZUNoYW5nZSIpKXx8KGU9UmUodCxlLCEwKSkpe3ZhciBpPXFpJiYhbiYmRnIodCxlLmZyb20sZS50byk7aWYoaSl7Zm9yKHZhciBvPWkubGVuZ3RoLTE7bz49MTstLW8pR2UodCx7ZnJvbTppW29dLmZyb20sdG86aVtvXS50byx0ZXh0OlsiIl19KTtpLmxlbmd0aCYmR2UodCx7ZnJvbTppWzBdLmZyb20sdG86aVswXS50byx0ZXh0OmUudGV4dH0scil9ZWxzZSBHZSh0LGUscil9fWZ1bmN0aW9uIEdlKHQsZSxyKXtpZigxIT1lLnRleHQubGVuZ3RofHwiIiE9ZS50ZXh0WzBdfHwhamUoZS5mcm9tLGUudG8pKXt2YXIgbj1QZSh0LGUscik7TW4odCxlLG4sdC5jbT90LmNtLmN1ck9wLmlkOjAvMCksVWUodCxlLG4senIodCxlKSk7dmFyIGk9W107ZG4odCxmdW5jdGlvbih0LHIpe3J8fC0xIT10aShpLHQuaGlzdG9yeSl8fChXbih0Lmhpc3RvcnksZSksaS5wdXNoKHQuaGlzdG9yeSkpLFVlKHQsZSxudWxsLHpyKHQsZSkpfSl9fWZ1bmN0aW9uIFZlKHQsZSl7aWYoIXQuY218fCF0LmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpe3ZhciByPXQuaGlzdG9yeSxuPSgidW5kbyI9PWU/ci5kb25lOnIudW5kb25lKS5wb3AoKTtpZihuKXt2YXIgaT17Y2hhbmdlczpbXSxhbmNob3JCZWZvcmU6bi5hbmNob3JBZnRlcixoZWFkQmVmb3JlOm4uaGVhZEFmdGVyLGFuY2hvckFmdGVyOm4uYW5jaG9yQmVmb3JlLGhlYWRBZnRlcjpuLmhlYWRCZWZvcmUsZ2VuZXJhdGlvbjpyLmdlbmVyYXRpb259OygidW5kbyI9PWU/ci51bmRvbmU6ci5kb25lKS5wdXNoKGkpLHIuZ2VuZXJhdGlvbj1uLmdlbmVyYXRpb258fCsrci5tYXhHZW5lcmF0aW9uO2Zvcih2YXIgbz1Zbih0LCJiZWZvcmVDaGFuZ2UiKXx8dC5jbSYmWW4odC5jbSwiYmVmb3JlQ2hhbmdlIiksbD1uLmNoYW5nZXMubGVuZ3RoLTE7bD49MDstLWwpe3ZhciBzPW4uY2hhbmdlc1tsXTtpZihzLm9yaWdpbj1lLG8mJiFSZSh0LHMsITEpKXJldHVybigidW5kbyI9PWU/ci5kb25lOnIudW5kb25lKS5sZW5ndGg9MCx2b2lkIDA7aS5jaGFuZ2VzLnB1c2goU24odCxzKSk7dmFyIGE9bD9QZSh0LHMsbnVsbCk6e2FuY2hvcjpuLmFuY2hvckJlZm9yZSxoZWFkOm4uaGVhZEJlZm9yZX07VWUodCxzLGEsSXIodCxzKSk7dmFyIHU9W107ZG4odCxmdW5jdGlvbih0LGUpe2V8fC0xIT10aSh1LHQuaGlzdG9yeSl8fChXbih0Lmhpc3RvcnkscyksdS5wdXNoKHQuaGlzdG9yeSkpLFVlKHQscyxudWxsLElyKHQscykpfSl9fX19ZnVuY3Rpb24gS2UodCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBZZSh0LmxpbmUrZSx0LmNoKX10LmZpcnN0Kz1lLHQuY20mJnVlKHQuY20sdC5maXJzdCx0LmZpcnN0LGUpLHQuc2VsLmhlYWQ9cih0LnNlbC5oZWFkKSx0LnNlbC5hbmNob3I9cih0LnNlbC5hbmNob3IpLHQuc2VsLmZyb209cih0LnNlbC5mcm9tKSx0LnNlbC50bz1yKHQuc2VsLnRvKX1mdW5jdGlvbiBVZSh0LGUscixuKXtpZih0LmNtJiYhdC5jbS5jdXJPcClyZXR1cm4gbGUodC5jbSxVZSkodCxlLHIsbik7aWYoZS50by5saW5lPHQuZmlyc3QpcmV0dXJuIEtlKHQsZS50ZXh0Lmxlbmd0aC0xLShlLnRvLmxpbmUtZS5mcm9tLmxpbmUpKSx2b2lkIDA7aWYoIShlLmZyb20ubGluZT50Lmxhc3RMaW5lKCkpKXtpZihlLmZyb20ubGluZTx0LmZpcnN0KXt2YXIgaT1lLnRleHQubGVuZ3RoLTEtKHQuZmlyc3QtZS5mcm9tLmxpbmUpO0tlKHQsaSksZT17ZnJvbTpZZSh0LmZpcnN0LDApLHRvOlllKGUudG8ubGluZStpLGUudG8uY2gpLHRleHQ6W1FuKGUudGV4dCldLG9yaWdpbjplLm9yaWdpbn19dmFyIG89dC5sYXN0TGluZSgpO2UudG8ubGluZT5vJiYoZT17ZnJvbTplLmZyb20sdG86WWUobyxnbih0LG8pLnRleHQubGVuZ3RoKSx0ZXh0OltlLnRleHRbMF1dLG9yaWdpbjplLm9yaWdpbn0pLGUucmVtb3ZlZD1tbih0LGUuZnJvbSxlLnRvKSxyfHwocj1QZSh0LGUsbnVsbCkpLHQuY20/WGUodC5jbSxlLG4scik6Y24odCxlLG4scil9fWZ1bmN0aW9uIFhlKHQsZSxyLG4pe3ZhciBvPXQuZG9jLGw9dC5kaXNwbGF5LHM9ZS5mcm9tLGE9ZS50byx1PSExLGY9cy5saW5lO3Qub3B0aW9ucy5saW5lV3JhcHBpbmd8fChmPWJuKEdyKG8sZ24obyxzLmxpbmUpKSksby5pdGVyKGYsYS5saW5lKzEsZnVuY3Rpb24odCl7cmV0dXJuIHQ9PWwubWF4TGluZT8odT0hMCwhMCk6dm9pZCAwfSkpLCRlKG8uc2VsLmhlYWQsZS5mcm9tKXx8JGUoZS50byxvLnNlbC5oZWFkKXx8KHQuY3VyT3AuY3Vyc29yQWN0aXZpdHk9ITApLGNuKG8sZSxyLG4saSh0KSksdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KG8uaXRlcihmLHMubGluZStlLnRleHQubGVuZ3RoLGZ1bmN0aW9uKHQpe3ZhciBlPWMobyx0KTtlPmwubWF4TGluZUxlbmd0aCYmKGwubWF4TGluZT10LGwubWF4TGluZUxlbmd0aD1lLGwubWF4TGluZUNoYW5nZWQ9ITAsdT0hMSl9KSx1JiYodC5jdXJPcC51cGRhdGVNYXhMaW5lPSEwKSksby5mcm9udGllcj1NYXRoLm1pbihvLmZyb250aWVyLHMubGluZSksVyh0LDQwMCk7dmFyIGg9ZS50ZXh0Lmxlbmd0aC0oYS5saW5lLXMubGluZSktMTtpZih1ZSh0LHMubGluZSxhLmxpbmUrMSxoKSxZbih0LCJjaGFuZ2UiKSl7dmFyIGQ9e2Zyb206cyx0bzphLHRleHQ6ZS50ZXh0LHJlbW92ZWQ6ZS5yZW1vdmVkLG9yaWdpbjplLm9yaWdpbn07aWYodC5jdXJPcC50ZXh0Q2hhbmdlZCl7Zm9yKHZhciBwPXQuY3VyT3AudGV4dENoYW5nZWQ7cC5uZXh0O3A9cC5uZXh0KTtwLm5leHQ9ZH1lbHNlIHQuY3VyT3AudGV4dENoYW5nZWQ9ZH19ZnVuY3Rpb24gX2UodCxlLHIsbixpKXtpZihufHwobj1yKSwkZShuLHIpKXt2YXIgbz1uO249cixyPW99InN0cmluZyI9PXR5cGVvZiBlJiYoZT16byhlKSksQmUodCx7ZnJvbTpyLHRvOm4sdGV4dDplLG9yaWdpbjppfSxudWxsKX1mdW5jdGlvbiBZZSh0LGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgWWU/KHRoaXMubGluZT10LHRoaXMuY2g9ZSx2b2lkIDApOm5ldyBZZSh0LGUpfWZ1bmN0aW9uIGplKHQsZSl7cmV0dXJuIHQubGluZT09ZS5saW5lJiZ0LmNoPT1lLmNofWZ1bmN0aW9uICRlKHQsZSl7cmV0dXJuIHQubGluZTxlLmxpbmV8fHQubGluZT09ZS5saW5lJiZ0LmNoPGUuY2h9ZnVuY3Rpb24gWmUodCl7cmV0dXJuIFllKHQubGluZSx0LmNoKX1mdW5jdGlvbiBxZSh0LGUpe3JldHVybiBNYXRoLm1heCh0LmZpcnN0LE1hdGgubWluKGUsdC5maXJzdCt0LnNpemUtMSkpfWZ1bmN0aW9uIFFlKHQsZSl7aWYoZS5saW5lPHQuZmlyc3QpcmV0dXJuIFllKHQuZmlyc3QsMCk7dmFyIHI9dC5maXJzdCt0LnNpemUtMTtyZXR1cm4gZS5saW5lPnI/WWUocixnbih0LHIpLnRleHQubGVuZ3RoKTpKZShlLGduKHQsZS5saW5lKS50ZXh0Lmxlbmd0aCl9ZnVuY3Rpb24gSmUodCxlKXt2YXIgcj10LmNoO3JldHVybiBudWxsPT1yfHxyPmU/WWUodC5saW5lLGUpOjA+cj9ZZSh0LmxpbmUsMCk6dH1mdW5jdGlvbiB0cih0LGUpe3JldHVybiBlPj10LmZpcnN0JiZlPHQuZmlyc3QrdC5zaXplfWZ1bmN0aW9uIGVyKHQsZSxyLG4pe2lmKHQuc2VsLnNoaWZ0fHx0LnNlbC5leHRlbmQpe3ZhciBpPXQuc2VsLmFuY2hvcjtpZihyKXt2YXIgbz0kZShlLGkpO28hPSRlKHIsaSk/KGk9ZSxlPXIpOm8hPSRlKGUscikmJihlPXIpfW5yKHQsaSxlLG4pfWVsc2UgbnIodCxlLHJ8fGUsbik7dC5jbSYmKHQuY20uY3VyT3AudXNlclNlbENoYW5nZT0hMCl9ZnVuY3Rpb24gcnIodCxlLHIpe3ZhciBuPXthbmNob3I6ZSxoZWFkOnJ9O3JldHVybiBLbih0LCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLHQsbiksdC5jbSYmS24odC5jbSwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIix0LmNtLG4pLG4uYW5jaG9yPVFlKHQsbi5hbmNob3IpLG4uaGVhZD1RZSh0LG4uaGVhZCksbn1mdW5jdGlvbiBucih0LGUscixuLGkpe2lmKCFpJiZZbih0LCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKXx8dC5jbSYmWW4odC5jbSwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIikpe3ZhciBvPXJyKHQsZSxyKTtyPW8uaGVhZCxlPW8uYW5jaG9yfXZhciBsPXQuc2VsO2lmKGwuZ29hbENvbHVtbj1udWxsLG51bGw9PW4mJihuPSRlKHIsbC5oZWFkKT8tMToxKSwoaXx8IWplKGUsbC5hbmNob3IpKSYmKGU9b3IodCxlLG4sInB1c2giIT1pKSksKGl8fCFqZShyLGwuaGVhZCkpJiYocj1vcih0LHIsbiwicHVzaCIhPWkpKSwhamUobC5hbmNob3IsZSl8fCFqZShsLmhlYWQscikpe2wuYW5jaG9yPWUsbC5oZWFkPXI7dmFyIHM9JGUocixlKTtsLmZyb209cz9yOmUsbC50bz1zP2U6cix0LmNtJiYodC5jbS5jdXJPcC51cGRhdGVJbnB1dD10LmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9dC5jbS5jdXJPcC5jdXJzb3JBY3Rpdml0eT0hMCksVW4odCwiY3Vyc29yQWN0aXZpdHkiLHQpfX1mdW5jdGlvbiBpcih0KXtucih0LmRvYyx0LmRvYy5zZWwuZnJvbSx0LmRvYy5zZWwudG8sbnVsbCwicHVzaCIpfWZ1bmN0aW9uIG9yKHQsZSxyLG4pe3ZhciBpPSExLG89ZSxsPXJ8fDE7dC5jYW50RWRpdD0hMTt0OmZvcig7Oyl7dmFyIHM9Z24odCxvLmxpbmUpO2lmKHMubWFya2VkU3BhbnMpZm9yKHZhciBhPTA7YTxzLm1hcmtlZFNwYW5zLmxlbmd0aDsrK2Epe3ZhciB1PXMubWFya2VkU3BhbnNbYV0sYz11Lm1hcmtlcjtpZigobnVsbD09dS5mcm9tfHwoYy5pbmNsdXNpdmVMZWZ0P3UuZnJvbTw9by5jaDp1LmZyb208by5jaCkpJiYobnVsbD09dS50b3x8KGMuaW5jbHVzaXZlUmlnaHQ/dS50bz49by5jaDp1LnRvPm8uY2gpKSl7aWYobiYmKEtuKGMsImJlZm9yZUN1cnNvckVudGVyIiksYy5leHBsaWNpdGx5Q2xlYXJlZCkpe2lmKHMubWFya2VkU3BhbnMpey0tYTtjb250aW51ZX1icmVha31pZighYy5hdG9taWMpY29udGludWU7dmFyIGY9Yy5maW5kKClbMD5sPyJmcm9tIjoidG8iXTtpZihqZShmLG8pJiYoZi5jaCs9bCxmLmNoPDA/Zj1mLmxpbmU+dC5maXJzdD9RZSh0LFllKGYubGluZS0xKSk6bnVsbDpmLmNoPnMudGV4dC5sZW5ndGgmJihmPWYubGluZTx0LmZpcnN0K3Quc2l6ZS0xP1llKGYubGluZSsxLDApOm51bGwpLCFmKSl7aWYoaSlyZXR1cm4gbj8odC5jYW50RWRpdD0hMCxZZSh0LmZpcnN0LDApKTpvcih0LGUsciwhMCk7aT0hMCxmPWUsbD0tbH1vPWY7Y29udGludWUgdH19cmV0dXJuIG99fWZ1bmN0aW9uIGxyKHQpe3ZhciBlPXNyKHQsdC5kb2Muc2VsLmhlYWQsbnVsbCx0Lm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2luKTtpZih0LnN0YXRlLmZvY3VzZWQpe3ZhciByPXQuZGlzcGxheSxuPWZpKHIuc2l6ZXIpLGk9bnVsbDtpZihlLnRvcCtuLnRvcDwwP2k9ITA6ZS5ib3R0b20rbi50b3A+KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkmJihpPSExKSxudWxsIT1pJiYhQmkpe3ZhciBvPSJub25lIj09ci5jdXJzb3Iuc3R5bGUuZGlzcGxheTtvJiYoci5jdXJzb3Iuc3R5bGUuZGlzcGxheT0iIixyLmN1cnNvci5zdHlsZS5sZWZ0PWUubGVmdCsicHgiLHIuY3Vyc29yLnN0eWxlLnRvcD1lLnRvcC1yLnZpZXdPZmZzZXQrInB4Iiksci5jdXJzb3Iuc2Nyb2xsSW50b1ZpZXcoaSksbyYmKHIuY3Vyc29yLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX19fWZ1bmN0aW9uIHNyKHQsZSxyLG4pe2ZvcihudWxsPT1uJiYobj0wKTs7KXt2YXIgaT0hMSxvPVEodCxlKSxsPXImJnIhPWU/USh0LHIpOm8scz11cih0LE1hdGgubWluKG8ubGVmdCxsLmxlZnQpLE1hdGgubWluKG8udG9wLGwudG9wKS1uLE1hdGgubWF4KG8ubGVmdCxsLmxlZnQpLE1hdGgubWF4KG8uYm90dG9tLGwuYm90dG9tKStuKSxhPXQuZG9jLnNjcm9sbFRvcCx1PXQuZG9jLnNjcm9sbExlZnQ7aWYobnVsbCE9cy5zY3JvbGxUb3AmJihTZSh0LHMuc2Nyb2xsVG9wKSxNYXRoLmFicyh0LmRvYy5zY3JvbGxUb3AtYSk+MSYmKGk9ITApKSxudWxsIT1zLnNjcm9sbExlZnQmJihNZSh0LHMuc2Nyb2xsTGVmdCksTWF0aC5hYnModC5kb2Muc2Nyb2xsTGVmdC11KT4xJiYoaT0hMCkpLCFpKXJldHVybiBvfX1mdW5jdGlvbiBhcih0LGUscixuLGkpe3ZhciBvPXVyKHQsZSxyLG4saSk7bnVsbCE9by5zY3JvbGxUb3AmJlNlKHQsby5zY3JvbGxUb3ApLG51bGwhPW8uc2Nyb2xsTGVmdCYmTWUodCxvLnNjcm9sbExlZnQpfWZ1bmN0aW9uIHVyKHQsZSxyLG4saSl7dmFyIG89dC5kaXNwbGF5LGw9cmUodC5kaXNwbGF5KTswPnImJihyPTApO3ZhciBzPW8uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LVRvLGE9by5zY3JvbGxlci5zY3JvbGxUb3AsdT17fSxjPXQuZG9jLmhlaWdodCtGKG8pLGY9bD5yLGg9aT5jLWw7aWYoYT5yKXUuc2Nyb2xsVG9wPWY/MDpyO2Vsc2UgaWYoaT5hK3Mpe3ZhciBkPU1hdGgubWluKHIsKGg/YzppKS1zKTtkIT1hJiYodS5zY3JvbGxUb3A9ZCl9dmFyIHA9by5zY3JvbGxlci5jbGllbnRXaWR0aC1UbyxnPW8uc2Nyb2xsZXIuc2Nyb2xsTGVmdDtlKz1vLmd1dHRlcnMub2Zmc2V0V2lkdGgsbis9by5ndXR0ZXJzLm9mZnNldFdpZHRoO3ZhciBtPW8uZ3V0dGVycy5vZmZzZXRXaWR0aCx2PW0rMTA+ZTtyZXR1cm4gZyttPmV8fHY/KHYmJihlPTApLHUuc2Nyb2xsTGVmdD1NYXRoLm1heCgwLGUtMTAtbSkpOm4+cCtnLTMmJih1LnNjcm9sbExlZnQ9bisxMC1wKSx1fWZ1bmN0aW9uIGNyKHQsZSxyKXt0LmN1ck9wLnVwZGF0ZVNjcm9sbFBvcz17c2Nyb2xsTGVmdDpudWxsPT1lP3QuZG9jLnNjcm9sbExlZnQ6ZSxzY3JvbGxUb3A6bnVsbD09cj90LmRvYy5zY3JvbGxUb3A6cn19ZnVuY3Rpb24gZnIodCxlLHIpe3ZhciBuPXQuY3VyT3AudXBkYXRlU2Nyb2xsUG9zfHwodC5jdXJPcC51cGRhdGVTY3JvbGxQb3M9e3Njcm9sbExlZnQ6dC5kb2Muc2Nyb2xsTGVmdCxzY3JvbGxUb3A6dC5kb2Muc2Nyb2xsVG9wfSksaT10LmRpc3BsYXkuc2Nyb2xsZXI7bi5zY3JvbGxUb3A9TWF0aC5tYXgoMCxNYXRoLm1pbihpLnNjcm9sbEhlaWdodC1pLmNsaWVudEhlaWdodCxuLnNjcm9sbFRvcCtyKSksbi5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsTWF0aC5taW4oaS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLG4uc2Nyb2xsTGVmdCtlKSl9ZnVuY3Rpb24gaHIodCxlLHIsbil7dmFyIGk9dC5kb2M7aWYobnVsbD09ciYmKHI9ImFkZCIpLCJzbWFydCI9PXIpaWYodC5kb2MubW9kZS5pbmRlbnQpdmFyIG89eih0LGUpO2Vsc2Ugcj0icHJldiI7dmFyIGwscz10Lm9wdGlvbnMudGFiU2l6ZSxhPWduKGksZSksdT1abihhLnRleHQsbnVsbCxzKSxjPWEudGV4dC5tYXRjaCgvXlxzKi8pWzBdO2lmKCJzbWFydCI9PXImJihsPXQuZG9jLm1vZGUuaW5kZW50KG8sYS50ZXh0LnNsaWNlKGMubGVuZ3RoKSxhLnRleHQpLGw9PUFvKSl7aWYoIW4pcmV0dXJuO3I9InByZXYifSJwcmV2Ij09cj9sPWU+aS5maXJzdD9abihnbihpLGUtMSkudGV4dCxudWxsLHMpOjA6ImFkZCI9PXI/bD11K3Qub3B0aW9ucy5pbmRlbnRVbml0OiJzdWJ0cmFjdCI9PXI/bD11LXQub3B0aW9ucy5pbmRlbnRVbml0OiJudW1iZXIiPT10eXBlb2YgciYmKGw9dStyKSxsPU1hdGgubWF4KDAsbCk7dmFyIGY9IiIsaD0wO2lmKHQub3B0aW9ucy5pbmRlbnRXaXRoVGFicylmb3IodmFyIGQ9TWF0aC5mbG9vcihsL3MpO2Q7LS1kKWgrPXMsZis9IgkiO2w+aCYmKGYrPXFuKGwtaCkpLGYhPWM/X2UodC5kb2MsZixZZShlLDApLFllKGUsYy5sZW5ndGgpLCIraW5wdXQiKTppLnNlbC5oZWFkLmxpbmU9PWUmJmkuc2VsLmhlYWQuY2g8Yy5sZW5ndGgmJm5yKGksWWUoZSxjLmxlbmd0aCksWWUoZSxjLmxlbmd0aCksMSksYS5zdGF0ZUFmdGVyPW51bGx9ZnVuY3Rpb24gZHIodCxlLHIpe3ZhciBuPWUsaT1lLG89dC5kb2M7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP2k9Z24obyxxZShvLGUpKTpuPWJuKGUpLG51bGw9PW4/bnVsbDpyKGksbik/KHVlKHQsbixuKzEpLGkpOm51bGx9ZnVuY3Rpb24gcHIodCxlLHIsbixpKXtmdW5jdGlvbiBvKCl7dmFyIGU9cytyO3JldHVybiBlPHQuZmlyc3R8fGU+PXQuZmlyc3QrdC5zaXplP2Y9ITE6KHM9ZSxjPWduKHQsZSkpfWZ1bmN0aW9uIGwodCl7dmFyIGU9KGk/U2k6TWkpKGMsYSxyLCEwKTtpZihudWxsPT1lKXtpZih0fHwhbygpKXJldHVybiBmPSExO2E9aT8oMD5yP2JpOnlpKShjKTowPnI/Yy50ZXh0Lmxlbmd0aDowfWVsc2UgYT1lO3JldHVybiEwfXZhciBzPWUubGluZSxhPWUuY2gsdT1yLGM9Z24odCxzKSxmPSEwO2lmKCJjaGFyIj09bilsKCk7ZWxzZSBpZigiY29sdW1uIj09bilsKCEwKTtlbHNlIGlmKCJ3b3JkIj09bnx8Imdyb3VwIj09bilmb3IodmFyIGg9bnVsbCxkPSJncm91cCI9PW4scD0hMDshKDA+cil8fGwoIXApO3A9ITEpe3ZhciBnPWMudGV4dC5jaGFyQXQoYSl8fCJcbiIsbT1vaShnKT8idyI6ZD8vXHMvLnRlc3QoZyk/bnVsbDoicCI6bnVsbDtpZihoJiZoIT1tKXswPnImJihyPTEsbCgpKTticmVha31pZihtJiYoaD1tKSxyPjAmJiFsKCFwKSlicmVha312YXIgdj1vcih0LFllKHMsYSksdSwhMCk7cmV0dXJuIGZ8fCh2LmhpdFNpZGU9ITApLHZ9ZnVuY3Rpb24gZ3IodCxlLHIsbil7dmFyIGksbz10LmRvYyxsPWUubGVmdDtpZigicGFnZSI9PW4pe3ZhciBzPU1hdGgubWluKHQuZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCx3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpO2k9ZS50b3Arcioocy0oMD5yPzEuNTouNSkqcmUodC5kaXNwbGF5KSl9ZWxzZSJsaW5lIj09biYmKGk9cj4wP2UuYm90dG9tKzM6ZS50b3AtMyk7Zm9yKDs7KXt2YXIgYT10ZSh0LGwsaSk7aWYoIWEub3V0c2lkZSlicmVhaztpZigwPnI/MD49aTppPj1vLmhlaWdodCl7YS5oaXRTaWRlPSEwO2JyZWFrfWkrPTUqcn1yZXR1cm4gYX1mdW5jdGlvbiBtcih0LGUpe3ZhciByPWUuY2gsbj1lLmNoO2lmKHQpeyhlLnhSZWw8MHx8bj09dC5sZW5ndGgpJiZyPy0tcjorK247Zm9yKHZhciBpPXQuY2hhckF0KHIpLG89b2koaSk/b2k6L1xzLy50ZXN0KGkpP2Z1bmN0aW9uKHQpe3JldHVybi9ccy8udGVzdCh0KX06ZnVuY3Rpb24odCl7cmV0dXJuIS9ccy8udGVzdCh0KSYmIW9pKHQpfTtyPjAmJm8odC5jaGFyQXQoci0xKSk7KS0tcjtmb3IoO248dC5sZW5ndGgmJm8odC5jaGFyQXQobikpOykrK259cmV0dXJue2Zyb206WWUoZS5saW5lLHIpLHRvOlllKGUubGluZSxuKX19ZnVuY3Rpb24gdnIodCxlKXtlcih0LmRvYyxZZShlLDApLFFlKHQuZG9jLFllKGUrMSwwKSkpfWZ1bmN0aW9uIHlyKGUscixuLGkpe3QuZGVmYXVsdHNbZV09cixuJiYoc29bZV09aT9mdW5jdGlvbih0LGUscil7ciE9dW8mJm4odCxlLHIpfTpuKX1mdW5jdGlvbiBicih0LGUpe2lmKGU9PT0hMClyZXR1cm4gZTtpZih0LmNvcHlTdGF0ZSlyZXR1cm4gdC5jb3B5U3RhdGUoZSk7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl07aSBpbnN0YW5jZW9mIEFycmF5JiYoaT1pLmNvbmNhdChbXSkpLHJbbl09aX1yZXR1cm4gcn1mdW5jdGlvbiB4cih0LGUscil7cmV0dXJuIHQuc3RhcnRTdGF0ZT90LnN0YXJ0U3RhdGUoZSxyKTohMH1mdW5jdGlvbiBDcih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dm9bdF06dH1mdW5jdGlvbiB3cih0LGUscil7ZnVuY3Rpb24gbihlKXtlPUNyKGUpO3ZhciBpPWVbdF07aWYoaT09PSExKXJldHVybiJzdG9wIjtpZihudWxsIT1pJiZyKGkpKXJldHVybiEwO2lmKGUubm9mYWxsdGhyb3VnaClyZXR1cm4ic3RvcCI7dmFyIG89ZS5mYWxsdGhyb3VnaDtpZihudWxsPT1vKXJldHVybiExO2lmKCJbb2JqZWN0IEFycmF5XSIhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSlyZXR1cm4gbihvKTtmb3IodmFyIGw9MCxzPW8ubGVuZ3RoO3M+bDsrK2wpe3ZhciBhPW4ob1tsXSk7aWYoYSlyZXR1cm4gYX1yZXR1cm4hMX1mb3IodmFyIGk9MDtpPGUubGVuZ3RoOysraSl7dmFyIG89bihlW2ldKTtpZihvKXJldHVybiJzdG9wIiE9b319ZnVuY3Rpb24gTHIodCl7dmFyIGU9UG9bdC5rZXlDb2RlXTtyZXR1cm4iQ3RybCI9PWV8fCJBbHQiPT1lfHwiU2hpZnQiPT1lfHwiTW9kIj09ZX1mdW5jdGlvbiBrcih0LGUpe2lmKHppJiYzND09dC5rZXlDb2RlJiZ0WyJjaGFyIl0pcmV0dXJuITE7dmFyIHI9UG9bdC5rZXlDb2RlXTtyZXR1cm4gbnVsbD09cnx8dC5hbHRHcmFwaEtleT8hMToodC5hbHRLZXkmJihyPSJBbHQtIityKSwoJGk/dC5tZXRhS2V5OnQuY3RybEtleSkmJihyPSJDdHJsLSIrciksKCRpP3QuY3RybEtleTp0Lm1ldGFLZXkpJiYocj0iQ21kLSIrciksIWUmJnQuc2hpZnRLZXkmJihyPSJTaGlmdC0iK3IpLHIpfWZ1bmN0aW9uIFNyKHQsZSl7dGhpcy5wb3M9dGhpcy5zdGFydD0wLHRoaXMuc3RyaW5nPXQsdGhpcy50YWJTaXplPWV8fDgsdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMubGFzdENvbHVtblZhbHVlPTB9ZnVuY3Rpb24gTXIodCxlKXt0aGlzLmxpbmVzPVtdLHRoaXMudHlwZT1lLHRoaXMuZG9jPXR9ZnVuY3Rpb24gVHIodCxlLHIsbixpKXtpZihuJiZuLnNoYXJlZClyZXR1cm4gSHIodCxlLHIsbixpKTtpZih0LmNtJiYhdC5jbS5jdXJPcClyZXR1cm4gbGUodC5jbSxUcikodCxlLHIsbixpKTt2YXIgbz1uZXcgTXIodCxpKTtpZigkZShyLGUpfHxqZShlLHIpJiYicmFuZ2UiPT1pJiYoIW4uaW5jbHVzaXZlTGVmdHx8IW4uaW5jbHVzaXZlUmlnaHQpKXJldHVybiBvO24mJnJpKG4sbyksby5yZXBsYWNlZFdpdGgmJihvLmNvbGxhcHNlZD0hMCxvLnJlcGxhY2VkV2l0aD1zaSgic3BhbiIsW28ucmVwbGFjZWRXaXRoXSwiQ29kZU1pcnJvci13aWRnZXQiKSxuLmhhbmRsZU1vdXNlRXZlbnRzfHwoby5yZXBsYWNlZFdpdGguaWdub3JlRXZlbnRzPSEwKSksby5jb2xsYXBzZWQmJihRaT0hMCksby5hZGRUb0hpc3RvcnkmJk1uKHQse2Zyb206ZSx0bzpyLG9yaWdpbjoibWFya1RleHQifSx7aGVhZDp0LnNlbC5oZWFkLGFuY2hvcjp0LnNlbC5hbmNob3J9LDAvMCk7dmFyIGwscyxhLHU9ZS5saW5lLGM9MCxmPXQuY207aWYodC5pdGVyKHUsci5saW5lKzEsZnVuY3Rpb24obil7ZiYmby5jb2xsYXBzZWQmJiFmLm9wdGlvbnMubGluZVdyYXBwaW5nJiZHcih0LG4pPT1mLmRpc3BsYXkubWF4TGluZSYmKGE9ITApO3ZhciBpPXtmcm9tOm51bGwsdG86bnVsbCxtYXJrZXI6b307Yys9bi50ZXh0Lmxlbmd0aCx1PT1lLmxpbmUmJihpLmZyb209ZS5jaCxjLT1lLmNoKSx1PT1yLmxpbmUmJihpLnRvPXIuY2gsYy09bi50ZXh0Lmxlbmd0aC1yLmNoKSxvLmNvbGxhcHNlZCYmKHU9PXIubGluZSYmKHM9UHIobixyLmNoKSksdT09ZS5saW5lP2w9UHIobixlLmNoKTp5bihuLDApKSxXcihuLGkpLCsrdX0pLG8uY29sbGFwc2VkJiZ0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKGUpe1ZyKHQsZSkmJnluKGUsMCl9KSxvLmNsZWFyT25FbnRlciYmR24obywiYmVmb3JlQ3Vyc29yRW50ZXIiLGZ1bmN0aW9uKCl7by5jbGVhcigpfSksby5yZWFkT25seSYmKHFpPSEwLCh0Lmhpc3RvcnkuZG9uZS5sZW5ndGh8fHQuaGlzdG9yeS51bmRvbmUubGVuZ3RoKSYmdC5jbGVhckhpc3RvcnkoKSksby5jb2xsYXBzZWQpe2lmKGwhPXMpdGhyb3cgbmV3IEVycm9yKCJJbnNlcnRpbmcgY29sbGFwc2VkIG1hcmtlciBvdmVybGFwcGluZyBhbiBleGlzdGluZyBvbmUiKTtvLnNpemU9YyxvLmF0b21pYz0hMH1yZXR1cm4gZiYmKGEmJihmLmN1ck9wLnVwZGF0ZU1heExpbmU9ITApLChvLmNsYXNzTmFtZXx8by50aXRsZXx8by5zdGFydFN0eWxlfHxvLmVuZFN0eWxlfHxvLmNvbGxhcHNlZCkmJnVlKGYsZS5saW5lLHIubGluZSsxKSxvLmF0b21pYyYmaXIoZikpLG99ZnVuY3Rpb24gQXIodCxlKXt0aGlzLm1hcmtlcnM9dCx0aGlzLnByaW1hcnk9ZTtmb3IodmFyIHI9MCxuPXRoaXM7cjx0Lmxlbmd0aDsrK3IpdFtyXS5wYXJlbnQ9dGhpcyxHbih0W3JdLCJjbGVhciIsZnVuY3Rpb24oKXtuLmNsZWFyKCl9KX1mdW5jdGlvbiBIcih0LGUscixuLGkpe249cmkobiksbi5zaGFyZWQ9ITE7dmFyIG89W1RyKHQsZSxyLG4saSldLGw9b1swXSxzPW4ucmVwbGFjZWRXaXRoO3JldHVybiBkbih0LGZ1bmN0aW9uKHQpe3MmJihuLnJlcGxhY2VkV2l0aD1zLmNsb25lTm9kZSghMCkpLG8ucHVzaChUcih0LFFlKHQsZSksUWUodCxyKSxuLGkpKTtmb3IodmFyIGE9MDthPHQubGlua2VkLmxlbmd0aDsrK2EpaWYodC5saW5rZWRbYV0uaXNQYXJlbnQpcmV0dXJuO2w9UW4obyl9KSxuZXcgQXIobyxsKX1mdW5jdGlvbiBOcih0LGUpe2lmKHQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPXRbcl07aWYobi5tYXJrZXI9PWUpcmV0dXJuIG59fWZ1bmN0aW9uIERyKHQsZSl7Zm9yKHZhciByLG49MDtuPHQubGVuZ3RoOysrbil0W25dIT1lJiYocnx8KHI9W10pKS5wdXNoKHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIFdyKHQsZSl7dC5tYXJrZWRTcGFucz10Lm1hcmtlZFNwYW5zP3QubWFya2VkU3BhbnMuY29uY2F0KFtlXSk6W2VdLGUubWFya2VyLmF0dGFjaExpbmUodCl9ZnVuY3Rpb24gT3IodCxlLHIpe2lmKHQpZm9yKHZhciBuLGk9MDtpPHQubGVuZ3RoOysraSl7dmFyIG89dFtpXSxsPW8ubWFya2VyLHM9bnVsbD09by5mcm9tfHwobC5pbmNsdXNpdmVMZWZ0P28uZnJvbTw9ZTpvLmZyb208ZSk7aWYoc3x8KGwuaW5jbHVzaXZlTGVmdCYmbC5pbmNsdXNpdmVSaWdodHx8ImJvb2ttYXJrIj09bC50eXBlKSYmby5mcm9tPT1lJiYoIXJ8fCFvLm1hcmtlci5pbnNlcnRMZWZ0KSl7dmFyIGE9bnVsbD09by50b3x8KGwuaW5jbHVzaXZlUmlnaHQ/by50bz49ZTpvLnRvPmUpOyhufHwobj1bXSkpLnB1c2goe2Zyb206by5mcm9tLHRvOmE/bnVsbDpvLnRvLG1hcmtlcjpsfSl9fXJldHVybiBufWZ1bmN0aW9uIEVyKHQsZSxyKXtpZih0KWZvcih2YXIgbixpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBvPXRbaV0sbD1vLm1hcmtlcixzPW51bGw9PW8udG98fChsLmluY2x1c2l2ZVJpZ2h0P28udG8+PWU6by50bz5lKTtpZihzfHwiYm9va21hcmsiPT1sLnR5cGUmJm8uZnJvbT09ZSYmKCFyfHxvLm1hcmtlci5pbnNlcnRMZWZ0KSl7dmFyIGE9bnVsbD09by5mcm9tfHwobC5pbmNsdXNpdmVMZWZ0P28uZnJvbTw9ZTpvLmZyb208ZSk7KG58fChuPVtdKSkucHVzaCh7ZnJvbTphP251bGw6by5mcm9tLWUsdG86bnVsbD09by50bz9udWxsOm8udG8tZSxtYXJrZXI6bH0pfX1yZXR1cm4gbn1mdW5jdGlvbiB6cih0LGUpe3ZhciByPXRyKHQsZS5mcm9tLmxpbmUpJiZnbih0LGUuZnJvbS5saW5lKS5tYXJrZWRTcGFucyxuPXRyKHQsZS50by5saW5lKSYmZ24odCxlLnRvLmxpbmUpLm1hcmtlZFNwYW5zO2lmKCFyJiYhbilyZXR1cm4gbnVsbDt2YXIgaT1lLmZyb20uY2gsbz1lLnRvLmNoLGw9amUoZS5mcm9tLGUudG8pLHM9T3IocixpLGwpLGE9RXIobixvLGwpLHU9MT09ZS50ZXh0Lmxlbmd0aCxjPVFuKGUudGV4dCkubGVuZ3RoKyh1P2k6MCk7aWYocylmb3IodmFyIGY9MDtmPHMubGVuZ3RoOysrZil7dmFyIGg9c1tmXTtpZihudWxsPT1oLnRvKXt2YXIgZD1OcihhLGgubWFya2VyKTtkP3UmJihoLnRvPW51bGw9PWQudG8/bnVsbDpkLnRvK2MpOmgudG89aX19aWYoYSlmb3IodmFyIGY9MDtmPGEubGVuZ3RoOysrZil7dmFyIGg9YVtmXTtpZihudWxsIT1oLnRvJiYoaC50bys9YyksbnVsbD09aC5mcm9tKXt2YXIgZD1OcihzLGgubWFya2VyKTtkfHwoaC5mcm9tPWMsdSYmKHN8fChzPVtdKSkucHVzaChoKSl9ZWxzZSBoLmZyb20rPWMsdSYmKHN8fChzPVtdKSkucHVzaChoKX1pZih1JiZzKXtmb3IodmFyIGY9MDtmPHMubGVuZ3RoOysrZiludWxsIT1zW2ZdLmZyb20mJnNbZl0uZnJvbT09c1tmXS50byYmImJvb2ttYXJrIiE9c1tmXS5tYXJrZXIudHlwZSYmcy5zcGxpY2UoZi0tLDEpO3MubGVuZ3RofHwocz1udWxsKX12YXIgcD1bc107aWYoIXUpe3ZhciBnLG09ZS50ZXh0Lmxlbmd0aC0yO2lmKG0+MCYmcylmb3IodmFyIGY9MDtmPHMubGVuZ3RoOysrZiludWxsPT1zW2ZdLnRvJiYoZ3x8KGc9W10pKS5wdXNoKHtmcm9tOm51bGwsdG86bnVsbCxtYXJrZXI6c1tmXS5tYXJrZXJ9KTtmb3IodmFyIGY9MDttPmY7KytmKXAucHVzaChnKTtwLnB1c2goYSl9cmV0dXJuIHB9ZnVuY3Rpb24gSXIodCxlKXt2YXIgcj1Bbih0LGUpLG49enIodCxlKTtpZighcilyZXR1cm4gbjtpZighbilyZXR1cm4gcjtmb3IodmFyIGk9MDtpPHIubGVuZ3RoOysraSl7dmFyIG89cltpXSxsPW5baV07aWYobyYmbCl0OmZvcih2YXIgcz0wO3M8bC5sZW5ndGg7KytzKXtmb3IodmFyIGE9bFtzXSx1PTA7dTxvLmxlbmd0aDsrK3UpaWYob1t1XS5tYXJrZXI9PWEubWFya2VyKWNvbnRpbnVlIHQ7by5wdXNoKGEpfWVsc2UgbCYmKHJbaV09bCl9cmV0dXJuIHJ9ZnVuY3Rpb24gRnIodCxlLHIpe3ZhciBuPW51bGw7aWYodC5pdGVyKGUubGluZSxyLmxpbmUrMSxmdW5jdGlvbih0KXtpZih0Lm1hcmtlZFNwYW5zKWZvcih2YXIgZT0wO2U8dC5tYXJrZWRTcGFucy5sZW5ndGg7KytlKXt2YXIgcj10Lm1hcmtlZFNwYW5zW2VdLm1hcmtlcjshci5yZWFkT25seXx8biYmLTEhPXRpKG4scil8fChufHwobj1bXSkpLnB1c2gocil9fSksIW4pcmV0dXJuIG51bGw7Zm9yKHZhciBpPVt7ZnJvbTplLHRvOnJ9XSxvPTA7bzxuLmxlbmd0aDsrK28pZm9yKHZhciBsPW5bb10scz1sLmZpbmQoKSxhPTA7YTxpLmxlbmd0aDsrK2Epe3ZhciB1PWlbYV07aWYoISRlKHUudG8scy5mcm9tKSYmISRlKHMudG8sdS5mcm9tKSl7dmFyIGM9W2EsMV07KCRlKHUuZnJvbSxzLmZyb20pfHwhbC5pbmNsdXNpdmVMZWZ0JiZqZSh1LmZyb20scy5mcm9tKSkmJmMucHVzaCh7ZnJvbTp1LmZyb20sdG86cy5mcm9tfSksKCRlKHMudG8sdS50byl8fCFsLmluY2x1c2l2ZVJpZ2h0JiZqZSh1LnRvLHMudG8pKSYmYy5wdXNoKHtmcm9tOnMudG8sdG86dS50b30pLGkuc3BsaWNlLmFwcGx5KGksYyksYSs9Yy5sZW5ndGgtMX19cmV0dXJuIGl9ZnVuY3Rpb24gUHIodCxlKXt2YXIgcixuPVFpJiZ0Lm1hcmtlZFNwYW5zO2lmKG4pZm9yKHZhciBpLG89MDtvPG4ubGVuZ3RoOysrbylpPW5bb10saS5tYXJrZXIuY29sbGFwc2VkJiYobnVsbD09aS5mcm9tfHxpLmZyb208ZSkmJihudWxsPT1pLnRvfHxpLnRvPmUpJiYoIXJ8fHIud2lkdGg8aS5tYXJrZXIud2lkdGgpJiYocj1pLm1hcmtlcik7cmV0dXJuIHJ9ZnVuY3Rpb24gUnIodCl7cmV0dXJuIFByKHQsLTEpfWZ1bmN0aW9uIEJyKHQpe3JldHVybiBQcih0LHQudGV4dC5sZW5ndGgrMSl9ZnVuY3Rpb24gR3IodCxlKXtmb3IodmFyIHI7cj1ScihlKTspZT1nbih0LHIuZmluZCgpLmZyb20ubGluZSk7cmV0dXJuIGV9ZnVuY3Rpb24gVnIodCxlKXt2YXIgcj1RaSYmZS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbixpPTA7aTxyLmxlbmd0aDsrK2kpaWYobj1yW2ldLG4ubWFya2VyLmNvbGxhcHNlZCl7aWYobnVsbD09bi5mcm9tKXJldHVybiEwO2lmKCFuLm1hcmtlci5yZXBsYWNlZFdpdGgmJjA9PW4uZnJvbSYmbi5tYXJrZXIuaW5jbHVzaXZlTGVmdCYmS3IodCxlLG4pKXJldHVybiEwfX1mdW5jdGlvbiBLcih0LGUscil7aWYobnVsbD09ci50byl7dmFyIG49ci5tYXJrZXIuZmluZCgpLnRvLGk9Z24odCxuLmxpbmUpO3JldHVybiBLcih0LGksTnIoaS5tYXJrZWRTcGFucyxyLm1hcmtlcikpfWlmKHIubWFya2VyLmluY2x1c2l2ZVJpZ2h0JiZyLnRvPT1lLnRleHQubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgbyxsPTA7bDxlLm1hcmtlZFNwYW5zLmxlbmd0aDsrK2wpaWYobz1lLm1hcmtlZFNwYW5zW2xdLG8ubWFya2VyLmNvbGxhcHNlZCYmIW8ubWFya2VyLnJlcGxhY2VkV2l0aCYmby5mcm9tPT1yLnRvJiYoby5tYXJrZXIuaW5jbHVzaXZlTGVmdHx8ci5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpJiZLcih0LGUsbykpcmV0dXJuITB9ZnVuY3Rpb24gVXIodCl7dmFyIGU9dC5tYXJrZWRTcGFucztpZihlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcillW3JdLm1hcmtlci5kZXRhY2hMaW5lKHQpO3QubWFya2VkU3BhbnM9bnVsbH19ZnVuY3Rpb24gWHIodCxlKXtpZihlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcillW3JdLm1hcmtlci5hdHRhY2hMaW5lKHQpO3QubWFya2VkU3BhbnM9ZX19ZnVuY3Rpb24gX3IodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9IXRoaXMuY20uY3VyT3A7ZSYmaWUodGhpcy5jbSk7dHJ5e3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7ZSYmb2UodGhpcy5jbSl9cmV0dXJuIHJ9fWZ1bmN0aW9uIFlyKHQpe3JldHVybiBudWxsIT10LmhlaWdodD90LmhlaWdodDoodC5ub2RlLnBhcmVudE5vZGUmJjE9PXQubm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlfHx1aSh0LmNtLmRpc3BsYXkubWVhc3VyZSxzaSgiZGl2IixbdC5ub2RlXSxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmUiKSksdC5oZWlnaHQ9dC5ub2RlLm9mZnNldEhlaWdodCl9ZnVuY3Rpb24ganIodCxlLHIsbil7dmFyIGk9bmV3IHlvKHQscixuKTtyZXR1cm4gaS5ub0hTY3JvbGwmJih0LmRpc3BsYXkuYWxpZ25XaWRnZXRzPSEwKSxkcih0LGUsZnVuY3Rpb24oZSl7dmFyIHI9ZS53aWRnZXRzfHwoZS53aWRnZXRzPVtdKTtpZihudWxsPT1pLmluc2VydEF0P3IucHVzaChpKTpyLnNwbGljZShNYXRoLm1pbihyLmxlbmd0aC0xLE1hdGgubWF4KDAsaS5pbnNlcnRBdCkpLDAsaSksaS5saW5lPWUsIVZyKHQuZG9jLGUpfHxpLnNob3dJZkhpZGRlbil7dmFyIG49Q24odCxlKTx0LmRvYy5zY3JvbGxUb3A7eW4oZSxlLmhlaWdodCtZcihpKSksbiYmZnIodCwwLGkuaGVpZ2h0KX1yZXR1cm4hMH0pLGl9ZnVuY3Rpb24gJHIodCxlLHIsbil7dC50ZXh0PWUsdC5zdGF0ZUFmdGVyJiYodC5zdGF0ZUFmdGVyPW51bGwpLHQuc3R5bGVzJiYodC5zdHlsZXM9bnVsbCksbnVsbCE9dC5vcmRlciYmKHQub3JkZXI9bnVsbCksVXIodCksWHIodCxyKTt2YXIgaT1uP24odCk6MTtpIT10LmhlaWdodCYmeW4odCxpKX1mdW5jdGlvbiBacih0KXt0LnBhcmVudD1udWxsLFVyKHQpfWZ1bmN0aW9uIHFyKHQsZSxyLG4saSxvKXt2YXIgbD1yLmZsYXR0ZW5TcGFucztudWxsPT1sJiYobD10Lm9wdGlvbnMuZmxhdHRlblNwYW5zKTt2YXIgcyxhPTAsdT1udWxsLGM9bmV3IFNyKGUsdC5vcHRpb25zLnRhYlNpemUpO2ZvcigiIj09ZSYmci5ibGFua0xpbmUmJnIuYmxhbmtMaW5lKG4pOyFjLmVvbCgpOyljLnBvcz50Lm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoPyhsPSExLG8mJnRuKHQsZSxuLGMucG9zKSxjLnBvcz1lLmxlbmd0aCxzPW51bGwpOnM9ci50b2tlbihjLG4pLGwmJnU9PXN8fChhPGMuc3RhcnQmJmkoYy5zdGFydCx1KSxhPWMuc3RhcnQsdT1zKSxjLnN0YXJ0PWMucG9zO2Zvcig7YTxjLnBvczspe3ZhciBmPU1hdGgubWluKGMucG9zLGErNWU0KTtpKGYsdSksYT1mfX1mdW5jdGlvbiBRcih0LGUscixuKXt2YXIgaT1bdC5zdGF0ZS5tb2RlR2VuXTtxcih0LGUudGV4dCx0LmRvYy5tb2RlLHIsZnVuY3Rpb24odCxlKXtpLnB1c2godCxlKX0sbik7Zm9yKHZhciBvPTA7bzx0LnN0YXRlLm92ZXJsYXlzLmxlbmd0aDsrK28pe3ZhciBsPXQuc3RhdGUub3ZlcmxheXNbb10scz0xLGE9MDtxcih0LGUudGV4dCxsLm1vZGUsITAsZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9czt0PmE7KXt2YXIgbj1pW3NdO24+dCYmaS5zcGxpY2UocywxLHQsaVtzKzFdLG4pLHMrPTIsYT1NYXRoLm1pbih0LG4pfWlmKGUpaWYobC5vcGFxdWUpaS5zcGxpY2UocixzLXIsdCxlKSxzPXIrMjtlbHNlIGZvcig7cz5yO3IrPTIpe3ZhciBvPWlbcisxXTtpW3IrMV09bz9vKyIgIitlOmV9fSl9cmV0dXJuIGl9ZnVuY3Rpb24gSnIodCxlKXtyZXR1cm4gZS5zdHlsZXMmJmUuc3R5bGVzWzBdPT10LnN0YXRlLm1vZGVHZW58fChlLnN0eWxlcz1Rcih0LGUsZS5zdGF0ZUFmdGVyPXoodCxibihlKSkpKSxlLnN0eWxlc31mdW5jdGlvbiB0bih0LGUscixuKXt2YXIgaT10LmRvYy5tb2RlLG89bmV3IFNyKGUsdC5vcHRpb25zLnRhYlNpemUpO2ZvcihvLnN0YXJ0PW8ucG9zPW58fDAsIiI9PWUmJmkuYmxhbmtMaW5lJiZpLmJsYW5rTGluZShyKTshby5lb2woKSYmby5wb3M8PXQub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGg7KWkudG9rZW4obyxyKSxvLnN0YXJ0PW8ucG9zfWZ1bmN0aW9uIGVuKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKDs7KXt2YXIgcj10Lm1hdGNoKC8oPzpefFxzKWxpbmUtKGJhY2tncm91bmQtKT8oXFMrKS8pO2lmKCFyKWJyZWFrO3Q9dC5zbGljZSgwLHIuaW5kZXgpK3Quc2xpY2Uoci5pbmRleCtyWzBdLmxlbmd0aCk7dmFyIG49clsxXT8iYmdDbGFzcyI6InRleHRDbGFzcyI7bnVsbD09ZVtuXT9lW25dPXJbMl06bmV3IFJlZ0V4cCgiKD86XnxzKSIrclsyXSsiKD86JHxzKSIpLnRlc3QoZVtuXSl8fChlW25dKz0iICIrclsyXSl9cmV0dXJuIHhvW3RdfHwoeG9bdF09ImNtLSIrdC5yZXBsYWNlKC8gKy9nLCIgY20tIikpfWZ1bmN0aW9uIHJuKHQsZSxyLG4pe2Zvcih2YXIgaSxvPWUsbD0hMDtpPVJyKG8pOylvPWduKHQuZG9jLGkuZmluZCgpLmZyb20ubGluZSk7dmFyIHM9e3ByZTpzaSgicHJlIiksY29sOjAscG9zOjAsbWVhc3VyZTpudWxsLG1lYXN1cmVkU29tZXRoaW5nOiExLGNtOnQsY29weVdpZGdldHM6bn07ZG97by50ZXh0JiYobD0hMSkscy5tZWFzdXJlPW89PWUmJnIscy5wb3M9MCxzLmFkZFRva2VuPXMubWVhc3VyZT9sbjpvbiwoQWl8fFdpKSYmdC5nZXRPcHRpb24oImxpbmVXcmFwcGluZyIpJiYocy5hZGRUb2tlbj1zbihzLmFkZFRva2VuKSk7dmFyIGE9dW4obyxzLEpyKHQsbykpO3ImJm89PWUmJiFzLm1lYXN1cmVkU29tZXRoaW5nJiYoclswXT1zLnByZS5hcHBlbmRDaGlsZChwaSh0LmRpc3BsYXkubWVhc3VyZSkpLHMubWVhc3VyZWRTb21ldGhpbmc9ITApLGEmJihvPWduKHQuZG9jLGEudG8ubGluZSkpfXdoaWxlKGEpOyFyfHxzLm1lYXN1cmVkU29tZXRoaW5nfHxyWzBdfHwoclswXT1zLnByZS5hcHBlbmRDaGlsZChsP3NpKCJzcGFuIiwiwqAiKTpwaSh0LmRpc3BsYXkubWVhc3VyZSkpKSxzLnByZS5maXJzdENoaWxkfHxWcih0LmRvYyxlKXx8cy5wcmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIsKgIikpO3ZhciB1O2lmKHImJihBaXx8RGkpJiYodT13bihvKSkpe3ZhciBjPXUubGVuZ3RoLTE7dVtjXS5mcm9tPT11W2NdLnRvJiYtLWM7dmFyIGY9dVtjXSxoPXVbYy0xXTtpZihmLmZyb20rMT09Zi50byYmaCYmZi5sZXZlbDxoLmxldmVsKXt2YXIgZD1yW3MucG9zLTFdO2QmJmQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZC5tZWFzdXJlUmlnaHQ9cGkodC5kaXNwbGF5Lm1lYXN1cmUpLGQubmV4dFNpYmxpbmcpfX12YXIgcD1zLnRleHRDbGFzcz9zLnRleHRDbGFzcysiICIrKGUudGV4dENsYXNzfHwiIik6ZS50ZXh0Q2xhc3M7cmV0dXJuIHAmJihzLnByZS5jbGFzc05hbWU9cCksS24odCwicmVuZGVyTGluZSIsdCxlLHMucHJlKSxzfWZ1bmN0aW9uIG5uKHQpe3ZhciBlPXNpKCJzcGFuIiwi4oCiIiwiY20taW52YWxpZGNoYXIiKTtyZXR1cm4gZS50aXRsZT0iXFx1Iit0LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLGV9ZnVuY3Rpb24gb24odCxlLHIsbixpLG8pe2lmKGUpe3ZhciBsPXQuY20ub3B0aW9ucy5zcGVjaWFsQ2hhcnM7aWYobC50ZXN0KGUpKWZvcih2YXIgcz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYT0wOzspe2wubGFzdEluZGV4PWE7dmFyIHU9bC5leGVjKGUpLGM9dT91LmluZGV4LWE6ZS5sZW5ndGgtYTtpZihjJiYocy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlLnNsaWNlKGEsYStjKSkpLHQuY29sKz1jKSwhdSlicmVhaztpZihhKz1jKzEsIgkiPT11WzBdKXt2YXIgZj10LmNtLm9wdGlvbnMudGFiU2l6ZSxoPWYtdC5jb2wlZjtzLmFwcGVuZENoaWxkKHNpKCJzcGFuIixxbihoKSwiY20tdGFiIikpLHQuY29sKz1ofWVsc2V7dmFyIGQ9dC5jbS5vcHRpb25zLnNwZWNpYWxDaGFyUGxhY2Vob2xkZXIodVswXSk7cy5hcHBlbmRDaGlsZChkKSx0LmNvbCs9MX19ZWxzZXt0LmNvbCs9ZS5sZW5ndGg7dmFyIHM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSl9aWYocnx8bnx8aXx8dC5tZWFzdXJlKXt2YXIgcD1yfHwiIjtuJiYocCs9biksaSYmKHArPWkpO3ZhciBkPXNpKCJzcGFuIixbc10scCk7cmV0dXJuIG8mJihkLnRpdGxlPW8pLHQucHJlLmFwcGVuZENoaWxkKGQpfXQucHJlLmFwcGVuZENoaWxkKHMpfX1mdW5jdGlvbiBsbih0LGUscixuLGkpe2Zvcih2YXIgbz10LmNtLm9wdGlvbnMubGluZVdyYXBwaW5nLGw9MDtsPGUubGVuZ3RoOysrbCl7dmFyIHM9ZS5jaGFyQXQobCksYT0wPT1sO3M+PSLtoIAiJiYi7a+/Ij5zJiZsPGUubGVuZ3RoLTE/KHM9ZS5zbGljZShsLGwrMiksKytsKTpsJiZvJiZoaShlLGwpJiZ0LnByZS5hcHBlbmRDaGlsZChzaSgid2JyIikpO3ZhciB1PXQubWVhc3VyZVt0LnBvc10sYz10Lm1lYXN1cmVbdC5wb3NdPW9uKHQscyxyLGEmJm4sbD09ZS5sZW5ndGgtMSYmaSk7dSYmKGMubGVmdFNpZGU9dS5sZWZ0U2lkZXx8dSksQWkmJm8mJiIgIj09cyYmbCYmIS9ccy8udGVzdChlLmNoYXJBdChsLTEpKSYmbDxlLmxlbmd0aC0xJiYhL1xzLy50ZXN0KGUuY2hhckF0KGwrMSkpJiYoYy5zdHlsZS53aGl0ZVNwYWNlPSJub3JtYWwiKSx0LnBvcys9cy5sZW5ndGh9ZS5sZW5ndGgmJih0Lm1lYXN1cmVkU29tZXRoaW5nPSEwKX1mdW5jdGlvbiBzbih0KXtmdW5jdGlvbiBlKHQpe2Zvcih2YXIgZT0iICIscj0wO3I8dC5sZW5ndGgtMjsrK3IpZSs9ciUyPyIgIjoiwqAiO3JldHVybiBlKz0iICJ9cmV0dXJuIGZ1bmN0aW9uKHIsbixpLG8sbCxzKXtyZXR1cm4gdChyLG4ucmVwbGFjZSgvIHszLH0vZyxlKSxpLG8sbCxzKX19ZnVuY3Rpb24gYW4odCxlLHIsbil7dmFyIGk9IW4mJnIucmVwbGFjZWRXaXRoO2lmKGkmJih0LmNvcHlXaWRnZXRzJiYoaT1pLmNsb25lTm9kZSghMCkpLHQucHJlLmFwcGVuZENoaWxkKGkpLHQubWVhc3VyZSkpe2lmKGUpdC5tZWFzdXJlW3QucG9zXT1pO2Vsc2V7dmFyIG89cGkodC5jbS5kaXNwbGF5Lm1lYXN1cmUpO2lmKCJib29rbWFyayIhPXIudHlwZXx8ci5pbnNlcnRMZWZ0KXtpZih0Lm1lYXN1cmVbdC5wb3NdKXJldHVybjt0Lm1lYXN1cmVbdC5wb3NdPXQucHJlLmluc2VydEJlZm9yZShvLGkpfWVsc2UgdC5tZWFzdXJlW3QucG9zXT10LnByZS5hcHBlbmRDaGlsZChvKX10Lm1lYXN1cmVkU29tZXRoaW5nPSEwfXQucG9zKz1lfWZ1bmN0aW9uIHVuKHQsZSxyKXt2YXIgbj10Lm1hcmtlZFNwYW5zLGk9dC50ZXh0LG89MDtpZihuKWZvcih2YXIgbCxzLGEsdSxjLGYsaD1pLmxlbmd0aCxkPTAscD0xLGc9IiIsbT0wOzspe2lmKG09PWQpe3M9YT11PWM9IiIsZj1udWxsLG09MS8wO2Zvcih2YXIgdj1bXSx5PTA7eTxuLmxlbmd0aDsrK3kpe3ZhciBiPW5beV0seD1iLm1hcmtlcjtiLmZyb208PWQmJihudWxsPT1iLnRvfHxiLnRvPmQpPyhudWxsIT1iLnRvJiZtPmIudG8mJihtPWIudG8sYT0iIikseC5jbGFzc05hbWUmJihzKz0iICIreC5jbGFzc05hbWUpLHguc3RhcnRTdHlsZSYmYi5mcm9tPT1kJiYodSs9IiAiK3guc3RhcnRTdHlsZSkseC5lbmRTdHlsZSYmYi50bz09bSYmKGErPSIgIit4LmVuZFN0eWxlKSx4LnRpdGxlJiYhYyYmKGM9eC50aXRsZSkseC5jb2xsYXBzZWQmJighZnx8Zi5tYXJrZXIuc2l6ZTx4LnNpemUpJiYoZj1iKSk6Yi5mcm9tPmQmJm0+Yi5mcm9tJiYobT1iLmZyb20pLCJib29rbWFyayI9PXgudHlwZSYmYi5mcm9tPT1kJiZ4LnJlcGxhY2VkV2l0aCYmdi5wdXNoKHgpCn1pZihmJiYoZi5mcm9tfHwwKT09ZCYmKGFuKGUsKG51bGw9PWYudG8/aDpmLnRvKS1kLGYubWFya2VyLG51bGw9PWYuZnJvbSksbnVsbD09Zi50bykpcmV0dXJuIGYubWFya2VyLmZpbmQoKTtpZighZiYmdi5sZW5ndGgpZm9yKHZhciB5PTA7eTx2Lmxlbmd0aDsrK3kpYW4oZSwwLHZbeV0pfWlmKGQ+PWgpYnJlYWs7Zm9yKHZhciBDPU1hdGgubWluKGgsbSk7Oyl7aWYoZyl7dmFyIHc9ZCtnLmxlbmd0aDtpZighZil7dmFyIEw9dz5DP2cuc2xpY2UoMCxDLWQpOmc7ZS5hZGRUb2tlbihlLEwsbD9sK3M6cyx1LGQrTC5sZW5ndGg9PW0/YToiIixjKX1pZih3Pj1DKXtnPWcuc2xpY2UoQy1kKSxkPUM7YnJlYWt9ZD13LHU9IiJ9Zz1pLnNsaWNlKG8sbz1yW3ArK10pLGw9ZW4ocltwKytdLGUpfX1lbHNlIGZvcih2YXIgcD0xO3A8ci5sZW5ndGg7cCs9MillLmFkZFRva2VuKGUsaS5zbGljZShvLG89cltwXSksZW4ocltwKzFdLGUpKX1mdW5jdGlvbiBjbih0LGUscixuLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHI/clt0XTpudWxsfWZ1bmN0aW9uIGwodCxyLG4peyRyKHQscixuLGkpLFVuKHQsImNoYW5nZSIsdCxlKX12YXIgcz1lLmZyb20sYT1lLnRvLHU9ZS50ZXh0LGM9Z24odCxzLmxpbmUpLGY9Z24odCxhLmxpbmUpLGg9UW4odSksZD1vKHUubGVuZ3RoLTEpLHA9YS5saW5lLXMubGluZTtpZigwIT1zLmNofHwwIT1hLmNofHwiIiE9aHx8dC5jbSYmIXQuY20ub3B0aW9ucy53aG9sZUxpbmVVcGRhdGVCZWZvcmUpaWYoYz09ZilpZigxPT11Lmxlbmd0aClsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkraCtjLnRleHQuc2xpY2UoYS5jaCksZCk7ZWxzZXtmb3IodmFyIGc9W10sbT0xLHY9dS5sZW5ndGgtMTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtnLnB1c2gobmV3IGJvKGgrYy50ZXh0LnNsaWNlKGEuY2gpLGQsaSkpLGwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdLG8oMCkpLHQuaW5zZXJ0KHMubGluZSsxLGcpfWVsc2UgaWYoMT09dS5sZW5ndGgpbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK3VbMF0rZi50ZXh0LnNsaWNlKGEuY2gpLG8oMCkpLHQucmVtb3ZlKHMubGluZSsxLHApO2Vsc2V7bChjLGMudGV4dC5zbGljZSgwLHMuY2gpK3VbMF0sbygwKSksbChmLGgrZi50ZXh0LnNsaWNlKGEuY2gpLGQpO2Zvcih2YXIgbT0xLHY9dS5sZW5ndGgtMSxnPVtdO3Y+bTsrK20pZy5wdXNoKG5ldyBibyh1W21dLG8obSksaSkpO3A+MSYmdC5yZW1vdmUocy5saW5lKzEscC0xKSx0Lmluc2VydChzLmxpbmUrMSxnKX1lbHNle2Zvcih2YXIgbT0wLHY9dS5sZW5ndGgtMSxnPVtdO3Y+bTsrK20pZy5wdXNoKG5ldyBibyh1W21dLG8obSksaSkpO2woZixmLnRleHQsZCkscCYmdC5yZW1vdmUocy5saW5lLHApLGcubGVuZ3RoJiZ0Lmluc2VydChzLmxpbmUsZyl9VW4odCwiY2hhbmdlIix0LGUpLG5yKHQsbi5hbmNob3Isbi5oZWFkLG51bGwsITApfWZ1bmN0aW9uIGZuKHQpe3RoaXMubGluZXM9dCx0aGlzLnBhcmVudD1udWxsO2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj0wO3I+ZTsrK2UpdFtlXS5wYXJlbnQ9dGhpcyxuKz10W2VdLmhlaWdodDt0aGlzLmhlaWdodD1ufWZ1bmN0aW9uIGhuKHQpe3RoaXMuY2hpbGRyZW49dDtmb3IodmFyIGU9MCxyPTAsbj0wLGk9dC5sZW5ndGg7aT5uOysrbil7dmFyIG89dFtuXTtlKz1vLmNodW5rU2l6ZSgpLHIrPW8uaGVpZ2h0LG8ucGFyZW50PXRoaXN9dGhpcy5zaXplPWUsdGhpcy5oZWlnaHQ9cix0aGlzLnBhcmVudD1udWxsfWZ1bmN0aW9uIGRuKHQsZSxyKXtmdW5jdGlvbiBuKHQsaSxvKXtpZih0LmxpbmtlZClmb3IodmFyIGw9MDtsPHQubGlua2VkLmxlbmd0aDsrK2wpe3ZhciBzPXQubGlua2VkW2xdO2lmKHMuZG9jIT1pKXt2YXIgYT1vJiZzLnNoYXJlZEhpc3Q7KCFyfHxhKSYmKGUocy5kb2MsYSksbihzLmRvYyx0LGEpKX19fW4odCxudWxsLCEwKX1mdW5jdGlvbiBwbih0LGUpe2lmKGUuY20pdGhyb3cgbmV3IEVycm9yKCJUaGlzIGRvY3VtZW50IGlzIGFscmVhZHkgaW4gdXNlLiIpO3QuZG9jPWUsZS5jbT10LG8odCkscih0KSx0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHxmKHQpLHQub3B0aW9ucy5tb2RlPWUubW9kZU9wdGlvbix1ZSh0KX1mdW5jdGlvbiBnbih0LGUpe2ZvcihlLT10LmZpcnN0OyF0LmxpbmVzOylmb3IodmFyIHI9MDs7KytyKXt2YXIgbj10LmNoaWxkcmVuW3JdLGk9bi5jaHVua1NpemUoKTtpZihpPmUpe3Q9bjticmVha31lLT1pfXJldHVybiB0LmxpbmVzW2VdfWZ1bmN0aW9uIG1uKHQsZSxyKXt2YXIgbj1bXSxpPWUubGluZTtyZXR1cm4gdC5pdGVyKGUubGluZSxyLmxpbmUrMSxmdW5jdGlvbih0KXt2YXIgbz10LnRleHQ7aT09ci5saW5lJiYobz1vLnNsaWNlKDAsci5jaCkpLGk9PWUubGluZSYmKG89by5zbGljZShlLmNoKSksbi5wdXNoKG8pLCsraX0pLG59ZnVuY3Rpb24gdm4odCxlLHIpe3ZhciBuPVtdO3JldHVybiB0Lml0ZXIoZSxyLGZ1bmN0aW9uKHQpe24ucHVzaCh0LnRleHQpfSksbn1mdW5jdGlvbiB5bih0LGUpe2Zvcih2YXIgcj1lLXQuaGVpZ2h0LG49dDtuO249bi5wYXJlbnQpbi5oZWlnaHQrPXJ9ZnVuY3Rpb24gYm4odCl7aWYobnVsbD09dC5wYXJlbnQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQucGFyZW50LHI9dGkoZS5saW5lcyx0KSxuPWUucGFyZW50O247ZT1uLG49bi5wYXJlbnQpZm9yKHZhciBpPTA7bi5jaGlsZHJlbltpXSE9ZTsrK2kpcis9bi5jaGlsZHJlbltpXS5jaHVua1NpemUoKTtyZXR1cm4gcitlLmZpcnN0fWZ1bmN0aW9uIHhuKHQsZSl7dmFyIHI9dC5maXJzdDt0OmRve2Zvcih2YXIgbj0wLGk9dC5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dC5jaGlsZHJlbltuXSxsPW8uaGVpZ2h0O2lmKGw+ZSl7dD1vO2NvbnRpbnVlIHR9ZS09bCxyKz1vLmNodW5rU2l6ZSgpfXJldHVybiByfXdoaWxlKCF0LmxpbmVzKTtmb3IodmFyIG49MCxpPXQubGluZXMubGVuZ3RoO2k+bjsrK24pe3ZhciBzPXQubGluZXNbbl0sYT1zLmhlaWdodDtpZihhPmUpYnJlYWs7ZS09YX1yZXR1cm4gcitufWZ1bmN0aW9uIENuKHQsZSl7ZT1Hcih0LmRvYyxlKTtmb3IodmFyIHI9MCxuPWUucGFyZW50LGk9MDtpPG4ubGluZXMubGVuZ3RoOysraSl7dmFyIG89bi5saW5lc1tpXTtpZihvPT1lKWJyZWFrO3IrPW8uaGVpZ2h0fWZvcih2YXIgbD1uLnBhcmVudDtsO249bCxsPW4ucGFyZW50KWZvcih2YXIgaT0wO2k8bC5jaGlsZHJlbi5sZW5ndGg7KytpKXt2YXIgcz1sLmNoaWxkcmVuW2ldO2lmKHM9PW4pYnJlYWs7cis9cy5oZWlnaHR9cmV0dXJuIHJ9ZnVuY3Rpb24gd24odCl7dmFyIGU9dC5vcmRlcjtyZXR1cm4gbnVsbD09ZSYmKGU9dC5vcmRlcj1Cbyh0LnRleHQpKSxlfWZ1bmN0aW9uIExuKHQpe3JldHVybntkb25lOltdLHVuZG9uZTpbXSx1bmRvRGVwdGg6MS8wLGxhc3RUaW1lOjAsbGFzdE9wOm51bGwsbGFzdE9yaWdpbjpudWxsLGdlbmVyYXRpb246dHx8MSxtYXhHZW5lcmF0aW9uOnR8fDF9fWZ1bmN0aW9uIGtuKHQsZSxyLG4pe3ZhciBpPWVbInNwYW5zXyIrdC5pZF0sbz0wO3QuaXRlcihNYXRoLm1heCh0LmZpcnN0LHIpLE1hdGgubWluKHQuZmlyc3QrdC5zaXplLG4pLGZ1bmN0aW9uKHIpe3IubWFya2VkU3BhbnMmJigoaXx8KGk9ZVsic3BhbnNfIit0LmlkXT17fSkpW29dPXIubWFya2VkU3BhbnMpLCsrb30pfWZ1bmN0aW9uIFNuKHQsZSl7dmFyIHI9e2xpbmU6ZS5mcm9tLmxpbmUsY2g6ZS5mcm9tLmNofSxuPXtmcm9tOnIsdG86bG8oZSksdGV4dDptbih0LGUuZnJvbSxlLnRvKX07cmV0dXJuIGtuKHQsbixlLmZyb20ubGluZSxlLnRvLmxpbmUrMSksZG4odCxmdW5jdGlvbih0KXtrbih0LG4sZS5mcm9tLmxpbmUsZS50by5saW5lKzEpfSwhMCksbn1mdW5jdGlvbiBNbih0LGUscixuKXt2YXIgaT10Lmhpc3Rvcnk7aS51bmRvbmUubGVuZ3RoPTA7dmFyIG89K25ldyBEYXRlLGw9UW4oaS5kb25lKTtpZihsJiYoaS5sYXN0T3A9PW58fGkubGFzdE9yaWdpbj09ZS5vcmlnaW4mJmUub3JpZ2luJiYoIisiPT1lLm9yaWdpbi5jaGFyQXQoMCkmJnQuY20mJmkubGFzdFRpbWU+by10LmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXl8fCIqIj09ZS5vcmlnaW4uY2hhckF0KDApKSkpe3ZhciBzPVFuKGwuY2hhbmdlcyk7amUoZS5mcm9tLGUudG8pJiZqZShlLmZyb20scy50byk/cy50bz1sbyhlKTpsLmNoYW5nZXMucHVzaChTbih0LGUpKSxsLmFuY2hvckFmdGVyPXIuYW5jaG9yLGwuaGVhZEFmdGVyPXIuaGVhZH1lbHNlIGZvcihsPXtjaGFuZ2VzOltTbih0LGUpXSxnZW5lcmF0aW9uOmkuZ2VuZXJhdGlvbixhbmNob3JCZWZvcmU6dC5zZWwuYW5jaG9yLGhlYWRCZWZvcmU6dC5zZWwuaGVhZCxhbmNob3JBZnRlcjpyLmFuY2hvcixoZWFkQWZ0ZXI6ci5oZWFkfSxpLmRvbmUucHVzaChsKSxpLmdlbmVyYXRpb249KytpLm1heEdlbmVyYXRpb247aS5kb25lLmxlbmd0aD5pLnVuZG9EZXB0aDspaS5kb25lLnNoaWZ0KCk7aS5sYXN0VGltZT1vLGkubGFzdE9wPW4saS5sYXN0T3JpZ2luPWUub3JpZ2lufWZ1bmN0aW9uIFRuKHQpe2lmKCF0KXJldHVybiBudWxsO2Zvcih2YXIgZSxyPTA7cjx0Lmxlbmd0aDsrK3IpdFtyXS5tYXJrZXIuZXhwbGljaXRseUNsZWFyZWQ/ZXx8KGU9dC5zbGljZSgwLHIpKTplJiZlLnB1c2godFtyXSk7cmV0dXJuIGU/ZS5sZW5ndGg/ZTpudWxsOnR9ZnVuY3Rpb24gQW4odCxlKXt2YXIgcj1lWyJzcGFuc18iK3QuaWRdO2lmKCFyKXJldHVybiBudWxsO2Zvcih2YXIgbj0wLGk9W107bjxlLnRleHQubGVuZ3RoOysrbilpLnB1c2goVG4ocltuXSkpO3JldHVybiBpfWZ1bmN0aW9uIEhuKHQsZSl7Zm9yKHZhciByPTAsbj1bXTtyPHQubGVuZ3RoOysrcil7dmFyIGk9dFtyXSxvPWkuY2hhbmdlcyxsPVtdO24ucHVzaCh7Y2hhbmdlczpsLGFuY2hvckJlZm9yZTppLmFuY2hvckJlZm9yZSxoZWFkQmVmb3JlOmkuaGVhZEJlZm9yZSxhbmNob3JBZnRlcjppLmFuY2hvckFmdGVyLGhlYWRBZnRlcjppLmhlYWRBZnRlcn0pO2Zvcih2YXIgcz0wO3M8by5sZW5ndGg7KytzKXt2YXIgYSx1PW9bc107aWYobC5wdXNoKHtmcm9tOnUuZnJvbSx0bzp1LnRvLHRleHQ6dS50ZXh0fSksZSlmb3IodmFyIGMgaW4gdSkoYT1jLm1hdGNoKC9ec3BhbnNfKFxkKykkLykpJiZ0aShlLE51bWJlcihhWzFdKSk+LTEmJihRbihsKVtjXT11W2NdLGRlbGV0ZSB1W2NdKX19cmV0dXJuIG59ZnVuY3Rpb24gTm4odCxlLHIsbil7cjx0LmxpbmU/dC5saW5lKz1uOmU8dC5saW5lJiYodC5saW5lPWUsdC5jaD0wKX1mdW5jdGlvbiBEbih0LGUscixuKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoOysraSl7Zm9yKHZhciBvPXRbaV0sbD0hMCxzPTA7czxvLmNoYW5nZXMubGVuZ3RoOysrcyl7dmFyIGE9by5jaGFuZ2VzW3NdO2lmKG8uY29waWVkfHwoYS5mcm9tPVplKGEuZnJvbSksYS50bz1aZShhLnRvKSkscjxhLmZyb20ubGluZSlhLmZyb20ubGluZSs9bixhLnRvLmxpbmUrPW47ZWxzZSBpZihlPD1hLnRvLmxpbmUpe2w9ITE7YnJlYWt9fW8uY29waWVkfHwoby5hbmNob3JCZWZvcmU9WmUoby5hbmNob3JCZWZvcmUpLG8uaGVhZEJlZm9yZT1aZShvLmhlYWRCZWZvcmUpLG8uYW5jaG9yQWZ0ZXI9WmUoby5hbmNob3JBZnRlciksby5yZWFkQWZ0ZXI9WmUoby5oZWFkQWZ0ZXIpLG8uY29waWVkPSEwKSxsPyhObihvLmFuY2hvckJlZm9yZSksTm4oby5oZWFkQmVmb3JlKSxObihvLmFuY2hvckFmdGVyKSxObihvLmhlYWRBZnRlcikpOih0LnNwbGljZSgwLGkrMSksaT0wKX19ZnVuY3Rpb24gV24odCxlKXt2YXIgcj1lLmZyb20ubGluZSxuPWUudG8ubGluZSxpPWUudGV4dC5sZW5ndGgtKG4tciktMTtEbih0LmRvbmUscixuLGkpLERuKHQudW5kb25lLHIsbixpKX1mdW5jdGlvbiBPbigpe1BuKHRoaXMpfWZ1bmN0aW9uIEVuKHQpe3JldHVybiB0LnN0b3B8fCh0LnN0b3A9T24pLHR9ZnVuY3Rpb24gem4odCl7dC5wcmV2ZW50RGVmYXVsdD90LnByZXZlbnREZWZhdWx0KCk6dC5yZXR1cm5WYWx1ZT0hMX1mdW5jdGlvbiBJbih0KXt0LnN0b3BQcm9wYWdhdGlvbj90LnN0b3BQcm9wYWdhdGlvbigpOnQuY2FuY2VsQnViYmxlPSEwfWZ1bmN0aW9uIEZuKHQpe3JldHVybiBudWxsIT10LmRlZmF1bHRQcmV2ZW50ZWQ/dC5kZWZhdWx0UHJldmVudGVkOjA9PXQucmV0dXJuVmFsdWV9ZnVuY3Rpb24gUG4odCl7em4odCksSW4odCl9ZnVuY3Rpb24gUm4odCl7cmV0dXJuIHQudGFyZ2V0fHx0LnNyY0VsZW1lbnR9ZnVuY3Rpb24gQm4odCl7dmFyIGU9dC53aGljaDtyZXR1cm4gbnVsbD09ZSYmKDEmdC5idXR0b24/ZT0xOjImdC5idXR0b24/ZT0zOjQmdC5idXR0b24mJihlPTIpKSxLaSYmdC5jdHJsS2V5JiYxPT1lJiYoZT0zKSxlfWZ1bmN0aW9uIEduKHQsZSxyKXtpZih0LmFkZEV2ZW50TGlzdGVuZXIpdC5hZGRFdmVudExpc3RlbmVyKGUsciwhMSk7ZWxzZSBpZih0LmF0dGFjaEV2ZW50KXQuYXR0YWNoRXZlbnQoIm9uIitlLHIpO2Vsc2V7dmFyIG49dC5faGFuZGxlcnN8fCh0Ll9oYW5kbGVycz17fSksaT1uW2VdfHwobltlXT1bXSk7aS5wdXNoKHIpfX1mdW5jdGlvbiBWbih0LGUscil7aWYodC5yZW1vdmVFdmVudExpc3RlbmVyKXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsITEpO2Vsc2UgaWYodC5kZXRhY2hFdmVudCl0LmRldGFjaEV2ZW50KCJvbiIrZSxyKTtlbHNle3ZhciBuPXQuX2hhbmRsZXJzJiZ0Ll9oYW5kbGVyc1tlXTtpZighbilyZXR1cm47Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDsrK2kpaWYobltpXT09cil7bi5zcGxpY2UoaSwxKTticmVha319fWZ1bmN0aW9uIEtuKHQsZSl7dmFyIHI9dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKHIpZm9yKHZhciBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSxpPTA7aTxyLmxlbmd0aDsrK2kpcltpXS5hcHBseShudWxsLG4pfWZ1bmN0aW9uIFVuKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0LmFwcGx5KG51bGwsaSl9fXZhciBuPXQuX2hhbmRsZXJzJiZ0Ll9oYW5kbGVyc1tlXTtpZihuKXt2YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMik7U298fCgrK01vLFNvPVtdLHNldFRpbWVvdXQoX24sMCkpO2Zvcih2YXIgbz0wO288bi5sZW5ndGg7KytvKVNvLnB1c2gocihuW29dKSl9fWZ1bmN0aW9uIFhuKHQsZSxyKXtyZXR1cm4gS24odCxyfHxlLnR5cGUsdCxlKSxGbihlKXx8ZS5jb2RlbWlycm9ySWdub3JlfWZ1bmN0aW9uIF9uKCl7LS1Nbzt2YXIgdD1TbztTbz1udWxsO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7KytlKXRbZV0oKX1mdW5jdGlvbiBZbih0LGUpe3ZhciByPXQuX2hhbmRsZXJzJiZ0Ll9oYW5kbGVyc1tlXTtyZXR1cm4gciYmci5sZW5ndGg+MH1mdW5jdGlvbiBqbih0KXt0LnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe0duKHRoaXMsdCxlKX0sdC5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKHQsZSl7Vm4odGhpcyx0LGUpfX1mdW5jdGlvbiAkbigpe3RoaXMuaWQ9bnVsbH1mdW5jdGlvbiBabih0LGUscixuLGkpe251bGw9PWUmJihlPXQuc2VhcmNoKC9bXlxzXHUwMGEwXS8pLC0xPT1lJiYoZT10Lmxlbmd0aCkpO2Zvcih2YXIgbz1ufHwwLGw9aXx8MDtlPm87KytvKSIJIj09dC5jaGFyQXQobyk/bCs9ci1sJXI6KytsO3JldHVybiBsfWZ1bmN0aW9uIHFuKHQpe2Zvcig7SG8ubGVuZ3RoPD10OylIby5wdXNoKFFuKEhvKSsiICIpO3JldHVybiBIb1t0XX1mdW5jdGlvbiBRbih0KXtyZXR1cm4gdFt0Lmxlbmd0aC0xXX1mdW5jdGlvbiBKbih0KXtpZihHaSl0LnNlbGVjdGlvblN0YXJ0PTAsdC5zZWxlY3Rpb25FbmQ9dC52YWx1ZS5sZW5ndGg7ZWxzZSB0cnl7dC5zZWxlY3QoKX1jYXRjaChlKXt9fWZ1bmN0aW9uIHRpKHQsZSl7aWYodC5pbmRleE9mKXJldHVybiB0LmluZGV4T2YoZSk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtuPnI7KytyKWlmKHRbcl09PWUpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gZWkodCxlKXtmdW5jdGlvbiByKCl7fXIucHJvdG90eXBlPXQ7dmFyIG49bmV3IHI7cmV0dXJuIGUmJnJpKGUsbiksbn1mdW5jdGlvbiByaSh0LGUpe2V8fChlPXt9KTtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBuaSh0KXtmb3IodmFyIGU9W10scj0wO3Q+cjsrK3IpZS5wdXNoKHZvaWQgMCk7cmV0dXJuIGV9ZnVuY3Rpb24gaWkodCl7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KG51bGwsZSl9fWZ1bmN0aW9uIG9pKHQpe3JldHVybi9cdy8udGVzdCh0KXx8dD4iwoAiJiYodC50b1VwcGVyQ2FzZSgpIT10LnRvTG93ZXJDYXNlKCl8fE5vLnRlc3QodCkpfWZ1bmN0aW9uIGxpKHQpe2Zvcih2YXIgZSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZSkmJnRbZV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gc2kodCxlLHIsbil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtpZihyJiYoaS5jbGFzc05hbWU9ciksbiYmKGkuc3R5bGUuY3NzVGV4dD1uKSwic3RyaW5nIj09dHlwZW9mIGUpY2koaSxlKTtlbHNlIGlmKGUpZm9yKHZhciBvPTA7bzxlLmxlbmd0aDsrK28paS5hcHBlbmRDaGlsZChlW29dKTtyZXR1cm4gaX1mdW5jdGlvbiBhaSh0KXtmb3IodmFyIGU9dC5jaGlsZE5vZGVzLmxlbmd0aDtlPjA7LS1lKXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKTtyZXR1cm4gdH1mdW5jdGlvbiB1aSh0LGUpe3JldHVybiBhaSh0KS5hcHBlbmRDaGlsZChlKX1mdW5jdGlvbiBjaSh0LGUpe05pPyh0LmlubmVySFRNTD0iIix0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKSk6dC50ZXh0Q29udGVudD1lfWZ1bmN0aW9uIGZpKHQpe3JldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWZ1bmN0aW9uIGhpKCl7cmV0dXJuITF9ZnVuY3Rpb24gZGkodCl7aWYobnVsbCE9T28pcmV0dXJuIE9vO3ZhciBlPXNpKCJkaXYiLG51bGwsbnVsbCwid2lkdGg6IDUwcHg7IGhlaWdodDogNTBweDsgb3ZlcmZsb3cteDogc2Nyb2xsIik7cmV0dXJuIHVpKHQsZSksZS5vZmZzZXRXaWR0aCYmKE9vPWUub2Zmc2V0SGVpZ2h0LWUuY2xpZW50SGVpZ2h0KSxPb3x8MH1mdW5jdGlvbiBwaSh0KXtpZihudWxsPT1Fbyl7dmFyIGU9c2koInNwYW4iLCLigIsiKTt1aSh0LHNpKCJzcGFuIixbZSxkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpXSkpLDAhPXQuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQmJihFbz1lLm9mZnNldFdpZHRoPD0xJiZlLm9mZnNldEhlaWdodD4yJiYhSGkpfXJldHVybiBFbz9zaSgic3BhbiIsIuKAiyIpOnNpKCJzcGFuIiwiwqAiLG51bGwsImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDFweDsgbWFyZ2luLXJpZ2h0OiAtMXB4Iil9ZnVuY3Rpb24gZ2kodCxlLHIsbil7aWYoIXQpcmV0dXJuIG4oZSxyLCJsdHIiKTtmb3IodmFyIGk9ITEsbz0wO288dC5sZW5ndGg7KytvKXt2YXIgbD10W29dOyhsLmZyb208ciYmbC50bz5lfHxlPT1yJiZsLnRvPT1lKSYmKG4oTWF0aC5tYXgobC5mcm9tLGUpLE1hdGgubWluKGwudG8sciksMT09bC5sZXZlbD8icnRsIjoibHRyIiksaT0hMCl9aXx8bihlLHIsImx0ciIpfWZ1bmN0aW9uIG1pKHQpe3JldHVybiB0LmxldmVsJTI/dC50bzp0LmZyb219ZnVuY3Rpb24gdmkodCl7cmV0dXJuIHQubGV2ZWwlMj90LmZyb206dC50b31mdW5jdGlvbiB5aSh0KXt2YXIgZT13bih0KTtyZXR1cm4gZT9taShlWzBdKTowfWZ1bmN0aW9uIGJpKHQpe3ZhciBlPXduKHQpO3JldHVybiBlP3ZpKFFuKGUpKTp0LnRleHQubGVuZ3RofWZ1bmN0aW9uIHhpKHQsZSl7dmFyIHI9Z24odC5kb2MsZSksbj1Hcih0LmRvYyxyKTtuIT1yJiYoZT1ibihuKSk7dmFyIGk9d24obiksbz1pP2lbMF0ubGV2ZWwlMj9iaShuKTp5aShuKTowO3JldHVybiBZZShlLG8pfWZ1bmN0aW9uIENpKHQsZSl7Zm9yKHZhciByLG47cj1CcihuPWduKHQuZG9jLGUpKTspZT1yLmZpbmQoKS50by5saW5lO3ZhciBpPXduKG4pLG89aT9pWzBdLmxldmVsJTI/eWkobik6Ymkobik6bi50ZXh0Lmxlbmd0aDtyZXR1cm4gWWUoZSxvKX1mdW5jdGlvbiB3aSh0LGUscil7dmFyIG49dFswXS5sZXZlbDtyZXR1cm4gZT09bj8hMDpyPT1uPyExOnI+ZX1mdW5jdGlvbiBMaSh0LGUpe2Zvcih2YXIgcixuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl07aWYoaS5mcm9tPGUmJmkudG8+ZSlyZXR1cm4gUm89bnVsbCxuO2lmKGkuZnJvbT09ZXx8aS50bz09ZSl7aWYobnVsbCE9cilyZXR1cm4gd2kodCxpLmxldmVsLHRbcl0ubGV2ZWwpPyhSbz1yLG4pOihSbz1uLHIpO3I9bn19cmV0dXJuIFJvPW51bGwscn1mdW5jdGlvbiBraSh0LGUscixuKXtpZighbilyZXR1cm4gZStyO2RvIGUrPXI7d2hpbGUoZT4wJiZEby50ZXN0KHQudGV4dC5jaGFyQXQoZSkpKTtyZXR1cm4gZX1mdW5jdGlvbiBTaSh0LGUscixuKXt2YXIgaT13bih0KTtpZighaSlyZXR1cm4gTWkodCxlLHIsbik7Zm9yKHZhciBvPUxpKGksZSksbD1pW29dLHM9a2kodCxlLGwubGV2ZWwlMj8tcjpyLG4pOzspe2lmKHM+bC5mcm9tJiZzPGwudG8pcmV0dXJuIHM7aWYocz09bC5mcm9tfHxzPT1sLnRvKXJldHVybiBMaShpLHMpPT1vP3M6KGw9aVtvKz1yXSxyPjA9PWwubGV2ZWwlMj9sLnRvOmwuZnJvbSk7aWYobD1pW28rPXJdLCFsKXJldHVybiBudWxsO3M9cj4wPT1sLmxldmVsJTI/a2kodCxsLnRvLC0xLG4pOmtpKHQsbC5mcm9tLDEsbil9fWZ1bmN0aW9uIE1pKHQsZSxyLG4pe3ZhciBpPWUrcjtpZihuKWZvcig7aT4wJiZEby50ZXN0KHQudGV4dC5jaGFyQXQoaSkpOylpKz1yO3JldHVybiAwPml8fGk+dC50ZXh0Lmxlbmd0aD9udWxsOml9dmFyIFRpPS9nZWNrb1wvXGQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEFpPS9NU0lFIFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEhpPUFpJiYobnVsbD09ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU8OCksTmk9QWkmJihudWxsPT1kb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw5KSxEaT0vVHJpZGVudFwvKFs3LTldfFxkezIsfSlcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxXaT0vV2ViS2l0XC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksT2k9V2kmJi9RdFwvXGQrXC5cZCsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksRWk9L0Nocm9tZVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHppPS9PcGVyYVwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLElpPS9BcHBsZSBDb21wdXRlci8udGVzdChuYXZpZ2F0b3IudmVuZG9yKSxGaT0vS0hUTUxcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxQaT0vTWFjIE9TIFggMVxkXEQoWzctOV18XGRcZClcRC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxSaT0vTWFjIE9TIFggMVxkXEQoWzgtOV18XGRcZClcRC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxCaT0vUGhhbnRvbUpTLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEdpPS9BcHBsZVdlYktpdC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmL01vYmlsZVwvXHcrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFZpPUdpfHwvQW5kcm9pZHx3ZWJPU3xCbGFja0JlcnJ5fE9wZXJhIE1pbml8T3BlcmEgTW9iaXxJRU1vYmlsZS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksS2k9R2l8fC9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxVaT0vd2luL2kudGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFhpPXppJiZuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9WZXJzaW9uXC8oXGQqXC5cZCopLyk7WGkmJihYaT1OdW1iZXIoWGlbMV0pKSxYaSYmWGk+PTE1JiYoemk9ITEsV2k9ITApO3ZhciBfaSxZaSxqaSwkaT1LaSYmKE9pfHx6aSYmKG51bGw9PVhpfHwxMi4xMT5YaSkpLFppPVRpfHxBaSYmIU5pLHFpPSExLFFpPSExLEppPTAsdG89MCxlbz0wLHJvPW51bGw7QWk/cm89LS41MzpUaT9ybz0xNTpFaT9ybz0tLjc6SWkmJihybz0tMS8zKTt2YXIgbm8saW8sb289bnVsbCxsbz10LmNoYW5nZUVuZD1mdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0P1llKHQuZnJvbS5saW5lK3QudGV4dC5sZW5ndGgtMSxRbih0LnRleHQpLmxlbmd0aCsoMT09dC50ZXh0Lmxlbmd0aD90LmZyb20uY2g6MCkpOnQudG99O3QuUG9zPVllLHQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0LGZvY3VzOmZ1bmN0aW9uKCl7d2luZG93LmZvY3VzKCkscGUodGhpcyksZmUodGhpcyl9LHNldE9wdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub3B0aW9ucyxuPXJbdF07KHJbdF0hPWV8fCJtb2RlIj09dCkmJihyW3RdPWUsc28uaGFzT3duUHJvcGVydHkodCkmJmxlKHRoaXMsc29bdF0pKHRoaXMsZSxuKSl9LGdldE9wdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zW3RdfSxnZXREb2M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2N9LGFkZEtleU1hcDpmdW5jdGlvbih0LGUpe3RoaXMuc3RhdGUua2V5TWFwc1tlPyJwdXNoIjoidW5zaGlmdCJdKHQpfSxyZW1vdmVLZXlNYXA6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuc3RhdGUua2V5TWFwcyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09dHx8InN0cmluZyIhPXR5cGVvZiBlW3JdJiZlW3JdLm5hbWU9PXQpcmV0dXJuIGUuc3BsaWNlKHIsMSksITB9LGFkZE92ZXJsYXk6bGUobnVsbCxmdW5jdGlvbihlLHIpe3ZhciBuPWUudG9rZW4/ZTp0LmdldE1vZGUodGhpcy5vcHRpb25zLGUpO2lmKG4uc3RhcnRTdGF0ZSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXlzIG1heSBub3QgYmUgc3RhdGVmdWwuIik7dGhpcy5zdGF0ZS5vdmVybGF5cy5wdXNoKHttb2RlOm4sbW9kZVNwZWM6ZSxvcGFxdWU6ciYmci5vcGFxdWV9KSx0aGlzLnN0YXRlLm1vZGVHZW4rKyx1ZSh0aGlzKX0pLHJlbW92ZU92ZXJsYXk6bGUobnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdGF0ZS5vdmVybGF5cyxyPTA7cjxlLmxlbmd0aDsrK3Ipe3ZhciBuPWVbcl0ubW9kZVNwZWM7aWYobj09dHx8InN0cmluZyI9PXR5cGVvZiB0JiZuLm5hbWU9PXQpcmV0dXJuIGUuc3BsaWNlKHIsMSksdGhpcy5zdGF0ZS5tb2RlR2VuKyssdWUodGhpcyksdm9pZCAwfX0pLGluZGVudExpbmU6bGUobnVsbCxmdW5jdGlvbih0LGUscil7InN0cmluZyIhPXR5cGVvZiBlJiYibnVtYmVyIiE9dHlwZW9mIGUmJihlPW51bGw9PWU/dGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50PyJzbWFydCI6InByZXYiOmU/ImFkZCI6InN1YnRyYWN0IiksdHIodGhpcy5kb2MsdCkmJmhyKHRoaXMsdCxlLHIpfSksaW5kZW50U2VsZWN0aW9uOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kb2Muc2VsO2lmKGplKGUuZnJvbSxlLnRvKSlyZXR1cm4gaHIodGhpcyxlLmZyb20ubGluZSx0KTtmb3IodmFyIHI9ZS50by5saW5lLShlLnRvLmNoPzA6MSksbj1lLmZyb20ubGluZTtyPj1uOysrbilocih0aGlzLG4sdCl9KSxnZXRUb2tlbkF0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2M7dD1RZShyLHQpO2Zvcih2YXIgbj16KHRoaXMsdC5saW5lLGUpLGk9dGhpcy5kb2MubW9kZSxvPWduKHIsdC5saW5lKSxsPW5ldyBTcihvLnRleHQsdGhpcy5vcHRpb25zLnRhYlNpemUpO2wucG9zPHQuY2gmJiFsLmVvbCgpOyl7bC5zdGFydD1sLnBvczt2YXIgcz1pLnRva2VuKGwsbil9cmV0dXJue3N0YXJ0Omwuc3RhcnQsZW5kOmwucG9zLHN0cmluZzpsLmN1cnJlbnQoKSxjbGFzc05hbWU6c3x8bnVsbCx0eXBlOnN8fG51bGwsc3RhdGU6bn19LGdldFRva2VuVHlwZUF0OmZ1bmN0aW9uKHQpe3Q9UWUodGhpcy5kb2MsdCk7dmFyIGU9SnIodGhpcyxnbih0aGlzLmRvYyx0LmxpbmUpKSxyPTAsbj0oZS5sZW5ndGgtMSkvMixpPXQuY2g7aWYoMD09aSlyZXR1cm4gZVsyXTtmb3IoOzspe3ZhciBvPXIrbj4+MTtpZigobz9lWzIqby0xXTowKT49aSluPW87ZWxzZXtpZighKGVbMipvKzFdPGkpKXJldHVybiBlWzIqbysyXTtyPW8rMX19fSxnZXRNb2RlQXQ6ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5kb2MubW9kZTtyZXR1cm4gci5pbm5lck1vZGU/dC5pbm5lck1vZGUocix0aGlzLmdldFRva2VuQXQoZSkuc3RhdGUpLm1vZGU6cn0sZ2V0SGVscGVyOmZ1bmN0aW9uKHQsZSl7aWYoZ28uaGFzT3duUHJvcGVydHkoZSkpe3ZhciByPWdvW2VdLG49dGhpcy5nZXRNb2RlQXQodCk7cmV0dXJuIG5bZV0mJnJbbltlXV18fG4uaGVscGVyVHlwZSYmcltuLmhlbHBlclR5cGVdfHxyW24ubmFtZV19fSxnZXRTdGF0ZUFmdGVyOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2M7cmV0dXJuIHQ9cWUocixudWxsPT10P3IuZmlyc3Qrci5zaXplLTE6dCkseih0aGlzLHQrMSxlKX0sY3Vyc29yQ29vcmRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLmRvYy5zZWw7cmV0dXJuIHI9bnVsbD09dD9uLmhlYWQ6Im9iamVjdCI9PXR5cGVvZiB0P1FlKHRoaXMuZG9jLHQpOnQ/bi5mcm9tOm4udG8sUSh0aGlzLHIsZXx8InBhZ2UiKX0sY2hhckNvb3JkczpmdW5jdGlvbih0LGUpe3JldHVybiBxKHRoaXMsUWUodGhpcy5kb2MsdCksZXx8InBhZ2UiKX0sY29vcmRzQ2hhcjpmdW5jdGlvbih0LGUpe3JldHVybiB0PVoodGhpcyx0LGV8fCJwYWdlIiksdGUodGhpcyx0LmxlZnQsdC50b3ApfSxsaW5lQXRIZWlnaHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1aKHRoaXMse3RvcDp0LGxlZnQ6MH0sZXx8InBhZ2UiKS50b3AseG4odGhpcy5kb2MsdCt0aGlzLmRpc3BsYXkudmlld09mZnNldCl9LGhlaWdodEF0TGluZTpmdW5jdGlvbih0LGUpe3ZhciByPSExLG49dGhpcy5kb2MuZmlyc3QrdGhpcy5kb2Muc2l6ZS0xO3Q8dGhpcy5kb2MuZmlyc3Q/dD10aGlzLmRvYy5maXJzdDp0Pm4mJih0PW4scj0hMCk7dmFyIGk9Z24odGhpcy5kb2MsdCk7cmV0dXJuICQodGhpcyxnbih0aGlzLmRvYyx0KSx7dG9wOjAsbGVmdDowfSxlfHwicGFnZSIpLnRvcCsocj9pLmhlaWdodDowKX0sZGVmYXVsdFRleHRIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gcmUodGhpcy5kaXNwbGF5KX0sZGVmYXVsdENoYXJXaWR0aDpmdW5jdGlvbigpe3JldHVybiBuZSh0aGlzLmRpc3BsYXkpfSxzZXRHdXR0ZXJNYXJrZXI6bGUobnVsbCxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRyKHRoaXMsdCxmdW5jdGlvbih0KXt2YXIgbj10Lmd1dHRlck1hcmtlcnN8fCh0Lmd1dHRlck1hcmtlcnM9e30pO3JldHVybiBuW2VdPXIsIXImJmxpKG4pJiYodC5ndXR0ZXJNYXJrZXJzPW51bGwpLCEwfSl9KSxjbGVhckd1dHRlcjpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmRvYyxuPXIuZmlyc3Q7ci5pdGVyKGZ1bmN0aW9uKHIpe3IuZ3V0dGVyTWFya2VycyYmci5ndXR0ZXJNYXJrZXJzW3RdJiYoci5ndXR0ZXJNYXJrZXJzW3RdPW51bGwsdWUoZSxuLG4rMSksbGkoci5ndXR0ZXJNYXJrZXJzKSYmKHIuZ3V0dGVyTWFya2Vycz1udWxsKSksKytufSl9KSxhZGRMaW5lQ2xhc3M6bGUobnVsbCxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRyKHRoaXMsdCxmdW5jdGlvbih0KXt2YXIgbj0idGV4dCI9PWU/InRleHRDbGFzcyI6ImJhY2tncm91bmQiPT1lPyJiZ0NsYXNzIjoid3JhcENsYXNzIjtpZih0W25dKXtpZihuZXcgUmVnRXhwKCIoPzpefFxccykiK3IrIig/OiR8XFxzKSIpLnRlc3QodFtuXSkpcmV0dXJuITE7dFtuXSs9IiAiK3J9ZWxzZSB0W25dPXI7cmV0dXJuITB9KX0pLHJlbW92ZUxpbmVDbGFzczpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPSJ0ZXh0Ij09ZT8idGV4dENsYXNzIjoiYmFja2dyb3VuZCI9PWU/ImJnQ2xhc3MiOiJ3cmFwQ2xhc3MiLGk9dFtuXTtpZighaSlyZXR1cm4hMTtpZihudWxsPT1yKXRbbl09bnVsbDtlbHNle3ZhciBvPWkubWF0Y2gobmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIrcisiKD86JHxcXHMrKSIpKTtpZighbylyZXR1cm4hMTt2YXIgbD1vLmluZGV4K29bMF0ubGVuZ3RoO3Rbbl09aS5zbGljZSgwLG8uaW5kZXgpKyhvLmluZGV4JiZsIT1pLmxlbmd0aD8iICI6IiIpK2kuc2xpY2UobCl8fG51bGx9cmV0dXJuITB9KX0pLGFkZExpbmVXaWRnZXQ6bGUobnVsbCxmdW5jdGlvbih0LGUscil7cmV0dXJuIGpyKHRoaXMsdCxlLHIpfSkscmVtb3ZlTGluZVdpZGdldDpmdW5jdGlvbih0KXt0LmNsZWFyKCl9LGxpbmVJbmZvOmZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl7aWYoIXRyKHRoaXMuZG9jLHQpKXJldHVybiBudWxsO3ZhciBlPXQ7aWYodD1nbih0aGlzLmRvYyx0KSwhdClyZXR1cm4gbnVsbH1lbHNle3ZhciBlPWJuKHQpO2lmKG51bGw9PWUpcmV0dXJuIG51bGx9cmV0dXJue2xpbmU6ZSxoYW5kbGU6dCx0ZXh0OnQudGV4dCxndXR0ZXJNYXJrZXJzOnQuZ3V0dGVyTWFya2Vycyx0ZXh0Q2xhc3M6dC50ZXh0Q2xhc3MsYmdDbGFzczp0LmJnQ2xhc3Msd3JhcENsYXNzOnQud3JhcENsYXNzLHdpZGdldHM6dC53aWRnZXRzfX0sZ2V0Vmlld3BvcnQ6ZnVuY3Rpb24oKXtyZXR1cm57ZnJvbTp0aGlzLmRpc3BsYXkuc2hvd2luZ0Zyb20sdG86dGhpcy5kaXNwbGF5LnNob3dpbmdUb319LGFkZFdpZGdldDpmdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPXRoaXMuZGlzcGxheTt0PVEodGhpcyxRZSh0aGlzLmRvYyx0KSk7dmFyIGw9dC5ib3R0b20scz10LmxlZnQ7aWYoZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLG8uc2l6ZXIuYXBwZW5kQ2hpbGQoZSksIm92ZXIiPT1uKWw9dC50b3A7ZWxzZSBpZigiYWJvdmUiPT1ufHwibmVhciI9PW4pe3ZhciBhPU1hdGgubWF4KG8ud3JhcHBlci5jbGllbnRIZWlnaHQsdGhpcy5kb2MuaGVpZ2h0KSx1PU1hdGgubWF4KG8uc2l6ZXIuY2xpZW50V2lkdGgsby5saW5lU3BhY2UuY2xpZW50V2lkdGgpOygiYWJvdmUiPT1ufHx0LmJvdHRvbStlLm9mZnNldEhlaWdodD5hKSYmdC50b3A+ZS5vZmZzZXRIZWlnaHQ/bD10LnRvcC1lLm9mZnNldEhlaWdodDp0LmJvdHRvbStlLm9mZnNldEhlaWdodDw9YSYmKGw9dC5ib3R0b20pLHMrZS5vZmZzZXRXaWR0aD51JiYocz11LWUub2Zmc2V0V2lkdGgpfWUuc3R5bGUudG9wPWwrInB4IixlLnN0eWxlLmxlZnQ9ZS5zdHlsZS5yaWdodD0iIiwicmlnaHQiPT1pPyhzPW8uc2l6ZXIuY2xpZW50V2lkdGgtZS5vZmZzZXRXaWR0aCxlLnN0eWxlLnJpZ2h0PSIwcHgiKTooImxlZnQiPT1pP3M9MDoibWlkZGxlIj09aSYmKHM9KG8uc2l6ZXIuY2xpZW50V2lkdGgtZS5vZmZzZXRXaWR0aCkvMiksZS5zdHlsZS5sZWZ0PXMrInB4IiksciYmYXIodGhpcyxzLGwscytlLm9mZnNldFdpZHRoLGwrZS5vZmZzZXRIZWlnaHQpfSx0cmlnZ2VyT25LZXlEb3duOmxlKG51bGwsV2UpLGV4ZWNDb21tYW5kOmZ1bmN0aW9uKHQpe3JldHVybiBtb1t0XSh0aGlzKX0sZmluZFBvc0g6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MTswPmUmJihpPS0xLGU9LWUpO2Zvcih2YXIgbz0wLGw9UWUodGhpcy5kb2MsdCk7ZT5vJiYobD1wcih0aGlzLmRvYyxsLGkscixuKSwhbC5oaXRTaWRlKTsrK28pO3JldHVybiBsfSxtb3ZlSDpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLmRvYy5zZWw7cj1uLnNoaWZ0fHxuLmV4dGVuZHx8amUobi5mcm9tLG4udG8pP3ByKHRoaXMuZG9jLG4uaGVhZCx0LGUsdGhpcy5vcHRpb25zLnJ0bE1vdmVWaXN1YWxseSk6MD50P24uZnJvbTpuLnRvLGVyKHRoaXMuZG9jLHIscix0KX0pLGRlbGV0ZUg6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jLnNlbDtqZShyLmZyb20sci50byk/X2UodGhpcy5kb2MsIiIsci5mcm9tLHByKHRoaXMuZG9jLHIuaGVhZCx0LGUsITEpLCIrZGVsZXRlIik6X2UodGhpcy5kb2MsIiIsci5mcm9tLHIudG8sIitkZWxldGUiKSx0aGlzLmN1ck9wLnVzZXJTZWxDaGFuZ2U9ITB9KSxmaW5kUG9zVjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xLG89bjswPmUmJihpPS0xLGU9LWUpO2Zvcih2YXIgbD0wLHM9UWUodGhpcy5kb2MsdCk7ZT5sOysrbCl7dmFyIGE9USh0aGlzLHMsImRpdiIpO2lmKG51bGw9PW8/bz1hLmxlZnQ6YS5sZWZ0PW8scz1ncih0aGlzLGEsaSxyKSxzLmhpdFNpZGUpYnJlYWt9cmV0dXJuIHN9LG1vdmVWOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYy5zZWwsbj1RKHRoaXMsci5oZWFkLCJkaXYiKTtudWxsIT1yLmdvYWxDb2x1bW4mJihuLmxlZnQ9ci5nb2FsQ29sdW1uKTt2YXIgaT1ncih0aGlzLG4sdCxlKTsicGFnZSI9PWUmJmZyKHRoaXMsMCxxKHRoaXMsaSwiZGl2IikudG9wLW4udG9wKSxlcih0aGlzLmRvYyxpLGksdCksci5nb2FsQ29sdW1uPW4ubGVmdH0pLHRvZ2dsZU92ZXJ3cml0ZTpmdW5jdGlvbih0KXsobnVsbD09dHx8dCE9dGhpcy5zdGF0ZS5vdmVyd3JpdGUpJiYoKHRoaXMuc3RhdGUub3ZlcndyaXRlPSF0aGlzLnN0YXRlLm92ZXJ3cml0ZSk/dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci1vdmVyd3JpdGUiOnRoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lPXRoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLW92ZXJ3cml0ZSIsIiIpKX0saGFzRm9jdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZS5mb2N1c2VkfSxzY3JvbGxUbzpsZShudWxsLGZ1bmN0aW9uKHQsZSl7Y3IodGhpcyx0LGUpfSksZ2V0U2Nyb2xsSW5mbzpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGlzcGxheS5zY3JvbGxlcixlPVRvO3JldHVybntsZWZ0OnQuc2Nyb2xsTGVmdCx0b3A6dC5zY3JvbGxUb3AsaGVpZ2h0OnQuc2Nyb2xsSGVpZ2h0LWUsd2lkdGg6dC5zY3JvbGxXaWR0aC1lLGNsaWVudEhlaWdodDp0LmNsaWVudEhlaWdodC1lLGNsaWVudFdpZHRoOnQuY2xpZW50V2lkdGgtZX19LHNjcm9sbEludG9WaWV3OmxlKG51bGwsZnVuY3Rpb24odCxlKXtudWxsPT10P3Q9e2Zyb206dGhpcy5kb2Muc2VsLmhlYWQsdG86bnVsbH06Im51bWJlciI9PXR5cGVvZiB0P3Q9e2Zyb206WWUodCwwKSx0bzpudWxsfTpudWxsPT10LmZyb20mJih0PXtmcm9tOnQsdG86bnVsbH0pLHQudG98fCh0LnRvPXQuZnJvbSksZXx8KGU9MCk7dmFyIHI9dDtudWxsIT10LmZyb20ubGluZSYmKHRoaXMuY3VyT3Auc2Nyb2xsVG9Qb3M9e2Zyb206dC5mcm9tLHRvOnQudG8sbWFyZ2luOmV9LHI9e2Zyb206USh0aGlzLHQuZnJvbSksdG86USh0aGlzLHQudG8pfSk7dmFyIG49dXIodGhpcyxNYXRoLm1pbihyLmZyb20ubGVmdCxyLnRvLmxlZnQpLE1hdGgubWluKHIuZnJvbS50b3Asci50by50b3ApLWUsTWF0aC5tYXgoci5mcm9tLnJpZ2h0LHIudG8ucmlnaHQpLE1hdGgubWF4KHIuZnJvbS5ib3R0b20sci50by5ib3R0b20pK2UpO2NyKHRoaXMsbi5zY3JvbGxMZWZ0LG4uc2Nyb2xsVG9wKX0pLHNldFNpemU6bGUobnVsbCxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fHwvXlxkKyQvLnRlc3QoU3RyaW5nKHQpKT90KyJweCI6dH1udWxsIT10JiYodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUud2lkdGg9cih0KSksbnVsbCE9ZSYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLmhlaWdodD1yKGUpKSx0aGlzLm9wdGlvbnMubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoPXRoaXMuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zPTApLHRoaXMuY3VyT3AuZm9yY2VVcGRhdGU9ITB9KSxvcGVyYXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIGFlKHRoaXMsdCl9LHJlZnJlc2g6bGUobnVsbCxmdW5jdGlvbigpe3ZhciB0PW51bGw9PXRoaXMuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0O18odGhpcyksY3IodGhpcyx0aGlzLmRvYy5zY3JvbGxMZWZ0LHRoaXMuZG9jLnNjcm9sbFRvcCksdWUodGhpcyksdCYmbyh0aGlzKX0pLHN3YXBEb2M6bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRvYztyZXR1cm4gZS5jbT1udWxsLHBuKHRoaXMsdCksXyh0aGlzKSxkZSh0aGlzLCEwKSxjcih0aGlzLHQuc2Nyb2xsTGVmdCx0LnNjcm9sbFRvcCksVW4odGhpcywic3dhcERvYyIsdGhpcyxlKSxlfSksZ2V0SW5wdXRGaWVsZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuaW5wdXR9LGdldFdyYXBwZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS53cmFwcGVyfSxnZXRTY3JvbGxlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LnNjcm9sbGVyfSxnZXRHdXR0ZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5ndXR0ZXJzfX0sam4odCk7dmFyIHNvPXQub3B0aW9uSGFuZGxlcnM9e30sYW89dC5kZWZhdWx0cz17fSx1bz10LkluaXQ9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNvZGVNaXJyb3IuSW5pdCJ9fTt5cigidmFsdWUiLCIiLGZ1bmN0aW9uKHQsZSl7dC5zZXRWYWx1ZShlKX0sITApLHlyKCJtb2RlIixudWxsLGZ1bmN0aW9uKHQsZSl7dC5kb2MubW9kZU9wdGlvbj1lLHIodCl9LCEwKSx5cigiaW5kZW50VW5pdCIsMixyLCEwKSx5cigiaW5kZW50V2l0aFRhYnMiLCExKSx5cigic21hcnRJbmRlbnQiLCEwKSx5cigidGFiU2l6ZSIsNCxmdW5jdGlvbih0KXtyKHQpLF8odCksdWUodCl9LCEwKSx5cigic3BlY2lhbENoYXJzIiwvW1x0XHUwMDAwLVx1MDAxOVx1MDBhZFx1MjAwYlx1MjAyOFx1MjAyOVx1ZmVmZl0vZyxmdW5jdGlvbih0LGUpe3Qub3B0aW9ucy5zcGVjaWFsQ2hhcnM9bmV3IFJlZ0V4cChlLnNvdXJjZSsoZS50ZXN0KCIJIik/IiI6InwJIiksImciKSx0LnJlZnJlc2goKX0sITApLHlyKCJzcGVjaWFsQ2hhclBsYWNlaG9sZGVyIixubixmdW5jdGlvbih0KXt0LnJlZnJlc2goKX0sITApLHlyKCJlbGVjdHJpY0NoYXJzIiwhMCkseXIoInJ0bE1vdmVWaXN1YWxseSIsIVVpKSx5cigid2hvbGVMaW5lVXBkYXRlQmVmb3JlIiwhMCkseXIoInRoZW1lIiwiZGVmYXVsdCIsZnVuY3Rpb24odCl7cyh0KSxhKHQpfSwhMCkseXIoImtleU1hcCIsImRlZmF1bHQiLGwpLHlyKCJleHRyYUtleXMiLG51bGwpLHlyKCJvbktleUV2ZW50IixudWxsKSx5cigib25EcmFnRXZlbnQiLG51bGwpLHlyKCJsaW5lV3JhcHBpbmciLCExLG4sITApLHlyKCJndXR0ZXJzIixbXSxmdW5jdGlvbih0KXtoKHQub3B0aW9ucyksYSh0KX0sITApLHlyKCJmaXhlZEd1dHRlciIsITAsZnVuY3Rpb24odCxlKXt0LmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0PWU/eSh0LmRpc3BsYXkpKyJweCI6IjAiLHQucmVmcmVzaCgpfSwhMCkseXIoImNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyIiwhMSxkLCEwKSx5cigibGluZU51bWJlcnMiLCExLGZ1bmN0aW9uKHQpe2godC5vcHRpb25zKSxhKHQpfSwhMCkseXIoImZpcnN0TGluZU51bWJlciIsMSxhLCEwKSx5cigibGluZU51bWJlckZvcm1hdHRlciIsZnVuY3Rpb24odCl7cmV0dXJuIHR9LGEsITApLHlyKCJzaG93Q3Vyc29yV2hlblNlbGVjdGluZyIsITEsQSwhMCkseXIoInJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudSIsITApLHlyKCJyZWFkT25seSIsITEsZnVuY3Rpb24odCxlKXsibm9jdXJzb3IiPT1lPyh6ZSh0KSx0LmRpc3BsYXkuaW5wdXQuYmx1cigpLHQuZGlzcGxheS5kaXNhYmxlZD0hMCk6KHQuZGlzcGxheS5kaXNhYmxlZD0hMSxlfHxkZSh0LCEwKSl9KSx5cigiZHJhZ0Ryb3AiLCEwKSx5cigiY3Vyc29yQmxpbmtSYXRlIiw1MzApLHlyKCJjdXJzb3JTY3JvbGxNYXJnaW4iLDApLHlyKCJjdXJzb3JIZWlnaHQiLDEpLHlyKCJ3b3JrVGltZSIsMTAwKSx5cigid29ya0RlbGF5IiwxMDApLHlyKCJmbGF0dGVuU3BhbnMiLCEwKSx5cigicG9sbEludGVydmFsIiwxMDApLHlyKCJ1bmRvRGVwdGgiLDQwLGZ1bmN0aW9uKHQsZSl7dC5kb2MuaGlzdG9yeS51bmRvRGVwdGg9ZX0pLHlyKCJoaXN0b3J5RXZlbnREZWxheSIsNTAwKSx5cigidmlld3BvcnRNYXJnaW4iLDEwLGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSwhMCkseXIoIm1heEhpZ2hsaWdodExlbmd0aCIsMWU0LGZ1bmN0aW9uKHQpe3IodCksdC5yZWZyZXNoKCl9LCEwKSx5cigiY3J1ZGVNZWFzdXJpbmdGcm9tIiwxZTQpLHlyKCJtb3ZlSW5wdXRXaXRoQ3Vyc29yIiwhMCxmdW5jdGlvbih0LGUpe2V8fCh0LmRpc3BsYXkuaW5wdXREaXYuc3R5bGUudG9wPXQuZGlzcGxheS5pbnB1dERpdi5zdHlsZS5sZWZ0PTApfSkseXIoInRhYmluZGV4IixudWxsLGZ1bmN0aW9uKHQsZSl7dC5kaXNwbGF5LmlucHV0LnRhYkluZGV4PWV8fCIifSkseXIoImF1dG9mb2N1cyIsbnVsbCk7dmFyIGNvPXQubW9kZXM9e30sZm89dC5taW1lTW9kZXM9e307dC5kZWZpbmVNb2RlPWZ1bmN0aW9uKGUscil7aWYodC5kZWZhdWx0cy5tb2RlfHwibnVsbCI9PWV8fCh0LmRlZmF1bHRzLm1vZGU9ZSksYXJndW1lbnRzLmxlbmd0aD4yKXtyLmRlcGVuZGVuY2llcz1bXTtmb3IodmFyIG49MjtuPGFyZ3VtZW50cy5sZW5ndGg7KytuKXIuZGVwZW5kZW5jaWVzLnB1c2goYXJndW1lbnRzW25dKX1jb1tlXT1yfSx0LmRlZmluZU1JTUU9ZnVuY3Rpb24odCxlKXtmb1t0XT1lfSx0LnJlc29sdmVNb2RlPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmZm8uaGFzT3duUHJvcGVydHkoZSkpZT1mb1tlXTtlbHNlIGlmKGUmJiJzdHJpbmciPT10eXBlb2YgZS5uYW1lJiZmby5oYXNPd25Qcm9wZXJ0eShlLm5hbWUpKXt2YXIgcj1mb1tlLm5hbWVdO2U9ZWkocixlKSxlLm5hbWU9ci5uYW1lfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlJiYvXltcd1wtXStcL1tcd1wtXStcK3htbCQvLnRlc3QoZSkpcmV0dXJuIHQucmVzb2x2ZU1vZGUoImFwcGxpY2F0aW9uL3htbCIpO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT97bmFtZTplfTplfHx7bmFtZToibnVsbCJ9fSx0LmdldE1vZGU9ZnVuY3Rpb24oZSxyKXt2YXIgcj10LnJlc29sdmVNb2RlKHIpLG49Y29bci5uYW1lXTtpZighbilyZXR1cm4gdC5nZXRNb2RlKGUsInRleHQvcGxhaW4iKTt2YXIgaT1uKGUscik7aWYoaG8uaGFzT3duUHJvcGVydHkoci5uYW1lKSl7dmFyIG89aG9bci5uYW1lXTtmb3IodmFyIGwgaW4gbylvLmhhc093blByb3BlcnR5KGwpJiYoaS5oYXNPd25Qcm9wZXJ0eShsKSYmKGlbIl8iK2xdPWlbbF0pLGlbbF09b1tsXSl9cmV0dXJuIGkubmFtZT1yLm5hbWUsaX0sdC5kZWZpbmVNb2RlKCJudWxsIixmdW5jdGlvbigpe3JldHVybnt0b2tlbjpmdW5jdGlvbih0KXt0LnNraXBUb0VuZCgpfX19KSx0LmRlZmluZU1JTUUoInRleHQvcGxhaW4iLCJudWxsIik7dmFyIGhvPXQubW9kZUV4dGVuc2lvbnM9e307dC5leHRlbmRNb2RlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aG8uaGFzT3duUHJvcGVydHkodCk/aG9bdF06aG9bdF09e307cmkoZSxyKX0sdC5kZWZpbmVFeHRlbnNpb249ZnVuY3Rpb24oZSxyKXt0LnByb3RvdHlwZVtlXT1yfSx0LmRlZmluZURvY0V4dGVuc2lvbj1mdW5jdGlvbih0LGUpe3dvLnByb3RvdHlwZVt0XT1lfSx0LmRlZmluZU9wdGlvbj15cjt2YXIgcG89W107dC5kZWZpbmVJbml0SG9vaz1mdW5jdGlvbih0KXtwby5wdXNoKHQpfTt2YXIgZ289dC5oZWxwZXJzPXt9O3QucmVnaXN0ZXJIZWxwZXI9ZnVuY3Rpb24oZSxyLG4pe2dvLmhhc093blByb3BlcnR5KGUpfHwoZ29bZV09dFtlXT17fSksZ29bZV1bcl09bn0sdC5pc1dvcmRDaGFyPW9pLHQuY29weVN0YXRlPWJyLHQuc3RhcnRTdGF0ZT14cix0LmlubmVyTW9kZT1mdW5jdGlvbih0LGUpe2Zvcig7dC5pbm5lck1vZGU7KXt2YXIgcj10LmlubmVyTW9kZShlKTtpZighcnx8ci5tb2RlPT10KWJyZWFrO2U9ci5zdGF0ZSx0PXIubW9kZX1yZXR1cm4gcnx8e21vZGU6dCxzdGF0ZTplfX07dmFyIG1vPXQuY29tbWFuZHM9e3NlbGVjdEFsbDpmdW5jdGlvbih0KXt0LnNldFNlbGVjdGlvbihZZSh0LmZpcnN0TGluZSgpLDApLFllKHQubGFzdExpbmUoKSkpfSxraWxsTGluZTpmdW5jdGlvbih0KXt2YXIgZT10LmdldEN1cnNvcighMCkscj10LmdldEN1cnNvcighMSksbj0hamUoZSxyKTtufHx0LmdldExpbmUoZS5saW5lKS5sZW5ndGghPWUuY2g/dC5yZXBsYWNlUmFuZ2UoIiIsZSxuP3I6WWUoZS5saW5lKSwiK2RlbGV0ZSIpOnQucmVwbGFjZVJhbmdlKCIiLGUsWWUoZS5saW5lKzEsMCksIitkZWxldGUiKX0sZGVsZXRlTGluZTpmdW5jdGlvbih0KXt2YXIgZT10LmdldEN1cnNvcigpLmxpbmU7dC5yZXBsYWNlUmFuZ2UoIiIsWWUoZSwwKSxZZShlKSwiK2RlbGV0ZSIpfSxkZWxMaW5lTGVmdDpmdW5jdGlvbih0KXt2YXIgZT10LmdldEN1cnNvcigpO3QucmVwbGFjZVJhbmdlKCIiLFllKGUubGluZSwwKSxlLCIrZGVsZXRlIil9LHVuZG86ZnVuY3Rpb24odCl7dC51bmRvKCl9LHJlZG86ZnVuY3Rpb24odCl7dC5yZWRvKCl9LGdvRG9jU3RhcnQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oWWUodC5maXJzdExpbmUoKSwwKSl9LGdvRG9jRW5kOmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKFllKHQubGFzdExpbmUoKSkpfSxnb0xpbmVTdGFydDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbih4aSh0LHQuZ2V0Q3Vyc29yKCkubGluZSkpfSxnb0xpbmVTdGFydFNtYXJ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkscj14aSh0LGUubGluZSksbj10LmdldExpbmVIYW5kbGUoci5saW5lKSxpPXduKG4pO2lmKGkmJjAhPWlbMF0ubGV2ZWwpdC5leHRlbmRTZWxlY3Rpb24ocik7ZWxzZXt2YXIgbz1NYXRoLm1heCgwLG4udGV4dC5zZWFyY2goL1xTLykpLGw9ZS5saW5lPT1yLmxpbmUmJmUuY2g8PW8mJmUuY2g7dC5leHRlbmRTZWxlY3Rpb24oWWUoci5saW5lLGw/MDpvKSl9fSxnb0xpbmVFbmQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oQ2kodCx0LmdldEN1cnNvcigpLmxpbmUpKX0sZ29MaW5lUmlnaHQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5jaGFyQ29vcmRzKHQuZ2V0Q3Vyc29yKCksImRpdiIpLnRvcCs1O3QuZXh0ZW5kU2VsZWN0aW9uKHQuY29vcmRzQ2hhcih7bGVmdDp0LmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCsxMDAsdG9wOmV9LCJkaXYiKSl9LGdvTGluZUxlZnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5jaGFyQ29vcmRzKHQuZ2V0Q3Vyc29yKCksImRpdiIpLnRvcCs1O3QuZXh0ZW5kU2VsZWN0aW9uKHQuY29vcmRzQ2hhcih7bGVmdDowLHRvcDplfSwiZGl2IikpfSxnb0xpbmVVcDpmdW5jdGlvbih0KXt0Lm1vdmVWKC0xLCJsaW5lIil9LGdvTGluZURvd246ZnVuY3Rpb24odCl7dC5tb3ZlVigxLCJsaW5lIil9LGdvUGFnZVVwOmZ1bmN0aW9uKHQpe3QubW92ZVYoLTEsInBhZ2UiKX0sZ29QYWdlRG93bjpmdW5jdGlvbih0KXt0Lm1vdmVWKDEsInBhZ2UiKX0sZ29DaGFyTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJjaGFyIil9LGdvQ2hhclJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiY2hhciIpfSxnb0NvbHVtbkxlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiY29sdW1uIil9LGdvQ29sdW1uUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJjb2x1bW4iKX0sZ29Xb3JkTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJ3b3JkIil9LGdvR3JvdXBSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImdyb3VwIil9LGdvR3JvdXBMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImdyb3VwIil9LGdvV29yZFJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwid29yZCIpfSxkZWxDaGFyQmVmb3JlOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgtMSwiY2hhciIpfSxkZWxDaGFyQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsImNoYXIiKX0sZGVsV29yZEJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsIndvcmQiKX0sZGVsV29yZEFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJ3b3JkIil9LGRlbEdyb3VwQmVmb3JlOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgtMSwiZ3JvdXAiKX0sZGVsR3JvdXBBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwiZ3JvdXAiKX0saW5kZW50QXV0bzpmdW5jdGlvbih0KXt0LmluZGVudFNlbGVjdGlvbigic21hcnQiKX0saW5kZW50TW9yZTpmdW5jdGlvbih0KXt0LmluZGVudFNlbGVjdGlvbigiYWRkIil9LGluZGVudExlc3M6ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oInN1YnRyYWN0Iil9LGluc2VydFRhYjpmdW5jdGlvbih0KXt0LnJlcGxhY2VTZWxlY3Rpb24oIgkiLCJlbmQiLCIraW5wdXQiKX0sZGVmYXVsdFRhYjpmdW5jdGlvbih0KXt0LnNvbWV0aGluZ1NlbGVjdGVkKCk/dC5pbmRlbnRTZWxlY3Rpb24oImFkZCIpOnQucmVwbGFjZVNlbGVjdGlvbigiCSIsImVuZCIsIitpbnB1dCIpfSx0cmFuc3Bvc2VDaGFyczpmdW5jdGlvbih0KXt2YXIgZT10LmdldEN1cnNvcigpLHI9dC5nZXRMaW5lKGUubGluZSk7ZS5jaD4wJiZlLmNoPHIubGVuZ3RoLTEmJnQucmVwbGFjZVJhbmdlKHIuY2hhckF0KGUuY2gpK3IuY2hhckF0KGUuY2gtMSksWWUoZS5saW5lLGUuY2gtMSksWWUoZS5saW5lLGUuY2grMSkpfSxuZXdsaW5lQW5kSW5kZW50OmZ1bmN0aW9uKHQpe2xlKHQsZnVuY3Rpb24oKXt0LnJlcGxhY2VTZWxlY3Rpb24oIlxuIiwiZW5kIiwiK2lucHV0IiksdC5pbmRlbnRMaW5lKHQuZ2V0Q3Vyc29yKCkubGluZSxudWxsLCEwKX0pKCl9LHRvZ2dsZU92ZXJ3cml0ZTpmdW5jdGlvbih0KXt0LnRvZ2dsZU92ZXJ3cml0ZSgpfX0sdm89dC5rZXlNYXA9e307dm8uYmFzaWM9e0xlZnQ6ImdvQ2hhckxlZnQiLFJpZ2h0OiJnb0NoYXJSaWdodCIsVXA6ImdvTGluZVVwIixEb3duOiJnb0xpbmVEb3duIixFbmQ6ImdvTGluZUVuZCIsSG9tZToiZ29MaW5lU3RhcnRTbWFydCIsUGFnZVVwOiJnb1BhZ2VVcCIsUGFnZURvd246ImdvUGFnZURvd24iLERlbGV0ZToiZGVsQ2hhckFmdGVyIixCYWNrc3BhY2U6ImRlbENoYXJCZWZvcmUiLCJTaGlmdC1CYWNrc3BhY2UiOiJkZWxDaGFyQmVmb3JlIixUYWI6ImRlZmF1bHRUYWIiLCJTaGlmdC1UYWIiOiJpbmRlbnRBdXRvIixFbnRlcjoibmV3bGluZUFuZEluZGVudCIsSW5zZXJ0OiJ0b2dnbGVPdmVyd3JpdGUifSx2by5wY0RlZmF1bHQ9eyJDdHJsLUEiOiJzZWxlY3RBbGwiLCJDdHJsLUQiOiJkZWxldGVMaW5lIiwiQ3RybC1aIjoidW5kbyIsIlNoaWZ0LUN0cmwtWiI6InJlZG8iLCJDdHJsLVkiOiJyZWRvIiwiQ3RybC1Ib21lIjoiZ29Eb2NTdGFydCIsIkFsdC1VcCI6ImdvRG9jU3RhcnQiLCJDdHJsLUVuZCI6ImdvRG9jRW5kIiwiQ3RybC1Eb3duIjoiZ29Eb2NFbmQiLCJDdHJsLUxlZnQiOiJnb0dyb3VwTGVmdCIsIkN0cmwtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJBbHQtTGVmdCI6ImdvTGluZVN0YXJ0IiwiQWx0LVJpZ2h0IjoiZ29MaW5lRW5kIiwiQ3RybC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkN0cmwtUyI6InNhdmUiLCJDdHJsLUYiOiJmaW5kIiwiQ3RybC1HIjoiZmluZE5leHQiLCJTaGlmdC1DdHJsLUciOiJmaW5kUHJldiIsIlNoaWZ0LUN0cmwtRiI6InJlcGxhY2UiLCJTaGlmdC1DdHJsLVIiOiJyZXBsYWNlQWxsIiwiQ3RybC1bIjoiaW5kZW50TGVzcyIsIkN0cmwtXSI6ImluZGVudE1vcmUiLGZhbGx0aHJvdWdoOiJiYXNpYyJ9LHZvLm1hY0RlZmF1bHQ9eyJDbWQtQSI6InNlbGVjdEFsbCIsIkNtZC1EIjoiZGVsZXRlTGluZSIsIkNtZC1aIjoidW5kbyIsIlNoaWZ0LUNtZC1aIjoicmVkbyIsIkNtZC1ZIjoicmVkbyIsIkNtZC1VcCI6ImdvRG9jU3RhcnQiLCJDbWQtRW5kIjoiZ29Eb2NFbmQiLCJDbWQtRG93biI6ImdvRG9jRW5kIiwiQWx0LUxlZnQiOiJnb0dyb3VwTGVmdCIsIkFsdC1SaWdodCI6ImdvR3JvdXBSaWdodCIsIkNtZC1MZWZ0IjoiZ29MaW5lU3RhcnQiLCJDbWQtUmlnaHQiOiJnb0xpbmVFbmQiLCJBbHQtQmFja3NwYWNlIjoiZGVsR3JvdXBCZWZvcmUiLCJDdHJsLUFsdC1CYWNrc3BhY2UiOiJkZWxHcm91cEFmdGVyIiwiQWx0LURlbGV0ZSI6ImRlbEdyb3VwQWZ0ZXIiLCJDbWQtUyI6InNhdmUiLCJDbWQtRiI6ImZpbmQiLCJDbWQtRyI6ImZpbmROZXh0IiwiU2hpZnQtQ21kLUciOiJmaW5kUHJldiIsIkNtZC1BbHQtRiI6InJlcGxhY2UiLCJTaGlmdC1DbWQtQWx0LUYiOiJyZXBsYWNlQWxsIiwiQ21kLVsiOiJpbmRlbnRMZXNzIiwiQ21kLV0iOiJpbmRlbnRNb3JlIiwiQ21kLUJhY2tzcGFjZSI6ImRlbExpbmVMZWZ0IixmYWxsdGhyb3VnaDpbImJhc2ljIiwiZW1hY3N5Il19LHZvWyJkZWZhdWx0Il09S2k/dm8ubWFjRGVmYXVsdDp2by5wY0RlZmF1bHQsdm8uZW1hY3N5PXsiQ3RybC1GIjoiZ29DaGFyUmlnaHQiLCJDdHJsLUIiOiJnb0NoYXJMZWZ0IiwiQ3RybC1QIjoiZ29MaW5lVXAiLCJDdHJsLU4iOiJnb0xpbmVEb3duIiwiQWx0LUYiOiJnb1dvcmRSaWdodCIsIkFsdC1CIjoiZ29Xb3JkTGVmdCIsIkN0cmwtQSI6ImdvTGluZVN0YXJ0IiwiQ3RybC1FIjoiZ29MaW5lRW5kIiwiQ3RybC1WIjoiZ29QYWdlRG93biIsIlNoaWZ0LUN0cmwtViI6ImdvUGFnZVVwIiwiQ3RybC1EIjoiZGVsQ2hhckFmdGVyIiwiQ3RybC1IIjoiZGVsQ2hhckJlZm9yZSIsIkFsdC1EIjoiZGVsV29yZEFmdGVyIiwiQWx0LUJhY2tzcGFjZSI6ImRlbFdvcmRCZWZvcmUiLCJDdHJsLUsiOiJraWxsTGluZSIsIkN0cmwtVCI6InRyYW5zcG9zZUNoYXJzIn0sdC5sb29rdXBLZXk9d3IsdC5pc01vZGlmaWVyS2V5PUxyLHQua2V5TmFtZT1rcix0LmZyb21UZXh0QXJlYT1mdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4oKXtlLnZhbHVlPXUuZ2V0VmFsdWUoKX1pZihyfHwocj17fSksci52YWx1ZT1lLnZhbHVlLCFyLnRhYmluZGV4JiZlLnRhYmluZGV4JiYoci50YWJpbmRleD1lLnRhYmluZGV4KSwhci5wbGFjZWhvbGRlciYmZS5wbGFjZWhvbGRlciYmKHIucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlciksbnVsbD09ci5hdXRvZm9jdXMpe3ZhciBpPWRvY3VtZW50LmJvZHk7dHJ5e2k9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudH1jYXRjaChvKXt9ci5hdXRvZm9jdXM9aT09ZXx8bnVsbCE9ZS5nZXRBdHRyaWJ1dGUoImF1dG9mb2N1cyIpJiZpPT1kb2N1bWVudC5ib2R5fWlmKGUuZm9ybSYmKEduKGUuZm9ybSwic3VibWl0IixuKSwhci5sZWF2ZVN1Ym1pdE1ldGhvZEFsb25lKSl7dmFyIGw9ZS5mb3JtLHM9bC5zdWJtaXQ7dHJ5e3ZhciBhPWwuc3VibWl0PWZ1bmN0aW9uKCl7bigpLGwuc3VibWl0PXMsbC5zdWJtaXQoKSxsLnN1Ym1pdD1hfX1jYXRjaChvKXt9fWUuc3R5bGUuZGlzcGxheT0ibm9uZSI7dmFyIHU9dChmdW5jdGlvbih0KXtlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsZS5uZXh0U2libGluZyl9LHIpO3JldHVybiB1LnNhdmU9bix1LmdldFRleHRBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHUudG9UZXh0QXJlYT1mdW5jdGlvbigpe24oKSxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodS5nZXRXcmFwcGVyRWxlbWVudCgpKSxlLnN0eWxlLmRpc3BsYXk9IiIsZS5mb3JtJiYoVm4oZS5mb3JtLCJzdWJtaXQiLG4pLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmZvcm0uc3VibWl0JiYoZS5mb3JtLnN1Ym1pdD1zKSl9LHV9LFNyLnByb3RvdHlwZT17ZW9sOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLnN0cmluZy5sZW5ndGh9LHNvbDpmdW5jdGlvbigpe3JldHVybiAwPT10aGlzLnBvc30scGVlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpfHx2b2lkIDB9LG5leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M8dGhpcy5zdHJpbmcubGVuZ3RoP3RoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysrKTp2b2lkIDB9LGVhdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl2YXIgcj1lPT10O2Vsc2UgdmFyIHI9ZSYmKHQudGVzdD90LnRlc3QoZSk6dChlKSk7cmV0dXJuIHI/KCsrdGhpcy5wb3MsZSk6dm9pZCAwfSxlYXRXaGlsZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5wb3M7dGhpcy5lYXQodCk7KTtyZXR1cm4gdGhpcy5wb3M+ZX0sZWF0U3BhY2U6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5wb3M7L1tcc1x1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSk7KSsrdGhpcy5wb3M7cmV0dXJuIHRoaXMucG9zPnR9LHNraXBUb0VuZDpmdW5jdGlvbigpe3RoaXMucG9zPXRoaXMuc3RyaW5nLmxlbmd0aH0sc2tpcFRvOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3RyaW5nLmluZGV4T2YodCx0aGlzLnBvcyk7cmV0dXJuIGU+LTE/KHRoaXMucG9zPWUsITApOnZvaWQgMH0sYmFja1VwOmZ1bmN0aW9uKHQpe3RoaXMucG9zLT10fSxjb2x1bW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXN0Q29sdW1uUG9zPHRoaXMuc3RhcnQmJih0aGlzLmxhc3RDb2x1bW5WYWx1ZT1abih0aGlzLnN0cmluZyx0aGlzLnN0YXJ0LHRoaXMudGFiU2l6ZSx0aGlzLmxhc3RDb2x1bW5Qb3MsdGhpcy5sYXN0Q29sdW1uVmFsdWUpLHRoaXMubGFzdENvbHVtblBvcz10aGlzLnN0YXJ0KSx0aGlzLmxhc3RDb2x1bW5WYWx1ZX0saW5kZW50YXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gWm4odGhpcy5zdHJpbmcsbnVsbCx0aGlzLnRhYlNpemUpfSxtYXRjaDpmdW5jdGlvbih0LGUscil7aWYoInN0cmluZyIhPXR5cGVvZiB0KXt2YXIgbj10aGlzLnN0cmluZy5zbGljZSh0aGlzLnBvcykubWF0Y2godCk7cmV0dXJuIG4mJm4uaW5kZXg+MD9udWxsOihuJiZlIT09ITEmJih0aGlzLnBvcys9blswXS5sZW5ndGgpLG4pfXZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiByP3QudG9Mb3dlckNhc2UoKTp0fSxvPXRoaXMuc3RyaW5nLnN1YnN0cih0aGlzLnBvcyx0Lmxlbmd0aCk7cmV0dXJuIGkobyk9PWkodCk/KGUhPT0hMSYmKHRoaXMucG9zKz10Lmxlbmd0aCksITApOnZvaWQgMH0sY3VycmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LHRoaXMucG9zKX19LHQuU3RyaW5nU3RyZWFtPVNyLHQuVGV4dE1hcmtlcj1NcixqbihNciksTXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3ZhciB0PXRoaXMuZG9jLmNtLGU9dCYmIXQuY3VyT3A7aWYoZSYmaWUodCksWW4odGhpcywiY2xlYXIiKSl7dmFyIHI9dGhpcy5maW5kKCk7ciYmVW4odGhpcywiY2xlYXIiLHIuZnJvbSxyLnRvKX1mb3IodmFyIG49bnVsbCxpPW51bGwsbz0wO288dGhpcy5saW5lcy5sZW5ndGg7KytvKXt2YXIgbD10aGlzLmxpbmVzW29dLHM9TnIobC5tYXJrZWRTcGFucyx0aGlzKTtudWxsIT1zLnRvJiYoaT1ibihsKSksbC5tYXJrZWRTcGFucz1EcihsLm1hcmtlZFNwYW5zLHMpLG51bGwhPXMuZnJvbT9uPWJuKGwpOnRoaXMuY29sbGFwc2VkJiYhVnIodGhpcy5kb2MsbCkmJnQmJnluKGwscmUodC5kaXNwbGF5KSl9aWYodCYmdGhpcy5jb2xsYXBzZWQmJiF0Lm9wdGlvbnMubGluZVdyYXBwaW5nKWZvcih2YXIgbz0wO288dGhpcy5saW5lcy5sZW5ndGg7KytvKXt2YXIgYT1Hcih0LmRvYyx0aGlzLmxpbmVzW29dKSx1PWModC5kb2MsYSk7dT50LmRpc3BsYXkubWF4TGluZUxlbmd0aCYmKHQuZGlzcGxheS5tYXhMaW5lPWEsdC5kaXNwbGF5Lm1heExpbmVMZW5ndGg9dSx0LmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApfW51bGwhPW4mJnQmJnVlKHQsbixpKzEpLHRoaXMubGluZXMubGVuZ3RoPTAsdGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMCx0aGlzLmF0b21pYyYmdGhpcy5kb2MuY2FudEVkaXQmJih0aGlzLmRvYy5jYW50RWRpdD0hMSx0JiZpcih0KSksZSYmb2UodCl9fSxNci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHI9MDtyPHRoaXMubGluZXMubGVuZ3RoOysrcil7dmFyIG49dGhpcy5saW5lc1tyXSxpPU5yKG4ubWFya2VkU3BhbnMsdGhpcyk7aWYobnVsbCE9aS5mcm9tfHxudWxsIT1pLnRvKXt2YXIgbz1ibihuKTtudWxsIT1pLmZyb20mJih0PVllKG8saS5mcm9tKSksbnVsbCE9aS50byYmKGU9WWUobyxpLnRvKSl9fXJldHVybiJib29rbWFyayI9PXRoaXMudHlwZT90OnQmJntmcm9tOnQsdG86ZX19LE1yLnByb3RvdHlwZS5jaGFuZ2VkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5maW5kKCksZT10aGlzLmRvYy5jbTtpZih0JiZlKXsiYm9va21hcmsiIT10aGlzLnR5cGUmJih0PXQuZnJvbSk7dmFyIHI9Z24odGhpcy5kb2MsdC5saW5lKTtpZihHKGUsciksdC5saW5lPj1lLmRpc3BsYXkuc2hvd2luZ0Zyb20mJnQubGluZTxlLmRpc3BsYXkuc2hvd2luZ1RvKXtmb3IodmFyIG49ZS5kaXNwbGF5LmxpbmVEaXYuZmlyc3RDaGlsZDtuO249bi5uZXh0U2libGluZylpZihuLmxpbmVPYmo9PXIpe24ub2Zmc2V0SGVpZ2h0IT1yLmhlaWdodCYmeW4ocixuLm9mZnNldEhlaWdodCk7CmJyZWFrfWFlKGUsZnVuY3Rpb24oKXtlLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9ZS5jdXJPcC5mb3JjZVVwZGF0ZT1lLmN1ck9wLnVwZGF0ZU1heExpbmU9ITB9KX19fSxNci5wcm90b3R5cGUuYXR0YWNoTGluZT1mdW5jdGlvbih0KXtpZighdGhpcy5saW5lcy5sZW5ndGgmJnRoaXMuZG9jLmNtKXt2YXIgZT10aGlzLmRvYy5jbS5jdXJPcDtlLm1heWJlSGlkZGVuTWFya2VycyYmLTEhPXRpKGUubWF5YmVIaWRkZW5NYXJrZXJzLHRoaXMpfHwoZS5tYXliZVVuaGlkZGVuTWFya2Vyc3x8KGUubWF5YmVVbmhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfXRoaXMubGluZXMucHVzaCh0KX0sTXIucHJvdG90eXBlLmRldGFjaExpbmU9ZnVuY3Rpb24odCl7aWYodGhpcy5saW5lcy5zcGxpY2UodGkodGhpcy5saW5lcyx0KSwxKSwhdGhpcy5saW5lcy5sZW5ndGgmJnRoaXMuZG9jLmNtKXt2YXIgZT10aGlzLmRvYy5jbS5jdXJPcDsoZS5tYXliZUhpZGRlbk1hcmtlcnN8fChlLm1heWJlSGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcyl9fSx0LlNoYXJlZFRleHRNYXJrZXI9QXIsam4oQXIpLEFyLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKXt0aGlzLmV4cGxpY2l0bHlDbGVhcmVkPSEwO2Zvcih2YXIgdD0wO3Q8dGhpcy5tYXJrZXJzLmxlbmd0aDsrK3QpdGhpcy5tYXJrZXJzW3RdLmNsZWFyKCk7VW4odGhpcywiY2xlYXIiKX19LEFyLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpbWFyeS5maW5kKCl9O3ZhciB5bz10LkxpbmVXaWRnZXQ9ZnVuY3Rpb24odCxlLHIpe2lmKHIpZm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRoaXNbbl09cltuXSk7dGhpcy5jbT10LHRoaXMubm9kZT1lfTtqbih5bykseW8ucHJvdG90eXBlLmNsZWFyPV9yKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5saW5lLndpZGdldHMsZT1ibih0aGlzLmxpbmUpO2lmKG51bGwhPWUmJnQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXRbcl09PXRoaXMmJnQuc3BsaWNlKHItLSwxKTt0Lmxlbmd0aHx8KHRoaXMubGluZS53aWRnZXRzPW51bGwpO3ZhciBuPUNuKHRoaXMuY20sdGhpcy5saW5lKTx0aGlzLmNtLmRvYy5zY3JvbGxUb3A7eW4odGhpcy5saW5lLE1hdGgubWF4KDAsdGhpcy5saW5lLmhlaWdodC1Zcih0aGlzKSkpLG4mJmZyKHRoaXMuY20sMCwtdGhpcy5oZWlnaHQpLHVlKHRoaXMuY20sZSxlKzEpfX0pLHlvLnByb3RvdHlwZS5jaGFuZ2VkPV9yKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oZWlnaHQ7dGhpcy5oZWlnaHQ9bnVsbDt2YXIgZT1Zcih0aGlzKS10O2lmKGUpe3luKHRoaXMubGluZSx0aGlzLmxpbmUuaGVpZ2h0K2UpO3ZhciByPWJuKHRoaXMubGluZSk7dWUodGhpcy5jbSxyLHIrMSl9fSk7dmFyIGJvPXQuTGluZT1mdW5jdGlvbih0LGUscil7dGhpcy50ZXh0PXQsWHIodGhpcyxlKSx0aGlzLmhlaWdodD1yP3IodGhpcyk6MX07am4oYm8pLGJvLnByb3RvdHlwZS5saW5lTm89ZnVuY3Rpb24oKXtyZXR1cm4gYm4odGhpcyl9O3ZhciB4bz17fTtmbi5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxpbmVzLmxlbmd0aH0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dCxuPXQrZTtuPnI7KytyKXt2YXIgaT10aGlzLmxpbmVzW3JdO3RoaXMuaGVpZ2h0LT1pLmhlaWdodCxacihpKSxVbihpLCJkZWxldGUiKX10aGlzLmxpbmVzLnNwbGljZSh0LGUpfSxjb2xsYXBzZTpmdW5jdGlvbih0KXt0LnNwbGljZS5hcHBseSh0LFt0Lmxlbmd0aCwwXS5jb25jYXQodGhpcy5saW5lcykpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbih0LGUscil7dGhpcy5oZWlnaHQrPXIsdGhpcy5saW5lcz10aGlzLmxpbmVzLnNsaWNlKDAsdCkuY29uY2F0KGUpLmNvbmNhdCh0aGlzLmxpbmVzLnNsaWNlKHQpKTtmb3IodmFyIG49MCxpPWUubGVuZ3RoO2k+bjsrK24pZVtuXS5wYXJlbnQ9dGhpc30saXRlck46ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10K2U7bj50OysrdClpZihyKHRoaXMubGluZXNbdF0pKXJldHVybiEwfX0saG4ucHJvdG90eXBlPXtjaHVua1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplfSxyZW1vdmVJbm5lcjpmdW5jdGlvbih0LGUpe3RoaXMuc2l6ZS09ZTtmb3IodmFyIHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysrcil7dmFyIG49dGhpcy5jaGlsZHJlbltyXSxpPW4uY2h1bmtTaXplKCk7aWYoaT50KXt2YXIgbz1NYXRoLm1pbihlLGktdCksbD1uLmhlaWdodDtpZihuLnJlbW92ZUlubmVyKHQsbyksdGhpcy5oZWlnaHQtPWwtbi5oZWlnaHQsaT09byYmKHRoaXMuY2hpbGRyZW4uc3BsaWNlKHItLSwxKSxuLnBhcmVudD1udWxsKSwwPT0oZS09bykpYnJlYWs7dD0wfWVsc2UgdC09aX1pZih0aGlzLnNpemUtZTwyNSl7dmFyIHM9W107dGhpcy5jb2xsYXBzZShzKSx0aGlzLmNoaWxkcmVuPVtuZXcgZm4ocyldLHRoaXMuY2hpbGRyZW5bMF0ucGFyZW50PXRoaXN9fSxjb2xsYXBzZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO3I+ZTsrK2UpdGhpcy5jaGlsZHJlbltlXS5jb2xsYXBzZSh0KX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2l6ZSs9ZS5sZW5ndGgsdGhpcy5oZWlnaHQrPXI7Zm9yKHZhciBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10aGlzLmNoaWxkcmVuW25dLGw9by5jaHVua1NpemUoKTtpZihsPj10KXtpZihvLmluc2VydElubmVyKHQsZSxyKSxvLmxpbmVzJiZvLmxpbmVzLmxlbmd0aD41MCl7Zm9yKDtvLmxpbmVzLmxlbmd0aD41MDspe3ZhciBzPW8ubGluZXMuc3BsaWNlKG8ubGluZXMubGVuZ3RoLTI1LDI1KSxhPW5ldyBmbihzKTtvLmhlaWdodC09YS5oZWlnaHQsdGhpcy5jaGlsZHJlbi5zcGxpY2UobisxLDAsYSksYS5wYXJlbnQ9dGhpc310aGlzLm1heWJlU3BpbGwoKX1icmVha310LT1sfX0sbWF5YmVTcGlsbDpmdW5jdGlvbigpe2lmKCEodGhpcy5jaGlsZHJlbi5sZW5ndGg8PTEwKSl7dmFyIHQ9dGhpcztkb3t2YXIgZT10LmNoaWxkcmVuLnNwbGljZSh0LmNoaWxkcmVuLmxlbmd0aC01LDUpLHI9bmV3IGhuKGUpO2lmKHQucGFyZW50KXt0LnNpemUtPXIuc2l6ZSx0LmhlaWdodC09ci5oZWlnaHQ7dmFyIG49dGkodC5wYXJlbnQuY2hpbGRyZW4sdCk7dC5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKG4rMSwwLHIpfWVsc2V7dmFyIGk9bmV3IGhuKHQuY2hpbGRyZW4pO2kucGFyZW50PXQsdC5jaGlsZHJlbj1baSxyXSx0PWl9ci5wYXJlbnQ9dC5wYXJlbnR9d2hpbGUodC5jaGlsZHJlbi5sZW5ndGg+MTApO3QucGFyZW50Lm1heWJlU3BpbGwoKX19LGl0ZXJOOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MCxpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRoaXMuY2hpbGRyZW5bbl0sbD1vLmNodW5rU2l6ZSgpO2lmKGw+dCl7dmFyIHM9TWF0aC5taW4oZSxsLXQpO2lmKG8uaXRlck4odCxzLHIpKXJldHVybiEwO2lmKDA9PShlLT1zKSlicmVhazt0PTB9ZWxzZSB0LT1sfX19O3ZhciBDbz0wLHdvPXQuRG9jPWZ1bmN0aW9uKHQsZSxyKXtpZighKHRoaXMgaW5zdGFuY2VvZiB3bykpcmV0dXJuIG5ldyB3byh0LGUscik7bnVsbD09ciYmKHI9MCksaG4uY2FsbCh0aGlzLFtuZXcgZm4oW25ldyBibygiIixudWxsKV0pXSksdGhpcy5maXJzdD1yLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsTGVmdD0wLHRoaXMuY2FudEVkaXQ9ITEsdGhpcy5oaXN0b3J5PUxuKCksdGhpcy5jbGVhbkdlbmVyYXRpb249MSx0aGlzLmZyb250aWVyPXI7dmFyIG49WWUociwwKTt0aGlzLnNlbD17ZnJvbTpuLHRvOm4saGVhZDpuLGFuY2hvcjpuLHNoaWZ0OiExLGV4dGVuZDohMSxnb2FsQ29sdW1uOm51bGx9LHRoaXMuaWQ9KytDbyx0aGlzLm1vZGVPcHRpb249ZSwic3RyaW5nIj09dHlwZW9mIHQmJih0PXpvKHQpKSxjbih0aGlzLHtmcm9tOm4sdG86bix0ZXh0OnR9LG51bGwse2hlYWQ6bixhbmNob3I6bn0pfTt3by5wcm90b3R5cGU9ZWkoaG4ucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp3byxpdGVyOmZ1bmN0aW9uKHQsZSxyKXtyP3RoaXMuaXRlck4odC10aGlzLmZpcnN0LGUtdCxyKTp0aGlzLml0ZXJOKHRoaXMuZmlyc3QsdGhpcy5maXJzdCt0aGlzLnNpemUsdCl9LGluc2VydDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPWUubGVuZ3RoO2k+bjsrK24pcis9ZVtuXS5oZWlnaHQ7dGhpcy5pbnNlcnRJbm5lcih0LXRoaXMuZmlyc3QsZSxyKX0scmVtb3ZlOmZ1bmN0aW9uKHQsZSl7dGhpcy5yZW1vdmVJbm5lcih0LXRoaXMuZmlyc3QsZSl9LGdldFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXZuKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSk7cmV0dXJuIHQ9PT0hMT9lOmUuam9pbih0fHwiXG4iKX0sc2V0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9WWUodGhpcy5maXJzdCwwKSxyPXRoaXMuZmlyc3QrdGhpcy5zaXplLTE7QmUodGhpcyx7ZnJvbTplLHRvOlllKHIsZ24odGhpcyxyKS50ZXh0Lmxlbmd0aCksdGV4dDp6byh0KSxvcmlnaW46InNldFZhbHVlIn0se2hlYWQ6ZSxhbmNob3I6ZX0sITApfSxyZXBsYWNlUmFuZ2U6ZnVuY3Rpb24odCxlLHIsbil7ZT1RZSh0aGlzLGUpLHI9cj9RZSh0aGlzLHIpOmUsX2UodGhpcyx0LGUscixuKX0sZ2V0UmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW1uKHRoaXMsUWUodGhpcyx0KSxRZSh0aGlzLGUpKTtyZXR1cm4gcj09PSExP246bi5qb2luKHJ8fCJcbiIpfSxnZXRMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0TGluZUhhbmRsZSh0KTtyZXR1cm4gZSYmZS50ZXh0fSxzZXRMaW5lOmZ1bmN0aW9uKHQsZSl7dHIodGhpcyx0KSYmX2UodGhpcyxlLFllKHQsMCksUWUodGhpcyxZZSh0KSkpfSxyZW1vdmVMaW5lOmZ1bmN0aW9uKHQpe3Q/X2UodGhpcywiIixRZSh0aGlzLFllKHQtMSkpLFFlKHRoaXMsWWUodCkpKTpfZSh0aGlzLCIiLFllKDAsMCksUWUodGhpcyxZZSgxLDApKSl9LGdldExpbmVIYW5kbGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRyKHRoaXMsdCk/Z24odGhpcyx0KTp2b2lkIDB9LGdldExpbmVOdW1iZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGJuKHQpfSxnZXRMaW5lSGFuZGxlVmlzdWFsU3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiYodD1nbih0aGlzLHQpKSxHcih0aGlzLHQpfSxsaW5lQ291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplfSxmaXJzdExpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdH0sbGFzdExpbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdCt0aGlzLnNpemUtMX0sY2xpcFBvczpmdW5jdGlvbih0KXtyZXR1cm4gUWUodGhpcyx0KX0sZ2V0Q3Vyc29yOmZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5zZWw7cmV0dXJuIGU9bnVsbD09dHx8ImhlYWQiPT10P3IuaGVhZDoiYW5jaG9yIj09dD9yLmFuY2hvcjoiZW5kIj09dHx8dD09PSExP3IudG86ci5mcm9tLFplKGUpfSxzb21ldGhpbmdTZWxlY3RlZDpmdW5jdGlvbigpe3JldHVybiFqZSh0aGlzLnNlbC5oZWFkLHRoaXMuc2VsLmFuY2hvcil9LHNldEN1cnNvcjpzZShmdW5jdGlvbih0LGUscil7dmFyIG49UWUodGhpcywibnVtYmVyIj09dHlwZW9mIHQ/WWUodCxlfHwwKTp0KTtyP2VyKHRoaXMsbik6bnIodGhpcyxuLG4pfSksc2V0U2VsZWN0aW9uOnNlKGZ1bmN0aW9uKHQsZSxyKXtucih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlfHx0KSxyKX0pLGV4dGVuZFNlbGVjdGlvbjpzZShmdW5jdGlvbih0LGUscil7ZXIodGhpcyxRZSh0aGlzLHQpLGUmJlFlKHRoaXMsZSkscil9KSxnZXRTZWxlY3Rpb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0UmFuZ2UodGhpcy5zZWwuZnJvbSx0aGlzLnNlbC50byx0KX0scmVwbGFjZVNlbGVjdGlvbjpmdW5jdGlvbih0LGUscil7QmUodGhpcyx7ZnJvbTp0aGlzLnNlbC5mcm9tLHRvOnRoaXMuc2VsLnRvLHRleHQ6em8odCksb3JpZ2luOnJ9LGV8fCJhcm91bmQiKX0sdW5kbzpzZShmdW5jdGlvbigpe1ZlKHRoaXMsInVuZG8iKX0pLHJlZG86c2UoZnVuY3Rpb24oKXtWZSh0aGlzLCJyZWRvIil9KSxzZXRFeHRlbmRpbmc6ZnVuY3Rpb24odCl7dGhpcy5zZWwuZXh0ZW5kPXR9LGhpc3RvcnlTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oaXN0b3J5O3JldHVybnt1bmRvOnQuZG9uZS5sZW5ndGgscmVkbzp0LnVuZG9uZS5sZW5ndGh9fSxjbGVhckhpc3Rvcnk6ZnVuY3Rpb24oKXt0aGlzLmhpc3Rvcnk9TG4odGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pfSxtYXJrQ2xlYW46ZnVuY3Rpb24oKXt0aGlzLmNsZWFuR2VuZXJhdGlvbj10aGlzLmNoYW5nZUdlbmVyYXRpb24oKX0sY2hhbmdlR2VuZXJhdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhpc3RvcnkubGFzdE9wPXRoaXMuaGlzdG9yeS5sYXN0T3JpZ2luPW51bGwsdGhpcy5oaXN0b3J5LmdlbmVyYXRpb259LGlzQ2xlYW46ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uPT0odHx8dGhpcy5jbGVhbkdlbmVyYXRpb24pfSxnZXRIaXN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6SG4odGhpcy5oaXN0b3J5LmRvbmUpLHVuZG9uZTpIbih0aGlzLmhpc3RvcnkudW5kb25lKX19LHNldEhpc3Rvcnk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5oaXN0b3J5PUxuKHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKTtlLmRvbmU9dC5kb25lLnNsaWNlKDApLGUudW5kb25lPXQudW5kb25lLnNsaWNlKDApfSxtYXJrVGV4dDpmdW5jdGlvbih0LGUscil7cmV0dXJuIFRyKHRoaXMsUWUodGhpcyx0KSxRZSh0aGlzLGUpLHIsInJhbmdlIil9LHNldEJvb2ttYXJrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9e3JlcGxhY2VkV2l0aDplJiYobnVsbD09ZS5ub2RlVHlwZT9lLndpZGdldDplKSxpbnNlcnRMZWZ0OmUmJmUuaW5zZXJ0TGVmdH07cmV0dXJuIHQ9UWUodGhpcyx0KSxUcih0aGlzLHQsdCxyLCJib29rbWFyayIpfSxmaW5kTWFya3NBdDpmdW5jdGlvbih0KXt0PVFlKHRoaXMsdCk7dmFyIGU9W10scj1nbih0aGlzLHQubGluZSkubWFya2VkU3BhbnM7aWYocilmb3IodmFyIG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTsobnVsbD09aS5mcm9tfHxpLmZyb208PXQuY2gpJiYobnVsbD09aS50b3x8aS50bz49dC5jaCkmJmUucHVzaChpLm1hcmtlci5wYXJlbnR8fGkubWFya2VyKX1yZXR1cm4gZX0sZ2V0QWxsTWFya3M6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKGUpe3ZhciByPWUubWFya2VkU3BhbnM7aWYocilmb3IodmFyIG49MDtuPHIubGVuZ3RoOysrbiludWxsIT1yW25dLmZyb20mJnQucHVzaChyW25dLm1hcmtlcil9KSx0fSxwb3NGcm9tSW5kZXg6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmZpcnN0O3JldHVybiB0aGlzLml0ZXIoZnVuY3Rpb24obil7dmFyIGk9bi50ZXh0Lmxlbmd0aCsxO3JldHVybiBpPnQ/KGU9dCwhMCk6KHQtPWksKytyLHZvaWQgMCl9KSxRZSh0aGlzLFllKHIsZSkpfSxpbmRleEZyb21Qb3M6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLHQpO3ZhciBlPXQuY2g7cmV0dXJuIHQubGluZTx0aGlzLmZpcnN0fHx0LmNoPDA/MDoodGhpcy5pdGVyKHRoaXMuZmlyc3QsdC5saW5lLGZ1bmN0aW9uKHQpe2UrPXQudGV4dC5sZW5ndGgrMX0pLGUpfSxjb3B5OmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB3byh2bih0aGlzLHRoaXMuZmlyc3QsdGhpcy5maXJzdCt0aGlzLnNpemUpLHRoaXMubW9kZU9wdGlvbix0aGlzLmZpcnN0KTtyZXR1cm4gZS5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3AsZS5zY3JvbGxMZWZ0PXRoaXMuc2Nyb2xsTGVmdCxlLnNlbD17ZnJvbTp0aGlzLnNlbC5mcm9tLHRvOnRoaXMuc2VsLnRvLGhlYWQ6dGhpcy5zZWwuaGVhZCxhbmNob3I6dGhpcy5zZWwuYW5jaG9yLHNoaWZ0OnRoaXMuc2VsLnNoaWZ0LGV4dGVuZDohMSxnb2FsQ29sdW1uOnRoaXMuc2VsLmdvYWxDb2x1bW59LHQmJihlLmhpc3RvcnkudW5kb0RlcHRoPXRoaXMuaGlzdG9yeS51bmRvRGVwdGgsZS5zZXRIaXN0b3J5KHRoaXMuZ2V0SGlzdG9yeSgpKSksZX0sbGlua2VkRG9jOmZ1bmN0aW9uKHQpe3R8fCh0PXt9KTt2YXIgZT10aGlzLmZpcnN0LHI9dGhpcy5maXJzdCt0aGlzLnNpemU7bnVsbCE9dC5mcm9tJiZ0LmZyb20+ZSYmKGU9dC5mcm9tKSxudWxsIT10LnRvJiZ0LnRvPHImJihyPXQudG8pO3ZhciBuPW5ldyB3byh2bih0aGlzLGUsciksdC5tb2RlfHx0aGlzLm1vZGVPcHRpb24sZSk7cmV0dXJuIHQuc2hhcmVkSGlzdCYmKG4uaGlzdG9yeT10aGlzLmhpc3RvcnkpLCh0aGlzLmxpbmtlZHx8KHRoaXMubGlua2VkPVtdKSkucHVzaCh7ZG9jOm4sc2hhcmVkSGlzdDp0LnNoYXJlZEhpc3R9KSxuLmxpbmtlZD1be2RvYzp0aGlzLGlzUGFyZW50OiEwLHNoYXJlZEhpc3Q6dC5zaGFyZWRIaXN0fV0sbn0sdW5saW5rRG9jOmZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiB0JiYoZT1lLmRvYyksdGhpcy5saW5rZWQpZm9yKHZhciByPTA7cjx0aGlzLmxpbmtlZC5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmxpbmtlZFtyXTtpZihuLmRvYz09ZSl7dGhpcy5saW5rZWQuc3BsaWNlKHIsMSksZS51bmxpbmtEb2ModGhpcyk7YnJlYWt9fWlmKGUuaGlzdG9yeT09dGhpcy5oaXN0b3J5KXt2YXIgaT1bZS5pZF07ZG4oZSxmdW5jdGlvbih0KXtpLnB1c2godC5pZCl9LCEwKSxlLmhpc3Rvcnk9TG4oKSxlLmhpc3RvcnkuZG9uZT1Ibih0aGlzLmhpc3RvcnkuZG9uZSxpKSxlLmhpc3RvcnkudW5kb25lPUhuKHRoaXMuaGlzdG9yeS51bmRvbmUsaSl9fSxpdGVyTGlua2VkRG9jczpmdW5jdGlvbih0KXtkbih0aGlzLHQpfSxnZXRNb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZX0sZ2V0RWRpdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY219fSksd28ucHJvdG90eXBlLmVhY2hMaW5lPXdvLnByb3RvdHlwZS5pdGVyO3ZhciBMbz0iaXRlciBpbnNlcnQgcmVtb3ZlIGNvcHkgZ2V0RWRpdG9yIi5zcGxpdCgiICIpO2Zvcih2YXIga28gaW4gd28ucHJvdG90eXBlKXdvLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShrbykmJnRpKExvLGtvKTwwJiYodC5wcm90b3R5cGVba29dPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMuZG9jLGFyZ3VtZW50cyl9fSh3by5wcm90b3R5cGVba29dKSk7am4od28pLHQuZV9zdG9wPVBuLHQuZV9wcmV2ZW50RGVmYXVsdD16bix0LmVfc3RvcFByb3BhZ2F0aW9uPUluO3ZhciBTbyxNbz0wO3Qub249R24sdC5vZmY9Vm4sdC5zaWduYWw9S247dmFyIFRvPTMwLEFvPXQuUGFzcz17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ29kZU1pcnJvci5QYXNzIn19OyRuLnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uKHQsZSl7Y2xlYXJUaW1lb3V0KHRoaXMuaWQpLHRoaXMuaWQ9c2V0VGltZW91dChlLHQpfX0sdC5jb3VudENvbHVtbj1abjt2YXIgSG89WyIiXSxObz0vW1x1MzA0MC1cdTMwOWZcdTMwYTAtXHUzMGZmXHUzNDAwLVx1NGRiNVx1NGUwMC1cdTlmY2NcdWFjMDAtXHVkN2FmXS8sRG89L1tcdTAzMDAtXHUwMzZGXHUwNDgzLVx1MDQ4N1x1MDQ4OC1cdTA0ODlcdTA1OTEtXHUwNUJEXHUwNUJGXHUwNUMxLVx1MDVDMlx1MDVDNC1cdTA1QzVcdTA1QzdcdTA2MTAtXHUwNjFBXHUwNjRCLVx1MDY1Rlx1MDY3MFx1MDZENi1cdTA2RENcdTA2REYtXHUwNkU0XHUwNkU3LVx1MDZFOFx1MDZFQS1cdTA2RURcdUE2NkZcdTFEQzDigJNcdTFERkZcdTIwRDDigJNcdTIwRkZcdUE2NzAtXHVBNjcyXHVBNjc0LVx1QTY3RFx1QTY5Rlx1ZGMwMC1cdWRmZmZcdUZFMjDigJNcdUZFMkZdLzt0LnJlcGxhY2VHZXRSZWN0PWZ1bmN0aW9uKHQpe2ZpPXR9O3ZhciBXbz1mdW5jdGlvbigpe2lmKE5pKXJldHVybiExO3ZhciB0PXNpKCJkaXYiKTtyZXR1cm4iZHJhZ2dhYmxlImluIHR8fCJkcmFnRHJvcCJpbiB0fSgpO1RpP2hpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDM2PT10LmNoYXJDb2RlQXQoZS0xKSYmMzk9PXQuY2hhckNvZGVBdChlKX06SWkmJiEvVmVyc2lvblwvKFs2LTldfFxkXGQpXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk/aGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4vXC1bXiBcLT9dfFw/W14gIVwnXCJcKSwuXC1cLzo7XD9cXVx9XS8udGVzdCh0LnNsaWNlKGUtMSxlKzEpKX06V2kmJi9DaHJvbWVcLyg/OjI5fFszLTldXGR8XGRcZFxkKVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpP2hpPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jaGFyQ29kZUF0KGUtMSk7cmV0dXJuIHI+PTgyMDgmJjgyMTI+PXJ9OldpJiYoaGk9ZnVuY3Rpb24odCxlKXtpZihlPjEmJjQ1PT10LmNoYXJDb2RlQXQoZS0xKSl7aWYoL1x3Ly50ZXN0KHQuY2hhckF0KGUtMikpJiYvW15cLT9cLl0vLnRlc3QodC5jaGFyQXQoZSkpKXJldHVybiEwO2lmKGU+MiYmL1tcZFwuLF0vLnRlc3QodC5jaGFyQXQoZS0yKSkmJi9bXGRcLixdLy50ZXN0KHQuY2hhckF0KGUpKSlyZXR1cm4hMX1yZXR1cm4vW34hIyUmKik9K31cXVxcfFwiXC4+LDo7XVsoe1s8XXwtW15cLT9cLlx1MjAxMC1cdTIwMWZcdTIwMjZdfFw/W1x3fmBAIyQlXF4mKihfPSt7W3w+PF184oCmW1x3fmBAIyQlXF4mKihfPSt7Wz48XS8udGVzdCh0LnNsaWNlKGUtMSxlKzEpKX0pO3ZhciBPbyxFbyx6bz0zIT0iXG5cbmIiLnNwbGl0KC9cbi8pLmxlbmd0aD9mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPVtdLG49dC5sZW5ndGg7bj49ZTspe3ZhciBpPXQuaW5kZXhPZigiXG4iLGUpOy0xPT1pJiYoaT10Lmxlbmd0aCk7dmFyIG89dC5zbGljZShlLCJcciI9PXQuY2hhckF0KGktMSk/aS0xOmkpLGw9by5pbmRleE9mKCJcciIpOy0xIT1sPyhyLnB1c2goby5zbGljZSgwLGwpKSxlKz1sKzEpOihyLnB1c2gobyksZT1pKzEpfXJldHVybiByfTpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgvXHJcbj98XG4vKX07dC5zcGxpdExpbmVzPXpvO3ZhciBJbz13aW5kb3cuZ2V0U2VsZWN0aW9uP2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdC5zZWxlY3Rpb25TdGFydCE9dC5zZWxlY3Rpb25FbmR9Y2F0Y2goZSl7cmV0dXJuITF9fTpmdW5jdGlvbih0KXt0cnl7dmFyIGU9dC5vd25lckRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpfWNhdGNoKHIpe31yZXR1cm4gZSYmZS5wYXJlbnRFbGVtZW50KCk9PXQ/MCE9ZS5jb21wYXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIixlKTohMX0sRm89ZnVuY3Rpb24oKXt2YXIgdD1zaSgiZGl2Iik7cmV0dXJuIm9uY29weSJpbiB0PyEwOih0LnNldEF0dHJpYnV0ZSgib25jb3B5IiwicmV0dXJuOyIpLCJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9uY29weSl9KCksUG89ezM6IkVudGVyIiw4OiJCYWNrc3BhY2UiLDk6IlRhYiIsMTM6IkVudGVyIiwxNjoiU2hpZnQiLDE3OiJDdHJsIiwxODoiQWx0IiwxOToiUGF1c2UiLDIwOiJDYXBzTG9jayIsMjc6IkVzYyIsMzI6IlNwYWNlIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiTGVmdCIsMzg6IlVwIiwzOToiUmlnaHQiLDQwOiJEb3duIiw0NDoiUHJpbnRTY3JuIiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiw1OToiOyIsOTE6Ik1vZCIsOTI6Ik1vZCIsOTM6Ik1vZCIsMTA5OiItIiwxMDc6Ij0iLDEyNzoiRGVsZXRlIiwxODY6IjsiLDE4NzoiPSIsMTg4OiIsIiwxODk6Ii0iLDE5MDoiLiIsMTkxOiIvIiwxOTI6ImAiLDIxOToiWyIsMjIwOiJcXCIsMjIxOiJdIiwyMjI6IiciLDYzMjc2OiJQYWdlVXAiLDYzMjc3OiJQYWdlRG93biIsNjMyNzU6IkVuZCIsNjMyNzM6IkhvbWUiLDYzMjM0OiJMZWZ0Iiw2MzIzMjoiVXAiLDYzMjM1OiJSaWdodCIsNjMyMzM6IkRvd24iLDYzMzAyOiJJbnNlcnQiLDYzMjcyOiJEZWxldGUifTt0LmtleU5hbWVzPVBvLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7MTA+dDt0KyspUG9bdCs0OF09U3RyaW5nKHQpO2Zvcih2YXIgdD02NTs5MD49dDt0KyspUG9bdF09U3RyaW5nLmZyb21DaGFyQ29kZSh0KTtmb3IodmFyIHQ9MTsxMj49dDt0KyspUG9bdCsxMTFdPVBvW3QrNjMyMzVdPSJGIit0fSgpO3ZhciBSbyxCbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIDI1NT49dD9lLmNoYXJBdCh0KTp0Pj0xNDI0JiYxNTI0Pj10PyJSIjp0Pj0xNTM2JiYxNzkxPj10P3IuY2hhckF0KHQtMTUzNik6dD49MTc5MiYmMjIyMD49dD8iciI6IkwifXZhciBlPSJiYmJiYmJiYmJ0c3R3c2JiYmJiYmJiYmJiYmJic3NzdHdOTiUlJU5OTk5OTixOLE4xMTExMTExMTExTk5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OYmJiYmJic2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLE4lJSUlTk5OTkxOTk5OTiUlMTFOTE5OTjFMTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMIixyPSJycnJycnJycnJycnIsck5ObW1tbW1tcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbXJycnJycnJubm5ubm5ubm5uJW5ucnJybXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbU5tbW1tcnJycnJycnJycnJycnJycnJyIixuPS9bXHUwNTkwLVx1MDVmNFx1MDYwMC1cdTA2ZmZcdTA3MDAtXHUwOGFjXS8saT0vW3N0d05dLyxvPS9bTFJyXS8sbD0vW0xiMW5dLyxzPS9bMW5dLyxhPSJMIjtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoIW4udGVzdChlKSlyZXR1cm4hMTtmb3IodmFyIHIsdT1lLmxlbmd0aCxjPVtdLGY9MDt1PmY7KytmKWMucHVzaChyPXQoZS5jaGFyQ29kZUF0KGYpKSk7Zm9yKHZhciBmPTAsaD1hO3U+ZjsrK2Ype3ZhciByPWNbZl07Im0iPT1yP2NbZl09aDpoPXJ9Zm9yKHZhciBmPTAsZD1hO3U+ZjsrK2Ype3ZhciByPWNbZl07IjEiPT1yJiYiciI9PWQ/Y1tmXT0ibiI6by50ZXN0KHIpJiYoZD1yLCJyIj09ciYmKGNbZl09IlIiKSl9Zm9yKHZhciBmPTEsaD1jWzBdO3UtMT5mOysrZil7dmFyIHI9Y1tmXTsiKyI9PXImJiIxIj09aCYmIjEiPT1jW2YrMV0/Y1tmXT0iMSI6IiwiIT1yfHxoIT1jW2YrMV18fCIxIiE9aCYmIm4iIT1ofHwoY1tmXT1oKSxoPXJ9Zm9yKHZhciBmPTA7dT5mOysrZil7dmFyIHI9Y1tmXTtpZigiLCI9PXIpY1tmXT0iTiI7ZWxzZSBpZigiJSI9PXIpe2Zvcih2YXIgcD1mKzE7dT5wJiYiJSI9PWNbcF07KytwKTtmb3IodmFyIGc9ZiYmIiEiPT1jW2YtMV18fHUtMT5wJiYiMSI9PWNbcF0/IjEiOiJOIixtPWY7cD5tOysrbSljW21dPWc7Zj1wLTF9fWZvcih2YXIgZj0wLGQ9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyJMIj09ZCYmIjEiPT1yP2NbZl09IkwiOm8udGVzdChyKSYmKGQ9cil9Zm9yKHZhciBmPTA7dT5mOysrZilpZihpLnRlc3QoY1tmXSkpe2Zvcih2YXIgcD1mKzE7dT5wJiZpLnRlc3QoY1twXSk7KytwKTtmb3IodmFyIHY9IkwiPT0oZj9jW2YtMV06YSkseT0iTCI9PSh1LTE+cD9jW3BdOmEpLGc9dnx8eT8iTCI6IlIiLG09ZjtwPm07KyttKWNbbV09ZztmPXAtMX1mb3IodmFyIGIseD1bXSxmPTA7dT5mOylpZihsLnRlc3QoY1tmXSkpe3ZhciBDPWY7Zm9yKCsrZjt1PmYmJmwudGVzdChjW2ZdKTsrK2YpO3gucHVzaCh7ZnJvbTpDLHRvOmYsbGV2ZWw6MH0pfWVsc2V7dmFyIHc9ZixMPXgubGVuZ3RoO2ZvcigrK2Y7dT5mJiYiTCIhPWNbZl07KytmKTtmb3IodmFyIG09dztmPm07KWlmKHMudGVzdChjW21dKSl7bT53JiZ4LnNwbGljZShMLDAse2Zyb206dyx0bzptLGxldmVsOjF9KTt2YXIgaz1tO2ZvcigrK207Zj5tJiZzLnRlc3QoY1ttXSk7KyttKTt4LnNwbGljZShMLDAse2Zyb206ayx0bzptLGxldmVsOjJ9KSx3PW19ZWxzZSsrbTtmPncmJnguc3BsaWNlKEwsMCx7ZnJvbTp3LHRvOmYsbGV2ZWw6MX0pfXJldHVybiAxPT14WzBdLmxldmVsJiYoYj1lLm1hdGNoKC9eXHMrLykpJiYoeFswXS5mcm9tPWJbMF0ubGVuZ3RoLHgudW5zaGlmdCh7ZnJvbTowLHRvOmJbMF0ubGVuZ3RoLGxldmVsOjB9KSksMT09UW4oeCkubGV2ZWwmJihiPWUubWF0Y2goL1xzKyQvKSkmJihRbih4KS50by09YlswXS5sZW5ndGgseC5wdXNoKHtmcm9tOnUtYlswXS5sZW5ndGgsdG86dSxsZXZlbDowfSkpLHhbMF0ubGV2ZWwhPVFuKHgpLmxldmVsJiZ4LnB1c2goe2Zyb206dSx0bzp1LGxldmVsOnhbMF0ubGV2ZWx9KSx4fX0oKTtyZXR1cm4gdC52ZXJzaW9uPSIzLjIwLjAiLHR9KCk7UEsHCMZckbC/rwEAv68BAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAHN0YXRpY1xsaWJcaGlnaGxpZ2h0Lm1pbi5qc3ZhciBobGpzPW5ldyBmdW5jdGlvbigpe2Z1bmN0aW9uIGwobyl7cmV0dXJuIG8ucmVwbGFjZSgvJi9nbSwiJmFtcDsiKS5yZXBsYWNlKC88L2dtLCImbHQ7IikucmVwbGFjZSgvPi9nbSwiJmd0OyIpfWZ1bmN0aW9uIGIocCl7Zm9yKHZhciBvPXAuZmlyc3RDaGlsZDtvO289by5uZXh0U2libGluZyl7aWYoby5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT0iQ09ERSIpe3JldHVybiBvfWlmKCEoby5ub2RlVHlwZT09MyYmby5ub2RlVmFsdWUubWF0Y2goL1xzKy8pKSl7YnJlYWt9fX1mdW5jdGlvbiBoKHAsbyl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChwLmNoaWxkTm9kZXMsZnVuY3Rpb24ocSl7aWYocS5ub2RlVHlwZT09Myl7cmV0dXJuIG8/cS5ub2RlVmFsdWUucmVwbGFjZSgvXG4vZywiIik6cS5ub2RlVmFsdWV9aWYocS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT0iQlIiKXtyZXR1cm4iXG4ifXJldHVybiBoKHEsbyl9KS5qb2luKCIiKX1mdW5jdGlvbiBhKHEpe3ZhciBwPShxLmNsYXNzTmFtZSsiICIrKHEucGFyZW50Tm9kZT9xLnBhcmVudE5vZGUuY2xhc3NOYW1lOiIiKSkuc3BsaXQoL1xzKy8pO3A9cC5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIucmVwbGFjZSgvXmxhbmd1YWdlLS8sIiIpfSk7Zm9yKHZhciBvPTA7bzxwLmxlbmd0aDtvKyspe2lmKGVbcFtvXV18fHBbb109PSJuby1oaWdobGlnaHQiKXtyZXR1cm4gcFtvXX19fWZ1bmN0aW9uIGMocSl7dmFyIG89W107KGZ1bmN0aW9uIHAocixzKXtmb3IodmFyIHQ9ci5maXJzdENoaWxkO3Q7dD10Lm5leHRTaWJsaW5nKXtpZih0Lm5vZGVUeXBlPT0zKXtzKz10Lm5vZGVWYWx1ZS5sZW5ndGh9ZWxzZXtpZih0Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJCUiIpe3MrPTF9ZWxzZXtpZih0Lm5vZGVUeXBlPT0xKXtvLnB1c2goe2V2ZW50OiJzdGFydCIsb2Zmc2V0OnMsbm9kZTp0fSk7cz1wKHQscyk7by5wdXNoKHtldmVudDoic3RvcCIsb2Zmc2V0OnMsbm9kZTp0fSl9fX19cmV0dXJuIHN9KShxLDApO3JldHVybiBvfWZ1bmN0aW9uIGoocCxyLHYpe3ZhciBxPTA7dmFyIHk9IiI7dmFyIHM9W107ZnVuY3Rpb24gdSgpe2lmKCFwLmxlbmd0aHx8IXIubGVuZ3RoKXtyZXR1cm4gcC5sZW5ndGg/cDpyfWlmKHBbMF0ub2Zmc2V0IT1yWzBdLm9mZnNldCl7cmV0dXJuKHBbMF0ub2Zmc2V0PHJbMF0ub2Zmc2V0KT9wOnJ9cmV0dXJuIHJbMF0uZXZlbnQ9PSJzdGFydCI/cDpyfWZ1bmN0aW9uIHQoQSl7ZnVuY3Rpb24geihCKXtyZXR1cm4iICIrQi5ub2RlTmFtZSsnPSInK2woQi52YWx1ZSkrJyInfXkrPSI8IitBLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKEEuYXR0cmlidXRlcyx6KS5qb2luKCIiKSsiPiJ9ZnVuY3Rpb24geCh6KXt5Kz0iPC8iK3oubm9kZU5hbWUudG9Mb3dlckNhc2UoKSsiPiJ9ZnVuY3Rpb24gbyh6KXsoei5ldmVudD09InN0YXJ0Ij90OngpKHoubm9kZSl9d2hpbGUocC5sZW5ndGh8fHIubGVuZ3RoKXt2YXIgdz11KCk7eSs9bCh2LnN1YnN0cihxLHdbMF0ub2Zmc2V0LXEpKTtxPXdbMF0ub2Zmc2V0O2lmKHc9PXApe3MucmV2ZXJzZSgpLmZvckVhY2goeCk7ZG97byh3LnNwbGljZSgwLDEpWzBdKTt3PXUoKX13aGlsZSh3PT1wJiZ3Lmxlbmd0aCYmd1swXS5vZmZzZXQ9PXEpO3MucmV2ZXJzZSgpLmZvckVhY2godCl9ZWxzZXtpZih3WzBdLmV2ZW50PT0ic3RhcnQiKXtzLnB1c2god1swXS5ub2RlKX1lbHNle3MucG9wKCl9byh3LnNwbGljZSgwLDEpWzBdKX19cmV0dXJuIHkrbCh2LnN1YnN0cihxKSl9ZnVuY3Rpb24gZihyKXtmdW5jdGlvbiBvKHMpe3JldHVybihzJiZzLnNvdXJjZSl8fHN9ZnVuY3Rpb24gcCh0LHMpe3JldHVybiBSZWdFeHAobyh0KSwibSIrKHIuY0k/ImkiOiIiKSsocz8iZyI6IiIpKX1mdW5jdGlvbiBxKHoseCl7aWYoei5jb21waWxlZCl7cmV0dXJufXouY29tcGlsZWQ9dHJ1ZTt2YXIgdT1bXTtpZih6Lmspe3ZhciBzPXt9O2Z1bmN0aW9uIEEoQix0KXtpZihyLmNJKXt0PXQudG9Mb3dlckNhc2UoKX10LnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihDKXt2YXIgRD1DLnNwbGl0KCJ8Iik7c1tEWzBdXT1bQixEWzFdP051bWJlcihEWzFdKToxXTt1LnB1c2goRFswXSl9KX16LmxSPXAoei5sfHwiXFxiIitobGpzLklSKyJcXGIoPyFcXC4pIix0cnVlKTtpZih0eXBlb2Ygei5rPT0ic3RyaW5nIil7QSgia2V5d29yZCIsei5rKX1lbHNle2Zvcih2YXIgeSBpbiB6Lmspe2lmKCF6LmsuaGFzT3duUHJvcGVydHkoeSkpe2NvbnRpbnVlfUEoeSx6LmtbeV0pfX16Lms9c31pZih4KXtpZih6LmJXSyl7ei5iPSJcXGIoIit1LmpvaW4oInwiKSsiKVxcYig/IVxcLilcXHMqIn16LmJSPXAoei5iP3ouYjoiXFxCfFxcYiIpO2lmKCF6LmUmJiF6LmVXKXt6LmU9IlxcQnxcXGIifWlmKHouZSl7ei5lUj1wKHouZSl9ei50RT1vKHouZSl8fCIiO2lmKHouZVcmJngudEUpe3oudEUrPSh6LmU/InwiOiIiKSt4LnRFfX1pZih6Lmkpe3ouaVI9cCh6LmkpfWlmKHoucj09PXVuZGVmaW5lZCl7ei5yPTF9aWYoIXouYyl7ei5jPVtdfWZvcih2YXIgdz0wO3c8ei5jLmxlbmd0aDt3Kyspe2lmKHouY1t3XT09InNlbGYiKXt6LmNbd109en1xKHouY1t3XSx6KX1pZih6LnN0YXJ0cyl7cSh6LnN0YXJ0cyx4KX12YXIgdj1bXTtmb3IodmFyIHc9MDt3PHouYy5sZW5ndGg7dysrKXt2LnB1c2gobyh6LmNbd10uYikpfWlmKHoudEUpe3YucHVzaChvKHoudEUpKX1pZih6Lmkpe3YucHVzaChvKHouaSkpfXoudD12Lmxlbmd0aD9wKHYuam9pbigifCIpLHRydWUpOntleGVjOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsfX19cShyKX1mdW5jdGlvbiBkKEUsRyxDLE0pe2Z1bmN0aW9uIG8ocixQKXtmb3IodmFyIE89MDtPPFAuYy5sZW5ndGg7TysrKXt2YXIgTj1QLmNbT10uYlIuZXhlYyhyKTtpZihOJiZOLmluZGV4PT0wKXtyZXR1cm4gUC5jW09dfX19ZnVuY3Rpb24gcyhOLHIpe2lmKE4uZSYmTi5lUi50ZXN0KHIpKXtyZXR1cm4gTn1pZihOLmVXKXtyZXR1cm4gcyhOLnBhcmVudCxyKX19ZnVuY3Rpb24gdChyLE4pe3JldHVybiAhQyYmTi5pJiZOLmlSLnRlc3Qocil9ZnVuY3Rpb24geShPLHIpe3ZhciBOPUguY0k/clswXS50b0xvd2VyQ2FzZSgpOnJbMF07cmV0dXJuIE8uay5oYXNPd25Qcm9wZXJ0eShOKSYmTy5rW05dfWZ1bmN0aW9uIEkoKXt2YXIgTj1sKHcpO2lmKCFCLmspe3JldHVybiBOfXZhciByPSIiO3ZhciBRPTA7Qi5sUi5sYXN0SW5kZXg9MDt2YXIgTz1CLmxSLmV4ZWMoTik7d2hpbGUoTyl7cis9Ti5zdWJzdHIoUSxPLmluZGV4LVEpO3ZhciBQPXkoQixPKTtpZihQKXt2Kz1QWzFdO3IrPSc8c3BhbiBjbGFzcz0iJytQWzBdKyciPicrT1swXSsiPC9zcGFuPiJ9ZWxzZXtyKz1PWzBdfVE9Qi5sUi5sYXN0SW5kZXg7Tz1CLmxSLmV4ZWMoTil9cmV0dXJuIHIrTi5zdWJzdHIoUSl9ZnVuY3Rpb24geigpe2lmKEIuc0wmJiFlW0Iuc0xdKXtyZXR1cm4gbCh3KX12YXIgTj1CLnN1Ykxhbmd1YWdlTW9kZT09ImNvbnRpbnVvdXMiP0IudG9wOnVuZGVmaW5lZDt2YXIgcj1CLnNMP2QoQi5zTCx3LHRydWUsTik6Zyh3KTtpZihCLnI+MCl7dis9ci5rZXl3b3JkX2NvdW50O0ErPXIucn1CLnRvcD1yLnRvcDtyZXR1cm4nPHNwYW4gY2xhc3M9Iicrci5sYW5ndWFnZSsnIj4nK3IudmFsdWUrIjwvc3Bhbj4ifWZ1bmN0aW9uIEwoKXtyZXR1cm4gQi5zTCE9PXVuZGVmaW5lZD96KCk6SSgpfWZ1bmN0aW9uIEsoTyxyKXt2YXIgTj1PLmNOPyc8c3BhbiBjbGFzcz0iJytPLmNOKyciPic6IiI7aWYoTy5yQil7eCs9Tjt3PSIifWVsc2V7aWYoTy5lQil7eCs9bChyKStOO3c9IiJ9ZWxzZXt4Kz1OO3c9cn19Qj1PYmplY3QuY3JlYXRlKE8se3BhcmVudDp7dmFsdWU6Qn19KX1mdW5jdGlvbiBEKE4scil7dys9TjtpZihyPT09dW5kZWZpbmVkKXt4Kz1MKCk7cmV0dXJuIDB9dmFyIFA9byhyLEIpO2lmKFApe3grPUwoKTtLKFAscik7cmV0dXJuIFAuckI/MDpyLmxlbmd0aH12YXIgUT1zKEIscik7aWYoUSl7dmFyIE89QjtpZighKE8uckV8fE8uZUUpKXt3Kz1yfXgrPUwoKTtkb3tpZihCLmNOKXt4Kz0iPC9zcGFuPiJ9QSs9Qi5yO0I9Qi5wYXJlbnR9d2hpbGUoQiE9US5wYXJlbnQpO2lmKE8uZUUpe3grPWwocil9dz0iIjtpZihRLnN0YXJ0cyl7SyhRLnN0YXJ0cywiIil9cmV0dXJuIE8uckU/MDpyLmxlbmd0aH1pZih0KHIsQikpe3Rocm93IG5ldyBFcnJvcignSWxsZWdhbCBsZXhlbSAiJytyKyciIGZvciBtb2RlICInKyhCLmNOfHwiPHVubmFtZWQ+IikrJyInKX13Kz1yO3JldHVybiByLmxlbmd0aHx8MX12YXIgSD1lW0VdO2lmKCFIKXt0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGFuZ3VhZ2U6ICInK0UrJyInKX1mKEgpO3ZhciBCPU18fEg7dmFyIHg9IiI7Zm9yKHZhciBGPUI7RiE9SDtGPUYucGFyZW50KXtpZihGLmNOKXt4PSc8c3BhbiBjbGFzcz0iJytGLmNOKyciPicreH19dmFyIHc9IiI7dmFyIEE9MDt2YXIgdj0wO3RyeXt2YXIgdSxxLHA9MDt3aGlsZSh0cnVlKXtCLnQubGFzdEluZGV4PXA7dT1CLnQuZXhlYyhHKTtpZighdSl7YnJlYWt9cT1EKEcuc3Vic3RyKHAsdS5pbmRleC1wKSx1WzBdKTtwPXUuaW5kZXgrcX1EKEcuc3Vic3RyKHApKTtmb3IodmFyIEY9QjtGLnBhcmVudDtGPUYucGFyZW50KXtpZihGLmNOKXt4Kz0iPC9zcGFuPiJ9fXJldHVybntyOkEsa2V5d29yZF9jb3VudDp2LHZhbHVlOngsbGFuZ3VhZ2U6RSx0b3A6Qn19Y2F0Y2goSil7aWYoSi5tZXNzYWdlLmluZGV4T2YoIklsbGVnYWwiKSE9LTEpe3JldHVybntyOjAsa2V5d29yZF9jb3VudDowLHZhbHVlOmwoRyl9fWVsc2V7dGhyb3cgSn19fWZ1bmN0aW9uIGcocyl7dmFyIG89e2tleXdvcmRfY291bnQ6MCxyOjAsdmFsdWU6bChzKX07dmFyIHE9bztmb3IodmFyIHAgaW4gZSl7aWYoIWUuaGFzT3duUHJvcGVydHkocCkpe2NvbnRpbnVlfXZhciByPWQocCxzLGZhbHNlKTtyLmxhbmd1YWdlPXA7aWYoci5rZXl3b3JkX2NvdW50K3Iucj5xLmtleXdvcmRfY291bnQrcS5yKXtxPXJ9aWYoci5rZXl3b3JkX2NvdW50K3Iucj5vLmtleXdvcmRfY291bnQrby5yKXtxPW87bz1yfX1pZihxLmxhbmd1YWdlKXtvLnNlY29uZF9iZXN0PXF9cmV0dXJuIG99ZnVuY3Rpb24gaShxLHAsbyl7aWYocCl7cT1xLnJlcGxhY2UoL14oKDxbXj5dKz58XHQpKykvZ20sZnVuY3Rpb24ocix2LHUsdCl7cmV0dXJuIHYucmVwbGFjZSgvXHQvZyxwKX0pfWlmKG8pe3E9cS5yZXBsYWNlKC9cbi9nLCI8YnI+Iil9cmV0dXJuIHF9ZnVuY3Rpb24gbShyLHUscCl7dmFyIHY9aChyLHApO3ZhciB0PWEocik7aWYodD09Im5vLWhpZ2hsaWdodCIpe3JldHVybn12YXIgdz10P2QodCx2LHRydWUpOmcodik7dD13Lmxhbmd1YWdlO3ZhciBvPWMocik7aWYoby5sZW5ndGgpe3ZhciBxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsInByZSIpO3EuaW5uZXJIVE1MPXcudmFsdWU7dy52YWx1ZT1qKG8sYyhxKSx2KX13LnZhbHVlPWkody52YWx1ZSx1LHApO3ZhciBzPXIuY2xhc3NOYW1lO2lmKCFzLm1hdGNoKCIoXFxzfF4pKGxhbmd1YWdlLSk/Iit0KyIoXFxzfCQpIikpe3M9cz8ocysiICIrdCk6dH1yLmlubmVySFRNTD13LnZhbHVlO3IuY2xhc3NOYW1lPXM7ci5yZXN1bHQ9e2xhbmd1YWdlOnQsa3c6dy5rZXl3b3JkX2NvdW50LHJlOncucn07aWYody5zZWNvbmRfYmVzdCl7ci5zZWNvbmRfYmVzdD17bGFuZ3VhZ2U6dy5zZWNvbmRfYmVzdC5sYW5ndWFnZSxrdzp3LnNlY29uZF9iZXN0LmtleXdvcmRfY291bnQscmU6dy5zZWNvbmRfYmVzdC5yfX19ZnVuY3Rpb24gbigpe2lmKG4uY2FsbGVkKXtyZXR1cm59bi5jYWxsZWQ9dHJ1ZTtBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsInByZSIpLGIpLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe20obyxobGpzLnRhYlJlcGxhY2UpfSl9ZnVuY3Rpb24gaygpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixuLGZhbHNlKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbixmYWxzZSl9dmFyIGU9e307dGhpcy5MQU5HVUFHRVM9ZTt0aGlzLmhpZ2hsaWdodD1kO3RoaXMuaGlnaGxpZ2h0QXV0bz1nO3RoaXMuZml4TWFya3VwPWk7dGhpcy5oaWdobGlnaHRCbG9jaz1tO3RoaXMuaW5pdEhpZ2hsaWdodGluZz1uO3RoaXMuaW5pdEhpZ2hsaWdodGluZ09uTG9hZD1rO3RoaXMuSVI9IlthLXpBLVpdW2EtekEtWjAtOV9dKiI7dGhpcy5VSVI9IlthLXpBLVpfXVthLXpBLVowLTlfXSoiO3RoaXMuTlI9IlxcYlxcZCsoXFwuXFxkKyk/Ijt0aGlzLkNOUj0iKFxcYjBbeFhdW2EtZkEtRjAtOV0rfChcXGJcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShbZUVdWy0rXT9cXGQrKT8pIjt0aGlzLkJOUj0iXFxiKDBiWzAxXSspIjt0aGlzLlJTUj0iIXwhPXwhPT18JXwlPXwmfCYmfCY9fFxcKnxcXCo9fFxcK3xcXCs9fCx8XFwufC18LT18L3wvPXw6fDt8PDx8PDw9fDw9fDx8PT09fD09fD18Pj4+PXw+Pj18Pj18Pj4+fD4+fD58XFw/fFxcW3xcXHt8XFwofFxcXnxcXF49fFxcfHxcXHw9fFxcfFxcfHx+Ijt0aGlzLkJFPXtiOiJcXFxcW1xcc1xcU10iLHI6MH07dGhpcy5BU009e2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGk6IlxcbiIsYzpbdGhpcy5CRV0scjowfTt0aGlzLlFTTT17Y046InN0cmluZyIsYjonIicsZTonIicsaToiXFxuIixjOlt0aGlzLkJFXSxyOjB9O3RoaXMuQ0xDTT17Y046ImNvbW1lbnQiLGI6Ii8vIixlOiIkIn07dGhpcy5DQkxDTE09e2NOOiJjb21tZW50IixiOiIvXFwqIixlOiJcXCovIn07dGhpcy5IQ009e2NOOiJjb21tZW50IixiOiIjIixlOiIkIn07dGhpcy5OTT17Y046Im51bWJlciIsYjp0aGlzLk5SLHI6MH07dGhpcy5DTk09e2NOOiJudW1iZXIiLGI6dGhpcy5DTlIscjowfTt0aGlzLkJOTT17Y046Im51bWJlciIsYjp0aGlzLkJOUixyOjB9O3RoaXMuUkVHRVhQX01PREU9e2NOOiJyZWdleHAiLGI6L1wvLyxlOi9cL1tnaW1dKi8saTovXG4vLGM6W3RoaXMuQkUse2I6L1xbLyxlOi9cXS8scjowLGM6W3RoaXMuQkVdfV19O3RoaXMuaW5oZXJpdD1mdW5jdGlvbihxLHIpe3ZhciBvPXt9O2Zvcih2YXIgcCBpbiBxKXtvW3BdPXFbcF19aWYocil7Zm9yKHZhciBwIGluIHIpe29bcF09cltwXX19cmV0dXJuIG99fSgpO2hsanMuTEFOR1VBR0VTLmJhc2g9ZnVuY3Rpb24oYSl7dmFyIGM9e2NOOiJ2YXJpYWJsZSIsYjovXCRbXHdcZCNAXVtcd1xkX10qL307dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjovXCRceyguKj8pXH0vfTt2YXIgZT17Y046InN0cmluZyIsYjovIi8sZTovIi8sYzpbYS5CRSxjLGIse2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6YS5CRX1dLHI6MH07dmFyIGQ9e2NOOiJzdHJpbmciLGI6LycvLGU6LycvLHI6MH07cmV0dXJue2w6Ly0/W2Etel0rLyxrOntrZXl3b3JkOiJpZiB0aGVuIGVsc2UgZWxpZiBmaSBmb3IgYnJlYWsgY29udGludWUgd2hpbGUgaW4gZG8gZG9uZSBleGl0IHJldHVybiBzZXQgZGVjbGFyZSBjYXNlIGVzYWMgZXhwb3J0IGV4ZWMiLGxpdGVyYWw6InRydWUgZmFsc2UiLGJ1aWx0X2luOiJwcmludGYgZWNobyByZWFkIGNkIHB3ZCBwdXNoZCBwb3BkIGRpcnMgbGV0IGV2YWwgdW5zZXQgdHlwZXNldCByZWFkb25seSBnZXRvcHRzIHNvdXJjZSBzaG9wdCBjYWxsZXIgdHlwZSBoYXNoIGJpbmQgaGVscCBzdWRvIixvcGVyYXRvcjoiLW5lIC1lcSAtbHQgLWd0IC1mIC1kIC1lIC1zIC1sIC1hIn0sYzpbe2NOOiJzaGViYW5nIixiOi9eIyFbXlxuXStzaFxzKiQvLHI6MTB9LHtjTjoiZnVuY3Rpb24iLGI6L1x3W1x3XGRfXSpccypcKFxzKlwpXHMqXHsvLHJCOnRydWUsYzpbe2NOOiJ0aXRsZSIsYjovXHdbXHdcZF9dKi99XSxyOjB9LGEuSENNLGEuTk0sZSxkLGMsYl19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jcz1mdW5jdGlvbihhKXtyZXR1cm57azoiYWJzdHJhY3QgYXMgYmFzZSBib29sIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNoZWNrZWQgY2xhc3MgY29uc3QgY29udGludWUgZGVjaW1hbCBkZWZhdWx0IGRlbGVnYXRlIGRvIGRvdWJsZSBlbHNlIGVudW0gZXZlbnQgZXhwbGljaXQgZXh0ZXJuIGZhbHNlIGZpbmFsbHkgZml4ZWQgZmxvYXQgZm9yIGZvcmVhY2ggZ290byBpZiBpbXBsaWNpdCBpbiBpbnQgaW50ZXJmYWNlIGludGVybmFsIGlzIGxvY2sgbG9uZyBuYW1lc3BhY2UgbmV3IG51bGwgb2JqZWN0IG9wZXJhdG9yIG91dCBvdmVycmlkZSBwYXJhbXMgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJlYWRvbmx5IHJlZiByZXR1cm4gc2J5dGUgc2VhbGVkIHNob3J0IHNpemVvZiBzdGFja2FsbG9jIHN0YXRpYyBzdHJpbmcgc3RydWN0IHN3aXRjaCB0aGlzIHRocm93IHRydWUgdHJ5IHR5cGVvZiB1aW50IHVsb25nIHVuY2hlY2tlZCB1bnNhZmUgdXNob3J0IHVzaW5nIHZpcnR1YWwgdm9sYXRpbGUgdm9pZCB3aGlsZSBhc3luYyBhd2FpdCBhc2NlbmRpbmcgZGVzY2VuZGluZyBmcm9tIGdldCBncm91cCBpbnRvIGpvaW4gbGV0IG9yZGVyYnkgcGFydGlhbCBzZWxlY3Qgc2V0IHZhbHVlIHZhciB3aGVyZSB5aWVsZCIsYzpbe2NOOiJjb21tZW50IixiOiIvLy8iLGU6IiQiLHJCOnRydWUsYzpbe2NOOiJ4bWxEb2NUYWciLGI6Ii8vL3w8IS0tfC0tPiJ9LHtjTjoieG1sRG9jVGFnIixiOiI8Lz8iLGU6Ij4ifV19LGEuQ0xDTSxhLkNCTENMTSx7Y046InByZXByb2Nlc3NvciIsYjoiIyIsZToiJCIsazoiaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgcmVnaW9uIGVuZHJlZ2lvbiBwcmFnbWEgY2hlY2tzdW0ifSx7Y046InN0cmluZyIsYjonQCInLGU6JyInLGM6W3tiOiciIid9XX0sYS5BU00sYS5RU00sYS5DTk1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucnVieT1mdW5jdGlvbihlKXt2YXIgYT0iW2EtekEtWl9dW2EtekEtWjAtOV9dKihcXCF8XFw/KT8iO3ZhciBqPSJbYS16QS1aX11cXHcqWyE/PV0/fFstK35dXFxAfDw8fD4+fD1+fD09PT98PD0+fFs8Pl09P3xcXCpcXCp8Wy0vKyVeJip+YHxdfFxcW1xcXT0/Ijt2YXIgZz17a2V5d29yZDoiYW5kIGZhbHNlIHRoZW4gZGVmaW5lZCBtb2R1bGUgaW4gcmV0dXJuIHJlZG8gaWYgQkVHSU4gcmV0cnkgZW5kIGZvciB0cnVlIHNlbGYgd2hlbiBuZXh0IHVudGlsIGRvIGJlZ2luIHVubGVzcyBFTkQgcmVzY3VlIG5pbCBlbHNlIGJyZWFrIHVuZGVmIG5vdCBzdXBlciBjbGFzcyBjYXNlIHJlcXVpcmUgeWllbGQgYWxpYXMgd2hpbGUgZW5zdXJlIGVsc2lmIG9yIGluY2x1ZGUifTt2YXIgYz17Y046InlhcmRvY3RhZyIsYjoiQFtBLVphLXpdKyJ9O3ZhciBrPVt7Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQiLGM6W2NdfSx7Y046ImNvbW1lbnQiLGI6Il5cXD1iZWdpbiIsZToiXlxcPWVuZCIsYzpbY10scjoxMH0se2NOOiJjb21tZW50IixiOiJeX19FTkRfXyIsZToiXFxuJCJ9XTt2YXIgZD17Y046InN1YnN0IixiOiIjXFx7IixlOiJ9IixsOmEsazpnfTt2YXIgaT1bZS5CRSxkXTt2YXIgYj1be2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6aSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOmkscjowfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFwoIixlOiJcXCkiLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcWyIsZToiXFxdIixjOml9LHtjTjoic3RyaW5nIixiOiIlW3F3XT97IixlOiJ9IixjOml9LHtjTjoic3RyaW5nIixiOiIlW3F3XT88IixlOiI+IixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPy8iLGU6Ii8iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/JSIsZToiJSIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8tIixlOiItIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcfCIsZToiXFx8IixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6L1xCXD8oXFxcZHsxLDN9fFxceFtBLUZhLWYwLTldezEsMn18XFx1W0EtRmEtZjAtOV17NH18XFw/XFMpXGIvfV07dmFyIGg9e2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZToiIHwkfDsiLGs6ImRlZiIsYzpbe2NOOiJ0aXRsZSIsYjpqLGw6YSxrOmd9LHtjTjoicGFyYW1zIixiOiJcXCgiLGU6IlxcKSIsbDphLGs6Z31dLmNvbmNhdChrKX07dmFyIGY9ay5jb25jYXQoYi5jb25jYXQoW3tjTjoiY2xhc3MiLGJXSzp0cnVlLGU6IiR8OyIsazoiY2xhc3MgbW9kdWxlIixjOlt7Y046InRpdGxlIixiOiJbQS1aYS16X11cXHcqKDo6XFx3KykqKFxcP3xcXCEpPyIscjowfSx7Y046ImluaGVyaXRhbmNlIixiOiI8XFxzKiIsYzpbe2NOOiJwYXJlbnQiLGI6IigiK2UuSVIrIjo6KT8iK2UuSVJ9XX1dLmNvbmNhdChrKX0saCx7Y046ImNvbnN0YW50IixiOiIoOjopPyhcXGJbQS1aXVxcdyooOjopPykrIixyOjB9LHtjTjoic3ltYm9sIixiOiI6IixjOmIuY29uY2F0KFt7YjpqfV0pLHI6MH0se2NOOiJzeW1ib2wiLGI6YSsiOiIscjowfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscjowfSx7Y046InZhcmlhYmxlIixiOiIoXFwkXFxXKXwoKFxcJHxcXEBcXEA/KShcXHcrKSkifSx7YjoiKCIrZS5SU1IrIilcXHMqIixjOmsuY29uY2F0KFt7Y046InJlZ2V4cCIsYjoiLyIsZToiL1thLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJ7IixlOiJ9W2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlclxcKCIsZToiXFwpW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlciEiLGU6IiFbYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyXFxbIixlOiJcXF1bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX1dKSxyOjB9XSkpO2QuYz1mO2guY1sxXS5jPWY7cmV0dXJue2w6YSxrOmcsYzpmfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuZGlmZj1mdW5jdGlvbihhKXtyZXR1cm57Yzpbe2NOOiJjaHVuayIsYjoiXlxcQFxcQCArXFwtXFxkKyxcXGQrICtcXCtcXGQrLFxcZCsgK1xcQFxcQCQiLHI6MTB9LHtjTjoiY2h1bmsiLGI6Il5cXCpcXCpcXCogK1xcZCssXFxkKyArXFwqXFwqXFwqXFwqJCIscjoxMH0se2NOOiJjaHVuayIsYjoiXlxcLVxcLVxcLSArXFxkKyxcXGQrICtcXC1cXC1cXC1cXC0kIixyOjEwfSx7Y046ImhlYWRlciIsYjoiSW5kZXg6ICIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiI9PT09PSIsZToiPT09PT0kIn0se2NOOiJoZWFkZXIiLGI6Il5cXC1cXC1cXC0iLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXlxcKnszfSAiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXlxcK1xcK1xcKyIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJcXCp7NX0iLGU6IlxcKns1fSQifSx7Y046ImFkZGl0aW9uIixiOiJeXFwrIixlOiIkIn0se2NOOiJkZWxldGlvbiIsYjoiXlxcLSIsZToiJCJ9LHtjTjoiY2hhbmdlIixiOiJeXFwhIixlOiIkIn1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuamF2YXNjcmlwdD1mdW5jdGlvbihhKXtyZXR1cm57azp7a2V5d29yZDoiaW4gaWYgZm9yIHdoaWxlIGZpbmFsbHkgdmFyIG5ldyBmdW5jdGlvbiBkbyByZXR1cm4gdm9pZCBlbHNlIGJyZWFrIGNhdGNoIGluc3RhbmNlb2Ygd2l0aCB0aHJvdyBjYXNlIGRlZmF1bHQgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHR5cGVvZiBkZWxldGUgbGV0IHlpZWxkIGNvbnN0IixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIE5hTiBJbmZpbml0eSJ9LGM6W2EuQVNNLGEuUVNNLGEuQ0xDTSxhLkNCTENMTSxhLkNOTSx7YjoiKCIrYS5SU1IrInxcXGIoY2FzZXxyZXR1cm58dGhyb3cpXFxiKVxccyoiLGs6InJldHVybiB0aHJvdyBjYXNlIixjOlthLkNMQ00sYS5DQkxDTE0sYS5SRUdFWFBfTU9ERSx7YjovPC8sZTovPjsvLHNMOiJ4bWwifV0scjowfSx7Y046ImZ1bmN0aW9uIixiV0s6dHJ1ZSxlOi97LyxrOiJmdW5jdGlvbiIsYzpbe2NOOiJ0aXRsZSIsYjovW0EtWmEteiRfXVswLTlBLVphLXokX10qL30se2NOOiJwYXJhbXMiLGI6L1woLyxlOi9cKS8sYzpbYS5DTENNLGEuQ0JMQ0xNXSxpOi9bIidcKF0vfV0saTovXFt8JS99XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnhtbD1mdW5jdGlvbihhKXt2YXIgYz0iW0EtWmEtejAtOVxcLl86LV0rIjt2YXIgYj17ZVc6dHJ1ZSxyOjAsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6YyxyOjB9LHtiOic9IicsckI6dHJ1ZSxlOiciJyxjOlt7Y046InZhbHVlIixiOiciJyxlVzp0cnVlfV19LHtiOiI9JyIsckI6dHJ1ZSxlOiInIixjOlt7Y046InZhbHVlIixiOiInIixlVzp0cnVlfV19LHtiOiI9IixjOlt7Y046InZhbHVlIixiOiJbXlxccy8+XSsifV19XX07cmV0dXJue2NJOnRydWUsYzpbe2NOOiJwaSIsYjoiPFxcPyIsZToiXFw/PiIscjoxMH0se2NOOiJkb2N0eXBlIixiOiI8IURPQ1RZUEUiLGU6Ij4iLHI6MTAsYzpbe2I6IlxcWyIsZToiXFxdIn1dfSx7Y046ImNvbW1lbnQiLGI6IjwhLS0iLGU6Ii0tPiIscjoxMH0se2NOOiJjZGF0YSIsYjoiPFxcIVxcW0NEQVRBXFxbIixlOiJcXF1cXF0+IixyOjEwfSx7Y046InRhZyIsYjoiPHN0eWxlKD89XFxzfD58JCkiLGU6Ij4iLGs6e3RpdGxlOiJzdHlsZSJ9LGM6W2JdLHN0YXJ0czp7ZToiPC9zdHlsZT4iLHJFOnRydWUsc0w6ImNzcyJ9fSx7Y046InRhZyIsYjoiPHNjcmlwdCg/PVxcc3w+fCQpIixlOiI+IixrOnt0aXRsZToic2NyaXB0In0sYzpbYl0sc3RhcnRzOntlOiI8XC9zY3JpcHQ+IixyRTp0cnVlLHNMOiJqYXZhc2NyaXB0In19LHtiOiI8JSIsZToiJT4iLHNMOiJ2YnNjcmlwdCJ9LHtjTjoidGFnIixiOiI8Lz8iLGU6Ii8/PiIscjowLGM6W3tjTjoidGl0bGUiLGI6IlteIC8+PF0rIn0sYl19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLm1hcmtkb3duPWZ1bmN0aW9uKGEpe3JldHVybntjOlt7Y046ImhlYWRlciIsYjoiXiN7MSwzfSIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeLis/XFxuWz0tXXsyLH0kIn0se2I6IjwiLGU6Ij4iLHNMOiJ4bWwiLHI6MH0se2NOOiJidWxsZXQiLGI6Il4oWyorLV18KFxcZCtcXC4pKVxccysifSx7Y046InN0cm9uZyIsYjoiWypfXXsyfS4rP1sqX117Mn0ifSx7Y046ImVtcGhhc2lzIixiOiJcXCouKz9cXCoifSx7Y046ImVtcGhhc2lzIixiOiJfLis/XyIscjowfSx7Y046ImJsb2NrcXVvdGUiLGI6Il4+XFxzKyIsZToiJCJ9LHtjTjoiY29kZSIsYjoiYC4rP2AifSx7Y046ImNvZGUiLGI6Il4gICAgIixlOiIkIixyOjB9LHtjTjoiaG9yaXpvbnRhbF9ydWxlIixiOiJeLXszLH0iLGU6IiQifSx7YjoiXFxbLis/XFxdXFwoLis/XFwpIixyQjp0cnVlLGM6W3tjTjoibGlua19sYWJlbCIsYjoiXFxbLitcXF0ifSx7Y046ImxpbmtfdXJsIixiOiJcXCgiLGU6IlxcKSIsZUI6dHJ1ZSxlRTp0cnVlfV19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmNzcz1mdW5jdGlvbihhKXt2YXIgYj0iW2EtekEtWi1dW2EtekEtWjAtOV8tXSoiO3ZhciBjPXtjTjoiZnVuY3Rpb24iLGI6YisiXFwoIixlOiJcXCkiLGM6WyJzZWxmIixhLk5NLGEuQVNNLGEuUVNNXX07cmV0dXJue2NJOnRydWUsaToiWz0vfCddIixjOlthLkNCTENMTSx7Y046ImlkIixiOiJcXCNbQS1aYS16MC05Xy1dKyJ9LHtjTjoiY2xhc3MiLGI6IlxcLltBLVphLXowLTlfLV0rIixyOjB9LHtjTjoiYXR0cl9zZWxlY3RvciIsYjoiXFxbIixlOiJcXF0iLGk6IiQifSx7Y046InBzZXVkbyIsYjoiOig6KT9bYS16QS1aMC05XFxfXFwtXFwrXFwoXFwpXFxcIlxcJ10rIn0se2NOOiJhdF9ydWxlIixiOiJAKGZvbnQtZmFjZXxwYWdlKSIsbDoiW2Etei1dKyIsazoiZm9udC1mYWNlIHBhZ2UifSx7Y046ImF0X3J1bGUiLGI6IkAiLGU6Ilt7O10iLGM6W3tjTjoia2V5d29yZCIsYjovXFMrL30se2I6L1xzLyxlVzp0cnVlLGVFOnRydWUscjowLGM6W2MsYS5BU00sYS5RU00sYS5OTV19XX0se2NOOiJ0YWciLGI6YixyOjB9LHtjTjoicnVsZXMiLGI6InsiLGU6In0iLGk6IlteXFxzXSIscjowLGM6W2EuQ0JMQ0xNLHtjTjoicnVsZSIsYjoiW15cXHNdIixyQjp0cnVlLGU6IjsiLGVXOnRydWUsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6IltBLVpcXF9cXC5cXC1dKyIsZToiOiIsZUU6dHJ1ZSxpOiJbXlxcc10iLHN0YXJ0czp7Y046InZhbHVlIixlVzp0cnVlLGVFOnRydWUsYzpbYyxhLk5NLGEuUVNNLGEuQVNNLGEuQ0JMQ0xNLHtjTjoiaGV4Y29sb3IiLGI6IiNbMC05QS1GYS1mXSsifSx7Y046ImltcG9ydGFudCIsYjoiIWltcG9ydGFudCJ9XX19XX1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5odHRwPWZ1bmN0aW9uKGEpe3JldHVybntpOiJcXFMiLGM6W3tjTjoic3RhdHVzIixiOiJeSFRUUC9bMC05XFwuXSsiLGU6IiQiLGM6W3tjTjoibnVtYmVyIixiOiJcXGJcXGR7M31cXGIifV19LHtjTjoicmVxdWVzdCIsYjoiXltBLVpdKyAoLio/KSBIVFRQL1swLTlcXC5dKyQiLHJCOnRydWUsZToiJCIsYzpbe2NOOiJzdHJpbmciLGI6IiAiLGU6IiAiLGVCOnRydWUsZUU6dHJ1ZX1dfSx7Y046ImF0dHJpYnV0ZSIsYjoiXlxcdyIsZToiOiAiLGVFOnRydWUsaToiXFxufFxcc3w9IixzdGFydHM6e2NOOiJzdHJpbmciLGU6IiQifX0se2I6IlxcblxcbiIsc3RhcnRzOntzTDoiIixlVzp0cnVlfX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuamF2YT1mdW5jdGlvbihhKXtyZXR1cm57azoiZmFsc2Ugc3luY2hyb25pemVkIGludCBhYnN0cmFjdCBmbG9hdCBwcml2YXRlIGNoYXIgYm9vbGVhbiBzdGF0aWMgbnVsbCBpZiBjb25zdCBmb3IgdHJ1ZSB3aGlsZSBsb25nIHRocm93IHN0cmljdGZwIGZpbmFsbHkgcHJvdGVjdGVkIGltcG9ydCBuYXRpdmUgZmluYWwgcmV0dXJuIHZvaWQgZW51bSBlbHNlIGJyZWFrIHRyYW5zaWVudCBuZXcgY2F0Y2ggaW5zdGFuY2VvZiBieXRlIHN1cGVyIHZvbGF0aWxlIGNhc2UgYXNzZXJ0IHNob3J0IHBhY2thZ2UgZGVmYXVsdCBkb3VibGUgcHVibGljIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0aHJvd3MiLGM6W3tjTjoiamF2YWRvYyIsYjoiL1xcKlxcKiIsZToiXFwqLyIsYzpbe2NOOiJqYXZhZG9jdGFnIixiOiIoXnxcXHMpQFtBLVphLXpdKyJ9XSxyOjEwfSxhLkNMQ00sYS5DQkxDTE0sYS5BU00sYS5RU00se2NOOiJjbGFzcyIsYldLOnRydWUsZToieyIsazoiY2xhc3MgaW50ZXJmYWNlIixlRTp0cnVlLGk6IjoiLGM6W3tiV0s6dHJ1ZSxrOiJleHRlbmRzIGltcGxlbWVudHMiLHI6MTB9LHtjTjoidGl0bGUiLGI6YS5VSVJ9XX0sYS5DTk0se2NOOiJhbm5vdGF0aW9uIixiOiJAW0EtWmEtel0rIn1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucGhwPWZ1bmN0aW9uKGEpe3ZhciBlPXtjTjoidmFyaWFibGUiLGI6IlxcJCtbYS16QS1aX1x4N2YtXHhmZl1bYS16QS1aMC05X1x4N2YtXHhmZl0qIn07dmFyIGI9W2EuaW5oZXJpdChhLkFTTSx7aTpudWxsfSksYS5pbmhlcml0KGEuUVNNLHtpOm51bGx9KSx7Y046InN0cmluZyIsYjonYiInLGU6JyInLGM6W2EuQkVdfSx7Y046InN0cmluZyIsYjoiYiciLGU6IiciLGM6W2EuQkVdfV07dmFyIGM9W2EuQk5NLGEuQ05NXTt2YXIgZD17Y046InRpdGxlIixiOmEuVUlSfTtyZXR1cm57Y0k6dHJ1ZSxsOmEuVUlSLGs6ImFuZCBpbmNsdWRlX29uY2UgbGlzdCBhYnN0cmFjdCBnbG9iYWwgcHJpdmF0ZSBlY2hvIGludGVyZmFjZSBhcyBzdGF0aWMgZW5kc3dpdGNoIGFycmF5IG51bGwgaWYgZW5kd2hpbGUgb3IgY29uc3QgZm9yIGVuZGZvcmVhY2ggc2VsZiB2YXIgd2hpbGUgaXNzZXQgcHVibGljIHByb3RlY3RlZCBleGl0IGZvcmVhY2ggdGhyb3cgZWxzZWlmIGluY2x1ZGUgX19GSUxFX18gZW1wdHkgcmVxdWlyZV9vbmNlIGRvIHhvciByZXR1cm4gaW1wbGVtZW50cyBwYXJlbnQgY2xvbmUgdXNlIF9fQ0xBU1NfXyBfX0xJTkVfXyBlbHNlIGJyZWFrIHByaW50IGV2YWwgbmV3IGNhdGNoIF9fTUVUSE9EX18gY2FzZSBleGNlcHRpb24gZGVmYXVsdCBkaWUgcmVxdWlyZSBfX0ZVTkNUSU9OX18gZW5kZGVjbGFyZSBmaW5hbCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgZW5kZm9yIGVuZGlmIGRlY2xhcmUgdW5zZXQgdHJ1ZSBmYWxzZSBuYW1lc3BhY2UgdHJhaXQgZ290byBpbnN0YW5jZW9mIGluc3RlYWRvZiBfX0RJUl9fIF9fTkFNRVNQQUNFX18geWllbGQgZmluYWxseSIsYzpbYS5DTENNLGEuSENNLHtjTjoiY29tbWVudCIsYjoiL1xcKiIsZToiXFwqLyIsYzpbe2NOOiJwaHBkb2MiLGI6Ilxcc0BbQS1aYS16XSsifV19LHtjTjoiY29tbWVudCIsYjoiX19oYWx0X2NvbXBpbGVyLis/OyIsZVc6dHJ1ZSxrOiJfX2hhbHRfY29tcGlsZXIiLGw6YS5VSVJ9LHtjTjoic3RyaW5nIixiOiI8PDxbJ1wiXT9cXHcrWydcIl0/JCIsZToiXlxcdys7IixjOlthLkJFXX0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IjxcXD9waHAiLHI6MTB9LHtjTjoicHJlcHJvY2Vzc29yIixiOiJcXD8+In0sZSx7Y046ImZ1bmN0aW9uIixiV0s6dHJ1ZSxlOiJ7IixrOiJmdW5jdGlvbiIsaToiXFwkfFxcW3wlIixjOltkLHtjTjoicGFyYW1zIixiOiJcXCgiLGU6IlxcKSIsYzpbInNlbGYiLGUsYS5DQkxDTE1dLmNvbmNhdChiKS5jb25jYXQoYyl9XX0se2NOOiJjbGFzcyIsYldLOnRydWUsZToieyIsazoiY2xhc3MiLGk6Ils6XFwoXFwkXSIsYzpbe2JXSzp0cnVlLGVXOnRydWUsazoiZXh0ZW5kcyIsYzpbZF19LGRdfSx7YjoiPT4ifV0uY29uY2F0KGIpLmNvbmNhdChjKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnB5dGhvbj1mdW5jdGlvbihhKXt2YXIgZj17Y046InByb21wdCIsYjovXig+Pj58XC5cLlwuKSAvfTt2YXIgYz1be2NOOiJzdHJpbmciLGI6Lyh1fGIpP3I/JycnLyxlOi8nJycvLGM6W2ZdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxiKT9yPyIiIi8sZTovIiIiLyxjOltmXSxyOjEwfSx7Y046InN0cmluZyIsYjovKHV8cnx1ciknLyxlOi8nLyxjOlthLkJFXSxyOjEwfSx7Y046InN0cmluZyIsYjovKHV8cnx1cikiLyxlOi8iLyxjOlthLkJFXSxyOjEwfSx7Y046InN0cmluZyIsYjovKGJ8YnIpJy8sZTovJy8sYzpbYS5CRV19LHtjTjoic3RyaW5nIixiOi8oYnxicikiLyxlOi8iLyxjOlthLkJFXX1dLmNvbmNhdChbYS5BU00sYS5RU01dKTt2YXIgZT17Y046InRpdGxlIixiOmEuVUlSfTt2YXIgZD17Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxjOlsic2VsZiIsYS5DTk0sZl0uY29uY2F0KGMpfTt2YXIgYj17YldLOnRydWUsZTovOi8saTovWyR7PTtcbl0vLGM6W2UsZF0scjoxMH07cmV0dXJue2s6e2tleXdvcmQ6ImFuZCBlbGlmIGlzIGdsb2JhbCBhcyBpbiBpZiBmcm9tIHJhaXNlIGZvciBleGNlcHQgZmluYWxseSBwcmludCBpbXBvcnQgcGFzcyByZXR1cm4gZXhlYyBlbHNlIGJyZWFrIG5vdCB3aXRoIGNsYXNzIGFzc2VydCB5aWVsZCB0cnkgd2hpbGUgY29udGludWUgZGVsIG9yIGRlZiBsYW1iZGEgbm9ubG9jYWx8MTAgTm9uZSBUcnVlIEZhbHNlIixidWlsdF9pbjoiRWxsaXBzaXMgTm90SW1wbGVtZW50ZWQifSxpOi8oPFwvfC0+fFw/KS8sYzpjLmNvbmNhdChbZixhLkhDTSxhLmluaGVyaXQoYix7Y046ImZ1bmN0aW9uIixrOiJkZWYifSksYS5pbmhlcml0KGIse2NOOiJjbGFzcyIsazoiY2xhc3MifSksYS5DTk0se2NOOiJkZWNvcmF0b3IiLGI6L0AvLGU6LyQvfSx7YjovXGIocHJpbnR8ZXhlYylcKC99XSl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5zcWw9ZnVuY3Rpb24oYSl7cmV0dXJue2NJOnRydWUsYzpbe2NOOiJvcGVyYXRvciIsYjoiKGJlZ2lufGVuZHxzdGFydHxjb21taXR8cm9sbGJhY2t8c2F2ZXBvaW50fGxvY2t8YWx0ZXJ8Y3JlYXRlfGRyb3B8cmVuYW1lfGNhbGx8ZGVsZXRlfGRvfGhhbmRsZXJ8aW5zZXJ0fGxvYWR8cmVwbGFjZXxzZWxlY3R8dHJ1bmNhdGV8dXBkYXRlfHNldHxzaG93fHByYWdtYXxncmFudClcXGIoPyE6KSIsZToiOyIsZVc6dHJ1ZSxrOntrZXl3b3JkOiJhbGwgcGFydGlhbCBnbG9iYWwgbW9udGggY3VycmVudF90aW1lc3RhbXAgdXNpbmcgZ28gcmV2b2tlIHNtYWxsaW50IGluZGljYXRvciBlbmQtZXhlYyBkaXNjb25uZWN0IHpvbmUgd2l0aCBjaGFyYWN0ZXIgYXNzZXJ0aW9uIHRvIGFkZCBjdXJyZW50X3VzZXIgdXNhZ2UgaW5wdXQgbG9jYWwgYWx0ZXIgbWF0Y2ggY29sbGF0ZSByZWFsIHRoZW4gcm9sbGJhY2sgZ2V0IHJlYWQgdGltZXN0YW1wIHNlc3Npb25fdXNlciBub3QgaW50ZWdlciBiaXQgdW5pcXVlIGRheSBtaW51dGUgZGVzYyBpbnNlcnQgZXhlY3V0ZSBsaWtlIGlsaWtlfDIgbGV2ZWwgZGVjaW1hbCBkcm9wIGNvbnRpbnVlIGlzb2xhdGlvbiBmb3VuZCB3aGVyZSBjb25zdHJhaW50cyBkb21haW4gcmlnaHQgbmF0aW9uYWwgc29tZSBtb2R1bGUgdHJhbnNhY3Rpb24gcmVsYXRpdmUgc2Vjb25kIGNvbm5lY3QgZXNjYXBlIGNsb3NlIHN5c3RlbV91c2VyIGZvciBkZWZlcnJlZCBzZWN0aW9uIGNhc3QgY3VycmVudCBzcWxzdGF0ZSBhbGxvY2F0ZSBpbnRlcnNlY3QgZGVhbGxvY2F0ZSBudW1lcmljIHB1YmxpYyBwcmVzZXJ2ZSBmdWxsIGdvdG8gaW5pdGlhbGx5IGFzYyBubyBrZXkgb3V0cHV0IGNvbGxhdGlvbiBncm91cCBieSB1bmlvbiBzZXNzaW9uIGJvdGggbGFzdCBsYW5ndWFnZSBjb25zdHJhaW50IGNvbHVtbiBvZiBzcGFjZSBmb3JlaWduIGRlZmVycmFibGUgcHJpb3IgY29ubmVjdGlvbiB1bmtub3duIGFjdGlvbiBjb21taXQgdmlldyBvciBmaXJzdCBpbnRvIGZsb2F0IHllYXIgcHJpbWFyeSBjYXNjYWRlZCBleGNlcHQgcmVzdHJpY3Qgc2V0IHJlZmVyZW5jZXMgbmFtZXMgdGFibGUgb3V0ZXIgb3BlbiBzZWxlY3Qgc2l6ZSBhcmUgcm93cyBmcm9tIHByZXBhcmUgZGlzdGluY3QgbGVhZGluZyBjcmVhdGUgb25seSBuZXh0IGlubmVyIGF1dGhvcml6YXRpb24gc2NoZW1hIGNvcnJlc3BvbmRpbmcgb3B0aW9uIGRlY2xhcmUgcHJlY2lzaW9uIGltbWVkaWF0ZSBlbHNlIHRpbWV6b25lX21pbnV0ZSBleHRlcm5hbCB2YXJ5aW5nIHRyYW5zbGF0aW9uIHRydWUgY2FzZSBleGNlcHRpb24gam9pbiBob3VyIGRlZmF1bHQgZG91YmxlIHNjcm9sbCB2YWx1ZSBjdXJzb3IgZGVzY3JpcHRvciB2YWx1ZXMgZGVjIGZldGNoIHByb2NlZHVyZSBkZWxldGUgYW5kIGZhbHNlIGludCBpcyBkZXNjcmliZSBjaGFyIGFzIGF0IGluIHZhcmNoYXIgbnVsbCB0cmFpbGluZyBhbnkgYWJzb2x1dGUgY3VycmVudF90aW1lIGVuZCBncmFudCBwcml2aWxlZ2VzIHdoZW4gY3Jvc3MgY2hlY2sgd3JpdGUgY3VycmVudF9kYXRlIHBhZCBiZWdpbiB0ZW1wb3JhcnkgZXhlYyB0aW1lIHVwZGF0ZSBjYXRhbG9nIHVzZXIgc3FsIGRhdGUgb24gaWRlbnRpdHkgdGltZXpvbmVfaG91ciBuYXR1cmFsIHdoZW5ldmVyIGludGVydmFsIHdvcmsgb3JkZXIgY2FzY2FkZSBkaWFnbm9zdGljcyBuY2hhciBoYXZpbmcgbGVmdCBjYWxsIGRvIGhhbmRsZXIgbG9hZCByZXBsYWNlIHRydW5jYXRlIHN0YXJ0IGxvY2sgc2hvdyBwcmFnbWEgZXhpc3RzIG51bWJlciB0cmlnZ2VyIGlmIGJlZm9yZSBhZnRlciBlYWNoIHJvdyIsYWdncmVnYXRlOiJjb3VudCBzdW0gbWluIG1heCBhdmcifSxjOlt7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbYS5CRSx7YjoiJycifV0scjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbYS5CRSx7YjonIiInfV0scjowfSx7Y046InN0cmluZyIsYjoiYCIsZToiYCIsYzpbYS5CRV19LGEuQ05NXX0sYS5DQkxDTE0se2NOOiJjb21tZW50IixiOiItLSIsZToiJCJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmluaT1mdW5jdGlvbihhKXtyZXR1cm57Y0k6dHJ1ZSxpOiJbXlxcc10iLGM6W3tjTjoiY29tbWVudCIsYjoiOyIsZToiJCJ9LHtjTjoidGl0bGUiLGI6Il5cXFsiLGU6IlxcXSJ9LHtjTjoic2V0dGluZyIsYjoiXlthLXowLTlcXFtcXF1fLV0rWyBcXHRdKj1bIFxcdF0qIixlOiIkIixjOlt7Y046InZhbHVlIixlVzp0cnVlLGs6Im9uIG9mZiB0cnVlIGZhbHNlIHllcyBubyIsYzpbYS5RU00sYS5OTV0scjowfV19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnBlcmw9ZnVuY3Rpb24oZSl7dmFyIGE9ImdldHB3ZW50IGdldHNlcnZlbnQgcXVvdGVtZXRhIG1zZ3JjdiBzY2FsYXIga2lsbCBkYm1jbG9zZSB1bmRlZiBsYyBtYSBzeXN3cml0ZSB0ciBzZW5kIHVtYXNrIHN5c29wZW4gc2htd3JpdGUgdmVjIHF4IHV0aW1lIGxvY2FsIG9jdCBzZW1jdGwgbG9jYWx0aW1lIHJlYWRwaXBlIGRvIHJldHVybiBmb3JtYXQgcmVhZCBzcHJpbnRmIGRibW9wZW4gcG9wIGdldHBncnAgbm90IGdldHB3bmFtIHJld2luZGRpciBxcWZpbGVubyBxdyBlbmRwcm90b2VudCB3YWl0IHNldGhvc3RlbnQgYmxlc3Mgc3wwIG9wZW5kaXIgY29udGludWUgZWFjaCBzbGVlcCBlbmRncmVudCBzaHV0ZG93biBkdW1wIGNob21wIGNvbm5lY3QgZ2V0c29ja25hbWUgZGllIHNvY2tldHBhaXIgY2xvc2UgZmxvY2sgZXhpc3RzIGluZGV4IHNobWdldHN1YiBmb3IgZW5kcHdlbnQgcmVkbyBsc3RhdCBtc2djdGwgc2V0cGdycCBhYnMgZXhpdCBzZWxlY3QgcHJpbnQgcmVmIGdldGhvc3RieWFkZHIgdW5zaGlmdCBmY250bCBzeXNjYWxsIGdvdG8gZ2V0bmV0YnlhZGRyIGpvaW4gZ210aW1lIHN5bWxpbmsgc2VtZ2V0IHNwbGljZSB4fDAgZ2V0cGVlcm5hbWUgcmVjdiBsb2cgc2V0c29ja29wdCBjb3MgbGFzdCByZXZlcnNlIGdldGhvc3RieW5hbWUgZ2V0Z3JuYW0gc3R1ZHkgZm9ybWxpbmUgZW5kaG9zdGVudCB0aW1lcyBjaG9wIGxlbmd0aCBnZXRob3N0ZW50IGdldG5ldGVudCBwYWNrIGdldHByb3RvZW50IGdldHNlcnZieW5hbWUgcmFuZCBta2RpciBwb3MgY2htb2QgeXwwIHN1YnN0ciBlbmRuZXRlbnQgcHJpbnRmIG5leHQgb3BlbiBtc2dzbmQgcmVhZGRpciB1c2UgdW5saW5rIGdldHNvY2tvcHQgZ2V0cHJpb3JpdHkgcmluZGV4IHdhbnRhcnJheSBoZXggc3lzdGVtIGdldHNlcnZieXBvcnQgZW5kc2VydmVudCBpbnQgY2hyIHVudGllIHJtZGlyIHByb3RvdHlwZSB0ZWxsIGxpc3RlbiBmb3JrIHNobXJlYWQgdWNmaXJzdCBzZXRwcm90b2VudCBlbHNlIHN5c3NlZWsgbGluayBnZXRncmdpZCBzaG1jdGwgd2FpdHBpZCB1bnBhY2sgZ2V0bmV0YnluYW1lIHJlc2V0IGNoZGlyIGdyZXAgc3BsaXQgcmVxdWlyZSBjYWxsZXIgbGNmaXJzdCB1bnRpbCB3YXJuIHdoaWxlIHZhbHVlcyBzaGlmdCB0ZWxsZGlyIGdldHB3dWlkIG15IGdldHByb3RvYnludW1iZXIgZGVsZXRlIGFuZCBzb3J0IHVjIGRlZmluZWQgc3JhbmQgYWNjZXB0IHBhY2thZ2Ugc2Vla2RpciBnZXRwcm90b2J5bmFtZSBzZW1vcCBvdXIgcmVuYW1lIHNlZWsgaWYgcXwwIGNocm9vdCBzeXNyZWFkIHNldHB3ZW50IG5vIGNyeXB0IGdldGMgY2hvd24gc3FydCB3cml0ZSBzZXRuZXRlbnQgc2V0cHJpb3JpdHkgZm9yZWFjaCB0aWUgc2luIG1zZ2dldCBtYXAgc3RhdCBnZXRsb2dpbiB1bmxlc3MgZWxzaWYgdHJ1bmNhdGUgZXhlYyBrZXlzIGdsb2IgdGllZCBjbG9zZWRpcmlvY3RsIHNvY2tldCByZWFkbGluayBldmFsIHhvciByZWFkbGluZSBiaW5tb2RlIHNldHNlcnZlbnQgZW9mIG9yZCBiaW5kIGFsYXJtIHBpcGUgYXRhbjIgZ2V0Z3JlbnQgZXhwIHRpbWUgcHVzaCBzZXRncmVudCBndCBsdCBvciBuZSBtfDAgYnJlYWsgZ2l2ZW4gc2F5IHN0YXRlIHdoZW4iO3ZhciBkPXtjTjoic3Vic3QiLGI6IlskQF1cXHsiLGU6IlxcfSIsazphLHI6MTB9O3ZhciBiPXtjTjoidmFyaWFibGUiLGI6IlxcJFxcZCJ9O3ZhciBpPXtjTjoidmFyaWFibGUiLGI6IltcXCRcXCVcXEBcXCpdKFxcXlxcd1xcYnwjXFx3KyhcXDpcXDpcXHcrKSp8W15cXHNcXHd7XXx7XFx3K318XFx3KyhcXDpcXDpcXHcqKSopIn07dmFyIGY9W2UuQkUsZCxiLGldO3ZhciBoPXtiOiItPiIsYzpbe2I6ZS5JUn0se2I6InsiLGU6In0ifV19O3ZhciBnPXtjTjoiY29tbWVudCIsYjoiXihfX0VORF9ffF9fREFUQV9fKSIsZToiXFxuJCIscjo1fTt2YXIgYz1bYixpLGUuSENNLGcse2NOOiJjb21tZW50IixiOiJeXFw9XFx3IixlOiJcXD1jdXQiLGVXOnRydWV9LGgse2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcKCIsZToiXFwpIixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFxbIixlOiJcXF0iLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXHsiLGU6IlxcfSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcfCIsZToiXFx8IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFw8IixlOiJcXD4iLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxd1xccytxIixlOiJxIixjOmYscjo1fSx7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbZS5CRV0scjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpmLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6W2UuQkVdfSx7Y046InN0cmluZyIsYjoie1xcdyt9IixyOjB9LHtjTjoic3RyaW5nIixiOiItP1xcdytcXHMqXFw9XFw+IixyOjB9LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtiOiIoIitlLlJTUisifFxcYihzcGxpdHxyZXR1cm58cHJpbnR8cmV2ZXJzZXxncmVwKVxcYilcXHMqIixrOiJzcGxpdCByZXR1cm4gcHJpbnQgcmV2ZXJzZSBncmVwIixyOjAsYzpbZS5IQ00sZyx7Y046InJlZ2V4cCIsYjoiKHN8dHJ8eSkvKFxcXFwufFteL10pKi8oXFxcXC58W14vXSkqL1thLXpdKiIscjoxMH0se2NOOiJyZWdleHAiLGI6IihtfHFyKT8vIixlOiIvW2Etel0qIixjOltlLkJFXSxyOjB9XX0se2NOOiJzdWIiLGJXSzp0cnVlLGU6IihcXHMqXFwoLio/XFwpKT9bO3tdIixrOiJzdWIiLHI6NX0se2NOOiJvcGVyYXRvciIsYjoiLVxcd1xcYiIscjowfV07ZC5jPWM7aC5jWzFdLmM9YztyZXR1cm57azphLGM6Y319KGhsanMpO2hsanMuTEFOR1VBR0VTLm9iamVjdGl2ZWM9ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImludCBmbG9hdCB3aGlsZSBwcml2YXRlIGNoYXIgY2F0Y2ggZXhwb3J0IHNpemVvZiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBmb3IgdW5pb24gdW5zaWduZWQgbG9uZyB2b2xhdGlsZSBzdGF0aWMgcHJvdGVjdGVkIGJvb2wgbXV0YWJsZSBpZiBwdWJsaWMgZG8gcmV0dXJuIGdvdG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgZXh0ZXJuIGFzbSBjYXNlIHNob3J0IGRlZmF1bHQgZG91YmxlIHRocm93IHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgcmVhZG9ubHkgYXNzaWduIHByb3BlcnR5IHNlbGYgc3luY2hyb25pemVkIGVuZCBzeW50aGVzaXplIGlkIG9wdGlvbmFsIHJlcXVpcmVkIG5vbmF0b21pYyBzdXBlciB1bmljaGFyIGZpbmFsbHkgZHluYW1pYyBJQk91dGxldCBJQkFjdGlvbiBzZWxlY3RvciBzdHJvbmcgd2VhayByZWFkb25seSIsbGl0ZXJhbDoiZmFsc2UgdHJ1ZSBGQUxTRSBUUlVFIG5pbCBZRVMgTk8gTlVMTCIsYnVpbHRfaW46Ik5TU3RyaW5nIE5TRGljdGlvbmFyeSBDR1JlY3QgQ0dQb2ludCBVSUJ1dHRvbiBVSUxhYmVsIFVJVGV4dFZpZXcgVUlXZWJWaWV3IE1LTWFwVmlldyBVSVNlZ21lbnRlZENvbnRyb2wgTlNPYmplY3QgVUlUYWJsZVZpZXdEZWxlZ2F0ZSBVSVRhYmxlVmlld0RhdGFTb3VyY2UgTlNUaHJlYWQgVUlBY3Rpdml0eUluZGljYXRvciBVSVRhYmJhciBVSVRvb2xCYXIgVUlCYXJCdXR0b25JdGVtIFVJSW1hZ2VWaWV3IE5TQXV0b3JlbGVhc2VQb29sIFVJVGFibGVWaWV3IEJPT0wgTlNJbnRlZ2VyIENHRmxvYXQgTlNFeGNlcHRpb24gTlNMb2cgTlNNdXRhYmxlU3RyaW5nIE5TTXV0YWJsZUFycmF5IE5TTXV0YWJsZURpY3Rpb25hcnkgTlNVUkwgTlNJbmRleFBhdGggQ0dTaXplIFVJVGFibGVWaWV3Q2VsbCBVSVZpZXcgVUlWaWV3Q29udHJvbGxlciBVSU5hdmlnYXRpb25CYXIgVUlOYXZpZ2F0aW9uQ29udHJvbGxlciBVSVRhYkJhckNvbnRyb2xsZXIgVUlQb3BvdmVyQ29udHJvbGxlciBVSVBvcG92ZXJDb250cm9sbGVyRGVsZWdhdGUgVUlJbWFnZSBOU051bWJlciBVSVNlYXJjaEJhciBOU0ZldGNoZWRSZXN1bHRzQ29udHJvbGxlciBOU0ZldGNoZWRSZXN1bHRzQ2hhbmdlVHlwZSBVSVNjcm9sbFZpZXcgVUlTY3JvbGxWaWV3RGVsZWdhdGUgVUlFZGdlSW5zZXRzIFVJQ29sb3IgVUlGb250IFVJQXBwbGljYXRpb24gTlNOb3RGb3VuZCBOU05vdGlmaWNhdGlvbkNlbnRlciBOU05vdGlmaWNhdGlvbiBVSUxvY2FsTm90aWZpY2F0aW9uIE5TQnVuZGxlIE5TRmlsZU1hbmFnZXIgTlNUaW1lSW50ZXJ2YWwgTlNEYXRlIE5TQ2FsZW5kYXIgTlNVc2VyRGVmYXVsdHMgVUlXaW5kb3cgTlNSYW5nZSBOU0FycmF5IE5TRXJyb3IgTlNVUkxSZXF1ZXN0IE5TVVJMQ29ubmVjdGlvbiBVSUludGVyZmFjZU9yaWVudGF0aW9uIE1QTW92aWVQbGF5ZXJDb250cm9sbGVyIGRpc3BhdGNoX29uY2VfdCBkaXNwYXRjaF9xdWV1ZV90IGRpc3BhdGNoX3N5bmMgZGlzcGF0Y2hfYXN5bmMgZGlzcGF0Y2hfb25jZSJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLkNOTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJyIsZToiW15cXFxcXSciLGk6IlteXFxcXF1bXiddIn0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiNpbXBvcnQiLGU6IiQiLGM6W3tjTjoidGl0bGUiLGI6JyInLGU6JyInfSx7Y046InRpdGxlIixiOiI8IixlOiI+In1dfSx7Y046InByZXByb2Nlc3NvciIsYjoiIyIsZToiJCJ9LHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6Iih7fCQpIixrOiJpbnRlcmZhY2UgY2xhc3MgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24iLGM6W3tjTjoiaWQiLGI6YS5VSVJ9XX0se2NOOiJ2YXJpYWJsZSIsYjoiXFwuIithLlVJUixyOjB9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmNvZmZlZXNjcmlwdD1mdW5jdGlvbihjKXt2YXIgYj17a2V5d29yZDoiaW4gaWYgZm9yIHdoaWxlIGZpbmFsbHkgbmV3IGRvIHJldHVybiBlbHNlIGJyZWFrIGNhdGNoIGluc3RhbmNlb2YgdGhyb3cgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHR5cGVvZiBkZWxldGUgZGVidWdnZXIgc3VwZXIgdGhlbiB1bmxlc3MgdW50aWwgbG9vcCBvZiBieSB3aGVuIGFuZCBvciBpcyBpc250IG5vdCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCB5ZXMgbm8gb24gb2ZmIixyZXNlcnZlZDoiY2FzZSBkZWZhdWx0IGZ1bmN0aW9uIHZhciB2b2lkIHdpdGggY29uc3QgbGV0IGVudW0gZXhwb3J0IGltcG9ydCBuYXRpdmUgX19oYXNQcm9wIF9fZXh0ZW5kcyBfX3NsaWNlIF9fYmluZCBfX2luZGV4T2YiLGJ1aWx0X2luOiJucG0gcmVxdWlyZSBjb25zb2xlIHByaW50IG1vZHVsZSBleHBvcnRzIGdsb2JhbCB3aW5kb3cgZG9jdW1lbnQifTt2YXIgYT0iW0EtWmEteiRfXVswLTlBLVphLXokX10qIjt2YXIgZj17Y046InRpdGxlIixiOmF9O3ZhciBlPXtjTjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGs6Yix9O3ZhciBkPVtjLkJOTSxjLmluaGVyaXQoYy5DTk0se3N0YXJ0czp7ZToiKFxccyovKT8iLHI6MH19KSx7Y046InN0cmluZyIsYjoiJycnIixlOiInJyciLGM6W2MuQkVdfSx7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbYy5CRV0scjowfSx7Y046InN0cmluZyIsYjonIiIiJyxlOiciIiInLGM6W2MuQkUsZV19LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOltjLkJFLGVdLHI6MH0se2NOOiJyZWdleHAiLGI6Ii8vLyIsZToiLy8vIixjOltjLkhDTV19LHtjTjoicmVnZXhwIixiOiIvL1tnaW1dKiIscjowfSx7Y046InJlZ2V4cCIsYjoiL1xcUyhcXFxcLnxbXlxcbl0pKj8vW2dpbV0qKD89XFxzfFxcV3wkKSJ9LHtjTjoicHJvcGVydHkiLGI6IkAiK2F9LHtiOiJgIixlOiJgIixlQjp0cnVlLGVFOnRydWUsc0w6ImphdmFzY3JpcHQifV07ZS5jPWQ7cmV0dXJue2s6YixjOmQuY29uY2F0KFt7Y046ImNvbW1lbnQiLGI6IiMjIyIsZToiIyMjIn0sYy5IQ00se2NOOiJmdW5jdGlvbiIsYjoiKCIrYSsiXFxzKj1cXHMqKT8oXFwoLipcXCkpP1xccypbLT1dPiIsZToiWy09XT4iLHJCOnRydWUsYzpbZix7Y046InBhcmFtcyIsYjoiXFwoIixyQjp0cnVlLGM6W3tiOi9cKC8sZTovXCkvLGs6YixjOlsic2VsZiJdLmNvbmNhdChkKX1dfV19LHtjTjoiY2xhc3MiLGJXSzp0cnVlLGs6ImNsYXNzIixlOiIkIixpOiJbOlxcW1xcXV0iLGM6W3tiV0s6dHJ1ZSxrOiJleHRlbmRzIixlVzp0cnVlLGk6IjoiLGM6W2ZdfSxmXX0se2NOOiJhdHRyaWJ1dGUiLGI6YSsiOiIsZToiOiIsckI6dHJ1ZSxlRTp0cnVlfV0pfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubmdpbng9ZnVuY3Rpb24oYil7dmFyIGM9W3tjTjoidmFyaWFibGUiLGI6IlxcJFxcZCsifSx7Y046InZhcmlhYmxlIixiOiJcXCR7IixlOiJ9In0se2NOOiJ2YXJpYWJsZSIsYjoiW1xcJFxcQF0iK2IuVUlSfV07dmFyIGE9e2VXOnRydWUsbDoiW2Etei9fXSsiLGs6e2J1aWx0X2luOiJvbiBvZmYgeWVzIG5vIHRydWUgZmFsc2Ugbm9uZSBibG9ja2VkIGRlYnVnIGluZm8gbm90aWNlIHdhcm4gZXJyb3IgY3JpdCBzZWxlY3QgYnJlYWsgbGFzdCBwZXJtYW5lbnQgcmVkaXJlY3Qga3F1ZXVlIHJ0c2lnIGVwb2xsIHBvbGwgL2Rldi9wb2xsIn0scjowLGk6Ij0+IixjOltiLkhDTSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbYi5CRV0uY29uY2F0KGMpLHI6MH0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2IuQkVdLmNvbmNhdChjKSxyOjB9LHtjTjoidXJsIixiOiIoW2Etel0rKTovIixlOiJcXHMiLGVXOnRydWUsZUU6dHJ1ZX0se2NOOiJyZWdleHAiLGI6Ilxcc1xcXiIsZToiXFxzfHt8OyIsckU6dHJ1ZSxjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoicmVnZXhwIixiOiJ+XFwqP1xccysiLGU6Ilxcc3x7fDsiLHJFOnRydWUsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiXFwqKFxcLlthLXpcXC1dKykrIixjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoicmVnZXhwIixiOiIoW2EtelxcLV0rXFwuKStcXCoiLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJudW1iZXIiLGI6IlxcYlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9KDpcXGR7MSw1fSk/XFxiIn0se2NOOiJudW1iZXIiLGI6IlxcYlxcZCtba0ttTWdHZHNoZHd5XSpcXGIiLHI6MH1dLmNvbmNhdChjKX07cmV0dXJue2M6W2IuSENNLHtiOmIuVUlSKyJcXHMiLGU6Ijt8eyIsckI6dHJ1ZSxjOlt7Y046InRpdGxlIixiOmIuVUlSLHN0YXJ0czphfV0scjowfV0saToiW15cXHNcXH1dIn19KGhsanMpO2hsanMuTEFOR1VBR0VTLmpzb249ZnVuY3Rpb24oYSl7dmFyIGU9e2xpdGVyYWw6InRydWUgZmFsc2UgbnVsbCJ9O3ZhciBkPVthLlFTTSxhLkNOTV07dmFyIGM9e2NOOiJ2YWx1ZSIsZToiLCIsZVc6dHJ1ZSxlRTp0cnVlLGM6ZCxrOmV9O3ZhciBiPXtiOiJ7IixlOiJ9IixjOlt7Y046ImF0dHJpYnV0ZSIsYjonXFxzKiInLGU6JyJcXHMqOlxccyonLGVCOnRydWUsZUU6dHJ1ZSxjOlthLkJFXSxpOiJcXG4iLHN0YXJ0czpjfV0saToiXFxTIn07dmFyIGY9e2I6IlxcWyIsZToiXFxdIixjOlthLmluaGVyaXQoYyx7Y046bnVsbH0pXSxpOiJcXFMifTtkLnNwbGljZShkLmxlbmd0aCwwLGIsZik7cmV0dXJue2M6ZCxrOmUsaToiXFxTIn19KGhsanMpO2hsanMuTEFOR1VBR0VTLmFwYWNoZT1mdW5jdGlvbihhKXt2YXIgYj17Y046Im51bWJlciIsYjoiW1xcJCVdXFxkKyJ9O3JldHVybntjSTp0cnVlLGM6W2EuSENNLHtjTjoidGFnIixiOiI8Lz8iLGU6Ij4ifSx7Y046ImtleXdvcmQiLGI6L1x3Ky8scjowLGs6e2NvbW1vbjoib3JkZXIgZGVueSBhbGxvdyBzZXRlbnYgcmV3cml0ZXJ1bGUgcmV3cml0ZWVuZ2luZSByZXdyaXRlY29uZCBkb2N1bWVudHJvb3Qgc2V0aGFuZGxlciBlcnJvcmRvY3VtZW50IGxvYWRtb2R1bGUgb3B0aW9ucyBoZWFkZXIgbGlzdGVuIHNlcnZlcnJvb3Qgc2VydmVybmFtZSJ9LHN0YXJ0czp7ZTovJC8scjowLGs6e2xpdGVyYWw6Im9uIG9mZiBhbGwifSxjOlt7Y046InNxYnJhY2tldCIsYjoiXFxzXFxbIixlOiJcXF0kIn0se2NOOiJjYnJhY2tldCIsYjoiW1xcJCVdXFx7IixlOiJcXH0iLGM6WyJzZWxmIixiXX0sYixhLlFTTV19fV0saTovXFMvfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3BwPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJmYWxzZSBpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNhdGNoIGV4cG9ydCB2aXJ0dWFsIG9wZXJhdG9yIHNpemVvZiBkeW5hbWljX2Nhc3R8MTAgdHlwZWRlZiBjb25zdF9jYXN0fDEwIGNvbnN0IHN0cnVjdCBmb3Igc3RhdGljX2Nhc3R8MTAgdW5pb24gbmFtZXNwYWNlIHVuc2lnbmVkIGxvbmcgdGhyb3cgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIHRlbXBsYXRlIG11dGFibGUgaWYgcHVibGljIGZyaWVuZCBkbyByZXR1cm4gZ290byBhdXRvIHZvaWQgZW51bSBlbHNlIGJyZWFrIG5ldyBleHRlcm4gdXNpbmcgdHJ1ZSBjbGFzcyBhc20gY2FzZSB0eXBlaWQgc2hvcnQgcmVpbnRlcnByZXRfY2FzdHwxMCBkZWZhdWx0IGRvdWJsZSByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHdjaGFyX3QgaW5saW5lIGRlbGV0ZSBhbGlnbm9mIGNoYXIxNl90IGNoYXIzMl90IGNvbnN0ZXhwciBkZWNsdHlwZSBub2V4Y2VwdCBudWxscHRyIHN0YXRpY19hc3NlcnQgdGhyZWFkX2xvY2FsIHJlc3RyaWN0IF9Cb29sIGNvbXBsZXgiLGJ1aWx0X2luOiJzdGQgc3RyaW5nIGNpbiBjb3V0IGNlcnIgY2xvZyBzdHJpbmdzdHJlYW0gaXN0cmluZ3N0cmVhbSBvc3RyaW5nc3RyZWFtIGF1dG9fcHRyIGRlcXVlIGxpc3QgcXVldWUgc3RhY2sgdmVjdG9yIG1hcCBzZXQgYml0c2V0IG11bHRpc2V0IG11bHRpbWFwIHVub3JkZXJlZF9zZXQgdW5vcmRlcmVkX21hcCB1bm9yZGVyZWRfbXVsdGlzZXQgdW5vcmRlcmVkX211bHRpbWFwIGFycmF5IHNoYXJlZF9wdHIifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5RU00se2NOOiJzdHJpbmciLGI6IidcXFxcPy4iLGU6IiciLGk6Ii4ifSx7Y046Im51bWJlciIsYjoiXFxiKFxcZCsoXFwuXFxkKik/fFxcLlxcZCspKHV8VXxsfEx8dWx8VUx8ZnxGKSJ9LGEuQ05NLHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIixjOlt7YjoiPCIsZToiPiIsaToiXFxuIn0sYS5DTENNXX0se2NOOiJzdGxfY29udGFpbmVyIixiOiJcXGIoZGVxdWV8bGlzdHxxdWV1ZXxzdGFja3x2ZWN0b3J8bWFwfHNldHxiaXRzZXR8bXVsdGlzZXR8bXVsdGltYXB8dW5vcmRlcmVkX21hcHx1bm9yZGVyZWRfc2V0fHVub3JkZXJlZF9tdWx0aXNldHx1bm9yZGVyZWRfbXVsdGltYXB8YXJyYXkpXFxzKjwiLGU6Ij4iLGs6YixyOjEwLGM6WyJzZWxmIl19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLm1ha2VmaWxlPWZ1bmN0aW9uKGEpe3ZhciBiPXtjTjoidmFyaWFibGUiLGI6L1wkXCgvLGU6L1wpLyxjOmEuQkV9O3JldHVybntjOlthLkhDTSx7YjovXlx3K1xzKlxXKj0vLHJCOnRydWUscjowLHN0YXJ0czp7Y046ImNvbnN0YW50IixlOi9ccypcVyo9LyxlRTp0cnVlLHN0YXJ0czp7ZTovJC8scjowLGM6W2JdLH19fSx7Y046InRpdGxlIixiOi9eW1x3XSs6XHMqJC99LHtjTjoicGhvbnkiLGI6L15cLlBIT05ZOi8sZTovJC8sazoiLlBIT05ZIixsOi9bXC5cd10rL30se2I6L15cdCsvLGU6LyQvLGM6W2EuUVNNLGJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5nbz1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiYnJlYWsgZGVmYXVsdCBmdW5jIGludGVyZmFjZSBzZWxlY3QgY2FzZSBtYXAgc3RydWN0IGNoYW4gZWxzZSBnb3RvIHBhY2thZ2Ugc3dpdGNoIGNvbnN0IGZhbGx0aHJvdWdoIGlmIHJhbmdlIHR5cGUgY29udGludWUgZm9yIGltcG9ydCByZXR1cm4gdmFyIGdvIGRlZmVyIixjb25zdGFudDoidHJ1ZSBmYWxzZSBpb3RhIG5pbCIsdHlwZW5hbWU6ImJvb2wgYnl0ZSBjb21wbGV4NjQgY29tcGxleDEyOCBmbG9hdDMyIGZsb2F0NjQgaW50OCBpbnQxNiBpbnQzMiBpbnQ2NCBzdHJpbmcgdWludDggdWludDE2IHVpbnQzMiB1aW50NjQgaW50IHVpbnQgdWludHB0ciBydW5lIixidWlsdF9pbjoiYXBwZW5kIGNhcCBjbG9zZSBjb21wbGV4IGNvcHkgaW1hZyBsZW4gbWFrZSBuZXcgcGFuaWMgcHJpbnQgcHJpbnRsbiByZWFsIHJlY292ZXIgZGVsZXRlIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUVNNLHtjTjoic3RyaW5nIixiOiInIixlOiJbXlxcXFxdJyIscjowfSx7Y046InN0cmluZyIsYjoiYCIsZToiYCJ9LHtjTjoibnVtYmVyIixiOiJbXmEtekEtWl8wLTldKFxcLXxcXCspP1xcZCsoXFwuXFxkK3xcXC9cXGQrKT8oKGR8ZXxmfGx8cykoXFwrfFxcLSk/XFxkKyk/IixyOjB9LGEuQ05NXX19KGhsanMpO1BLBwgVWW1O9nUAAPZ1AABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB0AAABzdGF0aWNcbGliXGpxdWVyeS5mb3JtLm1pbi5qcy8qIQogKiBqUXVlcnkgRm9ybSBQbHVnaW4KICogdmVyc2lvbjogMy40Ni4wLTIwMTMuMTEuMjEKICogUmVxdWlyZXMgalF1ZXJ5IHYxLjUgb3IgbGF0ZXIKICogQ29weXJpZ2h0IChjKSAyMDEzIE0uIEFsc3VwCiAqIEV4YW1wbGVzIGFuZCBkb2N1bWVudGF0aW9uIGF0OiBodHRwOi8vbWFsc3VwLmNvbS9qcXVlcnkvZm9ybS8KICogUHJvamVjdCByZXBvc2l0b3J5OiBodHRwczovL2dpdGh1Yi5jb20vbWFsc3VwL2Zvcm0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXMuCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxzdXAvZm9ybSNjb3B5cmlnaHQtYW5kLWxpY2Vuc2UKICovCihmdW5jdGlvbihhKXtpZih0eXBlb2YgZGVmaW5lPT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFsianF1ZXJ5Il0sYSl9ZWxzZXthKCh0eXBlb2YoalF1ZXJ5KSE9InVuZGVmaW5lZCIpP2pRdWVyeTp3aW5kb3cuWmVwdG8pfX0oZnVuY3Rpb24oZil7dmFyIGM9e307Yy5maWxlYXBpPWYoIjxpbnB1dCB0eXBlPSdmaWxlJy8+IikuZ2V0KDApLmZpbGVzIT09dW5kZWZpbmVkO2MuZm9ybWRhdGE9d2luZG93LkZvcm1EYXRhIT09dW5kZWZpbmVkO3ZhciBlPSEhZi5mbi5wcm9wO2YuZm4uYXR0cjI9ZnVuY3Rpb24oKXtpZighZSl7cmV0dXJuIHRoaXMuYXR0ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGc9dGhpcy5wcm9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigoZyYmZy5qcXVlcnkpfHx0eXBlb2YgZz09PSJzdHJpbmciKXtyZXR1cm4gZ31yZXR1cm4gdGhpcy5hdHRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Zi5mbi5hamF4U3VibWl0PWZ1bmN0aW9uKGope2lmKCF0aGlzLmxlbmd0aCl7ZCgiYWpheFN1Ym1pdDogc2tpcHBpbmcgc3VibWl0IHByb2Nlc3MgLSBubyBlbGVtZW50IHNlbGVjdGVkIik7cmV0dXJuIHRoaXN9dmFyIGksQyxtLG89dGhpcztpZih0eXBlb2Ygaj09ImZ1bmN0aW9uIil7aj17c3VjY2VzczpqfX1lbHNle2lmKGo9PT11bmRlZmluZWQpe2o9e319fWk9ai50eXBlfHx0aGlzLmF0dHIyKCJtZXRob2QiKTtDPWoudXJsfHx0aGlzLmF0dHIyKCJhY3Rpb24iKTttPSh0eXBlb2YgQz09PSJzdHJpbmciKT9mLnRyaW0oQyk6IiI7bT1tfHx3aW5kb3cubG9jYXRpb24uaHJlZnx8IiI7aWYobSl7bT0obS5tYXRjaCgvXihbXiNdKykvKXx8W10pWzFdfWo9Zi5leHRlbmQodHJ1ZSx7dXJsOm0sc3VjY2VzczpmLmFqYXhTZXR0aW5ncy5zdWNjZXNzLHR5cGU6aXx8Zi5hamF4U2V0dGluZ3MudHlwZSxpZnJhbWVTcmM6L15odHRwcy9pLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiKT8iamF2YXNjcmlwdDpmYWxzZSI6ImFib3V0OmJsYW5rIn0saik7dmFyIHU9e307dGhpcy50cmlnZ2VyKCJmb3JtLXByZS1zZXJpYWxpemUiLFt0aGlzLGosdV0pO2lmKHUudmV0byl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IHZldG9lZCB2aWEgZm9ybS1wcmUtc2VyaWFsaXplIHRyaWdnZXIiKTtyZXR1cm4gdGhpc31pZihqLmJlZm9yZVNlcmlhbGl6ZSYmai5iZWZvcmVTZXJpYWxpemUodGhpcyxqKT09PWZhbHNlKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgYWJvcnRlZCB2aWEgYmVmb3JlU2VyaWFsaXplIGNhbGxiYWNrIik7cmV0dXJuIHRoaXN9dmFyIG49ai50cmFkaXRpb25hbDtpZihuPT09dW5kZWZpbmVkKXtuPWYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsfXZhciBzPVtdO3ZhciBFLEY9dGhpcy5mb3JtVG9BcnJheShqLnNlbWFudGljLHMpO2lmKGouZGF0YSl7ai5leHRyYURhdGE9ai5kYXRhO0U9Zi5wYXJhbShqLmRhdGEsbil9aWYoai5iZWZvcmVTdWJtaXQmJmouYmVmb3JlU3VibWl0KEYsdGhpcyxqKT09PWZhbHNlKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgYWJvcnRlZCB2aWEgYmVmb3JlU3VibWl0IGNhbGxiYWNrIik7cmV0dXJuIHRoaXN9dGhpcy50cmlnZ2VyKCJmb3JtLXN1Ym1pdC12YWxpZGF0ZSIsW0YsdGhpcyxqLHVdKTtpZih1LnZldG8pe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tc3VibWl0LXZhbGlkYXRlIHRyaWdnZXIiKTtyZXR1cm4gdGhpc312YXIgeT1mLnBhcmFtKEYsbik7aWYoRSl7eT0oeT8oeSsiJiIrRSk6RSl9aWYoai50eXBlLnRvVXBwZXJDYXNlKCk9PSJHRVQiKXtqLnVybCs9KGoudXJsLmluZGV4T2YoIj8iKT49MD8iJiI6Ij8iKSt5O2ouZGF0YT1udWxsfWVsc2V7ai5kYXRhPXl9dmFyIEg9W107aWYoai5yZXNldEZvcm0pe0gucHVzaChmdW5jdGlvbigpe28ucmVzZXRGb3JtKCl9KX1pZihqLmNsZWFyRm9ybSl7SC5wdXNoKGZ1bmN0aW9uKCl7by5jbGVhckZvcm0oai5pbmNsdWRlSGlkZGVuKX0pfWlmKCFqLmRhdGFUeXBlJiZqLnRhcmdldCl7dmFyIGw9ai5zdWNjZXNzfHxmdW5jdGlvbigpe307SC5wdXNoKGZ1bmN0aW9uKHEpe3ZhciBrPWoucmVwbGFjZVRhcmdldD8icmVwbGFjZVdpdGgiOiJodG1sIjtmKGoudGFyZ2V0KVtrXShxKS5lYWNoKGwsYXJndW1lbnRzKX0pfWVsc2V7aWYoai5zdWNjZXNzKXtILnB1c2goai5zdWNjZXNzKX19ai5zdWNjZXNzPWZ1bmN0aW9uKEsscSxMKXt2YXIgSj1qLmNvbnRleHR8fHRoaXM7Zm9yKHZhciBJPTAsaz1ILmxlbmd0aDtJPGs7SSsrKXtIW0ldLmFwcGx5KEosW0sscSxMfHxvLG9dKX19O2lmKGouZXJyb3Ipe3ZhciB6PWouZXJyb3I7ai5lcnJvcj1mdW5jdGlvbihKLGsscSl7dmFyIEk9ai5jb250ZXh0fHx0aGlzO3ouYXBwbHkoSSxbSixrLHEsb10pfX1pZihqLmNvbXBsZXRlKXt2YXIgaD1qLmNvbXBsZXRlO2ouY29tcGxldGU9ZnVuY3Rpb24oSSxrKXt2YXIgcT1qLmNvbnRleHR8fHRoaXM7aC5hcHBseShxLFtJLGssb10pfX12YXIgRD1mKCJpbnB1dFt0eXBlPWZpbGVdOmVuYWJsZWQiLHRoaXMpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBmKHRoaXMpLnZhbCgpIT09IiJ9KTt2YXIgcD1ELmxlbmd0aD4wO3ZhciBCPSJtdWx0aXBhcnQvZm9ybS1kYXRhIjt2YXIgeD0oby5hdHRyKCJlbmN0eXBlIik9PUJ8fG8uYXR0cigiZW5jb2RpbmciKT09Qik7dmFyIHc9Yy5maWxlYXBpJiZjLmZvcm1kYXRhO2QoImZpbGVBUEkgOiIrdyk7dmFyIHI9KHB8fHgpJiYhdzt2YXIgdjtpZihqLmlmcmFtZSE9PWZhbHNlJiYoai5pZnJhbWV8fHIpKXtpZihqLmNsb3NlS2VlcEFsaXZlKXtmLmdldChqLmNsb3NlS2VlcEFsaXZlLGZ1bmN0aW9uKCl7dj1HKEYpfSl9ZWxzZXt2PUcoRil9fWVsc2V7aWYoKHB8fHgpJiZ3KXt2PXQoRil9ZWxzZXt2PWYuYWpheChqKX19by5yZW1vdmVEYXRhKCJqcXhociIpLmRhdGEoImpxeGhyIix2KTtmb3IodmFyIEE9MDtBPHMubGVuZ3RoO0ErKyl7c1tBXT1udWxsfXRoaXMudHJpZ2dlcigiZm9ybS1zdWJtaXQtbm90aWZ5IixbdGhpcyxqXSk7cmV0dXJuIHRoaXM7ZnVuY3Rpb24gZyhLKXt2YXIgTD1mLnBhcmFtKEssai50cmFkaXRpb25hbCkuc3BsaXQoIiYiKTt2YXIgcT1MLmxlbmd0aDt2YXIgaz1bXTt2YXIgSixJO2ZvcihKPTA7SjxxO0orKyl7TFtKXT1MW0pdLnJlcGxhY2UoL1wrL2csIiAiKTtJPUxbSl0uc3BsaXQoIj0iKTtrLnB1c2goW2RlY29kZVVSSUNvbXBvbmVudChJWzBdKSxkZWNvZGVVUklDb21wb25lbnQoSVsxXSldKX1yZXR1cm4ga31mdW5jdGlvbiB0KHEpe3ZhciBrPW5ldyBGb3JtRGF0YSgpO2Zvcih2YXIgST0wO0k8cS5sZW5ndGg7SSsrKXtrLmFwcGVuZChxW0ldLm5hbWUscVtJXS52YWx1ZSl9aWYoai5leHRyYURhdGEpe3ZhciBMPWcoai5leHRyYURhdGEpO2ZvcihJPTA7STxMLmxlbmd0aDtJKyspe2lmKExbSV0pe2suYXBwZW5kKExbSV1bMF0sTFtJXVsxXSl9fX1qLmRhdGE9bnVsbDt2YXIgSz1mLmV4dGVuZCh0cnVlLHt9LGYuYWpheFNldHRpbmdzLGose2NvbnRlbnRUeXBlOmZhbHNlLHByb2Nlc3NEYXRhOmZhbHNlLGNhY2hlOmZhbHNlLHR5cGU6aXx8IlBPU1QifSk7aWYoai51cGxvYWRQcm9ncmVzcyl7Sy54aHI9ZnVuY3Rpb24oKXt2YXIgTT1mLmFqYXhTZXR0aW5ncy54aHIoKTtpZihNLnVwbG9hZCl7TS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGZ1bmN0aW9uKFEpe3ZhciBQPTA7dmFyIE49US5sb2FkZWR8fFEucG9zaXRpb247dmFyIE89US50b3RhbDtpZihRLmxlbmd0aENvbXB1dGFibGUpe1A9TWF0aC5jZWlsKE4vTyoxMDApfWoudXBsb2FkUHJvZ3Jlc3MoUSxOLE8sUCl9LGZhbHNlKX1yZXR1cm4gTX19Sy5kYXRhPW51bGw7dmFyIEo9Sy5iZWZvcmVTZW5kO0suYmVmb3JlU2VuZD1mdW5jdGlvbihOLE0pe2lmKGouZm9ybURhdGEpe00uZGF0YT1qLmZvcm1EYXRhfWVsc2V7TS5kYXRhPWt9aWYoSil7Si5jYWxsKHRoaXMsTixNKX19O3JldHVybiBmLmFqYXgoSyl9ZnVuY3Rpb24gRyhhZil7dmFyIEw9b1swXSxLLGFiLFYsYWQsWSxOLFEsTyxQLFosYWMsVDt2YXIgYWk9Zi5EZWZlcnJlZCgpO2FpLmFib3J0PWZ1bmN0aW9uKGFqKXtPLmFib3J0KGFqKX07aWYoYWYpe2ZvcihhYj0wO2FiPHMubGVuZ3RoO2FiKyspe0s9ZihzW2FiXSk7aWYoZSl7Sy5wcm9wKCJkaXNhYmxlZCIsZmFsc2UpfWVsc2V7Sy5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpfX19Vj1mLmV4dGVuZCh0cnVlLHt9LGYuYWpheFNldHRpbmdzLGopO1YuY29udGV4dD1WLmNvbnRleHR8fFY7WT0ianFGb3JtSU8iKyhuZXcgRGF0ZSgpLmdldFRpbWUoKSk7aWYoVi5pZnJhbWVUYXJnZXQpe049ZihWLmlmcmFtZVRhcmdldCk7Wj1OLmF0dHIyKCJuYW1lIik7aWYoIVope04uYXR0cjIoIm5hbWUiLFkpfWVsc2V7WT1afX1lbHNle049ZignPGlmcmFtZSBuYW1lPSInK1krJyIgc3JjPSInK1YuaWZyYW1lU3JjKyciIC8+Jyk7Ti5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiItMTAwMHB4IixsZWZ0OiItMTAwMHB4In0pfVE9TlswXTtPPXthYm9ydGVkOjAscmVzcG9uc2VUZXh0Om51bGwscmVzcG9uc2VYTUw6bnVsbCxzdGF0dXM6MCxzdGF0dXNUZXh0OiJuL2EiLGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe30sZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oKXt9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oKXt9LGFib3J0OmZ1bmN0aW9uKGFqKXt2YXIgYWs9KGFqPT09InRpbWVvdXQiPyJ0aW1lb3V0IjoiYWJvcnRlZCIpO2QoImFib3J0aW5nIHVwbG9hZC4uLiAiK2FrKTt0aGlzLmFib3J0ZWQ9MTt0cnl7aWYoUS5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kKXtRLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQoIlN0b3AiKX19Y2F0Y2goYWwpe31OLmF0dHIoInNyYyIsVi5pZnJhbWVTcmMpO08uZXJyb3I9YWs7aWYoVi5lcnJvcil7Vi5lcnJvci5jYWxsKFYuY29udGV4dCxPLGFrLGFqKX1pZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4RXJyb3IiLFtPLFYsYWtdKX1pZihWLmNvbXBsZXRlKXtWLmNvbXBsZXRlLmNhbGwoVi5jb250ZXh0LE8sYWspfX19O2FkPVYuZ2xvYmFsO2lmKGFkJiYwPT09Zi5hY3RpdmUrKyl7Zi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKX1pZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4U2VuZCIsW08sVl0pfWlmKFYuYmVmb3JlU2VuZCYmVi5iZWZvcmVTZW5kLmNhbGwoVi5jb250ZXh0LE8sVik9PT1mYWxzZSl7aWYoVi5nbG9iYWwpe2YuYWN0aXZlLS19YWkucmVqZWN0KCk7cmV0dXJuIGFpfWlmKE8uYWJvcnRlZCl7YWkucmVqZWN0KCk7cmV0dXJuIGFpfVA9TC5jbGs7aWYoUCl7Wj1QLm5hbWU7aWYoWiYmIVAuZGlzYWJsZWQpe1YuZXh0cmFEYXRhPVYuZXh0cmFEYXRhfHx7fTtWLmV4dHJhRGF0YVtaXT1QLnZhbHVlO2lmKFAudHlwZT09ImltYWdlIil7Vi5leHRyYURhdGFbWisiLngiXT1MLmNsa194O1YuZXh0cmFEYXRhW1orIi55Il09TC5jbGtfeX19fXZhciBVPTE7dmFyIFI9MjtmdW5jdGlvbiBTKGFsKXt2YXIgYWs9bnVsbDt0cnl7aWYoYWwuY29udGVudFdpbmRvdyl7YWs9YWwuY29udGVudFdpbmRvdy5kb2N1bWVudH19Y2F0Y2goYWope2QoImNhbm5vdCBnZXQgaWZyYW1lLmNvbnRlbnRXaW5kb3cgZG9jdW1lbnQ6ICIrYWopfWlmKGFrKXtyZXR1cm4gYWt9dHJ5e2FrPWFsLmNvbnRlbnREb2N1bWVudD9hbC5jb250ZW50RG9jdW1lbnQ6YWwuZG9jdW1lbnR9Y2F0Y2goYWope2QoImNhbm5vdCBnZXQgaWZyYW1lLmNvbnRlbnREb2N1bWVudDogIithaik7YWs9YWwuZG9jdW1lbnR9cmV0dXJuIGFrfXZhciBKPWYoIm1ldGFbbmFtZT1jc3JmLXRva2VuXSIpLmF0dHIoImNvbnRlbnQiKTt2YXIgST1mKCJtZXRhW25hbWU9Y3NyZi1wYXJhbV0iKS5hdHRyKCJjb250ZW50Iik7aWYoSSYmSil7Vi5leHRyYURhdGE9Vi5leHRyYURhdGF8fHt9O1YuZXh0cmFEYXRhW0ldPUp9ZnVuY3Rpb24gYWEoKXt2YXIgYWw9by5hdHRyMigidGFyZ2V0IiksYWo9by5hdHRyMigiYWN0aW9uIik7TC5zZXRBdHRyaWJ1dGUoInRhcmdldCIsWSk7aWYoIWl8fC9wb3N0L2kudGVzdChpKSl7TC5zZXRBdHRyaWJ1dGUoIm1ldGhvZCIsIlBPU1QiKX1pZihhaiE9Vi51cmwpe0wuc2V0QXR0cmlidXRlKCJhY3Rpb24iLFYudXJsKX1pZighVi5za2lwRW5jb2RpbmdPdmVycmlkZSYmKCFpfHwvcG9zdC9pLnRlc3QoaSkpKXtvLmF0dHIoe2VuY29kaW5nOiJtdWx0aXBhcnQvZm9ybS1kYXRhIixlbmN0eXBlOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn0pfWlmKFYudGltZW91dCl7VD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YWM9dHJ1ZTtYKFUpfSxWLnRpbWVvdXQpfWZ1bmN0aW9uIGFtKCl7dHJ5e3ZhciBhcT1TKFEpLnJlYWR5U3RhdGU7ZCgic3RhdGUgPSAiK2FxKTtpZihhcSYmYXEudG9Mb3dlckNhc2UoKT09InVuaW5pdGlhbGl6ZWQiKXtzZXRUaW1lb3V0KGFtLDUwKX19Y2F0Y2goYXIpe2QoIlNlcnZlciBhYm9ydDogIixhciwiICgiLGFyLm5hbWUsIikiKTtYKFIpO2lmKFQpe2NsZWFyVGltZW91dChUKX1UPXVuZGVmaW5lZH19dmFyIGFrPVtdO3RyeXtpZihWLmV4dHJhRGF0YSl7Zm9yKHZhciBhcCBpbiBWLmV4dHJhRGF0YSl7aWYoVi5leHRyYURhdGEuaGFzT3duUHJvcGVydHkoYXApKXtpZihmLmlzUGxhaW5PYmplY3QoVi5leHRyYURhdGFbYXBdKSYmVi5leHRyYURhdGFbYXBdLmhhc093blByb3BlcnR5KCJuYW1lIikmJlYuZXh0cmFEYXRhW2FwXS5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSl7YWsucHVzaChmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInK1YuZXh0cmFEYXRhW2FwXS5uYW1lKyciPicpLnZhbChWLmV4dHJhRGF0YVthcF0udmFsdWUpLmFwcGVuZFRvKEwpWzBdKX1lbHNle2FrLnB1c2goZignPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJythcCsnIj4nKS52YWwoVi5leHRyYURhdGFbYXBdKS5hcHBlbmRUbyhMKVswXSl9fX19aWYoIVYuaWZyYW1lVGFyZ2V0KXtOLmFwcGVuZFRvKCJib2R5Iil9aWYoUS5hdHRhY2hFdmVudCl7US5hdHRhY2hFdmVudCgib25sb2FkIixYKX1lbHNle1EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsWCxmYWxzZSl9c2V0VGltZW91dChhbSwxNSk7dHJ5e0wuc3VibWl0KCl9Y2F0Y2goYW4pe3ZhciBhbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb3JtIikuc3VibWl0O2FvLmFwcGx5KEwpfX1maW5hbGx5e0wuc2V0QXR0cmlidXRlKCJhY3Rpb24iLGFqKTtpZihhbCl7TC5zZXRBdHRyaWJ1dGUoInRhcmdldCIsYWwpfWVsc2V7by5yZW1vdmVBdHRyKCJ0YXJnZXQiKX1mKGFrKS5yZW1vdmUoKX19aWYoVi5mb3JjZVN5bmMpe2FhKCl9ZWxzZXtzZXRUaW1lb3V0KGFhLDEwKX12YXIgYWcsYWgsYWU9NTAsTTtmdW5jdGlvbiBYKGFwKXtpZihPLmFib3J0ZWR8fE0pe3JldHVybn1haD1TKFEpO2lmKCFhaCl7ZCgiY2Fubm90IGFjY2VzcyByZXNwb25zZSBkb2N1bWVudCIpO2FwPVJ9aWYoYXA9PT1VJiZPKXtPLmFib3J0KCJ0aW1lb3V0Iik7YWkucmVqZWN0KE8sInRpbWVvdXQiKTtyZXR1cm59ZWxzZXtpZihhcD09UiYmTyl7Ty5hYm9ydCgic2VydmVyIGFib3J0Iik7YWkucmVqZWN0KE8sImVycm9yIiwic2VydmVyIGFib3J0Iik7cmV0dXJufX1pZighYWh8fGFoLmxvY2F0aW9uLmhyZWY9PVYuaWZyYW1lU3JjKXtpZighYWMpe3JldHVybn19aWYoUS5kZXRhY2hFdmVudCl7US5kZXRhY2hFdmVudCgib25sb2FkIixYKX1lbHNle1EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsWCxmYWxzZSl9dmFyIGFuPSJzdWNjZXNzIixhcjt0cnl7aWYoYWMpe3Rocm93InRpbWVvdXQifXZhciBhbT1WLmRhdGFUeXBlPT0ieG1sInx8YWguWE1MRG9jdW1lbnR8fGYuaXNYTUxEb2MoYWgpO2QoImlzWG1sPSIrYW0pO2lmKCFhbSYmd2luZG93Lm9wZXJhJiYoYWguYm9keT09PW51bGx8fCFhaC5ib2R5LmlubmVySFRNTCkpe2lmKC0tYWUpe2QoInJlcXVlaW5nIG9uTG9hZCBjYWxsYmFjaywgRE9NIG5vdCBhdmFpbGFibGUiKTtzZXRUaW1lb3V0KFgsMjUwKTtyZXR1cm59fXZhciBhdD1haC5ib2R5P2FoLmJvZHk6YWguZG9jdW1lbnRFbGVtZW50O08ucmVzcG9uc2VUZXh0PWF0P2F0LmlubmVySFRNTDpudWxsO08ucmVzcG9uc2VYTUw9YWguWE1MRG9jdW1lbnQ/YWguWE1MRG9jdW1lbnQ6YWg7aWYoYW0pe1YuZGF0YVR5cGU9InhtbCJ9Ty5nZXRSZXNwb25zZUhlYWRlcj1mdW5jdGlvbihhdyl7dmFyIGF2PXsiY29udGVudC10eXBlIjpWLmRhdGFUeXBlfTtyZXR1cm4gYXZbYXcudG9Mb3dlckNhc2UoKV19O2lmKGF0KXtPLnN0YXR1cz1OdW1iZXIoYXQuZ2V0QXR0cmlidXRlKCJzdGF0dXMiKSl8fE8uc3RhdHVzO08uc3RhdHVzVGV4dD1hdC5nZXRBdHRyaWJ1dGUoInN0YXR1c1RleHQiKXx8Ty5zdGF0dXNUZXh0fXZhciBhaj0oVi5kYXRhVHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk7dmFyIGFxPS8oanNvbnxzY3JpcHR8dGV4dCkvLnRlc3QoYWopO2lmKGFxfHxWLnRleHRhcmVhKXt2YXIgYW89YWguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRleHRhcmVhIilbMF07aWYoYW8pe08ucmVzcG9uc2VUZXh0PWFvLnZhbHVlO08uc3RhdHVzPU51bWJlcihhby5nZXRBdHRyaWJ1dGUoInN0YXR1cyIpKXx8Ty5zdGF0dXM7Ty5zdGF0dXNUZXh0PWFvLmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxPLnN0YXR1c1RleHR9ZWxzZXtpZihhcSl7dmFyIGFrPWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcmUiKVswXTt2YXIgYXU9YWguZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTtpZihhayl7Ty5yZXNwb25zZVRleHQ9YWsudGV4dENvbnRlbnQ/YWsudGV4dENvbnRlbnQ6YWsuaW5uZXJUZXh0fWVsc2V7aWYoYXUpe08ucmVzcG9uc2VUZXh0PWF1LnRleHRDb250ZW50P2F1LnRleHRDb250ZW50OmF1LmlubmVyVGV4dH19fX19ZWxzZXtpZihhaj09InhtbCImJiFPLnJlc3BvbnNlWE1MJiZPLnJlc3BvbnNlVGV4dCl7Ty5yZXNwb25zZVhNTD1XKE8ucmVzcG9uc2VUZXh0KX19dHJ5e2FnPWsoTyxhaixWKX1jYXRjaChhbCl7YW49InBhcnNlcmVycm9yIjtPLmVycm9yPWFyPShhbHx8YW4pfX1jYXRjaChhbCl7ZCgiZXJyb3IgY2F1Z2h0OiAiLGFsKTthbj0iZXJyb3IiO08uZXJyb3I9YXI9KGFsfHxhbil9aWYoTy5hYm9ydGVkKXtkKCJ1cGxvYWQgYWJvcnRlZCIpO2FuPW51bGx9aWYoTy5zdGF0dXMpe2FuPShPLnN0YXR1cz49MjAwJiZPLnN0YXR1czwzMDB8fE8uc3RhdHVzPT09MzA0KT8ic3VjY2VzcyI6ImVycm9yIn1pZihhbj09PSJzdWNjZXNzIil7aWYoVi5zdWNjZXNzKXtWLnN1Y2Nlc3MuY2FsbChWLmNvbnRleHQsYWcsInN1Y2Nlc3MiLE8pfWFpLnJlc29sdmUoTy5yZXNwb25zZVRleHQsInN1Y2Nlc3MiLE8pO2lmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdWNjZXNzIixbTyxWXSl9fWVsc2V7aWYoYW4pe2lmKGFyPT09dW5kZWZpbmVkKXthcj1PLnN0YXR1c1RleHR9aWYoVi5lcnJvcil7Vi5lcnJvci5jYWxsKFYuY29udGV4dCxPLGFuLGFyKX1haS5yZWplY3QoTywiZXJyb3IiLGFyKTtpZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4RXJyb3IiLFtPLFYsYXJdKX19fWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW08sVl0pfWlmKGFkJiYhLS1mLmFjdGl2ZSl7Zi5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpfWlmKFYuY29tcGxldGUpe1YuY29tcGxldGUuY2FsbChWLmNvbnRleHQsTyxhbil9TT10cnVlO2lmKFYudGltZW91dCl7Y2xlYXJUaW1lb3V0KFQpfXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZighVi5pZnJhbWVUYXJnZXQpe04ucmVtb3ZlKCl9ZWxzZXtOLmF0dHIoInNyYyIsVi5pZnJhbWVTcmMpfU8ucmVzcG9uc2VYTUw9bnVsbH0sMTAwKX12YXIgVz1mLnBhcnNlWE1MfHxmdW5jdGlvbihhaixhayl7aWYod2luZG93LkFjdGl2ZVhPYmplY3Qpe2FrPW5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MRE9NIik7YWsuYXN5bmM9ImZhbHNlIjthay5sb2FkWE1MKGFqKX1lbHNle2FrPShuZXcgRE9NUGFyc2VyKCkpLnBhcnNlRnJvbVN0cmluZyhhaiwidGV4dC94bWwiKX1yZXR1cm4oYWsmJmFrLmRvY3VtZW50RWxlbWVudCYmYWsuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lIT0icGFyc2VyZXJyb3IiKT9hazpudWxsfTt2YXIgcT1mLnBhcnNlSlNPTnx8ZnVuY3Rpb24oYWope3JldHVybiB3aW5kb3dbImV2YWwiXSgiKCIrYWorIikiKX07dmFyIGs9ZnVuY3Rpb24oYW8sYW0sYWwpe3ZhciBhaz1hby5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIil8fCIiLGFqPWFtPT09InhtbCJ8fCFhbSYmYWsuaW5kZXhPZigieG1sIik+PTAsYW49YWo/YW8ucmVzcG9uc2VYTUw6YW8ucmVzcG9uc2VUZXh0O2lmKGFqJiZhbi5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWU9PT0icGFyc2VyZXJyb3IiKXtpZihmLmVycm9yKXtmLmVycm9yKCJwYXJzZXJlcnJvciIpfX1pZihhbCYmYWwuZGF0YUZpbHRlcil7YW49YWwuZGF0YUZpbHRlcihhbixhbSl9aWYodHlwZW9mIGFuPT09InN0cmluZyIpe2lmKGFtPT09Impzb24ifHwhYW0mJmFrLmluZGV4T2YoImpzb24iKT49MCl7YW49cShhbil9ZWxzZXtpZihhbT09PSJzY3JpcHQifHwhYW0mJmFrLmluZGV4T2YoImphdmFzY3JpcHQiKT49MCl7Zi5nbG9iYWxFdmFsKGFuKX19fXJldHVybiBhbn07cmV0dXJuIGFpfX07Zi5mbi5hamF4Rm9ybT1mdW5jdGlvbihnKXtnPWd8fHt9O2cuZGVsZWdhdGlvbj1nLmRlbGVnYXRpb24mJmYuaXNGdW5jdGlvbihmLmZuLm9uKTtpZighZy5kZWxlZ2F0aW9uJiZ0aGlzLmxlbmd0aD09PTApe3ZhciBoPXtzOnRoaXMuc2VsZWN0b3IsYzp0aGlzLmNvbnRleHR9O2lmKCFmLmlzUmVhZHkmJmgucyl7ZCgiRE9NIG5vdCByZWFkeSwgcXVldWluZyBhamF4Rm9ybSIpO2YoZnVuY3Rpb24oKXtmKGgucyxoLmMpLmFqYXhGb3JtKGcpfSk7cmV0dXJuIHRoaXN9ZCgidGVybWluYXRpbmc7IHplcm8gZWxlbWVudHMgZm91bmQgYnkgc2VsZWN0b3IiKyhmLmlzUmVhZHk/IiI6IiAoRE9NIG5vdCByZWFkeSkiKSk7cmV0dXJuIHRoaXN9aWYoZy5kZWxlZ2F0aW9uKXtmKGRvY3VtZW50KS5vZmYoInN1Ym1pdC5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixiKS5vZmYoImNsaWNrLmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGEpLm9uKCJzdWJtaXQuZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsZyxiKS5vbigiY2xpY2suZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsZyxhKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5hamF4Rm9ybVVuYmluZCgpLmJpbmQoInN1Ym1pdC5mb3JtLXBsdWdpbiIsZyxiKS5iaW5kKCJjbGljay5mb3JtLXBsdWdpbiIsZyxhKX07ZnVuY3Rpb24gYihoKXt2YXIgZz1oLmRhdGE7aWYoIWguaXNEZWZhdWx0UHJldmVudGVkKCkpe2gucHJldmVudERlZmF1bHQoKTtmKGgudGFyZ2V0KS5hamF4U3VibWl0KGcpfX1mdW5jdGlvbiBhKGspe3ZhciBqPWsudGFyZ2V0O3ZhciBoPWYoaik7aWYoIShoLmlzKCJbdHlwZT1zdWJtaXRdLFt0eXBlPWltYWdlXSIpKSl7dmFyIGc9aC5jbG9zZXN0KCJbdHlwZT1zdWJtaXRdIik7aWYoZy5sZW5ndGg9PT0wKXtyZXR1cm59aj1nWzBdfXZhciBpPXRoaXM7aS5jbGs9ajtpZihqLnR5cGU9PSJpbWFnZSIpe2lmKGsub2Zmc2V0WCE9PXVuZGVmaW5lZCl7aS5jbGtfeD1rLm9mZnNldFg7aS5jbGtfeT1rLm9mZnNldFl9ZWxzZXtpZih0eXBlb2YgZi5mbi5vZmZzZXQ9PSJmdW5jdGlvbiIpe3ZhciBsPWgub2Zmc2V0KCk7aS5jbGtfeD1rLnBhZ2VYLWwubGVmdDtpLmNsa195PWsucGFnZVktbC50b3B9ZWxzZXtpLmNsa194PWsucGFnZVgtai5vZmZzZXRMZWZ0O2kuY2xrX3k9ay5wYWdlWS1qLm9mZnNldFRvcH19fXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmNsaz1pLmNsa194PWkuY2xrX3k9bnVsbH0sMTAwKX1mLmZuLmFqYXhGb3JtVW5iaW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kKCJzdWJtaXQuZm9ybS1wbHVnaW4gY2xpY2suZm9ybS1wbHVnaW4iKX07Zi5mbi5mb3JtVG9BcnJheT1mdW5jdGlvbih4LGcpe3ZhciB3PVtdO2lmKHRoaXMubGVuZ3RoPT09MCl7cmV0dXJuIHd9dmFyIGw9dGhpc1swXTt2YXIgcD14P2wuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTpsLmVsZW1lbnRzO2lmKCFwKXtyZXR1cm4gd312YXIgcixxLG8seSxtLHQsaztmb3Iocj0wLHQ9cC5sZW5ndGg7cjx0O3IrKyl7bT1wW3JdO289bS5uYW1lO2lmKCFvfHxtLmRpc2FibGVkKXtjb250aW51ZX1pZih4JiZsLmNsayYmbS50eXBlPT0iaW1hZ2UiKXtpZihsLmNsaz09bSl7dy5wdXNoKHtuYW1lOm8sdmFsdWU6ZihtKS52YWwoKSx0eXBlOm0udHlwZX0pO3cucHVzaCh7bmFtZTpvKyIueCIsdmFsdWU6bC5jbGtfeH0se25hbWU6bysiLnkiLHZhbHVlOmwuY2xrX3l9KX1jb250aW51ZX15PWYuZmllbGRWYWx1ZShtLHRydWUpO2lmKHkmJnkuY29uc3RydWN0b3I9PUFycmF5KXtpZihnKXtnLnB1c2gobSl9Zm9yKHE9MCxrPXkubGVuZ3RoO3E8aztxKyspe3cucHVzaCh7bmFtZTpvLHZhbHVlOnlbcV19KX19ZWxzZXtpZihjLmZpbGVhcGkmJm0udHlwZT09ImZpbGUiKXtpZihnKXtnLnB1c2gobSl9dmFyIGg9bS5maWxlcztpZihoLmxlbmd0aCl7Zm9yKHE9MDtxPGgubGVuZ3RoO3ErKyl7dy5wdXNoKHtuYW1lOm8sdmFsdWU6aFtxXSx0eXBlOm0udHlwZX0pfX1lbHNle3cucHVzaCh7bmFtZTpvLHZhbHVlOiIiLHR5cGU6bS50eXBlfSl9fWVsc2V7aWYoeSE9PW51bGwmJnR5cGVvZiB5IT0idW5kZWZpbmVkIil7aWYoZyl7Zy5wdXNoKG0pfXcucHVzaCh7bmFtZTpvLHZhbHVlOnksdHlwZTptLnR5cGUscmVxdWlyZWQ6bS5yZXF1aXJlZH0pfX19fWlmKCF4JiZsLmNsayl7dmFyIHM9ZihsLmNsayksdT1zWzBdO289dS5uYW1lO2lmKG8mJiF1LmRpc2FibGVkJiZ1LnR5cGU9PSJpbWFnZSIpe3cucHVzaCh7bmFtZTpvLHZhbHVlOnMudmFsKCl9KTt3LnB1c2goe25hbWU6bysiLngiLHZhbHVlOmwuY2xrX3h9LHtuYW1lOm8rIi55Iix2YWx1ZTpsLmNsa195fSl9fXJldHVybiB3fTtmLmZuLmZvcm1TZXJpYWxpemU9ZnVuY3Rpb24oZyl7cmV0dXJuIGYucGFyYW0odGhpcy5mb3JtVG9BcnJheShnKSl9O2YuZm4uZmllbGRTZXJpYWxpemU9ZnVuY3Rpb24oaCl7dmFyIGc9W107dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5uYW1lO2lmKCFtKXtyZXR1cm59dmFyIGs9Zi5maWVsZFZhbHVlKHRoaXMsaCk7aWYoayYmay5jb25zdHJ1Y3Rvcj09QXJyYXkpe2Zvcih2YXIgbD0wLGo9ay5sZW5ndGg7bDxqO2wrKyl7Zy5wdXNoKHtuYW1lOm0sdmFsdWU6a1tsXX0pfX1lbHNle2lmKGshPT1udWxsJiZ0eXBlb2YgayE9InVuZGVmaW5lZCIpe2cucHVzaCh7bmFtZTp0aGlzLm5hbWUsdmFsdWU6a30pfX19KTtyZXR1cm4gZi5wYXJhbShnKX07Zi5mbi5maWVsZFZhbHVlPWZ1bmN0aW9uKG0pe2Zvcih2YXIgbD1bXSxqPTAsZz10aGlzLmxlbmd0aDtqPGc7aisrKXt2YXIgaz10aGlzW2pdO3ZhciBoPWYuZmllbGRWYWx1ZShrLG0pO2lmKGg9PT1udWxsfHx0eXBlb2YgaD09InVuZGVmaW5lZCJ8fChoLmNvbnN0cnVjdG9yPT1BcnJheSYmIWgubGVuZ3RoKSl7Y29udGludWV9aWYoaC5jb25zdHJ1Y3Rvcj09QXJyYXkpe2YubWVyZ2UobCxoKX1lbHNle2wucHVzaChoKX19cmV0dXJuIGx9O2YuZmllbGRWYWx1ZT1mdW5jdGlvbihnLG8pe3ZhciBqPWcubmFtZSx1PWcudHlwZSx3PWcudGFnTmFtZS50b0xvd2VyQ2FzZSgpO2lmKG89PT11bmRlZmluZWQpe289dHJ1ZX1pZihvJiYoIWp8fGcuZGlzYWJsZWR8fHU9PSJyZXNldCJ8fHU9PSJidXR0b24ifHwodT09ImNoZWNrYm94Inx8dT09InJhZGlvIikmJiFnLmNoZWNrZWR8fCh1PT0ic3VibWl0Inx8dT09ImltYWdlIikmJmcuZm9ybSYmZy5mb3JtLmNsayE9Z3x8dz09InNlbGVjdCImJmcuc2VsZWN0ZWRJbmRleD09LTEpKXtyZXR1cm4gbnVsbH1pZih3PT0ic2VsZWN0Iil7dmFyIHA9Zy5zZWxlY3RlZEluZGV4O2lmKHA8MCl7cmV0dXJuIG51bGx9dmFyIHI9W10saD1nLm9wdGlvbnM7dmFyIGw9KHU9PSJzZWxlY3Qtb25lIik7dmFyIHE9KGw/cCsxOmgubGVuZ3RoKTtmb3IodmFyIGs9KGw/cDowKTtrPHE7aysrKXt2YXIgbT1oW2tdO2lmKG0uc2VsZWN0ZWQpe3ZhciBzPW0udmFsdWU7aWYoIXMpe3M9KG0uYXR0cmlidXRlcyYmbS5hdHRyaWJ1dGVzLnZhbHVlJiYhKG0uYXR0cmlidXRlcy52YWx1ZS5zcGVjaWZpZWQpKT9tLnRleHQ6bS52YWx1ZX1pZihsKXtyZXR1cm4gc31yLnB1c2gocyl9fXJldHVybiByfXJldHVybiBmKGcpLnZhbCgpfTtmLmZuLmNsZWFyRm9ybT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZigiaW5wdXQsc2VsZWN0LHRleHRhcmVhIix0aGlzKS5jbGVhckZpZWxkcyhnKX0pfTtmLmZuLmNsZWFyRmllbGRzPWYuZm4uY2xlYXJJbnB1dHM9ZnVuY3Rpb24oZyl7dmFyIGg9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGVtYWlsfG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2k7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBqPXRoaXMudHlwZSxpPXRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpO2lmKGgudGVzdChqKXx8aT09InRleHRhcmVhIil7dGhpcy52YWx1ZT0iIn1lbHNle2lmKGo9PSJjaGVja2JveCJ8fGo9PSJyYWRpbyIpe3RoaXMuY2hlY2tlZD1mYWxzZX1lbHNle2lmKGk9PSJzZWxlY3QiKXt0aGlzLnNlbGVjdGVkSW5kZXg9LTF9ZWxzZXtpZihqPT0iZmlsZSIpe2lmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXtmKHRoaXMpLnJlcGxhY2VXaXRoKGYodGhpcykuY2xvbmUodHJ1ZSkpfWVsc2V7Zih0aGlzKS52YWwoIiIpfX1lbHNle2lmKGcpe2lmKChnPT09dHJ1ZSYmL2hpZGRlbi8udGVzdChqKSl8fCh0eXBlb2YgZz09InN0cmluZyImJmYodGhpcykuaXMoZykpKXt0aGlzLnZhbHVlPSIifX19fX19fSl9O2YuZm4ucmVzZXRGb3JtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKHR5cGVvZiB0aGlzLnJlc2V0PT0iZnVuY3Rpb24ifHwodHlwZW9mIHRoaXMucmVzZXQ9PSJvYmplY3QiJiYhdGhpcy5yZXNldC5ub2RlVHlwZSkpe3RoaXMucmVzZXQoKX19KX07Zi5mbi5lbmFibGU9ZnVuY3Rpb24oZyl7aWYoZz09PXVuZGVmaW5lZCl7Zz10cnVlfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSFnfSl9O2YuZm4uc2VsZWN0ZWQ9ZnVuY3Rpb24oZyl7aWYoZz09PXVuZGVmaW5lZCl7Zz10cnVlfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaD10aGlzLnR5cGU7aWYoaD09ImNoZWNrYm94Inx8aD09InJhZGlvIil7dGhpcy5jaGVja2VkPWd9ZWxzZXtpZih0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09Im9wdGlvbiIpe3ZhciBpPWYodGhpcykucGFyZW50KCJzZWxlY3QiKTtpZihnJiZpWzBdJiZpWzBdLnR5cGU9PSJzZWxlY3Qtb25lIil7aS5maW5kKCJvcHRpb24iKS5zZWxlY3RlZChmYWxzZSl9dGhpcy5zZWxlY3RlZD1nfX19KX07Zi5mbi5hamF4U3VibWl0LmRlYnVnPWZhbHNlO2Z1bmN0aW9uIGQoKXtpZighZi5mbi5hamF4U3VibWl0LmRlYnVnKXtyZXR1cm59dmFyIGc9IltqcXVlcnkuZm9ybV0gIitBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywiIik7aWYod2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmxvZyl7d2luZG93LmNvbnNvbGUubG9nKGcpfWVsc2V7aWYod2luZG93Lm9wZXJhJiZ3aW5kb3cub3BlcmEucG9zdEVycm9yKXt3aW5kb3cub3BlcmEucG9zdEVycm9yKGcpfX19fSkpO1BLBwh2EBABoz4AAKM+AABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAABzdGF0aWNcbGliXG1hcmtlZC5taW4uanMhZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW5zLmxpbmtzPXt9LHRoaXMub3B0aW9ucz1lfHxoLmRlZmF1bHRzLHRoaXMucnVsZXM9YS5ub3JtYWwsdGhpcy5vcHRpb25zLmdmbSYmKHRoaXMucnVsZXM9dGhpcy5vcHRpb25zLnRhYmxlcz9hLnRhYmxlczphLmdmbSl9ZnVuY3Rpb24gdChlLHQpe2lmKHRoaXMub3B0aW9ucz10fHxoLmRlZmF1bHRzLHRoaXMubGlua3M9ZSx0aGlzLnJ1bGVzPXUubm9ybWFsLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgbiwhdGhpcy5saW5rcyl0aHJvdyBuZXcgRXJyb3IoIlRva2VucyBhcnJheSByZXF1aXJlcyBhIGBsaW5rc2AgcHJvcGVydHkuIik7dGhpcy5vcHRpb25zLmdmbT90aGlzLnJ1bGVzPXRoaXMub3B0aW9ucy5icmVha3M/dS5icmVha3M6dS5nZm06dGhpcy5vcHRpb25zLnBlZGFudGljJiYodGhpcy5ydWxlcz11LnBlZGFudGljKX1mdW5jdGlvbiBuKCl7fWZ1bmN0aW9uIHIoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbj1udWxsLHRoaXMub3B0aW9ucz1lfHxoLmRlZmF1bHRzLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBuLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKHQ/LyYvZzovJig/ISM/XHcrOykvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8iL2csIiZxdW90OyIpLnJlcGxhY2UoLycvZywiJiMzOTsiKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGU9ZS5zb3VyY2UsdD10fHwiIixmdW5jdGlvbiBuKHIscyl7cmV0dXJuIHI/KHM9cy5zb3VyY2V8fHMscz1zLnJlcGxhY2UoLyhefFteXFtdKVxeL2csIiQxIiksZT1lLnJlcGxhY2UocixzKSxuKTpuZXcgUmVnRXhwKGUsdCl9fWZ1bmN0aW9uIGwoKXt9ZnVuY3Rpb24gbyhlKXtmb3IodmFyIHQsbixyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7dD1hcmd1bWVudHNbcl07Zm9yKG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSl9cmV0dXJuIGV9ZnVuY3Rpb24gaCh0LG4saSl7aWYoaXx8ImZ1bmN0aW9uIj09dHlwZW9mIG4pe2l8fChpPW4sbj1udWxsKSxuPW8oe30saC5kZWZhdWx0cyxufHx7fSk7dmFyIGwsYSx1PW4uaGlnaGxpZ2h0LHA9MDt0cnl7bD1lLmxleCh0LG4pfWNhdGNoKGMpe3JldHVybiBpKGMpfWE9bC5sZW5ndGg7dmFyIGc9ZnVuY3Rpb24oKXt2YXIgZSx0O3RyeXtlPXIucGFyc2UobCxuKX1jYXRjaChzKXt0PXN9cmV0dXJuIG4uaGlnaGxpZ2h0PXUsdD9pKHQpOmkobnVsbCxlKX07aWYoIXV8fHUubGVuZ3RoPDMpcmV0dXJuIGcoKTtpZihkZWxldGUgbi5oaWdobGlnaHQsIWEpcmV0dXJuIGcoKTtmb3IoO3A8bC5sZW5ndGg7cCsrKSFmdW5jdGlvbihlKXtyZXR1cm4iY29kZSIhPT1lLnR5cGU/LS1hfHxnKCk6dShlLnRleHQsZS5sYW5nLGZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGw9PW58fG49PT1lLnRleHQ/LS1hfHxnKCk6KGUudGV4dD1uLGUuZXNjYXBlZD0hMCwtLWF8fGcoKSx2b2lkIDApfSl9KGxbcF0pfWVsc2UgdHJ5e3JldHVybiBuJiYobj1vKHt9LGguZGVmYXVsdHMsbikpLHIucGFyc2UoZS5sZXgodCxuKSxuKX1jYXRjaChjKXtpZihjLm1lc3NhZ2UrPSJcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vY2hqai9tYXJrZWQuIiwobnx8aC5kZWZhdWx0cykuc2lsZW50KXJldHVybiI8cD5BbiBlcnJvciBvY2N1cmVkOjwvcD48cHJlPiIrcyhjLm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iO3Rocm93IGN9fXZhciBhPXtuZXdsaW5lOi9eXG4rLyxjb2RlOi9eKCB7NH1bXlxuXStcbiopKy8sZmVuY2VzOmwsaHI6L14oICpbLSpfXSl7Myx9ICooPzpcbit8JCkvLGhlYWRpbmc6L14gKigjezEsNn0pICooW15cbl0rPykgKiMqICooPzpcbit8JCkvLG5wdGFibGU6bCxsaGVhZGluZzovXihbXlxuXSspXG4gKig9fC0pezIsfSAqKD86XG4rfCQpLyxibG9ja3F1b3RlOi9eKCAqPlteXG5dKyhcblteXG5dKykqXG4qKSsvLGxpc3Q6L14oICopKGJ1bGwpIFtcc1xTXSs/KD86aHJ8XG57Mix9KD8hICkoPyFcMWJ1bGwgKVxuKnxccyokKS8saHRtbDovXiAqKD86Y29tbWVudHxjbG9zZWR8Y2xvc2luZykgKig/OlxuezIsfXxccyokKS8sZGVmOi9eICpcWyhbXlxdXSspXF06ICo8PyhbXlxzPl0rKT4/KD86ICtbIihdKFteXG5dKylbIildKT8gKig/OlxuK3wkKS8sdGFibGU6bCxwYXJhZ3JhcGg6L14oKD86W15cbl0rXG4/KD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfHRhZ3xkZWYpKSspXG4qLyx0ZXh0Oi9eW15cbl0rL307YS5idWxsZXQ9Lyg/OlsqKy1dfFxkK1wuKS8sYS5pdGVtPS9eKCAqKShidWxsKSBbXlxuXSooPzpcbig/IVwxYnVsbCApW15cbl0qKSovLGEuaXRlbT1pKGEuaXRlbSwiZ20iKSgvYnVsbC9nLGEuYnVsbGV0KSgpLGEubGlzdD1pKGEubGlzdCkoL2J1bGwvZyxhLmJ1bGxldCkoImhyIiwvXG4rKD89KD86ICpbLSpfXSl7Myx9ICooPzpcbit8JCkpLykoKSxhLl90YWc9Iig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOi98QClcXGIiLGEuaHRtbD1pKGEuaHRtbCkoImNvbW1lbnQiLC88IS0tW1xzXFNdKj8tLT4vKSgiY2xvc2VkIiwvPCh0YWcpW1xzXFNdKz88XC9cMT4vKSgiY2xvc2luZyIsLzx0YWcoPzoiW14iXSoifCdbXiddKid8W14nIj5dKSo/Pi8pKC90YWcvZyxhLl90YWcpKCksYS5wYXJhZ3JhcGg9aShhLnBhcmFncmFwaCkoImhyIixhLmhyKSgiaGVhZGluZyIsYS5oZWFkaW5nKSgibGhlYWRpbmciLGEubGhlYWRpbmcpKCJibG9ja3F1b3RlIixhLmJsb2NrcXVvdGUpKCJ0YWciLCI8IithLl90YWcpKCJkZWYiLGEuZGVmKSgpLGEubm9ybWFsPW8oe30sYSksYS5nZm09byh7fSxhLm5vcm1hbCx7ZmVuY2VzOi9eICooYHszLH18fnszLH0pICooXFMrKT8gKlxuKFtcc1xTXSs/KVxzKlwxICooPzpcbit8JCkvLHBhcmFncmFwaDovXi99KSxhLmdmbS5wYXJhZ3JhcGg9aShhLnBhcmFncmFwaCkoIig/ISIsIig/ISIrYS5nZm0uZmVuY2VzLnNvdXJjZS5yZXBsYWNlKCJcXDEiLCJcXDIiKSsifCIrYS5saXN0LnNvdXJjZS5yZXBsYWNlKCJcXDEiLCJcXDMiKSsifCIpKCksYS50YWJsZXM9byh7fSxhLmdmbSx7bnB0YWJsZTovXiAqKFxTLipcfC4qKVxuICooWy06XSsgKlx8Wy18IDpdKilcbigoPzouKlx8LiooPzpcbnwkKSkqKVxuKi8sdGFibGU6L14gKlx8KC4rKVxuICpcfCggKlstOl0rWy18IDpdKilcbigoPzogKlx8LiooPzpcbnwkKSkqKVxuKi99KSxlLnJ1bGVzPWEsZS5sZXg9ZnVuY3Rpb24odCxuKXt2YXIgcj1uZXcgZShuKTtyZXR1cm4gci5sZXgodCl9LGUucHJvdG90eXBlLmxleD1mdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKS5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXHUwMGEwL2csIiAiKS5yZXBsYWNlKC9cdTI0MjQvZywiXG4iKSx0aGlzLnRva2VuKGUsITApfSxlLnByb3RvdHlwZS50b2tlbj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLHMsaSxsLG8saCx1LHAsZT1lLnJlcGxhY2UoL14gKyQvZ20sIiIpO2U7KWlmKChzPXRoaXMucnVsZXMubmV3bGluZS5leGVjKGUpKSYmKGU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHNbMF0ubGVuZ3RoPjEmJnRoaXMudG9rZW5zLnB1c2goe3R5cGU6InNwYWNlIn0pKSxzPXRoaXMucnVsZXMuY29kZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHM9c1swXS5yZXBsYWNlKC9eIHs0fS9nbSwiIiksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiY29kZSIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/czpzLnJlcGxhY2UoL1xuKyQvLCIiKX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmZlbmNlcy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLGxhbmc6c1syXSx0ZXh0OnNbM119KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5oZWFkaW5nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiaGVhZGluZyIsZGVwdGg6c1sxXS5sZW5ndGgsdGV4dDpzWzJdfSk7ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLm5wdGFibGUuZXhlYyhlKSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxvPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOnNbMV0ucmVwbGFjZSgvXiAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGFsaWduOnNbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxjZWxsczpzWzNdLnJlcGxhY2UoL1xuJC8sIiIpLnNwbGl0KCJcbiIpfSx1PTA7dTxvLmFsaWduLmxlbmd0aDt1Kyspby5hbGlnblt1XT0vXiAqLSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChvLmFsaWduW3VdKT8ibGVmdCI6bnVsbDtmb3IodT0wO3U8by5jZWxscy5sZW5ndGg7dSsrKW8uY2VsbHNbdV09by5jZWxsc1t1XS5zcGxpdCgvICpcfCAqLyk7dGhpcy50b2tlbnMucHVzaChvKX1lbHNlIGlmKHM9dGhpcy5ydWxlcy5saGVhZGluZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmciLGRlcHRoOiI9Ij09PXNbMl0/MToyLHRleHQ6c1sxXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmhyLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiaHIifSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuYmxvY2txdW90ZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImJsb2NrcXVvdGVfc3RhcnQifSkscz1zWzBdLnJlcGxhY2UoL14gKj4gPy9nbSwiIiksdGhpcy50b2tlbihzLHQpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImJsb2NrcXVvdGVfZW5kIn0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmxpc3QuZXhlYyhlKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLGk9c1syXSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X3N0YXJ0IixvcmRlcmVkOmkubGVuZ3RoPjF9KSxzPXNbMF0ubWF0Y2godGhpcy5ydWxlcy5pdGVtKSxuPSExLHA9cy5sZW5ndGgsdT0wO3A+dTt1Kyspbz1zW3VdLGg9by5sZW5ndGgsbz1vLnJlcGxhY2UoL14gKihbKistXXxcZCtcLikgKy8sIiIpLH5vLmluZGV4T2YoIlxuICIpJiYoaC09by5sZW5ndGgsbz10aGlzLm9wdGlvbnMucGVkYW50aWM/by5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTpvLnJlcGxhY2UobmV3IFJlZ0V4cCgiXiB7MSwiK2grIn0iLCJnbSIpLCIiKSksdGhpcy5vcHRpb25zLnNtYXJ0TGlzdHMmJnUhPT1wLTEmJihsPWEuYnVsbGV0LmV4ZWMoc1t1KzFdKVswXSxpPT09bHx8aS5sZW5ndGg+MSYmbC5sZW5ndGg+MXx8KGU9cy5zbGljZSh1KzEpLmpvaW4oIlxuIikrZSx1PXAtMSkpLHI9bnx8L1xuXG4oPyFccyokKS8udGVzdChvKSx1IT09cC0xJiYobj0iXG4iPT09by5jaGFyQXQoby5sZW5ndGgtMSkscnx8KHI9bikpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6cj8ibG9vc2VfaXRlbV9zdGFydCI6Imxpc3RfaXRlbV9zdGFydCJ9KSx0aGlzLnRva2VuKG8sITEpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3RfaXRlbV9lbmQifSk7dGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9lbmQifSl9ZWxzZSBpZihzPXRoaXMucnVsZXMuaHRtbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6dGhpcy5vcHRpb25zLnNhbml0aXplPyJwYXJhZ3JhcGgiOiJodG1sIixwcmU6InByZSI9PT1zWzFdfHwic2NyaXB0Ij09PXNbMV18fCJzdHlsZSI9PT1zWzFdLHRleHQ6c1swXX0pO2Vsc2UgaWYodCYmKHM9dGhpcy5ydWxlcy5kZWYuZXhlYyhlKSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMubGlua3Nbc1sxXS50b0xvd2VyQ2FzZSgpXT17aHJlZjpzWzJdLHRpdGxlOnNbM119O2Vsc2UgaWYodCYmKHM9dGhpcy5ydWxlcy50YWJsZS5leGVjKGUpKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLG89e3R5cGU6InRhYmxlIixoZWFkZXI6c1sxXS5yZXBsYWNlKC9eICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksYWxpZ246c1syXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGNlbGxzOnNbM10ucmVwbGFjZSgvKD86ICpcfCAqKT9cbiQvLCIiKS5zcGxpdCgiXG4iKX0sdT0wO3U8by5hbGlnbi5sZW5ndGg7dSsrKW8uYWxpZ25bdV09L14gKi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3Qoby5hbGlnblt1XSk/ImxlZnQiOm51bGw7Zm9yKHU9MDt1PG8uY2VsbHMubGVuZ3RoO3UrKylvLmNlbGxzW3VdPW8uY2VsbHNbdV0ucmVwbGFjZSgvXiAqXHwgKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKTt0aGlzLnRva2Vucy5wdXNoKG8pfWVsc2UgaWYodCYmKHM9dGhpcy5ydWxlcy5wYXJhZ3JhcGguZXhlYyhlKSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToicGFyYWdyYXBoIix0ZXh0OiJcbiI9PT1zWzFdLmNoYXJBdChzWzFdLmxlbmd0aC0xKT9zWzFdLnNsaWNlKDAsLTEpOnNbMV19KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy50ZXh0LmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToidGV4dCIsdGV4dDpzWzBdfSk7ZWxzZSBpZihlKXRocm93IG5ldyBFcnJvcigiSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKSk7cmV0dXJuIHRoaXMudG9rZW5zfTt2YXIgdT17ZXNjYXBlOi9eXFwoW1xcYCp7fVxbXF0oKSMrXC0uIV8+XSkvLGF1dG9saW5rOi9ePChbXiA+XSsoQHw6XC8pW14gPl0rKT4vLHVybDpsLHRhZzovXjwhLS1bXHNcU10qPy0tPnxePFwvP1x3Kyg/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPl0pKj8+LyxsaW5rOi9eIT9cWyhpbnNpZGUpXF1cKGhyZWZcKS8scmVmbGluazovXiE/XFsoaW5zaWRlKVxdXHMqXFsoW15cXV0qKVxdLyxub2xpbms6L14hP1xbKCg/OlxbW15cXV0qXF18W15cW1xdXSkqKVxdLyxzdHJvbmc6L15fXyhbXHNcU10rPylfXyg/IV8pfF5cKlwqKFtcc1xTXSs/KVwqXCooPyFcKikvLGVtOi9eXGJfKCg/Ol9ffFtcc1xTXSkrPylfXGJ8XlwqKCg/OlwqXCp8W1xzXFNdKSs/KVwqKD8hXCopLyxjb2RlOi9eKGArKVxzKihbXHNcU10qP1teYF0pXHMqXDEoPyFgKS8sYnI6L14gezIsfVxuKD8hXHMqJCkvLGRlbDpsLHRleHQ6L15bXHNcU10rPyg/PVtcXDwhXFtfKmBdfCB7Mix9XG58JCkvfTt1Ll9pbnNpZGU9Lyg/OlxbW15cXV0qXF18W15cW1xdXXxcXSg/PVteXFtdKlxdKSkqLyx1Ll9ocmVmPS9ccyo8PyhbXHNcU10qPyk+Pyg/OlxzK1snIl0oW1xzXFNdKj8pWyciXSk/XHMqLyx1Lmxpbms9aSh1LmxpbmspKCJpbnNpZGUiLHUuX2luc2lkZSkoImhyZWYiLHUuX2hyZWYpKCksdS5yZWZsaW5rPWkodS5yZWZsaW5rKSgiaW5zaWRlIix1Ll9pbnNpZGUpKCksdS5ub3JtYWw9byh7fSx1KSx1LnBlZGFudGljPW8oe30sdS5ub3JtYWwse3N0cm9uZzovXl9fKD89XFMpKFtcc1xTXSo/XFMpX18oPyFfKXxeXCpcKig/PVxTKShbXHNcU10qP1xTKVwqXCooPyFcKikvLGVtOi9eXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKXxeXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKS99KSx1LmdmbT1vKHt9LHUubm9ybWFsLHtlc2NhcGU6aSh1LmVzY2FwZSkoIl0pIiwifnxdKSIpKCksdXJsOi9eKGh0dHBzPzpcL1wvW15cczxdK1tePC4sOjsiJylcXVxzXSkvLGRlbDovXn5+KD89XFMpKFtcc1xTXSo/XFMpfn4vLHRleHQ6aSh1LnRleHQpKCJdfCIsIn5dfCIpKCJ8IiwifGh0dHBzPzovL3wiKSgpfSksdS5icmVha3M9byh7fSx1LmdmbSx7YnI6aSh1LmJyKSgiezIsfSIsIioiKSgpLHRleHQ6aSh1LmdmbS50ZXh0KSgiezIsfSIsIioiKSgpfSksdC5ydWxlcz11LHQub3V0cHV0PWZ1bmN0aW9uKGUsbixyKXt2YXIgcz1uZXcgdChuLHIpO3JldHVybiBzLm91dHB1dChlKX0sdC5wcm90b3R5cGUub3V0cHV0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaSxsPSIiO2U7KWlmKGk9dGhpcy5ydWxlcy5lc2NhcGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz1pWzFdO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmF1dG9saW5rLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksIkAiPT09aVsyXT8obj0iOiI9PT1pWzFdLmNoYXJBdCg2KT90aGlzLm1hbmdsZShpWzFdLnN1YnN0cmluZyg3KSk6dGhpcy5tYW5nbGUoaVsxXSkscj10aGlzLm1hbmdsZSgibWFpbHRvOiIpK24pOihuPXMoaVsxXSkscj1uKSxsKz10aGlzLnJlbmRlcmVyLmxpbmsocixudWxsLG4pO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnVybC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLG49cyhpWzFdKSxyPW4sbCs9dGhpcy5yZW5kZXJlci5saW5rKHIsbnVsbCxuKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy50YWcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLm9wdGlvbnMuc2FuaXRpemU/cyhpWzBdKTppWzBdO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmxpbmsuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLm91dHB1dExpbmsoaSx7aHJlZjppWzJdLHRpdGxlOmlbM119KTtlbHNlIGlmKChpPXRoaXMucnVsZXMucmVmbGluay5leGVjKGUpKXx8KGk9dGhpcy5ydWxlcy5ub2xpbmsuZXhlYyhlKSkpe2lmKGU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLHQ9KGlbMl18fGlbMV0pLnJlcGxhY2UoL1xzKy9nLCIgIiksdD10aGlzLmxpbmtzW3QudG9Mb3dlckNhc2UoKV0sIXR8fCF0LmhyZWYpe2wrPWlbMF0uY2hhckF0KDApLGU9aVswXS5zdWJzdHJpbmcoMSkrZTtjb250aW51ZX1sKz10aGlzLm91dHB1dExpbmsoaSx0KX1lbHNlIGlmKGk9dGhpcy5ydWxlcy5zdHJvbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLnN0cm9uZyh0aGlzLm91dHB1dChpWzJdfHxpWzFdKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuZW0uZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmVtKHRoaXMub3V0cHV0KGlbMl18fGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5jb2RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5jb2Rlc3BhbihzKGlbMl0sITApKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5ici5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuYnIoKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5kZWwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmRlbCh0aGlzLm91dHB1dChpWzFdKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMudGV4dC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXModGhpcy5zbWFydHlwYW50cyhpWzBdKSk7ZWxzZSBpZihlKXRocm93IG5ldyBFcnJvcigiSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKSk7cmV0dXJuIGx9LHQucHJvdG90eXBlLm91dHB1dExpbms9ZnVuY3Rpb24oZSx0KXt2YXIgbj1zKHQuaHJlZikscj10LnRpdGxlP3ModC50aXRsZSk6bnVsbDtyZXR1cm4iISIhPT1lWzBdLmNoYXJBdCgwKT90aGlzLnJlbmRlcmVyLmxpbmsobixyLHRoaXMub3V0cHV0KGVbMV0pKTp0aGlzLnJlbmRlcmVyLmltYWdlKG4scixzKGVbMV0pKX0sdC5wcm90b3R5cGUuc21hcnR5cGFudHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9ucy5zbWFydHlwYW50cz9lLnJlcGxhY2UoLy0tL2csIuKAlCIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3siXHNdKScvZywiJDHigJgiKS5yZXBsYWNlKC8nL2csIuKAmSIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3tcdTIwMThcc10pIi9nLCIkMeKAnCIpLnJlcGxhY2UoLyIvZywi4oCdIikucmVwbGFjZSgvXC57M30vZywi4oCmIik6ZX0sdC5wcm90b3R5cGUubWFuZ2xlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPSIiLHI9ZS5sZW5ndGgscz0wO3I+cztzKyspdD1lLmNoYXJDb2RlQXQocyksTWF0aC5yYW5kb20oKT4uNSYmKHQ9IngiK3QudG9TdHJpbmcoMTYpKSxuKz0iJiMiK3QrIjsiO3JldHVybiBufSxuLnByb3RvdHlwZS5jb2RlPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHI9cnx8e30sci5oaWdobGlnaHQpe3ZhciBpPXIuaGlnaGxpZ2h0KGUsdCk7bnVsbCE9aSYmaSE9PWUmJihuPSEwLGU9aSl9cmV0dXJuIHQ/JzxwcmU+PGNvZGUgY2xhc3M9Iicrci5sYW5nUHJlZml4K3QrJyI+Jysobj9lOnMoZSkpKyJcbjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+Iisobj9lOnMoZSwhMCkpKyJcbjwvY29kZT48L3ByZT4ifSxuLnByb3RvdHlwZS5ibG9ja3F1b3RlPWZ1bmN0aW9uKGUpe3JldHVybiI8YmxvY2txdW90ZT5cbiIrZSsiPC9ibG9ja3F1b3RlPlxuIn0sbi5wcm90b3R5cGUuaHRtbD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sbi5wcm90b3R5cGUuaGVhZGluZz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4iPGgiK3QrJyBpZD0iJytyLmhlYWRlclByZWZpeCtuLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15cd10rL2csIi0iKSsnIj4nK2UrIjwvaCIrdCsiPlxuIn0sbi5wcm90b3R5cGUuaHI9ZnVuY3Rpb24oKXtyZXR1cm4iPGhyPlxuIn0sbi5wcm90b3R5cGUubGlzdD1mdW5jdGlvbihlLHQpe3ZhciBuPXQ/Im9sIjoidWwiO3JldHVybiI8IituKyI+XG4iK2UrIjwvIituKyI+XG4ifSxuLnByb3RvdHlwZS5saXN0aXRlbT1mdW5jdGlvbihlKXtyZXR1cm4iPGxpPiIrZSsiPC9saT5cbiJ9LG4ucHJvdG90eXBlLnBhcmFncmFwaD1mdW5jdGlvbihlKXtyZXR1cm4iPHA+IitlKyI8L3A+XG4ifSxuLnByb3RvdHlwZS50YWJsZT1mdW5jdGlvbihlLHQpe3JldHVybiI8dGFibGU+XG48dGhlYWQ+XG4iK2UrIjwvdGhlYWQ+XG4iKyI8dGJvZHk+XG4iK3QrIjwvdGJvZHk+XG4iKyI8L3RhYmxlPlxuIn0sbi5wcm90b3R5cGUudGFibGVyb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIjx0cj5cbiIrZSsiPC90cj5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlY2VsbD1mdW5jdGlvbihlLHQpe3ZhciBuPXQuaGVhZGVyPyJ0aCI6InRkIixyPXQuYWxpZ24/IjwiK24rJyBzdHlsZT0idGV4dC1hbGlnbjonK3QuYWxpZ24rJyI+JzoiPCIrbisiPiI7cmV0dXJuIHIrZSsiPC8iK24rIj5cbiJ9LG4ucHJvdG90eXBlLnN0cm9uZz1mdW5jdGlvbihlKXtyZXR1cm4iPHN0cm9uZz4iK2UrIjwvc3Ryb25nPiJ9LG4ucHJvdG90eXBlLmVtPWZ1bmN0aW9uKGUpe3JldHVybiI8ZW0+IitlKyI8L2VtPiJ9LG4ucHJvdG90eXBlLmNvZGVzcGFuPWZ1bmN0aW9uKGUpe3JldHVybiI8Y29kZT4iK2UrIjwvY29kZT4ifSxuLnByb3RvdHlwZS5icj1mdW5jdGlvbigpe3JldHVybiI8YnI+In0sbi5wcm90b3R5cGUuZGVsPWZ1bmN0aW9uKGUpe3JldHVybiI8ZGVsPiIrZSsiPC9kZWw+In0sbi5wcm90b3R5cGUubGluaz1mdW5jdGlvbihlLHQsbil7dmFyIHI9JzxhIGhyZWY9IicrZSsnIic7cmV0dXJuIHQmJihyKz0nIHRpdGxlPSInK3QrJyInKSxyKz0iPiIrbisiPC9hPiJ9LG4ucHJvdG90eXBlLmltYWdlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0nPGltZyBzcmM9IicrZSsnIiBhbHQ9IicrbisnIic7cmV0dXJuIHQmJihyKz0nIHRpdGxlPSInK3QrJyInKSxyKz0iPiJ9LHIucGFyc2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPW5ldyByKHQsbik7cmV0dXJuIHMucGFyc2UoZSl9LHIucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUpe3RoaXMuaW5saW5lPW5ldyB0KGUubGlua3MsdGhpcy5vcHRpb25zLHRoaXMucmVuZGVyZXIpLHRoaXMudG9rZW5zPWUucmV2ZXJzZSgpO2Zvcih2YXIgbj0iIjt0aGlzLm5leHQoKTspbis9dGhpcy50b2soKTtyZXR1cm4gbn0sci5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2VuPXRoaXMudG9rZW5zLnBvcCgpfSxyLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aC0xXXx8MH0sci5wcm90b3R5cGUucGFyc2VUZXh0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMudG9rZW4udGV4dDsidGV4dCI9PT10aGlzLnBlZWsoKS50eXBlOyllKz0iXG4iK3RoaXMubmV4dCgpLnRleHQ7cmV0dXJuIHRoaXMuaW5saW5lLm91dHB1dChlKX0sci5wcm90b3R5cGUudG9rPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMudG9rZW4udHlwZSl7Y2FzZSJzcGFjZSI6cmV0dXJuIiI7Y2FzZSJociI6cmV0dXJuIHRoaXMucmVuZGVyZXIuaHIoKTtjYXNlImhlYWRpbmciOnJldHVybiB0aGlzLnJlbmRlcmVyLmhlYWRpbmcodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCksdGhpcy50b2tlbi5kZXB0aCx0aGlzLnRva2VuLnRleHQsdGhpcy5vcHRpb25zKTtjYXNlImNvZGUiOnJldHVybiB0aGlzLnJlbmRlcmVyLmNvZGUodGhpcy50b2tlbi50ZXh0LHRoaXMudG9rZW4ubGFuZyx0aGlzLnRva2VuLmVzY2FwZWQsdGhpcy5vcHRpb25zKTtjYXNlInRhYmxlIjp2YXIgZSx0LG4scixzLGk9IiIsbD0iIjtmb3Iobj0iIixlPTA7ZTx0aGlzLnRva2VuLmhlYWRlci5sZW5ndGg7ZSsrKXI9e2hlYWRlcjohMCxhbGlnbjp0aGlzLnRva2VuLmFsaWduW2VdfSxuKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi5oZWFkZXJbZV0pLHtoZWFkZXI6ITAsYWxpZ246dGhpcy50b2tlbi5hbGlnbltlXX0pO2ZvcihpKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KG4pLGU9MDtlPHRoaXMudG9rZW4uY2VsbHMubGVuZ3RoO2UrKyl7Zm9yKHQ9dGhpcy50b2tlbi5jZWxsc1tlXSxuPSIiLHM9MDtzPHQubGVuZ3RoO3MrKyluKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLmlubGluZS5vdXRwdXQodFtzXSkse2hlYWRlcjohMSxhbGlnbjp0aGlzLnRva2VuLmFsaWduW3NdfSk7bCs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhuKX1yZXR1cm4gdGhpcy5yZW5kZXJlci50YWJsZShpLGwpO2Nhc2UiYmxvY2txdW90ZV9zdGFydCI6Zm9yKHZhciBsPSIiOyJibG9ja3F1b3RlX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUobCk7Y2FzZSJsaXN0X3N0YXJ0Ijpmb3IodmFyIGw9IiIsbz10aGlzLnRva2VuLm9yZGVyZWQ7Imxpc3RfZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdChsLG8pO2Nhc2UibGlzdF9pdGVtX3N0YXJ0Ijpmb3IodmFyIGw9IiI7Imxpc3RfaXRlbV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9InRleHQiPT09dGhpcy50b2tlbi50eXBlP3RoaXMucGFyc2VUZXh0KCk6dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0aXRlbShsKTtjYXNlImxvb3NlX2l0ZW1fc3RhcnQiOmZvcih2YXIgbD0iIjsibGlzdF9pdGVtX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGwpO2Nhc2UiaHRtbCI6dmFyIGg9dGhpcy50b2tlbi5wcmV8fHRoaXMub3B0aW9ucy5wZWRhbnRpYz90aGlzLnRva2VuLnRleHQ6dGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCk7cmV0dXJuIHRoaXMucmVuZGVyZXIuaHRtbChoKTtjYXNlInBhcmFncmFwaCI6cmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpKTtjYXNlInRleHQiOnJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlVGV4dCgpKX19LGwuZXhlYz1sLGgub3B0aW9ucz1oLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oaC5kZWZhdWx0cyxlKSxofSxoLmRlZmF1bHRzPXtnZm06ITAsdGFibGVzOiEwLGJyZWFrczohMSxwZWRhbnRpYzohMSxzYW5pdGl6ZTohMSxzbWFydExpc3RzOiExLHNpbGVudDohMSxoaWdobGlnaHQ6bnVsbCxsYW5nUHJlZml4OiJsYW5nLSIsc21hcnR5cGFudHM6ITEsaGVhZGVyUHJlZml4OiIiLHJlbmRlcmVyOm5ldyBufSxoLlBhcnNlcj1yLGgucGFyc2VyPXIucGFyc2UsaC5SZW5kZXJlcj1uLGguTGV4ZXI9ZSxoLmxleGVyPWUubGV4LGguSW5saW5lTGV4ZXI9dCxoLmlubGluZUxleGVyPXQub3V0cHV0LGgucGFyc2U9aCwib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9aDoiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShmdW5jdGlvbigpe3JldHVybiBofSk6dGhpcy5tYXJrZWQ9aH0uY2FsbChmdW5jdGlvbigpe3JldHVybiB0aGlzfHwoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Omdsb2JhbCl9KCkpO1BLBwhC+kxqUzkAAFM5AABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAABzdGF0aWNcbGliXHZhbGlkYXRlLm1pbi5qcy8qCiAqIHZhbGlkYXRlLmpzIDEuMwogKiBDb3B5cmlnaHQgKGMpIDIwMTMgUmljayBIYXJyaXNvbiwgaHR0cDovL3JpY2toYXJyaXNvbi5tZQogKiB2YWxpZGF0ZS5qcyBpcyBvcGVuIHNvdXJjZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgogKiBQb3J0aW9ucyBvZiB2YWxpZGF0ZS5qcyBhcmUgaW5zcGlyZWQgYnkgQ29kZUlnbml0ZXIuCiAqIGh0dHA6Ly9yaWNraGFycmlzb24uZ2l0aHViLmNvbS92YWxpZGF0ZS5qcwogKi8KCihmdW5jdGlvbihxLHIsbSl7dmFyIHM9e3JlcXVpcmVkOiJUaGUgJXMgZmllbGQgaXMgcmVxdWlyZWQuIixtYXRjaGVzOiJUaGUgJXMgZmllbGQgZG9lcyBub3QgbWF0Y2ggdGhlICVzIGZpZWxkLiIsImRlZmF1bHQiOiJUaGUgJXMgZmllbGQgaXMgc3RpbGwgc2V0IHRvIGRlZmF1bHQsIHBsZWFzZSBjaGFuZ2UuIix2YWxpZF9lbWFpbDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuIix2YWxpZF9lbWFpbHM6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYWxsIHZhbGlkIGVtYWlsIGFkZHJlc3Nlcy4iLG1pbl9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IGJlIGF0IGxlYXN0ICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsbWF4X2xlbmd0aDoiVGhlICVzIGZpZWxkIG11c3Qgbm90IGV4Y2VlZCAlcyBjaGFyYWN0ZXJzIGluIGxlbmd0aC4iLGV4YWN0X2xlbmd0aDoiVGhlICVzIGZpZWxkIG11c3QgYmUgZXhhY3RseSAlcyBjaGFyYWN0ZXJzIGluIGxlbmd0aC4iLGdyZWF0ZXJfdGhhbjoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBncmVhdGVyIHRoYW4gJXMuIixsZXNzX3RoYW46IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBudW1iZXIgbGVzcyB0aGFuICVzLiIsYWxwaGE6IlRoZSAlcyBmaWVsZCBtdXN0IG9ubHkgY29udGFpbiBhbHBoYWJldGljYWwgY2hhcmFjdGVycy4iLGFscGhhX251bWVyaWM6IlRoZSAlcyBmaWVsZCBtdXN0IG9ubHkgY29udGFpbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMuIixhbHBoYV9kYXNoOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzLCB1bmRlcnNjb3JlcywgYW5kIGRhc2hlcy4iLG51bWVyaWM6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSBudW1iZXJzLiIsaW50ZWdlcjoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhbiBpbnRlZ2VyLiIsZGVjaW1hbDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIGRlY2ltYWwgbnVtYmVyLiIsaXNfbmF0dXJhbDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5IHBvc2l0aXZlIG51bWJlcnMuIixpc19uYXR1cmFsX25vX3plcm86IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8uIix2YWxpZF9pcDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIElQLiIsdmFsaWRfYmFzZTY0OiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgYmFzZTY0IHN0cmluZy4iLHZhbGlkX2NyZWRpdF9jYXJkOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgY3JlZGl0IGNhcmQgbnVtYmVyLiIsaXNfZmlsZV90eXBlOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgJXMgZmlsZXMuIix2YWxpZF91cmw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBVUkwuIn0sdD1mdW5jdGlvbihhKXt9LHU9L14oLis/KVxbKC4rKVxdJC8saD0vXlswLTldKyQvLHY9L15cLT9bMC05XSskLyxrPS9eXC0/WzAtOV0qXC4/WzAtOV0rJC8scD0vXlthLXpBLVowLTkuISMkJSZhbXA7JyorXC1cLz0/XF5fYHt8fX5cLV0rQFthLXpBLVowLTlcLV0rKD86XC5bYS16QS1aMC05XC1dKykqJC8sdz0vXlthLXpdKyQvaSx4PS9eW2EtejAtOV0rJC9pLHk9L15bYS16MC05X1wtXSskL2ksej0vXlswLTldKyQvaSxBPS9eWzEtOV1bMC05XSokL2ksQj0vXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzAtOV17MSwyfSlcLil7M30oMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzAtOV17MSwyfSkkL2ksQz0vW15hLXpBLVowLTlcL1wrPV0vaSxEPS9eW1xkXC1cc10rJC8sRT0vXigoaHR0cHxodHRwcyk6XC9cLyhcdys6ezAsMX1cdypAKT8oXFMrKXwpKDpbMC05XSspPyhcL3xcLyhbXHcjITouPys9JiVAIVwtXC9dKSk/JC8sZT1mdW5jdGlvbihhLGIsYyl7dGhpcy5jYWxsYmFjaz1jfHx0O3RoaXMuZXJyb3JzPVtdO3RoaXMuZmllbGRzPXt9O3RoaXMuZm9ybT10aGlzLl9mb3JtQnlOYW1lT3JOb2RlKGEpfHx7fTt0aGlzLm1lc3NhZ2VzPXt9O3RoaXMuaGFuZGxlcnM9e307YT0wO2ZvcihjPWIubGVuZ3RoO2E8YzthKyspe3ZhciBkPWJbYV07aWYoKGQubmFtZXx8ZC5uYW1lcykmJmQucnVsZXMpaWYoZC5uYW1lcylmb3IodmFyIGw9MDtsPGQubmFtZXMubGVuZ3RoO2wrKyl0aGlzLl9hZGRGaWVsZChkLGQubmFtZXNbbF0pO2Vsc2UgdGhpcy5fYWRkRmllbGQoZCxkLm5hbWUpfXZhciBnPXRoaXMuZm9ybS5vbnN1Ym1pdDt0aGlzLmZvcm0ub25zdWJtaXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3RyeXtyZXR1cm4gYS5fdmFsaWRhdGVGb3JtKGIpJiYoZz09PW18fGcoKSl9Y2F0Y2goYyl7fX19KHRoaXMpfSxuPWZ1bmN0aW9uKGEsYil7dmFyIGM7aWYoMDxhLmxlbmd0aCYmKCJyYWRpbyI9PT1hWzBdLnR5cGV8fCJjaGVja2JveCI9PT1hWzBdLnR5cGUpKWZvcihjPTA7YzxhLmxlbmd0aDtjKyspe2lmKGFbY10uY2hlY2tlZClyZXR1cm4gYVtjXVtiXX1lbHNlIHJldHVybiBhW2JdfTtlLnByb3RvdHlwZS5zZXRNZXNzYWdlPWZ1bmN0aW9uKGEsYil7dGhpcy5tZXNzYWdlc1thXT1iO3JldHVybiB0aGlzfTtlLnByb3RvdHlwZS5yZWdpc3RlckNhbGxiYWNrPWZ1bmN0aW9uKGEsYil7YSYmKCJzdHJpbmciPT09dHlwZW9mIGEmJmImJiJmdW5jdGlvbiI9PT10eXBlb2YgYikmJih0aGlzLmhhbmRsZXJzW2FdPWIpO3JldHVybiB0aGlzfTtlLnByb3RvdHlwZS5fZm9ybUJ5TmFtZU9yTm9kZT1mdW5jdGlvbihhKXtyZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiBhP2E6ci5mb3Jtc1thXX07ZS5wcm90b3R5cGUuX2FkZEZpZWxkPWZ1bmN0aW9uKGEsYil7dGhpcy5maWVsZHNbYl09e25hbWU6YixkaXNwbGF5OmEuZGlzcGxheXx8YixydWxlczphLnJ1bGVzLGlkOm51bGwsdHlwZTpudWxsLHZhbHVlOm51bGwsY2hlY2tlZDpudWxsfX07ZS5wcm90b3R5cGUuX3ZhbGlkYXRlRm9ybT1mdW5jdGlvbihhKXt0aGlzLmVycm9ycz1bXTtmb3IodmFyIGIgaW4gdGhpcy5maWVsZHMpaWYodGhpcy5maWVsZHMuaGFzT3duUHJvcGVydHkoYikpe3ZhciBjPXRoaXMuZmllbGRzW2JdfHx7fSxkPXRoaXMuZm9ybVtjLm5hbWVdO2QmJmQhPT1tJiYoYy5pZD1uKGQsImlkIiksYy50eXBlPTA8ZC5sZW5ndGg/ZFswXS50eXBlOmQudHlwZSxjLnZhbHVlPW4oZCwidmFsdWUiKSxjLmNoZWNrZWQ9bihkLCJjaGVja2VkIiksdGhpcy5fdmFsaWRhdGVGaWVsZChjKSl9ImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmNhbGxiYWNrJiZ0aGlzLmNhbGxiYWNrKHRoaXMuZXJyb3JzLGEpOzA8dGhpcy5lcnJvcnMubGVuZ3RoJiYoYSYmYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6ZXZlbnQmJihldmVudC5yZXR1cm5WYWx1ZT0hMSkpO3JldHVybiEwfTtlLnByb3RvdHlwZS5fdmFsaWRhdGVGaWVsZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9YS5ydWxlcy5zcGxpdCgifCIpLGM9YS5ydWxlcy5pbmRleE9mKCJyZXF1aXJlZCIpLGQ9IWEudmFsdWV8fCIiPT09YS52YWx1ZXx8YS52YWx1ZT09PW0sbD0wLGc9Yi5sZW5ndGg7bDxnO2wrKyl7dmFyIGY9YltsXSxlPW51bGwsaD0hMSxrPXUuZXhlYyhmKTtpZigtMSE9PWN8fC0xIT09Zi5pbmRleE9mKCIhY2FsbGJhY2tfIil8fCFkKWlmKGsmJihmPWtbMV0sZT1rWzJdKSwiISI9PT1mLmNoYXJBdCgwKSYmKGY9Zi5zdWJzdHJpbmcoMSxmLmxlbmd0aCkpLCJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5faG9va3NbZl0/dGhpcy5faG9va3NbZl0uYXBwbHkodGhpcyxbYSxlXSl8fChoPSEwKToiY2FsbGJhY2tfIj09PWYuc3Vic3RyaW5nKDAsOSkmJihmPWYuc3Vic3RyaW5nKDksZi5sZW5ndGgpLCJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5oYW5kbGVyc1tmXSYmITE9PT10aGlzLmhhbmRsZXJzW2ZdLmFwcGx5KHRoaXMsW2EudmFsdWUsZV0pJiYoaD0hMCkpLGgpe2I9dGhpcy5tZXNzYWdlc1tmXXx8c1tmXTtjPSJBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2l0aCB0aGUgIithLmRpc3BsYXkrIiBmaWVsZC4iO2ImJihjPWIucmVwbGFjZSgiJXMiLGEuZGlzcGxheSksZSYmKGM9Yy5yZXBsYWNlKCIlcyIsdGhpcy5maWVsZHNbZV0/dGhpcy5maWVsZHNbZV0uZGlzcGxheTplKSkpO3RoaXMuZXJyb3JzLnB1c2goe2lkOmEuaWQsbmFtZTphLm5hbWUsbWVzc2FnZTpjLHJ1bGU6Zn0pO2JyZWFrfX19O2UucHJvdG90eXBlLl9ob29rcz17cmVxdWlyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS52YWx1ZTtyZXR1cm4iY2hlY2tib3giPT09YS50eXBlfHwicmFkaW8iPT09YS50eXBlPyEwPT09YS5jaGVja2VkOm51bGwhPT1iJiYiIiE9PWJ9LCJkZWZhdWx0IjpmdW5jdGlvbihhLGIpe3JldHVybiBhLnZhbHVlIT09Yn0sbWF0Y2hlczpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZm9ybVtiXTtyZXR1cm4gYz9hLnZhbHVlPT09Yy52YWx1ZTohMX0sdmFsaWRfZW1haWw6ZnVuY3Rpb24oYSl7cmV0dXJuIHAudGVzdChhLnZhbHVlKX0sdmFsaWRfZW1haWxzOmZ1bmN0aW9uKGEpe2E9YS52YWx1ZS5zcGxpdCgiLCIpO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKWlmKCFwLnRlc3QoYVtiXSkpcmV0dXJuITE7cmV0dXJuITB9LG1pbl9sZW5ndGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC50ZXN0KGIpP2EudmFsdWUubGVuZ3RoPj1wYXJzZUludChiLDEwKTohMX0sbWF4X2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg8PXBhcnNlSW50KGIsMTApOiExfSxleGFjdF9sZW5ndGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC50ZXN0KGIpP2EudmFsdWUubGVuZ3RoPT09cGFyc2VJbnQoYiwxMCk6ITF9LGdyZWF0ZXJfdGhhbjpmdW5jdGlvbihhLGIpe3JldHVybiBrLnRlc3QoYS52YWx1ZSk/cGFyc2VGbG9hdChhLnZhbHVlKT5wYXJzZUZsb2F0KGIpOiExfSxsZXNzX3RoYW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpP3BhcnNlRmxvYXQoYS52YWx1ZSk8cGFyc2VGbG9hdChiKTohMX0sYWxwaGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHcudGVzdChhLnZhbHVlKX0sYWxwaGFfbnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4geC50ZXN0KGEudmFsdWUpfSxhbHBoYV9kYXNoOmZ1bmN0aW9uKGEpe3JldHVybiB5LnRlc3QoYS52YWx1ZSl9LG51bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIGgudGVzdChhLnZhbHVlKX0saW50ZWdlcjpmdW5jdGlvbihhKXtyZXR1cm4gdi50ZXN0KGEudmFsdWUpfSxkZWNpbWFsOmZ1bmN0aW9uKGEpe3JldHVybiBrLnRlc3QoYS52YWx1ZSl9LGlzX25hdHVyYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIHoudGVzdChhLnZhbHVlKX0saXNfbmF0dXJhbF9ub196ZXJvOmZ1bmN0aW9uKGEpe3JldHVybiBBLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2lwOmZ1bmN0aW9uKGEpe3JldHVybiBCLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2Jhc2U2NDpmdW5jdGlvbihhKXtyZXR1cm4gQy50ZXN0KGEudmFsdWUpfSx2YWxpZF91cmw6ZnVuY3Rpb24oYSl7cmV0dXJuIEUudGVzdChhLnZhbHVlKX0sdmFsaWRfY3JlZGl0X2NhcmQ6ZnVuY3Rpb24oYSl7aWYoIUQudGVzdChhLnZhbHVlKSlyZXR1cm4hMTt2YXIgYj0wLGM9MCxkPSExO2E9YS52YWx1ZS5yZXBsYWNlKC9cRC9nLCIiKTtmb3IodmFyIGU9YS5sZW5ndGgtMTswPD1lO2UtLSljPWEuY2hhckF0KGUpLGM9cGFyc2VJbnQoYywxMCksZCYmOTwoYyo9MikmJihjLT05KSxiKz1jLGQ9IWQ7cmV0dXJuIDA9PT1iJTEwfSxpc19maWxlX3R5cGU6ZnVuY3Rpb24oYSxiKXtpZigiZmlsZSIhPT1hLnR5cGUpcmV0dXJuITA7dmFyIGM9YS52YWx1ZS5zdWJzdHIoYS52YWx1ZS5sYXN0SW5kZXhPZigiLiIpKzEpLGQ9Yi5zcGxpdCgiLCIpLGU9ITEsZz0wLGY9ZC5sZW5ndGg7Zm9yKGc7ZzxmO2crKyljPT1kW2ddJiYoZT0hMCk7cmV0dXJuIGV9fTtxLkZvcm1WYWxpZGF0b3I9ZX0pKHdpbmRvdyxkb2N1bWVudCk7ClBLBwhmjB/EMxgAADMYAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAB2aWV3L1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAB2aWV3XGFkbWluL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXGFydGljbGVzLmh0bWw8dWwgaWQ9ImFydGljbGUtbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+DQogICAgPGxpPg0KICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS93cml0ZS8iPua3u+WKoOaWh+eroDwvYT4NCiAgICA8L2xpPnt7cmFuZ2UgLkFydGljbGVzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+PGg0IGNsYXNzPSJpbmxpbmUtYmxvY2sgdGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LlRpdGxlfX08L2E+PC9oND57e2lmIG5lIC5TdGF0dXMgInB1Ymxpc2gifX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxibCBzdGF0dXMiPuiNieeovzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJzbHVnIj57ey5TbHVnfX08L3NwYW4+e3tpZiBlcSAuSXNDb21tZW50IGZhbHNlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImlzLWNvbW1lbnQiPjxpIGNsYXNzPSJmYS1jb21tZW50cyBmYSI+PC9pPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvc3Bhbj57e2VuZH19DQogICAgICAgIDxhIGNsYXNzPSJlZGl0IGxibCBsYmwtZ3JlZW4iIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPue8lui+kTwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBsYmwgbGJsLXJlZCIgaHJlZj0iL2FkbWluL2FydGljbGUve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+5Yig6ZmkPC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKCIuZGVsIikub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBpZihjb25maXJtKCLliKDpmaTmlofnq6DlsIbkvb/nm7jlhbPlhoXlrrnlpLHmlYjvvIHnoa7orqTvvJ8iKSl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAidXJsIjoiL2FkbWluL2FydGljbGUvIitpZCsiLyIsDQogICAgICAgICAgICAgICAgInR5cGUiOiJkZWxldGUiLA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suWIoOmZpCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0NCiAgICB9KTsNCjwvc2NyaXB0PlBLBwiWdHISbgYAAG4GAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAB2aWV3XGFkbWluXGNtZC9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblxjbWRcYmFja3VwLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIGNsZWFyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSBsZWZ0Ij7lpIfku73mlbDmja48L2gxPg0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSBsZWZ0IiBpZD0iYmFja3VwLWJ0biI+5aSH5Lu9PC9idXR0b24+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJiYWNrdXAtbGlzdCI+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZVRpbWUgLk1vZFRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIiByZWw9Int7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZS1vIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNiYWNrdXAtYnRuJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICB0eXBlOiAicG9zdCIsDQogICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAkKCcuY21kLWxpc3QnKS5wcmVwZW5kKCc8bGkgY2xhc3M9ImJhY2t1cC1sb2FkaW5nIj7lpIfku73kuK0uLjwvbGk+Jyk7DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuaGlkZSgpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuYmFja3VwLWxvYWRpbmcnKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLXJlc3VsdCI+5Yia5Yia5aSH5Lu95YiwICcgKyBqc29uLmZpbGUgKyAnPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkKCcjYmFja3VwLWJ0bicpLnNob3coKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHVybDogIi9jbWQvYmFja3VwLz9maWxlPSIgKyAkKHRoaXMpLmF0dHIoInJlbCIpLA0KICAgICAgICAgICAgICAgIHR5cGU6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICQodGhhdCkucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCNBwsljoBgAA6AYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcYWRtaW5cY29tbWVudHMuaHRtbDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCIgY2xhc3M9ImFkbWluIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuQ29tbWVudHN9fQ0KICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiIGlkPSJjb21tZW50LXt7LklkfX0iPg0KICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9Int7LkF1dGhvcn19Ii8+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiBsZWZ0Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSI+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSBjLWF1dGhvcnt7aWYgLklzQWRtaW59fSBhZG1pbnt7ZW5kfX0iIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+e3suQXV0aG9yfX17e2lmIC5Jc0FkbWlufX0mbmJzcDsmbmJzcDsoYWRtaW4pe3tlbmR9fTwvYT4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj57e2lmIC5HZXRDb250ZW50fX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jbnQiPkB7ey5HZXRDb250ZW50LlRpdGxlfX08L3NwYW4+e3tlbHNlfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jbnQiPkDml6DmlYg8L3NwYW4+e3tlbmR9fXt7aWYgbmUgLlN0YXR1cyAiYXBwcm92ZWQifX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1jaGVjayIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5a6h5qC4Ij48aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUiPjwvaT7lrqHmoLjkuK08L2E+e3tlbmR9fQ0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLlm57lpI0iPjxpIGNsYXNzPSJmYSBmYS1xdW90ZS1yaWdodCI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1kZWwiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWIoOmZpCI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+e3tlbmR9fQ0KICAgIDx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICAgICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vY29tbWVudHMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KICAgIDwvdWw+DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgYWN0aW9uPSIvYWRtaW4vY29tbWVudHMvIiBjbGFzcz0iZm9ybSBjbGVhciBsZWZ0IiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBsZWZ0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSIgaWQ9ImNvbW1lbnQtc3VibWl0Ij7lm57lpI3or4Torro8L2J1dHRvbj4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiIgaWQ9ImNvbW1lbnQtY2xvc2UiPuWFs+mXreWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgaWQ9ImNvbW1lbnQtcGFyZW50IiBuYW1lPSJwaWQiLz4NCiAgICA8L2Zvcm0+DQo8L2Rpdj4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5jLWRlbCcpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLliKDpmaTor4TorrrlsIbkvb/nm7jlhbPlhoXlrrnml6DmlYghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYWRtaW4vY29tbWVudHMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjb21tZW50LScgKyBpZCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLliKDpmaTlpLHotKUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuYy1jaGVjaycpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLlrqHmoLjlkI7mraTkvZzogIXlsIbkuI3lho3moIforrDlrqHmoLghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICJwdXQiLA0KICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYWRtaW4vY29tbWVudHMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjb21tZW50LScgKyBpZCkuZmluZCgiLmMtY2hlY2siKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWuoeaguOWksei0pSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5jLXJlcGx5Jykub24oImNsaWNrIixmdW5jdGlvbigpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LScraWQpLmFwcGVuZCgkKCcjY29tbWVudC1mb3JtJykuZGV0YWNoKCkuc2hvdygpKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbChpZCk7DQogICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5Zue5aSNIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2NvbW1lbnRzLyI7DQogICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICBhbGVydCgi5Zue5aSN5aSx6LSlIik7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjY29tbWVudC1jbG9zZScpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5oaWRlKCk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoMCk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykudmFsKCIiKTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwiTCA6EtA8AALQPAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAB2aWV3XGFkbWluXGN1c3RvbV9zZXR0aW5nLmh0bWw8Zm9ybSBpZD0ic2V0dGluZy1mb3JtIiBjbGFzcz0iZm9ybSBmb3JtLWFsaWduIGN1c3RvbSIgYWN0aW9uPSIvYWRtaW4vc2V0dGluZy9jdXN0b20vIiBtZXRob2Q9InBvc3QiPnt7cmFuZ2UgJGssJHYgOj0gLlNldHRpbmdzfX0NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IGtleSIgdHlwZT0idGV4dCIgbmFtZT0ia2V5IiB2YWx1ZT0ie3ska319Ii8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7JHZ9fSIvPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgPC9wPnt7ZW5kfX0NCiAgICA8cD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZg8L2J1dHRvbj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtZ3JlZW4gYWRkIiBocmVmPSIjIj7mt7vliqDkuIDpobk8L2E+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS9v+eUqOWHveaVsOiHquWumuS5iemFjee9ru+8jOmcgOimgeWKoOWJjee8gCJjXyLvvIzlpoJHZXRTZXR0aW5nKCJjX2tleSIpPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjdXN0b20taXRlbSI+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IGtleSIgdHlwZT0idGV4dCIgbmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0i5a2X5q615ZCNIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSLlrZfmrrXlgLwiLz4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgPC9wPg0KICAgIDwvc2NyaXB0Pg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI3NldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiIDoganNvbi5tc2cpOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmFkZCcpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcjc2V0dGluZy1mb3JtJykucHJlcGVuZCgkKCIjY3VzdG9tLWl0ZW0iKS5odG1sKCkpOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmRlbCcpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICBpZihjb25maXJtKCLopoHliKDpmaTov5npobnvvJ8iKSl7DQogICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCLh4ZZY0BgAANAYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAHZpZXdcYWRtaW5cZWRpdF9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIiB2YWx1ZT0ie3suQXJ0aWNsZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5BcnRpY2xlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suQXJ0aWNsZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+IiB2YWx1ZT0ie3suQXJ0aWNsZS5UYWdTdHJpbmd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoInt7aWYgZXEgLkFydGljbGUuU3RhdHVzICJwdWJsaXNoIn19IHNlbGVjdGVke3tlbmR9fT7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCJ7e2lmIGVxIC5BcnRpY2xlLlN0YXR1cyAiZHJhZnQifX0gc2VsZWN0ZWR7e2VuZH19PuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuQXJ0aWNsZS5Jc0NvbW1lbnQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgi5bey5L+d5a2Y77yM5Y675p+l55yL77yf6L+Y5piv57un57ut57yW6L6RIikpIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2FydGljbGVzLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhLnOnxbQ0AAG0NAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGFkbWluXGVkaXRfcGFnZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9Iumhtemdouagh+mimCIgdmFsdWU9Int7LlBhZ2UuVGl0bGV9fSIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPnt7SHRtbCAuUGFnZS5UZXh0fX08L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumhtemdoueahOWUr+S4gOmTvuaOpSIgdmFsdWU9Int7LlBhZ2UuU2x1Z319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuUGFnZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLlBhZ2UuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPue9rumhtumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ibGluayIgaWQ9ImlzLWxpbmsiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNMaW5rZWQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vcGFnZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCLZ4MjLjDQAA4w0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5cZmlsZXMuaHRtbDx1bCBpZD0iZmlsZXMtbGlzdCIgY2xhc3M9ImFkbWluIGNvbnRhaW5lcjk2MCBwYWdlciI+DQogICAgPGxpIGNsYXNzPSJmaWxlIiBpZD0iZmlsZXMtYnRuLWxpIj4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICA8L2xpPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlLXt7LklkfX0iPg0KICAgICAgICA8c3BhbiBjbGFzcz0idXBsb2FkLXRpbWUiPnt7RGF0ZUludDY0IC5VcGxvYWRUaW1lICJNTS5ERCJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InNpemUiPnt7RmlsZVNpemUgLlNpemV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii97ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSIve3suVXJsfX0iPjxpIGNsYXNzPSJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZSI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBmYWRlLW91dCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Yig6Zmk6ZmE5Lu2Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KICAgIHt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vZmlsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICBpbml0VXBsb2FkKCIjYXR0YWNoLXNob3ciKTsNCiAgICAgICAgJCgiLmRlbCIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLliKDpmaTpmYTku7bnm7jlhbPpk77mjqXkvJrlpLHmlYghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiL2FkbWluL2ZpbGVzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZmlsZS0nK2lkKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCGLFm/rsBgAA7AYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHZpZXdcYWRtaW5caG9tZS5odG1sPGRpdiBjbGFzcz0iYWRtaW4gY29udGFpbmVyIGNsZWFyIiBpZD0iZGFzaGJvYXJkIj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtNSBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0id2VsY29tZSI+DQogICAgICAgICAgICA8aDQ+V2VsY29tZTwvaDQ+DQogICAgICAgICAgICA8cD7mrKLov47lm57mnaXvvIwgPHN0cm9uZz57ey5Vc2VyLk5pY2t9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InF1aWNrLWxpbmsiPg0KICAgICAgICAgICAgPGg0PuW/q+mAn+mTvuaOpTwvaDQ+DQogICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5pKw5YaZ5paH56ugPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wYWdlL3dyaXRlLyI+5re75Yqg6aG16Z2iPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iPuafpeeci+WSjOWuoeaguOivhOiuujwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vc2V0dGluZy8iPuS/ruaUuemFjee9rjwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vcHJvZmlsZS8iPuabtOaWsOS4quS6uui1hOaWmTwvYT48L2xpPg0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTIgbGVmdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5Ij4NCiAgICAgICAgICAgIDxoND7mnIDmlrDmtLvliqg8L2g0Pg0KICAgICAgICAgICAgPHA+5YaF5a655byA5Y+R5LitLi4uPC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtNCByaWdodCI+DQogICAgICAgIDxkaXYgY2xhc3M9InN0YXRzIj4NCiAgICAgICAgICAgIDxoND7mlbDmja7nu5/orqE8L2g0Pg0KICAgICAgICAgICAgPHA+5bey57uP5Y+R5biD5paH56ugIDxzcGFuIGNsYXNzPSJsYmwgbGJsLXJlZCI+e3suU3RhdGlzLkFydGljbGVzfX08L3NwYW4+IOevh++8jA0KICAgICAgICAgICAg6aG16Z2iIDxzcGFuIGNsYXNzPSJsYmwgbGJsLXJlZCI+e3suU3RhdGlzLlBhZ2VzfX08L3NwYW4+IOS4qu+8jCA8YnIvPg0KICAgICAgICAgICAg5pS25Yiw6K+E6K66IDxzcGFuIGNsYXNzPSJsYmwgbGJsLWJsdWUiPnt7LlN0YXRpcy5Db21tZW50c319PC9zcGFuPiDmrKHvvIwNCiAgICAgICAgICAgIOS4iuS8oCA8c3BhbiBjbGFzcz0ibGJsIGxibC1ncmVlbiI+e3suU3RhdGlzLkZpbGVzfX08L3NwYW4+IOS4qumZhOS7tjwvcD4NCiAgICAgICAgICAgIDxwPuW9k+WJjeeoi+W6j+eJiOacrO+8mjxzdHJvbmc+e3suU3RhdGlzLlZlcnNpb259fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im9mZmljZSI+DQogICAgICAgICAgICA8aDQ+5a6Y5pa55raI5oGvPC9oND4NCiAgICAgICAgICAgIDxwPui/mOayoeaciea2iOaBrzwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQo8L2Rpdj5QSwcIIVkedC8GAAAvBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxsb2dpbi5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPueZu+W9lSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPg0KICAgICAgICAjbG9naW4tZm9ybXsNCiAgICAgICAgICAgIHdpZHRoOiAyODBweDsNCiAgICAgICAgICAgIG1hcmdpbjogODBweCBhdXRvOw0KICAgICAgICB9DQogICAgICAgICNsb2dpbi1mb3JtIGgxew0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsNCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxmb3JtIGlkPSJsb2dpbi1mb3JtIiBjbGFzcz0iZm9ybSBmb3JtLXZlcnRpY2FsIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0ibG9naW4tZm9ybSI+DQogICAgPGgxPueZu+W9lSAtIEZ4aC5HbzwvaDE+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0idXNlciI+55So5oi35ZCNPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQiIGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InVzZXIiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVzZXItaW52YWxpZCI+55So5oi35ZCN5Li65a2X5q+NK+aVsOWtl++8jOmVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9InBhc3N3b3JkIj7nlKjmiLflr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJwYXNzd29yZCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0icGFzc3dvcmQtaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7nmbsg5b2VPC9idXR0b24+DQogICAgPHNwYW4gY2xhc3M9InRpcCI+6buY6K6k6K6w5L2P55m76ZmGM+WkqTwvc3Bhbj4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2Nkbi5zdGF0aWNmaWxlLm9yZy9qcXVlcnkuZm9ybS8zLjQ2L2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvdmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigibG9naW4tZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoidXNlciIsInJ1bGVzIjoiYWxwaGFfbnVtZXJpY3xtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJwYXNzd29yZCIsInJ1bGVzIjoicmVxdWlyZWR8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI2xvZ2luLWZvcm0nKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLnmbvlvZXplJnor6/vvIzor7fmo4Dmn6XnlKjmiLfmiJblr4bnoIEiKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcI1uB4YpAIAACQCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxwYWdlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+DQogICAgPC9saT57e3JhbmdlIC5QYWdlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vcGFnZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk6aG16Z2i5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9wYWdlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIa+TbIVwGAABcBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxwYXNzd29yZC5odG1sPGZvcm0gaWQ9InBhc3N3b3JkIiBjbGFzcz0iZm9ybSBmb3JtLWFsaWduIGNsZWFyIiBhY3Rpb249IiMiIG5hbWU9InBhc3N3b3JkLWZvcm0iIG1ldGhvZD0icG9zdCI+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ib2xkIj7ml6flr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im9sZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im9sZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPumqjOivgeaXp+WvhueggTwvc3Bhbj48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ib2xkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im5ldyI+5paw5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJuZXciIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJuZXciIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuZXctaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0iY29uZmlybSI+56Gu6K6k5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImNvbmZpcm0taW52YWxpZCI+56Gu6K6k5a+G56CB5LiN5Yy56YWNPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInBhc3N3b3JkLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6Im9sZCIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmV3IiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJjb25maXJtIiwicnVsZXMiOiJyZXF1aXJlZHxtYXRjaGVzW25ld10ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwYXNzd29yZCcpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIbnEngU8HAABPBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xhZG1pblxwbHVnaW4uaHRtbDx1bCBpZD0icGx1Z2luLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPnt7cmFuZ2UgLlBsdWdpbnN9fQ0KICAgIDxsaSBjbGFzcz0iY2xlYXIiPnt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQgbGJsIGFjdGl2ZSBsYmwtZ3JlZW4iPiZuYnNwOzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGxlZnQiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24gbGVmdCI+e3suVmVyc2lvbn19PC9zcGFuPnt7aWYgLkhhc1NldHRpbmd9fQ0KICAgICAgICA8YSBjbGFzcz0ic2V0dGluZyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy97ey5LZXl9fS8iPumAiemhuTwvYT57e2VuZH19e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8YSBjbGFzcz0iZGVhY3RpdmF0ZSBsYmwgbGJsLXJlZCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5bCB5Y2wPC9hPnt7ZWxzZX19DQogICAgICAgIDxhIGNsYXNzPSJhY3RpdmF0ZSBsYmwgbGJsLWJsdWUgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPua/gOa0uzwvYT57e2VuZH19DQogICAgICAgIDxwIGNsYXNzPSJkZXNjIGxlZnQiPnt7LkRlc2N9fTwvcD4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIuZGVhY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJkZWFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoea/gOa0uyIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlsIHljbDlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgiLmFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoeWwgeWNsCIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLmv4DmtLvlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCE9wWaFiBgAAYgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAHZpZXdcYWRtaW5ccGx1Z2luX3NldHRpbmcuaHRtbDxmb3JtIGlkPSJwbHVnaW4tc2V0dGluZy1mb3JtIiBjbGFzcz0iZm9ybSBjb250YWluZXI5NjAgYWRtaW4iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICB7e0h0bWwgLkZvcm19fQ0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICAgICAgICAkKCcjcGx1Z2luLXNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIjoi5L+d5a2Y5aSx6LSlIik7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwg0K3PVOAEAADgBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHByb2ZpbGUuaHRtbDxmb3JtIGlkPSJwcm9maWxlIiBjbGFzcz0iYWRtaW4gZm9ybSBjbGVhciBmb3JtLWFsaWduIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0icHJvZmlsZS1mb3JtIj4NCiAgICA8ZGl2IGNsYXNzPSJhdmF0YXIgZ3JpZC0xLTQgbGVmdCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7ey5Vc2VyLkF2YXRhcn19IiBhbHQ9Int7LlVzZXIuTmlja319IiBjbGFzcz0iZmllbGQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBmaWVsZCBpbmxpbmUtYmxvY2siPuWktOWDj+eUsSA8YSBocmVmPSJodHRwOi8vZ3JhdmF0YXIuY29tLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm8tZm9sbG93Ij5HcmF2YXRhcjwvYT4g5o+Q5L6bPC9zcGFuPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tcmVkIGlubGluZS1ibG9jayIgaHJlZj0iL2FkbWluL3Bhc3N3b3JkLyI+5L+u5pS55a+G56CBPC9hPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaW5mbyByaWdodCBncmlkLTMtNCI+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nmbvlvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiB2YWx1ZT0ie3suVXNlci5OYW1lfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+55m75b2V55qE55So5oi35ZCNPC9zcGFuPjxici8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ibmljayI+5pi156ewPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ibmljayIgdHlwZT0idGV4dCIgbmFtZT0ibmljayIgdmFsdWU9Int7LlVzZXIuTmlja319IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuaYvuekuuWcqOWJjeWPsOeahOensOWRvDwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5pY2staW52YWxpZCI+5pi156ew6ZW/5bqmMi0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZW1haWwiPumCrueusTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImVtYWlsIiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHZhbHVlPSJ7ey5Vc2VyLkVtYWlsfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6IGU57O76YKu566x77yM5Y2B5YiG6YeN6KaB77yBPC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iZW1haWwtaW52YWxpZCI+6YKu566x5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1cmwiPue9keWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVybCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHZhbHVlPSJ7ey5Vc2VyLlVybH19IiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1cmwtaW52YWxpZCI+572R5Z2A5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBiaW8iIG5hbWU9ImJpbyIgaWQ9ImJpbyI+e3suVXNlci5CaW99fTwvdGV4dGFyZWE+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwcm9maWxlLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmljayIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiZW1haWwiLCJydWxlcyI6InZhbGlkX2VtYWlsIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJ1cmwiLCJydWxlcyI6InZhbGlkX3VybCJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Byb2ZpbGUnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCB+PoV8CDAAAAgwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cc2V0dGluZy5odG1sPGZvcm0gaWQ9InNldHRpbmctZm9ybSIgY2xhc3M9ImZvcm0gZm9ybS1hbGlnbiIgYWN0aW9uPSIvYWRtaW4vc2V0dGluZy8iIG1ldGhvZD0icG9zdCI+DQogICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXVybCI+56uZ54K55Zyw5Z2APC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJzaXRlLXVybCIgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJzaXRlX3VybCIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3VybGB9fSIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGl0bGUiPuermeeCueS4u+agh+mimDwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aXRsZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19Ii8+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1zdWItdGl0bGUiPuermeeCueWJr+agh+mimDwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1zdWItdGl0bGUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfc3ViX3RpdGxlIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfc3ViX3RpdGxlYH19Ii8+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1rZXl3b3JkcyI+TWV0YeWFs+mUruWtlzwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1rZXl3b3JkcyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9rZXl3b3JkcyIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9rZXl3b3Jkc2B9fSIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9InNpdGUtZGVzYyI+TWV0YeermeeCueS7i+e7jTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1kZXNjIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2Rlc2NyaXB0aW9uIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgPGxhYmVsIGZvcj0iYXJ0aWNsZS1zaXplIj7ljZXpobXmlofnq6DliJfooajmlbA8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9ImFydGljbGUtc2l6ZSIgY2xhc3M9ImlwdCIgdHlwZT0ibnVtYmVyIiBuYW1lPSJhcnRpY2xlX3NpemUiIHZhbHVlPSJ7e1NldHRpbmcgYGFydGljbGVfc2l6ZWB9fSIgbWF4PSIxMCIgbWluPSIzIi8+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS10aGVtZSI+5Li76aKY55uu5b2V5ZCNPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJzaXRlLXRoZW1lIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3RoZW1lIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3RoZW1lYH19Ii8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS4u+mimOWNs+aMh+WQkeeahOaooeadv+ebruW9le+8jOWFt+S9k+WGheWuueivt+WPguiAgyBkZWZhdWx0IOebruW9le+8iOWNsyBkZWZhdWx0IOS4u+mimO+8iTwvc3Bhbj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2l0ZV90aGVtZV9kZWYiIHZhbHVlPSJkZWZhdWx0Ii8+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgPGxhYmVsIGZvcj0iZ28tbWFya2Rvd24iPkdv5riy5p+TTWFya2Rvd248L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9ImdvLW1hcmtkb3duIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJlbmFibGVfZ29fbWFya2Rvd24iIHZhbHVlPSJ7e1NldHRpbmcgYGVuYWJsZV9nb19tYXJrZG93bmB9fSIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7pu5jorqTlhbPpl63vvIzkvb/nlKjliY3nq69tYXJrZWQuanPmuLLmn5PvvIzloat0cnVl5pe25byA5ZCvPC9zcGFuPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlbmFibGVfZ29fbWFya2Rvd25fZGVmIiB2YWx1ZT0iZmFsc2UiLz4NCiAgICA8L3A+DQogICAgPHA+DQogICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmDwvYnV0dG9uPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtZ3JlZW4iIGhyZWY9Ii9hZG1pbi9zZXR0aW5nL2N1c3RvbS8iPuiHquWumuS5iemFjee9rjwvYT4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjc2V0dGluZy1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGFsZXJ0KGpzb24ucmVzID8gIuW3suS/neWtmCIgOiBqc29uLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0pDQo8L3NjcmlwdD5QSwcI7spgHh8KAAAfCgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xhZG1pblx3cml0ZV9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ5paH56ug5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5qCH562+PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJ0YWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InRhZyIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOagh+etviIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoIj7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCI+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgIDwvcD4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIvsp0fCEMAAAhDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblx3cml0ZV9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ6aG16Z2i5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL3BhZ2VzLyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCHJbVWl8DAAAfAwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHZpZXdcYWRtaW4ubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPnt7LlRpdGxlfX0gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvYWRtaW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgICA8aDMgY2xhc3M9ImxvZ28gbGVmdCI+RnhoLkdvIC0gPHNwYW4+e3suVGl0bGV9fTwvc3Bhbj48L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJuYXYgbGVmdCByZWxhdGl2ZSI+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGFzaGJvYXJkIGxlZnQiIGhyZWY9Ii9hZG1pbi8iPjxpIGNsYXNzPSJmYSBmYS1kYXNoYm9hcmQiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iYXJ0aWNsZSBsZWZ0IiBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvIiB0aXRsZT0i5paH56ugIj48aSBjbGFzcz0iZmEgZmEtY29weSI+PC9pPjwvYT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGFnZXMgbGVmdCIgaHJlZj0iL2FkbWluL3BhZ2VzLyIgdGl0bGU9IueLrOeri+mhtemdoiI+PGkgY2xhc3M9ImZhIGZhLXBhc3RlIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImNvbW1lbnRzIGxlZnQiIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iIHRpdGxlPSLor4TorroiPjxpIGNsYXNzPSJmYSBmYS1jb21tZW50cyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJmaWxlcyBsZWZ0IiBocmVmPSIvYWRtaW4vZmlsZXMvIiB0aXRsZT0i5aqS5L2T5paH5Lu2Ij48aSBjbGFzcz0iZmEgZmEtaW5ib3giPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGx1Z2lucyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy8iIHRpdGxlPSLmj5Lku7YiPjxpIGNsYXNzPSJmYSBmYS1nZWFycyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyIgdGl0bGU9Iuiuvue9riI+PGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPjwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxhIGNsYXNzPSJvdXQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii9sb2dvdXQvIiB0aXRsZT0i6YCA5Ye6Ij48aSBjbGFzcz0iZmEgZmEtcG93ZXItb2ZmIGZhLWxnIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0icHJvZmlsZSBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIiB0aXRsZT0i5oiRIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImZyb250IG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Iuafpeeci+e9keermSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+DQogICAgPC9kaXY+DQo8L2Rpdj4NCntAQ29udGVudH0NCjxkaXYgaWQ9ImZvb3RlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgIDxwIGNsYXNzPSJsaW5rcyB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgIDxhIGNsYXNzPSJzdGF0IiBocmVmPSIjIj7nu5/orqE8L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJiYWNrdXAiIGhyZWY9Ii9jbWQvYmFja3VwLyI+5aSH5Lu9PC9hPg0KICAgICAgICAgICA8YSBjbGFzcz0iZXJyIiBocmVmPSIjIj7ml6Xlv5c8L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJzeXMiIGhyZWY9IiMiPuezu+e7nzwvYT4NCiAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJjcCB0ZXh0LWNlbnRlciI+UHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9wPg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCJlsMPasCAAArAgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAADwAAAHZpZXdcY21kLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7lpIfku70gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY21kLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHkgY2xhc3M9ImNtZCI+DQp7QENvbnRlbnR9DQo8cCBjbGFzcz0iYmFjayI+PGEgaHJlZj0iamF2YXNjcmlwdDpoaXN0b3J5LmJhY2soKSI+QmFjazwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCNTWIdrKAQAAygEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAADQAAAHZpZXdcZGVmYXVsdC9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xkZWZhdWx0XGFydGljbGUuaHRtbDxkaXYgaWQ9ImFydGljbGUtY29udGFpbmVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxhcnRpY2xlIGNsYXNzPSJjbGVhciIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj4NCiAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImF1dGhvciBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+e3suVXNlci5OaWNrfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj57e2lmIC5UYWdTdHJpbmd9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS10YWdzIj48L2k+e3suVGFnU3RyaW5nfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZpZXdzIGlubGluZS1ibG9jayByaWdodCI+6ZiF6K+7Jm5ic3A7Jm5ic3A7PHNwYW4+e3suSGl0c319PC9zcGFuPiZuYnNwOyZuYnNwO+asoTwvc3Bhbj4NCiAgICAgICAgPC9wPnt7ZW5kfX0NCiAgICA8L2FydGljbGU+DQogICAge3tIdG1sIC5Db21tZW50SHRtbH19DQo8L2Rpdj5QSwcIn0isSqMDAACjAwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xkZWZhdWx0XGNvbW1lbnQuaHRtbDxkaXYgaWQ9ImNvbW1lbnQiPg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiBsZWZ0Ij4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIGMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj57e2VuZH19e3tlbmR9fQ0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtc2hvdyIgY2xhc3M9InRleHQtY2VudGVyIj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gZW5hYmxlIj7lj5Hooajor4Torro8L2J1dHRvbj57e2Vsc2V9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXJlZCI+5pys5paH5YWz6Zet5LqG6K+E6K66PC9idXR0b24+e3tlbmR9fQ0KICAgIDwvZGl2Pnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBjbGFzcz0iaGlkZSBjbGVhciB0ZXh0LWNlbnRlciBmb3JtIiBhY3Rpb249Ii9jb21tZW50L3t7LkNvbnRlbnQuSWR9fS8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mbyBsZWZ0IHRleHQtcmlnaHQiPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0gYy1hdmF0YXItZmllbGQiPg0KICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIG51bGwiIHNyYz0iL3N0YXRpYy9pbWcvc2l0ZS5wbmciIGFsdD0iIiBpZD0iY29tbWVudC1hdmF0YXIiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibm90LW1lIGJsb2NrIiBocmVmPSIjIj7kuI3mmK/miJE/PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvLWZpZWxkcyBoaWRlIj4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuensOWRvCIgaWQ9ImNvbW1lbnQtYXV0aG9yIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpgq7nrrEiIGlkPSJjb21tZW50LWVtYWlsIi8+IDwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0idXJsIiBwbGFjZWhvbGRlcj0i572R5Z2AIiBpZD0iY29tbWVudC11cmwiLz48L3A+DQogICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjb21tZW50LXBhcmVudCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgbmFtZT0icGlkIi8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtY29udGVudCB0ZXh0LWxlZnQgcmlnaHQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGNhbmNlbC1yZXBseSIgdHlwZT0iYnV0dG9uIj7lj5bmtojlm57lpI08L2J1dHRvbj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9mb3JtPnt7ZW5kfX0NCiAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjb21tZW50LXRwbCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSIiIGFsdD0iIi8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSBjLWF1dGhvciIgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3Bh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fX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3Mvc3R5bGUuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRpdGxlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0gLSBSU1MgMi4wIiBocmVmPSIvcnNzLnhtbCIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGhlYWRlciBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7e1NldHRpbmcgYGNfaG9tZV9hdmF0YXJgfX0iIGFsdD0ic2l0ZSIgaWQ9ImhlYWRlci1pbWciLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCI+PGEgaHJlZj0iLyI+e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC9hPjwvaDE+DQogICAgICAgIDxoNCBpZD0iaGVhZGVyLXN1YiI+e3tTZXR0aW5nICJzaXRlX3N1Yl90aXRsZSJ9fTwvaDQ+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxuYXYgaWQ9Im5hdiIgY2xhc3M9ImNsZWFyIHRleHQtY2VudGVyIj4NCiAgICA8dWw+DQogICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvIj7mlofnq6A8L2E+PC9saT4NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii9hYm91dC1tZS5odG1sIj7lhbPkuo48L2E+PC9saT4NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii9mcmllbmRzLmh0bWwiPuWlveWPizwvYT48L2xpPg0KICAgIDwvdWw+DQo8L25hdj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxwPg0KICAgICAgICA8YSBjbGFzcz0id2VpYm8iIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfd2VpYm9gfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtd2VpYm8iPjwvaT5XZWlibzwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImdpdCIgaHJlZj0ie3tTZXR0aW5nIGBjX2Zvb3Rlcl9naXRodWJgfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZ2l0aHViIj48L2k+R2l0SHViPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZW1haWwiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZW1haWxgfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZW52ZWxvcGUiPjwvaT5FbWFpbDwvYT4NCiAgICAgICAgPGEgY2xhc3M9InJzcyIgaHJlZj0iL3Jzcy54bWwiIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtcnNzIj48L2k+UlNTPC9hPnt7U2V0dGluZyBgY19mb290ZXJfZ2FgIHwgSHRtbH19DQogICAgPC9wPg0KICAgIDxzcGFuPkdvIMKpIDIwMTQgQWxsIHJpZ2h0cyByZXNlcnZlZC4gUHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9zcGFuPg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIlQW0/JQJAACUCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xkZWZhdWx0XGluZGV4Lmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIiBpZD0iYXJ0aWNsZS17ey5JZH19Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBsZWZ0IHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgIDwhLS08cCBjbGFzcz0ibGJsIGxibC1ibHVlIGF1dGhvciI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT7lgoXlsI/pu5E8L3A+LS0+e3tpZiBndCAuQ29tbWVudE51bSAwfX0NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLXJlZCBjb21tZW50cyI+PGEgaHJlZj0ie3suTGlua319I2NvbW1lbnQiPjxpIGNsYXNzPSJmYSBmYS1jb21tZW50cyI+PC9pPjxzdHJvbmc+e3suQ29tbWVudE51bX19IOKEgzwvc3Ryb25nPjwvYT48L3A+e3tlbmR9fQ0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtZ3JlZW4gdmlld3MiPjxpIGNsYXNzPSJmYSBmYS1leWUiPjwvaT48c3Ryb25nPnt7LkhpdHN9fSDihIk8L3N0cm9uZz48L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmF5IHRpbWUiPjxpIGNsYXNzPSJmYSBmYS1jbG9jay1vIj48L2k+PHN0cm9uZz57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLlN1bW1hcnl9fTwvc2VjdGlvbj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hhcmUgd2VpYm8gaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtd2VpYm8gZmEtbGciPjwvaT48L3NwYW4+e3tpZiAuVXNlcn19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImF1dGhvciBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+e3suVXNlci5OaWNrfX08L3NwYW4+e3tlbmR9fXt7aWYgLlRhZ1N0cmluZ319DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS10YWdzIj48L2k+e3suVGFnU3RyaW5nfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJpbmxpbmUtYmxvY2sgcmVhZCByaWdodCIgaHJlZj0ie3suTGlua319Ij48aSBjbGFzcz0iZmEgZmEtc2VhcmNoIj48L2k+57un57ut6ZiF6K+7PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rp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Pg0KICAgICAgICAgICAgICAgICAgICA8cD48YSBjbGFzcz0iYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+PC9wPg0KICAgICAgICAgICAgICAgICAgICA8cD48c3BhbiBjbGFzcz0iYy10aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0g5pyIIEREIOaXpSBISCDml7YgbW0g5YiGIn19PC9zcGFuPjwvcD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+e3tlbmR9fXt7ZW5kfX0NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LXNob3ciIGNsYXNzPSJ0ZXh0LWNlbnRlciI+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGVuYWJsZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+e3tlbHNlfX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1yZWQiPuacrOaWh+WFs+mXreS6huivhOiuujwvYnV0dG9uPnt7ZW5kfX0NCiAgICA8L2Rpdj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgY2xhc3M9ImhpZGUgY2xlYXIgdGV4dC1jZW50ZXIgZm9ybSIgYWN0aW9uPSIvY29tbWVudC97ey5Db250ZW50LklkfX0vIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8gbGVmdCB0ZXh0LXJpZ2h0Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIGMtYXZhdGFyLWZpZWxkIj4NCiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBudWxsIiBzcmM9Ii9zdGF0aWMvaW1nL3NpdGUucG5nIiBhbHQ9IiIgaWQ9ImNvbW1lbnQtYXZhdGFyIi8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5vdC1tZSBibG9jayIgaHJlZj0iIyI+5LiN5piv5oiRPzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mby1maWVsZHMgaGlkZSI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLnp7DlkbwiIGlkPSJjb21tZW50LWF1dGhvciIvPjwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6YKu566xIiBpZD0iY29tbWVudC1lbWFpbCIvPiA8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgcGxhY2Vob2xkZXI9Iue9keWdgCIgaWQ9ImNvbW1lbnQtdXJsIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY29tbWVudC1wYXJlbnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIG5hbWU9InBpZCIvPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWNvbnRlbnQgdGV4dC1sZWZ0IHJpZ2h0Ij4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuWPkeihqOivhOiuujwvYnV0dG9uPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGJsIGxibC1ncmVlbiBjYW5jZWwtcmVwbHkiIHR5cGU9ImJ1dHRvbiI+5Y+W5raI5Zue5aSNPC9idXR0b24+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZm9ybT57e2VuZH19DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY29tbWVudC10cGwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0iIi8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24iPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSBjbGVhciI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IGxibCByaWdodCIgaHJlZj0iIyIgcmVsPSIiPuWbnuWkjTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHA+PGEgY2xhc3M9ImMtYXV0aG9yICIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj48L2E+PC9wPg0KICAgICAgICAgICAgICAgICAgICA8cD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLXRpbWUiPk5vdzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNoZWNrIj7lrqHmoLjkuK3vvIzliLfmlrDlkI7pmpDol488L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij48L3NlY3Rpb24+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L3NjcmlwdD4NCjwvZGl2PlBLBwhpoEeilQ0AAJUNAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGxpbmdcaG9tZS5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iLz4NCiAgICA8dGl0bGU+e3tpZiAuVGl0bGV9fXt7LlRpdGxlfX0gLSB7e2VuZH19e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC90aXRsZT4NCiAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRnhoR28gQmxvZyIgLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2xpbmcuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRpdGxlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0gLSBSU1MgMi4wIiBocmVmPSIvcnNzLnhtbCIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGhlYWRlciBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCI+DQogICAgICAgIDxpbWcgc3JjPSJ7e1NldHRpbmcgYGNfaG9tZV9hdmF0YXJgfX0iIGFsdD0ic2l0ZSIgaWQ9ImhlYWRlci1pbWciIGNsYXNzPSJsZWZ0Ii8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiIGNsYXNzPSJsZWZ0Ij48YSBocmVmPSIvIj57e1NldHRpbmcgInNpdGVfdGl0bGUifX08L2E+PC9oMT4NCiAgICAgICAge3tIdG1sIGA8IS0tPGg0IGlkPSJoZWFkZXItc3ViIiBjbGFzcz0ibGVmdCI+e3tTZXR0aW5nICJzaXRlX3N1Yl90aXRsZSJ9fTwvaDQ+LS0+YH19DQogICAgICAgIDxuYXYgaWQ9Im5hdiIgY2xhc3M9InJpZ2h0Ij4NCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iLyI+5paH56ugPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii9hYm91dC1tZS5odG1sIj7lhbPkuo48L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iL2ZyaWVuZHMuaHRtbCI+5aW95Y+LPC9hPjwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L25hdj4NCiAgICA8L2Rpdj4NCjwvaGVhZGVyPg0KPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbnRhaW5lcjk2MCI+DQogICAge0BDb250ZW50fQ0KPC9kaXY+DQo8Zm9vdGVyIGlkPSJmb290ZXIiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIGNsZWFyIj4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPkdvIMKpIDIwMTQgQWxsIHJpZ2h0cyByZXNlcnZlZC48L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJyaWdodCI+UHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9zcGFuPg0KICAgIDwvZGl2Pg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCnt7SHRtbCAiPCEtLSB0aGFua3MgZm9yIHRoZW1lIExpbmdvbmJlcnJ5KGh0dHA6Ly93d3cuYW5kZXJzbm9yZW4uc2UvKSBmb3IgV29yZFByZXNzLS0+In19UEsHCIuUuCbFCAAAxQgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHZpZXdcbGluZ1xpbmRleC5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxhcnRpY2xlIGNsYXNzPSJjbGVhciIgaWQ9ImFydGljbGUte3suSWR9fSI+DQogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEgbGVmdCB0ZXh0LWNlbnRlciByZWxhdGl2ZSI+DQogICAgICAgICAgICA8IS0tPHAgY2xhc3M9ImxibCBsYmwtYmx1ZSBhdXRob3IiPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+5YKF5bCP6buRPC9wPi0tPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+e3suQ29tbWVudE51bX19PC9hPjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIGFic29sdXRlIj57ey5IaXRzfX08L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIHJlbGF0aXZlIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJ0aW1lLWluZm8iPnt7aWYgLlVzZXJ9fTxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDt7e2VuZH195Y+R6KGo5LqOJm5ic3A7Jm5ic3A7Jm5ic3A7e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIllZWVkg5bm0IE1NIOaciCBERCDml6UifX08L3A+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5TdW1tYXJ5fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPuagh+etvu+8mnt7LlRhZ1N0cmluZ319PC9zcGFuPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJpbmxpbmUtYmxvY2sgcmVhZCByaWdodCIgaHJlZj0ie3suTGlua319Ij7nu6fnu63pmIXor7s8L2E+DQogICAgICAgICAgICA8L3A+DQogICAg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" \ No newline at end of file +const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9aGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja310YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH1maWVsZHNldCxpbWd7Ym9yZGVyOjB9YWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH1vbCx1bHtsaXN0LXN0eWxlOm5vbmV9Y2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfXE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ31hYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH1zdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9c3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfWlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9bGVnZW5ke2NvbG9yOiMwMDB9aHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9YXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn1we21hcmdpbi1ib3R0b206MThweH1oMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH1oMXtmb250LXNpemU6MjhweH1oMntmb250LXNpemU6MjRweH1oM3tmb250LXNpemU6MjFweH1oNHtmb250LXNpemU6MTlweH1oNXtmb250LXNpemU6MTZweH1oNntmb250LXNpemU6MTRweH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0ubGVmdHtmbG9hdDpsZWZ0fS5yaWdodHtmbG9hdDpyaWdodH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9LnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5mYWRlLW91dHtvcGFjaXR5OjB9LmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fS5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0ubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fSNoZWFkZXJ7aGVpZ2h0OjM5cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk7bGluZS1oZWlnaHQ6MzlweDtib3gtc2hhZG93OjAgMCAycHggI2NjYzstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICNjY2N9I2hlYWRlciAubmF2PmF7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzowIDE4cHg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6LTFweH0jaGVhZGVyIC5uYXY+YTpob3Zlcntib3JkZXItY29sb3I6IzAwNzliYztiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0jaGVhZGVyIC5sb2dve2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE0cHggMCAwO21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4fSNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0jaGVhZGVyIC5vdXR7Y29sb3I6I2M3MzgzYX0jaGVhZGVyIC5vdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNlNjQzNDY7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9I2Zvb3RlcntwYWRkaW5nOjI0cHg7YmFja2dyb3VuZDojZjZmNmY2O2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGQ7bWFyZ2luLXRvcDozMHB4O2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHh9I2Zvb3RlciBwe21hcmdpbi1ib3R0b206MH0jZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0uYWRtaW57bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I3Byb2ZpbGV7d2lkdGg6ODAwcHg7bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I3Byb2ZpbGUgLmF2YXRhciBpbWd7d2lkdGg6MTgwcHg7cGFkZGluZzo0cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7aGVpZ2h0OjE4MHB4fSNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9I3Byb2ZpbGUgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0jcHJvZmlsZSAuYmlve21hcmdpbi1sZWZ0Ojc1cHg7aGVpZ2h0OjE2MHB4fSNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0jYXJ0aWNsZS1saXN0e21hcmdpbi1ib3R0b206MjRweH0jYXJ0aWNsZS1saXN0IGxpe21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jYXJ0aWNsZS1saXN0IGxpPip7bWFyZ2luLXJpZ2h0OjE2cHh9I2FydGljbGUtbGlzdCBsaSAudGltZSwjYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Y29sb3I6Izk5OX0jYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0jYXJ0aWNsZS1saXN0IGxpIC5pcy1jb21tZW50e2NvbG9yOiNmZjQ0NDd9I2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0jYXJ0aWNsZS1saXN0IGxpIC5kZWwsI2FydGljbGUtbGlzdCBsaSAuZWRpdHtvcGFjaXR5OjB9I2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfSNhcnRpY2xlLWxpc3QgbGk6Zmlyc3QtY2hpbGQgaDR7cGFkZGluZy10b3A6MH0jYXJ0aWNsZS1mb3Jte21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfSNhcnRpY2xlLWZvcm0gaW5wdXQudGl0bGV7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLWJvdHRvbTpub25lO21hcmdpbi1ib3R0b206LTFweDtmb250LXNpemU6MThweH0jYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9I2FydGljbGUtZm9ybSAucHJldmlld3tib3JkZXI6MXB4IHNvbGlkICM5OTk7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTJweDtoZWlnaHQ6NzAwcHg7bWFyZ2luLWxlZnQ6LTFweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdy14OnNjcm9sbH0jYXJ0aWNsZS1mb3JtIC5mb3JtLXZlcnRpY2Fse3dpZHRoOjEwMCU7bWFyZ2luLXRvcDoxOHB4fSNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgaW5wdXQuaXB0e3dpZHRoOjMwMHB4fSNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0jYXJ0aWNsZS1mb3JtIC5mb3JtLXZlcnRpY2FsIC5idG57bWFyZ2luLXJpZ2h0OjE2cHh9I2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzc3twYWRkaW5nOjAgMTJweDtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMik7Y29sb3I6IzY2Njtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9I2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9I3NldHRpbmctZm9ybXt3aWR0aDo4MjBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jc2V0dGluZy1mb3JtIC5pcHR7d2lkdGg6NDgwcHh9I3NldHRpbmctZm9ybSAuaW52YWxpZHttYXJnaW4tbGVmdDo3NXB4fSNzZXR0aW5nLWZvcm0gbGFiZWx7bWluLXdpZHRoOjEwZW19I3NldHRpbmctZm9ybSAudGlwLmJsb2Nre21hcmdpbi1sZWZ0OjEyZW19I3NldHRpbmctZm9ybS5jdXN0b217d2lkdGg6MTAwMHB4fSNzZXR0aW5nLWZvcm0uY3VzdG9tIGlucHV0LmtleXt3aWR0aDoyNTBweH0jc2V0dGluZy1mb3JtLmN1c3RvbSBpbnB1dC52YWx1ZXt3aWR0aDo2NTBweH0jc2V0dGluZy1mb3JtLmN1c3RvbSAuaXRlbXttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jc2V0dGluZy1mb3JtLmN1c3RvbSAuZGVse21hcmdpbi1sZWZ0OjEycHg7Y29sb3I6I2U2NDM0Nn0jc2V0dGluZy1mb3JtLmN1c3RvbSAudGlwe21hcmdpbi1sZWZ0OjB9I2NvbW1lbnQtbGlzdCAuYy1hdmF0YXJ7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjJweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O21hcmdpbi1yaWdodDoxOHB4fSNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9I2NvbW1lbnQtbGlzdCAuYy10aW1le2NvbG9yOiM5OTk7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jY29tbWVudC1saXN0IC5jLXRpbWUgLmZhe21hcmdpbi1yaWdodDo2cHh9I2NvbW1lbnQtbGlzdCAuYy1jbnR7Y29sb3I6Izk5OX0jY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfSNjb21tZW50LWxpc3QgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxM3B4fSNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifSNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiM2NjZ9I2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0jY29tbWVudC1saXN0IC5jLWNoZWNrLCNjb21tZW50LWxpc3QgLmMtZGVse2NvbG9yOiNlNjQzNDZ9I2NvbW1lbnQtbGlzdCAuYy1jaGVjayAuZmEsI2NvbW1lbnQtbGlzdCAuYy1kZWwgLmZhe21hcmdpbi1yaWdodDo2cHh9I2NvbW1lbnQtbGlzdCAuYy1jaGVjazpob3ZlciwjY29tbWVudC1saXN0IC5jLWRlbDpob3Zlcntjb2xvcjojYWEzOTNjfSNjb21tZW50LWZvcm17cGFkZGluZy10b3A6MTJweDtkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6NzJweH0jY29tbWVudC1mb3JtIC5idG57bWFyZ2luLXJpZ2h0OjI0cHh9I2NvbW1lbnQtY29udGVudHt3aWR0aDo1MDBweDtoZWlnaHQ6ODBweDttYXJnaW4tcmlnaHQ6MjRweH0jZmlsZXMtbGlzdCBsaS5maWxle21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZmlsZXMtbGlzdCBsaS5maWxlPip7bWFyZ2luLXJpZ2h0OjE2cHh9I2ZpbGVzLWxpc3QgbGkuZmlsZTpob3ZlciAuZGVse29wYWNpdHk6MSAhaW1wb3J0YW50fSNmaWxlcy1saXN0IC51cGxvYWQtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2ZpbGVzLWxpc3QgLmRlbHtjb2xvcjojZTY0MzQ2fSNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0jZmlsZXMtbGlzdCAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9I2ZpbGVzLWxpc3QgLnNpemV7d2lkdGg6NGVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfSNwbHVnaW4tbGlzdCBsaXttYXJnaW4tYm90dG9tOjE2cHg7cGFkZGluZy1ib3R0b206MTZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jcGx1Z2luLWxpc3QgbGkgLmRlc2N7bWFyZ2luLWJvdHRvbTowO3dpZHRoOjk5JTtjb2xvcjojOTk5fSNwbHVnaW4tbGlzdCBsaSBhLmxibHtwYWRkaW5nOjAgOHB4O21hcmdpbi1sZWZ0OjE2cHh9I3BsdWdpbi1saXN0IGxpIC52ZXJzaW9ue2NvbG9yOiM1MDc2NTA7bWFyZ2luLWxlZnQ6MTZweH0jcGx1Z2luLWxpc3QgbGkgLm5hbWV7Zm9udC1zaXplOjE2cHh9I3BsdWdpbi1saXN0IGxpIC5hY3RpdmV7d2lkdGg6MTJweDtoZWlnaHQ6MTJweDttYXJnaW4tcmlnaHQ6MTZweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDoxMHB4fSNwbHVnaW4tbGlzdCBsaSAuc2V0dGluZ3ttYXJnaW4tbGVmdDoxNnB4fSNwbHVnaW4tc2V0dGluZy1mb3JtIHAuaXRlbXtjbGVhcjpib3RofSNwbHVnaW4tc2V0dGluZy1mb3JtIGxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjZlbTt0ZXh0LWFsaWduOnJpZ2h0O21hcmdpbi1yaWdodDoyZW19I3BsdWdpbi1zZXR0aW5nLWZvcm0gLnRpdGxle3BhZGRpbmctdG9wOjA7bWFyZ2luLWJvdHRvbToxOHB4fSNwbHVnaW4tc2V0dGluZy1mb3JtIGlucHV0LmlwdHt3aWR0aDo2MDBweH0jZGFzaGJvYXJkIC5ncmlkLTEtNXttYXJnaW4tcmlnaHQ6NCV9I2Rhc2hib2FyZCAucXVpY2stbGluayBsaXtsaXN0LXN0eWxlOmluc2lkZSBkaXNjO21hcmdpbi1ib3R0b206NnB4O3BhZGRpbmctYm90dG9tOjZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZGFzaGJvYXJkIC5zdGF0cyAubGJse3BhZGRpbmc6MXB4IDVweDttYXJnaW46MCAzcHh9UEsHCNzwws9OLAAATiwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAHN0YXRpY1xjc3NcY21kLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9aGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja310YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH1maWVsZHNldCxpbWd7Ym9yZGVyOjB9YWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH1vbCx1bHtsaXN0LXN0eWxlOm5vbmV9Y2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfXE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ31hYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH1zdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9c3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfWlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9bGVnZW5ke2NvbG9yOiMwMDB9aHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9YXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn1we21hcmdpbi1ib3R0b206MThweH1oMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH1oMXtmb250LXNpemU6MjhweH1oMntmb250LXNpemU6MjRweH1oM3tmb250LXNpemU6MjFweH1oNHtmb250LXNpemU6MTlweH1oNXtmb250LXNpemU6MTZweH1oNntmb250LXNpemU6MTRweH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0ubGVmdHtmbG9hdDpsZWZ0fS5yaWdodHtmbG9hdDpyaWdodH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9LnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5mYWRlLW91dHtvcGFjaXR5OjB9LmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fS5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0ubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fS5jbWR7bWFyZ2luOjI0cHggNDhweH0uY21kLWhlYWRlcnttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jYmFja3VwLWJ0bnttYXJnaW46MTBweCAwIDAgMzBweH0uY21kLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2JhY2t1cC1saXN0IGxpe2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGU7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jYmFja3VwLWxpc3QgbGk+c3BhbiwjYmFja3VwLWxpc3QgbGk+YXttYXJnaW4tcmlnaHQ6MTZweH0jYmFja3VwLWxpc3QgbGkgLmRlbHtjb2xvcjojZTY0MzQ2O29wYWNpdHk6MH0jYmFja3VwLWxpc3QgbGk6aG92ZXIgLmRlbHtvcGFjaXR5OjF9UEsHCDARqHlDFgAAQxYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHN0YXRpY1xjc3NcY29kZW1pcnJvci5jc3MvKiBCQVNJQ1MgKi8KCi5Db2RlTWlycm9yIHsKICAgIC8qIFNldCBoZWlnaHQsIHdpZHRoLCBib3JkZXJzLCBhbmQgZ2xvYmFsIGZvbnQgcHJvcGVydGllcyBoZXJlICovCiAgICBmb250LWZhbWlseTogQ29uc29sYXMsICJNaWNyb3NvZnQgWWFIZWkiLCAiQ291cmllciBOZXciLCBBcmlhbDsKICAgIGhlaWdodDogNjYwcHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBib3JkZXI6MXB4IHNvbGlkICM5OTk7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiBTZXQgc2Nyb2xsaW5nIGJlaGF2aW91ciBoZXJlICovCiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLyogUEFERElORyAqLwoKLkNvZGVNaXJyb3ItbGluZXMgewogICAgcGFkZGluZzogNHB4IDA7IC8qIFZlcnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAqLwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyAvKiBUaGUgbGl0dGxlIHNxdWFyZSBiZXR3ZWVuIEggYW5kIFYgc2Nyb2xsYmFycyAqLwp9CgovKiBHVVRURVIgKi8KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVycyB7Cn0KCi5Db2RlTWlycm9yLWxpbmVudW1iZXIgewogICAgcGFkZGluZzogMCAzcHggMCA1cHg7CiAgICBtaW4td2lkdGg6IDIwcHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIGNvbG9yOiAjNTU1OwogICAgbGluZS1oZWlnaHQ6IDIwcHg7Cn0KCi8qIENVUlNPUiAqLwoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7CiAgICB6LWluZGV4OiAzOwp9CgovKiBTaG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0ICovCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHNpbHZlcjsKfQoKLkNvZGVNaXJyb3IuY20ta2V5bWFwLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHdpZHRoOiBhdXRvOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogIzdlNzsKICAgIHotaW5kZXg6IDE7Cn0KCi8qIENhbiBzdHlsZSBjdXJzb3IgZGlmZmVyZW50IGluIG92ZXJ3cml0ZSAobm9uLWluc2VydCkgbW9kZSAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IuQ29kZU1pcnJvci1vdmVyd3JpdGUgewp9CgouY20tdGFiIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLyogREVGQVVMVCBUSEVNRSAqLwoKLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7CiAgICBjb2xvcjogIzcwODsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7CiAgICBjb2xvcjogIzIxOTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHsKICAgIGNvbG9yOiAjMTY0Owp9CgouY20tcy1kZWZhdWx0IC5jbS1kZWYgewogICAgY29sb3I6ICMwMGY7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzA1YTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMyB7CiAgICBjb2xvcjogIzA4NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcHJvcGVydHkgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICNhNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZyB7CiAgICBjb2xvcjogI2ExMTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nLTIgewogICAgY29sb3I6ICNmNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW1ldGEgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1YWxpZmllciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnVpbHRpbiB7CiAgICBjb2xvcjogIzMwYTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnJhY2tldCB7CiAgICBjb2xvcjogIzk5NzsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdGFnIHsKICAgIGNvbG9yOiAjMTcwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICMwMGM7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhlYWRlciB7CiAgICBjb2xvcjogYmx1ZTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUgewogICAgY29sb3I6ICMwOTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhyIHsKICAgIGNvbG9yOiAjOTk5Owp9CgouY20tcy1kZWZhdWx0IC5jbS1saW5rIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tbmVnYXRpdmUgewogICAgY29sb3I6ICNkNDQ7Cn0KCi5jbS1wb3NpdGl2ZSB7CiAgICBjb2xvcjogIzI5MjsKfQoKLmNtLWhlYWRlciwgLmNtLXN0cm9uZyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLWVtIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmNtLWxpbmsgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWVycm9yIHsKICAgIGNvbG9yOiAjZjAwOwp9CgouY20taW52YWxpZGNoYXIgewogICAgY29sb3I6ICNmMDA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICMwZjA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICNmMjI7Cn0KCi5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjZThmMmZmOwp9CgovKiBTVE9QICovCgovKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgY29udGFpbnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZgogICB0aGUgZWRpdG9yLiBZb3UgcHJvYmFibHkgc2hvdWxkbid0IHRvdWNoIHRoZW0uICovCgouQ29kZU1pcnJvciB7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIGNvbG9yOiBibGFjazsKfQoKLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIC8qIDMwcHggaXMgdGhlIG1hZ2ljIG1hcmdpbiB1c2VkIHRvIGhpZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJhcnMgKi8KICAgIC8qIFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAgICBtYXJnaW4tYm90dG9tOiAtMzBweDsKICAgIG1hcmdpbi1yaWdodDogLTMwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdXRsaW5lOiBub25lOyAvKiBQcmV2ZW50IGRyYWdnaW5nIGZyb20gaGlnaGxpZ2h0aW5nIHRoZSBlbGVtZW50ICovCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KCi5Db2RlTWlycm9yLXNpemVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLyogVGhlIGZha2UsIHZpc2libGUgc2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSByZWRyYXcgZHVyaW5nIHNjcm9sbGluZwogICBiZWZvcmUgYWN0dWFsbCBzY3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNoYWtpbmcgYW5kCiAgIGZsaWNrZXJpbmcgYXJ0aWZhY3RzLiAqLwouQ29kZU1pcnJvci12c2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHotaW5kZXg6IDY7CiAgICBkaXNwbGF5OiBub25lOwp9CgouQ29kZU1pcnJvci12c2Nyb2xsYmFyIHsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcmZsb3cteTogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1oc2Nyb2xsYmFyIHsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBvdmVyZmxvdy14OiBzY3JvbGw7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIgewogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIgewogICAgbGVmdDogMDsKICAgIGJvdHRvbTogMDsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVycyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgdG9wOiAwOwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICB6LWluZGV4OiAzOwp9CgouQ29kZU1pcnJvci1ndXR0ZXIgewogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGhlaWdodDogMTAwJTsKICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgbWFyZ2luLWJvdHRvbTogLTMycHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAvKiBIYWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqLwogICAgKnpvb206IDE7CiAgICAqZGlzcGxheTogaW5saW5lOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZWx0IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIHotaW5kZXg6IDQ7Cn0KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIGN1cnNvcjogdGV4dDsKfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIC8qIFJlc2V0IHNvbWUgc3R5bGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgbWlnaHQgaGF2ZSBzZXQgKi8KICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItd2lkdGg6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgbWFyZ2luOiAwOwogICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIHotaW5kZXg6IDI7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKfQoKLkNvZGVNaXJyb3Itd3JhcCBwcmUgewogICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC1icmVhazogbm9ybWFsOwp9CgouQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICB3aWR0aDogLXdlYmtpdC1maXQtY29udGVudDsKICAgIHdpZHRoOiAtbW96LWZpdC1jb250ZW50OwogICAgd2lkdGg6IGZpdC1jb250ZW50Owp9CgouQ29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLWNvZGUgcHJlIHsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiBhdXRvOwp9CgouQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB6LWluZGV4OiAwOwp9CgouQ29kZU1pcnJvci1saW5ld2lkZ2V0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLkNvZGVNaXJyb3Itd2lkZ2V0IHsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwgewogICAgb3ZlcmZsb3cteDogaGlkZGVuOwp9CgouQ29kZU1pcnJvci1tZWFzdXJlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUgewogICAgcG9zaXRpb246IHN0YXRpYzsKfQoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiAwOwp9CgouQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgouQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDlkOWQ5Owp9CgouQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICNkN2Q0ZjA7Cn0KCi5jbS1zZWFyY2hpbmcgewogICAgYmFja2dyb3VuZDogI2ZmYTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDAsIC40KTsKfQoKLyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVybmluZyBmdW5ueSBvZmZzZXRUb3BzIG9uIHRoZSBzcGFucyAqLwouQ29kZU1pcnJvciBzcGFuIHsKICAgICp2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207Cn0KCkBtZWRpYSBwcmludCB7CiAgICAvKiBIaWRlIHRoZSBjdXJzb3Igd2hlbiBwcmludGluZyAqLwogICAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9Cn0KCi5jbS1zLWJhc2UxNi1kYXJrLkNvZGVNaXJyb3IgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGNvbG9yOiAjZTBlMGUwOwp9CgouY20tcy1iYXNlMTYtZGFyayBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjMjAyMDIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGJvcmRlci1yaWdodDogMHB4Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1jdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYjBiMGIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tY29tbWVudCB7CiAgICBjb2xvcjogIzhmNTUzNjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdG9tIHsKICAgIGNvbG9yOiAjYWE3NTlmOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLW51bWJlciB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1wcm9wZXJ0eSwgLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20ta2V5d29yZCB7CiAgICBjb2xvcjogI2FjNDE0MjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1zdHJpbmcgewogICAgY29sb3I6ICNmNGJmNzU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzZhOWZiNTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1kZWYgewogICAgY29sb3I6ICNkMjg0NDU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYnJhY2tldCB7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS10YWcgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tbGluayB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1lcnJvciB7CiAgICBiYWNrZ3JvdW5kOiAjYWM0MTQyOwogICAgY29sb3I6ICNiMGIwYjA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjMkYyRjJGICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9ClBLBwgjAzWCTiAAAE4gAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAABzdGF0aWNcY3NzXGNvbW1vbi5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfWhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9dGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9ZmllbGRzZXQsaW1ne2JvcmRlcjowfWFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9b2wsdWx7bGlzdC1zdHlsZTpub25lfWNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH1xOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9YWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9c3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfXN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWxlZ2VuZHtjb2xvcjojMDAwfWh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifWF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9cHttYXJnaW4tYm90dG9tOjE4cHh9aDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9aDF7Zm9udC1zaXplOjI4cHh9aDJ7Zm9udC1zaXplOjI0cHh9aDN7Zm9udC1zaXplOjIxcHh9aDR7Zm9udC1zaXplOjE5cHh9aDV7Zm9udC1zaXplOjE2cHh9aDZ7Zm9udC1zaXplOjE0cHh9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmxlZnR7ZmxvYXQ6bGVmdH0ucmlnaHR7ZmxvYXQ6cmlnaHR9LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfS52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uYmxvY2t7ZGlzcGxheTpibG9ja30uZmFkZS1vdXR7b3BhY2l0eTowfS5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5jb250YWluZXJ7d2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7d2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99LmdyaWQtMS0ye3dpZHRoOjUwJX0uZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9LmdyaWQtMS00e3dpZHRoOjI1JX0uZ3JpZC0xLTV7d2lkdGg6MjAlfS5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0uZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9LmdyaWQtMy00e3dpZHRoOjc1JX0uZ3JpZC0zLTV7d2lkdGg6NjAlfS5ncmlkLTQtNXt3aWR0aDo4MCV9LmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfWlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9LmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0uZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9LmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfS5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9LmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9LmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0uZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9LmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn1hLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9LmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfS5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifS5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9LmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn1hLmxibHtsaW5lLWhlaWdodDoyNnB4fWEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0ubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9YS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0ubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifWEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifS5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfS5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9LnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifS5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Lm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0ubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHg7cGFkZGluZy1ib3R0b206MTJweH0ubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Lm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fS5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0ubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Lm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fS5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0ubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0ubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0ubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfS5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0ubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0ubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0ubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Lm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfS5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fS5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9UEsHCHu8/YwmFAAAJhQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xjc3NcaGlnaGxpZ2h0LmNzcy8qDQoNClN1bmJ1cnN0LWxpa2Ugc3R5bGUgKGMpIFZhc2lseSBQb2xvdm55b3YgPHZhc3RAd2hpdGVhbnRzLm5ldD4NCg0KKi8NCg0KcHJlIGNvZGUgew0KICAgIGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAwLjVlbTsNCiAgICBiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2Y4ZjhmODsNCn0NCg0KcHJlIC5jb21tZW50LA0KcHJlIC50ZW1wbGF0ZV9jb21tZW50LA0KcHJlIC5qYXZhZG9jIHsNCiAgICBjb2xvcjogI2FlYWVhZTsNCiAgICBmb250LXN0eWxlOiBpdGFsaWM7DQp9DQoNCnByZSAua2V5d29yZCwNCnByZSAucnVieSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnJlcXVlc3QsDQpwcmUgLnN0YXR1cywNCnByZSAubmdpbnggLnRpdGxlIHsNCiAgICBjb2xvcjogI0UyODk2NDsNCn0NCg0KcHJlIC5mdW5jdGlvbiAua2V5d29yZCwNCnByZSAuc3ViIC5rZXl3b3JkLA0KcHJlIC5tZXRob2QsDQpwcmUgLmxpc3QgLnRpdGxlIHsNCiAgICBjb2xvcjogIzk5Q0Y1MDsNCn0NCg0KcHJlIC5zdHJpbmcsDQpwcmUgLnRhZyAudmFsdWUsDQpwcmUgLmNkYXRhLA0KcHJlIC5maWx0ZXIgLmFyZ3VtZW50LA0KcHJlIC5hdHRyX3NlbGVjdG9yLA0KcHJlIC5hcGFjaGUgLmNicmFja2V0LA0KcHJlIC5kYXRlLA0KcHJlIC50ZXggLmNvbW1hbmQsDQpwcmUgLmNvZmZlZXNjcmlwdCAuYXR0cmlidXRlIHsNCiAgICBjb2xvcjogIzY1QjA0MjsNCn0NCg0KcHJlIC5zdWJzdCB7DQogICAgY29sb3I6ICNEQUVGQTM7DQp9DQoNCnByZSAucmVnZXhwIHsNCiAgICBjb2xvcjogI0U5QzA2MjsNCn0NCg0KcHJlIC50aXRsZSwNCnByZSAuc3ViIC5pZGVudGlmaWVyLA0KcHJlIC5waSwNCnByZSAudGFnLA0KcHJlIC50YWcgLmtleXdvcmQsDQpwcmUgLmRlY29yYXRvciwNCnByZSAuc2hlYmFuZywNCnByZSAucHJvbXB0IHsNCiAgICBjb2xvcjogIzg5QkRGRjsNCn0NCg0KcHJlIC5jbGFzcyAudGl0bGUsDQpwcmUgLmhhc2tlbGwgLnR5cGUsDQpwcmUgLnNtYWxsdGFsayAuY2xhc3MsDQpwcmUgLmphdmFkb2N0YWcsDQpwcmUgLnlhcmRvY3RhZywNCnByZSAucGhwZG9jIHsNCiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCg0KcHJlIC5zeW1ib2wsDQpwcmUgLnJ1YnkgLnN5bWJvbCAuc3RyaW5nLA0KcHJlIC5udW1iZXIgew0KICAgIGNvbG9yOiAjMzM4N0NDOw0KfQ0KDQpwcmUgLnBhcmFtcywNCnByZSAudmFyaWFibGUsDQpwcmUgLmNsb2p1cmUgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICMzRTg3RTM7DQp9DQoNCnByZSAuY3NzIC50YWcsDQpwcmUgLnJ1bGVzIC5wcm9wZXJ0eSwNCnByZSAucHNldWRvLA0KcHJlIC50ZXggLnNwZWNpYWwgew0KICAgIGNvbG9yOiAjQ0RBODY5Ow0KfQ0KDQpwcmUgLmNzcyAuY2xhc3Mgew0KICAgIGNvbG9yOiAjOUI3MDNGOw0KfQ0KDQpwcmUgLnJ1bGVzIC5rZXl3b3JkIHsNCiAgICBjb2xvcjogI0M1QUY3NTsNCn0NCg0KcHJlIC5ydWxlcyAudmFsdWUgew0KICAgIGNvbG9yOiAjQ0Y2QTRDOw0KfQ0KDQpwcmUgLmNzcyAuaWQgew0KICAgIGNvbG9yOiAjOEI5OEFCOw0KfQ0KDQpwcmUgLmFubm90YXRpb24sDQpwcmUgLmFwYWNoZSAuc3FicmFja2V0LA0KcHJlIC5uZ2lueCAuYnVpbHRfaW4gew0KICAgIGNvbG9yOiAjOUI4NTlEOw0KfQ0KDQpwcmUgLnByZXByb2Nlc3NvciwNCnByZSAucHJhZ21hIHsNCiAgICBjb2xvcjogIzg5OTZBODsNCn0NCg0KcHJlIC5oZXhjb2xvciwNCnByZSAuY3NzIC52YWx1ZSAubnVtYmVyIHsNCiAgICBjb2xvcjogI0REN0IzQjsNCn0NCg0KcHJlIC5jc3MgLmZ1bmN0aW9uIHsNCiAgICBjb2xvcjogI0RBRDA4NTsNCn0NCg0KcHJlIC5kaWZmIC5oZWFkZXIsDQpwcmUgLmNodW5rLA0KcHJlIC50ZXggLmZvcm11bGEgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwRTIyMzE7DQogICAgY29sb3I6ICNGOEY4Rjg7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmRpZmYgLmNoYW5nZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzRBNDEwRDsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5hZGRpdGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI1M0IyMjsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5kZWxldGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzQyMEUwOTsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5jb2ZmZWVzY3JpcHQgLmphdmFzY3JpcHQsDQpwcmUgLmphdmFzY3JpcHQgLnhtbCwNCnByZSAudGV4IC5mb3JtdWxhLA0KcHJlIC54bWwgLmphdmFzY3JpcHQsDQpwcmUgLnhtbCAudmJzY3JpcHQsDQpwcmUgLnhtbCAuY3NzLA0KcHJlIC54bWwgLmNkYXRhIHsNCiAgICBvcGFjaXR5OiAwLjU7DQp9DQoNCnByZSAuZ28gLnR5cGVuYW1lew0KICAgIGNvbG9yOiAjZmZiYzU0Ow0KfVBLBwjDaOPeXQkAAF0JAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcY3NzXGxpbmcuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOiNmM2YzZjN9CiNoZWFkZXJ7YmFja2dyb3VuZDojMDA5M2M0O21pbi13aWR0aDoxMjBweDtwYWRkaW5nOjQwcHggMCA0OHB4IDA7Y29sb3I6I2ZiZmJmYn0jaGVhZGVyIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7Ym9yZGVyLXJhZGl1czo1MHB4Oy1tb3otYm9yZGVyLXJhZGl1czo1MHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo1MHB4fQojaGVhZGVyLWh7bGluZS1oZWlnaHQ6OTRweDtjb2xvcjojZmJmYmZiO3BhZGRpbmc6MDttYXJnaW4tbGVmdDoyNHB4fSNoZWFkZXItaCBhe2NvbG9yOiNmYmZiZmJ9CiNuYXZ7bGluZS1oZWlnaHQ6OTBweH0jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7bWFyZ2luLWxlZnQ6NDRweH0jbmF2IGxpIGF7Zm9udC1zaXplOjE4cHg7Y29sb3I6I2YzZjNmMztkaXNwbGF5OmJsb2NrfSNuYXYgbGkgYTpob3Zlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgMCAzcHggIzMzMzstbW96LXRleHQtc2hhZG93OjAgMCAzcHggIzMzMzstd2Via2l0LXRleHQtc2hhZG93OjAgMCAzcHggIzMzM30KI2Zvb3RlcntwYWRkaW5nOjMwcHggNDBweDtjb2xvcjojOTk5fQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0jYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAudmlld3N7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIC5jb21tZW50c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjQwcHg7bWFyZ2luLWxlZnQ6OHB4O2JvcmRlcjo2cHggc29saWQgI2ZmZjtib3gtc2hhZG93OjAgMCAycHggIzk5OTstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICM5OTl9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cyBhe2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHM6aG92ZXJ7Ym94LXNoYWRvdzowIDAgNHB4ICM2NjY7LW1vei1ib3gtc2hhZG93OjAgMCA0cHggIzY2Njstd2Via2l0LWJveC1zaGFkb3c6MCAwIDRweCAjNjY2fQojYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze3RvcDoxNHB4O2xlZnQ6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czozMHB4Oy1tb3otYm9yZGVyLXJhZGl1czozMHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozMHB4O3BhZGRpbmc6MDtib3JkZXI6NHB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tYWluOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7Ym9yZGVyOjExcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjYzcHg7bGVmdDotMjJweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aXRsZXtmb250LXNpemU6MjhweDtwYWRkaW5nLWJvdHRvbToyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW4gLnRpbWUtaW5mb3tjb2xvcjojOTk5O21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO3RleHQtaW5kZW50OjFlbTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjUwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1haW57bWFyZ2luLWxlZnQ6MH0jYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWluOmJlZm9yZXtkaXNwbGF5Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1ldGF7cmlnaHQ6NDRweDt0b3A6LTM2cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLnZpZXdze3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czozNnB4Oy1tb3otYm9yZGVyLXJhZGl1czozNnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozNnB4O2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1zaXplOjI0cHg7cGFkZGluZzowO2JvcmRlcjo2cHggc29saWQgI2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC50YWd7Y29sb3I6Izk5OX0KI2FydGljbGUtcGFnZXJ7bWFyZ2luLWxlZnQ6MTE2cHh9I2FydGljbGUtcGFnZXIgLml0ZW17bWFyZ2luOjA7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM5OTk7cGFkZGluZzoxMnB4IDE4cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQ6IzAwNzliY30KI2NvbW1lbnR7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2NvbW1lbnQgLm1ldGF7cmlnaHQ6LTI0cHg7dG9wOi0zMHB4fSNjb21tZW50IC5tZXRhIC5jb21tZW50c3ttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye21hcmdpbi1yaWdodDoxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDttYXJnaW4tdG9wOjZweH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIHB7bWFyZ2luLWJvdHRvbTowfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3J7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmJsb2NrfSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3I6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZGRkO3BhZGRpbmc6M3B4IDEwcHh9I2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KI2NvbW1lbnQtbGlzdCAuYy1jb250ZW50e3BhZGRpbmctdG9wOjRweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2O21hcmdpbi1sZWZ0OjEycHh9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1zaG93e21hcmdpbi1ib3R0b206MzJweH0KI2NvbW1lbnQtdGl0bGV7bWFyZ2luLWJvdHRvbToyMHB4O3BhZGRpbmctYm90dG9tOjIwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvO21hcmdpbi1ib3R0b206MzBweH0jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcntib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHg7d2lkdGg6NTBweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXtkaXNwbGF5Om5vbmV9ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH0gI25hdiwjaGVhZGVyLWh7bGluZS1oZWlnaHQ6NTBweH0gI2Zvb3RlciBzcGFue2Zsb2F0Om5vbmU7dGV4dC1hbGlnbjpjZW50ZXJ9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1oe21hcmdpbi1sZWZ0OjB9ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfSAjbmF2e2Zsb2F0OmxlZnR9I25hdiBsaXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo0NHB4fX0KUEsHCMnsXolgKgAAYCoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHN0YXRpY1xjc3Ncc3R5bGUuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2JnLnBuZyIpIHJlcGVhdH0KI2hlYWRlcntiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2hlYWRlci5naWYiKSByZXBlYXQgIzRjNzI5ODttaW4td2lkdGg6MTIwcHg7cGFkZGluZzozMHB4IDA7Y29sb3I6I2ZiZmJmYn0KI2hlYWRlci1pbWd7d2lkdGg6OTZweDtoZWlnaHQ6OTZweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe3BhZGRpbmctdG9wOjI0cHg7Zm9udC1zaXplOjMycHh9I2hlYWRlci1oIGF7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfQojbmF2e2hlaWdodDo1NHB4O2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3gtc2hhZG93OjAgMCAycHggI2JiYjstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICNiYmI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY30jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7cGFkZGluZzowIDE4cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7cGFkZGluZzowIDMycHg7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzAwNzliY30KI25hdi5maXhlZHtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO3RvcDowfQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZm9vdGVye2NvbG9yOiNjY2M7YmFja2dyb3VuZC1jb2xvcjojMWMyNDI5O3BhZGRpbmc6MjRweCAwfSNmb290ZXIgcHttYXJnaW4tYm90dG9tOjlweDtmb250LXdlaWdodDpib2xkO2xldHRlci1zcGFjaW5nOjFweH0jZm9vdGVyIHAgYXtjb2xvcjojY2NjO21hcmdpbjowIDE2cHh9I2Zvb3RlciBwIGE6aG92ZXJ7Y29sb3I6I2ZiZmJmYn0KI2Zvb3RlciBwIGEgLmZhe21hcmdpbi1yaWdodDo4cHh9CiNnby10b3B7Ym90dG9tOjUwcHg7cmlnaHQ6NDBweDtwb3NpdGlvbjpmaXhlZDtjb2xvcjojZmZmO3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo4cHg7b3BhY2l0eTouNH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhe3dpZHRoOjEwOHB4O2xpbmUtaGVpZ2h0OjI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudmlld3MsI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYXtjb2xvcjojZmZmfSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDoxNDBweH0KI2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxle3BhZGRpbmc6OHB4IDE2cHg7YmFja2dyb3VuZC1jb2xvcjojNGM3Mjk4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjJweH0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYXtjb2xvcjojZWVlfSNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtwYWRkaW5nOjE4cHggMjRweCAyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm97bWFyZ2luLWJvdHRvbTowO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcDpub25lO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjJweDtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5zaGFyZSAuZmF7bWFyZ2luLXJpZ2h0OjB9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz4qe3BhZGRpbmc6NnB4IDE4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz5zcGFue2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZX0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFke2NvbG9yOiM5OTl9I2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLnRpbWUsI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC52aWV3cyBzcGFue2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciBhcnRpY2xle21hcmdpbi1ib3R0b206NDhweH0KI2NvbW1lbnR7bWFyZ2luLXRvcDotMjRweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmZmZ9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvfSNjb21tZW50LWZvcm0gLmMtaW5mb3t3aWR0aDoyNiV9I2NvbW1lbnQtZm9ybSAuYy1pbmZvIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjB9CiNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDo3MCV9CiNjb21tZW50LWZvcm0gLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjE4cHg7cGFkZGluZy1ib3R0b206MThweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1saXN0IC5jLXNlY3Rpb257bWF4LXdpZHRoOjgzMHB4fQojY29tbWVudC1saXN0IC5jLWNoZWNre2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNlNjQzNDZ9I2NvbW1lbnQtbGlzdCAuYy1jaGVjayAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MH0gI2FydGljbGUtY29udGFpbmVyIC5tZXRhLmxlZnR7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MDt3aWR0aDphdXRvfSAjbmF2IGxpe3BhZGRpbmc6MCAxMHB4fSAjaGVhZGVyLWltZ3tmbG9hdDpsZWZ0O3dpZHRoOjY0cHg7aGVpZ2h0OjY0cHh9ICNoZWFkZXItaHtwYWRkaW5nOjE3cHggMDtmb250LXNpemU6MjRweH0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLnRhZywjYXJ0aWNsZS1jb250YWluZXIgLnRpbWV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3Jte3dpZHRoOjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1pbWd7ZGlzcGxheTpub25lfSAjaGVhZGVyLXN1YntkaXNwbGF5Om5vbmV9ICNjb21tZW50LWxpc3QgLmMtYXZhdGFye2Rpc3BsYXk6bm9uZX19ClBLBwiqeuwujSgAAI0oAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcZmF2aWNvbi5pY28AAAEAAQAgIAAAAQAgAKgQAAAWAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAEAAAEgsAABILAAAAAAAAAAAAALN+B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs34H27N+B9uzfgfbs34H27N+B9uzfgfbs30H27N+B9uzfgfbs30H27N+B9uzfgfbs34H27N+B9uyfAfWr3oHx61+GK21k0qQuoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoMN/7qGF/+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7qBCP+5gQj/uYII/7qBCP+6ggj/uoII/7mBCP+5gQj/uYII/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoII/7mBCP+5gQj/uoEI/7qBCP+6ggj/uoII/7qBCP+6ggj/uoEI/7qCCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6gQj/uYEI/7mBCP+5ggf/uYIH/7mCB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+8hAX/vIQF/7uDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yDBf+8hAX/vIQF/7yDBf+8hAb/vIQG/8CHA//AhgP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhwT/wIcE/8CGA//AhgL/xYkC/8WJAf/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYoC/8WJAf/FigP/x48O/8yaJ//JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/Jkxf/1q9T/+HAdf/p0p//8+fN/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y40A/8ugPf/y693+/v36/v/////////+yo4A/sqNAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgH/y44A/8uOAP/LjQD/yo4A/8uOAP/LjgD/y44B/8uOAf/LjgD/y44A/8uOAP/LjgD/y44B/8qNAP/Ljwb/2Llz//r59f7+///+/v7+//7+/v7KjgD+yo0A/8uOAP/LjgD/yo4A/8qOAP/KjgD/yo4A/8uOAP/LjgD/yo4A/8uOAP/LjgD/yo0A/8uNAP/LjgH/yY0B/8eNCP/KjgP/yo0A/8uNAP/KjQD/yo0A/8qNAP/LjwL/0Job/9++cf/17+D//v7+/v////7+/v7//v7+/suOAfrLjgD/yo0A/8uOAP/LjgH/yo4A/8qOAP/KjgD/y44A/8qOAP/KjgD/y44A/8uOAf/KjgD/yo0A/8mMAP/HmjT/wat5/6iLSP/Npk7/xZgw/8+fMf/Wpjn/2rBP/+LCd//w37n/+/jy//7+///+/v7////////////+/v7/vJIyvruKGf/Mkgz/yo4A/8qNAP/KjQD/yo0A/8qOAP/KjgD/yo4A/8qNAP/KjQD/yo0A/8uOAf/QmRj/yaNN/9DGrf/l5eb/pqWj/+nm3//EvrH/4drJ/vnz4/779uz//fz5//////7////+/v7+//7+/v////////////7+/v+Vk42UmY95/+bOmf/gvWr/2a1I/9SjMv/Rmx//z5YT/8+VEf/PlRH/z5cX/9OfKP/Zq0P/4b9x/+3bs//QzMT/w8PD/urq6v62trb+6Ojo/rS0tf7a29v+/f39/v7///7+/v7//////v////7+/v7//v7+//////7////+/////peWlpWSkpP/9vb1//379//59Of/9u3X//Lkxf/w37j/7tyy/+/cs//x4bv/9enO//nz5P/39fL/ycnK/6+vr/+lpKT/vb29/5SUlP+5ubn/p6en/7Gxsf/R0dH//Pz8///////+/v7//v7+//7+/v/+/v7////////////+/v7/qampmJGRkf/y8vL////+//7+/v/////////////////+/v7//v7+//7+///+/////////+Hh4P+6ubn/7+/v/+zs7P/X19f/xsbG/97e3v/19fX/6urr/7i4uP/x8fH///////7+/v7//////v7+//7+/v////////////7+/v+bm5tng4OD8O3t7f///////////v///v7+/v7//v7+/v/+/v7+/v7++fn5/vb29v76+vr+5+fo/7e3t//t7e3/+Pj4/t3d3f7Y2Nj+8vLy/v7+/v7Y2Nj+vr6+/vj4+P7//////////v////7+/v7//v7+//////7////+/////jU1NSNxcXHY5ubm//////7////+//////7+/v//////7+/v/tDQ0P++vr7+urq6/r6+vv/R0dH+z8/P/qysrP9nZ2f+Kysr/yMjI/9bW1v/q6ur/729vf7k5OT+5eXl/9ra2v/f39/+8PDw/v39/f/////+/v7+/v/////////+jY2NJ3V1ddrb29v//////v////7//////v7+/+Hh4f+1tbX+ysrK/+Pj4/7n5+f+4+Pj/8nJyf6+vr7+t7e3/ywsLP4AAAD/AAAA/wYGBv+Ghob/19fX/r6+vv68vLz/wcHB/76+vv65ubn+x8fH//Hx8f7////+//////////7g4OAkhISE2cXFxf///////////v/////n5+f/tbW1/+Tk5P///////////v/////////+/v7+/uDg4P+2trb/rq6u/25ubv9ZWVn/g4OD/7u7u/++vr7/5OTk/vr6+v/9/f3//Pz8/vDw8P/Kysr/t7e3//Dw8P///////////4eHh4BdXV3xo6Oj///////////++/v7/8HBwf/BwcH/ra2t/8bGxv/6+vr///////7+/v/+/v7+/////9bW1v/ExMT/9vb2//b29v/d3d3/vr6+/+Tk5P/x8fH//v7+//7+/v/+/v7+//////39/f/Nzc3/w8PD//v7+///////hoaG+JaWlv+Li4v/9/f3///////u7u7/q6ur/1JSUv8TExP/Z2dn/9HR0f/9/f3//v7+////////////8vLy/7i4uP/v7+//+vr6/8DAwP+cnJz/VFRU/25ubv/c3Nz//v7+//////7+/v7///////T09P+3t7f/6+vr///////v7+//7Ozs/3x8fP/Y2Nj+/////ufn5/+Tk5P/FhYW/wUFBf83Nzf/mZmZ//v7+//+/v7//////v/////6+vr/w8PD/+fn5//z8/P/rKys/zk5Of8AAAD/RUVF/piYmP/19fX//////v7+/v///////f39/8TExP/e3t7////////////R0dH/MzMz/5eXl///////5+fn/7Ozs/9oaGj/FxcX/zo6Ov/IyMj//v7+//7+/v////////////j4+P+9vb3/6+vr//Dw8P+zs7P/TExM/wAAAP8ODg7+goKC//r6+v/////+/v7+///////+/v7/x8fH/9zc3P///////////7i4uP8ZGRn/Pz8//t/f3/729vb+vb29/9vb2/7ExMT+29vb//39/f7+/v7+/////v////7////+5eXl/rm5uf729vb/8/Pz/76+vv/BwcH+cnJy/n5+fv7g4OD///////7+/v7+/v7+//////j4+P68vLz+5ubm//////7////+8fHx/7Kysv+FhYX+i4uL/vT09P/U1NT/vb29//n5+f7//////v7+/v////7//////////vb29v69vb3/1tbW///////9/f3/x8fH/87Ozv/5+fn+/Pz8/v///////////////v////7/////39/f/rm5uf74+Pj/7u7u/snJyf/4+Pj+//////Ly8v6IiIj+m5ub//T09P/IyMj/vb29/ufn5//6+vr+/Pz8/vr6+v/n5+f+vb29/snJyf/6+vr////////////w8PD/t7e3/9jY2P79/f3+///////////////+/////unp6f+3t7f+4uLi//Hx8f+Ojo7+c3Nz5ZCQkP6jo6P/oKCg/n5+fvpOTk7hnJyc++Hh4f/W1tb+vb29/8DAwP/BwcH/vr6+/7m5uf7W1tb++vr6///////////////////////p6en/ubm5/sPDw/7f39//6Ojo/+Tk5P7MzMz/tra2/93d3f7q6ur/g4OD/3BwcP+rq6s/cHBwZkVFRWlKSkpnhYWFX4yMjDhtbW2bd3d3662trf/Y2Nj/5OTk/uXl5f/p6en/9vb2/v////////////////7+/v/////////////////19fX/1tbW/8LCwv+9vb3/wcHB/9HR0f/k5OT/xsbG/319ffNjY2POa2tr0hEREQD///8A////ALy8vAAAAAAAAAAAAM7Ozgt2dnZFbW1to3t7e+uZmZn/t7e3/9fX1//o6Oj/8PDw//b29v/6+vr//f39////////////////////////////9/f3/+rq6v/d3d3+t7e3/46Ojv58fHzgh4eHcry8vBdwcHAdw8PDAICAgAAgICAAPz8/AJiYmADGxsYAl5eXAf///wDKysoNqampU319fY5wcHDFe3t793d3d/WBgYH5kZGR/KOjo/uzs7P7v7+/+8XFxfvGxsb7wMDA+7Ozs/ucnJz8gYGB+nh4ePpxcXHMiYmJi76+vjz///8FqqqqAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAAAAAAAFBLBwipcxPwvhAAAL4QAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcaW1nL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABEAAABzdGF0aWNcaW1nXGJnLnBuZ4lQTkcNChoKAAAADUlIRFIAAACWAAAAlggCAAAAs2PmtQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANmaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDk3MEYzQ0VCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDk3MEYzQ0RCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQUFCQkVBMThGQjVFMjExQkJFM0FCRjQzOTM4QUVCRiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyNkU0RkNCRTU1QUFFMjExOTcwMEI1OTlFMjkzRUEwNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsyOCusAACgjSURBVHja7N3tkmRHka1hdVLA/V8oIxDMHAOEdHZpdT/1KgrDDkNuHYSqfrRVZ2XujPCI8I/lyz0+ff31N4/H429/+9unT5++++67X//613/9619fXl6u33/1q199++2311+v33/zm9/85S9/uX7/6quv9t/rI9df98v12b3t+uV68fr49RAvXv/ude/Zk69frq/b63vz9fu+9/vvv78ee72yN1z/3RuuF6+/Xr9cr1xfcf2+YW9g11+v9+9P1yvXX7/74ef65frT9fpe3JP3wX3q+vf64PXL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ICAgICByZXR1cm4gZmFsc2U7DQogICAgfSkNCn0NCg0KZnVuY3Rpb24gcmVuZGVyTWFya2Rvd24oKSB7DQogICAgdmFyICRtZCA9ICQoJy5tYXJrZG93bicpOw0KICAgICRtZC5lYWNoKGZ1bmN0aW9uIChpLCBpdGVtKSB7DQogICAgICAgICQoaXRlbSkuaHRtbChtYXJrZWQoJChpdGVtKS5odG1sKCkucmVwbGFjZSgvJmd0Oy9nLCAnPicpKSk7DQogICAgfSk7DQogICAgdmFyIGNvZGUgPSAkbWQuZmluZCgncHJlIGNvZGUnKTsNCiAgICBpZiAoY29kZS5sZW5ndGgpIHsNCiAgICAgICAgJCgiPGxpbms+IikuYXR0cih7IHJlbDogInN0eWxlc2hlZXQiLCB0eXBlOiAidGV4dC9jc3MiLCBocmVmOiAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyJ9KS5hcHBlbmRUbygiaGVhZCIpOw0KICAgICAgICAkLmdldFNjcmlwdCgiL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGNvZGUuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soaXRlbSkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGluaXRDb21tZW50KCkgew0KICAgIHZhciAkbGlzdCA9ICQoJyNjb21tZW50LWxpc3QnKTsNCiAgICBpZiAoISRsaXN0Lmxlbmd0aCkgew0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1hdXRob3IiKSkgew0KICAgICAgICAkKCcjY29tbWVudC1hdXRob3InKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpOw0KICAgICAgICAkKCcjY29tbWVudC1lbWFpbCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1lbWFpbCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtdXJsJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LXVybCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXZhdGFyJykuYXR0cigic3JjIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXZhdGFyIikpOw0KICAgICAgICAkKCcuYy1hdmF0YXInKS5yZW1vdmVDbGFzcygibnVsbCIpOw0KICAgIH0NCiAgICAkKCcjY29tbWVudC1jb250ZW50Jykub24oImZvY3VzIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoJCgnLmMtYXZhdGFyJykuaGFzQ2xhc3MoIm51bGwiKSkgew0KICAgICAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICAgICAkKCcuYy1pbmZvLWZpZWxkcycpLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkKCcubm90LW1lJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1hdmF0YXItZmllbGQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnI2NvbW1lbnQtc2hvdycpLm9uKCJjbGljayIsICIuZW5hYmxlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIjY29tbWVudC1zaG93IikucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWF1dGhvciIsICQoJyNjb21tZW50LWF1dGhvcicpLnZhbCgpKTsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWVtYWlsIiwgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC11cmwiLCAkKCcjY29tbWVudC11cmwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdmF0YXIiLCBqc29uLmNvbW1lbnQuYXZhdGFyKTsNCiAgICAgICAgICAgIHZhciB0cGwgPSAkKCQoJyNjb21tZW50LXRwbCcpLmh0bWwoKSk7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXZhdGFyIikuYXR0cigic3JjIiwganNvbi5jb21tZW50LmF2YXRhcikuYXR0cigiYWx0IiwganNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXV0aG9yIikuYXR0cigiaHJlZiIsIGpzb24uY29tbWVudC51cmwpLnRleHQoanNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtcmVwbHkiKS5hdHRyKCJyZWwiLCBqc29uLmNvbW1lbnQuaWQpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKGpzb24uY29tbWVudC5jb250ZW50KTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQucGFyZW50X21kKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXAtbWQiKS5odG1sKG1hcmtlZChqc29uLmNvbW1lbnQucGFyZW50X21kKSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0cGwuYXR0cigiaWQiLCAiY29tbWVudC0iICsganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQuc3RhdHVzID09ICJhcHByb3ZlZCIpIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtY2hlY2siKS5yZW1vdmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRsaXN0LmFwcGVuZCh0cGwpOw0KICAgICAgICAgICAgJCgnLmNhbmNlbC1yZXBseScpLnRyaWdnZXIoImNsaWNrIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykudmFsKCIiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGFsZXJ0KCLmj5DkuqTlpLHotKUhIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkbGlzdC5vbigiY2xpY2siLCAiLmMtcmVwbHkiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZXBseS1tZCcpLnJlbW92ZSgpOw0KICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICB2YXIgcGMgPSAkKCcjY29tbWVudC0nICsgaWQpOw0KICAgICAgICB2YXIgbWQgPSAiPiBAIiArIHBjLmZpbmQoIi5jLWF1dGhvciIpLnRleHQoKSArICJcblxuIjsNCiAgICAgICAgbWQgKz0gIj4gIiArIHBjLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKCkgKyAiXG4iOw0KICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykuYmVmb3JlKCc8ZGl2IGNsYXNzPSJyZXBseS1tZCBtYXJrZG93biI+JyArIG1hcmtlZChtZCkgKyAnPC9kaXY+Jyk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbChpZCk7DQogICAgICAgIGlmICgkKCcjY29tbWVudC1zaG93JykubGVuZ3RoKSB7DQogICAgICAgICAgICAkKCcjY29tbWVudC1zaG93IC5lbmFibGUnKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICB9DQogICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS5zaG93KCk7DQogICAgICAgIHZhciB0b3AgPSAkKCcjY29tbWVudC1mb3JtJykub2Zmc2V0KCkudG9wOw0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IHRvcH0sIDUwMCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCiAgICAkKCcuY2FuY2VsLXJlcGx5Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAkKHRoaXMpLmhpZGUoKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KfQ0KUEsHCB7hHnJ1EgAAdRIAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHN0YXRpY1xqc1x1cGxvYWQuanNmdW5jdGlvbiBpbml0VXBsb2FkKHApIHsNCiAgICAkKCcjYXR0YWNoLXNob3cnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICB9KTsNCiAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmIChjb25maXJtKCLnq4vljbPkuIrkvKA/IikpIHsNCiAgICAgICAgICAgIHZhciBiYXIgPSAkKCc8cCBjbGFzcz0iZmlsZS1wcm9ncmVzcyBpbmxpbmUtYmxvY2siPjAlPC9wPicpOw0KICAgICAgICAgICAgJCgnI2F0dGFjaC1mb3JtJykuYWpheFN1Ym1pdCh7DQogICAgICAgICAgICAgICAgImJlZm9yZVN1Ym1pdCI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgJChwKS5iZWZvcmUoYmFyKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJ1cGxvYWRQcm9ncmVzcyI6IGZ1bmN0aW9uIChldmVudCwgcG9zaXRpb24sIHRvdGFsLCBwZXJjZW50Q29tcGxldGUpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRWYWwgPSBwZXJjZW50Q29tcGxldGUgKyAnJSc7DQogICAgICAgICAgICAgICAgICAgIGJhci5jc3MoIndpZHRoIiwgcGVyY2VudFZhbCkuaHRtbChwZXJjZW50VmFsKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoanNvbi5tc2cpLmFkZENsYXNzKCJlcnIiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhci5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMDApOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoIi8iICsganNvbi5maWxlLlVybCArICImbmJzcDsmbmJzcDsmbmJzcDsoQCIgKyBqc29uLmZpbGUuTmFtZSArICIpIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJCgnI2F0dGFjaC11cGxvYWQnKS52YWwoIiIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJCh0aGlzKS52YWwoIiIpOw0KICAgICAgICB9DQogICAgfSk7DQp9UEsHCIiJF/v2BAAA9gQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHN0YXRpY1xsaWIvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAHN0YXRpY1xsaWJcY29kZW1pcnJvci1tb2RlLm1pbi5qcyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0vXihccyopKFsqKy1dfChcZCspXC4pKFxzKikvLGU9IiorLSI7Q29kZU1pcnJvci5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT1yLmdldEN1cnNvcigpLG89ci5nZXRTdGF0ZUFmdGVyKGkubGluZSkubGlzdCE9PSExO2lmKCFvfHwhKG49ci5nZXRMaW5lKGkubGluZSkubWF0Y2godCkpKXJldHVybiByLmV4ZWNDb21tYW5kKCJuZXdsaW5lQW5kSW5kZW50Iiksdm9pZCAwO3ZhciBsPW5bMV0sYT1uWzRdLHM9ZS5pbmRleE9mKG5bMl0pPj0wP25bMl06cGFyc2VJbnQoblszXSwxMCkrMSsiLiI7ci5yZXBsYWNlU2VsZWN0aW9uKCJcbiIrbCtzK2EsImVuZCIpfX0oKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoIm1hcmtkb3duIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlLHIpe3JldHVybiBlLmY9ZS5pbmxpbmU9cixyKHQsZSl9ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIGUuZj1lLmJsb2NrPXIscih0LGUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubGlua1RpdGxlPSExLHQuZW09ITEsdC5zdHJvbmc9ITEsdC5xdW90ZT0wLGd8fHQuZiE9bHx8KHQuZj1jLHQuYmxvY2s9byksdC50cmFpbGluZ1NwYWNlPTAsdC50cmFpbGluZ1NwYWNlTmV3TGluZT0hMSx0LnRoaXNMaW5lSGFzQ29udGVudD0hMSxudWxsfWZ1bmN0aW9uIG8odCxpKXt2YXIgbz1pLmxpc3QhPT0hMTtpLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbkRpZmY+PTA/KGkuaW5kZW50YXRpb25EaWZmPDQmJihpLmluZGVudGF0aW9uLT1pLmluZGVudGF0aW9uRGlmZiksaS5saXN0PW51bGwpOmkubGlzdCE9PSExJiZpLmluZGVudGF0aW9uPjA/KGkubGlzdD1udWxsLGkubGlzdERlcHRoPU1hdGguZmxvb3IoaS5pbmRlbnRhdGlvbi80KSk6aS5saXN0IT09ITEmJihpLmxpc3Q9ITEsaS5saXN0RGVwdGg9MCk7dmFyIGw9bnVsbDtpZihpLmluZGVudGF0aW9uRGlmZj49NClyZXR1cm4gaS5pbmRlbnRhdGlvbi09NCx0LnNraXBUb0VuZCgpLGs7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO2lmKGw9dC5tYXRjaChSKSlpLmhlYWRlcj1sWzBdLmxlbmd0aDw9Nj9sWzBdLmxlbmd0aDo2O2Vsc2UgaWYoaS5wcmV2TGluZUhhc0NvbnRlbnQmJihsPXQubWF0Y2goRykpKWkuaGVhZGVyPSI9Ij09bFswXS5jaGFyQXQoMCk/MToyO2Vsc2UgaWYodC5lYXQoIj4iKSlmb3IoaS5pbmRlbnRhdGlvbisrLGkucXVvdGU9MSx0LmVhdFNwYWNlKCk7dC5lYXQoIj4iKTspdC5lYXRTcGFjZSgpLGkucXVvdGUrKztlbHNle2lmKCJbIj09PXQucGVlaygpKXJldHVybiByKHQsaSxoKTtpZih0Lm1hdGNoKEksITApKXJldHVybiBBO2lmKGkucHJldkxpbmVIYXNDb250ZW50JiYhb3x8IXQubWF0Y2goUCwhMCkmJiF0Lm1hdGNoKEYsITApKXtpZihlLmZlbmNlZENvZGVCbG9ja3MmJnQubWF0Y2goL15gYGAoW1x3KyNdKikvLCEwKSlyZXR1cm4gaS5sb2NhbE1vZGU9eChSZWdFeHAuJDEpLGkubG9jYWxNb2RlJiYoaS5sb2NhbFN0YXRlPWkubG9jYWxNb2RlLnN0YXJ0U3RhdGUoKSksbih0LGksYSksa31lbHNlIGkuaW5kZW50YXRpb24rPTQsaS5saXN0PSEwLGkubGlzdERlcHRoKyssZS50YXNrTGlzdHMmJnQubWF0Y2goQiwhMSkmJihpLnRhc2tMaXN0PSEwKX1yZXR1cm4gcih0LGksaS5pbmxpbmUpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj12LnRva2VuKHQsZS5odG1sU3RhdGUpO3JldHVybiBnJiYidGFnIj09PXImJiJvcGVuVGFnIiE9PWUuaHRtbFN0YXRlLnR5cGUmJiFlLmh0bWxTdGF0ZS5jb250ZXh0JiYoZS5mPWMsZS5ibG9jaz1vKSxlLm1kX2luc2lkZSYmLTEhPXQuY3VycmVudCgpLmluZGV4T2YoIj4iKSYmKGUuZj1jLGUuYmxvY2s9byxlLmh0bWxTdGF0ZS5jb250ZXh0PXZvaWQgMCkscn1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQuc29sKCkmJnQubWF0Y2goL15gYGAvLCEwKT8oZS5sb2NhbE1vZGU9ZS5sb2NhbFN0YXRlPW51bGwsZS5mPWMsZS5ibG9jaz1vLGspOmUubG9jYWxNb2RlP2UubG9jYWxNb2RlLnRva2VuKHQsZS5sb2NhbFN0YXRlKToodC5za2lwVG9FbmQoKSxrKX1mdW5jdGlvbiBzKHQpe3ZhciBlPVtdO2lmKHQudGFza09wZW4pcmV0dXJuIm1ldGEiO2lmKHQudGFza0Nsb3NlZClyZXR1cm4icHJvcGVydHkiO2lmKHQuc3Ryb25nJiZlLnB1c2goeiksdC5lbSYmZS5wdXNoKEUpLHQubGlua1RleHQmJmUucHVzaChPKSx0LmNvZGUmJmUucHVzaChrKSx0LmhlYWRlciYmKGUucHVzaChDKSxlLnB1c2goQyt0LmhlYWRlcikpLHQucXVvdGUmJmUucHVzaCh0LnF1b3RlJTI/dzpMKSx0Lmxpc3QhPT0hMSl7dmFyIHI9KHQubGlzdERlcHRoLTEpJTM7cj8xPT09cj9lLnB1c2goTSk6ZS5wdXNoKFQpOmUucHVzaChTKX1yZXR1cm4gdC50cmFpbGluZ1NwYWNlTmV3TGluZT9lLnB1c2goInRyYWlsaW5nLXNwYWNlLW5ldy1saW5lIik6dC50cmFpbGluZ1NwYWNlJiZlLnB1c2goInRyYWlsaW5nLXNwYWNlLSIrKHQudHJhaWxpbmdTcGFjZSUyPyJhIjoiYiIpKSxlLmxlbmd0aD9lLmpvaW4oIiAiKTpudWxsfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdC5tYXRjaChfLCEwKT9zKGUpOnZvaWQgMH1mdW5jdGlvbiBjKHQsaSl7dmFyIG89aS50ZXh0KHQsaSk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBvKXJldHVybiBvO2lmKGkubGlzdClyZXR1cm4gaS5saXN0PW51bGwscyhpKTtpZihpLnRhc2tMaXN0KXt2YXIgYT0ieCIhPT10Lm1hdGNoKEIsITApWzFdO3JldHVybiBhP2kudGFza09wZW49ITA6aS50YXNrQ2xvc2VkPSEwLGkudGFza0xpc3Q9ITEscyhpKX1pLnRhc2tPcGVuPSExLGkudGFza0Nsb3NlZD0hMTt2YXIgdT10LnNvbCgpLGM9dC5uZXh0KCk7aWYoIlxcIj09PWMpcmV0dXJuIHQubmV4dCgpLHMoaSk7aWYoaS5saW5rVGl0bGUpe2kubGlua1RpdGxlPSExO3ZhciBoPWM7IigiPT09YyYmKGg9IikiKSxoPShoKyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpO3ZhciBkPSJeXFxzKig/OlteIitoKyJcXFxcXSt8XFxcXFxcXFx8XFxcXC4pIitoO2lmKHQubWF0Y2gobmV3IFJlZ0V4cChkKSwhMCkpcmV0dXJuIFd9aWYoImAiPT09Yyl7dmFyIHA9cyhpKSxnPXQucG9zO3QuZWF0V2hpbGUoImAiKTt2YXIgdj0xK3QucG9zLWc7cmV0dXJuIGkuY29kZT92PT09Yj8oaS5jb2RlPSExLHApOnMoaSk6KGI9dixpLmNvZGU9ITAscyhpKSl9aWYoaS5jb2RlKXJldHVybiBzKGkpO2lmKCIhIj09PWMmJnQubWF0Y2goL1xbW15cXV0qXF0gPyg/OlwofFxbKS8sITEpKXJldHVybiB0Lm1hdGNoKC9cW1teXF1dKlxdLyksaS5pbmxpbmU9aS5mPWYsTjtpZigiWyI9PT1jJiZ0Lm1hdGNoKC8uKlxdKFwofCA/XFspLywhMSkpcmV0dXJuIGkubGlua1RleHQ9ITAscyhpKTtpZigiXSI9PT1jJiZpLmxpbmtUZXh0KXt2YXIgeT1zKGkpO3JldHVybiBpLmxpbmtUZXh0PSExLGkuaW5saW5lPWkuZj1mLHl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXihodHRwcz98ZnRwcz8pOlwvXC8oPzpbXlxcPl18XFwuKSs+LywhMSkpcmV0dXJuIHIodCxpLG0oSCwiPiIpKTtpZigiPCI9PT1jJiZ0Lm1hdGNoKC9eW14+IFxcXStAKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEQsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXlx3LywhMSkpe2lmKC0xIT10LnN0cmluZy5pbmRleE9mKCI+Iikpe3ZhciB4PXQuc3RyaW5nLnN1YnN0cmluZygxLHQuc3RyaW5nLmluZGV4T2YoIj4iKSk7L21hcmtkb3duXHMqPVxzKignfCIpezAsMX0xKCd8Iil7MCwxfS8udGVzdCh4KSYmKGkubWRfaW5zaWRlPSEwKX1yZXR1cm4gdC5iYWNrVXAoMSksbih0LGksbCl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXlwvXHcqPz4vKSlyZXR1cm4gaS5tZF9pbnNpZGU9ITEsInRhZyI7dmFyIEM9ITE7aWYoIWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYiXyI9PT1jJiYiXyIhPT10LnBlZWsoKSYmdC5tYXRjaCgvKFx3KS8sITEpKXt2YXIgaz10LnBvcy0yO2lmKGs+PTApe3ZhciB3PXQuc3RyaW5nLmNoYXJBdChrKTsiXyIhPT13JiZ3Lm1hdGNoKC8oXHcpLywhMSkmJihDPSEwKX19dmFyIHA9cyhpKTtpZigiKiI9PT1jfHwiXyI9PT1jJiYhQylpZih1JiYiICI9PT10LnBlZWsoKSk7ZWxzZXtpZihpLnN0cm9uZz09PWMmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz0hMSxwO2lmKCFpLnN0cm9uZyYmdC5lYXQoYykpcmV0dXJuIGkuc3Ryb25nPWMscyhpKTtpZihpLmVtPT09YylyZXR1cm4gaS5lbT0hMSxwO2lmKCFpLmVtKXJldHVybiBpLmVtPWMscyhpKX1lbHNlIGlmKCIgIj09PWMmJih0LmVhdCgiKiIpfHx0LmVhdCgiXyIpKSl7aWYoIiAiPT09dC5wZWVrKCkpcmV0dXJuIHMoaSk7dC5iYWNrVXAoMSl9cmV0dXJuIiAiPT09YyYmKHQubWF0Y2goLyArJC8sITEpP2kudHJhaWxpbmdTcGFjZSsrOmkudHJhaWxpbmdTcGFjZSYmKGkudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITApKSxzKGkpfWZ1bmN0aW9uIGYodCxlKXtpZih0LmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7dmFyIG49dC5uZXh0KCk7cmV0dXJuIigiPT09bnx8IlsiPT09bj9yKHQsZSxtKFcsIigiPT09bj8iKSI6Il0iKSk6ImVycm9yIn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQubWF0Y2goL15bXlxdXSpcXTovLCEwKT8oZS5mPWQsTyk6cih0LGUsYyl9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0LmVhdFNwYWNlKCk/bnVsbDoodC5tYXRjaCgvXlteXHNdKy8sITApLHZvaWQgMD09PXQucGVlaygpP2UubGlua1RpdGxlPSEwOnQubWF0Y2goL14oPzpccysoPzoiKD86W14iXFxdfFxcXFx8XFwuKSsifCcoPzpbXidcXF18XFxcXHxcXC4pKyd8XCgoPzpbXilcXF18XFxcXHxcXC4pK1wpKSk/LywhMCksZS5mPWUuaW5saW5lPWMsVyl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gVlt0XXx8KHQ9KHQrIiIpLnJlcGxhY2UoLyhbLj8qK14kW1xdXFwoKXt9fC1dKS9nLCJcXCQxIiksVlt0XT1uZXcgUmVnRXhwKCJeKD86W15cXFxcXXxcXFxcLikqPygiK3QrIikiKSksVlt0XX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gcj1yfHxjLGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4ubWF0Y2gocChlKSksaS5pbmxpbmU9aS5mPXIsdH19dmFyIGc9Q29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eSgieG1sIiksdj1Db2RlTWlycm9yLmdldE1vZGUodCxnP3tuYW1lOiJ4bWwiLGh0bWxNb2RlOiEwfToidGV4dC9wbGFpbiIpLHk9e2h0bWw6Imh0bWxtaXhlZCIsanM6ImphdmFzY3JpcHQiLGpzb246ImFwcGxpY2F0aW9uL2pzb24iLGM6InRleHQveC1jc3JjIiwiYysrIjoidGV4dC94LWMrK3NyYyIsamF2YToidGV4dC94LWphdmEiLGNzaGFycDoidGV4dC94LWNzaGFycCIsImMjIjoidGV4dC94LWNzaGFycCIsc2NhbGE6InRleHQveC1zY2FsYSJ9LHg9ZnVuY3Rpb24oKXt2YXIgZSxyLG49e30saT17fSxvPVtdO2Zvcih2YXIgbCBpbiBDb2RlTWlycm9yLm1vZGVzKUNvZGVNaXJyb3IubW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJm8ucHVzaChsKTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKW5bb1tlXV09b1tlXTt2YXIgYT1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5taW1lTW9kZXMpQ29kZU1pcnJvci5taW1lTW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJmEucHVzaCh7bWltZTpsLG1vZGU6Q29kZU1pcnJvci5taW1lTW9kZXNbbF19KTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXI9YVtlXS5taW1lLGlbcl09YVtlXS5taW1lO2Zvcih2YXIgcyBpbiB5KSh5W3NdaW4gbnx8eVtzXWluIGkpJiYobltzXT15W3NdKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV0/Q29kZU1pcnJvci5nZXRNb2RlKHQsbltlXSk6bnVsbH19KCk7dm9pZCAwPT09ZS51bmRlcnNjb3Jlc0JyZWFrV29yZHMmJihlLnVuZGVyc2NvcmVzQnJlYWtXb3Jkcz0hMCksdm9pZCAwPT09ZS5mZW5jZWRDb2RlQmxvY2tzJiYoZS5mZW5jZWRDb2RlQmxvY2tzPSExKSx2b2lkIDA9PT1lLnRhc2tMaXN0cyYmKGUudGFza0xpc3RzPSExKTt2YXIgYj0wLEM9ImhlYWRlciIsaz0iY29tbWVudCIsdz0iYXRvbSIsTD0ibnVtYmVyIixTPSJ2YXJpYWJsZS0yIixNPSJ2YXJpYWJsZS0zIixUPSJrZXl3b3JkIixBPSJociIsTj0idGFnIixIPSJsaW5rIixEPSJsaW5rIixPPSJsaW5rIixXPSJzdHJpbmciLEU9ImVtIix6PSJzdHJvbmciLEk9L14oWypcLT1fXSkoPzpccypcMSl7Mix9XHMqJC8sUD0vXlsqXC0rXVxzKy8sRj0vXlswLTldK1wuXHMrLyxCPS9eXFsoeHwgKVxdKD89XHMpLyxSPS9eIysvLEc9L14oPzpcPXsxLH18LXsxLH0pJC8sXz0vXlteIVxbXF0qX1xcPD5gICInKF0rLyxWPVtdO3JldHVybntzdGFydFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue2Y6byxwcmV2TGluZUhhc0NvbnRlbnQ6ITEsdGhpc0xpbmVIYXNDb250ZW50OiExLGJsb2NrOm8saHRtbFN0YXRlOkNvZGVNaXJyb3Iuc3RhcnRTdGF0ZSh2KSxpbmRlbnRhdGlvbjowLGlubGluZTpjLHRleHQ6dSxsaW5rVGV4dDohMSxsaW5rVGl0bGU6ITEsZW06ITEsc3Ryb25nOiExLGhlYWRlcjowLHRhc2tMaXN0OiExLGxpc3Q6ITEsbGlzdERlcHRoOjAscXVvdGU6MCx0cmFpbGluZ1NwYWNlOjAsdHJhaWxpbmdTcGFjZU5ld0xpbmU6ITF9fSxjb3B5U3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJue2Y6dC5mLHByZXZMaW5lSGFzQ29udGVudDp0LnByZXZMaW5lSGFzQ29udGVudCx0aGlzTGluZUhhc0NvbnRlbnQ6dC50aGlzTGluZUhhc0NvbnRlbnQsYmxvY2s6dC5ibG9jayxodG1sU3RhdGU6Q29kZU1pcnJvci5jb3B5U3RhdGUodix0Lmh0bWxTdGF0ZSksaW5kZW50YXRpb246dC5pbmRlbnRhdGlvbixsb2NhbE1vZGU6dC5sb2NhbE1vZGUsbG9jYWxTdGF0ZTp0LmxvY2FsTW9kZT9Db2RlTWlycm9yLmNvcHlTdGF0ZSh0LmxvY2FsTW9kZSx0LmxvY2FsU3RhdGUpOm51bGwsaW5saW5lOnQuaW5saW5lLHRleHQ6dC50ZXh0LGxpbmtUaXRsZTp0LmxpbmtUaXRsZSxlbTp0LmVtLHN0cm9uZzp0LnN0cm9uZyxoZWFkZXI6dC5oZWFkZXIsdGFza0xpc3Q6dC50YXNrTGlzdCxsaXN0OnQubGlzdCxsaXN0RGVwdGg6dC5saXN0RGVwdGgscXVvdGU6dC5xdW90ZSx0cmFpbGluZ1NwYWNlOnQudHJhaWxpbmdTcGFjZSx0cmFpbGluZ1NwYWNlTmV3TGluZTp0LnRyYWlsaW5nU3BhY2VOZXdMaW5lLG1kX2luc2lkZTp0Lm1kX2luc2lkZX19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYodC5zb2woKSl7aWYodC5tYXRjaCgvXlxzKiQvLCEwKSlyZXR1cm4gZS5wcmV2TGluZUhhc0NvbnRlbnQ9ITEsaShlKTtlLnByZXZMaW5lSGFzQ29udGVudD1lLnRoaXNMaW5lSGFzQ29udGVudCxlLnRoaXNMaW5lSGFzQ29udGVudD0hMCxlLmhlYWRlcj0wLGUudGFza0xpc3Q9ITEsZS5jb2RlPSExLGUudHJhaWxpbmdTcGFjZT0wLGUudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsZS5mPWUuYmxvY2s7dmFyIHI9dC5tYXRjaCgvXlxzKi8sITApWzBdLnJlcGxhY2UoL1x0L2csIiAgICAiKS5sZW5ndGgsbj00Kk1hdGguZmxvb3IoKHItZS5pbmRlbnRhdGlvbikvNCk7bj40JiYobj00KTt2YXIgbz1lLmluZGVudGF0aW9uK247aWYoZS5pbmRlbnRhdGlvbkRpZmY9by1lLmluZGVudGF0aW9uLGUuaW5kZW50YXRpb249byxyPjApcmV0dXJuIG51bGx9cmV0dXJuIGUuZih0LGUpfSxibGFua0xpbmU6aSxnZXRUeXBlOnN9fSwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbWFya2Rvd24iLCJtYXJrZG93biIpLENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiByKHIpe3JldHVybiBlLnRva2VuaXplPXIscih0LGUpfXZhciBpPXQubmV4dCgpO2lmKCI8Ij09aSl7aWYodC5lYXQoIiEiKSlyZXR1cm4gdC5lYXQoIlsiKT90Lm1hdGNoKCJDREFUQVsiKT9yKG8oImF0b20iLCJdXT4iKSk6bnVsbDp0Lm1hdGNoKCItLSIpP3IobygiY29tbWVudCIsIi0tPiIpKTp0Lm1hdGNoKCJET0NUWVBFIiwhMCwhMCk/KHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLHIobCgxKSkpOm51bGw7aWYodC5lYXQoIj8iKSlyZXR1cm4gdC5lYXRXaGlsZSgvW1x3XC5fXC1dLyksZS50b2tlbml6ZT1vKCJtZXRhIiwiPz4iKSwibWV0YSI7dmFyIGE9dC5lYXQoIi8iKTt4PSIiO2Zvcih2YXIgcztzPXQuZWF0KC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKTspeCs9cztyZXR1cm4geD8oYj1hPyJjbG9zZVRhZyI6Im9wZW5UYWciLGUudG9rZW5pemU9biwidGFnIik6InRhZyBlcnJvciJ9aWYoIiYiPT1pKXt2YXIgdTtyZXR1cm4gdT10LmVhdCgiIyIpP3QuZWF0KCJ4Iik/dC5lYXRXaGlsZSgvW2EtZkEtRlxkXS8pJiZ0LmVhdCgiOyIpOnQuZWF0V2hpbGUoL1tcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXHdcLlwtOl0vKSYmdC5lYXQoIjsiKSx1PyJhdG9tIjoiZXJyb3IifXJldHVybiB0LmVhdFdoaWxlKC9bXiY8XS8pLG51bGx9ZnVuY3Rpb24gbih0LGUpe3ZhciBuPXQubmV4dCgpO2lmKCI+Ij09bnx8Ii8iPT1uJiZ0LmVhdCgiPiIpKXJldHVybiBlLnRva2VuaXplPXIsYj0iPiI9PW4/ImVuZFRhZyI6InNlbGZjbG9zZVRhZyIsInRhZyI7aWYoIj0iPT1uKXJldHVybiBiPSJlcXVhbHMiLG51bGw7aWYoIjwiPT1uKXtlLnRva2VuaXplPXI7dmFyIG89ZS50b2tlbml6ZSh0LGUpO3JldHVybiBvP28rIiBlcnJvciI6ImVycm9yIn1yZXR1cm4vW1wnXCJdLy50ZXN0KG4pPyhlLnRva2VuaXplPWkobiksZS5zdHJpbmdTdGFydENvbD10LmNvbHVtbigpLGUudG9rZW5pemUodCxlKSk6KHQuZWF0V2hpbGUoL1teXHNcdTAwYTA9PD5cIlwnXS8pLCJ3b3JkIil9ZnVuY3Rpb24gaSh0KXt2YXIgZT1mdW5jdGlvbihlLHIpe2Zvcig7IWUuZW9sKCk7KWlmKGUubmV4dCgpPT10KXtyLnRva2VuaXplPW47YnJlYWt9cmV0dXJuInN0cmluZyJ9O3JldHVybiBlLmlzSW5BdHRyaWJ1dGU9ITAsZX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7Zm9yKDshbi5lb2woKTspe2lmKG4ubWF0Y2goZSkpe2kudG9rZW5pemU9cjticmVha31uLm5leHQoKX1yZXR1cm4gdH19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk7bnVsbCE9KGk9ZS5uZXh0KCkpOyl7aWYoIjwiPT1pKXJldHVybiBuLnRva2VuaXplPWwodCsxKSxuLnRva2VuaXplKGUsbik7aWYoIj4iPT1pKXtpZigxPT10KXtuLnRva2VuaXplPXI7YnJlYWt9cmV0dXJuIG4udG9rZW5pemU9bCh0LTEpLG4udG9rZW5pemUoZSxuKX19cmV0dXJuIm1ldGEifX1mdW5jdGlvbiBhKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMTt0Pj0wO3QtLSlDLmNjLnB1c2goYXJndW1lbnRzW3RdKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGEuYXBwbHkobnVsbCxhcmd1bWVudHMpLCEwfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1ULmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHQpfHxDLmNvbnRleHQmJkMuY29udGV4dC5ub0luZGVudDtDLmNvbnRleHQ9e3ByZXY6Qy5jb250ZXh0LHRhZ05hbWU6dCxpbmRlbnQ6Qy5pbmRlbnRlZCxzdGFydE9mTGluZTplLG5vSW5kZW50OnJ9fWZ1bmN0aW9uIGMoKXtDLmNvbnRleHQmJihDLmNvbnRleHQ9Qy5jb250ZXh0LnByZXYpfWZ1bmN0aW9uIGYodCl7aWYoIm9wZW5UYWciPT10KXJldHVybiBDLnRhZ05hbWU9eCxDLnRhZ1N0YXJ0PWsuY29sdW1uKCkscyhtLGgoQy5zdGFydE9mTGluZSkpO2lmKCJjbG9zZVRhZyI9PXQpe3ZhciBlPSExO3JldHVybiBDLmNvbnRleHQ/Qy5jb250ZXh0LnRhZ05hbWUhPXgmJihULmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoQy5jb250ZXh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkmJmMoKSxlPSFDLmNvbnRleHR8fEMuY29udGV4dC50YWdOYW1lIT14KTplPSEwLGUmJih3PSJlcnJvciIpLHMoZChlKSl9cmV0dXJuIHMoKX1mdW5jdGlvbiBoKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1DLnRhZ05hbWU7cmV0dXJuIEMudGFnTmFtZT1DLnRhZ1N0YXJ0PW51bGwsInNlbGZjbG9zZVRhZyI9PWV8fCJlbmRUYWciPT1lJiZULmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShyLnRvTG93ZXJDYXNlKCkpPyhwKHIudG9Mb3dlckNhc2UoKSkscygpKToiZW5kVGFnIj09ZT8ocChyLnRvTG93ZXJDYXNlKCkpLHUocix0KSxzKCkpOnMoKX19ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJih3PSJlcnJvciIpLCJlbmRUYWciPT1lPyhjKCkscygpKToodz0iZXJyb3IiLHMoYXJndW1lbnRzLmNhbGxlZSkpfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZTs7KXtpZighQy5jb250ZXh0KXJldHVybjtpZihlPUMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIVQuY29udGV4dEdyYWJiZXJzLmhhc093blByb3BlcnR5KGUpfHwhVC5jb250ZXh0R3JhYmJlcnNbZV0uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2MoKX19ZnVuY3Rpb24gbSh0KXtyZXR1cm4id29yZCI9PXQ/KHc9ImF0dHJpYnV0ZSIscyhnLG0pKToiZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOih3PSJlcnJvciIscyhtKSl9ZnVuY3Rpb24gZyh0KXtpZigiZXF1YWxzIj09dClyZXR1cm4gcyh2LG0pO2lmKFQuYWxsb3dNaXNzaW5nKXtpZigid29yZCI9PXQpcmV0dXJuIHc9ImF0dHJpYnV0ZSIscyhnLG0pfWVsc2Ugdz0iZXJyb3IiO3JldHVybiJlbmRUYWciPT10fHwic2VsZmNsb3NlVGFnIj09dD9hKCk6cygpfWZ1bmN0aW9uIHYodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KToid29yZCI9PXQmJlQuYWxsb3dVbnF1b3RlZD8odz0ic3RyaW5nIixzKCkpOih3PSJlcnJvciIsImVuZFRhZyI9PXR8fCJzZWxmQ2xvc2VUYWciPT10P2EoKTpzKCkpfWZ1bmN0aW9uIHkodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KTphKCl9dmFyIHgsYixDLGssdyxMPXQuaW5kZW50VW5pdCxTPWUubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yfHwxLE09ZS5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnfHwhMCxUPWUuaHRtbE1vZGU/e2F1dG9TZWxmQ2xvc2Vyczp7YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxjb21tYW5kOiEwLGVtYmVkOiEwLGZyYW1lOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LGltcGxpY2l0bHlDbG9zZWQ6e2RkOiEwLGxpOiEwLG9wdGdyb3VwOiEwLG9wdGlvbjohMCxwOiEwLHJwOiEwLHJ0OiEwLHRib2R5OiEwLHRkOiEwLHRmb290OiEwLHRoOiEwLHRyOiEwfSxjb250ZXh0R3JhYmJlcnM6e2RkOntkZDohMCxkdDohMH0sZHQ6e2RkOiEwLGR0OiEwfSxsaTp7bGk6ITB9LG9wdGlvbjp7b3B0aW9uOiEwLG9wdGdyb3VwOiEwfSxvcHRncm91cDp7b3B0Z3JvdXA6ITB9LHA6e2FkZHJlc3M6ITAsYXJ0aWNsZTohMCxhc2lkZTohMCxibG9ja3F1b3RlOiEwLGRpcjohMCxkaXY6ITAsZGw6ITAsZmllbGRzZXQ6ITAsZm9vdGVyOiEwLGZvcm06ITAsaDE6ITAsaDI6ITAsaDM6ITAsaDQ6ITAsaDU6ITAsaDY6ITAsaGVhZGVyOiEwLGhncm91cDohMCxocjohMCxtZW51OiEwLG5hdjohMCxvbDohMCxwOiEwLHByZTohMCxzZWN0aW9uOiEwLHRhYmxlOiEwLHVsOiEwfSxycDp7cnA6ITAscnQ6ITB9LHJ0OntycDohMCxydDohMH0sdGJvZHk6e3Rib2R5OiEwLHRmb290OiEwfSx0ZDp7dGQ6ITAsdGg6ITB9LHRmb290Ont0Ym9keTohMH0sdGg6e3RkOiEwLHRoOiEwfSx0aGVhZDp7dGJvZHk6ITAsdGZvb3Q6ITB9LHRyOnt0cjohMH19LGRvTm90SW5kZW50OntwcmU6ITB9LGFsbG93VW5xdW90ZWQ6ITAsYWxsb3dNaXNzaW5nOiEwfTp7YXV0b1NlbGZDbG9zZXJzOnt9LGltcGxpY2l0bHlDbG9zZWQ6e30sY29udGV4dEdyYWJiZXJzOnt9LGRvTm90SW5kZW50Ont9LGFsbG93VW5xdW90ZWQ6ITEsYWxsb3dNaXNzaW5nOiExfSxBPWUuYWxpZ25DREFUQTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybnt0b2tlbml6ZTpyLGNjOltdLGluZGVudGVkOjAsc3RhcnRPZkxpbmU6ITAsdGFnTmFtZTpudWxsLHRhZ1N0YXJ0Om51bGwsY29udGV4dDpudWxsfX0sdG9rZW46ZnVuY3Rpb24odCxlKXtpZighZS50YWdOYW1lJiZ0LnNvbCgpJiYoZS5zdGFydE9mTGluZT0hMCxlLmluZGVudGVkPXQuaW5kZW50YXRpb24oKSksdC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3c9Yj14PW51bGw7dmFyIHI9ZS50b2tlbml6ZSh0LGUpO2lmKGUudHlwZT1iLChyfHxiKSYmImNvbW1lbnQiIT1yKWZvcihDPWUsaz10Ozspe3ZhciBuPWUuY2MucG9wKCl8fGY7aWYobihifHxyKSlicmVha31yZXR1cm4gZS5zdGFydE9mTGluZT0hMSx3JiYocj0iZXJyb3IiPT13P3IrIiBlcnJvciI6dykscn0saW5kZW50OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10LmNvbnRleHQ7aWYodC50b2tlbml6ZS5pc0luQXR0cmlidXRlKXJldHVybiB0LnN0cmluZ1N0YXJ0Q29sKzE7aWYodC50b2tlbml6ZSE9biYmdC50b2tlbml6ZSE9cnx8byYmby5ub0luZGVudClyZXR1cm4gaT9pLm1hdGNoKC9eKFxzKikvKVswXS5sZW5ndGg6MDtpZih0LnRhZ05hbWUpcmV0dXJuIE0/dC50YWdTdGFydCt0LnRhZ05hbWUubGVuZ3RoKzI6dC50YWdTdGFydCtMKlM7aWYoQSYmLzwhXFtDREFUQVxbLy50ZXN0KGUpKXJldHVybiAwO2ZvcihvJiYvXjxcLy8udGVzdChlKSYmKG89by5wcmV2KTtvJiYhby5zdGFydE9mTGluZTspbz1vLnByZXY7cmV0dXJuIG8/by5pbmRlbnQrTDowfSxlbGVjdHJpY0NoYXJzOiIvIixibG9ja0NvbW1lbnRTdGFydDoiPCEtLSIsYmxvY2tDb21tZW50RW5kOiItLT4iLGNvbmZpZ3VyYXRpb246ZS5odG1sTW9kZT8iaHRtbCI6InhtbCIsaGVscGVyVHlwZTplLmh0bWxNb2RlPyJodG1sIjoieG1sIn19KSxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveG1sIiwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCJ4bWwiKSxDb2RlTWlycm9yLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIil8fENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIix7bmFtZToieG1sIixodG1sTW9kZTohMH0pO1BLBwiT1g9diDIAAIgyAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABwAAABzdGF0aWNcbGliXGNvZGVtaXJyb3IubWluLmpzd2luZG93LkNvZGVNaXJyb3I9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChyLG4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChyLG4pO3RoaXMub3B0aW9ucz1uPW58fHt9O2Zvcih2YXIgaSBpbiBhbykhbi5oYXNPd25Qcm9wZXJ0eShpKSYmYW8uaGFzT3duUHJvcGVydHkoaSkmJihuW2ldPWFvW2ldKTtoKG4pO3ZhciBvPSJzdHJpbmciPT10eXBlb2Ygbi52YWx1ZT8wOm4udmFsdWUuZmlyc3QsbD10aGlzLmRpc3BsYXk9ZShyLG8pO2wud3JhcHBlci5Db2RlTWlycm9yPXRoaXMsdSh0aGlzKSxuLmF1dG9mb2N1cyYmIVZpJiZwZSh0aGlzKSx0aGlzLnN0YXRlPXtrZXlNYXBzOltdLG92ZXJsYXlzOltdLG1vZGVHZW46MCxvdmVyd3JpdGU6ITEsZm9jdXNlZDohMSxzdXBwcmVzc0VkaXRzOiExLHBhc3RlSW5jb21pbmc6ITEsZHJhZ2dpbmdUZXh0OiExLGhpZ2hsaWdodDpuZXcgJG59LHModGhpcyksbi5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIik7dmFyIGE9bi52YWx1ZTsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyB3byhuLnZhbHVlLG4ubW9kZSkpLGxlKHRoaXMscG4pKHRoaXMsYSksQWkmJnNldFRpbWVvdXQoaWkoZGUsdGhpcywhMCksMjApLG1lKHRoaXMpO3ZhciBjO3RyeXtjPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXR9Y2F0Y2goZil7fWN8fG4uYXV0b2ZvY3VzJiYhVmk/c2V0VGltZW91dChpaShFZSx0aGlzKSwyMCk6emUodGhpcyksbGUodGhpcyxmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzbylzby5wcm9wZXJ0eUlzRW51bWVyYWJsZSh0KSYmc29bdF0odGhpcyxuW3RdLHVvKTtmb3IodmFyIGU9MDtlPHBvLmxlbmd0aDsrK2UpcG9bZV0odGhpcyl9KSgpfWZ1bmN0aW9uIGUodCxlKXt2YXIgcj17fSxuPXIuaW5wdXQ9c2koInRleHRhcmVhIixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmU7IGZvbnQtc2l6ZTogNHB4OyIpO3JldHVybiBXaT9uLnN0eWxlLndpZHRoPSIxMDAwcHgiOm4uc2V0QXR0cmlidXRlKCJ3cmFwIiwib2ZmIiksR2kmJihuLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkIGJsYWNrIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0Iiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCJmYWxzZSIpLHIuaW5wdXREaXY9c2koImRpdiIsW25dLG51bGwsIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iiksci5zY3JvbGxiYXJIPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsImhlaWdodDogMXB4IildLCJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKSxyLnNjcm9sbGJhclY9c2koImRpdiIsW3NpKCJkaXYiLG51bGwsbnVsbCwid2lkdGg6IDFweCIpXSwiQ29kZU1pcnJvci12c2Nyb2xsYmFyIiksci5zY3JvbGxiYXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIiksci5ndXR0ZXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIiksci5saW5lRGl2PXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY29kZSIpLHIuc2VsZWN0aW9uRGl2PXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxIiksci5jdXJzb3I9c2koImRpdiIsIsKgIiwiQ29kZU1pcnJvci1jdXJzb3IiKSxyLm90aGVyQ3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIiksci5tZWFzdXJlPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItbWVhc3VyZSIpLHIubGluZVNwYWNlPXNpKCJkaXYiLFtyLm1lYXN1cmUsci5zZWxlY3Rpb25EaXYsci5saW5lRGl2LHIuY3Vyc29yLHIub3RoZXJDdXJzb3JdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpLHIubW92ZXI9c2koImRpdiIsW3NpKCJkaXYiLFtyLmxpbmVTcGFjZV0sIkNvZGVNaXJyb3ItbGluZXMiKV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIiksci5zaXplcj1zaSgiZGl2Iixbci5tb3Zlcl0sIkNvZGVNaXJyb3Itc2l6ZXIiKSxyLmhlaWdodEZvcmNlcj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAiK1RvKyJweDsgd2lkdGg6IDFweDsiKSxyLmd1dHRlcnM9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXJzIiksci5saW5lR3V0dGVyPW51bGwsci5zY3JvbGxlcj1zaSgiZGl2Iixbci5zaXplcixyLmhlaWdodEZvcmNlcixyLmd1dHRlcnNdLCJDb2RlTWlycm9yLXNjcm9sbCIpLHIuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIi0xIiksci53cmFwcGVyPXNpKCJkaXYiLFtyLmlucHV0RGl2LHIuc2Nyb2xsYmFySCxyLnNjcm9sbGJhclYsci5zY3JvbGxiYXJGaWxsZXIsci5ndXR0ZXJGaWxsZXIsci5zY3JvbGxlcl0sIkNvZGVNaXJyb3IiKSxIaSYmKHIuZ3V0dGVycy5zdHlsZS56SW5kZXg9LTEsci5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQ9MCksdC5hcHBlbmRDaGlsZD90LmFwcGVuZENoaWxkKHIud3JhcHBlcik6dChyLndyYXBwZXIpLEdpJiYobi5zdHlsZS53aWR0aD0iMHB4IiksV2l8fChyLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCksRmk/KHIuaW5wdXREaXYuc3R5bGUuaGVpZ2h0PSIxcHgiLHIuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIik6SGkmJihyLnNjcm9sbGJhckguc3R5bGUubWluV2lkdGg9ci5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPSIxOHB4Iiksci52aWV3T2Zmc2V0PXIubGFzdFNpemVDPTAsci5zaG93aW5nRnJvbT1yLnNob3dpbmdUbz1lLHIubGluZU51bVdpZHRoPXIubGluZU51bUlubmVyV2lkdGg9ci5saW5lTnVtQ2hhcnM9bnVsbCxyLnByZXZJbnB1dD0iIixyLmFsaWduV2lkZ2V0cz0hMSxyLnBvbGxpbmdGYXN0PSExLHIucG9sbD1uZXcgJG4sci5jYWNoZWRDaGFyV2lkdGg9ci5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsci5tZWFzdXJlTGluZUNhY2hlPVtdLHIubWVhc3VyZUxpbmVDYWNoZVBvcz0wLHIuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxyLm1heExpbmU9bnVsbCxyLm1heExpbmVMZW5ndGg9MCxyLm1heExpbmVDaGFuZ2VkPSExLHIud2hlZWxEWD1yLndoZWVsRFk9ci53aGVlbFN0YXJ0WD1yLndoZWVsU3RhcnRZPW51bGwscn1mdW5jdGlvbiByKGUpe2UuZG9jLm1vZGU9dC5nZXRNb2RlKGUub3B0aW9ucyxlLmRvYy5tb2RlT3B0aW9uKSxlLmRvYy5pdGVyKGZ1bmN0aW9uKHQpe3Quc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpfSksZS5kb2MuZnJvbnRpZXI9ZS5kb2MuZmlyc3QsVyhlLDEwMCksZS5zdGF0ZS5tb2RlR2VuKyssZS5jdXJPcCYmdWUoZSl9ZnVuY3Rpb24gbih0KXt0Lm9wdGlvbnMubGluZVdyYXBwaW5nPyh0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIix0LmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGg9IiIpOih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCIiKSxmKHQpKSxvKHQpLHVlKHQpLF8odCksc2V0VGltZW91dChmdW5jdGlvbigpe2QodCl9LDEwMCl9ZnVuY3Rpb24gaSh0KXt2YXIgZT1yZSh0LmRpc3BsYXkpLHI9dC5vcHRpb25zLmxpbmVXcmFwcGluZyxuPXImJk1hdGgubWF4KDUsdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoL25lKHQuZGlzcGxheSktMyk7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBWcih0LmRvYyxpKT8wOnI/KE1hdGguY2VpbChpLnRleHQubGVuZ3RoL24pfHwxKSplOmV9fWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5kb2Mscj1pKHQpO2UuaXRlcihmdW5jdGlvbih0KXt2YXIgZT1yKHQpO2UhPXQuaGVpZ2h0JiZ5bih0LGUpfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT12b1t0Lm9wdGlvbnMua2V5TWFwXSxyPWUuc3R5bGU7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1rZXltYXAtXFMrL2csIiIpKyhyPyIgY20ta2V5bWFwLSIrcjoiIiksdC5zdGF0ZS5kaXNhYmxlSW5wdXQ9ZS5kaXNhYmxlSW5wdXR9ZnVuY3Rpb24gcyh0KXt0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLXMtXFMrL2csIiIpK3Qub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywiIGNtLXMtIiksXyh0KX1mdW5jdGlvbiBhKHQpe3UodCksdWUodCksc2V0VGltZW91dChmdW5jdGlvbigpe2codCl9LDIwKX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQuZGlzcGxheS5ndXR0ZXJzLHI9dC5vcHRpb25zLmd1dHRlcnM7YWkoZSk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl0sbz1lLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyICIraSkpOyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIj09aSYmKHQuZGlzcGxheS5saW5lR3V0dGVyPW8sby5zdHlsZS53aWR0aD0odC5kaXNwbGF5LmxpbmVOdW1XaWR0aHx8MSkrInB4Iil9ZS5zdHlsZS5kaXNwbGF5PW4/IiI6Im5vbmUifWZ1bmN0aW9uIGModCxlKXtpZigwPT1lLmhlaWdodClyZXR1cm4gMDtmb3IodmFyIHIsbj1lLnRleHQubGVuZ3RoLGk9ZTtyPVJyKGkpOyl7dmFyIG89ci5maW5kKCk7aT1nbih0LG8uZnJvbS5saW5lKSxuKz1vLmZyb20uY2gtby50by5jaH1mb3IoaT1lO3I9QnIoaSk7KXt2YXIgbz1yLmZpbmQoKTtuLT1pLnRleHQubGVuZ3RoLW8uZnJvbS5jaCxpPWduKHQsby50by5saW5lKSxuKz1pLnRleHQubGVuZ3RoLW8udG8uY2h9cmV0dXJuIG59ZnVuY3Rpb24gZih0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYztlLm1heExpbmU9Z24ocixyLmZpcnN0KSxlLm1heExpbmVMZW5ndGg9YyhyLGUubWF4TGluZSksZS5tYXhMaW5lQ2hhbmdlZD0hMCxyLml0ZXIoZnVuY3Rpb24odCl7dmFyIG49YyhyLHQpO24+ZS5tYXhMaW5lTGVuZ3RoJiYoZS5tYXhMaW5lTGVuZ3RoPW4sZS5tYXhMaW5lPXQpfSl9ZnVuY3Rpb24gaCh0KXt2YXIgZT10aSh0Lmd1dHRlcnMsIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiKTstMT09ZSYmdC5saW5lTnVtYmVycz90Lmd1dHRlcnM9dC5ndXR0ZXJzLmNvbmNhdChbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSk6ZT4tMSYmIXQubGluZU51bWJlcnMmJih0Lmd1dHRlcnM9dC5ndXR0ZXJzLnNsaWNlKDApLHQuZ3V0dGVycy5zcGxpY2UoZSwxKSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYy5oZWlnaHQsbj1yK0YoZSk7ZS5zaXplci5zdHlsZS5taW5IZWlnaHQ9ZS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wPW4rInB4IixlLmd1dHRlcnMuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KG4sZS5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8pKyJweCI7dmFyIGk9TWF0aC5tYXgobixlLnNjcm9sbGVyLnNjcm9sbEhlaWdodCksbz1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoPmUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrMSxsPWk+ZS5zY3JvbGxlci5jbGllbnRIZWlnaHQrMTtsPyhlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFyVi5zdHlsZS5ib3R0b209bz9kaShlLm1lYXN1cmUpKyJweCI6IjAiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1pLWUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0K2Uuc2Nyb2xsYmFyVi5jbGllbnRIZWlnaHQrInB4Iik6KGUuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5PSIiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD0iMCIpLG8/KGUuc2Nyb2xsYmFySC5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJILnN0eWxlLnJpZ2h0PWw/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoLWUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrZS5zY3JvbGxiYXJILmNsaWVudFdpZHRoKyJweCIpOihlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iMCIpLG8mJmw/KGUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQ9ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGg9ZGkoZS5tZWFzdXJlKSsicHgiKTplLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSIiLG8mJnQub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciYmdC5vcHRpb25zLmZpeGVkR3V0dGVyPyhlLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWRpKGUubWVhc3VyZSkrInB4IixlLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aD1lLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4Iik6ZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixQaSYmMD09PWRpKGUubWVhc3VyZSkmJihlLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGg9ZS5zY3JvbGxiYXJILnN0eWxlLm1pbkhlaWdodD1SaT8iMThweCI6IjEycHgiLGUuc2Nyb2xsYmFyVi5zdHlsZS5wb2ludGVyRXZlbnRzPWUuc2Nyb2xsYmFySC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIil9ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49dC5zY3JvbGxlci5zY3JvbGxUb3AsaT10LndyYXBwZXIuY2xpZW50SGVpZ2h0OyJudW1iZXIiPT10eXBlb2Ygcj9uPXI6ciYmKG49ci50b3AsaT1yLmJvdHRvbS1yLnRvcCksbj1NYXRoLmZsb29yKG4tSSh0KSk7dmFyIG89TWF0aC5jZWlsKG4raSk7cmV0dXJue2Zyb206eG4oZSxuKSx0bzp4bihlLG8pfX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuZGlzcGxheTtpZihlLmFsaWduV2lkZ2V0c3x8ZS5ndXR0ZXJzLmZpcnN0Q2hpbGQmJnQub3B0aW9ucy5maXhlZEd1dHRlcil7Zm9yKHZhciByPXkoZSktZS5zY3JvbGxlci5zY3JvbGxMZWZ0K3QuZG9jLnNjcm9sbExlZnQsbj1lLmd1dHRlcnMub2Zmc2V0V2lkdGgsaT1yKyJweCIsbz1lLmxpbmVEaXYuZmlyc3RDaGlsZDtvO289by5uZXh0U2libGluZylpZihvLmFsaWduYWJsZSlmb3IodmFyIGw9MCxzPW8uYWxpZ25hYmxlO2w8cy5sZW5ndGg7KytsKXNbbF0uc3R5bGUubGVmdD1pO3Qub3B0aW9ucy5maXhlZEd1dHRlciYmKGUuZ3V0dGVycy5zdHlsZS5sZWZ0PXIrbisicHgiKX19ZnVuY3Rpb24gbSh0KXtpZighdC5vcHRpb25zLmxpbmVOdW1iZXJzKXJldHVybiExO3ZhciBlPXQuZG9jLHI9dih0Lm9wdGlvbnMsZS5maXJzdCtlLnNpemUtMSksbj10LmRpc3BsYXk7aWYoci5sZW5ndGghPW4ubGluZU51bUNoYXJzKXt2YXIgaT1uLm1lYXN1cmUuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3NpKCJkaXYiLHIpXSwiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIpKSxvPWkuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCxsPWkub2Zmc2V0V2lkdGgtbztyZXR1cm4gbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPSIiLG4ubGluZU51bUlubmVyV2lkdGg9TWF0aC5tYXgobyxuLmxpbmVHdXR0ZXIub2Zmc2V0V2lkdGgtbCksbi5saW5lTnVtV2lkdGg9bi5saW5lTnVtSW5uZXJXaWR0aCtsLG4ubGluZU51bUNoYXJzPW4ubGluZU51bUlubmVyV2lkdGg/ci5sZW5ndGg6LTEsbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPW4ubGluZU51bVdpZHRoKyJweCIsITB9cmV0dXJuITF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiBTdHJpbmcodC5saW5lTnVtYmVyRm9ybWF0dGVyKGUrdC5maXJzdExpbmVOdW1iZXIpKX1mdW5jdGlvbiB5KHQpe3JldHVybiBmaSh0LnNjcm9sbGVyKS5sZWZ0LWZpKHQuc2l6ZXIpLmxlZnR9ZnVuY3Rpb24gYih0LGUscixuKXtmb3IodmFyIGksbz10LmRpc3BsYXkuc2hvd2luZ0Zyb20sbD10LmRpc3BsYXkuc2hvd2luZ1RvLHM9cCh0LmRpc3BsYXksdC5kb2MsciksYT0hMDs7YT0hMSl7dmFyIHU9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoO2lmKCF4KHQsZSxzLG4pKWJyZWFrO2lmKGk9ITAsZT1bXSxBKHQpLGQodCksYSYmdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmdSE9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKW49ITA7ZWxzZSBpZihuPSExLHImJihyPU1hdGgubWluKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwibnVtYmVyIj09dHlwZW9mIHI/cjpyLnRvcCkpLHM9cCh0LmRpc3BsYXksdC5kb2Mscikscy5mcm9tPj10LmRpc3BsYXkuc2hvd2luZ0Zyb20mJnMudG88PXQuZGlzcGxheS5zaG93aW5nVG8pYnJlYWt9cmV0dXJuIGkmJihVbih0LCJ1cGRhdGUiLHQpLCh0LmRpc3BsYXkuc2hvd2luZ0Zyb20hPW98fHQuZGlzcGxheS5zaG93aW5nVG8hPWwpJiZVbih0LCJ2aWV3cG9ydENoYW5nZSIsdCx0LmRpc3BsYXkuc2hvd2luZ0Zyb20sdC5kaXNwbGF5LnNob3dpbmdUbykpLGl9ZnVuY3Rpb24geCh0LGUscixuKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYztpZighaS53cmFwcGVyLmNsaWVudFdpZHRoKXJldHVybiBpLnNob3dpbmdGcm9tPWkuc2hvd2luZ1RvPW8uZmlyc3QsaS52aWV3T2Zmc2V0PTAsdm9pZCAwO2lmKCEoIW4mJjA9PWUubGVuZ3RoJiZyLmZyb20+aS5zaG93aW5nRnJvbSYmci50bzxpLnNob3dpbmdUbykpe20odCkmJihlPVt7ZnJvbTpvLmZpcnN0LHRvOm8uZmlyc3Qrby5zaXplfV0pO3ZhciBsPWkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdD1pLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4IjtpLnNjcm9sbGJhckguc3R5bGUubGVmdD10Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bDoiMCI7dmFyIHM9MS8wO2lmKHQub3B0aW9ucy5saW5lTnVtYmVycylmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSllW2FdLmRpZmYmJmVbYV0uZnJvbTxzJiYocz1lW2FdLmZyb20pO3ZhciB1PW8uZmlyc3Qrby5zaXplLGM9TWF0aC5tYXgoci5mcm9tLXQub3B0aW9ucy52aWV3cG9ydE1hcmdpbixvLmZpcnN0KSxmPU1hdGgubWluKHUsci50byt0Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4pO2lmKGkuc2hvd2luZ0Zyb208YyYmYy1pLnNob3dpbmdGcm9tPDIwJiYoYz1NYXRoLm1heChvLmZpcnN0LGkuc2hvd2luZ0Zyb20pKSxpLnNob3dpbmdUbz5mJiZpLnNob3dpbmdUby1mPDIwJiYoZj1NYXRoLm1pbih1LGkuc2hvd2luZ1RvKSksUWkpZm9yKGM9Ym4oR3IobyxnbihvLGMpKSk7dT5mJiZWcihvLGduKG8sZikpOykrK2Y7dmFyIGg9W3tmcm9tOk1hdGgubWF4KGkuc2hvd2luZ0Zyb20sby5maXJzdCksdG86TWF0aC5taW4oaS5zaG93aW5nVG8sdSl9XTtpZihoPWhbMF0uZnJvbT49aFswXS50bz9bXTpMKGgsZSksUWkpZm9yKHZhciBhPTA7YTxoLmxlbmd0aDsrK2EpZm9yKHZhciBkLHA9aFthXTtkPUJyKGduKG8scC50by0xKSk7KXt2YXIgZz1kLmZpbmQoKS5mcm9tLmxpbmU7aWYoIShnPnAuZnJvbSkpe2guc3BsaWNlKGEtLSwxKTticmVha31wLnRvPWd9Zm9yKHZhciB2PTAsYT0wO2E8aC5sZW5ndGg7KythKXt2YXIgcD1oW2FdO3AuZnJvbTxjJiYocC5mcm9tPWMpLHAudG8+ZiYmKHAudG89ZikscC5mcm9tPj1wLnRvP2guc3BsaWNlKGEtLSwxKTp2Kz1wLnRvLXAuZnJvbX1pZighbiYmdj09Zi1jJiZjPT1pLnNob3dpbmdGcm9tJiZmPT1pLnNob3dpbmdUbylyZXR1cm4gdyh0KSx2b2lkIDA7aC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZnJvbS1lLmZyb219KTt0cnl7dmFyIHk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudH1jYXRjaChiKXt9LjcqKGYtYyk+diYmKGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSJub25lIiksUyh0LGMsZixoLHMpLGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSIiLHkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPXkmJnkub2Zmc2V0SGVpZ2h0JiZ5LmZvY3VzKCk7dmFyIHg9YyE9aS5zaG93aW5nRnJvbXx8ZiE9aS5zaG93aW5nVG98fGkubGFzdFNpemVDIT1pLndyYXBwZXIuY2xpZW50SGVpZ2h0O3JldHVybiB4JiYoaS5sYXN0U2l6ZUM9aS53cmFwcGVyLmNsaWVudEhlaWdodCxXKHQsNDAwKSksaS5zaG93aW5nRnJvbT1jLGkuc2hvd2luZ1RvPWYsQyh0KSx3KHQpLCEwfX1mdW5jdGlvbiBDKHQpe2Zvcih2YXIgZSxyPXQuZGlzcGxheSxuPXIubGluZURpdi5vZmZzZXRUb3AsaT1yLmxpbmVEaXYuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylpZihpLmxpbmVPYmope2lmKEhpKXt2YXIgbz1pLm9mZnNldFRvcCtpLm9mZnNldEhlaWdodDtlPW8tbixuPW99ZWxzZXt2YXIgbD1maShpKTtlPWwuYm90dG9tLWwudG9wfXZhciBzPWkubGluZU9iai5oZWlnaHQtZTtpZigyPmUmJihlPXJlKHIpKSxzPi4wMDF8fC0uMDAxPnMpe3luKGkubGluZU9iaixlKTt2YXIgYT1pLmxpbmVPYmoud2lkZ2V0cztpZihhKWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7Kyt1KWFbdV0uaGVpZ2h0PWFbdV0ubm9kZS5vZmZzZXRIZWlnaHR9fX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQuZGlzcGxheS52aWV3T2Zmc2V0PUNuKHQsZ24odC5kb2MsdC5kaXNwbGF5LnNob3dpbmdGcm9tKSk7dC5kaXNwbGF5Lm1vdmVyLnN0eWxlLnRvcD1lKyJweCJ9ZnVuY3Rpb24gTCh0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGh8fDA7bj5yOysrcil7Zm9yKHZhciBpPWVbcl0sbz1bXSxsPWkuZGlmZnx8MCxzPTAsYT10Lmxlbmd0aDthPnM7KytzKXt2YXIgdT10W3NdO2kudG88PXUuZnJvbSYmaS5kaWZmP28ucHVzaCh7ZnJvbTp1LmZyb20rbCx0bzp1LnRvK2x9KTppLnRvPD11LmZyb218fGkuZnJvbT49dS50bz9vLnB1c2godSk6KGkuZnJvbT51LmZyb20mJm8ucHVzaCh7ZnJvbTp1LmZyb20sdG86aS5mcm9tfSksaS50bzx1LnRvJiZvLnB1c2goe2Zyb206aS50bytsLHRvOnUudG8rbH0pKX10PW99cmV0dXJuIHR9ZnVuY3Rpb24gayh0KXtmb3IodmFyIGU9dC5kaXNwbGF5LHI9e30sbj17fSxpPWUuZ3V0dGVycy5maXJzdENoaWxkLG89MDtpO2k9aS5uZXh0U2libGluZywrK28pclt0Lm9wdGlvbnMuZ3V0dGVyc1tvXV09aS5vZmZzZXRMZWZ0LG5bdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0V2lkdGg7cmV0dXJue2ZpeGVkUG9zOnkoZSksZ3V0dGVyVG90YWxXaWR0aDplLmd1dHRlcnMub2Zmc2V0V2lkdGgsZ3V0dGVyTGVmdDpyLGd1dHRlcldpZHRoOm4sd3JhcHBlcldpZHRoOmUud3JhcHBlci5jbGllbnRXaWR0aH19ZnVuY3Rpb24gUyh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSl7dmFyIHI9ZS5uZXh0U2libGluZztyZXR1cm4gV2kmJktpJiZ0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PT1lPyhlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGUubGluZU9iaj1udWxsKTplLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSkscn12YXIgbD1rKHQpLHM9dC5kaXNwbGF5LGE9dC5vcHRpb25zLmxpbmVOdW1iZXJzO24ubGVuZ3RofHxXaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldHx8YWkocy5saW5lRGl2KTt2YXIgdT1zLmxpbmVEaXYsYz11LmZpcnN0Q2hpbGQsZj1uLnNoaWZ0KCksaD1lO2Zvcih0LmRvYy5pdGVyKGUscixmdW5jdGlvbihlKXtpZihmJiZmLnRvPT1oJiYoZj1uLnNoaWZ0KCkpLFZyKHQuZG9jLGUpKXtpZigwIT1lLmhlaWdodCYmeW4oZSwwKSxlLndpZGdldHMmJmMmJmMucHJldmlvdXNTaWJsaW5nKWZvcih2YXIgcj0wO3I8ZS53aWRnZXRzLmxlbmd0aDsrK3Ipe3ZhciBzPWUud2lkZ2V0c1tyXTtpZihzLnNob3dJZkhpZGRlbil7dmFyIGQ9Yy5wcmV2aW91c1NpYmxpbmc7aWYoL3ByZS9pLnRlc3QoZC5ub2RlTmFtZSkpe3ZhciBwPXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIik7ZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwLGQpLHAuYXBwZW5kQ2hpbGQoZCksZD1wfXZhciBnPWQuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3Mubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTtzLmhhbmRsZU1vdXNlRXZlbnRzfHwoZy5pZ25vcmVFdmVudHM9ITApLFQocyxnLGQsbCl9fX1lbHNlIGlmKGYmJmYuZnJvbTw9aCYmZi50bz5oKXtmb3IoO2MubGluZU9iaiE9ZTspYz1vKGMpO2EmJmg+PWkmJmMubGluZU51bWJlciYmY2koYy5saW5lTnVtYmVyLHYodC5vcHRpb25zLGgpKSxjPWMubmV4dFNpYmxpbmd9ZWxzZXtpZihlLndpZGdldHMpZm9yKHZhciBtLHk9MCxiPWM7YiYmMjA+eTsrK3ksYj1iLm5leHRTaWJsaW5nKWlmKGIubGluZU9iaj09ZSYmL2Rpdi9pLnRlc3QoYi5ub2RlTmFtZSkpe209YjticmVha312YXIgeD1NKHQsZSxoLGwsbSk7aWYoeCE9bSl1Lmluc2VydEJlZm9yZSh4LGMpO2Vsc2V7Zm9yKDtjIT1tOyljPW8oYyk7Yz1jLm5leHRTaWJsaW5nfXgubGluZU9iaj1lfSsraH0pO2M7KWM9byhjKX1mdW5jdGlvbiBNKHQsZSxyLG4saSl7dmFyIG8sbD1ybih0LGUpLHM9bC5wcmUsYT1lLmd1dHRlck1hcmtlcnMsdT10LmRpc3BsYXksYz1sLmJnQ2xhc3M/bC5iZ0NsYXNzKyIgIisoZS5iZ0NsYXNzfHwiIik6ZS5iZ0NsYXNzO2lmKCEodC5vcHRpb25zLmxpbmVOdW1iZXJzfHxhfHxjfHxlLndyYXBDbGFzc3x8ZS53aWRnZXRzKSlyZXR1cm4gcztpZihpKXtpLmFsaWduYWJsZT1udWxsO2Zvcih2YXIgZixoPSEwLGQ9MCxwPW51bGwsZz1pLmZpcnN0Q2hpbGQ7ZztnPWYpaWYoZj1nLm5leHRTaWJsaW5nLC9cYkNvZGVNaXJyb3ItbGluZXdpZGdldFxiLy50ZXN0KGcuY2xhc3NOYW1lKSl7Zm9yKHZhciBtPTA7bTxlLndpZGdldHMubGVuZ3RoOysrbSl7dmFyIHk9ZS53aWRnZXRzW21dO2lmKHkubm9kZT09Zy5maXJzdENoaWxkKXt5LmFib3ZlfHxwfHwocD1nKSxUKHksZyxpLG4pLCsrZDticmVha319aWYobT09ZS53aWRnZXRzLmxlbmd0aCl7aD0hMTticmVha319ZWxzZSBpLnJlbW92ZUNoaWxkKGcpO2kuaW5zZXJ0QmVmb3JlKHMscCksaCYmZD09ZS53aWRnZXRzLmxlbmd0aCYmKG89aSxpLmNsYXNzTmFtZT1lLndyYXBDbGFzc3x8IiIpfWlmKG98fChvPXNpKCJkaXYiLG51bGwsZS53cmFwQ2xhc3MsInBvc2l0aW9uOiByZWxhdGl2ZSIpLG8uYXBwZW5kQ2hpbGQocykpLGMmJm8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsYysiIENvZGVNaXJyb3ItbGluZWJhY2tncm91bmQiKSxvLmZpcnN0Q2hpbGQpLHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSl7dmFyIGI9by5pbnNlcnRCZWZvcmUoc2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrKHQub3B0aW9ucy5maXhlZEd1dHRlcj9uLmZpeGVkUG9zOi1uLmd1dHRlclRvdGFsV2lkdGgpKyJweCIpLG8uZmlyc3RDaGlsZCk7aWYodC5vcHRpb25zLmZpeGVkR3V0dGVyJiYoby5hbGlnbmFibGV8fChvLmFsaWduYWJsZT1bXSkpLnB1c2goYiksIXQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSYmYVsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdfHwoby5saW5lTnVtYmVyPWIuYXBwZW5kQ2hpbGQoc2koImRpdiIsdih0Lm9wdGlvbnMsciksIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKyJweDsgd2lkdGg6ICIrdS5saW5lTnVtSW5uZXJXaWR0aCsicHgiKSkpLGEpZm9yKHZhciB4PTA7eDx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt4KXt2YXIgQz10Lm9wdGlvbnMuZ3V0dGVyc1t4XSx3PWEuaGFzT3duUHJvcGVydHkoQykmJmFbQ107dyYmYi5hcHBlbmRDaGlsZChzaSgiZGl2Iixbd10sIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsImxlZnQ6ICIrbi5ndXR0ZXJMZWZ0W0NdKyJweDsgd2lkdGg6ICIrbi5ndXR0ZXJXaWR0aFtDXSsicHgiKSl9fWlmKEhpJiYoby5zdHlsZS56SW5kZXg9MiksZS53aWRnZXRzJiZvIT1pKWZvcih2YXIgbT0wLEw9ZS53aWRnZXRzO208TC5sZW5ndGg7KyttKXt2YXIgeT1MW21dLGs9c2koImRpdiIsW3kubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpO3kuaGFuZGxlTW91c2VFdmVudHN8fChrLmlnbm9yZUV2ZW50cz0hMCksVCh5LGssbyxuKSx5LmFib3ZlP28uaW5zZXJ0QmVmb3JlKGssdC5vcHRpb25zLmxpbmVOdW1iZXJzJiYwIT1lLmhlaWdodD9iOnMpOm8uYXBwZW5kQ2hpbGQoayksVW4oeSwicmVkcmF3Iil9cmV0dXJuIG99ZnVuY3Rpb24gVCh0LGUscixuKXtpZih0Lm5vSFNjcm9sbCl7KHIuYWxpZ25hYmxlfHwoci5hbGlnbmFibGU9W10pKS5wdXNoKGUpO3ZhciBpPW4ud3JhcHBlcldpZHRoO2Uuc3R5bGUubGVmdD1uLmZpeGVkUG9zKyJweCIsdC5jb3Zlckd1dHRlcnx8KGktPW4uZ3V0dGVyVG90YWxXaWR0aCxlLnN0eWxlLnBhZGRpbmdMZWZ0PW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSxlLnN0eWxlLndpZHRoPWkrInB4In10LmNvdmVyR3V0dGVyJiYoZS5zdHlsZS56SW5kZXg9NSxlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdC5ub0hTY3JvbGx8fChlLnN0eWxlLm1hcmdpbkxlZnQ9LW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LmRpc3BsYXkscj1qZSh0LmRvYy5zZWwuZnJvbSx0LmRvYy5zZWwudG8pO2lmKHJ8fHQub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZz9IKHQpOmUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIixyP2Uuc2VsZWN0aW9uRGl2LnN0eWxlLmRpc3BsYXk9Im5vbmUiOk4odCksdC5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3Ipe3ZhciBuPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2IiksaT1maShlLndyYXBwZXIpLG89ZmkoZS5saW5lRGl2KTtlLmlucHV0RGl2LnN0eWxlLnRvcD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRIZWlnaHQtMTAsbi50b3Arby50b3AtaS50b3ApKSsicHgiLGUuaW5wdXREaXYuc3R5bGUubGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRXaWR0aC0xMCxuLmxlZnQrby5sZWZ0LWkubGVmdCkpKyJweCJ9fWZ1bmN0aW9uIEgodCl7dmFyIGU9dC5kaXNwbGF5LHI9USh0LHQuZG9jLnNlbC5oZWFkLCJkaXYiKTtlLmN1cnNvci5zdHlsZS5sZWZ0PXIubGVmdCsicHgiLGUuY3Vyc29yLnN0eWxlLnRvcD1yLnRvcCsicHgiLGUuY3Vyc29yLnN0eWxlLmhlaWdodD1NYXRoLm1heCgwLHIuYm90dG9tLXIudG9wKSp0Lm9wdGlvbnMuY3Vyc29ySGVpZ2h0KyJweCIsZS5jdXJzb3Iuc3R5bGUuZGlzcGxheT0iIixyLm90aGVyPyhlLm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsZS5vdGhlckN1cnNvci5zdHlsZS5sZWZ0PXIub3RoZXIubGVmdCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUudG9wPXIub3RoZXIudG9wKyJweCIsZS5vdGhlckN1cnNvci5zdHlsZS5oZWlnaHQ9Ljg1KihyLm90aGVyLmJvdHRvbS1yLm90aGVyLnRvcCkrInB4Iik6ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIn1mdW5jdGlvbiBOKHQpe2Z1bmN0aW9uIGUodCxlLHIsbil7MD5lJiYoZT0wKSxsLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrdCsicHg7IHRvcDogIitlKyJweDsgd2lkdGg6ICIrKG51bGw9PXI/cy10OnIpKyJweDsgaGVpZ2h0OiAiKyhuLWUpKyJweCIpKX1mdW5jdGlvbiByKHIsbixvKXtmdW5jdGlvbiBsKGUsbil7cmV0dXJuIHEodCxZZShyLGUpLCJkaXYiLGYsbil9dmFyIHUsYyxmPWduKGksciksaD1mLnRleHQubGVuZ3RoO3JldHVybiBnaSh3bihmKSxufHwwLG51bGw9PW8/aDpvLGZ1bmN0aW9uKHQscixpKXt2YXIgZixkLHAsZz1sKHQsImxlZnQiKTtpZih0PT1yKWY9ZyxkPXA9Zy5sZWZ0O2Vsc2V7aWYoZj1sKHItMSwicmlnaHQiKSwicnRsIj09aSl7dmFyIG09ZztnPWYsZj1tfWQ9Zy5sZWZ0LHA9Zi5yaWdodH1udWxsPT1uJiYwPT10JiYoZD1hKSxmLnRvcC1nLnRvcD4zJiYoZShkLGcudG9wLG51bGwsZy5ib3R0b20pLGQ9YSxnLmJvdHRvbTxmLnRvcCYmZShkLGcuYm90dG9tLG51bGwsZi50b3ApKSxudWxsPT1vJiZyPT1oJiYocD1zKSwoIXV8fGcudG9wPHUudG9wfHxnLnRvcD09dS50b3AmJmcubGVmdDx1LmxlZnQpJiYodT1nKSwoIWN8fGYuYm90dG9tPmMuYm90dG9tfHxmLmJvdHRvbT09Yy5ib3R0b20mJmYucmlnaHQ+Yy5yaWdodCkmJihjPWYpLGErMT5kJiYoZD1hKSxlKGQsZi50b3AscC1kLGYuYm90dG9tKX0pLHtzdGFydDp1LGVuZDpjfX12YXIgbj10LmRpc3BsYXksaT10LmRvYyxvPXQuZG9jLnNlbCxsPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxzPW4ubGluZVNwYWNlLm9mZnNldFdpZHRoLGE9UCh0LmRpc3BsYXkpO2lmKG8uZnJvbS5saW5lPT1vLnRvLmxpbmUpcihvLmZyb20ubGluZSxvLmZyb20uY2gsby50by5jaCk7ZWxzZXt2YXIgdT1nbihpLG8uZnJvbS5saW5lKSxjPWduKGksby50by5saW5lKSxmPUdyKGksdSk9PUdyKGksYyksaD1yKG8uZnJvbS5saW5lLG8uZnJvbS5jaCxmP3UudGV4dC5sZW5ndGg6bnVsbCkuZW5kLGQ9cihvLnRvLmxpbmUsZj8wOm51bGwsby50by5jaCkuc3RhcnQ7ZiYmKGgudG9wPGQudG9wLTI/KGUoaC5yaWdodCxoLnRvcCxudWxsLGguYm90dG9tKSxlKGEsZC50b3AsZC5sZWZ0LGQuYm90dG9tKSk6ZShoLnJpZ2h0LGgudG9wLGQubGVmdC1oLnJpZ2h0LGguYm90dG9tKSksaC5ib3R0b208ZC50b3AmJmUoYSxoLmJvdHRvbSxudWxsLGQudG9wKX11aShuLnNlbGVjdGlvbkRpdixsKSxuLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSIifWZ1bmN0aW9uIEQodCl7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgZT10LmRpc3BsYXk7Y2xlYXJJbnRlcnZhbChlLmJsaW5rZXIpO3ZhciByPSEwO2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PSIiLHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU+MCYmKGUuYmxpbmtlcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PShyPSFyKT8iIjoiaGlkZGVuIn0sdC5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSkpfX1mdW5jdGlvbiBXKHQsZSl7dC5kb2MubW9kZS5zdGFydFN0YXRlJiZ0LmRvYy5mcm9udGllcjx0LmRpc3BsYXkuc2hvd2luZ1RvJiZ0LnN0YXRlLmhpZ2hsaWdodC5zZXQoZSxpaShPLHQpKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuZG9jO2lmKGUuZnJvbnRpZXI8ZS5maXJzdCYmKGUuZnJvbnRpZXI9ZS5maXJzdCksIShlLmZyb250aWVyPj10LmRpc3BsYXkuc2hvd2luZ1RvKSl7dmFyIHIsbj0rbmV3IERhdGUrdC5vcHRpb25zLndvcmtUaW1lLGk9YnIoZS5tb2RlLHoodCxlLmZyb250aWVyKSksbz1bXTtlLml0ZXIoZS5mcm9udGllcixNYXRoLm1pbihlLmZpcnN0K2Uuc2l6ZSx0LmRpc3BsYXkuc2hvd2luZ1RvKzUwMCksZnVuY3Rpb24obCl7aWYoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdGcm9tKXt2YXIgcz1sLnN0eWxlcztsLnN0eWxlcz1Rcih0LGwsaSwhMCk7Zm9yKHZhciBhPSFzfHxzLmxlbmd0aCE9bC5zdHlsZXMubGVuZ3RoLHU9MDshYSYmdTxzLmxlbmd0aDsrK3UpYT1zW3VdIT1sLnN0eWxlc1t1XTthJiYociYmci5lbmQ9PWUuZnJvbnRpZXI/ci5lbmQrKzpvLnB1c2gocj17c3RhcnQ6ZS5mcm9udGllcixlbmQ6ZS5mcm9udGllcisxfSkpLGwuc3RhdGVBZnRlcj1icihlLm1vZGUsaSl9ZWxzZSB0bih0LGwudGV4dCxpKSxsLnN0YXRlQWZ0ZXI9MD09ZS5mcm9udGllciU1P2JyKGUubW9kZSxpKTpudWxsO3JldHVybisrZS5mcm9udGllciwrbmV3IERhdGU+bj8oVyh0LHQub3B0aW9ucy53b3JrRGVsYXkpLCEwKTp2b2lkIDB9KSxvLmxlbmd0aCYmbGUodCxmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8by5sZW5ndGg7Kyt0KXVlKHRoaXMsb1t0XS5zdGFydCxvW3RdLmVuZCl9KSgpfX1mdW5jdGlvbiBFKHQsZSxyKXtmb3IodmFyIG4saSxvPXQuZG9jLGw9cj8tMTplLSh0LmRvYy5tb2RlLmlubmVyTW9kZT8xZTM6MTAwKSxzPWU7cz5sOy0tcyl7aWYoczw9by5maXJzdClyZXR1cm4gby5maXJzdDt2YXIgYT1nbihvLHMtMSk7aWYoYS5zdGF0ZUFmdGVyJiYoIXJ8fHM8PW8uZnJvbnRpZXIpKXJldHVybiBzO3ZhciB1PVpuKGEudGV4dCxudWxsLHQub3B0aW9ucy50YWJTaXplKTsobnVsbD09aXx8bj51KSYmKGk9cy0xLG49dSl9cmV0dXJuIGl9ZnVuY3Rpb24geih0LGUscil7dmFyIG49dC5kb2MsaT10LmRpc3BsYXk7aWYoIW4ubW9kZS5zdGFydFN0YXRlKXJldHVybiEwO3ZhciBvPUUodCxlLHIpLGw9bz5uLmZpcnN0JiZnbihuLG8tMSkuc3RhdGVBZnRlcjtyZXR1cm4gbD1sP2JyKG4ubW9kZSxsKTp4cihuLm1vZGUpLG4uaXRlcihvLGUsZnVuY3Rpb24ocil7dG4odCxyLnRleHQsbCk7dmFyIHM9bz09ZS0xfHwwPT1vJTV8fG8+PWkuc2hvd2luZ0Zyb20mJm88aS5zaG93aW5nVG87ci5zdGF0ZUFmdGVyPXM/YnIobi5tb2RlLGwpOm51bGwsKytvfSksciYmKG4uZnJvbnRpZXI9byksbH1mdW5jdGlvbiBJKHQpe3JldHVybiB0LmxpbmVTcGFjZS5vZmZzZXRUb3B9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5tb3Zlci5vZmZzZXRIZWlnaHQtdC5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIFAodCl7dmFyIGU9dWkodC5tZWFzdXJlLHNpKCJwcmUiLG51bGwsbnVsbCwidGV4dC1hbGlnbjogbGVmdCIpKS5hcHBlbmRDaGlsZChzaSgic3BhbiIsIngiKSk7cmV0dXJuIGUub2Zmc2V0TGVmdH1mdW5jdGlvbiBSKHQsZSxyLG4saSl7dmFyIG89LTE7aWYobj1ufHxWKHQsZSksbi5jcnVkZSl7dmFyIGw9bi5sZWZ0K3Iqbi53aWR0aDtyZXR1cm57bGVmdDpsLHJpZ2h0Omwrbi53aWR0aCx0b3A6bi50b3AsYm90dG9tOm4uYm90dG9tfX1mb3IodmFyIHM9cjs7cys9byl7dmFyIGE9bltzXTtpZihhKWJyZWFrOzA+byYmMD09cyYmKG89MSl9cmV0dXJuIGk9cz5yPyJsZWZ0IjpyPnM/InJpZ2h0IjppLCJsZWZ0Ij09aSYmYS5sZWZ0U2lkZT9hPWEubGVmdFNpZGU6InJpZ2h0Ij09aSYmYS5yaWdodFNpZGUmJihhPWEucmlnaHRTaWRlKSx7bGVmdDpyPnM/YS5yaWdodDphLmxlZnQscmlnaHQ6cz5yP2EubGVmdDphLnJpZ2h0LHRvcDphLnRvcCxib3R0b206YS5ib3R0b219fWZ1bmN0aW9uIEIodCxlKXtmb3IodmFyIHI9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO2lmKGkudGV4dD09ZS50ZXh0JiZpLm1hcmtlZFNwYW5zPT1lLm1hcmtlZFNwYW5zJiZ0LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg9PWkud2lkdGgmJmkuY2xhc3Nlcz09ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzKXJldHVybiBpfX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI9Qih0LGUpO3ImJihyLnRleHQ9ci5tZWFzdXJlPXIubWFya2VkU3BhbnM9bnVsbCl9ZnVuY3Rpb24gVih0LGUpe3ZhciByPUIodCxlKTtpZihyKXJldHVybiByLm1lYXN1cmU7dmFyIG49Syh0LGUpLGk9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbz17dGV4dDplLnRleHQsd2lkdGg6dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLG1hcmtlZFNwYW5zOmUubWFya2VkU3BhbnMsbWVhc3VyZTpuLGNsYXNzZXM6ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzfTtyZXR1cm4gMTY9PWkubGVuZ3RoP2lbKyt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyUxNl09bzppLnB1c2gobyksbn1mdW5jdGlvbiBLKHQsZSl7ZnVuY3Rpb24gcih0KXt2YXIgZT10LnRvcC1wLnRvcCxyPXQuYm90dG9tLXAudG9wO3I+diYmKHI9diksMD5lJiYoZT0wKTtmb3IodmFyIG49Zy5sZW5ndGgtMjtuPj0wO24tPTIpe3ZhciBpPWdbbl0sbz1nW24rMV07aWYoIShpPnJ8fGU+bykmJihlPj1pJiZvPj1yfHxpPj1lJiZyPj1vfHxNYXRoLm1pbihyLG8pLU1hdGgubWF4KGUsaSk+PXItZT4+MSkpe2dbbl09TWF0aC5taW4oZSxpKSxnW24rMV09TWF0aC5tYXgocixvKTticmVha319cmV0dXJuIDA+biYmKG49Zy5sZW5ndGgsZy5wdXNoKGUscikpLHtsZWZ0OnQubGVmdC1wLmxlZnQscmlnaHQ6dC5yaWdodC1wLmxlZnQsdG9wOm4sYm90dG9tOm51bGx9fWZ1bmN0aW9uIG4odCl7dC5ib3R0b209Z1t0LnRvcCsxXSx0LnRvcD1nW3QudG9wXX1pZighdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gVSh0LGUpO3ZhciBpPXQuZGlzcGxheSxvPW5pKGUudGV4dC5sZW5ndGgpLGw9cm4odCxlLG8sITApLnByZTtpZihBaSYmIUhpJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbC5jaGlsZE5vZGVzLmxlbmd0aD4xMDApe2Zvcih2YXIgcz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYT0xMCx1PWwuY2hpbGROb2Rlcy5sZW5ndGgsYz0wLGY9TWF0aC5jZWlsKHUvYSk7Zj5jOysrYyl7Zm9yKHZhciBoPXNpKCJkaXYiLG51bGwsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrIiksZD0wO2E+ZCYmdTsrK2QpaC5hcHBlbmRDaGlsZChsLmZpcnN0Q2hpbGQpLC0tdTtzLmFwcGVuZENoaWxkKGgpfWwuYXBwZW5kQ2hpbGQocyl9dWkoaS5tZWFzdXJlLGwpO3ZhciBwPWZpKGkubGluZURpdiksZz1bXSxtPW5pKGUudGV4dC5sZW5ndGgpLHY9bC5vZmZzZXRIZWlnaHQ7TmkmJmkubWVhc3VyZS5maXJzdCE9bCYmdWkoaS5tZWFzdXJlLGwpO2Zvcih2YXIgeSxjPTA7YzxvLmxlbmd0aDsrK2MpaWYoeT1vW2NdKXt2YXIgYj15LHg9bnVsbDtpZigvXGJDb2RlTWlycm9yLXdpZGdldFxiLy50ZXN0KHkuY2xhc3NOYW1lKSYmeS5nZXRDbGllbnRSZWN0cyl7MT09eS5maXJzdENoaWxkLm5vZGVUeXBlJiYoYj15LmZpcnN0Q2hpbGQpO3ZhciBDPWIuZ2V0Q2xpZW50UmVjdHMoKTtDLmxlbmd0aD4xJiYoeD1tW2NdPXIoQ1swXSkseC5yaWdodFNpZGU9cihDW0MubGVuZ3RoLTFdKSl9eHx8KHg9bVtjXT1yKGZpKGIpKSkseS5tZWFzdXJlUmlnaHQmJih4LnJpZ2h0PWZpKHkubWVhc3VyZVJpZ2h0KS5sZWZ0KSx5LmxlZnRTaWRlJiYoeC5sZWZ0U2lkZT1yKGZpKHkubGVmdFNpZGUpKSl9YWkodC5kaXNwbGF5Lm1lYXN1cmUpO2Zvcih2YXIgeSxjPTA7YzxtLmxlbmd0aDsrK2MpKHk9bVtjXSkmJihuKHkpLHkubGVmdFNpZGUmJm4oeS5sZWZ0U2lkZSkseS5yaWdodFNpZGUmJm4oeS5yaWdodFNpZGUpKTtyZXR1cm4gbX1mdW5jdGlvbiBVKHQsZSl7dmFyIHI9bmV3IGJvKGUudGV4dC5zbGljZSgwLDEwMCksbnVsbCk7ZS50ZXh0Q2xhc3MmJihyLnRleHRDbGFzcz1lLnRleHRDbGFzcyk7dmFyIG49Syh0LHIpLGk9Uih0LHIsMCxuLCJsZWZ0Iiksbz1SKHQsciw5OSxuLCJyaWdodCIpO3JldHVybntjcnVkZTohMCx0b3A6aS50b3AsbGVmdDppLmxlZnQsYm90dG9tOmkuYm90dG9tLHdpZHRoOihvLnJpZ2h0LWkubGVmdCkvMTAwfX1mdW5jdGlvbiBYKHQsZSl7dmFyIHI9ITE7aWYoZS5tYXJrZWRTcGFucylmb3IodmFyIG49MDtuPGUubWFya2VkU3BhbnM7KytuKXt2YXIgaT1lLm1hcmtlZFNwYW5zW25dOyFpLmNvbGxhcHNlZHx8bnVsbCE9aS50byYmaS50byE9ZS50ZXh0Lmxlbmd0aHx8KHI9ITApfXZhciBvPSFyJiZCKHQsZSk7aWYob3x8ZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gUih0LGUsZS50ZXh0Lmxlbmd0aCxvJiZvLm1lYXN1cmUsInJpZ2h0IikucmlnaHQ7dmFyIGw9cm4odCxlLG51bGwsITApLnByZSxzPWwuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKTtyZXR1cm4gdWkodC5kaXNwbGF5Lm1lYXN1cmUsbCksZmkocykucmlnaHQtZmkodC5kaXNwbGF5LmxpbmVEaXYpLmxlZnR9ZnVuY3Rpb24gXyh0KXt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCx0LmRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoPXQuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCksdC5kaXNwbGF5LmxpbmVOdW1DaGFycz1udWxsfWZ1bmN0aW9uIFkoKXtyZXR1cm4gd2luZG93LnBhZ2VYT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGooKXtyZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3B9ZnVuY3Rpb24gJCh0LGUscixuKXtpZihlLndpZGdldHMpZm9yKHZhciBpPTA7aTxlLndpZGdldHMubGVuZ3RoOysraSlpZihlLndpZGdldHNbaV0uYWJvdmUpe3ZhciBvPVlyKGUud2lkZ2V0c1tpXSk7ci50b3ArPW8sci5ib3R0b20rPW99aWYoImxpbmUiPT1uKXJldHVybiByO258fChuPSJsb2NhbCIpO3ZhciBsPUNuKHQsZSk7aWYoImxvY2FsIj09bj9sKz1JKHQuZGlzcGxheSk6bC09dC5kaXNwbGF5LnZpZXdPZmZzZXQsInBhZ2UiPT1ufHwid2luZG93Ij09bil7dmFyIHM9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7bCs9cy50b3ArKCJ3aW5kb3ciPT1uPzA6aigpKTt2YXIgYT1zLmxlZnQrKCJ3aW5kb3ciPT1uPzA6WSgpKTtyLmxlZnQrPWEsci5yaWdodCs9YX1yZXR1cm4gci50b3ArPWwsci5ib3R0b20rPWwscn1mdW5jdGlvbiBaKHQsZSxyKXtpZigiZGl2Ij09cilyZXR1cm4gZTt2YXIgbj1lLmxlZnQsaT1lLnRvcDtpZigicGFnZSI9PXIpbi09WSgpLGktPWooKTtlbHNlIGlmKCJsb2NhbCI9PXJ8fCFyKXt2YXIgbz1maSh0LmRpc3BsYXkuc2l6ZXIpO24rPW8ubGVmdCxpKz1vLnRvcH12YXIgbD1maSh0LmRpc3BsYXkubGluZVNwYWNlKTtyZXR1cm57bGVmdDpuLWwubGVmdCx0b3A6aS1sLnRvcH19ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBufHwobj1nbih0LmRvYyxlLmxpbmUpKSwkKHQsbixSKHQsbixlLmNoLG51bGwsaSkscil9ZnVuY3Rpb24gUSh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSxvKXt2YXIgbD1SKHQsbixlLGksbz8icmlnaHQiOiJsZWZ0Iik7cmV0dXJuIG8/bC5sZWZ0PWwucmlnaHQ6bC5yaWdodD1sLmxlZnQsJCh0LG4sbCxyKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9c1tlXSxuPXIubGV2ZWwlMjtyZXR1cm4gdD09bWkocikmJmUmJnIubGV2ZWw8c1tlLTFdLmxldmVsPyhyPXNbLS1lXSx0PXZpKHIpLShyLmxldmVsJTI/MDoxKSxuPSEwKTp0PT12aShyKSYmZTxzLmxlbmd0aC0xJiZyLmxldmVsPHNbZSsxXS5sZXZlbCYmKHI9c1srK2VdLHQ9bWkociktci5sZXZlbCUyLG49ITEpLG4mJnQ9PXIudG8mJnQ+ci5mcm9tP28odC0xKTpvKHQsbil9bj1ufHxnbih0LmRvYyxlLmxpbmUpLGl8fChpPVYodCxuKSk7dmFyIHM9d24obiksYT1lLmNoO2lmKCFzKXJldHVybiBvKGEpO3ZhciB1PUxpKHMsYSksYz1sKGEsdSk7cmV0dXJuIG51bGwhPVJvJiYoYy5vdGhlcj1sKGEsUm8pKSxjfWZ1bmN0aW9uIEoodCxlLHIsbil7dmFyIGk9bmV3IFllKHQsZSk7cmV0dXJuIGkueFJlbD1uLHImJihpLm91dHNpZGU9ITApLGl9ZnVuY3Rpb24gdGUodCxlLHIpe3ZhciBuPXQuZG9jO2lmKHIrPXQuZGlzcGxheS52aWV3T2Zmc2V0LDA+cilyZXR1cm4gSihuLmZpcnN0LDAsITAsLTEpO3ZhciBpPXhuKG4sciksbz1uLmZpcnN0K24uc2l6ZS0xO2lmKGk+bylyZXR1cm4gSihuLmZpcnN0K24uc2l6ZS0xLGduKG4sbykudGV4dC5sZW5ndGgsITAsMSk7Zm9yKDA+ZSYmKGU9MCk7Oyl7dmFyIGw9Z24obixpKSxzPWVlKHQsbCxpLGUsciksYT1CcihsKSx1PWEmJmEuZmluZCgpO2lmKCFhfHwhKHMuY2g+dS5mcm9tLmNofHxzLmNoPT11LmZyb20uY2gmJnMueFJlbD4wKSlyZXR1cm4gcztpPXUudG8ubGluZX19ZnVuY3Rpb24gZWUodCxlLHIsbixpKXtmdW5jdGlvbiBvKG4pe3ZhciBpPVEodCxZZShyLG4pLCJsaW5lIixlLHUpO3JldHVybiBzPSEwLGw+aS5ib3R0b20/aS5sZWZ0LWE6bDxpLnRvcD9pLmxlZnQrYToocz0hMSxpLmxlZnQpfXZhciBsPWktQ24odCxlKSxzPSExLGE9Mip0LmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCx1PVYodCxlKSxjPXduKGUpLGY9ZS50ZXh0Lmxlbmd0aCxoPXlpKGUpLGQ9YmkoZSkscD1vKGgpLGc9cyxtPW8oZCksdj1zO2lmKG4+bSlyZXR1cm4gSihyLGQsdiwxKTtmb3IoOzspe2lmKGM/ZD09aHx8ZD09U2koZSxoLDEpOjE+PWQtaCl7Zm9yKHZhciB5PXA+bnx8bS1uPj1uLXA/aDpkLGI9bi0oeT09aD9wOm0pO0RvLnRlc3QoZS50ZXh0LmNoYXJBdCh5KSk7KSsreTt2YXIgeD1KKHIseSx5PT1oP2c6diwwPmI/LTE6Yj8xOjApO3JldHVybiB4fXZhciBDPU1hdGguY2VpbChmLzIpLHc9aCtDO2lmKGMpe3c9aDtmb3IodmFyIEw9MDtDPkw7KytMKXc9U2koZSx3LDEpfXZhciBrPW8odyk7az5uPyhkPXcsbT1rLCh2PXMpJiYobSs9MWUzKSxmPUMpOihoPXcscD1rLGc9cyxmLT1DKX19ZnVuY3Rpb24gcmUodCl7aWYobnVsbCE9dC5jYWNoZWRUZXh0SGVpZ2h0KXJldHVybiB0LmNhY2hlZFRleHRIZWlnaHQ7aWYobnVsbD09X2kpe19pPXNpKCJwcmUiKTtmb3IodmFyIGU9MDs0OT5lOysrZSlfaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKSxfaS5hcHBlbmRDaGlsZChzaSgiYnIiKSk7X2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSl9dWkodC5tZWFzdXJlLF9pKTt2YXIgcj1faS5vZmZzZXRIZWlnaHQvNTA7cmV0dXJuIHI+MyYmKHQuY2FjaGVkVGV4dEhlaWdodD1yKSxhaSh0Lm1lYXN1cmUpLHJ8fDF9ZnVuY3Rpb24gbmUodCl7aWYobnVsbCE9dC5jYWNoZWRDaGFyV2lkdGgpcmV0dXJuIHQuY2FjaGVkQ2hhcldpZHRoO3ZhciBlPXNpKCJzcGFuIiwieCIpLHI9c2koInByZSIsW2VdKTt1aSh0Lm1lYXN1cmUscik7dmFyIG49ZS5vZmZzZXRXaWR0aDtyZXR1cm4gbj4yJiYodC5jYWNoZWRDaGFyV2lkdGg9biksbnx8MTB9ZnVuY3Rpb24gaWUodCl7dC5jdXJPcD17Y2hhbmdlczpbXSxmb3JjZVVwZGF0ZTohMSx1cGRhdGVJbnB1dDpudWxsLHVzZXJTZWxDaGFuZ2U6bnVsbCx0ZXh0Q2hhbmdlZDpudWxsLHNlbGVjdGlvbkNoYW5nZWQ6ITEsY3Vyc29yQWN0aXZpdHk6ITEsdXBkYXRlTWF4TGluZTohMSx1cGRhdGVTY3JvbGxQb3M6ITEsaWQ6KytKaX0sTW8rK3x8KFNvPVtdKX1mdW5jdGlvbiBvZSh0KXt2YXIgZT10LmN1ck9wLHI9dC5kb2Msbj10LmRpc3BsYXk7aWYodC5jdXJPcD1udWxsLGUudXBkYXRlTWF4TGluZSYmZih0KSxuLm1heExpbmVDaGFuZ2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbi5tYXhMaW5lKXt2YXIgaT1YKHQsbi5tYXhMaW5lKTtuLnNpemVyLnN0eWxlLm1pbldpZHRoPU1hdGgubWF4KDAsaSszK1RvKSsicHgiLG4ubWF4TGluZUNoYW5nZWQ9ITE7dmFyIG89TWF0aC5tYXgoMCxuLnNpemVyLm9mZnNldExlZnQrbi5zaXplci5vZmZzZXRXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoKTtvPHIuc2Nyb2xsTGVmdCYmIWUudXBkYXRlU2Nyb2xsUG9zJiZNZSh0LE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsTGVmdCxvKSwhMCl9dmFyIGwscztpZihlLnVwZGF0ZVNjcm9sbFBvcylsPWUudXBkYXRlU2Nyb2xsUG9zO2Vsc2UgaWYoZS5zZWxlY3Rpb25DaGFuZ2VkJiZuLnNjcm9sbGVyLmNsaWVudEhlaWdodCl7dmFyIGE9USh0LHIuc2VsLmhlYWQpO2w9dXIodCxhLmxlZnQsYS50b3AsYS5sZWZ0LGEuYm90dG9tKX1pZigoZS5jaGFuZ2VzLmxlbmd0aHx8ZS5mb3JjZVVwZGF0ZXx8bCYmbnVsbCE9bC5zY3JvbGxUb3ApJiYocz1iKHQsZS5jaGFuZ2VzLGwmJmwuc2Nyb2xsVG9wLGUuZm9yY2VVcGRhdGUpLHQuZGlzcGxheS5zY3JvbGxlci5vZmZzZXRIZWlnaHQmJih0LmRvYy5zY3JvbGxUb3A9dC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCkpLCFzJiZlLnNlbGVjdGlvbkNoYW5nZWQmJkEodCksZS51cGRhdGVTY3JvbGxQb3Mpe3ZhciB1PU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxIZWlnaHQtbi5zY3JvbGxlci5jbGllbnRIZWlnaHQsbC5zY3JvbGxUb3ApKSxjPU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoLGwuc2Nyb2xsTGVmdCkpO24uc2Nyb2xsZXIuc2Nyb2xsVG9wPW4uc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ci5zY3JvbGxUb3A9dSxuLnNjcm9sbGVyLnNjcm9sbExlZnQ9bi5zY3JvbGxiYXJILnNjcm9sbExlZnQ9ci5zY3JvbGxMZWZ0PWMsZyh0KSxlLnNjcm9sbFRvUG9zJiZzcih0LFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MuZnJvbSksUWUodC5kb2MsZS5zY3JvbGxUb1Bvcy50byksZS5zY3JvbGxUb1Bvcy5tYXJnaW4pfWVsc2UgbCYmbHIodCk7ZS5zZWxlY3Rpb25DaGFuZ2VkJiZEKHQpLHQuc3RhdGUuZm9jdXNlZCYmZS51cGRhdGVJbnB1dCYmZGUodCxlLnVzZXJTZWxDaGFuZ2UpO3ZhciBoPWUubWF5YmVIaWRkZW5NYXJrZXJzLGQ9ZS5tYXliZVVuaGlkZGVuTWFya2VycztpZihoKWZvcih2YXIgcD0wO3A8aC5sZW5ndGg7KytwKWhbcF0ubGluZXMubGVuZ3RofHxLbihoW3BdLCJoaWRlIik7aWYoZClmb3IodmFyIHA9MDtwPGQubGVuZ3RoOysrcClkW3BdLmxpbmVzLmxlbmd0aCYmS24oZFtwXSwidW5oaWRlIik7dmFyIG07aWYoLS1Nb3x8KG09U28sU289bnVsbCksZS50ZXh0Q2hhbmdlZCYmS24odCwiY2hhbmdlIix0LGUudGV4dENoYW5nZWQpLGUuY3Vyc29yQWN0aXZpdHkmJktuKHQsImN1cnNvckFjdGl2aXR5Iix0KSxtKWZvcih2YXIgcD0wO3A8bS5sZW5ndGg7KytwKW1bcF0oKX1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXR8fHRoaXMsbj0hci5jdXJPcDtuJiZpZShyKTt0cnl7dmFyIGk9ZS5hcHBseShyLGFyZ3VtZW50cyl9ZmluYWxseXtuJiZvZShyKX1yZXR1cm4gaX19ZnVuY3Rpb24gc2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmNtJiYhdGhpcy5jbS5jdXJPcDtyJiZpZSh0aGlzLmNtKTt0cnl7ZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3ImJm9lKHRoaXMuY20pfXJldHVybiBlfX1mdW5jdGlvbiBhZSh0LGUpe3ZhciByLG49IXQuY3VyT3A7biYmaWUodCk7dHJ5e3I9ZSgpfWZpbmFsbHl7biYmb2UodCl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWUodCxlLHIsbil7bnVsbD09ZSYmKGU9dC5kb2MuZmlyc3QpLG51bGw9PXImJihyPXQuZG9jLmZpcnN0K3QuZG9jLnNpemUpLHQuY3VyT3AuY2hhbmdlcy5wdXNoKHtmcm9tOmUsdG86cixkaWZmOm59KX1mdW5jdGlvbiBjZSh0KXt0LmRpc3BsYXkucG9sbGluZ0Zhc3R8fHQuZGlzcGxheS5wb2xsLnNldCh0Lm9wdGlvbnMucG9sbEludGVydmFsLGZ1bmN0aW9uKCl7aGUodCksdC5zdGF0ZS5mb2N1c2VkJiZjZSh0KX0pfWZ1bmN0aW9uIGZlKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj1oZSh0KTtufHxyPyh0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEsY2UodCkpOihyPSEwLHQuZGlzcGxheS5wb2xsLnNldCg2MCxlKSl9dmFyIHI9ITE7dC5kaXNwbGF5LnBvbGxpbmdGYXN0PSEwLHQuZGlzcGxheS5wb2xsLnNldCgyMCxlKX1mdW5jdGlvbiBoZSh0KXt2YXIgZT10LmRpc3BsYXkuaW5wdXQscj10LmRpc3BsYXkucHJldklucHV0LG49dC5kb2MsaT1uLnNlbDtpZighdC5zdGF0ZS5mb2N1c2VkfHxJbyhlKXx8Z2UodCl8fHQuc3RhdGUuZGlzYWJsZUlucHV0KXJldHVybiExO3Quc3RhdGUucGFzdGVJbmNvbWluZyYmdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYoZS52YWx1ZT1lLnZhbHVlLnN1YnN0cmluZygwLGUudmFsdWUubGVuZ3RoLTEpLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMSk7dmFyIG89ZS52YWx1ZTtpZihvPT1yJiZqZShpLmZyb20saS50bykpcmV0dXJuITE7aWYoQWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPT09bylyZXR1cm4gZGUodCwhMCksITE7dmFyIGw9IXQuY3VyT3A7bCYmaWUodCksaS5zaGlmdD0hMTtmb3IodmFyIHM9MCxhPU1hdGgubWluKHIubGVuZ3RoLG8ubGVuZ3RoKTthPnMmJnIuY2hhckNvZGVBdChzKT09by5jaGFyQ29kZUF0KHMpOykrK3M7dmFyIHU9aS5mcm9tLGM9aS50bztzPHIubGVuZ3RoP3U9WWUodS5saW5lLHUuY2gtKHIubGVuZ3RoLXMpKTp0LnN0YXRlLm92ZXJ3cml0ZSYmamUodSxjKSYmIXQuc3RhdGUucGFzdGVJbmNvbWluZyYmKGM9WWUoYy5saW5lLE1hdGgubWluKGduKG4sYy5saW5lKS50ZXh0Lmxlbmd0aCxjLmNoKyhvLmxlbmd0aC1zKSkpKTt2YXIgZj10LmN1ck9wLnVwZGF0ZUlucHV0LGg9e2Zyb206dSx0bzpjLHRleHQ6em8oby5zbGljZShzKSksb3JpZ2luOnQuc3RhdGUucGFzdGVJbmNvbWluZz8icGFzdGUiOiIraW5wdXQifTtyZXR1cm4gQmUodC5kb2MsaCwiZW5kIiksdC5jdXJPcC51cGRhdGVJbnB1dD1mLFVuKHQsImlucHV0UmVhZCIsdCxoKSxvLmxlbmd0aD4xZTN8fG8uaW5kZXhPZigiXG4iKT4tMT9lLnZhbHVlPXQuZGlzcGxheS5wcmV2SW5wdXQ9IiI6dC5kaXNwbGF5LnByZXZJbnB1dD1vLGwmJm9lKHQpLHQuc3RhdGUucGFzdGVJbmNvbWluZz0hMSwhMH1mdW5jdGlvbiBkZSh0LGUpe3ZhciByLG4saT10LmRvYztpZihqZShpLnNlbC5mcm9tLGkuc2VsLnRvKSllJiYodC5kaXNwbGF5LnByZXZJbnB1dD10LmRpc3BsYXkuaW5wdXQudmFsdWU9IiIsQWkmJiFOaSYmKHQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSk7ZWxzZXt0LmRpc3BsYXkucHJldklucHV0PSIiLHI9Rm8mJihpLnNlbC50by5saW5lLWkuc2VsLmZyb20ubGluZT4xMDB8fChuPXQuZ2V0U2VsZWN0aW9uKCkpLmxlbmd0aD4xZTMpO3ZhciBvPXI/Ii0iOm58fHQuZ2V0U2VsZWN0aW9uKCk7dC5kaXNwbGF5LmlucHV0LnZhbHVlPW8sdC5zdGF0ZS5mb2N1c2VkJiZKbih0LmRpc3BsYXkuaW5wdXQpLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249byl9dC5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb249cn1mdW5jdGlvbiBwZSh0KXsibm9jdXJzb3IiPT10Lm9wdGlvbnMucmVhZE9ubHl8fFZpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT10LmRpc3BsYXkuaW5wdXR8fHQuZGlzcGxheS5pbnB1dC5mb2N1cygpfWZ1bmN0aW9uIGdlKHQpe3JldHVybiB0Lm9wdGlvbnMucmVhZE9ubHl8fHQuZG9jLmNhbnRFZGl0fWZ1bmN0aW9uIG1lKHQpe2Z1bmN0aW9uIGUoKXt0LnN0YXRlLmZvY3VzZWQmJnNldFRpbWVvdXQoaWkocGUsdCksMCl9ZnVuY3Rpb24gcigpe251bGw9PXMmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGwsbC5jYWNoZWRDaGFyV2lkdGg9bC5jYWNoZWRUZXh0SGVpZ2h0PU9vPW51bGwsXyh0KSxhZSh0LGlpKHVlLHQpKX0sMTAwKSl9ZnVuY3Rpb24gbigpe2Zvcih2YXIgdD1sLndyYXBwZXIucGFyZW50Tm9kZTt0JiZ0IT1kb2N1bWVudC5ib2R5O3Q9dC5wYXJlbnROb2RlKTt0P3NldFRpbWVvdXQobiw1ZTMpOlZuKHdpbmRvdywicmVzaXplIixyKX1mdW5jdGlvbiBpKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbkRyYWdFdmVudCYmdC5vcHRpb25zLm9uRHJhZ0V2ZW50KHQsRW4oZSkpfHxQbihlKX1mdW5jdGlvbiBvKCl7bC5pbmFjY3VyYXRlU2VsZWN0aW9uJiYobC5wcmV2SW5wdXQ9IiIsbC5pbmFjY3VyYXRlU2VsZWN0aW9uPSExLGwuaW5wdXQudmFsdWU9dC5nZXRTZWxlY3Rpb24oKSxKbihsLmlucHV0KSl9dmFyIGw9dC5kaXNwbGF5O0duKGwuc2Nyb2xsZXIsIm1vdXNlZG93biIsbGUodCxiZSkpLEFpP0duKGwuc2Nyb2xsZXIsImRibGNsaWNrIixsZSh0LGZ1bmN0aW9uKGUpe2lmKCFYbih0LGUpKXt2YXIgcj15ZSh0LGUpO2lmKHImJiF3ZSh0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt6bihlKTt2YXIgbj1tcihnbih0LmRvYyxyLmxpbmUpLnRleHQscik7ZXIodC5kb2Msbi5mcm9tLG4udG8pfX19KSk6R24obC5zY3JvbGxlciwiZGJsY2xpY2siLGZ1bmN0aW9uKGUpe1huKHQsZSl8fHpuKGUpfSksR24obC5saW5lU3BhY2UsInNlbGVjdHN0YXJ0IixmdW5jdGlvbih0KXt2ZShsLHQpfHx6bih0KX0pLFppfHxHbihsLnNjcm9sbGVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZSl7SWUodCxlKX0pLEduKGwuc2Nyb2xsZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmKFNlKHQsbC5zY3JvbGxlci5zY3JvbGxUb3ApLE1lKHQsbC5zY3JvbGxlci5zY3JvbGxMZWZ0LCEwKSxLbih0LCJzY3JvbGwiLHQpKX0pLEduKGwuc2Nyb2xsYmFyViwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZTZSh0LGwuc2Nyb2xsYmFyVi5zY3JvbGxUb3ApfSksR24obC5zY3JvbGxiYXJILCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJk1lKHQsbC5zY3JvbGxiYXJILnNjcm9sbExlZnQpfSksR24obC5zY3JvbGxlciwibW91c2V3aGVlbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsZXIsIkRPTU1vdXNlU2Nyb2xsIixmdW5jdGlvbihlKXtUZSh0LGUpfSksR24obC5zY3JvbGxiYXJILCJtb3VzZWRvd24iLGUpLEduKGwuc2Nyb2xsYmFyViwibW91c2Vkb3duIixlKSxHbihsLndyYXBwZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLndyYXBwZXIuc2Nyb2xsVG9wPWwud3JhcHBlci5zY3JvbGxMZWZ0PTB9KTt2YXIgcztHbih3aW5kb3csInJlc2l6ZSIsciksc2V0VGltZW91dChuLDVlMyksR24obC5pbnB1dCwia2V5dXAiLGxlKHQsZnVuY3Rpb24oZSl7WG4odCxlKXx8dC5vcHRpb25zLm9uS2V5RXZlbnQmJnQub3B0aW9ucy5vbktleUV2ZW50KHQsRW4oZSkpfHwxNj09ZS5rZXlDb2RlJiYodC5kb2Muc2VsLnNoaWZ0PSExKX0pKSxHbihsLmlucHV0LCJpbnB1dCIsZnVuY3Rpb24oKXtBaSYmIU5pJiZ0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24mJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUodCl9KSxHbihsLmlucHV0LCJrZXlkb3duIixsZSh0LFdlKSksR24obC5pbnB1dCwia2V5cHJlc3MiLGxlKHQsT2UpKSxHbihsLmlucHV0LCJmb2N1cyIsaWkoRWUsdCkpLEduKGwuaW5wdXQsImJsdXIiLGlpKHplLHQpKSx0Lm9wdGlvbnMuZHJhZ0Ryb3AmJihHbihsLnNjcm9sbGVyLCJkcmFnc3RhcnQiLGZ1bmN0aW9uKGUpe2tlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJkcmFnZW50ZXIiLGkpLEduKGwuc2Nyb2xsZXIsImRyYWdvdmVyIixpKSxHbihsLnNjcm9sbGVyLCJkcm9wIixsZSh0LExlKSkpLEduKGwuc2Nyb2xsZXIsInBhc3RlIixmdW5jdGlvbihlKXt2ZShsLGUpfHwocGUodCksZmUodCkpfSksR24obC5pbnB1dCwicGFzdGUiLGZ1bmN0aW9uKCl7aWYoV2kmJiF0LnN0YXRlLmZha2VkTGFzdENoYXImJiEobmV3IERhdGUtdC5zdGF0ZS5sYXN0TWlkZGxlRG93bjwyMDApKXt2YXIgZT1sLmlucHV0LnNlbGVjdGlvblN0YXJ0LHI9bC5pbnB1dC5zZWxlY3Rpb25FbmQ7bC5pbnB1dC52YWx1ZSs9IiQiLGwuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9ZSxsLmlucHV0LnNlbGVjdGlvbkVuZD1yLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMH10LnN0YXRlLnBhc3RlSW5jb21pbmc9ITAsZmUodCl9KSxHbihsLmlucHV0LCJjdXQiLG8pLEduKGwuaW5wdXQsImNvcHkiLG8pLEZpJiZHbihsLnNpemVyLCJtb3VzZXVwIixmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXQmJmwuaW5wdXQuYmx1cigpLHBlKHQpfSl9ZnVuY3Rpb24gdmUodCxlKXtmb3IodmFyIHI9Um4oZSk7ciE9dC53cmFwcGVyO3I9ci5wYXJlbnROb2RlKWlmKCFyfHxyLmlnbm9yZUV2ZW50c3x8ci5wYXJlbnROb2RlPT10LnNpemVyJiZyIT10Lm1vdmVyKXJldHVybiEwfWZ1bmN0aW9uIHllKHQsZSxyKXt2YXIgbj10LmRpc3BsYXk7aWYoIXIpe3ZhciBpPVJuKGUpO2lmKGk9PW4uc2Nyb2xsYmFySHx8aT09bi5zY3JvbGxiYXJILmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyVnx8aT09bi5zY3JvbGxiYXJWLmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyRmlsbGVyfHxpPT1uLmd1dHRlckZpbGxlcilyZXR1cm4gbnVsbH12YXIgbyxsLHM9Zmkobi5saW5lU3BhY2UpO3RyeXtvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGUodCxvLXMubGVmdCxsLXMudG9wKX1mdW5jdGlvbiBiZSh0KXtmdW5jdGlvbiBlKHQpe2lmKCFqZSh2LHQpKXtpZih2PXQsInNpbmdsZSI9PWMpcmV0dXJuIGVyKGkuZG9jLFFlKGwsYSksdCksdm9pZCAwOwppZihnPVFlKGwsZyksbT1RZShsLG0pLCJkb3VibGUiPT1jKXt2YXIgZT1tcihnbihsLHQubGluZSkudGV4dCx0KTskZSh0LGcpP2VyKGkuZG9jLGUuZnJvbSxtKTplcihpLmRvYyxnLGUudG8pfWVsc2UidHJpcGxlIj09YyYmKCRlKHQsZyk/ZXIoaS5kb2MsbSxRZShsLFllKHQubGluZSwwKSkpOmVyKGkuZG9jLGcsUWUobCxZZSh0LmxpbmUrMSwwKSkpKX19ZnVuY3Rpb24gcih0KXt2YXIgbj0rK2Iscz15ZShpLHQsITApO2lmKHMpaWYoamUocyxoKSl7dmFyIGE9dC5jbGllbnRZPHkudG9wPy0yMDp0LmNsaWVudFk+eS5ib3R0b20/MjA6MDthJiZzZXRUaW1lb3V0KGxlKGksZnVuY3Rpb24oKXtiPT1uJiYoby5zY3JvbGxlci5zY3JvbGxUb3ArPWEscih0KSl9KSw1MCl9ZWxzZXtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpLGg9cyxlKHMpO3ZhciB1PXAobyxsKTsocy5saW5lPj11LnRvfHxzLmxpbmU8dS5mcm9tKSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmcih0KX0pLDE1MCl9fWZ1bmN0aW9uIG4odCl7Yj0xLzAsem4odCkscGUoaSksVm4oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksVm4oZG9jdW1lbnQsIm1vdXNldXAiLEMpfWlmKCFYbih0aGlzLHQpKXt2YXIgaT10aGlzLG89aS5kaXNwbGF5LGw9aS5kb2Mscz1sLnNlbDtpZihzLnNoaWZ0PXQuc2hpZnRLZXksdmUobyx0KSlyZXR1cm4gV2l8fChvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5zY3JvbGxlci5kcmFnZ2FibGU9ITB9LDEwMCkpLHZvaWQgMDtpZighd2UoaSx0KSl7dmFyIGE9eWUoaSx0KTtzd2l0Y2goQm4odCkpe2Nhc2UgMzpyZXR1cm4gWmkmJkllLmNhbGwoaSxpLHQpLHZvaWQgMDtjYXNlIDI6cmV0dXJuIFdpJiYoaS5zdGF0ZS5sYXN0TWlkZGxlRG93bj0rbmV3IERhdGUpLGEmJmVyKGkuZG9jLGEpLHNldFRpbWVvdXQoaWkocGUsaSksMjApLHpuKHQpLHZvaWQgMH1pZighYSlyZXR1cm4gUm4odCk9PW8uc2Nyb2xsZXImJnpuKHQpLHZvaWQgMDtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpO3ZhciB1PStuZXcgRGF0ZSxjPSJzaW5nbGUiO2lmKGppJiZqaS50aW1lPnUtNDAwJiZqZShqaS5wb3MsYSkpYz0idHJpcGxlIix6bih0KSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx2cihpLGEubGluZSk7ZWxzZSBpZihZaSYmWWkudGltZT51LTQwMCYmamUoWWkucG9zLGEpKXtjPSJkb3VibGUiLGppPXt0aW1lOnUscG9zOmF9LHpuKHQpO3ZhciBmPW1yKGduKGwsYS5saW5lKS50ZXh0LGEpO2VyKGkuZG9jLGYuZnJvbSxmLnRvKX1lbHNlIFlpPXt0aW1lOnUscG9zOmF9O3ZhciBoPWE7aWYoaS5vcHRpb25zLmRyYWdEcm9wJiZXbyYmIWdlKGkpJiYhamUocy5mcm9tLHMudG8pJiYhJGUoYSxzLmZyb20pJiYhJGUocy50byxhKSYmInNpbmdsZSI9PWMpe3ZhciBkPWxlKGksZnVuY3Rpb24oZSl7V2kmJihvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSksaS5zdGF0ZS5kcmFnZ2luZ1RleHQ9ITEsVm4oZG9jdW1lbnQsIm1vdXNldXAiLGQpLFZuKG8uc2Nyb2xsZXIsImRyb3AiLGQpLE1hdGguYWJzKHQuY2xpZW50WC1lLmNsaWVudFgpK01hdGguYWJzKHQuY2xpZW50WS1lLmNsaWVudFkpPDEwJiYoem4oZSksZXIoaS5kb2MsYSkscGUoaSkpfSk7cmV0dXJuIFdpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITApLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PWQsby5zY3JvbGxlci5kcmFnRHJvcCYmby5zY3JvbGxlci5kcmFnRHJvcCgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixkKSxHbihvLnNjcm9sbGVyLCJkcm9wIixkKSx2b2lkIDB9em4odCksInNpbmdsZSI9PWMmJmVyKGkuZG9jLFFlKGwsYSkpO3ZhciBnPXMuZnJvbSxtPXMudG8sdj1hLHk9Zmkoby53cmFwcGVyKSxiPTAseD1sZShpLGZ1bmN0aW9uKHQpe0FpfHxCbih0KT9yKHQpOm4odCl9KSxDPWxlKGksbik7R24oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksR24oZG9jdW1lbnQsIm1vdXNldXAiLEMpfX19ZnVuY3Rpb24geGUodCxlLHIsbixpKXt0cnl7dmFyIG89ZS5jbGllbnRYLGw9ZS5jbGllbnRZfWNhdGNoKGUpe3JldHVybiExfWlmKG8+PU1hdGguZmxvb3IoZmkodC5kaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSlyZXR1cm4hMTtuJiZ6bihlKTt2YXIgcz10LmRpc3BsYXksYT1maShzLmxpbmVEaXYpO2lmKGw+YS5ib3R0b218fCFZbih0LHIpKXJldHVybiBGbihlKTtsLT1hLnRvcC1zLnZpZXdPZmZzZXQ7Zm9yKHZhciB1PTA7dTx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt1KXt2YXIgYz1zLmd1dHRlcnMuY2hpbGROb2Rlc1t1XTtpZihjJiZmaShjKS5yaWdodD49byl7dmFyIGY9eG4odC5kb2MsbCksaD10Lm9wdGlvbnMuZ3V0dGVyc1t1XTtyZXR1cm4gaSh0LHIsdCxmLGgsZSksRm4oZSl9fX1mdW5jdGlvbiBDZSh0LGUpe3JldHVybiBZbih0LCJndXR0ZXJDb250ZXh0TWVudSIpP3hlKHQsZSwiZ3V0dGVyQ29udGV4dE1lbnUiLCExLEtuKTohMX1mdW5jdGlvbiB3ZSh0LGUpe3JldHVybiB4ZSh0LGUsImd1dHRlckNsaWNrIiwhMCxVbil9ZnVuY3Rpb24gTGUodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fHZlKGUuZGlzcGxheSx0KXx8ZS5vcHRpb25zLm9uRHJhZ0V2ZW50JiZlLm9wdGlvbnMub25EcmFnRXZlbnQoZSxFbih0KSkpKXt6bih0KSxBaSYmKHRvPStuZXcgRGF0ZSk7dmFyIHI9eWUoZSx0LCEwKSxuPXQuZGF0YVRyYW5zZmVyLmZpbGVzO2lmKHImJiFnZShlKSlpZihuJiZuLmxlbmd0aCYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlKWZvcih2YXIgaT1uLmxlbmd0aCxvPUFycmF5KGkpLGw9MCxzPWZ1bmN0aW9uKHQsbil7dmFyIHM9bmV3IEZpbGVSZWFkZXI7cy5vbmxvYWQ9ZnVuY3Rpb24oKXtvW25dPXMucmVzdWx0LCsrbD09aSYmKHI9UWUoZS5kb2MsciksQmUoZS5kb2Mse2Zyb206cix0bzpyLHRleHQ6em8oby5qb2luKCJcbiIpKSxvcmlnaW46InBhc3RlIn0sImFyb3VuZCIpKX0scy5yZWFkQXNUZXh0KHQpfSxhPTA7aT5hOysrYSlzKG5bYV0sYSk7ZWxzZXtpZihlLnN0YXRlLmRyYWdnaW5nVGV4dCYmISRlKHIsZS5kb2Muc2VsLmZyb20pJiYhJGUoZS5kb2Muc2VsLnRvLHIpKXJldHVybiBlLnN0YXRlLmRyYWdnaW5nVGV4dCh0KSxzZXRUaW1lb3V0KGlpKHBlLGUpLDIwKSx2b2lkIDA7dHJ5e3ZhciBvPXQuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTtpZihvKXt2YXIgdT1lLmRvYy5zZWwuZnJvbSxjPWUuZG9jLnNlbC50bztucihlLmRvYyxyLHIpLGUuc3RhdGUuZHJhZ2dpbmdUZXh0JiZfZShlLmRvYywiIix1LGMsInBhc3RlIiksZS5yZXBsYWNlU2VsZWN0aW9uKG8sbnVsbCwicGFzdGUiKSxwZShlKX19Y2F0Y2godCl7fX19fWZ1bmN0aW9uIGtlKHQsZSl7aWYoQWkmJighdC5zdGF0ZS5kcmFnZ2luZ1RleHR8fCtuZXcgRGF0ZS10bzwxMDApKXJldHVybiBQbihlKSx2b2lkIDA7aWYoIVhuKHQsZSkmJiF2ZSh0LmRpc3BsYXksZSkpe3ZhciByPXQuZ2V0U2VsZWN0aW9uKCk7aWYoZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsciksZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlJiYhSWkpe3ZhciBuPXNpKCJpbWciLG51bGwsbnVsbCwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7bi5zcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09Iix6aSYmKG4ud2lkdGg9bi5oZWlnaHQ9MSx0LmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChuKSxuLl90b3A9bi5vZmZzZXRUb3ApLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLDAsMCksemkmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX19fWZ1bmN0aW9uIFNlKHQsZSl7TWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWUpPDJ8fCh0LmRvYy5zY3JvbGxUb3A9ZSxUaXx8Yih0LFtdLGUpLHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wPWUpLHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1lKSxUaSYmYih0LFtdKSxXKHQsMTAwKSl9ZnVuY3Rpb24gTWUodCxlLHIpeyhyP2U9PXQuZG9jLnNjcm9sbExlZnQ6TWF0aC5hYnModC5kb2Muc2Nyb2xsTGVmdC1lKTwyKXx8KGU9TWF0aC5taW4oZSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKSx0LmRvYy5zY3JvbGxMZWZ0PWUsZyh0KSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0PWUpLHQuZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PWUpKX1mdW5jdGlvbiBUZSh0LGUpe3ZhciByPWUud2hlZWxEZWx0YVgsbj1lLndoZWVsRGVsdGFZO251bGw9PXImJmUuZGV0YWlsJiZlLmF4aXM9PWUuSE9SSVpPTlRBTF9BWElTJiYocj1lLmRldGFpbCksbnVsbD09biYmZS5kZXRhaWwmJmUuYXhpcz09ZS5WRVJUSUNBTF9BWElTP249ZS5kZXRhaWw6bnVsbD09biYmKG49ZS53aGVlbERlbHRhKTt2YXIgaT10LmRpc3BsYXksbz1pLnNjcm9sbGVyO2lmKHImJm8uc2Nyb2xsV2lkdGg+by5jbGllbnRXaWR0aHx8biYmby5zY3JvbGxIZWlnaHQ+by5jbGllbnRIZWlnaHQpe2lmKG4mJktpJiZXaSlmb3IodmFyIGw9ZS50YXJnZXQ7bCE9bztsPWwucGFyZW50Tm9kZSlpZihsLmxpbmVPYmope3QuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQ9bDticmVha31pZihyJiYhVGkmJiF6aSYmbnVsbCE9cm8pcmV0dXJuIG4mJlNlKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbFRvcCtuKnJvLG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0KSkpLE1lKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbExlZnQrcipybyxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgpKSksem4oZSksaS53aGVlbFN0YXJ0WD1udWxsLHZvaWQgMDtpZihuJiZudWxsIT1ybyl7dmFyIHM9bipybyxhPXQuZG9jLnNjcm9sbFRvcCx1PWEraS53cmFwcGVyLmNsaWVudEhlaWdodDswPnM/YT1NYXRoLm1heCgwLGErcy01MCk6dT1NYXRoLm1pbih0LmRvYy5oZWlnaHQsdStzKzUwKSxiKHQsW10se3RvcDphLGJvdHRvbTp1fSl9MjA+ZW8mJihudWxsPT1pLndoZWVsU3RhcnRYPyhpLndoZWVsU3RhcnRYPW8uc2Nyb2xsTGVmdCxpLndoZWVsU3RhcnRZPW8uc2Nyb2xsVG9wLGkud2hlZWxEWD1yLGkud2hlZWxEWT1uLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihudWxsIT1pLndoZWVsU3RhcnRYKXt2YXIgdD1vLnNjcm9sbExlZnQtaS53aGVlbFN0YXJ0WCxlPW8uc2Nyb2xsVG9wLWkud2hlZWxTdGFydFkscj1lJiZpLndoZWVsRFkmJmUvaS53aGVlbERZfHx0JiZpLndoZWVsRFgmJnQvaS53aGVlbERYO2kud2hlZWxTdGFydFg9aS53aGVlbFN0YXJ0WT1udWxsLHImJihybz0ocm8qZW8rcikvKGVvKzEpLCsrZW8pfX0sMjAwKSk6KGkud2hlZWxEWCs9cixpLndoZWVsRFkrPW4pKX19ZnVuY3Rpb24gQWUodCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9bW9bZV0sIWUpKXJldHVybiExO3QuZGlzcGxheS5wb2xsaW5nRmFzdCYmaGUodCkmJih0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEpO3ZhciBuPXQuZG9jLGk9bi5zZWwuc2hpZnQsbz0hMTt0cnl7Z2UodCkmJih0LnN0YXRlLnN1cHByZXNzRWRpdHM9ITApLHImJihuLnNlbC5zaGlmdD0hMSksbz1lKHQpIT1Bb31maW5hbGx5e24uc2VsLnNoaWZ0PWksdC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSExfXJldHVybiBvfWZ1bmN0aW9uIEhlKHQpe3ZhciBlPXQuc3RhdGUua2V5TWFwcy5zbGljZSgwKTtyZXR1cm4gdC5vcHRpb25zLmV4dHJhS2V5cyYmZS5wdXNoKHQub3B0aW9ucy5leHRyYUtleXMpLGUucHVzaCh0Lm9wdGlvbnMua2V5TWFwKSxlfWZ1bmN0aW9uIE5lKHQsZSl7dmFyIHI9Q3IodC5vcHRpb25zLmtleU1hcCksbj1yLmF1dG87Y2xlYXJUaW1lb3V0KG5vKSxuJiYhTHIoZSkmJihubz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Q3IodC5vcHRpb25zLmtleU1hcCk9PXImJih0Lm9wdGlvbnMua2V5TWFwPW4uY2FsbD9uLmNhbGwobnVsbCx0KTpuLGwodCkpfSw1MCkpO3ZhciBpPWtyKGUsITApLG89ITE7aWYoIWkpcmV0dXJuITE7dmFyIHM9SGUodCk7cmV0dXJuIG89ZS5zaGlmdEtleT93cigiU2hpZnQtIitpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KXx8d3IoaSxzLGZ1bmN0aW9uKGUpe3JldHVybigic3RyaW5nIj09dHlwZW9mIGU/L15nb1tBLVpdLy50ZXN0KGUpOmUubW90aW9uKT9BZSh0LGUpOnZvaWQgMH0pOndyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4gQWUodCxlKX0pLG8mJih6bihlKSxEKHQpLE5pJiYoZS5vbGRLZXlDb2RlPWUua2V5Q29kZSxlLmtleUNvZGU9MCksVW4odCwia2V5SGFuZGxlZCIsdCxpLGUpKSxvfWZ1bmN0aW9uIERlKHQsZSxyKXt2YXIgbj13cigiJyIrcisiJyIsSGUodCksZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KTtyZXR1cm4gbiYmKHpuKGUpLEQodCksVW4odCwia2V5SGFuZGxlZCIsdCwiJyIrcisiJyIsZSkpLG59ZnVuY3Rpb24gV2UodCl7dmFyIGU9dGhpcztpZihlLnN0YXRlLmZvY3VzZWR8fEVlKGUpLCEoWG4oZSx0KXx8ZS5vcHRpb25zLm9uS2V5RXZlbnQmJmUub3B0aW9ucy5vbktleUV2ZW50KGUsRW4odCkpKSl7QWkmJjI3PT10LmtleUNvZGUmJih0LnJldHVyblZhbHVlPSExKTt2YXIgcj10LmtleUNvZGU7ZS5kb2Muc2VsLnNoaWZ0PTE2PT1yfHx0LnNoaWZ0S2V5O3ZhciBuPU5lKGUsdCk7emkmJihvbz1uP3I6bnVsbCwhbiYmODg9PXImJiFGbyYmKEtpP3QubWV0YUtleTp0LmN0cmxLZXkpJiZlLnJlcGxhY2VTZWxlY3Rpb24oIiIpKX19ZnVuY3Rpb24gT2UodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe3ZhciByPXQua2V5Q29kZSxuPXQuY2hhckNvZGU7aWYoemkmJnI9PW9vKXJldHVybiBvbz1udWxsLHpuKHQpLHZvaWQgMDtpZighKHppJiYoIXQud2hpY2h8fHQud2hpY2g8MTApfHxGaSl8fCFOZShlLHQpKXt2YXIgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PW4/cjpuKTt0aGlzLm9wdGlvbnMuZWxlY3RyaWNDaGFycyYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzJiZ0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQmJiFnZSh0aGlzKSYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzLmluZGV4T2YoaSk+LTEmJnNldFRpbWVvdXQobGUoZSxmdW5jdGlvbigpe2hyKGUsZS5kb2Muc2VsLnRvLmxpbmUsInNtYXJ0Iil9KSw3NSksRGUoZSx0LGkpfHwoQWkmJiFOaSYmKGUuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSxmZShlKSl9fX1mdW5jdGlvbiBFZSh0KXsibm9jdXJzb3IiIT10Lm9wdGlvbnMucmVhZE9ubHkmJih0LnN0YXRlLmZvY3VzZWR8fChLbih0LCJmb2N1cyIsdCksdC5zdGF0ZS5mb2N1c2VkPSEwLC0xPT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNvZGVNaXJyb3ItZm9jdXNlZFxiLykmJih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci1mb2N1c2VkIiksdC5jdXJPcHx8KGRlKHQsITApLFdpJiZzZXRUaW1lb3V0KGlpKGRlLHQsITApLDApKSksY2UodCksRCh0KSl9ZnVuY3Rpb24gemUodCl7dC5zdGF0ZS5mb2N1c2VkJiYoS24odCwiYmx1ciIsdCksdC5zdGF0ZS5mb2N1c2VkPSExLHQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3ItZm9jdXNlZCIsIiIpKSxjbGVhckludGVydmFsKHQuZGlzcGxheS5ibGlua2VyKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zdGF0ZS5mb2N1c2VkfHwodC5kb2Muc2VsLnNoaWZ0PSExKX0sMTUwKX1mdW5jdGlvbiBJZSh0LGUpe2Z1bmN0aW9uIHIoKXtpZihudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXt2YXIgdD1pLmlucHV0LnZhbHVlPSLigIsiKyhqZShvLmZyb20sby50byk/IiI6aS5pbnB1dC52YWx1ZSk7aS5wcmV2SW5wdXQ9IuKAiyIsaS5pbnB1dC5zZWxlY3Rpb25TdGFydD0xLGkuaW5wdXQuc2VsZWN0aW9uRW5kPXQubGVuZ3RofX1mdW5jdGlvbiBuKCl7aWYoaS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGkuaW5wdXQuc3R5bGUuY3NzVGV4dD11LE5pJiYoaS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1pLnNjcm9sbGVyLnNjcm9sbFRvcD1zKSxjZSh0KSxudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXsoIUFpfHxOaSkmJnIoKSxjbGVhclRpbWVvdXQoaW8pO3ZhciBlPTAsbj1mdW5jdGlvbigpeyIgIj09aS5wcmV2SW5wdXQmJjA9PWkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ/bGUodCxtby5zZWxlY3RBbGwpKHQpOmUrKzwxMD9pbz1zZXRUaW1lb3V0KG4sNTAwKTpkZSh0KX07aW89c2V0VGltZW91dChuLDIwMCl9fWlmKCFYbih0LGUsImNvbnRleHRtZW51Iikpe3ZhciBpPXQuZGlzcGxheSxvPXQuZG9jLnNlbDtpZighdmUoaSxlKSYmIUNlKHQsZSkpe3ZhciBsPXllKHQsZSkscz1pLnNjcm9sbGVyLnNjcm9sbFRvcDtpZihsJiYhemkpe3ZhciBhPXQub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnU7YSYmKGplKG8uZnJvbSxvLnRvKXx8JGUobCxvLmZyb20pfHwhJGUobCxvLnRvKSkmJmxlKHQsbnIpKHQuZG9jLGwsbCk7dmFyIHU9aS5pbnB1dC5zdHlsZS5jc3NUZXh0O2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9wOiAiKyhlLmNsaWVudFktNSkrInB4OyBsZWZ0OiAiKyhlLmNsaWVudFgtNSkrInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgb3V0bGluZTogbm9uZTsiKyJib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgLW1zLW9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyIscGUodCksZGUodCwhMCksamUoby5mcm9tLG8udG8pJiYoaS5pbnB1dC52YWx1ZT1pLnByZXZJbnB1dD0iICIpLEFpJiYhTmkmJnIoKSxaaSl7UG4oZSk7dmFyIGM9ZnVuY3Rpb24oKXtWbih3aW5kb3csIm1vdXNldXAiLGMpLHNldFRpbWVvdXQobiwyMCl9O0duKHdpbmRvdywibW91c2V1cCIsYyl9ZWxzZSBzZXRUaW1lb3V0KG4sNTApfX19fWZ1bmN0aW9uIEZlKHQsZSxyKXtpZighJGUoZS5mcm9tLHIpKXJldHVybiBRZSh0LHIpO3ZhciBuPWUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKTtpZihyLmxpbmU+ZS50by5saW5lK24pe3ZhciBpPXIubGluZS1uLG89dC5maXJzdCt0LnNpemUtMTtyZXR1cm4gaT5vP1llKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCk6SmUocixnbih0LGkpLnRleHQubGVuZ3RoKX1pZihyLmxpbmU9PWUudG8ubGluZStuKXJldHVybiBKZShyLFFuKGUudGV4dCkubGVuZ3RoKygxPT1lLnRleHQubGVuZ3RoP2UuZnJvbS5jaDowKStnbih0LGUudG8ubGluZSkudGV4dC5sZW5ndGgtZS50by5jaCk7dmFyIGw9ci5saW5lLWUuZnJvbS5saW5lO3JldHVybiBKZShyLGUudGV4dFtsXS5sZW5ndGgrKGw/MDplLmZyb20uY2gpKX1mdW5jdGlvbiBQZSh0LGUscil7aWYociYmIm9iamVjdCI9PXR5cGVvZiByKXJldHVybnthbmNob3I6RmUodCxlLHIuYW5jaG9yKSxoZWFkOkZlKHQsZSxyLmhlYWQpfTtpZigic3RhcnQiPT1yKXJldHVybnthbmNob3I6ZS5mcm9tLGhlYWQ6ZS5mcm9tfTt2YXIgbj1sbyhlKTtpZigiYXJvdW5kIj09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOm59O2lmKCJlbmQiPT1yKXJldHVybnthbmNob3I6bixoZWFkOm59O3ZhciBpPWZ1bmN0aW9uKHQpe2lmKCRlKHQsZS5mcm9tKSlyZXR1cm4gdDtpZighJGUoZS50byx0KSlyZXR1cm4gbjt2YXIgcj10LmxpbmUrZS50ZXh0Lmxlbmd0aC0oZS50by5saW5lLWUuZnJvbS5saW5lKS0xLGk9dC5jaDtyZXR1cm4gdC5saW5lPT1lLnRvLmxpbmUmJihpKz1uLmNoLWUudG8uY2gpLFllKHIsaSl9O3JldHVybnthbmNob3I6aSh0LnNlbC5hbmNob3IpLGhlYWQ6aSh0LnNlbC5oZWFkKX19ZnVuY3Rpb24gUmUodCxlLHIpe3ZhciBuPXtjYW5jZWxlZDohMSxmcm9tOmUuZnJvbSx0bzplLnRvLHRleHQ6ZS50ZXh0LG9yaWdpbjplLm9yaWdpbixjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGVkPSEwfX07cmV0dXJuIHImJihuLnVwZGF0ZT1mdW5jdGlvbihlLHIsbixpKXtlJiYodGhpcy5mcm9tPVFlKHQsZSkpLHImJih0aGlzLnRvPVFlKHQscikpLG4mJih0aGlzLnRleHQ9biksdm9pZCAwIT09aSYmKHRoaXMub3JpZ2luPWkpfSksS24odCwiYmVmb3JlQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZUNoYW5nZSIsdC5jbSxuKSxuLmNhbmNlbGVkP251bGw6e2Zyb206bi5mcm9tLHRvOm4udG8sdGV4dDpuLnRleHQsb3JpZ2luOm4ub3JpZ2lufX1mdW5jdGlvbiBCZSh0LGUscixuKXtpZih0LmNtKXtpZighdC5jbS5jdXJPcClyZXR1cm4gbGUodC5jbSxCZSkodCxlLHIsbik7aWYodC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXJldHVybn1pZighKFluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSl8fChlPVJlKHQsZSwhMCkpKXt2YXIgaT1xaSYmIW4mJkZyKHQsZS5mcm9tLGUudG8pO2lmKGkpe2Zvcih2YXIgbz1pLmxlbmd0aC0xO28+PTE7LS1vKUdlKHQse2Zyb206aVtvXS5mcm9tLHRvOmlbb10udG8sdGV4dDpbIiJdfSk7aS5sZW5ndGgmJkdlKHQse2Zyb206aVswXS5mcm9tLHRvOmlbMF0udG8sdGV4dDplLnRleHR9LHIpfWVsc2UgR2UodCxlLHIpfX1mdW5jdGlvbiBHZSh0LGUscil7aWYoMSE9ZS50ZXh0Lmxlbmd0aHx8IiIhPWUudGV4dFswXXx8IWplKGUuZnJvbSxlLnRvKSl7dmFyIG49UGUodCxlLHIpO01uKHQsZSxuLHQuY20/dC5jbS5jdXJPcC5pZDowLzApLFVlKHQsZSxuLHpyKHQsZSkpO3ZhciBpPVtdO2RuKHQsZnVuY3Rpb24odCxyKXtyfHwtMSE9dGkoaSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LGUpLGkucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LGUsbnVsbCx6cih0LGUpKX0pfX1mdW5jdGlvbiBWZSh0LGUpe2lmKCF0LmNtfHwhdC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXt2YXIgcj10Lmhpc3Rvcnksbj0oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkucG9wKCk7aWYobil7dmFyIGk9e2NoYW5nZXM6W10sYW5jaG9yQmVmb3JlOm4uYW5jaG9yQWZ0ZXIsaGVhZEJlZm9yZTpuLmhlYWRBZnRlcixhbmNob3JBZnRlcjpuLmFuY2hvckJlZm9yZSxoZWFkQWZ0ZXI6bi5oZWFkQmVmb3JlLGdlbmVyYXRpb246ci5nZW5lcmF0aW9ufTsoInVuZG8iPT1lP3IudW5kb25lOnIuZG9uZSkucHVzaChpKSxyLmdlbmVyYXRpb249bi5nZW5lcmF0aW9ufHwrK3IubWF4R2VuZXJhdGlvbjtmb3IodmFyIG89WW4odCwiYmVmb3JlQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZUNoYW5nZSIpLGw9bi5jaGFuZ2VzLmxlbmd0aC0xO2w+PTA7LS1sKXt2YXIgcz1uLmNoYW5nZXNbbF07aWYocy5vcmlnaW49ZSxvJiYhUmUodCxzLCExKSlyZXR1cm4oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkubGVuZ3RoPTAsdm9pZCAwO2kuY2hhbmdlcy5wdXNoKFNuKHQscykpO3ZhciBhPWw/UGUodCxzLG51bGwpOnthbmNob3I6bi5hbmNob3JCZWZvcmUsaGVhZDpuLmhlYWRCZWZvcmV9O1VlKHQscyxhLElyKHQscykpO3ZhciB1PVtdO2RuKHQsZnVuY3Rpb24odCxlKXtlfHwtMSE9dGkodSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LHMpLHUucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LHMsbnVsbCxJcih0LHMpKX0pfX19fWZ1bmN0aW9uIEtlKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gWWUodC5saW5lK2UsdC5jaCl9dC5maXJzdCs9ZSx0LmNtJiZ1ZSh0LmNtLHQuZmlyc3QsdC5maXJzdCxlKSx0LnNlbC5oZWFkPXIodC5zZWwuaGVhZCksdC5zZWwuYW5jaG9yPXIodC5zZWwuYW5jaG9yKSx0LnNlbC5mcm9tPXIodC5zZWwuZnJvbSksdC5zZWwudG89cih0LnNlbC50byl9ZnVuY3Rpb24gVWUodCxlLHIsbil7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVWUpKHQsZSxyLG4pO2lmKGUudG8ubGluZTx0LmZpcnN0KXJldHVybiBLZSh0LGUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKSksdm9pZCAwO2lmKCEoZS5mcm9tLmxpbmU+dC5sYXN0TGluZSgpKSl7aWYoZS5mcm9tLmxpbmU8dC5maXJzdCl7dmFyIGk9ZS50ZXh0Lmxlbmd0aC0xLSh0LmZpcnN0LWUuZnJvbS5saW5lKTtLZSh0LGkpLGU9e2Zyb206WWUodC5maXJzdCwwKSx0bzpZZShlLnRvLmxpbmUraSxlLnRvLmNoKSx0ZXh0OltRbihlLnRleHQpXSxvcmlnaW46ZS5vcmlnaW59fXZhciBvPXQubGFzdExpbmUoKTtlLnRvLmxpbmU+byYmKGU9e2Zyb206ZS5mcm9tLHRvOlllKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCksdGV4dDpbZS50ZXh0WzBdXSxvcmlnaW46ZS5vcmlnaW59KSxlLnJlbW92ZWQ9bW4odCxlLmZyb20sZS50bykscnx8KHI9UGUodCxlLG51bGwpKSx0LmNtP1hlKHQuY20sZSxuLHIpOmNuKHQsZSxuLHIpfX1mdW5jdGlvbiBYZSh0LGUscixuKXt2YXIgbz10LmRvYyxsPXQuZGlzcGxheSxzPWUuZnJvbSxhPWUudG8sdT0hMSxmPXMubGluZTt0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoZj1ibihHcihvLGduKG8scy5saW5lKSkpLG8uaXRlcihmLGEubGluZSsxLGZ1bmN0aW9uKHQpe3JldHVybiB0PT1sLm1heExpbmU/KHU9ITAsITApOnZvaWQgMH0pKSwkZShvLnNlbC5oZWFkLGUuZnJvbSl8fCRlKGUudG8sby5zZWwuaGVhZCl8fCh0LmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxjbihvLGUscixuLGkodCkpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fChvLml0ZXIoZixzLmxpbmUrZS50ZXh0Lmxlbmd0aCxmdW5jdGlvbih0KXt2YXIgZT1jKG8sdCk7ZT5sLm1heExpbmVMZW5ndGgmJihsLm1heExpbmU9dCxsLm1heExpbmVMZW5ndGg9ZSxsLm1heExpbmVDaGFuZ2VkPSEwLHU9ITEpfSksdSYmKHQuY3VyT3AudXBkYXRlTWF4TGluZT0hMCkpLG8uZnJvbnRpZXI9TWF0aC5taW4oby5mcm9udGllcixzLmxpbmUpLFcodCw0MDApO3ZhciBoPWUudGV4dC5sZW5ndGgtKGEubGluZS1zLmxpbmUpLTE7aWYodWUodCxzLmxpbmUsYS5saW5lKzEsaCksWW4odCwiY2hhbmdlIikpe3ZhciBkPXtmcm9tOnMsdG86YSx0ZXh0OmUudGV4dCxyZW1vdmVkOmUucmVtb3ZlZCxvcmlnaW46ZS5vcmlnaW59O2lmKHQuY3VyT3AudGV4dENoYW5nZWQpe2Zvcih2YXIgcD10LmN1ck9wLnRleHRDaGFuZ2VkO3AubmV4dDtwPXAubmV4dCk7cC5uZXh0PWR9ZWxzZSB0LmN1ck9wLnRleHRDaGFuZ2VkPWR9fWZ1bmN0aW9uIF9lKHQsZSxyLG4saSl7aWYobnx8KG49ciksJGUobixyKSl7dmFyIG89bjtuPXIscj1vfSJzdHJpbmciPT10eXBlb2YgZSYmKGU9em8oZSkpLEJlKHQse2Zyb206cix0bzpuLHRleHQ6ZSxvcmlnaW46aX0sbnVsbCl9ZnVuY3Rpb24gWWUodCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFllPyh0aGlzLmxpbmU9dCx0aGlzLmNoPWUsdm9pZCAwKTpuZXcgWWUodCxlKX1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiB0LmxpbmU9PWUubGluZSYmdC5jaD09ZS5jaH1mdW5jdGlvbiAkZSh0LGUpe3JldHVybiB0LmxpbmU8ZS5saW5lfHx0LmxpbmU9PWUubGluZSYmdC5jaDxlLmNofWZ1bmN0aW9uIFplKHQpe3JldHVybiBZZSh0LmxpbmUsdC5jaCl9ZnVuY3Rpb24gcWUodCxlKXtyZXR1cm4gTWF0aC5tYXgodC5maXJzdCxNYXRoLm1pbihlLHQuZmlyc3QrdC5zaXplLTEpKX1mdW5jdGlvbiBRZSh0LGUpe2lmKGUubGluZTx0LmZpcnN0KXJldHVybiBZZSh0LmZpcnN0LDApO3ZhciByPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGUubGluZT5yP1llKHIsZ24odCxyKS50ZXh0Lmxlbmd0aCk6SmUoZSxnbih0LGUubGluZSkudGV4dC5sZW5ndGgpfWZ1bmN0aW9uIEplKHQsZSl7dmFyIHI9dC5jaDtyZXR1cm4gbnVsbD09cnx8cj5lP1llKHQubGluZSxlKTowPnI/WWUodC5saW5lLDApOnR9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gZT49dC5maXJzdCYmZTx0LmZpcnN0K3Quc2l6ZX1mdW5jdGlvbiBlcih0LGUscixuKXtpZih0LnNlbC5zaGlmdHx8dC5zZWwuZXh0ZW5kKXt2YXIgaT10LnNlbC5hbmNob3I7aWYocil7dmFyIG89JGUoZSxpKTtvIT0kZShyLGkpPyhpPWUsZT1yKTpvIT0kZShlLHIpJiYoZT1yKX1ucih0LGksZSxuKX1lbHNlIG5yKHQsZSxyfHxlLG4pO3QuY20mJih0LmNtLmN1ck9wLnVzZXJTZWxDaGFuZ2U9ITApfWZ1bmN0aW9uIHJyKHQsZSxyKXt2YXIgbj17YW5jaG9yOmUsaGVhZDpyfTtyZXR1cm4gS24odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdC5jbSxuKSxuLmFuY2hvcj1RZSh0LG4uYW5jaG9yKSxuLmhlYWQ9UWUodCxuLmhlYWQpLG59ZnVuY3Rpb24gbnIodCxlLHIsbixpKXtpZighaSYmWW4odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpKXt2YXIgbz1ycih0LGUscik7cj1vLmhlYWQsZT1vLmFuY2hvcn12YXIgbD10LnNlbDtpZihsLmdvYWxDb2x1bW49bnVsbCxudWxsPT1uJiYobj0kZShyLGwuaGVhZCk/LTE6MSksKGl8fCFqZShlLGwuYW5jaG9yKSkmJihlPW9yKHQsZSxuLCJwdXNoIiE9aSkpLChpfHwhamUocixsLmhlYWQpKSYmKHI9b3IodCxyLG4sInB1c2giIT1pKSksIWplKGwuYW5jaG9yLGUpfHwhamUobC5oZWFkLHIpKXtsLmFuY2hvcj1lLGwuaGVhZD1yO3ZhciBzPSRlKHIsZSk7bC5mcm9tPXM/cjplLGwudG89cz9lOnIsdC5jbSYmKHQuY20uY3VyT3AudXBkYXRlSW5wdXQ9dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPXQuY20uY3VyT3AuY3Vyc29yQWN0aXZpdHk9ITApLFVuKHQsImN1cnNvckFjdGl2aXR5Iix0KX19ZnVuY3Rpb24gaXIodCl7bnIodC5kb2MsdC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvLG51bGwsInB1c2giKX1mdW5jdGlvbiBvcih0LGUscixuKXt2YXIgaT0hMSxvPWUsbD1yfHwxO3QuY2FudEVkaXQ9ITE7dDpmb3IoOzspe3ZhciBzPWduKHQsby5saW5lKTtpZihzLm1hcmtlZFNwYW5zKWZvcih2YXIgYT0wO2E8cy5tYXJrZWRTcGFucy5sZW5ndGg7KythKXt2YXIgdT1zLm1hcmtlZFNwYW5zW2FdLGM9dS5tYXJrZXI7aWYoKG51bGw9PXUuZnJvbXx8KGMuaW5jbHVzaXZlTGVmdD91LmZyb208PW8uY2g6dS5mcm9tPG8uY2gpKSYmKG51bGw9PXUudG98fChjLmluY2x1c2l2ZVJpZ2h0P3UudG8+PW8uY2g6dS50bz5vLmNoKSkpe2lmKG4mJihLbihjLCJiZWZvcmVDdXJzb3JFbnRlciIpLGMuZXhwbGljaXRseUNsZWFyZWQpKXtpZihzLm1hcmtlZFNwYW5zKXstLWE7Y29udGludWV9YnJlYWt9aWYoIWMuYXRvbWljKWNvbnRpbnVlO3ZhciBmPWMuZmluZCgpWzA+bD8iZnJvbSI6InRvIl07aWYoamUoZixvKSYmKGYuY2grPWwsZi5jaDwwP2Y9Zi5saW5lPnQuZmlyc3Q/UWUodCxZZShmLmxpbmUtMSkpOm51bGw6Zi5jaD5zLnRleHQubGVuZ3RoJiYoZj1mLmxpbmU8dC5maXJzdCt0LnNpemUtMT9ZZShmLmxpbmUrMSwwKTpudWxsKSwhZikpe2lmKGkpcmV0dXJuIG4/KHQuY2FudEVkaXQ9ITAsWWUodC5maXJzdCwwKSk6b3IodCxlLHIsITApO2k9ITAsZj1lLGw9LWx9bz1mO2NvbnRpbnVlIHR9fXJldHVybiBvfX1mdW5jdGlvbiBscih0KXt2YXIgZT1zcih0LHQuZG9jLnNlbC5oZWFkLG51bGwsdC5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbik7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgcj10LmRpc3BsYXksbj1maShyLnNpemVyKSxpPW51bGw7aWYoZS50b3Arbi50b3A8MD9pPSEwOmUuYm90dG9tK24udG9wPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoaT0hMSksbnVsbCE9aSYmIUJpKXt2YXIgbz0ibm9uZSI9PXIuY3Vyc29yLnN0eWxlLmRpc3BsYXk7byYmKHIuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5jdXJzb3Iuc3R5bGUubGVmdD1lLmxlZnQrInB4IixyLmN1cnNvci5zdHlsZS50b3A9ZS50b3Atci52aWV3T2Zmc2V0KyJweCIpLHIuY3Vyc29yLnNjcm9sbEludG9WaWV3KGkpLG8mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIil9fX1mdW5jdGlvbiBzcih0LGUscixuKXtmb3IobnVsbD09biYmKG49MCk7Oyl7dmFyIGk9ITEsbz1RKHQsZSksbD1yJiZyIT1lP1EodCxyKTpvLHM9dXIodCxNYXRoLm1pbihvLmxlZnQsbC5sZWZ0KSxNYXRoLm1pbihvLnRvcCxsLnRvcCktbixNYXRoLm1heChvLmxlZnQsbC5sZWZ0KSxNYXRoLm1heChvLmJvdHRvbSxsLmJvdHRvbSkrbiksYT10LmRvYy5zY3JvbGxUb3AsdT10LmRvYy5zY3JvbGxMZWZ0O2lmKG51bGwhPXMuc2Nyb2xsVG9wJiYoU2UodCxzLnNjcm9sbFRvcCksTWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWEpPjEmJihpPSEwKSksbnVsbCE9cy5zY3JvbGxMZWZ0JiYoTWUodCxzLnNjcm9sbExlZnQpLE1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtdSk+MSYmKGk9ITApKSwhaSlyZXR1cm4gb319ZnVuY3Rpb24gYXIodCxlLHIsbixpKXt2YXIgbz11cih0LGUscixuLGkpO251bGwhPW8uc2Nyb2xsVG9wJiZTZSh0LG8uc2Nyb2xsVG9wKSxudWxsIT1vLnNjcm9sbExlZnQmJk1lKHQsby5zY3JvbGxMZWZ0KX1mdW5jdGlvbiB1cih0LGUscixuLGkpe3ZhciBvPXQuZGlzcGxheSxsPXJlKHQuZGlzcGxheSk7MD5yJiYocj0wKTt2YXIgcz1vLnNjcm9sbGVyLmNsaWVudEhlaWdodC1UbyxhPW8uc2Nyb2xsZXIuc2Nyb2xsVG9wLHU9e30sYz10LmRvYy5oZWlnaHQrRihvKSxmPWw+cixoPWk+Yy1sO2lmKGE+cil1LnNjcm9sbFRvcD1mPzA6cjtlbHNlIGlmKGk+YStzKXt2YXIgZD1NYXRoLm1pbihyLChoP2M6aSktcyk7ZCE9YSYmKHUuc2Nyb2xsVG9wPWQpfXZhciBwPW8uc2Nyb2xsZXIuY2xpZW50V2lkdGgtVG8sZz1vLnNjcm9sbGVyLnNjcm9sbExlZnQ7ZSs9by5ndXR0ZXJzLm9mZnNldFdpZHRoLG4rPW8uZ3V0dGVycy5vZmZzZXRXaWR0aDt2YXIgbT1vLmd1dHRlcnMub2Zmc2V0V2lkdGgsdj1tKzEwPmU7cmV0dXJuIGcrbT5lfHx2Pyh2JiYoZT0wKSx1LnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxlLTEwLW0pKTpuPnArZy0zJiYodS5zY3JvbGxMZWZ0PW4rMTAtcCksdX1mdW5jdGlvbiBjcih0LGUscil7dC5jdXJPcC51cGRhdGVTY3JvbGxQb3M9e3Njcm9sbExlZnQ6bnVsbD09ZT90LmRvYy5zY3JvbGxMZWZ0OmUsc2Nyb2xsVG9wOm51bGw9PXI/dC5kb2Muc2Nyb2xsVG9wOnJ9fWZ1bmN0aW9uIGZyKHQsZSxyKXt2YXIgbj10LmN1ck9wLnVwZGF0ZVNjcm9sbFBvc3x8KHQuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0OnQuZG9jLnNjcm9sbExlZnQsc2Nyb2xsVG9wOnQuZG9jLnNjcm9sbFRvcH0pLGk9dC5kaXNwbGF5LnNjcm9sbGVyO24uc2Nyb2xsVG9wPU1hdGgubWF4KDAsTWF0aC5taW4oaS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQsbi5zY3JvbGxUb3ArcikpLG4uc2Nyb2xsTGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aCxuLnNjcm9sbExlZnQrZSkpfWZ1bmN0aW9uIGhyKHQsZSxyLG4pe3ZhciBpPXQuZG9jO2lmKG51bGw9PXImJihyPSJhZGQiKSwic21hcnQiPT1yKWlmKHQuZG9jLm1vZGUuaW5kZW50KXZhciBvPXoodCxlKTtlbHNlIHI9InByZXYiO3ZhciBsLHM9dC5vcHRpb25zLnRhYlNpemUsYT1nbihpLGUpLHU9Wm4oYS50ZXh0LG51bGwscyksYz1hLnRleHQubWF0Y2goL15ccyovKVswXTtpZigic21hcnQiPT1yJiYobD10LmRvYy5tb2RlLmluZGVudChvLGEudGV4dC5zbGljZShjLmxlbmd0aCksYS50ZXh0KSxsPT1Bbykpe2lmKCFuKXJldHVybjtyPSJwcmV2In0icHJldiI9PXI/bD1lPmkuZmlyc3Q/Wm4oZ24oaSxlLTEpLnRleHQsbnVsbCxzKTowOiJhZGQiPT1yP2w9dSt0Lm9wdGlvbnMuaW5kZW50VW5pdDoic3VidHJhY3QiPT1yP2w9dS10Lm9wdGlvbnMuaW5kZW50VW5pdDoibnVtYmVyIj09dHlwZW9mIHImJihsPXUrciksbD1NYXRoLm1heCgwLGwpO3ZhciBmPSIiLGg9MDtpZih0Lm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpZm9yKHZhciBkPU1hdGguZmxvb3IobC9zKTtkOy0tZCloKz1zLGYrPSIJIjtsPmgmJihmKz1xbihsLWgpKSxmIT1jP19lKHQuZG9jLGYsWWUoZSwwKSxZZShlLGMubGVuZ3RoKSwiK2lucHV0Iik6aS5zZWwuaGVhZC5saW5lPT1lJiZpLnNlbC5oZWFkLmNoPGMubGVuZ3RoJiZucihpLFllKGUsYy5sZW5ndGgpLFllKGUsYy5sZW5ndGgpLDEpLGEuc3RhdGVBZnRlcj1udWxsfWZ1bmN0aW9uIGRyKHQsZSxyKXt2YXIgbj1lLGk9ZSxvPXQuZG9jO3JldHVybiJudW1iZXIiPT10eXBlb2YgZT9pPWduKG8scWUobyxlKSk6bj1ibihlKSxudWxsPT1uP251bGw6cihpLG4pPyh1ZSh0LG4sbisxKSxpKTpudWxsfWZ1bmN0aW9uIHByKHQsZSxyLG4saSl7ZnVuY3Rpb24gbygpe3ZhciBlPXMrcjtyZXR1cm4gZTx0LmZpcnN0fHxlPj10LmZpcnN0K3Quc2l6ZT9mPSExOihzPWUsYz1nbih0LGUpKX1mdW5jdGlvbiBsKHQpe3ZhciBlPShpP1NpOk1pKShjLGEsciwhMCk7aWYobnVsbD09ZSl7aWYodHx8IW8oKSlyZXR1cm4gZj0hMTthPWk/KDA+cj9iaTp5aSkoYyk6MD5yP2MudGV4dC5sZW5ndGg6MH1lbHNlIGE9ZTtyZXR1cm4hMH12YXIgcz1lLmxpbmUsYT1lLmNoLHU9cixjPWduKHQscyksZj0hMDtpZigiY2hhciI9PW4pbCgpO2Vsc2UgaWYoImNvbHVtbiI9PW4pbCghMCk7ZWxzZSBpZigid29yZCI9PW58fCJncm91cCI9PW4pZm9yKHZhciBoPW51bGwsZD0iZ3JvdXAiPT1uLHA9ITA7ISgwPnIpfHxsKCFwKTtwPSExKXt2YXIgZz1jLnRleHQuY2hhckF0KGEpfHwiXG4iLG09b2koZyk/InciOmQ/L1xzLy50ZXN0KGcpP251bGw6InAiOm51bGw7aWYoaCYmaCE9bSl7MD5yJiYocj0xLGwoKSk7YnJlYWt9aWYobSYmKGg9bSkscj4wJiYhbCghcCkpYnJlYWt9dmFyIHY9b3IodCxZZShzLGEpLHUsITApO3JldHVybiBmfHwodi5oaXRTaWRlPSEwKSx2fWZ1bmN0aW9uIGdyKHQsZSxyLG4pe3ZhciBpLG89dC5kb2MsbD1lLmxlZnQ7aWYoInBhZ2UiPT1uKXt2YXIgcz1NYXRoLm1pbih0LmRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsd2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTtpPWUudG9wK3IqKHMtKDA+cj8xLjU6LjUpKnJlKHQuZGlzcGxheSkpfWVsc2UibGluZSI9PW4mJihpPXI+MD9lLmJvdHRvbSszOmUudG9wLTMpO2Zvcig7Oyl7dmFyIGE9dGUodCxsLGkpO2lmKCFhLm91dHNpZGUpYnJlYWs7aWYoMD5yPzA+PWk6aT49by5oZWlnaHQpe2EuaGl0U2lkZT0hMDticmVha31pKz01KnJ9cmV0dXJuIGF9ZnVuY3Rpb24gbXIodCxlKXt2YXIgcj1lLmNoLG49ZS5jaDtpZih0KXsoZS54UmVsPDB8fG49PXQubGVuZ3RoKSYmcj8tLXI6KytuO2Zvcih2YXIgaT10LmNoYXJBdChyKSxvPW9pKGkpP29pOi9ccy8udGVzdChpKT9mdW5jdGlvbih0KXtyZXR1cm4vXHMvLnRlc3QodCl9OmZ1bmN0aW9uKHQpe3JldHVybiEvXHMvLnRlc3QodCkmJiFvaSh0KX07cj4wJiZvKHQuY2hhckF0KHItMSkpOyktLXI7Zm9yKDtuPHQubGVuZ3RoJiZvKHQuY2hhckF0KG4pKTspKytufXJldHVybntmcm9tOlllKGUubGluZSxyKSx0bzpZZShlLmxpbmUsbil9fWZ1bmN0aW9uIHZyKHQsZSl7ZXIodC5kb2MsWWUoZSwwKSxRZSh0LmRvYyxZZShlKzEsMCkpKX1mdW5jdGlvbiB5cihlLHIsbixpKXt0LmRlZmF1bHRzW2VdPXIsbiYmKHNvW2VdPWk/ZnVuY3Rpb24odCxlLHIpe3IhPXVvJiZuKHQsZSxyKX06bil9ZnVuY3Rpb24gYnIodCxlKXtpZihlPT09ITApcmV0dXJuIGU7aWYodC5jb3B5U3RhdGUpcmV0dXJuIHQuY29weVN0YXRlKGUpO3ZhciByPXt9O2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dO2kgaW5zdGFuY2VvZiBBcnJheSYmKGk9aS5jb25jYXQoW10pKSxyW25dPWl9cmV0dXJuIHJ9ZnVuY3Rpb24geHIodCxlLHIpe3JldHVybiB0LnN0YXJ0U3RhdGU/dC5zdGFydFN0YXRlKGUscik6ITB9ZnVuY3Rpb24gQ3IodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3ZvW3RdOnR9ZnVuY3Rpb24gd3IodCxlLHIpe2Z1bmN0aW9uIG4oZSl7ZT1DcihlKTt2YXIgaT1lW3RdO2lmKGk9PT0hMSlyZXR1cm4ic3RvcCI7aWYobnVsbCE9aSYmcihpKSlyZXR1cm4hMDtpZihlLm5vZmFsbHRocm91Z2gpcmV0dXJuInN0b3AiO3ZhciBvPWUuZmFsbHRocm91Z2g7aWYobnVsbD09bylyZXR1cm4hMTtpZigiW29iamVjdCBBcnJheV0iIT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpcmV0dXJuIG4obyk7Zm9yKHZhciBsPTAscz1vLmxlbmd0aDtzPmw7KytsKXt2YXIgYT1uKG9bbF0pO2lmKGEpcmV0dXJuIGF9cmV0dXJuITF9Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBvPW4oZVtpXSk7aWYobylyZXR1cm4ic3RvcCIhPW99fWZ1bmN0aW9uIExyKHQpe3ZhciBlPVBvW3Qua2V5Q29kZV07cmV0dXJuIkN0cmwiPT1lfHwiQWx0Ij09ZXx8IlNoaWZ0Ij09ZXx8Ik1vZCI9PWV9ZnVuY3Rpb24ga3IodCxlKXtpZih6aSYmMzQ9PXQua2V5Q29kZSYmdFsiY2hhciJdKXJldHVybiExO3ZhciByPVBvW3Qua2V5Q29kZV07cmV0dXJuIG51bGw9PXJ8fHQuYWx0R3JhcGhLZXk/ITE6KHQuYWx0S2V5JiYocj0iQWx0LSIrciksKCRpP3QubWV0YUtleTp0LmN0cmxLZXkpJiYocj0iQ3RybC0iK3IpLCgkaT90LmN0cmxLZXk6dC5tZXRhS2V5KSYmKHI9IkNtZC0iK3IpLCFlJiZ0LnNoaWZ0S2V5JiYocj0iU2hpZnQtIityKSxyKX1mdW5jdGlvbiBTcih0LGUpe3RoaXMucG9zPXRoaXMuc3RhcnQ9MCx0aGlzLnN0cmluZz10LHRoaXMudGFiU2l6ZT1lfHw4LHRoaXMubGFzdENvbHVtblBvcz10aGlzLmxhc3RDb2x1bW5WYWx1ZT0wfWZ1bmN0aW9uIE1yKHQsZSl7dGhpcy5saW5lcz1bXSx0aGlzLnR5cGU9ZSx0aGlzLmRvYz10fWZ1bmN0aW9uIFRyKHQsZSxyLG4saSl7aWYobiYmbi5zaGFyZWQpcmV0dXJuIEhyKHQsZSxyLG4saSk7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVHIpKHQsZSxyLG4saSk7dmFyIG89bmV3IE1yKHQsaSk7aWYoJGUocixlKXx8amUoZSxyKSYmInJhbmdlIj09aSYmKCFuLmluY2x1c2l2ZUxlZnR8fCFuLmluY2x1c2l2ZVJpZ2h0KSlyZXR1cm4gbztuJiZyaShuLG8pLG8ucmVwbGFjZWRXaXRoJiYoby5jb2xsYXBzZWQ9ITAsby5yZXBsYWNlZFdpdGg9c2koInNwYW4iLFtvLnJlcGxhY2VkV2l0aF0sIkNvZGVNaXJyb3Itd2lkZ2V0Iiksbi5oYW5kbGVNb3VzZUV2ZW50c3x8KG8ucmVwbGFjZWRXaXRoLmlnbm9yZUV2ZW50cz0hMCkpLG8uY29sbGFwc2VkJiYoUWk9ITApLG8uYWRkVG9IaXN0b3J5JiZNbih0LHtmcm9tOmUsdG86cixvcmlnaW46Im1hcmtUZXh0In0se2hlYWQ6dC5zZWwuaGVhZCxhbmNob3I6dC5zZWwuYW5jaG9yfSwwLzApO3ZhciBsLHMsYSx1PWUubGluZSxjPTAsZj10LmNtO2lmKHQuaXRlcih1LHIubGluZSsxLGZ1bmN0aW9uKG4pe2YmJm8uY29sbGFwc2VkJiYhZi5vcHRpb25zLmxpbmVXcmFwcGluZyYmR3IodCxuKT09Zi5kaXNwbGF5Lm1heExpbmUmJihhPSEwKTt2YXIgaT17ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOm99O2MrPW4udGV4dC5sZW5ndGgsdT09ZS5saW5lJiYoaS5mcm9tPWUuY2gsYy09ZS5jaCksdT09ci5saW5lJiYoaS50bz1yLmNoLGMtPW4udGV4dC5sZW5ndGgtci5jaCksby5jb2xsYXBzZWQmJih1PT1yLmxpbmUmJihzPVByKG4sci5jaCkpLHU9PWUubGluZT9sPVByKG4sZS5jaCk6eW4obiwwKSksV3IobixpKSwrK3V9KSxvLmNvbGxhcHNlZCYmdC5pdGVyKGUubGluZSxyLmxpbmUrMSxmdW5jdGlvbihlKXtWcih0LGUpJiZ5bihlLDApfSksby5jbGVhck9uRW50ZXImJkduKG8sImJlZm9yZUN1cnNvckVudGVyIixmdW5jdGlvbigpe28uY2xlYXIoKX0pLG8ucmVhZE9ubHkmJihxaT0hMCwodC5oaXN0b3J5LmRvbmUubGVuZ3RofHx0Lmhpc3RvcnkudW5kb25lLmxlbmd0aCkmJnQuY2xlYXJIaXN0b3J5KCkpLG8uY29sbGFwc2VkKXtpZihsIT1zKXRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7by5zaXplPWMsby5hdG9taWM9ITB9cmV0dXJuIGYmJihhJiYoZi5jdXJPcC51cGRhdGVNYXhMaW5lPSEwKSwoby5jbGFzc05hbWV8fG8udGl0bGV8fG8uc3RhcnRTdHlsZXx8by5lbmRTdHlsZXx8by5jb2xsYXBzZWQpJiZ1ZShmLGUubGluZSxyLmxpbmUrMSksby5hdG9taWMmJmlyKGYpKSxvfWZ1bmN0aW9uIEFyKHQsZSl7dGhpcy5tYXJrZXJzPXQsdGhpcy5wcmltYXJ5PWU7Zm9yKHZhciByPTAsbj10aGlzO3I8dC5sZW5ndGg7KytyKXRbcl0ucGFyZW50PXRoaXMsR24odFtyXSwiY2xlYXIiLGZ1bmN0aW9uKCl7bi5jbGVhcigpfSl9ZnVuY3Rpb24gSHIodCxlLHIsbixpKXtuPXJpKG4pLG4uc2hhcmVkPSExO3ZhciBvPVtUcih0LGUscixuLGkpXSxsPW9bMF0scz1uLnJlcGxhY2VkV2l0aDtyZXR1cm4gZG4odCxmdW5jdGlvbih0KXtzJiYobi5yZXBsYWNlZFdpdGg9cy5jbG9uZU5vZGUoITApKSxvLnB1c2goVHIodCxRZSh0LGUpLFFlKHQsciksbixpKSk7Zm9yKHZhciBhPTA7YTx0LmxpbmtlZC5sZW5ndGg7KythKWlmKHQubGlua2VkW2FdLmlzUGFyZW50KXJldHVybjtsPVFuKG8pfSksbmV3IEFyKG8sbCl9ZnVuY3Rpb24gTnIodCxlKXtpZih0KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2lmKG4ubWFya2VyPT1lKXJldHVybiBufX1mdW5jdGlvbiBEcih0LGUpe2Zvcih2YXIgcixuPTA7bjx0Lmxlbmd0aDsrK24pdFtuXSE9ZSYmKHJ8fChyPVtdKSkucHVzaCh0W25dKTtyZXR1cm4gcn1mdW5jdGlvbiBXcih0LGUpe3QubWFya2VkU3BhbnM9dC5tYXJrZWRTcGFucz90Lm1hcmtlZFNwYW5zLmNvbmNhdChbZV0pOltlXSxlLm1hcmtlci5hdHRhY2hMaW5lKHQpfWZ1bmN0aW9uIE9yKHQsZSxyKXtpZih0KWZvcih2YXIgbixpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBvPXRbaV0sbD1vLm1hcmtlcixzPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpO2lmKHN8fChsLmluY2x1c2l2ZUxlZnQmJmwuaW5jbHVzaXZlUmlnaHR8fCJib29rbWFyayI9PWwudHlwZSkmJm8uZnJvbT09ZSYmKCFyfHwhby5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8udG98fChsLmluY2x1c2l2ZVJpZ2h0P28udG8+PWU6by50bz5lKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOm8uZnJvbSx0bzphP251bGw6by50byxtYXJrZXI6bH0pfX1yZXR1cm4gbn1mdW5jdGlvbiBFcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7aWYoc3x8ImJvb2ttYXJrIj09bC50eXBlJiZvLmZyb209PWUmJighcnx8by5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpOyhufHwobj1bXSkpLnB1c2goe2Zyb206YT9udWxsOm8uZnJvbS1lLHRvOm51bGw9PW8udG8/bnVsbDpvLnRvLWUsbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24genIodCxlKXt2YXIgcj10cih0LGUuZnJvbS5saW5lKSYmZ24odCxlLmZyb20ubGluZSkubWFya2VkU3BhbnMsbj10cih0LGUudG8ubGluZSkmJmduKHQsZS50by5saW5lKS5tYXJrZWRTcGFucztpZighciYmIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5mcm9tLmNoLG89ZS50by5jaCxsPWplKGUuZnJvbSxlLnRvKSxzPU9yKHIsaSxsKSxhPUVyKG4sbyxsKSx1PTE9PWUudGV4dC5sZW5ndGgsYz1RbihlLnRleHQpLmxlbmd0aCsodT9pOjApO2lmKHMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2Ype3ZhciBoPXNbZl07aWYobnVsbD09aC50byl7dmFyIGQ9TnIoYSxoLm1hcmtlcik7ZD91JiYoaC50bz1udWxsPT1kLnRvP251bGw6ZC50bytjKTpoLnRvPWl9fWlmKGEpZm9yKHZhciBmPTA7ZjxhLmxlbmd0aDsrK2Ype3ZhciBoPWFbZl07aWYobnVsbCE9aC50byYmKGgudG8rPWMpLG51bGw9PWguZnJvbSl7dmFyIGQ9TnIocyxoLm1hcmtlcik7ZHx8KGguZnJvbT1jLHUmJihzfHwocz1bXSkpLnB1c2goaCkpfWVsc2UgaC5mcm9tKz1jLHUmJihzfHwocz1bXSkpLnB1c2goaCl9aWYodSYmcyl7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbCE9c1tmXS5mcm9tJiZzW2ZdLmZyb209PXNbZl0udG8mJiJib29rbWFyayIhPXNbZl0ubWFya2VyLnR5cGUmJnMuc3BsaWNlKGYtLSwxKTtzLmxlbmd0aHx8KHM9bnVsbCl9dmFyIHA9W3NdO2lmKCF1KXt2YXIgZyxtPWUudGV4dC5sZW5ndGgtMjtpZihtPjAmJnMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbD09c1tmXS50byYmKGd8fChnPVtdKSkucHVzaCh7ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOnNbZl0ubWFya2VyfSk7Zm9yKHZhciBmPTA7bT5mOysrZilwLnB1c2goZyk7cC5wdXNoKGEpfXJldHVybiBwfWZ1bmN0aW9uIElyKHQsZSl7dmFyIHI9QW4odCxlKSxuPXpyKHQsZSk7aWYoIXIpcmV0dXJuIG47aWYoIW4pcmV0dXJuIHI7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBvPXJbaV0sbD1uW2ldO2lmKG8mJmwpdDpmb3IodmFyIHM9MDtzPGwubGVuZ3RoOysrcyl7Zm9yKHZhciBhPWxbc10sdT0wO3U8by5sZW5ndGg7Kyt1KWlmKG9bdV0ubWFya2VyPT1hLm1hcmtlciljb250aW51ZSB0O28ucHVzaChhKX1lbHNlIGwmJihyW2ldPWwpfXJldHVybiByfWZ1bmN0aW9uIEZyKHQsZSxyKXt2YXIgbj1udWxsO2lmKHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7aWYodC5tYXJrZWRTcGFucylmb3IodmFyIGU9MDtlPHQubWFya2VkU3BhbnMubGVuZ3RoOysrZSl7dmFyIHI9dC5tYXJrZWRTcGFuc1tlXS5tYXJrZXI7IXIucmVhZE9ubHl8fG4mJi0xIT10aShuLHIpfHwobnx8KG49W10pKS5wdXNoKHIpfX0pLCFuKXJldHVybiBudWxsO2Zvcih2YXIgaT1be2Zyb206ZSx0bzpyfV0sbz0wO288bi5sZW5ndGg7KytvKWZvcih2YXIgbD1uW29dLHM9bC5maW5kKCksYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgdT1pW2FdO2lmKCEkZSh1LnRvLHMuZnJvbSkmJiEkZShzLnRvLHUuZnJvbSkpe3ZhciBjPVthLDFdOygkZSh1LmZyb20scy5mcm9tKXx8IWwuaW5jbHVzaXZlTGVmdCYmamUodS5mcm9tLHMuZnJvbSkpJiZjLnB1c2goe2Zyb206dS5mcm9tLHRvOnMuZnJvbX0pLCgkZShzLnRvLHUudG8pfHwhbC5pbmNsdXNpdmVSaWdodCYmamUodS50byxzLnRvKSkmJmMucHVzaCh7ZnJvbTpzLnRvLHRvOnUudG99KSxpLnNwbGljZS5hcHBseShpLGMpLGErPWMubGVuZ3RoLTF9fXJldHVybiBpfWZ1bmN0aW9uIFByKHQsZSl7dmFyIHIsbj1RaSYmdC5tYXJrZWRTcGFucztpZihuKWZvcih2YXIgaSxvPTA7bzxuLmxlbmd0aDsrK28paT1uW29dLGkubWFya2VyLmNvbGxhcHNlZCYmKG51bGw9PWkuZnJvbXx8aS5mcm9tPGUpJiYobnVsbD09aS50b3x8aS50bz5lKSYmKCFyfHxyLndpZHRoPGkubWFya2VyLndpZHRoKSYmKHI9aS5tYXJrZXIpO3JldHVybiByfWZ1bmN0aW9uIFJyKHQpe3JldHVybiBQcih0LC0xKX1mdW5jdGlvbiBCcih0KXtyZXR1cm4gUHIodCx0LnRleHQubGVuZ3RoKzEpfWZ1bmN0aW9uIEdyKHQsZSl7Zm9yKHZhciByO3I9UnIoZSk7KWU9Z24odCxyLmZpbmQoKS5mcm9tLmxpbmUpO3JldHVybiBlfWZ1bmN0aW9uIFZyKHQsZSl7dmFyIHI9UWkmJmUubWFya2VkU3BhbnM7aWYocilmb3IodmFyIG4saT0wO2k8ci5sZW5ndGg7KytpKWlmKG49cltpXSxuLm1hcmtlci5jb2xsYXBzZWQpe2lmKG51bGw9PW4uZnJvbSlyZXR1cm4hMDtpZighbi5tYXJrZXIucmVwbGFjZWRXaXRoJiYwPT1uLmZyb20mJm4ubWFya2VyLmluY2x1c2l2ZUxlZnQmJktyKHQsZSxuKSlyZXR1cm4hMH19ZnVuY3Rpb24gS3IodCxlLHIpe2lmKG51bGw9PXIudG8pe3ZhciBuPXIubWFya2VyLmZpbmQoKS50byxpPWduKHQsbi5saW5lKTtyZXR1cm4gS3IodCxpLE5yKGkubWFya2VkU3BhbnMsci5tYXJrZXIpKX1pZihyLm1hcmtlci5pbmNsdXNpdmVSaWdodCYmci50bz09ZS50ZXh0Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG8sbD0wO2w8ZS5tYXJrZWRTcGFucy5sZW5ndGg7KytsKWlmKG89ZS5tYXJrZWRTcGFuc1tsXSxvLm1hcmtlci5jb2xsYXBzZWQmJiFvLm1hcmtlci5yZXBsYWNlZFdpdGgmJm8uZnJvbT09ci50byYmKG8ubWFya2VyLmluY2x1c2l2ZUxlZnR8fHIubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSYmS3IodCxlLG8pKXJldHVybiEwfWZ1bmN0aW9uIFVyKHQpe3ZhciBlPXQubWFya2VkU3BhbnM7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuZGV0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPW51bGx9fWZ1bmN0aW9uIFhyKHQsZSl7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuYXR0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPWV9fWZ1bmN0aW9uIF9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPSF0aGlzLmNtLmN1ck9wO2UmJmllKHRoaXMuY20pO3RyeXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2UmJm9lKHRoaXMuY20pfXJldHVybiByfX1mdW5jdGlvbiBZcih0KXtyZXR1cm4gbnVsbCE9dC5oZWlnaHQ/dC5oZWlnaHQ6KHQubm9kZS5wYXJlbnROb2RlJiYxPT10Lm5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZXx8dWkodC5jbS5kaXNwbGF5Lm1lYXN1cmUsc2koImRpdiIsW3Qubm9kZV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIikpLHQuaGVpZ2h0PXQubm9kZS5vZmZzZXRIZWlnaHQpfWZ1bmN0aW9uIGpyKHQsZSxyLG4pe3ZhciBpPW5ldyB5byh0LHIsbik7cmV0dXJuIGkubm9IU2Nyb2xsJiYodC5kaXNwbGF5LmFsaWduV2lkZ2V0cz0hMCksZHIodCxlLGZ1bmN0aW9uKGUpe3ZhciByPWUud2lkZ2V0c3x8KGUud2lkZ2V0cz1bXSk7aWYobnVsbD09aS5pbnNlcnRBdD9yLnB1c2goaSk6ci5zcGxpY2UoTWF0aC5taW4oci5sZW5ndGgtMSxNYXRoLm1heCgwLGkuaW5zZXJ0QXQpKSwwLGkpLGkubGluZT1lLCFWcih0LmRvYyxlKXx8aS5zaG93SWZIaWRkZW4pe3ZhciBuPUNuKHQsZSk8dC5kb2Muc2Nyb2xsVG9wO3luKGUsZS5oZWlnaHQrWXIoaSkpLG4mJmZyKHQsMCxpLmhlaWdodCl9cmV0dXJuITB9KSxpfWZ1bmN0aW9uICRyKHQsZSxyLG4pe3QudGV4dD1lLHQuc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpLG51bGwhPXQub3JkZXImJih0Lm9yZGVyPW51bGwpLFVyKHQpLFhyKHQscik7dmFyIGk9bj9uKHQpOjE7aSE9dC5oZWlnaHQmJnluKHQsaSl9ZnVuY3Rpb24gWnIodCl7dC5wYXJlbnQ9bnVsbCxVcih0KX1mdW5jdGlvbiBxcih0LGUscixuLGksbyl7dmFyIGw9ci5mbGF0dGVuU3BhbnM7bnVsbD09bCYmKGw9dC5vcHRpb25zLmZsYXR0ZW5TcGFucyk7dmFyIHMsYT0wLHU9bnVsbCxjPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3IoIiI9PWUmJnIuYmxhbmtMaW5lJiZyLmJsYW5rTGluZShuKTshYy5lb2woKTspYy5wb3M+dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aD8obD0hMSxvJiZ0bih0LGUsbixjLnBvcyksYy5wb3M9ZS5sZW5ndGgscz1udWxsKTpzPXIudG9rZW4oYyxuKSxsJiZ1PT1zfHwoYTxjLnN0YXJ0JiZpKGMuc3RhcnQsdSksYT1jLnN0YXJ0LHU9cyksYy5zdGFydD1jLnBvcztmb3IoO2E8Yy5wb3M7KXt2YXIgZj1NYXRoLm1pbihjLnBvcyxhKzVlNCk7aShmLHUpLGE9Zn19ZnVuY3Rpb24gUXIodCxlLHIsbil7dmFyIGk9W3Quc3RhdGUubW9kZUdlbl07cXIodCxlLnRleHQsdC5kb2MubW9kZSxyLGZ1bmN0aW9uKHQsZSl7aS5wdXNoKHQsZSl9LG4pO2Zvcih2YXIgbz0wO288dC5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7KytvKXt2YXIgbD10LnN0YXRlLm92ZXJsYXlzW29dLHM9MSxhPTA7cXIodCxlLnRleHQsbC5tb2RlLCEwLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXM7dD5hOyl7dmFyIG49aVtzXTtuPnQmJmkuc3BsaWNlKHMsMSx0LGlbcysxXSxuKSxzKz0yLGE9TWF0aC5taW4odCxuKX1pZihlKWlmKGwub3BhcXVlKWkuc3BsaWNlKHIscy1yLHQsZSkscz1yKzI7ZWxzZSBmb3IoO3M+cjtyKz0yKXt2YXIgbz1pW3IrMV07aVtyKzFdPW8/bysiICIrZTplfX0pfXJldHVybiBpfWZ1bmN0aW9uIEpyKHQsZSl7cmV0dXJuIGUuc3R5bGVzJiZlLnN0eWxlc1swXT09dC5zdGF0ZS5tb2RlR2VufHwoZS5zdHlsZXM9UXIodCxlLGUuc3RhdGVBZnRlcj16KHQsYm4oZSkpKSksZS5zdHlsZXN9ZnVuY3Rpb24gdG4odCxlLHIsbil7dmFyIGk9dC5kb2MubW9kZSxvPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3Ioby5zdGFydD1vLnBvcz1ufHwwLCIiPT1lJiZpLmJsYW5rTGluZSYmaS5ibGFua0xpbmUocik7IW8uZW9sKCkmJm8ucG9zPD10Lm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoOylpLnRva2VuKG8sciksby5zdGFydD1vLnBvc31mdW5jdGlvbiBlbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2Zvcig7Oyl7dmFyIHI9dC5tYXRjaCgvKD86XnxccylsaW5lLShiYWNrZ3JvdW5kLSk/KFxTKykvKTtpZighcilicmVhazt0PXQuc2xpY2UoMCxyLmluZGV4KSt0LnNsaWNlKHIuaW5kZXgrclswXS5sZW5ndGgpO3ZhciBuPXJbMV0/ImJnQ2xhc3MiOiJ0ZXh0Q2xhc3MiO251bGw9PWVbbl0/ZVtuXT1yWzJdOm5ldyBSZWdFeHAoIig/Ol58cykiK3JbMl0rIig/OiR8cykiKS50ZXN0KGVbbl0pfHwoZVtuXSs9IiAiK3JbMl0pfXJldHVybiB4b1t0XXx8KHhvW3RdPSJjbS0iK3QucmVwbGFjZSgvICsvZywiIGNtLSIpKX1mdW5jdGlvbiBybih0LGUscixuKXtmb3IodmFyIGksbz1lLGw9ITA7aT1ScihvKTspbz1nbih0LmRvYyxpLmZpbmQoKS5mcm9tLmxpbmUpO3ZhciBzPXtwcmU6c2koInByZSIpLGNvbDowLHBvczowLG1lYXN1cmU6bnVsbCxtZWFzdXJlZFNvbWV0aGluZzohMSxjbTp0LGNvcHlXaWRnZXRzOm59O2Rve28udGV4dCYmKGw9ITEpLHMubWVhc3VyZT1vPT1lJiZyLHMucG9zPTAscy5hZGRUb2tlbj1zLm1lYXN1cmU/bG46b24sKEFpfHxXaSkmJnQuZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSYmKHMuYWRkVG9rZW49c24ocy5hZGRUb2tlbikpO3ZhciBhPXVuKG8scyxKcih0LG8pKTtyJiZvPT1lJiYhcy5tZWFzdXJlZFNvbWV0aGluZyYmKHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKSxzLm1lYXN1cmVkU29tZXRoaW5nPSEwKSxhJiYobz1nbih0LmRvYyxhLnRvLmxpbmUpKX13aGlsZShhKTshcnx8cy5tZWFzdXJlZFNvbWV0aGluZ3x8clswXXx8KHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQobD9zaSgic3BhbiIsIsKgIik6cGkodC5kaXNwbGF5Lm1lYXN1cmUpKSkscy5wcmUuZmlyc3RDaGlsZHx8VnIodC5kb2MsZSl8fHMucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCLCoCIpKTt2YXIgdTtpZihyJiYoQWl8fERpKSYmKHU9d24obykpKXt2YXIgYz11Lmxlbmd0aC0xO3VbY10uZnJvbT09dVtjXS50byYmLS1jO3ZhciBmPXVbY10saD11W2MtMV07aWYoZi5mcm9tKzE9PWYudG8mJmgmJmYubGV2ZWw8aC5sZXZlbCl7dmFyIGQ9cltzLnBvcy0xXTtkJiZkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGQubWVhc3VyZVJpZ2h0PXBpKHQuZGlzcGxheS5tZWFzdXJlKSxkLm5leHRTaWJsaW5nKX19dmFyIHA9cy50ZXh0Q2xhc3M/cy50ZXh0Q2xhc3MrIiAiKyhlLnRleHRDbGFzc3x8IiIpOmUudGV4dENsYXNzO3JldHVybiBwJiYocy5wcmUuY2xhc3NOYW1lPXApLEtuKHQsInJlbmRlckxpbmUiLHQsZSxzLnByZSksc31mdW5jdGlvbiBubih0KXt2YXIgZT1zaSgic3BhbiIsIuKAoiIsImNtLWludmFsaWRjaGFyIik7cmV0dXJuIGUudGl0bGU9IlxcdSIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSxlfWZ1bmN0aW9uIG9uKHQsZSxyLG4saSxvKXtpZihlKXt2YXIgbD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJzO2lmKGwudGVzdChlKSlmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MDs7KXtsLmxhc3RJbmRleD1hO3ZhciB1PWwuZXhlYyhlKSxjPXU/dS5pbmRleC1hOmUubGVuZ3RoLWE7aWYoYyYmKHMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZS5zbGljZShhLGErYykpKSx0LmNvbCs9YyksIXUpYnJlYWs7aWYoYSs9YysxLCIJIj09dVswXSl7dmFyIGY9dC5jbS5vcHRpb25zLnRhYlNpemUsaD1mLXQuY29sJWY7cy5hcHBlbmRDaGlsZChzaSgic3BhbiIscW4oaCksImNtLXRhYiIpKSx0LmNvbCs9aH1lbHNle3ZhciBkPXQuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKHVbMF0pO3MuYXBwZW5kQ2hpbGQoZCksdC5jb2wrPTF9fWVsc2V7dC5jb2wrPWUubGVuZ3RoO3ZhciBzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpfWlmKHJ8fG58fGl8fHQubWVhc3VyZSl7dmFyIHA9cnx8IiI7biYmKHArPW4pLGkmJihwKz1pKTt2YXIgZD1zaSgic3BhbiIsW3NdLHApO3JldHVybiBvJiYoZC50aXRsZT1vKSx0LnByZS5hcHBlbmRDaGlsZChkKX10LnByZS5hcHBlbmRDaGlsZChzKX19ZnVuY3Rpb24gbG4odCxlLHIsbixpKXtmb3IodmFyIG89dC5jbS5vcHRpb25zLmxpbmVXcmFwcGluZyxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBzPWUuY2hhckF0KGwpLGE9MD09bDtzPj0i7aCAIiYmIu2vvyI+cyYmbDxlLmxlbmd0aC0xPyhzPWUuc2xpY2UobCxsKzIpLCsrbCk6bCYmbyYmaGkoZSxsKSYmdC5wcmUuYXBwZW5kQ2hpbGQoc2koIndiciIpKTt2YXIgdT10Lm1lYXN1cmVbdC5wb3NdLGM9dC5tZWFzdXJlW3QucG9zXT1vbih0LHMscixhJiZuLGw9PWUubGVuZ3RoLTEmJmkpO3UmJihjLmxlZnRTaWRlPXUubGVmdFNpZGV8fHUpLEFpJiZvJiYiICI9PXMmJmwmJiEvXHMvLnRlc3QoZS5jaGFyQXQobC0xKSkmJmw8ZS5sZW5ndGgtMSYmIS9ccy8udGVzdChlLmNoYXJBdChsKzEpKSYmKGMuc3R5bGUud2hpdGVTcGFjZT0ibm9ybWFsIiksdC5wb3MrPXMubGVuZ3RofWUubGVuZ3RoJiYodC5tZWFzdXJlZFNvbWV0aGluZz0hMCl9ZnVuY3Rpb24gc24odCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9IiAiLHI9MDtyPHQubGVuZ3RoLTI7KytyKWUrPXIlMj8iICI6IsKgIjtyZXR1cm4gZSs9IiAifXJldHVybiBmdW5jdGlvbihyLG4saSxvLGwscyl7cmV0dXJuIHQocixuLnJlcGxhY2UoLyB7Myx9L2csZSksaSxvLGwscyl9fWZ1bmN0aW9uIGFuKHQsZSxyLG4pe3ZhciBpPSFuJiZyLnJlcGxhY2VkV2l0aDtpZihpJiYodC5jb3B5V2lkZ2V0cyYmKGk9aS5jbG9uZU5vZGUoITApKSx0LnByZS5hcHBlbmRDaGlsZChpKSx0Lm1lYXN1cmUpKXtpZihlKXQubWVhc3VyZVt0LnBvc109aTtlbHNle3ZhciBvPXBpKHQuY20uZGlzcGxheS5tZWFzdXJlKTtpZigiYm9va21hcmsiIT1yLnR5cGV8fHIuaW5zZXJ0TGVmdCl7aWYodC5tZWFzdXJlW3QucG9zXSlyZXR1cm47dC5tZWFzdXJlW3QucG9zXT10LnByZS5pbnNlcnRCZWZvcmUobyxpKX1lbHNlIHQubWVhc3VyZVt0LnBvc109dC5wcmUuYXBwZW5kQ2hpbGQobyl9dC5tZWFzdXJlZFNvbWV0aGluZz0hMH10LnBvcys9ZX1mdW5jdGlvbiB1bih0LGUscil7dmFyIG49dC5tYXJrZWRTcGFucyxpPXQudGV4dCxvPTA7aWYobilmb3IodmFyIGwscyxhLHUsYyxmLGg9aS5sZW5ndGgsZD0wLHA9MSxnPSIiLG09MDs7KXtpZihtPT1kKXtzPWE9dT1jPSIiLGY9bnVsbCxtPTEvMDtmb3IodmFyIHY9W10seT0wO3k8bi5sZW5ndGg7Kyt5KXt2YXIgYj1uW3ldLHg9Yi5tYXJrZXI7Yi5mcm9tPD1kJiYobnVsbD09Yi50b3x8Yi50bz5kKT8obnVsbCE9Yi50byYmbT5iLnRvJiYobT1iLnRvLGE9IiIpLHguY2xhc3NOYW1lJiYocys9IiAiK3guY2xhc3NOYW1lKSx4LnN0YXJ0U3R5bGUmJmIuZnJvbT09ZCYmKHUrPSIgIit4LnN0YXJ0U3R5bGUpLHguZW5kU3R5bGUmJmIudG89PW0mJihhKz0iICIreC5lbmRTdHlsZSkseC50aXRsZSYmIWMmJihjPXgudGl0bGUpLHguY29sbGFwc2VkJiYoIWZ8fGYubWFya2VyLnNpemU8eC5zaXplKSYmKGY9YikpOmIuZnJvbT5kJiZtPmIuZnJvbSYmKG09Yi5mcm9tKSwiYm9va21hcmsiPT14LnR5cGUmJmIuZnJvbT09ZCYmeC5yZXBsYWNlZFdpdGgmJnYucHVzaCh4KQp9aWYoZiYmKGYuZnJvbXx8MCk9PWQmJihhbihlLChudWxsPT1mLnRvP2g6Zi50byktZCxmLm1hcmtlcixudWxsPT1mLmZyb20pLG51bGw9PWYudG8pKXJldHVybiBmLm1hcmtlci5maW5kKCk7aWYoIWYmJnYubGVuZ3RoKWZvcih2YXIgeT0wO3k8di5sZW5ndGg7Kyt5KWFuKGUsMCx2W3ldKX1pZihkPj1oKWJyZWFrO2Zvcih2YXIgQz1NYXRoLm1pbihoLG0pOzspe2lmKGcpe3ZhciB3PWQrZy5sZW5ndGg7aWYoIWYpe3ZhciBMPXc+Qz9nLnNsaWNlKDAsQy1kKTpnO2UuYWRkVG9rZW4oZSxMLGw/bCtzOnMsdSxkK0wubGVuZ3RoPT1tP2E6IiIsYyl9aWYodz49Qyl7Zz1nLnNsaWNlKEMtZCksZD1DO2JyZWFrfWQ9dyx1PSIifWc9aS5zbGljZShvLG89cltwKytdKSxsPWVuKHJbcCsrXSxlKX19ZWxzZSBmb3IodmFyIHA9MTtwPHIubGVuZ3RoO3ArPTIpZS5hZGRUb2tlbihlLGkuc2xpY2UobyxvPXJbcF0pLGVuKHJbcCsxXSxlKSl9ZnVuY3Rpb24gY24odCxlLHIsbixpKXtmdW5jdGlvbiBvKHQpe3JldHVybiByP3JbdF06bnVsbH1mdW5jdGlvbiBsKHQscixuKXskcih0LHIsbixpKSxVbih0LCJjaGFuZ2UiLHQsZSl9dmFyIHM9ZS5mcm9tLGE9ZS50byx1PWUudGV4dCxjPWduKHQscy5saW5lKSxmPWduKHQsYS5saW5lKSxoPVFuKHUpLGQ9byh1Lmxlbmd0aC0xKSxwPWEubGluZS1zLmxpbmU7aWYoMCE9cy5jaHx8MCE9YS5jaHx8IiIhPWh8fHQuY20mJiF0LmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKWlmKGM9PWYpaWYoMT09dS5sZW5ndGgpbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK2grYy50ZXh0LnNsaWNlKGEuY2gpLGQpO2Vsc2V7Zm9yKHZhciBnPVtdLG09MSx2PXUubGVuZ3RoLTE7dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7Zy5wdXNoKG5ldyBibyhoK2MudGV4dC5zbGljZShhLmNoKSxkLGkpKSxsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSx0Lmluc2VydChzLmxpbmUrMSxnKX1lbHNlIGlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdK2YudGV4dC5zbGljZShhLmNoKSxvKDApKSx0LnJlbW92ZShzLmxpbmUrMSxwKTtlbHNle2woYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdLG8oMCkpLGwoZixoK2YudGV4dC5zbGljZShhLmNoKSxkKTtmb3IodmFyIG09MSx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtwPjEmJnQucmVtb3ZlKHMubGluZSsxLHAtMSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZXtmb3IodmFyIG09MCx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtsKGYsZi50ZXh0LGQpLHAmJnQucmVtb3ZlKHMubGluZSxwKSxnLmxlbmd0aCYmdC5pbnNlcnQocy5saW5lLGcpfVVuKHQsImNoYW5nZSIsdCxlKSxucih0LG4uYW5jaG9yLG4uaGVhZCxudWxsLCEwKX1mdW5jdGlvbiBmbih0KXt0aGlzLmxpbmVzPXQsdGhpcy5wYXJlbnQ9bnVsbDtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49MDtyPmU7KytlKXRbZV0ucGFyZW50PXRoaXMsbis9dFtlXS5oZWlnaHQ7dGhpcy5oZWlnaHQ9bn1mdW5jdGlvbiBobih0KXt0aGlzLmNoaWxkcmVuPXQ7Zm9yKHZhciBlPTAscj0wLG49MCxpPXQubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRbbl07ZSs9by5jaHVua1NpemUoKSxyKz1vLmhlaWdodCxvLnBhcmVudD10aGlzfXRoaXMuc2l6ZT1lLHRoaXMuaGVpZ2h0PXIsdGhpcy5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBkbih0LGUscil7ZnVuY3Rpb24gbih0LGksbyl7aWYodC5saW5rZWQpZm9yKHZhciBsPTA7bDx0LmxpbmtlZC5sZW5ndGg7KytsKXt2YXIgcz10LmxpbmtlZFtsXTtpZihzLmRvYyE9aSl7dmFyIGE9byYmcy5zaGFyZWRIaXN0Oyghcnx8YSkmJihlKHMuZG9jLGEpLG4ocy5kb2MsdCxhKSl9fX1uKHQsbnVsbCwhMCl9ZnVuY3Rpb24gcG4odCxlKXtpZihlLmNtKXRocm93IG5ldyBFcnJvcigiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS4iKTt0LmRvYz1lLGUuY209dCxvKHQpLHIodCksdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8Zih0KSx0Lm9wdGlvbnMubW9kZT1lLm1vZGVPcHRpb24sdWUodCl9ZnVuY3Rpb24gZ24odCxlKXtmb3IoZS09dC5maXJzdDshdC5saW5lczspZm9yKHZhciByPTA7Oysrcil7dmFyIG49dC5jaGlsZHJlbltyXSxpPW4uY2h1bmtTaXplKCk7aWYoaT5lKXt0PW47YnJlYWt9ZS09aX1yZXR1cm4gdC5saW5lc1tlXX1mdW5jdGlvbiBtbih0LGUscil7dmFyIG49W10saT1lLmxpbmU7cmV0dXJuIHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7dmFyIG89dC50ZXh0O2k9PXIubGluZSYmKG89by5zbGljZSgwLHIuY2gpKSxpPT1lLmxpbmUmJihvPW8uc2xpY2UoZS5jaCkpLG4ucHVzaChvKSwrK2l9KSxufWZ1bmN0aW9uIHZuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5pdGVyKGUscixmdW5jdGlvbih0KXtuLnB1c2godC50ZXh0KX0pLG59ZnVuY3Rpb24geW4odCxlKXtmb3IodmFyIHI9ZS10LmhlaWdodCxuPXQ7bjtuPW4ucGFyZW50KW4uaGVpZ2h0Kz1yfWZ1bmN0aW9uIGJuKHQpe2lmKG51bGw9PXQucGFyZW50KXJldHVybiBudWxsO2Zvcih2YXIgZT10LnBhcmVudCxyPXRpKGUubGluZXMsdCksbj1lLnBhcmVudDtuO2U9bixuPW4ucGFyZW50KWZvcih2YXIgaT0wO24uY2hpbGRyZW5baV0hPWU7KytpKXIrPW4uY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7cmV0dXJuIHIrZS5maXJzdH1mdW5jdGlvbiB4bih0LGUpe3ZhciByPXQuZmlyc3Q7dDpkb3tmb3IodmFyIG49MCxpPXQuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXQuY2hpbGRyZW5bbl0sbD1vLmhlaWdodDtpZihsPmUpe3Q9bztjb250aW51ZSB0fWUtPWwscis9by5jaHVua1NpemUoKX1yZXR1cm4gcn13aGlsZSghdC5saW5lcyk7Zm9yKHZhciBuPTAsaT10LmxpbmVzLmxlbmd0aDtpPm47KytuKXt2YXIgcz10LmxpbmVzW25dLGE9cy5oZWlnaHQ7aWYoYT5lKWJyZWFrO2UtPWF9cmV0dXJuIHIrbn1mdW5jdGlvbiBDbih0LGUpe2U9R3IodC5kb2MsZSk7Zm9yKHZhciByPTAsbj1lLnBhcmVudCxpPTA7aTxuLmxpbmVzLmxlbmd0aDsrK2kpe3ZhciBvPW4ubGluZXNbaV07aWYobz09ZSlicmVhaztyKz1vLmhlaWdodH1mb3IodmFyIGw9bi5wYXJlbnQ7bDtuPWwsbD1uLnBhcmVudClmb3IodmFyIGk9MDtpPGwuY2hpbGRyZW4ubGVuZ3RoOysraSl7dmFyIHM9bC5jaGlsZHJlbltpXTtpZihzPT1uKWJyZWFrO3IrPXMuaGVpZ2h0fXJldHVybiByfWZ1bmN0aW9uIHduKHQpe3ZhciBlPXQub3JkZXI7cmV0dXJuIG51bGw9PWUmJihlPXQub3JkZXI9Qm8odC50ZXh0KSksZX1mdW5jdGlvbiBMbih0KXtyZXR1cm57ZG9uZTpbXSx1bmRvbmU6W10sdW5kb0RlcHRoOjEvMCxsYXN0VGltZTowLGxhc3RPcDpudWxsLGxhc3RPcmlnaW46bnVsbCxnZW5lcmF0aW9uOnR8fDEsbWF4R2VuZXJhdGlvbjp0fHwxfX1mdW5jdGlvbiBrbih0LGUscixuKXt2YXIgaT1lWyJzcGFuc18iK3QuaWRdLG89MDt0Lml0ZXIoTWF0aC5tYXgodC5maXJzdCxyKSxNYXRoLm1pbih0LmZpcnN0K3Quc2l6ZSxuKSxmdW5jdGlvbihyKXtyLm1hcmtlZFNwYW5zJiYoKGl8fChpPWVbInNwYW5zXyIrdC5pZF09e30pKVtvXT1yLm1hcmtlZFNwYW5zKSwrK299KX1mdW5jdGlvbiBTbih0LGUpe3ZhciByPXtsaW5lOmUuZnJvbS5saW5lLGNoOmUuZnJvbS5jaH0sbj17ZnJvbTpyLHRvOmxvKGUpLHRleHQ6bW4odCxlLmZyb20sZS50byl9O3JldHVybiBrbih0LG4sZS5mcm9tLmxpbmUsZS50by5saW5lKzEpLGRuKHQsZnVuY3Rpb24odCl7a24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKX0sITApLG59ZnVuY3Rpb24gTW4odCxlLHIsbil7dmFyIGk9dC5oaXN0b3J5O2kudW5kb25lLmxlbmd0aD0wO3ZhciBvPStuZXcgRGF0ZSxsPVFuKGkuZG9uZSk7aWYobCYmKGkubGFzdE9wPT1ufHxpLmxhc3RPcmlnaW49PWUub3JpZ2luJiZlLm9yaWdpbiYmKCIrIj09ZS5vcmlnaW4uY2hhckF0KDApJiZ0LmNtJiZpLmxhc3RUaW1lPm8tdC5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5fHwiKiI9PWUub3JpZ2luLmNoYXJBdCgwKSkpKXt2YXIgcz1RbihsLmNoYW5nZXMpO2plKGUuZnJvbSxlLnRvKSYmamUoZS5mcm9tLHMudG8pP3MudG89bG8oZSk6bC5jaGFuZ2VzLnB1c2goU24odCxlKSksbC5hbmNob3JBZnRlcj1yLmFuY2hvcixsLmhlYWRBZnRlcj1yLmhlYWR9ZWxzZSBmb3IobD17Y2hhbmdlczpbU24odCxlKV0sZ2VuZXJhdGlvbjppLmdlbmVyYXRpb24sYW5jaG9yQmVmb3JlOnQuc2VsLmFuY2hvcixoZWFkQmVmb3JlOnQuc2VsLmhlYWQsYW5jaG9yQWZ0ZXI6ci5hbmNob3IsaGVhZEFmdGVyOnIuaGVhZH0saS5kb25lLnB1c2gobCksaS5nZW5lcmF0aW9uPSsraS5tYXhHZW5lcmF0aW9uO2kuZG9uZS5sZW5ndGg+aS51bmRvRGVwdGg7KWkuZG9uZS5zaGlmdCgpO2kubGFzdFRpbWU9byxpLmxhc3RPcD1uLGkubGFzdE9yaWdpbj1lLm9yaWdpbn1mdW5jdGlvbiBUbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGUscj0wO3I8dC5sZW5ndGg7KytyKXRbcl0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkP2V8fChlPXQuc2xpY2UoMCxyKSk6ZSYmZS5wdXNoKHRbcl0pO3JldHVybiBlP2UubGVuZ3RoP2U6bnVsbDp0fWZ1bmN0aW9uIEFuKHQsZSl7dmFyIHI9ZVsic3BhbnNfIit0LmlkXTtpZighcilyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxpPVtdO248ZS50ZXh0Lmxlbmd0aDsrK24paS5wdXNoKFRuKHJbbl0pKTtyZXR1cm4gaX1mdW5jdGlvbiBIbih0LGUpe2Zvcih2YXIgcj0wLG49W107cjx0Lmxlbmd0aDsrK3Ipe3ZhciBpPXRbcl0sbz1pLmNoYW5nZXMsbD1bXTtuLnB1c2goe2NoYW5nZXM6bCxhbmNob3JCZWZvcmU6aS5hbmNob3JCZWZvcmUsaGVhZEJlZm9yZTppLmhlYWRCZWZvcmUsYW5jaG9yQWZ0ZXI6aS5hbmNob3JBZnRlcixoZWFkQWZ0ZXI6aS5oZWFkQWZ0ZXJ9KTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoOysrcyl7dmFyIGEsdT1vW3NdO2lmKGwucHVzaCh7ZnJvbTp1LmZyb20sdG86dS50byx0ZXh0OnUudGV4dH0pLGUpZm9yKHZhciBjIGluIHUpKGE9Yy5tYXRjaCgvXnNwYW5zXyhcZCspJC8pKSYmdGkoZSxOdW1iZXIoYVsxXSkpPi0xJiYoUW4obClbY109dVtjXSxkZWxldGUgdVtjXSl9fXJldHVybiBufWZ1bmN0aW9uIE5uKHQsZSxyLG4pe3I8dC5saW5lP3QubGluZSs9bjplPHQubGluZSYmKHQubGluZT1lLHQuY2g9MCl9ZnVuY3Rpb24gRG4odCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe2Zvcih2YXIgbz10W2ldLGw9ITAscz0wO3M8by5jaGFuZ2VzLmxlbmd0aDsrK3Mpe3ZhciBhPW8uY2hhbmdlc1tzXTtpZihvLmNvcGllZHx8KGEuZnJvbT1aZShhLmZyb20pLGEudG89WmUoYS50bykpLHI8YS5mcm9tLmxpbmUpYS5mcm9tLmxpbmUrPW4sYS50by5saW5lKz1uO2Vsc2UgaWYoZTw9YS50by5saW5lKXtsPSExO2JyZWFrfX1vLmNvcGllZHx8KG8uYW5jaG9yQmVmb3JlPVplKG8uYW5jaG9yQmVmb3JlKSxvLmhlYWRCZWZvcmU9WmUoby5oZWFkQmVmb3JlKSxvLmFuY2hvckFmdGVyPVplKG8uYW5jaG9yQWZ0ZXIpLG8ucmVhZEFmdGVyPVplKG8uaGVhZEFmdGVyKSxvLmNvcGllZD0hMCksbD8oTm4oby5hbmNob3JCZWZvcmUpLE5uKG8uaGVhZEJlZm9yZSksTm4oby5hbmNob3JBZnRlciksTm4oby5oZWFkQWZ0ZXIpKToodC5zcGxpY2UoMCxpKzEpLGk9MCl9fWZ1bmN0aW9uIFduKHQsZSl7dmFyIHI9ZS5mcm9tLmxpbmUsbj1lLnRvLmxpbmUsaT1lLnRleHQubGVuZ3RoLShuLXIpLTE7RG4odC5kb25lLHIsbixpKSxEbih0LnVuZG9uZSxyLG4saSl9ZnVuY3Rpb24gT24oKXtQbih0aGlzKX1mdW5jdGlvbiBFbih0KXtyZXR1cm4gdC5zdG9wfHwodC5zdG9wPU9uKSx0fWZ1bmN0aW9uIHpuKHQpe3QucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITF9ZnVuY3Rpb24gSW4odCl7dC5zdG9wUHJvcGFnYXRpb24/dC5zdG9wUHJvcGFnYXRpb24oKTp0LmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBGbih0KXtyZXR1cm4gbnVsbCE9dC5kZWZhdWx0UHJldmVudGVkP3QuZGVmYXVsdFByZXZlbnRlZDowPT10LnJldHVyblZhbHVlfWZ1bmN0aW9uIFBuKHQpe3puKHQpLEluKHQpfWZ1bmN0aW9uIFJuKHQpe3JldHVybiB0LnRhcmdldHx8dC5zcmNFbGVtZW50fWZ1bmN0aW9uIEJuKHQpe3ZhciBlPXQud2hpY2g7cmV0dXJuIG51bGw9PWUmJigxJnQuYnV0dG9uP2U9MToyJnQuYnV0dG9uP2U9Mzo0JnQuYnV0dG9uJiYoZT0yKSksS2kmJnQuY3RybEtleSYmMT09ZSYmKGU9MyksZX1mdW5jdGlvbiBHbih0LGUscil7aWYodC5hZGRFdmVudExpc3RlbmVyKXQuYWRkRXZlbnRMaXN0ZW5lcihlLHIsITEpO2Vsc2UgaWYodC5hdHRhY2hFdmVudCl0LmF0dGFjaEV2ZW50KCJvbiIrZSxyKTtlbHNle3ZhciBuPXQuX2hhbmRsZXJzfHwodC5faGFuZGxlcnM9e30pLGk9bltlXXx8KG5bZV09W10pO2kucHVzaChyKX19ZnVuY3Rpb24gVm4odCxlLHIpe2lmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcil0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuZGV0YWNoRXZlbnQpdC5kZXRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYoIW4pcmV0dXJuO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7KytpKWlmKG5baV09PXIpe24uc3BsaWNlKGksMSk7YnJlYWt9fX1mdW5jdGlvbiBLbih0LGUpe3ZhciByPXQuX2hhbmRsZXJzJiZ0Ll9oYW5kbGVyc1tlXTtpZihyKWZvcih2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMiksaT0wO2k8ci5sZW5ndGg7KytpKXJbaV0uYXBwbHkobnVsbCxuKX1mdW5jdGlvbiBVbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dC5hcHBseShudWxsLGkpfX12YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYobil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO1NvfHwoKytNbyxTbz1bXSxzZXRUaW1lb3V0KF9uLDApKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbylTby5wdXNoKHIobltvXSkpfX1mdW5jdGlvbiBYbih0LGUscil7cmV0dXJuIEtuKHQscnx8ZS50eXBlLHQsZSksRm4oZSl8fGUuY29kZW1pcnJvcklnbm9yZX1mdW5jdGlvbiBfbigpey0tTW87dmFyIHQ9U287U289bnVsbDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdKCl9ZnVuY3Rpb24gWW4odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07cmV0dXJuIHImJnIubGVuZ3RoPjB9ZnVuY3Rpb24gam4odCl7dC5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXtHbih0aGlzLHQsZSl9LHQucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe1ZuKHRoaXMsdCxlKX19ZnVuY3Rpb24gJG4oKXt0aGlzLmlkPW51bGx9ZnVuY3Rpb24gWm4odCxlLHIsbixpKXtudWxsPT1lJiYoZT10LnNlYXJjaCgvW15cc1x1MDBhMF0vKSwtMT09ZSYmKGU9dC5sZW5ndGgpKTtmb3IodmFyIG89bnx8MCxsPWl8fDA7ZT5vOysrbykiCSI9PXQuY2hhckF0KG8pP2wrPXItbCVyOisrbDtyZXR1cm4gbH1mdW5jdGlvbiBxbih0KXtmb3IoO0hvLmxlbmd0aDw9dDspSG8ucHVzaChRbihIbykrIiAiKTtyZXR1cm4gSG9bdF19ZnVuY3Rpb24gUW4odCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gSm4odCl7aWYoR2kpdC5zZWxlY3Rpb25TdGFydD0wLHQuc2VsZWN0aW9uRW5kPXQudmFsdWUubGVuZ3RoO2Vsc2UgdHJ5e3Quc2VsZWN0KCl9Y2F0Y2goZSl7fX1mdW5jdGlvbiB0aSh0LGUpe2lmKHQuaW5kZXhPZilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7bj5yOysrcilpZih0W3JdPT1lKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGVpKHQsZSl7ZnVuY3Rpb24gcigpe31yLnByb3RvdHlwZT10O3ZhciBuPW5ldyByO3JldHVybiBlJiZyaShlLG4pLG59ZnVuY3Rpb24gcmkodCxlKXtlfHwoZT17fSk7Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmkodCl7Zm9yKHZhciBlPVtdLHI9MDt0PnI7KytyKWUucHVzaCh2b2lkIDApO3JldHVybiBlfWZ1bmN0aW9uIGlpKHQpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShudWxsLGUpfX1mdW5jdGlvbiBvaSh0KXtyZXR1cm4vXHcvLnRlc3QodCl8fHQ+IsKAIiYmKHQudG9VcHBlckNhc2UoKSE9dC50b0xvd2VyQ2FzZSgpfHxOby50ZXN0KHQpKX1mdW5jdGlvbiBsaSh0KXtmb3IodmFyIGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpJiZ0W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7aWYociYmKGkuY2xhc3NOYW1lPXIpLG4mJihpLnN0eWxlLmNzc1RleHQ9biksInN0cmluZyI9PXR5cGVvZiBlKWNpKGksZSk7ZWxzZSBpZihlKWZvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKWkuYXBwZW5kQ2hpbGQoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gYWkodCl7Zm9yKHZhciBlPXQuY2hpbGROb2Rlcy5sZW5ndGg7ZT4wOy0tZSl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCk7cmV0dXJuIHR9ZnVuY3Rpb24gdWkodCxlKXtyZXR1cm4gYWkodCkuYXBwZW5kQ2hpbGQoZSl9ZnVuY3Rpb24gY2kodCxlKXtOaT8odC5pbm5lckhUTUw9IiIsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSkpOnQudGV4dENvbnRlbnQ9ZX1mdW5jdGlvbiBmaSh0KXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1mdW5jdGlvbiBoaSgpe3JldHVybiExfWZ1bmN0aW9uIGRpKHQpe2lmKG51bGwhPU9vKXJldHVybiBPbzt2YXIgZT1zaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7IG92ZXJmbG93LXg6IHNjcm9sbCIpO3JldHVybiB1aSh0LGUpLGUub2Zmc2V0V2lkdGgmJihPbz1lLm9mZnNldEhlaWdodC1lLmNsaWVudEhlaWdodCksT298fDB9ZnVuY3Rpb24gcGkodCl7aWYobnVsbD09RW8pe3ZhciBlPXNpKCJzcGFuIiwi4oCLIik7dWkodCxzaSgic3BhbiIsW2UsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKV0pKSwwIT10LmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0JiYoRW89ZS5vZmZzZXRXaWR0aDw9MSYmZS5vZmZzZXRIZWlnaHQ+MiYmIUhpKX1yZXR1cm4gRW8/c2koInNwYW4iLCLigIsiKTpzaSgic3BhbiIsIsKgIixudWxsLCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpfWZ1bmN0aW9uIGdpKHQsZSxyLG4pe2lmKCF0KXJldHVybiBuKGUsciwibHRyIik7Zm9yKHZhciBpPSExLG89MDtvPHQubGVuZ3RoOysrbyl7dmFyIGw9dFtvXTsobC5mcm9tPHImJmwudG8+ZXx8ZT09ciYmbC50bz09ZSkmJihuKE1hdGgubWF4KGwuZnJvbSxlKSxNYXRoLm1pbihsLnRvLHIpLDE9PWwubGV2ZWw/InJ0bCI6Imx0ciIpLGk9ITApfWl8fG4oZSxyLCJsdHIiKX1mdW5jdGlvbiBtaSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QudG86dC5mcm9tfWZ1bmN0aW9uIHZpKHQpe3JldHVybiB0LmxldmVsJTI/dC5mcm9tOnQudG99ZnVuY3Rpb24geWkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/bWkoZVswXSk6MH1mdW5jdGlvbiBiaSh0KXt2YXIgZT13bih0KTtyZXR1cm4gZT92aShRbihlKSk6dC50ZXh0Lmxlbmd0aH1mdW5jdGlvbiB4aSh0LGUpe3ZhciByPWduKHQuZG9jLGUpLG49R3IodC5kb2Mscik7biE9ciYmKGU9Ym4obikpO3ZhciBpPXduKG4pLG89aT9pWzBdLmxldmVsJTI/Ymkobik6eWkobik6MDtyZXR1cm4gWWUoZSxvKX1mdW5jdGlvbiBDaSh0LGUpe2Zvcih2YXIgcixuO3I9QnIobj1nbih0LmRvYyxlKSk7KWU9ci5maW5kKCkudG8ubGluZTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP3lpKG4pOmJpKG4pOm4udGV4dC5sZW5ndGg7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gd2kodCxlLHIpe3ZhciBuPXRbMF0ubGV2ZWw7cmV0dXJuIGU9PW4/ITA6cj09bj8hMTpyPmV9ZnVuY3Rpb24gTGkodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXt2YXIgaT10W25dO2lmKGkuZnJvbTxlJiZpLnRvPmUpcmV0dXJuIFJvPW51bGwsbjtpZihpLmZyb209PWV8fGkudG89PWUpe2lmKG51bGwhPXIpcmV0dXJuIHdpKHQsaS5sZXZlbCx0W3JdLmxldmVsKT8oUm89cixuKTooUm89bixyKTtyPW59fXJldHVybiBSbz1udWxsLHJ9ZnVuY3Rpb24ga2kodCxlLHIsbil7aWYoIW4pcmV0dXJuIGUrcjtkbyBlKz1yO3doaWxlKGU+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGUpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gU2kodCxlLHIsbil7dmFyIGk9d24odCk7aWYoIWkpcmV0dXJuIE1pKHQsZSxyLG4pO2Zvcih2YXIgbz1MaShpLGUpLGw9aVtvXSxzPWtpKHQsZSxsLmxldmVsJTI/LXI6cixuKTs7KXtpZihzPmwuZnJvbSYmczxsLnRvKXJldHVybiBzO2lmKHM9PWwuZnJvbXx8cz09bC50bylyZXR1cm4gTGkoaSxzKT09bz9zOihsPWlbbys9cl0scj4wPT1sLmxldmVsJTI/bC50bzpsLmZyb20pO2lmKGw9aVtvKz1yXSwhbClyZXR1cm4gbnVsbDtzPXI+MD09bC5sZXZlbCUyP2tpKHQsbC50bywtMSxuKTpraSh0LGwuZnJvbSwxLG4pfX1mdW5jdGlvbiBNaSh0LGUscixuKXt2YXIgaT1lK3I7aWYobilmb3IoO2k+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGkpKTspaSs9cjtyZXR1cm4gMD5pfHxpPnQudGV4dC5sZW5ndGg/bnVsbDppfXZhciBUaT0vZ2Vja29cL1xkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxBaT0vTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxIaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDgpLE5pPUFpJiYobnVsbD09ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU8OSksRGk9L1RyaWRlbnRcLyhbNy05XXxcZHsyLH0pXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksV2k9L1dlYktpdFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLE9pPVdpJiYvUXRcL1xkK1wuXGQrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEVpPS9DaHJvbWVcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx6aT0vT3BlcmFcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxJaT0vQXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvciksRmk9L0tIVE1MXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUGk9L01hYyBPUyBYIDFcZFxEKFs3LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUmk9L01hYyBPUyBYIDFcZFxEKFs4LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQmk9L1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxHaT0vQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJi9Nb2JpbGVcL1x3Ky8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxWaT1HaXx8L0FuZHJvaWR8d2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEtpPUdpfHwvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksVWk9L3dpbi9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxYaT16aSYmbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwvKFxkKlwuXGQqKS8pO1hpJiYoWGk9TnVtYmVyKFhpWzFdKSksWGkmJlhpPj0xNSYmKHppPSExLFdpPSEwKTt2YXIgX2ksWWksamksJGk9S2kmJihPaXx8emkmJihudWxsPT1YaXx8MTIuMTE+WGkpKSxaaT1UaXx8QWkmJiFOaSxxaT0hMSxRaT0hMSxKaT0wLHRvPTAsZW89MCxybz1udWxsO0FpP3JvPS0uNTM6VGk/cm89MTU6RWk/cm89LS43OklpJiYocm89LTEvMyk7dmFyIG5vLGlvLG9vPW51bGwsbG89dC5jaGFuZ2VFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dD9ZZSh0LmZyb20ubGluZSt0LnRleHQubGVuZ3RoLTEsUW4odC50ZXh0KS5sZW5ndGgrKDE9PXQudGV4dC5sZW5ndGg/dC5mcm9tLmNoOjApKTp0LnRvfTt0LlBvcz1ZZSx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxmb2N1czpmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpLHBlKHRoaXMpLGZlKHRoaXMpfSxzZXRPcHRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLm9wdGlvbnMsbj1yW3RdOyhyW3RdIT1lfHwibW9kZSI9PXQpJiYoclt0XT1lLHNvLmhhc093blByb3BlcnR5KHQpJiZsZSh0aGlzLHNvW3RdKSh0aGlzLGUsbikpfSxnZXRPcHRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9uc1t0XX0sZ2V0RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jfSxhZGRLZXlNYXA6ZnVuY3Rpb24odCxlKXt0aGlzLnN0YXRlLmtleU1hcHNbZT8icHVzaCI6InVuc2hpZnQiXSh0KX0scmVtb3ZlS2V5TWFwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLmtleU1hcHMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PXR8fCJzdHJpbmciIT10eXBlb2YgZVtyXSYmZVtyXS5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLCEwfSxhZGRPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnRva2VuP2U6dC5nZXRNb2RlKHRoaXMub3B0aW9ucyxlKTtpZihuLnN0YXJ0U3RhdGUpdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLiIpO3RoaXMuc3RhdGUub3ZlcmxheXMucHVzaCh7bW9kZTpuLG1vZGVTcGVjOmUsb3BhcXVlOnImJnIub3BhcXVlfSksdGhpcy5zdGF0ZS5tb2RlR2VuKyssdWUodGhpcyl9KSxyZW1vdmVPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuc3RhdGUub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLm1vZGVTcGVjO2lmKG49PXR8fCJzdHJpbmciPT10eXBlb2YgdCYmbi5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpLHZvaWQgMH19KSxpbmRlbnRMaW5lOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpeyJzdHJpbmciIT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlJiYoZT1udWxsPT1lP3RoaXMub3B0aW9ucy5zbWFydEluZGVudD8ic21hcnQiOiJwcmV2IjplPyJhZGQiOiJzdWJ0cmFjdCIpLHRyKHRoaXMuZG9jLHQpJiZocih0aGlzLHQsZSxyKX0pLGluZGVudFNlbGVjdGlvbjpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jLnNlbDtpZihqZShlLmZyb20sZS50bykpcmV0dXJuIGhyKHRoaXMsZS5mcm9tLmxpbmUsdCk7Zm9yKHZhciByPWUudG8ubGluZS0oZS50by5jaD8wOjEpLG49ZS5mcm9tLmxpbmU7cj49bjsrK24paHIodGhpcyxuLHQpfSksZ2V0VG9rZW5BdDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3Q9UWUocix0KTtmb3IodmFyIG49eih0aGlzLHQubGluZSxlKSxpPXRoaXMuZG9jLm1vZGUsbz1nbihyLHQubGluZSksbD1uZXcgU3Ioby50ZXh0LHRoaXMub3B0aW9ucy50YWJTaXplKTtsLnBvczx0LmNoJiYhbC5lb2woKTspe2wuc3RhcnQ9bC5wb3M7dmFyIHM9aS50b2tlbihsLG4pfXJldHVybntzdGFydDpsLnN0YXJ0LGVuZDpsLnBvcyxzdHJpbmc6bC5jdXJyZW50KCksY2xhc3NOYW1lOnN8fG51bGwsdHlwZTpzfHxudWxsLHN0YXRlOm59fSxnZXRUb2tlblR5cGVBdDpmdW5jdGlvbih0KXt0PVFlKHRoaXMuZG9jLHQpO3ZhciBlPUpyKHRoaXMsZ24odGhpcy5kb2MsdC5saW5lKSkscj0wLG49KGUubGVuZ3RoLTEpLzIsaT10LmNoO2lmKDA9PWkpcmV0dXJuIGVbMl07Zm9yKDs7KXt2YXIgbz1yK24+PjE7aWYoKG8/ZVsyKm8tMV06MCk+PWkpbj1vO2Vsc2V7aWYoIShlWzIqbysxXTxpKSlyZXR1cm4gZVsyKm8rMl07cj1vKzF9fX0sZ2V0TW9kZUF0OmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZG9jLm1vZGU7cmV0dXJuIHIuaW5uZXJNb2RlP3QuaW5uZXJNb2RlKHIsdGhpcy5nZXRUb2tlbkF0KGUpLnN0YXRlKS5tb2RlOnJ9LGdldEhlbHBlcjpmdW5jdGlvbih0LGUpe2lmKGdvLmhhc093blByb3BlcnR5KGUpKXt2YXIgcj1nb1tlXSxuPXRoaXMuZ2V0TW9kZUF0KHQpO3JldHVybiBuW2VdJiZyW25bZV1dfHxuLmhlbHBlclR5cGUmJnJbbi5oZWxwZXJUeXBlXXx8cltuLm5hbWVdfX0sZ2V0U3RhdGVBZnRlcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3JldHVybiB0PXFlKHIsbnVsbD09dD9yLmZpcnN0K3Iuc2l6ZS0xOnQpLHoodGhpcyx0KzEsZSl9LGN1cnNvckNvb3JkczpmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3JldHVybiByPW51bGw9PXQ/bi5oZWFkOiJvYmplY3QiPT10eXBlb2YgdD9RZSh0aGlzLmRvYyx0KTp0P24uZnJvbTpuLnRvLFEodGhpcyxyLGV8fCJwYWdlIil9LGNoYXJDb29yZHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcSh0aGlzLFFlKHRoaXMuZG9jLHQpLGV8fCJwYWdlIil9LGNvb3Jkc0NoYXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1aKHRoaXMsdCxlfHwicGFnZSIpLHRlKHRoaXMsdC5sZWZ0LHQudG9wKX0sbGluZUF0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHt0b3A6dCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wLHhuKHRoaXMuZG9jLHQrdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpfSxoZWlnaHRBdExpbmU6ZnVuY3Rpb24odCxlKXt2YXIgcj0hMSxuPXRoaXMuZG9jLmZpcnN0K3RoaXMuZG9jLnNpemUtMTt0PHRoaXMuZG9jLmZpcnN0P3Q9dGhpcy5kb2MuZmlyc3Q6dD5uJiYodD1uLHI9ITApO3ZhciBpPWduKHRoaXMuZG9jLHQpO3JldHVybiAkKHRoaXMsZ24odGhpcy5kb2MsdCkse3RvcDowLGxlZnQ6MH0sZXx8InBhZ2UiKS50b3ArKHI/aS5oZWlnaHQ6MCl9LGRlZmF1bHRUZXh0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHJlKHRoaXMuZGlzcGxheSl9LGRlZmF1bHRDaGFyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gbmUodGhpcy5kaXNwbGF5KX0sc2V0R3V0dGVyTWFya2VyOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49dC5ndXR0ZXJNYXJrZXJzfHwodC5ndXR0ZXJNYXJrZXJzPXt9KTtyZXR1cm4gbltlXT1yLCFyJiZsaShuKSYmKHQuZ3V0dGVyTWFya2Vycz1udWxsKSwhMH0pfSksY2xlYXJHdXR0ZXI6bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kb2Msbj1yLmZpcnN0O3IuaXRlcihmdW5jdGlvbihyKXtyLmd1dHRlck1hcmtlcnMmJnIuZ3V0dGVyTWFya2Vyc1t0XSYmKHIuZ3V0dGVyTWFya2Vyc1t0XT1udWxsLHVlKGUsbixuKzEpLGxpKHIuZ3V0dGVyTWFya2VycykmJihyLmd1dHRlck1hcmtlcnM9bnVsbCkpLCsrbn0pfSksYWRkTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyI7aWYodFtuXSl7aWYobmV3IFJlZ0V4cCgiKD86XnxcXHMpIityKyIoPzokfFxccykiKS50ZXN0KHRbbl0pKXJldHVybiExO3Rbbl0rPSIgIityfWVsc2UgdFtuXT1yO3JldHVybiEwfSl9KSxyZW1vdmVMaW5lQ2xhc3M6bGUobnVsbCxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRyKHRoaXMsdCxmdW5jdGlvbih0KXt2YXIgbj0idGV4dCI9PWU/InRleHRDbGFzcyI6ImJhY2tncm91bmQiPT1lPyJiZ0NsYXNzIjoid3JhcENsYXNzIixpPXRbbl07aWYoIWkpcmV0dXJuITE7aWYobnVsbD09cil0W25dPW51bGw7ZWxzZXt2YXIgbz1pLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3IrIig/OiR8XFxzKykiKSk7aWYoIW8pcmV0dXJuITE7dmFyIGw9by5pbmRleCtvWzBdLmxlbmd0aDt0W25dPWkuc2xpY2UoMCxvLmluZGV4KSsoby5pbmRleCYmbCE9aS5sZW5ndGg/IiAiOiIiKStpLnNsaWNlKGwpfHxudWxsfXJldHVybiEwfSl9KSxhZGRMaW5lV2lkZ2V0OmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBqcih0aGlzLHQsZSxyKX0pLHJlbW92ZUxpbmVXaWRnZXQ6ZnVuY3Rpb24odCl7dC5jbGVhcigpfSxsaW5lSW5mbzpmdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCF0cih0aGlzLmRvYyx0KSlyZXR1cm4gbnVsbDt2YXIgZT10O2lmKHQ9Z24odGhpcy5kb2MsdCksIXQpcmV0dXJuIG51bGx9ZWxzZXt2YXIgZT1ibih0KTtpZihudWxsPT1lKXJldHVybiBudWxsfXJldHVybntsaW5lOmUsaGFuZGxlOnQsdGV4dDp0LnRleHQsZ3V0dGVyTWFya2Vyczp0Lmd1dHRlck1hcmtlcnMsdGV4dENsYXNzOnQudGV4dENsYXNzLGJnQ2xhc3M6dC5iZ0NsYXNzLHdyYXBDbGFzczp0LndyYXBDbGFzcyx3aWRnZXRzOnQud2lkZ2V0c319LGdldFZpZXdwb3J0OmZ1bmN0aW9uKCl7cmV0dXJue2Zyb206dGhpcy5kaXNwbGF5LnNob3dpbmdGcm9tLHRvOnRoaXMuZGlzcGxheS5zaG93aW5nVG99fSxhZGRXaWRnZXQ6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz10aGlzLmRpc3BsYXk7dD1RKHRoaXMsUWUodGhpcy5kb2MsdCkpO3ZhciBsPXQuYm90dG9tLHM9dC5sZWZ0O2lmKGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnNpemVyLmFwcGVuZENoaWxkKGUpLCJvdmVyIj09bilsPXQudG9wO2Vsc2UgaWYoImFib3ZlIj09bnx8Im5lYXIiPT1uKXt2YXIgYT1NYXRoLm1heChvLndyYXBwZXIuY2xpZW50SGVpZ2h0LHRoaXMuZG9jLmhlaWdodCksdT1NYXRoLm1heChvLnNpemVyLmNsaWVudFdpZHRoLG8ubGluZVNwYWNlLmNsaWVudFdpZHRoKTsoImFib3ZlIj09bnx8dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ+YSkmJnQudG9wPmUub2Zmc2V0SGVpZ2h0P2w9dC50b3AtZS5vZmZzZXRIZWlnaHQ6dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ8PWEmJihsPXQuYm90dG9tKSxzK2Uub2Zmc2V0V2lkdGg+dSYmKHM9dS1lLm9mZnNldFdpZHRoKX1lLnN0eWxlLnRvcD1sKyJweCIsZS5zdHlsZS5sZWZ0PWUuc3R5bGUucmlnaHQ9IiIsInJpZ2h0Ij09aT8ocz1vLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgsZS5zdHlsZS5yaWdodD0iMHB4Iik6KCJsZWZ0Ij09aT9zPTA6Im1pZGRsZSI9PWkmJihzPShvLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgpLzIpLGUuc3R5bGUubGVmdD1zKyJweCIpLHImJmFyKHRoaXMscyxsLHMrZS5vZmZzZXRXaWR0aCxsK2Uub2Zmc2V0SGVpZ2h0KX0sdHJpZ2dlck9uS2V5RG93bjpsZShudWxsLFdlKSxleGVjQ29tbWFuZDpmdW5jdGlvbih0KXtyZXR1cm4gbW9bdF0odGhpcyl9LGZpbmRQb3NIOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTE7MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIG89MCxsPVFlKHRoaXMuZG9jLHQpO2U+byYmKGw9cHIodGhpcy5kb2MsbCxpLHIsbiksIWwuaGl0U2lkZSk7KytvKTtyZXR1cm4gbH0sbW92ZUg6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3I9bi5zaGlmdHx8bi5leHRlbmR8fGplKG4uZnJvbSxuLnRvKT9wcih0aGlzLmRvYyxuLmhlYWQsdCxlLHRoaXMub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkpOjA+dD9uLmZyb206bi50byxlcih0aGlzLmRvYyxyLHIsdCl9KSxkZWxldGVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYy5zZWw7amUoci5mcm9tLHIudG8pP19lKHRoaXMuZG9jLCIiLHIuZnJvbSxwcih0aGlzLmRvYyxyLmhlYWQsdCxlLCExKSwiK2RlbGV0ZSIpOl9lKHRoaXMuZG9jLCIiLHIuZnJvbSxyLnRvLCIrZGVsZXRlIiksdGhpcy5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwfSksZmluZFBvc1Y6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MSxvPW47MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIGw9MCxzPVFlKHRoaXMuZG9jLHQpO2U+bDsrK2wpe3ZhciBhPVEodGhpcyxzLCJkaXYiKTtpZihudWxsPT1vP289YS5sZWZ0OmEubGVmdD1vLHM9Z3IodGhpcyxhLGkscikscy5oaXRTaWRlKWJyZWFrfXJldHVybiBzfSxtb3ZlVjpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsLG49USh0aGlzLHIuaGVhZCwiZGl2Iik7bnVsbCE9ci5nb2FsQ29sdW1uJiYobi5sZWZ0PXIuZ29hbENvbHVtbik7dmFyIGk9Z3IodGhpcyxuLHQsZSk7InBhZ2UiPT1lJiZmcih0aGlzLDAscSh0aGlzLGksImRpdiIpLnRvcC1uLnRvcCksZXIodGhpcy5kb2MsaSxpLHQpLHIuZ29hbENvbHVtbj1uLmxlZnR9KSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7KG51bGw9PXR8fHQhPXRoaXMuc3RhdGUub3ZlcndyaXRlKSYmKCh0aGlzLnN0YXRlLm92ZXJ3cml0ZT0hdGhpcy5zdGF0ZS5vdmVyd3JpdGUpP3RoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itb3ZlcndyaXRlIjp0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZT10aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1vdmVyd3JpdGUiLCIiKSl9LGhhc0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuZm9jdXNlZH0sc2Nyb2xsVG86bGUobnVsbCxmdW5jdGlvbih0LGUpe2NyKHRoaXMsdCxlKX0pLGdldFNjcm9sbEluZm86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRpc3BsYXkuc2Nyb2xsZXIsZT1UbztyZXR1cm57bGVmdDp0LnNjcm9sbExlZnQsdG9wOnQuc2Nyb2xsVG9wLGhlaWdodDp0LnNjcm9sbEhlaWdodC1lLHdpZHRoOnQuc2Nyb2xsV2lkdGgtZSxjbGllbnRIZWlnaHQ6dC5jbGllbnRIZWlnaHQtZSxjbGllbnRXaWR0aDp0LmNsaWVudFdpZHRoLWV9fSxzY3JvbGxJbnRvVmlldzpsZShudWxsLGZ1bmN0aW9uKHQsZSl7bnVsbD09dD90PXtmcm9tOnRoaXMuZG9jLnNlbC5oZWFkLHRvOm51bGx9OiJudW1iZXIiPT10eXBlb2YgdD90PXtmcm9tOlllKHQsMCksdG86bnVsbH06bnVsbD09dC5mcm9tJiYodD17ZnJvbTp0LHRvOm51bGx9KSx0LnRvfHwodC50bz10LmZyb20pLGV8fChlPTApO3ZhciByPXQ7bnVsbCE9dC5mcm9tLmxpbmUmJih0aGlzLmN1ck9wLnNjcm9sbFRvUG9zPXtmcm9tOnQuZnJvbSx0bzp0LnRvLG1hcmdpbjplfSxyPXtmcm9tOlEodGhpcyx0LmZyb20pLHRvOlEodGhpcyx0LnRvKX0pO3ZhciBuPXVyKHRoaXMsTWF0aC5taW4oci5mcm9tLmxlZnQsci50by5sZWZ0KSxNYXRoLm1pbihyLmZyb20udG9wLHIudG8udG9wKS1lLE1hdGgubWF4KHIuZnJvbS5yaWdodCxyLnRvLnJpZ2h0KSxNYXRoLm1heChyLmZyb20uYm90dG9tLHIudG8uYm90dG9tKStlKTtjcih0aGlzLG4uc2Nyb2xsTGVmdCxuLnNjcm9sbFRvcCl9KSxzZXRTaXplOmxlKG51bGwsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8L15cZCskLy50ZXN0KFN0cmluZyh0KSk/dCsicHgiOnR9bnVsbCE9dCYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoPXIodCkpLG51bGwhPWUmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQ9cihlKSksdGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZyYmKHRoaXMuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aD10aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcz0wKSx0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwfSksb3BlcmF0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBhZSh0aGlzLHQpfSxyZWZyZXNoOmxlKG51bGwsZnVuY3Rpb24oKXt2YXIgdD1udWxsPT10aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDtfKHRoaXMpLGNyKHRoaXMsdGhpcy5kb2Muc2Nyb2xsTGVmdCx0aGlzLmRvYy5zY3JvbGxUb3ApLHVlKHRoaXMpLHQmJm8odGhpcyl9KSxzd2FwRG9jOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kb2M7cmV0dXJuIGUuY209bnVsbCxwbih0aGlzLHQpLF8odGhpcyksZGUodGhpcywhMCksY3IodGhpcyx0LnNjcm9sbExlZnQsdC5zY3JvbGxUb3ApLFVuKHRoaXMsInN3YXBEb2MiLHRoaXMsZSksZX0pLGdldElucHV0RmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0fSxnZXRXcmFwcGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcn0sZ2V0U2Nyb2xsZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcn0sZ2V0R3V0dGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyc319LGpuKHQpO3ZhciBzbz10Lm9wdGlvbkhhbmRsZXJzPXt9LGFvPXQuZGVmYXVsdHM9e30sdW89dC5Jbml0PXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLkluaXQifX07eXIoInZhbHVlIiwiIixmdW5jdGlvbih0LGUpe3Quc2V0VmFsdWUoZSl9LCEwKSx5cigibW9kZSIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZG9jLm1vZGVPcHRpb249ZSxyKHQpfSwhMCkseXIoImluZGVudFVuaXQiLDIsciwhMCkseXIoImluZGVudFdpdGhUYWJzIiwhMSkseXIoInNtYXJ0SW5kZW50IiwhMCkseXIoInRhYlNpemUiLDQsZnVuY3Rpb24odCl7cih0KSxfKHQpLHVlKHQpfSwhMCkseXIoInNwZWNpYWxDaGFycyIsL1tcdFx1MDAwMC1cdTAwMTlcdTAwYWRcdTIwMGJcdTIwMjhcdTIwMjlcdWZlZmZdL2csZnVuY3Rpb24odCxlKXt0Lm9wdGlvbnMuc3BlY2lhbENoYXJzPW5ldyBSZWdFeHAoZS5zb3VyY2UrKGUudGVzdCgiCSIpPyIiOiJ8CSIpLCJnIiksdC5yZWZyZXNoKCl9LCEwKSx5cigic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsbm4sZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigiZWxlY3RyaWNDaGFycyIsITApLHlyKCJydGxNb3ZlVmlzdWFsbHkiLCFVaSkseXIoIndob2xlTGluZVVwZGF0ZUJlZm9yZSIsITApLHlyKCJ0aGVtZSIsImRlZmF1bHQiLGZ1bmN0aW9uKHQpe3ModCksYSh0KX0sITApLHlyKCJrZXlNYXAiLCJkZWZhdWx0IixsKSx5cigiZXh0cmFLZXlzIixudWxsKSx5cigib25LZXlFdmVudCIsbnVsbCkseXIoIm9uRHJhZ0V2ZW50IixudWxsKSx5cigibGluZVdyYXBwaW5nIiwhMSxuLCEwKSx5cigiZ3V0dGVycyIsW10sZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZml4ZWRHdXR0ZXIiLCEwLGZ1bmN0aW9uKHQsZSl7dC5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdD1lP3kodC5kaXNwbGF5KSsicHgiOiIwIix0LnJlZnJlc2goKX0sITApLHlyKCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciIsITEsZCwhMCkseXIoImxpbmVOdW1iZXJzIiwhMSxmdW5jdGlvbih0KXtoKHQub3B0aW9ucyksYSh0KX0sITApLHlyKCJmaXJzdExpbmVOdW1iZXIiLDEsYSwhMCkseXIoImxpbmVOdW1iZXJGb3JtYXR0ZXIiLGZ1bmN0aW9uKHQpe3JldHVybiB0fSxhLCEwKSx5cigic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCExLEEsITApLHlyKCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUiLCEwKSx5cigicmVhZE9ubHkiLCExLGZ1bmN0aW9uKHQsZSl7Im5vY3Vyc29yIj09ZT8oemUodCksdC5kaXNwbGF5LmlucHV0LmJsdXIoKSx0LmRpc3BsYXkuZGlzYWJsZWQ9ITApOih0LmRpc3BsYXkuZGlzYWJsZWQ9ITEsZXx8ZGUodCwhMCkpfSkseXIoImRyYWdEcm9wIiwhMCkseXIoImN1cnNvckJsaW5rUmF0ZSIsNTMwKSx5cigiY3Vyc29yU2Nyb2xsTWFyZ2luIiwwKSx5cigiY3Vyc29ySGVpZ2h0IiwxKSx5cigid29ya1RpbWUiLDEwMCkseXIoIndvcmtEZWxheSIsMTAwKSx5cigiZmxhdHRlblNwYW5zIiwhMCkseXIoInBvbGxJbnRlcnZhbCIsMTAwKSx5cigidW5kb0RlcHRoIiw0MCxmdW5jdGlvbih0LGUpe3QuZG9jLmhpc3RvcnkudW5kb0RlcHRoPWV9KSx5cigiaGlzdG9yeUV2ZW50RGVsYXkiLDUwMCkseXIoInZpZXdwb3J0TWFyZ2luIiwxMCxmdW5jdGlvbih0KXt0LnJlZnJlc2goKX0sITApLHlyKCJtYXhIaWdobGlnaHRMZW5ndGgiLDFlNCxmdW5jdGlvbih0KXtyKHQpLHQucmVmcmVzaCgpfSwhMCkseXIoImNydWRlTWVhc3VyaW5nRnJvbSIsMWU0KSx5cigibW92ZUlucHV0V2l0aEN1cnNvciIsITAsZnVuY3Rpb24odCxlKXtlfHwodC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcD10LmRpc3BsYXkuaW5wdXREaXYuc3R5bGUubGVmdD0wKX0pLHlyKCJ0YWJpbmRleCIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5pbnB1dC50YWJJbmRleD1lfHwiIn0pLHlyKCJhdXRvZm9jdXMiLG51bGwpO3ZhciBjbz10Lm1vZGVzPXt9LGZvPXQubWltZU1vZGVzPXt9O3QuZGVmaW5lTW9kZT1mdW5jdGlvbihlLHIpe2lmKHQuZGVmYXVsdHMubW9kZXx8Im51bGwiPT1lfHwodC5kZWZhdWx0cy5tb2RlPWUpLGFyZ3VtZW50cy5sZW5ndGg+Mil7ci5kZXBlbmRlbmNpZXM9W107Zm9yKHZhciBuPTI7bjxhcmd1bWVudHMubGVuZ3RoOysrbilyLmRlcGVuZGVuY2llcy5wdXNoKGFyZ3VtZW50c1tuXSl9Y29bZV09cn0sdC5kZWZpbmVNSU1FPWZ1bmN0aW9uKHQsZSl7Zm9bdF09ZX0sdC5yZXNvbHZlTW9kZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJmZvLmhhc093blByb3BlcnR5KGUpKWU9Zm9bZV07ZWxzZSBpZihlJiYic3RyaW5nIj09dHlwZW9mIGUubmFtZSYmZm8uaGFzT3duUHJvcGVydHkoZS5uYW1lKSl7dmFyIHI9Zm9bZS5uYW1lXTtlPWVpKHIsZSksZS5uYW1lPXIubmFtZX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSYmL15bXHdcLV0rXC9bXHdcLV0rXCt4bWwkLy50ZXN0KGUpKXJldHVybiB0LnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/e25hbWU6ZX06ZXx8e25hbWU6Im51bGwifX0sdC5nZXRNb2RlPWZ1bmN0aW9uKGUscil7dmFyIHI9dC5yZXNvbHZlTW9kZShyKSxuPWNvW3IubmFtZV07aWYoIW4pcmV0dXJuIHQuZ2V0TW9kZShlLCJ0ZXh0L3BsYWluIik7dmFyIGk9bihlLHIpO2lmKGhvLmhhc093blByb3BlcnR5KHIubmFtZSkpe3ZhciBvPWhvW3IubmFtZV07Zm9yKHZhciBsIGluIG8pby5oYXNPd25Qcm9wZXJ0eShsKSYmKGkuaGFzT3duUHJvcGVydHkobCkmJihpWyJfIitsXT1pW2xdKSxpW2xdPW9bbF0pfXJldHVybiBpLm5hbWU9ci5uYW1lLGl9LHQuZGVmaW5lTW9kZSgibnVsbCIsZnVuY3Rpb24oKXtyZXR1cm57dG9rZW46ZnVuY3Rpb24odCl7dC5za2lwVG9FbmQoKX19fSksdC5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwibnVsbCIpO3ZhciBobz10Lm1vZGVFeHRlbnNpb25zPXt9O3QuZXh0ZW5kTW9kZT1mdW5jdGlvbih0LGUpe3ZhciByPWhvLmhhc093blByb3BlcnR5KHQpP2hvW3RdOmhvW3RdPXt9O3JpKGUscil9LHQuZGVmaW5lRXh0ZW5zaW9uPWZ1bmN0aW9uKGUscil7dC5wcm90b3R5cGVbZV09cn0sdC5kZWZpbmVEb2NFeHRlbnNpb249ZnVuY3Rpb24odCxlKXt3by5wcm90b3R5cGVbdF09ZX0sdC5kZWZpbmVPcHRpb249eXI7dmFyIHBvPVtdO3QuZGVmaW5lSW5pdEhvb2s9ZnVuY3Rpb24odCl7cG8ucHVzaCh0KX07dmFyIGdvPXQuaGVscGVycz17fTt0LnJlZ2lzdGVySGVscGVyPWZ1bmN0aW9uKGUscixuKXtnby5oYXNPd25Qcm9wZXJ0eShlKXx8KGdvW2VdPXRbZV09e30pLGdvW2VdW3JdPW59LHQuaXNXb3JkQ2hhcj1vaSx0LmNvcHlTdGF0ZT1icix0LnN0YXJ0U3RhdGU9eHIsdC5pbm5lck1vZGU9ZnVuY3Rpb24odCxlKXtmb3IoO3QuaW5uZXJNb2RlOyl7dmFyIHI9dC5pbm5lck1vZGUoZSk7aWYoIXJ8fHIubW9kZT09dClicmVhaztlPXIuc3RhdGUsdD1yLm1vZGV9cmV0dXJuIHJ8fHttb2RlOnQsc3RhdGU6ZX19O3ZhciBtbz10LmNvbW1hbmRzPXtzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dC5zZXRTZWxlY3Rpb24oWWUodC5maXJzdExpbmUoKSwwKSxZZSh0Lmxhc3RMaW5lKCkpKX0sa2lsbExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoITApLHI9dC5nZXRDdXJzb3IoITEpLG49IWplKGUscik7bnx8dC5nZXRMaW5lKGUubGluZSkubGVuZ3RoIT1lLmNoP3QucmVwbGFjZVJhbmdlKCIiLGUsbj9yOlllKGUubGluZSksIitkZWxldGUiKTp0LnJlcGxhY2VSYW5nZSgiIixlLFllKGUubGluZSsxLDApLCIrZGVsZXRlIil9LGRlbGV0ZUxpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKS5saW5lO3QucmVwbGFjZVJhbmdlKCIiLFllKGUsMCksWWUoZSksIitkZWxldGUiKX0sZGVsTGluZUxlZnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLmxpbmUsMCksZSwiK2RlbGV0ZSIpfSx1bmRvOmZ1bmN0aW9uKHQpe3QudW5kbygpfSxyZWRvOmZ1bmN0aW9uKHQpe3QucmVkbygpfSxnb0RvY1N0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCkpfSxnb0RvY0VuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0Lmxhc3RMaW5lKCkpKX0sZ29MaW5lU3RhcnQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oeGkodCx0LmdldEN1cnNvcigpLmxpbmUpKX0sZ29MaW5lU3RhcnRTbWFydDpmdW5jdGlvbih0KXt2YXIgZT10LmdldEN1cnNvcigpLHI9eGkodCxlLmxpbmUpLG49dC5nZXRMaW5lSGFuZGxlKHIubGluZSksaT13bihuKTtpZihpJiYwIT1pWzBdLmxldmVsKXQuZXh0ZW5kU2VsZWN0aW9uKHIpO2Vsc2V7dmFyIG89TWF0aC5tYXgoMCxuLnRleHQuc2VhcmNoKC9cUy8pKSxsPWUubGluZT09ci5saW5lJiZlLmNoPD1vJiZlLmNoO3QuZXh0ZW5kU2VsZWN0aW9uKFllKHIubGluZSxsPzA6bykpfX0sZ29MaW5lRW5kOmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKENpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVJpZ2h0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6dC5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGgrMTAwLHRvcDplfSwiZGl2IikpfSxnb0xpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwibGluZSIpfSxnb0xpbmVEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwibGluZSIpfSxnb1BhZ2VVcDpmdW5jdGlvbih0KXt0Lm1vdmVWKC0xLCJwYWdlIil9LGdvUGFnZURvd246ZnVuY3Rpb24odCl7dC5tb3ZlVigxLCJwYWdlIil9LGdvQ2hhckxlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiY2hhciIpfSxnb0NoYXJSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNoYXIiKX0sZ29Db2x1bW5MZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNvbHVtbiIpfSxnb0NvbHVtblJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiY29sdW1uIil9LGdvV29yZExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwid29yZCIpfSxnb0dyb3VwUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJncm91cCIpfSxnb0dyb3VwTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJncm91cCIpfSxnb1dvcmRSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsIndvcmQiKX0sZGVsQ2hhckJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImNoYXIiKX0sZGVsQ2hhckFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJjaGFyIil9LGRlbFdvcmRCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJ3b3JkIil9LGRlbFdvcmRBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwid29yZCIpfSxkZWxHcm91cEJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImdyb3VwIil9LGRlbEdyb3VwQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsImdyb3VwIil9LGluZGVudEF1dG86ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iil9LGluZGVudE1vcmU6ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oImFkZCIpfSxpbmRlbnRMZXNzOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpfSxpbnNlcnRUYWI6ZnVuY3Rpb24odCl7dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LGRlZmF1bHRUYWI6ZnVuY3Rpb24odCl7dC5zb21ldGhpbmdTZWxlY3RlZCgpP3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKTp0LnJlcGxhY2VTZWxlY3Rpb24oIgkiLCJlbmQiLCIraW5wdXQiKX0sdHJhbnNwb3NlQ2hhcnM6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXQuZ2V0TGluZShlLmxpbmUpO2UuY2g+MCYmZS5jaDxyLmxlbmd0aC0xJiZ0LnJlcGxhY2VSYW5nZShyLmNoYXJBdChlLmNoKStyLmNoYXJBdChlLmNoLTEpLFllKGUubGluZSxlLmNoLTEpLFllKGUubGluZSxlLmNoKzEpKX0sbmV3bGluZUFuZEluZGVudDpmdW5jdGlvbih0KXtsZSh0LGZ1bmN0aW9uKCl7dC5yZXBsYWNlU2VsZWN0aW9uKCJcbiIsImVuZCIsIitpbnB1dCIpLHQuaW5kZW50TGluZSh0LmdldEN1cnNvcigpLmxpbmUsbnVsbCwhMCl9KSgpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7dC50b2dnbGVPdmVyd3JpdGUoKX19LHZvPXQua2V5TWFwPXt9O3ZvLmJhc2ljPXtMZWZ0OiJnb0NoYXJMZWZ0IixSaWdodDoiZ29DaGFyUmlnaHQiLFVwOiJnb0xpbmVVcCIsRG93bjoiZ29MaW5lRG93biIsRW5kOiJnb0xpbmVFbmQiLEhvbWU6ImdvTGluZVN0YXJ0U21hcnQiLFBhZ2VVcDoiZ29QYWdlVXAiLFBhZ2VEb3duOiJnb1BhZ2VEb3duIixEZWxldGU6ImRlbENoYXJBZnRlciIsQmFja3NwYWNlOiJkZWxDaGFyQmVmb3JlIiwiU2hpZnQtQmFja3NwYWNlIjoiZGVsQ2hhckJlZm9yZSIsVGFiOiJkZWZhdWx0VGFiIiwiU2hpZnQtVGFiIjoiaW5kZW50QXV0byIsRW50ZXI6Im5ld2xpbmVBbmRJbmRlbnQiLEluc2VydDoidG9nZ2xlT3ZlcndyaXRlIn0sdm8ucGNEZWZhdWx0PXsiQ3RybC1BIjoic2VsZWN0QWxsIiwiQ3RybC1EIjoiZGVsZXRlTGluZSIsIkN0cmwtWiI6InVuZG8iLCJTaGlmdC1DdHJsLVoiOiJyZWRvIiwiQ3RybC1ZIjoicmVkbyIsIkN0cmwtSG9tZSI6ImdvRG9jU3RhcnQiLCJBbHQtVXAiOiJnb0RvY1N0YXJ0IiwiQ3RybC1FbmQiOiJnb0RvY0VuZCIsIkN0cmwtRG93biI6ImdvRG9jRW5kIiwiQ3RybC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJDdHJsLVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQWx0LUxlZnQiOiJnb0xpbmVTdGFydCIsIkFsdC1SaWdodCI6ImdvTGluZUVuZCIsIkN0cmwtQmFja3NwYWNlIjoiZGVsR3JvdXBCZWZvcmUiLCJDdHJsLURlbGV0ZSI6ImRlbEdyb3VwQWZ0ZXIiLCJDdHJsLVMiOiJzYXZlIiwiQ3RybC1GIjoiZmluZCIsIkN0cmwtRyI6ImZpbmROZXh0IiwiU2hpZnQtQ3RybC1HIjoiZmluZFByZXYiLCJTaGlmdC1DdHJsLUYiOiJyZXBsYWNlIiwiU2hpZnQtQ3RybC1SIjoicmVwbGFjZUFsbCIsIkN0cmwtWyI6ImluZGVudExlc3MiLCJDdHJsLV0iOiJpbmRlbnRNb3JlIixmYWxsdGhyb3VnaDoiYmFzaWMifSx2by5tYWNEZWZhdWx0PXsiQ21kLUEiOiJzZWxlY3RBbGwiLCJDbWQtRCI6ImRlbGV0ZUxpbmUiLCJDbWQtWiI6InVuZG8iLCJTaGlmdC1DbWQtWiI6InJlZG8iLCJDbWQtWSI6InJlZG8iLCJDbWQtVXAiOiJnb0RvY1N0YXJ0IiwiQ21kLUVuZCI6ImdvRG9jRW5kIiwiQ21kLURvd24iOiJnb0RvY0VuZCIsIkFsdC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJBbHQtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJDbWQtTGVmdCI6ImdvTGluZVN0YXJ0IiwiQ21kLVJpZ2h0IjoiZ29MaW5lRW5kIiwiQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1BbHQtQmFja3NwYWNlIjoiZGVsR3JvdXBBZnRlciIsIkFsdC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ21kLVMiOiJzYXZlIiwiQ21kLUYiOiJmaW5kIiwiQ21kLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUNtZC1HIjoiZmluZFByZXYiLCJDbWQtQWx0LUYiOiJyZXBsYWNlIiwiU2hpZnQtQ21kLUFsdC1GIjoicmVwbGFjZUFsbCIsIkNtZC1bIjoiaW5kZW50TGVzcyIsIkNtZC1dIjoiaW5kZW50TW9yZSIsIkNtZC1CYWNrc3BhY2UiOiJkZWxMaW5lTGVmdCIsZmFsbHRocm91Z2g6WyJiYXNpYyIsImVtYWNzeSJdfSx2b1siZGVmYXVsdCJdPUtpP3ZvLm1hY0RlZmF1bHQ6dm8ucGNEZWZhdWx0LHZvLmVtYWNzeT17IkN0cmwtRiI6ImdvQ2hhclJpZ2h0IiwiQ3RybC1CIjoiZ29DaGFyTGVmdCIsIkN0cmwtUCI6ImdvTGluZVVwIiwiQ3RybC1OIjoiZ29MaW5lRG93biIsIkFsdC1GIjoiZ29Xb3JkUmlnaHQiLCJBbHQtQiI6ImdvV29yZExlZnQiLCJDdHJsLUEiOiJnb0xpbmVTdGFydCIsIkN0cmwtRSI6ImdvTGluZUVuZCIsIkN0cmwtViI6ImdvUGFnZURvd24iLCJTaGlmdC1DdHJsLVYiOiJnb1BhZ2VVcCIsIkN0cmwtRCI6ImRlbENoYXJBZnRlciIsIkN0cmwtSCI6ImRlbENoYXJCZWZvcmUiLCJBbHQtRCI6ImRlbFdvcmRBZnRlciIsIkFsdC1CYWNrc3BhY2UiOiJkZWxXb3JkQmVmb3JlIiwiQ3RybC1LIjoia2lsbExpbmUiLCJDdHJsLVQiOiJ0cmFuc3Bvc2VDaGFycyJ9LHQubG9va3VwS2V5PXdyLHQuaXNNb2RpZmllcktleT1Mcix0LmtleU5hbWU9a3IsdC5mcm9tVGV4dEFyZWE9ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7ZS52YWx1ZT11LmdldFZhbHVlKCl9aWYocnx8KHI9e30pLHIudmFsdWU9ZS52YWx1ZSwhci50YWJpbmRleCYmZS50YWJpbmRleCYmKHIudGFiaW5kZXg9ZS50YWJpbmRleCksIXIucGxhY2Vob2xkZXImJmUucGxhY2Vob2xkZXImJihyLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIpLG51bGw9PXIuYXV0b2ZvY3VzKXt2YXIgaT1kb2N1bWVudC5ib2R5O3RyeXtpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2gobyl7fXIuYXV0b2ZvY3VzPWk9PWV8fG51bGwhPWUuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSYmaT09ZG9jdW1lbnQuYm9keX1pZihlLmZvcm0mJihHbihlLmZvcm0sInN1Ym1pdCIsbiksIXIubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkpe3ZhciBsPWUuZm9ybSxzPWwuc3VibWl0O3RyeXt2YXIgYT1sLnN1Ym1pdD1mdW5jdGlvbigpe24oKSxsLnN1Ym1pdD1zLGwuc3VibWl0KCksbC5zdWJtaXQ9YX19Y2F0Y2gobyl7fX1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciB1PXQoZnVuY3Rpb24odCl7ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGUubmV4dFNpYmxpbmcpfSxyKTtyZXR1cm4gdS5zYXZlPW4sdS5nZXRUZXh0QXJlYT1mdW5jdGlvbigpe3JldHVybiBlfSx1LnRvVGV4dEFyZWE9ZnVuY3Rpb24oKXtuKCksZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUuZ2V0V3JhcHBlckVsZW1lbnQoKSksZS5zdHlsZS5kaXNwbGF5PSIiLGUuZm9ybSYmKFZuKGUuZm9ybSwic3VibWl0IixuKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JtLnN1Ym1pdCYmKGUuZm9ybS5zdWJtaXQ9cykpfSx1fSxTci5wcm90b3R5cGU9e2VvbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcz49dGhpcy5zdHJpbmcubGVuZ3RofSxzb2w6ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy5wb3N9LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKXx8dm9pZCAwfSxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPHRoaXMuc3RyaW5nLmxlbmd0aD90aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyk6dm9pZCAwfSxlYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTtpZigic3RyaW5nIj09dHlwZW9mIHQpdmFyIHI9ZT09dDtlbHNlIHZhciByPWUmJih0LnRlc3Q/dC50ZXN0KGUpOnQoZSkpO3JldHVybiByPygrK3RoaXMucG9zLGUpOnZvaWQgMH0sZWF0V2hpbGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucG9zO3RoaXMuZWF0KHQpOyk7cmV0dXJuIHRoaXMucG9zPmV9LGVhdFNwYWNlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucG9zOy9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpOykrK3RoaXMucG9zO3JldHVybiB0aGlzLnBvcz50fSxza2lwVG9FbmQ6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0cmluZy5sZW5ndGh9LHNraXBUbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN0cmluZy5pbmRleE9mKHQsdGhpcy5wb3MpO3JldHVybiBlPi0xPyh0aGlzLnBvcz1lLCEwKTp2b2lkIDB9LGJhY2tVcDpmdW5jdGlvbih0KXt0aGlzLnBvcy09dH0sY29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENvbHVtblBvczx0aGlzLnN0YXJ0JiYodGhpcy5sYXN0Q29sdW1uVmFsdWU9Wm4odGhpcy5zdHJpbmcsdGhpcy5zdGFydCx0aGlzLnRhYlNpemUsdGhpcy5sYXN0Q29sdW1uUG9zLHRoaXMubGFzdENvbHVtblZhbHVlKSx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5zdGFydCksdGhpcy5sYXN0Q29sdW1uVmFsdWV9LGluZGVudGF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFpuKHRoaXMuc3RyaW5nLG51bGwsdGhpcy50YWJTaXplKX0sbWF0Y2g6ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIG49dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHQpO3JldHVybiBuJiZuLmluZGV4PjA/bnVsbDoobiYmZSE9PSExJiYodGhpcy5wb3MrPW5bMF0ubGVuZ3RoKSxuKX12YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gcj90LnRvTG93ZXJDYXNlKCk6dH0sbz10aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsdC5sZW5ndGgpO3JldHVybiBpKG8pPT1pKHQpPyhlIT09ITEmJih0aGlzLnBvcys9dC5sZW5ndGgpLCEwKTp2b2lkIDB9LGN1cnJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCx0aGlzLnBvcyl9fSx0LlN0cmluZ1N0cmVhbT1Tcix0LlRleHRNYXJrZXI9TXIsam4oTXIpLE1yLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKXt2YXIgdD10aGlzLmRvYy5jbSxlPXQmJiF0LmN1ck9wO2lmKGUmJmllKHQpLFluKHRoaXMsImNsZWFyIikpe3ZhciByPXRoaXMuZmluZCgpO3ImJlVuKHRoaXMsImNsZWFyIixyLmZyb20sci50byl9Zm9yKHZhciBuPW51bGwsaT1udWxsLG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGw9dGhpcy5saW5lc1tvXSxzPU5yKGwubWFya2VkU3BhbnMsdGhpcyk7bnVsbCE9cy50byYmKGk9Ym4obCkpLGwubWFya2VkU3BhbnM9RHIobC5tYXJrZWRTcGFucyxzKSxudWxsIT1zLmZyb20/bj1ibihsKTp0aGlzLmNvbGxhcHNlZCYmIVZyKHRoaXMuZG9jLGwpJiZ0JiZ5bihsLHJlKHQuZGlzcGxheSkpfWlmKHQmJnRoaXMuY29sbGFwc2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZylmb3IodmFyIG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGE9R3IodC5kb2MsdGhpcy5saW5lc1tvXSksdT1jKHQuZG9jLGEpO3U+dC5kaXNwbGF5Lm1heExpbmVMZW5ndGgmJih0LmRpc3BsYXkubWF4TGluZT1hLHQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoPXUsdC5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKX1udWxsIT1uJiZ0JiZ1ZSh0LG4saSsxKSx0aGlzLmxpbmVzLmxlbmd0aD0wLHRoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITAsdGhpcy5hdG9taWMmJnRoaXMuZG9jLmNhbnRFZGl0JiYodGhpcy5kb2MuY2FudEVkaXQ9ITEsdCYmaXIodCkpLGUmJm9lKHQpfX0sTXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyPTA7cjx0aGlzLmxpbmVzLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGluZXNbcl0saT1OcihuLm1hcmtlZFNwYW5zLHRoaXMpO2lmKG51bGwhPWkuZnJvbXx8bnVsbCE9aS50byl7dmFyIG89Ym4obik7bnVsbCE9aS5mcm9tJiYodD1ZZShvLGkuZnJvbSkpLG51bGwhPWkudG8mJihlPVllKG8saS50bykpfX1yZXR1cm4iYm9va21hcmsiPT10aGlzLnR5cGU/dDp0JiZ7ZnJvbTp0LHRvOmV9fSxNci5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZmluZCgpLGU9dGhpcy5kb2MuY207aWYodCYmZSl7ImJvb2ttYXJrIiE9dGhpcy50eXBlJiYodD10LmZyb20pO3ZhciByPWduKHRoaXMuZG9jLHQubGluZSk7aWYoRyhlLHIpLHQubGluZT49ZS5kaXNwbGF5LnNob3dpbmdGcm9tJiZ0LmxpbmU8ZS5kaXNwbGF5LnNob3dpbmdUbyl7Zm9yKHZhciBuPWUuZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpaWYobi5saW5lT2JqPT1yKXtuLm9mZnNldEhlaWdodCE9ci5oZWlnaHQmJnluKHIsbi5vZmZzZXRIZWlnaHQpOwpicmVha31hZShlLGZ1bmN0aW9uKCl7ZS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPWUuY3VyT3AuZm9yY2VVcGRhdGU9ZS5jdXJPcC51cGRhdGVNYXhMaW5lPSEwfSl9fX0sTXIucHJvdG90eXBlLmF0dGFjaExpbmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7ZS5tYXliZUhpZGRlbk1hcmtlcnMmJi0xIT10aShlLm1heWJlSGlkZGVuTWFya2Vycyx0aGlzKXx8KGUubWF5YmVVbmhpZGRlbk1hcmtlcnN8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX10aGlzLmxpbmVzLnB1c2godCl9LE1yLnByb3RvdHlwZS5kZXRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGluZXMuc3BsaWNlKHRpKHRoaXMubGluZXMsdCksMSksIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7KGUubWF5YmVIaWRkZW5NYXJrZXJzfHwoZS5tYXliZUhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfX0sdC5TaGFyZWRUZXh0TWFya2VyPUFyLGpuKEFyKSxBci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMDtmb3IodmFyIHQ9MDt0PHRoaXMubWFya2Vycy5sZW5ndGg7Kyt0KXRoaXMubWFya2Vyc1t0XS5jbGVhcigpO1VuKHRoaXMsImNsZWFyIil9fSxBci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaW1hcnkuZmluZCgpfTt2YXIgeW89dC5MaW5lV2lkZ2V0PWZ1bmN0aW9uKHQsZSxyKXtpZihyKWZvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0aGlzW25dPXJbbl0pO3RoaXMuY209dCx0aGlzLm5vZGU9ZX07am4oeW8pLHlvLnByb3RvdHlwZS5jbGVhcj1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMubGluZS53aWRnZXRzLGU9Ym4odGhpcy5saW5lKTtpZihudWxsIT1lJiZ0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdPT10aGlzJiZ0LnNwbGljZShyLS0sMSk7dC5sZW5ndGh8fCh0aGlzLmxpbmUud2lkZ2V0cz1udWxsKTt2YXIgbj1Dbih0aGlzLmNtLHRoaXMubGluZSk8dGhpcy5jbS5kb2Muc2Nyb2xsVG9wO3luKHRoaXMubGluZSxNYXRoLm1heCgwLHRoaXMubGluZS5oZWlnaHQtWXIodGhpcykpKSxuJiZmcih0aGlzLmNtLDAsLXRoaXMuaGVpZ2h0KSx1ZSh0aGlzLmNtLGUsZSsxKX19KSx5by5wcm90b3R5cGUuY2hhbmdlZD1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVpZ2h0O3RoaXMuaGVpZ2h0PW51bGw7dmFyIGU9WXIodGhpcyktdDtpZihlKXt5bih0aGlzLmxpbmUsdGhpcy5saW5lLmhlaWdodCtlKTt2YXIgcj1ibih0aGlzLmxpbmUpO3VlKHRoaXMuY20scixyKzEpfX0pO3ZhciBibz10LkxpbmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LFhyKHRoaXMsZSksdGhpcy5oZWlnaHQ9cj9yKHRoaXMpOjF9O2puKGJvKSxiby5wcm90b3R5cGUubGluZU5vPWZ1bmN0aW9uKCl7cmV0dXJuIGJuKHRoaXMpfTt2YXIgeG89e307Zm4ucHJvdG90eXBlPXtjaHVua1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saW5lcy5sZW5ndGh9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQsbj10K2U7bj5yOysrcil7dmFyIGk9dGhpcy5saW5lc1tyXTt0aGlzLmhlaWdodC09aS5oZWlnaHQsWnIoaSksVW4oaSwiZGVsZXRlIil9dGhpcy5saW5lcy5zcGxpY2UodCxlKX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7dC5zcGxpY2UuYXBwbHkodCxbdC5sZW5ndGgsMF0uY29uY2F0KHRoaXMubGluZXMpKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGVpZ2h0Kz1yLHRoaXMubGluZXM9dGhpcy5saW5lcy5zbGljZSgwLHQpLmNvbmNhdChlKS5jb25jYXQodGhpcy5saW5lcy5zbGljZSh0KSk7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtpPm47KytuKWVbbl0ucGFyZW50PXRoaXN9LGl0ZXJOOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dCtlO24+dDsrK3QpaWYocih0aGlzLmxpbmVzW3RdKSlyZXR1cm4hMH19LGhuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24odCxlKXt0aGlzLnNpemUtPWU7Zm9yKHZhciByPTA7cjx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+dCl7dmFyIG89TWF0aC5taW4oZSxpLXQpLGw9bi5oZWlnaHQ7aWYobi5yZW1vdmVJbm5lcih0LG8pLHRoaXMuaGVpZ2h0LT1sLW4uaGVpZ2h0LGk9PW8mJih0aGlzLmNoaWxkcmVuLnNwbGljZShyLS0sMSksbi5wYXJlbnQ9bnVsbCksMD09KGUtPW8pKWJyZWFrO3Q9MH1lbHNlIHQtPWl9aWYodGhpcy5zaXplLWU8MjUpe3ZhciBzPVtdO3RoaXMuY29sbGFwc2UocyksdGhpcy5jaGlsZHJlbj1bbmV3IGZuKHMpXSx0aGlzLmNoaWxkcmVuWzBdLnBhcmVudD10aGlzfX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmNoaWxkcmVuLmxlbmd0aDtyPmU7KytlKXRoaXMuY2hpbGRyZW5bZV0uY29sbGFwc2UodCl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpemUrPWUubGVuZ3RoLHRoaXMuaGVpZ2h0Kz1yO2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD49dCl7aWYoby5pbnNlcnRJbm5lcih0LGUsciksby5saW5lcyYmby5saW5lcy5sZW5ndGg+NTApe2Zvcig7by5saW5lcy5sZW5ndGg+NTA7KXt2YXIgcz1vLmxpbmVzLnNwbGljZShvLmxpbmVzLmxlbmd0aC0yNSwyNSksYT1uZXcgZm4ocyk7by5oZWlnaHQtPWEuaGVpZ2h0LHRoaXMuY2hpbGRyZW4uc3BsaWNlKG4rMSwwLGEpLGEucGFyZW50PXRoaXN9dGhpcy5tYXliZVNwaWxsKCl9YnJlYWt9dC09bH19LG1heWJlU3BpbGw6ZnVuY3Rpb24oKXtpZighKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPD0xMCkpe3ZhciB0PXRoaXM7ZG97dmFyIGU9dC5jaGlsZHJlbi5zcGxpY2UodC5jaGlsZHJlbi5sZW5ndGgtNSw1KSxyPW5ldyBobihlKTtpZih0LnBhcmVudCl7dC5zaXplLT1yLnNpemUsdC5oZWlnaHQtPXIuaGVpZ2h0O3ZhciBuPXRpKHQucGFyZW50LmNoaWxkcmVuLHQpO3QucGFyZW50LmNoaWxkcmVuLnNwbGljZShuKzEsMCxyKX1lbHNle3ZhciBpPW5ldyBobih0LmNoaWxkcmVuKTtpLnBhcmVudD10LHQuY2hpbGRyZW49W2kscl0sdD1pfXIucGFyZW50PXQucGFyZW50fXdoaWxlKHQuY2hpbGRyZW4ubGVuZ3RoPjEwKTt0LnBhcmVudC5tYXliZVNwaWxsKCl9fSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10aGlzLmNoaWxkcmVuW25dLGw9by5jaHVua1NpemUoKTtpZihsPnQpe3ZhciBzPU1hdGgubWluKGUsbC10KTtpZihvLml0ZXJOKHQscyxyKSlyZXR1cm4hMDtpZigwPT0oZS09cykpYnJlYWs7dD0wfWVsc2UgdC09bH19fTt2YXIgQ289MCx3bz10LkRvYz1mdW5jdGlvbih0LGUscil7aWYoISh0aGlzIGluc3RhbmNlb2Ygd28pKXJldHVybiBuZXcgd28odCxlLHIpO251bGw9PXImJihyPTApLGhuLmNhbGwodGhpcyxbbmV3IGZuKFtuZXcgYm8oIiIsbnVsbCldKV0pLHRoaXMuZmlyc3Q9cix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbExlZnQ9MCx0aGlzLmNhbnRFZGl0PSExLHRoaXMuaGlzdG9yeT1MbigpLHRoaXMuY2xlYW5HZW5lcmF0aW9uPTEsdGhpcy5mcm9udGllcj1yO3ZhciBuPVllKHIsMCk7dGhpcy5zZWw9e2Zyb206bix0bzpuLGhlYWQ6bixhbmNob3I6bixzaGlmdDohMSxleHRlbmQ6ITEsZ29hbENvbHVtbjpudWxsfSx0aGlzLmlkPSsrQ28sdGhpcy5tb2RlT3B0aW9uPWUsInN0cmluZyI9PXR5cGVvZiB0JiYodD16byh0KSksY24odGhpcyx7ZnJvbTpuLHRvOm4sdGV4dDp0fSxudWxsLHtoZWFkOm4sYW5jaG9yOm59KX07d28ucHJvdG90eXBlPWVpKGhuLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6d28saXRlcjpmdW5jdGlvbih0LGUscil7cj90aGlzLml0ZXJOKHQtdGhpcy5maXJzdCxlLXQscik6dGhpcy5pdGVyTih0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplLHQpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lLmxlbmd0aDtpPm47KytuKXIrPWVbbl0uaGVpZ2h0O3RoaXMuaW5zZXJ0SW5uZXIodC10aGlzLmZpcnN0LGUscil9LHJlbW92ZTpmdW5jdGlvbih0LGUpe3RoaXMucmVtb3ZlSW5uZXIodC10aGlzLmZpcnN0LGUpfSxnZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT12bih0aGlzLHRoaXMuZmlyc3QsdGhpcy5maXJzdCt0aGlzLnNpemUpO3JldHVybiB0PT09ITE/ZTplLmpvaW4odHx8IlxuIil9LHNldFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVllKHRoaXMuZmlyc3QsMCkscj10aGlzLmZpcnN0K3RoaXMuc2l6ZS0xO0JlKHRoaXMse2Zyb206ZSx0bzpZZShyLGduKHRoaXMscikudGV4dC5sZW5ndGgpLHRleHQ6em8odCksb3JpZ2luOiJzZXRWYWx1ZSJ9LHtoZWFkOmUsYW5jaG9yOmV9LCEwKX0scmVwbGFjZVJhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe2U9UWUodGhpcyxlKSxyPXI/UWUodGhpcyxyKTplLF9lKHRoaXMsdCxlLHIsbil9LGdldFJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1tbih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSk7cmV0dXJuIHI9PT0hMT9uOm4uam9pbihyfHwiXG4iKX0sZ2V0TGluZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldExpbmVIYW5kbGUodCk7cmV0dXJuIGUmJmUudGV4dH0sc2V0TGluZTpmdW5jdGlvbih0LGUpe3RyKHRoaXMsdCkmJl9lKHRoaXMsZSxZZSh0LDApLFFlKHRoaXMsWWUodCkpKX0scmVtb3ZlTGluZTpmdW5jdGlvbih0KXt0P19lKHRoaXMsIiIsUWUodGhpcyxZZSh0LTEpKSxRZSh0aGlzLFllKHQpKSk6X2UodGhpcywiIixZZSgwLDApLFFlKHRoaXMsWWUoMSwwKSkpfSxnZXRMaW5lSGFuZGxlOmZ1bmN0aW9uKHQpe3JldHVybiB0cih0aGlzLHQpP2duKHRoaXMsdCk6dm9pZCAwfSxnZXRMaW5lTnVtYmVyOmZ1bmN0aW9uKHQpe3JldHVybiBibih0KX0sZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ9Z24odGhpcyx0KSksR3IodGhpcyx0KX0sbGluZUNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0sZmlyc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3R9LGxhc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3QrdGhpcy5zaXplLTF9LGNsaXBQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIFFlKHRoaXMsdCl9LGdldEN1cnNvcjpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuc2VsO3JldHVybiBlPW51bGw9PXR8fCJoZWFkIj09dD9yLmhlYWQ6ImFuY2hvciI9PXQ/ci5hbmNob3I6ImVuZCI9PXR8fHQ9PT0hMT9yLnRvOnIuZnJvbSxaZShlKX0sc29tZXRoaW5nU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hamUodGhpcy5zZWwuaGVhZCx0aGlzLnNlbC5hbmNob3IpfSxzZXRDdXJzb3I6c2UoZnVuY3Rpb24odCxlLHIpe3ZhciBuPVFlKHRoaXMsIm51bWJlciI9PXR5cGVvZiB0P1llKHQsZXx8MCk6dCk7cj9lcih0aGlzLG4pOm5yKHRoaXMsbixuKX0pLHNldFNlbGVjdGlvbjpzZShmdW5jdGlvbih0LGUscil7bnIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZXx8dCkscil9KSxleHRlbmRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe2VyKHRoaXMsUWUodGhpcyx0KSxlJiZRZSh0aGlzLGUpLHIpfSksZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFJhbmdlKHRoaXMuc2VsLmZyb20sdGhpcy5zZWwudG8sdCl9LHJlcGxhY2VTZWxlY3Rpb246ZnVuY3Rpb24odCxlLHIpe0JlKHRoaXMse2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byx0ZXh0OnpvKHQpLG9yaWdpbjpyfSxlfHwiYXJvdW5kIil9LHVuZG86c2UoZnVuY3Rpb24oKXtWZSh0aGlzLCJ1bmRvIil9KSxyZWRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywicmVkbyIpfSksc2V0RXh0ZW5kaW5nOmZ1bmN0aW9uKHQpe3RoaXMuc2VsLmV4dGVuZD10fSxoaXN0b3J5U2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGlzdG9yeTtyZXR1cm57dW5kbzp0LmRvbmUubGVuZ3RoLHJlZG86dC51bmRvbmUubGVuZ3RofX0sY2xlYXJIaXN0b3J5OmZ1bmN0aW9uKCl7dGhpcy5oaXN0b3J5PUxuKHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKX0sbWFya0NsZWFuOmZ1bmN0aW9uKCl7dGhpcy5jbGVhbkdlbmVyYXRpb249dGhpcy5jaGFuZ2VHZW5lcmF0aW9uKCl9LGNoYW5nZUdlbmVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaXN0b3J5Lmxhc3RPcD10aGlzLmhpc3RvcnkubGFzdE9yaWdpbj1udWxsLHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9ufSxpc0NsZWFuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbj09KHR8fHRoaXMuY2xlYW5HZW5lcmF0aW9uKX0sZ2V0SGlzdG9yeTpmdW5jdGlvbigpe3JldHVybntkb25lOkhuKHRoaXMuaGlzdG9yeS5kb25lKSx1bmRvbmU6SG4odGhpcy5oaXN0b3J5LnVuZG9uZSl9fSxzZXRIaXN0b3J5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7ZS5kb25lPXQuZG9uZS5zbGljZSgwKSxlLnVuZG9uZT10LnVuZG9uZS5zbGljZSgwKX0sbWFya1RleHQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUcih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSxyLCJyYW5nZSIpfSxzZXRCb29rbWFyazpmdW5jdGlvbih0LGUpe3ZhciByPXtyZXBsYWNlZFdpdGg6ZSYmKG51bGw9PWUubm9kZVR5cGU/ZS53aWRnZXQ6ZSksaW5zZXJ0TGVmdDplJiZlLmluc2VydExlZnR9O3JldHVybiB0PVFlKHRoaXMsdCksVHIodGhpcyx0LHQsciwiYm9va21hcmsiKX0sZmluZE1hcmtzQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLHQpO3ZhciBlPVtdLHI9Z24odGhpcyx0LmxpbmUpLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07KG51bGw9PWkuZnJvbXx8aS5mcm9tPD10LmNoKSYmKG51bGw9PWkudG98fGkudG8+PXQuY2gpJiZlLnB1c2goaS5tYXJrZXIucGFyZW50fHxpLm1hcmtlcil9cmV0dXJuIGV9LGdldEFsbE1hcmtzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihlKXt2YXIgcj1lLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pbnVsbCE9cltuXS5mcm9tJiZ0LnB1c2gocltuXS5tYXJrZXIpfSksdH0scG9zRnJvbUluZGV4OmZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKG4pe3ZhciBpPW4udGV4dC5sZW5ndGgrMTtyZXR1cm4gaT50PyhlPXQsITApOih0LT1pLCsrcix2b2lkIDApfSksUWUodGhpcyxZZShyLGUpKX0saW5kZXhGcm9tUG9zOmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT10LmNoO3JldHVybiB0LmxpbmU8dGhpcy5maXJzdHx8dC5jaDwwPzA6KHRoaXMuaXRlcih0aGlzLmZpcnN0LHQubGluZSxmdW5jdGlvbih0KXtlKz10LnRleHQubGVuZ3RoKzF9KSxlKX0sY29weTpmdW5jdGlvbih0KXt2YXIgZT1uZXcgd28odm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKSx0aGlzLm1vZGVPcHRpb24sdGhpcy5maXJzdCk7cmV0dXJuIGUuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLGUuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbExlZnQsZS5zZWw9e2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byxoZWFkOnRoaXMuc2VsLmhlYWQsYW5jaG9yOnRoaXMuc2VsLmFuY2hvcixzaGlmdDp0aGlzLnNlbC5zaGlmdCxleHRlbmQ6ITEsZ29hbENvbHVtbjp0aGlzLnNlbC5nb2FsQ29sdW1ufSx0JiYoZS5oaXN0b3J5LnVuZG9EZXB0aD10aGlzLmhpc3RvcnkudW5kb0RlcHRoLGUuc2V0SGlzdG9yeSh0aGlzLmdldEhpc3RvcnkoKSkpLGV9LGxpbmtlZERvYzpmdW5jdGlvbih0KXt0fHwodD17fSk7dmFyIGU9dGhpcy5maXJzdCxyPXRoaXMuZmlyc3QrdGhpcy5zaXplO251bGwhPXQuZnJvbSYmdC5mcm9tPmUmJihlPXQuZnJvbSksbnVsbCE9dC50byYmdC50bzxyJiYocj10LnRvKTt2YXIgbj1uZXcgd28odm4odGhpcyxlLHIpLHQubW9kZXx8dGhpcy5tb2RlT3B0aW9uLGUpO3JldHVybiB0LnNoYXJlZEhpc3QmJihuLmhpc3Rvcnk9dGhpcy5oaXN0b3J5KSwodGhpcy5saW5rZWR8fCh0aGlzLmxpbmtlZD1bXSkpLnB1c2goe2RvYzpuLHNoYXJlZEhpc3Q6dC5zaGFyZWRIaXN0fSksbi5saW5rZWQ9W3tkb2M6dGhpcyxpc1BhcmVudDohMCxzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH1dLG59LHVubGlua0RvYzpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdCYmKGU9ZS5kb2MpLHRoaXMubGlua2VkKWZvcih2YXIgcj0wO3I8dGhpcy5saW5rZWQubGVuZ3RoOysrcil7dmFyIG49dGhpcy5saW5rZWRbcl07aWYobi5kb2M9PWUpe3RoaXMubGlua2VkLnNwbGljZShyLDEpLGUudW5saW5rRG9jKHRoaXMpO2JyZWFrfX1pZihlLmhpc3Rvcnk9PXRoaXMuaGlzdG9yeSl7dmFyIGk9W2UuaWRdO2RuKGUsZnVuY3Rpb24odCl7aS5wdXNoKHQuaWQpfSwhMCksZS5oaXN0b3J5PUxuKCksZS5oaXN0b3J5LmRvbmU9SG4odGhpcy5oaXN0b3J5LmRvbmUsaSksZS5oaXN0b3J5LnVuZG9uZT1Ibih0aGlzLmhpc3RvcnkudW5kb25lLGkpfX0saXRlckxpbmtlZERvY3M6ZnVuY3Rpb24odCl7ZG4odGhpcyx0KX0sZ2V0TW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtfX0pLHdvLnByb3RvdHlwZS5lYWNoTGluZT13by5wcm90b3R5cGUuaXRlcjt2YXIgTG89Iml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciIuc3BsaXQoIiAiKTtmb3IodmFyIGtvIGluIHdvLnByb3RvdHlwZSl3by5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa28pJiZ0aShMbyxrbyk8MCYmKHQucHJvdG90eXBlW2tvXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLmRvYyxhcmd1bWVudHMpfX0od28ucHJvdG90eXBlW2tvXSkpO2puKHdvKSx0LmVfc3RvcD1Qbix0LmVfcHJldmVudERlZmF1bHQ9em4sdC5lX3N0b3BQcm9wYWdhdGlvbj1Jbjt2YXIgU28sTW89MDt0Lm9uPUduLHQub2ZmPVZuLHQuc2lnbmFsPUtuO3ZhciBUbz0zMCxBbz10LlBhc3M9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNvZGVNaXJyb3IuUGFzcyJ9fTskbi5wcm90b3R5cGU9e3NldDpmdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0aGlzLmlkKSx0aGlzLmlkPXNldFRpbWVvdXQoZSx0KX19LHQuY291bnRDb2x1bW49Wm47dmFyIEhvPVsiIl0sTm89L1tcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vLERvPS9bXHUwMzAwLVx1MDM2Rlx1MDQ4My1cdTA0ODdcdTA0ODgtXHUwNDg5XHUwNTkxLVx1MDVCRFx1MDVCRlx1MDVDMS1cdTA1QzJcdTA1QzQtXHUwNUM1XHUwNUM3XHUwNjEwLVx1MDYxQVx1MDY0Qi1cdTA2NUZcdTA2NzBcdTA2RDYtXHUwNkRDXHUwNkRGLVx1MDZFNFx1MDZFNy1cdTA2RThcdTA2RUEtXHUwNkVEXHVBNjZGXHUxREMw4oCTXHUxREZGXHUyMEQw4oCTXHUyMEZGXHVBNjcwLVx1QTY3Mlx1QTY3NC1cdUE2N0RcdUE2OUZcdWRjMDAtXHVkZmZmXHVGRTIw4oCTXHVGRTJGXS87dC5yZXBsYWNlR2V0UmVjdD1mdW5jdGlvbih0KXtmaT10fTt2YXIgV289ZnVuY3Rpb24oKXtpZihOaSlyZXR1cm4hMTt2YXIgdD1zaSgiZGl2Iik7cmV0dXJuImRyYWdnYWJsZSJpbiB0fHwiZHJhZ0Ryb3AiaW4gdH0oKTtUaT9oaT1mdW5jdGlvbih0LGUpe3JldHVybiAzNj09dC5jaGFyQ29kZUF0KGUtMSkmJjM5PT10LmNoYXJDb2RlQXQoZSl9OklpJiYhL1ZlcnNpb25cLyhbNi05XXxcZFxkKVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpP2hpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuL1wtW14gXC0/XXxcP1teICFcJ1wiXCksLlwtXC86O1w/XF1cfV0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9OldpJiYvQ2hyb21lXC8oPzoyOXxbMy05XVxkfFxkXGRcZClcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2hhckNvZGVBdChlLTEpO3JldHVybiByPj04MjA4JiY4MjEyPj1yfTpXaSYmKGhpPWZ1bmN0aW9uKHQsZSl7aWYoZT4xJiY0NT09dC5jaGFyQ29kZUF0KGUtMSkpe2lmKC9cdy8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1teXC0/XC5dLy50ZXN0KHQuY2hhckF0KGUpKSlyZXR1cm4hMDtpZihlPjImJi9bXGRcLixdLy50ZXN0KHQuY2hhckF0KGUtMikpJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITF9cmV0dXJuL1t+ISMlJiopPSt9XF1cXHxcIlwuPiw6O11bKHtbPF18LVteXC0/XC5cdTIwMTAtXHUyMDFmXHUyMDI2XXxcP1tcd35gQCMkJVxeJiooXz0re1t8PjxdfOKApltcd35gQCMkJVxeJiooXz0re1s+PF0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9KTt2YXIgT28sRW8sem89MyE9IlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1bXSxuPXQubGVuZ3RoO24+PWU7KXt2YXIgaT10LmluZGV4T2YoIlxuIixlKTstMT09aSYmKGk9dC5sZW5ndGgpO3ZhciBvPXQuc2xpY2UoZSwiXHIiPT10LmNoYXJBdChpLTEpP2ktMTppKSxsPW8uaW5kZXhPZigiXHIiKTstMSE9bD8oci5wdXNoKG8uc2xpY2UoMCxsKSksZSs9bCsxKTooci5wdXNoKG8pLGU9aSsxKX1yZXR1cm4gcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoL1xyXG4/fFxuLyl9O3Quc3BsaXRMaW5lcz16bzt2YXIgSW89d2luZG93LmdldFNlbGVjdGlvbj9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuc2VsZWN0aW9uU3RhcnQhPXQuc2VsZWN0aW9uRW5kfWNhdGNoKGUpe3JldHVybiExfX06ZnVuY3Rpb24odCl7dHJ5e3ZhciBlPXQub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX1jYXRjaChyKXt9cmV0dXJuIGUmJmUucGFyZW50RWxlbWVudCgpPT10PzAhPWUuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsZSk6ITF9LEZvPWZ1bmN0aW9uKCl7dmFyIHQ9c2koImRpdiIpO3JldHVybiJvbmNvcHkiaW4gdD8hMDoodC5zZXRBdHRyaWJ1dGUoIm9uY29weSIsInJldHVybjsiKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5vbmNvcHkpfSgpLFBvPXszOiJFbnRlciIsODoiQmFja3NwYWNlIiw5OiJUYWIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ3RybCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2MiLDMyOiJTcGFjZSIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkxlZnQiLDM4OiJVcCIsMzk6IlJpZ2h0Iiw0MDoiRG93biIsNDQ6IlByaW50U2NybiIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsNTk6IjsiLDkxOiJNb2QiLDkyOiJNb2QiLDkzOiJNb2QiLDEwOToiLSIsMTA3OiI9IiwxMjc6IkRlbGV0ZSIsMTg2OiI7IiwxODc6Ij0iLDE4ODoiLCIsMTg5OiItIiwxOTA6Ii4iLDE5MToiLyIsMTkyOiJgIiwyMTk6IlsiLDIyMDoiXFwiLDIyMToiXSIsMjIyOiInIiw2MzI3NjoiUGFnZVVwIiw2MzI3NzoiUGFnZURvd24iLDYzMjc1OiJFbmQiLDYzMjczOiJIb21lIiw2MzIzNDoiTGVmdCIsNjMyMzI6IlVwIiw2MzIzNToiUmlnaHQiLDYzMjMzOiJEb3duIiw2MzMwMjoiSW5zZXJ0Iiw2MzI3MjoiRGVsZXRlIn07dC5rZXlOYW1lcz1QbyxmdW5jdGlvbigpe2Zvcih2YXIgdD0wOzEwPnQ7dCsrKVBvW3QrNDhdPVN0cmluZyh0KTtmb3IodmFyIHQ9NjU7OTA+PXQ7dCsrKVBvW3RdPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7Zm9yKHZhciB0PTE7MTI+PXQ7dCsrKVBvW3QrMTExXT1Qb1t0KzYzMjM1XT0iRiIrdH0oKTt2YXIgUm8sQm89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiAyNTU+PXQ/ZS5jaGFyQXQodCk6dD49MTQyNCYmMTUyND49dD8iUiI6dD49MTUzNiYmMTc5MT49dD9yLmNoYXJBdCh0LTE1MzYpOnQ+PTE3OTImJjIyMjA+PXQ/InIiOiJMIn12YXIgZT0iYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTCIscj0icnJycnJycnJycnJyLHJOTm1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1ycnJycnJybm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1ObW1tbXJycnJycnJycnJycnJycnJyciIsbj0vW1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUwNzAwLVx1MDhhY10vLGk9L1tzdHdOXS8sbz0vW0xScl0vLGw9L1tMYjFuXS8scz0vWzFuXS8sYT0iTCI7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFuLnRlc3QoZSkpcmV0dXJuITE7Zm9yKHZhciByLHU9ZS5sZW5ndGgsYz1bXSxmPTA7dT5mOysrZiljLnB1c2gocj10KGUuY2hhckNvZGVBdChmKSkpO2Zvcih2YXIgZj0wLGg9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyJtIj09cj9jW2ZdPWg6aD1yfWZvcih2YXIgZj0wLGQ9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyIxIj09ciYmInIiPT1kP2NbZl09Im4iOm8udGVzdChyKSYmKGQ9ciwiciI9PXImJihjW2ZdPSJSIikpfWZvcih2YXIgZj0xLGg9Y1swXTt1LTE+ZjsrK2Ype3ZhciByPWNbZl07IisiPT1yJiYiMSI9PWgmJiIxIj09Y1tmKzFdP2NbZl09IjEiOiIsIiE9cnx8aCE9Y1tmKzFdfHwiMSIhPWgmJiJuIiE9aHx8KGNbZl09aCksaD1yfWZvcih2YXIgZj0wO3U+ZjsrK2Ype3ZhciByPWNbZl07aWYoIiwiPT1yKWNbZl09Ik4iO2Vsc2UgaWYoIiUiPT1yKXtmb3IodmFyIHA9ZisxO3U+cCYmIiUiPT1jW3BdOysrcCk7Zm9yKHZhciBnPWYmJiIhIj09Y1tmLTFdfHx1LTE+cCYmIjEiPT1jW3BdPyIxIjoiTiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfX1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiTCI9PWQmJiIxIj09cj9jW2ZdPSJMIjpvLnRlc3QocikmJihkPXIpfWZvcih2YXIgZj0wO3U+ZjsrK2YpaWYoaS50ZXN0KGNbZl0pKXtmb3IodmFyIHA9ZisxO3U+cCYmaS50ZXN0KGNbcF0pOysrcCk7Zm9yKHZhciB2PSJMIj09KGY/Y1tmLTFdOmEpLHk9IkwiPT0odS0xPnA/Y1twXTphKSxnPXZ8fHk/IkwiOiJSIixtPWY7cD5tOysrbSljW21dPWc7Zj1wLTF9Zm9yKHZhciBiLHg9W10sZj0wO3U+ZjspaWYobC50ZXN0KGNbZl0pKXt2YXIgQz1mO2ZvcigrK2Y7dT5mJiZsLnRlc3QoY1tmXSk7KytmKTt4LnB1c2goe2Zyb206Qyx0bzpmLGxldmVsOjB9KX1lbHNle3ZhciB3PWYsTD14Lmxlbmd0aDtmb3IoKytmO3U+ZiYmIkwiIT1jW2ZdOysrZik7Zm9yKHZhciBtPXc7Zj5tOylpZihzLnRlc3QoY1ttXSkpe20+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86bSxsZXZlbDoxfSk7dmFyIGs9bTtmb3IoKyttO2Y+bSYmcy50ZXN0KGNbbV0pOysrbSk7eC5zcGxpY2UoTCwwLHtmcm9tOmssdG86bSxsZXZlbDoyfSksdz1tfWVsc2UrK207Zj53JiZ4LnNwbGljZShMLDAse2Zyb206dyx0bzpmLGxldmVsOjF9KX1yZXR1cm4gMT09eFswXS5sZXZlbCYmKGI9ZS5tYXRjaCgvXlxzKy8pKSYmKHhbMF0uZnJvbT1iWzBdLmxlbmd0aCx4LnVuc2hpZnQoe2Zyb206MCx0bzpiWzBdLmxlbmd0aCxsZXZlbDowfSkpLDE9PVFuKHgpLmxldmVsJiYoYj1lLm1hdGNoKC9ccyskLykpJiYoUW4oeCkudG8tPWJbMF0ubGVuZ3RoLHgucHVzaCh7ZnJvbTp1LWJbMF0ubGVuZ3RoLHRvOnUsbGV2ZWw6MH0pKSx4WzBdLmxldmVsIT1Rbih4KS5sZXZlbCYmeC5wdXNoKHtmcm9tOnUsdG86dSxsZXZlbDp4WzBdLmxldmVsfSkseH19KCk7cmV0dXJuIHQudmVyc2lvbj0iMy4yMC4wIix0fSgpO1BLBwjGXJGwv68BAL+vAQBQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAABzdGF0aWNcbGliXGhpZ2hsaWdodC5taW4uanN2YXIgaGxqcz1uZXcgZnVuY3Rpb24oKXtmdW5jdGlvbiBsKG8pe3JldHVybiBvLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvPC9nbSwiJmx0OyIpLnJlcGxhY2UoLz4vZ20sIiZndDsiKX1mdW5jdGlvbiBiKHApe2Zvcih2YXIgbz1wLmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpe2lmKG8ubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkNPREUiKXtyZXR1cm4gb31pZighKG8ubm9kZVR5cGU9PTMmJm8ubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe2JyZWFrfX19ZnVuY3Rpb24gaChwLG8pe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwocC5jaGlsZE5vZGVzLGZ1bmN0aW9uKHEpe2lmKHEubm9kZVR5cGU9PTMpe3JldHVybiBvP3Eubm9kZVZhbHVlLnJlcGxhY2UoL1xuL2csIiIpOnEubm9kZVZhbHVlfWlmKHEubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cmV0dXJuIlxuIn1yZXR1cm4gaChxLG8pfSkuam9pbigiIil9ZnVuY3Rpb24gYShxKXt2YXIgcD0ocS5jbGFzc05hbWUrIiAiKyhxLnBhcmVudE5vZGU/cS5wYXJlbnROb2RlLmNsYXNzTmFtZToiIikpLnNwbGl0KC9ccysvKTtwPXAubWFwKGZ1bmN0aW9uKHIpe3JldHVybiByLnJlcGxhY2UoL15sYW5ndWFnZS0vLCIiKX0pO2Zvcih2YXIgbz0wO288cC5sZW5ndGg7bysrKXtpZihlW3Bbb11dfHxwW29dPT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJuIHBbb119fX1mdW5jdGlvbiBjKHEpe3ZhciBvPVtdOyhmdW5jdGlvbiBwKHIscyl7Zm9yKHZhciB0PXIuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZyl7aWYodC5ub2RlVHlwZT09Myl7cys9dC5ub2RlVmFsdWUubGVuZ3RofWVsc2V7aWYodC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT0iQlIiKXtzKz0xfWVsc2V7aWYodC5ub2RlVHlwZT09MSl7by5wdXNoKHtldmVudDoic3RhcnQiLG9mZnNldDpzLG5vZGU6dH0pO3M9cCh0LHMpO28ucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDpzLG5vZGU6dH0pfX19fXJldHVybiBzfSkocSwwKTtyZXR1cm4gb31mdW5jdGlvbiBqKHAscix2KXt2YXIgcT0wO3ZhciB5PSIiO3ZhciBzPVtdO2Z1bmN0aW9uIHUoKXtpZighcC5sZW5ndGh8fCFyLmxlbmd0aCl7cmV0dXJuIHAubGVuZ3RoP3A6cn1pZihwWzBdLm9mZnNldCE9clswXS5vZmZzZXQpe3JldHVybihwWzBdLm9mZnNldDxyWzBdLm9mZnNldCk/cDpyfXJldHVybiByWzBdLmV2ZW50PT0ic3RhcnQiP3A6cn1mdW5jdGlvbiB0KEEpe2Z1bmN0aW9uIHooQil7cmV0dXJuIiAiK0Iubm9kZU5hbWUrJz0iJytsKEIudmFsdWUpKyciJ315Kz0iPCIrQS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChBLmF0dHJpYnV0ZXMseikuam9pbigiIikrIj4ifWZ1bmN0aW9uIHgoeil7eSs9IjwvIit6Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4ifWZ1bmN0aW9uIG8oeil7KHouZXZlbnQ9PSJzdGFydCI/dDp4KSh6Lm5vZGUpfXdoaWxlKHAubGVuZ3RofHxyLmxlbmd0aCl7dmFyIHc9dSgpO3krPWwodi5zdWJzdHIocSx3WzBdLm9mZnNldC1xKSk7cT13WzBdLm9mZnNldDtpZih3PT1wKXtzLnJldmVyc2UoKS5mb3JFYWNoKHgpO2Rve28ody5zcGxpY2UoMCwxKVswXSk7dz11KCl9d2hpbGUodz09cCYmdy5sZW5ndGgmJndbMF0ub2Zmc2V0PT1xKTtzLnJldmVyc2UoKS5mb3JFYWNoKHQpfWVsc2V7aWYod1swXS5ldmVudD09InN0YXJ0Iil7cy5wdXNoKHdbMF0ubm9kZSl9ZWxzZXtzLnBvcCgpfW8ody5zcGxpY2UoMCwxKVswXSl9fXJldHVybiB5K2wodi5zdWJzdHIocSkpfWZ1bmN0aW9uIGYocil7ZnVuY3Rpb24gbyhzKXtyZXR1cm4ocyYmcy5zb3VyY2UpfHxzfWZ1bmN0aW9uIHAodCxzKXtyZXR1cm4gUmVnRXhwKG8odCksIm0iKyhyLmNJPyJpIjoiIikrKHM/ImciOiIiKSl9ZnVuY3Rpb24gcSh6LHgpe2lmKHouY29tcGlsZWQpe3JldHVybn16LmNvbXBpbGVkPXRydWU7dmFyIHU9W107aWYoei5rKXt2YXIgcz17fTtmdW5jdGlvbiBBKEIsdCl7aWYoci5jSSl7dD10LnRvTG93ZXJDYXNlKCl9dC5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oQyl7dmFyIEQ9Qy5zcGxpdCgifCIpO3NbRFswXV09W0IsRFsxXT9OdW1iZXIoRFsxXSk6MV07dS5wdXNoKERbMF0pfSl9ei5sUj1wKHoubHx8IlxcYiIraGxqcy5JUisiXFxiKD8hXFwuKSIsdHJ1ZSk7aWYodHlwZW9mIHouaz09InN0cmluZyIpe0EoImtleXdvcmQiLHouayl9ZWxzZXtmb3IodmFyIHkgaW4gei5rKXtpZighei5rLmhhc093blByb3BlcnR5KHkpKXtjb250aW51ZX1BKHksei5rW3ldKX19ei5rPXN9aWYoeCl7aWYoei5iV0spe3ouYj0iXFxiKCIrdS5qb2luKCJ8IikrIilcXGIoPyFcXC4pXFxzKiJ9ei5iUj1wKHouYj96LmI6IlxcQnxcXGIiKTtpZighei5lJiYhei5lVyl7ei5lPSJcXEJ8XFxiIn1pZih6LmUpe3ouZVI9cCh6LmUpfXoudEU9byh6LmUpfHwiIjtpZih6LmVXJiZ4LnRFKXt6LnRFKz0oei5lPyJ8IjoiIikreC50RX19aWYoei5pKXt6LmlSPXAoei5pKX1pZih6LnI9PT11bmRlZmluZWQpe3oucj0xfWlmKCF6LmMpe3ouYz1bXX1mb3IodmFyIHc9MDt3PHouYy5sZW5ndGg7dysrKXtpZih6LmNbd109PSJzZWxmIil7ei5jW3ddPXp9cSh6LmNbd10seil9aWYoei5zdGFydHMpe3Eoei5zdGFydHMseCl9dmFyIHY9W107Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7di5wdXNoKG8oei5jW3ddLmIpKX1pZih6LnRFKXt2LnB1c2gobyh6LnRFKSl9aWYoei5pKXt2LnB1c2gobyh6LmkpKX16LnQ9di5sZW5ndGg/cCh2LmpvaW4oInwiKSx0cnVlKTp7ZXhlYzpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH19fXEocil9ZnVuY3Rpb24gZChFLEcsQyxNKXtmdW5jdGlvbiBvKHIsUCl7Zm9yKHZhciBPPTA7TzxQLmMubGVuZ3RoO08rKyl7dmFyIE49UC5jW09dLmJSLmV4ZWMocik7aWYoTiYmTi5pbmRleD09MCl7cmV0dXJuIFAuY1tPXX19fWZ1bmN0aW9uIHMoTixyKXtpZihOLmUmJk4uZVIudGVzdChyKSl7cmV0dXJuIE59aWYoTi5lVyl7cmV0dXJuIHMoTi5wYXJlbnQscil9fWZ1bmN0aW9uIHQocixOKXtyZXR1cm4gIUMmJk4uaSYmTi5pUi50ZXN0KHIpfWZ1bmN0aW9uIHkoTyxyKXt2YXIgTj1ILmNJP3JbMF0udG9Mb3dlckNhc2UoKTpyWzBdO3JldHVybiBPLmsuaGFzT3duUHJvcGVydHkoTikmJk8ua1tOXX1mdW5jdGlvbiBJKCl7dmFyIE49bCh3KTtpZighQi5rKXtyZXR1cm4gTn12YXIgcj0iIjt2YXIgUT0wO0IubFIubGFzdEluZGV4PTA7dmFyIE89Qi5sUi5leGVjKE4pO3doaWxlKE8pe3IrPU4uc3Vic3RyKFEsTy5pbmRleC1RKTt2YXIgUD15KEIsTyk7aWYoUCl7dis9UFsxXTtyKz0nPHNwYW4gY2xhc3M9IicrUFswXSsnIj4nK09bMF0rIjwvc3Bhbj4ifWVsc2V7cis9T1swXX1RPUIubFIubGFzdEluZGV4O089Qi5sUi5leGVjKE4pfXJldHVybiByK04uc3Vic3RyKFEpfWZ1bmN0aW9uIHooKXtpZihCLnNMJiYhZVtCLnNMXSl7cmV0dXJuIGwodyl9dmFyIE49Qi5zdWJMYW5ndWFnZU1vZGU9PSJjb250aW51b3VzIj9CLnRvcDp1bmRlZmluZWQ7dmFyIHI9Qi5zTD9kKEIuc0wsdyx0cnVlLE4pOmcodyk7aWYoQi5yPjApe3YrPXIua2V5d29yZF9jb3VudDtBKz1yLnJ9Qi50b3A9ci50b3A7cmV0dXJuJzxzcGFuIGNsYXNzPSInK3IubGFuZ3VhZ2UrJyI+JytyLnZhbHVlKyI8L3NwYW4+In1mdW5jdGlvbiBMKCl7cmV0dXJuIEIuc0whPT11bmRlZmluZWQ/eigpOkkoKX1mdW5jdGlvbiBLKE8scil7dmFyIE49Ty5jTj8nPHNwYW4gY2xhc3M9IicrTy5jTisnIj4nOiIiO2lmKE8uckIpe3grPU47dz0iIn1lbHNle2lmKE8uZUIpe3grPWwocikrTjt3PSIifWVsc2V7eCs9Tjt3PXJ9fUI9T2JqZWN0LmNyZWF0ZShPLHtwYXJlbnQ6e3ZhbHVlOkJ9fSl9ZnVuY3Rpb24gRChOLHIpe3crPU47aWYocj09PXVuZGVmaW5lZCl7eCs9TCgpO3JldHVybiAwfXZhciBQPW8ocixCKTtpZihQKXt4Kz1MKCk7SyhQLHIpO3JldHVybiBQLnJCPzA6ci5sZW5ndGh9dmFyIFE9cyhCLHIpO2lmKFEpe3ZhciBPPUI7aWYoIShPLnJFfHxPLmVFKSl7dys9cn14Kz1MKCk7ZG97aWYoQi5jTil7eCs9Ijwvc3Bhbj4ifUErPUIucjtCPUIucGFyZW50fXdoaWxlKEIhPVEucGFyZW50KTtpZihPLmVFKXt4Kz1sKHIpfXc9IiI7aWYoUS5zdGFydHMpe0soUS5zdGFydHMsIiIpfXJldHVybiBPLnJFPzA6ci5sZW5ndGh9aWYodChyLEIpKXt0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgbGV4ZW0gIicrcisnIiBmb3IgbW9kZSAiJysoQi5jTnx8Ijx1bm5hbWVkPiIpKyciJyl9dys9cjtyZXR1cm4gci5sZW5ndGh8fDF9dmFyIEg9ZVtFXTtpZighSCl7dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJytFKyciJyl9ZihIKTt2YXIgQj1NfHxIO3ZhciB4PSIiO2Zvcih2YXIgRj1CO0YhPUg7Rj1GLnBhcmVudCl7aWYoRi5jTil7eD0nPHNwYW4gY2xhc3M9IicrRi5jTisnIj4nK3h9fXZhciB3PSIiO3ZhciBBPTA7dmFyIHY9MDt0cnl7dmFyIHUscSxwPTA7d2hpbGUodHJ1ZSl7Qi50Lmxhc3RJbmRleD1wO3U9Qi50LmV4ZWMoRyk7aWYoIXUpe2JyZWFrfXE9RChHLnN1YnN0cihwLHUuaW5kZXgtcCksdVswXSk7cD11LmluZGV4K3F9RChHLnN1YnN0cihwKSk7Zm9yKHZhciBGPUI7Ri5wYXJlbnQ7Rj1GLnBhcmVudCl7aWYoRi5jTil7eCs9Ijwvc3Bhbj4ifX1yZXR1cm57cjpBLGtleXdvcmRfY291bnQ6dix2YWx1ZTp4LGxhbmd1YWdlOkUsdG9wOkJ9fWNhdGNoKEope2lmKEoubWVzc2FnZS5pbmRleE9mKCJJbGxlZ2FsIikhPS0xKXtyZXR1cm57cjowLGtleXdvcmRfY291bnQ6MCx2YWx1ZTpsKEcpfX1lbHNle3Rocm93IEp9fX1mdW5jdGlvbiBnKHMpe3ZhciBvPXtrZXl3b3JkX2NvdW50OjAscjowLHZhbHVlOmwocyl9O3ZhciBxPW87Zm9yKHZhciBwIGluIGUpe2lmKCFlLmhhc093blByb3BlcnR5KHApKXtjb250aW51ZX12YXIgcj1kKHAscyxmYWxzZSk7ci5sYW5ndWFnZT1wO2lmKHIua2V5d29yZF9jb3VudCtyLnI+cS5rZXl3b3JkX2NvdW50K3Eucil7cT1yfWlmKHIua2V5d29yZF9jb3VudCtyLnI+by5rZXl3b3JkX2NvdW50K28ucil7cT1vO289cn19aWYocS5sYW5ndWFnZSl7by5zZWNvbmRfYmVzdD1xfXJldHVybiBvfWZ1bmN0aW9uIGkocSxwLG8pe2lmKHApe3E9cS5yZXBsYWNlKC9eKCg8W14+XSs+fFx0KSspL2dtLGZ1bmN0aW9uKHIsdix1LHQpe3JldHVybiB2LnJlcGxhY2UoL1x0L2cscCl9KX1pZihvKXtxPXEucmVwbGFjZSgvXG4vZywiPGJyPiIpfXJldHVybiBxfWZ1bmN0aW9uIG0ocix1LHApe3ZhciB2PWgocixwKTt2YXIgdD1hKHIpO2lmKHQ9PSJuby1oaWdobGlnaHQiKXtyZXR1cm59dmFyIHc9dD9kKHQsdix0cnVlKTpnKHYpO3Q9dy5sYW5ndWFnZTt2YXIgbz1jKHIpO2lmKG8ubGVuZ3RoKXt2YXIgcT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKTtxLmlubmVySFRNTD13LnZhbHVlO3cudmFsdWU9aihvLGMocSksdil9dy52YWx1ZT1pKHcudmFsdWUsdSxwKTt2YXIgcz1yLmNsYXNzTmFtZTtpZighcy5tYXRjaCgiKFxcc3xeKShsYW5ndWFnZS0pPyIrdCsiKFxcc3wkKSIpKXtzPXM/KHMrIiAiK3QpOnR9ci5pbm5lckhUTUw9dy52YWx1ZTtyLmNsYXNzTmFtZT1zO3IucmVzdWx0PXtsYW5ndWFnZTp0LGt3Oncua2V5d29yZF9jb3VudCxyZTp3LnJ9O2lmKHcuc2Vjb25kX2Jlc3Qpe3Iuc2Vjb25kX2Jlc3Q9e2xhbmd1YWdlOncuc2Vjb25kX2Jlc3QubGFuZ3VhZ2Usa3c6dy5zZWNvbmRfYmVzdC5rZXl3b3JkX2NvdW50LHJlOncuc2Vjb25kX2Jlc3Qucn19fWZ1bmN0aW9uIG4oKXtpZihuLmNhbGxlZCl7cmV0dXJufW4uY2FsbGVkPXRydWU7QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKSxiKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbihvKXttKG8saGxqcy50YWJSZXBsYWNlKX0pfWZ1bmN0aW9uIGsoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsbixmYWxzZSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLG4sZmFsc2UpfXZhciBlPXt9O3RoaXMuTEFOR1VBR0VTPWU7dGhpcy5oaWdobGlnaHQ9ZDt0aGlzLmhpZ2hsaWdodEF1dG89Zzt0aGlzLmZpeE1hcmt1cD1pO3RoaXMuaGlnaGxpZ2h0QmxvY2s9bTt0aGlzLmluaXRIaWdobGlnaHRpbmc9bjt0aGlzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9azt0aGlzLklSPSJbYS16QS1aXVthLXpBLVowLTlfXSoiO3RoaXMuVUlSPSJbYS16QS1aX11bYS16QS1aMC05X10qIjt0aGlzLk5SPSJcXGJcXGQrKFxcLlxcZCspPyI7dGhpcy5DTlI9IihcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSI7dGhpcy5CTlI9IlxcYigwYlswMV0rKSI7dGhpcy5SU1I9IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfFxcLnwtfC09fC98Lz18Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+Pnw+Pnw+fFxcP3xcXFt8XFx7fFxcKHxcXF58XFxePXxcXHx8XFx8PXxcXHxcXHx8fiI7dGhpcy5CRT17YjoiXFxcXFtcXHNcXFNdIixyOjB9O3RoaXMuQVNNPXtjTjoic3RyaW5nIixiOiInIixlOiInIixpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5RU009e2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGk6IlxcbiIsYzpbdGhpcy5CRV0scjowfTt0aGlzLkNMQ009e2NOOiJjb21tZW50IixiOiIvLyIsZToiJCJ9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xcKiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9O3RoaXMuTk09e2NOOiJudW1iZXIiLGI6dGhpcy5OUixyOjB9O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLHI6MH07dGhpcy5CTk09e2NOOiJudW1iZXIiLGI6dGhpcy5CTlIscjowfTt0aGlzLlJFR0VYUF9NT0RFPXtjTjoicmVnZXhwIixiOi9cLy8sZTovXC9bZ2ltXSovLGk6L1xuLyxjOlt0aGlzLkJFLHtiOi9cWy8sZTovXF0vLHI6MCxjOlt0aGlzLkJFXX1dfTt0aGlzLmluaGVyaXQ9ZnVuY3Rpb24ocSxyKXt2YXIgbz17fTtmb3IodmFyIHAgaW4gcSl7b1twXT1xW3BdfWlmKHIpe2Zvcih2YXIgcCBpbiByKXtvW3BdPXJbcF19fXJldHVybiBvfX0oKTtobGpzLkxBTkdVQUdFUy5iYXNoPWZ1bmN0aW9uKGEpe3ZhciBjPXtjTjoidmFyaWFibGUiLGI6L1wkW1x3XGQjQF1bXHdcZF9dKi99O3ZhciBiPXtjTjoidmFyaWFibGUiLGI6L1wkXHsoLio/KVx9L307dmFyIGU9e2NOOiJzdHJpbmciLGI6LyIvLGU6LyIvLGM6W2EuQkUsYyxiLHtjTjoidmFyaWFibGUiLGI6L1wkXCgvLGU6L1wpLyxjOmEuQkV9XSxyOjB9O3ZhciBkPXtjTjoic3RyaW5nIixiOi8nLyxlOi8nLyxyOjB9O3JldHVybntsOi8tP1thLXpdKy8sazp7a2V5d29yZDoiaWYgdGhlbiBlbHNlIGVsaWYgZmkgZm9yIGJyZWFrIGNvbnRpbnVlIHdoaWxlIGluIGRvIGRvbmUgZXhpdCByZXR1cm4gc2V0IGRlY2xhcmUgY2FzZSBlc2FjIGV4cG9ydCBleGVjIixsaXRlcmFsOiJ0cnVlIGZhbHNlIixidWlsdF9pbjoicHJpbnRmIGVjaG8gcmVhZCBjZCBwd2QgcHVzaGQgcG9wZCBkaXJzIGxldCBldmFsIHVuc2V0IHR5cGVzZXQgcmVhZG9ubHkgZ2V0b3B0cyBzb3VyY2Ugc2hvcHQgY2FsbGVyIHR5cGUgaGFzaCBiaW5kIGhlbHAgc3VkbyIsb3BlcmF0b3I6Ii1uZSAtZXEgLWx0IC1ndCAtZiAtZCAtZSAtcyAtbCAtYSJ9LGM6W3tjTjoic2hlYmFuZyIsYjovXiMhW15cbl0rc2hccyokLyxyOjEwfSx7Y046ImZ1bmN0aW9uIixiOi9cd1tcd1xkX10qXHMqXChccypcKVxzKlx7LyxyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6L1x3W1x3XGRfXSovfV0scjowfSxhLkhDTSxhLk5NLGUsZCxjLGJdfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3M9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImFic3RyYWN0IGFzIGJhc2UgYm9vbCBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjaGVja2VkIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlY2ltYWwgZGVmYXVsdCBkZWxlZ2F0ZSBkbyBkb3VibGUgZWxzZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmYWxzZSBmaW5hbGx5IGZpeGVkIGZsb2F0IGZvciBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbmFtZXNwYWNlIG5ldyBudWxsIG9iamVjdCBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNieXRlIHNlYWxlZCBzaG9ydCBzaXplb2Ygc3RhY2thbGxvYyBzdGF0aWMgc3RyaW5nIHN0cnVjdCBzd2l0Y2ggdGhpcyB0aHJvdyB0cnVlIHRyeSB0eXBlb2YgdWludCB1bG9uZyB1bmNoZWNrZWQgdW5zYWZlIHVzaG9ydCB1c2luZyB2aXJ0dWFsIHZvbGF0aWxlIHZvaWQgd2hpbGUgYXN5bmMgYXdhaXQgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZnJvbSBnZXQgZ3JvdXAgaW50byBqb2luIGxldCBvcmRlcmJ5IHBhcnRpYWwgc2VsZWN0IHNldCB2YWx1ZSB2YXIgd2hlcmUgeWllbGQiLGM6W3tjTjoiY29tbWVudCIsYjoiLy8vIixlOiIkIixyQjp0cnVlLGM6W3tjTjoieG1sRG9jVGFnIixiOiIvLy98PCEtLXwtLT4ifSx7Y046InhtbERvY1RhZyIsYjoiPC8/IixlOiI+In1dfSxhLkNMQ00sYS5DQkxDTE0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGs6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHJlZ2lvbiBlbmRyZWdpb24gcHJhZ21hIGNoZWNrc3VtIn0se2NOOiJzdHJpbmciLGI6J0AiJyxlOiciJyxjOlt7YjonIiInfV19LGEuQVNNLGEuUVNNLGEuQ05NXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnJ1Ynk9ZnVuY3Rpb24oZSl7dmFyIGE9IlthLXpBLVpfXVthLXpBLVowLTlfXSooXFwhfFxcPyk/Ijt2YXIgaj0iW2EtekEtWl9dXFx3KlshPz1dP3xbLSt+XVxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFwqXFwqfFstLyslXiYqfmB8XXxcXFtcXF09PyI7dmFyIGc9e2tleXdvcmQ6ImFuZCBmYWxzZSB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIGlmIEJFR0lOIHJldHJ5IGVuZCBmb3IgdHJ1ZSBzZWxmIHdoZW4gbmV4dCB1bnRpbCBkbyBiZWdpbiB1bmxlc3MgRU5EIHJlc2N1ZSBuaWwgZWxzZSBicmVhayB1bmRlZiBub3Qgc3VwZXIgY2xhc3MgY2FzZSByZXF1aXJlIHlpZWxkIGFsaWFzIHdoaWxlIGVuc3VyZSBlbHNpZiBvciBpbmNsdWRlIn07dmFyIGM9e2NOOiJ5YXJkb2N0YWciLGI6IkBbQS1aYS16XSsifTt2YXIgaz1be2NOOiJjb21tZW50IixiOiIjIixlOiIkIixjOltjXX0se2NOOiJjb21tZW50IixiOiJeXFw9YmVnaW4iLGU6Il5cXD1lbmQiLGM6W2NdLHI6MTB9LHtjTjoiY29tbWVudCIsYjoiXl9fRU5EX18iLGU6IlxcbiQifV07dmFyIGQ9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsbDphLGs6Z307dmFyIGk9W2UuQkUsZF07dmFyIGI9W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOmkscjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcKCIsZToiXFwpIixjOml9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXFsiLGU6IlxcXSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/eyIsZToifSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/PCIsZToiPiIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8vIixlOiIvIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPyUiLGU6IiUiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LSIsZToiLSIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXHwiLGU6IlxcfCIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOi9cQlw/KFxcXGR7MSwzfXxcXHhbQS1GYS1mMC05XXsxLDJ9fFxcdVtBLUZhLWYwLTldezR9fFxcP1xTKVxiL31dO3ZhciBoPXtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6IiB8JHw7IixrOiJkZWYiLGM6W3tjTjoidGl0bGUiLGI6aixsOmEsazpnfSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGw6YSxrOmd9XS5jb25jYXQoayl9O3ZhciBmPWsuY29uY2F0KGIuY29uY2F0KFt7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIkfDsiLGs6ImNsYXNzIG1vZHVsZSIsYzpbe2NOOiJ0aXRsZSIsYjoiW0EtWmEtel9dXFx3Kig6OlxcdyspKihcXD98XFwhKT8iLHI6MH0se2NOOiJpbmhlcml0YW5jZSIsYjoiPFxccyoiLGM6W3tjTjoicGFyZW50IixiOiIoIitlLklSKyI6Oik/IitlLklSfV19XS5jb25jYXQoayl9LGgse2NOOiJjb25zdGFudCIsYjoiKDo6KT8oXFxiW0EtWl1cXHcqKDo6KT8pKyIscjowfSx7Y046InN5bWJvbCIsYjoiOiIsYzpiLmNvbmNhdChbe2I6an1dKSxyOjB9LHtjTjoic3ltYm9sIixiOmErIjoiLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2NOOiJ2YXJpYWJsZSIsYjoiKFxcJFxcVyl8KChcXCR8XFxAXFxAPykoXFx3KykpIn0se2I6IigiK2UuUlNSKyIpXFxzKiIsYzprLmNvbmNhdChbe2NOOiJyZWdleHAiLGI6Ii8iLGU6Ii9bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyeyIsZToifVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXCgiLGU6IlxcKVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXIhIixlOiIhW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlclxcWyIsZToiXFxdW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19XSkscjowfV0pKTtkLmM9ZjtoLmNbMV0uYz1mO3JldHVybntsOmEsazpnLGM6Zn19KGhsanMpO2hsanMuTEFOR1VBR0VTLmRpZmY9ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiY2h1bmsiLGI6Il5cXEBcXEAgK1xcLVxcZCssXFxkKyArXFwrXFxkKyxcXGQrICtcXEBcXEAkIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwqXFwqXFwqICtcXGQrLFxcZCsgK1xcKlxcKlxcKlxcKiQiLHI6MTB9LHtjTjoiY2h1bmsiLGI6Il5cXC1cXC1cXC0gK1xcZCssXFxkKyArXFwtXFwtXFwtXFwtJCIscjoxMH0se2NOOiJoZWFkZXIiLGI6IkluZGV4OiAiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiPT09PT0iLGU6Ij09PT09JCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwtXFwtXFwtIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCp7M30gIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCtcXCtcXCsiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXFwqezV9IixlOiJcXCp7NX0kIn0se2NOOiJhZGRpdGlvbiIsYjoiXlxcKyIsZToiJCJ9LHtjTjoiZGVsZXRpb24iLGI6Il5cXC0iLGU6IiQifSx7Y046ImNoYW5nZSIsYjoiXlxcISIsZToiJCJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmFzY3JpcHQ9ZnVuY3Rpb24oYSl7cmV0dXJue2s6e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHdpdGggdGhyb3cgY2FzZSBkZWZhdWx0IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGxldCB5aWVsZCBjb25zdCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCBOYU4gSW5maW5pdHkifSxjOlthLkFTTSxhLlFTTSxhLkNMQ00sYS5DQkxDTE0sYS5DTk0se2I6IigiK2EuUlNSKyJ8XFxiKGNhc2V8cmV0dXJufHRocm93KVxcYilcXHMqIixrOiJyZXR1cm4gdGhyb3cgY2FzZSIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUkVHRVhQX01PREUse2I6LzwvLGU6Lz47LyxzTDoieG1sIn1dLHI6MH0se2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZTovey8sazoiZnVuY3Rpb24iLGM6W3tjTjoidGl0bGUiLGI6L1tBLVphLXokX11bMC05QS1aYS16JF9dKi99LHtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6W2EuQ0xDTSxhLkNCTENMTV0saTovWyInXChdL31dLGk6L1xbfCUvfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy54bWw9ZnVuY3Rpb24oYSl7dmFyIGM9IltBLVphLXowLTlcXC5fOi1dKyI7dmFyIGI9e2VXOnRydWUscjowLGM6W3tjTjoiYXR0cmlidXRlIixiOmMscjowfSx7YjonPSInLHJCOnRydWUsZTonIicsYzpbe2NOOiJ2YWx1ZSIsYjonIicsZVc6dHJ1ZX1dfSx7YjoiPSciLHJCOnRydWUsZToiJyIsYzpbe2NOOiJ2YWx1ZSIsYjoiJyIsZVc6dHJ1ZX1dfSx7YjoiPSIsYzpbe2NOOiJ2YWx1ZSIsYjoiW15cXHMvPl0rIn1dfV19O3JldHVybntjSTp0cnVlLGM6W3tjTjoicGkiLGI6IjxcXD8iLGU6IlxcPz4iLHI6MTB9LHtjTjoiZG9jdHlwZSIsYjoiPCFET0NUWVBFIixlOiI+IixyOjEwLGM6W3tiOiJcXFsiLGU6IlxcXSJ9XX0se2NOOiJjb21tZW50IixiOiI8IS0tIixlOiItLT4iLHI6MTB9LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiIscjoxMH0se2NOOiJ0YWciLGI6IjxzdHlsZSg/PVxcc3w+fCQpIixlOiI+IixrOnt0aXRsZToic3R5bGUifSxjOltiXSxzdGFydHM6e2U6Ijwvc3R5bGU+IixyRTp0cnVlLHNMOiJjc3MifX0se2NOOiJ0YWciLGI6IjxzY3JpcHQoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InNjcmlwdCJ9LGM6W2JdLHN0YXJ0czp7ZToiPFwvc2NyaXB0PiIsckU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9fSx7YjoiPCUiLGU6IiU+IixzTDoidmJzY3JpcHQifSx7Y046InRhZyIsYjoiPC8/IixlOiIvPz4iLHI6MCxjOlt7Y046InRpdGxlIixiOiJbXiAvPjxdKyJ9LGJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYXJrZG93bj1mdW5jdGlvbihhKXtyZXR1cm57Yzpbe2NOOiJoZWFkZXIiLGI6Il4jezEsM30iLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXi4rP1xcbls9LV17Mix9JCJ9LHtiOiI8IixlOiI+IixzTDoieG1sIixyOjB9LHtjTjoiYnVsbGV0IixiOiJeKFsqKy1dfChcXGQrXFwuKSlcXHMrIn0se2NOOiJzdHJvbmciLGI6IlsqX117Mn0uKz9bKl9dezJ9In0se2NOOiJlbXBoYXNpcyIsYjoiXFwqLis/XFwqIn0se2NOOiJlbXBoYXNpcyIsYjoiXy4rP18iLHI6MH0se2NOOiJibG9ja3F1b3RlIixiOiJePlxccysiLGU6IiQifSx7Y046ImNvZGUiLGI6ImAuKz9gIn0se2NOOiJjb2RlIixiOiJeICAgICIsZToiJCIscjowfSx7Y046Imhvcml6b250YWxfcnVsZSIsYjoiXi17Myx9IixlOiIkIn0se2I6IlxcWy4rP1xcXVxcKC4rP1xcKSIsckI6dHJ1ZSxjOlt7Y046ImxpbmtfbGFiZWwiLGI6IlxcWy4rXFxdIn0se2NOOiJsaW5rX3VybCIsYjoiXFwoIixlOiJcXCkiLGVCOnRydWUsZUU6dHJ1ZX1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jc3M9ZnVuY3Rpb24oYSl7dmFyIGI9IlthLXpBLVotXVthLXpBLVowLTlfLV0qIjt2YXIgYz17Y046ImZ1bmN0aW9uIixiOmIrIlxcKCIsZToiXFwpIixjOlsic2VsZiIsYS5OTSxhLkFTTSxhLlFTTV19O3JldHVybntjSTp0cnVlLGk6Ils9L3wnXSIsYzpbYS5DQkxDTE0se2NOOiJpZCIsYjoiXFwjW0EtWmEtejAtOV8tXSsifSx7Y046ImNsYXNzIixiOiJcXC5bQS1aYS16MC05Xy1dKyIscjowfSx7Y046ImF0dHJfc2VsZWN0b3IiLGI6IlxcWyIsZToiXFxdIixpOiIkIn0se2NOOiJwc2V1ZG8iLGI6IjooOik/W2EtekEtWjAtOVxcX1xcLVxcK1xcKFxcKVxcXCJcXCddKyJ9LHtjTjoiYXRfcnVsZSIsYjoiQChmb250LWZhY2V8cGFnZSkiLGw6IlthLXotXSsiLGs6ImZvbnQtZmFjZSBwYWdlIn0se2NOOiJhdF9ydWxlIixiOiJAIixlOiJbeztdIixjOlt7Y046ImtleXdvcmQiLGI6L1xTKy99LHtiOi9ccy8sZVc6dHJ1ZSxlRTp0cnVlLHI6MCxjOltjLGEuQVNNLGEuUVNNLGEuTk1dfV19LHtjTjoidGFnIixiOmIscjowfSx7Y046InJ1bGVzIixiOiJ7IixlOiJ9IixpOiJbXlxcc10iLHI6MCxjOlthLkNCTENMTSx7Y046InJ1bGUiLGI6IlteXFxzXSIsckI6dHJ1ZSxlOiI7IixlVzp0cnVlLGM6W3tjTjoiYXR0cmlidXRlIixiOiJbQS1aXFxfXFwuXFwtXSsiLGU6IjoiLGVFOnRydWUsaToiW15cXHNdIixzdGFydHM6e2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxlRTp0cnVlLGM6W2MsYS5OTSxhLlFTTSxhLkFTTSxhLkNCTENMTSx7Y046ImhleGNvbG9yIixiOiIjWzAtOUEtRmEtZl0rIn0se2NOOiJpbXBvcnRhbnQiLGI6IiFpbXBvcnRhbnQifV19fV19XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaHR0cD1mdW5jdGlvbihhKXtyZXR1cm57aToiXFxTIixjOlt7Y046InN0YXR1cyIsYjoiXkhUVFAvWzAtOVxcLl0rIixlOiIkIixjOlt7Y046Im51bWJlciIsYjoiXFxiXFxkezN9XFxiIn1dfSx7Y046InJlcXVlc3QiLGI6Il5bQS1aXSsgKC4qPykgSFRUUC9bMC05XFwuXSskIixyQjp0cnVlLGU6IiQiLGM6W3tjTjoic3RyaW5nIixiOiIgIixlOiIgIixlQjp0cnVlLGVFOnRydWV9XX0se2NOOiJhdHRyaWJ1dGUiLGI6Il5cXHciLGU6IjogIixlRTp0cnVlLGk6IlxcbnxcXHN8PSIsc3RhcnRzOntjTjoic3RyaW5nIixlOiIkIn19LHtiOiJcXG5cXG4iLHN0YXJ0czp7c0w6IiIsZVc6dHJ1ZX19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmE9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkIGVudW0gZWxzZSBicmVhayB0cmFuc2llbnQgbmV3IGNhdGNoIGluc3RhbmNlb2YgYnl0ZSBzdXBlciB2b2xhdGlsZSBjYXNlIGFzc2VydCBzaG9ydCBwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIixjOlt7Y046ImphdmFkb2MiLGI6Ii9cXCpcXCoiLGU6IlxcKi8iLGM6W3tjTjoiamF2YWRvY3RhZyIsYjoiKF58XFxzKUBbQS1aYS16XSsifV0scjoxMH0sYS5DTENNLGEuQ0JMQ0xNLGEuQVNNLGEuUVNNLHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIGludGVyZmFjZSIsZUU6dHJ1ZSxpOiI6IixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyBpbXBsZW1lbnRzIixyOjEwfSx7Y046InRpdGxlIixiOmEuVUlSfV19LGEuQ05NLHtjTjoiYW5ub3RhdGlvbiIsYjoiQFtBLVphLXpdKyJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnBocD1mdW5jdGlvbihhKXt2YXIgZT17Y046InZhcmlhYmxlIixiOiJcXCQrW2EtekEtWl9ceDdmLVx4ZmZdW2EtekEtWjAtOV9ceDdmLVx4ZmZdKiJ9O3ZhciBiPVthLmluaGVyaXQoYS5BU00se2k6bnVsbH0pLGEuaW5oZXJpdChhLlFTTSx7aTpudWxsfSkse2NOOiJzdHJpbmciLGI6J2IiJyxlOiciJyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6ImInIixlOiInIixjOlthLkJFXX1dO3ZhciBjPVthLkJOTSxhLkNOTV07dmFyIGQ9e2NOOiJ0aXRsZSIsYjphLlVJUn07cmV0dXJue2NJOnRydWUsbDphLlVJUixrOiJhbmQgaW5jbHVkZV9vbmNlIGxpc3QgYWJzdHJhY3QgZ2xvYmFsIHByaXZhdGUgZWNobyBpbnRlcmZhY2UgYXMgc3RhdGljIGVuZHN3aXRjaCBhcnJheSBudWxsIGlmIGVuZHdoaWxlIG9yIGNvbnN0IGZvciBlbmRmb3JlYWNoIHNlbGYgdmFyIHdoaWxlIGlzc2V0IHB1YmxpYyBwcm90ZWN0ZWQgZXhpdCBmb3JlYWNoIHRocm93IGVsc2VpZiBpbmNsdWRlIF9fRklMRV9fIGVtcHR5IHJlcXVpcmVfb25jZSBkbyB4b3IgcmV0dXJuIGltcGxlbWVudHMgcGFyZW50IGNsb25lIHVzZSBfX0NMQVNTX18gX19MSU5FX18gZWxzZSBicmVhayBwcmludCBldmFsIG5ldyBjYXRjaCBfX01FVEhPRF9fIGNhc2UgZXhjZXB0aW9uIGRlZmF1bHQgZGllIHJlcXVpcmUgX19GVU5DVElPTl9fIGVuZGRlY2xhcmUgZmluYWwgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIGVuZGZvciBlbmRpZiBkZWNsYXJlIHVuc2V0IHRydWUgZmFsc2UgbmFtZXNwYWNlIHRyYWl0IGdvdG8gaW5zdGFuY2VvZiBpbnN0ZWFkb2YgX19ESVJfXyBfX05BTUVTUEFDRV9fIHlpZWxkIGZpbmFsbHkiLGM6W2EuQ0xDTSxhLkhDTSx7Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8iLGM6W3tjTjoicGhwZG9jIixiOiJcXHNAW0EtWmEtel0rIn1dfSx7Y046ImNvbW1lbnQiLGI6Il9faGFsdF9jb21waWxlci4rPzsiLGVXOnRydWUsazoiX19oYWx0X2NvbXBpbGVyIixsOmEuVUlSfSx7Y046InN0cmluZyIsYjoiPDw8WydcIl0/XFx3K1snXCJdPyQiLGU6Il5cXHcrOyIsYzpbYS5CRV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiI8XFw/cGhwIixyOjEwfSx7Y046InByZXByb2Nlc3NvciIsYjoiXFw/PiJ9LGUse2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZToieyIsazoiZnVuY3Rpb24iLGk6IlxcJHxcXFt8JSIsYzpbZCx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6WyJzZWxmIixlLGEuQ0JMQ0xNXS5jb25jYXQoYikuY29uY2F0KGMpfV19LHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIixpOiJbOlxcKFxcJF0iLGM6W3tiV0s6dHJ1ZSxlVzp0cnVlLGs6ImV4dGVuZHMiLGM6W2RdfSxkXX0se2I6Ij0+In1dLmNvbmNhdChiKS5jb25jYXQoYyl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5weXRob249ZnVuY3Rpb24oYSl7dmFyIGY9e2NOOiJwcm9tcHQiLGI6L14oPj4+fFwuXC5cLikgL307dmFyIGM9W3tjTjoic3RyaW5nIixiOi8odXxiKT9yPycnJy8sZTovJycnLyxjOltmXSxyOjEwfSx7Y046InN0cmluZyIsYjovKHV8Yik/cj8iIiIvLGU6LyIiIi8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpJy8sZTovJy8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpIi8sZTovIi8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6LyhifGJyKScvLGU6LycvLGM6W2EuQkVdfSx7Y046InN0cmluZyIsYjovKGJ8YnIpIi8sZTovIi8sYzpbYS5CRV19XS5jb25jYXQoW2EuQVNNLGEuUVNNXSk7dmFyIGU9e2NOOiJ0aXRsZSIsYjphLlVJUn07dmFyIGQ9e2NOOiJwYXJhbXMiLGI6L1woLyxlOi9cKS8sYzpbInNlbGYiLGEuQ05NLGZdLmNvbmNhdChjKX07dmFyIGI9e2JXSzp0cnVlLGU6LzovLGk6L1skez07XG5dLyxjOltlLGRdLHI6MTB9O3JldHVybntrOntrZXl3b3JkOiJhbmQgZWxpZiBpcyBnbG9iYWwgYXMgaW4gaWYgZnJvbSByYWlzZSBmb3IgZXhjZXB0IGZpbmFsbHkgcHJpbnQgaW1wb3J0IHBhc3MgcmV0dXJuIGV4ZWMgZWxzZSBicmVhayBub3Qgd2l0aCBjbGFzcyBhc3NlcnQgeWllbGQgdHJ5IHdoaWxlIGNvbnRpbnVlIGRlbCBvciBkZWYgbGFtYmRhIG5vbmxvY2FsfDEwIE5vbmUgVHJ1ZSBGYWxzZSIsYnVpbHRfaW46IkVsbGlwc2lzIE5vdEltcGxlbWVudGVkIn0saTovKDxcL3wtPnxcPykvLGM6Yy5jb25jYXQoW2YsYS5IQ00sYS5pbmhlcml0KGIse2NOOiJmdW5jdGlvbiIsazoiZGVmIn0pLGEuaW5oZXJpdChiLHtjTjoiY2xhc3MiLGs6ImNsYXNzIn0pLGEuQ05NLHtjTjoiZGVjb3JhdG9yIixiOi9ALyxlOi8kL30se2I6L1xiKHByaW50fGV4ZWMpXCgvfV0pfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuc3FsPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGM6W3tjTjoib3BlcmF0b3IiLGI6IihiZWdpbnxlbmR8c3RhcnR8Y29tbWl0fHJvbGxiYWNrfHNhdmVwb2ludHxsb2NrfGFsdGVyfGNyZWF0ZXxkcm9wfHJlbmFtZXxjYWxsfGRlbGV0ZXxkb3xoYW5kbGVyfGluc2VydHxsb2FkfHJlcGxhY2V8c2VsZWN0fHRydW5jYXRlfHVwZGF0ZXxzZXR8c2hvd3xwcmFnbWF8Z3JhbnQpXFxiKD8hOikiLGU6IjsiLGVXOnRydWUsazp7a2V5d29yZDoiYWxsIHBhcnRpYWwgZ2xvYmFsIG1vbnRoIGN1cnJlbnRfdGltZXN0YW1wIHVzaW5nIGdvIHJldm9rZSBzbWFsbGludCBpbmRpY2F0b3IgZW5kLWV4ZWMgZGlzY29ubmVjdCB6b25lIHdpdGggY2hhcmFjdGVyIGFzc2VydGlvbiB0byBhZGQgY3VycmVudF91c2VyIHVzYWdlIGlucHV0IGxvY2FsIGFsdGVyIG1hdGNoIGNvbGxhdGUgcmVhbCB0aGVuIHJvbGxiYWNrIGdldCByZWFkIHRpbWVzdGFtcCBzZXNzaW9uX3VzZXIgbm90IGludGVnZXIgYml0IHVuaXF1ZSBkYXkgbWludXRlIGRlc2MgaW5zZXJ0IGV4ZWN1dGUgbGlrZSBpbGlrZXwyIGxldmVsIGRlY2ltYWwgZHJvcCBjb250aW51ZSBpc29sYXRpb24gZm91bmQgd2hlcmUgY29uc3RyYWludHMgZG9tYWluIHJpZ2h0IG5hdGlvbmFsIHNvbWUgbW9kdWxlIHRyYW5zYWN0aW9uIHJlbGF0aXZlIHNlY29uZCBjb25uZWN0IGVzY2FwZSBjbG9zZSBzeXN0ZW1fdXNlciBmb3IgZGVmZXJyZWQgc2VjdGlvbiBjYXN0IGN1cnJlbnQgc3Fsc3RhdGUgYWxsb2NhdGUgaW50ZXJzZWN0IGRlYWxsb2NhdGUgbnVtZXJpYyBwdWJsaWMgcHJlc2VydmUgZnVsbCBnb3RvIGluaXRpYWxseSBhc2Mgbm8ga2V5IG91dHB1dCBjb2xsYXRpb24gZ3JvdXAgYnkgdW5pb24gc2Vzc2lvbiBib3RoIGxhc3QgbGFuZ3VhZ2UgY29uc3RyYWludCBjb2x1bW4gb2Ygc3BhY2UgZm9yZWlnbiBkZWZlcnJhYmxlIHByaW9yIGNvbm5lY3Rpb24gdW5rbm93biBhY3Rpb24gY29tbWl0IHZpZXcgb3IgZmlyc3QgaW50byBmbG9hdCB5ZWFyIHByaW1hcnkgY2FzY2FkZWQgZXhjZXB0IHJlc3RyaWN0IHNldCByZWZlcmVuY2VzIG5hbWVzIHRhYmxlIG91dGVyIG9wZW4gc2VsZWN0IHNpemUgYXJlIHJvd3MgZnJvbSBwcmVwYXJlIGRpc3RpbmN0IGxlYWRpbmcgY3JlYXRlIG9ubHkgbmV4dCBpbm5lciBhdXRob3JpemF0aW9uIHNjaGVtYSBjb3JyZXNwb25kaW5nIG9wdGlvbiBkZWNsYXJlIHByZWNpc2lvbiBpbW1lZGlhdGUgZWxzZSB0aW1lem9uZV9taW51dGUgZXh0ZXJuYWwgdmFyeWluZyB0cmFuc2xhdGlvbiB0cnVlIGNhc2UgZXhjZXB0aW9uIGpvaW4gaG91ciBkZWZhdWx0IGRvdWJsZSBzY3JvbGwgdmFsdWUgY3Vyc29yIGRlc2NyaXB0b3IgdmFsdWVzIGRlYyBmZXRjaCBwcm9jZWR1cmUgZGVsZXRlIGFuZCBmYWxzZSBpbnQgaXMgZGVzY3JpYmUgY2hhciBhcyBhdCBpbiB2YXJjaGFyIG51bGwgdHJhaWxpbmcgYW55IGFic29sdXRlIGN1cnJlbnRfdGltZSBlbmQgZ3JhbnQgcHJpdmlsZWdlcyB3aGVuIGNyb3NzIGNoZWNrIHdyaXRlIGN1cnJlbnRfZGF0ZSBwYWQgYmVnaW4gdGVtcG9yYXJ5IGV4ZWMgdGltZSB1cGRhdGUgY2F0YWxvZyB1c2VyIHNxbCBkYXRlIG9uIGlkZW50aXR5IHRpbWV6b25lX2hvdXIgbmF0dXJhbCB3aGVuZXZlciBpbnRlcnZhbCB3b3JrIG9yZGVyIGNhc2NhZGUgZGlhZ25vc3RpY3MgbmNoYXIgaGF2aW5nIGxlZnQgY2FsbCBkbyBoYW5kbGVyIGxvYWQgcmVwbGFjZSB0cnVuY2F0ZSBzdGFydCBsb2NrIHNob3cgcHJhZ21hIGV4aXN0cyBudW1iZXIgdHJpZ2dlciBpZiBiZWZvcmUgYWZ0ZXIgZWFjaCByb3ciLGFnZ3JlZ2F0ZToiY291bnQgc3VtIG1pbiBtYXggYXZnIn0sYzpbe2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2EuQkUse2I6IicnIn1dLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2EuQkUse2I6JyIiJ31dLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6W2EuQkVdfSxhLkNOTV19LGEuQ0JMQ0xNLHtjTjoiY29tbWVudCIsYjoiLS0iLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5pbmk9ZnVuY3Rpb24oYSl7cmV0dXJue2NJOnRydWUsaToiW15cXHNdIixjOlt7Y046ImNvbW1lbnQiLGI6IjsiLGU6IiQifSx7Y046InRpdGxlIixiOiJeXFxbIixlOiJcXF0ifSx7Y046InNldHRpbmciLGI6Il5bYS16MC05XFxbXFxdXy1dK1sgXFx0XSo9WyBcXHRdKiIsZToiJCIsYzpbe2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxrOiJvbiBvZmYgdHJ1ZSBmYWxzZSB5ZXMgbm8iLGM6W2EuUVNNLGEuTk1dLHI6MH1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKGUpe3ZhciBhPSJnZXRwd2VudCBnZXRzZXJ2ZW50IHF1b3RlbWV0YSBtc2dyY3Ygc2NhbGFyIGtpbGwgZGJtY2xvc2UgdW5kZWYgbGMgbWEgc3lzd3JpdGUgdHIgc2VuZCB1bWFzayBzeXNvcGVuIHNobXdyaXRlIHZlYyBxeCB1dGltZSBsb2NhbCBvY3Qgc2VtY3RsIGxvY2FsdGltZSByZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXFmaWxlbm8gcXcgZW5kcHJvdG9lbnQgd2FpdCBzZXRob3N0ZW50IGJsZXNzIHN8MCBvcGVuZGlyIGNvbnRpbnVlIGVhY2ggc2xlZXAgZW5kZ3JlbnQgc2h1dGRvd24gZHVtcCBjaG9tcCBjb25uZWN0IGdldHNvY2tuYW1lIGRpZSBzb2NrZXRwYWlyIGNsb3NlIGZsb2NrIGV4aXN0cyBpbmRleCBzaG1nZXRzdWIgZm9yIGVuZHB3ZW50IHJlZG8gbHN0YXQgbXNnY3RsIHNldHBncnAgYWJzIGV4aXQgc2VsZWN0IHByaW50IHJlZiBnZXRob3N0YnlhZGRyIHVuc2hpZnQgZmNudGwgc3lzY2FsbCBnb3RvIGdldG5ldGJ5YWRkciBqb2luIGdtdGltZSBzeW1saW5rIHNlbWdldCBzcGxpY2UgeHwwIGdldHBlZXJuYW1lIHJlY3YgbG9nIHNldHNvY2tvcHQgY29zIGxhc3QgcmV2ZXJzZSBnZXRob3N0YnluYW1lIGdldGdybmFtIHN0dWR5IGZvcm1saW5lIGVuZGhvc3RlbnQgdGltZXMgY2hvcCBsZW5ndGggZ2V0aG9zdGVudCBnZXRuZXRlbnQgcGFjayBnZXRwcm90b2VudCBnZXRzZXJ2YnluYW1lIHJhbmQgbWtkaXIgcG9zIGNobW9kIHl8MCBzdWJzdHIgZW5kbmV0ZW50IHByaW50ZiBuZXh0IG9wZW4gbXNnc25kIHJlYWRkaXIgdXNlIHVubGluayBnZXRzb2Nrb3B0IGdldHByaW9yaXR5IHJpbmRleCB3YW50YXJyYXkgaGV4IHN5c3RlbSBnZXRzZXJ2Ynlwb3J0IGVuZHNlcnZlbnQgaW50IGNociB1bnRpZSBybWRpciBwcm90b3R5cGUgdGVsbCBsaXN0ZW4gZm9yayBzaG1yZWFkIHVjZmlyc3Qgc2V0cHJvdG9lbnQgZWxzZSBzeXNzZWVrIGxpbmsgZ2V0Z3JnaWQgc2htY3RsIHdhaXRwaWQgdW5wYWNrIGdldG5ldGJ5bmFtZSByZXNldCBjaGRpciBncmVwIHNwbGl0IHJlcXVpcmUgY2FsbGVyIGxjZmlyc3QgdW50aWwgd2FybiB3aGlsZSB2YWx1ZXMgc2hpZnQgdGVsbGRpciBnZXRwd3VpZCBteSBnZXRwcm90b2J5bnVtYmVyIGRlbGV0ZSBhbmQgc29ydCB1YyBkZWZpbmVkIHNyYW5kIGFjY2VwdCBwYWNrYWdlIHNlZWtkaXIgZ2V0cHJvdG9ieW5hbWUgc2Vtb3Agb3VyIHJlbmFtZSBzZWVrIGlmIHF8MCBjaHJvb3Qgc3lzcmVhZCBzZXRwd2VudCBubyBjcnlwdCBnZXRjIGNob3duIHNxcnQgd3JpdGUgc2V0bmV0ZW50IHNldHByaW9yaXR5IGZvcmVhY2ggdGllIHNpbiBtc2dnZXQgbWFwIHN0YXQgZ2V0bG9naW4gdW5sZXNzIGVsc2lmIHRydW5jYXRlIGV4ZWMga2V5cyBnbG9iIHRpZWQgY2xvc2VkaXJpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlIGF0YW4yIGdldGdyZW50IGV4cCB0aW1lIHB1c2ggc2V0Z3JlbnQgZ3QgbHQgb3IgbmUgbXwwIGJyZWFrIGdpdmVuIHNheSBzdGF0ZSB3aGVuIjt2YXIgZD17Y046InN1YnN0IixiOiJbJEBdXFx7IixlOiJcXH0iLGs6YSxyOjEwfTt2YXIgYj17Y046InZhcmlhYmxlIixiOiJcXCRcXGQifTt2YXIgaT17Y046InZhcmlhYmxlIixiOiJbXFwkXFwlXFxAXFwqXShcXF5cXHdcXGJ8I1xcdysoXFw6XFw6XFx3KykqfFteXFxzXFx3e118e1xcdyt9fFxcdysoXFw6XFw6XFx3KikqKSJ9O3ZhciBmPVtlLkJFLGQsYixpXTt2YXIgaD17YjoiLT4iLGM6W3tiOmUuSVJ9LHtiOiJ7IixlOiJ9In1dfTt2YXIgZz17Y046ImNvbW1lbnQiLGI6Il4oX19FTkRfX3xfX0RBVEFfXykiLGU6IlxcbiQiLHI6NX07dmFyIGM9W2IsaSxlLkhDTSxnLHtjTjoiY29tbWVudCIsYjoiXlxcPVxcdyIsZToiXFw9Y3V0IixlVzp0cnVlfSxoLHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXCgiLGU6IlxcKSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcWyIsZToiXFxdIixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXHwiLGU6IlxcfCIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcPCIsZToiXFw+IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicXdcXHMrcSIsZToicSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2UuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6ZixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFXX0se2NOOiJzdHJpbmciLGI6IntcXHcrfSIscjowfSx7Y046InN0cmluZyIsYjoiLT9cXHcrXFxzKlxcPVxcPiIscjowfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscjowfSx7YjoiKCIrZS5SU1IrInxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXGIpXFxzKiIsazoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscjowLGM6W2UuSENNLGcse2NOOiJyZWdleHAiLGI6IihzfHRyfHkpLyhcXFxcLnxbXi9dKSovKFxcXFwufFteL10pKi9bYS16XSoiLHI6MTB9LHtjTjoicmVnZXhwIixiOiIobXxxcik/LyIsZToiL1thLXpdKiIsYzpbZS5CRV0scjowfV19LHtjTjoic3ViIixiV0s6dHJ1ZSxlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsazoic3ViIixyOjV9LHtjTjoib3BlcmF0b3IiLGI6Ii1cXHdcXGIiLHI6MH1dO2QuYz1jO2guY1sxXS5jPWM7cmV0dXJue2s6YSxjOmN9fShobGpzKTtobGpzLkxBTkdVQUdFUy5vYmplY3RpdmVjPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNhdGNoIGV4cG9ydCBzaXplb2YgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgZm9yIHVuaW9uIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIG11dGFibGUgaWYgcHVibGljIGRvIHJldHVybiBnb3RvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiBhc20gY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSB0aHJvdyByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHdjaGFyX3QgaW5saW5lIHJlYWRvbmx5IGFzc2lnbiBwcm9wZXJ0eSBzZWxmIHN5bmNocm9uaXplZCBlbmQgc3ludGhlc2l6ZSBpZCBvcHRpb25hbCByZXF1aXJlZCBub25hdG9taWMgc3VwZXIgdW5pY2hhciBmaW5hbGx5IGR5bmFtaWMgSUJPdXRsZXQgSUJBY3Rpb24gc2VsZWN0b3Igc3Ryb25nIHdlYWsgcmVhZG9ubHkiLGxpdGVyYWw6ImZhbHNlIHRydWUgRkFMU0UgVFJVRSBuaWwgWUVTIE5PIE5VTEwiLGJ1aWx0X2luOiJOU1N0cmluZyBOU0RpY3Rpb25hcnkgQ0dSZWN0IENHUG9pbnQgVUlCdXR0b24gVUlMYWJlbCBVSVRleHRWaWV3IFVJV2ViVmlldyBNS01hcFZpZXcgVUlTZWdtZW50ZWRDb250cm9sIE5TT2JqZWN0IFVJVGFibGVWaWV3RGVsZWdhdGUgVUlUYWJsZVZpZXdEYXRhU291cmNlIE5TVGhyZWFkIFVJQWN0aXZpdHlJbmRpY2F0b3IgVUlUYWJiYXIgVUlUb29sQmFyIFVJQmFyQnV0dG9uSXRlbSBVSUltYWdlVmlldyBOU0F1dG9yZWxlYXNlUG9vbCBVSVRhYmxlVmlldyBCT09MIE5TSW50ZWdlciBDR0Zsb2F0IE5TRXhjZXB0aW9uIE5TTG9nIE5TTXV0YWJsZVN0cmluZyBOU011dGFibGVBcnJheSBOU011dGFibGVEaWN0aW9uYXJ5IE5TVVJMIE5TSW5kZXhQYXRoIENHU2l6ZSBVSVRhYmxlVmlld0NlbGwgVUlWaWV3IFVJVmlld0NvbnRyb2xsZXIgVUlOYXZpZ2F0aW9uQmFyIFVJTmF2aWdhdGlvbkNvbnRyb2xsZXIgVUlUYWJCYXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXIgVUlQb3BvdmVyQ29udHJvbGxlckRlbGVnYXRlIFVJSW1hZ2UgTlNOdW1iZXIgVUlTZWFyY2hCYXIgTlNGZXRjaGVkUmVzdWx0c0NvbnRyb2xsZXIgTlNGZXRjaGVkUmVzdWx0c0NoYW5nZVR5cGUgVUlTY3JvbGxWaWV3IFVJU2Nyb2xsVmlld0RlbGVnYXRlIFVJRWRnZUluc2V0cyBVSUNvbG9yIFVJRm9udCBVSUFwcGxpY2F0aW9uIE5TTm90Rm91bmQgTlNOb3RpZmljYXRpb25DZW50ZXIgTlNOb3RpZmljYXRpb24gVUlMb2NhbE5vdGlmaWNhdGlvbiBOU0J1bmRsZSBOU0ZpbGVNYW5hZ2VyIE5TVGltZUludGVydmFsIE5TRGF0ZSBOU0NhbGVuZGFyIE5TVXNlckRlZmF1bHRzIFVJV2luZG93IE5TUmFuZ2UgTlNBcnJheSBOU0Vycm9yIE5TVVJMUmVxdWVzdCBOU1VSTENvbm5lY3Rpb24gVUlJbnRlcmZhY2VPcmllbnRhdGlvbiBNUE1vdmllUGxheWVyQ29udHJvbGxlciBkaXNwYXRjaF9vbmNlX3QgZGlzcGF0Y2hfcXVldWVfdCBkaXNwYXRjaF9zeW5jIGRpc3BhdGNoX2FzeW5jIGRpc3BhdGNoX29uY2UifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5DTk0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixpOiJbXlxcXFxdW14nXSJ9LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjaW1wb3J0IixlOiIkIixjOlt7Y046InRpdGxlIixiOiciJyxlOiciJ30se2NOOiJ0aXRsZSIsYjoiPCIsZToiPiJ9XX0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQifSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIoe3wkKSIsazoiaW50ZXJmYWNlIGNsYXNzIHByb3RvY29sIGltcGxlbWVudGF0aW9uIixjOlt7Y046ImlkIixiOmEuVUlSfV19LHtjTjoidmFyaWFibGUiLGI6IlxcLiIrYS5VSVIscjowfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jb2ZmZWVzY3JpcHQ9ZnVuY3Rpb24oYyl7dmFyIGI9e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHRoZW4gdW5sZXNzIHVudGlsIGxvb3Agb2YgYnkgd2hlbiBhbmQgb3IgaXMgaXNudCBub3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgeWVzIG5vIG9uIG9mZiIscmVzZXJ2ZWQ6ImNhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgdm9pZCB3aXRoIGNvbnN0IGxldCBlbnVtIGV4cG9ydCBpbXBvcnQgbmF0aXZlIF9faGFzUHJvcCBfX2V4dGVuZHMgX19zbGljZSBfX2JpbmQgX19pbmRleE9mIixidWlsdF9pbjoibnBtIHJlcXVpcmUgY29uc29sZSBwcmludCBtb2R1bGUgZXhwb3J0cyBnbG9iYWwgd2luZG93IGRvY3VtZW50In07dmFyIGE9IltBLVphLXokX11bMC05QS1aYS16JF9dKiI7dmFyIGY9e2NOOiJ0aXRsZSIsYjphfTt2YXIgZT17Y046InN1YnN0IixiOiIjXFx7IixlOiJ9IixrOmIsfTt2YXIgZD1bYy5CTk0sYy5pbmhlcml0KGMuQ05NLHtzdGFydHM6e2U6IihcXHMqLyk/IixyOjB9fSkse2NOOiJzdHJpbmciLGI6IicnJyIsZToiJycnIixjOltjLkJFXX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2MuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyIiIicsZTonIiIiJyxjOltjLkJFLGVdfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbYy5CRSxlXSxyOjB9LHtjTjoicmVnZXhwIixiOiIvLy8iLGU6Ii8vLyIsYzpbYy5IQ01dfSx7Y046InJlZ2V4cCIsYjoiLy9bZ2ltXSoiLHI6MH0se2NOOiJyZWdleHAiLGI6Ii9cXFMoXFxcXC58W15cXG5dKSo/L1tnaW1dKig/PVxcc3xcXFd8JCkifSx7Y046InByb3BlcnR5IixiOiJAIithfSx7YjoiYCIsZToiYCIsZUI6dHJ1ZSxlRTp0cnVlLHNMOiJqYXZhc2NyaXB0In1dO2UuYz1kO3JldHVybntrOmIsYzpkLmNvbmNhdChbe2NOOiJjb21tZW50IixiOiIjIyMiLGU6IiMjIyJ9LGMuSENNLHtjTjoiZnVuY3Rpb24iLGI6IigiK2ErIlxccyo9XFxzKik/KFxcKC4qXFwpKT9cXHMqWy09XT4iLGU6IlstPV0+IixyQjp0cnVlLGM6W2Yse2NOOiJwYXJhbXMiLGI6IlxcKCIsckI6dHJ1ZSxjOlt7YjovXCgvLGU6L1wpLyxrOmIsYzpbInNlbGYiXS5jb25jYXQoZCl9XX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxrOiJjbGFzcyIsZToiJCIsaToiWzpcXFtcXF1dIixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyIsZVc6dHJ1ZSxpOiI6IixjOltmXX0sZl19LHtjTjoiYXR0cmlidXRlIixiOmErIjoiLGU6IjoiLHJCOnRydWUsZUU6dHJ1ZX1dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLm5naW54PWZ1bmN0aW9uKGIpe3ZhciBjPVt7Y046InZhcmlhYmxlIixiOiJcXCRcXGQrIn0se2NOOiJ2YXJpYWJsZSIsYjoiXFwkeyIsZToifSJ9LHtjTjoidmFyaWFibGUiLGI6IltcXCRcXEBdIitiLlVJUn1dO3ZhciBhPXtlVzp0cnVlLGw6IlthLXovX10rIixrOntidWlsdF9pbjoib24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgc2VsZWN0IGJyZWFrIGxhc3QgcGVybWFuZW50IHJlZGlyZWN0IGtxdWV1ZSBydHNpZyBlcG9sbCBwb2xsIC9kZXYvcG9sbCJ9LHI6MCxpOiI9PiIsYzpbYi5IQ00se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2IuQkVdLmNvbmNhdChjKSxyOjB9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InVybCIsYjoiKFthLXpdKyk6LyIsZToiXFxzIixlVzp0cnVlLGVFOnRydWV9LHtjTjoicmVnZXhwIixiOiJcXHNcXF4iLGU6Ilxcc3x7fDsiLHJFOnRydWUsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiflxcKj9cXHMrIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IlxcKihcXC5bYS16XFwtXSspKyIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiKFthLXpcXC1dK1xcLikrXFwqIixjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoibnVtYmVyIixiOiJcXGJcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSg6XFxkezEsNX0pP1xcYiJ9LHtjTjoibnVtYmVyIixiOiJcXGJcXGQrW2tLbU1nR2RzaGR3eV0qXFxiIixyOjB9XS5jb25jYXQoYyl9O3JldHVybntjOltiLkhDTSx7YjpiLlVJUisiXFxzIixlOiI7fHsiLHJCOnRydWUsYzpbe2NOOiJ0aXRsZSIsYjpiLlVJUixzdGFydHM6YX1dLHI6MH1dLGk6IlteXFxzXFx9XSJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5qc29uPWZ1bmN0aW9uKGEpe3ZhciBlPXtsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwifTt2YXIgZD1bYS5RU00sYS5DTk1dO3ZhciBjPXtjTjoidmFsdWUiLGU6IiwiLGVXOnRydWUsZUU6dHJ1ZSxjOmQsazplfTt2YXIgYj17YjoieyIsZToifSIsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6J1xccyoiJyxlOiciXFxzKjpcXHMqJyxlQjp0cnVlLGVFOnRydWUsYzpbYS5CRV0saToiXFxuIixzdGFydHM6Y31dLGk6IlxcUyJ9O3ZhciBmPXtiOiJcXFsiLGU6IlxcXSIsYzpbYS5pbmhlcml0KGMse2NOOm51bGx9KV0saToiXFxTIn07ZC5zcGxpY2UoZC5sZW5ndGgsMCxiLGYpO3JldHVybntjOmQsazplLGk6IlxcUyJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5hcGFjaGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJudW1iZXIiLGI6IltcXCQlXVxcZCsifTtyZXR1cm57Y0k6dHJ1ZSxjOlthLkhDTSx7Y046InRhZyIsYjoiPC8/IixlOiI+In0se2NOOiJrZXl3b3JkIixiOi9cdysvLHI6MCxrOntjb21tb246Im9yZGVyIGRlbnkgYWxsb3cgc2V0ZW52IHJld3JpdGVydWxlIHJld3JpdGVlbmdpbmUgcmV3cml0ZWNvbmQgZG9jdW1lbnRyb290IHNldGhhbmRsZXIgZXJyb3Jkb2N1bWVudCBsb2FkbW9kdWxlIG9wdGlvbnMgaGVhZGVyIGxpc3RlbiBzZXJ2ZXJyb290IHNlcnZlcm5hbWUifSxzdGFydHM6e2U6LyQvLHI6MCxrOntsaXRlcmFsOiJvbiBvZmYgYWxsIn0sYzpbe2NOOiJzcWJyYWNrZXQiLGI6Ilxcc1xcWyIsZToiXFxdJCJ9LHtjTjoiY2JyYWNrZXQiLGI6IltcXCQlXVxceyIsZToiXFx9IixjOlsic2VsZiIsYl19LGIsYS5RU01dfX1dLGk6L1xTL319KGhsanMpO2hsanMuTEFOR1VBR0VTLmNwcD1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiZmFsc2UgaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBzdHJ1Y3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSB1bnNpZ25lZCBsb25nIHRocm93IHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgZG8gcmV0dXJuIGdvdG8gYXV0byB2b2lkIGVudW0gZWxzZSBicmVhayBuZXcgZXh0ZXJuIHVzaW5nIHRydWUgY2xhc3MgYXNtIGNhc2UgdHlwZWlkIHNob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSBkZWxldGUgYWxpZ25vZiBjaGFyMTZfdCBjaGFyMzJfdCBjb25zdGV4cHIgZGVjbHR5cGUgbm9leGNlcHQgbnVsbHB0ciBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBfQm9vbCBjb21wbGV4IixidWlsdF9pbjoic3RkIHN0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RyaW5nc3RyZWFtIGlzdHJpbmdzdHJlYW0gb3N0cmluZ3N0cmVhbSBhdXRvX3B0ciBkZXF1ZSBsaXN0IHF1ZXVlIHN0YWNrIHZlY3RvciBtYXAgc2V0IGJpdHNldCBtdWx0aXNldCBtdWx0aW1hcCB1bm9yZGVyZWRfc2V0IHVub3JkZXJlZF9tYXAgdW5vcmRlcmVkX211bHRpc2V0IHVub3JkZXJlZF9tdWx0aW1hcCBhcnJheSBzaGFyZWRfcHRyIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUVNNLHtjTjoic3RyaW5nIixiOiInXFxcXD8uIixlOiInIixpOiIuIn0se2NOOiJudW1iZXIiLGI6IlxcYihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSh1fFV8bHxMfHVsfFVMfGZ8RikifSxhLkNOTSx7Y046InByZXByb2Nlc3NvciIsYjoiIyIsZToiJCIsYzpbe2I6IjwiLGU6Ij4iLGk6IlxcbiJ9LGEuQ0xDTV19LHtjTjoic3RsX2NvbnRhaW5lciIsYjoiXFxiKGRlcXVlfGxpc3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5KVxccyo8IixlOiI+IixrOmIscjoxMCxjOlsic2VsZiJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYWtlZmlsZT1mdW5jdGlvbihhKXt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfTtyZXR1cm57YzpbYS5IQ00se2I6L15cdytccypcVyo9LyxyQjp0cnVlLHI6MCxzdGFydHM6e2NOOiJjb25zdGFudCIsZTovXHMqXFcqPS8sZUU6dHJ1ZSxzdGFydHM6e2U6LyQvLHI6MCxjOltiXSx9fX0se2NOOiJ0aXRsZSIsYjovXltcd10rOlxzKiQvfSx7Y046InBob255IixiOi9eXC5QSE9OWTovLGU6LyQvLGs6Ii5QSE9OWSIsbDovW1wuXHddKy99LHtiOi9eXHQrLyxlOi8kLyxjOlthLlFTTSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuZ289ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImJyZWFrIGRlZmF1bHQgZnVuYyBpbnRlcmZhY2Ugc2VsZWN0IGNhc2UgbWFwIHN0cnVjdCBjaGFuIGVsc2UgZ290byBwYWNrYWdlIHN3aXRjaCBjb25zdCBmYWxsdGhyb3VnaCBpZiByYW5nZSB0eXBlIGNvbnRpbnVlIGZvciBpbXBvcnQgcmV0dXJuIHZhciBnbyBkZWZlciIsY29uc3RhbnQ6InRydWUgZmFsc2UgaW90YSBuaWwiLHR5cGVuYW1lOiJib29sIGJ5dGUgY29tcGxleDY0IGNvbXBsZXgxMjggZmxvYXQzMiBmbG9hdDY0IGludDggaW50MTYgaW50MzIgaW50NjQgc3RyaW5nIHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0IGludCB1aW50IHVpbnRwdHIgcnVuZSIsYnVpbHRfaW46ImFwcGVuZCBjYXAgY2xvc2UgY29tcGxleCBjb3B5IGltYWcgbGVuIG1ha2UgbmV3IHBhbmljIHByaW50IHByaW50bG4gcmVhbCByZWNvdmVyIGRlbGV0ZSJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJyIsZToiW15cXFxcXSciLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAifSx7Y046Im51bWJlciIsYjoiW15hLXpBLVpfMC05XShcXC18XFwrKT9cXGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHMpKFxcK3xcXC0pP1xcZCspPyIscjowfSxhLkNOTV19fShobGpzKTtQSwcIFVltTvZ1AAD2dQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAc3RhdGljXGxpYlxqcXVlcnkuZm9ybS5taW4uanMvKiEKICogalF1ZXJ5IEZvcm0gUGx1Z2luCiAqIHZlcnNpb246IDMuNDYuMC0yMDEzLjExLjIxCiAqIFJlcXVpcmVzIGpRdWVyeSB2MS41IG9yIGxhdGVyCiAqIENvcHlyaWdodCAoYykgMjAxMyBNLiBBbHN1cAogKiBFeGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBhdDogaHR0cDovL21hbHN1cC5jb20vanF1ZXJ5L2Zvcm0vCiAqIFByb2plY3QgcmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKiBodHRwczovL2dpdGh1Yi5jb20vbWFsc3VwL2Zvcm0jY29weXJpZ2h0LWFuZC1saWNlbnNlCiAqLwooZnVuY3Rpb24oYSl7aWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbImpxdWVyeSJdLGEpfWVsc2V7YSgodHlwZW9mKGpRdWVyeSkhPSJ1bmRlZmluZWQiKT9qUXVlcnk6d2luZG93LlplcHRvKX19KGZ1bmN0aW9uKGYpe3ZhciBjPXt9O2MuZmlsZWFwaT1mKCI8aW5wdXQgdHlwZT0nZmlsZScvPiIpLmdldCgwKS5maWxlcyE9PXVuZGVmaW5lZDtjLmZvcm1kYXRhPXdpbmRvdy5Gb3JtRGF0YSE9PXVuZGVmaW5lZDt2YXIgZT0hIWYuZm4ucHJvcDtmLmZuLmF0dHIyPWZ1bmN0aW9uKCl7aWYoIWUpe3JldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBnPXRoaXMucHJvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoKGcmJmcuanF1ZXJ5KXx8dHlwZW9mIGc9PT0ic3RyaW5nIil7cmV0dXJuIGd9cmV0dXJuIHRoaXMuYXR0ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2YuZm4uYWpheFN1Ym1pdD1mdW5jdGlvbihqKXtpZighdGhpcy5sZW5ndGgpe2QoImFqYXhTdWJtaXQ6IHNraXBwaW5nIHN1Ym1pdCBwcm9jZXNzIC0gbm8gZWxlbWVudCBzZWxlY3RlZCIpO3JldHVybiB0aGlzfXZhciBpLEMsbSxvPXRoaXM7aWYodHlwZW9mIGo9PSJmdW5jdGlvbiIpe2o9e3N1Y2Nlc3M6an19ZWxzZXtpZihqPT09dW5kZWZpbmVkKXtqPXt9fX1pPWoudHlwZXx8dGhpcy5hdHRyMigibWV0aG9kIik7Qz1qLnVybHx8dGhpcy5hdHRyMigiYWN0aW9uIik7bT0odHlwZW9mIEM9PT0ic3RyaW5nIik/Zi50cmltKEMpOiIiO209bXx8d2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiO2lmKG0pe209KG0ubWF0Y2goL14oW14jXSspLyl8fFtdKVsxXX1qPWYuZXh0ZW5kKHRydWUse3VybDptLHN1Y2Nlc3M6Zi5hamF4U2V0dGluZ3Muc3VjY2Vzcyx0eXBlOml8fGYuYWpheFNldHRpbmdzLnR5cGUsaWZyYW1lU3JjOi9eaHR0cHMvaS50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIik/ImphdmFzY3JpcHQ6ZmFsc2UiOiJhYm91dDpibGFuayJ9LGopO3ZhciB1PXt9O3RoaXMudHJpZ2dlcigiZm9ybS1wcmUtc2VyaWFsaXplIixbdGhpcyxqLHVdKTtpZih1LnZldG8pe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tcHJlLXNlcmlhbGl6ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9aWYoai5iZWZvcmVTZXJpYWxpemUmJmouYmVmb3JlU2VyaWFsaXplKHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVNlcmlhbGl6ZSBjYWxsYmFjayIpO3JldHVybiB0aGlzfXZhciBuPWoudHJhZGl0aW9uYWw7aWYobj09PXVuZGVmaW5lZCl7bj1mLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbH12YXIgcz1bXTt2YXIgRSxGPXRoaXMuZm9ybVRvQXJyYXkoai5zZW1hbnRpYyxzKTtpZihqLmRhdGEpe2ouZXh0cmFEYXRhPWouZGF0YTtFPWYucGFyYW0oai5kYXRhLG4pfWlmKGouYmVmb3JlU3VibWl0JiZqLmJlZm9yZVN1Ym1pdChGLHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVN1Ym1pdCBjYWxsYmFjayIpO3JldHVybiB0aGlzfXRoaXMudHJpZ2dlcigiZm9ybS1zdWJtaXQtdmFsaWRhdGUiLFtGLHRoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXN1Ym1pdC12YWxpZGF0ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9dmFyIHk9Zi5wYXJhbShGLG4pO2lmKEUpe3k9KHk/KHkrIiYiK0UpOkUpfWlmKGoudHlwZS50b1VwcGVyQ2FzZSgpPT0iR0VUIil7ai51cmwrPShqLnVybC5pbmRleE9mKCI/Iik+PTA/IiYiOiI/IikreTtqLmRhdGE9bnVsbH1lbHNle2ouZGF0YT15fXZhciBIPVtdO2lmKGoucmVzZXRGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLnJlc2V0Rm9ybSgpfSl9aWYoai5jbGVhckZvcm0pe0gucHVzaChmdW5jdGlvbigpe28uY2xlYXJGb3JtKGouaW5jbHVkZUhpZGRlbil9KX1pZighai5kYXRhVHlwZSYmai50YXJnZXQpe3ZhciBsPWouc3VjY2Vzc3x8ZnVuY3Rpb24oKXt9O0gucHVzaChmdW5jdGlvbihxKXt2YXIgaz1qLnJlcGxhY2VUYXJnZXQ/InJlcGxhY2VXaXRoIjoiaHRtbCI7ZihqLnRhcmdldClba10ocSkuZWFjaChsLGFyZ3VtZW50cyl9KX1lbHNle2lmKGouc3VjY2Vzcyl7SC5wdXNoKGouc3VjY2Vzcyl9fWouc3VjY2Vzcz1mdW5jdGlvbihLLHEsTCl7dmFyIEo9ai5jb250ZXh0fHx0aGlzO2Zvcih2YXIgST0wLGs9SC5sZW5ndGg7STxrO0krKyl7SFtJXS5hcHBseShKLFtLLHEsTHx8byxvXSl9fTtpZihqLmVycm9yKXt2YXIgej1qLmVycm9yO2ouZXJyb3I9ZnVuY3Rpb24oSixrLHEpe3ZhciBJPWouY29udGV4dHx8dGhpczt6LmFwcGx5KEksW0osayxxLG9dKX19aWYoai5jb21wbGV0ZSl7dmFyIGg9ai5jb21wbGV0ZTtqLmNvbXBsZXRlPWZ1bmN0aW9uKEksayl7dmFyIHE9ai5jb250ZXh0fHx0aGlzO2guYXBwbHkocSxbSSxrLG9dKX19dmFyIEQ9ZigiaW5wdXRbdHlwZT1maWxlXTplbmFibGVkIix0aGlzKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzKS52YWwoKSE9PSIifSk7dmFyIHA9RC5sZW5ndGg+MDt2YXIgQj0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7dmFyIHg9KG8uYXR0cigiZW5jdHlwZSIpPT1CfHxvLmF0dHIoImVuY29kaW5nIik9PUIpO3ZhciB3PWMuZmlsZWFwaSYmYy5mb3JtZGF0YTtkKCJmaWxlQVBJIDoiK3cpO3ZhciByPShwfHx4KSYmIXc7dmFyIHY7aWYoai5pZnJhbWUhPT1mYWxzZSYmKGouaWZyYW1lfHxyKSl7aWYoai5jbG9zZUtlZXBBbGl2ZSl7Zi5nZXQoai5jbG9zZUtlZXBBbGl2ZSxmdW5jdGlvbigpe3Y9RyhGKX0pfWVsc2V7dj1HKEYpfX1lbHNle2lmKChwfHx4KSYmdyl7dj10KEYpfWVsc2V7dj1mLmFqYXgoail9fW8ucmVtb3ZlRGF0YSgianF4aHIiKS5kYXRhKCJqcXhociIsdik7Zm9yKHZhciBBPTA7QTxzLmxlbmd0aDtBKyspe3NbQV09bnVsbH10aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LW5vdGlmeSIsW3RoaXMsal0pO3JldHVybiB0aGlzO2Z1bmN0aW9uIGcoSyl7dmFyIEw9Zi5wYXJhbShLLGoudHJhZGl0aW9uYWwpLnNwbGl0KCImIik7dmFyIHE9TC5sZW5ndGg7dmFyIGs9W107dmFyIEosSTtmb3IoSj0wO0o8cTtKKyspe0xbSl09TFtKXS5yZXBsYWNlKC9cKy9nLCIgIik7ST1MW0pdLnNwbGl0KCI9Iik7ay5wdXNoKFtkZWNvZGVVUklDb21wb25lbnQoSVswXSksZGVjb2RlVVJJQ29tcG9uZW50KElbMV0pXSl9cmV0dXJuIGt9ZnVuY3Rpb24gdChxKXt2YXIgaz1uZXcgRm9ybURhdGEoKTtmb3IodmFyIEk9MDtJPHEubGVuZ3RoO0krKyl7ay5hcHBlbmQocVtJXS5uYW1lLHFbSV0udmFsdWUpfWlmKGouZXh0cmFEYXRhKXt2YXIgTD1nKGouZXh0cmFEYXRhKTtmb3IoST0wO0k8TC5sZW5ndGg7SSsrKXtpZihMW0ldKXtrLmFwcGVuZChMW0ldWzBdLExbSV1bMV0pfX19ai5kYXRhPW51bGw7dmFyIEs9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqLHtjb250ZW50VHlwZTpmYWxzZSxwcm9jZXNzRGF0YTpmYWxzZSxjYWNoZTpmYWxzZSx0eXBlOml8fCJQT1NUIn0pO2lmKGoudXBsb2FkUHJvZ3Jlc3Mpe0sueGhyPWZ1bmN0aW9uKCl7dmFyIE09Zi5hamF4U2V0dGluZ3MueGhyKCk7aWYoTS51cGxvYWQpe00udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihRKXt2YXIgUD0wO3ZhciBOPVEubG9hZGVkfHxRLnBvc2l0aW9uO3ZhciBPPVEudG90YWw7aWYoUS5sZW5ndGhDb21wdXRhYmxlKXtQPU1hdGguY2VpbChOL08qMTAwKX1qLnVwbG9hZFByb2dyZXNzKFEsTixPLFApfSxmYWxzZSl9cmV0dXJuIE19fUsuZGF0YT1udWxsO3ZhciBKPUsuYmVmb3JlU2VuZDtLLmJlZm9yZVNlbmQ9ZnVuY3Rpb24oTixNKXtpZihqLmZvcm1EYXRhKXtNLmRhdGE9ai5mb3JtRGF0YX1lbHNle00uZGF0YT1rfWlmKEope0ouY2FsbCh0aGlzLE4sTSl9fTtyZXR1cm4gZi5hamF4KEspfWZ1bmN0aW9uIEcoYWYpe3ZhciBMPW9bMF0sSyxhYixWLGFkLFksTixRLE8sUCxaLGFjLFQ7dmFyIGFpPWYuRGVmZXJyZWQoKTthaS5hYm9ydD1mdW5jdGlvbihhail7Ty5hYm9ydChhail9O2lmKGFmKXtmb3IoYWI9MDthYjxzLmxlbmd0aDthYisrKXtLPWYoc1thYl0pO2lmKGUpe0sucHJvcCgiZGlzYWJsZWQiLGZhbHNlKX1lbHNle0sucmVtb3ZlQXR0cigiZGlzYWJsZWQiKX19fVY9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqKTtWLmNvbnRleHQ9Vi5jb250ZXh0fHxWO1k9ImpxRm9ybUlPIisobmV3IERhdGUoKS5nZXRUaW1lKCkpO2lmKFYuaWZyYW1lVGFyZ2V0KXtOPWYoVi5pZnJhbWVUYXJnZXQpO1o9Ti5hdHRyMigibmFtZSIpO2lmKCFaKXtOLmF0dHIyKCJuYW1lIixZKX1lbHNle1k9Wn19ZWxzZXtOPWYoJzxpZnJhbWUgbmFtZT0iJytZKyciIHNyYz0iJytWLmlmcmFtZVNyYysnIiAvPicpO04uY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiLTEwMDBweCIsbGVmdDoiLTEwMDBweCJ9KX1RPU5bMF07Tz17YWJvcnRlZDowLHJlc3BvbnNlVGV4dDpudWxsLHJlc3BvbnNlWE1MOm51bGwsc3RhdHVzOjAsc3RhdHVzVGV4dDoibi9hIixnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXt9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKCl7fSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKCl7fSxhYm9ydDpmdW5jdGlvbihhail7dmFyIGFrPShhaj09PSJ0aW1lb3V0Ij8idGltZW91dCI6ImFib3J0ZWQiKTtkKCJhYm9ydGluZyB1cGxvYWQuLi4gIithayk7dGhpcy5hYm9ydGVkPTE7dHJ5e2lmKFEuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCl7US5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kKCJTdG9wIil9fWNhdGNoKGFsKXt9Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKTtPLmVycm9yPWFrO2lmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhayxhail9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFrXSl9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFrKX19fTthZD1WLmdsb2JhbDtpZihhZCYmMD09PWYuYWN0aXZlKyspe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iil9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFNlbmQiLFtPLFZdKX1pZihWLmJlZm9yZVNlbmQmJlYuYmVmb3JlU2VuZC5jYWxsKFYuY29udGV4dCxPLFYpPT09ZmFsc2Upe2lmKFYuZ2xvYmFsKXtmLmFjdGl2ZS0tfWFpLnJlamVjdCgpO3JldHVybiBhaX1pZihPLmFib3J0ZWQpe2FpLnJlamVjdCgpO3JldHVybiBhaX1QPUwuY2xrO2lmKFApe1o9UC5uYW1lO2lmKFomJiFQLmRpc2FibGVkKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbWl09UC52YWx1ZTtpZihQLnR5cGU9PSJpbWFnZSIpe1YuZXh0cmFEYXRhW1orIi54Il09TC5jbGtfeDtWLmV4dHJhRGF0YVtaKyIueSJdPUwuY2xrX3l9fX12YXIgVT0xO3ZhciBSPTI7ZnVuY3Rpb24gUyhhbCl7dmFyIGFrPW51bGw7dHJ5e2lmKGFsLmNvbnRlbnRXaW5kb3cpe2FrPWFsLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnR9fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50V2luZG93IGRvY3VtZW50OiAiK2FqKX1pZihhayl7cmV0dXJuIGFrfXRyeXthaz1hbC5jb250ZW50RG9jdW1lbnQ/YWwuY29udGVudERvY3VtZW50OmFsLmRvY3VtZW50fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50RG9jdW1lbnQ6ICIrYWopO2FrPWFsLmRvY3VtZW50fXJldHVybiBha312YXIgSj1mKCJtZXRhW25hbWU9Y3NyZi10b2tlbl0iKS5hdHRyKCJjb250ZW50Iik7dmFyIEk9ZigibWV0YVtuYW1lPWNzcmYtcGFyYW1dIikuYXR0cigiY29udGVudCIpO2lmKEkmJkope1YuZXh0cmFEYXRhPVYuZXh0cmFEYXRhfHx7fTtWLmV4dHJhRGF0YVtJXT1KfWZ1bmN0aW9uIGFhKCl7dmFyIGFsPW8uYXR0cjIoInRhcmdldCIpLGFqPW8uYXR0cjIoImFjdGlvbiIpO0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLFkpO2lmKCFpfHwvcG9zdC9pLnRlc3QoaSkpe0wuc2V0QXR0cmlidXRlKCJtZXRob2QiLCJQT1NUIil9aWYoYWohPVYudXJsKXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixWLnVybCl9aWYoIVYuc2tpcEVuY29kaW5nT3ZlcnJpZGUmJighaXx8L3Bvc3QvaS50ZXN0KGkpKSl7by5hdHRyKHtlbmNvZGluZzoibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsZW5jdHlwZToibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9KX1pZihWLnRpbWVvdXQpe1Q9c2V0VGltZW91dChmdW5jdGlvbigpe2FjPXRydWU7WChVKX0sVi50aW1lb3V0KX1mdW5jdGlvbiBhbSgpe3RyeXt2YXIgYXE9UyhRKS5yZWFkeVN0YXRlO2QoInN0YXRlID0gIithcSk7aWYoYXEmJmFxLnRvTG93ZXJDYXNlKCk9PSJ1bmluaXRpYWxpemVkIil7c2V0VGltZW91dChhbSw1MCl9fWNhdGNoKGFyKXtkKCJTZXJ2ZXIgYWJvcnQ6ICIsYXIsIiAoIixhci5uYW1lLCIpIik7WChSKTtpZihUKXtjbGVhclRpbWVvdXQoVCl9VD11bmRlZmluZWR9fXZhciBhaz1bXTt0cnl7aWYoVi5leHRyYURhdGEpe2Zvcih2YXIgYXAgaW4gVi5leHRyYURhdGEpe2lmKFYuZXh0cmFEYXRhLmhhc093blByb3BlcnR5KGFwKSl7aWYoZi5pc1BsYWluT2JqZWN0KFYuZXh0cmFEYXRhW2FwXSkmJlYuZXh0cmFEYXRhW2FwXS5oYXNPd25Qcm9wZXJ0eSgibmFtZSIpJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoInZhbHVlIikpe2FrLnB1c2goZignPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJytWLmV4dHJhRGF0YVthcF0ubmFtZSsnIj4nKS52YWwoVi5leHRyYURhdGFbYXBdLnZhbHVlKS5hcHBlbmRUbyhMKVswXSl9ZWxzZXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrYXArJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXSkuYXBwZW5kVG8oTClbMF0pfX19fWlmKCFWLmlmcmFtZVRhcmdldCl7Ti5hcHBlbmRUbygiYm9keSIpfWlmKFEuYXR0YWNoRXZlbnQpe1EuYXR0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXNldFRpbWVvdXQoYW0sMTUpO3RyeXtMLnN1Ym1pdCgpfWNhdGNoKGFuKXt2YXIgYW89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLnN1Ym1pdDthby5hcHBseShMKX19ZmluYWxseXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixhaik7aWYoYWwpe0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLGFsKX1lbHNle28ucmVtb3ZlQXR0cigidGFyZ2V0Iil9ZihhaykucmVtb3ZlKCl9fWlmKFYuZm9yY2VTeW5jKXthYSgpfWVsc2V7c2V0VGltZW91dChhYSwxMCl9dmFyIGFnLGFoLGFlPTUwLE07ZnVuY3Rpb24gWChhcCl7aWYoTy5hYm9ydGVkfHxNKXtyZXR1cm59YWg9UyhRKTtpZighYWgpe2QoImNhbm5vdCBhY2Nlc3MgcmVzcG9uc2UgZG9jdW1lbnQiKTthcD1SfWlmKGFwPT09VSYmTyl7Ty5hYm9ydCgidGltZW91dCIpO2FpLnJlamVjdChPLCJ0aW1lb3V0Iik7cmV0dXJufWVsc2V7aWYoYXA9PVImJk8pe08uYWJvcnQoInNlcnZlciBhYm9ydCIpO2FpLnJlamVjdChPLCJlcnJvciIsInNlcnZlciBhYm9ydCIpO3JldHVybn19aWYoIWFofHxhaC5sb2NhdGlvbi5ocmVmPT1WLmlmcmFtZVNyYyl7aWYoIWFjKXtyZXR1cm59fWlmKFEuZGV0YWNoRXZlbnQpe1EuZGV0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXZhciBhbj0ic3VjY2VzcyIsYXI7dHJ5e2lmKGFjKXt0aHJvdyJ0aW1lb3V0In12YXIgYW09Vi5kYXRhVHlwZT09InhtbCJ8fGFoLlhNTERvY3VtZW50fHxmLmlzWE1MRG9jKGFoKTtkKCJpc1htbD0iK2FtKTtpZighYW0mJndpbmRvdy5vcGVyYSYmKGFoLmJvZHk9PT1udWxsfHwhYWguYm9keS5pbm5lckhUTUwpKXtpZigtLWFlKXtkKCJyZXF1ZWluZyBvbkxvYWQgY2FsbGJhY2ssIERPTSBub3QgYXZhaWxhYmxlIik7c2V0VGltZW91dChYLDI1MCk7cmV0dXJufX12YXIgYXQ9YWguYm9keT9haC5ib2R5OmFoLmRvY3VtZW50RWxlbWVudDtPLnJlc3BvbnNlVGV4dD1hdD9hdC5pbm5lckhUTUw6bnVsbDtPLnJlc3BvbnNlWE1MPWFoLlhNTERvY3VtZW50P2FoLlhNTERvY3VtZW50OmFoO2lmKGFtKXtWLmRhdGFUeXBlPSJ4bWwifU8uZ2V0UmVzcG9uc2VIZWFkZXI9ZnVuY3Rpb24oYXcpe3ZhciBhdj17ImNvbnRlbnQtdHlwZSI6Vi5kYXRhVHlwZX07cmV0dXJuIGF2W2F3LnRvTG93ZXJDYXNlKCldfTtpZihhdCl7Ty5zdGF0dXM9TnVtYmVyKGF0LmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YXQuZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH12YXIgYWo9KFYuZGF0YVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpO3ZhciBhcT0vKGpzb258c2NyaXB0fHRleHQpLy50ZXN0KGFqKTtpZihhcXx8Vi50ZXh0YXJlYSl7dmFyIGFvPWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZXh0YXJlYSIpWzBdO2lmKGFvKXtPLnJlc3BvbnNlVGV4dD1hby52YWx1ZTtPLnN0YXR1cz1OdW1iZXIoYW8uZ2V0QXR0cmlidXRlKCJzdGF0dXMiKSl8fE8uc3RhdHVzO08uc3RhdHVzVGV4dD1hby5nZXRBdHRyaWJ1dGUoInN0YXR1c1RleHQiKXx8Ty5zdGF0dXNUZXh0fWVsc2V7aWYoYXEpe3ZhciBhaz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIilbMF07dmFyIGF1PWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoYWspe08ucmVzcG9uc2VUZXh0PWFrLnRleHRDb250ZW50P2FrLnRleHRDb250ZW50OmFrLmlubmVyVGV4dH1lbHNle2lmKGF1KXtPLnJlc3BvbnNlVGV4dD1hdS50ZXh0Q29udGVudD9hdS50ZXh0Q29udGVudDphdS5pbm5lclRleHR9fX19fWVsc2V7aWYoYWo9PSJ4bWwiJiYhTy5yZXNwb25zZVhNTCYmTy5yZXNwb25zZVRleHQpe08ucmVzcG9uc2VYTUw9VyhPLnJlc3BvbnNlVGV4dCl9fXRyeXthZz1rKE8sYWosVil9Y2F0Y2goYWwpe2FuPSJwYXJzZXJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX19Y2F0Y2goYWwpe2QoImVycm9yIGNhdWdodDogIixhbCk7YW49ImVycm9yIjtPLmVycm9yPWFyPShhbHx8YW4pfWlmKE8uYWJvcnRlZCl7ZCgidXBsb2FkIGFib3J0ZWQiKTthbj1udWxsfWlmKE8uc3RhdHVzKXthbj0oTy5zdGF0dXM+PTIwMCYmTy5zdGF0dXM8MzAwfHxPLnN0YXR1cz09PTMwNCk/InN1Y2Nlc3MiOiJlcnJvciJ9aWYoYW49PT0ic3VjY2VzcyIpe2lmKFYuc3VjY2Vzcyl7Vi5zdWNjZXNzLmNhbGwoVi5jb250ZXh0LGFnLCJzdWNjZXNzIixPKX1haS5yZXNvbHZlKE8ucmVzcG9uc2VUZXh0LCJzdWNjZXNzIixPKTtpZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4U3VjY2VzcyIsW08sVl0pfX1lbHNle2lmKGFuKXtpZihhcj09PXVuZGVmaW5lZCl7YXI9Ty5zdGF0dXNUZXh0fWlmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhbixhcil9YWkucmVqZWN0KE8sImVycm9yIixhcik7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFyXSl9fX1pZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtPLFZdKX1pZihhZCYmIS0tZi5hY3RpdmUpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKX1pZihWLmNvbXBsZXRlKXtWLmNvbXBsZXRlLmNhbGwoVi5jb250ZXh0LE8sYW4pfU09dHJ1ZTtpZihWLnRpbWVvdXQpe2NsZWFyVGltZW91dChUKX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIVYuaWZyYW1lVGFyZ2V0KXtOLnJlbW92ZSgpfWVsc2V7Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKX1PLnJlc3BvbnNlWE1MPW51bGx9LDEwMCl9dmFyIFc9Zi5wYXJzZVhNTHx8ZnVuY3Rpb24oYWosYWspe2lmKHdpbmRvdy5BY3RpdmVYT2JqZWN0KXthaz1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpO2FrLmFzeW5jPSJmYWxzZSI7YWsubG9hZFhNTChhail9ZWxzZXthaz0obmV3IERPTVBhcnNlcigpKS5wYXJzZUZyb21TdHJpbmcoYWosInRleHQveG1sIil9cmV0dXJuKGFrJiZhay5kb2N1bWVudEVsZW1lbnQmJmFrLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSE9InBhcnNlcmVycm9yIik/YWs6bnVsbH07dmFyIHE9Zi5wYXJzZUpTT058fGZ1bmN0aW9uKGFqKXtyZXR1cm4gd2luZG93WyJldmFsIl0oIigiK2FqKyIpIil9O3ZhciBrPWZ1bmN0aW9uKGFvLGFtLGFsKXt2YXIgYWs9YW8uZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixhaj1hbT09PSJ4bWwifHwhYW0mJmFrLmluZGV4T2YoInhtbCIpPj0wLGFuPWFqP2FvLnJlc3BvbnNlWE1MOmFvLnJlc3BvbnNlVGV4dDtpZihhaiYmYW4uZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lPT09InBhcnNlcmVycm9yIil7aWYoZi5lcnJvcil7Zi5lcnJvcigicGFyc2VyZXJyb3IiKX19aWYoYWwmJmFsLmRhdGFGaWx0ZXIpe2FuPWFsLmRhdGFGaWx0ZXIoYW4sYW0pfWlmKHR5cGVvZiBhbj09PSJzdHJpbmciKXtpZihhbT09PSJqc29uInx8IWFtJiZhay5pbmRleE9mKCJqc29uIik+PTApe2FuPXEoYW4pfWVsc2V7aWYoYW09PT0ic2NyaXB0Inx8IWFtJiZhay5pbmRleE9mKCJqYXZhc2NyaXB0Iik+PTApe2YuZ2xvYmFsRXZhbChhbil9fX1yZXR1cm4gYW59O3JldHVybiBhaX19O2YuZm4uYWpheEZvcm09ZnVuY3Rpb24oZyl7Zz1nfHx7fTtnLmRlbGVnYXRpb249Zy5kZWxlZ2F0aW9uJiZmLmlzRnVuY3Rpb24oZi5mbi5vbik7aWYoIWcuZGVsZWdhdGlvbiYmdGhpcy5sZW5ndGg9PT0wKXt2YXIgaD17czp0aGlzLnNlbGVjdG9yLGM6dGhpcy5jb250ZXh0fTtpZighZi5pc1JlYWR5JiZoLnMpe2QoIkRPTSBub3QgcmVhZHksIHF1ZXVpbmcgYWpheEZvcm0iKTtmKGZ1bmN0aW9uKCl7ZihoLnMsaC5jKS5hamF4Rm9ybShnKX0pO3JldHVybiB0aGlzfWQoInRlcm1pbmF0aW5nOyB6ZXJvIGVsZW1lbnRzIGZvdW5kIGJ5IHNlbGVjdG9yIisoZi5pc1JlYWR5PyIiOiIgKERPTSBub3QgcmVhZHkpIikpO3JldHVybiB0aGlzfWlmKGcuZGVsZWdhdGlvbil7Zihkb2N1bWVudCkub2ZmKCJzdWJtaXQuZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYikub2ZmKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixhKS5vbigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYikub24oImNsaWNrLmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuYWpheEZvcm1VbmJpbmQoKS5iaW5kKCJzdWJtaXQuZm9ybS1wbHVnaW4iLGcsYikuYmluZCgiY2xpY2suZm9ybS1wbHVnaW4iLGcsYSl9O2Z1bmN0aW9uIGIoaCl7dmFyIGc9aC5kYXRhO2lmKCFoLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtoLnByZXZlbnREZWZhdWx0KCk7ZihoLnRhcmdldCkuYWpheFN1Ym1pdChnKX19ZnVuY3Rpb24gYShrKXt2YXIgaj1rLnRhcmdldDt2YXIgaD1mKGopO2lmKCEoaC5pcygiW3R5cGU9c3VibWl0XSxbdHlwZT1pbWFnZV0iKSkpe3ZhciBnPWguY2xvc2VzdCgiW3R5cGU9c3VibWl0XSIpO2lmKGcubGVuZ3RoPT09MCl7cmV0dXJufWo9Z1swXX12YXIgaT10aGlzO2kuY2xrPWo7aWYoai50eXBlPT0iaW1hZ2UiKXtpZihrLm9mZnNldFghPT11bmRlZmluZWQpe2kuY2xrX3g9ay5vZmZzZXRYO2kuY2xrX3k9ay5vZmZzZXRZfWVsc2V7aWYodHlwZW9mIGYuZm4ub2Zmc2V0PT0iZnVuY3Rpb24iKXt2YXIgbD1oLm9mZnNldCgpO2kuY2xrX3g9ay5wYWdlWC1sLmxlZnQ7aS5jbGtfeT1rLnBhZ2VZLWwudG9wfWVsc2V7aS5jbGtfeD1rLnBhZ2VYLWoub2Zmc2V0TGVmdDtpLmNsa195PWsucGFnZVktai5vZmZzZXRUb3B9fX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5jbGs9aS5jbGtfeD1pLmNsa195PW51bGx9LDEwMCl9Zi5mbi5hamF4Rm9ybVVuYmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIGNsaWNrLmZvcm0tcGx1Z2luIil9O2YuZm4uZm9ybVRvQXJyYXk9ZnVuY3Rpb24oeCxnKXt2YXIgdz1bXTtpZih0aGlzLmxlbmd0aD09PTApe3JldHVybiB3fXZhciBsPXRoaXNbMF07dmFyIHA9eD9sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6bC5lbGVtZW50cztpZighcCl7cmV0dXJuIHd9dmFyIHIscSxvLHksbSx0LGs7Zm9yKHI9MCx0PXAubGVuZ3RoO3I8dDtyKyspe209cFtyXTtvPW0ubmFtZTtpZighb3x8bS5kaXNhYmxlZCl7Y29udGludWV9aWYoeCYmbC5jbGsmJm0udHlwZT09ImltYWdlIil7aWYobC5jbGs9PW0pe3cucHVzaCh7bmFtZTpvLHZhbHVlOmYobSkudmFsKCksdHlwZTptLnR5cGV9KTt3LnB1c2goe25hbWU6bysiLngiLHZhbHVlOmwuY2xrX3h9LHtuYW1lOm8rIi55Iix2YWx1ZTpsLmNsa195fSl9Y29udGludWV9eT1mLmZpZWxkVmFsdWUobSx0cnVlKTtpZih5JiZ5LmNvbnN0cnVjdG9yPT1BcnJheSl7aWYoZyl7Zy5wdXNoKG0pfWZvcihxPTAsaz15Lmxlbmd0aDtxPGs7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTp5W3FdfSl9fWVsc2V7aWYoYy5maWxlYXBpJiZtLnR5cGU9PSJmaWxlIil7aWYoZyl7Zy5wdXNoKG0pfXZhciBoPW0uZmlsZXM7aWYoaC5sZW5ndGgpe2ZvcihxPTA7cTxoLmxlbmd0aDtxKyspe3cucHVzaCh7bmFtZTpvLHZhbHVlOmhbcV0sdHlwZTptLnR5cGV9KX19ZWxzZXt3LnB1c2goe25hbWU6byx2YWx1ZToiIix0eXBlOm0udHlwZX0pfX1lbHNle2lmKHkhPT1udWxsJiZ0eXBlb2YgeSE9InVuZGVmaW5lZCIpe2lmKGcpe2cucHVzaChtKX13LnB1c2goe25hbWU6byx2YWx1ZTp5LHR5cGU6bS50eXBlLHJlcXVpcmVkOm0ucmVxdWlyZWR9KX19fX1pZigheCYmbC5jbGspe3ZhciBzPWYobC5jbGspLHU9c1swXTtvPXUubmFtZTtpZihvJiYhdS5kaXNhYmxlZCYmdS50eXBlPT0iaW1hZ2UiKXt3LnB1c2goe25hbWU6byx2YWx1ZTpzLnZhbCgpfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfX1yZXR1cm4gd307Zi5mbi5mb3JtU2VyaWFsaXplPWZ1bmN0aW9uKGcpe3JldHVybiBmLnBhcmFtKHRoaXMuZm9ybVRvQXJyYXkoZykpfTtmLmZuLmZpZWxkU2VyaWFsaXplPWZ1bmN0aW9uKGgpe3ZhciBnPVtdO3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBtPXRoaXMubmFtZTtpZighbSl7cmV0dXJufXZhciBrPWYuZmllbGRWYWx1ZSh0aGlzLGgpO2lmKGsmJmsuY29uc3RydWN0b3I9PUFycmF5KXtmb3IodmFyIGw9MCxqPWsubGVuZ3RoO2w8ajtsKyspe2cucHVzaCh7bmFtZTptLHZhbHVlOmtbbF19KX19ZWxzZXtpZihrIT09bnVsbCYmdHlwZW9mIGshPSJ1bmRlZmluZWQiKXtnLnB1c2goe25hbWU6dGhpcy5uYW1lLHZhbHVlOmt9KX19fSk7cmV0dXJuIGYucGFyYW0oZyl9O2YuZm4uZmllbGRWYWx1ZT1mdW5jdGlvbihtKXtmb3IodmFyIGw9W10saj0wLGc9dGhpcy5sZW5ndGg7ajxnO2orKyl7dmFyIGs9dGhpc1tqXTt2YXIgaD1mLmZpZWxkVmFsdWUoayxtKTtpZihoPT09bnVsbHx8dHlwZW9mIGg9PSJ1bmRlZmluZWQifHwoaC5jb25zdHJ1Y3Rvcj09QXJyYXkmJiFoLmxlbmd0aCkpe2NvbnRpbnVlfWlmKGguY29uc3RydWN0b3I9PUFycmF5KXtmLm1lcmdlKGwsaCl9ZWxzZXtsLnB1c2goaCl9fXJldHVybiBsfTtmLmZpZWxkVmFsdWU9ZnVuY3Rpb24oZyxvKXt2YXIgaj1nLm5hbWUsdT1nLnR5cGUsdz1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihvPT09dW5kZWZpbmVkKXtvPXRydWV9aWYobyYmKCFqfHxnLmRpc2FibGVkfHx1PT0icmVzZXQifHx1PT0iYnV0dG9uInx8KHU9PSJjaGVja2JveCJ8fHU9PSJyYWRpbyIpJiYhZy5jaGVja2VkfHwodT09InN1Ym1pdCJ8fHU9PSJpbWFnZSIpJiZnLmZvcm0mJmcuZm9ybS5jbGshPWd8fHc9PSJzZWxlY3QiJiZnLnNlbGVjdGVkSW5kZXg9PS0xKSl7cmV0dXJuIG51bGx9aWYodz09InNlbGVjdCIpe3ZhciBwPWcuc2VsZWN0ZWRJbmRleDtpZihwPDApe3JldHVybiBudWxsfXZhciByPVtdLGg9Zy5vcHRpb25zO3ZhciBsPSh1PT0ic2VsZWN0LW9uZSIpO3ZhciBxPShsP3ArMTpoLmxlbmd0aCk7Zm9yKHZhciBrPShsP3A6MCk7azxxO2srKyl7dmFyIG09aFtrXTtpZihtLnNlbGVjdGVkKXt2YXIgcz1tLnZhbHVlO2lmKCFzKXtzPShtLmF0dHJpYnV0ZXMmJm0uYXR0cmlidXRlcy52YWx1ZSYmIShtLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkKSk/bS50ZXh0Om0udmFsdWV9aWYobCl7cmV0dXJuIHN9ci5wdXNoKHMpfX1yZXR1cm4gcn1yZXR1cm4gZihnKS52YWwoKX07Zi5mbi5jbGVhckZvcm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YoImlucHV0LHNlbGVjdCx0ZXh0YXJlYSIsdGhpcykuY2xlYXJGaWVsZHMoZyl9KX07Zi5mbi5jbGVhckZpZWxkcz1mLmZuLmNsZWFySW5wdXRzPWZ1bmN0aW9uKGcpe3ZhciBoPS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaj10aGlzLnR5cGUsaT10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihoLnRlc3Qoail8fGk9PSJ0ZXh0YXJlYSIpe3RoaXMudmFsdWU9IiJ9ZWxzZXtpZihqPT0iY2hlY2tib3gifHxqPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9ZmFsc2V9ZWxzZXtpZihpPT0ic2VsZWN0Iil7dGhpcy5zZWxlY3RlZEluZGV4PS0xfWVsc2V7aWYoaj09ImZpbGUiKXtpZigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7Zih0aGlzKS5yZXBsYWNlV2l0aChmKHRoaXMpLmNsb25lKHRydWUpKX1lbHNle2YodGhpcykudmFsKCIiKX19ZWxzZXtpZihnKXtpZigoZz09PXRydWUmJi9oaWRkZW4vLnRlc3QoaikpfHwodHlwZW9mIGc9PSJzdHJpbmciJiZmKHRoaXMpLmlzKGcpKSl7dGhpcy52YWx1ZT0iIn19fX19fX0pfTtmLmZuLnJlc2V0Rm9ybT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5yZXNldD09ImZ1bmN0aW9uInx8KHR5cGVvZiB0aGlzLnJlc2V0PT0ib2JqZWN0IiYmIXRoaXMucmVzZXQubm9kZVR5cGUpKXt0aGlzLnJlc2V0KCl9fSl9O2YuZm4uZW5hYmxlPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hZ30pfTtmLmZuLnNlbGVjdGVkPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9dGhpcy50eXBlO2lmKGg9PSJjaGVja2JveCJ8fGg9PSJyYWRpbyIpe3RoaXMuY2hlY2tlZD1nfWVsc2V7aWYodGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJvcHRpb24iKXt2YXIgaT1mKHRoaXMpLnBhcmVudCgic2VsZWN0Iik7aWYoZyYmaVswXSYmaVswXS50eXBlPT0ic2VsZWN0LW9uZSIpe2kuZmluZCgib3B0aW9uIikuc2VsZWN0ZWQoZmFsc2UpfXRoaXMuc2VsZWN0ZWQ9Z319fSl9O2YuZm4uYWpheFN1Ym1pdC5kZWJ1Zz1mYWxzZTtmdW5jdGlvbiBkKCl7aWYoIWYuZm4uYWpheFN1Ym1pdC5kZWJ1Zyl7cmV0dXJufXZhciBnPSJbanF1ZXJ5LmZvcm1dICIrQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsIiIpO2lmKHdpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cpe3dpbmRvdy5jb25zb2xlLmxvZyhnKX1lbHNle2lmKHdpbmRvdy5vcGVyYSYmd2luZG93Lm9wZXJhLnBvc3RFcnJvcil7d2luZG93Lm9wZXJhLnBvc3RFcnJvcihnKX19fX0pKTtQSwcIdhAQAaM+AACjPgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAc3RhdGljXGxpYlxtYXJrZWQubWluLmpzIWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz17fSx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLnJ1bGVzPWEubm9ybWFsLHRoaXMub3B0aW9ucy5nZm0mJih0aGlzLnJ1bGVzPXRoaXMub3B0aW9ucy50YWJsZXM/YS50YWJsZXM6YS5nZm0pfWZ1bmN0aW9uIHQoZSx0KXtpZih0aGlzLm9wdGlvbnM9dHx8aC5kZWZhdWx0cyx0aGlzLmxpbmtzPWUsdGhpcy5ydWxlcz11Lm5vcm1hbCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sIXRoaXMubGlua3MpdGhyb3cgbmV3IEVycm9yKCJUb2tlbnMgYXJyYXkgcmVxdWlyZXMgYSBgbGlua3NgIHByb3BlcnR5LiIpO3RoaXMub3B0aW9ucy5nZm0/dGhpcy5ydWxlcz10aGlzLm9wdGlvbnMuYnJlYWtzP3UuYnJlYWtzOnUuZ2ZtOnRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHRoaXMucnVsZXM9dS5wZWRhbnRpYyl9ZnVuY3Rpb24gbigpe31mdW5jdGlvbiByKGUpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW49bnVsbCx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgbix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcn1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0Py8mL2c6LyYoPyEjP1x3KzspL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjMzk7Iil9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlPWUuc291cmNlLHQ9dHx8IiIsZnVuY3Rpb24gbihyLHMpe3JldHVybiByPyhzPXMuc291cmNlfHxzLHM9cy5yZXBsYWNlKC8oXnxbXlxbXSlcXi9nLCIkMSIpLGU9ZS5yZXBsYWNlKHIscyksbik6bmV3IFJlZ0V4cChlLHQpfX1mdW5jdGlvbiBsKCl7fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0LG4scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Q9YXJndW1lbnRzW3JdO2ZvcihuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfXJldHVybiBlfWZ1bmN0aW9uIGgodCxuLGkpe2lmKGl8fCJmdW5jdGlvbiI9PXR5cGVvZiBuKXtpfHwoaT1uLG49bnVsbCksbj1vKHt9LGguZGVmYXVsdHMsbnx8e30pO3ZhciBsLGEsdT1uLmhpZ2hsaWdodCxwPTA7dHJ5e2w9ZS5sZXgodCxuKX1jYXRjaChjKXtyZXR1cm4gaShjKX1hPWwubGVuZ3RoO3ZhciBnPWZ1bmN0aW9uKCl7dmFyIGUsdDt0cnl7ZT1yLnBhcnNlKGwsbil9Y2F0Y2gocyl7dD1zfXJldHVybiBuLmhpZ2hsaWdodD11LHQ/aSh0KTppKG51bGwsZSl9O2lmKCF1fHx1Lmxlbmd0aDwzKXJldHVybiBnKCk7aWYoZGVsZXRlIG4uaGlnaGxpZ2h0LCFhKXJldHVybiBnKCk7Zm9yKDtwPGwubGVuZ3RoO3ArKykhZnVuY3Rpb24oZSl7cmV0dXJuImNvZGUiIT09ZS50eXBlPy0tYXx8ZygpOnUoZS50ZXh0LGUubGFuZyxmdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1ufHxuPT09ZS50ZXh0Py0tYXx8ZygpOihlLnRleHQ9bixlLmVzY2FwZWQ9ITAsLS1hfHxnKCksdm9pZCAwKX0pfShsW3BdKX1lbHNlIHRyeXtyZXR1cm4gbiYmKG49byh7fSxoLmRlZmF1bHRzLG4pKSxyLnBhcnNlKGUubGV4KHQsbiksbil9Y2F0Y2goYyl7aWYoYy5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL2NoamovbWFya2VkLiIsKG58fGguZGVmYXVsdHMpLnNpbGVudClyZXR1cm4iPHA+QW4gZXJyb3Igb2NjdXJlZDo8L3A+PHByZT4iK3MoYy5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+Ijt0aHJvdyBjfX12YXIgYT17bmV3bGluZTovXlxuKy8sY29kZTovXiggezR9W15cbl0rXG4qKSsvLGZlbmNlczpsLGhyOi9eKCAqWy0qX10pezMsfSAqKD86XG4rfCQpLyxoZWFkaW5nOi9eICooI3sxLDZ9KSAqKFteXG5dKz8pICojKiAqKD86XG4rfCQpLyxucHRhYmxlOmwsbGhlYWRpbmc6L14oW15cbl0rKVxuICooPXwtKXsyLH0gKig/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggKj5bXlxuXSsoXG5bXlxuXSspKlxuKikrLyxsaXN0Oi9eKCAqKShidWxsKSBbXHNcU10rPyg/OmhyfFxuezIsfSg/ISApKD8hXDFidWxsIClcbip8XHMqJCkvLGh0bWw6L14gKig/OmNvbW1lbnR8Y2xvc2VkfGNsb3NpbmcpICooPzpcbnsyLH18XHMqJCkvLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArWyIoXShbXlxuXSspWyIpXSk/ICooPzpcbit8JCkvLHRhYmxlOmwscGFyYWdyYXBoOi9eKCg/OlteXG5dK1xuPyg/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXx0YWd8ZGVmKSkrKVxuKi8sdGV4dDovXlteXG5dKy99O2EuYnVsbGV0PS8oPzpbKistXXxcZCtcLikvLGEuaXRlbT0vXiggKikoYnVsbCkgW15cbl0qKD86XG4oPyFcMWJ1bGwgKVteXG5dKikqLyxhLml0ZW09aShhLml0ZW0sImdtIikoL2J1bGwvZyxhLmJ1bGxldCkoKSxhLmxpc3Q9aShhLmxpc3QpKC9idWxsL2csYS5idWxsZXQpKCJociIsL1xuKyg/PSg/OiAqWy0qX10pezMsfSAqKD86XG4rfCQpKS8pKCksYS5fdGFnPSIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITovfEApXFxiIixhLmh0bWw9aShhLmh0bWwpKCJjb21tZW50IiwvPCEtLVtcc1xTXSo/LS0+LykoImNsb3NlZCIsLzwodGFnKVtcc1xTXSs/PFwvXDE+LykoImNsb3NpbmciLC88dGFnKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vKSgvdGFnL2csYS5fdGFnKSgpLGEucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCJociIsYS5ocikoImhlYWRpbmciLGEuaGVhZGluZykoImxoZWFkaW5nIixhLmxoZWFkaW5nKSgiYmxvY2txdW90ZSIsYS5ibG9ja3F1b3RlKSgidGFnIiwiPCIrYS5fdGFnKSgiZGVmIixhLmRlZikoKSxhLm5vcm1hbD1vKHt9LGEpLGEuZ2ZtPW8oe30sYS5ub3JtYWwse2ZlbmNlczovXiAqKGB7Myx9fH57Myx9KSAqKFxTKyk/ICpcbihbXHNcU10rPylccypcMSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6L14vfSksYS5nZm0ucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCIoPyEiLCIoPyEiK2EuZ2ZtLmZlbmNlcy5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwyIikrInwiK2EubGlzdC5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwzIikrInwiKSgpLGEudGFibGVzPW8oe30sYS5nZm0se25wdGFibGU6L14gKihcUy4qXHwuKilcbiAqKFstOl0rICpcfFstfCA6XSopXG4oKD86LipcfC4qKD86XG58JCkpKilcbiovLHRhYmxlOi9eICpcfCguKylcbiAqXHwoICpbLTpdK1stfCA6XSopXG4oKD86ICpcfC4qKD86XG58JCkpKilcbiovfSksZS5ydWxlcz1hLGUubGV4PWZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IGUobik7cmV0dXJuIHIubGV4KHQpfSxlLnByb3RvdHlwZS5sZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9cclxufFxyL2csIlxuIikucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL1x1MDBhMC9nLCIgIikucmVwbGFjZSgvXHUyNDI0L2csIlxuIiksdGhpcy50b2tlbihlLCEwKX0sZS5wcm90b3R5cGUudG9rZW49ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixzLGksbCxvLGgsdSxwLGU9ZS5yZXBsYWNlKC9eICskL2dtLCIiKTtlOylpZigocz10aGlzLnJ1bGVzLm5ld2xpbmUuZXhlYyhlKSkmJihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzWzBdLmxlbmd0aD4xJiZ0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJzcGFjZSJ9KSkscz10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzPXNbMF0ucmVwbGFjZSgvXiB7NH0vZ20sIiIpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3M6cy5yZXBsYWNlKC9cbiskLywiIil9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIixsYW5nOnNbMl0sdGV4dDpzWzNdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaGVhZGluZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmciLGRlcHRoOnNbMV0ubGVuZ3RoLHRleHQ6c1syXX0pO2Vsc2UgaWYodCYmKHM9dGhpcy5ydWxlcy5ucHRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC9cbiQvLCIiKS5zcGxpdCgiXG4iKX0sdT0wO3U8by5hbGlnbi5sZW5ndGg7dSsrKW8uYWxpZ25bdV09L14gKi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3Qoby5hbGlnblt1XSk/ImxlZnQiOm51bGw7Zm9yKHU9MDt1PG8uY2VsbHMubGVuZ3RoO3UrKylvLmNlbGxzW3VdPW8uY2VsbHNbdV0uc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZihzPXRoaXMucnVsZXMubGhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDoiPSI9PT1zWzJdPzE6Mix0ZXh0OnNbMV19KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5oci5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhyIn0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmJsb2NrcXVvdGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX3N0YXJ0In0pLHM9c1swXS5yZXBsYWNlKC9eICo+ID8vZ20sIiIpLHRoaXMudG9rZW4ocyx0KSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX2VuZCJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5saXN0LmV4ZWMoZSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxpPXNbMl0sdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9zdGFydCIsb3JkZXJlZDppLmxlbmd0aD4xfSkscz1zWzBdLm1hdGNoKHRoaXMucnVsZXMuaXRlbSksbj0hMSxwPXMubGVuZ3RoLHU9MDtwPnU7dSsrKW89c1t1XSxoPW8ubGVuZ3RoLG89by5yZXBsYWNlKC9eICooWyorLV18XGQrXC4pICsvLCIiKSx+by5pbmRleE9mKCJcbiAiKSYmKGgtPW8ubGVuZ3RoLG89dGhpcy5vcHRpb25zLnBlZGFudGljP28ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik6by5yZXBsYWNlKG5ldyBSZWdFeHAoIl4gezEsIitoKyJ9IiwiZ20iKSwiIikpLHRoaXMub3B0aW9ucy5zbWFydExpc3RzJiZ1IT09cC0xJiYobD1hLmJ1bGxldC5leGVjKHNbdSsxXSlbMF0saT09PWx8fGkubGVuZ3RoPjEmJmwubGVuZ3RoPjF8fChlPXMuc2xpY2UodSsxKS5qb2luKCJcbiIpK2UsdT1wLTEpKSxyPW58fC9cblxuKD8hXHMqJCkvLnRlc3QobyksdSE9PXAtMSYmKG49IlxuIj09PW8uY2hhckF0KG8ubGVuZ3RoLTEpLHJ8fChyPW4pKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnI/Imxvb3NlX2l0ZW1fc3RhcnQiOiJsaXN0X2l0ZW1fc3RhcnQifSksdGhpcy50b2tlbihvLCExKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW1fZW5kIn0pO3RoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3RfZW5kIn0pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmh0bWwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8icGFyYWdyYXBoIjoiaHRtbCIscHJlOiJwcmUiPT09c1sxXXx8InNjcmlwdCI9PT1zWzFdfHwic3R5bGUiPT09c1sxXSx0ZXh0OnNbMF19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMuZGVmLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLmxpbmtzW3NbMV0udG9Mb3dlckNhc2UoKV09e2hyZWY6c1syXSx0aXRsZTpzWzNdfTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMudGFibGUuZXhlYyhlKSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxvPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOnNbMV0ucmVwbGFjZSgvXiAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGFsaWduOnNbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxjZWxsczpzWzNdLnJlcGxhY2UoLyg/OiAqXHwgKik/XG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnJlcGxhY2UoL14gKlx8ICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyk7dGhpcy50b2tlbnMucHVzaChvKX1lbHNlIGlmKHQmJihzPXRoaXMucnVsZXMucGFyYWdyYXBoLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InBhcmFncmFwaCIsdGV4dDoiXG4iPT09c1sxXS5jaGFyQXQoc1sxXS5sZW5ndGgtMSk/c1sxXS5zbGljZSgwLC0xKTpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMudGV4dC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InRleHQiLHRleHQ6c1swXX0pO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiB0aGlzLnRva2Vuc307dmFyIHU9e2VzY2FwZTovXlxcKFtcXGAqe31cW1xdKCkjK1wtLiFfPl0pLyxhdXRvbGluazovXjwoW14gPl0rKEB8OlwvKVteID5dKyk+Lyx1cmw6bCx0YWc6L148IS0tW1xzXFNdKj8tLT58XjxcLz9cdysoPzoiW14iXSoifCdbXiddKid8W14nIj5dKSo/Pi8sbGluazovXiE/XFsoaW5zaWRlKVxdXChocmVmXCkvLHJlZmxpbms6L14hP1xbKGluc2lkZSlcXVxzKlxbKFteXF1dKilcXS8sbm9saW5rOi9eIT9cWygoPzpcW1teXF1dKlxdfFteXFtcXV0pKilcXS8sc3Ryb25nOi9eX18oW1xzXFNdKz8pX18oPyFfKXxeXCpcKihbXHNcU10rPylcKlwqKD8hXCopLyxlbTovXlxiXygoPzpfX3xbXHNcU10pKz8pX1xifF5cKigoPzpcKlwqfFtcc1xTXSkrPylcKig/IVwqKS8sY29kZTovXihgKylccyooW1xzXFNdKj9bXmBdKVxzKlwxKD8hYCkvLGJyOi9eIHsyLH1cbig/IVxzKiQpLyxkZWw6bCx0ZXh0Oi9eW1xzXFNdKz8oPz1bXFw8IVxbXypgXXwgezIsfVxufCQpL307dS5faW5zaWRlPS8oPzpcW1teXF1dKlxdfFteXFtcXV18XF0oPz1bXlxbXSpcXSkpKi8sdS5faHJlZj0vXHMqPD8oW1xzXFNdKj8pPj8oPzpccytbJyJdKFtcc1xTXSo/KVsnIl0pP1xzKi8sdS5saW5rPWkodS5saW5rKSgiaW5zaWRlIix1Ll9pbnNpZGUpKCJocmVmIix1Ll9ocmVmKSgpLHUucmVmbGluaz1pKHUucmVmbGluaykoImluc2lkZSIsdS5faW5zaWRlKSgpLHUubm9ybWFsPW8oe30sdSksdS5wZWRhbnRpYz1vKHt9LHUubm9ybWFsLHtzdHJvbmc6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbTovXl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXyl8XlwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKikvfSksdS5nZm09byh7fSx1Lm5vcm1hbCx7ZXNjYXBlOmkodS5lc2NhcGUpKCJdKSIsIn58XSkiKSgpLHVybDovXihodHRwcz86XC9cL1teXHM8XStbXjwuLDo7IicpXF1cc10pLyxkZWw6L15+fig/PVxTKShbXHNcU10qP1xTKX5+Lyx0ZXh0OmkodS50ZXh0KSgiXXwiLCJ+XXwiKSgifCIsInxodHRwcz86Ly98IikoKX0pLHUuYnJlYWtzPW8oe30sdS5nZm0se2JyOmkodS5icikoInsyLH0iLCIqIikoKSx0ZXh0OmkodS5nZm0udGV4dCkoInsyLH0iLCIqIikoKX0pLHQucnVsZXM9dSx0Lm91dHB1dD1mdW5jdGlvbihlLG4scil7dmFyIHM9bmV3IHQobixyKTtyZXR1cm4gcy5vdXRwdXQoZSl9LHQucHJvdG90eXBlLm91dHB1dD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGksbD0iIjtlOylpZihpPXRoaXMucnVsZXMuZXNjYXBlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9aVsxXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5hdXRvbGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLCJAIj09PWlbMl0/KG49IjoiPT09aVsxXS5jaGFyQXQoNik/dGhpcy5tYW5nbGUoaVsxXS5zdWJzdHJpbmcoNykpOnRoaXMubWFuZ2xlKGlbMV0pLHI9dGhpcy5tYW5nbGUoIm1haWx0bzoiKStuKToobj1zKGlbMV0pLHI9biksbCs9dGhpcy5yZW5kZXJlci5saW5rKHIsbnVsbCxuKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy51cmwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxuPXMoaVsxXSkscj1uLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudGFnLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vcHRpb25zLnNhbml0aXplP3MoaVswXSk6aVswXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5saW5rLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vdXRwdXRMaW5rKGkse2hyZWY6aVsyXSx0aXRsZTppWzNdfSk7ZWxzZSBpZigoaT10aGlzLnJ1bGVzLnJlZmxpbmsuZXhlYyhlKSl8fChpPXRoaXMucnVsZXMubm9saW5rLmV4ZWMoZSkpKXtpZihlPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx0PShpWzJdfHxpWzFdKS5yZXBsYWNlKC9ccysvZywiICIpLHQ9dGhpcy5saW5rc1t0LnRvTG93ZXJDYXNlKCldLCF0fHwhdC5ocmVmKXtsKz1pWzBdLmNoYXJBdCgwKSxlPWlbMF0uc3Vic3RyaW5nKDEpK2U7Y29udGludWV9bCs9dGhpcy5vdXRwdXRMaW5rKGksdCl9ZWxzZSBpZihpPXRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5zdHJvbmcodGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmVtLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5lbSh0aGlzLm91dHB1dChpWzJdfHxpWzFdKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuY29kZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuY29kZXNwYW4ocyhpWzJdLCEwKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuYnIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmJyKCk7ZWxzZSBpZihpPXRoaXMucnVsZXMuZGVsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoaVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz1zKHRoaXMuc21hcnR5cGFudHMoaVswXSkpO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiBsfSx0LnByb3RvdHlwZS5vdXRwdXRMaW5rPWZ1bmN0aW9uKGUsdCl7dmFyIG49cyh0LmhyZWYpLHI9dC50aXRsZT9zKHQudGl0bGUpOm51bGw7cmV0dXJuIiEiIT09ZVswXS5jaGFyQXQoMCk/dGhpcy5yZW5kZXJlci5saW5rKG4scix0aGlzLm91dHB1dChlWzFdKSk6dGhpcy5yZW5kZXJlci5pbWFnZShuLHIscyhlWzFdKSl9LHQucHJvdG90eXBlLnNtYXJ0eXBhbnRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/ZS5yZXBsYWNlKC8tLS9nLCLigJQiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQx4oCYIikucmVwbGFjZSgvJy9nLCLigJkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDHigJwiKS5yZXBsYWNlKC8iL2csIuKAnSIpLnJlcGxhY2UoL1wuezN9L2csIuKApiIpOmV9LHQucHJvdG90eXBlLm1hbmdsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixyPWUubGVuZ3RoLHM9MDtyPnM7cysrKXQ9ZS5jaGFyQ29kZUF0KHMpLE1hdGgucmFuZG9tKCk+LjUmJih0PSJ4Iit0LnRvU3RyaW5nKDE2KSksbis9IiYjIit0KyI7IjtyZXR1cm4gbn0sbi5wcm90b3R5cGUuY29kZT1mdW5jdGlvbihlLHQsbixyKXtpZihyPXJ8fHt9LHIuaGlnaGxpZ2h0KXt2YXIgaT1yLmhpZ2hsaWdodChlLHQpO251bGwhPWkmJmkhPT1lJiYobj0hMCxlPWkpfXJldHVybiB0Pyc8cHJlPjxjb2RlIGNsYXNzPSInK3IubGFuZ1ByZWZpeCt0KyciPicrKG4/ZTpzKGUpKSsiXG48L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKG4/ZTpzKGUsITApKSsiXG48L2NvZGU+PC9wcmU+In0sbi5wcm90b3R5cGUuYmxvY2txdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4iPGJsb2NrcXVvdGU+XG4iK2UrIjwvYmxvY2txdW90ZT5cbiJ9LG4ucHJvdG90eXBlLmh0bWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG4ucHJvdG90eXBlLmhlYWRpbmc9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIjxoIit0KycgaWQ9Iicrci5oZWFkZXJQcmVmaXgrbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teXHddKy9nLCItIikrJyI+JytlKyI8L2giK3QrIj5cbiJ9LG4ucHJvdG90eXBlLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIjxocj5cbiJ9LG4ucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj10PyJvbCI6InVsIjtyZXR1cm4iPCIrbisiPlxuIitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUubGlzdGl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxsaT4iK2UrIjwvbGk+XG4ifSxuLnByb3RvdHlwZS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7cmV0dXJuIjxwPiIrZSsiPC9wPlxuIn0sbi5wcm90b3R5cGUudGFibGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHRhYmxlPlxuPHRoZWFkPlxuIitlKyI8L3RoZWFkPlxuIisiPHRib2R5PlxuIit0KyI8L3Rib2R5PlxuIisiPC90YWJsZT5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlcm93PWZ1bmN0aW9uKGUpe3JldHVybiI8dHI+XG4iK2UrIjwvdHI+XG4ifSxuLnByb3RvdHlwZS50YWJsZWNlbGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmhlYWRlcj8idGgiOiJ0ZCIscj10LmFsaWduPyI8IituKycgc3R5bGU9InRleHQtYWxpZ246Jyt0LmFsaWduKyciPic6IjwiK24rIj4iO3JldHVybiByK2UrIjwvIituKyI+XG4ifSxuLnByb3RvdHlwZS5zdHJvbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIjxzdHJvbmc+IitlKyI8L3N0cm9uZz4ifSxuLnByb3RvdHlwZS5lbT1mdW5jdGlvbihlKXtyZXR1cm4iPGVtPiIrZSsiPC9lbT4ifSxuLnByb3RvdHlwZS5jb2Rlc3Bhbj1mdW5jdGlvbihlKXtyZXR1cm4iPGNvZGU+IitlKyI8L2NvZGU+In0sbi5wcm90b3R5cGUuYnI9ZnVuY3Rpb24oKXtyZXR1cm4iPGJyPiJ9LG4ucHJvdG90eXBlLmRlbD1mdW5jdGlvbihlKXtyZXR1cm4iPGRlbD4iK2UrIjwvZGVsPiJ9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8YSBocmVmPSInK2UrJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4iK24rIjwvYT4ifSxuLnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9JzxpbWcgc3JjPSInK2UrJyIgYWx0PSInK24rJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4ifSxyLnBhcnNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1uZXcgcih0LG4pO3JldHVybiBzLnBhcnNlKGUpfSxyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlKXt0aGlzLmlubGluZT1uZXcgdChlLmxpbmtzLHRoaXMub3B0aW9ucyx0aGlzLnJlbmRlcmVyKSx0aGlzLnRva2Vucz1lLnJldmVyc2UoKTtmb3IodmFyIG49IiI7dGhpcy5uZXh0KCk7KW4rPXRoaXMudG9rKCk7cmV0dXJuIG59LHIucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbj10aGlzLnRva2Vucy5wb3AoKX0sci5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGgtMV18fDB9LHIucHJvdG90eXBlLnBhcnNlVGV4dD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnRva2VuLnRleHQ7InRleHQiPT09dGhpcy5wZWVrKCkudHlwZTspZSs9IlxuIit0aGlzLm5leHQoKS50ZXh0O3JldHVybiB0aGlzLmlubGluZS5vdXRwdXQoZSl9LHIucHJvdG90eXBlLnRvaz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLnRva2VuLnR5cGUpe2Nhc2Uic3BhY2UiOnJldHVybiIiO2Nhc2UiaHIiOnJldHVybiB0aGlzLnJlbmRlcmVyLmhyKCk7Y2FzZSJoZWFkaW5nIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpLHRoaXMudG9rZW4uZGVwdGgsdGhpcy50b2tlbi50ZXh0LHRoaXMub3B0aW9ucyk7Y2FzZSJjb2RlIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5jb2RlKHRoaXMudG9rZW4udGV4dCx0aGlzLnRva2VuLmxhbmcsdGhpcy50b2tlbi5lc2NhcGVkLHRoaXMub3B0aW9ucyk7Y2FzZSJ0YWJsZSI6dmFyIGUsdCxuLHIscyxpPSIiLGw9IiI7Zm9yKG49IiIsZT0wO2U8dGhpcy50b2tlbi5oZWFkZXIubGVuZ3RoO2UrKylyPXtoZWFkZXI6ITAsYWxpZ246dGhpcy50b2tlbi5hbGlnbltlXX0sbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4uaGVhZGVyW2VdKSx7aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19KTtmb3IoaSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhuKSxlPTA7ZTx0aGlzLnRva2VuLmNlbGxzLmxlbmd0aDtlKyspe2Zvcih0PXRoaXMudG9rZW4uY2VsbHNbZV0sbj0iIixzPTA7czx0Lmxlbmd0aDtzKyspbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRbc10pLHtoZWFkZXI6ITEsYWxpZ246dGhpcy50b2tlbi5hbGlnbltzXX0pO2wrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobil9cmV0dXJuIHRoaXMucmVuZGVyZXIudGFibGUoaSxsKTtjYXNlImJsb2NrcXVvdGVfc3RhcnQiOmZvcih2YXIgbD0iIjsiYmxvY2txdW90ZV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGwpO2Nhc2UibGlzdF9zdGFydCI6Zm9yKHZhciBsPSIiLG89dGhpcy50b2tlbi5vcmRlcmVkOyJsaXN0X2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3QobCxvKTtjYXNlImxpc3RfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPSJ0ZXh0Ij09PXRoaXMudG9rZW4udHlwZT90aGlzLnBhcnNlVGV4dCgpOnRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJsb29zZV9pdGVtX3N0YXJ0Ijpmb3IodmFyIGw9IiI7Imxpc3RfaXRlbV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0aXRlbShsKTtjYXNlImh0bWwiOnZhciBoPXRoaXMudG9rZW4ucHJlfHx0aGlzLm9wdGlvbnMucGVkYW50aWM/dGhpcy50b2tlbi50ZXh0OnRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpO3JldHVybiB0aGlzLnJlbmRlcmVyLmh0bWwoaCk7Y2FzZSJwYXJhZ3JhcGgiOnJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZVRleHQoKSl9fSxsLmV4ZWM9bCxoLm9wdGlvbnM9aC5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBvKGguZGVmYXVsdHMsZSksaH0saC5kZWZhdWx0cz17Z2ZtOiEwLHRhYmxlczohMCxicmVha3M6ITEscGVkYW50aWM6ITEsc2FuaXRpemU6ITEsc21hcnRMaXN0czohMSxzaWxlbnQ6ITEsaGlnaGxpZ2h0Om51bGwsbGFuZ1ByZWZpeDoibGFuZy0iLHNtYXJ0eXBhbnRzOiExLGhlYWRlclByZWZpeDoiIixyZW5kZXJlcjpuZXcgbn0saC5QYXJzZXI9cixoLnBhcnNlcj1yLnBhcnNlLGguUmVuZGVyZXI9bixoLkxleGVyPWUsaC5sZXhlcj1lLmxleCxoLklubGluZUxleGVyPXQsaC5pbmxpbmVMZXhlcj10Lm91dHB1dCxoLnBhcnNlPWgsIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWg6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZnVuY3Rpb24oKXtyZXR1cm4gaH0pOnRoaXMubWFya2VkPWh9LmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpnbG9iYWwpfSgpKTtQSwcIQvpMalM5AABTOQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAc3RhdGljXGxpYlx2YWxpZGF0ZS5taW4uanMvKgogKiB2YWxpZGF0ZS5qcyAxLjMKICogQ29weXJpZ2h0IChjKSAyMDEzIFJpY2sgSGFycmlzb24sIGh0dHA6Ly9yaWNraGFycmlzb24ubWUKICogdmFsaWRhdGUuanMgaXMgb3BlbiBzb3VyY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KICogUG9ydGlvbnMgb2YgdmFsaWRhdGUuanMgYXJlIGluc3BpcmVkIGJ5IENvZGVJZ25pdGVyLgogKiBodHRwOi8vcmlja2hhcnJpc29uLmdpdGh1Yi5jb20vdmFsaWRhdGUuanMKICovCgooZnVuY3Rpb24ocSxyLG0pe3ZhciBzPXtyZXF1aXJlZDoiVGhlICVzIGZpZWxkIGlzIHJlcXVpcmVkLiIsbWF0Y2hlczoiVGhlICVzIGZpZWxkIGRvZXMgbm90IG1hdGNoIHRoZSAlcyBmaWVsZC4iLCJkZWZhdWx0IjoiVGhlICVzIGZpZWxkIGlzIHN0aWxsIHNldCB0byBkZWZhdWx0LCBwbGVhc2UgY2hhbmdlLiIsdmFsaWRfZW1haWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiIsdmFsaWRfZW1haWxzOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFsbCB2YWxpZCBlbWFpbCBhZGRyZXNzZXMuIixtaW5fbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBhdCBsZWFzdCAlcyBjaGFyYWN0ZXJzIGluIGxlbmd0aC4iLG1heF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IG5vdCBleGNlZWQgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixleGFjdF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IGJlIGV4YWN0bHkgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixncmVhdGVyX3RoYW46IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBudW1iZXIgZ3JlYXRlciB0aGFuICVzLiIsbGVzc190aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGxlc3MgdGhhbiAlcy4iLGFscGhhOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMuIixhbHBoYV9udW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzLiIsYWxwaGFfZGFzaDoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycywgdW5kZXJzY29yZXMsIGFuZCBkYXNoZXMuIixudW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgbnVtYmVycy4iLGludGVnZXI6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYW4gaW50ZWdlci4iLGRlY2ltYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBkZWNpbWFsIG51bWJlci4iLGlzX25hdHVyYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSBwb3NpdGl2ZSBudW1iZXJzLiIsaXNfbmF0dXJhbF9ub196ZXJvOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvLiIsdmFsaWRfaXA6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBJUC4iLHZhbGlkX2Jhc2U2NDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIGJhc2U2NCBzdHJpbmcuIix2YWxpZF9jcmVkaXRfY2FyZDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci4iLGlzX2ZpbGVfdHlwZToiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5ICVzIGZpbGVzLiIsdmFsaWRfdXJsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgVVJMLiJ9LHQ9ZnVuY3Rpb24oYSl7fSx1PS9eKC4rPylcWyguKylcXSQvLGg9L15bMC05XSskLyx2PS9eXC0/WzAtOV0rJC8saz0vXlwtP1swLTldKlwuP1swLTldKyQvLHA9L15bYS16QS1aMC05LiEjJCUmYW1wOycqK1wtXC89P1xeX2B7fH1+XC1dK0BbYS16QS1aMC05XC1dKyg/OlwuW2EtekEtWjAtOVwtXSspKiQvLHc9L15bYS16XSskL2kseD0vXlthLXowLTldKyQvaSx5PS9eW2EtejAtOV9cLV0rJC9pLHo9L15bMC05XSskL2ksQT0vXlsxLTldWzAtOV0qJC9pLEI9L14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pJC9pLEM9L1teYS16QS1aMC05XC9cKz1dL2ksRD0vXltcZFwtXHNdKyQvLEU9L14oKGh0dHB8aHR0cHMpOlwvXC8oXHcrOnswLDF9XHcqQCk/KFxTKyl8KSg6WzAtOV0rKT8oXC98XC8oW1x3IyE6Lj8rPSYlQCFcLVwvXSkpPyQvLGU9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY2FsbGJhY2s9Y3x8dDt0aGlzLmVycm9ycz1bXTt0aGlzLmZpZWxkcz17fTt0aGlzLmZvcm09dGhpcy5fZm9ybUJ5TmFtZU9yTm9kZShhKXx8e307dGhpcy5tZXNzYWdlcz17fTt0aGlzLmhhbmRsZXJzPXt9O2E9MDtmb3IoYz1iLmxlbmd0aDthPGM7YSsrKXt2YXIgZD1iW2FdO2lmKChkLm5hbWV8fGQubmFtZXMpJiZkLnJ1bGVzKWlmKGQubmFtZXMpZm9yKHZhciBsPTA7bDxkLm5hbWVzLmxlbmd0aDtsKyspdGhpcy5fYWRkRmllbGQoZCxkLm5hbWVzW2xdKTtlbHNlIHRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lKX12YXIgZz10aGlzLmZvcm0ub25zdWJtaXQ7dGhpcy5mb3JtLm9uc3VibWl0PWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXt0cnl7cmV0dXJuIGEuX3ZhbGlkYXRlRm9ybShiKSYmKGc9PT1tfHxnKCkpfWNhdGNoKGMpe319fSh0aGlzKX0sbj1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKDA8YS5sZW5ndGgmJigicmFkaW8iPT09YVswXS50eXBlfHwiY2hlY2tib3giPT09YVswXS50eXBlKSlmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXtpZihhW2NdLmNoZWNrZWQpcmV0dXJuIGFbY11bYl19ZWxzZSByZXR1cm4gYVtiXX07ZS5wcm90b3R5cGUuc2V0TWVzc2FnZT1mdW5jdGlvbihhLGIpe3RoaXMubWVzc2FnZXNbYV09YjtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUucmVnaXN0ZXJDYWxsYmFjaz1mdW5jdGlvbihhLGIpe2EmJigic3RyaW5nIj09PXR5cGVvZiBhJiZiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGIpJiYodGhpcy5oYW5kbGVyc1thXT1iKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuX2Zvcm1CeU5hbWVPck5vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgYT9hOnIuZm9ybXNbYV19O2UucHJvdG90eXBlLl9hZGRGaWVsZD1mdW5jdGlvbihhLGIpe3RoaXMuZmllbGRzW2JdPXtuYW1lOmIsZGlzcGxheTphLmRpc3BsYXl8fGIscnVsZXM6YS5ydWxlcyxpZDpudWxsLHR5cGU6bnVsbCx2YWx1ZTpudWxsLGNoZWNrZWQ6bnVsbH19O2UucHJvdG90eXBlLl92YWxpZGF0ZUZvcm09ZnVuY3Rpb24oYSl7dGhpcy5lcnJvcnM9W107Zm9yKHZhciBiIGluIHRoaXMuZmllbGRzKWlmKHRoaXMuZmllbGRzLmhhc093blByb3BlcnR5KGIpKXt2YXIgYz10aGlzLmZpZWxkc1tiXXx8e30sZD10aGlzLmZvcm1bYy5uYW1lXTtkJiZkIT09bSYmKGMuaWQ9bihkLCJpZCIpLGMudHlwZT0wPGQubGVuZ3RoP2RbMF0udHlwZTpkLnR5cGUsYy52YWx1ZT1uKGQsInZhbHVlIiksYy5jaGVja2VkPW4oZCwiY2hlY2tlZCIpLHRoaXMuX3ZhbGlkYXRlRmllbGQoYykpfSJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5jYWxsYmFjayYmdGhpcy5jYWxsYmFjayh0aGlzLmVycm9ycyxhKTswPHRoaXMuZXJyb3JzLmxlbmd0aCYmKGEmJmEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmV2ZW50JiYoZXZlbnQucmV0dXJuVmFsdWU9ITEpKTtyZXR1cm4hMH07ZS5wcm90b3R5cGUuX3ZhbGlkYXRlRmllbGQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEucnVsZXMuc3BsaXQoInwiKSxjPWEucnVsZXMuaW5kZXhPZigicmVxdWlyZWQiKSxkPSFhLnZhbHVlfHwiIj09PWEudmFsdWV8fGEudmFsdWU9PT1tLGw9MCxnPWIubGVuZ3RoO2w8ZztsKyspe3ZhciBmPWJbbF0sZT1udWxsLGg9ITEsaz11LmV4ZWMoZik7aWYoLTEhPT1jfHwtMSE9PWYuaW5kZXhPZigiIWNhbGxiYWNrXyIpfHwhZClpZihrJiYoZj1rWzFdLGU9a1syXSksIiEiPT09Zi5jaGFyQXQoMCkmJihmPWYuc3Vic3RyaW5nKDEsZi5sZW5ndGgpKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuX2hvb2tzW2ZdP3RoaXMuX2hvb2tzW2ZdLmFwcGx5KHRoaXMsW2EsZV0pfHwoaD0hMCk6ImNhbGxiYWNrXyI9PT1mLnN1YnN0cmluZygwLDkpJiYoZj1mLnN1YnN0cmluZyg5LGYubGVuZ3RoKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuaGFuZGxlcnNbZl0mJiExPT09dGhpcy5oYW5kbGVyc1tmXS5hcHBseSh0aGlzLFthLnZhbHVlLGVdKSYmKGg9ITApKSxoKXtiPXRoaXMubWVzc2FnZXNbZl18fHNbZl07Yz0iQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdpdGggdGhlICIrYS5kaXNwbGF5KyIgZmllbGQuIjtiJiYoYz1iLnJlcGxhY2UoIiVzIixhLmRpc3BsYXkpLGUmJihjPWMucmVwbGFjZSgiJXMiLHRoaXMuZmllbGRzW2VdP3RoaXMuZmllbGRzW2VdLmRpc3BsYXk6ZSkpKTt0aGlzLmVycm9ycy5wdXNoKHtpZDphLmlkLG5hbWU6YS5uYW1lLG1lc3NhZ2U6YyxydWxlOmZ9KTticmVha319fTtlLnByb3RvdHlwZS5faG9va3M9e3JlcXVpcmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWEudmFsdWU7cmV0dXJuImNoZWNrYm94Ij09PWEudHlwZXx8InJhZGlvIj09PWEudHlwZT8hMD09PWEuY2hlY2tlZDpudWxsIT09YiYmIiIhPT1ifSwiZGVmYXVsdCI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS52YWx1ZSE9PWJ9LG1hdGNoZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmZvcm1bYl07cmV0dXJuIGM/YS52YWx1ZT09PWMudmFsdWU6ITF9LHZhbGlkX2VtYWlsOmZ1bmN0aW9uKGEpe3JldHVybiBwLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2VtYWlsczpmdW5jdGlvbihhKXthPWEudmFsdWUuc3BsaXQoIiwiKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKylpZighcC50ZXN0KGFbYl0pKXJldHVybiExO3JldHVybiEwfSxtaW5fbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD49cGFyc2VJbnQoYiwxMCk6ITF9LG1heF9sZW5ndGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC50ZXN0KGIpP2EudmFsdWUubGVuZ3RoPD1wYXJzZUludChiLDEwKTohMX0sZXhhY3RfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD09PXBhcnNlSW50KGIsMTApOiExfSxncmVhdGVyX3RoYW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpP3BhcnNlRmxvYXQoYS52YWx1ZSk+cGFyc2VGbG9hdChiKTohMX0sbGVzc190aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPHBhcnNlRmxvYXQoYik6ITF9LGFscGhhOmZ1bmN0aW9uKGEpe3JldHVybiB3LnRlc3QoYS52YWx1ZSl9LGFscGhhX251bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIHgudGVzdChhLnZhbHVlKX0sYWxwaGFfZGFzaDpmdW5jdGlvbihhKXtyZXR1cm4geS50ZXN0KGEudmFsdWUpfSxudW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiBoLnRlc3QoYS52YWx1ZSl9LGludGVnZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHYudGVzdChhLnZhbHVlKX0sZGVjaW1hbDpmdW5jdGlvbihhKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsOmZ1bmN0aW9uKGEpe3JldHVybiB6LnRlc3QoYS52YWx1ZSl9LGlzX25hdHVyYWxfbm9femVybzpmdW5jdGlvbihhKXtyZXR1cm4gQS50ZXN0KGEudmFsdWUpfSx2YWxpZF9pcDpmdW5jdGlvbihhKXtyZXR1cm4gQi50ZXN0KGEudmFsdWUpfSx2YWxpZF9iYXNlNjQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEMudGVzdChhLnZhbHVlKX0sdmFsaWRfdXJsOmZ1bmN0aW9uKGEpe3JldHVybiBFLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2NyZWRpdF9jYXJkOmZ1bmN0aW9uKGEpe2lmKCFELnRlc3QoYS52YWx1ZSkpcmV0dXJuITE7dmFyIGI9MCxjPTAsZD0hMTthPWEudmFsdWUucmVwbGFjZSgvXEQvZywiIik7Zm9yKHZhciBlPWEubGVuZ3RoLTE7MDw9ZTtlLS0pYz1hLmNoYXJBdChlKSxjPXBhcnNlSW50KGMsMTApLGQmJjk8KGMqPTIpJiYoYy09OSksYis9YyxkPSFkO3JldHVybiAwPT09YiUxMH0saXNfZmlsZV90eXBlOmZ1bmN0aW9uKGEsYil7aWYoImZpbGUiIT09YS50eXBlKXJldHVybiEwO3ZhciBjPWEudmFsdWUuc3Vic3RyKGEudmFsdWUubGFzdEluZGV4T2YoIi4iKSsxKSxkPWIuc3BsaXQoIiwiKSxlPSExLGc9MCxmPWQubGVuZ3RoO2ZvcihnO2c8ZjtnKyspYz09ZFtnXSYmKGU9ITApO3JldHVybiBlfX07cS5Gb3JtVmFsaWRhdG9yPWV9KSh3aW5kb3csZG9jdW1lbnQpOwpQSwcIZowfxDMYAAAzGAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAdmlldy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAdmlld1xhZG1pbi9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxhcnRpY2xlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mt7vliqDmlofnq6A8L2E+DQogICAgPC9saT57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk5paH56ug5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9hcnRpY2xlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIlnRyEm4GAABuBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xhZG1pblxjbWQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcYWRtaW5cY21kXGJhY2t1cC5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciBjbGVhciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUgbGVmdCI+5aSH5Lu95pWw5o2uPC9oMT4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUgbGVmdCIgaWQ9ImJhY2t1cC1idG4iPuWkh+S7vTwvYnV0dG9uPg0KPC9oZWFkZXI+DQo8dWwgY2xhc3M9ImNtZC1saXN0IiBpZD0iYmFja3VwLWxpc3QiPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVUaW1lIC5Nb2RUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InNpemUiPnt7RmlsZVNpemUgLlNpemV9fTwvc3Bhbj4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyIgcmVsPSJ7ey5OYW1lfX0iPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUtbyI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYmFja3VwLWJ0bicpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgdHlwZTogInBvc3QiLA0KICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgJCgnLmNtZC1saXN0JykucHJlcGVuZCgnPGxpIGNsYXNzPSJiYWNrdXAtbG9hZGluZyI+5aSH5Lu95LitLi48L2xpPicpOw0KICAgICAgICAgICAgICAgICAgICAkKCcjYmFja3VwLWJ0bicpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmJhY2t1cC1sb2FkaW5nJykucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuY21kLWxpc3QnKS5wcmVwZW5kKCc8bGkgY2xhc3M9ImJhY2t1cC1yZXN1bHQiPuWImuWImuWkh+S7veWIsCAnICsganNvbi5maWxlICsgJzwvbGk+Jyk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5zaG93KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuZGVsJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICB1cmw6ICIvY21kL2JhY2t1cC8/ZmlsZT0iICsgJCh0aGlzKS5hdHRyKCJyZWwiKSwNCiAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAkKHRoYXQpLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwjQcLJY6AYAAOgGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXGNvbW1lbnRzLmh0bWw8ZGl2IGlkPSJjb21tZW50LWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAiPnt7cmFuZ2UgLkNvbW1lbnRzfX0NCiAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSJ7ey5BdXRob3J9fSIvPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+e3tpZiAuR2V0Q29udGVudH19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5Ae3suR2V0Q29udGVudC5UaXRsZX19PC9zcGFuPnt7ZWxzZX19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5A5peg5pWIPC9zcGFuPnt7ZW5kfX17e2lmIG5lIC5TdGF0dXMgImFwcHJvdmVkIn19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtY2hlY2siIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWuoeaguCI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45LitPC9hPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Zue5aSNIj48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtZGVsIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaQiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pnt7ZW5kfX0NCiAgICA8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGFjdGlvbj0iL2FkbWluL2NvbW1lbnRzLyIgY2xhc3M9ImZvcm0gY2xlYXIgbGVmdCIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQgbGVmdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiIGlkPSJjb21tZW50LXN1Ym1pdCI+5Zue5aSN6K+E6K66PC9idXR0b24+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJjb21tZW50LWNsb3NlIj7lhbPpl63lm57lpI08L2J1dHRvbj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIGlkPSJjb21tZW50LXBhcmVudCIgbmFtZT0icGlkIi8+DQogICAgPC9mb3JtPg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6K+E6K665bCG5L2/55u45YWz5YaF5a655peg5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5Yig6Zmk5aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtY2hlY2snKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5a6h5qC45ZCO5q2k5L2c6ICF5bCG5LiN5YaN5qCH6K6w5a6h5qC4ISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAicHV0IiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlrqHmoLjlpLHotKUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuYy1yZXBseScpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC0nK2lkKS5hcHBlbmQoJCgnI2NvbW1lbnQtZm9ybScpLmRldGFjaCgpLnNob3coKSk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suWbnuWkjSIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9jb21tZW50cy8iOw0KICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgYWxlcnQoIuWbnuWkjeWksei0pSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtY2xvc2UnKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuaGlkZSgpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIkwgOhLQPAAC0DwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAdmlld1xhZG1pblxjdXN0b21fc2V0dGluZy5odG1sPGZvcm0gaWQ9InNldHRpbmctZm9ybSIgY2xhc3M9ImZvcm0gZm9ybS1hbGlnbiBjdXN0b20iIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvY3VzdG9tLyIgbWV0aG9kPSJwb3N0Ij57e3JhbmdlICRrLCR2IDo9IC5TZXR0aW5nc319DQogICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgdmFsdWU9Int7JGt9fSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHZhbHVlPSJ7eyR2fX0iLz4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgIDwvcD57e2VuZH19DQogICAgPHA+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGFkZCIgaHJlZj0iIyI+5re75Yqg5LiA6aG5PC9hPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kvb/nlKjlh73mlbDoh6rlrprkuYnphY3nva7vvIzpnIDopoHliqDliY3nvIAiY18i77yM5aaCR2V0U2V0dGluZygiY19rZXkiKTwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY3VzdG9tLWl0ZW0iPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgcGxhY2Vob2xkZXI9IuWtl+auteWQjSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IG5hbWU9InZhbHVlIiBjbGFzcz0iaXB0IHZhbHVlIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0i5a2X5q615YC8Ii8+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgIDwvcD4NCiAgICA8L3NjcmlwdD4NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNzZXR0aW5nLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIiA6IGpzb24ubXNnKTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5hZGQnKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnI3NldHRpbmctZm9ybScpLnByZXBlbmQoJCgiI2N1c3RvbS1pdGVtIikuaHRtbCgpKTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgaWYoY29uZmlybSgi6KaB5Yig6Zmk6L+Z6aG577yfIikpew0KICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwi4eGWWNAYAADQGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABwAAAB2aWV3XGFkbWluXGVkaXRfYXJ0aWNsZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9IuaWh+eroOagh+mimCIgdmFsdWU9Int7LkFydGljbGUuVGl0bGV9fSIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPnt7SHRtbCAuQXJ0aWNsZS5UZXh0fX08L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOWUr+S4gOmTvuaOpSIgdmFsdWU9Int7LkFydGljbGUuU2x1Z319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5qCH562+PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJ0YWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InRhZyIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOagh+etviIgdmFsdWU9Int7LkFydGljbGUuVGFnU3RyaW5nfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCJ7e2lmIGVxIC5BcnRpY2xlLlN0YXR1cyAicHVibGlzaCJ9fSBzZWxlY3RlZHt7ZW5kfX0+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQie3tpZiBlcSAuQXJ0aWNsZS5TdGF0dXMgImRyYWZ0In19IHNlbGVjdGVke3tlbmR9fT7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuQXJ0aWNsZS5Jc0NvbW1lbnQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLkFydGljbGUuSXNDb21tZW50IGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuW3suS/neWtmO+8jOWOu+afpeeci++8n+i/mOaYr+e7p+e7ree8lui+kSIpKSB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9hcnRpY2xlcy8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIS5zp8W0NAABtDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xhZG1pblxlZGl0X3BhZ2UuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLpobXpnaLmoIfpopgiIHZhbHVlPSJ7ey5QYWdlLlRpdGxlfX0iLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij57e0h0bWwgLlBhZ2UuVGV4dH19PC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpobXpnaLnmoTllK/kuIDpk77mjqUiIHZhbHVlPSJ7ey5QYWdlLlNsdWd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoInt7aWYgZXEgLlBhZ2UuU3RhdHVzICJwdWJsaXNoIn19IHNlbGVjdGVke3tlbmR9fT7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCJ7e2lmIGVxIC5QYWdlLlN0YXR1cyAiZHJhZnQifX0gc2VsZWN0ZWR7e2VuZH19PuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5QYWdlLklzQ29tbWVudCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuUGFnZS5Jc0NvbW1lbnQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7nva7pobbpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImxpbmsiIGlkPSJpcy1saW5rIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLlBhZ2UuSXNMaW5rZWQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5QYWdlLklzTGlua2VkIHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgi5bey5L+d5a2Y77yM5Y675p+l55yL77yf6L+Y5piv57un57ut57yW6L6RIikpIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL3BhZ2VzLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwi2eDIy4w0AAOMNAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXGZpbGVzLmh0bWw8dWwgaWQ9ImZpbGVzLWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAgcGFnZXIiPg0KICAgIDxsaSBjbGFzcz0iZmlsZSIgaWQ9ImZpbGVzLWJ0bi1saSI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgPC9saT57e3JhbmdlIC5GaWxlc319DQogICAgPGxpIGNsYXNzPSJmaWxlIiBpZD0iZmlsZS17ey5JZH19Ij4NCiAgICAgICAgPHNwYW4gY2xhc3M9InVwbG9hZC10aW1lIj57e0RhdGVJbnQ2NCAuVXBsb2FkVGltZSAiTU0uREQifX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJzaXplIj57e0ZpbGVTaXplIC5TaXplfX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj57ey5OYW1lfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSIve3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iL3t7LlVybH19Ij48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluay1zcXVhcmUiPjwvaT48L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgZmFkZS1vdXQiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWIoOmZpOmZhOS7tiI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZSI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCiAgICB7e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2ZpbGVzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCjwvdWw+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2F0dGFjaC1zaG93Iik7DQogICAgICAgICQoIi5kZWwiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6ZmE5Lu255u45YWz6ZO+5o6l5Lya5aSx5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgICAgICAidXJsIjogIi9hZG1pbi9maWxlcy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2ZpbGUtJytpZCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhixZv67AYAAOwGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAAB2aWV3XGFkbWluXGhvbWUuaHRtbDxkaXYgY2xhc3M9ImFkbWluIGNvbnRhaW5lciBjbGVhciIgaWQ9ImRhc2hib2FyZCI+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTUgbGVmdCI+DQogICAgICAgIDxkaXYgY2xhc3M9IndlbGNvbWUiPg0KICAgICAgICAgICAgPGg0PldlbGNvbWU8L2g0Pg0KICAgICAgICAgICAgPHA+5qyi6L+O5Zue5p2l77yMIDxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJxdWljay1saW5rIj4NCiAgICAgICAgICAgIDxoND7lv6vpgJ/pk77mjqU8L2g0Pg0KICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZS93cml0ZS8iPuaSsOWGmeaWh+eroDwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vcGFnZS93cml0ZS8iPua3u+WKoOmhtemdojwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vY29tbWVudHMvIj7mn6XnnIvlkozlrqHmoLjor4Torro8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3NldHRpbmcvIj7kv67mlLnphY3nva48L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIj7mm7TmlrDkuKrkurrotYTmlpk8L2E+PC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS0yIGxlZnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eSI+DQogICAgICAgICAgICA8aDQ+5pyA5paw5rS75YqoPC9oND4NCiAgICAgICAgICAgIDxwPuWGheWuueW8gOWPkeS4rS4uLjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTQgcmlnaHQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cyI+DQogICAgICAgICAgICA8aDQ+5pWw5o2u57uf6K6hPC9oND4NCiAgICAgICAgICAgIDxwPuW3sue7j+WPkeW4g+aWh+eroCA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5BcnRpY2xlc319PC9zcGFuPiDnr4fvvIwNCiAgICAgICAgICAgIOmhtemdoiA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5QYWdlc319PC9zcGFuPiDkuKrvvIwgPGJyLz4NCiAgICAgICAgICAgIOaUtuWIsOivhOiuuiA8c3BhbiBjbGFzcz0ibGJsIGxibC1ibHVlIj57ey5TdGF0aXMuQ29tbWVudHN9fTwvc3Bhbj4g5qyh77yMDQogICAgICAgICAgICDkuIrkvKAgPHNwYW4gY2xhc3M9ImxibCBsYmwtZ3JlZW4iPnt7LlN0YXRpcy5GaWxlc319PC9zcGFuPiDkuKrpmYTku7Y8L3A+DQogICAgICAgICAgICA8cD7lvZPliY3nqIvluo/niYjmnKzvvJo8c3Ryb25nPnt7LlN0YXRpcy5WZXJzaW9ufX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJvZmZpY2UiPg0KICAgICAgICAgICAgPGg0PuWumOaWuea2iOaBrzwvaDQ+DQogICAgICAgICAgICA8cD7ov5jmsqHmnInmtojmga88L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+UEsHCCFZHnQvBgAALwYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5cbG9naW4uaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7nmbvlvZUgLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT4NCiAgICAgICAgI2xvZ2luLWZvcm17DQogICAgICAgICAgICB3aWR0aDogMjgwcHg7DQogICAgICAgICAgICBtYXJnaW46IDgwcHggYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICAjbG9naW4tZm9ybSBoMXsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7DQogICAgICAgIH0NCiAgICA8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8Zm9ybSBpZD0ibG9naW4tZm9ybSIgY2xhc3M9ImZvcm0gZm9ybS12ZXJ0aWNhbCIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiIG5hbWU9ImxvZ2luLWZvcm0iPg0KICAgIDxoMT7nmbvlvZUgLSBGeGguR288L2gxPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9InVzZXIiPueUqOaIt+WQjTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IiBpZD0idXNlciIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ1c2VyIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1c2VyLWludmFsaWQiPueUqOaIt+WQjeS4uuWtl+avjSvmlbDlrZfvvIzplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJwYXNzd29yZCI+55So5oi35a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQiIGlkPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0icGFzc3dvcmQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InBhc3N3b3JkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+55m7IOW9lTwvYnV0dG9uPg0KICAgIDxzcGFuIGNsYXNzPSJ0aXAiPum7mOiupOiusOS9j+eZu+mZhjPlpKk8L3NwYW4+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2Nkbi5zdGF0aWNmaWxlLm9yZy9qcXVlcnkvMS4xMC4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jZG4uc3RhdGljZmlsZS5vcmcvanF1ZXJ5LmZvcm0vMy40Ni9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoImxvZ2luLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoicGFzc3dvcmQiLCJydWxlcyI6InJlcXVpcmVkfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNsb2dpbi1mb3JtJykuYWpheFN1Ym1pdChmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZighanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi55m75b2V6ZSZ6K+v77yM6K+35qOA5p+l55So5oi35oiW5a+G56CBIik7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCNbgeGKQCAAAkAgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5ccGFnZXMuaHRtbDx1bCBpZD0iYXJ0aWNsZS1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj4NCiAgICA8bGk+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUiIGhyZWY9Ii9hZG1pbi9wYWdlL3dyaXRlLyI+5re75Yqg6aG16Z2iPC9hPg0KICAgIDwvbGk+e3tyYW5nZSAuUGFnZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj48aDQgY2xhc3M9ImlubGluZS1ibG9jayB0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0YXJnZXQ9Il9ibGFuayI+e3suVGl0bGV9fTwvYT48L2g0Pnt7aWYgbmUgLlN0YXR1cyAicHVibGlzaCJ9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGJsIHN0YXR1cyI+6I2J56i/PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9InNsdWciPnt7LlNsdWd9fTwvc3Bhbj57e2lmIGVxIC5Jc0NvbW1lbnQgZmFsc2V9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iaXMtY29tbWVudCI+PGkgY2xhc3M9ImZhLWNvbW1lbnRzIGZhIj48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPGEgY2xhc3M9ImVkaXQgbGJsIGxibC1ncmVlbiIgaHJlZj0iL2FkbWluL3BhZ2Uve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+57yW6L6RPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIGxibCBsYmwtcmVkIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7liKDpmaQ8L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHVsIGlkPSJhcnRpY2xlLXBhZ2VyIiBjbGFzcz0icGFnZXIgY29udGFpbmVyOTYwIj57e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL3BhZ2VzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoIi5kZWwiKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgIGlmKGNvbmZpcm0oIuWIoOmZpOmhtemdouWwhuS9v+ebuOWFs+WGheWuueWkseaViO+8geehruiupO+8nyIpKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICJ1cmwiOiIvYWRtaW4vcGFnZS8iK2lkKyIvIiwNCiAgICAgICAgICAgICAgICAidHlwZSI6ImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgInN1Y2Nlc3MiOmZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5Yig6ZmkIik7DQogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCGvk2yFcBgAAXAYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcYWRtaW5ccGFzc3dvcmQuaHRtbDxmb3JtIGlkPSJwYXNzd29yZCIgY2xhc3M9ImZvcm0gZm9ybS1hbGlnbiBjbGVhciIgYWN0aW9uPSIjIiBuYW1lPSJwYXNzd29yZC1mb3JtIiBtZXRob2Q9InBvc3QiPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im9sZCI+5pen5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJvbGQiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJvbGQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7pqozor4Hml6flr4bnoIE8L3NwYW4+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im9sZC1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJuZXciPuaWsOWvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ibmV3IiB0eXBlPSJwYXNzd29yZCIgbmFtZT0ibmV3IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ibmV3LWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9ImNvbmZpcm0iPuehruiupOWvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0iY29uZmlybSIgdHlwZT0icGFzc3dvcmQiIG5hbWU9ImNvbmZpcm0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJjb25maXJtLWludmFsaWQiPuehruiupOWvhueggeS4jeWMuemFjTwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5L+u5pS5PC9idXR0b24+DQogICAgPC9wPg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwYXNzd29yZC1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJvbGQiLCJydWxlcyI6Im1pbl9sZW5ndGhbMl18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6Im5ldyIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiY29uZmlybSIsInJ1bGVzIjoicmVxdWlyZWR8bWF0Y2hlc1tuZXddIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjcGFzc3dvcmQnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCG5xJ4FPBwAATwcAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcYWRtaW5ccGx1Z2luLmh0bWw8dWwgaWQ9InBsdWdpbi1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj57e3JhbmdlIC5QbHVnaW5zfX0NCiAgICA8bGkgY2xhc3M9ImNsZWFyIj57e2lmIC5Jc0FjdGl2ZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0IGxibCBhY3RpdmUgbGJsLWdyZWVuIj4mbmJzcDs8L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSBsZWZ0Ij57ey5OYW1lfX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uIGxlZnQiPnt7LlZlcnNpb259fTwvc3Bhbj57e2lmIC5IYXNTZXR0aW5nfX0NCiAgICAgICAgPGEgY2xhc3M9InNldHRpbmcgbGVmdCIgaHJlZj0iL2FkbWluL3BsdWdpbnMve3suS2V5fX0vIj7pgInpobk8L2E+e3tlbmR9fXt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPGEgY2xhc3M9ImRlYWN0aXZhdGUgbGJsIGxibC1yZWQgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPuWwgeWNsDwvYT57e2Vsc2V9fQ0KICAgICAgICA8YSBjbGFzcz0iYWN0aXZhdGUgbGJsIGxibC1ibHVlIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LktleX19Ij7mv4DmtLs8L2E+e3tlbmR9fQ0KICAgICAgICA8cCBjbGFzcz0iZGVzYyBsZWZ0Ij57ey5EZXNjfX08L3A+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgiLmRlYWN0aXZhdGUiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgdmFyIHAgPSAkdGhpcy5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQucG9zdCgiIiwgew0KICAgICAgICAgICAgICAgICJhY3Rpb24iOiAiZGVhY3RpdmF0ZSIsDQogICAgICAgICAgICAgICAgInBsdWdpbiI6IHANCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLm9mZigiY2xpY2siKS50ZXh0KCLkuIvmrKHmv4DmtLsiKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bCB5Y2w5aSx6LSlIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfSk7DQogICAgICAgICQoIi5hY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJhY3RpdmF0ZSIsDQogICAgICAgICAgICAgICAgInBsdWdpbiI6IHANCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLm9mZigiY2xpY2siKS50ZXh0KCLkuIvmrKHlsIHljbAiKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5r+A5rS75aSx6LSlIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhPcFmhYgYAAGIGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAB2aWV3XGFkbWluXHBsdWdpbl9zZXR0aW5nLmh0bWw8Zm9ybSBpZD0icGx1Z2luLXNldHRpbmctZm9ybSIgY2xhc3M9ImZvcm0gY29udGFpbmVyOTYwIGFkbWluIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAge3tIdG1sIC5Gb3JtfX0NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsNCiAgICAgICAgJCgnI3BsdWdpbi1zZXR0aW5nLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgIGFsZXJ0KGpzb24ucmVzID8gIuW3suS/neWtmCI6IuS/neWtmOWksei0pSIpOw0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcINCtz1TgBAAA4AQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxwcm9maWxlLmh0bWw8Zm9ybSBpZD0icHJvZmlsZSIgY2xhc3M9ImFkbWluIGZvcm0gY2xlYXIgZm9ybS1hbGlnbiIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiIG5hbWU9InByb2ZpbGUtZm9ybSI+DQogICAgPGRpdiBjbGFzcz0iYXZhdGFyIGdyaWQtMS00IGxlZnQgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3suVXNlci5BdmF0YXJ9fSIgYWx0PSJ7ey5Vc2VyLk5pY2t9fSIgY2xhc3M9ImZpZWxkIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgZmllbGQgaW5saW5lLWJsb2NrIj7lpLTlg4/nlLEgPGEgaHJlZj0iaHR0cDovL2dyYXZhdGFyLmNvbS8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vLWZvbGxvdyI+R3JhdmF0YXI8L2E+IOaPkOS+mzwvc3Bhbj4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLXJlZCBpbmxpbmUtYmxvY2siIGhyZWY9Ii9hZG1pbi9wYXNzd29yZC8iPuS/ruaUueWvhueggTwvYT4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImluZm8gcmlnaHQgZ3JpZC0zLTQiPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0idXNlciI+55m75b2V5ZCNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0idXNlciIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgdmFsdWU9Int7LlVzZXIuTmFtZX19IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPueZu+W9leeahOeUqOaIt+WQjTwvc3Bhbj48YnIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVzZXItaW52YWxpZCI+55So5oi35ZCN5Li65a2X5q+NK+aVsOWtl++8jOmVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9Im5pY2siPuaYteensDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9Im5pY2siIHR5cGU9InRleHQiIG5hbWU9Im5pY2siIHZhbHVlPSJ7ey5Vc2VyLk5pY2t9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7mmL7npLrlnKjliY3lj7DnmoTnp7Dlkbw8L3NwYW4+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuaWNrLWludmFsaWQiPuaYteensOmVv+W6pjItMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImVtYWlsIj7pgq7nrrE8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJlbWFpbCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiB2YWx1ZT0ie3suVXNlci5FbWFpbH19IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuiBlOezu+mCrueuse+8jOWNgeWIhumHjeimge+8gTwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImVtYWlsLWludmFsaWQiPumCrueuseagvOW8j+mUmeivrzwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0idXJsIj7nvZHlnYA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1cmwiIHR5cGU9InVybCIgbmFtZT0idXJsIiB2YWx1ZT0ie3suVXNlci5Vcmx9fSIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXJsLWludmFsaWQiPue9keWdgOagvOW8j+mUmeivrzwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQgYmlvIiBuYW1lPSJiaW8iIGlkPSJiaW8iPnt7LlVzZXIuQmlvfX08L3RleHRhcmVhPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5L+u5pS5PC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigicHJvZmlsZS1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJ1c2VyIiwicnVsZXMiOiJhbHBoYV9udW1lcmljfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6Im5pY2siLCJydWxlcyI6Im1pbl9sZW5ndGhbMl18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6ImVtYWlsIiwicnVsZXMiOiJ2YWxpZF9lbWFpbCJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoidXJsIiwicnVsZXMiOiJ2YWxpZF91cmwifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwcm9maWxlJykuYWpheFN1Ym1pdChmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZighanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwgfj6FfAgwAAAIMAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHNldHRpbmcuaHRtbDxmb3JtIGlkPSJzZXR0aW5nLWZvcm0iIGNsYXNzPSJmb3JtIGZvcm0tYWxpZ24iIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvIiBtZXRob2Q9InBvc3QiPg0KICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS11cmwiPuermeeCueWcsOWdgDwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ic2l0ZS11cmwiIGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0ic2l0ZV91cmwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV91cmxgfX0iLz4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXRpdGxlIj7nq5nngrnkuLvmoIfpopg8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdGl0bGUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfdGl0bGUiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9InNpdGUtc3ViLXRpdGxlIj7nq5nngrnlia/moIfpopg8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9InNpdGUtc3ViLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3N1Yl90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3N1Yl90aXRsZWB9fSIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9InNpdGUta2V5d29yZHMiPk1ldGHlhbPplK7lrZc8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9InNpdGUta2V5d29yZHMiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfa2V5d29yZHMiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLWRlc2MiPk1ldGHnq5nngrnku4vnu408L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9InNpdGUtZGVzYyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9kZXNjcmlwdGlvbiIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9ImFydGljbGUtc2l6ZSI+5Y2V6aG15paH56ug5YiX6KGo5pWwPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJhcnRpY2xlLXNpemUiIGNsYXNzPSJpcHQiIHR5cGU9Im51bWJlciIgbmFtZT0iYXJ0aWNsZV9zaXplIiB2YWx1ZT0ie3tTZXR0aW5nIGBhcnRpY2xlX3NpemVgfX0iIG1heD0iMTAiIG1pbj0iMyIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGhlbWUiPuS4u+mimOebruW9leWQjTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aGVtZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aGVtZSIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV90aGVtZWB9fSIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kuLvpopjljbPmjIflkJHnmoTmqKHmnb/nm67lvZXvvIzlhbfkvZPlhoXlrrnor7flj4LogIMgZGVmYXVsdCDnm67lvZXvvIjljbMgZGVmYXVsdCDkuLvpopjvvIk8L3NwYW4+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNpdGVfdGhlbWVfZGVmIiB2YWx1ZT0iZGVmYXVsdCIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9ImdvLW1hcmtkb3duIj5Hb+a4suafk01hcmtkb3duPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJnby1tYXJrZG93biIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duIiB2YWx1ZT0ie3tTZXR0aW5nIGBlbmFibGVfZ29fbWFya2Rvd25gfX0iLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBibG9jayI+6buY6K6k5YWz6Zet77yM5L2/55So5YmN56uvbWFya2VkLmpz5riy5p+T77yM5aGrdHJ1ZeaXtuW8gOWQrzwvc3Bhbj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duX2RlZiIgdmFsdWU9ImZhbHNlIi8+DQogICAgPC9wPg0KICAgIDxwPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZg8L2J1dHRvbj4NCiAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vc2V0dGluZy9jdXN0b20vIj7oh6rlrprkuYnphY3nva48L2E+DQogICAgPC9wPg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI3NldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiIDoganNvbi5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCO7KYB4fCgAAHwoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHZpZXdcYWRtaW5cd3JpdGVfYXJ0aWNsZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9IuaWh+eroOagh+mimCIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPuaSsOWGmeaWh+eroOWGheWuue+8jOaUr+aMgWBtYXJrZG93bmDor63ms5Xpq5jkuq48L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOWUr+S4gOmTvuaOpSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuagh+etvjwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0idGFnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWciIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTmoIfnrb4iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCI+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQiPuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2FydGljbGVzLyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCL7KdHwhDAAAIQwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcYWRtaW5cd3JpdGVfcGFnZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9Iumhtemdouagh+mimCIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPuaSsOWGmemhtemdouWGheWuue+8jOaUr+aMgWBtYXJrZG93bmDor63ms5Xpq5jkuq48L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumhtemdoueahOWUr+S4gOmTvuaOpSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoIj7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCI+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPue9rumhtumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ibGluayIgaWQ9ImlzLWxpbmsiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9wYWdlcy8iOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhyW1VpfAwAAHwMAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABEAAAB2aWV3XGFkbWluLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT57ey5UaXRsZX19IC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2FkbWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi92YWxpZGF0ZS5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8ZGl2IGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIGNsZWFyIj4NCiAgICAgICAgPGgzIGNsYXNzPSJsb2dvIGxlZnQiPkZ4aC5HbyAtIDxzcGFuPnt7LlRpdGxlfX08L3NwYW4+PC9oMz4NCiAgICAgICAgPGRpdiBjbGFzcz0ibmF2IGxlZnQgcmVsYXRpdmUiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImRhc2hib2FyZCBsZWZ0IiBocmVmPSIvYWRtaW4vIj48aSBjbGFzcz0iZmEgZmEtZGFzaGJvYXJkIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImFydGljbGUgbGVmdCIgaHJlZj0iL2FkbWluL2FydGljbGVzLyIgdGl0bGU9IuaWh+eroCI+PGkgY2xhc3M9ImZhIGZhLWNvcHkiPjwvaT48L2E+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9InBhZ2VzIGxlZnQiIGhyZWY9Ii9hZG1pbi9wYWdlcy8iIHRpdGxlPSLni6znq4vpobXpnaIiPjxpIGNsYXNzPSJmYSBmYS1wYXN0ZSI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJjb21tZW50cyBsZWZ0IiBocmVmPSIvYWRtaW4vY29tbWVudHMvIiB0aXRsZT0i6K+E6K66Ij48aSBjbGFzcz0iZmEgZmEtY29tbWVudHMiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iZmlsZXMgbGVmdCIgaHJlZj0iL2FkbWluL2ZpbGVzLyIgdGl0bGU9IuWqkuS9k+aWh+S7tiI+PGkgY2xhc3M9ImZhIGZhLWluYm94Ij48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9InBsdWdpbnMgbGVmdCIgaHJlZj0iL2FkbWluL3BsdWdpbnMvIiB0aXRsZT0i5o+S5Lu2Ij48aSBjbGFzcz0iZmEgZmEtZ2VhcnMiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0ic2V0dGluZyBsZWZ0IiBocmVmPSIvYWRtaW4vc2V0dGluZy8iIHRpdGxlPSLorr7nva4iPjxpIGNsYXNzPSJmYSBmYS1jb2ciPjwvaT48L2E+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8YSBjbGFzcz0ib3V0IG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvbG9nb3V0LyIgdGl0bGU9IumAgOWHuiI+PGkgY2xhc3M9ImZhIGZhLXBvd2VyLW9mZiBmYS1sZyI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9InByb2ZpbGUgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii9hZG1pbi9wcm9maWxlLyIgdGl0bGU9IuaIkSI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT48L2E+DQogICAgICAgIDxhIGNsYXNzPSJmcm9udCBuYXYtaXRlbSByaWdodCIgaHJlZj0iLyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSLmn6XnnIvnvZHnq5kiPjxpIGNsYXNzPSJmYSBmYS1leHRlcm5hbC1saW5rIj48L2k+PC9hPg0KICAgIDwvZGl2Pg0KPC9kaXY+DQp7QENvbnRlbnR9DQo8ZGl2IGlkPSJmb290ZXIiIGNsYXNzPSJjbGVhciI+DQog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YXNzPSJmYSBmYS1xdW90ZS1yaWdodCI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+e3tlbmR9fXt7ZW5kfX0NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LXNob3ciIGNsYXNzPSJ0ZXh0LWNlbnRlciI+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGVuYWJsZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+e3tlbHNlfX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1yZWQiPuacrOaWh+WFs+mXreS6huivhOiuujwvYnV0dG9uPnt7ZW5kfX0NCiAgICA8L2Rpdj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgY2xhc3M9ImhpZGUgY2xlYXIgdGV4dC1jZW50ZXIgZm9ybSIgYWN0aW9uPSIvY29tbWVudC97ey5Db250ZW50LklkfX0vIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8gbGVmdCB0ZXh0LXJpZ2h0Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIGMtYXZhdGFyLWZpZWxkIj4NCiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBudWxsIiBzcmM9Ii9zdGF0aWMvaW1nL3NpdGUucG5nIiBhbHQ9IiIgaWQ9ImNvbW1lbnQtYXZhdGFyIi8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5vdC1tZSBibG9jayIgaHJlZj0iIyI+5LiN5piv5oiRPzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mby1maWVsZHMgaGlkZSI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLnp7DlkbwiIGlkPSJjb21tZW50LWF1dGhvciIvPjwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6YKu566xIiBpZD0iY29tbWVudC1lbWFpbCIvPiA8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgcGxhY2Vob2xkZXI9Iue9keWdgCIgaWQ9ImNvbW1lbnQtdXJsIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY29tbWVudC1wYXJlbnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIG5hbWU9InBpZCIvPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWNvbnRlbnQgdGV4dC1sZWZ0IHJpZ2h0Ij4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuWPkeihqOivhOiuujwvYnV0dG9uPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGJsIGxibC1ncmVlbiBjYW5jZWwtcmVwbHkiIHR5cGU9ImJ1dHRvbiI+5Y+W5raI5Zue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Pg0KPC9odG1sPlBLBwiQ+dTAdQEAAHUBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGRlZmF1bHRcaG9tZS5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iLz4NCiAgICA8dGl0bGU+e3tpZiAuVGl0bGV9fXt7LlRpdGxlfX0gLSB7e2VuZH19e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC90aXRsZT4NCiAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRnhoR28gQmxvZyIgLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL3N0eWxlLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19IC0gUlNTIDIuMCIgaHJlZj0iL3Jzcy54bWwiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIi8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8bmF2IGlkPSJuYXYiIGNsYXNzPSJjbGVhciB0ZXh0LWNlbnRlciI+DQogICAgPHVsPg0KICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iLyI+5paH56ugPC9hPjwvbGk+DQogICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvYWJvdXQtbWUuaHRtbCI+5YWz5LqOPC9hPjwvbGk+DQogICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvZnJpZW5kcy5odG1sIj7lpb3lj4s8L2E+PC9saT4NCiAgICA8L3VsPg0KPC9uYXY+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8cD4NCiAgICAgICAgPGEgY2xhc3M9IndlaWJvIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX3dlaWJvYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIj48L2k+V2VpYm88L2E+DQogICAgICAgIDxhIGNsYXNzPSJnaXQiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZ2l0aHViYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWdpdGh1YiI+PC9pPkdpdEh1YjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImVtYWlsIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX2VtYWlsYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlIj48L2k+RW1haWw8L2E+DQogICAgICAgIDxhIGNsYXNzPSJyc3MiIGhyZWY9Ii9yc3MueG1sIiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXJzcyI+PC9pPlJTUzwvYT57e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KICAgIDwvcD4NCiAgICA8c3Bhbj5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuIFByb3VkbHkgcHVibGlzaGVkIHdpdGggRnhoLkdvLjwvc3Bhbj4NCiAgICA8YSBpZD0iZ28tdG9wIiBocmVmPSIjIiBjbGFzcz0ibGJsIGhpZGUgbGJsLWJsdWUiIHRpdGxlPSLlm57liLDpobbpg6giPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy11cCBmYS1sZyI+PC9pPjwvYT4NCjwvZm9vdGVyPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvaG9tZS5qcyI+PC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCJUFtPyUCQAAlAkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcZGVmYXVsdFxpbmRleC5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxhcnRpY2xlIGNsYXNzPSJjbGVhciIgaWQ9ImFydGljbGUte3suSWR9fSI+DQogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEgbGVmdCB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgICA8IS0tPHAgY2xhc3M9ImxibCBsYmwtYmx1ZSBhdXRob3IiPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+5YKF5bCP6buRPC9wPi0tPnt7aWYgZ3QgLkNvbW1lbnROdW0gMH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1yZWQgY29tbWVudHMiPjxhIGhyZWY9Int7Lkxpbmt9fSNjb21tZW50Ij48aSBjbGFzcz0iZmEgZmEtY29tbWVudHMiPjwvaT48c3Ryb25nPnt7LkNvbW1lbnROdW19fSDihIM8L3N0cm9uZz48L2E+PC9wPnt7ZW5kfX0NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIj48aSBjbGFzcz0iZmEgZmEtZXllIj48L2k+PHN0cm9uZz57ey5IaXRzfX0g4oSJPC9zdHJvbmc+PC9wPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtZ3JheSB0aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPjxzdHJvbmc+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+DQogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5TdW1tYXJ5fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX17e2lmIC5UYWdTdHJpbmd9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWcgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdGFncyI+PC9pPnt7LlRhZ1N0cmluZ319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iaW5saW5lLWJsb2NrIHJlYWQgcmlnaHQiIGhyZWY9Int7Lkxpbmt9fSI+PGkgY2xhc3M9ImZhIGZhLXNlYXJjaCI+PC9pPue7p+e7remYheivuzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9hcnRpY2xlPnt7ZW5kfX0NCiAgICA8ZGl2IGNsYXNzPSJwYWdlciB0ZXh0LWNlbnRlciI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICAgICAgPGEgaHJlZj0iL3Ave3sufX0vIiBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+e3sufX08L2E+e3tlbmR9fQ0KICAgIDwvZGl2Pg0KPC9kaXY+UEsHCO7wgWs2BgAANgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcZGVmYXVsdFxwYWdlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIiIGlkPSJhcnRpY2xlLUlkIj57e3dpdGggLlBhZ2V9fQ0KICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj4NCiAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImF1dGhvciBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+e3suVXNlci5OaWNrfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2aWV3cyBpbmxpbmUtYmxvY2sgcmlnaHQiPumYheivuyZuYnNwOyZuYnNwOzxzcGFuPnt7LkhpdHN9fTwvc3Bhbj4mbmJzcDsmbmJzcDvmrKE8L3NwYW4+DQogICAgICAgIDwvcD57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KPC9kaXY+UEsHCFwAzt0EAwAABAMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACgAAAHZpZXdcbGluZy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xsaW5nXGFydGljbGUuaHRtbDxkaXYgaWQ9ImFydGljbGUtY29udGFpbmVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxhcnRpY2xlIGNsYXNzPSJjbGVhciBhcnRpY2xlLXNpbmdsZSByZWxhdGl2ZSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIGFic29sdXRlIj57ey5IaXRzfX08L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJ0aW1lLWluZm8iPnt7aWYgLlVzZXJ9fTxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDt7e2VuZH195Y+R6KGo5LqOJm5ic3A7Jm5ic3A7Jm5ic3A7e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIllZWVkg5bm0IE1NIOaciCBERCDml6UifX08L3A+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPuagh+etvu+8mnt7LlRhZ1N0cmluZ319PC9zcGFuPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCOoUY3hZAwAAWQMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0icmVsYXRpdmUiPg0KICAgIDxoNCBpZD0iY29tbWVudC10aXRsZSI+5paH56ug6K+E6K66PC9oND4NCiAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+e3suQ29udGVudC5Db21tZW50TnVtfX08L2E+PC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIGNsZWFyIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkgbGJsIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LklkfX0iPuWbnuWkjTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHA+PGEgY2xhc3M9ImMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9ImMtdGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NIOaciCBERCDml6UgSEgg5pe2IG1tIOWIhiJ9fTwvc3Bhbj48L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJj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ci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvbGluZy5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIgY2xhc3M9ImxlZnQiLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCIgY2xhc3M9ImxlZnQiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICB7e0h0bWwgYDwhLS08aDQgaWQ9ImhlYWRlci1zdWIiIGNsYXNzPSJsZWZ0Ij57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4tLT5gfX0NCiAgICAgICAgPG5hdiBpZD0ibmF2IiBjbGFzcz0icmlnaHQiPg0KICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvIj7mlofnq6A8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iL2Fib3V0LW1lLmh0bWwiPuWFs+S6jjwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvZnJpZW5kcy5odG1sIj7lpb3lj4s8L2E+PC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvbmF2Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgY2xlYXIiPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+R28gwqkgMjAxNCBBbGwgcmlnaHRzIHJlc2VydmVkLjwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InJpZ2h0Ij5Qcm91ZGx5IHB1Ymxpc2hlZCB3aXRoIEZ4aC5Hby48L3NwYW4+DQogICAgPC9kaXY+DQogICAgPGEgaWQ9ImdvLXRvcCIgaHJlZj0iIyIgY2xhc3M9ImxibCBoaWRlIGxibC1ibHVl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" \ No newline at end of file diff --git a/app/model/content.go b/app/model/content.go index beed7f5..b97c644 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -53,17 +53,18 @@ func (cnt *Content) TagString() string { // get content link. func (cnt *Content) Link() string { if cnt.IsLinked { - return "/"+cnt.Slug + ".html" + return "/" + cnt.Slug + ".html" } return fmt.Sprintf("/%s/%d/%s.html", cnt.Type, cnt.Id, cnt.Slug) } // get content text. func (cnt *Content) Content() string { + txt := strings.Replace(cnt.Text, "", "", -1) if GetSetting("enable_go_markdown") == "true" { - return utils.Markdown2Html(cnt.Text) + return utils.Markdown2Html(txt) } - return cnt.Text + return txt } // get content summary. @@ -211,30 +212,30 @@ func LoadContents() { articleIndex := make([]int, 0) pageIndex := make([]int, 0) filepath.Walk(filepath.Join(Storage.dir, "content"), func(_ string, info os.FileInfo, err error) error { - if err == nil { - if info.IsDir() { - return nil - } - c := new(Content) - file := strings.Replace("content/" + info.Name(), filepath.Ext(info.Name()), "", -1) - Storage.Get(file, c) - if c.Id > 0 { - if c.Status != "DELETE" { - contents[c.Id] = c - if c.Type == "article" { - articleIndex = append(articleIndex, c.Id) - } - if c.Type == "page" { - pageIndex = append(pageIndex, c.Id) - } + if err == nil { + if info.IsDir() { + return nil + } + c := new(Content) + file := strings.Replace("content/"+info.Name(), filepath.Ext(info.Name()), "", -1) + Storage.Get(file, c) + if c.Id > 0 { + if c.Status != "DELETE" { + contents[c.Id] = c + if c.Type == "article" { + articleIndex = append(articleIndex, c.Id) } - if c.Id > contentMaxId { - contentMaxId = c.Id + if c.Type == "page" { + pageIndex = append(pageIndex, c.Id) } } + if c.Id > contentMaxId { + contentMaxId = c.Id + } } - return nil - }) + } + return nil + }) sort.Sort(sort.Reverse(sort.IntSlice(articleIndex))) sort.Sort(sort.Reverse(sort.IntSlice(pageIndex))) contentsIndex["article"] = articleIndex @@ -242,9 +243,9 @@ func LoadContents() { } func StartContentsTimer() { - time.AfterFunc(time.Duration(10) * time.Minute, func() { - println("write contents in 10 min timer") - SyncContents() - StartContentsTimer() - }) + time.AfterFunc(time.Duration(10)*time.Minute, func() { + println("write contents in 10 min timer") + SyncContents() + StartContentsTimer() + }) } diff --git a/app/model/locker.go b/app/model/locker.go new file mode 100644 index 0000000..0b6ad1e --- /dev/null +++ b/app/model/locker.go @@ -0,0 +1,9 @@ +package model + +import "sync" + +var locker sync.Mutex + +func init(){ + locker = sync.Mutex{} +} diff --git a/app/model/storage.go b/app/model/storage.go index 5a1123c..132fa68 100644 --- a/app/model/storage.go +++ b/app/model/storage.go @@ -11,7 +11,7 @@ import ( var ( appVersion int - Storage *jsonStorage + Storage *jsonStorage ) type jsonStorage struct { @@ -48,7 +48,10 @@ func (jss *jsonStorage) Get(key string, v interface{}) { } func (jss *jsonStorage) Set(key string, v interface{}) { - bytes, e := json.MarshalIndent(v, "", " ") + locker.Lock() + defer locker.Unlock() + + bytes, e := json.Marshal(v) if e != nil { println("json encode '" + key + "' error") return @@ -60,6 +63,10 @@ func (jss *jsonStorage) Set(key string, v interface{}) { } } +func (jss *jsonStorage) Dir(name string) { + os.MkdirAll(path.Join(jss.dir, name), os.ModePerm) +} + func writeDefaultData() { // write user u := new(User) @@ -207,7 +214,7 @@ func Init(v int) { Storage.Init("data") } -func All(){ +func All() { loadAllData() StartContentsTimer() } diff --git a/app/upgrade/v20140130.go b/app/upgrade/v20140130.go index dabc89b..15dfc20 100644 --- a/app/upgrade/v20140130.go +++ b/app/upgrade/v20140130.go @@ -22,10 +22,12 @@ func upgrade_20140130(app *GoInk.App) bool { model.SetSetting("enable_go_markdown_def", "false") model.SetSetting("site_theme", "default") model.SetSetting("site_theme_def", "default") + model.SetSetting("c_home_avatar","/static/img/site.png") model.SyncSettings() // init plugin plugin.Init() + model.Storage.Dir("plugin") // remove static files os.RemoveAll(app.Get("view_dir")) diff --git a/app/upgrade/v20140131.go b/app/upgrade/v20140131.go new file mode 100644 index 0000000..4518c93 --- /dev/null +++ b/app/upgrade/v20140131.go @@ -0,0 +1,32 @@ +package upgrade + +import ( + "github.com/fuxiaohei/GoBlog/GoInk" + "github.com/fuxiaohei/GoBlog/app/cmd" + "os" + "path" +) + +func init() { + cmd.SetUpgradeScript(20140131, upgrade_20140131) +} + +func upgrade_20140131(app *GoInk.App) bool { + + // re-write all data to non-indent json + /*model.All() + model.SyncContents() + model.SyncFiles() + model.SyncReaders() + model.SyncSettings() + model.SyncTokens() + model.SyncUsers() + model.SyncVersion()*/ + + // update ling template + os.RemoveAll(path.Join(app.Get("view_dir"), "ling")) + cmd.ExtractBundleBytes() + + + return true +} diff --git a/static/css/ling.css b/static/css/ling.css index 2c3e50f..6ef693f 100644 --- a/static/css/ling.css +++ b/static/css/ling.css @@ -1 +1,140 @@ -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}html,body{background:#f3f3f3}#header{background:#0093c4;min-width:120px;padding:40px 0 48px 0;color:#fbfbfb}#header a:hover{color:#fff;text-shadow:0 0 3px #333;-moz-text-shadow:0 0 3px #333;-webkit-text-shadow:0 0 3px #333}#header-img{width:96px;height:96px;border-radius:50px;-moz-border-radius:50px;-webkit-border-radius:50px}#header-h{line-height:94px;color:#fbfbfb;padding:0;margin-left:24px}#header-h a{color:#fbfbfb}#nav{line-height:90px}#nav li{line-height:50px;margin-left:44px}#nav li a{font-size:18px;color:#f3f3f3;display:block}#nav li a:hover{color:#fff;text-shadow:0 0 3px #333;-moz-text-shadow:0 0 3px #333;-webkit-text-shadow:0 0 3px #333}#footer{padding:30px 40px;color:#999}#main{margin:30px auto}#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4}#article-container{height:100%}#article-container .comments,#article-container .views{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container .comments{width:56px;height:56px;border-radius:36px;-moz-border-radius:36px;-webkit-border-radius:36px;line-height:56px;font-size:24px;padding:0;margin-top:40px;margin-left:8px;border:6px solid #fff;box-shadow:0 0 2px #999;-moz-box-shadow:0 0 2px #999;-webkit-box-shadow:0 0 2px #999}#article-container .comments a{color:#fff}#article-container .comments:hover{box-shadow:0 0 4px #666;-moz-box-shadow:0 0 4px #666;-webkit-box-shadow:0 0 4px #666}#article-container .views{top:14px;left:0;width:36px;height:36px;line-height:36px;border-radius:30px;-moz-border-radius:30px;-webkit-border-radius:30px;padding:0;border:4px solid #fff;box-shadow:0 0 2px #999;-moz-box-shadow:0 0 2px #999;-webkit-box-shadow:0 0 2px #999}#article-container .main{margin-left:116px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;box-shadow:0 1px 2px #bbb;-moz-box-shadow:0 1px 2px #bbb;-webkit-box-shadow:0 1px 2px #bbb;background:#fff;padding:18px 24px}#article-container .main:before{content:"";display:block;border:11px solid transparent;border-right-color:#fff;position:absolute;top:63px;left:-22px}#article-container .main .title{font-size:28px;padding-bottom:24px}#article-container .main .time-info{color:#999;margin-bottom:20px;padding-bottom:20px;border-bottom:1px dashed #ddd;text-indent:1em;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container article{margin-bottom:50px}#article-container .article-single .main{margin-left:0}#article-container .article-single .main:before{display:none}#article-container .article-single .meta{right:44px;top:-36px}#article-container .article-single .views{width:56px;height:56px;border-radius:36px;-moz-border-radius:36px;-webkit-border-radius:36px;line-height:56px;font-size:24px;padding:0;border:6px solid #fff}#article-container .tag{color:#999}#article-pager{margin-left:116px}#article-pager .item{margin:0;color:#fff;background:#999;padding:12px 18px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px}#article-pager .item:hover{background:#0079bc}#comment{border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;box-shadow:0 1px 2px #bbb;-moz-box-shadow:0 1px 2px #bbb;-webkit-box-shadow:0 1px 2px #bbb;background:#fff;padding:18px 24px}#comment .meta{right:-24px;top:-30px}#comment .meta .comments{margin-left:0;margin-top:0}#comment-list .comment{margin-bottom:32px}#comment-list .c-avatar{margin-right:18px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;margin-top:6px}#comment-list .c-meta p{margin-bottom:0}#comment-list .c-meta .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#comment-list .c-meta .c-author{font-size:16px;color:#333;display:block}#comment-list .c-meta .c-author:hover{color:#005b9b}#comment-list .c-meta .c-reply{color:#fff;background:#ddd;padding:3px 10px}#comment-list .c-meta .c-reply:hover{background-color:#0079bc}#comment-list .c-content{padding-top:4px}#comment-list .c-check{font-size:13px;color:#e64346;margin-left:12px}#comment-list .c-p-md{margin-top:12px;font-size:12px;line-height:20px;color:#666}#comment-show{margin-bottom:32px}#comment-title{margin-bottom:20px;padding-bottom:20px;border-bottom:1px dashed #ddd}#comment-form{width:80%;margin:auto;margin-bottom:30px}#comment-form .c-info{width:26%}#comment-form .c-info .ipt{width:100%;box-sizing:border-box;min-width:0}#comment-form .c-content{width:70%}#comment-form .c-avatar{border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;margin-top:6px;width:50px}#comment-form .reply-md{margin-bottom:16px;font-size:12px;line-height:20px;color:#666}#comment-form .cancel-reply{border:none;margin-left:18px;display:none}#comment-form .cancel-reply:hover{cursor:pointer}#comment-content{width:100%;box-sizing:border-box;height:180px;resize:none}@media only screen and (max-width:960px){.container960{padding:0 24px;width:auto}}@media only screen and (max-width:760px){.container960{padding:0 24px;width:auto}#article-container .main{margin-left:0}#article-container .meta{display:none}#article-container .main:before{display:none}#comment-form .c-info,#comment-form .c-content{width:100%;float:left}#comment-form .c-info{text-align:left}#nav,#header-h{line-height:50px}}@media only screen and (max-width:560px){.container960{padding:0 24px;width:auto}#header-h{margin-left:0}#header-img{display:none}#comment-form{width:100%}#nav{float:left}#nav li{margin-left:0;margin-right:44px}} \ No newline at end of file +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0} +header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block} +audio,canvas,video{display:inline-block} +table{border-collapse:collapse;border-spacing:0} +fieldset,img{border:0} +address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal} +ol,ul{list-style:none} +caption,th{text-align:left} +h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal} +q:before,q:after{content:''} +abbr,acronym{border:0;font-variant:normal} +sup{vertical-align:text-top} +sub{vertical-align:text-bottom} +input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit} +legend{color:#000} +html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb} +a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b} +p{margin-bottom:18px} +h1,h2,h3,h4,h5,h6{padding:12px 0} +h1{font-size:28px} +h2{font-size:24px} +h3{font-size:21px} +h4{font-size:19px} +h5{font-size:16px} +h6{font-size:14px} +.text-left{text-align:left} +.text-right{text-align:right} +.text-center{text-align:center} +.left{float:left} +.right{float:right} +.absolute{position:absolute} +.relative{position:relative} +.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0} +.vertical-middle{vertical-align:middle} +.inline{display:inline} +.inline-block{display:inline-block} +.block{display:block} +.fade-out{opacity:0} +.hide{display:none !important} +.container{max-width:1200px;margin:auto} +.container960{max-width:960px;margin:auto} +.grid-1-2{width:50%} +.grid-1-3{width:33.3333%} +.grid-1-4{width:25%} +.grid-1-5{width:20%} +.grid-1-6{width:16.6666%} +.grid-2-3{width:66.6666%} +.grid-3-4{width:75%} +.grid-3-5{width:60%} +.grid-4-5{width:80%} +.grid-5-6{width:83.3333%} +input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif} +.form legend{font-size:18px;margin-bottom:14px} +.form label{display:inline-block;margin-right:12px} +.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc} +.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal} +.form .field{margin-bottom:24px} +.form .invalid{margin-right:12px} +.form .tip{font-size:13px;color:#999;margin-left:12px} +.form-vertical label{display:block;margin-bottom:8px} +.form-vertical .ipt{width:100%;box-sizing:border-box} +.form-vertical .invalid{margin-right:0;margin-top:6px} +.form-align label{display:inline-block;min-width:60px;text-align:right} +.form-align .invalid{margin-right:0;margin-top:6px} +.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer} +a.btn{line-height:36px;color:#fff} +.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a} +.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b} +.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462} +.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} +.lbl-red{background-color:#e64346;color:#fbfbfb} +a.lbl{line-height:26px} +a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb} +.lbl-blue{background-color:#0079bc;color:#fbfbfb} +a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb} +.lbl-green{background-color:#7ab277;color:#fbfbfb} +a.lbl-green:hover{background-color:#649462;color:#fbfbfb} +.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333} +.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff} +.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb} +.pager .current:hover{background-color:#0079bc} +.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold} +.markdown h1{font-size:24px} +.markdown h2{font-size:21px} +.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd} +.markdown h3{font-size:19px} +.markdown h4{font-size:18px} +.markdown h5{font-size:16px} +.markdown h6{font-size:14px} +.markdown p{margin-bottom:10px} +.markdown ul{list-style:disc inside} +.markdown ol{list-style:decimal inside} +.markdown code{font-family:Consolas,"Courier New",Arial} +.markdown p code{color:#c7383a} +.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0} +.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0} +.markdown ol,.markdown ul{margin:12px 24px} +.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block} +.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px} +.markdown table thead{background:#f6f6f6} +html,body{background:#f3f3f3} +#header{background:#0093c4;min-width:120px;padding:40px 0 48px 0;color:#fbfbfb}#header a:hover{color:#fff;text-shadow:0 0 3px #333;-moz-text-shadow:0 0 3px #333;-webkit-text-shadow:0 0 3px #333} +#header-img{width:96px;height:96px;border-radius:50px;-moz-border-radius:50px;-webkit-border-radius:50px} +#header-h{line-height:94px;color:#fbfbfb;padding:0;margin-left:24px}#header-h a{color:#fbfbfb} +#nav{line-height:90px}#nav li{line-height:50px;margin-left:44px}#nav li a{font-size:18px;color:#f3f3f3;display:block}#nav li a:hover{color:#fff;text-shadow:0 0 3px #333;-moz-text-shadow:0 0 3px #333;-webkit-text-shadow:0 0 3px #333} +#footer{padding:30px 40px;color:#999} +#main{margin:30px auto} +#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4} +#article-container{height:100%}#article-container .comments,#article-container .views{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} +#article-container .comments{width:56px;height:56px;border-radius:36px;-moz-border-radius:36px;-webkit-border-radius:36px;line-height:56px;font-size:24px;padding:0;margin-top:40px;margin-left:8px;border:6px solid #fff;box-shadow:0 0 2px #999;-moz-box-shadow:0 0 2px #999;-webkit-box-shadow:0 0 2px #999}#article-container .comments a{color:#fff} +#article-container .comments:hover{box-shadow:0 0 4px #666;-moz-box-shadow:0 0 4px #666;-webkit-box-shadow:0 0 4px #666} +#article-container .views{top:14px;left:0;width:36px;height:36px;line-height:36px;border-radius:30px;-moz-border-radius:30px;-webkit-border-radius:30px;padding:0;border:4px solid #fff;box-shadow:0 0 2px #999;-moz-box-shadow:0 0 2px #999;-webkit-box-shadow:0 0 2px #999} +#article-container .main{margin-left:116px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;box-shadow:0 1px 2px #bbb;-moz-box-shadow:0 1px 2px #bbb;-webkit-box-shadow:0 1px 2px #bbb;background:#fff;padding:18px 24px}#article-container .main:before{content:"";display:block;border:11px solid transparent;border-right-color:#fff;position:absolute;top:63px;left:-22px} +#article-container .main .title{font-size:28px;padding-bottom:24px} +#article-container .main .time-info{color:#999;margin-bottom:20px;padding-bottom:20px;border-bottom:1px dashed #ddd;text-indent:1em;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} +#article-container article{margin-bottom:50px} +#article-container .article-single .main{margin-left:0}#article-container .article-single .main:before{display:none} +#article-container .article-single .meta{right:44px;top:-36px} +#article-container .article-single .views{width:56px;height:56px;border-radius:36px;-moz-border-radius:36px;-webkit-border-radius:36px;line-height:56px;font-size:24px;padding:0;border:6px solid #fff} +#article-container .tag{color:#999} +#article-pager{margin-left:116px}#article-pager .item{margin:0;color:#fff;background:#999;padding:12px 18px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px}#article-pager .item:hover{background:#0079bc} +#comment{border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;box-shadow:0 1px 2px #bbb;-moz-box-shadow:0 1px 2px #bbb;-webkit-box-shadow:0 1px 2px #bbb;background:#fff;padding:18px 24px}#comment .meta{right:-24px;top:-30px}#comment .meta .comments{margin-left:0;margin-top:0} +#comment-list .comment{margin-bottom:32px} +#comment-list .c-avatar{margin-right:18px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;margin-top:6px} +#comment-list .c-meta p{margin-bottom:0} +#comment-list .c-meta .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} +#comment-list .c-meta .c-author{font-size:16px;color:#333;display:block}#comment-list .c-meta .c-author:hover{color:#005b9b} +#comment-list .c-meta .c-reply{color:#fff;background:#ddd;padding:3px 10px}#comment-list .c-meta .c-reply:hover{background-color:#0079bc} +#comment-list .c-content{padding-top:4px} +#comment-list .c-check{font-size:13px;color:#e64346;margin-left:12px} +#comment-list .c-p-md{margin-top:12px;font-size:12px;line-height:20px;color:#666} +#comment-show{margin-bottom:32px} +#comment-title{margin-bottom:20px;padding-bottom:20px;border-bottom:1px dashed #ddd} +#comment-form{width:80%;margin:auto;margin-bottom:30px}#comment-form .c-info{width:26%}#comment-form .c-info .ipt{width:100%;box-sizing:border-box;min-width:0} +#comment-form .c-content{width:70%} +#comment-form .c-avatar{border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;margin-top:6px;width:50px} +#comment-form .reply-md{margin-bottom:16px;font-size:12px;line-height:20px;color:#666} +#comment-form .cancel-reply{border:none;margin-left:18px;display:none}#comment-form .cancel-reply:hover{cursor:pointer} +#comment-content{width:100%;box-sizing:border-box;height:180px;resize:none} +@media only screen and (max-width:960px){.container960{padding:0 24px;width:auto}}@media only screen and (max-width:760px){.container960{padding:0 24px;width:auto} #article-container .main{margin-left:0} #article-container .meta{display:none} #article-container .main:before{display:none} #comment-form .c-info,#comment-form .c-content{width:100%;float:left} #comment-form .c-info{text-align:left} #nav,#header-h{line-height:50px} #footer span{float:none;text-align:center}}@media only screen and (max-width:560px){.container960{padding:0;width:auto} #header-h{margin-left:0} #header-img{display:none} #comment-form{width:100%} #nav{float:left}#nav li{margin-left:0;margin-right:44px}} diff --git a/static/css/style.css b/static/css/style.css index 6fd4331..c411dbb 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1 +1,143 @@ -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}html,body{background:url("../img/bg.png") repeat}#header{background:url("../img/header.gif") repeat #4c7298;min-width:120px;padding:30px 0;color:#fbfbfb}#header-img{width:96px;height:96px;background-color:#fff;border:1px solid #ccc;border-radius:50px;-moz-border-radius:50px;-webkit-border-radius:50px}#header-h{padding-top:24px;font-size:32px}#header-h a{color:#fff;font-weight:bold}#nav{height:54px;background-color:#fbfbfb;box-shadow:0 0 2px #bbb;-moz-box-shadow:0 0 2px #bbb;-webkit-box-shadow:0 0 2px #bbb;border-bottom:1px solid #ccc}#nav li{line-height:50px;padding:0 18px}#nav li a{font-size:16px;color:#333;padding:0 32px;display:block}#nav li a:hover{border-bottom:4px solid #0079bc}#nav.fixed{position:fixed;width:100%;top:0}#main{margin:30px auto}#footer{color:#ccc;background-color:#1c2429;padding:24px 0}#footer p{margin-bottom:9px;font-weight:bold;letter-spacing:1px}#footer p a{color:#ccc;margin:0 16px}#footer p a:hover{color:#fbfbfb}#footer p a .fa{margin-right:8px}#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4}#article-container .meta{width:108px;line-height:24px}#article-container .meta .fa{margin-right:8px}#article-container .meta .comments,#article-container .meta .views,#article-container .meta .time{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container .meta .time{color:#fff}#article-container .meta a{color:#fff}#article-container .meta a:hover{color:#fff}#article-container .main{margin-left:140px}#article-container h3.title{padding:8px 16px;background-color:#4c7298;border-top-left-radius:2px;border-top-right-radius:2px}#article-container h3.title a{color:#eee}#article-container h3.title a:hover{color:#fff}#article-container .content{background-color:#fff;border:1px solid #ccc;border-top:none;padding:18px 24px 24px}#article-container .info{margin-bottom:0;background-color:#fbfbfb;border:1px solid #ccc;border-top:none;border-bottom-left-radius:2px;border-bottom-right-radius:2px;color:#999}#article-container .info .fa{margin-right:8px}#article-container .info .share .fa{margin-right:0}#article-container .info>*{padding:6px 18px}#article-container .info>span{border-right:1px solid #ccc}#article-container .info .right{border-left:1px solid #ccc;border-right:none}#article-container .info .read{color:#999}#article-container .info .read:hover{background-color:#0079bc;color:#fbfbfb}#article-container .info .time,#article-container .info .views span{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container article{margin-bottom:48px}#comment{margin-top:-24px;border:1px solid #ccc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;padding:24px;background:#fff}#comment-form{width:80%;margin:auto}#comment-form .c-info{width:26%}#comment-form .c-info .ipt{width:100%;box-sizing:border-box;min-width:0}#comment-form .c-content{width:70%}#comment-form .c-avatar{width:48px;height:48px;padding:2px;border:1px solid #ccc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}#comment-form .reply-md{margin-bottom:16px;font-size:12px;line-height:20px;color:#666}#comment-form .cancel-reply{border:none;margin-left:18px;display:none}#comment-form .cancel-reply:hover{cursor:pointer}#comment-content{width:100%;box-sizing:border-box;height:180px;resize:none}#comment-list .c-avatar{width:48px;height:48px;padding:2px;border:1px solid #ccc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;margin-right:18px}#comment-list .comment{margin-bottom:18px;padding-bottom:18px;border-bottom:1px dashed #ddd}#comment-list .c-meta>*{margin-right:16px}#comment-list .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#comment-list .c-time .fa{margin-right:6px}#comment-list .c-reply{color:#999}#comment-list .c-reply:hover{color:#333}#comment-list .c-author{font-size:13px}#comment-list .c-author.admin{background-color:#e64346;color:#fbfbfb}#comment-list .c-p-md{margin-top:12px;font-size:12px;line-height:20px;color:#666}#comment-list .c-section{max-width:830px}#comment-list .c-check{font-size:13px;color:#e64346}#comment-list .c-check .fa{margin-right:6px}@media only screen and (max-width:960px){.container960{padding:0 24px;width:auto}}@media only screen and (max-width:760px){.container960{padding:0 24px;width:auto}#article-container .main{margin-left:0}#article-container .meta.left{display:none}#comment-form .c-info,#comment-form .c-content{width:100%;float:left}#comment-form .c-info{text-align:left}}@media only screen and (max-width:560px){.container960{padding:0 24px;width:auto}#header-img{float:left;width:64px;height:64px}#header-h{padding:17px 0;font-size:24px}#header-sub{display:none}#article-container .tag{display:none}#comment-form{width:100%}}@media only screen and (max-width:480px){.container960{padding:0 24px;width:auto}#header-img{display:none}#header-sub{display:none}#comment-list .c-avatar{display:none}} \ No newline at end of file +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0} +header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block} +audio,canvas,video{display:inline-block} +table{border-collapse:collapse;border-spacing:0} +fieldset,img{border:0} +address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal} +ol,ul{list-style:none} +caption,th{text-align:left} +h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal} +q:before,q:after{content:''} +abbr,acronym{border:0;font-variant:normal} +sup{vertical-align:text-top} +sub{vertical-align:text-bottom} +input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit} +legend{color:#000} +html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb} +a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b} +p{margin-bottom:18px} +h1,h2,h3,h4,h5,h6{padding:12px 0} +h1{font-size:28px} +h2{font-size:24px} +h3{font-size:21px} +h4{font-size:19px} +h5{font-size:16px} +h6{font-size:14px} +.text-left{text-align:left} +.text-right{text-align:right} +.text-center{text-align:center} +.left{float:left} +.right{float:right} +.absolute{position:absolute} +.relative{position:relative} +.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0} +.vertical-middle{vertical-align:middle} +.inline{display:inline} +.inline-block{display:inline-block} +.block{display:block} +.fade-out{opacity:0} +.hide{display:none !important} +.container{max-width:1200px;margin:auto} +.container960{max-width:960px;margin:auto} +.grid-1-2{width:50%} +.grid-1-3{width:33.3333%} +.grid-1-4{width:25%} +.grid-1-5{width:20%} +.grid-1-6{width:16.6666%} +.grid-2-3{width:66.6666%} +.grid-3-4{width:75%} +.grid-3-5{width:60%} +.grid-4-5{width:80%} +.grid-5-6{width:83.3333%} +input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif} +.form legend{font-size:18px;margin-bottom:14px} +.form label{display:inline-block;margin-right:12px} +.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc} +.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal} +.form .field{margin-bottom:24px} +.form .invalid{margin-right:12px} +.form .tip{font-size:13px;color:#999;margin-left:12px} +.form-vertical label{display:block;margin-bottom:8px} +.form-vertical .ipt{width:100%;box-sizing:border-box} +.form-vertical .invalid{margin-right:0;margin-top:6px} +.form-align label{display:inline-block;min-width:60px;text-align:right} +.form-align .invalid{margin-right:0;margin-top:6px} +.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer} +a.btn{line-height:36px;color:#fff} +.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a} +.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b} +.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462} +.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} +.lbl-red{background-color:#e64346;color:#fbfbfb} +a.lbl{line-height:26px} +a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb} +.lbl-blue{background-color:#0079bc;color:#fbfbfb} +a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb} +.lbl-green{background-color:#7ab277;color:#fbfbfb} +a.lbl-green:hover{background-color:#649462;color:#fbfbfb} +.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333} +.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff} +.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb} +.pager .current:hover{background-color:#0079bc} +.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold} +.markdown h1{font-size:24px} +.markdown h2{font-size:21px} +.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd} +.markdown h3{font-size:19px} +.markdown h4{font-size:18px} +.markdown h5{font-size:16px} +.markdown h6{font-size:14px} +.markdown p{margin-bottom:10px} +.markdown ul{list-style:disc inside} +.markdown ol{list-style:decimal inside} +.markdown code{font-family:Consolas,"Courier New",Arial} +.markdown p code{color:#c7383a} +.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0} +.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0} +.markdown ol,.markdown ul{margin:12px 24px} +.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block} +.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px} +.markdown table thead{background:#f6f6f6} +html,body{background:url("../img/bg.png") repeat} +#header{background:url("../img/header.gif") repeat #4c7298;min-width:120px;padding:30px 0;color:#fbfbfb} +#header-img{width:96px;height:96px;background-color:#fff;border:1px solid #ccc;border-radius:50px;-moz-border-radius:50px;-webkit-border-radius:50px} +#header-h{padding-top:24px;font-size:32px}#header-h a{color:#fff;font-weight:bold} +#nav{height:54px;background-color:#fbfbfb;box-shadow:0 0 2px #bbb;-moz-box-shadow:0 0 2px #bbb;-webkit-box-shadow:0 0 2px #bbb;border-bottom:1px solid #ccc}#nav li{line-height:50px;padding:0 18px}#nav li a{font-size:16px;color:#333;padding:0 32px;display:block}#nav li a:hover{border-bottom:4px solid #0079bc} +#nav.fixed{position:fixed;width:100%;top:0} +#main{margin:30px auto} +#footer{color:#ccc;background-color:#1c2429;padding:24px 0}#footer p{margin-bottom:9px;font-weight:bold;letter-spacing:1px}#footer p a{color:#ccc;margin:0 16px}#footer p a:hover{color:#fbfbfb} +#footer p a .fa{margin-right:8px} +#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4} +#article-container .meta{width:108px;line-height:24px}#article-container .meta .fa{margin-right:8px} +#article-container .meta .comments,#article-container .meta .views,#article-container .meta .time{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} +#article-container .meta .time{color:#fff} +#article-container .meta a{color:#fff}#article-container .meta a:hover{color:#fff} +#article-container .main{margin-left:140px} +#article-container h3.title{padding:8px 16px;background-color:#4c7298;border-top-left-radius:2px;border-top-right-radius:2px}#article-container h3.title a{color:#eee}#article-container h3.title a:hover{color:#fff} +#article-container .content{background-color:#fff;border:1px solid #ccc;border-top:none;padding:18px 24px 24px} +#article-container .info{margin-bottom:0;background-color:#fbfbfb;border:1px solid #ccc;border-top:none;border-bottom-left-radius:2px;border-bottom-right-radius:2px;color:#999}#article-container .info .fa{margin-right:8px} +#article-container .info .share .fa{margin-right:0} +#article-container .info>*{padding:6px 18px} +#article-container .info>span{border-right:1px solid #ccc} +#article-container .info .right{border-left:1px solid #ccc;border-right:none} +#article-container .info .read{color:#999}#article-container .info .read:hover{background-color:#0079bc;color:#fbfbfb} +#article-container .info .time,#article-container .info .views span{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} +#article-container article{margin-bottom:48px} +#comment{margin-top:-24px;border:1px solid #ccc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;padding:24px;background:#fff} +#comment-form{width:80%;margin:auto}#comment-form .c-info{width:26%}#comment-form .c-info .ipt{width:100%;box-sizing:border-box;min-width:0} +#comment-form .c-content{width:70%} +#comment-form .c-avatar{width:48px;height:48px;padding:2px;border:1px solid #ccc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} +#comment-form .reply-md{margin-bottom:16px;font-size:12px;line-height:20px;color:#666} +#comment-form .cancel-reply{border:none;margin-left:18px;display:none}#comment-form .cancel-reply:hover{cursor:pointer} +#comment-content{width:100%;box-sizing:border-box;height:180px;resize:none} +#comment-list .c-avatar{width:48px;height:48px;padding:2px;border:1px solid #ccc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;margin-right:18px} +#comment-list .comment{margin-bottom:18px;padding-bottom:18px;border-bottom:1px dashed #ddd} +#comment-list .c-meta>*{margin-right:16px} +#comment-list .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#comment-list .c-time .fa{margin-right:6px} +#comment-list .c-reply{color:#999}#comment-list .c-reply:hover{color:#333} +#comment-list .c-author{font-size:13px} +#comment-list .c-author.admin{background-color:#e64346;color:#fbfbfb} +#comment-list .c-p-md{margin-top:12px;font-size:12px;line-height:20px;color:#666} +#comment-list .c-section{max-width:830px} +#comment-list .c-check{font-size:13px;color:#e64346}#comment-list .c-check .fa{margin-right:6px} +@media only screen and (max-width:960px){.container960{padding:0 24px;width:auto}}@media only screen and (max-width:760px){.container960{padding:0 24px;width:auto} #article-container .main{margin-left:0} #article-container .meta.left{display:none} #comment-form .c-info,#comment-form .c-content{width:100%;float:left} #comment-form .c-info{text-align:left}}@media only screen and (max-width:560px){.container960{padding:0;width:auto} #nav li{padding:0 10px} #header-img{float:left;width:64px;height:64px} #header-h{padding:17px 0;font-size:24px} #header-sub{display:none} #article-container .tag,#article-container .time{display:none} #comment-form{width:100%}}@media only screen and (max-width:480px){.container960{padding:0;width:auto} #header-img{display:none} #header-sub{display:none} #comment-list .c-avatar{display:none}} diff --git a/static/less/ling.less b/static/less/ling.less index f244473..1cf85f7 100644 --- a/static/less/ling.less +++ b/static/less/ling.less @@ -323,11 +323,17 @@ html, body { #nav,#header-h{ line-height: 50px; } + #footer{ + span{ + float: none; + text-align: center; + } + } } @media only screen and (max-width: 560px) { .container960{ - padding:0 24px; + padding:0; width: auto; } #header-h{ diff --git a/static/less/style.less b/static/less/style.less index 5a6d40d..1bbfa90 100644 --- a/static/less/style.less +++ b/static/less/style.less @@ -313,9 +313,14 @@ html,body{ @media only screen and (max-width: 560px) { .container960{ - padding:0 24px; + padding:0; width: auto; } + #nav{ + li{ + padding: 0 10px; + } + } #header-img{ float: left; width: 64px; @@ -329,7 +334,7 @@ html,body{ display: none; } #article-container{ - .tag{ + .tag,.time{ display: none; } } @@ -340,7 +345,7 @@ html,body{ @media only screen and (max-width: 480px) { .container960{ - padding:0 24px; + padding:0; width: auto; } #header-img{ diff --git a/view/ling/error/error.html b/view/ling/error/error.html new file mode 100644 index 0000000..38d62f7 --- /dev/null +++ b/view/ling/error/error.html @@ -0,0 +1,14 @@ + + + + + 错误提示 + + + + +

您访问的页面正在打瞌睡


+

程序员正在努力唤醒,请稍候访问...

+

返回首页

+ + \ No newline at end of file diff --git a/view/ling/error/notfound.html b/view/ling/error/notfound.html new file mode 100644 index 0000000..ca4ca33 --- /dev/null +++ b/view/ling/error/notfound.html @@ -0,0 +1,14 @@ + + + + + 错误提示 + + + + +

您访问的页面离家出走


+

程序员正在四处寻找,请稍候访问...

+

返回首页

+ + \ No newline at end of file diff --git a/view/ling/home.layout b/view/ling/home.layout index 60f2556..b873ec0 100644 --- a/view/ling/home.layout +++ b/view/ling/home.layout @@ -39,6 +39,7 @@ Proudly published with Fxh.Go. + {{Setting `c_footer_ga` | Html}} From e9b9dd47ee84b86d094b376ae133dcfb70b637b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Tue, 28 Jan 2014 00:15:55 +0800 Subject: [PATCH 03/82] update to 0.1.6, fix bugs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6af4ca5..f3d6e68 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A fast and simple blog engine with GoInk framework in Golang. -Current version is **0.1.5-beta** on 2014.01.30 +Current version is **0.1.6-beta** on 2014.01.31 ### Overview From 3fbaf51c21f5381701602f08e2e3eeb59eea7b0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Thu, 30 Jan 2014 17:06:52 +0800 Subject: [PATCH 04/82] add content draft status support --- app/handler/home.go | 6 +++--- app/model/content.go | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/handler/home.go b/app/handler/home.go index e13133e..12e7c74 100644 --- a/app/handler/home.go +++ b/app/handler/home.go @@ -71,7 +71,7 @@ func Article(context *GoInk.Context) { id, _ := strconv.Atoi(context.Param("id")) slug := context.Param("slug") article := model.GetContentById(id) - if article == nil { + if article == nil || article.Status != "publish"{ context.Redirect("/") return } @@ -91,7 +91,7 @@ func Page(context *GoInk.Context) { id, _ := strconv.Atoi(context.Param("id")) slug := context.Param("slug") article := model.GetContentById(id) - if article == nil { + if article == nil || article.Status != "publish"{ context.Redirect("/") return } @@ -110,7 +110,7 @@ func Page(context *GoInk.Context) { func TopPage(context *GoInk.Context) { slug := context.Param("slug") page := model.GetContentBySlug(slug) - if page == nil { + if page == nil || page.Status != "publish"{ context.Redirect("/") return } diff --git a/app/model/content.go b/app/model/content.go index b97c644..017ce39 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -52,6 +52,9 @@ func (cnt *Content) TagString() string { // get content link. func (cnt *Content) Link() string { + if cnt.Status != "publish"{ + return "#" + } if cnt.IsLinked { return "/" + cnt.Slug + ".html" } From d534ae673547c3ff1034d0043ed267802a64efed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Thu, 30 Jan 2014 17:07:22 +0800 Subject: [PATCH 05/82] add upgrade script for 0.2.0 --- app/upgrade/v20140209.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 app/upgrade/v20140209.go diff --git a/app/upgrade/v20140209.go b/app/upgrade/v20140209.go new file mode 100644 index 0000000..876650b --- /dev/null +++ b/app/upgrade/v20140209.go @@ -0,0 +1,14 @@ +package upgrade + +import ( + "github.com/fuxiaohei/GoBlog/app/cmd" + "github.com/fuxiaohei/GoBlog/GoInk" +) + +func init() { + cmd.SetUpgradeScript(20140209, upgrade_20140209) +} + +func upgrade_20140209(app *GoInk.App) bool { + return false +} From 0b6bf9c458fca850ad0707ef7eb9a406e53790ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Thu, 30 Jan 2014 19:13:00 +0800 Subject: [PATCH 06/82] add setting tabs --- app/app.go | 2 +- app/handler/admin.go | 25 +++-- static/css/admin.css | 174 ++++++++++++++++++++++++++++++++- static/less/admin.less | 23 ++++- view/admin/custom_setting.html | 36 ------- view/admin/setting.html | 128 +++++++++++++++--------- 6 files changed, 289 insertions(+), 99 deletions(-) delete mode 100644 view/admin/custom_setting.html diff --git a/app/app.go b/app/app.go index ed08dd3..9f87cbb 100644 --- a/app/app.go +++ b/app/app.go @@ -180,7 +180,7 @@ func registerAdminHandler() { App.Route("GET,POST,PUT,DELETE", "/admin/comments/", handler.Auth, handler.AdminComments) App.Route("GET,POST", "/admin/setting/", handler.Auth, handler.AdminSetting) - App.Route("GET,POST", "/admin/setting/custom/", handler.Auth, handler.CustomSetting) + App.Route("POST", "/admin/setting/custom/", handler.Auth, handler.CustomSetting) App.Route("GET,DELETE", "/admin/files/", handler.Auth, handler.AdminFiles) App.Post("/admin/files/upload/", handler.Auth, handler.FileUpload) diff --git a/app/handler/admin.go b/app/handler/admin.go index 169f6b1..cd94a84 100644 --- a/app/handler/admin.go +++ b/app/handler/admin.go @@ -251,26 +251,23 @@ func AdminSetting(context *GoInk.Context) { } context.Layout("admin") context.Render("admin/setting", map[string]interface{}{ - "Title": "配置", + "Title": "配置", + "Custom": model.GetCustomSettings(), }) } func CustomSetting(context *GoInk.Context) { - if context.Method == "POST" { - keys := context.Strings("key") - values := context.Strings("value") - for i, k := range keys { - model.SetSetting("c_"+k, values[i]) + keys := context.Strings("key") + values := context.Strings("value") + for i, k := range keys { + if len(k) < 1 { + continue } - model.SyncSettings() - Json(context, true).End() - return + model.SetSetting("c_"+k, values[i]) } - context.Layout("admin") - context.Render("admin/custom_setting", map[string]interface{}{ - "Title": "自定义配置", - "Settings": model.GetCustomSettings(), - }) + model.SyncSettings() + Json(context, true).End() + return } func AdminComments(context *GoInk.Context) { diff --git a/static/css/admin.css b/static/css/admin.css index 38442a2..5ab4bd9 100644 --- a/static/css/admin.css +++ b/static/css/admin.css @@ -1 +1,173 @@ -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}#header{height:39px;background-color:#fff;border-bottom:1px solid #999;line-height:39px;box-shadow:0 0 2px #ccc;-moz-box-shadow:0 0 2px #ccc;-webkit-box-shadow:0 0 2px #ccc}#header .nav>a{display:inline-block;padding:0 18px;border-left:1px solid #ccc;border-right:1px solid #ccc;color:#666;margin-left:-1px}#header .nav>a:hover{border-color:#0079bc;background-color:#0079bc;color:#fbfbfb}#header .logo{line-height:36px;padding:0 14px 0 0;margin:0;font-size:14px}#header .nav-item{display:inline-block;padding:0 18px;border-left:1px solid #ccc;border-right:1px solid #ccc;color:#666;margin-right:-1px}#header .nav-item:hover{background-color:#eee}#header .out{color:#c7383a}#header .out:hover{border-color:#e64346;background-color:#e64346;color:#fbfbfb}#footer{padding:24px;background:#f6f6f6;border-top:1px solid #ddd;margin-top:30px;color:#999;font-size:12px}#footer p{margin-bottom:0}#footer a{color:#999;padding:6px 12px}#footer a:hover{border-bottom:1px dashed #bbb}.admin{margin:24px auto 48px auto}#profile{width:800px;margin:24px auto 48px auto}#profile .avatar img{width:180px;padding:4px;background-color:#fff;border:1px solid #ddd;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;height:180px}#profile .ipt{width:280px}#profile .invalid{margin-left:75px}#profile .bio{margin-left:75px;height:160px}#password{width:400px;margin:24px auto 48px auto}#password .invalid{margin-left:75px}#article-list{margin-bottom:24px}#article-list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#article-list li>*{margin-right:16px}#article-list li .time,#article-list li .comment{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;color:#999}#article-list li .comment{color:#649462}#article-list li .comment .fa{margin-right:6px}#article-list li .is-comment{color:#ff4447}#article-list li .is-comment .fa{margin-right:6px}#article-list li .del,#article-list li .edit{opacity:0}#article-list li:hover .del,#article-list li:hover .edit{opacity:1}#article-list li:first-child h4{padding-top:0}#article-form{margin:24px auto 48px auto}#article-form input.title{width:100%;box-sizing:border-box;border-bottom:none;margin-bottom:-1px;font-size:18px}#article-form select{padding:4px 6px}#article-form .preview{border:1px solid #999;background-color:#fff;box-sizing:border-box;padding:0 12px;height:700px;margin-left:-1px;border-radius:2px;overflow-x:scroll}#article-form .form-vertical{width:100%;margin-top:18px}#article-form .form-vertical input.ipt{width:300px}#article-form .form-vertical .item{float:left;margin-right:18px}#article-form .form-vertical .btn{margin-right:16px}#article-form .file-progress{padding:0 12px;background:rgba(0,150,223,0.2);color:#666;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;box-sizing:border-box;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}#article-form .file-progress.err{background:rgba(255,68,71,0.2);color:#aa393c}#setting-form{width:820px;margin:24px auto 48px auto}#setting-form .ipt{width:480px}#setting-form .invalid{margin-left:75px}#setting-form label{min-width:10em}#setting-form .tip.block{margin-left:12em}#setting-form.custom{width:1000px}#setting-form.custom input.key{width:250px}#setting-form.custom input.value{width:650px}#setting-form.custom .item{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#setting-form.custom .del{margin-left:12px;color:#e64346}#setting-form.custom .tip{margin-left:0}#comment-list .c-avatar{width:48px;height:48px;padding:2px;border:1px solid #ccc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;margin-right:18px}#comment-list .comment{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#comment-list .c-meta>*{margin-right:16px}#comment-list .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#comment-list .c-time .fa{margin-right:6px}#comment-list .c-cnt{color:#999}#comment-list .c-reply{color:#999}#comment-list .c-reply:hover{color:#333}#comment-list .c-author{font-size:13px}#comment-list .c-author.admin{background-color:#e64346;color:#fbfbfb}#comment-list .c-p-md{margin-top:8px;font-size:12px;line-height:18px;color:#666}#comment-list .c-section{max-width:830px}#comment-list .c-check,#comment-list .c-del{color:#e64346}#comment-list .c-check .fa,#comment-list .c-del .fa{margin-right:6px}#comment-list .c-check:hover,#comment-list .c-del:hover{color:#aa393c}#comment-form{padding-top:12px;display:none;margin-left:72px}#comment-form .btn{margin-right:24px}#comment-content{width:500px;height:80px;margin-right:24px}#files-list li.file{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#files-list li.file>*{margin-right:16px}#files-list li.file:hover .del{opacity:1 !important}#files-list .upload-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#files-list .del{color:#e64346}#files-list .file-progress{padding:0 12px;background:rgba(0,150,223,0.2);color:#666;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;box-sizing:border-box;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}#files-list .file-progress.err{background:rgba(255,68,71,0.2);color:#aa393c}#files-list .size{width:4em;display:inline-block}#plugin-list li{margin-bottom:16px;padding-bottom:16px;border-bottom:1px dashed #ddd}#plugin-list li .desc{margin-bottom:0;width:99%;color:#999}#plugin-list li a.lbl{padding:0 8px;margin-left:16px}#plugin-list li .version{color:#507650;margin-left:16px}#plugin-list li .name{font-size:16px}#plugin-list li .active{width:12px;height:12px;margin-right:16px;padding:0;margin-top:10px}#plugin-list li .setting{margin-left:16px}#plugin-setting-form p.item{clear:both}#plugin-setting-form label{float:left;min-width:6em;text-align:right;margin-right:2em}#plugin-setting-form .title{padding-top:0;margin-bottom:18px}#plugin-setting-form input.ipt{width:600px}#dashboard .grid-1-5{margin-right:4%}#dashboard .quick-link li{list-style:inside disc;margin-bottom:6px;padding-bottom:6px;border-bottom:1px dashed #ddd}#dashboard .stats .lbl{padding:1px 5px;margin:0 3px} \ No newline at end of file +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0} +header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block} +audio,canvas,video{display:inline-block} +table{border-collapse:collapse;border-spacing:0} +fieldset,img{border:0} +address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal} +ol,ul{list-style:none} +caption,th{text-align:left} +h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal} +q:before,q:after{content:''} +abbr,acronym{border:0;font-variant:normal} +sup{vertical-align:text-top} +sub{vertical-align:text-bottom} +input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit} +legend{color:#000} +html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb} +a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b} +p{margin-bottom:18px} +h1,h2,h3,h4,h5,h6{padding:12px 0} +h1{font-size:28px} +h2{font-size:24px} +h3{font-size:21px} +h4{font-size:19px} +h5{font-size:16px} +h6{font-size:14px} +.text-left{text-align:left} +.text-right{text-align:right} +.text-center{text-align:center} +.left{float:left} +.right{float:right} +.absolute{position:absolute} +.relative{position:relative} +.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0} +.vertical-middle{vertical-align:middle} +.inline{display:inline} +.inline-block{display:inline-block} +.block{display:block} +.fade-out{opacity:0} +.hide{display:none !important} +.container{max-width:1200px;margin:auto} +.container960{max-width:960px;margin:auto} +.grid-1-2{width:50%} +.grid-1-3{width:33.3333%} +.grid-1-4{width:25%} +.grid-1-5{width:20%} +.grid-1-6{width:16.6666%} +.grid-2-3{width:66.6666%} +.grid-3-4{width:75%} +.grid-3-5{width:60%} +.grid-4-5{width:80%} +.grid-5-6{width:83.3333%} +input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif} +.form legend{font-size:18px;margin-bottom:14px} +.form label{display:inline-block;margin-right:12px} +.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc} +.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal} +.form .field{margin-bottom:24px} +.form .invalid{margin-right:12px} +.form .tip{font-size:13px;color:#999;margin-left:12px} +.form-vertical label{display:block;margin-bottom:8px} +.form-vertical .ipt{width:100%;box-sizing:border-box} +.form-vertical .invalid{margin-right:0;margin-top:6px} +.form-align label{display:inline-block;min-width:60px;text-align:right} +.form-align .invalid{margin-right:0;margin-top:6px} +.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer} +a.btn{line-height:36px;color:#fff} +.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a} +.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b} +.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462} +.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} +.lbl-red{background-color:#e64346;color:#fbfbfb} +a.lbl{line-height:26px} +a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb} +.lbl-blue{background-color:#0079bc;color:#fbfbfb} +a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb} +.lbl-green{background-color:#7ab277;color:#fbfbfb} +a.lbl-green:hover{background-color:#649462;color:#fbfbfb} +.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333} +.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff} +.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb} +.pager .current:hover{background-color:#0079bc} +.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold} +.markdown h1{font-size:24px} +.markdown h2{font-size:21px} +.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd} +.markdown h3{font-size:19px} +.markdown h4{font-size:18px} +.markdown h5{font-size:16px} +.markdown h6{font-size:14px} +.markdown p{margin-bottom:10px} +.markdown ul{list-style:disc inside} +.markdown ol{list-style:decimal inside} +.markdown code{font-family:Consolas,"Courier New",Arial} +.markdown p code{color:#c7383a} +.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0} +.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0} +.markdown ol,.markdown ul{margin:12px 24px} +.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block} +.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px} +.markdown table thead{background:#f6f6f6} +#header{height:39px;background-color:#fff;border-bottom:1px solid #999;line-height:39px;box-shadow:0 0 2px #ccc;-moz-box-shadow:0 0 2px #ccc;-webkit-box-shadow:0 0 2px #ccc}#header .nav>a{display:inline-block;padding:0 18px;border-left:1px solid #ccc;border-right:1px solid #ccc;color:#666;margin-left:-1px}#header .nav>a:hover{border-color:#0079bc;background-color:#0079bc;color:#fbfbfb} +#header .logo{line-height:36px;padding:0 14px 0 0;margin:0;font-size:14px} +#header .nav-item{display:inline-block;padding:0 18px;border-left:1px solid #ccc;border-right:1px solid #ccc;color:#666;margin-right:-1px}#header .nav-item:hover{background-color:#eee} +#header .out{color:#c7383a}#header .out:hover{border-color:#e64346;background-color:#e64346;color:#fbfbfb} +#footer{padding:24px;background:#f6f6f6;border-top:1px solid #ddd;margin-top:30px;color:#999;font-size:12px}#footer p{margin-bottom:0} +#footer a{color:#999;padding:6px 12px}#footer a:hover{border-bottom:1px dashed #bbb} +.admin{margin:24px auto 48px auto} +#profile{width:800px;margin:24px auto 48px auto}#profile .avatar img{width:180px;padding:4px;background-color:#fff;border:1px solid #ddd;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;height:180px} +#profile .ipt{width:280px} +#profile .invalid{margin-left:75px} +#profile .bio{margin-left:75px;height:160px} +#password{width:400px;margin:24px auto 48px auto}#password .invalid{margin-left:75px} +#article-list{margin-bottom:24px}#article-list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#article-list li>*{margin-right:16px} +#article-list li .time,#article-list li .comment{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;color:#999} +#article-list li .comment{color:#649462}#article-list li .comment .fa{margin-right:6px} +#article-list li .is-comment{color:#ff4447}#article-list li .is-comment .fa{margin-right:6px} +#article-list li .del,#article-list li .edit{opacity:0} +#article-list li:hover .del,#article-list li:hover .edit{opacity:1} +#article-list li:first-child h4{padding-top:0} +#article-form{margin:24px auto 48px auto}#article-form input.title{width:100%;box-sizing:border-box;border-bottom:none;margin-bottom:-1px;font-size:18px} +#article-form select{padding:4px 6px} +#article-form .preview{border:1px solid #999;background-color:#fff;box-sizing:border-box;padding:0 12px;height:700px;margin-left:-1px;border-radius:2px;overflow-x:scroll} +#article-form .form-vertical{width:100%;margin-top:18px}#article-form .form-vertical input.ipt{width:300px} +#article-form .form-vertical .item{float:left;margin-right:18px} +#article-form .form-vertical .btn{margin-right:16px} +#article-form .file-progress{padding:0 12px;background:rgba(0,150,223,0.2);color:#666;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;box-sizing:border-box;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} +#article-form .file-progress.err{background:rgba(255,68,71,0.2);color:#aa393c} +#setting-nav{margin-top:24px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#setting-nav li{display:inline-block;margin:0 12px}#setting-nav li a{padding:3px 10px} +#setting-nav li a:hover,#setting-nav li a.current{border-bottom:2px solid #005b9b} +.setting-panel{display:none} +.setting-form{width:820px;margin:24px auto 48px auto}.setting-form .ipt{width:480px} +.setting-form .invalid{margin-left:75px} +.setting-form label{min-width:10em} +.setting-form .tip.block{margin-left:12em} +#setting-custom-form{width:1000px}#setting-custom-form input.key{width:250px} +#setting-custom-form input.value{width:650px} +#setting-custom-form .item{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd} +#setting-custom-form .del{margin-left:12px;color:#e64346} +#setting-custom-form .tip{margin-left:0} +#comment-list .c-avatar{width:48px;height:48px;padding:2px;border:1px solid #ccc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;margin-right:18px} +#comment-list .comment{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd} +#comment-list .c-meta>*{margin-right:16px} +#comment-list .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#comment-list .c-time .fa{margin-right:6px} +#comment-list .c-cnt{color:#999} +#comment-list .c-reply{color:#999}#comment-list .c-reply:hover{color:#333} +#comment-list .c-author{font-size:13px} +#comment-list .c-author.admin{background-color:#e64346;color:#fbfbfb} +#comment-list .c-p-md{margin-top:8px;font-size:12px;line-height:18px;color:#666} +#comment-list .c-section{max-width:830px} +#comment-list .c-check,#comment-list .c-del{color:#e64346}#comment-list .c-check .fa,#comment-list .c-del .fa{margin-right:6px} +#comment-list .c-check:hover,#comment-list .c-del:hover{color:#aa393c} +#comment-form{padding-top:12px;display:none;margin-left:72px}#comment-form .btn{margin-right:24px} +#comment-content{width:500px;height:80px;margin-right:24px} +#files-list li.file{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#files-list li.file>*{margin-right:16px} +#files-list li.file:hover .del{opacity:1 !important} +#files-list .upload-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} +#files-list .del{color:#e64346} +#files-list .file-progress{padding:0 12px;background:rgba(0,150,223,0.2);color:#666;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;box-sizing:border-box;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} +#files-list .file-progress.err{background:rgba(255,68,71,0.2);color:#aa393c} +#files-list .size{width:4em;display:inline-block} +#plugin-list li{margin-bottom:16px;padding-bottom:16px;border-bottom:1px dashed #ddd}#plugin-list li .desc{margin-bottom:0;width:99%;color:#999} +#plugin-list li a.lbl{padding:0 8px;margin-left:16px} +#plugin-list li .version{color:#507650;margin-left:16px} +#plugin-list li .name{font-size:16px} +#plugin-list li .active{width:12px;height:12px;margin-right:16px;padding:0;margin-top:10px} +#plugin-list li .setting{margin-left:16px} +#plugin-setting-form p.item{clear:both} +#plugin-setting-form label{float:left;min-width:6em;text-align:right;margin-right:2em} +#plugin-setting-form .title{padding-top:0;margin-bottom:18px} +#plugin-setting-form input.ipt{width:600px} +#dashboard .grid-1-5{margin-right:4%} +#dashboard .quick-link li{list-style:inside disc;margin-bottom:6px;padding-bottom:6px;border-bottom:1px dashed #ddd} +#dashboard .stats .lbl{padding:1px 5px;margin:0 3px} diff --git a/static/less/admin.less b/static/less/admin.less index 37fd4a9..88b04ee 100644 --- a/static/less/admin.less +++ b/static/less/admin.less @@ -193,7 +193,26 @@ } } -#setting-form { +#setting-nav{ + margin-top: 24px; + li{ + display: inline-block; + margin: 0 12px; + a{ + padding:3px 10px; + } + a:hover,a.current{ + border-bottom: 2px solid @blue2; + } + } + .bottom-line(12px); +} + +.setting-panel{ + display: none; +} + +.setting-form { width: 820px; .admin; .ipt { @@ -210,7 +229,7 @@ } } -#setting-form.custom{ +#setting-custom-form{ width: 1000px; input.key{ width: 250px; diff --git a/view/admin/custom_setting.html b/view/admin/custom_setting.html deleted file mode 100644 index c6ce5d8..0000000 --- a/view/admin/custom_setting.html +++ /dev/null @@ -1,36 +0,0 @@ -
{{range $k,$v := .Settings}} -

-      - - -

{{end}} -

-      - 添加一项 - 使用函数自定义配置,需要加前缀"c_",如GetSetting("c_key") -

- -
- \ No newline at end of file diff --git a/view/admin/setting.html b/view/admin/setting.html index 8f76aea..1750d1e 100644 --- a/view/admin/setting.html +++ b/view/admin/setting.html @@ -1,51 +1,89 @@ -
-

- - -

-

- - -

-

- - -

-

- - -

-

- - -

-

- - -

-

- - - 主题即指向的模板目录,具体内容请参考 default 目录(即 default 主题) - -

-

- - - 默认关闭,使用前端marked.js渲染,填true时开启 - -

-

- - - - 自定义配置 -

-
+ +
+
+

+ + +

+

+ + +

+

+ + +

+

+ + +

+

+ + +

+

+ + +

+

+ + + 主题即指向的模板目录,具体内容请参考 default 目录(即 default 主题) + +

+

+ + + 默认关闭,使用前端marked.js渲染,填true时开启 + +

+

+ + + + 自定义配置 +

+
+
{{range $k,$v := .Custom}} +

+      + + +

{{end}} +

+      + 添加一项 + 使用函数自定义配置,需要加前缀"c_",如GetSetting("c_key") +

+ +
+
333
+
+ \ No newline at end of file From dda3ab9b4a586a50467ffad9f22aed2873319ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Fri, 31 Jan 2014 12:21:43 +0800 Subject: [PATCH 07/82] fix plugin activation bug --- app/app.go | 25 +----------------------- app/handler/admin.go | 3 ++- app/handler/home.go | 2 +- app/plugin/email.go | 22 +++++++++++++++------ app/plugin/plugin.go | 42 +++++++++++++++++++++++++++++++++++++++++ view/admin/setting.html | 2 -- 6 files changed, 62 insertions(+), 34 deletions(-) diff --git a/app/app.go b/app/app.go index 9f87cbb..5e96c46 100644 --- a/app/app.go +++ b/app/app.go @@ -124,30 +124,7 @@ func Init() { // init plugin plugin.Init() - pluginHandlers := plugin.Handlers() - - if len(pluginHandlers["middle"]) > 0 { - for _, h := range pluginHandlers["middle"] { - App.Use(h) - } - } - - if len(pluginHandlers["inter"]) > 0 { - for name, h := range pluginHandlers["inter"] { - if name == "static" { - App.Static(h) - continue - } - if name == "recover" { - App.Recover(h) - continue - } - if name == "notfound" { - App.NotFound(h) - continue - } - } - } + plugin.Update(App) App.View().FuncMap["DateInt64"] = utils.DateInt64 App.View().FuncMap["DateString"] = utils.DateString diff --git a/app/handler/admin.go b/app/handler/admin.go index cd94a84..4657e67 100644 --- a/app/handler/admin.go +++ b/app/handler/admin.go @@ -306,7 +306,7 @@ func AdminComments(context *GoInk.Context) { co.IsAdmin = true model.CreateComment(cid, co) Json(context, true).Set("comment", co.ToJson()).End() - go context.Do("comment_reply", co) + context.Do("comment_reply", co) return } page := context.IntOr("page", 1) @@ -329,6 +329,7 @@ func AdminPlugin(context *GoInk.Context) { pln := context.String("plugin") if action == "activate" { plugin.Activate(pln) + go plugin.Update(context.App()) Json(context, true).End() return } diff --git a/app/handler/home.go b/app/handler/home.go index 12e7c74..61bccb3 100644 --- a/app/handler/home.go +++ b/app/handler/home.go @@ -155,5 +155,5 @@ func Comment(context *GoInk.Context) { co.IsAdmin = false model.CreateComment(cid, co) Json(context, true).Set("comment", co.ToJson()).End() - go context.Do("comment_created", co) + context.Do("comment_created", co) } diff --git a/app/plugin/email.go b/app/plugin/email.go index 18db75c..aff0aab 100644 --- a/app/plugin/email.go +++ b/app/plugin/email.go @@ -95,18 +95,28 @@ func (p *EmailPlugin) Activate() { } fn := func(context *GoInk.Context) { context.On("comment_created", func(co interface{}) { - if len(p.settings["smtp_host"]) < 1 || len(p.settings["smtp_email_user"]) < 1 || len(p.settings["smtp_email_password"]) < 1 { - println("no setting in smtp email plugin") + if !p.isActive { return } - p.sendEmail(co.(*model.Comment), true) + go func() { + if len(p.settings["smtp_host"]) < 1 || len(p.settings["smtp_email_user"]) < 1 || len(p.settings["smtp_email_password"]) < 1 { + println("no setting in smtp email plugin") + return + } + p.sendEmail(co.(*model.Comment), true) + }() }) context.On("comment_reply", func(co interface{}) { - if len(p.settings["smtp_host"]) < 1 || len(p.settings["smtp_email_user"]) < 1 || len(p.settings["smtp_email_password"]) < 1 { - fmt.Println("no setting in smtp email plugin") + if !p.isActive { return } - p.sendEmail(co.(*model.Comment), false) + go func() { + if len(p.settings["smtp_host"]) < 1 || len(p.settings["smtp_email_user"]) < 1 || len(p.settings["smtp_email_password"]) < 1 { + fmt.Println("no setting in smtp email plugin") + return + } + p.sendEmail(co.(*model.Comment), false) + }() }) } Handler("comment_email_notify", fn, false) diff --git a/app/plugin/plugin.go b/app/plugin/plugin.go index e612e29..cc4af08 100644 --- a/app/plugin/plugin.go +++ b/app/plugin/plugin.go @@ -27,6 +27,7 @@ var ( pluginMap map[string]PluginInterface middleHandler map[string]GoInk.Handler interHandler map[string]GoInk.Handler + usedHandler map[string]map[string]bool ) func init() { @@ -37,6 +38,9 @@ func init() { pluginStorage = make(map[string]map[string]interface{}) middleHandler = make(map[string]GoInk.Handler) interHandler = make(map[string]GoInk.Handler) + usedHandler = make(map[string]map[string]bool) + usedHandler["middle"] = make(map[string]bool) + usedHandler["inter"] = make(map[string]bool) } func Init() { @@ -122,3 +126,41 @@ func Deactivate(name string) { model.Storage.Set("plugins", pluginStorage) println("deactivate", p.Key()) } + +func Update(app *GoInk.App) { + pluginHandlers := Handlers() + if len(pluginHandlers["middle"]) > 0 { + for n, h := range pluginHandlers["middle"] { + if usedHandler["middle"][n] { + continue + } + app.Use(h) + usedHandler["middle"][n] = true + //println("use plugin middle handler",n) + } + //fmt.Println(usedHandler) + } + + if len(pluginHandlers["inter"]) > 0 { + for name, h := range pluginHandlers["inter"] { + if usedHandler["inter"][name] { + continue + } + if name == "static" { + app.Static(h) + usedHandler["inter"][name] = true + continue + } + if name == "recover" { + app.Recover(h) + usedHandler["inter"][name] = true + continue + } + if name == "notfound" { + app.NotFound(h) + usedHandler["inter"][name] = true + continue + } + } + } +} diff --git a/view/admin/setting.html b/view/admin/setting.html index 1750d1e..c280cf6 100644 --- a/view/admin/setting.html +++ b/view/admin/setting.html @@ -43,8 +43,6 @@

- - 自定义配置

{{range $k,$v := .Custom}} From e228df2cfd7ac088918bb550c823c4b9dab787e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Fri, 31 Jan 2014 20:45:54 +0800 Subject: [PATCH 08/82] add comment timer for recycling removable comments --- app/handler/admin.go | 1 + app/model/comment.go | 55 +++++++++++++++++++++++++++++++++++++++++--- app/model/content.go | 4 ++-- app/model/storage.go | 11 +++++++++ 4 files changed, 66 insertions(+), 5 deletions(-) diff --git a/app/handler/admin.go b/app/handler/admin.go index 4657e67..ab3aea4 100644 --- a/app/handler/admin.go +++ b/app/handler/admin.go @@ -37,6 +37,7 @@ func AdminProfile(context *GoInk.Context) { user.Bio = data["bio"] Json(context, true).End() go model.SyncUsers() + go model.UpdateCommentAdmin(user) return } context.Layout("admin") diff --git a/app/model/comment.go b/app/model/comment.go index 90cbb49..834892c 100644 --- a/app/model/comment.go +++ b/app/model/comment.go @@ -3,6 +3,7 @@ package model import ( "github.com/fuxiaohei/GoBlog/app/utils" "sort" + "time" ) var ( @@ -59,8 +60,8 @@ func (c *Comment) ParentMd() string { if co == nil { return "> 已失效" } - str := "> @"+co.Author + "\n\n" - str += "> "+co.Content + "\n" + str := "> @" + co.Author + "\n\n" + str += "> " + co.Content + "\n" return str } @@ -93,6 +94,18 @@ func (c *Comment) IsValid() bool { return true } +func (c *Comment) IsRemovable() bool { + if GetContentById(c.Cid) == nil { + return true + } + if c.Pid > 0 { + if GetCommentById(c.Pid) == nil { + return true + } + } + return false +} + func (c *Comment) GetReader() *Reader { for _, r := range readers { if r.Email == c.Email { @@ -154,7 +167,7 @@ func SaveComment(c *Comment) { go SyncReaders() } -func RemoveComment(cid int, id int) { +func removeOneComment(cid int, id int) { delete(comments, id) for n, c := range commentsIndex { if c == id { @@ -171,6 +184,14 @@ func RemoveComment(cid int, id int) { cnt.Comments = append(cnt.Comments[:n], cnt.Comments[n+1:]...) } } +} + +func RemoveComment(cid int, id int) { + removeOneComment(cid, id) + cnt := GetContentById(cid) + if cnt == nil { + return + } go SyncContent(cnt) } @@ -218,3 +239,31 @@ func LoadComments() { } sort.Sort(sort.Reverse(sort.IntSlice(commentsIndex))) } + +func UpdateCommentAdmin(user *User) { + for _, co := range comments { + if co.IsAdmin { + co.Author = user.Nick + co.Email = user.Email + co.Url = user.Url + co.Avatar = utils.Gravatar(co.Email, "50") + } + } +} + +func RecycleComments() { + for _, co := range comments { + if co.IsRemovable() { + removeOneComment(co.Cid, co.Id) + } + } + SyncContents() +} + +func StartCommentsTimer() { + time.AfterFunc(time.Duration(6)*time.Hour, func() { + println("recycle comments in 6 hours timer") + RecycleComments() + StartCommentsTimer() + }) +} diff --git a/app/model/content.go b/app/model/content.go index 017ce39..eb25b96 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -246,8 +246,8 @@ func LoadContents() { } func StartContentsTimer() { - time.AfterFunc(time.Duration(10)*time.Minute, func() { - println("write contents in 10 min timer") + time.AfterFunc(time.Duration(1)*time.Hour, func() { + println("write contents in 1 hour timer") SyncContents() StartContentsTimer() }) diff --git a/app/model/storage.go b/app/model/storage.go index 132fa68..f0e3267 100644 --- a/app/model/storage.go +++ b/app/model/storage.go @@ -217,4 +217,15 @@ func Init(v int) { func All() { loadAllData() StartContentsTimer() + StartCommentsTimer() +} + +func SyncAll(){ + SyncContents() + SyncFiles() + SyncReaders() + SyncSettings() + SyncTokens() + SyncUsers() + SyncVersion() } From cfdcb11cf9c9408bc1b5bffb68b9a87e79f6c4db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Fri, 31 Jan 2014 20:46:18 +0800 Subject: [PATCH 09/82] catch exit signal --- app/app.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/app.go b/app/app.go index 5e96c46..a9c33ce 100644 --- a/app/app.go +++ b/app/app.go @@ -9,10 +9,12 @@ import ( "github.com/fuxiaohei/GoBlog/app/utils" "net/http" "os" + "os/signal" "path" "runtime/debug" "strconv" "strings" + "syscall" ) var ( @@ -111,6 +113,26 @@ func init() { os.Exit(1) } }() + + // catch exit command + go catchExit() +} + +// code from https://github.com/Unknwon/gowalker/blob/master/gowalker.go +func catchExit() { + sigTerm := syscall.Signal(15) + sig := make(chan os.Signal) + signal.Notify(sig, os.Interrupt, sigTerm) + + for { + switch <-sig { + case os.Interrupt, sigTerm: + println("before exit, saving data") + model.SyncAll() + println("ready to exit") + os.Exit(0) + } + } } func Init() { From e63f1a6aefbe3786b905ffc03e06e8585a4089de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Sat, 1 Feb 2014 15:47:43 +0800 Subject: [PATCH 10/82] add backup file download link --- GoInk/context.go | 15 +++++ app/app.go | 7 ++- app/cmd/backup.go | 4 ++ app/handler/cmd.go | 5 ++ static/css/admin.css | 2 +- static/css/cmd.css | 109 ++++++++++++++++++++++++++++++++++++- static/less/admin.less | 3 +- static/less/cmd.less | 3 + view/admin/cmd/backup.html | 2 +- view/admin/comments.html | 3 +- 10 files changed, 147 insertions(+), 6 deletions(-) diff --git a/GoInk/context.go b/GoInk/context.go index 63b3249..67fa965 100644 --- a/GoInk/context.go +++ b/GoInk/context.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/json" "net/http" + "os" "path" "reflect" "strconv" @@ -310,3 +311,17 @@ func (ctx *Context) Func(name string, fn interface{}) { func (ctx *Context) App() *App { return ctx.app } + +func (ctx *Context) Download(file string) { + f, e := os.Stat(file) + if e != nil { + ctx.Status = 404 + return + } + if f.IsDir() { + ctx.Status = 403 + return + } + http.ServeFile(ctx.Response, ctx.Request, file) + ctx.IsSend = true +} diff --git a/app/app.go b/app/app.go index a9c33ce..40b4314 100644 --- a/app/app.go +++ b/app/app.go @@ -146,6 +146,7 @@ func Init() { // init plugin plugin.Init() + // update plugin handlers plugin.Update(App) App.View().FuncMap["DateInt64"] = utils.DateInt64 @@ -179,7 +180,7 @@ func registerAdminHandler() { App.Route("GET,POST,PUT,DELETE", "/admin/comments/", handler.Auth, handler.AdminComments) App.Route("GET,POST", "/admin/setting/", handler.Auth, handler.AdminSetting) - App.Route("POST", "/admin/setting/custom/", handler.Auth, handler.CustomSetting) + App.Post("/admin/setting/custom/", handler.Auth, handler.CustomSetting) App.Route("GET,DELETE", "/admin/files/", handler.Auth, handler.AdminFiles) App.Post("/admin/files/upload/", handler.Auth, handler.FileUpload) @@ -190,6 +191,7 @@ func registerAdminHandler() { func registerCmdHandler() { App.Route("GET,POST,DELETE", "/cmd/backup/", handler.Auth, handler.CmdBackup) + App.Get("/cmd/backup/file", handler.Auth, handler.CmdBackupFile) } func registerHomeHandler() { @@ -202,6 +204,9 @@ func registerHomeHandler() { App.Post("/comment/:id/", handler.Comment) App.Get("/rss", handler.Feed) + App.Get("/rss/", handler.Feed) + App.Get("/feed", handler.Feed) + App.Get("/feed/", handler.Feed) App.Get("/:slug", handler.TopPage) App.Get("/", handler.Home) diff --git a/app/cmd/backup.go b/app/cmd/backup.go index ff70673..2f301d9 100644 --- a/app/cmd/backup.go +++ b/app/cmd/backup.go @@ -48,6 +48,10 @@ func RemoveBackupFile(file string) { os.Remove(file) } +func GetBackupFileAbsPath(name string) string { + return path.Join(backupDir, name) +} + func GetBackupFiles() ([]os.FileInfo, error) { fi := make([]os.FileInfo, 0) e := filepath.Walk(backupDir, func(_ string, info os.FileInfo, _ error) error { diff --git a/app/handler/cmd.go b/app/handler/cmd.go index 67f9fd0..82de6e0 100644 --- a/app/handler/cmd.go +++ b/app/handler/cmd.go @@ -31,3 +31,8 @@ func CmdBackup(context *GoInk.Context) { "Files": files, }) } + +func CmdBackupFile(context *GoInk.Context){ + file := context.String("file") + context.Download(cmd.GetBackupFileAbsPath(file)) +} diff --git a/static/css/admin.css b/static/css/admin.css index 5ab4bd9..7cce5b5 100644 --- a/static/css/admin.css +++ b/static/css/admin.css @@ -141,7 +141,7 @@ a.lbl-green:hover{background-color:#649462;color:#fbfbfb} #comment-list .comment{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd} #comment-list .c-meta>*{margin-right:16px} #comment-list .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#comment-list .c-time .fa{margin-right:6px} -#comment-list .c-cnt{color:#999} +#comment-list .c-cnt,#comment-list .c-email{color:#999;font-size:12px} #comment-list .c-reply{color:#999}#comment-list .c-reply:hover{color:#333} #comment-list .c-author{font-size:13px} #comment-list .c-author.admin{background-color:#e64346;color:#fbfbfb} diff --git a/static/css/cmd.css b/static/css/cmd.css index b9f046d..c3b074e 100644 --- a/static/css/cmd.css +++ b/static/css/cmd.css @@ -1 +1,108 @@ -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}.cmd{margin:24px 48px}.cmd-header{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#backup-btn{margin:10px 0 0 30px}.cmd-list li{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#backup-list li{list-style:disc inside;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#backup-list li>span,#backup-list li>a{margin-right:16px}#backup-list li .del{color:#e64346;opacity:0}#backup-list li:hover .del{opacity:1} \ No newline at end of file +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0} +header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block} +audio,canvas,video{display:inline-block} +table{border-collapse:collapse;border-spacing:0} +fieldset,img{border:0} +address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal} +ol,ul{list-style:none} +caption,th{text-align:left} +h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal} +q:before,q:after{content:''} +abbr,acronym{border:0;font-variant:normal} +sup{vertical-align:text-top} +sub{vertical-align:text-bottom} +input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit} +legend{color:#000} +html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb} +a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b} +p{margin-bottom:18px} +h1,h2,h3,h4,h5,h6{padding:12px 0} +h1{font-size:28px} +h2{font-size:24px} +h3{font-size:21px} +h4{font-size:19px} +h5{font-size:16px} +h6{font-size:14px} +.text-left{text-align:left} +.text-right{text-align:right} +.text-center{text-align:center} +.left{float:left} +.right{float:right} +.absolute{position:absolute} +.relative{position:relative} +.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0} +.vertical-middle{vertical-align:middle} +.inline{display:inline} +.inline-block{display:inline-block} +.block{display:block} +.fade-out{opacity:0} +.hide{display:none !important} +.container{max-width:1200px;margin:auto} +.container960{max-width:960px;margin:auto} +.grid-1-2{width:50%} +.grid-1-3{width:33.3333%} +.grid-1-4{width:25%} +.grid-1-5{width:20%} +.grid-1-6{width:16.6666%} +.grid-2-3{width:66.6666%} +.grid-3-4{width:75%} +.grid-3-5{width:60%} +.grid-4-5{width:80%} +.grid-5-6{width:83.3333%} +input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif} +.form legend{font-size:18px;margin-bottom:14px} +.form label{display:inline-block;margin-right:12px} +.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc} +.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal} +.form .field{margin-bottom:24px} +.form .invalid{margin-right:12px} +.form .tip{font-size:13px;color:#999;margin-left:12px} +.form-vertical label{display:block;margin-bottom:8px} +.form-vertical .ipt{width:100%;box-sizing:border-box} +.form-vertical .invalid{margin-right:0;margin-top:6px} +.form-align label{display:inline-block;min-width:60px;text-align:right} +.form-align .invalid{margin-right:0;margin-top:6px} +.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer} +a.btn{line-height:36px;color:#fff} +.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a} +.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b} +.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462} +.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} +.lbl-red{background-color:#e64346;color:#fbfbfb} +a.lbl{line-height:26px} +a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb} +.lbl-blue{background-color:#0079bc;color:#fbfbfb} +a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb} +.lbl-green{background-color:#7ab277;color:#fbfbfb} +a.lbl-green:hover{background-color:#649462;color:#fbfbfb} +.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333} +.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff} +.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb} +.pager .current:hover{background-color:#0079bc} +.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold} +.markdown h1{font-size:24px} +.markdown h2{font-size:21px} +.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd} +.markdown h3{font-size:19px} +.markdown h4{font-size:18px} +.markdown h5{font-size:16px} +.markdown h6{font-size:14px} +.markdown p{margin-bottom:10px} +.markdown ul{list-style:disc inside} +.markdown ol{list-style:decimal inside} +.markdown code{font-family:Consolas,"Courier New",Arial} +.markdown p code{color:#c7383a} +.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0} +.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0} +.markdown ol,.markdown ul{margin:12px 24px} +.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block} +.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px} +.markdown table thead{background:#f6f6f6} +.cmd{margin:24px 48px} +.cmd-header{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd} +#backup-btn{margin:10px 0 0 30px} +.cmd-list li{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd} +#backup-list li{list-style:disc inside;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#backup-list li>span,#backup-list li>a{margin-right:16px} +#backup-list li .del{color:#e64346;opacity:0} +#backup-list li .link{margin-left:12px} +#backup-list li:hover .del{opacity:1} diff --git a/static/less/admin.less b/static/less/admin.less index 88b04ee..c384ec7 100644 --- a/static/less/admin.less +++ b/static/less/admin.less @@ -273,8 +273,9 @@ margin-right: 6px; } } - .c-cnt{ + .c-cnt,.c-email{ color: @black3; + font-size: 12px; } .c-reply{ color: @black3; diff --git a/static/less/cmd.less b/static/less/cmd.less index 0015e6b..3995666 100644 --- a/static/less/cmd.less +++ b/static/less/cmd.less @@ -27,6 +27,9 @@ color: @red1; opacity: 0; } + .link{ + margin-left: 12px; + } &:hover{ .del{ opacity: 1; diff --git a/view/admin/cmd/backup.html b/view/admin/cmd/backup.html index 0b251d1..0a8bbef 100644 --- a/view/admin/cmd/backup.html +++ b/view/admin/cmd/backup.html @@ -5,7 +5,7 @@

备份数据

    {{range .Files}}
  • {{DateTime .ModTime "MM.DD HH:mm"}} - {{.Name}} + {{.Name}} {{FileSize .Size}}
  • {{end}} diff --git a/view/admin/comments.html b/view/admin/comments.html index 47d8465..857b12d 100644 --- a/view/admin/comments.html +++ b/view/admin/comments.html @@ -4,7 +4,8 @@
    {{.Author}}{{if .IsAdmin}}  (admin){{end}} - {{DateInt64 .CreateTime "MM.DD HH:mm"}}{{if .GetContent}} + {{DateInt64 .CreateTime "MM.DD HH:mm"}} + {{if .GetContent}} @{{.GetContent.Title}}{{else}} @无效{{end}}{{if ne .Status "approved"}} 审核中{{end}} From 25a50cfae49d8f7dce7517cfe51605ead93b8afa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Sat, 1 Feb 2014 17:09:20 +0800 Subject: [PATCH 11/82] change draft status behavior, add http headers for file download --- GoInk/context.go | 7 +++++++ app/handler/home.go | 2 +- app/model/content.go | 8 +++++++- view/default/article.html | 2 +- view/default/index.html | 5 ++--- view/ling/article.html | 2 +- view/ling/index.html | 3 +-- 7 files changed, 20 insertions(+), 9 deletions(-) diff --git a/GoInk/context.go b/GoInk/context.go index 67fa965..fddec42 100644 --- a/GoInk/context.go +++ b/GoInk/context.go @@ -322,6 +322,13 @@ func (ctx *Context) Download(file string) { ctx.Status = 403 return } + output := ctx.Response.Header() + output.Set("Content-Type", "application/octet-stream") + output.Set("Content-Disposition", "attachment; filename="+path.Base(file)) + output.Set("Content-Transfer-Encoding", "binary") + output.Set("Expires", "0") + output.Set("Cache-Control", "must-revalidate") + output.Set("Pragma", "public") http.ServeFile(ctx.Response, ctx.Request, file) ctx.IsSend = true } diff --git a/app/handler/home.go b/app/handler/home.go index 61bccb3..f4f410b 100644 --- a/app/handler/home.go +++ b/app/handler/home.go @@ -71,7 +71,7 @@ func Article(context *GoInk.Context) { id, _ := strconv.Atoi(context.Param("id")) slug := context.Param("slug") article := model.GetContentById(id) - if article == nil || article.Status != "publish"{ + if article == nil{ context.Redirect("/") return } diff --git a/app/model/content.go b/app/model/content.go index eb25b96..cf09776 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -52,7 +52,7 @@ func (cnt *Content) TagString() string { // get content link. func (cnt *Content) Link() string { - if cnt.Status != "publish"{ + if cnt.Status != "publish" { return "#" } if cnt.IsLinked { @@ -63,6 +63,9 @@ func (cnt *Content) Link() string { // get content text. func (cnt *Content) Content() string { + if cnt.Status != "publish" { + return "" + } txt := strings.Replace(cnt.Text, "", "", -1) if GetSetting("enable_go_markdown") == "true" { return utils.Markdown2Html(txt) @@ -72,6 +75,9 @@ func (cnt *Content) Content() string { // get content summary. func (cnt *Content) Summary() string { + if cnt.Status != "publish" { + return "" + } text := strings.Split(cnt.Text, "")[0] if GetSetting("enable_go_markdown") == "true" { return utils.Markdown2Html(text) diff --git a/view/default/article.html b/view/default/article.html index fc0b71c..4ddd7b9 100644 --- a/view/default/article.html +++ b/view/default/article.html @@ -1,5 +1,5 @@
    -
    {{with .Article}} +
    {{with .Article}}

    {{.Title}}

    {{Html .Content}}

    diff --git a/view/default/index.html b/view/default/index.html index a6f2604..d1ea759 100644 --- a/view/default/index.html +++ b/view/default/index.html @@ -1,7 +1,6 @@

    {{range .Articles}} -
    -
    - {{if gt .CommentNum 0}} +
    +
    {{if gt .CommentNum 0}}

    {{.CommentNum}} ℃

    {{end}}

    {{.Hits}} ℉

    {{DateInt64 .CreateTime "MM.DD"}}

    diff --git a/view/ling/article.html b/view/ling/article.html index ab28f75..2e5f9a6 100644 --- a/view/ling/article.html +++ b/view/ling/article.html @@ -1,5 +1,5 @@
    -
    {{with .Article}} +
    {{with .Article}}

    {{.Hits}}

    diff --git a/view/ling/index.html b/view/ling/index.html index 5275cd8..287e247 100644 --- a/view/ling/index.html +++ b/view/ling/index.html @@ -1,7 +1,6 @@
    {{range .Articles}} -
    +
    -

    {{.CommentNum}}

    {{.Hits}}

    From 939dbe246855f8f287008f1b4c7be423b6878665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Tue, 4 Feb 2014 11:36:31 +0800 Subject: [PATCH 12/82] change draft status behavior, fix router regex --- GoInk/router.go | 7 ++++++- app/app.go | 2 -- app/handler/home.go | 2 +- app/model/content.go | 38 ++++++++++++++++++++++++++++++++------ 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/GoInk/router.go b/GoInk/router.go index 709ca2f..9813575 100644 --- a/GoInk/router.go +++ b/GoInk/router.go @@ -75,7 +75,12 @@ func (rt *Router) parsePattern(pattern string) (regex *regexp.Regexp, params []s } func (rt *Router) Find(url string, method string) (params map[string]string, fn []Handler) { - url = strings.Replace(url, path.Ext(url), "", -1) + sfx := path.Ext(url) + url = strings.Replace(url, sfx, "", -1) + // fix path end slash + if !strings.HasSuffix(url,"/") && sfx == ""{ + url +="/" + } for _, r := range rt.routeSlice { if r.regex.MatchString(url) && r.method == method { p := r.regex.FindStringSubmatch(url) diff --git a/app/app.go b/app/app.go index 40b4314..fcda60e 100644 --- a/app/app.go +++ b/app/app.go @@ -203,9 +203,7 @@ func registerHomeHandler() { App.Get("/p/:page/", handler.Home) App.Post("/comment/:id/", handler.Comment) - App.Get("/rss", handler.Feed) App.Get("/rss/", handler.Feed) - App.Get("/feed", handler.Feed) App.Get("/feed/", handler.Feed) App.Get("/:slug", handler.TopPage) diff --git a/app/handler/home.go b/app/handler/home.go index f4f410b..2253d56 100644 --- a/app/handler/home.go +++ b/app/handler/home.go @@ -60,7 +60,7 @@ func Home(context *GoInk.Context) { context.Layout("home") page, _ := strconv.Atoi(context.Param("page")) size, _ := strconv.Atoi(model.GetSetting("article_size")) - articles, pager := model.GetArticleList(page, size) + articles, pager := model.GetPublishArticleList(page, size) Theme(context).Layout("home").Render("index", map[string]interface{}{ "Articles": articles, "Pager": pager, diff --git a/app/model/content.go b/app/model/content.go index cf09776..db2d70b 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -63,9 +63,6 @@ func (cnt *Content) Link() string { // get content text. func (cnt *Content) Content() string { - if cnt.Status != "publish" { - return "" - } txt := strings.Replace(cnt.Text, "", "", -1) if GetSetting("enable_go_markdown") == "true" { return utils.Markdown2Html(txt) @@ -75,9 +72,6 @@ func (cnt *Content) Content() string { // get content summary. func (cnt *Content) Summary() string { - if cnt.Status != "publish" { - return "" - } text := strings.Split(cnt.Text, "")[0] if GetSetting("enable_go_markdown") == "true" { return utils.Markdown2Html(text) @@ -130,6 +124,23 @@ func GetContentBySlug(slug string) *Content { return nil } +func GetPublishArticleList(page, size int) ([]*Content, *utils.Pager) { + index := contentsIndex["article-publish"] + pager := utils.NewPager(page, size, len(index)) + articles := make([]*Content, 0) + if page > pager.Pages { + return articles, pager + } + for i := pager.Begin; i <= pager.End; i++ { + a := GetContentById(index[i-1]) + if a.Status != "publish" { + continue + } + articles = append(articles, GetContentById(index[i-1])) + } + return articles, pager +} + // get articles list. func GetArticleList(page, size int) ([]*Content, *utils.Pager) { index := contentsIndex["article"] @@ -174,6 +185,7 @@ func CreateContent(c *Content, t string) (*Content, error) { c.Hits = 1 contents[c.Id] = c contentsIndex[c.Type] = append([]int{c.Id}, contentsIndex[c.Type]...) + generatePublishArticleIndex() go SyncContent(c) return c, nil } @@ -181,6 +193,7 @@ func CreateContent(c *Content, t string) (*Content, error) { // save changed content. func SaveContent(c *Content) { c.EditTime = utils.Now() + generatePublishArticleIndex() go SyncContent(c) } @@ -196,6 +209,7 @@ func RemoveContent(c *Content) { } } c.Status = "DELETE" + generatePublishArticleIndex() go SyncContent(c) } @@ -249,6 +263,18 @@ func LoadContents() { sort.Sort(sort.Reverse(sort.IntSlice(pageIndex))) contentsIndex["article"] = articleIndex contentsIndex["page"] = pageIndex + generatePublishArticleIndex() +} + +func generatePublishArticleIndex() { + arr := make([]int, 0) + for _, id := range contentsIndex["article"] { + c := GetContentById(id) + if c.Status == "publish" { + arr = append(arr, id) + } + } + contentsIndex["article-publish"] = arr } func StartContentsTimer() { From f03caeec43520942d39fefded6971f35630a32dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Tue, 4 Feb 2014 22:42:30 +0800 Subject: [PATCH 13/82] update zip bytes --- app/cmd/zip.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/cmd/zip.go b/app/cmd/zip.go index 526fa1b..6a8d073 100644 --- a/app/cmd/zip.go +++ b/app/cmd/zip.go @@ -1,2 +1,2 @@ package cmd -const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9aGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja310YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH1maWVsZHNldCxpbWd7Ym9yZGVyOjB9YWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH1vbCx1bHtsaXN0LXN0eWxlOm5vbmV9Y2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfXE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ31hYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH1zdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9c3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfWlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9bGVnZW5ke2NvbG9yOiMwMDB9aHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9YXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn1we21hcmdpbi1ib3R0b206MThweH1oMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH1oMXtmb250LXNpemU6MjhweH1oMntmb250LXNpemU6MjRweH1oM3tmb250LXNpemU6MjFweH1oNHtmb250LXNpemU6MTlweH1oNXtmb250LXNpemU6MTZweH1oNntmb250LXNpemU6MTRweH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0ubGVmdHtmbG9hdDpsZWZ0fS5yaWdodHtmbG9hdDpyaWdodH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9LnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5mYWRlLW91dHtvcGFjaXR5OjB9LmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fS5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0ubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fSNoZWFkZXJ7aGVpZ2h0OjM5cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk7bGluZS1oZWlnaHQ6MzlweDtib3gtc2hhZG93OjAgMCAycHggI2NjYzstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICNjY2N9I2hlYWRlciAubmF2PmF7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzowIDE4cHg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6LTFweH0jaGVhZGVyIC5uYXY+YTpob3Zlcntib3JkZXItY29sb3I6IzAwNzliYztiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0jaGVhZGVyIC5sb2dve2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE0cHggMCAwO21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4fSNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0jaGVhZGVyIC5vdXR7Y29sb3I6I2M3MzgzYX0jaGVhZGVyIC5vdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNlNjQzNDY7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9I2Zvb3RlcntwYWRkaW5nOjI0cHg7YmFja2dyb3VuZDojZjZmNmY2O2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGQ7bWFyZ2luLXRvcDozMHB4O2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHh9I2Zvb3RlciBwe21hcmdpbi1ib3R0b206MH0jZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0uYWRtaW57bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I3Byb2ZpbGV7d2lkdGg6ODAwcHg7bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I3Byb2ZpbGUgLmF2YXRhciBpbWd7d2lkdGg6MTgwcHg7cGFkZGluZzo0cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7aGVpZ2h0OjE4MHB4fSNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9I3Byb2ZpbGUgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0jcHJvZmlsZSAuYmlve21hcmdpbi1sZWZ0Ojc1cHg7aGVpZ2h0OjE2MHB4fSNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0jYXJ0aWNsZS1saXN0e21hcmdpbi1ib3R0b206MjRweH0jYXJ0aWNsZS1saXN0IGxpe21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jYXJ0aWNsZS1saXN0IGxpPip7bWFyZ2luLXJpZ2h0OjE2cHh9I2FydGljbGUtbGlzdCBsaSAudGltZSwjYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Y29sb3I6Izk5OX0jYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0jYXJ0aWNsZS1saXN0IGxpIC5pcy1jb21tZW50e2NvbG9yOiNmZjQ0NDd9I2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0jYXJ0aWNsZS1saXN0IGxpIC5kZWwsI2FydGljbGUtbGlzdCBsaSAuZWRpdHtvcGFjaXR5OjB9I2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfSNhcnRpY2xlLWxpc3QgbGk6Zmlyc3QtY2hpbGQgaDR7cGFkZGluZy10b3A6MH0jYXJ0aWNsZS1mb3Jte21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfSNhcnRpY2xlLWZvcm0gaW5wdXQudGl0bGV7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLWJvdHRvbTpub25lO21hcmdpbi1ib3R0b206LTFweDtmb250LXNpemU6MThweH0jYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9I2FydGljbGUtZm9ybSAucHJldmlld3tib3JkZXI6MXB4IHNvbGlkICM5OTk7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTJweDtoZWlnaHQ6NzAwcHg7bWFyZ2luLWxlZnQ6LTFweDtib3JkZXItcmFkaXVzOjJweDtvdmVyZmxvdy14OnNjcm9sbH0jYXJ0aWNsZS1mb3JtIC5mb3JtLXZlcnRpY2Fse3dpZHRoOjEwMCU7bWFyZ2luLXRvcDoxOHB4fSNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgaW5wdXQuaXB0e3dpZHRoOjMwMHB4fSNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0jYXJ0aWNsZS1mb3JtIC5mb3JtLXZlcnRpY2FsIC5idG57bWFyZ2luLXJpZ2h0OjE2cHh9I2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzc3twYWRkaW5nOjAgMTJweDtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMik7Y29sb3I6IzY2Njtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9I2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9I3NldHRpbmctZm9ybXt3aWR0aDo4MjBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jc2V0dGluZy1mb3JtIC5pcHR7d2lkdGg6NDgwcHh9I3NldHRpbmctZm9ybSAuaW52YWxpZHttYXJnaW4tbGVmdDo3NXB4fSNzZXR0aW5nLWZvcm0gbGFiZWx7bWluLXdpZHRoOjEwZW19I3NldHRpbmctZm9ybSAudGlwLmJsb2Nre21hcmdpbi1sZWZ0OjEyZW19I3NldHRpbmctZm9ybS5jdXN0b217d2lkdGg6MTAwMHB4fSNzZXR0aW5nLWZvcm0uY3VzdG9tIGlucHV0LmtleXt3aWR0aDoyNTBweH0jc2V0dGluZy1mb3JtLmN1c3RvbSBpbnB1dC52YWx1ZXt3aWR0aDo2NTBweH0jc2V0dGluZy1mb3JtLmN1c3RvbSAuaXRlbXttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jc2V0dGluZy1mb3JtLmN1c3RvbSAuZGVse21hcmdpbi1sZWZ0OjEycHg7Y29sb3I6I2U2NDM0Nn0jc2V0dGluZy1mb3JtLmN1c3RvbSAudGlwe21hcmdpbi1sZWZ0OjB9I2NvbW1lbnQtbGlzdCAuYy1hdmF0YXJ7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjJweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O21hcmdpbi1yaWdodDoxOHB4fSNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9I2NvbW1lbnQtbGlzdCAuYy10aW1le2NvbG9yOiM5OTk7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jY29tbWVudC1saXN0IC5jLXRpbWUgLmZhe21hcmdpbi1yaWdodDo2cHh9I2NvbW1lbnQtbGlzdCAuYy1jbnR7Y29sb3I6Izk5OX0jY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfSNjb21tZW50LWxpc3QgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxM3B4fSNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifSNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiM2NjZ9I2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0jY29tbWVudC1saXN0IC5jLWNoZWNrLCNjb21tZW50LWxpc3QgLmMtZGVse2NvbG9yOiNlNjQzNDZ9I2NvbW1lbnQtbGlzdCAuYy1jaGVjayAuZmEsI2NvbW1lbnQtbGlzdCAuYy1kZWwgLmZhe21hcmdpbi1yaWdodDo2cHh9I2NvbW1lbnQtbGlzdCAuYy1jaGVjazpob3ZlciwjY29tbWVudC1saXN0IC5jLWRlbDpob3Zlcntjb2xvcjojYWEzOTNjfSNjb21tZW50LWZvcm17cGFkZGluZy10b3A6MTJweDtkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6NzJweH0jY29tbWVudC1mb3JtIC5idG57bWFyZ2luLXJpZ2h0OjI0cHh9I2NvbW1lbnQtY29udGVudHt3aWR0aDo1MDBweDtoZWlnaHQ6ODBweDttYXJnaW4tcmlnaHQ6MjRweH0jZmlsZXMtbGlzdCBsaS5maWxle21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZmlsZXMtbGlzdCBsaS5maWxlPip7bWFyZ2luLXJpZ2h0OjE2cHh9I2ZpbGVzLWxpc3QgbGkuZmlsZTpob3ZlciAuZGVse29wYWNpdHk6MSAhaW1wb3J0YW50fSNmaWxlcy1saXN0IC51cGxvYWQtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2ZpbGVzLWxpc3QgLmRlbHtjb2xvcjojZTY0MzQ2fSNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0jZmlsZXMtbGlzdCAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9I2ZpbGVzLWxpc3QgLnNpemV7d2lkdGg6NGVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfSNwbHVnaW4tbGlzdCBsaXttYXJnaW4tYm90dG9tOjE2cHg7cGFkZGluZy1ib3R0b206MTZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jcGx1Z2luLWxpc3QgbGkgLmRlc2N7bWFyZ2luLWJvdHRvbTowO3dpZHRoOjk5JTtjb2xvcjojOTk5fSNwbHVnaW4tbGlzdCBsaSBhLmxibHtwYWRkaW5nOjAgOHB4O21hcmdpbi1sZWZ0OjE2cHh9I3BsdWdpbi1saXN0IGxpIC52ZXJzaW9ue2NvbG9yOiM1MDc2NTA7bWFyZ2luLWxlZnQ6MTZweH0jcGx1Z2luLWxpc3QgbGkgLm5hbWV7Zm9udC1zaXplOjE2cHh9I3BsdWdpbi1saXN0IGxpIC5hY3RpdmV7d2lkdGg6MTJweDtoZWlnaHQ6MTJweDttYXJnaW4tcmlnaHQ6MTZweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDoxMHB4fSNwbHVnaW4tbGlzdCBsaSAuc2V0dGluZ3ttYXJnaW4tbGVmdDoxNnB4fSNwbHVnaW4tc2V0dGluZy1mb3JtIHAuaXRlbXtjbGVhcjpib3RofSNwbHVnaW4tc2V0dGluZy1mb3JtIGxhYmVse2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjZlbTt0ZXh0LWFsaWduOnJpZ2h0O21hcmdpbi1yaWdodDoyZW19I3BsdWdpbi1zZXR0aW5nLWZvcm0gLnRpdGxle3BhZGRpbmctdG9wOjA7bWFyZ2luLWJvdHRvbToxOHB4fSNwbHVnaW4tc2V0dGluZy1mb3JtIGlucHV0LmlwdHt3aWR0aDo2MDBweH0jZGFzaGJvYXJkIC5ncmlkLTEtNXttYXJnaW4tcmlnaHQ6NCV9I2Rhc2hib2FyZCAucXVpY2stbGluayBsaXtsaXN0LXN0eWxlOmluc2lkZSBkaXNjO21hcmdpbi1ib3R0b206NnB4O3BhZGRpbmctYm90dG9tOjZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZGFzaGJvYXJkIC5zdGF0cyAubGJse3BhZGRpbmc6MXB4IDVweDttYXJnaW46MCAzcHh9UEsHCNzwws9OLAAATiwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAHN0YXRpY1xjc3NcY21kLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9aGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja310YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH1maWVsZHNldCxpbWd7Ym9yZGVyOjB9YWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH1vbCx1bHtsaXN0LXN0eWxlOm5vbmV9Y2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfXE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ31hYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH1zdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9c3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfWlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9bGVnZW5ke2NvbG9yOiMwMDB9aHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9YXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn1we21hcmdpbi1ib3R0b206MThweH1oMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH1oMXtmb250LXNpemU6MjhweH1oMntmb250LXNpemU6MjRweH1oM3tmb250LXNpemU6MjFweH1oNHtmb250LXNpemU6MTlweH1oNXtmb250LXNpemU6MTZweH1oNntmb250LXNpemU6MTRweH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0ubGVmdHtmbG9hdDpsZWZ0fS5yaWdodHtmbG9hdDpyaWdodH0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9LnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5mYWRlLW91dHtvcGFjaXR5OjB9LmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fS5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0ubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fS5jbWR7bWFyZ2luOjI0cHggNDhweH0uY21kLWhlYWRlcnttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jYmFja3VwLWJ0bnttYXJnaW46MTBweCAwIDAgMzBweH0uY21kLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2JhY2t1cC1saXN0IGxpe2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGU7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jYmFja3VwLWxpc3QgbGk+c3BhbiwjYmFja3VwLWxpc3QgbGk+YXttYXJnaW4tcmlnaHQ6MTZweH0jYmFja3VwLWxpc3QgbGkgLmRlbHtjb2xvcjojZTY0MzQ2O29wYWNpdHk6MH0jYmFja3VwLWxpc3QgbGk6aG92ZXIgLmRlbHtvcGFjaXR5OjF9UEsHCDARqHlDFgAAQxYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHN0YXRpY1xjc3NcY29kZW1pcnJvci5jc3MvKiBCQVNJQ1MgKi8KCi5Db2RlTWlycm9yIHsKICAgIC8qIFNldCBoZWlnaHQsIHdpZHRoLCBib3JkZXJzLCBhbmQgZ2xvYmFsIGZvbnQgcHJvcGVydGllcyBoZXJlICovCiAgICBmb250LWZhbWlseTogQ29uc29sYXMsICJNaWNyb3NvZnQgWWFIZWkiLCAiQ291cmllciBOZXciLCBBcmlhbDsKICAgIGhlaWdodDogNjYwcHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBib3JkZXI6MXB4IHNvbGlkICM5OTk7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiBTZXQgc2Nyb2xsaW5nIGJlaGF2aW91ciBoZXJlICovCiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLyogUEFERElORyAqLwoKLkNvZGVNaXJyb3ItbGluZXMgewogICAgcGFkZGluZzogNHB4IDA7IC8qIFZlcnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAqLwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyAvKiBUaGUgbGl0dGxlIHNxdWFyZSBiZXR3ZWVuIEggYW5kIFYgc2Nyb2xsYmFycyAqLwp9CgovKiBHVVRURVIgKi8KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVycyB7Cn0KCi5Db2RlTWlycm9yLWxpbmVudW1iZXIgewogICAgcGFkZGluZzogMCAzcHggMCA1cHg7CiAgICBtaW4td2lkdGg6IDIwcHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIGNvbG9yOiAjNTU1OwogICAgbGluZS1oZWlnaHQ6IDIwcHg7Cn0KCi8qIENVUlNPUiAqLwoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7CiAgICB6LWluZGV4OiAzOwp9CgovKiBTaG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0ICovCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHNpbHZlcjsKfQoKLkNvZGVNaXJyb3IuY20ta2V5bWFwLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHdpZHRoOiBhdXRvOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogIzdlNzsKICAgIHotaW5kZXg6IDE7Cn0KCi8qIENhbiBzdHlsZSBjdXJzb3IgZGlmZmVyZW50IGluIG92ZXJ3cml0ZSAobm9uLWluc2VydCkgbW9kZSAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IuQ29kZU1pcnJvci1vdmVyd3JpdGUgewp9CgouY20tdGFiIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLyogREVGQVVMVCBUSEVNRSAqLwoKLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7CiAgICBjb2xvcjogIzcwODsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7CiAgICBjb2xvcjogIzIxOTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHsKICAgIGNvbG9yOiAjMTY0Owp9CgouY20tcy1kZWZhdWx0IC5jbS1kZWYgewogICAgY29sb3I6ICMwMGY7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzA1YTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMyB7CiAgICBjb2xvcjogIzA4NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcHJvcGVydHkgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICNhNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZyB7CiAgICBjb2xvcjogI2ExMTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nLTIgewogICAgY29sb3I6ICNmNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW1ldGEgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1YWxpZmllciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnVpbHRpbiB7CiAgICBjb2xvcjogIzMwYTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnJhY2tldCB7CiAgICBjb2xvcjogIzk5NzsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdGFnIHsKICAgIGNvbG9yOiAjMTcwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICMwMGM7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhlYWRlciB7CiAgICBjb2xvcjogYmx1ZTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUgewogICAgY29sb3I6ICMwOTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhyIHsKICAgIGNvbG9yOiAjOTk5Owp9CgouY20tcy1kZWZhdWx0IC5jbS1saW5rIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tbmVnYXRpdmUgewogICAgY29sb3I6ICNkNDQ7Cn0KCi5jbS1wb3NpdGl2ZSB7CiAgICBjb2xvcjogIzI5MjsKfQoKLmNtLWhlYWRlciwgLmNtLXN0cm9uZyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLWVtIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmNtLWxpbmsgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWVycm9yIHsKICAgIGNvbG9yOiAjZjAwOwp9CgouY20taW52YWxpZGNoYXIgewogICAgY29sb3I6ICNmMDA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICMwZjA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICNmMjI7Cn0KCi5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjZThmMmZmOwp9CgovKiBTVE9QICovCgovKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgY29udGFpbnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZgogICB0aGUgZWRpdG9yLiBZb3UgcHJvYmFibHkgc2hvdWxkbid0IHRvdWNoIHRoZW0uICovCgouQ29kZU1pcnJvciB7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIGNvbG9yOiBibGFjazsKfQoKLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIC8qIDMwcHggaXMgdGhlIG1hZ2ljIG1hcmdpbiB1c2VkIHRvIGhpZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJhcnMgKi8KICAgIC8qIFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAgICBtYXJnaW4tYm90dG9tOiAtMzBweDsKICAgIG1hcmdpbi1yaWdodDogLTMwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdXRsaW5lOiBub25lOyAvKiBQcmV2ZW50IGRyYWdnaW5nIGZyb20gaGlnaGxpZ2h0aW5nIHRoZSBlbGVtZW50ICovCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KCi5Db2RlTWlycm9yLXNpemVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLyogVGhlIGZha2UsIHZpc2libGUgc2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSByZWRyYXcgZHVyaW5nIHNjcm9sbGluZwogICBiZWZvcmUgYWN0dWFsbCBzY3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNoYWtpbmcgYW5kCiAgIGZsaWNrZXJpbmcgYXJ0aWZhY3RzLiAqLwouQ29kZU1pcnJvci12c2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHotaW5kZXg6IDY7CiAgICBkaXNwbGF5OiBub25lOwp9CgouQ29kZU1pcnJvci12c2Nyb2xsYmFyIHsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcmZsb3cteTogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1oc2Nyb2xsYmFyIHsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBvdmVyZmxvdy14OiBzY3JvbGw7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIgewogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIgewogICAgbGVmdDogMDsKICAgIGJvdHRvbTogMDsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVycyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgdG9wOiAwOwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICB6LWluZGV4OiAzOwp9CgouQ29kZU1pcnJvci1ndXR0ZXIgewogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGhlaWdodDogMTAwJTsKICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgbWFyZ2luLWJvdHRvbTogLTMycHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAvKiBIYWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqLwogICAgKnpvb206IDE7CiAgICAqZGlzcGxheTogaW5saW5lOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZWx0IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIHotaW5kZXg6IDQ7Cn0KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIGN1cnNvcjogdGV4dDsKfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIC8qIFJlc2V0IHNvbWUgc3R5bGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgbWlnaHQgaGF2ZSBzZXQgKi8KICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItd2lkdGg6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgbWFyZ2luOiAwOwogICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIHotaW5kZXg6IDI7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKfQoKLkNvZGVNaXJyb3Itd3JhcCBwcmUgewogICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC1icmVhazogbm9ybWFsOwp9CgouQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICB3aWR0aDogLXdlYmtpdC1maXQtY29udGVudDsKICAgIHdpZHRoOiAtbW96LWZpdC1jb250ZW50OwogICAgd2lkdGg6IGZpdC1jb250ZW50Owp9CgouQ29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLWNvZGUgcHJlIHsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiBhdXRvOwp9CgouQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB6LWluZGV4OiAwOwp9CgouQ29kZU1pcnJvci1saW5ld2lkZ2V0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLkNvZGVNaXJyb3Itd2lkZ2V0IHsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwgewogICAgb3ZlcmZsb3cteDogaGlkZGVuOwp9CgouQ29kZU1pcnJvci1tZWFzdXJlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUgewogICAgcG9zaXRpb246IHN0YXRpYzsKfQoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiAwOwp9CgouQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgouQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDlkOWQ5Owp9CgouQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICNkN2Q0ZjA7Cn0KCi5jbS1zZWFyY2hpbmcgewogICAgYmFja2dyb3VuZDogI2ZmYTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDAsIC40KTsKfQoKLyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVybmluZyBmdW5ueSBvZmZzZXRUb3BzIG9uIHRoZSBzcGFucyAqLwouQ29kZU1pcnJvciBzcGFuIHsKICAgICp2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207Cn0KCkBtZWRpYSBwcmludCB7CiAgICAvKiBIaWRlIHRoZSBjdXJzb3Igd2hlbiBwcmludGluZyAqLwogICAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9Cn0KCi5jbS1zLWJhc2UxNi1kYXJrLkNvZGVNaXJyb3IgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGNvbG9yOiAjZTBlMGUwOwp9CgouY20tcy1iYXNlMTYtZGFyayBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjMjAyMDIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGJvcmRlci1yaWdodDogMHB4Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1jdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYjBiMGIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tY29tbWVudCB7CiAgICBjb2xvcjogIzhmNTUzNjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdG9tIHsKICAgIGNvbG9yOiAjYWE3NTlmOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLW51bWJlciB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1wcm9wZXJ0eSwgLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20ta2V5d29yZCB7CiAgICBjb2xvcjogI2FjNDE0MjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1zdHJpbmcgewogICAgY29sb3I6ICNmNGJmNzU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzZhOWZiNTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1kZWYgewogICAgY29sb3I6ICNkMjg0NDU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYnJhY2tldCB7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS10YWcgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tbGluayB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1lcnJvciB7CiAgICBiYWNrZ3JvdW5kOiAjYWM0MTQyOwogICAgY29sb3I6ICNiMGIwYjA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjMkYyRjJGICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9ClBLBwgjAzWCTiAAAE4gAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAABzdGF0aWNcY3NzXGNvbW1vbi5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfWhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9dGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9ZmllbGRzZXQsaW1ne2JvcmRlcjowfWFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9b2wsdWx7bGlzdC1zdHlsZTpub25lfWNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH1xOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9YWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9c3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfXN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWxlZ2VuZHtjb2xvcjojMDAwfWh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifWF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9cHttYXJnaW4tYm90dG9tOjE4cHh9aDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9aDF7Zm9udC1zaXplOjI4cHh9aDJ7Zm9udC1zaXplOjI0cHh9aDN7Zm9udC1zaXplOjIxcHh9aDR7Zm9udC1zaXplOjE5cHh9aDV7Zm9udC1zaXplOjE2cHh9aDZ7Zm9udC1zaXplOjE0cHh9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmxlZnR7ZmxvYXQ6bGVmdH0ucmlnaHR7ZmxvYXQ6cmlnaHR9LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfS52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uYmxvY2t7ZGlzcGxheTpibG9ja30uZmFkZS1vdXR7b3BhY2l0eTowfS5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5jb250YWluZXJ7d2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7d2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99LmdyaWQtMS0ye3dpZHRoOjUwJX0uZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9LmdyaWQtMS00e3dpZHRoOjI1JX0uZ3JpZC0xLTV7d2lkdGg6MjAlfS5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0uZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9LmdyaWQtMy00e3dpZHRoOjc1JX0uZ3JpZC0zLTV7d2lkdGg6NjAlfS5ncmlkLTQtNXt3aWR0aDo4MCV9LmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfWlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9LmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0uZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9LmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfS5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9LmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9LmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0uZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9LmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn1hLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9LmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfS5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifS5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9LmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn1hLmxibHtsaW5lLWhlaWdodDoyNnB4fWEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0ubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9YS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0ubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifWEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifS5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfS5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9LnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifS5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Lm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0ubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHg7cGFkZGluZy1ib3R0b206MTJweH0ubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Lm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fS5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0ubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Lm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fS5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0ubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0ubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0ubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfS5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0ubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0ubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0ubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Lm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfS5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fS5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9UEsHCHu8/YwmFAAAJhQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xjc3NcaGlnaGxpZ2h0LmNzcy8qDQoNClN1bmJ1cnN0LWxpa2Ugc3R5bGUgKGMpIFZhc2lseSBQb2xvdm55b3YgPHZhc3RAd2hpdGVhbnRzLm5ldD4NCg0KKi8NCg0KcHJlIGNvZGUgew0KICAgIGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAwLjVlbTsNCiAgICBiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2Y4ZjhmODsNCn0NCg0KcHJlIC5jb21tZW50LA0KcHJlIC50ZW1wbGF0ZV9jb21tZW50LA0KcHJlIC5qYXZhZG9jIHsNCiAgICBjb2xvcjogI2FlYWVhZTsNCiAgICBmb250LXN0eWxlOiBpdGFsaWM7DQp9DQoNCnByZSAua2V5d29yZCwNCnByZSAucnVieSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnJlcXVlc3QsDQpwcmUgLnN0YXR1cywNCnByZSAubmdpbnggLnRpdGxlIHsNCiAgICBjb2xvcjogI0UyODk2NDsNCn0NCg0KcHJlIC5mdW5jdGlvbiAua2V5d29yZCwNCnByZSAuc3ViIC5rZXl3b3JkLA0KcHJlIC5tZXRob2QsDQpwcmUgLmxpc3QgLnRpdGxlIHsNCiAgICBjb2xvcjogIzk5Q0Y1MDsNCn0NCg0KcHJlIC5zdHJpbmcsDQpwcmUgLnRhZyAudmFsdWUsDQpwcmUgLmNkYXRhLA0KcHJlIC5maWx0ZXIgLmFyZ3VtZW50LA0KcHJlIC5hdHRyX3NlbGVjdG9yLA0KcHJlIC5hcGFjaGUgLmNicmFja2V0LA0KcHJlIC5kYXRlLA0KcHJlIC50ZXggLmNvbW1hbmQsDQpwcmUgLmNvZmZlZXNjcmlwdCAuYXR0cmlidXRlIHsNCiAgICBjb2xvcjogIzY1QjA0MjsNCn0NCg0KcHJlIC5zdWJzdCB7DQogICAgY29sb3I6ICNEQUVGQTM7DQp9DQoNCnByZSAucmVnZXhwIHsNCiAgICBjb2xvcjogI0U5QzA2MjsNCn0NCg0KcHJlIC50aXRsZSwNCnByZSAuc3ViIC5pZGVudGlmaWVyLA0KcHJlIC5waSwNCnByZSAudGFnLA0KcHJlIC50YWcgLmtleXdvcmQsDQpwcmUgLmRlY29yYXRvciwNCnByZSAuc2hlYmFuZywNCnByZSAucHJvbXB0IHsNCiAgICBjb2xvcjogIzg5QkRGRjsNCn0NCg0KcHJlIC5jbGFzcyAudGl0bGUsDQpwcmUgLmhhc2tlbGwgLnR5cGUsDQpwcmUgLnNtYWxsdGFsayAuY2xhc3MsDQpwcmUgLmphdmFkb2N0YWcsDQpwcmUgLnlhcmRvY3RhZywNCnByZSAucGhwZG9jIHsNCiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCg0KcHJlIC5zeW1ib2wsDQpwcmUgLnJ1YnkgLnN5bWJvbCAuc3RyaW5nLA0KcHJlIC5udW1iZXIgew0KICAgIGNvbG9yOiAjMzM4N0NDOw0KfQ0KDQpwcmUgLnBhcmFtcywNCnByZSAudmFyaWFibGUsDQpwcmUgLmNsb2p1cmUgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICMzRTg3RTM7DQp9DQoNCnByZSAuY3NzIC50YWcsDQpwcmUgLnJ1bGVzIC5wcm9wZXJ0eSwNCnByZSAucHNldWRvLA0KcHJlIC50ZXggLnNwZWNpYWwgew0KICAgIGNvbG9yOiAjQ0RBODY5Ow0KfQ0KDQpwcmUgLmNzcyAuY2xhc3Mgew0KICAgIGNvbG9yOiAjOUI3MDNGOw0KfQ0KDQpwcmUgLnJ1bGVzIC5rZXl3b3JkIHsNCiAgICBjb2xvcjogI0M1QUY3NTsNCn0NCg0KcHJlIC5ydWxlcyAudmFsdWUgew0KICAgIGNvbG9yOiAjQ0Y2QTRDOw0KfQ0KDQpwcmUgLmNzcyAuaWQgew0KICAgIGNvbG9yOiAjOEI5OEFCOw0KfQ0KDQpwcmUgLmFubm90YXRpb24sDQpwcmUgLmFwYWNoZSAuc3FicmFja2V0LA0KcHJlIC5uZ2lueCAuYnVpbHRfaW4gew0KICAgIGNvbG9yOiAjOUI4NTlEOw0KfQ0KDQpwcmUgLnByZXByb2Nlc3NvciwNCnByZSAucHJhZ21hIHsNCiAgICBjb2xvcjogIzg5OTZBODsNCn0NCg0KcHJlIC5oZXhjb2xvciwNCnByZSAuY3NzIC52YWx1ZSAubnVtYmVyIHsNCiAgICBjb2xvcjogI0REN0IzQjsNCn0NCg0KcHJlIC5jc3MgLmZ1bmN0aW9uIHsNCiAgICBjb2xvcjogI0RBRDA4NTsNCn0NCg0KcHJlIC5kaWZmIC5oZWFkZXIsDQpwcmUgLmNodW5rLA0KcHJlIC50ZXggLmZvcm11bGEgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwRTIyMzE7DQogICAgY29sb3I6ICNGOEY4Rjg7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmRpZmYgLmNoYW5nZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzRBNDEwRDsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5hZGRpdGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI1M0IyMjsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5kZWxldGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzQyMEUwOTsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5jb2ZmZWVzY3JpcHQgLmphdmFzY3JpcHQsDQpwcmUgLmphdmFzY3JpcHQgLnhtbCwNCnByZSAudGV4IC5mb3JtdWxhLA0KcHJlIC54bWwgLmphdmFzY3JpcHQsDQpwcmUgLnhtbCAudmJzY3JpcHQsDQpwcmUgLnhtbCAuY3NzLA0KcHJlIC54bWwgLmNkYXRhIHsNCiAgICBvcGFjaXR5OiAwLjU7DQp9DQoNCnByZSAuZ28gLnR5cGVuYW1lew0KICAgIGNvbG9yOiAjZmZiYzU0Ow0KfVBLBwjDaOPeXQkAAF0JAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcY3NzXGxpbmcuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOiNmM2YzZjN9CiNoZWFkZXJ7YmFja2dyb3VuZDojMDA5M2M0O21pbi13aWR0aDoxMjBweDtwYWRkaW5nOjQwcHggMCA0OHB4IDA7Y29sb3I6I2ZiZmJmYn0jaGVhZGVyIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7Ym9yZGVyLXJhZGl1czo1MHB4Oy1tb3otYm9yZGVyLXJhZGl1czo1MHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo1MHB4fQojaGVhZGVyLWh7bGluZS1oZWlnaHQ6OTRweDtjb2xvcjojZmJmYmZiO3BhZGRpbmc6MDttYXJnaW4tbGVmdDoyNHB4fSNoZWFkZXItaCBhe2NvbG9yOiNmYmZiZmJ9CiNuYXZ7bGluZS1oZWlnaHQ6OTBweH0jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7bWFyZ2luLWxlZnQ6NDRweH0jbmF2IGxpIGF7Zm9udC1zaXplOjE4cHg7Y29sb3I6I2YzZjNmMztkaXNwbGF5OmJsb2NrfSNuYXYgbGkgYTpob3Zlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgMCAzcHggIzMzMzstbW96LXRleHQtc2hhZG93OjAgMCAzcHggIzMzMzstd2Via2l0LXRleHQtc2hhZG93OjAgMCAzcHggIzMzM30KI2Zvb3RlcntwYWRkaW5nOjMwcHggNDBweDtjb2xvcjojOTk5fQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0jYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAudmlld3N7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIC5jb21tZW50c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjQwcHg7bWFyZ2luLWxlZnQ6OHB4O2JvcmRlcjo2cHggc29saWQgI2ZmZjtib3gtc2hhZG93OjAgMCAycHggIzk5OTstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICM5OTl9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cyBhe2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHM6aG92ZXJ7Ym94LXNoYWRvdzowIDAgNHB4ICM2NjY7LW1vei1ib3gtc2hhZG93OjAgMCA0cHggIzY2Njstd2Via2l0LWJveC1zaGFkb3c6MCAwIDRweCAjNjY2fQojYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze3RvcDoxNHB4O2xlZnQ6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czozMHB4Oy1tb3otYm9yZGVyLXJhZGl1czozMHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozMHB4O3BhZGRpbmc6MDtib3JkZXI6NHB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tYWluOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7Ym9yZGVyOjExcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjYzcHg7bGVmdDotMjJweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aXRsZXtmb250LXNpemU6MjhweDtwYWRkaW5nLWJvdHRvbToyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW4gLnRpbWUtaW5mb3tjb2xvcjojOTk5O21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO3RleHQtaW5kZW50OjFlbTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjUwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1haW57bWFyZ2luLWxlZnQ6MH0jYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWluOmJlZm9yZXtkaXNwbGF5Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1ldGF7cmlnaHQ6NDRweDt0b3A6LTM2cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLnZpZXdze3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czozNnB4Oy1tb3otYm9yZGVyLXJhZGl1czozNnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozNnB4O2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1zaXplOjI0cHg7cGFkZGluZzowO2JvcmRlcjo2cHggc29saWQgI2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC50YWd7Y29sb3I6Izk5OX0KI2FydGljbGUtcGFnZXJ7bWFyZ2luLWxlZnQ6MTE2cHh9I2FydGljbGUtcGFnZXIgLml0ZW17bWFyZ2luOjA7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM5OTk7cGFkZGluZzoxMnB4IDE4cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQ6IzAwNzliY30KI2NvbW1lbnR7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2NvbW1lbnQgLm1ldGF7cmlnaHQ6LTI0cHg7dG9wOi0zMHB4fSNjb21tZW50IC5tZXRhIC5jb21tZW50c3ttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye21hcmdpbi1yaWdodDoxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDttYXJnaW4tdG9wOjZweH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIHB7bWFyZ2luLWJvdHRvbTowfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3J7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmJsb2NrfSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3I6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZGRkO3BhZGRpbmc6M3B4IDEwcHh9I2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KI2NvbW1lbnQtbGlzdCAuYy1jb250ZW50e3BhZGRpbmctdG9wOjRweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2O21hcmdpbi1sZWZ0OjEycHh9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1zaG93e21hcmdpbi1ib3R0b206MzJweH0KI2NvbW1lbnQtdGl0bGV7bWFyZ2luLWJvdHRvbToyMHB4O3BhZGRpbmctYm90dG9tOjIwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvO21hcmdpbi1ib3R0b206MzBweH0jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcntib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHg7d2lkdGg6NTBweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXtkaXNwbGF5Om5vbmV9ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH0gI25hdiwjaGVhZGVyLWh7bGluZS1oZWlnaHQ6NTBweH0gI2Zvb3RlciBzcGFue2Zsb2F0Om5vbmU7dGV4dC1hbGlnbjpjZW50ZXJ9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1oe21hcmdpbi1sZWZ0OjB9ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfSAjbmF2e2Zsb2F0OmxlZnR9I25hdiBsaXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo0NHB4fX0KUEsHCMnsXolgKgAAYCoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHN0YXRpY1xjc3Ncc3R5bGUuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2JnLnBuZyIpIHJlcGVhdH0KI2hlYWRlcntiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2hlYWRlci5naWYiKSByZXBlYXQgIzRjNzI5ODttaW4td2lkdGg6MTIwcHg7cGFkZGluZzozMHB4IDA7Y29sb3I6I2ZiZmJmYn0KI2hlYWRlci1pbWd7d2lkdGg6OTZweDtoZWlnaHQ6OTZweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe3BhZGRpbmctdG9wOjI0cHg7Zm9udC1zaXplOjMycHh9I2hlYWRlci1oIGF7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfQojbmF2e2hlaWdodDo1NHB4O2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3gtc2hhZG93OjAgMCAycHggI2JiYjstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICNiYmI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY30jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7cGFkZGluZzowIDE4cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7cGFkZGluZzowIDMycHg7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzAwNzliY30KI25hdi5maXhlZHtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO3RvcDowfQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZm9vdGVye2NvbG9yOiNjY2M7YmFja2dyb3VuZC1jb2xvcjojMWMyNDI5O3BhZGRpbmc6MjRweCAwfSNmb290ZXIgcHttYXJnaW4tYm90dG9tOjlweDtmb250LXdlaWdodDpib2xkO2xldHRlci1zcGFjaW5nOjFweH0jZm9vdGVyIHAgYXtjb2xvcjojY2NjO21hcmdpbjowIDE2cHh9I2Zvb3RlciBwIGE6aG92ZXJ7Y29sb3I6I2ZiZmJmYn0KI2Zvb3RlciBwIGEgLmZhe21hcmdpbi1yaWdodDo4cHh9CiNnby10b3B7Ym90dG9tOjUwcHg7cmlnaHQ6NDBweDtwb3NpdGlvbjpmaXhlZDtjb2xvcjojZmZmO3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo4cHg7b3BhY2l0eTouNH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhe3dpZHRoOjEwOHB4O2xpbmUtaGVpZ2h0OjI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudmlld3MsI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYXtjb2xvcjojZmZmfSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDoxNDBweH0KI2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxle3BhZGRpbmc6OHB4IDE2cHg7YmFja2dyb3VuZC1jb2xvcjojNGM3Mjk4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjJweH0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYXtjb2xvcjojZWVlfSNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtwYWRkaW5nOjE4cHggMjRweCAyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm97bWFyZ2luLWJvdHRvbTowO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcDpub25lO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjJweDtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5zaGFyZSAuZmF7bWFyZ2luLXJpZ2h0OjB9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz4qe3BhZGRpbmc6NnB4IDE4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz5zcGFue2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZX0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFke2NvbG9yOiM5OTl9I2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLnRpbWUsI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC52aWV3cyBzcGFue2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciBhcnRpY2xle21hcmdpbi1ib3R0b206NDhweH0KI2NvbW1lbnR7bWFyZ2luLXRvcDotMjRweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmZmZ9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvfSNjb21tZW50LWZvcm0gLmMtaW5mb3t3aWR0aDoyNiV9I2NvbW1lbnQtZm9ybSAuYy1pbmZvIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjB9CiNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDo3MCV9CiNjb21tZW50LWZvcm0gLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjE4cHg7cGFkZGluZy1ib3R0b206MThweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1saXN0IC5jLXNlY3Rpb257bWF4LXdpZHRoOjgzMHB4fQojY29tbWVudC1saXN0IC5jLWNoZWNre2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNlNjQzNDZ9I2NvbW1lbnQtbGlzdCAuYy1jaGVjayAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MH0gI2FydGljbGUtY29udGFpbmVyIC5tZXRhLmxlZnR7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MDt3aWR0aDphdXRvfSAjbmF2IGxpe3BhZGRpbmc6MCAxMHB4fSAjaGVhZGVyLWltZ3tmbG9hdDpsZWZ0O3dpZHRoOjY0cHg7aGVpZ2h0OjY0cHh9ICNoZWFkZXItaHtwYWRkaW5nOjE3cHggMDtmb250LXNpemU6MjRweH0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLnRhZywjYXJ0aWNsZS1jb250YWluZXIgLnRpbWV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3Jte3dpZHRoOjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1pbWd7ZGlzcGxheTpub25lfSAjaGVhZGVyLXN1YntkaXNwbGF5Om5vbmV9ICNjb21tZW50LWxpc3QgLmMtYXZhdGFye2Rpc3BsYXk6bm9uZX19ClBLBwiqeuwujSgAAI0oAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcZmF2aWNvbi5pY28AAAEAAQAgIAAAAQAgAKgQAAAWAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAEAAAEgsAABILAAAAAAAAAAAAALN+B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs34H27N+B9uzfgfbs34H27N+B9uzfgfbs30H27N+B9uzfgfbs30H27N+B9uzfgfbs34H27N+B9uyfAfWr3oHx61+GK21k0qQuoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoMN/7qGF/+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7qBCP+5gQj/uYII/7qBCP+6ggj/uoII/7mBCP+5gQj/uYII/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoII/7mBCP+5gQj/uoEI/7qBCP+6ggj/uoII/7qBCP+6ggj/uoEI/7qCCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6gQj/uYEI/7mBCP+5ggf/uYIH/7mCB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+8hAX/vIQF/7uDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yDBf+8hAX/vIQF/7yDBf+8hAb/vIQG/8CHA//AhgP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhwT/wIcE/8CGA//AhgL/xYkC/8WJAf/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYoC/8WJAf/FigP/x48O/8yaJ//JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/Jkxf/1q9T/+HAdf/p0p//8+fN/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y40A/8ugPf/y693+/v36/v/////////+yo4A/sqNAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgH/y44A/8uOAP/LjQD/yo4A/8uOAP/LjgD/y44B/8uOAf/LjgD/y44A/8uOAP/LjgD/y44B/8qNAP/Ljwb/2Llz//r59f7+///+/v7+//7+/v7KjgD+yo0A/8uOAP/LjgD/yo4A/8qOAP/KjgD/yo4A/8uOAP/LjgD/yo4A/8uOAP/LjgD/yo0A/8uNAP/LjgH/yY0B/8eNCP/KjgP/yo0A/8uNAP/KjQD/yo0A/8qNAP/LjwL/0Job/9++cf/17+D//v7+/v////7+/v7//v7+/suOAfrLjgD/yo0A/8uOAP/LjgH/yo4A/8qOAP/KjgD/y44A/8qOAP/KjgD/y44A/8uOAf/KjgD/yo0A/8mMAP/HmjT/wat5/6iLSP/Npk7/xZgw/8+fMf/Wpjn/2rBP/+LCd//w37n/+/jy//7+///+/v7////////////+/v7/vJIyvruKGf/Mkgz/yo4A/8qNAP/KjQD/yo0A/8qOAP/KjgD/yo4A/8qNAP/KjQD/yo0A/8uOAf/QmRj/yaNN/9DGrf/l5eb/pqWj/+nm3//EvrH/4drJ/vnz4/779uz//fz5//////7////+/v7+//7+/v////////////7+/v+Vk42UmY95/+bOmf/gvWr/2a1I/9SjMv/Rmx//z5YT/8+VEf/PlRH/z5cX/9OfKP/Zq0P/4b9x/+3bs//QzMT/w8PD/urq6v62trb+6Ojo/rS0tf7a29v+/f39/v7///7+/v7//////v////7+/v7//v7+//////7////+/////peWlpWSkpP/9vb1//379//59Of/9u3X//Lkxf/w37j/7tyy/+/cs//x4bv/9enO//nz5P/39fL/ycnK/6+vr/+lpKT/vb29/5SUlP+5ubn/p6en/7Gxsf/R0dH//Pz8///////+/v7//v7+//7+/v/+/v7////////////+/v7/qampmJGRkf/y8vL////+//7+/v/////////////////+/v7//v7+//7+///+/////////+Hh4P+6ubn/7+/v/+zs7P/X19f/xsbG/97e3v/19fX/6urr/7i4uP/x8fH///////7+/v7//////v7+//7+/v////////////7+/v+bm5tng4OD8O3t7f///////////v///v7+/v7//v7+/v/+/v7+/v7++fn5/vb29v76+vr+5+fo/7e3t//t7e3/+Pj4/t3d3f7Y2Nj+8vLy/v7+/v7Y2Nj+vr6+/vj4+P7//////////v////7+/v7//v7+//////7////+/////jU1NSNxcXHY5ubm//////7////+//////7+/v//////7+/v/tDQ0P++vr7+urq6/r6+vv/R0dH+z8/P/qysrP9nZ2f+Kysr/yMjI/9bW1v/q6ur/729vf7k5OT+5eXl/9ra2v/f39/+8PDw/v39/f/////+/v7+/v/////////+jY2NJ3V1ddrb29v//////v////7//////v7+/+Hh4f+1tbX+ysrK/+Pj4/7n5+f+4+Pj/8nJyf6+vr7+t7e3/ywsLP4AAAD/AAAA/wYGBv+Ghob/19fX/r6+vv68vLz/wcHB/76+vv65ubn+x8fH//Hx8f7////+//////////7g4OAkhISE2cXFxf///////////v/////n5+f/tbW1/+Tk5P///////////v/////////+/v7+/uDg4P+2trb/rq6u/25ubv9ZWVn/g4OD/7u7u/++vr7/5OTk/vr6+v/9/f3//Pz8/vDw8P/Kysr/t7e3//Dw8P///////////4eHh4BdXV3xo6Oj///////////++/v7/8HBwf/BwcH/ra2t/8bGxv/6+vr///////7+/v/+/v7+/////9bW1v/ExMT/9vb2//b29v/d3d3/vr6+/+Tk5P/x8fH//v7+//7+/v/+/v7+//////39/f/Nzc3/w8PD//v7+///////hoaG+JaWlv+Li4v/9/f3///////u7u7/q6ur/1JSUv8TExP/Z2dn/9HR0f/9/f3//v7+////////////8vLy/7i4uP/v7+//+vr6/8DAwP+cnJz/VFRU/25ubv/c3Nz//v7+//////7+/v7///////T09P+3t7f/6+vr///////v7+//7Ozs/3x8fP/Y2Nj+/////ufn5/+Tk5P/FhYW/wUFBf83Nzf/mZmZ//v7+//+/v7//////v/////6+vr/w8PD/+fn5//z8/P/rKys/zk5Of8AAAD/RUVF/piYmP/19fX//////v7+/v///////f39/8TExP/e3t7////////////R0dH/MzMz/5eXl///////5+fn/7Ozs/9oaGj/FxcX/zo6Ov/IyMj//v7+//7+/v////////////j4+P+9vb3/6+vr//Dw8P+zs7P/TExM/wAAAP8ODg7+goKC//r6+v/////+/v7+///////+/v7/x8fH/9zc3P///////////7i4uP8ZGRn/Pz8//t/f3/729vb+vb29/9vb2/7ExMT+29vb//39/f7+/v7+/////v////7////+5eXl/rm5uf729vb/8/Pz/76+vv/BwcH+cnJy/n5+fv7g4OD///////7+/v7+/v7+//////j4+P68vLz+5ubm//////7////+8fHx/7Kysv+FhYX+i4uL/vT09P/U1NT/vb29//n5+f7//////v7+/v////7//////////vb29v69vb3/1tbW///////9/f3/x8fH/87Ozv/5+fn+/Pz8/v///////////////v////7/////39/f/rm5uf74+Pj/7u7u/snJyf/4+Pj+//////Ly8v6IiIj+m5ub//T09P/IyMj/vb29/ufn5//6+vr+/Pz8/vr6+v/n5+f+vb29/snJyf/6+vr////////////w8PD/t7e3/9jY2P79/f3+///////////////+/////unp6f+3t7f+4uLi//Hx8f+Ojo7+c3Nz5ZCQkP6jo6P/oKCg/n5+fvpOTk7hnJyc++Hh4f/W1tb+vb29/8DAwP/BwcH/vr6+/7m5uf7W1tb++vr6///////////////////////p6en/ubm5/sPDw/7f39//6Ojo/+Tk5P7MzMz/tra2/93d3f7q6ur/g4OD/3BwcP+rq6s/cHBwZkVFRWlKSkpnhYWFX4yMjDhtbW2bd3d3662trf/Y2Nj/5OTk/uXl5f/p6en/9vb2/v////////////////7+/v/////////////////19fX/1tbW/8LCwv+9vb3/wcHB/9HR0f/k5OT/xsbG/319ffNjY2POa2tr0hEREQD///8A////ALy8vAAAAAAAAAAAAM7Ozgt2dnZFbW1to3t7e+uZmZn/t7e3/9fX1//o6Oj/8PDw//b29v/6+vr//f39////////////////////////////9/f3/+rq6v/d3d3+t7e3/46Ojv58fHzgh4eHcry8vBdwcHAdw8PDAICAgAAgICAAPz8/AJiYmADGxsYAl5eXAf///wDKysoNqampU319fY5wcHDFe3t793d3d/WBgYH5kZGR/KOjo/uzs7P7v7+/+8XFxfvGxsb7wMDA+7Ozs/ucnJz8gYGB+nh4ePpxcXHMiYmJi76+vjz///8FqqqqAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAAAAAAAFBLBwipcxPwvhAAAL4QAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcaW1nL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABEAAABzdGF0aWNcaW1nXGJnLnBuZ4lQTkcNChoKAAAADUlIRFIAAACWAAAAlggCAAAAs2PmtQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANmaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDk3MEYzQ0VCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDk3MEYzQ0RCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQUFCQkVBMThGQjVFMjExQkJFM0FCRjQzOTM4QUVCRiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyNkU0RkNCRTU1QUFFMjExOTcwMEI1OTlFMjkzRUEwNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsyOCusAACgjSURBVHja7N3tkmRHka1hdVLA/V8oIxDMHAOEdHZpdT/1KgrDDkNuHYSqfrRVZ2XujPCI8I/lyz0+ff31N4/H429/+9unT5++++67X//613/9619fXl6u33/1q199++2311+v33/zm9/85S9/uX7/6quv9t/rI9df98v12b3t+uV68fr49RAvXv/ude/Zk69frq/b63vz9fu+9/vvv78ee72yN1z/3RuuF6+/Xr9cr1xfcf2+YW9g11+v9+9P1yvXX7/74ef65frT9fpe3JP3wX3q+vf64PXL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ICAgICByZXR1cm4gZmFsc2U7DQogICAgfSkNCn0NCg0KZnVuY3Rpb24gcmVuZGVyTWFya2Rvd24oKSB7DQogICAgdmFyICRtZCA9ICQoJy5tYXJrZG93bicpOw0KICAgICRtZC5lYWNoKGZ1bmN0aW9uIChpLCBpdGVtKSB7DQogICAgICAgICQoaXRlbSkuaHRtbChtYXJrZWQoJChpdGVtKS5odG1sKCkucmVwbGFjZSgvJmd0Oy9nLCAnPicpKSk7DQogICAgfSk7DQogICAgdmFyIGNvZGUgPSAkbWQuZmluZCgncHJlIGNvZGUnKTsNCiAgICBpZiAoY29kZS5sZW5ndGgpIHsNCiAgICAgICAgJCgiPGxpbms+IikuYXR0cih7IHJlbDogInN0eWxlc2hlZXQiLCB0eXBlOiAidGV4dC9jc3MiLCBocmVmOiAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyJ9KS5hcHBlbmRUbygiaGVhZCIpOw0KICAgICAgICAkLmdldFNjcmlwdCgiL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGNvZGUuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soaXRlbSkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGluaXRDb21tZW50KCkgew0KICAgIHZhciAkbGlzdCA9ICQoJyNjb21tZW50LWxpc3QnKTsNCiAgICBpZiAoISRsaXN0Lmxlbmd0aCkgew0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1hdXRob3IiKSkgew0KICAgICAgICAkKCcjY29tbWVudC1hdXRob3InKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpOw0KICAgICAgICAkKCcjY29tbWVudC1lbWFpbCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1lbWFpbCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtdXJsJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LXVybCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXZhdGFyJykuYXR0cigic3JjIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXZhdGFyIikpOw0KICAgICAgICAkKCcuYy1hdmF0YXInKS5yZW1vdmVDbGFzcygibnVsbCIpOw0KICAgIH0NCiAgICAkKCcjY29tbWVudC1jb250ZW50Jykub24oImZvY3VzIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoJCgnLmMtYXZhdGFyJykuaGFzQ2xhc3MoIm51bGwiKSkgew0KICAgICAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICAgICAkKCcuYy1pbmZvLWZpZWxkcycpLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkKCcubm90LW1lJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1hdmF0YXItZmllbGQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnI2NvbW1lbnQtc2hvdycpLm9uKCJjbGljayIsICIuZW5hYmxlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIjY29tbWVudC1zaG93IikucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWF1dGhvciIsICQoJyNjb21tZW50LWF1dGhvcicpLnZhbCgpKTsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWVtYWlsIiwgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC11cmwiLCAkKCcjY29tbWVudC11cmwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdmF0YXIiLCBqc29uLmNvbW1lbnQuYXZhdGFyKTsNCiAgICAgICAgICAgIHZhciB0cGwgPSAkKCQoJyNjb21tZW50LXRwbCcpLmh0bWwoKSk7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXZhdGFyIikuYXR0cigic3JjIiwganNvbi5jb21tZW50LmF2YXRhcikuYXR0cigiYWx0IiwganNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXV0aG9yIikuYXR0cigiaHJlZiIsIGpzb24uY29tbWVudC51cmwpLnRleHQoanNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtcmVwbHkiKS5hdHRyKCJyZWwiLCBqc29uLmNvbW1lbnQuaWQpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKGpzb24uY29tbWVudC5jb250ZW50KTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQucGFyZW50X21kKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXAtbWQiKS5odG1sKG1hcmtlZChqc29uLmNvbW1lbnQucGFyZW50X21kKSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0cGwuYXR0cigiaWQiLCAiY29tbWVudC0iICsganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQuc3RhdHVzID09ICJhcHByb3ZlZCIpIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtY2hlY2siKS5yZW1vdmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRsaXN0LmFwcGVuZCh0cGwpOw0KICAgICAgICAgICAgJCgnLmNhbmNlbC1yZXBseScpLnRyaWdnZXIoImNsaWNrIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykudmFsKCIiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGFsZXJ0KCLmj5DkuqTlpLHotKUhIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkbGlzdC5vbigiY2xpY2siLCAiLmMtcmVwbHkiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZXBseS1tZCcpLnJlbW92ZSgpOw0KICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICB2YXIgcGMgPSAkKCcjY29tbWVudC0nICsgaWQpOw0KICAgICAgICB2YXIgbWQgPSAiPiBAIiArIHBjLmZpbmQoIi5jLWF1dGhvciIpLnRleHQoKSArICJcblxuIjsNCiAgICAgICAgbWQgKz0gIj4gIiArIHBjLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKCkgKyAiXG4iOw0KICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykuYmVmb3JlKCc8ZGl2IGNsYXNzPSJyZXBseS1tZCBtYXJrZG93biI+JyArIG1hcmtlZChtZCkgKyAnPC9kaXY+Jyk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbChpZCk7DQogICAgICAgIGlmICgkKCcjY29tbWVudC1zaG93JykubGVuZ3RoKSB7DQogICAgICAgICAgICAkKCcjY29tbWVudC1zaG93IC5lbmFibGUnKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICB9DQogICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS5zaG93KCk7DQogICAgICAgIHZhciB0b3AgPSAkKCcjY29tbWVudC1mb3JtJykub2Zmc2V0KCkudG9wOw0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IHRvcH0sIDUwMCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCiAgICAkKCcuY2FuY2VsLXJlcGx5Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAkKHRoaXMpLmhpZGUoKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KfQ0KUEsHCB7hHnJ1EgAAdRIAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHN0YXRpY1xqc1x1cGxvYWQuanNmdW5jdGlvbiBpbml0VXBsb2FkKHApIHsNCiAgICAkKCcjYXR0YWNoLXNob3cnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICB9KTsNCiAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmIChjb25maXJtKCLnq4vljbPkuIrkvKA/IikpIHsNCiAgICAgICAgICAgIHZhciBiYXIgPSAkKCc8cCBjbGFzcz0iZmlsZS1wcm9ncmVzcyBpbmxpbmUtYmxvY2siPjAlPC9wPicpOw0KICAgICAgICAgICAgJCgnI2F0dGFjaC1mb3JtJykuYWpheFN1Ym1pdCh7DQogICAgICAgICAgICAgICAgImJlZm9yZVN1Ym1pdCI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgJChwKS5iZWZvcmUoYmFyKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJ1cGxvYWRQcm9ncmVzcyI6IGZ1bmN0aW9uIChldmVudCwgcG9zaXRpb24sIHRvdGFsLCBwZXJjZW50Q29tcGxldGUpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRWYWwgPSBwZXJjZW50Q29tcGxldGUgKyAnJSc7DQogICAgICAgICAgICAgICAgICAgIGJhci5jc3MoIndpZHRoIiwgcGVyY2VudFZhbCkuaHRtbChwZXJjZW50VmFsKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoanNvbi5tc2cpLmFkZENsYXNzKCJlcnIiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhci5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMDApOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoIi8iICsganNvbi5maWxlLlVybCArICImbmJzcDsmbmJzcDsmbmJzcDsoQCIgKyBqc29uLmZpbGUuTmFtZSArICIpIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJCgnI2F0dGFjaC11cGxvYWQnKS52YWwoIiIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJCh0aGlzKS52YWwoIiIpOw0KICAgICAgICB9DQogICAgfSk7DQp9UEsHCIiJF/v2BAAA9gQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHN0YXRpY1xsaWIvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAHN0YXRpY1xsaWJcY29kZW1pcnJvci1tb2RlLm1pbi5qcyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0vXihccyopKFsqKy1dfChcZCspXC4pKFxzKikvLGU9IiorLSI7Q29kZU1pcnJvci5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT1yLmdldEN1cnNvcigpLG89ci5nZXRTdGF0ZUFmdGVyKGkubGluZSkubGlzdCE9PSExO2lmKCFvfHwhKG49ci5nZXRMaW5lKGkubGluZSkubWF0Y2godCkpKXJldHVybiByLmV4ZWNDb21tYW5kKCJuZXdsaW5lQW5kSW5kZW50Iiksdm9pZCAwO3ZhciBsPW5bMV0sYT1uWzRdLHM9ZS5pbmRleE9mKG5bMl0pPj0wP25bMl06cGFyc2VJbnQoblszXSwxMCkrMSsiLiI7ci5yZXBsYWNlU2VsZWN0aW9uKCJcbiIrbCtzK2EsImVuZCIpfX0oKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoIm1hcmtkb3duIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlLHIpe3JldHVybiBlLmY9ZS5pbmxpbmU9cixyKHQsZSl9ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIGUuZj1lLmJsb2NrPXIscih0LGUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubGlua1RpdGxlPSExLHQuZW09ITEsdC5zdHJvbmc9ITEsdC5xdW90ZT0wLGd8fHQuZiE9bHx8KHQuZj1jLHQuYmxvY2s9byksdC50cmFpbGluZ1NwYWNlPTAsdC50cmFpbGluZ1NwYWNlTmV3TGluZT0hMSx0LnRoaXNMaW5lSGFzQ29udGVudD0hMSxudWxsfWZ1bmN0aW9uIG8odCxpKXt2YXIgbz1pLmxpc3QhPT0hMTtpLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbkRpZmY+PTA/KGkuaW5kZW50YXRpb25EaWZmPDQmJihpLmluZGVudGF0aW9uLT1pLmluZGVudGF0aW9uRGlmZiksaS5saXN0PW51bGwpOmkubGlzdCE9PSExJiZpLmluZGVudGF0aW9uPjA/KGkubGlzdD1udWxsLGkubGlzdERlcHRoPU1hdGguZmxvb3IoaS5pbmRlbnRhdGlvbi80KSk6aS5saXN0IT09ITEmJihpLmxpc3Q9ITEsaS5saXN0RGVwdGg9MCk7dmFyIGw9bnVsbDtpZihpLmluZGVudGF0aW9uRGlmZj49NClyZXR1cm4gaS5pbmRlbnRhdGlvbi09NCx0LnNraXBUb0VuZCgpLGs7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO2lmKGw9dC5tYXRjaChSKSlpLmhlYWRlcj1sWzBdLmxlbmd0aDw9Nj9sWzBdLmxlbmd0aDo2O2Vsc2UgaWYoaS5wcmV2TGluZUhhc0NvbnRlbnQmJihsPXQubWF0Y2goRykpKWkuaGVhZGVyPSI9Ij09bFswXS5jaGFyQXQoMCk/MToyO2Vsc2UgaWYodC5lYXQoIj4iKSlmb3IoaS5pbmRlbnRhdGlvbisrLGkucXVvdGU9MSx0LmVhdFNwYWNlKCk7dC5lYXQoIj4iKTspdC5lYXRTcGFjZSgpLGkucXVvdGUrKztlbHNle2lmKCJbIj09PXQucGVlaygpKXJldHVybiByKHQsaSxoKTtpZih0Lm1hdGNoKEksITApKXJldHVybiBBO2lmKGkucHJldkxpbmVIYXNDb250ZW50JiYhb3x8IXQubWF0Y2goUCwhMCkmJiF0Lm1hdGNoKEYsITApKXtpZihlLmZlbmNlZENvZGVCbG9ja3MmJnQubWF0Y2goL15gYGAoW1x3KyNdKikvLCEwKSlyZXR1cm4gaS5sb2NhbE1vZGU9eChSZWdFeHAuJDEpLGkubG9jYWxNb2RlJiYoaS5sb2NhbFN0YXRlPWkubG9jYWxNb2RlLnN0YXJ0U3RhdGUoKSksbih0LGksYSksa31lbHNlIGkuaW5kZW50YXRpb24rPTQsaS5saXN0PSEwLGkubGlzdERlcHRoKyssZS50YXNrTGlzdHMmJnQubWF0Y2goQiwhMSkmJihpLnRhc2tMaXN0PSEwKX1yZXR1cm4gcih0LGksaS5pbmxpbmUpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj12LnRva2VuKHQsZS5odG1sU3RhdGUpO3JldHVybiBnJiYidGFnIj09PXImJiJvcGVuVGFnIiE9PWUuaHRtbFN0YXRlLnR5cGUmJiFlLmh0bWxTdGF0ZS5jb250ZXh0JiYoZS5mPWMsZS5ibG9jaz1vKSxlLm1kX2luc2lkZSYmLTEhPXQuY3VycmVudCgpLmluZGV4T2YoIj4iKSYmKGUuZj1jLGUuYmxvY2s9byxlLmh0bWxTdGF0ZS5jb250ZXh0PXZvaWQgMCkscn1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQuc29sKCkmJnQubWF0Y2goL15gYGAvLCEwKT8oZS5sb2NhbE1vZGU9ZS5sb2NhbFN0YXRlPW51bGwsZS5mPWMsZS5ibG9jaz1vLGspOmUubG9jYWxNb2RlP2UubG9jYWxNb2RlLnRva2VuKHQsZS5sb2NhbFN0YXRlKToodC5za2lwVG9FbmQoKSxrKX1mdW5jdGlvbiBzKHQpe3ZhciBlPVtdO2lmKHQudGFza09wZW4pcmV0dXJuIm1ldGEiO2lmKHQudGFza0Nsb3NlZClyZXR1cm4icHJvcGVydHkiO2lmKHQuc3Ryb25nJiZlLnB1c2goeiksdC5lbSYmZS5wdXNoKEUpLHQubGlua1RleHQmJmUucHVzaChPKSx0LmNvZGUmJmUucHVzaChrKSx0LmhlYWRlciYmKGUucHVzaChDKSxlLnB1c2goQyt0LmhlYWRlcikpLHQucXVvdGUmJmUucHVzaCh0LnF1b3RlJTI/dzpMKSx0Lmxpc3QhPT0hMSl7dmFyIHI9KHQubGlzdERlcHRoLTEpJTM7cj8xPT09cj9lLnB1c2goTSk6ZS5wdXNoKFQpOmUucHVzaChTKX1yZXR1cm4gdC50cmFpbGluZ1NwYWNlTmV3TGluZT9lLnB1c2goInRyYWlsaW5nLXNwYWNlLW5ldy1saW5lIik6dC50cmFpbGluZ1NwYWNlJiZlLnB1c2goInRyYWlsaW5nLXNwYWNlLSIrKHQudHJhaWxpbmdTcGFjZSUyPyJhIjoiYiIpKSxlLmxlbmd0aD9lLmpvaW4oIiAiKTpudWxsfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdC5tYXRjaChfLCEwKT9zKGUpOnZvaWQgMH1mdW5jdGlvbiBjKHQsaSl7dmFyIG89aS50ZXh0KHQsaSk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBvKXJldHVybiBvO2lmKGkubGlzdClyZXR1cm4gaS5saXN0PW51bGwscyhpKTtpZihpLnRhc2tMaXN0KXt2YXIgYT0ieCIhPT10Lm1hdGNoKEIsITApWzFdO3JldHVybiBhP2kudGFza09wZW49ITA6aS50YXNrQ2xvc2VkPSEwLGkudGFza0xpc3Q9ITEscyhpKX1pLnRhc2tPcGVuPSExLGkudGFza0Nsb3NlZD0hMTt2YXIgdT10LnNvbCgpLGM9dC5uZXh0KCk7aWYoIlxcIj09PWMpcmV0dXJuIHQubmV4dCgpLHMoaSk7aWYoaS5saW5rVGl0bGUpe2kubGlua1RpdGxlPSExO3ZhciBoPWM7IigiPT09YyYmKGg9IikiKSxoPShoKyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpO3ZhciBkPSJeXFxzKig/OlteIitoKyJcXFxcXSt8XFxcXFxcXFx8XFxcXC4pIitoO2lmKHQubWF0Y2gobmV3IFJlZ0V4cChkKSwhMCkpcmV0dXJuIFd9aWYoImAiPT09Yyl7dmFyIHA9cyhpKSxnPXQucG9zO3QuZWF0V2hpbGUoImAiKTt2YXIgdj0xK3QucG9zLWc7cmV0dXJuIGkuY29kZT92PT09Yj8oaS5jb2RlPSExLHApOnMoaSk6KGI9dixpLmNvZGU9ITAscyhpKSl9aWYoaS5jb2RlKXJldHVybiBzKGkpO2lmKCIhIj09PWMmJnQubWF0Y2goL1xbW15cXV0qXF0gPyg/OlwofFxbKS8sITEpKXJldHVybiB0Lm1hdGNoKC9cW1teXF1dKlxdLyksaS5pbmxpbmU9aS5mPWYsTjtpZigiWyI9PT1jJiZ0Lm1hdGNoKC8uKlxdKFwofCA/XFspLywhMSkpcmV0dXJuIGkubGlua1RleHQ9ITAscyhpKTtpZigiXSI9PT1jJiZpLmxpbmtUZXh0KXt2YXIgeT1zKGkpO3JldHVybiBpLmxpbmtUZXh0PSExLGkuaW5saW5lPWkuZj1mLHl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXihodHRwcz98ZnRwcz8pOlwvXC8oPzpbXlxcPl18XFwuKSs+LywhMSkpcmV0dXJuIHIodCxpLG0oSCwiPiIpKTtpZigiPCI9PT1jJiZ0Lm1hdGNoKC9eW14+IFxcXStAKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEQsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXlx3LywhMSkpe2lmKC0xIT10LnN0cmluZy5pbmRleE9mKCI+Iikpe3ZhciB4PXQuc3RyaW5nLnN1YnN0cmluZygxLHQuc3RyaW5nLmluZGV4T2YoIj4iKSk7L21hcmtkb3duXHMqPVxzKignfCIpezAsMX0xKCd8Iil7MCwxfS8udGVzdCh4KSYmKGkubWRfaW5zaWRlPSEwKX1yZXR1cm4gdC5iYWNrVXAoMSksbih0LGksbCl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXlwvXHcqPz4vKSlyZXR1cm4gaS5tZF9pbnNpZGU9ITEsInRhZyI7dmFyIEM9ITE7aWYoIWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYiXyI9PT1jJiYiXyIhPT10LnBlZWsoKSYmdC5tYXRjaCgvKFx3KS8sITEpKXt2YXIgaz10LnBvcy0yO2lmKGs+PTApe3ZhciB3PXQuc3RyaW5nLmNoYXJBdChrKTsiXyIhPT13JiZ3Lm1hdGNoKC8oXHcpLywhMSkmJihDPSEwKX19dmFyIHA9cyhpKTtpZigiKiI9PT1jfHwiXyI9PT1jJiYhQylpZih1JiYiICI9PT10LnBlZWsoKSk7ZWxzZXtpZihpLnN0cm9uZz09PWMmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz0hMSxwO2lmKCFpLnN0cm9uZyYmdC5lYXQoYykpcmV0dXJuIGkuc3Ryb25nPWMscyhpKTtpZihpLmVtPT09YylyZXR1cm4gaS5lbT0hMSxwO2lmKCFpLmVtKXJldHVybiBpLmVtPWMscyhpKX1lbHNlIGlmKCIgIj09PWMmJih0LmVhdCgiKiIpfHx0LmVhdCgiXyIpKSl7aWYoIiAiPT09dC5wZWVrKCkpcmV0dXJuIHMoaSk7dC5iYWNrVXAoMSl9cmV0dXJuIiAiPT09YyYmKHQubWF0Y2goLyArJC8sITEpP2kudHJhaWxpbmdTcGFjZSsrOmkudHJhaWxpbmdTcGFjZSYmKGkudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITApKSxzKGkpfWZ1bmN0aW9uIGYodCxlKXtpZih0LmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7dmFyIG49dC5uZXh0KCk7cmV0dXJuIigiPT09bnx8IlsiPT09bj9yKHQsZSxtKFcsIigiPT09bj8iKSI6Il0iKSk6ImVycm9yIn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQubWF0Y2goL15bXlxdXSpcXTovLCEwKT8oZS5mPWQsTyk6cih0LGUsYyl9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0LmVhdFNwYWNlKCk/bnVsbDoodC5tYXRjaCgvXlteXHNdKy8sITApLHZvaWQgMD09PXQucGVlaygpP2UubGlua1RpdGxlPSEwOnQubWF0Y2goL14oPzpccysoPzoiKD86W14iXFxdfFxcXFx8XFwuKSsifCcoPzpbXidcXF18XFxcXHxcXC4pKyd8XCgoPzpbXilcXF18XFxcXHxcXC4pK1wpKSk/LywhMCksZS5mPWUuaW5saW5lPWMsVyl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gVlt0XXx8KHQ9KHQrIiIpLnJlcGxhY2UoLyhbLj8qK14kW1xdXFwoKXt9fC1dKS9nLCJcXCQxIiksVlt0XT1uZXcgUmVnRXhwKCJeKD86W15cXFxcXXxcXFxcLikqPygiK3QrIikiKSksVlt0XX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gcj1yfHxjLGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4ubWF0Y2gocChlKSksaS5pbmxpbmU9aS5mPXIsdH19dmFyIGc9Q29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eSgieG1sIiksdj1Db2RlTWlycm9yLmdldE1vZGUodCxnP3tuYW1lOiJ4bWwiLGh0bWxNb2RlOiEwfToidGV4dC9wbGFpbiIpLHk9e2h0bWw6Imh0bWxtaXhlZCIsanM6ImphdmFzY3JpcHQiLGpzb246ImFwcGxpY2F0aW9uL2pzb24iLGM6InRleHQveC1jc3JjIiwiYysrIjoidGV4dC94LWMrK3NyYyIsamF2YToidGV4dC94LWphdmEiLGNzaGFycDoidGV4dC94LWNzaGFycCIsImMjIjoidGV4dC94LWNzaGFycCIsc2NhbGE6InRleHQveC1zY2FsYSJ9LHg9ZnVuY3Rpb24oKXt2YXIgZSxyLG49e30saT17fSxvPVtdO2Zvcih2YXIgbCBpbiBDb2RlTWlycm9yLm1vZGVzKUNvZGVNaXJyb3IubW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJm8ucHVzaChsKTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKW5bb1tlXV09b1tlXTt2YXIgYT1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5taW1lTW9kZXMpQ29kZU1pcnJvci5taW1lTW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJmEucHVzaCh7bWltZTpsLG1vZGU6Q29kZU1pcnJvci5taW1lTW9kZXNbbF19KTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXI9YVtlXS5taW1lLGlbcl09YVtlXS5taW1lO2Zvcih2YXIgcyBpbiB5KSh5W3NdaW4gbnx8eVtzXWluIGkpJiYobltzXT15W3NdKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV0/Q29kZU1pcnJvci5nZXRNb2RlKHQsbltlXSk6bnVsbH19KCk7dm9pZCAwPT09ZS51bmRlcnNjb3Jlc0JyZWFrV29yZHMmJihlLnVuZGVyc2NvcmVzQnJlYWtXb3Jkcz0hMCksdm9pZCAwPT09ZS5mZW5jZWRDb2RlQmxvY2tzJiYoZS5mZW5jZWRDb2RlQmxvY2tzPSExKSx2b2lkIDA9PT1lLnRhc2tMaXN0cyYmKGUudGFza0xpc3RzPSExKTt2YXIgYj0wLEM9ImhlYWRlciIsaz0iY29tbWVudCIsdz0iYXRvbSIsTD0ibnVtYmVyIixTPSJ2YXJpYWJsZS0yIixNPSJ2YXJpYWJsZS0zIixUPSJrZXl3b3JkIixBPSJociIsTj0idGFnIixIPSJsaW5rIixEPSJsaW5rIixPPSJsaW5rIixXPSJzdHJpbmciLEU9ImVtIix6PSJzdHJvbmciLEk9L14oWypcLT1fXSkoPzpccypcMSl7Mix9XHMqJC8sUD0vXlsqXC0rXVxzKy8sRj0vXlswLTldK1wuXHMrLyxCPS9eXFsoeHwgKVxdKD89XHMpLyxSPS9eIysvLEc9L14oPzpcPXsxLH18LXsxLH0pJC8sXz0vXlteIVxbXF0qX1xcPD5gICInKF0rLyxWPVtdO3JldHVybntzdGFydFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue2Y6byxwcmV2TGluZUhhc0NvbnRlbnQ6ITEsdGhpc0xpbmVIYXNDb250ZW50OiExLGJsb2NrOm8saHRtbFN0YXRlOkNvZGVNaXJyb3Iuc3RhcnRTdGF0ZSh2KSxpbmRlbnRhdGlvbjowLGlubGluZTpjLHRleHQ6dSxsaW5rVGV4dDohMSxsaW5rVGl0bGU6ITEsZW06ITEsc3Ryb25nOiExLGhlYWRlcjowLHRhc2tMaXN0OiExLGxpc3Q6ITEsbGlzdERlcHRoOjAscXVvdGU6MCx0cmFpbGluZ1NwYWNlOjAsdHJhaWxpbmdTcGFjZU5ld0xpbmU6ITF9fSxjb3B5U3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJue2Y6dC5mLHByZXZMaW5lSGFzQ29udGVudDp0LnByZXZMaW5lSGFzQ29udGVudCx0aGlzTGluZUhhc0NvbnRlbnQ6dC50aGlzTGluZUhhc0NvbnRlbnQsYmxvY2s6dC5ibG9jayxodG1sU3RhdGU6Q29kZU1pcnJvci5jb3B5U3RhdGUodix0Lmh0bWxTdGF0ZSksaW5kZW50YXRpb246dC5pbmRlbnRhdGlvbixsb2NhbE1vZGU6dC5sb2NhbE1vZGUsbG9jYWxTdGF0ZTp0LmxvY2FsTW9kZT9Db2RlTWlycm9yLmNvcHlTdGF0ZSh0LmxvY2FsTW9kZSx0LmxvY2FsU3RhdGUpOm51bGwsaW5saW5lOnQuaW5saW5lLHRleHQ6dC50ZXh0LGxpbmtUaXRsZTp0LmxpbmtUaXRsZSxlbTp0LmVtLHN0cm9uZzp0LnN0cm9uZyxoZWFkZXI6dC5oZWFkZXIsdGFza0xpc3Q6dC50YXNrTGlzdCxsaXN0OnQubGlzdCxsaXN0RGVwdGg6dC5saXN0RGVwdGgscXVvdGU6dC5xdW90ZSx0cmFpbGluZ1NwYWNlOnQudHJhaWxpbmdTcGFjZSx0cmFpbGluZ1NwYWNlTmV3TGluZTp0LnRyYWlsaW5nU3BhY2VOZXdMaW5lLG1kX2luc2lkZTp0Lm1kX2luc2lkZX19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYodC5zb2woKSl7aWYodC5tYXRjaCgvXlxzKiQvLCEwKSlyZXR1cm4gZS5wcmV2TGluZUhhc0NvbnRlbnQ9ITEsaShlKTtlLnByZXZMaW5lSGFzQ29udGVudD1lLnRoaXNMaW5lSGFzQ29udGVudCxlLnRoaXNMaW5lSGFzQ29udGVudD0hMCxlLmhlYWRlcj0wLGUudGFza0xpc3Q9ITEsZS5jb2RlPSExLGUudHJhaWxpbmdTcGFjZT0wLGUudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsZS5mPWUuYmxvY2s7dmFyIHI9dC5tYXRjaCgvXlxzKi8sITApWzBdLnJlcGxhY2UoL1x0L2csIiAgICAiKS5sZW5ndGgsbj00Kk1hdGguZmxvb3IoKHItZS5pbmRlbnRhdGlvbikvNCk7bj40JiYobj00KTt2YXIgbz1lLmluZGVudGF0aW9uK247aWYoZS5pbmRlbnRhdGlvbkRpZmY9by1lLmluZGVudGF0aW9uLGUuaW5kZW50YXRpb249byxyPjApcmV0dXJuIG51bGx9cmV0dXJuIGUuZih0LGUpfSxibGFua0xpbmU6aSxnZXRUeXBlOnN9fSwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbWFya2Rvd24iLCJtYXJrZG93biIpLENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiByKHIpe3JldHVybiBlLnRva2VuaXplPXIscih0LGUpfXZhciBpPXQubmV4dCgpO2lmKCI8Ij09aSl7aWYodC5lYXQoIiEiKSlyZXR1cm4gdC5lYXQoIlsiKT90Lm1hdGNoKCJDREFUQVsiKT9yKG8oImF0b20iLCJdXT4iKSk6bnVsbDp0Lm1hdGNoKCItLSIpP3IobygiY29tbWVudCIsIi0tPiIpKTp0Lm1hdGNoKCJET0NUWVBFIiwhMCwhMCk/KHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLHIobCgxKSkpOm51bGw7aWYodC5lYXQoIj8iKSlyZXR1cm4gdC5lYXRXaGlsZSgvW1x3XC5fXC1dLyksZS50b2tlbml6ZT1vKCJtZXRhIiwiPz4iKSwibWV0YSI7dmFyIGE9dC5lYXQoIi8iKTt4PSIiO2Zvcih2YXIgcztzPXQuZWF0KC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKTspeCs9cztyZXR1cm4geD8oYj1hPyJjbG9zZVRhZyI6Im9wZW5UYWciLGUudG9rZW5pemU9biwidGFnIik6InRhZyBlcnJvciJ9aWYoIiYiPT1pKXt2YXIgdTtyZXR1cm4gdT10LmVhdCgiIyIpP3QuZWF0KCJ4Iik/dC5lYXRXaGlsZSgvW2EtZkEtRlxkXS8pJiZ0LmVhdCgiOyIpOnQuZWF0V2hpbGUoL1tcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXHdcLlwtOl0vKSYmdC5lYXQoIjsiKSx1PyJhdG9tIjoiZXJyb3IifXJldHVybiB0LmVhdFdoaWxlKC9bXiY8XS8pLG51bGx9ZnVuY3Rpb24gbih0LGUpe3ZhciBuPXQubmV4dCgpO2lmKCI+Ij09bnx8Ii8iPT1uJiZ0LmVhdCgiPiIpKXJldHVybiBlLnRva2VuaXplPXIsYj0iPiI9PW4/ImVuZFRhZyI6InNlbGZjbG9zZVRhZyIsInRhZyI7aWYoIj0iPT1uKXJldHVybiBiPSJlcXVhbHMiLG51bGw7aWYoIjwiPT1uKXtlLnRva2VuaXplPXI7dmFyIG89ZS50b2tlbml6ZSh0LGUpO3JldHVybiBvP28rIiBlcnJvciI6ImVycm9yIn1yZXR1cm4vW1wnXCJdLy50ZXN0KG4pPyhlLnRva2VuaXplPWkobiksZS5zdHJpbmdTdGFydENvbD10LmNvbHVtbigpLGUudG9rZW5pemUodCxlKSk6KHQuZWF0V2hpbGUoL1teXHNcdTAwYTA9PD5cIlwnXS8pLCJ3b3JkIil9ZnVuY3Rpb24gaSh0KXt2YXIgZT1mdW5jdGlvbihlLHIpe2Zvcig7IWUuZW9sKCk7KWlmKGUubmV4dCgpPT10KXtyLnRva2VuaXplPW47YnJlYWt9cmV0dXJuInN0cmluZyJ9O3JldHVybiBlLmlzSW5BdHRyaWJ1dGU9ITAsZX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7Zm9yKDshbi5lb2woKTspe2lmKG4ubWF0Y2goZSkpe2kudG9rZW5pemU9cjticmVha31uLm5leHQoKX1yZXR1cm4gdH19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk7bnVsbCE9KGk9ZS5uZXh0KCkpOyl7aWYoIjwiPT1pKXJldHVybiBuLnRva2VuaXplPWwodCsxKSxuLnRva2VuaXplKGUsbik7aWYoIj4iPT1pKXtpZigxPT10KXtuLnRva2VuaXplPXI7YnJlYWt9cmV0dXJuIG4udG9rZW5pemU9bCh0LTEpLG4udG9rZW5pemUoZSxuKX19cmV0dXJuIm1ldGEifX1mdW5jdGlvbiBhKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMTt0Pj0wO3QtLSlDLmNjLnB1c2goYXJndW1lbnRzW3RdKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGEuYXBwbHkobnVsbCxhcmd1bWVudHMpLCEwfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1ULmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHQpfHxDLmNvbnRleHQmJkMuY29udGV4dC5ub0luZGVudDtDLmNvbnRleHQ9e3ByZXY6Qy5jb250ZXh0LHRhZ05hbWU6dCxpbmRlbnQ6Qy5pbmRlbnRlZCxzdGFydE9mTGluZTplLG5vSW5kZW50OnJ9fWZ1bmN0aW9uIGMoKXtDLmNvbnRleHQmJihDLmNvbnRleHQ9Qy5jb250ZXh0LnByZXYpfWZ1bmN0aW9uIGYodCl7aWYoIm9wZW5UYWciPT10KXJldHVybiBDLnRhZ05hbWU9eCxDLnRhZ1N0YXJ0PWsuY29sdW1uKCkscyhtLGgoQy5zdGFydE9mTGluZSkpO2lmKCJjbG9zZVRhZyI9PXQpe3ZhciBlPSExO3JldHVybiBDLmNvbnRleHQ/Qy5jb250ZXh0LnRhZ05hbWUhPXgmJihULmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoQy5jb250ZXh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkmJmMoKSxlPSFDLmNvbnRleHR8fEMuY29udGV4dC50YWdOYW1lIT14KTplPSEwLGUmJih3PSJlcnJvciIpLHMoZChlKSl9cmV0dXJuIHMoKX1mdW5jdGlvbiBoKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1DLnRhZ05hbWU7cmV0dXJuIEMudGFnTmFtZT1DLnRhZ1N0YXJ0PW51bGwsInNlbGZjbG9zZVRhZyI9PWV8fCJlbmRUYWciPT1lJiZULmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShyLnRvTG93ZXJDYXNlKCkpPyhwKHIudG9Mb3dlckNhc2UoKSkscygpKToiZW5kVGFnIj09ZT8ocChyLnRvTG93ZXJDYXNlKCkpLHUocix0KSxzKCkpOnMoKX19ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJih3PSJlcnJvciIpLCJlbmRUYWciPT1lPyhjKCkscygpKToodz0iZXJyb3IiLHMoYXJndW1lbnRzLmNhbGxlZSkpfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZTs7KXtpZighQy5jb250ZXh0KXJldHVybjtpZihlPUMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIVQuY29udGV4dEdyYWJiZXJzLmhhc093blByb3BlcnR5KGUpfHwhVC5jb250ZXh0R3JhYmJlcnNbZV0uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2MoKX19ZnVuY3Rpb24gbSh0KXtyZXR1cm4id29yZCI9PXQ/KHc9ImF0dHJpYnV0ZSIscyhnLG0pKToiZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOih3PSJlcnJvciIscyhtKSl9ZnVuY3Rpb24gZyh0KXtpZigiZXF1YWxzIj09dClyZXR1cm4gcyh2LG0pO2lmKFQuYWxsb3dNaXNzaW5nKXtpZigid29yZCI9PXQpcmV0dXJuIHc9ImF0dHJpYnV0ZSIscyhnLG0pfWVsc2Ugdz0iZXJyb3IiO3JldHVybiJlbmRUYWciPT10fHwic2VsZmNsb3NlVGFnIj09dD9hKCk6cygpfWZ1bmN0aW9uIHYodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KToid29yZCI9PXQmJlQuYWxsb3dVbnF1b3RlZD8odz0ic3RyaW5nIixzKCkpOih3PSJlcnJvciIsImVuZFRhZyI9PXR8fCJzZWxmQ2xvc2VUYWciPT10P2EoKTpzKCkpfWZ1bmN0aW9uIHkodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KTphKCl9dmFyIHgsYixDLGssdyxMPXQuaW5kZW50VW5pdCxTPWUubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yfHwxLE09ZS5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnfHwhMCxUPWUuaHRtbE1vZGU/e2F1dG9TZWxmQ2xvc2Vyczp7YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxjb21tYW5kOiEwLGVtYmVkOiEwLGZyYW1lOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LGltcGxpY2l0bHlDbG9zZWQ6e2RkOiEwLGxpOiEwLG9wdGdyb3VwOiEwLG9wdGlvbjohMCxwOiEwLHJwOiEwLHJ0OiEwLHRib2R5OiEwLHRkOiEwLHRmb290OiEwLHRoOiEwLHRyOiEwfSxjb250ZXh0R3JhYmJlcnM6e2RkOntkZDohMCxkdDohMH0sZHQ6e2RkOiEwLGR0OiEwfSxsaTp7bGk6ITB9LG9wdGlvbjp7b3B0aW9uOiEwLG9wdGdyb3VwOiEwfSxvcHRncm91cDp7b3B0Z3JvdXA6ITB9LHA6e2FkZHJlc3M6ITAsYXJ0aWNsZTohMCxhc2lkZTohMCxibG9ja3F1b3RlOiEwLGRpcjohMCxkaXY6ITAsZGw6ITAsZmllbGRzZXQ6ITAsZm9vdGVyOiEwLGZvcm06ITAsaDE6ITAsaDI6ITAsaDM6ITAsaDQ6ITAsaDU6ITAsaDY6ITAsaGVhZGVyOiEwLGhncm91cDohMCxocjohMCxtZW51OiEwLG5hdjohMCxvbDohMCxwOiEwLHByZTohMCxzZWN0aW9uOiEwLHRhYmxlOiEwLHVsOiEwfSxycDp7cnA6ITAscnQ6ITB9LHJ0OntycDohMCxydDohMH0sdGJvZHk6e3Rib2R5OiEwLHRmb290OiEwfSx0ZDp7dGQ6ITAsdGg6ITB9LHRmb290Ont0Ym9keTohMH0sdGg6e3RkOiEwLHRoOiEwfSx0aGVhZDp7dGJvZHk6ITAsdGZvb3Q6ITB9LHRyOnt0cjohMH19LGRvTm90SW5kZW50OntwcmU6ITB9LGFsbG93VW5xdW90ZWQ6ITAsYWxsb3dNaXNzaW5nOiEwfTp7YXV0b1NlbGZDbG9zZXJzOnt9LGltcGxpY2l0bHlDbG9zZWQ6e30sY29udGV4dEdyYWJiZXJzOnt9LGRvTm90SW5kZW50Ont9LGFsbG93VW5xdW90ZWQ6ITEsYWxsb3dNaXNzaW5nOiExfSxBPWUuYWxpZ25DREFUQTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybnt0b2tlbml6ZTpyLGNjOltdLGluZGVudGVkOjAsc3RhcnRPZkxpbmU6ITAsdGFnTmFtZTpudWxsLHRhZ1N0YXJ0Om51bGwsY29udGV4dDpudWxsfX0sdG9rZW46ZnVuY3Rpb24odCxlKXtpZighZS50YWdOYW1lJiZ0LnNvbCgpJiYoZS5zdGFydE9mTGluZT0hMCxlLmluZGVudGVkPXQuaW5kZW50YXRpb24oKSksdC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3c9Yj14PW51bGw7dmFyIHI9ZS50b2tlbml6ZSh0LGUpO2lmKGUudHlwZT1iLChyfHxiKSYmImNvbW1lbnQiIT1yKWZvcihDPWUsaz10Ozspe3ZhciBuPWUuY2MucG9wKCl8fGY7aWYobihifHxyKSlicmVha31yZXR1cm4gZS5zdGFydE9mTGluZT0hMSx3JiYocj0iZXJyb3IiPT13P3IrIiBlcnJvciI6dykscn0saW5kZW50OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10LmNvbnRleHQ7aWYodC50b2tlbml6ZS5pc0luQXR0cmlidXRlKXJldHVybiB0LnN0cmluZ1N0YXJ0Q29sKzE7aWYodC50b2tlbml6ZSE9biYmdC50b2tlbml6ZSE9cnx8byYmby5ub0luZGVudClyZXR1cm4gaT9pLm1hdGNoKC9eKFxzKikvKVswXS5sZW5ndGg6MDtpZih0LnRhZ05hbWUpcmV0dXJuIE0/dC50YWdTdGFydCt0LnRhZ05hbWUubGVuZ3RoKzI6dC50YWdTdGFydCtMKlM7aWYoQSYmLzwhXFtDREFUQVxbLy50ZXN0KGUpKXJldHVybiAwO2ZvcihvJiYvXjxcLy8udGVzdChlKSYmKG89by5wcmV2KTtvJiYhby5zdGFydE9mTGluZTspbz1vLnByZXY7cmV0dXJuIG8/by5pbmRlbnQrTDowfSxlbGVjdHJpY0NoYXJzOiIvIixibG9ja0NvbW1lbnRTdGFydDoiPCEtLSIsYmxvY2tDb21tZW50RW5kOiItLT4iLGNvbmZpZ3VyYXRpb246ZS5odG1sTW9kZT8iaHRtbCI6InhtbCIsaGVscGVyVHlwZTplLmh0bWxNb2RlPyJodG1sIjoieG1sIn19KSxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveG1sIiwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCJ4bWwiKSxDb2RlTWlycm9yLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIil8fENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIix7bmFtZToieG1sIixodG1sTW9kZTohMH0pO1BLBwiT1g9diDIAAIgyAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABwAAABzdGF0aWNcbGliXGNvZGVtaXJyb3IubWluLmpzd2luZG93LkNvZGVNaXJyb3I9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChyLG4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChyLG4pO3RoaXMub3B0aW9ucz1uPW58fHt9O2Zvcih2YXIgaSBpbiBhbykhbi5oYXNPd25Qcm9wZXJ0eShpKSYmYW8uaGFzT3duUHJvcGVydHkoaSkmJihuW2ldPWFvW2ldKTtoKG4pO3ZhciBvPSJzdHJpbmciPT10eXBlb2Ygbi52YWx1ZT8wOm4udmFsdWUuZmlyc3QsbD10aGlzLmRpc3BsYXk9ZShyLG8pO2wud3JhcHBlci5Db2RlTWlycm9yPXRoaXMsdSh0aGlzKSxuLmF1dG9mb2N1cyYmIVZpJiZwZSh0aGlzKSx0aGlzLnN0YXRlPXtrZXlNYXBzOltdLG92ZXJsYXlzOltdLG1vZGVHZW46MCxvdmVyd3JpdGU6ITEsZm9jdXNlZDohMSxzdXBwcmVzc0VkaXRzOiExLHBhc3RlSW5jb21pbmc6ITEsZHJhZ2dpbmdUZXh0OiExLGhpZ2hsaWdodDpuZXcgJG59LHModGhpcyksbi5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIik7dmFyIGE9bi52YWx1ZTsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyB3byhuLnZhbHVlLG4ubW9kZSkpLGxlKHRoaXMscG4pKHRoaXMsYSksQWkmJnNldFRpbWVvdXQoaWkoZGUsdGhpcywhMCksMjApLG1lKHRoaXMpO3ZhciBjO3RyeXtjPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXR9Y2F0Y2goZil7fWN8fG4uYXV0b2ZvY3VzJiYhVmk/c2V0VGltZW91dChpaShFZSx0aGlzKSwyMCk6emUodGhpcyksbGUodGhpcyxmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzbylzby5wcm9wZXJ0eUlzRW51bWVyYWJsZSh0KSYmc29bdF0odGhpcyxuW3RdLHVvKTtmb3IodmFyIGU9MDtlPHBvLmxlbmd0aDsrK2UpcG9bZV0odGhpcyl9KSgpfWZ1bmN0aW9uIGUodCxlKXt2YXIgcj17fSxuPXIuaW5wdXQ9c2koInRleHRhcmVhIixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmU7IGZvbnQtc2l6ZTogNHB4OyIpO3JldHVybiBXaT9uLnN0eWxlLndpZHRoPSIxMDAwcHgiOm4uc2V0QXR0cmlidXRlKCJ3cmFwIiwib2ZmIiksR2kmJihuLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkIGJsYWNrIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0Iiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCJmYWxzZSIpLHIuaW5wdXREaXY9c2koImRpdiIsW25dLG51bGwsIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iiksci5zY3JvbGxiYXJIPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsImhlaWdodDogMXB4IildLCJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKSxyLnNjcm9sbGJhclY9c2koImRpdiIsW3NpKCJkaXYiLG51bGwsbnVsbCwid2lkdGg6IDFweCIpXSwiQ29kZU1pcnJvci12c2Nyb2xsYmFyIiksci5zY3JvbGxiYXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIiksci5ndXR0ZXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIiksci5saW5lRGl2PXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY29kZSIpLHIuc2VsZWN0aW9uRGl2PXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxIiksci5jdXJzb3I9c2koImRpdiIsIsKgIiwiQ29kZU1pcnJvci1jdXJzb3IiKSxyLm90aGVyQ3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIiksci5tZWFzdXJlPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItbWVhc3VyZSIpLHIubGluZVNwYWNlPXNpKCJkaXYiLFtyLm1lYXN1cmUsci5zZWxlY3Rpb25EaXYsci5saW5lRGl2LHIuY3Vyc29yLHIub3RoZXJDdXJzb3JdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpLHIubW92ZXI9c2koImRpdiIsW3NpKCJkaXYiLFtyLmxpbmVTcGFjZV0sIkNvZGVNaXJyb3ItbGluZXMiKV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIiksci5zaXplcj1zaSgiZGl2Iixbci5tb3Zlcl0sIkNvZGVNaXJyb3Itc2l6ZXIiKSxyLmhlaWdodEZvcmNlcj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAiK1RvKyJweDsgd2lkdGg6IDFweDsiKSxyLmd1dHRlcnM9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXJzIiksci5saW5lR3V0dGVyPW51bGwsci5zY3JvbGxlcj1zaSgiZGl2Iixbci5zaXplcixyLmhlaWdodEZvcmNlcixyLmd1dHRlcnNdLCJDb2RlTWlycm9yLXNjcm9sbCIpLHIuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIi0xIiksci53cmFwcGVyPXNpKCJkaXYiLFtyLmlucHV0RGl2LHIuc2Nyb2xsYmFySCxyLnNjcm9sbGJhclYsci5zY3JvbGxiYXJGaWxsZXIsci5ndXR0ZXJGaWxsZXIsci5zY3JvbGxlcl0sIkNvZGVNaXJyb3IiKSxIaSYmKHIuZ3V0dGVycy5zdHlsZS56SW5kZXg9LTEsci5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQ9MCksdC5hcHBlbmRDaGlsZD90LmFwcGVuZENoaWxkKHIud3JhcHBlcik6dChyLndyYXBwZXIpLEdpJiYobi5zdHlsZS53aWR0aD0iMHB4IiksV2l8fChyLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCksRmk/KHIuaW5wdXREaXYuc3R5bGUuaGVpZ2h0PSIxcHgiLHIuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIik6SGkmJihyLnNjcm9sbGJhckguc3R5bGUubWluV2lkdGg9ci5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPSIxOHB4Iiksci52aWV3T2Zmc2V0PXIubGFzdFNpemVDPTAsci5zaG93aW5nRnJvbT1yLnNob3dpbmdUbz1lLHIubGluZU51bVdpZHRoPXIubGluZU51bUlubmVyV2lkdGg9ci5saW5lTnVtQ2hhcnM9bnVsbCxyLnByZXZJbnB1dD0iIixyLmFsaWduV2lkZ2V0cz0hMSxyLnBvbGxpbmdGYXN0PSExLHIucG9sbD1uZXcgJG4sci5jYWNoZWRDaGFyV2lkdGg9ci5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsci5tZWFzdXJlTGluZUNhY2hlPVtdLHIubWVhc3VyZUxpbmVDYWNoZVBvcz0wLHIuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxyLm1heExpbmU9bnVsbCxyLm1heExpbmVMZW5ndGg9MCxyLm1heExpbmVDaGFuZ2VkPSExLHIud2hlZWxEWD1yLndoZWVsRFk9ci53aGVlbFN0YXJ0WD1yLndoZWVsU3RhcnRZPW51bGwscn1mdW5jdGlvbiByKGUpe2UuZG9jLm1vZGU9dC5nZXRNb2RlKGUub3B0aW9ucyxlLmRvYy5tb2RlT3B0aW9uKSxlLmRvYy5pdGVyKGZ1bmN0aW9uKHQpe3Quc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpfSksZS5kb2MuZnJvbnRpZXI9ZS5kb2MuZmlyc3QsVyhlLDEwMCksZS5zdGF0ZS5tb2RlR2VuKyssZS5jdXJPcCYmdWUoZSl9ZnVuY3Rpb24gbih0KXt0Lm9wdGlvbnMubGluZVdyYXBwaW5nPyh0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIix0LmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGg9IiIpOih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCIiKSxmKHQpKSxvKHQpLHVlKHQpLF8odCksc2V0VGltZW91dChmdW5jdGlvbigpe2QodCl9LDEwMCl9ZnVuY3Rpb24gaSh0KXt2YXIgZT1yZSh0LmRpc3BsYXkpLHI9dC5vcHRpb25zLmxpbmVXcmFwcGluZyxuPXImJk1hdGgubWF4KDUsdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoL25lKHQuZGlzcGxheSktMyk7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBWcih0LmRvYyxpKT8wOnI/KE1hdGguY2VpbChpLnRleHQubGVuZ3RoL24pfHwxKSplOmV9fWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5kb2Mscj1pKHQpO2UuaXRlcihmdW5jdGlvbih0KXt2YXIgZT1yKHQpO2UhPXQuaGVpZ2h0JiZ5bih0LGUpfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT12b1t0Lm9wdGlvbnMua2V5TWFwXSxyPWUuc3R5bGU7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1rZXltYXAtXFMrL2csIiIpKyhyPyIgY20ta2V5bWFwLSIrcjoiIiksdC5zdGF0ZS5kaXNhYmxlSW5wdXQ9ZS5kaXNhYmxlSW5wdXR9ZnVuY3Rpb24gcyh0KXt0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLXMtXFMrL2csIiIpK3Qub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywiIGNtLXMtIiksXyh0KX1mdW5jdGlvbiBhKHQpe3UodCksdWUodCksc2V0VGltZW91dChmdW5jdGlvbigpe2codCl9LDIwKX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQuZGlzcGxheS5ndXR0ZXJzLHI9dC5vcHRpb25zLmd1dHRlcnM7YWkoZSk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl0sbz1lLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyICIraSkpOyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIj09aSYmKHQuZGlzcGxheS5saW5lR3V0dGVyPW8sby5zdHlsZS53aWR0aD0odC5kaXNwbGF5LmxpbmVOdW1XaWR0aHx8MSkrInB4Iil9ZS5zdHlsZS5kaXNwbGF5PW4/IiI6Im5vbmUifWZ1bmN0aW9uIGModCxlKXtpZigwPT1lLmhlaWdodClyZXR1cm4gMDtmb3IodmFyIHIsbj1lLnRleHQubGVuZ3RoLGk9ZTtyPVJyKGkpOyl7dmFyIG89ci5maW5kKCk7aT1nbih0LG8uZnJvbS5saW5lKSxuKz1vLmZyb20uY2gtby50by5jaH1mb3IoaT1lO3I9QnIoaSk7KXt2YXIgbz1yLmZpbmQoKTtuLT1pLnRleHQubGVuZ3RoLW8uZnJvbS5jaCxpPWduKHQsby50by5saW5lKSxuKz1pLnRleHQubGVuZ3RoLW8udG8uY2h9cmV0dXJuIG59ZnVuY3Rpb24gZih0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYztlLm1heExpbmU9Z24ocixyLmZpcnN0KSxlLm1heExpbmVMZW5ndGg9YyhyLGUubWF4TGluZSksZS5tYXhMaW5lQ2hhbmdlZD0hMCxyLml0ZXIoZnVuY3Rpb24odCl7dmFyIG49YyhyLHQpO24+ZS5tYXhMaW5lTGVuZ3RoJiYoZS5tYXhMaW5lTGVuZ3RoPW4sZS5tYXhMaW5lPXQpfSl9ZnVuY3Rpb24gaCh0KXt2YXIgZT10aSh0Lmd1dHRlcnMsIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiKTstMT09ZSYmdC5saW5lTnVtYmVycz90Lmd1dHRlcnM9dC5ndXR0ZXJzLmNvbmNhdChbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSk6ZT4tMSYmIXQubGluZU51bWJlcnMmJih0Lmd1dHRlcnM9dC5ndXR0ZXJzLnNsaWNlKDApLHQuZ3V0dGVycy5zcGxpY2UoZSwxKSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYy5oZWlnaHQsbj1yK0YoZSk7ZS5zaXplci5zdHlsZS5taW5IZWlnaHQ9ZS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wPW4rInB4IixlLmd1dHRlcnMuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KG4sZS5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8pKyJweCI7dmFyIGk9TWF0aC5tYXgobixlLnNjcm9sbGVyLnNjcm9sbEhlaWdodCksbz1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoPmUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrMSxsPWk+ZS5zY3JvbGxlci5jbGllbnRIZWlnaHQrMTtsPyhlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFyVi5zdHlsZS5ib3R0b209bz9kaShlLm1lYXN1cmUpKyJweCI6IjAiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1pLWUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0K2Uuc2Nyb2xsYmFyVi5jbGllbnRIZWlnaHQrInB4Iik6KGUuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5PSIiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD0iMCIpLG8/KGUuc2Nyb2xsYmFySC5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJILnN0eWxlLnJpZ2h0PWw/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoLWUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrZS5zY3JvbGxiYXJILmNsaWVudFdpZHRoKyJweCIpOihlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iMCIpLG8mJmw/KGUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQ9ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGg9ZGkoZS5tZWFzdXJlKSsicHgiKTplLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSIiLG8mJnQub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciYmdC5vcHRpb25zLmZpeGVkR3V0dGVyPyhlLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWRpKGUubWVhc3VyZSkrInB4IixlLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aD1lLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4Iik6ZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixQaSYmMD09PWRpKGUubWVhc3VyZSkmJihlLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGg9ZS5zY3JvbGxiYXJILnN0eWxlLm1pbkhlaWdodD1SaT8iMThweCI6IjEycHgiLGUuc2Nyb2xsYmFyVi5zdHlsZS5wb2ludGVyRXZlbnRzPWUuc2Nyb2xsYmFySC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIil9ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49dC5zY3JvbGxlci5zY3JvbGxUb3AsaT10LndyYXBwZXIuY2xpZW50SGVpZ2h0OyJudW1iZXIiPT10eXBlb2Ygcj9uPXI6ciYmKG49ci50b3AsaT1yLmJvdHRvbS1yLnRvcCksbj1NYXRoLmZsb29yKG4tSSh0KSk7dmFyIG89TWF0aC5jZWlsKG4raSk7cmV0dXJue2Zyb206eG4oZSxuKSx0bzp4bihlLG8pfX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuZGlzcGxheTtpZihlLmFsaWduV2lkZ2V0c3x8ZS5ndXR0ZXJzLmZpcnN0Q2hpbGQmJnQub3B0aW9ucy5maXhlZEd1dHRlcil7Zm9yKHZhciByPXkoZSktZS5zY3JvbGxlci5zY3JvbGxMZWZ0K3QuZG9jLnNjcm9sbExlZnQsbj1lLmd1dHRlcnMub2Zmc2V0V2lkdGgsaT1yKyJweCIsbz1lLmxpbmVEaXYuZmlyc3RDaGlsZDtvO289by5uZXh0U2libGluZylpZihvLmFsaWduYWJsZSlmb3IodmFyIGw9MCxzPW8uYWxpZ25hYmxlO2w8cy5sZW5ndGg7KytsKXNbbF0uc3R5bGUubGVmdD1pO3Qub3B0aW9ucy5maXhlZEd1dHRlciYmKGUuZ3V0dGVycy5zdHlsZS5sZWZ0PXIrbisicHgiKX19ZnVuY3Rpb24gbSh0KXtpZighdC5vcHRpb25zLmxpbmVOdW1iZXJzKXJldHVybiExO3ZhciBlPXQuZG9jLHI9dih0Lm9wdGlvbnMsZS5maXJzdCtlLnNpemUtMSksbj10LmRpc3BsYXk7aWYoci5sZW5ndGghPW4ubGluZU51bUNoYXJzKXt2YXIgaT1uLm1lYXN1cmUuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3NpKCJkaXYiLHIpXSwiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIpKSxvPWkuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCxsPWkub2Zmc2V0V2lkdGgtbztyZXR1cm4gbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPSIiLG4ubGluZU51bUlubmVyV2lkdGg9TWF0aC5tYXgobyxuLmxpbmVHdXR0ZXIub2Zmc2V0V2lkdGgtbCksbi5saW5lTnVtV2lkdGg9bi5saW5lTnVtSW5uZXJXaWR0aCtsLG4ubGluZU51bUNoYXJzPW4ubGluZU51bUlubmVyV2lkdGg/ci5sZW5ndGg6LTEsbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPW4ubGluZU51bVdpZHRoKyJweCIsITB9cmV0dXJuITF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiBTdHJpbmcodC5saW5lTnVtYmVyRm9ybWF0dGVyKGUrdC5maXJzdExpbmVOdW1iZXIpKX1mdW5jdGlvbiB5KHQpe3JldHVybiBmaSh0LnNjcm9sbGVyKS5sZWZ0LWZpKHQuc2l6ZXIpLmxlZnR9ZnVuY3Rpb24gYih0LGUscixuKXtmb3IodmFyIGksbz10LmRpc3BsYXkuc2hvd2luZ0Zyb20sbD10LmRpc3BsYXkuc2hvd2luZ1RvLHM9cCh0LmRpc3BsYXksdC5kb2MsciksYT0hMDs7YT0hMSl7dmFyIHU9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoO2lmKCF4KHQsZSxzLG4pKWJyZWFrO2lmKGk9ITAsZT1bXSxBKHQpLGQodCksYSYmdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmdSE9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKW49ITA7ZWxzZSBpZihuPSExLHImJihyPU1hdGgubWluKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwibnVtYmVyIj09dHlwZW9mIHI/cjpyLnRvcCkpLHM9cCh0LmRpc3BsYXksdC5kb2Mscikscy5mcm9tPj10LmRpc3BsYXkuc2hvd2luZ0Zyb20mJnMudG88PXQuZGlzcGxheS5zaG93aW5nVG8pYnJlYWt9cmV0dXJuIGkmJihVbih0LCJ1cGRhdGUiLHQpLCh0LmRpc3BsYXkuc2hvd2luZ0Zyb20hPW98fHQuZGlzcGxheS5zaG93aW5nVG8hPWwpJiZVbih0LCJ2aWV3cG9ydENoYW5nZSIsdCx0LmRpc3BsYXkuc2hvd2luZ0Zyb20sdC5kaXNwbGF5LnNob3dpbmdUbykpLGl9ZnVuY3Rpb24geCh0LGUscixuKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYztpZighaS53cmFwcGVyLmNsaWVudFdpZHRoKXJldHVybiBpLnNob3dpbmdGcm9tPWkuc2hvd2luZ1RvPW8uZmlyc3QsaS52aWV3T2Zmc2V0PTAsdm9pZCAwO2lmKCEoIW4mJjA9PWUubGVuZ3RoJiZyLmZyb20+aS5zaG93aW5nRnJvbSYmci50bzxpLnNob3dpbmdUbykpe20odCkmJihlPVt7ZnJvbTpvLmZpcnN0LHRvOm8uZmlyc3Qrby5zaXplfV0pO3ZhciBsPWkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdD1pLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4IjtpLnNjcm9sbGJhckguc3R5bGUubGVmdD10Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bDoiMCI7dmFyIHM9MS8wO2lmKHQub3B0aW9ucy5saW5lTnVtYmVycylmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSllW2FdLmRpZmYmJmVbYV0uZnJvbTxzJiYocz1lW2FdLmZyb20pO3ZhciB1PW8uZmlyc3Qrby5zaXplLGM9TWF0aC5tYXgoci5mcm9tLXQub3B0aW9ucy52aWV3cG9ydE1hcmdpbixvLmZpcnN0KSxmPU1hdGgubWluKHUsci50byt0Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4pO2lmKGkuc2hvd2luZ0Zyb208YyYmYy1pLnNob3dpbmdGcm9tPDIwJiYoYz1NYXRoLm1heChvLmZpcnN0LGkuc2hvd2luZ0Zyb20pKSxpLnNob3dpbmdUbz5mJiZpLnNob3dpbmdUby1mPDIwJiYoZj1NYXRoLm1pbih1LGkuc2hvd2luZ1RvKSksUWkpZm9yKGM9Ym4oR3IobyxnbihvLGMpKSk7dT5mJiZWcihvLGduKG8sZikpOykrK2Y7dmFyIGg9W3tmcm9tOk1hdGgubWF4KGkuc2hvd2luZ0Zyb20sby5maXJzdCksdG86TWF0aC5taW4oaS5zaG93aW5nVG8sdSl9XTtpZihoPWhbMF0uZnJvbT49aFswXS50bz9bXTpMKGgsZSksUWkpZm9yKHZhciBhPTA7YTxoLmxlbmd0aDsrK2EpZm9yKHZhciBkLHA9aFthXTtkPUJyKGduKG8scC50by0xKSk7KXt2YXIgZz1kLmZpbmQoKS5mcm9tLmxpbmU7aWYoIShnPnAuZnJvbSkpe2guc3BsaWNlKGEtLSwxKTticmVha31wLnRvPWd9Zm9yKHZhciB2PTAsYT0wO2E8aC5sZW5ndGg7KythKXt2YXIgcD1oW2FdO3AuZnJvbTxjJiYocC5mcm9tPWMpLHAudG8+ZiYmKHAudG89ZikscC5mcm9tPj1wLnRvP2guc3BsaWNlKGEtLSwxKTp2Kz1wLnRvLXAuZnJvbX1pZighbiYmdj09Zi1jJiZjPT1pLnNob3dpbmdGcm9tJiZmPT1pLnNob3dpbmdUbylyZXR1cm4gdyh0KSx2b2lkIDA7aC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZnJvbS1lLmZyb219KTt0cnl7dmFyIHk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudH1jYXRjaChiKXt9LjcqKGYtYyk+diYmKGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSJub25lIiksUyh0LGMsZixoLHMpLGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSIiLHkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPXkmJnkub2Zmc2V0SGVpZ2h0JiZ5LmZvY3VzKCk7dmFyIHg9YyE9aS5zaG93aW5nRnJvbXx8ZiE9aS5zaG93aW5nVG98fGkubGFzdFNpemVDIT1pLndyYXBwZXIuY2xpZW50SGVpZ2h0O3JldHVybiB4JiYoaS5sYXN0U2l6ZUM9aS53cmFwcGVyLmNsaWVudEhlaWdodCxXKHQsNDAwKSksaS5zaG93aW5nRnJvbT1jLGkuc2hvd2luZ1RvPWYsQyh0KSx3KHQpLCEwfX1mdW5jdGlvbiBDKHQpe2Zvcih2YXIgZSxyPXQuZGlzcGxheSxuPXIubGluZURpdi5vZmZzZXRUb3AsaT1yLmxpbmVEaXYuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylpZihpLmxpbmVPYmope2lmKEhpKXt2YXIgbz1pLm9mZnNldFRvcCtpLm9mZnNldEhlaWdodDtlPW8tbixuPW99ZWxzZXt2YXIgbD1maShpKTtlPWwuYm90dG9tLWwudG9wfXZhciBzPWkubGluZU9iai5oZWlnaHQtZTtpZigyPmUmJihlPXJlKHIpKSxzPi4wMDF8fC0uMDAxPnMpe3luKGkubGluZU9iaixlKTt2YXIgYT1pLmxpbmVPYmoud2lkZ2V0cztpZihhKWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7Kyt1KWFbdV0uaGVpZ2h0PWFbdV0ubm9kZS5vZmZzZXRIZWlnaHR9fX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQuZGlzcGxheS52aWV3T2Zmc2V0PUNuKHQsZ24odC5kb2MsdC5kaXNwbGF5LnNob3dpbmdGcm9tKSk7dC5kaXNwbGF5Lm1vdmVyLnN0eWxlLnRvcD1lKyJweCJ9ZnVuY3Rpb24gTCh0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGh8fDA7bj5yOysrcil7Zm9yKHZhciBpPWVbcl0sbz1bXSxsPWkuZGlmZnx8MCxzPTAsYT10Lmxlbmd0aDthPnM7KytzKXt2YXIgdT10W3NdO2kudG88PXUuZnJvbSYmaS5kaWZmP28ucHVzaCh7ZnJvbTp1LmZyb20rbCx0bzp1LnRvK2x9KTppLnRvPD11LmZyb218fGkuZnJvbT49dS50bz9vLnB1c2godSk6KGkuZnJvbT51LmZyb20mJm8ucHVzaCh7ZnJvbTp1LmZyb20sdG86aS5mcm9tfSksaS50bzx1LnRvJiZvLnB1c2goe2Zyb206aS50bytsLHRvOnUudG8rbH0pKX10PW99cmV0dXJuIHR9ZnVuY3Rpb24gayh0KXtmb3IodmFyIGU9dC5kaXNwbGF5LHI9e30sbj17fSxpPWUuZ3V0dGVycy5maXJzdENoaWxkLG89MDtpO2k9aS5uZXh0U2libGluZywrK28pclt0Lm9wdGlvbnMuZ3V0dGVyc1tvXV09aS5vZmZzZXRMZWZ0LG5bdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0V2lkdGg7cmV0dXJue2ZpeGVkUG9zOnkoZSksZ3V0dGVyVG90YWxXaWR0aDplLmd1dHRlcnMub2Zmc2V0V2lkdGgsZ3V0dGVyTGVmdDpyLGd1dHRlcldpZHRoOm4sd3JhcHBlcldpZHRoOmUud3JhcHBlci5jbGllbnRXaWR0aH19ZnVuY3Rpb24gUyh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSl7dmFyIHI9ZS5uZXh0U2libGluZztyZXR1cm4gV2kmJktpJiZ0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PT1lPyhlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGUubGluZU9iaj1udWxsKTplLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSkscn12YXIgbD1rKHQpLHM9dC5kaXNwbGF5LGE9dC5vcHRpb25zLmxpbmVOdW1iZXJzO24ubGVuZ3RofHxXaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldHx8YWkocy5saW5lRGl2KTt2YXIgdT1zLmxpbmVEaXYsYz11LmZpcnN0Q2hpbGQsZj1uLnNoaWZ0KCksaD1lO2Zvcih0LmRvYy5pdGVyKGUscixmdW5jdGlvbihlKXtpZihmJiZmLnRvPT1oJiYoZj1uLnNoaWZ0KCkpLFZyKHQuZG9jLGUpKXtpZigwIT1lLmhlaWdodCYmeW4oZSwwKSxlLndpZGdldHMmJmMmJmMucHJldmlvdXNTaWJsaW5nKWZvcih2YXIgcj0wO3I8ZS53aWRnZXRzLmxlbmd0aDsrK3Ipe3ZhciBzPWUud2lkZ2V0c1tyXTtpZihzLnNob3dJZkhpZGRlbil7dmFyIGQ9Yy5wcmV2aW91c1NpYmxpbmc7aWYoL3ByZS9pLnRlc3QoZC5ub2RlTmFtZSkpe3ZhciBwPXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIik7ZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwLGQpLHAuYXBwZW5kQ2hpbGQoZCksZD1wfXZhciBnPWQuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3Mubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTtzLmhhbmRsZU1vdXNlRXZlbnRzfHwoZy5pZ25vcmVFdmVudHM9ITApLFQocyxnLGQsbCl9fX1lbHNlIGlmKGYmJmYuZnJvbTw9aCYmZi50bz5oKXtmb3IoO2MubGluZU9iaiE9ZTspYz1vKGMpO2EmJmg+PWkmJmMubGluZU51bWJlciYmY2koYy5saW5lTnVtYmVyLHYodC5vcHRpb25zLGgpKSxjPWMubmV4dFNpYmxpbmd9ZWxzZXtpZihlLndpZGdldHMpZm9yKHZhciBtLHk9MCxiPWM7YiYmMjA+eTsrK3ksYj1iLm5leHRTaWJsaW5nKWlmKGIubGluZU9iaj09ZSYmL2Rpdi9pLnRlc3QoYi5ub2RlTmFtZSkpe209YjticmVha312YXIgeD1NKHQsZSxoLGwsbSk7aWYoeCE9bSl1Lmluc2VydEJlZm9yZSh4LGMpO2Vsc2V7Zm9yKDtjIT1tOyljPW8oYyk7Yz1jLm5leHRTaWJsaW5nfXgubGluZU9iaj1lfSsraH0pO2M7KWM9byhjKX1mdW5jdGlvbiBNKHQsZSxyLG4saSl7dmFyIG8sbD1ybih0LGUpLHM9bC5wcmUsYT1lLmd1dHRlck1hcmtlcnMsdT10LmRpc3BsYXksYz1sLmJnQ2xhc3M/bC5iZ0NsYXNzKyIgIisoZS5iZ0NsYXNzfHwiIik6ZS5iZ0NsYXNzO2lmKCEodC5vcHRpb25zLmxpbmVOdW1iZXJzfHxhfHxjfHxlLndyYXBDbGFzc3x8ZS53aWRnZXRzKSlyZXR1cm4gcztpZihpKXtpLmFsaWduYWJsZT1udWxsO2Zvcih2YXIgZixoPSEwLGQ9MCxwPW51bGwsZz1pLmZpcnN0Q2hpbGQ7ZztnPWYpaWYoZj1nLm5leHRTaWJsaW5nLC9cYkNvZGVNaXJyb3ItbGluZXdpZGdldFxiLy50ZXN0KGcuY2xhc3NOYW1lKSl7Zm9yKHZhciBtPTA7bTxlLndpZGdldHMubGVuZ3RoOysrbSl7dmFyIHk9ZS53aWRnZXRzW21dO2lmKHkubm9kZT09Zy5maXJzdENoaWxkKXt5LmFib3ZlfHxwfHwocD1nKSxUKHksZyxpLG4pLCsrZDticmVha319aWYobT09ZS53aWRnZXRzLmxlbmd0aCl7aD0hMTticmVha319ZWxzZSBpLnJlbW92ZUNoaWxkKGcpO2kuaW5zZXJ0QmVmb3JlKHMscCksaCYmZD09ZS53aWRnZXRzLmxlbmd0aCYmKG89aSxpLmNsYXNzTmFtZT1lLndyYXBDbGFzc3x8IiIpfWlmKG98fChvPXNpKCJkaXYiLG51bGwsZS53cmFwQ2xhc3MsInBvc2l0aW9uOiByZWxhdGl2ZSIpLG8uYXBwZW5kQ2hpbGQocykpLGMmJm8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsYysiIENvZGVNaXJyb3ItbGluZWJhY2tncm91bmQiKSxvLmZpcnN0Q2hpbGQpLHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSl7dmFyIGI9by5pbnNlcnRCZWZvcmUoc2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrKHQub3B0aW9ucy5maXhlZEd1dHRlcj9uLmZpeGVkUG9zOi1uLmd1dHRlclRvdGFsV2lkdGgpKyJweCIpLG8uZmlyc3RDaGlsZCk7aWYodC5vcHRpb25zLmZpeGVkR3V0dGVyJiYoby5hbGlnbmFibGV8fChvLmFsaWduYWJsZT1bXSkpLnB1c2goYiksIXQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSYmYVsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdfHwoby5saW5lTnVtYmVyPWIuYXBwZW5kQ2hpbGQoc2koImRpdiIsdih0Lm9wdGlvbnMsciksIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKyJweDsgd2lkdGg6ICIrdS5saW5lTnVtSW5uZXJXaWR0aCsicHgiKSkpLGEpZm9yKHZhciB4PTA7eDx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt4KXt2YXIgQz10Lm9wdGlvbnMuZ3V0dGVyc1t4XSx3PWEuaGFzT3duUHJvcGVydHkoQykmJmFbQ107dyYmYi5hcHBlbmRDaGlsZChzaSgiZGl2Iixbd10sIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsImxlZnQ6ICIrbi5ndXR0ZXJMZWZ0W0NdKyJweDsgd2lkdGg6ICIrbi5ndXR0ZXJXaWR0aFtDXSsicHgiKSl9fWlmKEhpJiYoby5zdHlsZS56SW5kZXg9MiksZS53aWRnZXRzJiZvIT1pKWZvcih2YXIgbT0wLEw9ZS53aWRnZXRzO208TC5sZW5ndGg7KyttKXt2YXIgeT1MW21dLGs9c2koImRpdiIsW3kubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpO3kuaGFuZGxlTW91c2VFdmVudHN8fChrLmlnbm9yZUV2ZW50cz0hMCksVCh5LGssbyxuKSx5LmFib3ZlP28uaW5zZXJ0QmVmb3JlKGssdC5vcHRpb25zLmxpbmVOdW1iZXJzJiYwIT1lLmhlaWdodD9iOnMpOm8uYXBwZW5kQ2hpbGQoayksVW4oeSwicmVkcmF3Iil9cmV0dXJuIG99ZnVuY3Rpb24gVCh0LGUscixuKXtpZih0Lm5vSFNjcm9sbCl7KHIuYWxpZ25hYmxlfHwoci5hbGlnbmFibGU9W10pKS5wdXNoKGUpO3ZhciBpPW4ud3JhcHBlcldpZHRoO2Uuc3R5bGUubGVmdD1uLmZpeGVkUG9zKyJweCIsdC5jb3Zlckd1dHRlcnx8KGktPW4uZ3V0dGVyVG90YWxXaWR0aCxlLnN0eWxlLnBhZGRpbmdMZWZ0PW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSxlLnN0eWxlLndpZHRoPWkrInB4In10LmNvdmVyR3V0dGVyJiYoZS5zdHlsZS56SW5kZXg9NSxlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdC5ub0hTY3JvbGx8fChlLnN0eWxlLm1hcmdpbkxlZnQ9LW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LmRpc3BsYXkscj1qZSh0LmRvYy5zZWwuZnJvbSx0LmRvYy5zZWwudG8pO2lmKHJ8fHQub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZz9IKHQpOmUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIixyP2Uuc2VsZWN0aW9uRGl2LnN0eWxlLmRpc3BsYXk9Im5vbmUiOk4odCksdC5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3Ipe3ZhciBuPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2IiksaT1maShlLndyYXBwZXIpLG89ZmkoZS5saW5lRGl2KTtlLmlucHV0RGl2LnN0eWxlLnRvcD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRIZWlnaHQtMTAsbi50b3Arby50b3AtaS50b3ApKSsicHgiLGUuaW5wdXREaXYuc3R5bGUubGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRXaWR0aC0xMCxuLmxlZnQrby5sZWZ0LWkubGVmdCkpKyJweCJ9fWZ1bmN0aW9uIEgodCl7dmFyIGU9dC5kaXNwbGF5LHI9USh0LHQuZG9jLnNlbC5oZWFkLCJkaXYiKTtlLmN1cnNvci5zdHlsZS5sZWZ0PXIubGVmdCsicHgiLGUuY3Vyc29yLnN0eWxlLnRvcD1yLnRvcCsicHgiLGUuY3Vyc29yLnN0eWxlLmhlaWdodD1NYXRoLm1heCgwLHIuYm90dG9tLXIudG9wKSp0Lm9wdGlvbnMuY3Vyc29ySGVpZ2h0KyJweCIsZS5jdXJzb3Iuc3R5bGUuZGlzcGxheT0iIixyLm90aGVyPyhlLm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsZS5vdGhlckN1cnNvci5zdHlsZS5sZWZ0PXIub3RoZXIubGVmdCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUudG9wPXIub3RoZXIudG9wKyJweCIsZS5vdGhlckN1cnNvci5zdHlsZS5oZWlnaHQ9Ljg1KihyLm90aGVyLmJvdHRvbS1yLm90aGVyLnRvcCkrInB4Iik6ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIn1mdW5jdGlvbiBOKHQpe2Z1bmN0aW9uIGUodCxlLHIsbil7MD5lJiYoZT0wKSxsLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrdCsicHg7IHRvcDogIitlKyJweDsgd2lkdGg6ICIrKG51bGw9PXI/cy10OnIpKyJweDsgaGVpZ2h0OiAiKyhuLWUpKyJweCIpKX1mdW5jdGlvbiByKHIsbixvKXtmdW5jdGlvbiBsKGUsbil7cmV0dXJuIHEodCxZZShyLGUpLCJkaXYiLGYsbil9dmFyIHUsYyxmPWduKGksciksaD1mLnRleHQubGVuZ3RoO3JldHVybiBnaSh3bihmKSxufHwwLG51bGw9PW8/aDpvLGZ1bmN0aW9uKHQscixpKXt2YXIgZixkLHAsZz1sKHQsImxlZnQiKTtpZih0PT1yKWY9ZyxkPXA9Zy5sZWZ0O2Vsc2V7aWYoZj1sKHItMSwicmlnaHQiKSwicnRsIj09aSl7dmFyIG09ZztnPWYsZj1tfWQ9Zy5sZWZ0LHA9Zi5yaWdodH1udWxsPT1uJiYwPT10JiYoZD1hKSxmLnRvcC1nLnRvcD4zJiYoZShkLGcudG9wLG51bGwsZy5ib3R0b20pLGQ9YSxnLmJvdHRvbTxmLnRvcCYmZShkLGcuYm90dG9tLG51bGwsZi50b3ApKSxudWxsPT1vJiZyPT1oJiYocD1zKSwoIXV8fGcudG9wPHUudG9wfHxnLnRvcD09dS50b3AmJmcubGVmdDx1LmxlZnQpJiYodT1nKSwoIWN8fGYuYm90dG9tPmMuYm90dG9tfHxmLmJvdHRvbT09Yy5ib3R0b20mJmYucmlnaHQ+Yy5yaWdodCkmJihjPWYpLGErMT5kJiYoZD1hKSxlKGQsZi50b3AscC1kLGYuYm90dG9tKX0pLHtzdGFydDp1LGVuZDpjfX12YXIgbj10LmRpc3BsYXksaT10LmRvYyxvPXQuZG9jLnNlbCxsPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxzPW4ubGluZVNwYWNlLm9mZnNldFdpZHRoLGE9UCh0LmRpc3BsYXkpO2lmKG8uZnJvbS5saW5lPT1vLnRvLmxpbmUpcihvLmZyb20ubGluZSxvLmZyb20uY2gsby50by5jaCk7ZWxzZXt2YXIgdT1nbihpLG8uZnJvbS5saW5lKSxjPWduKGksby50by5saW5lKSxmPUdyKGksdSk9PUdyKGksYyksaD1yKG8uZnJvbS5saW5lLG8uZnJvbS5jaCxmP3UudGV4dC5sZW5ndGg6bnVsbCkuZW5kLGQ9cihvLnRvLmxpbmUsZj8wOm51bGwsby50by5jaCkuc3RhcnQ7ZiYmKGgudG9wPGQudG9wLTI/KGUoaC5yaWdodCxoLnRvcCxudWxsLGguYm90dG9tKSxlKGEsZC50b3AsZC5sZWZ0LGQuYm90dG9tKSk6ZShoLnJpZ2h0LGgudG9wLGQubGVmdC1oLnJpZ2h0LGguYm90dG9tKSksaC5ib3R0b208ZC50b3AmJmUoYSxoLmJvdHRvbSxudWxsLGQudG9wKX11aShuLnNlbGVjdGlvbkRpdixsKSxuLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSIifWZ1bmN0aW9uIEQodCl7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgZT10LmRpc3BsYXk7Y2xlYXJJbnRlcnZhbChlLmJsaW5rZXIpO3ZhciByPSEwO2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PSIiLHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU+MCYmKGUuYmxpbmtlcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PShyPSFyKT8iIjoiaGlkZGVuIn0sdC5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSkpfX1mdW5jdGlvbiBXKHQsZSl7dC5kb2MubW9kZS5zdGFydFN0YXRlJiZ0LmRvYy5mcm9udGllcjx0LmRpc3BsYXkuc2hvd2luZ1RvJiZ0LnN0YXRlLmhpZ2hsaWdodC5zZXQoZSxpaShPLHQpKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuZG9jO2lmKGUuZnJvbnRpZXI8ZS5maXJzdCYmKGUuZnJvbnRpZXI9ZS5maXJzdCksIShlLmZyb250aWVyPj10LmRpc3BsYXkuc2hvd2luZ1RvKSl7dmFyIHIsbj0rbmV3IERhdGUrdC5vcHRpb25zLndvcmtUaW1lLGk9YnIoZS5tb2RlLHoodCxlLmZyb250aWVyKSksbz1bXTtlLml0ZXIoZS5mcm9udGllcixNYXRoLm1pbihlLmZpcnN0K2Uuc2l6ZSx0LmRpc3BsYXkuc2hvd2luZ1RvKzUwMCksZnVuY3Rpb24obCl7aWYoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdGcm9tKXt2YXIgcz1sLnN0eWxlcztsLnN0eWxlcz1Rcih0LGwsaSwhMCk7Zm9yKHZhciBhPSFzfHxzLmxlbmd0aCE9bC5zdHlsZXMubGVuZ3RoLHU9MDshYSYmdTxzLmxlbmd0aDsrK3UpYT1zW3VdIT1sLnN0eWxlc1t1XTthJiYociYmci5lbmQ9PWUuZnJvbnRpZXI/ci5lbmQrKzpvLnB1c2gocj17c3RhcnQ6ZS5mcm9udGllcixlbmQ6ZS5mcm9udGllcisxfSkpLGwuc3RhdGVBZnRlcj1icihlLm1vZGUsaSl9ZWxzZSB0bih0LGwudGV4dCxpKSxsLnN0YXRlQWZ0ZXI9MD09ZS5mcm9udGllciU1P2JyKGUubW9kZSxpKTpudWxsO3JldHVybisrZS5mcm9udGllciwrbmV3IERhdGU+bj8oVyh0LHQub3B0aW9ucy53b3JrRGVsYXkpLCEwKTp2b2lkIDB9KSxvLmxlbmd0aCYmbGUodCxmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8by5sZW5ndGg7Kyt0KXVlKHRoaXMsb1t0XS5zdGFydCxvW3RdLmVuZCl9KSgpfX1mdW5jdGlvbiBFKHQsZSxyKXtmb3IodmFyIG4saSxvPXQuZG9jLGw9cj8tMTplLSh0LmRvYy5tb2RlLmlubmVyTW9kZT8xZTM6MTAwKSxzPWU7cz5sOy0tcyl7aWYoczw9by5maXJzdClyZXR1cm4gby5maXJzdDt2YXIgYT1nbihvLHMtMSk7aWYoYS5zdGF0ZUFmdGVyJiYoIXJ8fHM8PW8uZnJvbnRpZXIpKXJldHVybiBzO3ZhciB1PVpuKGEudGV4dCxudWxsLHQub3B0aW9ucy50YWJTaXplKTsobnVsbD09aXx8bj51KSYmKGk9cy0xLG49dSl9cmV0dXJuIGl9ZnVuY3Rpb24geih0LGUscil7dmFyIG49dC5kb2MsaT10LmRpc3BsYXk7aWYoIW4ubW9kZS5zdGFydFN0YXRlKXJldHVybiEwO3ZhciBvPUUodCxlLHIpLGw9bz5uLmZpcnN0JiZnbihuLG8tMSkuc3RhdGVBZnRlcjtyZXR1cm4gbD1sP2JyKG4ubW9kZSxsKTp4cihuLm1vZGUpLG4uaXRlcihvLGUsZnVuY3Rpb24ocil7dG4odCxyLnRleHQsbCk7dmFyIHM9bz09ZS0xfHwwPT1vJTV8fG8+PWkuc2hvd2luZ0Zyb20mJm88aS5zaG93aW5nVG87ci5zdGF0ZUFmdGVyPXM/YnIobi5tb2RlLGwpOm51bGwsKytvfSksciYmKG4uZnJvbnRpZXI9byksbH1mdW5jdGlvbiBJKHQpe3JldHVybiB0LmxpbmVTcGFjZS5vZmZzZXRUb3B9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5tb3Zlci5vZmZzZXRIZWlnaHQtdC5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIFAodCl7dmFyIGU9dWkodC5tZWFzdXJlLHNpKCJwcmUiLG51bGwsbnVsbCwidGV4dC1hbGlnbjogbGVmdCIpKS5hcHBlbmRDaGlsZChzaSgic3BhbiIsIngiKSk7cmV0dXJuIGUub2Zmc2V0TGVmdH1mdW5jdGlvbiBSKHQsZSxyLG4saSl7dmFyIG89LTE7aWYobj1ufHxWKHQsZSksbi5jcnVkZSl7dmFyIGw9bi5sZWZ0K3Iqbi53aWR0aDtyZXR1cm57bGVmdDpsLHJpZ2h0Omwrbi53aWR0aCx0b3A6bi50b3AsYm90dG9tOm4uYm90dG9tfX1mb3IodmFyIHM9cjs7cys9byl7dmFyIGE9bltzXTtpZihhKWJyZWFrOzA+byYmMD09cyYmKG89MSl9cmV0dXJuIGk9cz5yPyJsZWZ0IjpyPnM/InJpZ2h0IjppLCJsZWZ0Ij09aSYmYS5sZWZ0U2lkZT9hPWEubGVmdFNpZGU6InJpZ2h0Ij09aSYmYS5yaWdodFNpZGUmJihhPWEucmlnaHRTaWRlKSx7bGVmdDpyPnM/YS5yaWdodDphLmxlZnQscmlnaHQ6cz5yP2EubGVmdDphLnJpZ2h0LHRvcDphLnRvcCxib3R0b206YS5ib3R0b219fWZ1bmN0aW9uIEIodCxlKXtmb3IodmFyIHI9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO2lmKGkudGV4dD09ZS50ZXh0JiZpLm1hcmtlZFNwYW5zPT1lLm1hcmtlZFNwYW5zJiZ0LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg9PWkud2lkdGgmJmkuY2xhc3Nlcz09ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzKXJldHVybiBpfX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI9Qih0LGUpO3ImJihyLnRleHQ9ci5tZWFzdXJlPXIubWFya2VkU3BhbnM9bnVsbCl9ZnVuY3Rpb24gVih0LGUpe3ZhciByPUIodCxlKTtpZihyKXJldHVybiByLm1lYXN1cmU7dmFyIG49Syh0LGUpLGk9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbz17dGV4dDplLnRleHQsd2lkdGg6dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLG1hcmtlZFNwYW5zOmUubWFya2VkU3BhbnMsbWVhc3VyZTpuLGNsYXNzZXM6ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzfTtyZXR1cm4gMTY9PWkubGVuZ3RoP2lbKyt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyUxNl09bzppLnB1c2gobyksbn1mdW5jdGlvbiBLKHQsZSl7ZnVuY3Rpb24gcih0KXt2YXIgZT10LnRvcC1wLnRvcCxyPXQuYm90dG9tLXAudG9wO3I+diYmKHI9diksMD5lJiYoZT0wKTtmb3IodmFyIG49Zy5sZW5ndGgtMjtuPj0wO24tPTIpe3ZhciBpPWdbbl0sbz1nW24rMV07aWYoIShpPnJ8fGU+bykmJihlPj1pJiZvPj1yfHxpPj1lJiZyPj1vfHxNYXRoLm1pbihyLG8pLU1hdGgubWF4KGUsaSk+PXItZT4+MSkpe2dbbl09TWF0aC5taW4oZSxpKSxnW24rMV09TWF0aC5tYXgocixvKTticmVha319cmV0dXJuIDA+biYmKG49Zy5sZW5ndGgsZy5wdXNoKGUscikpLHtsZWZ0OnQubGVmdC1wLmxlZnQscmlnaHQ6dC5yaWdodC1wLmxlZnQsdG9wOm4sYm90dG9tOm51bGx9fWZ1bmN0aW9uIG4odCl7dC5ib3R0b209Z1t0LnRvcCsxXSx0LnRvcD1nW3QudG9wXX1pZighdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gVSh0LGUpO3ZhciBpPXQuZGlzcGxheSxvPW5pKGUudGV4dC5sZW5ndGgpLGw9cm4odCxlLG8sITApLnByZTtpZihBaSYmIUhpJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbC5jaGlsZE5vZGVzLmxlbmd0aD4xMDApe2Zvcih2YXIgcz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYT0xMCx1PWwuY2hpbGROb2Rlcy5sZW5ndGgsYz0wLGY9TWF0aC5jZWlsKHUvYSk7Zj5jOysrYyl7Zm9yKHZhciBoPXNpKCJkaXYiLG51bGwsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrIiksZD0wO2E+ZCYmdTsrK2QpaC5hcHBlbmRDaGlsZChsLmZpcnN0Q2hpbGQpLC0tdTtzLmFwcGVuZENoaWxkKGgpfWwuYXBwZW5kQ2hpbGQocyl9dWkoaS5tZWFzdXJlLGwpO3ZhciBwPWZpKGkubGluZURpdiksZz1bXSxtPW5pKGUudGV4dC5sZW5ndGgpLHY9bC5vZmZzZXRIZWlnaHQ7TmkmJmkubWVhc3VyZS5maXJzdCE9bCYmdWkoaS5tZWFzdXJlLGwpO2Zvcih2YXIgeSxjPTA7YzxvLmxlbmd0aDsrK2MpaWYoeT1vW2NdKXt2YXIgYj15LHg9bnVsbDtpZigvXGJDb2RlTWlycm9yLXdpZGdldFxiLy50ZXN0KHkuY2xhc3NOYW1lKSYmeS5nZXRDbGllbnRSZWN0cyl7MT09eS5maXJzdENoaWxkLm5vZGVUeXBlJiYoYj15LmZpcnN0Q2hpbGQpO3ZhciBDPWIuZ2V0Q2xpZW50UmVjdHMoKTtDLmxlbmd0aD4xJiYoeD1tW2NdPXIoQ1swXSkseC5yaWdodFNpZGU9cihDW0MubGVuZ3RoLTFdKSl9eHx8KHg9bVtjXT1yKGZpKGIpKSkseS5tZWFzdXJlUmlnaHQmJih4LnJpZ2h0PWZpKHkubWVhc3VyZVJpZ2h0KS5sZWZ0KSx5LmxlZnRTaWRlJiYoeC5sZWZ0U2lkZT1yKGZpKHkubGVmdFNpZGUpKSl9YWkodC5kaXNwbGF5Lm1lYXN1cmUpO2Zvcih2YXIgeSxjPTA7YzxtLmxlbmd0aDsrK2MpKHk9bVtjXSkmJihuKHkpLHkubGVmdFNpZGUmJm4oeS5sZWZ0U2lkZSkseS5yaWdodFNpZGUmJm4oeS5yaWdodFNpZGUpKTtyZXR1cm4gbX1mdW5jdGlvbiBVKHQsZSl7dmFyIHI9bmV3IGJvKGUudGV4dC5zbGljZSgwLDEwMCksbnVsbCk7ZS50ZXh0Q2xhc3MmJihyLnRleHRDbGFzcz1lLnRleHRDbGFzcyk7dmFyIG49Syh0LHIpLGk9Uih0LHIsMCxuLCJsZWZ0Iiksbz1SKHQsciw5OSxuLCJyaWdodCIpO3JldHVybntjcnVkZTohMCx0b3A6aS50b3AsbGVmdDppLmxlZnQsYm90dG9tOmkuYm90dG9tLHdpZHRoOihvLnJpZ2h0LWkubGVmdCkvMTAwfX1mdW5jdGlvbiBYKHQsZSl7dmFyIHI9ITE7aWYoZS5tYXJrZWRTcGFucylmb3IodmFyIG49MDtuPGUubWFya2VkU3BhbnM7KytuKXt2YXIgaT1lLm1hcmtlZFNwYW5zW25dOyFpLmNvbGxhcHNlZHx8bnVsbCE9aS50byYmaS50byE9ZS50ZXh0Lmxlbmd0aHx8KHI9ITApfXZhciBvPSFyJiZCKHQsZSk7aWYob3x8ZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gUih0LGUsZS50ZXh0Lmxlbmd0aCxvJiZvLm1lYXN1cmUsInJpZ2h0IikucmlnaHQ7dmFyIGw9cm4odCxlLG51bGwsITApLnByZSxzPWwuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKTtyZXR1cm4gdWkodC5kaXNwbGF5Lm1lYXN1cmUsbCksZmkocykucmlnaHQtZmkodC5kaXNwbGF5LmxpbmVEaXYpLmxlZnR9ZnVuY3Rpb24gXyh0KXt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCx0LmRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoPXQuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCksdC5kaXNwbGF5LmxpbmVOdW1DaGFycz1udWxsfWZ1bmN0aW9uIFkoKXtyZXR1cm4gd2luZG93LnBhZ2VYT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGooKXtyZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3B9ZnVuY3Rpb24gJCh0LGUscixuKXtpZihlLndpZGdldHMpZm9yKHZhciBpPTA7aTxlLndpZGdldHMubGVuZ3RoOysraSlpZihlLndpZGdldHNbaV0uYWJvdmUpe3ZhciBvPVlyKGUud2lkZ2V0c1tpXSk7ci50b3ArPW8sci5ib3R0b20rPW99aWYoImxpbmUiPT1uKXJldHVybiByO258fChuPSJsb2NhbCIpO3ZhciBsPUNuKHQsZSk7aWYoImxvY2FsIj09bj9sKz1JKHQuZGlzcGxheSk6bC09dC5kaXNwbGF5LnZpZXdPZmZzZXQsInBhZ2UiPT1ufHwid2luZG93Ij09bil7dmFyIHM9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7bCs9cy50b3ArKCJ3aW5kb3ciPT1uPzA6aigpKTt2YXIgYT1zLmxlZnQrKCJ3aW5kb3ciPT1uPzA6WSgpKTtyLmxlZnQrPWEsci5yaWdodCs9YX1yZXR1cm4gci50b3ArPWwsci5ib3R0b20rPWwscn1mdW5jdGlvbiBaKHQsZSxyKXtpZigiZGl2Ij09cilyZXR1cm4gZTt2YXIgbj1lLmxlZnQsaT1lLnRvcDtpZigicGFnZSI9PXIpbi09WSgpLGktPWooKTtlbHNlIGlmKCJsb2NhbCI9PXJ8fCFyKXt2YXIgbz1maSh0LmRpc3BsYXkuc2l6ZXIpO24rPW8ubGVmdCxpKz1vLnRvcH12YXIgbD1maSh0LmRpc3BsYXkubGluZVNwYWNlKTtyZXR1cm57bGVmdDpuLWwubGVmdCx0b3A6aS1sLnRvcH19ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBufHwobj1nbih0LmRvYyxlLmxpbmUpKSwkKHQsbixSKHQsbixlLmNoLG51bGwsaSkscil9ZnVuY3Rpb24gUSh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSxvKXt2YXIgbD1SKHQsbixlLGksbz8icmlnaHQiOiJsZWZ0Iik7cmV0dXJuIG8/bC5sZWZ0PWwucmlnaHQ6bC5yaWdodD1sLmxlZnQsJCh0LG4sbCxyKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9c1tlXSxuPXIubGV2ZWwlMjtyZXR1cm4gdD09bWkocikmJmUmJnIubGV2ZWw8c1tlLTFdLmxldmVsPyhyPXNbLS1lXSx0PXZpKHIpLShyLmxldmVsJTI/MDoxKSxuPSEwKTp0PT12aShyKSYmZTxzLmxlbmd0aC0xJiZyLmxldmVsPHNbZSsxXS5sZXZlbCYmKHI9c1srK2VdLHQ9bWkociktci5sZXZlbCUyLG49ITEpLG4mJnQ9PXIudG8mJnQ+ci5mcm9tP28odC0xKTpvKHQsbil9bj1ufHxnbih0LmRvYyxlLmxpbmUpLGl8fChpPVYodCxuKSk7dmFyIHM9d24obiksYT1lLmNoO2lmKCFzKXJldHVybiBvKGEpO3ZhciB1PUxpKHMsYSksYz1sKGEsdSk7cmV0dXJuIG51bGwhPVJvJiYoYy5vdGhlcj1sKGEsUm8pKSxjfWZ1bmN0aW9uIEoodCxlLHIsbil7dmFyIGk9bmV3IFllKHQsZSk7cmV0dXJuIGkueFJlbD1uLHImJihpLm91dHNpZGU9ITApLGl9ZnVuY3Rpb24gdGUodCxlLHIpe3ZhciBuPXQuZG9jO2lmKHIrPXQuZGlzcGxheS52aWV3T2Zmc2V0LDA+cilyZXR1cm4gSihuLmZpcnN0LDAsITAsLTEpO3ZhciBpPXhuKG4sciksbz1uLmZpcnN0K24uc2l6ZS0xO2lmKGk+bylyZXR1cm4gSihuLmZpcnN0K24uc2l6ZS0xLGduKG4sbykudGV4dC5sZW5ndGgsITAsMSk7Zm9yKDA+ZSYmKGU9MCk7Oyl7dmFyIGw9Z24obixpKSxzPWVlKHQsbCxpLGUsciksYT1CcihsKSx1PWEmJmEuZmluZCgpO2lmKCFhfHwhKHMuY2g+dS5mcm9tLmNofHxzLmNoPT11LmZyb20uY2gmJnMueFJlbD4wKSlyZXR1cm4gcztpPXUudG8ubGluZX19ZnVuY3Rpb24gZWUodCxlLHIsbixpKXtmdW5jdGlvbiBvKG4pe3ZhciBpPVEodCxZZShyLG4pLCJsaW5lIixlLHUpO3JldHVybiBzPSEwLGw+aS5ib3R0b20/aS5sZWZ0LWE6bDxpLnRvcD9pLmxlZnQrYToocz0hMSxpLmxlZnQpfXZhciBsPWktQ24odCxlKSxzPSExLGE9Mip0LmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCx1PVYodCxlKSxjPXduKGUpLGY9ZS50ZXh0Lmxlbmd0aCxoPXlpKGUpLGQ9YmkoZSkscD1vKGgpLGc9cyxtPW8oZCksdj1zO2lmKG4+bSlyZXR1cm4gSihyLGQsdiwxKTtmb3IoOzspe2lmKGM/ZD09aHx8ZD09U2koZSxoLDEpOjE+PWQtaCl7Zm9yKHZhciB5PXA+bnx8bS1uPj1uLXA/aDpkLGI9bi0oeT09aD9wOm0pO0RvLnRlc3QoZS50ZXh0LmNoYXJBdCh5KSk7KSsreTt2YXIgeD1KKHIseSx5PT1oP2c6diwwPmI/LTE6Yj8xOjApO3JldHVybiB4fXZhciBDPU1hdGguY2VpbChmLzIpLHc9aCtDO2lmKGMpe3c9aDtmb3IodmFyIEw9MDtDPkw7KytMKXc9U2koZSx3LDEpfXZhciBrPW8odyk7az5uPyhkPXcsbT1rLCh2PXMpJiYobSs9MWUzKSxmPUMpOihoPXcscD1rLGc9cyxmLT1DKX19ZnVuY3Rpb24gcmUodCl7aWYobnVsbCE9dC5jYWNoZWRUZXh0SGVpZ2h0KXJldHVybiB0LmNhY2hlZFRleHRIZWlnaHQ7aWYobnVsbD09X2kpe19pPXNpKCJwcmUiKTtmb3IodmFyIGU9MDs0OT5lOysrZSlfaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKSxfaS5hcHBlbmRDaGlsZChzaSgiYnIiKSk7X2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSl9dWkodC5tZWFzdXJlLF9pKTt2YXIgcj1faS5vZmZzZXRIZWlnaHQvNTA7cmV0dXJuIHI+MyYmKHQuY2FjaGVkVGV4dEhlaWdodD1yKSxhaSh0Lm1lYXN1cmUpLHJ8fDF9ZnVuY3Rpb24gbmUodCl7aWYobnVsbCE9dC5jYWNoZWRDaGFyV2lkdGgpcmV0dXJuIHQuY2FjaGVkQ2hhcldpZHRoO3ZhciBlPXNpKCJzcGFuIiwieCIpLHI9c2koInByZSIsW2VdKTt1aSh0Lm1lYXN1cmUscik7dmFyIG49ZS5vZmZzZXRXaWR0aDtyZXR1cm4gbj4yJiYodC5jYWNoZWRDaGFyV2lkdGg9biksbnx8MTB9ZnVuY3Rpb24gaWUodCl7dC5jdXJPcD17Y2hhbmdlczpbXSxmb3JjZVVwZGF0ZTohMSx1cGRhdGVJbnB1dDpudWxsLHVzZXJTZWxDaGFuZ2U6bnVsbCx0ZXh0Q2hhbmdlZDpudWxsLHNlbGVjdGlvbkNoYW5nZWQ6ITEsY3Vyc29yQWN0aXZpdHk6ITEsdXBkYXRlTWF4TGluZTohMSx1cGRhdGVTY3JvbGxQb3M6ITEsaWQ6KytKaX0sTW8rK3x8KFNvPVtdKX1mdW5jdGlvbiBvZSh0KXt2YXIgZT10LmN1ck9wLHI9dC5kb2Msbj10LmRpc3BsYXk7aWYodC5jdXJPcD1udWxsLGUudXBkYXRlTWF4TGluZSYmZih0KSxuLm1heExpbmVDaGFuZ2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbi5tYXhMaW5lKXt2YXIgaT1YKHQsbi5tYXhMaW5lKTtuLnNpemVyLnN0eWxlLm1pbldpZHRoPU1hdGgubWF4KDAsaSszK1RvKSsicHgiLG4ubWF4TGluZUNoYW5nZWQ9ITE7dmFyIG89TWF0aC5tYXgoMCxuLnNpemVyLm9mZnNldExlZnQrbi5zaXplci5vZmZzZXRXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoKTtvPHIuc2Nyb2xsTGVmdCYmIWUudXBkYXRlU2Nyb2xsUG9zJiZNZSh0LE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsTGVmdCxvKSwhMCl9dmFyIGwscztpZihlLnVwZGF0ZVNjcm9sbFBvcylsPWUudXBkYXRlU2Nyb2xsUG9zO2Vsc2UgaWYoZS5zZWxlY3Rpb25DaGFuZ2VkJiZuLnNjcm9sbGVyLmNsaWVudEhlaWdodCl7dmFyIGE9USh0LHIuc2VsLmhlYWQpO2w9dXIodCxhLmxlZnQsYS50b3AsYS5sZWZ0LGEuYm90dG9tKX1pZigoZS5jaGFuZ2VzLmxlbmd0aHx8ZS5mb3JjZVVwZGF0ZXx8bCYmbnVsbCE9bC5zY3JvbGxUb3ApJiYocz1iKHQsZS5jaGFuZ2VzLGwmJmwuc2Nyb2xsVG9wLGUuZm9yY2VVcGRhdGUpLHQuZGlzcGxheS5zY3JvbGxlci5vZmZzZXRIZWlnaHQmJih0LmRvYy5zY3JvbGxUb3A9dC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCkpLCFzJiZlLnNlbGVjdGlvbkNoYW5nZWQmJkEodCksZS51cGRhdGVTY3JvbGxQb3Mpe3ZhciB1PU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxIZWlnaHQtbi5zY3JvbGxlci5jbGllbnRIZWlnaHQsbC5zY3JvbGxUb3ApKSxjPU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoLGwuc2Nyb2xsTGVmdCkpO24uc2Nyb2xsZXIuc2Nyb2xsVG9wPW4uc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ci5zY3JvbGxUb3A9dSxuLnNjcm9sbGVyLnNjcm9sbExlZnQ9bi5zY3JvbGxiYXJILnNjcm9sbExlZnQ9ci5zY3JvbGxMZWZ0PWMsZyh0KSxlLnNjcm9sbFRvUG9zJiZzcih0LFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MuZnJvbSksUWUodC5kb2MsZS5zY3JvbGxUb1Bvcy50byksZS5zY3JvbGxUb1Bvcy5tYXJnaW4pfWVsc2UgbCYmbHIodCk7ZS5zZWxlY3Rpb25DaGFuZ2VkJiZEKHQpLHQuc3RhdGUuZm9jdXNlZCYmZS51cGRhdGVJbnB1dCYmZGUodCxlLnVzZXJTZWxDaGFuZ2UpO3ZhciBoPWUubWF5YmVIaWRkZW5NYXJrZXJzLGQ9ZS5tYXliZVVuaGlkZGVuTWFya2VycztpZihoKWZvcih2YXIgcD0wO3A8aC5sZW5ndGg7KytwKWhbcF0ubGluZXMubGVuZ3RofHxLbihoW3BdLCJoaWRlIik7aWYoZClmb3IodmFyIHA9MDtwPGQubGVuZ3RoOysrcClkW3BdLmxpbmVzLmxlbmd0aCYmS24oZFtwXSwidW5oaWRlIik7dmFyIG07aWYoLS1Nb3x8KG09U28sU289bnVsbCksZS50ZXh0Q2hhbmdlZCYmS24odCwiY2hhbmdlIix0LGUudGV4dENoYW5nZWQpLGUuY3Vyc29yQWN0aXZpdHkmJktuKHQsImN1cnNvckFjdGl2aXR5Iix0KSxtKWZvcih2YXIgcD0wO3A8bS5sZW5ndGg7KytwKW1bcF0oKX1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXR8fHRoaXMsbj0hci5jdXJPcDtuJiZpZShyKTt0cnl7dmFyIGk9ZS5hcHBseShyLGFyZ3VtZW50cyl9ZmluYWxseXtuJiZvZShyKX1yZXR1cm4gaX19ZnVuY3Rpb24gc2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmNtJiYhdGhpcy5jbS5jdXJPcDtyJiZpZSh0aGlzLmNtKTt0cnl7ZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3ImJm9lKHRoaXMuY20pfXJldHVybiBlfX1mdW5jdGlvbiBhZSh0LGUpe3ZhciByLG49IXQuY3VyT3A7biYmaWUodCk7dHJ5e3I9ZSgpfWZpbmFsbHl7biYmb2UodCl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWUodCxlLHIsbil7bnVsbD09ZSYmKGU9dC5kb2MuZmlyc3QpLG51bGw9PXImJihyPXQuZG9jLmZpcnN0K3QuZG9jLnNpemUpLHQuY3VyT3AuY2hhbmdlcy5wdXNoKHtmcm9tOmUsdG86cixkaWZmOm59KX1mdW5jdGlvbiBjZSh0KXt0LmRpc3BsYXkucG9sbGluZ0Zhc3R8fHQuZGlzcGxheS5wb2xsLnNldCh0Lm9wdGlvbnMucG9sbEludGVydmFsLGZ1bmN0aW9uKCl7aGUodCksdC5zdGF0ZS5mb2N1c2VkJiZjZSh0KX0pfWZ1bmN0aW9uIGZlKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj1oZSh0KTtufHxyPyh0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEsY2UodCkpOihyPSEwLHQuZGlzcGxheS5wb2xsLnNldCg2MCxlKSl9dmFyIHI9ITE7dC5kaXNwbGF5LnBvbGxpbmdGYXN0PSEwLHQuZGlzcGxheS5wb2xsLnNldCgyMCxlKX1mdW5jdGlvbiBoZSh0KXt2YXIgZT10LmRpc3BsYXkuaW5wdXQscj10LmRpc3BsYXkucHJldklucHV0LG49dC5kb2MsaT1uLnNlbDtpZighdC5zdGF0ZS5mb2N1c2VkfHxJbyhlKXx8Z2UodCl8fHQuc3RhdGUuZGlzYWJsZUlucHV0KXJldHVybiExO3Quc3RhdGUucGFzdGVJbmNvbWluZyYmdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYoZS52YWx1ZT1lLnZhbHVlLnN1YnN0cmluZygwLGUudmFsdWUubGVuZ3RoLTEpLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMSk7dmFyIG89ZS52YWx1ZTtpZihvPT1yJiZqZShpLmZyb20saS50bykpcmV0dXJuITE7aWYoQWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPT09bylyZXR1cm4gZGUodCwhMCksITE7dmFyIGw9IXQuY3VyT3A7bCYmaWUodCksaS5zaGlmdD0hMTtmb3IodmFyIHM9MCxhPU1hdGgubWluKHIubGVuZ3RoLG8ubGVuZ3RoKTthPnMmJnIuY2hhckNvZGVBdChzKT09by5jaGFyQ29kZUF0KHMpOykrK3M7dmFyIHU9aS5mcm9tLGM9aS50bztzPHIubGVuZ3RoP3U9WWUodS5saW5lLHUuY2gtKHIubGVuZ3RoLXMpKTp0LnN0YXRlLm92ZXJ3cml0ZSYmamUodSxjKSYmIXQuc3RhdGUucGFzdGVJbmNvbWluZyYmKGM9WWUoYy5saW5lLE1hdGgubWluKGduKG4sYy5saW5lKS50ZXh0Lmxlbmd0aCxjLmNoKyhvLmxlbmd0aC1zKSkpKTt2YXIgZj10LmN1ck9wLnVwZGF0ZUlucHV0LGg9e2Zyb206dSx0bzpjLHRleHQ6em8oby5zbGljZShzKSksb3JpZ2luOnQuc3RhdGUucGFzdGVJbmNvbWluZz8icGFzdGUiOiIraW5wdXQifTtyZXR1cm4gQmUodC5kb2MsaCwiZW5kIiksdC5jdXJPcC51cGRhdGVJbnB1dD1mLFVuKHQsImlucHV0UmVhZCIsdCxoKSxvLmxlbmd0aD4xZTN8fG8uaW5kZXhPZigiXG4iKT4tMT9lLnZhbHVlPXQuZGlzcGxheS5wcmV2SW5wdXQ9IiI6dC5kaXNwbGF5LnByZXZJbnB1dD1vLGwmJm9lKHQpLHQuc3RhdGUucGFzdGVJbmNvbWluZz0hMSwhMH1mdW5jdGlvbiBkZSh0LGUpe3ZhciByLG4saT10LmRvYztpZihqZShpLnNlbC5mcm9tLGkuc2VsLnRvKSllJiYodC5kaXNwbGF5LnByZXZJbnB1dD10LmRpc3BsYXkuaW5wdXQudmFsdWU9IiIsQWkmJiFOaSYmKHQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSk7ZWxzZXt0LmRpc3BsYXkucHJldklucHV0PSIiLHI9Rm8mJihpLnNlbC50by5saW5lLWkuc2VsLmZyb20ubGluZT4xMDB8fChuPXQuZ2V0U2VsZWN0aW9uKCkpLmxlbmd0aD4xZTMpO3ZhciBvPXI/Ii0iOm58fHQuZ2V0U2VsZWN0aW9uKCk7dC5kaXNwbGF5LmlucHV0LnZhbHVlPW8sdC5zdGF0ZS5mb2N1c2VkJiZKbih0LmRpc3BsYXkuaW5wdXQpLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249byl9dC5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb249cn1mdW5jdGlvbiBwZSh0KXsibm9jdXJzb3IiPT10Lm9wdGlvbnMucmVhZE9ubHl8fFZpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT10LmRpc3BsYXkuaW5wdXR8fHQuZGlzcGxheS5pbnB1dC5mb2N1cygpfWZ1bmN0aW9uIGdlKHQpe3JldHVybiB0Lm9wdGlvbnMucmVhZE9ubHl8fHQuZG9jLmNhbnRFZGl0fWZ1bmN0aW9uIG1lKHQpe2Z1bmN0aW9uIGUoKXt0LnN0YXRlLmZvY3VzZWQmJnNldFRpbWVvdXQoaWkocGUsdCksMCl9ZnVuY3Rpb24gcigpe251bGw9PXMmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGwsbC5jYWNoZWRDaGFyV2lkdGg9bC5jYWNoZWRUZXh0SGVpZ2h0PU9vPW51bGwsXyh0KSxhZSh0LGlpKHVlLHQpKX0sMTAwKSl9ZnVuY3Rpb24gbigpe2Zvcih2YXIgdD1sLndyYXBwZXIucGFyZW50Tm9kZTt0JiZ0IT1kb2N1bWVudC5ib2R5O3Q9dC5wYXJlbnROb2RlKTt0P3NldFRpbWVvdXQobiw1ZTMpOlZuKHdpbmRvdywicmVzaXplIixyKX1mdW5jdGlvbiBpKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbkRyYWdFdmVudCYmdC5vcHRpb25zLm9uRHJhZ0V2ZW50KHQsRW4oZSkpfHxQbihlKX1mdW5jdGlvbiBvKCl7bC5pbmFjY3VyYXRlU2VsZWN0aW9uJiYobC5wcmV2SW5wdXQ9IiIsbC5pbmFjY3VyYXRlU2VsZWN0aW9uPSExLGwuaW5wdXQudmFsdWU9dC5nZXRTZWxlY3Rpb24oKSxKbihsLmlucHV0KSl9dmFyIGw9dC5kaXNwbGF5O0duKGwuc2Nyb2xsZXIsIm1vdXNlZG93biIsbGUodCxiZSkpLEFpP0duKGwuc2Nyb2xsZXIsImRibGNsaWNrIixsZSh0LGZ1bmN0aW9uKGUpe2lmKCFYbih0LGUpKXt2YXIgcj15ZSh0LGUpO2lmKHImJiF3ZSh0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt6bihlKTt2YXIgbj1tcihnbih0LmRvYyxyLmxpbmUpLnRleHQscik7ZXIodC5kb2Msbi5mcm9tLG4udG8pfX19KSk6R24obC5zY3JvbGxlciwiZGJsY2xpY2siLGZ1bmN0aW9uKGUpe1huKHQsZSl8fHpuKGUpfSksR24obC5saW5lU3BhY2UsInNlbGVjdHN0YXJ0IixmdW5jdGlvbih0KXt2ZShsLHQpfHx6bih0KX0pLFppfHxHbihsLnNjcm9sbGVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZSl7SWUodCxlKX0pLEduKGwuc2Nyb2xsZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmKFNlKHQsbC5zY3JvbGxlci5zY3JvbGxUb3ApLE1lKHQsbC5zY3JvbGxlci5zY3JvbGxMZWZ0LCEwKSxLbih0LCJzY3JvbGwiLHQpKX0pLEduKGwuc2Nyb2xsYmFyViwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZTZSh0LGwuc2Nyb2xsYmFyVi5zY3JvbGxUb3ApfSksR24obC5zY3JvbGxiYXJILCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJk1lKHQsbC5zY3JvbGxiYXJILnNjcm9sbExlZnQpfSksR24obC5zY3JvbGxlciwibW91c2V3aGVlbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsZXIsIkRPTU1vdXNlU2Nyb2xsIixmdW5jdGlvbihlKXtUZSh0LGUpfSksR24obC5zY3JvbGxiYXJILCJtb3VzZWRvd24iLGUpLEduKGwuc2Nyb2xsYmFyViwibW91c2Vkb3duIixlKSxHbihsLndyYXBwZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLndyYXBwZXIuc2Nyb2xsVG9wPWwud3JhcHBlci5zY3JvbGxMZWZ0PTB9KTt2YXIgcztHbih3aW5kb3csInJlc2l6ZSIsciksc2V0VGltZW91dChuLDVlMyksR24obC5pbnB1dCwia2V5dXAiLGxlKHQsZnVuY3Rpb24oZSl7WG4odCxlKXx8dC5vcHRpb25zLm9uS2V5RXZlbnQmJnQub3B0aW9ucy5vbktleUV2ZW50KHQsRW4oZSkpfHwxNj09ZS5rZXlDb2RlJiYodC5kb2Muc2VsLnNoaWZ0PSExKX0pKSxHbihsLmlucHV0LCJpbnB1dCIsZnVuY3Rpb24oKXtBaSYmIU5pJiZ0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24mJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUodCl9KSxHbihsLmlucHV0LCJrZXlkb3duIixsZSh0LFdlKSksR24obC5pbnB1dCwia2V5cHJlc3MiLGxlKHQsT2UpKSxHbihsLmlucHV0LCJmb2N1cyIsaWkoRWUsdCkpLEduKGwuaW5wdXQsImJsdXIiLGlpKHplLHQpKSx0Lm9wdGlvbnMuZHJhZ0Ryb3AmJihHbihsLnNjcm9sbGVyLCJkcmFnc3RhcnQiLGZ1bmN0aW9uKGUpe2tlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJkcmFnZW50ZXIiLGkpLEduKGwuc2Nyb2xsZXIsImRyYWdvdmVyIixpKSxHbihsLnNjcm9sbGVyLCJkcm9wIixsZSh0LExlKSkpLEduKGwuc2Nyb2xsZXIsInBhc3RlIixmdW5jdGlvbihlKXt2ZShsLGUpfHwocGUodCksZmUodCkpfSksR24obC5pbnB1dCwicGFzdGUiLGZ1bmN0aW9uKCl7aWYoV2kmJiF0LnN0YXRlLmZha2VkTGFzdENoYXImJiEobmV3IERhdGUtdC5zdGF0ZS5sYXN0TWlkZGxlRG93bjwyMDApKXt2YXIgZT1sLmlucHV0LnNlbGVjdGlvblN0YXJ0LHI9bC5pbnB1dC5zZWxlY3Rpb25FbmQ7bC5pbnB1dC52YWx1ZSs9IiQiLGwuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9ZSxsLmlucHV0LnNlbGVjdGlvbkVuZD1yLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMH10LnN0YXRlLnBhc3RlSW5jb21pbmc9ITAsZmUodCl9KSxHbihsLmlucHV0LCJjdXQiLG8pLEduKGwuaW5wdXQsImNvcHkiLG8pLEZpJiZHbihsLnNpemVyLCJtb3VzZXVwIixmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXQmJmwuaW5wdXQuYmx1cigpLHBlKHQpfSl9ZnVuY3Rpb24gdmUodCxlKXtmb3IodmFyIHI9Um4oZSk7ciE9dC53cmFwcGVyO3I9ci5wYXJlbnROb2RlKWlmKCFyfHxyLmlnbm9yZUV2ZW50c3x8ci5wYXJlbnROb2RlPT10LnNpemVyJiZyIT10Lm1vdmVyKXJldHVybiEwfWZ1bmN0aW9uIHllKHQsZSxyKXt2YXIgbj10LmRpc3BsYXk7aWYoIXIpe3ZhciBpPVJuKGUpO2lmKGk9PW4uc2Nyb2xsYmFySHx8aT09bi5zY3JvbGxiYXJILmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyVnx8aT09bi5zY3JvbGxiYXJWLmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyRmlsbGVyfHxpPT1uLmd1dHRlckZpbGxlcilyZXR1cm4gbnVsbH12YXIgbyxsLHM9Zmkobi5saW5lU3BhY2UpO3RyeXtvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGUodCxvLXMubGVmdCxsLXMudG9wKX1mdW5jdGlvbiBiZSh0KXtmdW5jdGlvbiBlKHQpe2lmKCFqZSh2LHQpKXtpZih2PXQsInNpbmdsZSI9PWMpcmV0dXJuIGVyKGkuZG9jLFFlKGwsYSksdCksdm9pZCAwOwppZihnPVFlKGwsZyksbT1RZShsLG0pLCJkb3VibGUiPT1jKXt2YXIgZT1tcihnbihsLHQubGluZSkudGV4dCx0KTskZSh0LGcpP2VyKGkuZG9jLGUuZnJvbSxtKTplcihpLmRvYyxnLGUudG8pfWVsc2UidHJpcGxlIj09YyYmKCRlKHQsZyk/ZXIoaS5kb2MsbSxRZShsLFllKHQubGluZSwwKSkpOmVyKGkuZG9jLGcsUWUobCxZZSh0LmxpbmUrMSwwKSkpKX19ZnVuY3Rpb24gcih0KXt2YXIgbj0rK2Iscz15ZShpLHQsITApO2lmKHMpaWYoamUocyxoKSl7dmFyIGE9dC5jbGllbnRZPHkudG9wPy0yMDp0LmNsaWVudFk+eS5ib3R0b20/MjA6MDthJiZzZXRUaW1lb3V0KGxlKGksZnVuY3Rpb24oKXtiPT1uJiYoby5zY3JvbGxlci5zY3JvbGxUb3ArPWEscih0KSl9KSw1MCl9ZWxzZXtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpLGg9cyxlKHMpO3ZhciB1PXAobyxsKTsocy5saW5lPj11LnRvfHxzLmxpbmU8dS5mcm9tKSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmcih0KX0pLDE1MCl9fWZ1bmN0aW9uIG4odCl7Yj0xLzAsem4odCkscGUoaSksVm4oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksVm4oZG9jdW1lbnQsIm1vdXNldXAiLEMpfWlmKCFYbih0aGlzLHQpKXt2YXIgaT10aGlzLG89aS5kaXNwbGF5LGw9aS5kb2Mscz1sLnNlbDtpZihzLnNoaWZ0PXQuc2hpZnRLZXksdmUobyx0KSlyZXR1cm4gV2l8fChvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5zY3JvbGxlci5kcmFnZ2FibGU9ITB9LDEwMCkpLHZvaWQgMDtpZighd2UoaSx0KSl7dmFyIGE9eWUoaSx0KTtzd2l0Y2goQm4odCkpe2Nhc2UgMzpyZXR1cm4gWmkmJkllLmNhbGwoaSxpLHQpLHZvaWQgMDtjYXNlIDI6cmV0dXJuIFdpJiYoaS5zdGF0ZS5sYXN0TWlkZGxlRG93bj0rbmV3IERhdGUpLGEmJmVyKGkuZG9jLGEpLHNldFRpbWVvdXQoaWkocGUsaSksMjApLHpuKHQpLHZvaWQgMH1pZighYSlyZXR1cm4gUm4odCk9PW8uc2Nyb2xsZXImJnpuKHQpLHZvaWQgMDtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpO3ZhciB1PStuZXcgRGF0ZSxjPSJzaW5nbGUiO2lmKGppJiZqaS50aW1lPnUtNDAwJiZqZShqaS5wb3MsYSkpYz0idHJpcGxlIix6bih0KSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx2cihpLGEubGluZSk7ZWxzZSBpZihZaSYmWWkudGltZT51LTQwMCYmamUoWWkucG9zLGEpKXtjPSJkb3VibGUiLGppPXt0aW1lOnUscG9zOmF9LHpuKHQpO3ZhciBmPW1yKGduKGwsYS5saW5lKS50ZXh0LGEpO2VyKGkuZG9jLGYuZnJvbSxmLnRvKX1lbHNlIFlpPXt0aW1lOnUscG9zOmF9O3ZhciBoPWE7aWYoaS5vcHRpb25zLmRyYWdEcm9wJiZXbyYmIWdlKGkpJiYhamUocy5mcm9tLHMudG8pJiYhJGUoYSxzLmZyb20pJiYhJGUocy50byxhKSYmInNpbmdsZSI9PWMpe3ZhciBkPWxlKGksZnVuY3Rpb24oZSl7V2kmJihvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSksaS5zdGF0ZS5kcmFnZ2luZ1RleHQ9ITEsVm4oZG9jdW1lbnQsIm1vdXNldXAiLGQpLFZuKG8uc2Nyb2xsZXIsImRyb3AiLGQpLE1hdGguYWJzKHQuY2xpZW50WC1lLmNsaWVudFgpK01hdGguYWJzKHQuY2xpZW50WS1lLmNsaWVudFkpPDEwJiYoem4oZSksZXIoaS5kb2MsYSkscGUoaSkpfSk7cmV0dXJuIFdpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITApLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PWQsby5zY3JvbGxlci5kcmFnRHJvcCYmby5zY3JvbGxlci5kcmFnRHJvcCgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixkKSxHbihvLnNjcm9sbGVyLCJkcm9wIixkKSx2b2lkIDB9em4odCksInNpbmdsZSI9PWMmJmVyKGkuZG9jLFFlKGwsYSkpO3ZhciBnPXMuZnJvbSxtPXMudG8sdj1hLHk9Zmkoby53cmFwcGVyKSxiPTAseD1sZShpLGZ1bmN0aW9uKHQpe0FpfHxCbih0KT9yKHQpOm4odCl9KSxDPWxlKGksbik7R24oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksR24oZG9jdW1lbnQsIm1vdXNldXAiLEMpfX19ZnVuY3Rpb24geGUodCxlLHIsbixpKXt0cnl7dmFyIG89ZS5jbGllbnRYLGw9ZS5jbGllbnRZfWNhdGNoKGUpe3JldHVybiExfWlmKG8+PU1hdGguZmxvb3IoZmkodC5kaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSlyZXR1cm4hMTtuJiZ6bihlKTt2YXIgcz10LmRpc3BsYXksYT1maShzLmxpbmVEaXYpO2lmKGw+YS5ib3R0b218fCFZbih0LHIpKXJldHVybiBGbihlKTtsLT1hLnRvcC1zLnZpZXdPZmZzZXQ7Zm9yKHZhciB1PTA7dTx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt1KXt2YXIgYz1zLmd1dHRlcnMuY2hpbGROb2Rlc1t1XTtpZihjJiZmaShjKS5yaWdodD49byl7dmFyIGY9eG4odC5kb2MsbCksaD10Lm9wdGlvbnMuZ3V0dGVyc1t1XTtyZXR1cm4gaSh0LHIsdCxmLGgsZSksRm4oZSl9fX1mdW5jdGlvbiBDZSh0LGUpe3JldHVybiBZbih0LCJndXR0ZXJDb250ZXh0TWVudSIpP3hlKHQsZSwiZ3V0dGVyQ29udGV4dE1lbnUiLCExLEtuKTohMX1mdW5jdGlvbiB3ZSh0LGUpe3JldHVybiB4ZSh0LGUsImd1dHRlckNsaWNrIiwhMCxVbil9ZnVuY3Rpb24gTGUodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fHZlKGUuZGlzcGxheSx0KXx8ZS5vcHRpb25zLm9uRHJhZ0V2ZW50JiZlLm9wdGlvbnMub25EcmFnRXZlbnQoZSxFbih0KSkpKXt6bih0KSxBaSYmKHRvPStuZXcgRGF0ZSk7dmFyIHI9eWUoZSx0LCEwKSxuPXQuZGF0YVRyYW5zZmVyLmZpbGVzO2lmKHImJiFnZShlKSlpZihuJiZuLmxlbmd0aCYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlKWZvcih2YXIgaT1uLmxlbmd0aCxvPUFycmF5KGkpLGw9MCxzPWZ1bmN0aW9uKHQsbil7dmFyIHM9bmV3IEZpbGVSZWFkZXI7cy5vbmxvYWQ9ZnVuY3Rpb24oKXtvW25dPXMucmVzdWx0LCsrbD09aSYmKHI9UWUoZS5kb2MsciksQmUoZS5kb2Mse2Zyb206cix0bzpyLHRleHQ6em8oby5qb2luKCJcbiIpKSxvcmlnaW46InBhc3RlIn0sImFyb3VuZCIpKX0scy5yZWFkQXNUZXh0KHQpfSxhPTA7aT5hOysrYSlzKG5bYV0sYSk7ZWxzZXtpZihlLnN0YXRlLmRyYWdnaW5nVGV4dCYmISRlKHIsZS5kb2Muc2VsLmZyb20pJiYhJGUoZS5kb2Muc2VsLnRvLHIpKXJldHVybiBlLnN0YXRlLmRyYWdnaW5nVGV4dCh0KSxzZXRUaW1lb3V0KGlpKHBlLGUpLDIwKSx2b2lkIDA7dHJ5e3ZhciBvPXQuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTtpZihvKXt2YXIgdT1lLmRvYy5zZWwuZnJvbSxjPWUuZG9jLnNlbC50bztucihlLmRvYyxyLHIpLGUuc3RhdGUuZHJhZ2dpbmdUZXh0JiZfZShlLmRvYywiIix1LGMsInBhc3RlIiksZS5yZXBsYWNlU2VsZWN0aW9uKG8sbnVsbCwicGFzdGUiKSxwZShlKX19Y2F0Y2godCl7fX19fWZ1bmN0aW9uIGtlKHQsZSl7aWYoQWkmJighdC5zdGF0ZS5kcmFnZ2luZ1RleHR8fCtuZXcgRGF0ZS10bzwxMDApKXJldHVybiBQbihlKSx2b2lkIDA7aWYoIVhuKHQsZSkmJiF2ZSh0LmRpc3BsYXksZSkpe3ZhciByPXQuZ2V0U2VsZWN0aW9uKCk7aWYoZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsciksZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlJiYhSWkpe3ZhciBuPXNpKCJpbWciLG51bGwsbnVsbCwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7bi5zcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09Iix6aSYmKG4ud2lkdGg9bi5oZWlnaHQ9MSx0LmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChuKSxuLl90b3A9bi5vZmZzZXRUb3ApLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLDAsMCksemkmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX19fWZ1bmN0aW9uIFNlKHQsZSl7TWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWUpPDJ8fCh0LmRvYy5zY3JvbGxUb3A9ZSxUaXx8Yih0LFtdLGUpLHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wPWUpLHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1lKSxUaSYmYih0LFtdKSxXKHQsMTAwKSl9ZnVuY3Rpb24gTWUodCxlLHIpeyhyP2U9PXQuZG9jLnNjcm9sbExlZnQ6TWF0aC5hYnModC5kb2Muc2Nyb2xsTGVmdC1lKTwyKXx8KGU9TWF0aC5taW4oZSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKSx0LmRvYy5zY3JvbGxMZWZ0PWUsZyh0KSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0PWUpLHQuZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PWUpKX1mdW5jdGlvbiBUZSh0LGUpe3ZhciByPWUud2hlZWxEZWx0YVgsbj1lLndoZWVsRGVsdGFZO251bGw9PXImJmUuZGV0YWlsJiZlLmF4aXM9PWUuSE9SSVpPTlRBTF9BWElTJiYocj1lLmRldGFpbCksbnVsbD09biYmZS5kZXRhaWwmJmUuYXhpcz09ZS5WRVJUSUNBTF9BWElTP249ZS5kZXRhaWw6bnVsbD09biYmKG49ZS53aGVlbERlbHRhKTt2YXIgaT10LmRpc3BsYXksbz1pLnNjcm9sbGVyO2lmKHImJm8uc2Nyb2xsV2lkdGg+by5jbGllbnRXaWR0aHx8biYmby5zY3JvbGxIZWlnaHQ+by5jbGllbnRIZWlnaHQpe2lmKG4mJktpJiZXaSlmb3IodmFyIGw9ZS50YXJnZXQ7bCE9bztsPWwucGFyZW50Tm9kZSlpZihsLmxpbmVPYmope3QuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQ9bDticmVha31pZihyJiYhVGkmJiF6aSYmbnVsbCE9cm8pcmV0dXJuIG4mJlNlKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbFRvcCtuKnJvLG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0KSkpLE1lKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbExlZnQrcipybyxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgpKSksem4oZSksaS53aGVlbFN0YXJ0WD1udWxsLHZvaWQgMDtpZihuJiZudWxsIT1ybyl7dmFyIHM9bipybyxhPXQuZG9jLnNjcm9sbFRvcCx1PWEraS53cmFwcGVyLmNsaWVudEhlaWdodDswPnM/YT1NYXRoLm1heCgwLGErcy01MCk6dT1NYXRoLm1pbih0LmRvYy5oZWlnaHQsdStzKzUwKSxiKHQsW10se3RvcDphLGJvdHRvbTp1fSl9MjA+ZW8mJihudWxsPT1pLndoZWVsU3RhcnRYPyhpLndoZWVsU3RhcnRYPW8uc2Nyb2xsTGVmdCxpLndoZWVsU3RhcnRZPW8uc2Nyb2xsVG9wLGkud2hlZWxEWD1yLGkud2hlZWxEWT1uLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihudWxsIT1pLndoZWVsU3RhcnRYKXt2YXIgdD1vLnNjcm9sbExlZnQtaS53aGVlbFN0YXJ0WCxlPW8uc2Nyb2xsVG9wLWkud2hlZWxTdGFydFkscj1lJiZpLndoZWVsRFkmJmUvaS53aGVlbERZfHx0JiZpLndoZWVsRFgmJnQvaS53aGVlbERYO2kud2hlZWxTdGFydFg9aS53aGVlbFN0YXJ0WT1udWxsLHImJihybz0ocm8qZW8rcikvKGVvKzEpLCsrZW8pfX0sMjAwKSk6KGkud2hlZWxEWCs9cixpLndoZWVsRFkrPW4pKX19ZnVuY3Rpb24gQWUodCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9bW9bZV0sIWUpKXJldHVybiExO3QuZGlzcGxheS5wb2xsaW5nRmFzdCYmaGUodCkmJih0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEpO3ZhciBuPXQuZG9jLGk9bi5zZWwuc2hpZnQsbz0hMTt0cnl7Z2UodCkmJih0LnN0YXRlLnN1cHByZXNzRWRpdHM9ITApLHImJihuLnNlbC5zaGlmdD0hMSksbz1lKHQpIT1Bb31maW5hbGx5e24uc2VsLnNoaWZ0PWksdC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSExfXJldHVybiBvfWZ1bmN0aW9uIEhlKHQpe3ZhciBlPXQuc3RhdGUua2V5TWFwcy5zbGljZSgwKTtyZXR1cm4gdC5vcHRpb25zLmV4dHJhS2V5cyYmZS5wdXNoKHQub3B0aW9ucy5leHRyYUtleXMpLGUucHVzaCh0Lm9wdGlvbnMua2V5TWFwKSxlfWZ1bmN0aW9uIE5lKHQsZSl7dmFyIHI9Q3IodC5vcHRpb25zLmtleU1hcCksbj1yLmF1dG87Y2xlYXJUaW1lb3V0KG5vKSxuJiYhTHIoZSkmJihubz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Q3IodC5vcHRpb25zLmtleU1hcCk9PXImJih0Lm9wdGlvbnMua2V5TWFwPW4uY2FsbD9uLmNhbGwobnVsbCx0KTpuLGwodCkpfSw1MCkpO3ZhciBpPWtyKGUsITApLG89ITE7aWYoIWkpcmV0dXJuITE7dmFyIHM9SGUodCk7cmV0dXJuIG89ZS5zaGlmdEtleT93cigiU2hpZnQtIitpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KXx8d3IoaSxzLGZ1bmN0aW9uKGUpe3JldHVybigic3RyaW5nIj09dHlwZW9mIGU/L15nb1tBLVpdLy50ZXN0KGUpOmUubW90aW9uKT9BZSh0LGUpOnZvaWQgMH0pOndyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4gQWUodCxlKX0pLG8mJih6bihlKSxEKHQpLE5pJiYoZS5vbGRLZXlDb2RlPWUua2V5Q29kZSxlLmtleUNvZGU9MCksVW4odCwia2V5SGFuZGxlZCIsdCxpLGUpKSxvfWZ1bmN0aW9uIERlKHQsZSxyKXt2YXIgbj13cigiJyIrcisiJyIsSGUodCksZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KTtyZXR1cm4gbiYmKHpuKGUpLEQodCksVW4odCwia2V5SGFuZGxlZCIsdCwiJyIrcisiJyIsZSkpLG59ZnVuY3Rpb24gV2UodCl7dmFyIGU9dGhpcztpZihlLnN0YXRlLmZvY3VzZWR8fEVlKGUpLCEoWG4oZSx0KXx8ZS5vcHRpb25zLm9uS2V5RXZlbnQmJmUub3B0aW9ucy5vbktleUV2ZW50KGUsRW4odCkpKSl7QWkmJjI3PT10LmtleUNvZGUmJih0LnJldHVyblZhbHVlPSExKTt2YXIgcj10LmtleUNvZGU7ZS5kb2Muc2VsLnNoaWZ0PTE2PT1yfHx0LnNoaWZ0S2V5O3ZhciBuPU5lKGUsdCk7emkmJihvbz1uP3I6bnVsbCwhbiYmODg9PXImJiFGbyYmKEtpP3QubWV0YUtleTp0LmN0cmxLZXkpJiZlLnJlcGxhY2VTZWxlY3Rpb24oIiIpKX19ZnVuY3Rpb24gT2UodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe3ZhciByPXQua2V5Q29kZSxuPXQuY2hhckNvZGU7aWYoemkmJnI9PW9vKXJldHVybiBvbz1udWxsLHpuKHQpLHZvaWQgMDtpZighKHppJiYoIXQud2hpY2h8fHQud2hpY2g8MTApfHxGaSl8fCFOZShlLHQpKXt2YXIgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PW4/cjpuKTt0aGlzLm9wdGlvbnMuZWxlY3RyaWNDaGFycyYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzJiZ0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQmJiFnZSh0aGlzKSYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzLmluZGV4T2YoaSk+LTEmJnNldFRpbWVvdXQobGUoZSxmdW5jdGlvbigpe2hyKGUsZS5kb2Muc2VsLnRvLmxpbmUsInNtYXJ0Iil9KSw3NSksRGUoZSx0LGkpfHwoQWkmJiFOaSYmKGUuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSxmZShlKSl9fX1mdW5jdGlvbiBFZSh0KXsibm9jdXJzb3IiIT10Lm9wdGlvbnMucmVhZE9ubHkmJih0LnN0YXRlLmZvY3VzZWR8fChLbih0LCJmb2N1cyIsdCksdC5zdGF0ZS5mb2N1c2VkPSEwLC0xPT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNvZGVNaXJyb3ItZm9jdXNlZFxiLykmJih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci1mb2N1c2VkIiksdC5jdXJPcHx8KGRlKHQsITApLFdpJiZzZXRUaW1lb3V0KGlpKGRlLHQsITApLDApKSksY2UodCksRCh0KSl9ZnVuY3Rpb24gemUodCl7dC5zdGF0ZS5mb2N1c2VkJiYoS24odCwiYmx1ciIsdCksdC5zdGF0ZS5mb2N1c2VkPSExLHQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3ItZm9jdXNlZCIsIiIpKSxjbGVhckludGVydmFsKHQuZGlzcGxheS5ibGlua2VyKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zdGF0ZS5mb2N1c2VkfHwodC5kb2Muc2VsLnNoaWZ0PSExKX0sMTUwKX1mdW5jdGlvbiBJZSh0LGUpe2Z1bmN0aW9uIHIoKXtpZihudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXt2YXIgdD1pLmlucHV0LnZhbHVlPSLigIsiKyhqZShvLmZyb20sby50byk/IiI6aS5pbnB1dC52YWx1ZSk7aS5wcmV2SW5wdXQ9IuKAiyIsaS5pbnB1dC5zZWxlY3Rpb25TdGFydD0xLGkuaW5wdXQuc2VsZWN0aW9uRW5kPXQubGVuZ3RofX1mdW5jdGlvbiBuKCl7aWYoaS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGkuaW5wdXQuc3R5bGUuY3NzVGV4dD11LE5pJiYoaS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1pLnNjcm9sbGVyLnNjcm9sbFRvcD1zKSxjZSh0KSxudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXsoIUFpfHxOaSkmJnIoKSxjbGVhclRpbWVvdXQoaW8pO3ZhciBlPTAsbj1mdW5jdGlvbigpeyIgIj09aS5wcmV2SW5wdXQmJjA9PWkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ/bGUodCxtby5zZWxlY3RBbGwpKHQpOmUrKzwxMD9pbz1zZXRUaW1lb3V0KG4sNTAwKTpkZSh0KX07aW89c2V0VGltZW91dChuLDIwMCl9fWlmKCFYbih0LGUsImNvbnRleHRtZW51Iikpe3ZhciBpPXQuZGlzcGxheSxvPXQuZG9jLnNlbDtpZighdmUoaSxlKSYmIUNlKHQsZSkpe3ZhciBsPXllKHQsZSkscz1pLnNjcm9sbGVyLnNjcm9sbFRvcDtpZihsJiYhemkpe3ZhciBhPXQub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnU7YSYmKGplKG8uZnJvbSxvLnRvKXx8JGUobCxvLmZyb20pfHwhJGUobCxvLnRvKSkmJmxlKHQsbnIpKHQuZG9jLGwsbCk7dmFyIHU9aS5pbnB1dC5zdHlsZS5jc3NUZXh0O2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9wOiAiKyhlLmNsaWVudFktNSkrInB4OyBsZWZ0OiAiKyhlLmNsaWVudFgtNSkrInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgb3V0bGluZTogbm9uZTsiKyJib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgLW1zLW9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyIscGUodCksZGUodCwhMCksamUoby5mcm9tLG8udG8pJiYoaS5pbnB1dC52YWx1ZT1pLnByZXZJbnB1dD0iICIpLEFpJiYhTmkmJnIoKSxaaSl7UG4oZSk7dmFyIGM9ZnVuY3Rpb24oKXtWbih3aW5kb3csIm1vdXNldXAiLGMpLHNldFRpbWVvdXQobiwyMCl9O0duKHdpbmRvdywibW91c2V1cCIsYyl9ZWxzZSBzZXRUaW1lb3V0KG4sNTApfX19fWZ1bmN0aW9uIEZlKHQsZSxyKXtpZighJGUoZS5mcm9tLHIpKXJldHVybiBRZSh0LHIpO3ZhciBuPWUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKTtpZihyLmxpbmU+ZS50by5saW5lK24pe3ZhciBpPXIubGluZS1uLG89dC5maXJzdCt0LnNpemUtMTtyZXR1cm4gaT5vP1llKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCk6SmUocixnbih0LGkpLnRleHQubGVuZ3RoKX1pZihyLmxpbmU9PWUudG8ubGluZStuKXJldHVybiBKZShyLFFuKGUudGV4dCkubGVuZ3RoKygxPT1lLnRleHQubGVuZ3RoP2UuZnJvbS5jaDowKStnbih0LGUudG8ubGluZSkudGV4dC5sZW5ndGgtZS50by5jaCk7dmFyIGw9ci5saW5lLWUuZnJvbS5saW5lO3JldHVybiBKZShyLGUudGV4dFtsXS5sZW5ndGgrKGw/MDplLmZyb20uY2gpKX1mdW5jdGlvbiBQZSh0LGUscil7aWYociYmIm9iamVjdCI9PXR5cGVvZiByKXJldHVybnthbmNob3I6RmUodCxlLHIuYW5jaG9yKSxoZWFkOkZlKHQsZSxyLmhlYWQpfTtpZigic3RhcnQiPT1yKXJldHVybnthbmNob3I6ZS5mcm9tLGhlYWQ6ZS5mcm9tfTt2YXIgbj1sbyhlKTtpZigiYXJvdW5kIj09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOm59O2lmKCJlbmQiPT1yKXJldHVybnthbmNob3I6bixoZWFkOm59O3ZhciBpPWZ1bmN0aW9uKHQpe2lmKCRlKHQsZS5mcm9tKSlyZXR1cm4gdDtpZighJGUoZS50byx0KSlyZXR1cm4gbjt2YXIgcj10LmxpbmUrZS50ZXh0Lmxlbmd0aC0oZS50by5saW5lLWUuZnJvbS5saW5lKS0xLGk9dC5jaDtyZXR1cm4gdC5saW5lPT1lLnRvLmxpbmUmJihpKz1uLmNoLWUudG8uY2gpLFllKHIsaSl9O3JldHVybnthbmNob3I6aSh0LnNlbC5hbmNob3IpLGhlYWQ6aSh0LnNlbC5oZWFkKX19ZnVuY3Rpb24gUmUodCxlLHIpe3ZhciBuPXtjYW5jZWxlZDohMSxmcm9tOmUuZnJvbSx0bzplLnRvLHRleHQ6ZS50ZXh0LG9yaWdpbjplLm9yaWdpbixjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGVkPSEwfX07cmV0dXJuIHImJihuLnVwZGF0ZT1mdW5jdGlvbihlLHIsbixpKXtlJiYodGhpcy5mcm9tPVFlKHQsZSkpLHImJih0aGlzLnRvPVFlKHQscikpLG4mJih0aGlzLnRleHQ9biksdm9pZCAwIT09aSYmKHRoaXMub3JpZ2luPWkpfSksS24odCwiYmVmb3JlQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZUNoYW5nZSIsdC5jbSxuKSxuLmNhbmNlbGVkP251bGw6e2Zyb206bi5mcm9tLHRvOm4udG8sdGV4dDpuLnRleHQsb3JpZ2luOm4ub3JpZ2lufX1mdW5jdGlvbiBCZSh0LGUscixuKXtpZih0LmNtKXtpZighdC5jbS5jdXJPcClyZXR1cm4gbGUodC5jbSxCZSkodCxlLHIsbik7aWYodC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXJldHVybn1pZighKFluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSl8fChlPVJlKHQsZSwhMCkpKXt2YXIgaT1xaSYmIW4mJkZyKHQsZS5mcm9tLGUudG8pO2lmKGkpe2Zvcih2YXIgbz1pLmxlbmd0aC0xO28+PTE7LS1vKUdlKHQse2Zyb206aVtvXS5mcm9tLHRvOmlbb10udG8sdGV4dDpbIiJdfSk7aS5sZW5ndGgmJkdlKHQse2Zyb206aVswXS5mcm9tLHRvOmlbMF0udG8sdGV4dDplLnRleHR9LHIpfWVsc2UgR2UodCxlLHIpfX1mdW5jdGlvbiBHZSh0LGUscil7aWYoMSE9ZS50ZXh0Lmxlbmd0aHx8IiIhPWUudGV4dFswXXx8IWplKGUuZnJvbSxlLnRvKSl7dmFyIG49UGUodCxlLHIpO01uKHQsZSxuLHQuY20/dC5jbS5jdXJPcC5pZDowLzApLFVlKHQsZSxuLHpyKHQsZSkpO3ZhciBpPVtdO2RuKHQsZnVuY3Rpb24odCxyKXtyfHwtMSE9dGkoaSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LGUpLGkucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LGUsbnVsbCx6cih0LGUpKX0pfX1mdW5jdGlvbiBWZSh0LGUpe2lmKCF0LmNtfHwhdC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXt2YXIgcj10Lmhpc3Rvcnksbj0oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkucG9wKCk7aWYobil7dmFyIGk9e2NoYW5nZXM6W10sYW5jaG9yQmVmb3JlOm4uYW5jaG9yQWZ0ZXIsaGVhZEJlZm9yZTpuLmhlYWRBZnRlcixhbmNob3JBZnRlcjpuLmFuY2hvckJlZm9yZSxoZWFkQWZ0ZXI6bi5oZWFkQmVmb3JlLGdlbmVyYXRpb246ci5nZW5lcmF0aW9ufTsoInVuZG8iPT1lP3IudW5kb25lOnIuZG9uZSkucHVzaChpKSxyLmdlbmVyYXRpb249bi5nZW5lcmF0aW9ufHwrK3IubWF4R2VuZXJhdGlvbjtmb3IodmFyIG89WW4odCwiYmVmb3JlQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZUNoYW5nZSIpLGw9bi5jaGFuZ2VzLmxlbmd0aC0xO2w+PTA7LS1sKXt2YXIgcz1uLmNoYW5nZXNbbF07aWYocy5vcmlnaW49ZSxvJiYhUmUodCxzLCExKSlyZXR1cm4oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkubGVuZ3RoPTAsdm9pZCAwO2kuY2hhbmdlcy5wdXNoKFNuKHQscykpO3ZhciBhPWw/UGUodCxzLG51bGwpOnthbmNob3I6bi5hbmNob3JCZWZvcmUsaGVhZDpuLmhlYWRCZWZvcmV9O1VlKHQscyxhLElyKHQscykpO3ZhciB1PVtdO2RuKHQsZnVuY3Rpb24odCxlKXtlfHwtMSE9dGkodSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LHMpLHUucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LHMsbnVsbCxJcih0LHMpKX0pfX19fWZ1bmN0aW9uIEtlKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gWWUodC5saW5lK2UsdC5jaCl9dC5maXJzdCs9ZSx0LmNtJiZ1ZSh0LmNtLHQuZmlyc3QsdC5maXJzdCxlKSx0LnNlbC5oZWFkPXIodC5zZWwuaGVhZCksdC5zZWwuYW5jaG9yPXIodC5zZWwuYW5jaG9yKSx0LnNlbC5mcm9tPXIodC5zZWwuZnJvbSksdC5zZWwudG89cih0LnNlbC50byl9ZnVuY3Rpb24gVWUodCxlLHIsbil7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVWUpKHQsZSxyLG4pO2lmKGUudG8ubGluZTx0LmZpcnN0KXJldHVybiBLZSh0LGUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKSksdm9pZCAwO2lmKCEoZS5mcm9tLmxpbmU+dC5sYXN0TGluZSgpKSl7aWYoZS5mcm9tLmxpbmU8dC5maXJzdCl7dmFyIGk9ZS50ZXh0Lmxlbmd0aC0xLSh0LmZpcnN0LWUuZnJvbS5saW5lKTtLZSh0LGkpLGU9e2Zyb206WWUodC5maXJzdCwwKSx0bzpZZShlLnRvLmxpbmUraSxlLnRvLmNoKSx0ZXh0OltRbihlLnRleHQpXSxvcmlnaW46ZS5vcmlnaW59fXZhciBvPXQubGFzdExpbmUoKTtlLnRvLmxpbmU+byYmKGU9e2Zyb206ZS5mcm9tLHRvOlllKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCksdGV4dDpbZS50ZXh0WzBdXSxvcmlnaW46ZS5vcmlnaW59KSxlLnJlbW92ZWQ9bW4odCxlLmZyb20sZS50bykscnx8KHI9UGUodCxlLG51bGwpKSx0LmNtP1hlKHQuY20sZSxuLHIpOmNuKHQsZSxuLHIpfX1mdW5jdGlvbiBYZSh0LGUscixuKXt2YXIgbz10LmRvYyxsPXQuZGlzcGxheSxzPWUuZnJvbSxhPWUudG8sdT0hMSxmPXMubGluZTt0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoZj1ibihHcihvLGduKG8scy5saW5lKSkpLG8uaXRlcihmLGEubGluZSsxLGZ1bmN0aW9uKHQpe3JldHVybiB0PT1sLm1heExpbmU/KHU9ITAsITApOnZvaWQgMH0pKSwkZShvLnNlbC5oZWFkLGUuZnJvbSl8fCRlKGUudG8sby5zZWwuaGVhZCl8fCh0LmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxjbihvLGUscixuLGkodCkpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fChvLml0ZXIoZixzLmxpbmUrZS50ZXh0Lmxlbmd0aCxmdW5jdGlvbih0KXt2YXIgZT1jKG8sdCk7ZT5sLm1heExpbmVMZW5ndGgmJihsLm1heExpbmU9dCxsLm1heExpbmVMZW5ndGg9ZSxsLm1heExpbmVDaGFuZ2VkPSEwLHU9ITEpfSksdSYmKHQuY3VyT3AudXBkYXRlTWF4TGluZT0hMCkpLG8uZnJvbnRpZXI9TWF0aC5taW4oby5mcm9udGllcixzLmxpbmUpLFcodCw0MDApO3ZhciBoPWUudGV4dC5sZW5ndGgtKGEubGluZS1zLmxpbmUpLTE7aWYodWUodCxzLmxpbmUsYS5saW5lKzEsaCksWW4odCwiY2hhbmdlIikpe3ZhciBkPXtmcm9tOnMsdG86YSx0ZXh0OmUudGV4dCxyZW1vdmVkOmUucmVtb3ZlZCxvcmlnaW46ZS5vcmlnaW59O2lmKHQuY3VyT3AudGV4dENoYW5nZWQpe2Zvcih2YXIgcD10LmN1ck9wLnRleHRDaGFuZ2VkO3AubmV4dDtwPXAubmV4dCk7cC5uZXh0PWR9ZWxzZSB0LmN1ck9wLnRleHRDaGFuZ2VkPWR9fWZ1bmN0aW9uIF9lKHQsZSxyLG4saSl7aWYobnx8KG49ciksJGUobixyKSl7dmFyIG89bjtuPXIscj1vfSJzdHJpbmciPT10eXBlb2YgZSYmKGU9em8oZSkpLEJlKHQse2Zyb206cix0bzpuLHRleHQ6ZSxvcmlnaW46aX0sbnVsbCl9ZnVuY3Rpb24gWWUodCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFllPyh0aGlzLmxpbmU9dCx0aGlzLmNoPWUsdm9pZCAwKTpuZXcgWWUodCxlKX1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiB0LmxpbmU9PWUubGluZSYmdC5jaD09ZS5jaH1mdW5jdGlvbiAkZSh0LGUpe3JldHVybiB0LmxpbmU8ZS5saW5lfHx0LmxpbmU9PWUubGluZSYmdC5jaDxlLmNofWZ1bmN0aW9uIFplKHQpe3JldHVybiBZZSh0LmxpbmUsdC5jaCl9ZnVuY3Rpb24gcWUodCxlKXtyZXR1cm4gTWF0aC5tYXgodC5maXJzdCxNYXRoLm1pbihlLHQuZmlyc3QrdC5zaXplLTEpKX1mdW5jdGlvbiBRZSh0LGUpe2lmKGUubGluZTx0LmZpcnN0KXJldHVybiBZZSh0LmZpcnN0LDApO3ZhciByPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGUubGluZT5yP1llKHIsZ24odCxyKS50ZXh0Lmxlbmd0aCk6SmUoZSxnbih0LGUubGluZSkudGV4dC5sZW5ndGgpfWZ1bmN0aW9uIEplKHQsZSl7dmFyIHI9dC5jaDtyZXR1cm4gbnVsbD09cnx8cj5lP1llKHQubGluZSxlKTowPnI/WWUodC5saW5lLDApOnR9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gZT49dC5maXJzdCYmZTx0LmZpcnN0K3Quc2l6ZX1mdW5jdGlvbiBlcih0LGUscixuKXtpZih0LnNlbC5zaGlmdHx8dC5zZWwuZXh0ZW5kKXt2YXIgaT10LnNlbC5hbmNob3I7aWYocil7dmFyIG89JGUoZSxpKTtvIT0kZShyLGkpPyhpPWUsZT1yKTpvIT0kZShlLHIpJiYoZT1yKX1ucih0LGksZSxuKX1lbHNlIG5yKHQsZSxyfHxlLG4pO3QuY20mJih0LmNtLmN1ck9wLnVzZXJTZWxDaGFuZ2U9ITApfWZ1bmN0aW9uIHJyKHQsZSxyKXt2YXIgbj17YW5jaG9yOmUsaGVhZDpyfTtyZXR1cm4gS24odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdC5jbSxuKSxuLmFuY2hvcj1RZSh0LG4uYW5jaG9yKSxuLmhlYWQ9UWUodCxuLmhlYWQpLG59ZnVuY3Rpb24gbnIodCxlLHIsbixpKXtpZighaSYmWW4odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpKXt2YXIgbz1ycih0LGUscik7cj1vLmhlYWQsZT1vLmFuY2hvcn12YXIgbD10LnNlbDtpZihsLmdvYWxDb2x1bW49bnVsbCxudWxsPT1uJiYobj0kZShyLGwuaGVhZCk/LTE6MSksKGl8fCFqZShlLGwuYW5jaG9yKSkmJihlPW9yKHQsZSxuLCJwdXNoIiE9aSkpLChpfHwhamUocixsLmhlYWQpKSYmKHI9b3IodCxyLG4sInB1c2giIT1pKSksIWplKGwuYW5jaG9yLGUpfHwhamUobC5oZWFkLHIpKXtsLmFuY2hvcj1lLGwuaGVhZD1yO3ZhciBzPSRlKHIsZSk7bC5mcm9tPXM/cjplLGwudG89cz9lOnIsdC5jbSYmKHQuY20uY3VyT3AudXBkYXRlSW5wdXQ9dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPXQuY20uY3VyT3AuY3Vyc29yQWN0aXZpdHk9ITApLFVuKHQsImN1cnNvckFjdGl2aXR5Iix0KX19ZnVuY3Rpb24gaXIodCl7bnIodC5kb2MsdC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvLG51bGwsInB1c2giKX1mdW5jdGlvbiBvcih0LGUscixuKXt2YXIgaT0hMSxvPWUsbD1yfHwxO3QuY2FudEVkaXQ9ITE7dDpmb3IoOzspe3ZhciBzPWduKHQsby5saW5lKTtpZihzLm1hcmtlZFNwYW5zKWZvcih2YXIgYT0wO2E8cy5tYXJrZWRTcGFucy5sZW5ndGg7KythKXt2YXIgdT1zLm1hcmtlZFNwYW5zW2FdLGM9dS5tYXJrZXI7aWYoKG51bGw9PXUuZnJvbXx8KGMuaW5jbHVzaXZlTGVmdD91LmZyb208PW8uY2g6dS5mcm9tPG8uY2gpKSYmKG51bGw9PXUudG98fChjLmluY2x1c2l2ZVJpZ2h0P3UudG8+PW8uY2g6dS50bz5vLmNoKSkpe2lmKG4mJihLbihjLCJiZWZvcmVDdXJzb3JFbnRlciIpLGMuZXhwbGljaXRseUNsZWFyZWQpKXtpZihzLm1hcmtlZFNwYW5zKXstLWE7Y29udGludWV9YnJlYWt9aWYoIWMuYXRvbWljKWNvbnRpbnVlO3ZhciBmPWMuZmluZCgpWzA+bD8iZnJvbSI6InRvIl07aWYoamUoZixvKSYmKGYuY2grPWwsZi5jaDwwP2Y9Zi5saW5lPnQuZmlyc3Q/UWUodCxZZShmLmxpbmUtMSkpOm51bGw6Zi5jaD5zLnRleHQubGVuZ3RoJiYoZj1mLmxpbmU8dC5maXJzdCt0LnNpemUtMT9ZZShmLmxpbmUrMSwwKTpudWxsKSwhZikpe2lmKGkpcmV0dXJuIG4/KHQuY2FudEVkaXQ9ITAsWWUodC5maXJzdCwwKSk6b3IodCxlLHIsITApO2k9ITAsZj1lLGw9LWx9bz1mO2NvbnRpbnVlIHR9fXJldHVybiBvfX1mdW5jdGlvbiBscih0KXt2YXIgZT1zcih0LHQuZG9jLnNlbC5oZWFkLG51bGwsdC5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbik7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgcj10LmRpc3BsYXksbj1maShyLnNpemVyKSxpPW51bGw7aWYoZS50b3Arbi50b3A8MD9pPSEwOmUuYm90dG9tK24udG9wPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoaT0hMSksbnVsbCE9aSYmIUJpKXt2YXIgbz0ibm9uZSI9PXIuY3Vyc29yLnN0eWxlLmRpc3BsYXk7byYmKHIuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5jdXJzb3Iuc3R5bGUubGVmdD1lLmxlZnQrInB4IixyLmN1cnNvci5zdHlsZS50b3A9ZS50b3Atci52aWV3T2Zmc2V0KyJweCIpLHIuY3Vyc29yLnNjcm9sbEludG9WaWV3KGkpLG8mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIil9fX1mdW5jdGlvbiBzcih0LGUscixuKXtmb3IobnVsbD09biYmKG49MCk7Oyl7dmFyIGk9ITEsbz1RKHQsZSksbD1yJiZyIT1lP1EodCxyKTpvLHM9dXIodCxNYXRoLm1pbihvLmxlZnQsbC5sZWZ0KSxNYXRoLm1pbihvLnRvcCxsLnRvcCktbixNYXRoLm1heChvLmxlZnQsbC5sZWZ0KSxNYXRoLm1heChvLmJvdHRvbSxsLmJvdHRvbSkrbiksYT10LmRvYy5zY3JvbGxUb3AsdT10LmRvYy5zY3JvbGxMZWZ0O2lmKG51bGwhPXMuc2Nyb2xsVG9wJiYoU2UodCxzLnNjcm9sbFRvcCksTWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWEpPjEmJihpPSEwKSksbnVsbCE9cy5zY3JvbGxMZWZ0JiYoTWUodCxzLnNjcm9sbExlZnQpLE1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtdSk+MSYmKGk9ITApKSwhaSlyZXR1cm4gb319ZnVuY3Rpb24gYXIodCxlLHIsbixpKXt2YXIgbz11cih0LGUscixuLGkpO251bGwhPW8uc2Nyb2xsVG9wJiZTZSh0LG8uc2Nyb2xsVG9wKSxudWxsIT1vLnNjcm9sbExlZnQmJk1lKHQsby5zY3JvbGxMZWZ0KX1mdW5jdGlvbiB1cih0LGUscixuLGkpe3ZhciBvPXQuZGlzcGxheSxsPXJlKHQuZGlzcGxheSk7MD5yJiYocj0wKTt2YXIgcz1vLnNjcm9sbGVyLmNsaWVudEhlaWdodC1UbyxhPW8uc2Nyb2xsZXIuc2Nyb2xsVG9wLHU9e30sYz10LmRvYy5oZWlnaHQrRihvKSxmPWw+cixoPWk+Yy1sO2lmKGE+cil1LnNjcm9sbFRvcD1mPzA6cjtlbHNlIGlmKGk+YStzKXt2YXIgZD1NYXRoLm1pbihyLChoP2M6aSktcyk7ZCE9YSYmKHUuc2Nyb2xsVG9wPWQpfXZhciBwPW8uc2Nyb2xsZXIuY2xpZW50V2lkdGgtVG8sZz1vLnNjcm9sbGVyLnNjcm9sbExlZnQ7ZSs9by5ndXR0ZXJzLm9mZnNldFdpZHRoLG4rPW8uZ3V0dGVycy5vZmZzZXRXaWR0aDt2YXIgbT1vLmd1dHRlcnMub2Zmc2V0V2lkdGgsdj1tKzEwPmU7cmV0dXJuIGcrbT5lfHx2Pyh2JiYoZT0wKSx1LnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxlLTEwLW0pKTpuPnArZy0zJiYodS5zY3JvbGxMZWZ0PW4rMTAtcCksdX1mdW5jdGlvbiBjcih0LGUscil7dC5jdXJPcC51cGRhdGVTY3JvbGxQb3M9e3Njcm9sbExlZnQ6bnVsbD09ZT90LmRvYy5zY3JvbGxMZWZ0OmUsc2Nyb2xsVG9wOm51bGw9PXI/dC5kb2Muc2Nyb2xsVG9wOnJ9fWZ1bmN0aW9uIGZyKHQsZSxyKXt2YXIgbj10LmN1ck9wLnVwZGF0ZVNjcm9sbFBvc3x8KHQuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0OnQuZG9jLnNjcm9sbExlZnQsc2Nyb2xsVG9wOnQuZG9jLnNjcm9sbFRvcH0pLGk9dC5kaXNwbGF5LnNjcm9sbGVyO24uc2Nyb2xsVG9wPU1hdGgubWF4KDAsTWF0aC5taW4oaS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQsbi5zY3JvbGxUb3ArcikpLG4uc2Nyb2xsTGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aCxuLnNjcm9sbExlZnQrZSkpfWZ1bmN0aW9uIGhyKHQsZSxyLG4pe3ZhciBpPXQuZG9jO2lmKG51bGw9PXImJihyPSJhZGQiKSwic21hcnQiPT1yKWlmKHQuZG9jLm1vZGUuaW5kZW50KXZhciBvPXoodCxlKTtlbHNlIHI9InByZXYiO3ZhciBsLHM9dC5vcHRpb25zLnRhYlNpemUsYT1nbihpLGUpLHU9Wm4oYS50ZXh0LG51bGwscyksYz1hLnRleHQubWF0Y2goL15ccyovKVswXTtpZigic21hcnQiPT1yJiYobD10LmRvYy5tb2RlLmluZGVudChvLGEudGV4dC5zbGljZShjLmxlbmd0aCksYS50ZXh0KSxsPT1Bbykpe2lmKCFuKXJldHVybjtyPSJwcmV2In0icHJldiI9PXI/bD1lPmkuZmlyc3Q/Wm4oZ24oaSxlLTEpLnRleHQsbnVsbCxzKTowOiJhZGQiPT1yP2w9dSt0Lm9wdGlvbnMuaW5kZW50VW5pdDoic3VidHJhY3QiPT1yP2w9dS10Lm9wdGlvbnMuaW5kZW50VW5pdDoibnVtYmVyIj09dHlwZW9mIHImJihsPXUrciksbD1NYXRoLm1heCgwLGwpO3ZhciBmPSIiLGg9MDtpZih0Lm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpZm9yKHZhciBkPU1hdGguZmxvb3IobC9zKTtkOy0tZCloKz1zLGYrPSIJIjtsPmgmJihmKz1xbihsLWgpKSxmIT1jP19lKHQuZG9jLGYsWWUoZSwwKSxZZShlLGMubGVuZ3RoKSwiK2lucHV0Iik6aS5zZWwuaGVhZC5saW5lPT1lJiZpLnNlbC5oZWFkLmNoPGMubGVuZ3RoJiZucihpLFllKGUsYy5sZW5ndGgpLFllKGUsYy5sZW5ndGgpLDEpLGEuc3RhdGVBZnRlcj1udWxsfWZ1bmN0aW9uIGRyKHQsZSxyKXt2YXIgbj1lLGk9ZSxvPXQuZG9jO3JldHVybiJudW1iZXIiPT10eXBlb2YgZT9pPWduKG8scWUobyxlKSk6bj1ibihlKSxudWxsPT1uP251bGw6cihpLG4pPyh1ZSh0LG4sbisxKSxpKTpudWxsfWZ1bmN0aW9uIHByKHQsZSxyLG4saSl7ZnVuY3Rpb24gbygpe3ZhciBlPXMrcjtyZXR1cm4gZTx0LmZpcnN0fHxlPj10LmZpcnN0K3Quc2l6ZT9mPSExOihzPWUsYz1nbih0LGUpKX1mdW5jdGlvbiBsKHQpe3ZhciBlPShpP1NpOk1pKShjLGEsciwhMCk7aWYobnVsbD09ZSl7aWYodHx8IW8oKSlyZXR1cm4gZj0hMTthPWk/KDA+cj9iaTp5aSkoYyk6MD5yP2MudGV4dC5sZW5ndGg6MH1lbHNlIGE9ZTtyZXR1cm4hMH12YXIgcz1lLmxpbmUsYT1lLmNoLHU9cixjPWduKHQscyksZj0hMDtpZigiY2hhciI9PW4pbCgpO2Vsc2UgaWYoImNvbHVtbiI9PW4pbCghMCk7ZWxzZSBpZigid29yZCI9PW58fCJncm91cCI9PW4pZm9yKHZhciBoPW51bGwsZD0iZ3JvdXAiPT1uLHA9ITA7ISgwPnIpfHxsKCFwKTtwPSExKXt2YXIgZz1jLnRleHQuY2hhckF0KGEpfHwiXG4iLG09b2koZyk/InciOmQ/L1xzLy50ZXN0KGcpP251bGw6InAiOm51bGw7aWYoaCYmaCE9bSl7MD5yJiYocj0xLGwoKSk7YnJlYWt9aWYobSYmKGg9bSkscj4wJiYhbCghcCkpYnJlYWt9dmFyIHY9b3IodCxZZShzLGEpLHUsITApO3JldHVybiBmfHwodi5oaXRTaWRlPSEwKSx2fWZ1bmN0aW9uIGdyKHQsZSxyLG4pe3ZhciBpLG89dC5kb2MsbD1lLmxlZnQ7aWYoInBhZ2UiPT1uKXt2YXIgcz1NYXRoLm1pbih0LmRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsd2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTtpPWUudG9wK3IqKHMtKDA+cj8xLjU6LjUpKnJlKHQuZGlzcGxheSkpfWVsc2UibGluZSI9PW4mJihpPXI+MD9lLmJvdHRvbSszOmUudG9wLTMpO2Zvcig7Oyl7dmFyIGE9dGUodCxsLGkpO2lmKCFhLm91dHNpZGUpYnJlYWs7aWYoMD5yPzA+PWk6aT49by5oZWlnaHQpe2EuaGl0U2lkZT0hMDticmVha31pKz01KnJ9cmV0dXJuIGF9ZnVuY3Rpb24gbXIodCxlKXt2YXIgcj1lLmNoLG49ZS5jaDtpZih0KXsoZS54UmVsPDB8fG49PXQubGVuZ3RoKSYmcj8tLXI6KytuO2Zvcih2YXIgaT10LmNoYXJBdChyKSxvPW9pKGkpP29pOi9ccy8udGVzdChpKT9mdW5jdGlvbih0KXtyZXR1cm4vXHMvLnRlc3QodCl9OmZ1bmN0aW9uKHQpe3JldHVybiEvXHMvLnRlc3QodCkmJiFvaSh0KX07cj4wJiZvKHQuY2hhckF0KHItMSkpOyktLXI7Zm9yKDtuPHQubGVuZ3RoJiZvKHQuY2hhckF0KG4pKTspKytufXJldHVybntmcm9tOlllKGUubGluZSxyKSx0bzpZZShlLmxpbmUsbil9fWZ1bmN0aW9uIHZyKHQsZSl7ZXIodC5kb2MsWWUoZSwwKSxRZSh0LmRvYyxZZShlKzEsMCkpKX1mdW5jdGlvbiB5cihlLHIsbixpKXt0LmRlZmF1bHRzW2VdPXIsbiYmKHNvW2VdPWk/ZnVuY3Rpb24odCxlLHIpe3IhPXVvJiZuKHQsZSxyKX06bil9ZnVuY3Rpb24gYnIodCxlKXtpZihlPT09ITApcmV0dXJuIGU7aWYodC5jb3B5U3RhdGUpcmV0dXJuIHQuY29weVN0YXRlKGUpO3ZhciByPXt9O2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dO2kgaW5zdGFuY2VvZiBBcnJheSYmKGk9aS5jb25jYXQoW10pKSxyW25dPWl9cmV0dXJuIHJ9ZnVuY3Rpb24geHIodCxlLHIpe3JldHVybiB0LnN0YXJ0U3RhdGU/dC5zdGFydFN0YXRlKGUscik6ITB9ZnVuY3Rpb24gQ3IodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3ZvW3RdOnR9ZnVuY3Rpb24gd3IodCxlLHIpe2Z1bmN0aW9uIG4oZSl7ZT1DcihlKTt2YXIgaT1lW3RdO2lmKGk9PT0hMSlyZXR1cm4ic3RvcCI7aWYobnVsbCE9aSYmcihpKSlyZXR1cm4hMDtpZihlLm5vZmFsbHRocm91Z2gpcmV0dXJuInN0b3AiO3ZhciBvPWUuZmFsbHRocm91Z2g7aWYobnVsbD09bylyZXR1cm4hMTtpZigiW29iamVjdCBBcnJheV0iIT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpcmV0dXJuIG4obyk7Zm9yKHZhciBsPTAscz1vLmxlbmd0aDtzPmw7KytsKXt2YXIgYT1uKG9bbF0pO2lmKGEpcmV0dXJuIGF9cmV0dXJuITF9Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBvPW4oZVtpXSk7aWYobylyZXR1cm4ic3RvcCIhPW99fWZ1bmN0aW9uIExyKHQpe3ZhciBlPVBvW3Qua2V5Q29kZV07cmV0dXJuIkN0cmwiPT1lfHwiQWx0Ij09ZXx8IlNoaWZ0Ij09ZXx8Ik1vZCI9PWV9ZnVuY3Rpb24ga3IodCxlKXtpZih6aSYmMzQ9PXQua2V5Q29kZSYmdFsiY2hhciJdKXJldHVybiExO3ZhciByPVBvW3Qua2V5Q29kZV07cmV0dXJuIG51bGw9PXJ8fHQuYWx0R3JhcGhLZXk/ITE6KHQuYWx0S2V5JiYocj0iQWx0LSIrciksKCRpP3QubWV0YUtleTp0LmN0cmxLZXkpJiYocj0iQ3RybC0iK3IpLCgkaT90LmN0cmxLZXk6dC5tZXRhS2V5KSYmKHI9IkNtZC0iK3IpLCFlJiZ0LnNoaWZ0S2V5JiYocj0iU2hpZnQtIityKSxyKX1mdW5jdGlvbiBTcih0LGUpe3RoaXMucG9zPXRoaXMuc3RhcnQ9MCx0aGlzLnN0cmluZz10LHRoaXMudGFiU2l6ZT1lfHw4LHRoaXMubGFzdENvbHVtblBvcz10aGlzLmxhc3RDb2x1bW5WYWx1ZT0wfWZ1bmN0aW9uIE1yKHQsZSl7dGhpcy5saW5lcz1bXSx0aGlzLnR5cGU9ZSx0aGlzLmRvYz10fWZ1bmN0aW9uIFRyKHQsZSxyLG4saSl7aWYobiYmbi5zaGFyZWQpcmV0dXJuIEhyKHQsZSxyLG4saSk7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVHIpKHQsZSxyLG4saSk7dmFyIG89bmV3IE1yKHQsaSk7aWYoJGUocixlKXx8amUoZSxyKSYmInJhbmdlIj09aSYmKCFuLmluY2x1c2l2ZUxlZnR8fCFuLmluY2x1c2l2ZVJpZ2h0KSlyZXR1cm4gbztuJiZyaShuLG8pLG8ucmVwbGFjZWRXaXRoJiYoby5jb2xsYXBzZWQ9ITAsby5yZXBsYWNlZFdpdGg9c2koInNwYW4iLFtvLnJlcGxhY2VkV2l0aF0sIkNvZGVNaXJyb3Itd2lkZ2V0Iiksbi5oYW5kbGVNb3VzZUV2ZW50c3x8KG8ucmVwbGFjZWRXaXRoLmlnbm9yZUV2ZW50cz0hMCkpLG8uY29sbGFwc2VkJiYoUWk9ITApLG8uYWRkVG9IaXN0b3J5JiZNbih0LHtmcm9tOmUsdG86cixvcmlnaW46Im1hcmtUZXh0In0se2hlYWQ6dC5zZWwuaGVhZCxhbmNob3I6dC5zZWwuYW5jaG9yfSwwLzApO3ZhciBsLHMsYSx1PWUubGluZSxjPTAsZj10LmNtO2lmKHQuaXRlcih1LHIubGluZSsxLGZ1bmN0aW9uKG4pe2YmJm8uY29sbGFwc2VkJiYhZi5vcHRpb25zLmxpbmVXcmFwcGluZyYmR3IodCxuKT09Zi5kaXNwbGF5Lm1heExpbmUmJihhPSEwKTt2YXIgaT17ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOm99O2MrPW4udGV4dC5sZW5ndGgsdT09ZS5saW5lJiYoaS5mcm9tPWUuY2gsYy09ZS5jaCksdT09ci5saW5lJiYoaS50bz1yLmNoLGMtPW4udGV4dC5sZW5ndGgtci5jaCksby5jb2xsYXBzZWQmJih1PT1yLmxpbmUmJihzPVByKG4sci5jaCkpLHU9PWUubGluZT9sPVByKG4sZS5jaCk6eW4obiwwKSksV3IobixpKSwrK3V9KSxvLmNvbGxhcHNlZCYmdC5pdGVyKGUubGluZSxyLmxpbmUrMSxmdW5jdGlvbihlKXtWcih0LGUpJiZ5bihlLDApfSksby5jbGVhck9uRW50ZXImJkduKG8sImJlZm9yZUN1cnNvckVudGVyIixmdW5jdGlvbigpe28uY2xlYXIoKX0pLG8ucmVhZE9ubHkmJihxaT0hMCwodC5oaXN0b3J5LmRvbmUubGVuZ3RofHx0Lmhpc3RvcnkudW5kb25lLmxlbmd0aCkmJnQuY2xlYXJIaXN0b3J5KCkpLG8uY29sbGFwc2VkKXtpZihsIT1zKXRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7by5zaXplPWMsby5hdG9taWM9ITB9cmV0dXJuIGYmJihhJiYoZi5jdXJPcC51cGRhdGVNYXhMaW5lPSEwKSwoby5jbGFzc05hbWV8fG8udGl0bGV8fG8uc3RhcnRTdHlsZXx8by5lbmRTdHlsZXx8by5jb2xsYXBzZWQpJiZ1ZShmLGUubGluZSxyLmxpbmUrMSksby5hdG9taWMmJmlyKGYpKSxvfWZ1bmN0aW9uIEFyKHQsZSl7dGhpcy5tYXJrZXJzPXQsdGhpcy5wcmltYXJ5PWU7Zm9yKHZhciByPTAsbj10aGlzO3I8dC5sZW5ndGg7KytyKXRbcl0ucGFyZW50PXRoaXMsR24odFtyXSwiY2xlYXIiLGZ1bmN0aW9uKCl7bi5jbGVhcigpfSl9ZnVuY3Rpb24gSHIodCxlLHIsbixpKXtuPXJpKG4pLG4uc2hhcmVkPSExO3ZhciBvPVtUcih0LGUscixuLGkpXSxsPW9bMF0scz1uLnJlcGxhY2VkV2l0aDtyZXR1cm4gZG4odCxmdW5jdGlvbih0KXtzJiYobi5yZXBsYWNlZFdpdGg9cy5jbG9uZU5vZGUoITApKSxvLnB1c2goVHIodCxRZSh0LGUpLFFlKHQsciksbixpKSk7Zm9yKHZhciBhPTA7YTx0LmxpbmtlZC5sZW5ndGg7KythKWlmKHQubGlua2VkW2FdLmlzUGFyZW50KXJldHVybjtsPVFuKG8pfSksbmV3IEFyKG8sbCl9ZnVuY3Rpb24gTnIodCxlKXtpZih0KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2lmKG4ubWFya2VyPT1lKXJldHVybiBufX1mdW5jdGlvbiBEcih0LGUpe2Zvcih2YXIgcixuPTA7bjx0Lmxlbmd0aDsrK24pdFtuXSE9ZSYmKHJ8fChyPVtdKSkucHVzaCh0W25dKTtyZXR1cm4gcn1mdW5jdGlvbiBXcih0LGUpe3QubWFya2VkU3BhbnM9dC5tYXJrZWRTcGFucz90Lm1hcmtlZFNwYW5zLmNvbmNhdChbZV0pOltlXSxlLm1hcmtlci5hdHRhY2hMaW5lKHQpfWZ1bmN0aW9uIE9yKHQsZSxyKXtpZih0KWZvcih2YXIgbixpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBvPXRbaV0sbD1vLm1hcmtlcixzPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpO2lmKHN8fChsLmluY2x1c2l2ZUxlZnQmJmwuaW5jbHVzaXZlUmlnaHR8fCJib29rbWFyayI9PWwudHlwZSkmJm8uZnJvbT09ZSYmKCFyfHwhby5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8udG98fChsLmluY2x1c2l2ZVJpZ2h0P28udG8+PWU6by50bz5lKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOm8uZnJvbSx0bzphP251bGw6by50byxtYXJrZXI6bH0pfX1yZXR1cm4gbn1mdW5jdGlvbiBFcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7aWYoc3x8ImJvb2ttYXJrIj09bC50eXBlJiZvLmZyb209PWUmJighcnx8by5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpOyhufHwobj1bXSkpLnB1c2goe2Zyb206YT9udWxsOm8uZnJvbS1lLHRvOm51bGw9PW8udG8/bnVsbDpvLnRvLWUsbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24genIodCxlKXt2YXIgcj10cih0LGUuZnJvbS5saW5lKSYmZ24odCxlLmZyb20ubGluZSkubWFya2VkU3BhbnMsbj10cih0LGUudG8ubGluZSkmJmduKHQsZS50by5saW5lKS5tYXJrZWRTcGFucztpZighciYmIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5mcm9tLmNoLG89ZS50by5jaCxsPWplKGUuZnJvbSxlLnRvKSxzPU9yKHIsaSxsKSxhPUVyKG4sbyxsKSx1PTE9PWUudGV4dC5sZW5ndGgsYz1RbihlLnRleHQpLmxlbmd0aCsodT9pOjApO2lmKHMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2Ype3ZhciBoPXNbZl07aWYobnVsbD09aC50byl7dmFyIGQ9TnIoYSxoLm1hcmtlcik7ZD91JiYoaC50bz1udWxsPT1kLnRvP251bGw6ZC50bytjKTpoLnRvPWl9fWlmKGEpZm9yKHZhciBmPTA7ZjxhLmxlbmd0aDsrK2Ype3ZhciBoPWFbZl07aWYobnVsbCE9aC50byYmKGgudG8rPWMpLG51bGw9PWguZnJvbSl7dmFyIGQ9TnIocyxoLm1hcmtlcik7ZHx8KGguZnJvbT1jLHUmJihzfHwocz1bXSkpLnB1c2goaCkpfWVsc2UgaC5mcm9tKz1jLHUmJihzfHwocz1bXSkpLnB1c2goaCl9aWYodSYmcyl7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbCE9c1tmXS5mcm9tJiZzW2ZdLmZyb209PXNbZl0udG8mJiJib29rbWFyayIhPXNbZl0ubWFya2VyLnR5cGUmJnMuc3BsaWNlKGYtLSwxKTtzLmxlbmd0aHx8KHM9bnVsbCl9dmFyIHA9W3NdO2lmKCF1KXt2YXIgZyxtPWUudGV4dC5sZW5ndGgtMjtpZihtPjAmJnMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbD09c1tmXS50byYmKGd8fChnPVtdKSkucHVzaCh7ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOnNbZl0ubWFya2VyfSk7Zm9yKHZhciBmPTA7bT5mOysrZilwLnB1c2goZyk7cC5wdXNoKGEpfXJldHVybiBwfWZ1bmN0aW9uIElyKHQsZSl7dmFyIHI9QW4odCxlKSxuPXpyKHQsZSk7aWYoIXIpcmV0dXJuIG47aWYoIW4pcmV0dXJuIHI7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBvPXJbaV0sbD1uW2ldO2lmKG8mJmwpdDpmb3IodmFyIHM9MDtzPGwubGVuZ3RoOysrcyl7Zm9yKHZhciBhPWxbc10sdT0wO3U8by5sZW5ndGg7Kyt1KWlmKG9bdV0ubWFya2VyPT1hLm1hcmtlciljb250aW51ZSB0O28ucHVzaChhKX1lbHNlIGwmJihyW2ldPWwpfXJldHVybiByfWZ1bmN0aW9uIEZyKHQsZSxyKXt2YXIgbj1udWxsO2lmKHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7aWYodC5tYXJrZWRTcGFucylmb3IodmFyIGU9MDtlPHQubWFya2VkU3BhbnMubGVuZ3RoOysrZSl7dmFyIHI9dC5tYXJrZWRTcGFuc1tlXS5tYXJrZXI7IXIucmVhZE9ubHl8fG4mJi0xIT10aShuLHIpfHwobnx8KG49W10pKS5wdXNoKHIpfX0pLCFuKXJldHVybiBudWxsO2Zvcih2YXIgaT1be2Zyb206ZSx0bzpyfV0sbz0wO288bi5sZW5ndGg7KytvKWZvcih2YXIgbD1uW29dLHM9bC5maW5kKCksYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgdT1pW2FdO2lmKCEkZSh1LnRvLHMuZnJvbSkmJiEkZShzLnRvLHUuZnJvbSkpe3ZhciBjPVthLDFdOygkZSh1LmZyb20scy5mcm9tKXx8IWwuaW5jbHVzaXZlTGVmdCYmamUodS5mcm9tLHMuZnJvbSkpJiZjLnB1c2goe2Zyb206dS5mcm9tLHRvOnMuZnJvbX0pLCgkZShzLnRvLHUudG8pfHwhbC5pbmNsdXNpdmVSaWdodCYmamUodS50byxzLnRvKSkmJmMucHVzaCh7ZnJvbTpzLnRvLHRvOnUudG99KSxpLnNwbGljZS5hcHBseShpLGMpLGErPWMubGVuZ3RoLTF9fXJldHVybiBpfWZ1bmN0aW9uIFByKHQsZSl7dmFyIHIsbj1RaSYmdC5tYXJrZWRTcGFucztpZihuKWZvcih2YXIgaSxvPTA7bzxuLmxlbmd0aDsrK28paT1uW29dLGkubWFya2VyLmNvbGxhcHNlZCYmKG51bGw9PWkuZnJvbXx8aS5mcm9tPGUpJiYobnVsbD09aS50b3x8aS50bz5lKSYmKCFyfHxyLndpZHRoPGkubWFya2VyLndpZHRoKSYmKHI9aS5tYXJrZXIpO3JldHVybiByfWZ1bmN0aW9uIFJyKHQpe3JldHVybiBQcih0LC0xKX1mdW5jdGlvbiBCcih0KXtyZXR1cm4gUHIodCx0LnRleHQubGVuZ3RoKzEpfWZ1bmN0aW9uIEdyKHQsZSl7Zm9yKHZhciByO3I9UnIoZSk7KWU9Z24odCxyLmZpbmQoKS5mcm9tLmxpbmUpO3JldHVybiBlfWZ1bmN0aW9uIFZyKHQsZSl7dmFyIHI9UWkmJmUubWFya2VkU3BhbnM7aWYocilmb3IodmFyIG4saT0wO2k8ci5sZW5ndGg7KytpKWlmKG49cltpXSxuLm1hcmtlci5jb2xsYXBzZWQpe2lmKG51bGw9PW4uZnJvbSlyZXR1cm4hMDtpZighbi5tYXJrZXIucmVwbGFjZWRXaXRoJiYwPT1uLmZyb20mJm4ubWFya2VyLmluY2x1c2l2ZUxlZnQmJktyKHQsZSxuKSlyZXR1cm4hMH19ZnVuY3Rpb24gS3IodCxlLHIpe2lmKG51bGw9PXIudG8pe3ZhciBuPXIubWFya2VyLmZpbmQoKS50byxpPWduKHQsbi5saW5lKTtyZXR1cm4gS3IodCxpLE5yKGkubWFya2VkU3BhbnMsci5tYXJrZXIpKX1pZihyLm1hcmtlci5pbmNsdXNpdmVSaWdodCYmci50bz09ZS50ZXh0Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG8sbD0wO2w8ZS5tYXJrZWRTcGFucy5sZW5ndGg7KytsKWlmKG89ZS5tYXJrZWRTcGFuc1tsXSxvLm1hcmtlci5jb2xsYXBzZWQmJiFvLm1hcmtlci5yZXBsYWNlZFdpdGgmJm8uZnJvbT09ci50byYmKG8ubWFya2VyLmluY2x1c2l2ZUxlZnR8fHIubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSYmS3IodCxlLG8pKXJldHVybiEwfWZ1bmN0aW9uIFVyKHQpe3ZhciBlPXQubWFya2VkU3BhbnM7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuZGV0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPW51bGx9fWZ1bmN0aW9uIFhyKHQsZSl7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuYXR0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPWV9fWZ1bmN0aW9uIF9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPSF0aGlzLmNtLmN1ck9wO2UmJmllKHRoaXMuY20pO3RyeXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2UmJm9lKHRoaXMuY20pfXJldHVybiByfX1mdW5jdGlvbiBZcih0KXtyZXR1cm4gbnVsbCE9dC5oZWlnaHQ/dC5oZWlnaHQ6KHQubm9kZS5wYXJlbnROb2RlJiYxPT10Lm5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZXx8dWkodC5jbS5kaXNwbGF5Lm1lYXN1cmUsc2koImRpdiIsW3Qubm9kZV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIikpLHQuaGVpZ2h0PXQubm9kZS5vZmZzZXRIZWlnaHQpfWZ1bmN0aW9uIGpyKHQsZSxyLG4pe3ZhciBpPW5ldyB5byh0LHIsbik7cmV0dXJuIGkubm9IU2Nyb2xsJiYodC5kaXNwbGF5LmFsaWduV2lkZ2V0cz0hMCksZHIodCxlLGZ1bmN0aW9uKGUpe3ZhciByPWUud2lkZ2V0c3x8KGUud2lkZ2V0cz1bXSk7aWYobnVsbD09aS5pbnNlcnRBdD9yLnB1c2goaSk6ci5zcGxpY2UoTWF0aC5taW4oci5sZW5ndGgtMSxNYXRoLm1heCgwLGkuaW5zZXJ0QXQpKSwwLGkpLGkubGluZT1lLCFWcih0LmRvYyxlKXx8aS5zaG93SWZIaWRkZW4pe3ZhciBuPUNuKHQsZSk8dC5kb2Muc2Nyb2xsVG9wO3luKGUsZS5oZWlnaHQrWXIoaSkpLG4mJmZyKHQsMCxpLmhlaWdodCl9cmV0dXJuITB9KSxpfWZ1bmN0aW9uICRyKHQsZSxyLG4pe3QudGV4dD1lLHQuc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpLG51bGwhPXQub3JkZXImJih0Lm9yZGVyPW51bGwpLFVyKHQpLFhyKHQscik7dmFyIGk9bj9uKHQpOjE7aSE9dC5oZWlnaHQmJnluKHQsaSl9ZnVuY3Rpb24gWnIodCl7dC5wYXJlbnQ9bnVsbCxVcih0KX1mdW5jdGlvbiBxcih0LGUscixuLGksbyl7dmFyIGw9ci5mbGF0dGVuU3BhbnM7bnVsbD09bCYmKGw9dC5vcHRpb25zLmZsYXR0ZW5TcGFucyk7dmFyIHMsYT0wLHU9bnVsbCxjPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3IoIiI9PWUmJnIuYmxhbmtMaW5lJiZyLmJsYW5rTGluZShuKTshYy5lb2woKTspYy5wb3M+dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aD8obD0hMSxvJiZ0bih0LGUsbixjLnBvcyksYy5wb3M9ZS5sZW5ndGgscz1udWxsKTpzPXIudG9rZW4oYyxuKSxsJiZ1PT1zfHwoYTxjLnN0YXJ0JiZpKGMuc3RhcnQsdSksYT1jLnN0YXJ0LHU9cyksYy5zdGFydD1jLnBvcztmb3IoO2E8Yy5wb3M7KXt2YXIgZj1NYXRoLm1pbihjLnBvcyxhKzVlNCk7aShmLHUpLGE9Zn19ZnVuY3Rpb24gUXIodCxlLHIsbil7dmFyIGk9W3Quc3RhdGUubW9kZUdlbl07cXIodCxlLnRleHQsdC5kb2MubW9kZSxyLGZ1bmN0aW9uKHQsZSl7aS5wdXNoKHQsZSl9LG4pO2Zvcih2YXIgbz0wO288dC5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7KytvKXt2YXIgbD10LnN0YXRlLm92ZXJsYXlzW29dLHM9MSxhPTA7cXIodCxlLnRleHQsbC5tb2RlLCEwLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXM7dD5hOyl7dmFyIG49aVtzXTtuPnQmJmkuc3BsaWNlKHMsMSx0LGlbcysxXSxuKSxzKz0yLGE9TWF0aC5taW4odCxuKX1pZihlKWlmKGwub3BhcXVlKWkuc3BsaWNlKHIscy1yLHQsZSkscz1yKzI7ZWxzZSBmb3IoO3M+cjtyKz0yKXt2YXIgbz1pW3IrMV07aVtyKzFdPW8/bysiICIrZTplfX0pfXJldHVybiBpfWZ1bmN0aW9uIEpyKHQsZSl7cmV0dXJuIGUuc3R5bGVzJiZlLnN0eWxlc1swXT09dC5zdGF0ZS5tb2RlR2VufHwoZS5zdHlsZXM9UXIodCxlLGUuc3RhdGVBZnRlcj16KHQsYm4oZSkpKSksZS5zdHlsZXN9ZnVuY3Rpb24gdG4odCxlLHIsbil7dmFyIGk9dC5kb2MubW9kZSxvPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3Ioby5zdGFydD1vLnBvcz1ufHwwLCIiPT1lJiZpLmJsYW5rTGluZSYmaS5ibGFua0xpbmUocik7IW8uZW9sKCkmJm8ucG9zPD10Lm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoOylpLnRva2VuKG8sciksby5zdGFydD1vLnBvc31mdW5jdGlvbiBlbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2Zvcig7Oyl7dmFyIHI9dC5tYXRjaCgvKD86XnxccylsaW5lLShiYWNrZ3JvdW5kLSk/KFxTKykvKTtpZighcilicmVhazt0PXQuc2xpY2UoMCxyLmluZGV4KSt0LnNsaWNlKHIuaW5kZXgrclswXS5sZW5ndGgpO3ZhciBuPXJbMV0/ImJnQ2xhc3MiOiJ0ZXh0Q2xhc3MiO251bGw9PWVbbl0/ZVtuXT1yWzJdOm5ldyBSZWdFeHAoIig/Ol58cykiK3JbMl0rIig/OiR8cykiKS50ZXN0KGVbbl0pfHwoZVtuXSs9IiAiK3JbMl0pfXJldHVybiB4b1t0XXx8KHhvW3RdPSJjbS0iK3QucmVwbGFjZSgvICsvZywiIGNtLSIpKX1mdW5jdGlvbiBybih0LGUscixuKXtmb3IodmFyIGksbz1lLGw9ITA7aT1ScihvKTspbz1nbih0LmRvYyxpLmZpbmQoKS5mcm9tLmxpbmUpO3ZhciBzPXtwcmU6c2koInByZSIpLGNvbDowLHBvczowLG1lYXN1cmU6bnVsbCxtZWFzdXJlZFNvbWV0aGluZzohMSxjbTp0LGNvcHlXaWRnZXRzOm59O2Rve28udGV4dCYmKGw9ITEpLHMubWVhc3VyZT1vPT1lJiZyLHMucG9zPTAscy5hZGRUb2tlbj1zLm1lYXN1cmU/bG46b24sKEFpfHxXaSkmJnQuZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSYmKHMuYWRkVG9rZW49c24ocy5hZGRUb2tlbikpO3ZhciBhPXVuKG8scyxKcih0LG8pKTtyJiZvPT1lJiYhcy5tZWFzdXJlZFNvbWV0aGluZyYmKHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKSxzLm1lYXN1cmVkU29tZXRoaW5nPSEwKSxhJiYobz1nbih0LmRvYyxhLnRvLmxpbmUpKX13aGlsZShhKTshcnx8cy5tZWFzdXJlZFNvbWV0aGluZ3x8clswXXx8KHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQobD9zaSgic3BhbiIsIsKgIik6cGkodC5kaXNwbGF5Lm1lYXN1cmUpKSkscy5wcmUuZmlyc3RDaGlsZHx8VnIodC5kb2MsZSl8fHMucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCLCoCIpKTt2YXIgdTtpZihyJiYoQWl8fERpKSYmKHU9d24obykpKXt2YXIgYz11Lmxlbmd0aC0xO3VbY10uZnJvbT09dVtjXS50byYmLS1jO3ZhciBmPXVbY10saD11W2MtMV07aWYoZi5mcm9tKzE9PWYudG8mJmgmJmYubGV2ZWw8aC5sZXZlbCl7dmFyIGQ9cltzLnBvcy0xXTtkJiZkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGQubWVhc3VyZVJpZ2h0PXBpKHQuZGlzcGxheS5tZWFzdXJlKSxkLm5leHRTaWJsaW5nKX19dmFyIHA9cy50ZXh0Q2xhc3M/cy50ZXh0Q2xhc3MrIiAiKyhlLnRleHRDbGFzc3x8IiIpOmUudGV4dENsYXNzO3JldHVybiBwJiYocy5wcmUuY2xhc3NOYW1lPXApLEtuKHQsInJlbmRlckxpbmUiLHQsZSxzLnByZSksc31mdW5jdGlvbiBubih0KXt2YXIgZT1zaSgic3BhbiIsIuKAoiIsImNtLWludmFsaWRjaGFyIik7cmV0dXJuIGUudGl0bGU9IlxcdSIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSxlfWZ1bmN0aW9uIG9uKHQsZSxyLG4saSxvKXtpZihlKXt2YXIgbD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJzO2lmKGwudGVzdChlKSlmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MDs7KXtsLmxhc3RJbmRleD1hO3ZhciB1PWwuZXhlYyhlKSxjPXU/dS5pbmRleC1hOmUubGVuZ3RoLWE7aWYoYyYmKHMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZS5zbGljZShhLGErYykpKSx0LmNvbCs9YyksIXUpYnJlYWs7aWYoYSs9YysxLCIJIj09dVswXSl7dmFyIGY9dC5jbS5vcHRpb25zLnRhYlNpemUsaD1mLXQuY29sJWY7cy5hcHBlbmRDaGlsZChzaSgic3BhbiIscW4oaCksImNtLXRhYiIpKSx0LmNvbCs9aH1lbHNle3ZhciBkPXQuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKHVbMF0pO3MuYXBwZW5kQ2hpbGQoZCksdC5jb2wrPTF9fWVsc2V7dC5jb2wrPWUubGVuZ3RoO3ZhciBzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpfWlmKHJ8fG58fGl8fHQubWVhc3VyZSl7dmFyIHA9cnx8IiI7biYmKHArPW4pLGkmJihwKz1pKTt2YXIgZD1zaSgic3BhbiIsW3NdLHApO3JldHVybiBvJiYoZC50aXRsZT1vKSx0LnByZS5hcHBlbmRDaGlsZChkKX10LnByZS5hcHBlbmRDaGlsZChzKX19ZnVuY3Rpb24gbG4odCxlLHIsbixpKXtmb3IodmFyIG89dC5jbS5vcHRpb25zLmxpbmVXcmFwcGluZyxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBzPWUuY2hhckF0KGwpLGE9MD09bDtzPj0i7aCAIiYmIu2vvyI+cyYmbDxlLmxlbmd0aC0xPyhzPWUuc2xpY2UobCxsKzIpLCsrbCk6bCYmbyYmaGkoZSxsKSYmdC5wcmUuYXBwZW5kQ2hpbGQoc2koIndiciIpKTt2YXIgdT10Lm1lYXN1cmVbdC5wb3NdLGM9dC5tZWFzdXJlW3QucG9zXT1vbih0LHMscixhJiZuLGw9PWUubGVuZ3RoLTEmJmkpO3UmJihjLmxlZnRTaWRlPXUubGVmdFNpZGV8fHUpLEFpJiZvJiYiICI9PXMmJmwmJiEvXHMvLnRlc3QoZS5jaGFyQXQobC0xKSkmJmw8ZS5sZW5ndGgtMSYmIS9ccy8udGVzdChlLmNoYXJBdChsKzEpKSYmKGMuc3R5bGUud2hpdGVTcGFjZT0ibm9ybWFsIiksdC5wb3MrPXMubGVuZ3RofWUubGVuZ3RoJiYodC5tZWFzdXJlZFNvbWV0aGluZz0hMCl9ZnVuY3Rpb24gc24odCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9IiAiLHI9MDtyPHQubGVuZ3RoLTI7KytyKWUrPXIlMj8iICI6IsKgIjtyZXR1cm4gZSs9IiAifXJldHVybiBmdW5jdGlvbihyLG4saSxvLGwscyl7cmV0dXJuIHQocixuLnJlcGxhY2UoLyB7Myx9L2csZSksaSxvLGwscyl9fWZ1bmN0aW9uIGFuKHQsZSxyLG4pe3ZhciBpPSFuJiZyLnJlcGxhY2VkV2l0aDtpZihpJiYodC5jb3B5V2lkZ2V0cyYmKGk9aS5jbG9uZU5vZGUoITApKSx0LnByZS5hcHBlbmRDaGlsZChpKSx0Lm1lYXN1cmUpKXtpZihlKXQubWVhc3VyZVt0LnBvc109aTtlbHNle3ZhciBvPXBpKHQuY20uZGlzcGxheS5tZWFzdXJlKTtpZigiYm9va21hcmsiIT1yLnR5cGV8fHIuaW5zZXJ0TGVmdCl7aWYodC5tZWFzdXJlW3QucG9zXSlyZXR1cm47dC5tZWFzdXJlW3QucG9zXT10LnByZS5pbnNlcnRCZWZvcmUobyxpKX1lbHNlIHQubWVhc3VyZVt0LnBvc109dC5wcmUuYXBwZW5kQ2hpbGQobyl9dC5tZWFzdXJlZFNvbWV0aGluZz0hMH10LnBvcys9ZX1mdW5jdGlvbiB1bih0LGUscil7dmFyIG49dC5tYXJrZWRTcGFucyxpPXQudGV4dCxvPTA7aWYobilmb3IodmFyIGwscyxhLHUsYyxmLGg9aS5sZW5ndGgsZD0wLHA9MSxnPSIiLG09MDs7KXtpZihtPT1kKXtzPWE9dT1jPSIiLGY9bnVsbCxtPTEvMDtmb3IodmFyIHY9W10seT0wO3k8bi5sZW5ndGg7Kyt5KXt2YXIgYj1uW3ldLHg9Yi5tYXJrZXI7Yi5mcm9tPD1kJiYobnVsbD09Yi50b3x8Yi50bz5kKT8obnVsbCE9Yi50byYmbT5iLnRvJiYobT1iLnRvLGE9IiIpLHguY2xhc3NOYW1lJiYocys9IiAiK3guY2xhc3NOYW1lKSx4LnN0YXJ0U3R5bGUmJmIuZnJvbT09ZCYmKHUrPSIgIit4LnN0YXJ0U3R5bGUpLHguZW5kU3R5bGUmJmIudG89PW0mJihhKz0iICIreC5lbmRTdHlsZSkseC50aXRsZSYmIWMmJihjPXgudGl0bGUpLHguY29sbGFwc2VkJiYoIWZ8fGYubWFya2VyLnNpemU8eC5zaXplKSYmKGY9YikpOmIuZnJvbT5kJiZtPmIuZnJvbSYmKG09Yi5mcm9tKSwiYm9va21hcmsiPT14LnR5cGUmJmIuZnJvbT09ZCYmeC5yZXBsYWNlZFdpdGgmJnYucHVzaCh4KQp9aWYoZiYmKGYuZnJvbXx8MCk9PWQmJihhbihlLChudWxsPT1mLnRvP2g6Zi50byktZCxmLm1hcmtlcixudWxsPT1mLmZyb20pLG51bGw9PWYudG8pKXJldHVybiBmLm1hcmtlci5maW5kKCk7aWYoIWYmJnYubGVuZ3RoKWZvcih2YXIgeT0wO3k8di5sZW5ndGg7Kyt5KWFuKGUsMCx2W3ldKX1pZihkPj1oKWJyZWFrO2Zvcih2YXIgQz1NYXRoLm1pbihoLG0pOzspe2lmKGcpe3ZhciB3PWQrZy5sZW5ndGg7aWYoIWYpe3ZhciBMPXc+Qz9nLnNsaWNlKDAsQy1kKTpnO2UuYWRkVG9rZW4oZSxMLGw/bCtzOnMsdSxkK0wubGVuZ3RoPT1tP2E6IiIsYyl9aWYodz49Qyl7Zz1nLnNsaWNlKEMtZCksZD1DO2JyZWFrfWQ9dyx1PSIifWc9aS5zbGljZShvLG89cltwKytdKSxsPWVuKHJbcCsrXSxlKX19ZWxzZSBmb3IodmFyIHA9MTtwPHIubGVuZ3RoO3ArPTIpZS5hZGRUb2tlbihlLGkuc2xpY2UobyxvPXJbcF0pLGVuKHJbcCsxXSxlKSl9ZnVuY3Rpb24gY24odCxlLHIsbixpKXtmdW5jdGlvbiBvKHQpe3JldHVybiByP3JbdF06bnVsbH1mdW5jdGlvbiBsKHQscixuKXskcih0LHIsbixpKSxVbih0LCJjaGFuZ2UiLHQsZSl9dmFyIHM9ZS5mcm9tLGE9ZS50byx1PWUudGV4dCxjPWduKHQscy5saW5lKSxmPWduKHQsYS5saW5lKSxoPVFuKHUpLGQ9byh1Lmxlbmd0aC0xKSxwPWEubGluZS1zLmxpbmU7aWYoMCE9cy5jaHx8MCE9YS5jaHx8IiIhPWh8fHQuY20mJiF0LmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKWlmKGM9PWYpaWYoMT09dS5sZW5ndGgpbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK2grYy50ZXh0LnNsaWNlKGEuY2gpLGQpO2Vsc2V7Zm9yKHZhciBnPVtdLG09MSx2PXUubGVuZ3RoLTE7dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7Zy5wdXNoKG5ldyBibyhoK2MudGV4dC5zbGljZShhLmNoKSxkLGkpKSxsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSx0Lmluc2VydChzLmxpbmUrMSxnKX1lbHNlIGlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdK2YudGV4dC5zbGljZShhLmNoKSxvKDApKSx0LnJlbW92ZShzLmxpbmUrMSxwKTtlbHNle2woYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdLG8oMCkpLGwoZixoK2YudGV4dC5zbGljZShhLmNoKSxkKTtmb3IodmFyIG09MSx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtwPjEmJnQucmVtb3ZlKHMubGluZSsxLHAtMSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZXtmb3IodmFyIG09MCx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtsKGYsZi50ZXh0LGQpLHAmJnQucmVtb3ZlKHMubGluZSxwKSxnLmxlbmd0aCYmdC5pbnNlcnQocy5saW5lLGcpfVVuKHQsImNoYW5nZSIsdCxlKSxucih0LG4uYW5jaG9yLG4uaGVhZCxudWxsLCEwKX1mdW5jdGlvbiBmbih0KXt0aGlzLmxpbmVzPXQsdGhpcy5wYXJlbnQ9bnVsbDtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49MDtyPmU7KytlKXRbZV0ucGFyZW50PXRoaXMsbis9dFtlXS5oZWlnaHQ7dGhpcy5oZWlnaHQ9bn1mdW5jdGlvbiBobih0KXt0aGlzLmNoaWxkcmVuPXQ7Zm9yKHZhciBlPTAscj0wLG49MCxpPXQubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRbbl07ZSs9by5jaHVua1NpemUoKSxyKz1vLmhlaWdodCxvLnBhcmVudD10aGlzfXRoaXMuc2l6ZT1lLHRoaXMuaGVpZ2h0PXIsdGhpcy5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBkbih0LGUscil7ZnVuY3Rpb24gbih0LGksbyl7aWYodC5saW5rZWQpZm9yKHZhciBsPTA7bDx0LmxpbmtlZC5sZW5ndGg7KytsKXt2YXIgcz10LmxpbmtlZFtsXTtpZihzLmRvYyE9aSl7dmFyIGE9byYmcy5zaGFyZWRIaXN0Oyghcnx8YSkmJihlKHMuZG9jLGEpLG4ocy5kb2MsdCxhKSl9fX1uKHQsbnVsbCwhMCl9ZnVuY3Rpb24gcG4odCxlKXtpZihlLmNtKXRocm93IG5ldyBFcnJvcigiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS4iKTt0LmRvYz1lLGUuY209dCxvKHQpLHIodCksdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8Zih0KSx0Lm9wdGlvbnMubW9kZT1lLm1vZGVPcHRpb24sdWUodCl9ZnVuY3Rpb24gZ24odCxlKXtmb3IoZS09dC5maXJzdDshdC5saW5lczspZm9yKHZhciByPTA7Oysrcil7dmFyIG49dC5jaGlsZHJlbltyXSxpPW4uY2h1bmtTaXplKCk7aWYoaT5lKXt0PW47YnJlYWt9ZS09aX1yZXR1cm4gdC5saW5lc1tlXX1mdW5jdGlvbiBtbih0LGUscil7dmFyIG49W10saT1lLmxpbmU7cmV0dXJuIHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7dmFyIG89dC50ZXh0O2k9PXIubGluZSYmKG89by5zbGljZSgwLHIuY2gpKSxpPT1lLmxpbmUmJihvPW8uc2xpY2UoZS5jaCkpLG4ucHVzaChvKSwrK2l9KSxufWZ1bmN0aW9uIHZuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5pdGVyKGUscixmdW5jdGlvbih0KXtuLnB1c2godC50ZXh0KX0pLG59ZnVuY3Rpb24geW4odCxlKXtmb3IodmFyIHI9ZS10LmhlaWdodCxuPXQ7bjtuPW4ucGFyZW50KW4uaGVpZ2h0Kz1yfWZ1bmN0aW9uIGJuKHQpe2lmKG51bGw9PXQucGFyZW50KXJldHVybiBudWxsO2Zvcih2YXIgZT10LnBhcmVudCxyPXRpKGUubGluZXMsdCksbj1lLnBhcmVudDtuO2U9bixuPW4ucGFyZW50KWZvcih2YXIgaT0wO24uY2hpbGRyZW5baV0hPWU7KytpKXIrPW4uY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7cmV0dXJuIHIrZS5maXJzdH1mdW5jdGlvbiB4bih0LGUpe3ZhciByPXQuZmlyc3Q7dDpkb3tmb3IodmFyIG49MCxpPXQuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXQuY2hpbGRyZW5bbl0sbD1vLmhlaWdodDtpZihsPmUpe3Q9bztjb250aW51ZSB0fWUtPWwscis9by5jaHVua1NpemUoKX1yZXR1cm4gcn13aGlsZSghdC5saW5lcyk7Zm9yKHZhciBuPTAsaT10LmxpbmVzLmxlbmd0aDtpPm47KytuKXt2YXIgcz10LmxpbmVzW25dLGE9cy5oZWlnaHQ7aWYoYT5lKWJyZWFrO2UtPWF9cmV0dXJuIHIrbn1mdW5jdGlvbiBDbih0LGUpe2U9R3IodC5kb2MsZSk7Zm9yKHZhciByPTAsbj1lLnBhcmVudCxpPTA7aTxuLmxpbmVzLmxlbmd0aDsrK2kpe3ZhciBvPW4ubGluZXNbaV07aWYobz09ZSlicmVhaztyKz1vLmhlaWdodH1mb3IodmFyIGw9bi5wYXJlbnQ7bDtuPWwsbD1uLnBhcmVudClmb3IodmFyIGk9MDtpPGwuY2hpbGRyZW4ubGVuZ3RoOysraSl7dmFyIHM9bC5jaGlsZHJlbltpXTtpZihzPT1uKWJyZWFrO3IrPXMuaGVpZ2h0fXJldHVybiByfWZ1bmN0aW9uIHduKHQpe3ZhciBlPXQub3JkZXI7cmV0dXJuIG51bGw9PWUmJihlPXQub3JkZXI9Qm8odC50ZXh0KSksZX1mdW5jdGlvbiBMbih0KXtyZXR1cm57ZG9uZTpbXSx1bmRvbmU6W10sdW5kb0RlcHRoOjEvMCxsYXN0VGltZTowLGxhc3RPcDpudWxsLGxhc3RPcmlnaW46bnVsbCxnZW5lcmF0aW9uOnR8fDEsbWF4R2VuZXJhdGlvbjp0fHwxfX1mdW5jdGlvbiBrbih0LGUscixuKXt2YXIgaT1lWyJzcGFuc18iK3QuaWRdLG89MDt0Lml0ZXIoTWF0aC5tYXgodC5maXJzdCxyKSxNYXRoLm1pbih0LmZpcnN0K3Quc2l6ZSxuKSxmdW5jdGlvbihyKXtyLm1hcmtlZFNwYW5zJiYoKGl8fChpPWVbInNwYW5zXyIrdC5pZF09e30pKVtvXT1yLm1hcmtlZFNwYW5zKSwrK299KX1mdW5jdGlvbiBTbih0LGUpe3ZhciByPXtsaW5lOmUuZnJvbS5saW5lLGNoOmUuZnJvbS5jaH0sbj17ZnJvbTpyLHRvOmxvKGUpLHRleHQ6bW4odCxlLmZyb20sZS50byl9O3JldHVybiBrbih0LG4sZS5mcm9tLmxpbmUsZS50by5saW5lKzEpLGRuKHQsZnVuY3Rpb24odCl7a24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKX0sITApLG59ZnVuY3Rpb24gTW4odCxlLHIsbil7dmFyIGk9dC5oaXN0b3J5O2kudW5kb25lLmxlbmd0aD0wO3ZhciBvPStuZXcgRGF0ZSxsPVFuKGkuZG9uZSk7aWYobCYmKGkubGFzdE9wPT1ufHxpLmxhc3RPcmlnaW49PWUub3JpZ2luJiZlLm9yaWdpbiYmKCIrIj09ZS5vcmlnaW4uY2hhckF0KDApJiZ0LmNtJiZpLmxhc3RUaW1lPm8tdC5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5fHwiKiI9PWUub3JpZ2luLmNoYXJBdCgwKSkpKXt2YXIgcz1RbihsLmNoYW5nZXMpO2plKGUuZnJvbSxlLnRvKSYmamUoZS5mcm9tLHMudG8pP3MudG89bG8oZSk6bC5jaGFuZ2VzLnB1c2goU24odCxlKSksbC5hbmNob3JBZnRlcj1yLmFuY2hvcixsLmhlYWRBZnRlcj1yLmhlYWR9ZWxzZSBmb3IobD17Y2hhbmdlczpbU24odCxlKV0sZ2VuZXJhdGlvbjppLmdlbmVyYXRpb24sYW5jaG9yQmVmb3JlOnQuc2VsLmFuY2hvcixoZWFkQmVmb3JlOnQuc2VsLmhlYWQsYW5jaG9yQWZ0ZXI6ci5hbmNob3IsaGVhZEFmdGVyOnIuaGVhZH0saS5kb25lLnB1c2gobCksaS5nZW5lcmF0aW9uPSsraS5tYXhHZW5lcmF0aW9uO2kuZG9uZS5sZW5ndGg+aS51bmRvRGVwdGg7KWkuZG9uZS5zaGlmdCgpO2kubGFzdFRpbWU9byxpLmxhc3RPcD1uLGkubGFzdE9yaWdpbj1lLm9yaWdpbn1mdW5jdGlvbiBUbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGUscj0wO3I8dC5sZW5ndGg7KytyKXRbcl0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkP2V8fChlPXQuc2xpY2UoMCxyKSk6ZSYmZS5wdXNoKHRbcl0pO3JldHVybiBlP2UubGVuZ3RoP2U6bnVsbDp0fWZ1bmN0aW9uIEFuKHQsZSl7dmFyIHI9ZVsic3BhbnNfIit0LmlkXTtpZighcilyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxpPVtdO248ZS50ZXh0Lmxlbmd0aDsrK24paS5wdXNoKFRuKHJbbl0pKTtyZXR1cm4gaX1mdW5jdGlvbiBIbih0LGUpe2Zvcih2YXIgcj0wLG49W107cjx0Lmxlbmd0aDsrK3Ipe3ZhciBpPXRbcl0sbz1pLmNoYW5nZXMsbD1bXTtuLnB1c2goe2NoYW5nZXM6bCxhbmNob3JCZWZvcmU6aS5hbmNob3JCZWZvcmUsaGVhZEJlZm9yZTppLmhlYWRCZWZvcmUsYW5jaG9yQWZ0ZXI6aS5hbmNob3JBZnRlcixoZWFkQWZ0ZXI6aS5oZWFkQWZ0ZXJ9KTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoOysrcyl7dmFyIGEsdT1vW3NdO2lmKGwucHVzaCh7ZnJvbTp1LmZyb20sdG86dS50byx0ZXh0OnUudGV4dH0pLGUpZm9yKHZhciBjIGluIHUpKGE9Yy5tYXRjaCgvXnNwYW5zXyhcZCspJC8pKSYmdGkoZSxOdW1iZXIoYVsxXSkpPi0xJiYoUW4obClbY109dVtjXSxkZWxldGUgdVtjXSl9fXJldHVybiBufWZ1bmN0aW9uIE5uKHQsZSxyLG4pe3I8dC5saW5lP3QubGluZSs9bjplPHQubGluZSYmKHQubGluZT1lLHQuY2g9MCl9ZnVuY3Rpb24gRG4odCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe2Zvcih2YXIgbz10W2ldLGw9ITAscz0wO3M8by5jaGFuZ2VzLmxlbmd0aDsrK3Mpe3ZhciBhPW8uY2hhbmdlc1tzXTtpZihvLmNvcGllZHx8KGEuZnJvbT1aZShhLmZyb20pLGEudG89WmUoYS50bykpLHI8YS5mcm9tLmxpbmUpYS5mcm9tLmxpbmUrPW4sYS50by5saW5lKz1uO2Vsc2UgaWYoZTw9YS50by5saW5lKXtsPSExO2JyZWFrfX1vLmNvcGllZHx8KG8uYW5jaG9yQmVmb3JlPVplKG8uYW5jaG9yQmVmb3JlKSxvLmhlYWRCZWZvcmU9WmUoby5oZWFkQmVmb3JlKSxvLmFuY2hvckFmdGVyPVplKG8uYW5jaG9yQWZ0ZXIpLG8ucmVhZEFmdGVyPVplKG8uaGVhZEFmdGVyKSxvLmNvcGllZD0hMCksbD8oTm4oby5hbmNob3JCZWZvcmUpLE5uKG8uaGVhZEJlZm9yZSksTm4oby5hbmNob3JBZnRlciksTm4oby5oZWFkQWZ0ZXIpKToodC5zcGxpY2UoMCxpKzEpLGk9MCl9fWZ1bmN0aW9uIFduKHQsZSl7dmFyIHI9ZS5mcm9tLmxpbmUsbj1lLnRvLmxpbmUsaT1lLnRleHQubGVuZ3RoLShuLXIpLTE7RG4odC5kb25lLHIsbixpKSxEbih0LnVuZG9uZSxyLG4saSl9ZnVuY3Rpb24gT24oKXtQbih0aGlzKX1mdW5jdGlvbiBFbih0KXtyZXR1cm4gdC5zdG9wfHwodC5zdG9wPU9uKSx0fWZ1bmN0aW9uIHpuKHQpe3QucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITF9ZnVuY3Rpb24gSW4odCl7dC5zdG9wUHJvcGFnYXRpb24/dC5zdG9wUHJvcGFnYXRpb24oKTp0LmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBGbih0KXtyZXR1cm4gbnVsbCE9dC5kZWZhdWx0UHJldmVudGVkP3QuZGVmYXVsdFByZXZlbnRlZDowPT10LnJldHVyblZhbHVlfWZ1bmN0aW9uIFBuKHQpe3puKHQpLEluKHQpfWZ1bmN0aW9uIFJuKHQpe3JldHVybiB0LnRhcmdldHx8dC5zcmNFbGVtZW50fWZ1bmN0aW9uIEJuKHQpe3ZhciBlPXQud2hpY2g7cmV0dXJuIG51bGw9PWUmJigxJnQuYnV0dG9uP2U9MToyJnQuYnV0dG9uP2U9Mzo0JnQuYnV0dG9uJiYoZT0yKSksS2kmJnQuY3RybEtleSYmMT09ZSYmKGU9MyksZX1mdW5jdGlvbiBHbih0LGUscil7aWYodC5hZGRFdmVudExpc3RlbmVyKXQuYWRkRXZlbnRMaXN0ZW5lcihlLHIsITEpO2Vsc2UgaWYodC5hdHRhY2hFdmVudCl0LmF0dGFjaEV2ZW50KCJvbiIrZSxyKTtlbHNle3ZhciBuPXQuX2hhbmRsZXJzfHwodC5faGFuZGxlcnM9e30pLGk9bltlXXx8KG5bZV09W10pO2kucHVzaChyKX19ZnVuY3Rpb24gVm4odCxlLHIpe2lmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcil0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuZGV0YWNoRXZlbnQpdC5kZXRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYoIW4pcmV0dXJuO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7KytpKWlmKG5baV09PXIpe24uc3BsaWNlKGksMSk7YnJlYWt9fX1mdW5jdGlvbiBLbih0LGUpe3ZhciByPXQuX2hhbmRsZXJzJiZ0Ll9oYW5kbGVyc1tlXTtpZihyKWZvcih2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMiksaT0wO2k8ci5sZW5ndGg7KytpKXJbaV0uYXBwbHkobnVsbCxuKX1mdW5jdGlvbiBVbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dC5hcHBseShudWxsLGkpfX12YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYobil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO1NvfHwoKytNbyxTbz1bXSxzZXRUaW1lb3V0KF9uLDApKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbylTby5wdXNoKHIobltvXSkpfX1mdW5jdGlvbiBYbih0LGUscil7cmV0dXJuIEtuKHQscnx8ZS50eXBlLHQsZSksRm4oZSl8fGUuY29kZW1pcnJvcklnbm9yZX1mdW5jdGlvbiBfbigpey0tTW87dmFyIHQ9U287U289bnVsbDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdKCl9ZnVuY3Rpb24gWW4odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07cmV0dXJuIHImJnIubGVuZ3RoPjB9ZnVuY3Rpb24gam4odCl7dC5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXtHbih0aGlzLHQsZSl9LHQucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe1ZuKHRoaXMsdCxlKX19ZnVuY3Rpb24gJG4oKXt0aGlzLmlkPW51bGx9ZnVuY3Rpb24gWm4odCxlLHIsbixpKXtudWxsPT1lJiYoZT10LnNlYXJjaCgvW15cc1x1MDBhMF0vKSwtMT09ZSYmKGU9dC5sZW5ndGgpKTtmb3IodmFyIG89bnx8MCxsPWl8fDA7ZT5vOysrbykiCSI9PXQuY2hhckF0KG8pP2wrPXItbCVyOisrbDtyZXR1cm4gbH1mdW5jdGlvbiBxbih0KXtmb3IoO0hvLmxlbmd0aDw9dDspSG8ucHVzaChRbihIbykrIiAiKTtyZXR1cm4gSG9bdF19ZnVuY3Rpb24gUW4odCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gSm4odCl7aWYoR2kpdC5zZWxlY3Rpb25TdGFydD0wLHQuc2VsZWN0aW9uRW5kPXQudmFsdWUubGVuZ3RoO2Vsc2UgdHJ5e3Quc2VsZWN0KCl9Y2F0Y2goZSl7fX1mdW5jdGlvbiB0aSh0LGUpe2lmKHQuaW5kZXhPZilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7bj5yOysrcilpZih0W3JdPT1lKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGVpKHQsZSl7ZnVuY3Rpb24gcigpe31yLnByb3RvdHlwZT10O3ZhciBuPW5ldyByO3JldHVybiBlJiZyaShlLG4pLG59ZnVuY3Rpb24gcmkodCxlKXtlfHwoZT17fSk7Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmkodCl7Zm9yKHZhciBlPVtdLHI9MDt0PnI7KytyKWUucHVzaCh2b2lkIDApO3JldHVybiBlfWZ1bmN0aW9uIGlpKHQpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShudWxsLGUpfX1mdW5jdGlvbiBvaSh0KXtyZXR1cm4vXHcvLnRlc3QodCl8fHQ+IsKAIiYmKHQudG9VcHBlckNhc2UoKSE9dC50b0xvd2VyQ2FzZSgpfHxOby50ZXN0KHQpKX1mdW5jdGlvbiBsaSh0KXtmb3IodmFyIGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpJiZ0W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7aWYociYmKGkuY2xhc3NOYW1lPXIpLG4mJihpLnN0eWxlLmNzc1RleHQ9biksInN0cmluZyI9PXR5cGVvZiBlKWNpKGksZSk7ZWxzZSBpZihlKWZvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKWkuYXBwZW5kQ2hpbGQoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gYWkodCl7Zm9yKHZhciBlPXQuY2hpbGROb2Rlcy5sZW5ndGg7ZT4wOy0tZSl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCk7cmV0dXJuIHR9ZnVuY3Rpb24gdWkodCxlKXtyZXR1cm4gYWkodCkuYXBwZW5kQ2hpbGQoZSl9ZnVuY3Rpb24gY2kodCxlKXtOaT8odC5pbm5lckhUTUw9IiIsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSkpOnQudGV4dENvbnRlbnQ9ZX1mdW5jdGlvbiBmaSh0KXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1mdW5jdGlvbiBoaSgpe3JldHVybiExfWZ1bmN0aW9uIGRpKHQpe2lmKG51bGwhPU9vKXJldHVybiBPbzt2YXIgZT1zaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7IG92ZXJmbG93LXg6IHNjcm9sbCIpO3JldHVybiB1aSh0LGUpLGUub2Zmc2V0V2lkdGgmJihPbz1lLm9mZnNldEhlaWdodC1lLmNsaWVudEhlaWdodCksT298fDB9ZnVuY3Rpb24gcGkodCl7aWYobnVsbD09RW8pe3ZhciBlPXNpKCJzcGFuIiwi4oCLIik7dWkodCxzaSgic3BhbiIsW2UsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKV0pKSwwIT10LmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0JiYoRW89ZS5vZmZzZXRXaWR0aDw9MSYmZS5vZmZzZXRIZWlnaHQ+MiYmIUhpKX1yZXR1cm4gRW8/c2koInNwYW4iLCLigIsiKTpzaSgic3BhbiIsIsKgIixudWxsLCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpfWZ1bmN0aW9uIGdpKHQsZSxyLG4pe2lmKCF0KXJldHVybiBuKGUsciwibHRyIik7Zm9yKHZhciBpPSExLG89MDtvPHQubGVuZ3RoOysrbyl7dmFyIGw9dFtvXTsobC5mcm9tPHImJmwudG8+ZXx8ZT09ciYmbC50bz09ZSkmJihuKE1hdGgubWF4KGwuZnJvbSxlKSxNYXRoLm1pbihsLnRvLHIpLDE9PWwubGV2ZWw/InJ0bCI6Imx0ciIpLGk9ITApfWl8fG4oZSxyLCJsdHIiKX1mdW5jdGlvbiBtaSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QudG86dC5mcm9tfWZ1bmN0aW9uIHZpKHQpe3JldHVybiB0LmxldmVsJTI/dC5mcm9tOnQudG99ZnVuY3Rpb24geWkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/bWkoZVswXSk6MH1mdW5jdGlvbiBiaSh0KXt2YXIgZT13bih0KTtyZXR1cm4gZT92aShRbihlKSk6dC50ZXh0Lmxlbmd0aH1mdW5jdGlvbiB4aSh0LGUpe3ZhciByPWduKHQuZG9jLGUpLG49R3IodC5kb2Mscik7biE9ciYmKGU9Ym4obikpO3ZhciBpPXduKG4pLG89aT9pWzBdLmxldmVsJTI/Ymkobik6eWkobik6MDtyZXR1cm4gWWUoZSxvKX1mdW5jdGlvbiBDaSh0LGUpe2Zvcih2YXIgcixuO3I9QnIobj1nbih0LmRvYyxlKSk7KWU9ci5maW5kKCkudG8ubGluZTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP3lpKG4pOmJpKG4pOm4udGV4dC5sZW5ndGg7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gd2kodCxlLHIpe3ZhciBuPXRbMF0ubGV2ZWw7cmV0dXJuIGU9PW4/ITA6cj09bj8hMTpyPmV9ZnVuY3Rpb24gTGkodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXt2YXIgaT10W25dO2lmKGkuZnJvbTxlJiZpLnRvPmUpcmV0dXJuIFJvPW51bGwsbjtpZihpLmZyb209PWV8fGkudG89PWUpe2lmKG51bGwhPXIpcmV0dXJuIHdpKHQsaS5sZXZlbCx0W3JdLmxldmVsKT8oUm89cixuKTooUm89bixyKTtyPW59fXJldHVybiBSbz1udWxsLHJ9ZnVuY3Rpb24ga2kodCxlLHIsbil7aWYoIW4pcmV0dXJuIGUrcjtkbyBlKz1yO3doaWxlKGU+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGUpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gU2kodCxlLHIsbil7dmFyIGk9d24odCk7aWYoIWkpcmV0dXJuIE1pKHQsZSxyLG4pO2Zvcih2YXIgbz1MaShpLGUpLGw9aVtvXSxzPWtpKHQsZSxsLmxldmVsJTI/LXI6cixuKTs7KXtpZihzPmwuZnJvbSYmczxsLnRvKXJldHVybiBzO2lmKHM9PWwuZnJvbXx8cz09bC50bylyZXR1cm4gTGkoaSxzKT09bz9zOihsPWlbbys9cl0scj4wPT1sLmxldmVsJTI/bC50bzpsLmZyb20pO2lmKGw9aVtvKz1yXSwhbClyZXR1cm4gbnVsbDtzPXI+MD09bC5sZXZlbCUyP2tpKHQsbC50bywtMSxuKTpraSh0LGwuZnJvbSwxLG4pfX1mdW5jdGlvbiBNaSh0LGUscixuKXt2YXIgaT1lK3I7aWYobilmb3IoO2k+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGkpKTspaSs9cjtyZXR1cm4gMD5pfHxpPnQudGV4dC5sZW5ndGg/bnVsbDppfXZhciBUaT0vZ2Vja29cL1xkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxBaT0vTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxIaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDgpLE5pPUFpJiYobnVsbD09ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU8OSksRGk9L1RyaWRlbnRcLyhbNy05XXxcZHsyLH0pXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksV2k9L1dlYktpdFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLE9pPVdpJiYvUXRcL1xkK1wuXGQrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEVpPS9DaHJvbWVcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx6aT0vT3BlcmFcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxJaT0vQXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvciksRmk9L0tIVE1MXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUGk9L01hYyBPUyBYIDFcZFxEKFs3LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUmk9L01hYyBPUyBYIDFcZFxEKFs4LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQmk9L1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxHaT0vQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJi9Nb2JpbGVcL1x3Ky8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxWaT1HaXx8L0FuZHJvaWR8d2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEtpPUdpfHwvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksVWk9L3dpbi9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxYaT16aSYmbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwvKFxkKlwuXGQqKS8pO1hpJiYoWGk9TnVtYmVyKFhpWzFdKSksWGkmJlhpPj0xNSYmKHppPSExLFdpPSEwKTt2YXIgX2ksWWksamksJGk9S2kmJihPaXx8emkmJihudWxsPT1YaXx8MTIuMTE+WGkpKSxaaT1UaXx8QWkmJiFOaSxxaT0hMSxRaT0hMSxKaT0wLHRvPTAsZW89MCxybz1udWxsO0FpP3JvPS0uNTM6VGk/cm89MTU6RWk/cm89LS43OklpJiYocm89LTEvMyk7dmFyIG5vLGlvLG9vPW51bGwsbG89dC5jaGFuZ2VFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dD9ZZSh0LmZyb20ubGluZSt0LnRleHQubGVuZ3RoLTEsUW4odC50ZXh0KS5sZW5ndGgrKDE9PXQudGV4dC5sZW5ndGg/dC5mcm9tLmNoOjApKTp0LnRvfTt0LlBvcz1ZZSx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxmb2N1czpmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpLHBlKHRoaXMpLGZlKHRoaXMpfSxzZXRPcHRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLm9wdGlvbnMsbj1yW3RdOyhyW3RdIT1lfHwibW9kZSI9PXQpJiYoclt0XT1lLHNvLmhhc093blByb3BlcnR5KHQpJiZsZSh0aGlzLHNvW3RdKSh0aGlzLGUsbikpfSxnZXRPcHRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9uc1t0XX0sZ2V0RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jfSxhZGRLZXlNYXA6ZnVuY3Rpb24odCxlKXt0aGlzLnN0YXRlLmtleU1hcHNbZT8icHVzaCI6InVuc2hpZnQiXSh0KX0scmVtb3ZlS2V5TWFwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLmtleU1hcHMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PXR8fCJzdHJpbmciIT10eXBlb2YgZVtyXSYmZVtyXS5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLCEwfSxhZGRPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnRva2VuP2U6dC5nZXRNb2RlKHRoaXMub3B0aW9ucyxlKTtpZihuLnN0YXJ0U3RhdGUpdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLiIpO3RoaXMuc3RhdGUub3ZlcmxheXMucHVzaCh7bW9kZTpuLG1vZGVTcGVjOmUsb3BhcXVlOnImJnIub3BhcXVlfSksdGhpcy5zdGF0ZS5tb2RlR2VuKyssdWUodGhpcyl9KSxyZW1vdmVPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuc3RhdGUub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLm1vZGVTcGVjO2lmKG49PXR8fCJzdHJpbmciPT10eXBlb2YgdCYmbi5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpLHZvaWQgMH19KSxpbmRlbnRMaW5lOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpeyJzdHJpbmciIT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlJiYoZT1udWxsPT1lP3RoaXMub3B0aW9ucy5zbWFydEluZGVudD8ic21hcnQiOiJwcmV2IjplPyJhZGQiOiJzdWJ0cmFjdCIpLHRyKHRoaXMuZG9jLHQpJiZocih0aGlzLHQsZSxyKX0pLGluZGVudFNlbGVjdGlvbjpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jLnNlbDtpZihqZShlLmZyb20sZS50bykpcmV0dXJuIGhyKHRoaXMsZS5mcm9tLmxpbmUsdCk7Zm9yKHZhciByPWUudG8ubGluZS0oZS50by5jaD8wOjEpLG49ZS5mcm9tLmxpbmU7cj49bjsrK24paHIodGhpcyxuLHQpfSksZ2V0VG9rZW5BdDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3Q9UWUocix0KTtmb3IodmFyIG49eih0aGlzLHQubGluZSxlKSxpPXRoaXMuZG9jLm1vZGUsbz1nbihyLHQubGluZSksbD1uZXcgU3Ioby50ZXh0LHRoaXMub3B0aW9ucy50YWJTaXplKTtsLnBvczx0LmNoJiYhbC5lb2woKTspe2wuc3RhcnQ9bC5wb3M7dmFyIHM9aS50b2tlbihsLG4pfXJldHVybntzdGFydDpsLnN0YXJ0LGVuZDpsLnBvcyxzdHJpbmc6bC5jdXJyZW50KCksY2xhc3NOYW1lOnN8fG51bGwsdHlwZTpzfHxudWxsLHN0YXRlOm59fSxnZXRUb2tlblR5cGVBdDpmdW5jdGlvbih0KXt0PVFlKHRoaXMuZG9jLHQpO3ZhciBlPUpyKHRoaXMsZ24odGhpcy5kb2MsdC5saW5lKSkscj0wLG49KGUubGVuZ3RoLTEpLzIsaT10LmNoO2lmKDA9PWkpcmV0dXJuIGVbMl07Zm9yKDs7KXt2YXIgbz1yK24+PjE7aWYoKG8/ZVsyKm8tMV06MCk+PWkpbj1vO2Vsc2V7aWYoIShlWzIqbysxXTxpKSlyZXR1cm4gZVsyKm8rMl07cj1vKzF9fX0sZ2V0TW9kZUF0OmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZG9jLm1vZGU7cmV0dXJuIHIuaW5uZXJNb2RlP3QuaW5uZXJNb2RlKHIsdGhpcy5nZXRUb2tlbkF0KGUpLnN0YXRlKS5tb2RlOnJ9LGdldEhlbHBlcjpmdW5jdGlvbih0LGUpe2lmKGdvLmhhc093blByb3BlcnR5KGUpKXt2YXIgcj1nb1tlXSxuPXRoaXMuZ2V0TW9kZUF0KHQpO3JldHVybiBuW2VdJiZyW25bZV1dfHxuLmhlbHBlclR5cGUmJnJbbi5oZWxwZXJUeXBlXXx8cltuLm5hbWVdfX0sZ2V0U3RhdGVBZnRlcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3JldHVybiB0PXFlKHIsbnVsbD09dD9yLmZpcnN0K3Iuc2l6ZS0xOnQpLHoodGhpcyx0KzEsZSl9LGN1cnNvckNvb3JkczpmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3JldHVybiByPW51bGw9PXQ/bi5oZWFkOiJvYmplY3QiPT10eXBlb2YgdD9RZSh0aGlzLmRvYyx0KTp0P24uZnJvbTpuLnRvLFEodGhpcyxyLGV8fCJwYWdlIil9LGNoYXJDb29yZHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcSh0aGlzLFFlKHRoaXMuZG9jLHQpLGV8fCJwYWdlIil9LGNvb3Jkc0NoYXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1aKHRoaXMsdCxlfHwicGFnZSIpLHRlKHRoaXMsdC5sZWZ0LHQudG9wKX0sbGluZUF0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHt0b3A6dCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wLHhuKHRoaXMuZG9jLHQrdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpfSxoZWlnaHRBdExpbmU6ZnVuY3Rpb24odCxlKXt2YXIgcj0hMSxuPXRoaXMuZG9jLmZpcnN0K3RoaXMuZG9jLnNpemUtMTt0PHRoaXMuZG9jLmZpcnN0P3Q9dGhpcy5kb2MuZmlyc3Q6dD5uJiYodD1uLHI9ITApO3ZhciBpPWduKHRoaXMuZG9jLHQpO3JldHVybiAkKHRoaXMsZ24odGhpcy5kb2MsdCkse3RvcDowLGxlZnQ6MH0sZXx8InBhZ2UiKS50b3ArKHI/aS5oZWlnaHQ6MCl9LGRlZmF1bHRUZXh0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHJlKHRoaXMuZGlzcGxheSl9LGRlZmF1bHRDaGFyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gbmUodGhpcy5kaXNwbGF5KX0sc2V0R3V0dGVyTWFya2VyOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49dC5ndXR0ZXJNYXJrZXJzfHwodC5ndXR0ZXJNYXJrZXJzPXt9KTtyZXR1cm4gbltlXT1yLCFyJiZsaShuKSYmKHQuZ3V0dGVyTWFya2Vycz1udWxsKSwhMH0pfSksY2xlYXJHdXR0ZXI6bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kb2Msbj1yLmZpcnN0O3IuaXRlcihmdW5jdGlvbihyKXtyLmd1dHRlck1hcmtlcnMmJnIuZ3V0dGVyTWFya2Vyc1t0XSYmKHIuZ3V0dGVyTWFya2Vyc1t0XT1udWxsLHVlKGUsbixuKzEpLGxpKHIuZ3V0dGVyTWFya2VycykmJihyLmd1dHRlck1hcmtlcnM9bnVsbCkpLCsrbn0pfSksYWRkTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyI7aWYodFtuXSl7aWYobmV3IFJlZ0V4cCgiKD86XnxcXHMpIityKyIoPzokfFxccykiKS50ZXN0KHRbbl0pKXJldHVybiExO3Rbbl0rPSIgIityfWVsc2UgdFtuXT1yO3JldHVybiEwfSl9KSxyZW1vdmVMaW5lQ2xhc3M6bGUobnVsbCxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRyKHRoaXMsdCxmdW5jdGlvbih0KXt2YXIgbj0idGV4dCI9PWU/InRleHRDbGFzcyI6ImJhY2tncm91bmQiPT1lPyJiZ0NsYXNzIjoid3JhcENsYXNzIixpPXRbbl07aWYoIWkpcmV0dXJuITE7aWYobnVsbD09cil0W25dPW51bGw7ZWxzZXt2YXIgbz1pLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3IrIig/OiR8XFxzKykiKSk7aWYoIW8pcmV0dXJuITE7dmFyIGw9by5pbmRleCtvWzBdLmxlbmd0aDt0W25dPWkuc2xpY2UoMCxvLmluZGV4KSsoby5pbmRleCYmbCE9aS5sZW5ndGg/IiAiOiIiKStpLnNsaWNlKGwpfHxudWxsfXJldHVybiEwfSl9KSxhZGRMaW5lV2lkZ2V0OmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBqcih0aGlzLHQsZSxyKX0pLHJlbW92ZUxpbmVXaWRnZXQ6ZnVuY3Rpb24odCl7dC5jbGVhcigpfSxsaW5lSW5mbzpmdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCF0cih0aGlzLmRvYyx0KSlyZXR1cm4gbnVsbDt2YXIgZT10O2lmKHQ9Z24odGhpcy5kb2MsdCksIXQpcmV0dXJuIG51bGx9ZWxzZXt2YXIgZT1ibih0KTtpZihudWxsPT1lKXJldHVybiBudWxsfXJldHVybntsaW5lOmUsaGFuZGxlOnQsdGV4dDp0LnRleHQsZ3V0dGVyTWFya2Vyczp0Lmd1dHRlck1hcmtlcnMsdGV4dENsYXNzOnQudGV4dENsYXNzLGJnQ2xhc3M6dC5iZ0NsYXNzLHdyYXBDbGFzczp0LndyYXBDbGFzcyx3aWRnZXRzOnQud2lkZ2V0c319LGdldFZpZXdwb3J0OmZ1bmN0aW9uKCl7cmV0dXJue2Zyb206dGhpcy5kaXNwbGF5LnNob3dpbmdGcm9tLHRvOnRoaXMuZGlzcGxheS5zaG93aW5nVG99fSxhZGRXaWRnZXQ6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz10aGlzLmRpc3BsYXk7dD1RKHRoaXMsUWUodGhpcy5kb2MsdCkpO3ZhciBsPXQuYm90dG9tLHM9dC5sZWZ0O2lmKGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnNpemVyLmFwcGVuZENoaWxkKGUpLCJvdmVyIj09bilsPXQudG9wO2Vsc2UgaWYoImFib3ZlIj09bnx8Im5lYXIiPT1uKXt2YXIgYT1NYXRoLm1heChvLndyYXBwZXIuY2xpZW50SGVpZ2h0LHRoaXMuZG9jLmhlaWdodCksdT1NYXRoLm1heChvLnNpemVyLmNsaWVudFdpZHRoLG8ubGluZVNwYWNlLmNsaWVudFdpZHRoKTsoImFib3ZlIj09bnx8dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ+YSkmJnQudG9wPmUub2Zmc2V0SGVpZ2h0P2w9dC50b3AtZS5vZmZzZXRIZWlnaHQ6dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ8PWEmJihsPXQuYm90dG9tKSxzK2Uub2Zmc2V0V2lkdGg+dSYmKHM9dS1lLm9mZnNldFdpZHRoKX1lLnN0eWxlLnRvcD1sKyJweCIsZS5zdHlsZS5sZWZ0PWUuc3R5bGUucmlnaHQ9IiIsInJpZ2h0Ij09aT8ocz1vLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgsZS5zdHlsZS5yaWdodD0iMHB4Iik6KCJsZWZ0Ij09aT9zPTA6Im1pZGRsZSI9PWkmJihzPShvLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgpLzIpLGUuc3R5bGUubGVmdD1zKyJweCIpLHImJmFyKHRoaXMscyxsLHMrZS5vZmZzZXRXaWR0aCxsK2Uub2Zmc2V0SGVpZ2h0KX0sdHJpZ2dlck9uS2V5RG93bjpsZShudWxsLFdlKSxleGVjQ29tbWFuZDpmdW5jdGlvbih0KXtyZXR1cm4gbW9bdF0odGhpcyl9LGZpbmRQb3NIOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTE7MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIG89MCxsPVFlKHRoaXMuZG9jLHQpO2U+byYmKGw9cHIodGhpcy5kb2MsbCxpLHIsbiksIWwuaGl0U2lkZSk7KytvKTtyZXR1cm4gbH0sbW92ZUg6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3I9bi5zaGlmdHx8bi5leHRlbmR8fGplKG4uZnJvbSxuLnRvKT9wcih0aGlzLmRvYyxuLmhlYWQsdCxlLHRoaXMub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkpOjA+dD9uLmZyb206bi50byxlcih0aGlzLmRvYyxyLHIsdCl9KSxkZWxldGVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYy5zZWw7amUoci5mcm9tLHIudG8pP19lKHRoaXMuZG9jLCIiLHIuZnJvbSxwcih0aGlzLmRvYyxyLmhlYWQsdCxlLCExKSwiK2RlbGV0ZSIpOl9lKHRoaXMuZG9jLCIiLHIuZnJvbSxyLnRvLCIrZGVsZXRlIiksdGhpcy5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwfSksZmluZFBvc1Y6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MSxvPW47MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIGw9MCxzPVFlKHRoaXMuZG9jLHQpO2U+bDsrK2wpe3ZhciBhPVEodGhpcyxzLCJkaXYiKTtpZihudWxsPT1vP289YS5sZWZ0OmEubGVmdD1vLHM9Z3IodGhpcyxhLGkscikscy5oaXRTaWRlKWJyZWFrfXJldHVybiBzfSxtb3ZlVjpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsLG49USh0aGlzLHIuaGVhZCwiZGl2Iik7bnVsbCE9ci5nb2FsQ29sdW1uJiYobi5sZWZ0PXIuZ29hbENvbHVtbik7dmFyIGk9Z3IodGhpcyxuLHQsZSk7InBhZ2UiPT1lJiZmcih0aGlzLDAscSh0aGlzLGksImRpdiIpLnRvcC1uLnRvcCksZXIodGhpcy5kb2MsaSxpLHQpLHIuZ29hbENvbHVtbj1uLmxlZnR9KSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7KG51bGw9PXR8fHQhPXRoaXMuc3RhdGUub3ZlcndyaXRlKSYmKCh0aGlzLnN0YXRlLm92ZXJ3cml0ZT0hdGhpcy5zdGF0ZS5vdmVyd3JpdGUpP3RoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itb3ZlcndyaXRlIjp0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZT10aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1vdmVyd3JpdGUiLCIiKSl9LGhhc0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuZm9jdXNlZH0sc2Nyb2xsVG86bGUobnVsbCxmdW5jdGlvbih0LGUpe2NyKHRoaXMsdCxlKX0pLGdldFNjcm9sbEluZm86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRpc3BsYXkuc2Nyb2xsZXIsZT1UbztyZXR1cm57bGVmdDp0LnNjcm9sbExlZnQsdG9wOnQuc2Nyb2xsVG9wLGhlaWdodDp0LnNjcm9sbEhlaWdodC1lLHdpZHRoOnQuc2Nyb2xsV2lkdGgtZSxjbGllbnRIZWlnaHQ6dC5jbGllbnRIZWlnaHQtZSxjbGllbnRXaWR0aDp0LmNsaWVudFdpZHRoLWV9fSxzY3JvbGxJbnRvVmlldzpsZShudWxsLGZ1bmN0aW9uKHQsZSl7bnVsbD09dD90PXtmcm9tOnRoaXMuZG9jLnNlbC5oZWFkLHRvOm51bGx9OiJudW1iZXIiPT10eXBlb2YgdD90PXtmcm9tOlllKHQsMCksdG86bnVsbH06bnVsbD09dC5mcm9tJiYodD17ZnJvbTp0LHRvOm51bGx9KSx0LnRvfHwodC50bz10LmZyb20pLGV8fChlPTApO3ZhciByPXQ7bnVsbCE9dC5mcm9tLmxpbmUmJih0aGlzLmN1ck9wLnNjcm9sbFRvUG9zPXtmcm9tOnQuZnJvbSx0bzp0LnRvLG1hcmdpbjplfSxyPXtmcm9tOlEodGhpcyx0LmZyb20pLHRvOlEodGhpcyx0LnRvKX0pO3ZhciBuPXVyKHRoaXMsTWF0aC5taW4oci5mcm9tLmxlZnQsci50by5sZWZ0KSxNYXRoLm1pbihyLmZyb20udG9wLHIudG8udG9wKS1lLE1hdGgubWF4KHIuZnJvbS5yaWdodCxyLnRvLnJpZ2h0KSxNYXRoLm1heChyLmZyb20uYm90dG9tLHIudG8uYm90dG9tKStlKTtjcih0aGlzLG4uc2Nyb2xsTGVmdCxuLnNjcm9sbFRvcCl9KSxzZXRTaXplOmxlKG51bGwsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8L15cZCskLy50ZXN0KFN0cmluZyh0KSk/dCsicHgiOnR9bnVsbCE9dCYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoPXIodCkpLG51bGwhPWUmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQ9cihlKSksdGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZyYmKHRoaXMuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aD10aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcz0wKSx0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwfSksb3BlcmF0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBhZSh0aGlzLHQpfSxyZWZyZXNoOmxlKG51bGwsZnVuY3Rpb24oKXt2YXIgdD1udWxsPT10aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDtfKHRoaXMpLGNyKHRoaXMsdGhpcy5kb2Muc2Nyb2xsTGVmdCx0aGlzLmRvYy5zY3JvbGxUb3ApLHVlKHRoaXMpLHQmJm8odGhpcyl9KSxzd2FwRG9jOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kb2M7cmV0dXJuIGUuY209bnVsbCxwbih0aGlzLHQpLF8odGhpcyksZGUodGhpcywhMCksY3IodGhpcyx0LnNjcm9sbExlZnQsdC5zY3JvbGxUb3ApLFVuKHRoaXMsInN3YXBEb2MiLHRoaXMsZSksZX0pLGdldElucHV0RmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0fSxnZXRXcmFwcGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcn0sZ2V0U2Nyb2xsZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcn0sZ2V0R3V0dGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyc319LGpuKHQpO3ZhciBzbz10Lm9wdGlvbkhhbmRsZXJzPXt9LGFvPXQuZGVmYXVsdHM9e30sdW89dC5Jbml0PXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLkluaXQifX07eXIoInZhbHVlIiwiIixmdW5jdGlvbih0LGUpe3Quc2V0VmFsdWUoZSl9LCEwKSx5cigibW9kZSIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZG9jLm1vZGVPcHRpb249ZSxyKHQpfSwhMCkseXIoImluZGVudFVuaXQiLDIsciwhMCkseXIoImluZGVudFdpdGhUYWJzIiwhMSkseXIoInNtYXJ0SW5kZW50IiwhMCkseXIoInRhYlNpemUiLDQsZnVuY3Rpb24odCl7cih0KSxfKHQpLHVlKHQpfSwhMCkseXIoInNwZWNpYWxDaGFycyIsL1tcdFx1MDAwMC1cdTAwMTlcdTAwYWRcdTIwMGJcdTIwMjhcdTIwMjlcdWZlZmZdL2csZnVuY3Rpb24odCxlKXt0Lm9wdGlvbnMuc3BlY2lhbENoYXJzPW5ldyBSZWdFeHAoZS5zb3VyY2UrKGUudGVzdCgiCSIpPyIiOiJ8CSIpLCJnIiksdC5yZWZyZXNoKCl9LCEwKSx5cigic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsbm4sZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigiZWxlY3RyaWNDaGFycyIsITApLHlyKCJydGxNb3ZlVmlzdWFsbHkiLCFVaSkseXIoIndob2xlTGluZVVwZGF0ZUJlZm9yZSIsITApLHlyKCJ0aGVtZSIsImRlZmF1bHQiLGZ1bmN0aW9uKHQpe3ModCksYSh0KX0sITApLHlyKCJrZXlNYXAiLCJkZWZhdWx0IixsKSx5cigiZXh0cmFLZXlzIixudWxsKSx5cigib25LZXlFdmVudCIsbnVsbCkseXIoIm9uRHJhZ0V2ZW50IixudWxsKSx5cigibGluZVdyYXBwaW5nIiwhMSxuLCEwKSx5cigiZ3V0dGVycyIsW10sZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZml4ZWRHdXR0ZXIiLCEwLGZ1bmN0aW9uKHQsZSl7dC5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdD1lP3kodC5kaXNwbGF5KSsicHgiOiIwIix0LnJlZnJlc2goKX0sITApLHlyKCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciIsITEsZCwhMCkseXIoImxpbmVOdW1iZXJzIiwhMSxmdW5jdGlvbih0KXtoKHQub3B0aW9ucyksYSh0KX0sITApLHlyKCJmaXJzdExpbmVOdW1iZXIiLDEsYSwhMCkseXIoImxpbmVOdW1iZXJGb3JtYXR0ZXIiLGZ1bmN0aW9uKHQpe3JldHVybiB0fSxhLCEwKSx5cigic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCExLEEsITApLHlyKCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUiLCEwKSx5cigicmVhZE9ubHkiLCExLGZ1bmN0aW9uKHQsZSl7Im5vY3Vyc29yIj09ZT8oemUodCksdC5kaXNwbGF5LmlucHV0LmJsdXIoKSx0LmRpc3BsYXkuZGlzYWJsZWQ9ITApOih0LmRpc3BsYXkuZGlzYWJsZWQ9ITEsZXx8ZGUodCwhMCkpfSkseXIoImRyYWdEcm9wIiwhMCkseXIoImN1cnNvckJsaW5rUmF0ZSIsNTMwKSx5cigiY3Vyc29yU2Nyb2xsTWFyZ2luIiwwKSx5cigiY3Vyc29ySGVpZ2h0IiwxKSx5cigid29ya1RpbWUiLDEwMCkseXIoIndvcmtEZWxheSIsMTAwKSx5cigiZmxhdHRlblNwYW5zIiwhMCkseXIoInBvbGxJbnRlcnZhbCIsMTAwKSx5cigidW5kb0RlcHRoIiw0MCxmdW5jdGlvbih0LGUpe3QuZG9jLmhpc3RvcnkudW5kb0RlcHRoPWV9KSx5cigiaGlzdG9yeUV2ZW50RGVsYXkiLDUwMCkseXIoInZpZXdwb3J0TWFyZ2luIiwxMCxmdW5jdGlvbih0KXt0LnJlZnJlc2goKX0sITApLHlyKCJtYXhIaWdobGlnaHRMZW5ndGgiLDFlNCxmdW5jdGlvbih0KXtyKHQpLHQucmVmcmVzaCgpfSwhMCkseXIoImNydWRlTWVhc3VyaW5nRnJvbSIsMWU0KSx5cigibW92ZUlucHV0V2l0aEN1cnNvciIsITAsZnVuY3Rpb24odCxlKXtlfHwodC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcD10LmRpc3BsYXkuaW5wdXREaXYuc3R5bGUubGVmdD0wKX0pLHlyKCJ0YWJpbmRleCIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5pbnB1dC50YWJJbmRleD1lfHwiIn0pLHlyKCJhdXRvZm9jdXMiLG51bGwpO3ZhciBjbz10Lm1vZGVzPXt9LGZvPXQubWltZU1vZGVzPXt9O3QuZGVmaW5lTW9kZT1mdW5jdGlvbihlLHIpe2lmKHQuZGVmYXVsdHMubW9kZXx8Im51bGwiPT1lfHwodC5kZWZhdWx0cy5tb2RlPWUpLGFyZ3VtZW50cy5sZW5ndGg+Mil7ci5kZXBlbmRlbmNpZXM9W107Zm9yKHZhciBuPTI7bjxhcmd1bWVudHMubGVuZ3RoOysrbilyLmRlcGVuZGVuY2llcy5wdXNoKGFyZ3VtZW50c1tuXSl9Y29bZV09cn0sdC5kZWZpbmVNSU1FPWZ1bmN0aW9uKHQsZSl7Zm9bdF09ZX0sdC5yZXNvbHZlTW9kZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJmZvLmhhc093blByb3BlcnR5KGUpKWU9Zm9bZV07ZWxzZSBpZihlJiYic3RyaW5nIj09dHlwZW9mIGUubmFtZSYmZm8uaGFzT3duUHJvcGVydHkoZS5uYW1lKSl7dmFyIHI9Zm9bZS5uYW1lXTtlPWVpKHIsZSksZS5uYW1lPXIubmFtZX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSYmL15bXHdcLV0rXC9bXHdcLV0rXCt4bWwkLy50ZXN0KGUpKXJldHVybiB0LnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/e25hbWU6ZX06ZXx8e25hbWU6Im51bGwifX0sdC5nZXRNb2RlPWZ1bmN0aW9uKGUscil7dmFyIHI9dC5yZXNvbHZlTW9kZShyKSxuPWNvW3IubmFtZV07aWYoIW4pcmV0dXJuIHQuZ2V0TW9kZShlLCJ0ZXh0L3BsYWluIik7dmFyIGk9bihlLHIpO2lmKGhvLmhhc093blByb3BlcnR5KHIubmFtZSkpe3ZhciBvPWhvW3IubmFtZV07Zm9yKHZhciBsIGluIG8pby5oYXNPd25Qcm9wZXJ0eShsKSYmKGkuaGFzT3duUHJvcGVydHkobCkmJihpWyJfIitsXT1pW2xdKSxpW2xdPW9bbF0pfXJldHVybiBpLm5hbWU9ci5uYW1lLGl9LHQuZGVmaW5lTW9kZSgibnVsbCIsZnVuY3Rpb24oKXtyZXR1cm57dG9rZW46ZnVuY3Rpb24odCl7dC5za2lwVG9FbmQoKX19fSksdC5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwibnVsbCIpO3ZhciBobz10Lm1vZGVFeHRlbnNpb25zPXt9O3QuZXh0ZW5kTW9kZT1mdW5jdGlvbih0LGUpe3ZhciByPWhvLmhhc093blByb3BlcnR5KHQpP2hvW3RdOmhvW3RdPXt9O3JpKGUscil9LHQuZGVmaW5lRXh0ZW5zaW9uPWZ1bmN0aW9uKGUscil7dC5wcm90b3R5cGVbZV09cn0sdC5kZWZpbmVEb2NFeHRlbnNpb249ZnVuY3Rpb24odCxlKXt3by5wcm90b3R5cGVbdF09ZX0sdC5kZWZpbmVPcHRpb249eXI7dmFyIHBvPVtdO3QuZGVmaW5lSW5pdEhvb2s9ZnVuY3Rpb24odCl7cG8ucHVzaCh0KX07dmFyIGdvPXQuaGVscGVycz17fTt0LnJlZ2lzdGVySGVscGVyPWZ1bmN0aW9uKGUscixuKXtnby5oYXNPd25Qcm9wZXJ0eShlKXx8KGdvW2VdPXRbZV09e30pLGdvW2VdW3JdPW59LHQuaXNXb3JkQ2hhcj1vaSx0LmNvcHlTdGF0ZT1icix0LnN0YXJ0U3RhdGU9eHIsdC5pbm5lck1vZGU9ZnVuY3Rpb24odCxlKXtmb3IoO3QuaW5uZXJNb2RlOyl7dmFyIHI9dC5pbm5lck1vZGUoZSk7aWYoIXJ8fHIubW9kZT09dClicmVhaztlPXIuc3RhdGUsdD1yLm1vZGV9cmV0dXJuIHJ8fHttb2RlOnQsc3RhdGU6ZX19O3ZhciBtbz10LmNvbW1hbmRzPXtzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dC5zZXRTZWxlY3Rpb24oWWUodC5maXJzdExpbmUoKSwwKSxZZSh0Lmxhc3RMaW5lKCkpKX0sa2lsbExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoITApLHI9dC5nZXRDdXJzb3IoITEpLG49IWplKGUscik7bnx8dC5nZXRMaW5lKGUubGluZSkubGVuZ3RoIT1lLmNoP3QucmVwbGFjZVJhbmdlKCIiLGUsbj9yOlllKGUubGluZSksIitkZWxldGUiKTp0LnJlcGxhY2VSYW5nZSgiIixlLFllKGUubGluZSsxLDApLCIrZGVsZXRlIil9LGRlbGV0ZUxpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKS5saW5lO3QucmVwbGFjZVJhbmdlKCIiLFllKGUsMCksWWUoZSksIitkZWxldGUiKX0sZGVsTGluZUxlZnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLmxpbmUsMCksZSwiK2RlbGV0ZSIpfSx1bmRvOmZ1bmN0aW9uKHQpe3QudW5kbygpfSxyZWRvOmZ1bmN0aW9uKHQpe3QucmVkbygpfSxnb0RvY1N0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCkpfSxnb0RvY0VuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0Lmxhc3RMaW5lKCkpKX0sZ29MaW5lU3RhcnQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oeGkodCx0LmdldEN1cnNvcigpLmxpbmUpKX0sZ29MaW5lU3RhcnRTbWFydDpmdW5jdGlvbih0KXt2YXIgZT10LmdldEN1cnNvcigpLHI9eGkodCxlLmxpbmUpLG49dC5nZXRMaW5lSGFuZGxlKHIubGluZSksaT13bihuKTtpZihpJiYwIT1pWzBdLmxldmVsKXQuZXh0ZW5kU2VsZWN0aW9uKHIpO2Vsc2V7dmFyIG89TWF0aC5tYXgoMCxuLnRleHQuc2VhcmNoKC9cUy8pKSxsPWUubGluZT09ci5saW5lJiZlLmNoPD1vJiZlLmNoO3QuZXh0ZW5kU2VsZWN0aW9uKFllKHIubGluZSxsPzA6bykpfX0sZ29MaW5lRW5kOmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKENpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVJpZ2h0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6dC5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGgrMTAwLHRvcDplfSwiZGl2IikpfSxnb0xpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwibGluZSIpfSxnb0xpbmVEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwibGluZSIpfSxnb1BhZ2VVcDpmdW5jdGlvbih0KXt0Lm1vdmVWKC0xLCJwYWdlIil9LGdvUGFnZURvd246ZnVuY3Rpb24odCl7dC5tb3ZlVigxLCJwYWdlIil9LGdvQ2hhckxlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiY2hhciIpfSxnb0NoYXJSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNoYXIiKX0sZ29Db2x1bW5MZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNvbHVtbiIpfSxnb0NvbHVtblJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiY29sdW1uIil9LGdvV29yZExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwid29yZCIpfSxnb0dyb3VwUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJncm91cCIpfSxnb0dyb3VwTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJncm91cCIpfSxnb1dvcmRSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsIndvcmQiKX0sZGVsQ2hhckJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImNoYXIiKX0sZGVsQ2hhckFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJjaGFyIil9LGRlbFdvcmRCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJ3b3JkIil9LGRlbFdvcmRBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwid29yZCIpfSxkZWxHcm91cEJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImdyb3VwIil9LGRlbEdyb3VwQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsImdyb3VwIil9LGluZGVudEF1dG86ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iil9LGluZGVudE1vcmU6ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oImFkZCIpfSxpbmRlbnRMZXNzOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpfSxpbnNlcnRUYWI6ZnVuY3Rpb24odCl7dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LGRlZmF1bHRUYWI6ZnVuY3Rpb24odCl7dC5zb21ldGhpbmdTZWxlY3RlZCgpP3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKTp0LnJlcGxhY2VTZWxlY3Rpb24oIgkiLCJlbmQiLCIraW5wdXQiKX0sdHJhbnNwb3NlQ2hhcnM6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXQuZ2V0TGluZShlLmxpbmUpO2UuY2g+MCYmZS5jaDxyLmxlbmd0aC0xJiZ0LnJlcGxhY2VSYW5nZShyLmNoYXJBdChlLmNoKStyLmNoYXJBdChlLmNoLTEpLFllKGUubGluZSxlLmNoLTEpLFllKGUubGluZSxlLmNoKzEpKX0sbmV3bGluZUFuZEluZGVudDpmdW5jdGlvbih0KXtsZSh0LGZ1bmN0aW9uKCl7dC5yZXBsYWNlU2VsZWN0aW9uKCJcbiIsImVuZCIsIitpbnB1dCIpLHQuaW5kZW50TGluZSh0LmdldEN1cnNvcigpLmxpbmUsbnVsbCwhMCl9KSgpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7dC50b2dnbGVPdmVyd3JpdGUoKX19LHZvPXQua2V5TWFwPXt9O3ZvLmJhc2ljPXtMZWZ0OiJnb0NoYXJMZWZ0IixSaWdodDoiZ29DaGFyUmlnaHQiLFVwOiJnb0xpbmVVcCIsRG93bjoiZ29MaW5lRG93biIsRW5kOiJnb0xpbmVFbmQiLEhvbWU6ImdvTGluZVN0YXJ0U21hcnQiLFBhZ2VVcDoiZ29QYWdlVXAiLFBhZ2VEb3duOiJnb1BhZ2VEb3duIixEZWxldGU6ImRlbENoYXJBZnRlciIsQmFja3NwYWNlOiJkZWxDaGFyQmVmb3JlIiwiU2hpZnQtQmFja3NwYWNlIjoiZGVsQ2hhckJlZm9yZSIsVGFiOiJkZWZhdWx0VGFiIiwiU2hpZnQtVGFiIjoiaW5kZW50QXV0byIsRW50ZXI6Im5ld2xpbmVBbmRJbmRlbnQiLEluc2VydDoidG9nZ2xlT3ZlcndyaXRlIn0sdm8ucGNEZWZhdWx0PXsiQ3RybC1BIjoic2VsZWN0QWxsIiwiQ3RybC1EIjoiZGVsZXRlTGluZSIsIkN0cmwtWiI6InVuZG8iLCJTaGlmdC1DdHJsLVoiOiJyZWRvIiwiQ3RybC1ZIjoicmVkbyIsIkN0cmwtSG9tZSI6ImdvRG9jU3RhcnQiLCJBbHQtVXAiOiJnb0RvY1N0YXJ0IiwiQ3RybC1FbmQiOiJnb0RvY0VuZCIsIkN0cmwtRG93biI6ImdvRG9jRW5kIiwiQ3RybC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJDdHJsLVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQWx0LUxlZnQiOiJnb0xpbmVTdGFydCIsIkFsdC1SaWdodCI6ImdvTGluZUVuZCIsIkN0cmwtQmFja3NwYWNlIjoiZGVsR3JvdXBCZWZvcmUiLCJDdHJsLURlbGV0ZSI6ImRlbEdyb3VwQWZ0ZXIiLCJDdHJsLVMiOiJzYXZlIiwiQ3RybC1GIjoiZmluZCIsIkN0cmwtRyI6ImZpbmROZXh0IiwiU2hpZnQtQ3RybC1HIjoiZmluZFByZXYiLCJTaGlmdC1DdHJsLUYiOiJyZXBsYWNlIiwiU2hpZnQtQ3RybC1SIjoicmVwbGFjZUFsbCIsIkN0cmwtWyI6ImluZGVudExlc3MiLCJDdHJsLV0iOiJpbmRlbnRNb3JlIixmYWxsdGhyb3VnaDoiYmFzaWMifSx2by5tYWNEZWZhdWx0PXsiQ21kLUEiOiJzZWxlY3RBbGwiLCJDbWQtRCI6ImRlbGV0ZUxpbmUiLCJDbWQtWiI6InVuZG8iLCJTaGlmdC1DbWQtWiI6InJlZG8iLCJDbWQtWSI6InJlZG8iLCJDbWQtVXAiOiJnb0RvY1N0YXJ0IiwiQ21kLUVuZCI6ImdvRG9jRW5kIiwiQ21kLURvd24iOiJnb0RvY0VuZCIsIkFsdC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJBbHQtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJDbWQtTGVmdCI6ImdvTGluZVN0YXJ0IiwiQ21kLVJpZ2h0IjoiZ29MaW5lRW5kIiwiQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1BbHQtQmFja3NwYWNlIjoiZGVsR3JvdXBBZnRlciIsIkFsdC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ21kLVMiOiJzYXZlIiwiQ21kLUYiOiJmaW5kIiwiQ21kLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUNtZC1HIjoiZmluZFByZXYiLCJDbWQtQWx0LUYiOiJyZXBsYWNlIiwiU2hpZnQtQ21kLUFsdC1GIjoicmVwbGFjZUFsbCIsIkNtZC1bIjoiaW5kZW50TGVzcyIsIkNtZC1dIjoiaW5kZW50TW9yZSIsIkNtZC1CYWNrc3BhY2UiOiJkZWxMaW5lTGVmdCIsZmFsbHRocm91Z2g6WyJiYXNpYyIsImVtYWNzeSJdfSx2b1siZGVmYXVsdCJdPUtpP3ZvLm1hY0RlZmF1bHQ6dm8ucGNEZWZhdWx0LHZvLmVtYWNzeT17IkN0cmwtRiI6ImdvQ2hhclJpZ2h0IiwiQ3RybC1CIjoiZ29DaGFyTGVmdCIsIkN0cmwtUCI6ImdvTGluZVVwIiwiQ3RybC1OIjoiZ29MaW5lRG93biIsIkFsdC1GIjoiZ29Xb3JkUmlnaHQiLCJBbHQtQiI6ImdvV29yZExlZnQiLCJDdHJsLUEiOiJnb0xpbmVTdGFydCIsIkN0cmwtRSI6ImdvTGluZUVuZCIsIkN0cmwtViI6ImdvUGFnZURvd24iLCJTaGlmdC1DdHJsLVYiOiJnb1BhZ2VVcCIsIkN0cmwtRCI6ImRlbENoYXJBZnRlciIsIkN0cmwtSCI6ImRlbENoYXJCZWZvcmUiLCJBbHQtRCI6ImRlbFdvcmRBZnRlciIsIkFsdC1CYWNrc3BhY2UiOiJkZWxXb3JkQmVmb3JlIiwiQ3RybC1LIjoia2lsbExpbmUiLCJDdHJsLVQiOiJ0cmFuc3Bvc2VDaGFycyJ9LHQubG9va3VwS2V5PXdyLHQuaXNNb2RpZmllcktleT1Mcix0LmtleU5hbWU9a3IsdC5mcm9tVGV4dEFyZWE9ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7ZS52YWx1ZT11LmdldFZhbHVlKCl9aWYocnx8KHI9e30pLHIudmFsdWU9ZS52YWx1ZSwhci50YWJpbmRleCYmZS50YWJpbmRleCYmKHIudGFiaW5kZXg9ZS50YWJpbmRleCksIXIucGxhY2Vob2xkZXImJmUucGxhY2Vob2xkZXImJihyLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIpLG51bGw9PXIuYXV0b2ZvY3VzKXt2YXIgaT1kb2N1bWVudC5ib2R5O3RyeXtpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2gobyl7fXIuYXV0b2ZvY3VzPWk9PWV8fG51bGwhPWUuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSYmaT09ZG9jdW1lbnQuYm9keX1pZihlLmZvcm0mJihHbihlLmZvcm0sInN1Ym1pdCIsbiksIXIubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkpe3ZhciBsPWUuZm9ybSxzPWwuc3VibWl0O3RyeXt2YXIgYT1sLnN1Ym1pdD1mdW5jdGlvbigpe24oKSxsLnN1Ym1pdD1zLGwuc3VibWl0KCksbC5zdWJtaXQ9YX19Y2F0Y2gobyl7fX1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciB1PXQoZnVuY3Rpb24odCl7ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGUubmV4dFNpYmxpbmcpfSxyKTtyZXR1cm4gdS5zYXZlPW4sdS5nZXRUZXh0QXJlYT1mdW5jdGlvbigpe3JldHVybiBlfSx1LnRvVGV4dEFyZWE9ZnVuY3Rpb24oKXtuKCksZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUuZ2V0V3JhcHBlckVsZW1lbnQoKSksZS5zdHlsZS5kaXNwbGF5PSIiLGUuZm9ybSYmKFZuKGUuZm9ybSwic3VibWl0IixuKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JtLnN1Ym1pdCYmKGUuZm9ybS5zdWJtaXQ9cykpfSx1fSxTci5wcm90b3R5cGU9e2VvbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcz49dGhpcy5zdHJpbmcubGVuZ3RofSxzb2w6ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy5wb3N9LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKXx8dm9pZCAwfSxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPHRoaXMuc3RyaW5nLmxlbmd0aD90aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyk6dm9pZCAwfSxlYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTtpZigic3RyaW5nIj09dHlwZW9mIHQpdmFyIHI9ZT09dDtlbHNlIHZhciByPWUmJih0LnRlc3Q/dC50ZXN0KGUpOnQoZSkpO3JldHVybiByPygrK3RoaXMucG9zLGUpOnZvaWQgMH0sZWF0V2hpbGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucG9zO3RoaXMuZWF0KHQpOyk7cmV0dXJuIHRoaXMucG9zPmV9LGVhdFNwYWNlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucG9zOy9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpOykrK3RoaXMucG9zO3JldHVybiB0aGlzLnBvcz50fSxza2lwVG9FbmQ6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0cmluZy5sZW5ndGh9LHNraXBUbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN0cmluZy5pbmRleE9mKHQsdGhpcy5wb3MpO3JldHVybiBlPi0xPyh0aGlzLnBvcz1lLCEwKTp2b2lkIDB9LGJhY2tVcDpmdW5jdGlvbih0KXt0aGlzLnBvcy09dH0sY29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENvbHVtblBvczx0aGlzLnN0YXJ0JiYodGhpcy5sYXN0Q29sdW1uVmFsdWU9Wm4odGhpcy5zdHJpbmcsdGhpcy5zdGFydCx0aGlzLnRhYlNpemUsdGhpcy5sYXN0Q29sdW1uUG9zLHRoaXMubGFzdENvbHVtblZhbHVlKSx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5zdGFydCksdGhpcy5sYXN0Q29sdW1uVmFsdWV9LGluZGVudGF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFpuKHRoaXMuc3RyaW5nLG51bGwsdGhpcy50YWJTaXplKX0sbWF0Y2g6ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIG49dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHQpO3JldHVybiBuJiZuLmluZGV4PjA/bnVsbDoobiYmZSE9PSExJiYodGhpcy5wb3MrPW5bMF0ubGVuZ3RoKSxuKX12YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gcj90LnRvTG93ZXJDYXNlKCk6dH0sbz10aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsdC5sZW5ndGgpO3JldHVybiBpKG8pPT1pKHQpPyhlIT09ITEmJih0aGlzLnBvcys9dC5sZW5ndGgpLCEwKTp2b2lkIDB9LGN1cnJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCx0aGlzLnBvcyl9fSx0LlN0cmluZ1N0cmVhbT1Tcix0LlRleHRNYXJrZXI9TXIsam4oTXIpLE1yLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKXt2YXIgdD10aGlzLmRvYy5jbSxlPXQmJiF0LmN1ck9wO2lmKGUmJmllKHQpLFluKHRoaXMsImNsZWFyIikpe3ZhciByPXRoaXMuZmluZCgpO3ImJlVuKHRoaXMsImNsZWFyIixyLmZyb20sci50byl9Zm9yKHZhciBuPW51bGwsaT1udWxsLG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGw9dGhpcy5saW5lc1tvXSxzPU5yKGwubWFya2VkU3BhbnMsdGhpcyk7bnVsbCE9cy50byYmKGk9Ym4obCkpLGwubWFya2VkU3BhbnM9RHIobC5tYXJrZWRTcGFucyxzKSxudWxsIT1zLmZyb20/bj1ibihsKTp0aGlzLmNvbGxhcHNlZCYmIVZyKHRoaXMuZG9jLGwpJiZ0JiZ5bihsLHJlKHQuZGlzcGxheSkpfWlmKHQmJnRoaXMuY29sbGFwc2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZylmb3IodmFyIG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGE9R3IodC5kb2MsdGhpcy5saW5lc1tvXSksdT1jKHQuZG9jLGEpO3U+dC5kaXNwbGF5Lm1heExpbmVMZW5ndGgmJih0LmRpc3BsYXkubWF4TGluZT1hLHQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoPXUsdC5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKX1udWxsIT1uJiZ0JiZ1ZSh0LG4saSsxKSx0aGlzLmxpbmVzLmxlbmd0aD0wLHRoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITAsdGhpcy5hdG9taWMmJnRoaXMuZG9jLmNhbnRFZGl0JiYodGhpcy5kb2MuY2FudEVkaXQ9ITEsdCYmaXIodCkpLGUmJm9lKHQpfX0sTXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyPTA7cjx0aGlzLmxpbmVzLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGluZXNbcl0saT1OcihuLm1hcmtlZFNwYW5zLHRoaXMpO2lmKG51bGwhPWkuZnJvbXx8bnVsbCE9aS50byl7dmFyIG89Ym4obik7bnVsbCE9aS5mcm9tJiYodD1ZZShvLGkuZnJvbSkpLG51bGwhPWkudG8mJihlPVllKG8saS50bykpfX1yZXR1cm4iYm9va21hcmsiPT10aGlzLnR5cGU/dDp0JiZ7ZnJvbTp0LHRvOmV9fSxNci5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZmluZCgpLGU9dGhpcy5kb2MuY207aWYodCYmZSl7ImJvb2ttYXJrIiE9dGhpcy50eXBlJiYodD10LmZyb20pO3ZhciByPWduKHRoaXMuZG9jLHQubGluZSk7aWYoRyhlLHIpLHQubGluZT49ZS5kaXNwbGF5LnNob3dpbmdGcm9tJiZ0LmxpbmU8ZS5kaXNwbGF5LnNob3dpbmdUbyl7Zm9yKHZhciBuPWUuZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpaWYobi5saW5lT2JqPT1yKXtuLm9mZnNldEhlaWdodCE9ci5oZWlnaHQmJnluKHIsbi5vZmZzZXRIZWlnaHQpOwpicmVha31hZShlLGZ1bmN0aW9uKCl7ZS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPWUuY3VyT3AuZm9yY2VVcGRhdGU9ZS5jdXJPcC51cGRhdGVNYXhMaW5lPSEwfSl9fX0sTXIucHJvdG90eXBlLmF0dGFjaExpbmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7ZS5tYXliZUhpZGRlbk1hcmtlcnMmJi0xIT10aShlLm1heWJlSGlkZGVuTWFya2Vycyx0aGlzKXx8KGUubWF5YmVVbmhpZGRlbk1hcmtlcnN8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX10aGlzLmxpbmVzLnB1c2godCl9LE1yLnByb3RvdHlwZS5kZXRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGluZXMuc3BsaWNlKHRpKHRoaXMubGluZXMsdCksMSksIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7KGUubWF5YmVIaWRkZW5NYXJrZXJzfHwoZS5tYXliZUhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfX0sdC5TaGFyZWRUZXh0TWFya2VyPUFyLGpuKEFyKSxBci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMDtmb3IodmFyIHQ9MDt0PHRoaXMubWFya2Vycy5sZW5ndGg7Kyt0KXRoaXMubWFya2Vyc1t0XS5jbGVhcigpO1VuKHRoaXMsImNsZWFyIil9fSxBci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaW1hcnkuZmluZCgpfTt2YXIgeW89dC5MaW5lV2lkZ2V0PWZ1bmN0aW9uKHQsZSxyKXtpZihyKWZvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0aGlzW25dPXJbbl0pO3RoaXMuY209dCx0aGlzLm5vZGU9ZX07am4oeW8pLHlvLnByb3RvdHlwZS5jbGVhcj1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMubGluZS53aWRnZXRzLGU9Ym4odGhpcy5saW5lKTtpZihudWxsIT1lJiZ0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdPT10aGlzJiZ0LnNwbGljZShyLS0sMSk7dC5sZW5ndGh8fCh0aGlzLmxpbmUud2lkZ2V0cz1udWxsKTt2YXIgbj1Dbih0aGlzLmNtLHRoaXMubGluZSk8dGhpcy5jbS5kb2Muc2Nyb2xsVG9wO3luKHRoaXMubGluZSxNYXRoLm1heCgwLHRoaXMubGluZS5oZWlnaHQtWXIodGhpcykpKSxuJiZmcih0aGlzLmNtLDAsLXRoaXMuaGVpZ2h0KSx1ZSh0aGlzLmNtLGUsZSsxKX19KSx5by5wcm90b3R5cGUuY2hhbmdlZD1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVpZ2h0O3RoaXMuaGVpZ2h0PW51bGw7dmFyIGU9WXIodGhpcyktdDtpZihlKXt5bih0aGlzLmxpbmUsdGhpcy5saW5lLmhlaWdodCtlKTt2YXIgcj1ibih0aGlzLmxpbmUpO3VlKHRoaXMuY20scixyKzEpfX0pO3ZhciBibz10LkxpbmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LFhyKHRoaXMsZSksdGhpcy5oZWlnaHQ9cj9yKHRoaXMpOjF9O2puKGJvKSxiby5wcm90b3R5cGUubGluZU5vPWZ1bmN0aW9uKCl7cmV0dXJuIGJuKHRoaXMpfTt2YXIgeG89e307Zm4ucHJvdG90eXBlPXtjaHVua1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saW5lcy5sZW5ndGh9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQsbj10K2U7bj5yOysrcil7dmFyIGk9dGhpcy5saW5lc1tyXTt0aGlzLmhlaWdodC09aS5oZWlnaHQsWnIoaSksVW4oaSwiZGVsZXRlIil9dGhpcy5saW5lcy5zcGxpY2UodCxlKX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7dC5zcGxpY2UuYXBwbHkodCxbdC5sZW5ndGgsMF0uY29uY2F0KHRoaXMubGluZXMpKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGVpZ2h0Kz1yLHRoaXMubGluZXM9dGhpcy5saW5lcy5zbGljZSgwLHQpLmNvbmNhdChlKS5jb25jYXQodGhpcy5saW5lcy5zbGljZSh0KSk7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtpPm47KytuKWVbbl0ucGFyZW50PXRoaXN9LGl0ZXJOOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dCtlO24+dDsrK3QpaWYocih0aGlzLmxpbmVzW3RdKSlyZXR1cm4hMH19LGhuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24odCxlKXt0aGlzLnNpemUtPWU7Zm9yKHZhciByPTA7cjx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+dCl7dmFyIG89TWF0aC5taW4oZSxpLXQpLGw9bi5oZWlnaHQ7aWYobi5yZW1vdmVJbm5lcih0LG8pLHRoaXMuaGVpZ2h0LT1sLW4uaGVpZ2h0LGk9PW8mJih0aGlzLmNoaWxkcmVuLnNwbGljZShyLS0sMSksbi5wYXJlbnQ9bnVsbCksMD09KGUtPW8pKWJyZWFrO3Q9MH1lbHNlIHQtPWl9aWYodGhpcy5zaXplLWU8MjUpe3ZhciBzPVtdO3RoaXMuY29sbGFwc2UocyksdGhpcy5jaGlsZHJlbj1bbmV3IGZuKHMpXSx0aGlzLmNoaWxkcmVuWzBdLnBhcmVudD10aGlzfX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmNoaWxkcmVuLmxlbmd0aDtyPmU7KytlKXRoaXMuY2hpbGRyZW5bZV0uY29sbGFwc2UodCl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpemUrPWUubGVuZ3RoLHRoaXMuaGVpZ2h0Kz1yO2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD49dCl7aWYoby5pbnNlcnRJbm5lcih0LGUsciksby5saW5lcyYmby5saW5lcy5sZW5ndGg+NTApe2Zvcig7by5saW5lcy5sZW5ndGg+NTA7KXt2YXIgcz1vLmxpbmVzLnNwbGljZShvLmxpbmVzLmxlbmd0aC0yNSwyNSksYT1uZXcgZm4ocyk7by5oZWlnaHQtPWEuaGVpZ2h0LHRoaXMuY2hpbGRyZW4uc3BsaWNlKG4rMSwwLGEpLGEucGFyZW50PXRoaXN9dGhpcy5tYXliZVNwaWxsKCl9YnJlYWt9dC09bH19LG1heWJlU3BpbGw6ZnVuY3Rpb24oKXtpZighKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPD0xMCkpe3ZhciB0PXRoaXM7ZG97dmFyIGU9dC5jaGlsZHJlbi5zcGxpY2UodC5jaGlsZHJlbi5sZW5ndGgtNSw1KSxyPW5ldyBobihlKTtpZih0LnBhcmVudCl7dC5zaXplLT1yLnNpemUsdC5oZWlnaHQtPXIuaGVpZ2h0O3ZhciBuPXRpKHQucGFyZW50LmNoaWxkcmVuLHQpO3QucGFyZW50LmNoaWxkcmVuLnNwbGljZShuKzEsMCxyKX1lbHNle3ZhciBpPW5ldyBobih0LmNoaWxkcmVuKTtpLnBhcmVudD10LHQuY2hpbGRyZW49W2kscl0sdD1pfXIucGFyZW50PXQucGFyZW50fXdoaWxlKHQuY2hpbGRyZW4ubGVuZ3RoPjEwKTt0LnBhcmVudC5tYXliZVNwaWxsKCl9fSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10aGlzLmNoaWxkcmVuW25dLGw9by5jaHVua1NpemUoKTtpZihsPnQpe3ZhciBzPU1hdGgubWluKGUsbC10KTtpZihvLml0ZXJOKHQscyxyKSlyZXR1cm4hMDtpZigwPT0oZS09cykpYnJlYWs7dD0wfWVsc2UgdC09bH19fTt2YXIgQ289MCx3bz10LkRvYz1mdW5jdGlvbih0LGUscil7aWYoISh0aGlzIGluc3RhbmNlb2Ygd28pKXJldHVybiBuZXcgd28odCxlLHIpO251bGw9PXImJihyPTApLGhuLmNhbGwodGhpcyxbbmV3IGZuKFtuZXcgYm8oIiIsbnVsbCldKV0pLHRoaXMuZmlyc3Q9cix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbExlZnQ9MCx0aGlzLmNhbnRFZGl0PSExLHRoaXMuaGlzdG9yeT1MbigpLHRoaXMuY2xlYW5HZW5lcmF0aW9uPTEsdGhpcy5mcm9udGllcj1yO3ZhciBuPVllKHIsMCk7dGhpcy5zZWw9e2Zyb206bix0bzpuLGhlYWQ6bixhbmNob3I6bixzaGlmdDohMSxleHRlbmQ6ITEsZ29hbENvbHVtbjpudWxsfSx0aGlzLmlkPSsrQ28sdGhpcy5tb2RlT3B0aW9uPWUsInN0cmluZyI9PXR5cGVvZiB0JiYodD16byh0KSksY24odGhpcyx7ZnJvbTpuLHRvOm4sdGV4dDp0fSxudWxsLHtoZWFkOm4sYW5jaG9yOm59KX07d28ucHJvdG90eXBlPWVpKGhuLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6d28saXRlcjpmdW5jdGlvbih0LGUscil7cj90aGlzLml0ZXJOKHQtdGhpcy5maXJzdCxlLXQscik6dGhpcy5pdGVyTih0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplLHQpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lLmxlbmd0aDtpPm47KytuKXIrPWVbbl0uaGVpZ2h0O3RoaXMuaW5zZXJ0SW5uZXIodC10aGlzLmZpcnN0LGUscil9LHJlbW92ZTpmdW5jdGlvbih0LGUpe3RoaXMucmVtb3ZlSW5uZXIodC10aGlzLmZpcnN0LGUpfSxnZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT12bih0aGlzLHRoaXMuZmlyc3QsdGhpcy5maXJzdCt0aGlzLnNpemUpO3JldHVybiB0PT09ITE/ZTplLmpvaW4odHx8IlxuIil9LHNldFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVllKHRoaXMuZmlyc3QsMCkscj10aGlzLmZpcnN0K3RoaXMuc2l6ZS0xO0JlKHRoaXMse2Zyb206ZSx0bzpZZShyLGduKHRoaXMscikudGV4dC5sZW5ndGgpLHRleHQ6em8odCksb3JpZ2luOiJzZXRWYWx1ZSJ9LHtoZWFkOmUsYW5jaG9yOmV9LCEwKX0scmVwbGFjZVJhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe2U9UWUodGhpcyxlKSxyPXI/UWUodGhpcyxyKTplLF9lKHRoaXMsdCxlLHIsbil9LGdldFJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1tbih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSk7cmV0dXJuIHI9PT0hMT9uOm4uam9pbihyfHwiXG4iKX0sZ2V0TGluZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldExpbmVIYW5kbGUodCk7cmV0dXJuIGUmJmUudGV4dH0sc2V0TGluZTpmdW5jdGlvbih0LGUpe3RyKHRoaXMsdCkmJl9lKHRoaXMsZSxZZSh0LDApLFFlKHRoaXMsWWUodCkpKX0scmVtb3ZlTGluZTpmdW5jdGlvbih0KXt0P19lKHRoaXMsIiIsUWUodGhpcyxZZSh0LTEpKSxRZSh0aGlzLFllKHQpKSk6X2UodGhpcywiIixZZSgwLDApLFFlKHRoaXMsWWUoMSwwKSkpfSxnZXRMaW5lSGFuZGxlOmZ1bmN0aW9uKHQpe3JldHVybiB0cih0aGlzLHQpP2duKHRoaXMsdCk6dm9pZCAwfSxnZXRMaW5lTnVtYmVyOmZ1bmN0aW9uKHQpe3JldHVybiBibih0KX0sZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ9Z24odGhpcyx0KSksR3IodGhpcyx0KX0sbGluZUNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0sZmlyc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3R9LGxhc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3QrdGhpcy5zaXplLTF9LGNsaXBQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIFFlKHRoaXMsdCl9LGdldEN1cnNvcjpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuc2VsO3JldHVybiBlPW51bGw9PXR8fCJoZWFkIj09dD9yLmhlYWQ6ImFuY2hvciI9PXQ/ci5hbmNob3I6ImVuZCI9PXR8fHQ9PT0hMT9yLnRvOnIuZnJvbSxaZShlKX0sc29tZXRoaW5nU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hamUodGhpcy5zZWwuaGVhZCx0aGlzLnNlbC5hbmNob3IpfSxzZXRDdXJzb3I6c2UoZnVuY3Rpb24odCxlLHIpe3ZhciBuPVFlKHRoaXMsIm51bWJlciI9PXR5cGVvZiB0P1llKHQsZXx8MCk6dCk7cj9lcih0aGlzLG4pOm5yKHRoaXMsbixuKX0pLHNldFNlbGVjdGlvbjpzZShmdW5jdGlvbih0LGUscil7bnIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZXx8dCkscil9KSxleHRlbmRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe2VyKHRoaXMsUWUodGhpcyx0KSxlJiZRZSh0aGlzLGUpLHIpfSksZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFJhbmdlKHRoaXMuc2VsLmZyb20sdGhpcy5zZWwudG8sdCl9LHJlcGxhY2VTZWxlY3Rpb246ZnVuY3Rpb24odCxlLHIpe0JlKHRoaXMse2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byx0ZXh0OnpvKHQpLG9yaWdpbjpyfSxlfHwiYXJvdW5kIil9LHVuZG86c2UoZnVuY3Rpb24oKXtWZSh0aGlzLCJ1bmRvIil9KSxyZWRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywicmVkbyIpfSksc2V0RXh0ZW5kaW5nOmZ1bmN0aW9uKHQpe3RoaXMuc2VsLmV4dGVuZD10fSxoaXN0b3J5U2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGlzdG9yeTtyZXR1cm57dW5kbzp0LmRvbmUubGVuZ3RoLHJlZG86dC51bmRvbmUubGVuZ3RofX0sY2xlYXJIaXN0b3J5OmZ1bmN0aW9uKCl7dGhpcy5oaXN0b3J5PUxuKHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKX0sbWFya0NsZWFuOmZ1bmN0aW9uKCl7dGhpcy5jbGVhbkdlbmVyYXRpb249dGhpcy5jaGFuZ2VHZW5lcmF0aW9uKCl9LGNoYW5nZUdlbmVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaXN0b3J5Lmxhc3RPcD10aGlzLmhpc3RvcnkubGFzdE9yaWdpbj1udWxsLHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9ufSxpc0NsZWFuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbj09KHR8fHRoaXMuY2xlYW5HZW5lcmF0aW9uKX0sZ2V0SGlzdG9yeTpmdW5jdGlvbigpe3JldHVybntkb25lOkhuKHRoaXMuaGlzdG9yeS5kb25lKSx1bmRvbmU6SG4odGhpcy5oaXN0b3J5LnVuZG9uZSl9fSxzZXRIaXN0b3J5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7ZS5kb25lPXQuZG9uZS5zbGljZSgwKSxlLnVuZG9uZT10LnVuZG9uZS5zbGljZSgwKX0sbWFya1RleHQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUcih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSxyLCJyYW5nZSIpfSxzZXRCb29rbWFyazpmdW5jdGlvbih0LGUpe3ZhciByPXtyZXBsYWNlZFdpdGg6ZSYmKG51bGw9PWUubm9kZVR5cGU/ZS53aWRnZXQ6ZSksaW5zZXJ0TGVmdDplJiZlLmluc2VydExlZnR9O3JldHVybiB0PVFlKHRoaXMsdCksVHIodGhpcyx0LHQsciwiYm9va21hcmsiKX0sZmluZE1hcmtzQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLHQpO3ZhciBlPVtdLHI9Z24odGhpcyx0LmxpbmUpLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07KG51bGw9PWkuZnJvbXx8aS5mcm9tPD10LmNoKSYmKG51bGw9PWkudG98fGkudG8+PXQuY2gpJiZlLnB1c2goaS5tYXJrZXIucGFyZW50fHxpLm1hcmtlcil9cmV0dXJuIGV9LGdldEFsbE1hcmtzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihlKXt2YXIgcj1lLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pbnVsbCE9cltuXS5mcm9tJiZ0LnB1c2gocltuXS5tYXJrZXIpfSksdH0scG9zRnJvbUluZGV4OmZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKG4pe3ZhciBpPW4udGV4dC5sZW5ndGgrMTtyZXR1cm4gaT50PyhlPXQsITApOih0LT1pLCsrcix2b2lkIDApfSksUWUodGhpcyxZZShyLGUpKX0saW5kZXhGcm9tUG9zOmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT10LmNoO3JldHVybiB0LmxpbmU8dGhpcy5maXJzdHx8dC5jaDwwPzA6KHRoaXMuaXRlcih0aGlzLmZpcnN0LHQubGluZSxmdW5jdGlvbih0KXtlKz10LnRleHQubGVuZ3RoKzF9KSxlKX0sY29weTpmdW5jdGlvbih0KXt2YXIgZT1uZXcgd28odm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKSx0aGlzLm1vZGVPcHRpb24sdGhpcy5maXJzdCk7cmV0dXJuIGUuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLGUuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbExlZnQsZS5zZWw9e2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byxoZWFkOnRoaXMuc2VsLmhlYWQsYW5jaG9yOnRoaXMuc2VsLmFuY2hvcixzaGlmdDp0aGlzLnNlbC5zaGlmdCxleHRlbmQ6ITEsZ29hbENvbHVtbjp0aGlzLnNlbC5nb2FsQ29sdW1ufSx0JiYoZS5oaXN0b3J5LnVuZG9EZXB0aD10aGlzLmhpc3RvcnkudW5kb0RlcHRoLGUuc2V0SGlzdG9yeSh0aGlzLmdldEhpc3RvcnkoKSkpLGV9LGxpbmtlZERvYzpmdW5jdGlvbih0KXt0fHwodD17fSk7dmFyIGU9dGhpcy5maXJzdCxyPXRoaXMuZmlyc3QrdGhpcy5zaXplO251bGwhPXQuZnJvbSYmdC5mcm9tPmUmJihlPXQuZnJvbSksbnVsbCE9dC50byYmdC50bzxyJiYocj10LnRvKTt2YXIgbj1uZXcgd28odm4odGhpcyxlLHIpLHQubW9kZXx8dGhpcy5tb2RlT3B0aW9uLGUpO3JldHVybiB0LnNoYXJlZEhpc3QmJihuLmhpc3Rvcnk9dGhpcy5oaXN0b3J5KSwodGhpcy5saW5rZWR8fCh0aGlzLmxpbmtlZD1bXSkpLnB1c2goe2RvYzpuLHNoYXJlZEhpc3Q6dC5zaGFyZWRIaXN0fSksbi5saW5rZWQ9W3tkb2M6dGhpcyxpc1BhcmVudDohMCxzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH1dLG59LHVubGlua0RvYzpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdCYmKGU9ZS5kb2MpLHRoaXMubGlua2VkKWZvcih2YXIgcj0wO3I8dGhpcy5saW5rZWQubGVuZ3RoOysrcil7dmFyIG49dGhpcy5saW5rZWRbcl07aWYobi5kb2M9PWUpe3RoaXMubGlua2VkLnNwbGljZShyLDEpLGUudW5saW5rRG9jKHRoaXMpO2JyZWFrfX1pZihlLmhpc3Rvcnk9PXRoaXMuaGlzdG9yeSl7dmFyIGk9W2UuaWRdO2RuKGUsZnVuY3Rpb24odCl7aS5wdXNoKHQuaWQpfSwhMCksZS5oaXN0b3J5PUxuKCksZS5oaXN0b3J5LmRvbmU9SG4odGhpcy5oaXN0b3J5LmRvbmUsaSksZS5oaXN0b3J5LnVuZG9uZT1Ibih0aGlzLmhpc3RvcnkudW5kb25lLGkpfX0saXRlckxpbmtlZERvY3M6ZnVuY3Rpb24odCl7ZG4odGhpcyx0KX0sZ2V0TW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtfX0pLHdvLnByb3RvdHlwZS5lYWNoTGluZT13by5wcm90b3R5cGUuaXRlcjt2YXIgTG89Iml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciIuc3BsaXQoIiAiKTtmb3IodmFyIGtvIGluIHdvLnByb3RvdHlwZSl3by5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa28pJiZ0aShMbyxrbyk8MCYmKHQucHJvdG90eXBlW2tvXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLmRvYyxhcmd1bWVudHMpfX0od28ucHJvdG90eXBlW2tvXSkpO2puKHdvKSx0LmVfc3RvcD1Qbix0LmVfcHJldmVudERlZmF1bHQ9em4sdC5lX3N0b3BQcm9wYWdhdGlvbj1Jbjt2YXIgU28sTW89MDt0Lm9uPUduLHQub2ZmPVZuLHQuc2lnbmFsPUtuO3ZhciBUbz0zMCxBbz10LlBhc3M9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNvZGVNaXJyb3IuUGFzcyJ9fTskbi5wcm90b3R5cGU9e3NldDpmdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0aGlzLmlkKSx0aGlzLmlkPXNldFRpbWVvdXQoZSx0KX19LHQuY291bnRDb2x1bW49Wm47dmFyIEhvPVsiIl0sTm89L1tcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vLERvPS9bXHUwMzAwLVx1MDM2Rlx1MDQ4My1cdTA0ODdcdTA0ODgtXHUwNDg5XHUwNTkxLVx1MDVCRFx1MDVCRlx1MDVDMS1cdTA1QzJcdTA1QzQtXHUwNUM1XHUwNUM3XHUwNjEwLVx1MDYxQVx1MDY0Qi1cdTA2NUZcdTA2NzBcdTA2RDYtXHUwNkRDXHUwNkRGLVx1MDZFNFx1MDZFNy1cdTA2RThcdTA2RUEtXHUwNkVEXHVBNjZGXHUxREMw4oCTXHUxREZGXHUyMEQw4oCTXHUyMEZGXHVBNjcwLVx1QTY3Mlx1QTY3NC1cdUE2N0RcdUE2OUZcdWRjMDAtXHVkZmZmXHVGRTIw4oCTXHVGRTJGXS87dC5yZXBsYWNlR2V0UmVjdD1mdW5jdGlvbih0KXtmaT10fTt2YXIgV289ZnVuY3Rpb24oKXtpZihOaSlyZXR1cm4hMTt2YXIgdD1zaSgiZGl2Iik7cmV0dXJuImRyYWdnYWJsZSJpbiB0fHwiZHJhZ0Ryb3AiaW4gdH0oKTtUaT9oaT1mdW5jdGlvbih0LGUpe3JldHVybiAzNj09dC5jaGFyQ29kZUF0KGUtMSkmJjM5PT10LmNoYXJDb2RlQXQoZSl9OklpJiYhL1ZlcnNpb25cLyhbNi05XXxcZFxkKVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpP2hpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuL1wtW14gXC0/XXxcP1teICFcJ1wiXCksLlwtXC86O1w/XF1cfV0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9OldpJiYvQ2hyb21lXC8oPzoyOXxbMy05XVxkfFxkXGRcZClcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2hhckNvZGVBdChlLTEpO3JldHVybiByPj04MjA4JiY4MjEyPj1yfTpXaSYmKGhpPWZ1bmN0aW9uKHQsZSl7aWYoZT4xJiY0NT09dC5jaGFyQ29kZUF0KGUtMSkpe2lmKC9cdy8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1teXC0/XC5dLy50ZXN0KHQuY2hhckF0KGUpKSlyZXR1cm4hMDtpZihlPjImJi9bXGRcLixdLy50ZXN0KHQuY2hhckF0KGUtMikpJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITF9cmV0dXJuL1t+ISMlJiopPSt9XF1cXHxcIlwuPiw6O11bKHtbPF18LVteXC0/XC5cdTIwMTAtXHUyMDFmXHUyMDI2XXxcP1tcd35gQCMkJVxeJiooXz0re1t8PjxdfOKApltcd35gQCMkJVxeJiooXz0re1s+PF0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9KTt2YXIgT28sRW8sem89MyE9IlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1bXSxuPXQubGVuZ3RoO24+PWU7KXt2YXIgaT10LmluZGV4T2YoIlxuIixlKTstMT09aSYmKGk9dC5sZW5ndGgpO3ZhciBvPXQuc2xpY2UoZSwiXHIiPT10LmNoYXJBdChpLTEpP2ktMTppKSxsPW8uaW5kZXhPZigiXHIiKTstMSE9bD8oci5wdXNoKG8uc2xpY2UoMCxsKSksZSs9bCsxKTooci5wdXNoKG8pLGU9aSsxKX1yZXR1cm4gcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoL1xyXG4/fFxuLyl9O3Quc3BsaXRMaW5lcz16bzt2YXIgSW89d2luZG93LmdldFNlbGVjdGlvbj9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuc2VsZWN0aW9uU3RhcnQhPXQuc2VsZWN0aW9uRW5kfWNhdGNoKGUpe3JldHVybiExfX06ZnVuY3Rpb24odCl7dHJ5e3ZhciBlPXQub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX1jYXRjaChyKXt9cmV0dXJuIGUmJmUucGFyZW50RWxlbWVudCgpPT10PzAhPWUuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsZSk6ITF9LEZvPWZ1bmN0aW9uKCl7dmFyIHQ9c2koImRpdiIpO3JldHVybiJvbmNvcHkiaW4gdD8hMDoodC5zZXRBdHRyaWJ1dGUoIm9uY29weSIsInJldHVybjsiKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5vbmNvcHkpfSgpLFBvPXszOiJFbnRlciIsODoiQmFja3NwYWNlIiw5OiJUYWIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ3RybCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2MiLDMyOiJTcGFjZSIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkxlZnQiLDM4OiJVcCIsMzk6IlJpZ2h0Iiw0MDoiRG93biIsNDQ6IlByaW50U2NybiIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsNTk6IjsiLDkxOiJNb2QiLDkyOiJNb2QiLDkzOiJNb2QiLDEwOToiLSIsMTA3OiI9IiwxMjc6IkRlbGV0ZSIsMTg2OiI7IiwxODc6Ij0iLDE4ODoiLCIsMTg5OiItIiwxOTA6Ii4iLDE5MToiLyIsMTkyOiJgIiwyMTk6IlsiLDIyMDoiXFwiLDIyMToiXSIsMjIyOiInIiw2MzI3NjoiUGFnZVVwIiw2MzI3NzoiUGFnZURvd24iLDYzMjc1OiJFbmQiLDYzMjczOiJIb21lIiw2MzIzNDoiTGVmdCIsNjMyMzI6IlVwIiw2MzIzNToiUmlnaHQiLDYzMjMzOiJEb3duIiw2MzMwMjoiSW5zZXJ0Iiw2MzI3MjoiRGVsZXRlIn07dC5rZXlOYW1lcz1QbyxmdW5jdGlvbigpe2Zvcih2YXIgdD0wOzEwPnQ7dCsrKVBvW3QrNDhdPVN0cmluZyh0KTtmb3IodmFyIHQ9NjU7OTA+PXQ7dCsrKVBvW3RdPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7Zm9yKHZhciB0PTE7MTI+PXQ7dCsrKVBvW3QrMTExXT1Qb1t0KzYzMjM1XT0iRiIrdH0oKTt2YXIgUm8sQm89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiAyNTU+PXQ/ZS5jaGFyQXQodCk6dD49MTQyNCYmMTUyND49dD8iUiI6dD49MTUzNiYmMTc5MT49dD9yLmNoYXJBdCh0LTE1MzYpOnQ+PTE3OTImJjIyMjA+PXQ/InIiOiJMIn12YXIgZT0iYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTCIscj0icnJycnJycnJycnJyLHJOTm1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1ycnJycnJybm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1ObW1tbXJycnJycnJycnJycnJycnJyciIsbj0vW1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUwNzAwLVx1MDhhY10vLGk9L1tzdHdOXS8sbz0vW0xScl0vLGw9L1tMYjFuXS8scz0vWzFuXS8sYT0iTCI7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFuLnRlc3QoZSkpcmV0dXJuITE7Zm9yKHZhciByLHU9ZS5sZW5ndGgsYz1bXSxmPTA7dT5mOysrZiljLnB1c2gocj10KGUuY2hhckNvZGVBdChmKSkpO2Zvcih2YXIgZj0wLGg9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyJtIj09cj9jW2ZdPWg6aD1yfWZvcih2YXIgZj0wLGQ9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyIxIj09ciYmInIiPT1kP2NbZl09Im4iOm8udGVzdChyKSYmKGQ9ciwiciI9PXImJihjW2ZdPSJSIikpfWZvcih2YXIgZj0xLGg9Y1swXTt1LTE+ZjsrK2Ype3ZhciByPWNbZl07IisiPT1yJiYiMSI9PWgmJiIxIj09Y1tmKzFdP2NbZl09IjEiOiIsIiE9cnx8aCE9Y1tmKzFdfHwiMSIhPWgmJiJuIiE9aHx8KGNbZl09aCksaD1yfWZvcih2YXIgZj0wO3U+ZjsrK2Ype3ZhciByPWNbZl07aWYoIiwiPT1yKWNbZl09Ik4iO2Vsc2UgaWYoIiUiPT1yKXtmb3IodmFyIHA9ZisxO3U+cCYmIiUiPT1jW3BdOysrcCk7Zm9yKHZhciBnPWYmJiIhIj09Y1tmLTFdfHx1LTE+cCYmIjEiPT1jW3BdPyIxIjoiTiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfX1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiTCI9PWQmJiIxIj09cj9jW2ZdPSJMIjpvLnRlc3QocikmJihkPXIpfWZvcih2YXIgZj0wO3U+ZjsrK2YpaWYoaS50ZXN0KGNbZl0pKXtmb3IodmFyIHA9ZisxO3U+cCYmaS50ZXN0KGNbcF0pOysrcCk7Zm9yKHZhciB2PSJMIj09KGY/Y1tmLTFdOmEpLHk9IkwiPT0odS0xPnA/Y1twXTphKSxnPXZ8fHk/IkwiOiJSIixtPWY7cD5tOysrbSljW21dPWc7Zj1wLTF9Zm9yKHZhciBiLHg9W10sZj0wO3U+ZjspaWYobC50ZXN0KGNbZl0pKXt2YXIgQz1mO2ZvcigrK2Y7dT5mJiZsLnRlc3QoY1tmXSk7KytmKTt4LnB1c2goe2Zyb206Qyx0bzpmLGxldmVsOjB9KX1lbHNle3ZhciB3PWYsTD14Lmxlbmd0aDtmb3IoKytmO3U+ZiYmIkwiIT1jW2ZdOysrZik7Zm9yKHZhciBtPXc7Zj5tOylpZihzLnRlc3QoY1ttXSkpe20+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86bSxsZXZlbDoxfSk7dmFyIGs9bTtmb3IoKyttO2Y+bSYmcy50ZXN0KGNbbV0pOysrbSk7eC5zcGxpY2UoTCwwLHtmcm9tOmssdG86bSxsZXZlbDoyfSksdz1tfWVsc2UrK207Zj53JiZ4LnNwbGljZShMLDAse2Zyb206dyx0bzpmLGxldmVsOjF9KX1yZXR1cm4gMT09eFswXS5sZXZlbCYmKGI9ZS5tYXRjaCgvXlxzKy8pKSYmKHhbMF0uZnJvbT1iWzBdLmxlbmd0aCx4LnVuc2hpZnQoe2Zyb206MCx0bzpiWzBdLmxlbmd0aCxsZXZlbDowfSkpLDE9PVFuKHgpLmxldmVsJiYoYj1lLm1hdGNoKC9ccyskLykpJiYoUW4oeCkudG8tPWJbMF0ubGVuZ3RoLHgucHVzaCh7ZnJvbTp1LWJbMF0ubGVuZ3RoLHRvOnUsbGV2ZWw6MH0pKSx4WzBdLmxldmVsIT1Rbih4KS5sZXZlbCYmeC5wdXNoKHtmcm9tOnUsdG86dSxsZXZlbDp4WzBdLmxldmVsfSkseH19KCk7cmV0dXJuIHQudmVyc2lvbj0iMy4yMC4wIix0fSgpO1BLBwjGXJGwv68BAL+vAQBQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAABzdGF0aWNcbGliXGhpZ2hsaWdodC5taW4uanN2YXIgaGxqcz1uZXcgZnVuY3Rpb24oKXtmdW5jdGlvbiBsKG8pe3JldHVybiBvLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvPC9nbSwiJmx0OyIpLnJlcGxhY2UoLz4vZ20sIiZndDsiKX1mdW5jdGlvbiBiKHApe2Zvcih2YXIgbz1wLmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpe2lmKG8ubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkNPREUiKXtyZXR1cm4gb31pZighKG8ubm9kZVR5cGU9PTMmJm8ubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe2JyZWFrfX19ZnVuY3Rpb24gaChwLG8pe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwocC5jaGlsZE5vZGVzLGZ1bmN0aW9uKHEpe2lmKHEubm9kZVR5cGU9PTMpe3JldHVybiBvP3Eubm9kZVZhbHVlLnJlcGxhY2UoL1xuL2csIiIpOnEubm9kZVZhbHVlfWlmKHEubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cmV0dXJuIlxuIn1yZXR1cm4gaChxLG8pfSkuam9pbigiIil9ZnVuY3Rpb24gYShxKXt2YXIgcD0ocS5jbGFzc05hbWUrIiAiKyhxLnBhcmVudE5vZGU/cS5wYXJlbnROb2RlLmNsYXNzTmFtZToiIikpLnNwbGl0KC9ccysvKTtwPXAubWFwKGZ1bmN0aW9uKHIpe3JldHVybiByLnJlcGxhY2UoL15sYW5ndWFnZS0vLCIiKX0pO2Zvcih2YXIgbz0wO288cC5sZW5ndGg7bysrKXtpZihlW3Bbb11dfHxwW29dPT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJuIHBbb119fX1mdW5jdGlvbiBjKHEpe3ZhciBvPVtdOyhmdW5jdGlvbiBwKHIscyl7Zm9yKHZhciB0PXIuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZyl7aWYodC5ub2RlVHlwZT09Myl7cys9dC5ub2RlVmFsdWUubGVuZ3RofWVsc2V7aWYodC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT0iQlIiKXtzKz0xfWVsc2V7aWYodC5ub2RlVHlwZT09MSl7by5wdXNoKHtldmVudDoic3RhcnQiLG9mZnNldDpzLG5vZGU6dH0pO3M9cCh0LHMpO28ucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDpzLG5vZGU6dH0pfX19fXJldHVybiBzfSkocSwwKTtyZXR1cm4gb31mdW5jdGlvbiBqKHAscix2KXt2YXIgcT0wO3ZhciB5PSIiO3ZhciBzPVtdO2Z1bmN0aW9uIHUoKXtpZighcC5sZW5ndGh8fCFyLmxlbmd0aCl7cmV0dXJuIHAubGVuZ3RoP3A6cn1pZihwWzBdLm9mZnNldCE9clswXS5vZmZzZXQpe3JldHVybihwWzBdLm9mZnNldDxyWzBdLm9mZnNldCk/cDpyfXJldHVybiByWzBdLmV2ZW50PT0ic3RhcnQiP3A6cn1mdW5jdGlvbiB0KEEpe2Z1bmN0aW9uIHooQil7cmV0dXJuIiAiK0Iubm9kZU5hbWUrJz0iJytsKEIudmFsdWUpKyciJ315Kz0iPCIrQS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChBLmF0dHJpYnV0ZXMseikuam9pbigiIikrIj4ifWZ1bmN0aW9uIHgoeil7eSs9IjwvIit6Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4ifWZ1bmN0aW9uIG8oeil7KHouZXZlbnQ9PSJzdGFydCI/dDp4KSh6Lm5vZGUpfXdoaWxlKHAubGVuZ3RofHxyLmxlbmd0aCl7dmFyIHc9dSgpO3krPWwodi5zdWJzdHIocSx3WzBdLm9mZnNldC1xKSk7cT13WzBdLm9mZnNldDtpZih3PT1wKXtzLnJldmVyc2UoKS5mb3JFYWNoKHgpO2Rve28ody5zcGxpY2UoMCwxKVswXSk7dz11KCl9d2hpbGUodz09cCYmdy5sZW5ndGgmJndbMF0ub2Zmc2V0PT1xKTtzLnJldmVyc2UoKS5mb3JFYWNoKHQpfWVsc2V7aWYod1swXS5ldmVudD09InN0YXJ0Iil7cy5wdXNoKHdbMF0ubm9kZSl9ZWxzZXtzLnBvcCgpfW8ody5zcGxpY2UoMCwxKVswXSl9fXJldHVybiB5K2wodi5zdWJzdHIocSkpfWZ1bmN0aW9uIGYocil7ZnVuY3Rpb24gbyhzKXtyZXR1cm4ocyYmcy5zb3VyY2UpfHxzfWZ1bmN0aW9uIHAodCxzKXtyZXR1cm4gUmVnRXhwKG8odCksIm0iKyhyLmNJPyJpIjoiIikrKHM/ImciOiIiKSl9ZnVuY3Rpb24gcSh6LHgpe2lmKHouY29tcGlsZWQpe3JldHVybn16LmNvbXBpbGVkPXRydWU7dmFyIHU9W107aWYoei5rKXt2YXIgcz17fTtmdW5jdGlvbiBBKEIsdCl7aWYoci5jSSl7dD10LnRvTG93ZXJDYXNlKCl9dC5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oQyl7dmFyIEQ9Qy5zcGxpdCgifCIpO3NbRFswXV09W0IsRFsxXT9OdW1iZXIoRFsxXSk6MV07dS5wdXNoKERbMF0pfSl9ei5sUj1wKHoubHx8IlxcYiIraGxqcy5JUisiXFxiKD8hXFwuKSIsdHJ1ZSk7aWYodHlwZW9mIHouaz09InN0cmluZyIpe0EoImtleXdvcmQiLHouayl9ZWxzZXtmb3IodmFyIHkgaW4gei5rKXtpZighei5rLmhhc093blByb3BlcnR5KHkpKXtjb250aW51ZX1BKHksei5rW3ldKX19ei5rPXN9aWYoeCl7aWYoei5iV0spe3ouYj0iXFxiKCIrdS5qb2luKCJ8IikrIilcXGIoPyFcXC4pXFxzKiJ9ei5iUj1wKHouYj96LmI6IlxcQnxcXGIiKTtpZighei5lJiYhei5lVyl7ei5lPSJcXEJ8XFxiIn1pZih6LmUpe3ouZVI9cCh6LmUpfXoudEU9byh6LmUpfHwiIjtpZih6LmVXJiZ4LnRFKXt6LnRFKz0oei5lPyJ8IjoiIikreC50RX19aWYoei5pKXt6LmlSPXAoei5pKX1pZih6LnI9PT11bmRlZmluZWQpe3oucj0xfWlmKCF6LmMpe3ouYz1bXX1mb3IodmFyIHc9MDt3PHouYy5sZW5ndGg7dysrKXtpZih6LmNbd109PSJzZWxmIil7ei5jW3ddPXp9cSh6LmNbd10seil9aWYoei5zdGFydHMpe3Eoei5zdGFydHMseCl9dmFyIHY9W107Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7di5wdXNoKG8oei5jW3ddLmIpKX1pZih6LnRFKXt2LnB1c2gobyh6LnRFKSl9aWYoei5pKXt2LnB1c2gobyh6LmkpKX16LnQ9di5sZW5ndGg/cCh2LmpvaW4oInwiKSx0cnVlKTp7ZXhlYzpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH19fXEocil9ZnVuY3Rpb24gZChFLEcsQyxNKXtmdW5jdGlvbiBvKHIsUCl7Zm9yKHZhciBPPTA7TzxQLmMubGVuZ3RoO08rKyl7dmFyIE49UC5jW09dLmJSLmV4ZWMocik7aWYoTiYmTi5pbmRleD09MCl7cmV0dXJuIFAuY1tPXX19fWZ1bmN0aW9uIHMoTixyKXtpZihOLmUmJk4uZVIudGVzdChyKSl7cmV0dXJuIE59aWYoTi5lVyl7cmV0dXJuIHMoTi5wYXJlbnQscil9fWZ1bmN0aW9uIHQocixOKXtyZXR1cm4gIUMmJk4uaSYmTi5pUi50ZXN0KHIpfWZ1bmN0aW9uIHkoTyxyKXt2YXIgTj1ILmNJP3JbMF0udG9Mb3dlckNhc2UoKTpyWzBdO3JldHVybiBPLmsuaGFzT3duUHJvcGVydHkoTikmJk8ua1tOXX1mdW5jdGlvbiBJKCl7dmFyIE49bCh3KTtpZighQi5rKXtyZXR1cm4gTn12YXIgcj0iIjt2YXIgUT0wO0IubFIubGFzdEluZGV4PTA7dmFyIE89Qi5sUi5leGVjKE4pO3doaWxlKE8pe3IrPU4uc3Vic3RyKFEsTy5pbmRleC1RKTt2YXIgUD15KEIsTyk7aWYoUCl7dis9UFsxXTtyKz0nPHNwYW4gY2xhc3M9IicrUFswXSsnIj4nK09bMF0rIjwvc3Bhbj4ifWVsc2V7cis9T1swXX1RPUIubFIubGFzdEluZGV4O089Qi5sUi5leGVjKE4pfXJldHVybiByK04uc3Vic3RyKFEpfWZ1bmN0aW9uIHooKXtpZihCLnNMJiYhZVtCLnNMXSl7cmV0dXJuIGwodyl9dmFyIE49Qi5zdWJMYW5ndWFnZU1vZGU9PSJjb250aW51b3VzIj9CLnRvcDp1bmRlZmluZWQ7dmFyIHI9Qi5zTD9kKEIuc0wsdyx0cnVlLE4pOmcodyk7aWYoQi5yPjApe3YrPXIua2V5d29yZF9jb3VudDtBKz1yLnJ9Qi50b3A9ci50b3A7cmV0dXJuJzxzcGFuIGNsYXNzPSInK3IubGFuZ3VhZ2UrJyI+JytyLnZhbHVlKyI8L3NwYW4+In1mdW5jdGlvbiBMKCl7cmV0dXJuIEIuc0whPT11bmRlZmluZWQ/eigpOkkoKX1mdW5jdGlvbiBLKE8scil7dmFyIE49Ty5jTj8nPHNwYW4gY2xhc3M9IicrTy5jTisnIj4nOiIiO2lmKE8uckIpe3grPU47dz0iIn1lbHNle2lmKE8uZUIpe3grPWwocikrTjt3PSIifWVsc2V7eCs9Tjt3PXJ9fUI9T2JqZWN0LmNyZWF0ZShPLHtwYXJlbnQ6e3ZhbHVlOkJ9fSl9ZnVuY3Rpb24gRChOLHIpe3crPU47aWYocj09PXVuZGVmaW5lZCl7eCs9TCgpO3JldHVybiAwfXZhciBQPW8ocixCKTtpZihQKXt4Kz1MKCk7SyhQLHIpO3JldHVybiBQLnJCPzA6ci5sZW5ndGh9dmFyIFE9cyhCLHIpO2lmKFEpe3ZhciBPPUI7aWYoIShPLnJFfHxPLmVFKSl7dys9cn14Kz1MKCk7ZG97aWYoQi5jTil7eCs9Ijwvc3Bhbj4ifUErPUIucjtCPUIucGFyZW50fXdoaWxlKEIhPVEucGFyZW50KTtpZihPLmVFKXt4Kz1sKHIpfXc9IiI7aWYoUS5zdGFydHMpe0soUS5zdGFydHMsIiIpfXJldHVybiBPLnJFPzA6ci5sZW5ndGh9aWYodChyLEIpKXt0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgbGV4ZW0gIicrcisnIiBmb3IgbW9kZSAiJysoQi5jTnx8Ijx1bm5hbWVkPiIpKyciJyl9dys9cjtyZXR1cm4gci5sZW5ndGh8fDF9dmFyIEg9ZVtFXTtpZighSCl7dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJytFKyciJyl9ZihIKTt2YXIgQj1NfHxIO3ZhciB4PSIiO2Zvcih2YXIgRj1CO0YhPUg7Rj1GLnBhcmVudCl7aWYoRi5jTil7eD0nPHNwYW4gY2xhc3M9IicrRi5jTisnIj4nK3h9fXZhciB3PSIiO3ZhciBBPTA7dmFyIHY9MDt0cnl7dmFyIHUscSxwPTA7d2hpbGUodHJ1ZSl7Qi50Lmxhc3RJbmRleD1wO3U9Qi50LmV4ZWMoRyk7aWYoIXUpe2JyZWFrfXE9RChHLnN1YnN0cihwLHUuaW5kZXgtcCksdVswXSk7cD11LmluZGV4K3F9RChHLnN1YnN0cihwKSk7Zm9yKHZhciBGPUI7Ri5wYXJlbnQ7Rj1GLnBhcmVudCl7aWYoRi5jTil7eCs9Ijwvc3Bhbj4ifX1yZXR1cm57cjpBLGtleXdvcmRfY291bnQ6dix2YWx1ZTp4LGxhbmd1YWdlOkUsdG9wOkJ9fWNhdGNoKEope2lmKEoubWVzc2FnZS5pbmRleE9mKCJJbGxlZ2FsIikhPS0xKXtyZXR1cm57cjowLGtleXdvcmRfY291bnQ6MCx2YWx1ZTpsKEcpfX1lbHNle3Rocm93IEp9fX1mdW5jdGlvbiBnKHMpe3ZhciBvPXtrZXl3b3JkX2NvdW50OjAscjowLHZhbHVlOmwocyl9O3ZhciBxPW87Zm9yKHZhciBwIGluIGUpe2lmKCFlLmhhc093blByb3BlcnR5KHApKXtjb250aW51ZX12YXIgcj1kKHAscyxmYWxzZSk7ci5sYW5ndWFnZT1wO2lmKHIua2V5d29yZF9jb3VudCtyLnI+cS5rZXl3b3JkX2NvdW50K3Eucil7cT1yfWlmKHIua2V5d29yZF9jb3VudCtyLnI+by5rZXl3b3JkX2NvdW50K28ucil7cT1vO289cn19aWYocS5sYW5ndWFnZSl7by5zZWNvbmRfYmVzdD1xfXJldHVybiBvfWZ1bmN0aW9uIGkocSxwLG8pe2lmKHApe3E9cS5yZXBsYWNlKC9eKCg8W14+XSs+fFx0KSspL2dtLGZ1bmN0aW9uKHIsdix1LHQpe3JldHVybiB2LnJlcGxhY2UoL1x0L2cscCl9KX1pZihvKXtxPXEucmVwbGFjZSgvXG4vZywiPGJyPiIpfXJldHVybiBxfWZ1bmN0aW9uIG0ocix1LHApe3ZhciB2PWgocixwKTt2YXIgdD1hKHIpO2lmKHQ9PSJuby1oaWdobGlnaHQiKXtyZXR1cm59dmFyIHc9dD9kKHQsdix0cnVlKTpnKHYpO3Q9dy5sYW5ndWFnZTt2YXIgbz1jKHIpO2lmKG8ubGVuZ3RoKXt2YXIgcT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKTtxLmlubmVySFRNTD13LnZhbHVlO3cudmFsdWU9aihvLGMocSksdil9dy52YWx1ZT1pKHcudmFsdWUsdSxwKTt2YXIgcz1yLmNsYXNzTmFtZTtpZighcy5tYXRjaCgiKFxcc3xeKShsYW5ndWFnZS0pPyIrdCsiKFxcc3wkKSIpKXtzPXM/KHMrIiAiK3QpOnR9ci5pbm5lckhUTUw9dy52YWx1ZTtyLmNsYXNzTmFtZT1zO3IucmVzdWx0PXtsYW5ndWFnZTp0LGt3Oncua2V5d29yZF9jb3VudCxyZTp3LnJ9O2lmKHcuc2Vjb25kX2Jlc3Qpe3Iuc2Vjb25kX2Jlc3Q9e2xhbmd1YWdlOncuc2Vjb25kX2Jlc3QubGFuZ3VhZ2Usa3c6dy5zZWNvbmRfYmVzdC5rZXl3b3JkX2NvdW50LHJlOncuc2Vjb25kX2Jlc3Qucn19fWZ1bmN0aW9uIG4oKXtpZihuLmNhbGxlZCl7cmV0dXJufW4uY2FsbGVkPXRydWU7QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKSxiKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbihvKXttKG8saGxqcy50YWJSZXBsYWNlKX0pfWZ1bmN0aW9uIGsoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsbixmYWxzZSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLG4sZmFsc2UpfXZhciBlPXt9O3RoaXMuTEFOR1VBR0VTPWU7dGhpcy5oaWdobGlnaHQ9ZDt0aGlzLmhpZ2hsaWdodEF1dG89Zzt0aGlzLmZpeE1hcmt1cD1pO3RoaXMuaGlnaGxpZ2h0QmxvY2s9bTt0aGlzLmluaXRIaWdobGlnaHRpbmc9bjt0aGlzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9azt0aGlzLklSPSJbYS16QS1aXVthLXpBLVowLTlfXSoiO3RoaXMuVUlSPSJbYS16QS1aX11bYS16QS1aMC05X10qIjt0aGlzLk5SPSJcXGJcXGQrKFxcLlxcZCspPyI7dGhpcy5DTlI9IihcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSI7dGhpcy5CTlI9IlxcYigwYlswMV0rKSI7dGhpcy5SU1I9IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfFxcLnwtfC09fC98Lz18Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+Pnw+Pnw+fFxcP3xcXFt8XFx7fFxcKHxcXF58XFxePXxcXHx8XFx8PXxcXHxcXHx8fiI7dGhpcy5CRT17YjoiXFxcXFtcXHNcXFNdIixyOjB9O3RoaXMuQVNNPXtjTjoic3RyaW5nIixiOiInIixlOiInIixpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5RU009e2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGk6IlxcbiIsYzpbdGhpcy5CRV0scjowfTt0aGlzLkNMQ009e2NOOiJjb21tZW50IixiOiIvLyIsZToiJCJ9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xcKiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9O3RoaXMuTk09e2NOOiJudW1iZXIiLGI6dGhpcy5OUixyOjB9O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLHI6MH07dGhpcy5CTk09e2NOOiJudW1iZXIiLGI6dGhpcy5CTlIscjowfTt0aGlzLlJFR0VYUF9NT0RFPXtjTjoicmVnZXhwIixiOi9cLy8sZTovXC9bZ2ltXSovLGk6L1xuLyxjOlt0aGlzLkJFLHtiOi9cWy8sZTovXF0vLHI6MCxjOlt0aGlzLkJFXX1dfTt0aGlzLmluaGVyaXQ9ZnVuY3Rpb24ocSxyKXt2YXIgbz17fTtmb3IodmFyIHAgaW4gcSl7b1twXT1xW3BdfWlmKHIpe2Zvcih2YXIgcCBpbiByKXtvW3BdPXJbcF19fXJldHVybiBvfX0oKTtobGpzLkxBTkdVQUdFUy5iYXNoPWZ1bmN0aW9uKGEpe3ZhciBjPXtjTjoidmFyaWFibGUiLGI6L1wkW1x3XGQjQF1bXHdcZF9dKi99O3ZhciBiPXtjTjoidmFyaWFibGUiLGI6L1wkXHsoLio/KVx9L307dmFyIGU9e2NOOiJzdHJpbmciLGI6LyIvLGU6LyIvLGM6W2EuQkUsYyxiLHtjTjoidmFyaWFibGUiLGI6L1wkXCgvLGU6L1wpLyxjOmEuQkV9XSxyOjB9O3ZhciBkPXtjTjoic3RyaW5nIixiOi8nLyxlOi8nLyxyOjB9O3JldHVybntsOi8tP1thLXpdKy8sazp7a2V5d29yZDoiaWYgdGhlbiBlbHNlIGVsaWYgZmkgZm9yIGJyZWFrIGNvbnRpbnVlIHdoaWxlIGluIGRvIGRvbmUgZXhpdCByZXR1cm4gc2V0IGRlY2xhcmUgY2FzZSBlc2FjIGV4cG9ydCBleGVjIixsaXRlcmFsOiJ0cnVlIGZhbHNlIixidWlsdF9pbjoicHJpbnRmIGVjaG8gcmVhZCBjZCBwd2QgcHVzaGQgcG9wZCBkaXJzIGxldCBldmFsIHVuc2V0IHR5cGVzZXQgcmVhZG9ubHkgZ2V0b3B0cyBzb3VyY2Ugc2hvcHQgY2FsbGVyIHR5cGUgaGFzaCBiaW5kIGhlbHAgc3VkbyIsb3BlcmF0b3I6Ii1uZSAtZXEgLWx0IC1ndCAtZiAtZCAtZSAtcyAtbCAtYSJ9LGM6W3tjTjoic2hlYmFuZyIsYjovXiMhW15cbl0rc2hccyokLyxyOjEwfSx7Y046ImZ1bmN0aW9uIixiOi9cd1tcd1xkX10qXHMqXChccypcKVxzKlx7LyxyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6L1x3W1x3XGRfXSovfV0scjowfSxhLkhDTSxhLk5NLGUsZCxjLGJdfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3M9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImFic3RyYWN0IGFzIGJhc2UgYm9vbCBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjaGVja2VkIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlY2ltYWwgZGVmYXVsdCBkZWxlZ2F0ZSBkbyBkb3VibGUgZWxzZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmYWxzZSBmaW5hbGx5IGZpeGVkIGZsb2F0IGZvciBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbmFtZXNwYWNlIG5ldyBudWxsIG9iamVjdCBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNieXRlIHNlYWxlZCBzaG9ydCBzaXplb2Ygc3RhY2thbGxvYyBzdGF0aWMgc3RyaW5nIHN0cnVjdCBzd2l0Y2ggdGhpcyB0aHJvdyB0cnVlIHRyeSB0eXBlb2YgdWludCB1bG9uZyB1bmNoZWNrZWQgdW5zYWZlIHVzaG9ydCB1c2luZyB2aXJ0dWFsIHZvbGF0aWxlIHZvaWQgd2hpbGUgYXN5bmMgYXdhaXQgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZnJvbSBnZXQgZ3JvdXAgaW50byBqb2luIGxldCBvcmRlcmJ5IHBhcnRpYWwgc2VsZWN0IHNldCB2YWx1ZSB2YXIgd2hlcmUgeWllbGQiLGM6W3tjTjoiY29tbWVudCIsYjoiLy8vIixlOiIkIixyQjp0cnVlLGM6W3tjTjoieG1sRG9jVGFnIixiOiIvLy98PCEtLXwtLT4ifSx7Y046InhtbERvY1RhZyIsYjoiPC8/IixlOiI+In1dfSxhLkNMQ00sYS5DQkxDTE0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGs6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHJlZ2lvbiBlbmRyZWdpb24gcHJhZ21hIGNoZWNrc3VtIn0se2NOOiJzdHJpbmciLGI6J0AiJyxlOiciJyxjOlt7YjonIiInfV19LGEuQVNNLGEuUVNNLGEuQ05NXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnJ1Ynk9ZnVuY3Rpb24oZSl7dmFyIGE9IlthLXpBLVpfXVthLXpBLVowLTlfXSooXFwhfFxcPyk/Ijt2YXIgaj0iW2EtekEtWl9dXFx3KlshPz1dP3xbLSt+XVxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFwqXFwqfFstLyslXiYqfmB8XXxcXFtcXF09PyI7dmFyIGc9e2tleXdvcmQ6ImFuZCBmYWxzZSB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIGlmIEJFR0lOIHJldHJ5IGVuZCBmb3IgdHJ1ZSBzZWxmIHdoZW4gbmV4dCB1bnRpbCBkbyBiZWdpbiB1bmxlc3MgRU5EIHJlc2N1ZSBuaWwgZWxzZSBicmVhayB1bmRlZiBub3Qgc3VwZXIgY2xhc3MgY2FzZSByZXF1aXJlIHlpZWxkIGFsaWFzIHdoaWxlIGVuc3VyZSBlbHNpZiBvciBpbmNsdWRlIn07dmFyIGM9e2NOOiJ5YXJkb2N0YWciLGI6IkBbQS1aYS16XSsifTt2YXIgaz1be2NOOiJjb21tZW50IixiOiIjIixlOiIkIixjOltjXX0se2NOOiJjb21tZW50IixiOiJeXFw9YmVnaW4iLGU6Il5cXD1lbmQiLGM6W2NdLHI6MTB9LHtjTjoiY29tbWVudCIsYjoiXl9fRU5EX18iLGU6IlxcbiQifV07dmFyIGQ9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsbDphLGs6Z307dmFyIGk9W2UuQkUsZF07dmFyIGI9W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOmkscjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcKCIsZToiXFwpIixjOml9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXFsiLGU6IlxcXSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/eyIsZToifSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/PCIsZToiPiIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8vIixlOiIvIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPyUiLGU6IiUiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LSIsZToiLSIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXHwiLGU6IlxcfCIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOi9cQlw/KFxcXGR7MSwzfXxcXHhbQS1GYS1mMC05XXsxLDJ9fFxcdVtBLUZhLWYwLTldezR9fFxcP1xTKVxiL31dO3ZhciBoPXtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6IiB8JHw7IixrOiJkZWYiLGM6W3tjTjoidGl0bGUiLGI6aixsOmEsazpnfSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGw6YSxrOmd9XS5jb25jYXQoayl9O3ZhciBmPWsuY29uY2F0KGIuY29uY2F0KFt7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIkfDsiLGs6ImNsYXNzIG1vZHVsZSIsYzpbe2NOOiJ0aXRsZSIsYjoiW0EtWmEtel9dXFx3Kig6OlxcdyspKihcXD98XFwhKT8iLHI6MH0se2NOOiJpbmhlcml0YW5jZSIsYjoiPFxccyoiLGM6W3tjTjoicGFyZW50IixiOiIoIitlLklSKyI6Oik/IitlLklSfV19XS5jb25jYXQoayl9LGgse2NOOiJjb25zdGFudCIsYjoiKDo6KT8oXFxiW0EtWl1cXHcqKDo6KT8pKyIscjowfSx7Y046InN5bWJvbCIsYjoiOiIsYzpiLmNvbmNhdChbe2I6an1dKSxyOjB9LHtjTjoic3ltYm9sIixiOmErIjoiLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2NOOiJ2YXJpYWJsZSIsYjoiKFxcJFxcVyl8KChcXCR8XFxAXFxAPykoXFx3KykpIn0se2I6IigiK2UuUlNSKyIpXFxzKiIsYzprLmNvbmNhdChbe2NOOiJyZWdleHAiLGI6Ii8iLGU6Ii9bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyeyIsZToifVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXCgiLGU6IlxcKVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXIhIixlOiIhW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlclxcWyIsZToiXFxdW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19XSkscjowfV0pKTtkLmM9ZjtoLmNbMV0uYz1mO3JldHVybntsOmEsazpnLGM6Zn19KGhsanMpO2hsanMuTEFOR1VBR0VTLmRpZmY9ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiY2h1bmsiLGI6Il5cXEBcXEAgK1xcLVxcZCssXFxkKyArXFwrXFxkKyxcXGQrICtcXEBcXEAkIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwqXFwqXFwqICtcXGQrLFxcZCsgK1xcKlxcKlxcKlxcKiQiLHI6MTB9LHtjTjoiY2h1bmsiLGI6Il5cXC1cXC1cXC0gK1xcZCssXFxkKyArXFwtXFwtXFwtXFwtJCIscjoxMH0se2NOOiJoZWFkZXIiLGI6IkluZGV4OiAiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiPT09PT0iLGU6Ij09PT09JCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwtXFwtXFwtIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCp7M30gIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCtcXCtcXCsiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXFwqezV9IixlOiJcXCp7NX0kIn0se2NOOiJhZGRpdGlvbiIsYjoiXlxcKyIsZToiJCJ9LHtjTjoiZGVsZXRpb24iLGI6Il5cXC0iLGU6IiQifSx7Y046ImNoYW5nZSIsYjoiXlxcISIsZToiJCJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmFzY3JpcHQ9ZnVuY3Rpb24oYSl7cmV0dXJue2s6e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHdpdGggdGhyb3cgY2FzZSBkZWZhdWx0IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGxldCB5aWVsZCBjb25zdCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCBOYU4gSW5maW5pdHkifSxjOlthLkFTTSxhLlFTTSxhLkNMQ00sYS5DQkxDTE0sYS5DTk0se2I6IigiK2EuUlNSKyJ8XFxiKGNhc2V8cmV0dXJufHRocm93KVxcYilcXHMqIixrOiJyZXR1cm4gdGhyb3cgY2FzZSIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUkVHRVhQX01PREUse2I6LzwvLGU6Lz47LyxzTDoieG1sIn1dLHI6MH0se2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZTovey8sazoiZnVuY3Rpb24iLGM6W3tjTjoidGl0bGUiLGI6L1tBLVphLXokX11bMC05QS1aYS16JF9dKi99LHtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6W2EuQ0xDTSxhLkNCTENMTV0saTovWyInXChdL31dLGk6L1xbfCUvfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy54bWw9ZnVuY3Rpb24oYSl7dmFyIGM9IltBLVphLXowLTlcXC5fOi1dKyI7dmFyIGI9e2VXOnRydWUscjowLGM6W3tjTjoiYXR0cmlidXRlIixiOmMscjowfSx7YjonPSInLHJCOnRydWUsZTonIicsYzpbe2NOOiJ2YWx1ZSIsYjonIicsZVc6dHJ1ZX1dfSx7YjoiPSciLHJCOnRydWUsZToiJyIsYzpbe2NOOiJ2YWx1ZSIsYjoiJyIsZVc6dHJ1ZX1dfSx7YjoiPSIsYzpbe2NOOiJ2YWx1ZSIsYjoiW15cXHMvPl0rIn1dfV19O3JldHVybntjSTp0cnVlLGM6W3tjTjoicGkiLGI6IjxcXD8iLGU6IlxcPz4iLHI6MTB9LHtjTjoiZG9jdHlwZSIsYjoiPCFET0NUWVBFIixlOiI+IixyOjEwLGM6W3tiOiJcXFsiLGU6IlxcXSJ9XX0se2NOOiJjb21tZW50IixiOiI8IS0tIixlOiItLT4iLHI6MTB9LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiIscjoxMH0se2NOOiJ0YWciLGI6IjxzdHlsZSg/PVxcc3w+fCQpIixlOiI+IixrOnt0aXRsZToic3R5bGUifSxjOltiXSxzdGFydHM6e2U6Ijwvc3R5bGU+IixyRTp0cnVlLHNMOiJjc3MifX0se2NOOiJ0YWciLGI6IjxzY3JpcHQoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InNjcmlwdCJ9LGM6W2JdLHN0YXJ0czp7ZToiPFwvc2NyaXB0PiIsckU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9fSx7YjoiPCUiLGU6IiU+IixzTDoidmJzY3JpcHQifSx7Y046InRhZyIsYjoiPC8/IixlOiIvPz4iLHI6MCxjOlt7Y046InRpdGxlIixiOiJbXiAvPjxdKyJ9LGJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYXJrZG93bj1mdW5jdGlvbihhKXtyZXR1cm57Yzpbe2NOOiJoZWFkZXIiLGI6Il4jezEsM30iLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXi4rP1xcbls9LV17Mix9JCJ9LHtiOiI8IixlOiI+IixzTDoieG1sIixyOjB9LHtjTjoiYnVsbGV0IixiOiJeKFsqKy1dfChcXGQrXFwuKSlcXHMrIn0se2NOOiJzdHJvbmciLGI6IlsqX117Mn0uKz9bKl9dezJ9In0se2NOOiJlbXBoYXNpcyIsYjoiXFwqLis/XFwqIn0se2NOOiJlbXBoYXNpcyIsYjoiXy4rP18iLHI6MH0se2NOOiJibG9ja3F1b3RlIixiOiJePlxccysiLGU6IiQifSx7Y046ImNvZGUiLGI6ImAuKz9gIn0se2NOOiJjb2RlIixiOiJeICAgICIsZToiJCIscjowfSx7Y046Imhvcml6b250YWxfcnVsZSIsYjoiXi17Myx9IixlOiIkIn0se2I6IlxcWy4rP1xcXVxcKC4rP1xcKSIsckI6dHJ1ZSxjOlt7Y046ImxpbmtfbGFiZWwiLGI6IlxcWy4rXFxdIn0se2NOOiJsaW5rX3VybCIsYjoiXFwoIixlOiJcXCkiLGVCOnRydWUsZUU6dHJ1ZX1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jc3M9ZnVuY3Rpb24oYSl7dmFyIGI9IlthLXpBLVotXVthLXpBLVowLTlfLV0qIjt2YXIgYz17Y046ImZ1bmN0aW9uIixiOmIrIlxcKCIsZToiXFwpIixjOlsic2VsZiIsYS5OTSxhLkFTTSxhLlFTTV19O3JldHVybntjSTp0cnVlLGk6Ils9L3wnXSIsYzpbYS5DQkxDTE0se2NOOiJpZCIsYjoiXFwjW0EtWmEtejAtOV8tXSsifSx7Y046ImNsYXNzIixiOiJcXC5bQS1aYS16MC05Xy1dKyIscjowfSx7Y046ImF0dHJfc2VsZWN0b3IiLGI6IlxcWyIsZToiXFxdIixpOiIkIn0se2NOOiJwc2V1ZG8iLGI6IjooOik/W2EtekEtWjAtOVxcX1xcLVxcK1xcKFxcKVxcXCJcXCddKyJ9LHtjTjoiYXRfcnVsZSIsYjoiQChmb250LWZhY2V8cGFnZSkiLGw6IlthLXotXSsiLGs6ImZvbnQtZmFjZSBwYWdlIn0se2NOOiJhdF9ydWxlIixiOiJAIixlOiJbeztdIixjOlt7Y046ImtleXdvcmQiLGI6L1xTKy99LHtiOi9ccy8sZVc6dHJ1ZSxlRTp0cnVlLHI6MCxjOltjLGEuQVNNLGEuUVNNLGEuTk1dfV19LHtjTjoidGFnIixiOmIscjowfSx7Y046InJ1bGVzIixiOiJ7IixlOiJ9IixpOiJbXlxcc10iLHI6MCxjOlthLkNCTENMTSx7Y046InJ1bGUiLGI6IlteXFxzXSIsckI6dHJ1ZSxlOiI7IixlVzp0cnVlLGM6W3tjTjoiYXR0cmlidXRlIixiOiJbQS1aXFxfXFwuXFwtXSsiLGU6IjoiLGVFOnRydWUsaToiW15cXHNdIixzdGFydHM6e2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxlRTp0cnVlLGM6W2MsYS5OTSxhLlFTTSxhLkFTTSxhLkNCTENMTSx7Y046ImhleGNvbG9yIixiOiIjWzAtOUEtRmEtZl0rIn0se2NOOiJpbXBvcnRhbnQiLGI6IiFpbXBvcnRhbnQifV19fV19XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaHR0cD1mdW5jdGlvbihhKXtyZXR1cm57aToiXFxTIixjOlt7Y046InN0YXR1cyIsYjoiXkhUVFAvWzAtOVxcLl0rIixlOiIkIixjOlt7Y046Im51bWJlciIsYjoiXFxiXFxkezN9XFxiIn1dfSx7Y046InJlcXVlc3QiLGI6Il5bQS1aXSsgKC4qPykgSFRUUC9bMC05XFwuXSskIixyQjp0cnVlLGU6IiQiLGM6W3tjTjoic3RyaW5nIixiOiIgIixlOiIgIixlQjp0cnVlLGVFOnRydWV9XX0se2NOOiJhdHRyaWJ1dGUiLGI6Il5cXHciLGU6IjogIixlRTp0cnVlLGk6IlxcbnxcXHN8PSIsc3RhcnRzOntjTjoic3RyaW5nIixlOiIkIn19LHtiOiJcXG5cXG4iLHN0YXJ0czp7c0w6IiIsZVc6dHJ1ZX19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmE9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkIGVudW0gZWxzZSBicmVhayB0cmFuc2llbnQgbmV3IGNhdGNoIGluc3RhbmNlb2YgYnl0ZSBzdXBlciB2b2xhdGlsZSBjYXNlIGFzc2VydCBzaG9ydCBwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIixjOlt7Y046ImphdmFkb2MiLGI6Ii9cXCpcXCoiLGU6IlxcKi8iLGM6W3tjTjoiamF2YWRvY3RhZyIsYjoiKF58XFxzKUBbQS1aYS16XSsifV0scjoxMH0sYS5DTENNLGEuQ0JMQ0xNLGEuQVNNLGEuUVNNLHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIGludGVyZmFjZSIsZUU6dHJ1ZSxpOiI6IixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyBpbXBsZW1lbnRzIixyOjEwfSx7Y046InRpdGxlIixiOmEuVUlSfV19LGEuQ05NLHtjTjoiYW5ub3RhdGlvbiIsYjoiQFtBLVphLXpdKyJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnBocD1mdW5jdGlvbihhKXt2YXIgZT17Y046InZhcmlhYmxlIixiOiJcXCQrW2EtekEtWl9ceDdmLVx4ZmZdW2EtekEtWjAtOV9ceDdmLVx4ZmZdKiJ9O3ZhciBiPVthLmluaGVyaXQoYS5BU00se2k6bnVsbH0pLGEuaW5oZXJpdChhLlFTTSx7aTpudWxsfSkse2NOOiJzdHJpbmciLGI6J2IiJyxlOiciJyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6ImInIixlOiInIixjOlthLkJFXX1dO3ZhciBjPVthLkJOTSxhLkNOTV07dmFyIGQ9e2NOOiJ0aXRsZSIsYjphLlVJUn07cmV0dXJue2NJOnRydWUsbDphLlVJUixrOiJhbmQgaW5jbHVkZV9vbmNlIGxpc3QgYWJzdHJhY3QgZ2xvYmFsIHByaXZhdGUgZWNobyBpbnRlcmZhY2UgYXMgc3RhdGljIGVuZHN3aXRjaCBhcnJheSBudWxsIGlmIGVuZHdoaWxlIG9yIGNvbnN0IGZvciBlbmRmb3JlYWNoIHNlbGYgdmFyIHdoaWxlIGlzc2V0IHB1YmxpYyBwcm90ZWN0ZWQgZXhpdCBmb3JlYWNoIHRocm93IGVsc2VpZiBpbmNsdWRlIF9fRklMRV9fIGVtcHR5IHJlcXVpcmVfb25jZSBkbyB4b3IgcmV0dXJuIGltcGxlbWVudHMgcGFyZW50IGNsb25lIHVzZSBfX0NMQVNTX18gX19MSU5FX18gZWxzZSBicmVhayBwcmludCBldmFsIG5ldyBjYXRjaCBfX01FVEhPRF9fIGNhc2UgZXhjZXB0aW9uIGRlZmF1bHQgZGllIHJlcXVpcmUgX19GVU5DVElPTl9fIGVuZGRlY2xhcmUgZmluYWwgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIGVuZGZvciBlbmRpZiBkZWNsYXJlIHVuc2V0IHRydWUgZmFsc2UgbmFtZXNwYWNlIHRyYWl0IGdvdG8gaW5zdGFuY2VvZiBpbnN0ZWFkb2YgX19ESVJfXyBfX05BTUVTUEFDRV9fIHlpZWxkIGZpbmFsbHkiLGM6W2EuQ0xDTSxhLkhDTSx7Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8iLGM6W3tjTjoicGhwZG9jIixiOiJcXHNAW0EtWmEtel0rIn1dfSx7Y046ImNvbW1lbnQiLGI6Il9faGFsdF9jb21waWxlci4rPzsiLGVXOnRydWUsazoiX19oYWx0X2NvbXBpbGVyIixsOmEuVUlSfSx7Y046InN0cmluZyIsYjoiPDw8WydcIl0/XFx3K1snXCJdPyQiLGU6Il5cXHcrOyIsYzpbYS5CRV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiI8XFw/cGhwIixyOjEwfSx7Y046InByZXByb2Nlc3NvciIsYjoiXFw/PiJ9LGUse2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZToieyIsazoiZnVuY3Rpb24iLGk6IlxcJHxcXFt8JSIsYzpbZCx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6WyJzZWxmIixlLGEuQ0JMQ0xNXS5jb25jYXQoYikuY29uY2F0KGMpfV19LHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIixpOiJbOlxcKFxcJF0iLGM6W3tiV0s6dHJ1ZSxlVzp0cnVlLGs6ImV4dGVuZHMiLGM6W2RdfSxkXX0se2I6Ij0+In1dLmNvbmNhdChiKS5jb25jYXQoYyl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5weXRob249ZnVuY3Rpb24oYSl7dmFyIGY9e2NOOiJwcm9tcHQiLGI6L14oPj4+fFwuXC5cLikgL307dmFyIGM9W3tjTjoic3RyaW5nIixiOi8odXxiKT9yPycnJy8sZTovJycnLyxjOltmXSxyOjEwfSx7Y046InN0cmluZyIsYjovKHV8Yik/cj8iIiIvLGU6LyIiIi8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpJy8sZTovJy8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpIi8sZTovIi8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6LyhifGJyKScvLGU6LycvLGM6W2EuQkVdfSx7Y046InN0cmluZyIsYjovKGJ8YnIpIi8sZTovIi8sYzpbYS5CRV19XS5jb25jYXQoW2EuQVNNLGEuUVNNXSk7dmFyIGU9e2NOOiJ0aXRsZSIsYjphLlVJUn07dmFyIGQ9e2NOOiJwYXJhbXMiLGI6L1woLyxlOi9cKS8sYzpbInNlbGYiLGEuQ05NLGZdLmNvbmNhdChjKX07dmFyIGI9e2JXSzp0cnVlLGU6LzovLGk6L1skez07XG5dLyxjOltlLGRdLHI6MTB9O3JldHVybntrOntrZXl3b3JkOiJhbmQgZWxpZiBpcyBnbG9iYWwgYXMgaW4gaWYgZnJvbSByYWlzZSBmb3IgZXhjZXB0IGZpbmFsbHkgcHJpbnQgaW1wb3J0IHBhc3MgcmV0dXJuIGV4ZWMgZWxzZSBicmVhayBub3Qgd2l0aCBjbGFzcyBhc3NlcnQgeWllbGQgdHJ5IHdoaWxlIGNvbnRpbnVlIGRlbCBvciBkZWYgbGFtYmRhIG5vbmxvY2FsfDEwIE5vbmUgVHJ1ZSBGYWxzZSIsYnVpbHRfaW46IkVsbGlwc2lzIE5vdEltcGxlbWVudGVkIn0saTovKDxcL3wtPnxcPykvLGM6Yy5jb25jYXQoW2YsYS5IQ00sYS5pbmhlcml0KGIse2NOOiJmdW5jdGlvbiIsazoiZGVmIn0pLGEuaW5oZXJpdChiLHtjTjoiY2xhc3MiLGs6ImNsYXNzIn0pLGEuQ05NLHtjTjoiZGVjb3JhdG9yIixiOi9ALyxlOi8kL30se2I6L1xiKHByaW50fGV4ZWMpXCgvfV0pfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuc3FsPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGM6W3tjTjoib3BlcmF0b3IiLGI6IihiZWdpbnxlbmR8c3RhcnR8Y29tbWl0fHJvbGxiYWNrfHNhdmVwb2ludHxsb2NrfGFsdGVyfGNyZWF0ZXxkcm9wfHJlbmFtZXxjYWxsfGRlbGV0ZXxkb3xoYW5kbGVyfGluc2VydHxsb2FkfHJlcGxhY2V8c2VsZWN0fHRydW5jYXRlfHVwZGF0ZXxzZXR8c2hvd3xwcmFnbWF8Z3JhbnQpXFxiKD8hOikiLGU6IjsiLGVXOnRydWUsazp7a2V5d29yZDoiYWxsIHBhcnRpYWwgZ2xvYmFsIG1vbnRoIGN1cnJlbnRfdGltZXN0YW1wIHVzaW5nIGdvIHJldm9rZSBzbWFsbGludCBpbmRpY2F0b3IgZW5kLWV4ZWMgZGlzY29ubmVjdCB6b25lIHdpdGggY2hhcmFjdGVyIGFzc2VydGlvbiB0byBhZGQgY3VycmVudF91c2VyIHVzYWdlIGlucHV0IGxvY2FsIGFsdGVyIG1hdGNoIGNvbGxhdGUgcmVhbCB0aGVuIHJvbGxiYWNrIGdldCByZWFkIHRpbWVzdGFtcCBzZXNzaW9uX3VzZXIgbm90IGludGVnZXIgYml0IHVuaXF1ZSBkYXkgbWludXRlIGRlc2MgaW5zZXJ0IGV4ZWN1dGUgbGlrZSBpbGlrZXwyIGxldmVsIGRlY2ltYWwgZHJvcCBjb250aW51ZSBpc29sYXRpb24gZm91bmQgd2hlcmUgY29uc3RyYWludHMgZG9tYWluIHJpZ2h0IG5hdGlvbmFsIHNvbWUgbW9kdWxlIHRyYW5zYWN0aW9uIHJlbGF0aXZlIHNlY29uZCBjb25uZWN0IGVzY2FwZSBjbG9zZSBzeXN0ZW1fdXNlciBmb3IgZGVmZXJyZWQgc2VjdGlvbiBjYXN0IGN1cnJlbnQgc3Fsc3RhdGUgYWxsb2NhdGUgaW50ZXJzZWN0IGRlYWxsb2NhdGUgbnVtZXJpYyBwdWJsaWMgcHJlc2VydmUgZnVsbCBnb3RvIGluaXRpYWxseSBhc2Mgbm8ga2V5IG91dHB1dCBjb2xsYXRpb24gZ3JvdXAgYnkgdW5pb24gc2Vzc2lvbiBib3RoIGxhc3QgbGFuZ3VhZ2UgY29uc3RyYWludCBjb2x1bW4gb2Ygc3BhY2UgZm9yZWlnbiBkZWZlcnJhYmxlIHByaW9yIGNvbm5lY3Rpb24gdW5rbm93biBhY3Rpb24gY29tbWl0IHZpZXcgb3IgZmlyc3QgaW50byBmbG9hdCB5ZWFyIHByaW1hcnkgY2FzY2FkZWQgZXhjZXB0IHJlc3RyaWN0IHNldCByZWZlcmVuY2VzIG5hbWVzIHRhYmxlIG91dGVyIG9wZW4gc2VsZWN0IHNpemUgYXJlIHJvd3MgZnJvbSBwcmVwYXJlIGRpc3RpbmN0IGxlYWRpbmcgY3JlYXRlIG9ubHkgbmV4dCBpbm5lciBhdXRob3JpemF0aW9uIHNjaGVtYSBjb3JyZXNwb25kaW5nIG9wdGlvbiBkZWNsYXJlIHByZWNpc2lvbiBpbW1lZGlhdGUgZWxzZSB0aW1lem9uZV9taW51dGUgZXh0ZXJuYWwgdmFyeWluZyB0cmFuc2xhdGlvbiB0cnVlIGNhc2UgZXhjZXB0aW9uIGpvaW4gaG91ciBkZWZhdWx0IGRvdWJsZSBzY3JvbGwgdmFsdWUgY3Vyc29yIGRlc2NyaXB0b3IgdmFsdWVzIGRlYyBmZXRjaCBwcm9jZWR1cmUgZGVsZXRlIGFuZCBmYWxzZSBpbnQgaXMgZGVzY3JpYmUgY2hhciBhcyBhdCBpbiB2YXJjaGFyIG51bGwgdHJhaWxpbmcgYW55IGFic29sdXRlIGN1cnJlbnRfdGltZSBlbmQgZ3JhbnQgcHJpdmlsZWdlcyB3aGVuIGNyb3NzIGNoZWNrIHdyaXRlIGN1cnJlbnRfZGF0ZSBwYWQgYmVnaW4gdGVtcG9yYXJ5IGV4ZWMgdGltZSB1cGRhdGUgY2F0YWxvZyB1c2VyIHNxbCBkYXRlIG9uIGlkZW50aXR5IHRpbWV6b25lX2hvdXIgbmF0dXJhbCB3aGVuZXZlciBpbnRlcnZhbCB3b3JrIG9yZGVyIGNhc2NhZGUgZGlhZ25vc3RpY3MgbmNoYXIgaGF2aW5nIGxlZnQgY2FsbCBkbyBoYW5kbGVyIGxvYWQgcmVwbGFjZSB0cnVuY2F0ZSBzdGFydCBsb2NrIHNob3cgcHJhZ21hIGV4aXN0cyBudW1iZXIgdHJpZ2dlciBpZiBiZWZvcmUgYWZ0ZXIgZWFjaCByb3ciLGFnZ3JlZ2F0ZToiY291bnQgc3VtIG1pbiBtYXggYXZnIn0sYzpbe2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2EuQkUse2I6IicnIn1dLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2EuQkUse2I6JyIiJ31dLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6W2EuQkVdfSxhLkNOTV19LGEuQ0JMQ0xNLHtjTjoiY29tbWVudCIsYjoiLS0iLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5pbmk9ZnVuY3Rpb24oYSl7cmV0dXJue2NJOnRydWUsaToiW15cXHNdIixjOlt7Y046ImNvbW1lbnQiLGI6IjsiLGU6IiQifSx7Y046InRpdGxlIixiOiJeXFxbIixlOiJcXF0ifSx7Y046InNldHRpbmciLGI6Il5bYS16MC05XFxbXFxdXy1dK1sgXFx0XSo9WyBcXHRdKiIsZToiJCIsYzpbe2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxrOiJvbiBvZmYgdHJ1ZSBmYWxzZSB5ZXMgbm8iLGM6W2EuUVNNLGEuTk1dLHI6MH1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKGUpe3ZhciBhPSJnZXRwd2VudCBnZXRzZXJ2ZW50IHF1b3RlbWV0YSBtc2dyY3Ygc2NhbGFyIGtpbGwgZGJtY2xvc2UgdW5kZWYgbGMgbWEgc3lzd3JpdGUgdHIgc2VuZCB1bWFzayBzeXNvcGVuIHNobXdyaXRlIHZlYyBxeCB1dGltZSBsb2NhbCBvY3Qgc2VtY3RsIGxvY2FsdGltZSByZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXFmaWxlbm8gcXcgZW5kcHJvdG9lbnQgd2FpdCBzZXRob3N0ZW50IGJsZXNzIHN8MCBvcGVuZGlyIGNvbnRpbnVlIGVhY2ggc2xlZXAgZW5kZ3JlbnQgc2h1dGRvd24gZHVtcCBjaG9tcCBjb25uZWN0IGdldHNvY2tuYW1lIGRpZSBzb2NrZXRwYWlyIGNsb3NlIGZsb2NrIGV4aXN0cyBpbmRleCBzaG1nZXRzdWIgZm9yIGVuZHB3ZW50IHJlZG8gbHN0YXQgbXNnY3RsIHNldHBncnAgYWJzIGV4aXQgc2VsZWN0IHByaW50IHJlZiBnZXRob3N0YnlhZGRyIHVuc2hpZnQgZmNudGwgc3lzY2FsbCBnb3RvIGdldG5ldGJ5YWRkciBqb2luIGdtdGltZSBzeW1saW5rIHNlbWdldCBzcGxpY2UgeHwwIGdldHBlZXJuYW1lIHJlY3YgbG9nIHNldHNvY2tvcHQgY29zIGxhc3QgcmV2ZXJzZSBnZXRob3N0YnluYW1lIGdldGdybmFtIHN0dWR5IGZvcm1saW5lIGVuZGhvc3RlbnQgdGltZXMgY2hvcCBsZW5ndGggZ2V0aG9zdGVudCBnZXRuZXRlbnQgcGFjayBnZXRwcm90b2VudCBnZXRzZXJ2YnluYW1lIHJhbmQgbWtkaXIgcG9zIGNobW9kIHl8MCBzdWJzdHIgZW5kbmV0ZW50IHByaW50ZiBuZXh0IG9wZW4gbXNnc25kIHJlYWRkaXIgdXNlIHVubGluayBnZXRzb2Nrb3B0IGdldHByaW9yaXR5IHJpbmRleCB3YW50YXJyYXkgaGV4IHN5c3RlbSBnZXRzZXJ2Ynlwb3J0IGVuZHNlcnZlbnQgaW50IGNociB1bnRpZSBybWRpciBwcm90b3R5cGUgdGVsbCBsaXN0ZW4gZm9yayBzaG1yZWFkIHVjZmlyc3Qgc2V0cHJvdG9lbnQgZWxzZSBzeXNzZWVrIGxpbmsgZ2V0Z3JnaWQgc2htY3RsIHdhaXRwaWQgdW5wYWNrIGdldG5ldGJ5bmFtZSByZXNldCBjaGRpciBncmVwIHNwbGl0IHJlcXVpcmUgY2FsbGVyIGxjZmlyc3QgdW50aWwgd2FybiB3aGlsZSB2YWx1ZXMgc2hpZnQgdGVsbGRpciBnZXRwd3VpZCBteSBnZXRwcm90b2J5bnVtYmVyIGRlbGV0ZSBhbmQgc29ydCB1YyBkZWZpbmVkIHNyYW5kIGFjY2VwdCBwYWNrYWdlIHNlZWtkaXIgZ2V0cHJvdG9ieW5hbWUgc2Vtb3Agb3VyIHJlbmFtZSBzZWVrIGlmIHF8MCBjaHJvb3Qgc3lzcmVhZCBzZXRwd2VudCBubyBjcnlwdCBnZXRjIGNob3duIHNxcnQgd3JpdGUgc2V0bmV0ZW50IHNldHByaW9yaXR5IGZvcmVhY2ggdGllIHNpbiBtc2dnZXQgbWFwIHN0YXQgZ2V0bG9naW4gdW5sZXNzIGVsc2lmIHRydW5jYXRlIGV4ZWMga2V5cyBnbG9iIHRpZWQgY2xvc2VkaXJpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlIGF0YW4yIGdldGdyZW50IGV4cCB0aW1lIHB1c2ggc2V0Z3JlbnQgZ3QgbHQgb3IgbmUgbXwwIGJyZWFrIGdpdmVuIHNheSBzdGF0ZSB3aGVuIjt2YXIgZD17Y046InN1YnN0IixiOiJbJEBdXFx7IixlOiJcXH0iLGs6YSxyOjEwfTt2YXIgYj17Y046InZhcmlhYmxlIixiOiJcXCRcXGQifTt2YXIgaT17Y046InZhcmlhYmxlIixiOiJbXFwkXFwlXFxAXFwqXShcXF5cXHdcXGJ8I1xcdysoXFw6XFw6XFx3KykqfFteXFxzXFx3e118e1xcdyt9fFxcdysoXFw6XFw6XFx3KikqKSJ9O3ZhciBmPVtlLkJFLGQsYixpXTt2YXIgaD17YjoiLT4iLGM6W3tiOmUuSVJ9LHtiOiJ7IixlOiJ9In1dfTt2YXIgZz17Y046ImNvbW1lbnQiLGI6Il4oX19FTkRfX3xfX0RBVEFfXykiLGU6IlxcbiQiLHI6NX07dmFyIGM9W2IsaSxlLkhDTSxnLHtjTjoiY29tbWVudCIsYjoiXlxcPVxcdyIsZToiXFw9Y3V0IixlVzp0cnVlfSxoLHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXCgiLGU6IlxcKSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcWyIsZToiXFxdIixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXHwiLGU6IlxcfCIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcPCIsZToiXFw+IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicXdcXHMrcSIsZToicSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2UuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6ZixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFXX0se2NOOiJzdHJpbmciLGI6IntcXHcrfSIscjowfSx7Y046InN0cmluZyIsYjoiLT9cXHcrXFxzKlxcPVxcPiIscjowfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscjowfSx7YjoiKCIrZS5SU1IrInxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXGIpXFxzKiIsazoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscjowLGM6W2UuSENNLGcse2NOOiJyZWdleHAiLGI6IihzfHRyfHkpLyhcXFxcLnxbXi9dKSovKFxcXFwufFteL10pKi9bYS16XSoiLHI6MTB9LHtjTjoicmVnZXhwIixiOiIobXxxcik/LyIsZToiL1thLXpdKiIsYzpbZS5CRV0scjowfV19LHtjTjoic3ViIixiV0s6dHJ1ZSxlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsazoic3ViIixyOjV9LHtjTjoib3BlcmF0b3IiLGI6Ii1cXHdcXGIiLHI6MH1dO2QuYz1jO2guY1sxXS5jPWM7cmV0dXJue2s6YSxjOmN9fShobGpzKTtobGpzLkxBTkdVQUdFUy5vYmplY3RpdmVjPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNhdGNoIGV4cG9ydCBzaXplb2YgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgZm9yIHVuaW9uIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIG11dGFibGUgaWYgcHVibGljIGRvIHJldHVybiBnb3RvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiBhc20gY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSB0aHJvdyByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHdjaGFyX3QgaW5saW5lIHJlYWRvbmx5IGFzc2lnbiBwcm9wZXJ0eSBzZWxmIHN5bmNocm9uaXplZCBlbmQgc3ludGhlc2l6ZSBpZCBvcHRpb25hbCByZXF1aXJlZCBub25hdG9taWMgc3VwZXIgdW5pY2hhciBmaW5hbGx5IGR5bmFtaWMgSUJPdXRsZXQgSUJBY3Rpb24gc2VsZWN0b3Igc3Ryb25nIHdlYWsgcmVhZG9ubHkiLGxpdGVyYWw6ImZhbHNlIHRydWUgRkFMU0UgVFJVRSBuaWwgWUVTIE5PIE5VTEwiLGJ1aWx0X2luOiJOU1N0cmluZyBOU0RpY3Rpb25hcnkgQ0dSZWN0IENHUG9pbnQgVUlCdXR0b24gVUlMYWJlbCBVSVRleHRWaWV3IFVJV2ViVmlldyBNS01hcFZpZXcgVUlTZWdtZW50ZWRDb250cm9sIE5TT2JqZWN0IFVJVGFibGVWaWV3RGVsZWdhdGUgVUlUYWJsZVZpZXdEYXRhU291cmNlIE5TVGhyZWFkIFVJQWN0aXZpdHlJbmRpY2F0b3IgVUlUYWJiYXIgVUlUb29sQmFyIFVJQmFyQnV0dG9uSXRlbSBVSUltYWdlVmlldyBOU0F1dG9yZWxlYXNlUG9vbCBVSVRhYmxlVmlldyBCT09MIE5TSW50ZWdlciBDR0Zsb2F0IE5TRXhjZXB0aW9uIE5TTG9nIE5TTXV0YWJsZVN0cmluZyBOU011dGFibGVBcnJheSBOU011dGFibGVEaWN0aW9uYXJ5IE5TVVJMIE5TSW5kZXhQYXRoIENHU2l6ZSBVSVRhYmxlVmlld0NlbGwgVUlWaWV3IFVJVmlld0NvbnRyb2xsZXIgVUlOYXZpZ2F0aW9uQmFyIFVJTmF2aWdhdGlvbkNvbnRyb2xsZXIgVUlUYWJCYXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXIgVUlQb3BvdmVyQ29udHJvbGxlckRlbGVnYXRlIFVJSW1hZ2UgTlNOdW1iZXIgVUlTZWFyY2hCYXIgTlNGZXRjaGVkUmVzdWx0c0NvbnRyb2xsZXIgTlNGZXRjaGVkUmVzdWx0c0NoYW5nZVR5cGUgVUlTY3JvbGxWaWV3IFVJU2Nyb2xsVmlld0RlbGVnYXRlIFVJRWRnZUluc2V0cyBVSUNvbG9yIFVJRm9udCBVSUFwcGxpY2F0aW9uIE5TTm90Rm91bmQgTlNOb3RpZmljYXRpb25DZW50ZXIgTlNOb3RpZmljYXRpb24gVUlMb2NhbE5vdGlmaWNhdGlvbiBOU0J1bmRsZSBOU0ZpbGVNYW5hZ2VyIE5TVGltZUludGVydmFsIE5TRGF0ZSBOU0NhbGVuZGFyIE5TVXNlckRlZmF1bHRzIFVJV2luZG93IE5TUmFuZ2UgTlNBcnJheSBOU0Vycm9yIE5TVVJMUmVxdWVzdCBOU1VSTENvbm5lY3Rpb24gVUlJbnRlcmZhY2VPcmllbnRhdGlvbiBNUE1vdmllUGxheWVyQ29udHJvbGxlciBkaXNwYXRjaF9vbmNlX3QgZGlzcGF0Y2hfcXVldWVfdCBkaXNwYXRjaF9zeW5jIGRpc3BhdGNoX2FzeW5jIGRpc3BhdGNoX29uY2UifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5DTk0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixpOiJbXlxcXFxdW14nXSJ9LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjaW1wb3J0IixlOiIkIixjOlt7Y046InRpdGxlIixiOiciJyxlOiciJ30se2NOOiJ0aXRsZSIsYjoiPCIsZToiPiJ9XX0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQifSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIoe3wkKSIsazoiaW50ZXJmYWNlIGNsYXNzIHByb3RvY29sIGltcGxlbWVudGF0aW9uIixjOlt7Y046ImlkIixiOmEuVUlSfV19LHtjTjoidmFyaWFibGUiLGI6IlxcLiIrYS5VSVIscjowfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jb2ZmZWVzY3JpcHQ9ZnVuY3Rpb24oYyl7dmFyIGI9e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHRoZW4gdW5sZXNzIHVudGlsIGxvb3Agb2YgYnkgd2hlbiBhbmQgb3IgaXMgaXNudCBub3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgeWVzIG5vIG9uIG9mZiIscmVzZXJ2ZWQ6ImNhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgdm9pZCB3aXRoIGNvbnN0IGxldCBlbnVtIGV4cG9ydCBpbXBvcnQgbmF0aXZlIF9faGFzUHJvcCBfX2V4dGVuZHMgX19zbGljZSBfX2JpbmQgX19pbmRleE9mIixidWlsdF9pbjoibnBtIHJlcXVpcmUgY29uc29sZSBwcmludCBtb2R1bGUgZXhwb3J0cyBnbG9iYWwgd2luZG93IGRvY3VtZW50In07dmFyIGE9IltBLVphLXokX11bMC05QS1aYS16JF9dKiI7dmFyIGY9e2NOOiJ0aXRsZSIsYjphfTt2YXIgZT17Y046InN1YnN0IixiOiIjXFx7IixlOiJ9IixrOmIsfTt2YXIgZD1bYy5CTk0sYy5pbmhlcml0KGMuQ05NLHtzdGFydHM6e2U6IihcXHMqLyk/IixyOjB9fSkse2NOOiJzdHJpbmciLGI6IicnJyIsZToiJycnIixjOltjLkJFXX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2MuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyIiIicsZTonIiIiJyxjOltjLkJFLGVdfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbYy5CRSxlXSxyOjB9LHtjTjoicmVnZXhwIixiOiIvLy8iLGU6Ii8vLyIsYzpbYy5IQ01dfSx7Y046InJlZ2V4cCIsYjoiLy9bZ2ltXSoiLHI6MH0se2NOOiJyZWdleHAiLGI6Ii9cXFMoXFxcXC58W15cXG5dKSo/L1tnaW1dKig/PVxcc3xcXFd8JCkifSx7Y046InByb3BlcnR5IixiOiJAIithfSx7YjoiYCIsZToiYCIsZUI6dHJ1ZSxlRTp0cnVlLHNMOiJqYXZhc2NyaXB0In1dO2UuYz1kO3JldHVybntrOmIsYzpkLmNvbmNhdChbe2NOOiJjb21tZW50IixiOiIjIyMiLGU6IiMjIyJ9LGMuSENNLHtjTjoiZnVuY3Rpb24iLGI6IigiK2ErIlxccyo9XFxzKik/KFxcKC4qXFwpKT9cXHMqWy09XT4iLGU6IlstPV0+IixyQjp0cnVlLGM6W2Yse2NOOiJwYXJhbXMiLGI6IlxcKCIsckI6dHJ1ZSxjOlt7YjovXCgvLGU6L1wpLyxrOmIsYzpbInNlbGYiXS5jb25jYXQoZCl9XX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxrOiJjbGFzcyIsZToiJCIsaToiWzpcXFtcXF1dIixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyIsZVc6dHJ1ZSxpOiI6IixjOltmXX0sZl19LHtjTjoiYXR0cmlidXRlIixiOmErIjoiLGU6IjoiLHJCOnRydWUsZUU6dHJ1ZX1dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLm5naW54PWZ1bmN0aW9uKGIpe3ZhciBjPVt7Y046InZhcmlhYmxlIixiOiJcXCRcXGQrIn0se2NOOiJ2YXJpYWJsZSIsYjoiXFwkeyIsZToifSJ9LHtjTjoidmFyaWFibGUiLGI6IltcXCRcXEBdIitiLlVJUn1dO3ZhciBhPXtlVzp0cnVlLGw6IlthLXovX10rIixrOntidWlsdF9pbjoib24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgc2VsZWN0IGJyZWFrIGxhc3QgcGVybWFuZW50IHJlZGlyZWN0IGtxdWV1ZSBydHNpZyBlcG9sbCBwb2xsIC9kZXYvcG9sbCJ9LHI6MCxpOiI9PiIsYzpbYi5IQ00se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2IuQkVdLmNvbmNhdChjKSxyOjB9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InVybCIsYjoiKFthLXpdKyk6LyIsZToiXFxzIixlVzp0cnVlLGVFOnRydWV9LHtjTjoicmVnZXhwIixiOiJcXHNcXF4iLGU6Ilxcc3x7fDsiLHJFOnRydWUsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiflxcKj9cXHMrIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IlxcKihcXC5bYS16XFwtXSspKyIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiKFthLXpcXC1dK1xcLikrXFwqIixjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoibnVtYmVyIixiOiJcXGJcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSg6XFxkezEsNX0pP1xcYiJ9LHtjTjoibnVtYmVyIixiOiJcXGJcXGQrW2tLbU1nR2RzaGR3eV0qXFxiIixyOjB9XS5jb25jYXQoYyl9O3JldHVybntjOltiLkhDTSx7YjpiLlVJUisiXFxzIixlOiI7fHsiLHJCOnRydWUsYzpbe2NOOiJ0aXRsZSIsYjpiLlVJUixzdGFydHM6YX1dLHI6MH1dLGk6IlteXFxzXFx9XSJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5qc29uPWZ1bmN0aW9uKGEpe3ZhciBlPXtsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwifTt2YXIgZD1bYS5RU00sYS5DTk1dO3ZhciBjPXtjTjoidmFsdWUiLGU6IiwiLGVXOnRydWUsZUU6dHJ1ZSxjOmQsazplfTt2YXIgYj17YjoieyIsZToifSIsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6J1xccyoiJyxlOiciXFxzKjpcXHMqJyxlQjp0cnVlLGVFOnRydWUsYzpbYS5CRV0saToiXFxuIixzdGFydHM6Y31dLGk6IlxcUyJ9O3ZhciBmPXtiOiJcXFsiLGU6IlxcXSIsYzpbYS5pbmhlcml0KGMse2NOOm51bGx9KV0saToiXFxTIn07ZC5zcGxpY2UoZC5sZW5ndGgsMCxiLGYpO3JldHVybntjOmQsazplLGk6IlxcUyJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5hcGFjaGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJudW1iZXIiLGI6IltcXCQlXVxcZCsifTtyZXR1cm57Y0k6dHJ1ZSxjOlthLkhDTSx7Y046InRhZyIsYjoiPC8/IixlOiI+In0se2NOOiJrZXl3b3JkIixiOi9cdysvLHI6MCxrOntjb21tb246Im9yZGVyIGRlbnkgYWxsb3cgc2V0ZW52IHJld3JpdGVydWxlIHJld3JpdGVlbmdpbmUgcmV3cml0ZWNvbmQgZG9jdW1lbnRyb290IHNldGhhbmRsZXIgZXJyb3Jkb2N1bWVudCBsb2FkbW9kdWxlIG9wdGlvbnMgaGVhZGVyIGxpc3RlbiBzZXJ2ZXJyb290IHNlcnZlcm5hbWUifSxzdGFydHM6e2U6LyQvLHI6MCxrOntsaXRlcmFsOiJvbiBvZmYgYWxsIn0sYzpbe2NOOiJzcWJyYWNrZXQiLGI6Ilxcc1xcWyIsZToiXFxdJCJ9LHtjTjoiY2JyYWNrZXQiLGI6IltcXCQlXVxceyIsZToiXFx9IixjOlsic2VsZiIsYl19LGIsYS5RU01dfX1dLGk6L1xTL319KGhsanMpO2hsanMuTEFOR1VBR0VTLmNwcD1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiZmFsc2UgaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBzdHJ1Y3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSB1bnNpZ25lZCBsb25nIHRocm93IHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgZG8gcmV0dXJuIGdvdG8gYXV0byB2b2lkIGVudW0gZWxzZSBicmVhayBuZXcgZXh0ZXJuIHVzaW5nIHRydWUgY2xhc3MgYXNtIGNhc2UgdHlwZWlkIHNob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSBkZWxldGUgYWxpZ25vZiBjaGFyMTZfdCBjaGFyMzJfdCBjb25zdGV4cHIgZGVjbHR5cGUgbm9leGNlcHQgbnVsbHB0ciBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBfQm9vbCBjb21wbGV4IixidWlsdF9pbjoic3RkIHN0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RyaW5nc3RyZWFtIGlzdHJpbmdzdHJlYW0gb3N0cmluZ3N0cmVhbSBhdXRvX3B0ciBkZXF1ZSBsaXN0IHF1ZXVlIHN0YWNrIHZlY3RvciBtYXAgc2V0IGJpdHNldCBtdWx0aXNldCBtdWx0aW1hcCB1bm9yZGVyZWRfc2V0IHVub3JkZXJlZF9tYXAgdW5vcmRlcmVkX211bHRpc2V0IHVub3JkZXJlZF9tdWx0aW1hcCBhcnJheSBzaGFyZWRfcHRyIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUVNNLHtjTjoic3RyaW5nIixiOiInXFxcXD8uIixlOiInIixpOiIuIn0se2NOOiJudW1iZXIiLGI6IlxcYihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSh1fFV8bHxMfHVsfFVMfGZ8RikifSxhLkNOTSx7Y046InByZXByb2Nlc3NvciIsYjoiIyIsZToiJCIsYzpbe2I6IjwiLGU6Ij4iLGk6IlxcbiJ9LGEuQ0xDTV19LHtjTjoic3RsX2NvbnRhaW5lciIsYjoiXFxiKGRlcXVlfGxpc3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5KVxccyo8IixlOiI+IixrOmIscjoxMCxjOlsic2VsZiJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYWtlZmlsZT1mdW5jdGlvbihhKXt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfTtyZXR1cm57YzpbYS5IQ00se2I6L15cdytccypcVyo9LyxyQjp0cnVlLHI6MCxzdGFydHM6e2NOOiJjb25zdGFudCIsZTovXHMqXFcqPS8sZUU6dHJ1ZSxzdGFydHM6e2U6LyQvLHI6MCxjOltiXSx9fX0se2NOOiJ0aXRsZSIsYjovXltcd10rOlxzKiQvfSx7Y046InBob255IixiOi9eXC5QSE9OWTovLGU6LyQvLGs6Ii5QSE9OWSIsbDovW1wuXHddKy99LHtiOi9eXHQrLyxlOi8kLyxjOlthLlFTTSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuZ289ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImJyZWFrIGRlZmF1bHQgZnVuYyBpbnRlcmZhY2Ugc2VsZWN0IGNhc2UgbWFwIHN0cnVjdCBjaGFuIGVsc2UgZ290byBwYWNrYWdlIHN3aXRjaCBjb25zdCBmYWxsdGhyb3VnaCBpZiByYW5nZSB0eXBlIGNvbnRpbnVlIGZvciBpbXBvcnQgcmV0dXJuIHZhciBnbyBkZWZlciIsY29uc3RhbnQ6InRydWUgZmFsc2UgaW90YSBuaWwiLHR5cGVuYW1lOiJib29sIGJ5dGUgY29tcGxleDY0IGNvbXBsZXgxMjggZmxvYXQzMiBmbG9hdDY0IGludDggaW50MTYgaW50MzIgaW50NjQgc3RyaW5nIHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0IGludCB1aW50IHVpbnRwdHIgcnVuZSIsYnVpbHRfaW46ImFwcGVuZCBjYXAgY2xvc2UgY29tcGxleCBjb3B5IGltYWcgbGVuIG1ha2UgbmV3IHBhbmljIHByaW50IHByaW50bG4gcmVhbCByZWNvdmVyIGRlbGV0ZSJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJyIsZToiW15cXFxcXSciLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAifSx7Y046Im51bWJlciIsYjoiW15hLXpBLVpfMC05XShcXC18XFwrKT9cXGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHMpKFxcK3xcXC0pP1xcZCspPyIscjowfSxhLkNOTV19fShobGpzKTtQSwcIFVltTvZ1AAD2dQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAc3RhdGljXGxpYlxqcXVlcnkuZm9ybS5taW4uanMvKiEKICogalF1ZXJ5IEZvcm0gUGx1Z2luCiAqIHZlcnNpb246IDMuNDYuMC0yMDEzLjExLjIxCiAqIFJlcXVpcmVzIGpRdWVyeSB2MS41IG9yIGxhdGVyCiAqIENvcHlyaWdodCAoYykgMjAxMyBNLiBBbHN1cAogKiBFeGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBhdDogaHR0cDovL21hbHN1cC5jb20vanF1ZXJ5L2Zvcm0vCiAqIFByb2plY3QgcmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKiBodHRwczovL2dpdGh1Yi5jb20vbWFsc3VwL2Zvcm0jY29weXJpZ2h0LWFuZC1saWNlbnNlCiAqLwooZnVuY3Rpb24oYSl7aWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbImpxdWVyeSJdLGEpfWVsc2V7YSgodHlwZW9mKGpRdWVyeSkhPSJ1bmRlZmluZWQiKT9qUXVlcnk6d2luZG93LlplcHRvKX19KGZ1bmN0aW9uKGYpe3ZhciBjPXt9O2MuZmlsZWFwaT1mKCI8aW5wdXQgdHlwZT0nZmlsZScvPiIpLmdldCgwKS5maWxlcyE9PXVuZGVmaW5lZDtjLmZvcm1kYXRhPXdpbmRvdy5Gb3JtRGF0YSE9PXVuZGVmaW5lZDt2YXIgZT0hIWYuZm4ucHJvcDtmLmZuLmF0dHIyPWZ1bmN0aW9uKCl7aWYoIWUpe3JldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBnPXRoaXMucHJvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoKGcmJmcuanF1ZXJ5KXx8dHlwZW9mIGc9PT0ic3RyaW5nIil7cmV0dXJuIGd9cmV0dXJuIHRoaXMuYXR0ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2YuZm4uYWpheFN1Ym1pdD1mdW5jdGlvbihqKXtpZighdGhpcy5sZW5ndGgpe2QoImFqYXhTdWJtaXQ6IHNraXBwaW5nIHN1Ym1pdCBwcm9jZXNzIC0gbm8gZWxlbWVudCBzZWxlY3RlZCIpO3JldHVybiB0aGlzfXZhciBpLEMsbSxvPXRoaXM7aWYodHlwZW9mIGo9PSJmdW5jdGlvbiIpe2o9e3N1Y2Nlc3M6an19ZWxzZXtpZihqPT09dW5kZWZpbmVkKXtqPXt9fX1pPWoudHlwZXx8dGhpcy5hdHRyMigibWV0aG9kIik7Qz1qLnVybHx8dGhpcy5hdHRyMigiYWN0aW9uIik7bT0odHlwZW9mIEM9PT0ic3RyaW5nIik/Zi50cmltKEMpOiIiO209bXx8d2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiO2lmKG0pe209KG0ubWF0Y2goL14oW14jXSspLyl8fFtdKVsxXX1qPWYuZXh0ZW5kKHRydWUse3VybDptLHN1Y2Nlc3M6Zi5hamF4U2V0dGluZ3Muc3VjY2Vzcyx0eXBlOml8fGYuYWpheFNldHRpbmdzLnR5cGUsaWZyYW1lU3JjOi9eaHR0cHMvaS50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIik/ImphdmFzY3JpcHQ6ZmFsc2UiOiJhYm91dDpibGFuayJ9LGopO3ZhciB1PXt9O3RoaXMudHJpZ2dlcigiZm9ybS1wcmUtc2VyaWFsaXplIixbdGhpcyxqLHVdKTtpZih1LnZldG8pe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tcHJlLXNlcmlhbGl6ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9aWYoai5iZWZvcmVTZXJpYWxpemUmJmouYmVmb3JlU2VyaWFsaXplKHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVNlcmlhbGl6ZSBjYWxsYmFjayIpO3JldHVybiB0aGlzfXZhciBuPWoudHJhZGl0aW9uYWw7aWYobj09PXVuZGVmaW5lZCl7bj1mLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbH12YXIgcz1bXTt2YXIgRSxGPXRoaXMuZm9ybVRvQXJyYXkoai5zZW1hbnRpYyxzKTtpZihqLmRhdGEpe2ouZXh0cmFEYXRhPWouZGF0YTtFPWYucGFyYW0oai5kYXRhLG4pfWlmKGouYmVmb3JlU3VibWl0JiZqLmJlZm9yZVN1Ym1pdChGLHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVN1Ym1pdCBjYWxsYmFjayIpO3JldHVybiB0aGlzfXRoaXMudHJpZ2dlcigiZm9ybS1zdWJtaXQtdmFsaWRhdGUiLFtGLHRoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXN1Ym1pdC12YWxpZGF0ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9dmFyIHk9Zi5wYXJhbShGLG4pO2lmKEUpe3k9KHk/KHkrIiYiK0UpOkUpfWlmKGoudHlwZS50b1VwcGVyQ2FzZSgpPT0iR0VUIil7ai51cmwrPShqLnVybC5pbmRleE9mKCI/Iik+PTA/IiYiOiI/IikreTtqLmRhdGE9bnVsbH1lbHNle2ouZGF0YT15fXZhciBIPVtdO2lmKGoucmVzZXRGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLnJlc2V0Rm9ybSgpfSl9aWYoai5jbGVhckZvcm0pe0gucHVzaChmdW5jdGlvbigpe28uY2xlYXJGb3JtKGouaW5jbHVkZUhpZGRlbil9KX1pZighai5kYXRhVHlwZSYmai50YXJnZXQpe3ZhciBsPWouc3VjY2Vzc3x8ZnVuY3Rpb24oKXt9O0gucHVzaChmdW5jdGlvbihxKXt2YXIgaz1qLnJlcGxhY2VUYXJnZXQ/InJlcGxhY2VXaXRoIjoiaHRtbCI7ZihqLnRhcmdldClba10ocSkuZWFjaChsLGFyZ3VtZW50cyl9KX1lbHNle2lmKGouc3VjY2Vzcyl7SC5wdXNoKGouc3VjY2Vzcyl9fWouc3VjY2Vzcz1mdW5jdGlvbihLLHEsTCl7dmFyIEo9ai5jb250ZXh0fHx0aGlzO2Zvcih2YXIgST0wLGs9SC5sZW5ndGg7STxrO0krKyl7SFtJXS5hcHBseShKLFtLLHEsTHx8byxvXSl9fTtpZihqLmVycm9yKXt2YXIgej1qLmVycm9yO2ouZXJyb3I9ZnVuY3Rpb24oSixrLHEpe3ZhciBJPWouY29udGV4dHx8dGhpczt6LmFwcGx5KEksW0osayxxLG9dKX19aWYoai5jb21wbGV0ZSl7dmFyIGg9ai5jb21wbGV0ZTtqLmNvbXBsZXRlPWZ1bmN0aW9uKEksayl7dmFyIHE9ai5jb250ZXh0fHx0aGlzO2guYXBwbHkocSxbSSxrLG9dKX19dmFyIEQ9ZigiaW5wdXRbdHlwZT1maWxlXTplbmFibGVkIix0aGlzKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzKS52YWwoKSE9PSIifSk7dmFyIHA9RC5sZW5ndGg+MDt2YXIgQj0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7dmFyIHg9KG8uYXR0cigiZW5jdHlwZSIpPT1CfHxvLmF0dHIoImVuY29kaW5nIik9PUIpO3ZhciB3PWMuZmlsZWFwaSYmYy5mb3JtZGF0YTtkKCJmaWxlQVBJIDoiK3cpO3ZhciByPShwfHx4KSYmIXc7dmFyIHY7aWYoai5pZnJhbWUhPT1mYWxzZSYmKGouaWZyYW1lfHxyKSl7aWYoai5jbG9zZUtlZXBBbGl2ZSl7Zi5nZXQoai5jbG9zZUtlZXBBbGl2ZSxmdW5jdGlvbigpe3Y9RyhGKX0pfWVsc2V7dj1HKEYpfX1lbHNle2lmKChwfHx4KSYmdyl7dj10KEYpfWVsc2V7dj1mLmFqYXgoail9fW8ucmVtb3ZlRGF0YSgianF4aHIiKS5kYXRhKCJqcXhociIsdik7Zm9yKHZhciBBPTA7QTxzLmxlbmd0aDtBKyspe3NbQV09bnVsbH10aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LW5vdGlmeSIsW3RoaXMsal0pO3JldHVybiB0aGlzO2Z1bmN0aW9uIGcoSyl7dmFyIEw9Zi5wYXJhbShLLGoudHJhZGl0aW9uYWwpLnNwbGl0KCImIik7dmFyIHE9TC5sZW5ndGg7dmFyIGs9W107dmFyIEosSTtmb3IoSj0wO0o8cTtKKyspe0xbSl09TFtKXS5yZXBsYWNlKC9cKy9nLCIgIik7ST1MW0pdLnNwbGl0KCI9Iik7ay5wdXNoKFtkZWNvZGVVUklDb21wb25lbnQoSVswXSksZGVjb2RlVVJJQ29tcG9uZW50KElbMV0pXSl9cmV0dXJuIGt9ZnVuY3Rpb24gdChxKXt2YXIgaz1uZXcgRm9ybURhdGEoKTtmb3IodmFyIEk9MDtJPHEubGVuZ3RoO0krKyl7ay5hcHBlbmQocVtJXS5uYW1lLHFbSV0udmFsdWUpfWlmKGouZXh0cmFEYXRhKXt2YXIgTD1nKGouZXh0cmFEYXRhKTtmb3IoST0wO0k8TC5sZW5ndGg7SSsrKXtpZihMW0ldKXtrLmFwcGVuZChMW0ldWzBdLExbSV1bMV0pfX19ai5kYXRhPW51bGw7dmFyIEs9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqLHtjb250ZW50VHlwZTpmYWxzZSxwcm9jZXNzRGF0YTpmYWxzZSxjYWNoZTpmYWxzZSx0eXBlOml8fCJQT1NUIn0pO2lmKGoudXBsb2FkUHJvZ3Jlc3Mpe0sueGhyPWZ1bmN0aW9uKCl7dmFyIE09Zi5hamF4U2V0dGluZ3MueGhyKCk7aWYoTS51cGxvYWQpe00udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihRKXt2YXIgUD0wO3ZhciBOPVEubG9hZGVkfHxRLnBvc2l0aW9uO3ZhciBPPVEudG90YWw7aWYoUS5sZW5ndGhDb21wdXRhYmxlKXtQPU1hdGguY2VpbChOL08qMTAwKX1qLnVwbG9hZFByb2dyZXNzKFEsTixPLFApfSxmYWxzZSl9cmV0dXJuIE19fUsuZGF0YT1udWxsO3ZhciBKPUsuYmVmb3JlU2VuZDtLLmJlZm9yZVNlbmQ9ZnVuY3Rpb24oTixNKXtpZihqLmZvcm1EYXRhKXtNLmRhdGE9ai5mb3JtRGF0YX1lbHNle00uZGF0YT1rfWlmKEope0ouY2FsbCh0aGlzLE4sTSl9fTtyZXR1cm4gZi5hamF4KEspfWZ1bmN0aW9uIEcoYWYpe3ZhciBMPW9bMF0sSyxhYixWLGFkLFksTixRLE8sUCxaLGFjLFQ7dmFyIGFpPWYuRGVmZXJyZWQoKTthaS5hYm9ydD1mdW5jdGlvbihhail7Ty5hYm9ydChhail9O2lmKGFmKXtmb3IoYWI9MDthYjxzLmxlbmd0aDthYisrKXtLPWYoc1thYl0pO2lmKGUpe0sucHJvcCgiZGlzYWJsZWQiLGZhbHNlKX1lbHNle0sucmVtb3ZlQXR0cigiZGlzYWJsZWQiKX19fVY9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqKTtWLmNvbnRleHQ9Vi5jb250ZXh0fHxWO1k9ImpxRm9ybUlPIisobmV3IERhdGUoKS5nZXRUaW1lKCkpO2lmKFYuaWZyYW1lVGFyZ2V0KXtOPWYoVi5pZnJhbWVUYXJnZXQpO1o9Ti5hdHRyMigibmFtZSIpO2lmKCFaKXtOLmF0dHIyKCJuYW1lIixZKX1lbHNle1k9Wn19ZWxzZXtOPWYoJzxpZnJhbWUgbmFtZT0iJytZKyciIHNyYz0iJytWLmlmcmFtZVNyYysnIiAvPicpO04uY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiLTEwMDBweCIsbGVmdDoiLTEwMDBweCJ9KX1RPU5bMF07Tz17YWJvcnRlZDowLHJlc3BvbnNlVGV4dDpudWxsLHJlc3BvbnNlWE1MOm51bGwsc3RhdHVzOjAsc3RhdHVzVGV4dDoibi9hIixnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXt9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKCl7fSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKCl7fSxhYm9ydDpmdW5jdGlvbihhail7dmFyIGFrPShhaj09PSJ0aW1lb3V0Ij8idGltZW91dCI6ImFib3J0ZWQiKTtkKCJhYm9ydGluZyB1cGxvYWQuLi4gIithayk7dGhpcy5hYm9ydGVkPTE7dHJ5e2lmKFEuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCl7US5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kKCJTdG9wIil9fWNhdGNoKGFsKXt9Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKTtPLmVycm9yPWFrO2lmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhayxhail9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFrXSl9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFrKX19fTthZD1WLmdsb2JhbDtpZihhZCYmMD09PWYuYWN0aXZlKyspe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iil9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFNlbmQiLFtPLFZdKX1pZihWLmJlZm9yZVNlbmQmJlYuYmVmb3JlU2VuZC5jYWxsKFYuY29udGV4dCxPLFYpPT09ZmFsc2Upe2lmKFYuZ2xvYmFsKXtmLmFjdGl2ZS0tfWFpLnJlamVjdCgpO3JldHVybiBhaX1pZihPLmFib3J0ZWQpe2FpLnJlamVjdCgpO3JldHVybiBhaX1QPUwuY2xrO2lmKFApe1o9UC5uYW1lO2lmKFomJiFQLmRpc2FibGVkKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbWl09UC52YWx1ZTtpZihQLnR5cGU9PSJpbWFnZSIpe1YuZXh0cmFEYXRhW1orIi54Il09TC5jbGtfeDtWLmV4dHJhRGF0YVtaKyIueSJdPUwuY2xrX3l9fX12YXIgVT0xO3ZhciBSPTI7ZnVuY3Rpb24gUyhhbCl7dmFyIGFrPW51bGw7dHJ5e2lmKGFsLmNvbnRlbnRXaW5kb3cpe2FrPWFsLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnR9fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50V2luZG93IGRvY3VtZW50OiAiK2FqKX1pZihhayl7cmV0dXJuIGFrfXRyeXthaz1hbC5jb250ZW50RG9jdW1lbnQ/YWwuY29udGVudERvY3VtZW50OmFsLmRvY3VtZW50fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50RG9jdW1lbnQ6ICIrYWopO2FrPWFsLmRvY3VtZW50fXJldHVybiBha312YXIgSj1mKCJtZXRhW25hbWU9Y3NyZi10b2tlbl0iKS5hdHRyKCJjb250ZW50Iik7dmFyIEk9ZigibWV0YVtuYW1lPWNzcmYtcGFyYW1dIikuYXR0cigiY29udGVudCIpO2lmKEkmJkope1YuZXh0cmFEYXRhPVYuZXh0cmFEYXRhfHx7fTtWLmV4dHJhRGF0YVtJXT1KfWZ1bmN0aW9uIGFhKCl7dmFyIGFsPW8uYXR0cjIoInRhcmdldCIpLGFqPW8uYXR0cjIoImFjdGlvbiIpO0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLFkpO2lmKCFpfHwvcG9zdC9pLnRlc3QoaSkpe0wuc2V0QXR0cmlidXRlKCJtZXRob2QiLCJQT1NUIil9aWYoYWohPVYudXJsKXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixWLnVybCl9aWYoIVYuc2tpcEVuY29kaW5nT3ZlcnJpZGUmJighaXx8L3Bvc3QvaS50ZXN0KGkpKSl7by5hdHRyKHtlbmNvZGluZzoibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsZW5jdHlwZToibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9KX1pZihWLnRpbWVvdXQpe1Q9c2V0VGltZW91dChmdW5jdGlvbigpe2FjPXRydWU7WChVKX0sVi50aW1lb3V0KX1mdW5jdGlvbiBhbSgpe3RyeXt2YXIgYXE9UyhRKS5yZWFkeVN0YXRlO2QoInN0YXRlID0gIithcSk7aWYoYXEmJmFxLnRvTG93ZXJDYXNlKCk9PSJ1bmluaXRpYWxpemVkIil7c2V0VGltZW91dChhbSw1MCl9fWNhdGNoKGFyKXtkKCJTZXJ2ZXIgYWJvcnQ6ICIsYXIsIiAoIixhci5uYW1lLCIpIik7WChSKTtpZihUKXtjbGVhclRpbWVvdXQoVCl9VD11bmRlZmluZWR9fXZhciBhaz1bXTt0cnl7aWYoVi5leHRyYURhdGEpe2Zvcih2YXIgYXAgaW4gVi5leHRyYURhdGEpe2lmKFYuZXh0cmFEYXRhLmhhc093blByb3BlcnR5KGFwKSl7aWYoZi5pc1BsYWluT2JqZWN0KFYuZXh0cmFEYXRhW2FwXSkmJlYuZXh0cmFEYXRhW2FwXS5oYXNPd25Qcm9wZXJ0eSgibmFtZSIpJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoInZhbHVlIikpe2FrLnB1c2goZignPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJytWLmV4dHJhRGF0YVthcF0ubmFtZSsnIj4nKS52YWwoVi5leHRyYURhdGFbYXBdLnZhbHVlKS5hcHBlbmRUbyhMKVswXSl9ZWxzZXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrYXArJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXSkuYXBwZW5kVG8oTClbMF0pfX19fWlmKCFWLmlmcmFtZVRhcmdldCl7Ti5hcHBlbmRUbygiYm9keSIpfWlmKFEuYXR0YWNoRXZlbnQpe1EuYXR0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXNldFRpbWVvdXQoYW0sMTUpO3RyeXtMLnN1Ym1pdCgpfWNhdGNoKGFuKXt2YXIgYW89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLnN1Ym1pdDthby5hcHBseShMKX19ZmluYWxseXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixhaik7aWYoYWwpe0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLGFsKX1lbHNle28ucmVtb3ZlQXR0cigidGFyZ2V0Iil9ZihhaykucmVtb3ZlKCl9fWlmKFYuZm9yY2VTeW5jKXthYSgpfWVsc2V7c2V0VGltZW91dChhYSwxMCl9dmFyIGFnLGFoLGFlPTUwLE07ZnVuY3Rpb24gWChhcCl7aWYoTy5hYm9ydGVkfHxNKXtyZXR1cm59YWg9UyhRKTtpZighYWgpe2QoImNhbm5vdCBhY2Nlc3MgcmVzcG9uc2UgZG9jdW1lbnQiKTthcD1SfWlmKGFwPT09VSYmTyl7Ty5hYm9ydCgidGltZW91dCIpO2FpLnJlamVjdChPLCJ0aW1lb3V0Iik7cmV0dXJufWVsc2V7aWYoYXA9PVImJk8pe08uYWJvcnQoInNlcnZlciBhYm9ydCIpO2FpLnJlamVjdChPLCJlcnJvciIsInNlcnZlciBhYm9ydCIpO3JldHVybn19aWYoIWFofHxhaC5sb2NhdGlvbi5ocmVmPT1WLmlmcmFtZVNyYyl7aWYoIWFjKXtyZXR1cm59fWlmKFEuZGV0YWNoRXZlbnQpe1EuZGV0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXZhciBhbj0ic3VjY2VzcyIsYXI7dHJ5e2lmKGFjKXt0aHJvdyJ0aW1lb3V0In12YXIgYW09Vi5kYXRhVHlwZT09InhtbCJ8fGFoLlhNTERvY3VtZW50fHxmLmlzWE1MRG9jKGFoKTtkKCJpc1htbD0iK2FtKTtpZighYW0mJndpbmRvdy5vcGVyYSYmKGFoLmJvZHk9PT1udWxsfHwhYWguYm9keS5pbm5lckhUTUwpKXtpZigtLWFlKXtkKCJyZXF1ZWluZyBvbkxvYWQgY2FsbGJhY2ssIERPTSBub3QgYXZhaWxhYmxlIik7c2V0VGltZW91dChYLDI1MCk7cmV0dXJufX12YXIgYXQ9YWguYm9keT9haC5ib2R5OmFoLmRvY3VtZW50RWxlbWVudDtPLnJlc3BvbnNlVGV4dD1hdD9hdC5pbm5lckhUTUw6bnVsbDtPLnJlc3BvbnNlWE1MPWFoLlhNTERvY3VtZW50P2FoLlhNTERvY3VtZW50OmFoO2lmKGFtKXtWLmRhdGFUeXBlPSJ4bWwifU8uZ2V0UmVzcG9uc2VIZWFkZXI9ZnVuY3Rpb24oYXcpe3ZhciBhdj17ImNvbnRlbnQtdHlwZSI6Vi5kYXRhVHlwZX07cmV0dXJuIGF2W2F3LnRvTG93ZXJDYXNlKCldfTtpZihhdCl7Ty5zdGF0dXM9TnVtYmVyKGF0LmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YXQuZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH12YXIgYWo9KFYuZGF0YVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpO3ZhciBhcT0vKGpzb258c2NyaXB0fHRleHQpLy50ZXN0KGFqKTtpZihhcXx8Vi50ZXh0YXJlYSl7dmFyIGFvPWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZXh0YXJlYSIpWzBdO2lmKGFvKXtPLnJlc3BvbnNlVGV4dD1hby52YWx1ZTtPLnN0YXR1cz1OdW1iZXIoYW8uZ2V0QXR0cmlidXRlKCJzdGF0dXMiKSl8fE8uc3RhdHVzO08uc3RhdHVzVGV4dD1hby5nZXRBdHRyaWJ1dGUoInN0YXR1c1RleHQiKXx8Ty5zdGF0dXNUZXh0fWVsc2V7aWYoYXEpe3ZhciBhaz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIilbMF07dmFyIGF1PWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoYWspe08ucmVzcG9uc2VUZXh0PWFrLnRleHRDb250ZW50P2FrLnRleHRDb250ZW50OmFrLmlubmVyVGV4dH1lbHNle2lmKGF1KXtPLnJlc3BvbnNlVGV4dD1hdS50ZXh0Q29udGVudD9hdS50ZXh0Q29udGVudDphdS5pbm5lclRleHR9fX19fWVsc2V7aWYoYWo9PSJ4bWwiJiYhTy5yZXNwb25zZVhNTCYmTy5yZXNwb25zZVRleHQpe08ucmVzcG9uc2VYTUw9VyhPLnJlc3BvbnNlVGV4dCl9fXRyeXthZz1rKE8sYWosVil9Y2F0Y2goYWwpe2FuPSJwYXJzZXJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX19Y2F0Y2goYWwpe2QoImVycm9yIGNhdWdodDogIixhbCk7YW49ImVycm9yIjtPLmVycm9yPWFyPShhbHx8YW4pfWlmKE8uYWJvcnRlZCl7ZCgidXBsb2FkIGFib3J0ZWQiKTthbj1udWxsfWlmKE8uc3RhdHVzKXthbj0oTy5zdGF0dXM+PTIwMCYmTy5zdGF0dXM8MzAwfHxPLnN0YXR1cz09PTMwNCk/InN1Y2Nlc3MiOiJlcnJvciJ9aWYoYW49PT0ic3VjY2VzcyIpe2lmKFYuc3VjY2Vzcyl7Vi5zdWNjZXNzLmNhbGwoVi5jb250ZXh0LGFnLCJzdWNjZXNzIixPKX1haS5yZXNvbHZlKE8ucmVzcG9uc2VUZXh0LCJzdWNjZXNzIixPKTtpZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4U3VjY2VzcyIsW08sVl0pfX1lbHNle2lmKGFuKXtpZihhcj09PXVuZGVmaW5lZCl7YXI9Ty5zdGF0dXNUZXh0fWlmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhbixhcil9YWkucmVqZWN0KE8sImVycm9yIixhcik7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFyXSl9fX1pZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtPLFZdKX1pZihhZCYmIS0tZi5hY3RpdmUpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKX1pZihWLmNvbXBsZXRlKXtWLmNvbXBsZXRlLmNhbGwoVi5jb250ZXh0LE8sYW4pfU09dHJ1ZTtpZihWLnRpbWVvdXQpe2NsZWFyVGltZW91dChUKX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIVYuaWZyYW1lVGFyZ2V0KXtOLnJlbW92ZSgpfWVsc2V7Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKX1PLnJlc3BvbnNlWE1MPW51bGx9LDEwMCl9dmFyIFc9Zi5wYXJzZVhNTHx8ZnVuY3Rpb24oYWosYWspe2lmKHdpbmRvdy5BY3RpdmVYT2JqZWN0KXthaz1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpO2FrLmFzeW5jPSJmYWxzZSI7YWsubG9hZFhNTChhail9ZWxzZXthaz0obmV3IERPTVBhcnNlcigpKS5wYXJzZUZyb21TdHJpbmcoYWosInRleHQveG1sIil9cmV0dXJuKGFrJiZhay5kb2N1bWVudEVsZW1lbnQmJmFrLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSE9InBhcnNlcmVycm9yIik/YWs6bnVsbH07dmFyIHE9Zi5wYXJzZUpTT058fGZ1bmN0aW9uKGFqKXtyZXR1cm4gd2luZG93WyJldmFsIl0oIigiK2FqKyIpIil9O3ZhciBrPWZ1bmN0aW9uKGFvLGFtLGFsKXt2YXIgYWs9YW8uZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixhaj1hbT09PSJ4bWwifHwhYW0mJmFrLmluZGV4T2YoInhtbCIpPj0wLGFuPWFqP2FvLnJlc3BvbnNlWE1MOmFvLnJlc3BvbnNlVGV4dDtpZihhaiYmYW4uZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lPT09InBhcnNlcmVycm9yIil7aWYoZi5lcnJvcil7Zi5lcnJvcigicGFyc2VyZXJyb3IiKX19aWYoYWwmJmFsLmRhdGFGaWx0ZXIpe2FuPWFsLmRhdGFGaWx0ZXIoYW4sYW0pfWlmKHR5cGVvZiBhbj09PSJzdHJpbmciKXtpZihhbT09PSJqc29uInx8IWFtJiZhay5pbmRleE9mKCJqc29uIik+PTApe2FuPXEoYW4pfWVsc2V7aWYoYW09PT0ic2NyaXB0Inx8IWFtJiZhay5pbmRleE9mKCJqYXZhc2NyaXB0Iik+PTApe2YuZ2xvYmFsRXZhbChhbil9fX1yZXR1cm4gYW59O3JldHVybiBhaX19O2YuZm4uYWpheEZvcm09ZnVuY3Rpb24oZyl7Zz1nfHx7fTtnLmRlbGVnYXRpb249Zy5kZWxlZ2F0aW9uJiZmLmlzRnVuY3Rpb24oZi5mbi5vbik7aWYoIWcuZGVsZWdhdGlvbiYmdGhpcy5sZW5ndGg9PT0wKXt2YXIgaD17czp0aGlzLnNlbGVjdG9yLGM6dGhpcy5jb250ZXh0fTtpZighZi5pc1JlYWR5JiZoLnMpe2QoIkRPTSBub3QgcmVhZHksIHF1ZXVpbmcgYWpheEZvcm0iKTtmKGZ1bmN0aW9uKCl7ZihoLnMsaC5jKS5hamF4Rm9ybShnKX0pO3JldHVybiB0aGlzfWQoInRlcm1pbmF0aW5nOyB6ZXJvIGVsZW1lbnRzIGZvdW5kIGJ5IHNlbGVjdG9yIisoZi5pc1JlYWR5PyIiOiIgKERPTSBub3QgcmVhZHkpIikpO3JldHVybiB0aGlzfWlmKGcuZGVsZWdhdGlvbil7Zihkb2N1bWVudCkub2ZmKCJzdWJtaXQuZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYikub2ZmKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixhKS5vbigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYikub24oImNsaWNrLmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuYWpheEZvcm1VbmJpbmQoKS5iaW5kKCJzdWJtaXQuZm9ybS1wbHVnaW4iLGcsYikuYmluZCgiY2xpY2suZm9ybS1wbHVnaW4iLGcsYSl9O2Z1bmN0aW9uIGIoaCl7dmFyIGc9aC5kYXRhO2lmKCFoLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtoLnByZXZlbnREZWZhdWx0KCk7ZihoLnRhcmdldCkuYWpheFN1Ym1pdChnKX19ZnVuY3Rpb24gYShrKXt2YXIgaj1rLnRhcmdldDt2YXIgaD1mKGopO2lmKCEoaC5pcygiW3R5cGU9c3VibWl0XSxbdHlwZT1pbWFnZV0iKSkpe3ZhciBnPWguY2xvc2VzdCgiW3R5cGU9c3VibWl0XSIpO2lmKGcubGVuZ3RoPT09MCl7cmV0dXJufWo9Z1swXX12YXIgaT10aGlzO2kuY2xrPWo7aWYoai50eXBlPT0iaW1hZ2UiKXtpZihrLm9mZnNldFghPT11bmRlZmluZWQpe2kuY2xrX3g9ay5vZmZzZXRYO2kuY2xrX3k9ay5vZmZzZXRZfWVsc2V7aWYodHlwZW9mIGYuZm4ub2Zmc2V0PT0iZnVuY3Rpb24iKXt2YXIgbD1oLm9mZnNldCgpO2kuY2xrX3g9ay5wYWdlWC1sLmxlZnQ7aS5jbGtfeT1rLnBhZ2VZLWwudG9wfWVsc2V7aS5jbGtfeD1rLnBhZ2VYLWoub2Zmc2V0TGVmdDtpLmNsa195PWsucGFnZVktai5vZmZzZXRUb3B9fX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5jbGs9aS5jbGtfeD1pLmNsa195PW51bGx9LDEwMCl9Zi5mbi5hamF4Rm9ybVVuYmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIGNsaWNrLmZvcm0tcGx1Z2luIil9O2YuZm4uZm9ybVRvQXJyYXk9ZnVuY3Rpb24oeCxnKXt2YXIgdz1bXTtpZih0aGlzLmxlbmd0aD09PTApe3JldHVybiB3fXZhciBsPXRoaXNbMF07dmFyIHA9eD9sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6bC5lbGVtZW50cztpZighcCl7cmV0dXJuIHd9dmFyIHIscSxvLHksbSx0LGs7Zm9yKHI9MCx0PXAubGVuZ3RoO3I8dDtyKyspe209cFtyXTtvPW0ubmFtZTtpZighb3x8bS5kaXNhYmxlZCl7Y29udGludWV9aWYoeCYmbC5jbGsmJm0udHlwZT09ImltYWdlIil7aWYobC5jbGs9PW0pe3cucHVzaCh7bmFtZTpvLHZhbHVlOmYobSkudmFsKCksdHlwZTptLnR5cGV9KTt3LnB1c2goe25hbWU6bysiLngiLHZhbHVlOmwuY2xrX3h9LHtuYW1lOm8rIi55Iix2YWx1ZTpsLmNsa195fSl9Y29udGludWV9eT1mLmZpZWxkVmFsdWUobSx0cnVlKTtpZih5JiZ5LmNvbnN0cnVjdG9yPT1BcnJheSl7aWYoZyl7Zy5wdXNoKG0pfWZvcihxPTAsaz15Lmxlbmd0aDtxPGs7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTp5W3FdfSl9fWVsc2V7aWYoYy5maWxlYXBpJiZtLnR5cGU9PSJmaWxlIil7aWYoZyl7Zy5wdXNoKG0pfXZhciBoPW0uZmlsZXM7aWYoaC5sZW5ndGgpe2ZvcihxPTA7cTxoLmxlbmd0aDtxKyspe3cucHVzaCh7bmFtZTpvLHZhbHVlOmhbcV0sdHlwZTptLnR5cGV9KX19ZWxzZXt3LnB1c2goe25hbWU6byx2YWx1ZToiIix0eXBlOm0udHlwZX0pfX1lbHNle2lmKHkhPT1udWxsJiZ0eXBlb2YgeSE9InVuZGVmaW5lZCIpe2lmKGcpe2cucHVzaChtKX13LnB1c2goe25hbWU6byx2YWx1ZTp5LHR5cGU6bS50eXBlLHJlcXVpcmVkOm0ucmVxdWlyZWR9KX19fX1pZigheCYmbC5jbGspe3ZhciBzPWYobC5jbGspLHU9c1swXTtvPXUubmFtZTtpZihvJiYhdS5kaXNhYmxlZCYmdS50eXBlPT0iaW1hZ2UiKXt3LnB1c2goe25hbWU6byx2YWx1ZTpzLnZhbCgpfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfX1yZXR1cm4gd307Zi5mbi5mb3JtU2VyaWFsaXplPWZ1bmN0aW9uKGcpe3JldHVybiBmLnBhcmFtKHRoaXMuZm9ybVRvQXJyYXkoZykpfTtmLmZuLmZpZWxkU2VyaWFsaXplPWZ1bmN0aW9uKGgpe3ZhciBnPVtdO3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBtPXRoaXMubmFtZTtpZighbSl7cmV0dXJufXZhciBrPWYuZmllbGRWYWx1ZSh0aGlzLGgpO2lmKGsmJmsuY29uc3RydWN0b3I9PUFycmF5KXtmb3IodmFyIGw9MCxqPWsubGVuZ3RoO2w8ajtsKyspe2cucHVzaCh7bmFtZTptLHZhbHVlOmtbbF19KX19ZWxzZXtpZihrIT09bnVsbCYmdHlwZW9mIGshPSJ1bmRlZmluZWQiKXtnLnB1c2goe25hbWU6dGhpcy5uYW1lLHZhbHVlOmt9KX19fSk7cmV0dXJuIGYucGFyYW0oZyl9O2YuZm4uZmllbGRWYWx1ZT1mdW5jdGlvbihtKXtmb3IodmFyIGw9W10saj0wLGc9dGhpcy5sZW5ndGg7ajxnO2orKyl7dmFyIGs9dGhpc1tqXTt2YXIgaD1mLmZpZWxkVmFsdWUoayxtKTtpZihoPT09bnVsbHx8dHlwZW9mIGg9PSJ1bmRlZmluZWQifHwoaC5jb25zdHJ1Y3Rvcj09QXJyYXkmJiFoLmxlbmd0aCkpe2NvbnRpbnVlfWlmKGguY29uc3RydWN0b3I9PUFycmF5KXtmLm1lcmdlKGwsaCl9ZWxzZXtsLnB1c2goaCl9fXJldHVybiBsfTtmLmZpZWxkVmFsdWU9ZnVuY3Rpb24oZyxvKXt2YXIgaj1nLm5hbWUsdT1nLnR5cGUsdz1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihvPT09dW5kZWZpbmVkKXtvPXRydWV9aWYobyYmKCFqfHxnLmRpc2FibGVkfHx1PT0icmVzZXQifHx1PT0iYnV0dG9uInx8KHU9PSJjaGVja2JveCJ8fHU9PSJyYWRpbyIpJiYhZy5jaGVja2VkfHwodT09InN1Ym1pdCJ8fHU9PSJpbWFnZSIpJiZnLmZvcm0mJmcuZm9ybS5jbGshPWd8fHc9PSJzZWxlY3QiJiZnLnNlbGVjdGVkSW5kZXg9PS0xKSl7cmV0dXJuIG51bGx9aWYodz09InNlbGVjdCIpe3ZhciBwPWcuc2VsZWN0ZWRJbmRleDtpZihwPDApe3JldHVybiBudWxsfXZhciByPVtdLGg9Zy5vcHRpb25zO3ZhciBsPSh1PT0ic2VsZWN0LW9uZSIpO3ZhciBxPShsP3ArMTpoLmxlbmd0aCk7Zm9yKHZhciBrPShsP3A6MCk7azxxO2srKyl7dmFyIG09aFtrXTtpZihtLnNlbGVjdGVkKXt2YXIgcz1tLnZhbHVlO2lmKCFzKXtzPShtLmF0dHJpYnV0ZXMmJm0uYXR0cmlidXRlcy52YWx1ZSYmIShtLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkKSk/bS50ZXh0Om0udmFsdWV9aWYobCl7cmV0dXJuIHN9ci5wdXNoKHMpfX1yZXR1cm4gcn1yZXR1cm4gZihnKS52YWwoKX07Zi5mbi5jbGVhckZvcm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YoImlucHV0LHNlbGVjdCx0ZXh0YXJlYSIsdGhpcykuY2xlYXJGaWVsZHMoZyl9KX07Zi5mbi5jbGVhckZpZWxkcz1mLmZuLmNsZWFySW5wdXRzPWZ1bmN0aW9uKGcpe3ZhciBoPS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaj10aGlzLnR5cGUsaT10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihoLnRlc3Qoail8fGk9PSJ0ZXh0YXJlYSIpe3RoaXMudmFsdWU9IiJ9ZWxzZXtpZihqPT0iY2hlY2tib3gifHxqPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9ZmFsc2V9ZWxzZXtpZihpPT0ic2VsZWN0Iil7dGhpcy5zZWxlY3RlZEluZGV4PS0xfWVsc2V7aWYoaj09ImZpbGUiKXtpZigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7Zih0aGlzKS5yZXBsYWNlV2l0aChmKHRoaXMpLmNsb25lKHRydWUpKX1lbHNle2YodGhpcykudmFsKCIiKX19ZWxzZXtpZihnKXtpZigoZz09PXRydWUmJi9oaWRkZW4vLnRlc3QoaikpfHwodHlwZW9mIGc9PSJzdHJpbmciJiZmKHRoaXMpLmlzKGcpKSl7dGhpcy52YWx1ZT0iIn19fX19fX0pfTtmLmZuLnJlc2V0Rm9ybT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5yZXNldD09ImZ1bmN0aW9uInx8KHR5cGVvZiB0aGlzLnJlc2V0PT0ib2JqZWN0IiYmIXRoaXMucmVzZXQubm9kZVR5cGUpKXt0aGlzLnJlc2V0KCl9fSl9O2YuZm4uZW5hYmxlPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hZ30pfTtmLmZuLnNlbGVjdGVkPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9dGhpcy50eXBlO2lmKGg9PSJjaGVja2JveCJ8fGg9PSJyYWRpbyIpe3RoaXMuY2hlY2tlZD1nfWVsc2V7aWYodGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJvcHRpb24iKXt2YXIgaT1mKHRoaXMpLnBhcmVudCgic2VsZWN0Iik7aWYoZyYmaVswXSYmaVswXS50eXBlPT0ic2VsZWN0LW9uZSIpe2kuZmluZCgib3B0aW9uIikuc2VsZWN0ZWQoZmFsc2UpfXRoaXMuc2VsZWN0ZWQ9Z319fSl9O2YuZm4uYWpheFN1Ym1pdC5kZWJ1Zz1mYWxzZTtmdW5jdGlvbiBkKCl7aWYoIWYuZm4uYWpheFN1Ym1pdC5kZWJ1Zyl7cmV0dXJufXZhciBnPSJbanF1ZXJ5LmZvcm1dICIrQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsIiIpO2lmKHdpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cpe3dpbmRvdy5jb25zb2xlLmxvZyhnKX1lbHNle2lmKHdpbmRvdy5vcGVyYSYmd2luZG93Lm9wZXJhLnBvc3RFcnJvcil7d2luZG93Lm9wZXJhLnBvc3RFcnJvcihnKX19fX0pKTtQSwcIdhAQAaM+AACjPgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAc3RhdGljXGxpYlxtYXJrZWQubWluLmpzIWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz17fSx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLnJ1bGVzPWEubm9ybWFsLHRoaXMub3B0aW9ucy5nZm0mJih0aGlzLnJ1bGVzPXRoaXMub3B0aW9ucy50YWJsZXM/YS50YWJsZXM6YS5nZm0pfWZ1bmN0aW9uIHQoZSx0KXtpZih0aGlzLm9wdGlvbnM9dHx8aC5kZWZhdWx0cyx0aGlzLmxpbmtzPWUsdGhpcy5ydWxlcz11Lm5vcm1hbCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sIXRoaXMubGlua3MpdGhyb3cgbmV3IEVycm9yKCJUb2tlbnMgYXJyYXkgcmVxdWlyZXMgYSBgbGlua3NgIHByb3BlcnR5LiIpO3RoaXMub3B0aW9ucy5nZm0/dGhpcy5ydWxlcz10aGlzLm9wdGlvbnMuYnJlYWtzP3UuYnJlYWtzOnUuZ2ZtOnRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHRoaXMucnVsZXM9dS5wZWRhbnRpYyl9ZnVuY3Rpb24gbigpe31mdW5jdGlvbiByKGUpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW49bnVsbCx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgbix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcn1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0Py8mL2c6LyYoPyEjP1x3KzspL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjMzk7Iil9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlPWUuc291cmNlLHQ9dHx8IiIsZnVuY3Rpb24gbihyLHMpe3JldHVybiByPyhzPXMuc291cmNlfHxzLHM9cy5yZXBsYWNlKC8oXnxbXlxbXSlcXi9nLCIkMSIpLGU9ZS5yZXBsYWNlKHIscyksbik6bmV3IFJlZ0V4cChlLHQpfX1mdW5jdGlvbiBsKCl7fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0LG4scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Q9YXJndW1lbnRzW3JdO2ZvcihuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfXJldHVybiBlfWZ1bmN0aW9uIGgodCxuLGkpe2lmKGl8fCJmdW5jdGlvbiI9PXR5cGVvZiBuKXtpfHwoaT1uLG49bnVsbCksbj1vKHt9LGguZGVmYXVsdHMsbnx8e30pO3ZhciBsLGEsdT1uLmhpZ2hsaWdodCxwPTA7dHJ5e2w9ZS5sZXgodCxuKX1jYXRjaChjKXtyZXR1cm4gaShjKX1hPWwubGVuZ3RoO3ZhciBnPWZ1bmN0aW9uKCl7dmFyIGUsdDt0cnl7ZT1yLnBhcnNlKGwsbil9Y2F0Y2gocyl7dD1zfXJldHVybiBuLmhpZ2hsaWdodD11LHQ/aSh0KTppKG51bGwsZSl9O2lmKCF1fHx1Lmxlbmd0aDwzKXJldHVybiBnKCk7aWYoZGVsZXRlIG4uaGlnaGxpZ2h0LCFhKXJldHVybiBnKCk7Zm9yKDtwPGwubGVuZ3RoO3ArKykhZnVuY3Rpb24oZSl7cmV0dXJuImNvZGUiIT09ZS50eXBlPy0tYXx8ZygpOnUoZS50ZXh0LGUubGFuZyxmdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1ufHxuPT09ZS50ZXh0Py0tYXx8ZygpOihlLnRleHQ9bixlLmVzY2FwZWQ9ITAsLS1hfHxnKCksdm9pZCAwKX0pfShsW3BdKX1lbHNlIHRyeXtyZXR1cm4gbiYmKG49byh7fSxoLmRlZmF1bHRzLG4pKSxyLnBhcnNlKGUubGV4KHQsbiksbil9Y2F0Y2goYyl7aWYoYy5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL2NoamovbWFya2VkLiIsKG58fGguZGVmYXVsdHMpLnNpbGVudClyZXR1cm4iPHA+QW4gZXJyb3Igb2NjdXJlZDo8L3A+PHByZT4iK3MoYy5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+Ijt0aHJvdyBjfX12YXIgYT17bmV3bGluZTovXlxuKy8sY29kZTovXiggezR9W15cbl0rXG4qKSsvLGZlbmNlczpsLGhyOi9eKCAqWy0qX10pezMsfSAqKD86XG4rfCQpLyxoZWFkaW5nOi9eICooI3sxLDZ9KSAqKFteXG5dKz8pICojKiAqKD86XG4rfCQpLyxucHRhYmxlOmwsbGhlYWRpbmc6L14oW15cbl0rKVxuICooPXwtKXsyLH0gKig/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggKj5bXlxuXSsoXG5bXlxuXSspKlxuKikrLyxsaXN0Oi9eKCAqKShidWxsKSBbXHNcU10rPyg/OmhyfFxuezIsfSg/ISApKD8hXDFidWxsIClcbip8XHMqJCkvLGh0bWw6L14gKig/OmNvbW1lbnR8Y2xvc2VkfGNsb3NpbmcpICooPzpcbnsyLH18XHMqJCkvLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArWyIoXShbXlxuXSspWyIpXSk/ICooPzpcbit8JCkvLHRhYmxlOmwscGFyYWdyYXBoOi9eKCg/OlteXG5dK1xuPyg/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXx0YWd8ZGVmKSkrKVxuKi8sdGV4dDovXlteXG5dKy99O2EuYnVsbGV0PS8oPzpbKistXXxcZCtcLikvLGEuaXRlbT0vXiggKikoYnVsbCkgW15cbl0qKD86XG4oPyFcMWJ1bGwgKVteXG5dKikqLyxhLml0ZW09aShhLml0ZW0sImdtIikoL2J1bGwvZyxhLmJ1bGxldCkoKSxhLmxpc3Q9aShhLmxpc3QpKC9idWxsL2csYS5idWxsZXQpKCJociIsL1xuKyg/PSg/OiAqWy0qX10pezMsfSAqKD86XG4rfCQpKS8pKCksYS5fdGFnPSIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITovfEApXFxiIixhLmh0bWw9aShhLmh0bWwpKCJjb21tZW50IiwvPCEtLVtcc1xTXSo/LS0+LykoImNsb3NlZCIsLzwodGFnKVtcc1xTXSs/PFwvXDE+LykoImNsb3NpbmciLC88dGFnKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vKSgvdGFnL2csYS5fdGFnKSgpLGEucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCJociIsYS5ocikoImhlYWRpbmciLGEuaGVhZGluZykoImxoZWFkaW5nIixhLmxoZWFkaW5nKSgiYmxvY2txdW90ZSIsYS5ibG9ja3F1b3RlKSgidGFnIiwiPCIrYS5fdGFnKSgiZGVmIixhLmRlZikoKSxhLm5vcm1hbD1vKHt9LGEpLGEuZ2ZtPW8oe30sYS5ub3JtYWwse2ZlbmNlczovXiAqKGB7Myx9fH57Myx9KSAqKFxTKyk/ICpcbihbXHNcU10rPylccypcMSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6L14vfSksYS5nZm0ucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCIoPyEiLCIoPyEiK2EuZ2ZtLmZlbmNlcy5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwyIikrInwiK2EubGlzdC5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwzIikrInwiKSgpLGEudGFibGVzPW8oe30sYS5nZm0se25wdGFibGU6L14gKihcUy4qXHwuKilcbiAqKFstOl0rICpcfFstfCA6XSopXG4oKD86LipcfC4qKD86XG58JCkpKilcbiovLHRhYmxlOi9eICpcfCguKylcbiAqXHwoICpbLTpdK1stfCA6XSopXG4oKD86ICpcfC4qKD86XG58JCkpKilcbiovfSksZS5ydWxlcz1hLGUubGV4PWZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IGUobik7cmV0dXJuIHIubGV4KHQpfSxlLnByb3RvdHlwZS5sZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9cclxufFxyL2csIlxuIikucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL1x1MDBhMC9nLCIgIikucmVwbGFjZSgvXHUyNDI0L2csIlxuIiksdGhpcy50b2tlbihlLCEwKX0sZS5wcm90b3R5cGUudG9rZW49ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixzLGksbCxvLGgsdSxwLGU9ZS5yZXBsYWNlKC9eICskL2dtLCIiKTtlOylpZigocz10aGlzLnJ1bGVzLm5ld2xpbmUuZXhlYyhlKSkmJihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzWzBdLmxlbmd0aD4xJiZ0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJzcGFjZSJ9KSkscz10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzPXNbMF0ucmVwbGFjZSgvXiB7NH0vZ20sIiIpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3M6cy5yZXBsYWNlKC9cbiskLywiIil9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIixsYW5nOnNbMl0sdGV4dDpzWzNdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaGVhZGluZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmciLGRlcHRoOnNbMV0ubGVuZ3RoLHRleHQ6c1syXX0pO2Vsc2UgaWYodCYmKHM9dGhpcy5ydWxlcy5ucHRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC9cbiQvLCIiKS5zcGxpdCgiXG4iKX0sdT0wO3U8by5hbGlnbi5sZW5ndGg7dSsrKW8uYWxpZ25bdV09L14gKi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3Qoby5hbGlnblt1XSk/ImxlZnQiOm51bGw7Zm9yKHU9MDt1PG8uY2VsbHMubGVuZ3RoO3UrKylvLmNlbGxzW3VdPW8uY2VsbHNbdV0uc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZihzPXRoaXMucnVsZXMubGhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDoiPSI9PT1zWzJdPzE6Mix0ZXh0OnNbMV19KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5oci5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhyIn0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmJsb2NrcXVvdGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX3N0YXJ0In0pLHM9c1swXS5yZXBsYWNlKC9eICo+ID8vZ20sIiIpLHRoaXMudG9rZW4ocyx0KSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX2VuZCJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5saXN0LmV4ZWMoZSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxpPXNbMl0sdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9zdGFydCIsb3JkZXJlZDppLmxlbmd0aD4xfSkscz1zWzBdLm1hdGNoKHRoaXMucnVsZXMuaXRlbSksbj0hMSxwPXMubGVuZ3RoLHU9MDtwPnU7dSsrKW89c1t1XSxoPW8ubGVuZ3RoLG89by5yZXBsYWNlKC9eICooWyorLV18XGQrXC4pICsvLCIiKSx+by5pbmRleE9mKCJcbiAiKSYmKGgtPW8ubGVuZ3RoLG89dGhpcy5vcHRpb25zLnBlZGFudGljP28ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik6by5yZXBsYWNlKG5ldyBSZWdFeHAoIl4gezEsIitoKyJ9IiwiZ20iKSwiIikpLHRoaXMub3B0aW9ucy5zbWFydExpc3RzJiZ1IT09cC0xJiYobD1hLmJ1bGxldC5leGVjKHNbdSsxXSlbMF0saT09PWx8fGkubGVuZ3RoPjEmJmwubGVuZ3RoPjF8fChlPXMuc2xpY2UodSsxKS5qb2luKCJcbiIpK2UsdT1wLTEpKSxyPW58fC9cblxuKD8hXHMqJCkvLnRlc3QobyksdSE9PXAtMSYmKG49IlxuIj09PW8uY2hhckF0KG8ubGVuZ3RoLTEpLHJ8fChyPW4pKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnI/Imxvb3NlX2l0ZW1fc3RhcnQiOiJsaXN0X2l0ZW1fc3RhcnQifSksdGhpcy50b2tlbihvLCExKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW1fZW5kIn0pO3RoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3RfZW5kIn0pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmh0bWwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8icGFyYWdyYXBoIjoiaHRtbCIscHJlOiJwcmUiPT09c1sxXXx8InNjcmlwdCI9PT1zWzFdfHwic3R5bGUiPT09c1sxXSx0ZXh0OnNbMF19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMuZGVmLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLmxpbmtzW3NbMV0udG9Mb3dlckNhc2UoKV09e2hyZWY6c1syXSx0aXRsZTpzWzNdfTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMudGFibGUuZXhlYyhlKSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxvPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOnNbMV0ucmVwbGFjZSgvXiAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGFsaWduOnNbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxjZWxsczpzWzNdLnJlcGxhY2UoLyg/OiAqXHwgKik/XG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnJlcGxhY2UoL14gKlx8ICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyk7dGhpcy50b2tlbnMucHVzaChvKX1lbHNlIGlmKHQmJihzPXRoaXMucnVsZXMucGFyYWdyYXBoLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InBhcmFncmFwaCIsdGV4dDoiXG4iPT09c1sxXS5jaGFyQXQoc1sxXS5sZW5ndGgtMSk/c1sxXS5zbGljZSgwLC0xKTpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMudGV4dC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InRleHQiLHRleHQ6c1swXX0pO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiB0aGlzLnRva2Vuc307dmFyIHU9e2VzY2FwZTovXlxcKFtcXGAqe31cW1xdKCkjK1wtLiFfPl0pLyxhdXRvbGluazovXjwoW14gPl0rKEB8OlwvKVteID5dKyk+Lyx1cmw6bCx0YWc6L148IS0tW1xzXFNdKj8tLT58XjxcLz9cdysoPzoiW14iXSoifCdbXiddKid8W14nIj5dKSo/Pi8sbGluazovXiE/XFsoaW5zaWRlKVxdXChocmVmXCkvLHJlZmxpbms6L14hP1xbKGluc2lkZSlcXVxzKlxbKFteXF1dKilcXS8sbm9saW5rOi9eIT9cWygoPzpcW1teXF1dKlxdfFteXFtcXV0pKilcXS8sc3Ryb25nOi9eX18oW1xzXFNdKz8pX18oPyFfKXxeXCpcKihbXHNcU10rPylcKlwqKD8hXCopLyxlbTovXlxiXygoPzpfX3xbXHNcU10pKz8pX1xifF5cKigoPzpcKlwqfFtcc1xTXSkrPylcKig/IVwqKS8sY29kZTovXihgKylccyooW1xzXFNdKj9bXmBdKVxzKlwxKD8hYCkvLGJyOi9eIHsyLH1cbig/IVxzKiQpLyxkZWw6bCx0ZXh0Oi9eW1xzXFNdKz8oPz1bXFw8IVxbXypgXXwgezIsfVxufCQpL307dS5faW5zaWRlPS8oPzpcW1teXF1dKlxdfFteXFtcXV18XF0oPz1bXlxbXSpcXSkpKi8sdS5faHJlZj0vXHMqPD8oW1xzXFNdKj8pPj8oPzpccytbJyJdKFtcc1xTXSo/KVsnIl0pP1xzKi8sdS5saW5rPWkodS5saW5rKSgiaW5zaWRlIix1Ll9pbnNpZGUpKCJocmVmIix1Ll9ocmVmKSgpLHUucmVmbGluaz1pKHUucmVmbGluaykoImluc2lkZSIsdS5faW5zaWRlKSgpLHUubm9ybWFsPW8oe30sdSksdS5wZWRhbnRpYz1vKHt9LHUubm9ybWFsLHtzdHJvbmc6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbTovXl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXyl8XlwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKikvfSksdS5nZm09byh7fSx1Lm5vcm1hbCx7ZXNjYXBlOmkodS5lc2NhcGUpKCJdKSIsIn58XSkiKSgpLHVybDovXihodHRwcz86XC9cL1teXHM8XStbXjwuLDo7IicpXF1cc10pLyxkZWw6L15+fig/PVxTKShbXHNcU10qP1xTKX5+Lyx0ZXh0OmkodS50ZXh0KSgiXXwiLCJ+XXwiKSgifCIsInxodHRwcz86Ly98IikoKX0pLHUuYnJlYWtzPW8oe30sdS5nZm0se2JyOmkodS5icikoInsyLH0iLCIqIikoKSx0ZXh0OmkodS5nZm0udGV4dCkoInsyLH0iLCIqIikoKX0pLHQucnVsZXM9dSx0Lm91dHB1dD1mdW5jdGlvbihlLG4scil7dmFyIHM9bmV3IHQobixyKTtyZXR1cm4gcy5vdXRwdXQoZSl9LHQucHJvdG90eXBlLm91dHB1dD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGksbD0iIjtlOylpZihpPXRoaXMucnVsZXMuZXNjYXBlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9aVsxXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5hdXRvbGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLCJAIj09PWlbMl0/KG49IjoiPT09aVsxXS5jaGFyQXQoNik/dGhpcy5tYW5nbGUoaVsxXS5zdWJzdHJpbmcoNykpOnRoaXMubWFuZ2xlKGlbMV0pLHI9dGhpcy5tYW5nbGUoIm1haWx0bzoiKStuKToobj1zKGlbMV0pLHI9biksbCs9dGhpcy5yZW5kZXJlci5saW5rKHIsbnVsbCxuKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy51cmwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxuPXMoaVsxXSkscj1uLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudGFnLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vcHRpb25zLnNhbml0aXplP3MoaVswXSk6aVswXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5saW5rLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vdXRwdXRMaW5rKGkse2hyZWY6aVsyXSx0aXRsZTppWzNdfSk7ZWxzZSBpZigoaT10aGlzLnJ1bGVzLnJlZmxpbmsuZXhlYyhlKSl8fChpPXRoaXMucnVsZXMubm9saW5rLmV4ZWMoZSkpKXtpZihlPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx0PShpWzJdfHxpWzFdKS5yZXBsYWNlKC9ccysvZywiICIpLHQ9dGhpcy5saW5rc1t0LnRvTG93ZXJDYXNlKCldLCF0fHwhdC5ocmVmKXtsKz1pWzBdLmNoYXJBdCgwKSxlPWlbMF0uc3Vic3RyaW5nKDEpK2U7Y29udGludWV9bCs9dGhpcy5vdXRwdXRMaW5rKGksdCl9ZWxzZSBpZihpPXRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5zdHJvbmcodGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmVtLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5lbSh0aGlzLm91dHB1dChpWzJdfHxpWzFdKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuY29kZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuY29kZXNwYW4ocyhpWzJdLCEwKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuYnIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmJyKCk7ZWxzZSBpZihpPXRoaXMucnVsZXMuZGVsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoaVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz1zKHRoaXMuc21hcnR5cGFudHMoaVswXSkpO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiBsfSx0LnByb3RvdHlwZS5vdXRwdXRMaW5rPWZ1bmN0aW9uKGUsdCl7dmFyIG49cyh0LmhyZWYpLHI9dC50aXRsZT9zKHQudGl0bGUpOm51bGw7cmV0dXJuIiEiIT09ZVswXS5jaGFyQXQoMCk/dGhpcy5yZW5kZXJlci5saW5rKG4scix0aGlzLm91dHB1dChlWzFdKSk6dGhpcy5yZW5kZXJlci5pbWFnZShuLHIscyhlWzFdKSl9LHQucHJvdG90eXBlLnNtYXJ0eXBhbnRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/ZS5yZXBsYWNlKC8tLS9nLCLigJQiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQx4oCYIikucmVwbGFjZSgvJy9nLCLigJkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDHigJwiKS5yZXBsYWNlKC8iL2csIuKAnSIpLnJlcGxhY2UoL1wuezN9L2csIuKApiIpOmV9LHQucHJvdG90eXBlLm1hbmdsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixyPWUubGVuZ3RoLHM9MDtyPnM7cysrKXQ9ZS5jaGFyQ29kZUF0KHMpLE1hdGgucmFuZG9tKCk+LjUmJih0PSJ4Iit0LnRvU3RyaW5nKDE2KSksbis9IiYjIit0KyI7IjtyZXR1cm4gbn0sbi5wcm90b3R5cGUuY29kZT1mdW5jdGlvbihlLHQsbixyKXtpZihyPXJ8fHt9LHIuaGlnaGxpZ2h0KXt2YXIgaT1yLmhpZ2hsaWdodChlLHQpO251bGwhPWkmJmkhPT1lJiYobj0hMCxlPWkpfXJldHVybiB0Pyc8cHJlPjxjb2RlIGNsYXNzPSInK3IubGFuZ1ByZWZpeCt0KyciPicrKG4/ZTpzKGUpKSsiXG48L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKG4/ZTpzKGUsITApKSsiXG48L2NvZGU+PC9wcmU+In0sbi5wcm90b3R5cGUuYmxvY2txdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4iPGJsb2NrcXVvdGU+XG4iK2UrIjwvYmxvY2txdW90ZT5cbiJ9LG4ucHJvdG90eXBlLmh0bWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG4ucHJvdG90eXBlLmhlYWRpbmc9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIjxoIit0KycgaWQ9Iicrci5oZWFkZXJQcmVmaXgrbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teXHddKy9nLCItIikrJyI+JytlKyI8L2giK3QrIj5cbiJ9LG4ucHJvdG90eXBlLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIjxocj5cbiJ9LG4ucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj10PyJvbCI6InVsIjtyZXR1cm4iPCIrbisiPlxuIitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUubGlzdGl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxsaT4iK2UrIjwvbGk+XG4ifSxuLnByb3RvdHlwZS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7cmV0dXJuIjxwPiIrZSsiPC9wPlxuIn0sbi5wcm90b3R5cGUudGFibGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHRhYmxlPlxuPHRoZWFkPlxuIitlKyI8L3RoZWFkPlxuIisiPHRib2R5PlxuIit0KyI8L3Rib2R5PlxuIisiPC90YWJsZT5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlcm93PWZ1bmN0aW9uKGUpe3JldHVybiI8dHI+XG4iK2UrIjwvdHI+XG4ifSxuLnByb3RvdHlwZS50YWJsZWNlbGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmhlYWRlcj8idGgiOiJ0ZCIscj10LmFsaWduPyI8IituKycgc3R5bGU9InRleHQtYWxpZ246Jyt0LmFsaWduKyciPic6IjwiK24rIj4iO3JldHVybiByK2UrIjwvIituKyI+XG4ifSxuLnByb3RvdHlwZS5zdHJvbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIjxzdHJvbmc+IitlKyI8L3N0cm9uZz4ifSxuLnByb3RvdHlwZS5lbT1mdW5jdGlvbihlKXtyZXR1cm4iPGVtPiIrZSsiPC9lbT4ifSxuLnByb3RvdHlwZS5jb2Rlc3Bhbj1mdW5jdGlvbihlKXtyZXR1cm4iPGNvZGU+IitlKyI8L2NvZGU+In0sbi5wcm90b3R5cGUuYnI9ZnVuY3Rpb24oKXtyZXR1cm4iPGJyPiJ9LG4ucHJvdG90eXBlLmRlbD1mdW5jdGlvbihlKXtyZXR1cm4iPGRlbD4iK2UrIjwvZGVsPiJ9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8YSBocmVmPSInK2UrJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4iK24rIjwvYT4ifSxuLnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9JzxpbWcgc3JjPSInK2UrJyIgYWx0PSInK24rJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4ifSxyLnBhcnNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1uZXcgcih0LG4pO3JldHVybiBzLnBhcnNlKGUpfSxyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlKXt0aGlzLmlubGluZT1uZXcgdChlLmxpbmtzLHRoaXMub3B0aW9ucyx0aGlzLnJlbmRlcmVyKSx0aGlzLnRva2Vucz1lLnJldmVyc2UoKTtmb3IodmFyIG49IiI7dGhpcy5uZXh0KCk7KW4rPXRoaXMudG9rKCk7cmV0dXJuIG59LHIucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbj10aGlzLnRva2Vucy5wb3AoKX0sci5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGgtMV18fDB9LHIucHJvdG90eXBlLnBhcnNlVGV4dD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnRva2VuLnRleHQ7InRleHQiPT09dGhpcy5wZWVrKCkudHlwZTspZSs9IlxuIit0aGlzLm5leHQoKS50ZXh0O3JldHVybiB0aGlzLmlubGluZS5vdXRwdXQoZSl9LHIucHJvdG90eXBlLnRvaz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLnRva2VuLnR5cGUpe2Nhc2Uic3BhY2UiOnJldHVybiIiO2Nhc2UiaHIiOnJldHVybiB0aGlzLnJlbmRlcmVyLmhyKCk7Y2FzZSJoZWFkaW5nIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpLHRoaXMudG9rZW4uZGVwdGgsdGhpcy50b2tlbi50ZXh0LHRoaXMub3B0aW9ucyk7Y2FzZSJjb2RlIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5jb2RlKHRoaXMudG9rZW4udGV4dCx0aGlzLnRva2VuLmxhbmcsdGhpcy50b2tlbi5lc2NhcGVkLHRoaXMub3B0aW9ucyk7Y2FzZSJ0YWJsZSI6dmFyIGUsdCxuLHIscyxpPSIiLGw9IiI7Zm9yKG49IiIsZT0wO2U8dGhpcy50b2tlbi5oZWFkZXIubGVuZ3RoO2UrKylyPXtoZWFkZXI6ITAsYWxpZ246dGhpcy50b2tlbi5hbGlnbltlXX0sbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4uaGVhZGVyW2VdKSx7aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19KTtmb3IoaSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhuKSxlPTA7ZTx0aGlzLnRva2VuLmNlbGxzLmxlbmd0aDtlKyspe2Zvcih0PXRoaXMudG9rZW4uY2VsbHNbZV0sbj0iIixzPTA7czx0Lmxlbmd0aDtzKyspbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRbc10pLHtoZWFkZXI6ITEsYWxpZ246dGhpcy50b2tlbi5hbGlnbltzXX0pO2wrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobil9cmV0dXJuIHRoaXMucmVuZGVyZXIudGFibGUoaSxsKTtjYXNlImJsb2NrcXVvdGVfc3RhcnQiOmZvcih2YXIgbD0iIjsiYmxvY2txdW90ZV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGwpO2Nhc2UibGlzdF9zdGFydCI6Zm9yKHZhciBsPSIiLG89dGhpcy50b2tlbi5vcmRlcmVkOyJsaXN0X2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3QobCxvKTtjYXNlImxpc3RfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPSJ0ZXh0Ij09PXRoaXMudG9rZW4udHlwZT90aGlzLnBhcnNlVGV4dCgpOnRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJsb29zZV9pdGVtX3N0YXJ0Ijpmb3IodmFyIGw9IiI7Imxpc3RfaXRlbV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0aXRlbShsKTtjYXNlImh0bWwiOnZhciBoPXRoaXMudG9rZW4ucHJlfHx0aGlzLm9wdGlvbnMucGVkYW50aWM/dGhpcy50b2tlbi50ZXh0OnRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpO3JldHVybiB0aGlzLnJlbmRlcmVyLmh0bWwoaCk7Y2FzZSJwYXJhZ3JhcGgiOnJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZVRleHQoKSl9fSxsLmV4ZWM9bCxoLm9wdGlvbnM9aC5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBvKGguZGVmYXVsdHMsZSksaH0saC5kZWZhdWx0cz17Z2ZtOiEwLHRhYmxlczohMCxicmVha3M6ITEscGVkYW50aWM6ITEsc2FuaXRpemU6ITEsc21hcnRMaXN0czohMSxzaWxlbnQ6ITEsaGlnaGxpZ2h0Om51bGwsbGFuZ1ByZWZpeDoibGFuZy0iLHNtYXJ0eXBhbnRzOiExLGhlYWRlclByZWZpeDoiIixyZW5kZXJlcjpuZXcgbn0saC5QYXJzZXI9cixoLnBhcnNlcj1yLnBhcnNlLGguUmVuZGVyZXI9bixoLkxleGVyPWUsaC5sZXhlcj1lLmxleCxoLklubGluZUxleGVyPXQsaC5pbmxpbmVMZXhlcj10Lm91dHB1dCxoLnBhcnNlPWgsIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWg6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZnVuY3Rpb24oKXtyZXR1cm4gaH0pOnRoaXMubWFya2VkPWh9LmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpnbG9iYWwpfSgpKTtQSwcIQvpMalM5AABTOQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAc3RhdGljXGxpYlx2YWxpZGF0ZS5taW4uanMvKgogKiB2YWxpZGF0ZS5qcyAxLjMKICogQ29weXJpZ2h0IChjKSAyMDEzIFJpY2sgSGFycmlzb24sIGh0dHA6Ly9yaWNraGFycmlzb24ubWUKICogdmFsaWRhdGUuanMgaXMgb3BlbiBzb3VyY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KICogUG9ydGlvbnMgb2YgdmFsaWRhdGUuanMgYXJlIGluc3BpcmVkIGJ5IENvZGVJZ25pdGVyLgogKiBodHRwOi8vcmlja2hhcnJpc29uLmdpdGh1Yi5jb20vdmFsaWRhdGUuanMKICovCgooZnVuY3Rpb24ocSxyLG0pe3ZhciBzPXtyZXF1aXJlZDoiVGhlICVzIGZpZWxkIGlzIHJlcXVpcmVkLiIsbWF0Y2hlczoiVGhlICVzIGZpZWxkIGRvZXMgbm90IG1hdGNoIHRoZSAlcyBmaWVsZC4iLCJkZWZhdWx0IjoiVGhlICVzIGZpZWxkIGlzIHN0aWxsIHNldCB0byBkZWZhdWx0LCBwbGVhc2UgY2hhbmdlLiIsdmFsaWRfZW1haWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiIsdmFsaWRfZW1haWxzOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFsbCB2YWxpZCBlbWFpbCBhZGRyZXNzZXMuIixtaW5fbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBhdCBsZWFzdCAlcyBjaGFyYWN0ZXJzIGluIGxlbmd0aC4iLG1heF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IG5vdCBleGNlZWQgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixleGFjdF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IGJlIGV4YWN0bHkgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixncmVhdGVyX3RoYW46IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBudW1iZXIgZ3JlYXRlciB0aGFuICVzLiIsbGVzc190aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGxlc3MgdGhhbiAlcy4iLGFscGhhOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMuIixhbHBoYV9udW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzLiIsYWxwaGFfZGFzaDoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycywgdW5kZXJzY29yZXMsIGFuZCBkYXNoZXMuIixudW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgbnVtYmVycy4iLGludGVnZXI6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYW4gaW50ZWdlci4iLGRlY2ltYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBkZWNpbWFsIG51bWJlci4iLGlzX25hdHVyYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSBwb3NpdGl2ZSBudW1iZXJzLiIsaXNfbmF0dXJhbF9ub196ZXJvOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvLiIsdmFsaWRfaXA6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBJUC4iLHZhbGlkX2Jhc2U2NDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIGJhc2U2NCBzdHJpbmcuIix2YWxpZF9jcmVkaXRfY2FyZDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci4iLGlzX2ZpbGVfdHlwZToiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5ICVzIGZpbGVzLiIsdmFsaWRfdXJsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgVVJMLiJ9LHQ9ZnVuY3Rpb24oYSl7fSx1PS9eKC4rPylcWyguKylcXSQvLGg9L15bMC05XSskLyx2PS9eXC0/WzAtOV0rJC8saz0vXlwtP1swLTldKlwuP1swLTldKyQvLHA9L15bYS16QS1aMC05LiEjJCUmYW1wOycqK1wtXC89P1xeX2B7fH1+XC1dK0BbYS16QS1aMC05XC1dKyg/OlwuW2EtekEtWjAtOVwtXSspKiQvLHc9L15bYS16XSskL2kseD0vXlthLXowLTldKyQvaSx5PS9eW2EtejAtOV9cLV0rJC9pLHo9L15bMC05XSskL2ksQT0vXlsxLTldWzAtOV0qJC9pLEI9L14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pJC9pLEM9L1teYS16QS1aMC05XC9cKz1dL2ksRD0vXltcZFwtXHNdKyQvLEU9L14oKGh0dHB8aHR0cHMpOlwvXC8oXHcrOnswLDF9XHcqQCk/KFxTKyl8KSg6WzAtOV0rKT8oXC98XC8oW1x3IyE6Lj8rPSYlQCFcLVwvXSkpPyQvLGU9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY2FsbGJhY2s9Y3x8dDt0aGlzLmVycm9ycz1bXTt0aGlzLmZpZWxkcz17fTt0aGlzLmZvcm09dGhpcy5fZm9ybUJ5TmFtZU9yTm9kZShhKXx8e307dGhpcy5tZXNzYWdlcz17fTt0aGlzLmhhbmRsZXJzPXt9O2E9MDtmb3IoYz1iLmxlbmd0aDthPGM7YSsrKXt2YXIgZD1iW2FdO2lmKChkLm5hbWV8fGQubmFtZXMpJiZkLnJ1bGVzKWlmKGQubmFtZXMpZm9yKHZhciBsPTA7bDxkLm5hbWVzLmxlbmd0aDtsKyspdGhpcy5fYWRkRmllbGQoZCxkLm5hbWVzW2xdKTtlbHNlIHRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lKX12YXIgZz10aGlzLmZvcm0ub25zdWJtaXQ7dGhpcy5mb3JtLm9uc3VibWl0PWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXt0cnl7cmV0dXJuIGEuX3ZhbGlkYXRlRm9ybShiKSYmKGc9PT1tfHxnKCkpfWNhdGNoKGMpe319fSh0aGlzKX0sbj1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKDA8YS5sZW5ndGgmJigicmFkaW8iPT09YVswXS50eXBlfHwiY2hlY2tib3giPT09YVswXS50eXBlKSlmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXtpZihhW2NdLmNoZWNrZWQpcmV0dXJuIGFbY11bYl19ZWxzZSByZXR1cm4gYVtiXX07ZS5wcm90b3R5cGUuc2V0TWVzc2FnZT1mdW5jdGlvbihhLGIpe3RoaXMubWVzc2FnZXNbYV09YjtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUucmVnaXN0ZXJDYWxsYmFjaz1mdW5jdGlvbihhLGIpe2EmJigic3RyaW5nIj09PXR5cGVvZiBhJiZiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGIpJiYodGhpcy5oYW5kbGVyc1thXT1iKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuX2Zvcm1CeU5hbWVPck5vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgYT9hOnIuZm9ybXNbYV19O2UucHJvdG90eXBlLl9hZGRGaWVsZD1mdW5jdGlvbihhLGIpe3RoaXMuZmllbGRzW2JdPXtuYW1lOmIsZGlzcGxheTphLmRpc3BsYXl8fGIscnVsZXM6YS5ydWxlcyxpZDpudWxsLHR5cGU6bnVsbCx2YWx1ZTpudWxsLGNoZWNrZWQ6bnVsbH19O2UucHJvdG90eXBlLl92YWxpZGF0ZUZvcm09ZnVuY3Rpb24oYSl7dGhpcy5lcnJvcnM9W107Zm9yKHZhciBiIGluIHRoaXMuZmllbGRzKWlmKHRoaXMuZmllbGRzLmhhc093blByb3BlcnR5KGIpKXt2YXIgYz10aGlzLmZpZWxkc1tiXXx8e30sZD10aGlzLmZvcm1bYy5uYW1lXTtkJiZkIT09bSYmKGMuaWQ9bihkLCJpZCIpLGMudHlwZT0wPGQubGVuZ3RoP2RbMF0udHlwZTpkLnR5cGUsYy52YWx1ZT1uKGQsInZhbHVlIiksYy5jaGVja2VkPW4oZCwiY2hlY2tlZCIpLHRoaXMuX3ZhbGlkYXRlRmllbGQoYykpfSJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5jYWxsYmFjayYmdGhpcy5jYWxsYmFjayh0aGlzLmVycm9ycyxhKTswPHRoaXMuZXJyb3JzLmxlbmd0aCYmKGEmJmEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmV2ZW50JiYoZXZlbnQucmV0dXJuVmFsdWU9ITEpKTtyZXR1cm4hMH07ZS5wcm90b3R5cGUuX3ZhbGlkYXRlRmllbGQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEucnVsZXMuc3BsaXQoInwiKSxjPWEucnVsZXMuaW5kZXhPZigicmVxdWlyZWQiKSxkPSFhLnZhbHVlfHwiIj09PWEudmFsdWV8fGEudmFsdWU9PT1tLGw9MCxnPWIubGVuZ3RoO2w8ZztsKyspe3ZhciBmPWJbbF0sZT1udWxsLGg9ITEsaz11LmV4ZWMoZik7aWYoLTEhPT1jfHwtMSE9PWYuaW5kZXhPZigiIWNhbGxiYWNrXyIpfHwhZClpZihrJiYoZj1rWzFdLGU9a1syXSksIiEiPT09Zi5jaGFyQXQoMCkmJihmPWYuc3Vic3RyaW5nKDEsZi5sZW5ndGgpKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuX2hvb2tzW2ZdP3RoaXMuX2hvb2tzW2ZdLmFwcGx5KHRoaXMsW2EsZV0pfHwoaD0hMCk6ImNhbGxiYWNrXyI9PT1mLnN1YnN0cmluZygwLDkpJiYoZj1mLnN1YnN0cmluZyg5LGYubGVuZ3RoKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuaGFuZGxlcnNbZl0mJiExPT09dGhpcy5oYW5kbGVyc1tmXS5hcHBseSh0aGlzLFthLnZhbHVlLGVdKSYmKGg9ITApKSxoKXtiPXRoaXMubWVzc2FnZXNbZl18fHNbZl07Yz0iQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdpdGggdGhlICIrYS5kaXNwbGF5KyIgZmllbGQuIjtiJiYoYz1iLnJlcGxhY2UoIiVzIixhLmRpc3BsYXkpLGUmJihjPWMucmVwbGFjZSgiJXMiLHRoaXMuZmllbGRzW2VdP3RoaXMuZmllbGRzW2VdLmRpc3BsYXk6ZSkpKTt0aGlzLmVycm9ycy5wdXNoKHtpZDphLmlkLG5hbWU6YS5uYW1lLG1lc3NhZ2U6YyxydWxlOmZ9KTticmVha319fTtlLnByb3RvdHlwZS5faG9va3M9e3JlcXVpcmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWEudmFsdWU7cmV0dXJuImNoZWNrYm94Ij09PWEudHlwZXx8InJhZGlvIj09PWEudHlwZT8hMD09PWEuY2hlY2tlZDpudWxsIT09YiYmIiIhPT1ifSwiZGVmYXVsdCI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS52YWx1ZSE9PWJ9LG1hdGNoZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmZvcm1bYl07cmV0dXJuIGM/YS52YWx1ZT09PWMudmFsdWU6ITF9LHZhbGlkX2VtYWlsOmZ1bmN0aW9uKGEpe3JldHVybiBwLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2VtYWlsczpmdW5jdGlvbihhKXthPWEudmFsdWUuc3BsaXQoIiwiKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKylpZighcC50ZXN0KGFbYl0pKXJldHVybiExO3JldHVybiEwfSxtaW5fbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD49cGFyc2VJbnQoYiwxMCk6ITF9LG1heF9sZW5ndGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC50ZXN0KGIpP2EudmFsdWUubGVuZ3RoPD1wYXJzZUludChiLDEwKTohMX0sZXhhY3RfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD09PXBhcnNlSW50KGIsMTApOiExfSxncmVhdGVyX3RoYW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpP3BhcnNlRmxvYXQoYS52YWx1ZSk+cGFyc2VGbG9hdChiKTohMX0sbGVzc190aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPHBhcnNlRmxvYXQoYik6ITF9LGFscGhhOmZ1bmN0aW9uKGEpe3JldHVybiB3LnRlc3QoYS52YWx1ZSl9LGFscGhhX251bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIHgudGVzdChhLnZhbHVlKX0sYWxwaGFfZGFzaDpmdW5jdGlvbihhKXtyZXR1cm4geS50ZXN0KGEudmFsdWUpfSxudW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiBoLnRlc3QoYS52YWx1ZSl9LGludGVnZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHYudGVzdChhLnZhbHVlKX0sZGVjaW1hbDpmdW5jdGlvbihhKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsOmZ1bmN0aW9uKGEpe3JldHVybiB6LnRlc3QoYS52YWx1ZSl9LGlzX25hdHVyYWxfbm9femVybzpmdW5jdGlvbihhKXtyZXR1cm4gQS50ZXN0KGEudmFsdWUpfSx2YWxpZF9pcDpmdW5jdGlvbihhKXtyZXR1cm4gQi50ZXN0KGEudmFsdWUpfSx2YWxpZF9iYXNlNjQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEMudGVzdChhLnZhbHVlKX0sdmFsaWRfdXJsOmZ1bmN0aW9uKGEpe3JldHVybiBFLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2NyZWRpdF9jYXJkOmZ1bmN0aW9uKGEpe2lmKCFELnRlc3QoYS52YWx1ZSkpcmV0dXJuITE7dmFyIGI9MCxjPTAsZD0hMTthPWEudmFsdWUucmVwbGFjZSgvXEQvZywiIik7Zm9yKHZhciBlPWEubGVuZ3RoLTE7MDw9ZTtlLS0pYz1hLmNoYXJBdChlKSxjPXBhcnNlSW50KGMsMTApLGQmJjk8KGMqPTIpJiYoYy09OSksYis9YyxkPSFkO3JldHVybiAwPT09YiUxMH0saXNfZmlsZV90eXBlOmZ1bmN0aW9uKGEsYil7aWYoImZpbGUiIT09YS50eXBlKXJldHVybiEwO3ZhciBjPWEudmFsdWUuc3Vic3RyKGEudmFsdWUubGFzdEluZGV4T2YoIi4iKSsxKSxkPWIuc3BsaXQoIiwiKSxlPSExLGc9MCxmPWQubGVuZ3RoO2ZvcihnO2c8ZjtnKyspYz09ZFtnXSYmKGU9ITApO3JldHVybiBlfX07cS5Gb3JtVmFsaWRhdG9yPWV9KSh3aW5kb3csZG9jdW1lbnQpOwpQSwcIZowfxDMYAAAzGAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAdmlldy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAdmlld1xhZG1pbi9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxhcnRpY2xlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mt7vliqDmlofnq6A8L2E+DQogICAgPC9saT57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk5paH56ug5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9hcnRpY2xlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIlnRyEm4GAABuBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xhZG1pblxjbWQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcYWRtaW5cY21kXGJhY2t1cC5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciBjbGVhciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUgbGVmdCI+5aSH5Lu95pWw5o2uPC9oMT4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUgbGVmdCIgaWQ9ImJhY2t1cC1idG4iPuWkh+S7vTwvYnV0dG9uPg0KPC9oZWFkZXI+DQo8dWwgY2xhc3M9ImNtZC1saXN0IiBpZD0iYmFja3VwLWxpc3QiPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVUaW1lIC5Nb2RUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InNpemUiPnt7RmlsZVNpemUgLlNpemV9fTwvc3Bhbj4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyIgcmVsPSJ7ey5OYW1lfX0iPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUtbyI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYmFja3VwLWJ0bicpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgdHlwZTogInBvc3QiLA0KICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgJCgnLmNtZC1saXN0JykucHJlcGVuZCgnPGxpIGNsYXNzPSJiYWNrdXAtbG9hZGluZyI+5aSH5Lu95LitLi48L2xpPicpOw0KICAgICAgICAgICAgICAgICAgICAkKCcjYmFja3VwLWJ0bicpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmJhY2t1cC1sb2FkaW5nJykucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuY21kLWxpc3QnKS5wcmVwZW5kKCc8bGkgY2xhc3M9ImJhY2t1cC1yZXN1bHQiPuWImuWImuWkh+S7veWIsCAnICsganNvbi5maWxlICsgJzwvbGk+Jyk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5zaG93KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuZGVsJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICB1cmw6ICIvY21kL2JhY2t1cC8/ZmlsZT0iICsgJCh0aGlzKS5hdHRyKCJyZWwiKSwNCiAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAkKHRoYXQpLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwjQcLJY6AYAAOgGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXGNvbW1lbnRzLmh0bWw8ZGl2IGlkPSJjb21tZW50LWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAiPnt7cmFuZ2UgLkNvbW1lbnRzfX0NCiAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSJ7ey5BdXRob3J9fSIvPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+e3tpZiAuR2V0Q29udGVudH19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5Ae3suR2V0Q29udGVudC5UaXRsZX19PC9zcGFuPnt7ZWxzZX19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5A5peg5pWIPC9zcGFuPnt7ZW5kfX17e2lmIG5lIC5TdGF0dXMgImFwcHJvdmVkIn19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtY2hlY2siIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWuoeaguCI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45LitPC9hPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Zue5aSNIj48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtZGVsIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaQiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pnt7ZW5kfX0NCiAgICA8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGFjdGlvbj0iL2FkbWluL2NvbW1lbnRzLyIgY2xhc3M9ImZvcm0gY2xlYXIgbGVmdCIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQgbGVmdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiIGlkPSJjb21tZW50LXN1Ym1pdCI+5Zue5aSN6K+E6K66PC9idXR0b24+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJjb21tZW50LWNsb3NlIj7lhbPpl63lm57lpI08L2J1dHRvbj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIGlkPSJjb21tZW50LXBhcmVudCIgbmFtZT0icGlkIi8+DQogICAgPC9mb3JtPg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6K+E6K665bCG5L2/55u45YWz5YaF5a655peg5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5Yig6Zmk5aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtY2hlY2snKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5a6h5qC45ZCO5q2k5L2c6ICF5bCG5LiN5YaN5qCH6K6w5a6h5qC4ISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAicHV0IiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlrqHmoLjlpLHotKUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuYy1yZXBseScpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC0nK2lkKS5hcHBlbmQoJCgnI2NvbW1lbnQtZm9ybScpLmRldGFjaCgpLnNob3coKSk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suWbnuWkjSIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9jb21tZW50cy8iOw0KICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgYWxlcnQoIuWbnuWkjeWksei0pSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtY2xvc2UnKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuaGlkZSgpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIkwgOhLQPAAC0DwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAdmlld1xhZG1pblxjdXN0b21fc2V0dGluZy5odG1sPGZvcm0gaWQ9InNldHRpbmctZm9ybSIgY2xhc3M9ImZvcm0gZm9ybS1hbGlnbiBjdXN0b20iIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvY3VzdG9tLyIgbWV0aG9kPSJwb3N0Ij57e3JhbmdlICRrLCR2IDo9IC5TZXR0aW5nc319DQogICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgdmFsdWU9Int7JGt9fSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHZhbHVlPSJ7eyR2fX0iLz4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgIDwvcD57e2VuZH19DQogICAgPHA+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGFkZCIgaHJlZj0iIyI+5re75Yqg5LiA6aG5PC9hPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kvb/nlKjlh73mlbDoh6rlrprkuYnphY3nva7vvIzpnIDopoHliqDliY3nvIAiY18i77yM5aaCR2V0U2V0dGluZygiY19rZXkiKTwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY3VzdG9tLWl0ZW0iPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgcGxhY2Vob2xkZXI9IuWtl+auteWQjSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IG5hbWU9InZhbHVlIiBjbGFzcz0iaXB0IHZhbHVlIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0i5a2X5q615YC8Ii8+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgIDwvcD4NCiAgICA8L3NjcmlwdD4NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNzZXR0aW5nLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIiA6IGpzb24ubXNnKTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5hZGQnKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnI3NldHRpbmctZm9ybScpLnByZXBlbmQoJCgiI2N1c3RvbS1pdGVtIikuaHRtbCgpKTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgaWYoY29uZmlybSgi6KaB5Yig6Zmk6L+Z6aG577yfIikpew0KICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwi4eGWWNAYAADQGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABwAAAB2aWV3XGFkbWluXGVkaXRfYXJ0aWNsZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9IuaWh+eroOagh+mimCIgdmFsdWU9Int7LkFydGljbGUuVGl0bGV9fSIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPnt7SHRtbCAuQXJ0aWNsZS5UZXh0fX08L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOWUr+S4gOmTvuaOpSIgdmFsdWU9Int7LkFydGljbGUuU2x1Z319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5qCH562+PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJ0YWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InRhZyIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOagh+etviIgdmFsdWU9Int7LkFydGljbGUuVGFnU3RyaW5nfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCJ7e2lmIGVxIC5BcnRpY2xlLlN0YXR1cyAicHVibGlzaCJ9fSBzZWxlY3RlZHt7ZW5kfX0+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQie3tpZiBlcSAuQXJ0aWNsZS5TdGF0dXMgImRyYWZ0In19IHNlbGVjdGVke3tlbmR9fT7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuQXJ0aWNsZS5Jc0NvbW1lbnQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLkFydGljbGUuSXNDb21tZW50IGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuW3suS/neWtmO+8jOWOu+afpeeci++8n+i/mOaYr+e7p+e7ree8lui+kSIpKSB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9hcnRpY2xlcy8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIS5zp8W0NAABtDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xhZG1pblxlZGl0X3BhZ2UuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLpobXpnaLmoIfpopgiIHZhbHVlPSJ7ey5QYWdlLlRpdGxlfX0iLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij57e0h0bWwgLlBhZ2UuVGV4dH19PC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpobXpnaLnmoTllK/kuIDpk77mjqUiIHZhbHVlPSJ7ey5QYWdlLlNsdWd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoInt7aWYgZXEgLlBhZ2UuU3RhdHVzICJwdWJsaXNoIn19IHNlbGVjdGVke3tlbmR9fT7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCJ7e2lmIGVxIC5QYWdlLlN0YXR1cyAiZHJhZnQifX0gc2VsZWN0ZWR7e2VuZH19PuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5QYWdlLklzQ29tbWVudCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuUGFnZS5Jc0NvbW1lbnQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7nva7pobbpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImxpbmsiIGlkPSJpcy1saW5rIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLlBhZ2UuSXNMaW5rZWQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5QYWdlLklzTGlua2VkIHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgi5bey5L+d5a2Y77yM5Y675p+l55yL77yf6L+Y5piv57un57ut57yW6L6RIikpIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL3BhZ2VzLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwi2eDIy4w0AAOMNAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXGZpbGVzLmh0bWw8dWwgaWQ9ImZpbGVzLWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAgcGFnZXIiPg0KICAgIDxsaSBjbGFzcz0iZmlsZSIgaWQ9ImZpbGVzLWJ0bi1saSI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgPC9saT57e3JhbmdlIC5GaWxlc319DQogICAgPGxpIGNsYXNzPSJmaWxlIiBpZD0iZmlsZS17ey5JZH19Ij4NCiAgICAgICAgPHNwYW4gY2xhc3M9InVwbG9hZC10aW1lIj57e0RhdGVJbnQ2NCAuVXBsb2FkVGltZSAiTU0uREQifX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJzaXplIj57e0ZpbGVTaXplIC5TaXplfX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj57ey5OYW1lfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSIve3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iL3t7LlVybH19Ij48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluay1zcXVhcmUiPjwvaT48L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgZmFkZS1vdXQiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWIoOmZpOmZhOS7tiI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZSI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCiAgICB7e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2ZpbGVzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCjwvdWw+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2F0dGFjaC1zaG93Iik7DQogICAgICAgICQoIi5kZWwiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6ZmE5Lu255u45YWz6ZO+5o6l5Lya5aSx5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgICAgICAidXJsIjogIi9hZG1pbi9maWxlcy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2ZpbGUtJytpZCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhixZv67AYAAOwGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAAB2aWV3XGFkbWluXGhvbWUuaHRtbDxkaXYgY2xhc3M9ImFkbWluIGNvbnRhaW5lciBjbGVhciIgaWQ9ImRhc2hib2FyZCI+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTUgbGVmdCI+DQogICAgICAgIDxkaXYgY2xhc3M9IndlbGNvbWUiPg0KICAgICAgICAgICAgPGg0PldlbGNvbWU8L2g0Pg0KICAgICAgICAgICAgPHA+5qyi6L+O5Zue5p2l77yMIDxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJxdWljay1saW5rIj4NCiAgICAgICAgICAgIDxoND7lv6vpgJ/pk77mjqU8L2g0Pg0KICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZS93cml0ZS8iPuaSsOWGmeaWh+eroDwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vcGFnZS93cml0ZS8iPua3u+WKoOmhtemdojwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vY29tbWVudHMvIj7mn6XnnIvlkozlrqHmoLjor4Torro8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3NldHRpbmcvIj7kv67mlLnphY3nva48L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIj7mm7TmlrDkuKrkurrotYTmlpk8L2E+PC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS0yIGxlZnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eSI+DQogICAgICAgICAgICA8aDQ+5pyA5paw5rS75YqoPC9oND4NCiAgICAgICAgICAgIDxwPuWGheWuueW8gOWPkeS4rS4uLjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTQgcmlnaHQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cyI+DQogICAgICAgICAgICA8aDQ+5pWw5o2u57uf6K6hPC9oND4NCiAgICAgICAgICAgIDxwPuW3sue7j+WPkeW4g+aWh+eroCA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5BcnRpY2xlc319PC9zcGFuPiDnr4fvvIwNCiAgICAgICAgICAgIOmhtemdoiA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5QYWdlc319PC9zcGFuPiDkuKrvvIwgPGJyLz4NCiAgICAgICAgICAgIOaUtuWIsOivhOiuuiA8c3BhbiBjbGFzcz0ibGJsIGxibC1ibHVlIj57ey5TdGF0aXMuQ29tbWVudHN9fTwvc3Bhbj4g5qyh77yMDQogICAgICAgICAgICDkuIrkvKAgPHNwYW4gY2xhc3M9ImxibCBsYmwtZ3JlZW4iPnt7LlN0YXRpcy5GaWxlc319PC9zcGFuPiDkuKrpmYTku7Y8L3A+DQogICAgICAgICAgICA8cD7lvZPliY3nqIvluo/niYjmnKzvvJo8c3Ryb25nPnt7LlN0YXRpcy5WZXJzaW9ufX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJvZmZpY2UiPg0KICAgICAgICAgICAgPGg0PuWumOaWuea2iOaBrzwvaDQ+DQogICAgICAgICAgICA8cD7ov5jmsqHmnInmtojmga88L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+UEsHCCFZHnQvBgAALwYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5cbG9naW4uaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7nmbvlvZUgLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT4NCiAgICAgICAgI2xvZ2luLWZvcm17DQogICAgICAgICAgICB3aWR0aDogMjgwcHg7DQogICAgICAgICAgICBtYXJnaW46IDgwcHggYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICAjbG9naW4tZm9ybSBoMXsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7DQogICAgICAgIH0NCiAgICA8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8Zm9ybSBpZD0ibG9naW4tZm9ybSIgY2xhc3M9ImZvcm0gZm9ybS12ZXJ0aWNhbCIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiIG5hbWU9ImxvZ2luLWZvcm0iPg0KICAgIDxoMT7nmbvlvZUgLSBGeGguR288L2gxPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9InVzZXIiPueUqOaIt+WQjTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IiBpZD0idXNlciIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ1c2VyIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1c2VyLWludmFsaWQiPueUqOaIt+WQjeS4uuWtl+avjSvmlbDlrZfvvIzplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJwYXNzd29yZCI+55So5oi35a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQiIGlkPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0icGFzc3dvcmQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InBhc3N3b3JkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+55m7IOW9lTwvYnV0dG9uPg0KICAgIDxzcGFuIGNsYXNzPSJ0aXAiPum7mOiupOiusOS9j+eZu+mZhjPlpKk8L3NwYW4+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2Nkbi5zdGF0aWNmaWxlLm9yZy9qcXVlcnkvMS4xMC4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jZG4uc3RhdGljZmlsZS5vcmcvanF1ZXJ5LmZvcm0vMy40Ni9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoImxvZ2luLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoicGFzc3dvcmQiLCJydWxlcyI6InJlcXVpcmVkfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNsb2dpbi1mb3JtJykuYWpheFN1Ym1pdChmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZighanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi55m75b2V6ZSZ6K+v77yM6K+35qOA5p+l55So5oi35oiW5a+G56CBIik7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCNbgeGKQCAAAkAgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5ccGFnZXMuaHRtbDx1bCBpZD0iYXJ0aWNsZS1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj4NCiAgICA8bGk+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUiIGhyZWY9Ii9hZG1pbi9wYWdlL3dyaXRlLyI+5re75Yqg6aG16Z2iPC9hPg0KICAgIDwvbGk+e3tyYW5nZSAuUGFnZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj48aDQgY2xhc3M9ImlubGluZS1ibG9jayB0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0YXJnZXQ9Il9ibGFuayI+e3suVGl0bGV9fTwvYT48L2g0Pnt7aWYgbmUgLlN0YXR1cyAicHVibGlzaCJ9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGJsIHN0YXR1cyI+6I2J56i/PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9InNsdWciPnt7LlNsdWd9fTwvc3Bhbj57e2lmIGVxIC5Jc0NvbW1lbnQgZmFsc2V9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iaXMtY29tbWVudCI+PGkgY2xhc3M9ImZhLWNvbW1lbnRzIGZhIj48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPGEgY2xhc3M9ImVkaXQgbGJsIGxibC1ncmVlbiIgaHJlZj0iL2FkbWluL3BhZ2Uve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+57yW6L6RPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIGxibCBsYmwtcmVkIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7liKDpmaQ8L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHVsIGlkPSJhcnRpY2xlLXBhZ2VyIiBjbGFzcz0icGFnZXIgY29udGFpbmVyOTYwIj57e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL3BhZ2VzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoIi5kZWwiKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgIGlmKGNvbmZpcm0oIuWIoOmZpOmhtemdouWwhuS9v+ebuOWFs+WGheWuueWkseaViO+8geehruiupO+8nyIpKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICJ1cmwiOiIvYWRtaW4vcGFnZS8iK2lkKyIvIiwNCiAgICAgICAgICAgICAgICAidHlwZSI6ImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgInN1Y2Nlc3MiOmZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5Yig6ZmkIik7DQogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCGvk2yFcBgAAXAYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcYWRtaW5ccGFzc3dvcmQuaHRtbDxmb3JtIGlkPSJwYXNzd29yZCIgY2xhc3M9ImZvcm0gZm9ybS1hbGlnbiBjbGVhciIgYWN0aW9uPSIjIiBuYW1lPSJwYXNzd29yZC1mb3JtIiBtZXRob2Q9InBvc3QiPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im9sZCI+5pen5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJvbGQiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJvbGQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7pqozor4Hml6flr4bnoIE8L3NwYW4+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im9sZC1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJuZXciPuaWsOWvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ibmV3IiB0eXBlPSJwYXNzd29yZCIgbmFtZT0ibmV3IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ibmV3LWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9ImNvbmZpcm0iPuehruiupOWvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0iY29uZmlybSIgdHlwZT0icGFzc3dvcmQiIG5hbWU9ImNvbmZpcm0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJjb25maXJtLWludmFsaWQiPuehruiupOWvhueggeS4jeWMuemFjTwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5L+u5pS5PC9idXR0b24+DQogICAgPC9wPg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwYXNzd29yZC1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJvbGQiLCJydWxlcyI6Im1pbl9sZW5ndGhbMl18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6Im5ldyIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiY29uZmlybSIsInJ1bGVzIjoicmVxdWlyZWR8bWF0Y2hlc1tuZXddIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjcGFzc3dvcmQnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCG5xJ4FPBwAATwcAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcYWRtaW5ccGx1Z2luLmh0bWw8dWwgaWQ9InBsdWdpbi1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj57e3JhbmdlIC5QbHVnaW5zfX0NCiAgICA8bGkgY2xhc3M9ImNsZWFyIj57e2lmIC5Jc0FjdGl2ZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0IGxibCBhY3RpdmUgbGJsLWdyZWVuIj4mbmJzcDs8L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSBsZWZ0Ij57ey5OYW1lfX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uIGxlZnQiPnt7LlZlcnNpb259fTwvc3Bhbj57e2lmIC5IYXNTZXR0aW5nfX0NCiAgICAgICAgPGEgY2xhc3M9InNldHRpbmcgbGVmdCIgaHJlZj0iL2FkbWluL3BsdWdpbnMve3suS2V5fX0vIj7pgInpobk8L2E+e3tlbmR9fXt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPGEgY2xhc3M9ImRlYWN0aXZhdGUgbGJsIGxibC1yZWQgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPuWwgeWNsDwvYT57e2Vsc2V9fQ0KICAgICAgICA8YSBjbGFzcz0iYWN0aXZhdGUgbGJsIGxibC1ibHVlIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LktleX19Ij7mv4DmtLs8L2E+e3tlbmR9fQ0KICAgICAgICA8cCBjbGFzcz0iZGVzYyBsZWZ0Ij57ey5EZXNjfX08L3A+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgiLmRlYWN0aXZhdGUiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgdmFyIHAgPSAkdGhpcy5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQucG9zdCgiIiwgew0KICAgICAgICAgICAgICAgICJhY3Rpb24iOiAiZGVhY3RpdmF0ZSIsDQogICAgICAgICAgICAgICAgInBsdWdpbiI6IHANCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLm9mZigiY2xpY2siKS50ZXh0KCLkuIvmrKHmv4DmtLsiKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bCB5Y2w5aSx6LSlIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfSk7DQogICAgICAgICQoIi5hY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJhY3RpdmF0ZSIsDQogICAgICAgICAgICAgICAgInBsdWdpbiI6IHANCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLm9mZigiY2xpY2siKS50ZXh0KCLkuIvmrKHlsIHljbAiKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5r+A5rS75aSx6LSlIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhPcFmhYgYAAGIGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAB2aWV3XGFkbWluXHBsdWdpbl9zZXR0aW5nLmh0bWw8Zm9ybSBpZD0icGx1Z2luLXNldHRpbmctZm9ybSIgY2xhc3M9ImZvcm0gY29udGFpbmVyOTYwIGFkbWluIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAge3tIdG1sIC5Gb3JtfX0NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsNCiAgICAgICAgJCgnI3BsdWdpbi1zZXR0aW5nLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgIGFsZXJ0KGpzb24ucmVzID8gIuW3suS/neWtmCI6IuS/neWtmOWksei0pSIpOw0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcINCtz1TgBAAA4AQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxwcm9maWxlLmh0bWw8Zm9ybSBpZD0icHJvZmlsZSIgY2xhc3M9ImFkbWluIGZvcm0gY2xlYXIgZm9ybS1hbGlnbiIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiIG5hbWU9InByb2ZpbGUtZm9ybSI+DQogICAgPGRpdiBjbGFzcz0iYXZhdGFyIGdyaWQtMS00IGxlZnQgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3suVXNlci5BdmF0YXJ9fSIgYWx0PSJ7ey5Vc2VyLk5pY2t9fSIgY2xhc3M9ImZpZWxkIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgZmllbGQgaW5saW5lLWJsb2NrIj7lpLTlg4/nlLEgPGEgaHJlZj0iaHR0cDovL2dyYXZhdGFyLmNvbS8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vLWZvbGxvdyI+R3JhdmF0YXI8L2E+IOaPkOS+mzwvc3Bhbj4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLXJlZCBpbmxpbmUtYmxvY2siIGhyZWY9Ii9hZG1pbi9wYXNzd29yZC8iPuS/ruaUueWvhueggTwvYT4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImluZm8gcmlnaHQgZ3JpZC0zLTQiPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0idXNlciI+55m75b2V5ZCNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0idXNlciIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgdmFsdWU9Int7LlVzZXIuTmFtZX19IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPueZu+W9leeahOeUqOaIt+WQjTwvc3Bhbj48YnIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVzZXItaW52YWxpZCI+55So5oi35ZCN5Li65a2X5q+NK+aVsOWtl++8jOmVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9Im5pY2siPuaYteensDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9Im5pY2siIHR5cGU9InRleHQiIG5hbWU9Im5pY2siIHZhbHVlPSJ7ey5Vc2VyLk5pY2t9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7mmL7npLrlnKjliY3lj7DnmoTnp7Dlkbw8L3NwYW4+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuaWNrLWludmFsaWQiPuaYteensOmVv+W6pjItMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImVtYWlsIj7pgq7nrrE8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJlbWFpbCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiB2YWx1ZT0ie3suVXNlci5FbWFpbH19IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuiBlOezu+mCrueuse+8jOWNgeWIhumHjeimge+8gTwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImVtYWlsLWludmFsaWQiPumCrueuseagvOW8j+mUmeivrzwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0idXJsIj7nvZHlnYA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1cmwiIHR5cGU9InVybCIgbmFtZT0idXJsIiB2YWx1ZT0ie3suVXNlci5Vcmx9fSIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXJsLWludmFsaWQiPue9keWdgOagvOW8j+mUmeivrzwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQgYmlvIiBuYW1lPSJiaW8iIGlkPSJiaW8iPnt7LlVzZXIuQmlvfX08L3RleHRhcmVhPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5L+u5pS5PC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigicHJvZmlsZS1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJ1c2VyIiwicnVsZXMiOiJhbHBoYV9udW1lcmljfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6Im5pY2siLCJydWxlcyI6Im1pbl9sZW5ndGhbMl18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6ImVtYWlsIiwicnVsZXMiOiJ2YWxpZF9lbWFpbCJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoidXJsIiwicnVsZXMiOiJ2YWxpZF91cmwifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwcm9maWxlJykuYWpheFN1Ym1pdChmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZighanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwgfj6FfAgwAAAIMAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHNldHRpbmcuaHRtbDxmb3JtIGlkPSJzZXR0aW5nLWZvcm0iIGNsYXNzPSJmb3JtIGZvcm0tYWxpZ24iIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvIiBtZXRob2Q9InBvc3QiPg0KICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS11cmwiPuermeeCueWcsOWdgDwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ic2l0ZS11cmwiIGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0ic2l0ZV91cmwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV91cmxgfX0iLz4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXRpdGxlIj7nq5nngrnkuLvmoIfpopg8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdGl0bGUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfdGl0bGUiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9InNpdGUtc3ViLXRpdGxlIj7nq5nngrnlia/moIfpopg8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9InNpdGUtc3ViLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3N1Yl90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3N1Yl90aXRsZWB9fSIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9InNpdGUta2V5d29yZHMiPk1ldGHlhbPplK7lrZc8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9InNpdGUta2V5d29yZHMiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfa2V5d29yZHMiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLWRlc2MiPk1ldGHnq5nngrnku4vnu408L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9InNpdGUtZGVzYyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9kZXNjcmlwdGlvbiIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9ImFydGljbGUtc2l6ZSI+5Y2V6aG15paH56ug5YiX6KGo5pWwPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJhcnRpY2xlLXNpemUiIGNsYXNzPSJpcHQiIHR5cGU9Im51bWJlciIgbmFtZT0iYXJ0aWNsZV9zaXplIiB2YWx1ZT0ie3tTZXR0aW5nIGBhcnRpY2xlX3NpemVgfX0iIG1heD0iMTAiIG1pbj0iMyIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGhlbWUiPuS4u+mimOebruW9leWQjTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aGVtZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aGVtZSIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV90aGVtZWB9fSIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kuLvpopjljbPmjIflkJHnmoTmqKHmnb/nm67lvZXvvIzlhbfkvZPlhoXlrrnor7flj4LogIMgZGVmYXVsdCDnm67lvZXvvIjljbMgZGVmYXVsdCDkuLvpopjvvIk8L3NwYW4+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNpdGVfdGhlbWVfZGVmIiB2YWx1ZT0iZGVmYXVsdCIvPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgIDxsYWJlbCBmb3I9ImdvLW1hcmtkb3duIj5Hb+a4suafk01hcmtkb3duPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJnby1tYXJrZG93biIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duIiB2YWx1ZT0ie3tTZXR0aW5nIGBlbmFibGVfZ29fbWFya2Rvd25gfX0iLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBibG9jayI+6buY6K6k5YWz6Zet77yM5L2/55So5YmN56uvbWFya2VkLmpz5riy5p+T77yM5aGrdHJ1ZeaXtuW8gOWQrzwvc3Bhbj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duX2RlZiIgdmFsdWU9ImZhbHNlIi8+DQogICAgPC9wPg0KICAgIDxwPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZg8L2J1dHRvbj4NCiAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vc2V0dGluZy9jdXN0b20vIj7oh6rlrprkuYnphY3nva48L2E+DQogICAgPC9wPg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI3NldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiIDoganNvbi5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCO7KYB4fCgAAHwoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHZpZXdcYWRtaW5cd3JpdGVfYXJ0aWNsZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9IuaWh+eroOagh+mimCIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPuaSsOWGmeaWh+eroOWGheWuue+8jOaUr+aMgWBtYXJrZG93bmDor63ms5Xpq5jkuq48L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOWUr+S4gOmTvuaOpSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuagh+etvjwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0idGFnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWciIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTmoIfnrb4iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCI+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQiPuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2FydGljbGVzLyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCL7KdHwhDAAAIQwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcYWRtaW5cd3JpdGVfcGFnZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9Iumhtemdouagh+mimCIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPuaSsOWGmemhtemdouWGheWuue+8jOaUr+aMgWBtYXJrZG93bmDor63ms5Xpq5jkuq48L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumhtemdoueahOWUr+S4gOmTvuaOpSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoIj7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCI+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPue9rumhtumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ibGluayIgaWQ9ImlzLWxpbmsiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9wYWdlcy8iOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhyW1VpfAwAAHwMAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABEAAAB2aWV3XGFkbWluLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT57ey5UaXRsZX19IC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2FkbWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi92YWxpZGF0ZS5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8ZGl2IGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIGNsZWFyIj4NCiAgICAgICAgPGgzIGNsYXNzPSJsb2dvIGxlZnQiPkZ4aC5HbyAtIDxzcGFuPnt7LlRpdGxlfX08L3NwYW4+PC9oMz4NCiAgICAgICAgPGRpdiBjbGFzcz0ibmF2IGxlZnQgcmVsYXRpdmUiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImRhc2hib2FyZCBsZWZ0IiBocmVmPSIvYWRtaW4vIj48aSBjbGFzcz0iZmEgZmEtZGFzaGJvYXJkIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImFydGljbGUgbGVmdCIgaHJlZj0iL2FkbWluL2FydGljbGVzLyIgdGl0bGU9IuaWh+eroCI+PGkgY2xhc3M9ImZhIGZhLWNvcHkiPjwvaT48L2E+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9InBhZ2VzIGxlZnQiIGhyZWY9Ii9hZG1pbi9wYWdlcy8iIHRpdGxlPSLni6znq4vpobXpnaIiPjxpIGNsYXNzPSJmYSBmYS1wYXN0ZSI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJjb21tZW50cyBsZWZ0IiBocmVmPSIvYWRtaW4vY29tbWVudHMvIiB0aXRsZT0i6K+E6K66Ij48aSBjbGFzcz0iZmEgZmEtY29tbWVudHMiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iZmlsZXMgbGVmdCIgaHJlZj0iL2FkbWluL2ZpbGVzLyIgdGl0bGU9IuWqkuS9k+aWh+S7tiI+PGkgY2xhc3M9ImZhIGZhLWluYm94Ij48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9InBsdWdpbnMgbGVmdCIgaHJlZj0iL2FkbWluL3BsdWdpbnMvIiB0aXRsZT0i5o+S5Lu2Ij48aSBjbGFzcz0iZmEgZmEtZ2VhcnMiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0ic2V0dGluZyBsZWZ0IiBocmVmPSIvYWRtaW4vc2V0dGluZy8iIHRpdGxlPSLorr7nva4iPjxpIGNsYXNzPSJmYSBmYS1jb2ciPjwvaT48L2E+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8YSBjbGFzcz0ib3V0IG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvbG9nb3V0LyIgdGl0bGU9IumAgOWHuiI+PGkgY2xhc3M9ImZhIGZhLXBvd2VyLW9mZiBmYS1sZyI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9InByb2ZpbGUgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii9hZG1pbi9wcm9maWxlLyIgdGl0bGU9IuaIkSI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT48L2E+DQogICAgICAgIDxhIGNsYXNzPSJmcm9udCBuYXYtaXRlbSByaWdodCIgaHJlZj0iLyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSLmn6XnnIvnvZHnq5kiPjxpIGNsYXNzPSJmYSBmYS1leHRlcm5hbC1saW5rIj48L2k+PC9hPg0KICAgIDwvZGl2Pg0KPC9kaXY+DQp7QENvbnRlbnR9DQo8ZGl2IGlkPSJmb290ZXIiIGNsYXNzPSJjbGVhciI+DQog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YXNzPSJmYSBmYS1xdW90ZS1yaWdodCI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+e3tlbmR9fXt7ZW5kfX0NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LXNob3ciIGNsYXNzPSJ0ZXh0LWNlbnRlciI+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGVuYWJsZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+e3tlbHNlfX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1yZWQiPuacrOaWh+WFs+mXreS6huivhOiuujwvYnV0dG9uPnt7ZW5kfX0NCiAgICA8L2Rpdj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgY2xhc3M9ImhpZGUgY2xlYXIgdGV4dC1jZW50ZXIgZm9ybSIgYWN0aW9uPSIvY29tbWVudC97ey5Db250ZW50LklkfX0vIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8gbGVmdCB0ZXh0LXJpZ2h0Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIGMtYXZhdGFyLWZpZWxkIj4NCiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBudWxsIiBzcmM9Ii9zdGF0aWMvaW1nL3NpdGUucG5nIiBhbHQ9IiIgaWQ9ImNvbW1lbnQtYXZhdGFyIi8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5vdC1tZSBibG9jayIgaHJlZj0iIyI+5LiN5piv5oiRPzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mby1maWVsZHMgaGlkZSI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLnp7DlkbwiIGlkPSJjb21tZW50LWF1dGhvciIvPjwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6YKu566xIiBpZD0iY29tbWVudC1lbWFpbCIvPiA8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgcGxhY2Vob2xkZXI9Iue9keWdgCIgaWQ9ImNvbW1lbnQtdXJsIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY29tbWVudC1wYXJlbnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIG5hbWU9InBpZCIvPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWNvbnRlbnQgdGV4dC1sZWZ0IHJpZ2h0Ij4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuWPkeihqOivhOiuujwvYnV0dG9uPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGJsIGxibC1ncmVlbiBjYW5jZWwtcmVwbHkiIHR5cGU9ImJ1dHRvbiI+5Y+W5raI5Zue5aSNPC9idXR0b24+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZm9ybT57e2VuZH19DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY29tbWVudC10cGwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0iIiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3IiIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT5Ob3c8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9IiI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jaGVjayI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45Lit77yM5Yi35paw5ZCO6ZqQ6JePPC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPjwvc2VjdGlvbj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvc2NyaXB0Pg0KPC9kaXY+UEsHCG+ub1TiDAAA4gwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHZpZXdcZGVmYXVsdFxlcnJvci9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xkZWZhdWx0XGVycm9yXGVycm9yLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouato+WcqOaJk+eejOedoTwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWKquWKm+WUpOmGku+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCBOERlJ4AQAAeAEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHZpZXdcZGVmYXVsdFxlcnJvclxub3Rmb3VuZC5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPumUmeivr+aPkOekujwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPmJvZHl7bWFyZ2luOiA0MHB4IDEwMHB4fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoMj7mgqjorr/pl67nmoTpobXpnaLnprvlrrblh7rotbA8L2gyPjxici8+DQo8cD7nqIvluo/lkZjmraPlnKjlm5vlpITlr7vmib7vvIzor7fnqI3lgJnorr/pl64uLi48L3A+DQo8cD48YSBocmVmPSIvIj7ov5Tlm57pppbpobU8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwiQ+dTAdQEAAHUBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGRlZmF1bHRcaG9tZS5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iLz4NCiAgICA8dGl0bGU+e3tpZiAuVGl0bGV9fXt7LlRpdGxlfX0gLSB7e2VuZH19e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC90aXRsZT4NCiAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRnhoR28gQmxvZyIgLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL3N0eWxlLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19IC0gUlNTIDIuMCIgaHJlZj0iL3Jzcy54bWwiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIi8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8bmF2IGlkPSJuYXYiIGNsYXNzPSJjbGVhciB0ZXh0LWNlbnRlciI+DQogICAgPHVsPg0KICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iLyI+5paH56ugPC9hPjwvbGk+DQogICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvYWJvdXQtbWUuaHRtbCI+5YWz5LqOPC9hPjwvbGk+DQogICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvZnJpZW5kcy5odG1sIj7lpb3lj4s8L2E+PC9saT4NCiAgICA8L3VsPg0KPC9uYXY+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8cD4NCiAgICAgICAgPGEgY2xhc3M9IndlaWJvIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX3dlaWJvYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIj48L2k+V2VpYm88L2E+DQogICAgICAgIDxhIGNsYXNzPSJnaXQiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZ2l0aHViYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWdpdGh1YiI+PC9pPkdpdEh1YjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImVtYWlsIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX2VtYWlsYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlIj48L2k+RW1haWw8L2E+DQogICAgICAgIDxhIGNsYXNzPSJyc3MiIGhyZWY9Ii9yc3MueG1sIiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXJzcyI+PC9pPlJTUzwvYT57e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KICAgIDwvcD4NCiAgICA8c3Bhbj5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuIFByb3VkbHkgcHVibGlzaGVkIHdpdGggRnhoLkdvLjwvc3Bhbj4NCiAgICA8YSBpZD0iZ28tdG9wIiBocmVmPSIjIiBjbGFzcz0ibGJsIGhpZGUgbGJsLWJsdWUiIHRpdGxlPSLlm57liLDpobbpg6giPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy11cCBmYS1sZyI+PC9pPjwvYT4NCjwvZm9vdGVyPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvaG9tZS5qcyI+PC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCJUFtPyUCQAAlAkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcZGVmYXVsdFxpbmRleC5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxhcnRpY2xlIGNsYXNzPSJjbGVhciIgaWQ9ImFydGljbGUte3suSWR9fSI+DQogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEgbGVmdCB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgICA8IS0tPHAgY2xhc3M9ImxibCBsYmwtYmx1ZSBhdXRob3IiPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+5YKF5bCP6buRPC9wPi0tPnt7aWYgZ3QgLkNvbW1lbnROdW0gMH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1yZWQgY29tbWVudHMiPjxhIGhyZWY9Int7Lkxpbmt9fSNjb21tZW50Ij48aSBjbGFzcz0iZmEgZmEtY29tbWVudHMiPjwvaT48c3Ryb25nPnt7LkNvbW1lbnROdW19fSDihIM8L3N0cm9uZz48L2E+PC9wPnt7ZW5kfX0NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIj48aSBjbGFzcz0iZmEgZmEtZXllIj48L2k+PHN0cm9uZz57ey5IaXRzfX0g4oSJPC9zdHJvbmc+PC9wPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtZ3JheSB0aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPjxzdHJvbmc+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+DQogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5TdW1tYXJ5fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX17e2lmIC5UYWdTdHJpbmd9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWcgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdGFncyI+PC9pPnt7LlRhZ1N0cmluZ319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iaW5saW5lLWJsb2NrIHJlYWQgcmlnaHQiIGhyZWY9Int7Lkxpbmt9fSI+PGkgY2xhc3M9ImZhIGZhLXNlYXJjaCI+PC9pPue7p+e7remYheivuzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9hcnRpY2xlPnt7ZW5kfX0NCiAgICA8ZGl2IGNsYXNzPSJwYWdlciB0ZXh0LWNlbnRlciI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICAgICAgPGEgaHJlZj0iL3Ave3sufX0vIiBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+e3sufX08L2E+e3tlbmR9fQ0KICAgIDwvZGl2Pg0KPC9kaXY+UEsHCO7wgWs2BgAANgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcZGVmYXVsdFxwYWdlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIiIGlkPSJhcnRpY2xlLUlkIj57e3dpdGggLlBhZ2V9fQ0KICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj4NCiAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImF1dGhvciBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+e3suVXNlci5OaWNrfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2aWV3cyBpbmxpbmUtYmxvY2sgcmlnaHQiPumYheivuyZuYnNwOyZuYnNwOzxzcGFuPnt7LkhpdHN9fTwvc3Bhbj4mbmJzcDsmbmJzcDvmrKE8L3NwYW4+DQogICAgICAgIDwvcD57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KPC9kaXY+UEsHCFwAzt0EAwAABAMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACgAAAHZpZXdcbGluZy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xsaW5nXGFydGljbGUuaHRtbDxkaXYgaWQ9ImFydGljbGUtY29udGFpbmVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxhcnRpY2xlIGNsYXNzPSJjbGVhciBhcnRpY2xlLXNpbmdsZSByZWxhdGl2ZSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIGFic29sdXRlIj57ey5IaXRzfX08L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJ0aW1lLWluZm8iPnt7aWYgLlVzZXJ9fTxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDt7e2VuZH195Y+R6KGo5LqOJm5ic3A7Jm5ic3A7Jm5ic3A7e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIllZWVkg5bm0IE1NIOaciCBERCDml6UifX08L3A+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPuagh+etvu+8mnt7LlRhZ1N0cmluZ319PC9zcGFuPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCOoUY3hZAwAAWQMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0icmVsYXRpdmUiPg0KICAgIDxoNCBpZD0iY29tbWVudC10aXRsZSI+5paH56ug6K+E6K66PC9oND4NCiAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+e3suQ29udGVudC5Db21tZW50TnVtfX08L2E+PC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIGNsZWFyIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkgbGJsIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LklkfX0iPuWbnuWkjTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHA+PGEgY2xhc3M9ImMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9ImMtdGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NIOaciCBERCDml6UgSEgg5pe2IG1tIOWIhiJ9fTwvc3Bhbj48L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJj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ci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvbGluZy5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIgY2xhc3M9ImxlZnQiLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCIgY2xhc3M9ImxlZnQiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICB7e0h0bWwgYDwhLS08aDQgaWQ9ImhlYWRlci1zdWIiIGNsYXNzPSJsZWZ0Ij57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4tLT5gfX0NCiAgICAgICAgPG5hdiBpZD0ibmF2IiBjbGFzcz0icmlnaHQiPg0KICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvIj7mlofnq6A8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iL2Fib3V0LW1lLmh0bWwiPuWFs+S6jjwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvZnJpZW5kcy5odG1sIj7lpb3lj4s8L2E+PC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvbmF2Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgY2xlYXIiPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+R28gwqkgMjAxNCBBbGwgcmlnaHRzIHJlc2VydmVkLjwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InJpZ2h0Ij5Qcm91ZGx5IHB1Ymxpc2hlZCB3aXRoIEZ4aC5Hby48L3NwYW4+DQogICAgPC9kaXY+DQogICAgPGEgaWQ9ImdvLXRvcCIgaHJlZj0iIyIgY2xhc3M9ImxibCBoaWRlIGxibC1ibHVl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" \ No newline at end of file +const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnttYXJnaW4tdG9wOjI0cHg7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3NldHRpbmctbmF2IGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDEycHh9I3NldHRpbmctbmF2IGxpIGF7cGFkZGluZzozcHggMTBweH0KI3NldHRpbmctbmF2IGxpIGE6aG92ZXIsI3NldHRpbmctbmF2IGxpIGEuY3VycmVudHtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMDA1YjlifQouc2V0dGluZy1wYW5lbHtkaXNwbGF5Om5vbmV9Ci5zZXR0aW5nLWZvcm17d2lkdGg6ODIwcHg7bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99LnNldHRpbmctZm9ybSAuaXB0e3dpZHRoOjQ4MHB4fQouc2V0dGluZy1mb3JtIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9Ci5zZXR0aW5nLWZvcm0gbGFiZWx7bWluLXdpZHRoOjEwZW19Ci5zZXR0aW5nLWZvcm0gLnRpcC5ibG9ja3ttYXJnaW4tbGVmdDoxMmVtfQojc2V0dGluZy1jdXN0b20tZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQua2V5e3dpZHRoOjI1MHB4fQojc2V0dGluZy1jdXN0b20tZm9ybSBpbnB1dC52YWx1ZXt3aWR0aDo2NTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojc2V0dGluZy1jdXN0b20tZm9ybSAudGlwe21hcmdpbi1sZWZ0OjB9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNudCwjY29tbWVudC1saXN0IC5jLWVtYWlse2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHh9CiNjb21tZW50LWxpc3QgLmMtcmVwbHl7Y29sb3I6Izk5OX0jY29tbWVudC1saXN0IC5jLXJlcGx5OmhvdmVye2NvbG9yOiMzMzN9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxM3B4fQojY29tbWVudC1saXN0IC5jLWF1dGhvci5hZG1pbntiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KI2NvbW1lbnQtbGlzdCAuYy1wLW1ke21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjaywjY29tbWVudC1saXN0IC5jLWRlbHtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhLCNjb21tZW50LWxpc3QgLmMtZGVsIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNoZWNrOmhvdmVyLCNjb21tZW50LWxpc3QgLmMtZGVsOmhvdmVye2NvbG9yOiNhYTM5M2N9CiNjb21tZW50LWZvcm17cGFkZGluZy10b3A6MTJweDtkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6NzJweH0jY29tbWVudC1mb3JtIC5idG57bWFyZ2luLXJpZ2h0OjI0cHh9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6NTAwcHg7aGVpZ2h0OjgwcHg7bWFyZ2luLXJpZ2h0OjI0cHh9CiNmaWxlcy1saXN0IGxpLmZpbGV7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNmaWxlcy1saXN0IGxpLmZpbGU+KnttYXJnaW4tcmlnaHQ6MTZweH0KI2ZpbGVzLWxpc3QgbGkuZmlsZTpob3ZlciAuZGVse29wYWNpdHk6MSAhaW1wb3J0YW50fQojZmlsZXMtbGlzdCAudXBsb2FkLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZmlsZXMtbGlzdCAuZGVse2NvbG9yOiNlNjQzNDZ9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2ZpbGVzLWxpc3QgLmZpbGUtcHJvZ3Jlc3MuZXJye2JhY2tncm91bmQ6cmdiYSgyNTUsNjgsNzEsMC4yKTtjb2xvcjojYWEzOTNjfQojZmlsZXMtbGlzdCAuc2l6ZXt3aWR0aDo0ZW07ZGlzcGxheTppbmxpbmUtYmxvY2t9CiNwbHVnaW4tbGlzdCBsaXttYXJnaW4tYm90dG9tOjE2cHg7cGFkZGluZy1ib3R0b206MTZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jcGx1Z2luLWxpc3QgbGkgLmRlc2N7bWFyZ2luLWJvdHRvbTowO3dpZHRoOjk5JTtjb2xvcjojOTk5fQojcGx1Z2luLWxpc3QgbGkgYS5sYmx7cGFkZGluZzowIDhweDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLnZlcnNpb257Y29sb3I6IzUwNzY1MDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLm5hbWV7Zm9udC1zaXplOjE2cHh9CiNwbHVnaW4tbGlzdCBsaSAuYWN0aXZle3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7bWFyZ2luLXJpZ2h0OjE2cHg7cGFkZGluZzowO21hcmdpbi10b3A6MTBweH0KI3BsdWdpbi1saXN0IGxpIC5zZXR0aW5ne21hcmdpbi1sZWZ0OjE2cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIHAuaXRlbXtjbGVhcjpib3RofQojcGx1Z2luLXNldHRpbmctZm9ybSBsYWJlbHtmbG9hdDpsZWZ0O21pbi13aWR0aDo2ZW07dGV4dC1hbGlnbjpyaWdodDttYXJnaW4tcmlnaHQ6MmVtfQojcGx1Z2luLXNldHRpbmctZm9ybSAudGl0bGV7cGFkZGluZy10b3A6MDttYXJnaW4tYm90dG9tOjE4cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIGlucHV0LmlwdHt3aWR0aDo2MDBweH0KI2Rhc2hib2FyZCAuZ3JpZC0xLTV7bWFyZ2luLXJpZ2h0OjQlfQojZGFzaGJvYXJkIC5xdWljay1saW5rIGxpe2xpc3Qtc3R5bGU6aW5zaWRlIGRpc2M7bWFyZ2luLWJvdHRvbTo2cHg7cGFkZGluZy1ib3R0b206NnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojZGFzaGJvYXJkIC5zdGF0cyAubGJse3BhZGRpbmc6MXB4IDVweDttYXJnaW46MCAzcHh9ClBLBwiIQdYpRy4AAEcuAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcY3NzXGNtZC5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfQpoZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9CmF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja30KdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9CmZpZWxkc2V0LGltZ3tib3JkZXI6MH0KYWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH0Kb2wsdWx7bGlzdC1zdHlsZTpub25lfQpjYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH0KaDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfQpxOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9CmFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfQpzdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9CnN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH0KbGVnZW5ke2NvbG9yOiMwMDB9Cmh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifQphe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifQpwe21hcmdpbi1ib3R0b206MThweH0KaDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9Cmgxe2ZvbnQtc2l6ZToyOHB4fQpoMntmb250LXNpemU6MjRweH0KaDN7Zm9udC1zaXplOjIxcHh9Cmg0e2ZvbnQtc2l6ZToxOXB4fQpoNXtmb250LXNpemU6MTZweH0KaDZ7Zm9udC1zaXplOjE0cHh9Ci50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fQoudGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fQoudGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9Ci5sZWZ0e2Zsb2F0OmxlZnR9Ci5yaWdodHtmbG9hdDpyaWdodH0KLmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfQoucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9Ci5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9Ci52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfQouaW5saW5le2Rpc3BsYXk6aW5saW5lfQouaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfQouYmxvY2t7ZGlzcGxheTpibG9ja30KLmZhZGUtb3V0e29wYWNpdHk6MH0KLmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9Ci5jb250YWluZXJ7bWF4LXdpZHRoOjEyMDBweDttYXJnaW46YXV0b30KLmNvbnRhaW5lcjk2MHttYXgtd2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99Ci5ncmlkLTEtMnt3aWR0aDo1MCV9Ci5ncmlkLTEtM3t3aWR0aDozMy4zMzMzJX0KLmdyaWQtMS00e3dpZHRoOjI1JX0KLmdyaWQtMS01e3dpZHRoOjIwJX0KLmdyaWQtMS02e3dpZHRoOjE2LjY2NjYlfQouZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9Ci5ncmlkLTMtNHt3aWR0aDo3NSV9Ci5ncmlkLTMtNXt3aWR0aDo2MCV9Ci5ncmlkLTQtNXt3aWR0aDo4MCV9Ci5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0LGJ1dHRvbntmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZn0KLmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0KLmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC5pcHR7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTttaW4td2lkdGg6MTgwcHh9LmZvcm0gLmlwdDpmb2N1c3tib3JkZXItY29sb3I6IzAwNzliY30KLmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfQouZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fQouZm9ybSAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9Ci5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9Ci5mb3JtLXZlcnRpY2FsIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3h9Ci5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fQouZm9ybS1hbGlnbiAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn0KYS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfQouYnRuLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0uYnRuLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2F9Ci5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifQouYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfQoubGJse3BhZGRpbmc6NHB4IDEycHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fQoubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KYS5sYmx7bGluZS1oZWlnaHQ6MjZweH0KYS5sYmwtcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYTtjb2xvcjojZmJmYmZifQoubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CmEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9CmEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifQoucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30KLnBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5pdGVtOmhvdmVyIGF7Y29sb3I6I2ZmZn0KLnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifQoucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgyLC5tYXJrZG93biBoMywubWFya2Rvd24gaDQsLm1hcmtkb3duIGg1LC5tYXJrZG93biBoNntwYWRkaW5nOjE4cHggMCA5cHggMDtmb250LXdlaWdodDpib2xkfQoubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHh9Ci5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMnttYXJnaW4tYm90dG9tOjEwcHg7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KLm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fQoubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Ci5tYXJrZG93biBoNXtmb250LXNpemU6MTZweH0KLm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fQoubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Ci5tYXJrZG93biB1bHtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlfQoubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0KLm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0KLm1hcmtkb3duIHAgY29kZXtjb2xvcjojYzczODNhfQoubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0KLm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Ci5tYXJrZG93biBvbCwubWFya2Rvd24gdWx7bWFyZ2luOjEycHggMjRweH0KLm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfQoubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0KLm1hcmtkb3duIHRhYmxlIHRoZWFke2JhY2tncm91bmQ6I2Y2ZjZmNn0KLmNtZHttYXJnaW46MjRweCA0OHB4fQouY21kLWhlYWRlcnttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1idG57bWFyZ2luOjEwcHggMCAwIDMwcHh9Ci5jbWQtbGlzdCBsaXttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1saXN0IGxpe2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGU7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jYmFja3VwLWxpc3QgbGk+c3BhbiwjYmFja3VwLWxpc3QgbGk+YXttYXJnaW4tcmlnaHQ6MTZweH0KI2JhY2t1cC1saXN0IGxpIC5kZWx7Y29sb3I6I2U2NDM0NjtvcGFjaXR5OjB9CiNiYWNrdXAtbGlzdCBsaSAubGlua3ttYXJnaW4tbGVmdDoxMnB4fQojYmFja3VwLWxpc3QgbGk6aG92ZXIgLmRlbHtvcGFjaXR5OjF9ClBLBwhaVpyB1hYAANYWAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAABzdGF0aWNcY3NzXGNvZGVtaXJyb3IuY3NzLyogQkFTSUNTICovCgouQ29kZU1pcnJvciB7CiAgICAvKiBTZXQgaGVpZ2h0LCB3aWR0aCwgYm9yZGVycywgYW5kIGdsb2JhbCBmb250IHByb3BlcnRpZXMgaGVyZSAqLwogICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiTWljcm9zb2Z0IFlhSGVpIiwgIkNvdXJpZXIgTmV3IiwgQXJpYWw7CiAgICBoZWlnaHQ6IDY2MHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgYm9yZGVyOjFweCBzb2xpZCAjOTk5Owp9CgouQ29kZU1pcnJvci1zY3JvbGwgewogICAgLyogU2V0IHNjcm9sbGluZyBiZWhhdmlvdXIgaGVyZSAqLwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi8qIFBBRERJTkcgKi8KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIHBhZGRpbmc6IDRweCAwOyAvKiBWZXJ0aWNhbCBwYWRkaW5nIGFyb3VuZCBjb250ZW50ICovCn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICBwYWRkaW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KfQoKLyogR1VUVEVSICovCgouQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLkNvZGVNaXJyb3ItbGluZW51bWJlcnMgewp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIHBhZGRpbmc6IDAgM3B4IDAgNXB4OwogICAgbWluLXdpZHRoOiAyMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBjb2xvcjogIzU1NTsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4Owp9CgovKiBDVVJTT1IgKi8KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogICAgei1pbmRleDogMzsKfQoKLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7Cn0KCi5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB3aWR0aDogYXV0bzsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6ICM3ZTc7CiAgICB6LWluZGV4OiAxOwp9CgovKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHsKfQoKLmNtLXRhYiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi8qIERFRkFVTFQgVEhFTUUgKi8KCi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQgewogICAgY29sb3I6ICM3MDg7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWF0b20gewogICAgY29sb3I6ICMyMTk7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7CiAgICBjb2xvcjogIzE2NDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tZGVmIHsKICAgIGNvbG9yOiAjMDBmOwp9CgouY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZSB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICMwNWE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTMgewogICAgY29sb3I6ICMwODU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5IHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3IgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHsKICAgIGNvbG9yOiAjYTUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1zdHJpbmcgewogICAgY29sb3I6ICNhMTE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0yIHsKICAgIGNvbG9yOiAjZjUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1tZXRhIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW4gewogICAgY29sb3I6ICMzMGE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICM5OTc7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7CiAgICBjb2xvcjogIzE3MDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIgewogICAgY29sb3I6IGJsdWU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1b3RlIHsKICAgIGNvbG9yOiAjMDkwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1ociB7CiAgICBjb2xvcjogIzk5OTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbGluayB7CiAgICBjb2xvcjogIzAwYzsKfQoKLmNtLW5lZ2F0aXZlIHsKICAgIGNvbG9yOiAjZDQ0Owp9CgouY20tcG9zaXRpdmUgewogICAgY29sb3I6ICMyOTI7Cn0KCi5jbS1oZWFkZXIsIC5jbS1zdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5jbS1lbSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5jbS1saW5rIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7CiAgICBjb2xvcjogI2YwMDsKfQoKLmNtLWludmFsaWRjaGFyIHsKICAgIGNvbG9yOiAjZjAwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjMGYwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjZjIyOwp9CgouQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogI2U4ZjJmZjsKfQoKLyogU1RPUCAqLwoKLyogVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGNvbnRhaW5zIHN0eWxlcyByZWxhdGVkIHRvIHRoZSBtZWNoYW5pY3Mgb2YKICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwoKLkNvZGVNaXJyb3IgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciAqLwogICAgbWFyZ2luLWJvdHRvbTogLTMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IC0zMHB4OwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CgouQ29kZU1pcnJvci1zaXplciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcKICAgYmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZAogICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA2OwogICAgZGlzcGxheTogbm9uZTsKfQoKLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7CiAgICByaWdodDogMDsKICAgIHRvcDogMDsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKfQoKLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgb3ZlcmZsb3cteDogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGxlZnQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHRvcDogMDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgei1pbmRleDogMzsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIG1hcmdpbi1ib3R0b206IC0zMnB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgLyogSGFjayB0byBtYWtlIElFNyBiZWhhdmUgKi8KICAgICp6b29tOiAxOwogICAgKmRpc3BsYXk6IGlubGluZTsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB6LWluZGV4OiA0Owp9CgouQ29kZU1pcnJvci1saW5lcyB7CiAgICBjdXJzb3I6IHRleHQ7Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovCiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLXdpZHRoOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgIG1hcmdpbjogMDsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICB6LWluZGV4OiAyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7Cn0KCi5Db2RlTWlycm9yLXdyYXAgcHJlIHsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKfQoKLkNvZGVNaXJyb3ItY29kZSBwcmUgewogICAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7CiAgICB3aWR0aDogLW1vei1maXQtY29udGVudDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogYXV0bzsKfQoKLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgei1pbmRleDogMDsKfQoKLkNvZGVNaXJyb3ItbGluZXdpZGdldCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi5Db2RlTWlycm9yLXdpZGdldCB7Cn0KCi5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7Cn0KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogMDsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogI2Q5ZDlkOTsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDdkNGYwOwp9CgouY20tc2VhcmNoaW5nIHsKICAgIGJhY2tncm91bmQ6ICNmZmE7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAuNCk7Cn0KCi8qIElFNyBoYWNrIHRvIHByZXZlbnQgaXQgZnJvbSByZXR1cm5pbmcgZnVubnkgb2Zmc2V0VG9wcyBvbiB0aGUgc3BhbnMgKi8KLkNvZGVNaXJyb3Igc3BhbiB7CiAgICAqdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwp9CgpAbWVkaWEgcHJpbnQgewogICAgLyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KICAgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQp9CgouY20tcy1iYXNlMTYtZGFyay5Db2RlTWlycm9yIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogIzIwMjAyMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBib3JkZXItcmlnaHQ6IDBweDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItbGluZW51bWJlciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2IwYjBiMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICM4ZjU1MzY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXRvbSB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1udW1iZXIgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWtleXdvcmQgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tc3RyaW5nIHsKICAgIGNvbG9yOiAjZjRiZjc1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICM2YTlmYjU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZGVmIHsKICAgIGNvbG9yOiAjZDI4NDQ1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICNlMGUwZTA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdGFnIHsKICAgIGNvbG9yOiAjYWM0MTQyOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWxpbmsgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZXJyb3IgewogICAgYmFja2dyb3VuZDogI2FjNDE0MjsKICAgIGNvbG9yOiAjYjBiMGIwOwp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogIzJGMkYyRiAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQpQSwcIIwM1gk4gAABOIAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAc3RhdGljXGNzc1xjb21tb24uY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH1oZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfWZpZWxkc2V0LGltZ3tib3JkZXI6MH1hZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfW9sLHVse2xpc3Qtc3R5bGU6bm9uZX1jYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9cTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfWFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfXN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH1zdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1sZWdlbmR7Y29sb3I6IzAwMH1odG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn1he3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifXB7bWFyZ2luLWJvdHRvbToxOHB4fWgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfWgxe2ZvbnQtc2l6ZToyOHB4fWgye2ZvbnQtc2l6ZToyNHB4fWgze2ZvbnQtc2l6ZToyMXB4fWg0e2ZvbnQtc2l6ZToxOXB4fWg1e2ZvbnQtc2l6ZToxNnB4fWg2e2ZvbnQtc2l6ZToxNHB4fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5sZWZ0e2Zsb2F0OmxlZnR9LnJpZ2h0e2Zsb2F0OnJpZ2h0fS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0udmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmZhZGUtb3V0e29wYWNpdHk6MH0uaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uY29udGFpbmVye3dpZHRoOjEyMDBweDttYXJnaW46YXV0b30uY29udGFpbmVyOTYwe3dpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmctYm90dG9tOjEycHh9Lm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fVBLBwh7vP2MJhQAACYUAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAABzdGF0aWNcY3NzXGhpZ2hsaWdodC5jc3MvKg0KDQpTdW5idXJzdC1saWtlIHN0eWxlIChjKSBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+DQoNCiovDQoNCnByZSBjb2RlIHsNCiAgICBkaXNwbGF5OiBibG9jazsgcGFkZGluZzogMC41ZW07DQogICAgYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmOGY4Zjg7DQp9DQoNCnByZSAuY29tbWVudCwNCnByZSAudGVtcGxhdGVfY29tbWVudCwNCnByZSAuamF2YWRvYyB7DQogICAgY29sb3I6ICNhZWFlYWU7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmtleXdvcmQsDQpwcmUgLnJ1YnkgLmZ1bmN0aW9uIC5rZXl3b3JkLA0KcHJlIC5yZXF1ZXN0LA0KcHJlIC5zdGF0dXMsDQpwcmUgLm5naW54IC50aXRsZSB7DQogICAgY29sb3I6ICNFMjg5NjQ7DQp9DQoNCnByZSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnN1YiAua2V5d29yZCwNCnByZSAubWV0aG9kLA0KcHJlIC5saXN0IC50aXRsZSB7DQogICAgY29sb3I6ICM5OUNGNTA7DQp9DQoNCnByZSAuc3RyaW5nLA0KcHJlIC50YWcgLnZhbHVlLA0KcHJlIC5jZGF0YSwNCnByZSAuZmlsdGVyIC5hcmd1bWVudCwNCnByZSAuYXR0cl9zZWxlY3RvciwNCnByZSAuYXBhY2hlIC5jYnJhY2tldCwNCnByZSAuZGF0ZSwNCnByZSAudGV4IC5jb21tYW5kLA0KcHJlIC5jb2ZmZWVzY3JpcHQgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICM2NUIwNDI7DQp9DQoNCnByZSAuc3Vic3Qgew0KICAgIGNvbG9yOiAjREFFRkEzOw0KfQ0KDQpwcmUgLnJlZ2V4cCB7DQogICAgY29sb3I6ICNFOUMwNjI7DQp9DQoNCnByZSAudGl0bGUsDQpwcmUgLnN1YiAuaWRlbnRpZmllciwNCnByZSAucGksDQpwcmUgLnRhZywNCnByZSAudGFnIC5rZXl3b3JkLA0KcHJlIC5kZWNvcmF0b3IsDQpwcmUgLnNoZWJhbmcsDQpwcmUgLnByb21wdCB7DQogICAgY29sb3I6ICM4OUJERkY7DQp9DQoNCnByZSAuY2xhc3MgLnRpdGxlLA0KcHJlIC5oYXNrZWxsIC50eXBlLA0KcHJlIC5zbWFsbHRhbGsgLmNsYXNzLA0KcHJlIC5qYXZhZG9jdGFnLA0KcHJlIC55YXJkb2N0YWcsDQpwcmUgLnBocGRvYyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCnByZSAuc3ltYm9sLA0KcHJlIC5ydWJ5IC5zeW1ib2wgLnN0cmluZywNCnByZSAubnVtYmVyIHsNCiAgICBjb2xvcjogIzMzODdDQzsNCn0NCg0KcHJlIC5wYXJhbXMsDQpwcmUgLnZhcmlhYmxlLA0KcHJlIC5jbG9qdXJlIC5hdHRyaWJ1dGUgew0KICAgIGNvbG9yOiAjM0U4N0UzOw0KfQ0KDQpwcmUgLmNzcyAudGFnLA0KcHJlIC5ydWxlcyAucHJvcGVydHksDQpwcmUgLnBzZXVkbywNCnByZSAudGV4IC5zcGVjaWFsIHsNCiAgICBjb2xvcjogI0NEQTg2OTsNCn0NCg0KcHJlIC5jc3MgLmNsYXNzIHsNCiAgICBjb2xvcjogIzlCNzAzRjsNCn0NCg0KcHJlIC5ydWxlcyAua2V5d29yZCB7DQogICAgY29sb3I6ICNDNUFGNzU7DQp9DQoNCnByZSAucnVsZXMgLnZhbHVlIHsNCiAgICBjb2xvcjogI0NGNkE0QzsNCn0NCg0KcHJlIC5jc3MgLmlkIHsNCiAgICBjb2xvcjogIzhCOThBQjsNCn0NCg0KcHJlIC5hbm5vdGF0aW9uLA0KcHJlIC5hcGFjaGUgLnNxYnJhY2tldCwNCnByZSAubmdpbnggLmJ1aWx0X2luIHsNCiAgICBjb2xvcjogIzlCODU5RDsNCn0NCg0KcHJlIC5wcmVwcm9jZXNzb3IsDQpwcmUgLnByYWdtYSB7DQogICAgY29sb3I6ICM4OTk2QTg7DQp9DQoNCnByZSAuaGV4Y29sb3IsDQpwcmUgLmNzcyAudmFsdWUgLm51bWJlciB7DQogICAgY29sb3I6ICNERDdCM0I7DQp9DQoNCnByZSAuY3NzIC5mdW5jdGlvbiB7DQogICAgY29sb3I6ICNEQUQwODU7DQp9DQoNCnByZSAuZGlmZiAuaGVhZGVyLA0KcHJlIC5jaHVuaywNCnByZSAudGV4IC5mb3JtdWxhIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEUyMjMxOw0KICAgIGNvbG9yOiAjRjhGOEY4Ow0KICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCn0NCg0KcHJlIC5kaWZmIC5jaGFuZ2Ugew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0QTQxMEQ7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuYWRkaXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTNCMjI7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuZGVsZXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0MjBFMDk7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuY29mZmVlc2NyaXB0IC5qYXZhc2NyaXB0LA0KcHJlIC5qYXZhc2NyaXB0IC54bWwsDQpwcmUgLnRleCAuZm9ybXVsYSwNCnByZSAueG1sIC5qYXZhc2NyaXB0LA0KcHJlIC54bWwgLnZic2NyaXB0LA0KcHJlIC54bWwgLmNzcywNCnByZSAueG1sIC5jZGF0YSB7DQogICAgb3BhY2l0eTogMC41Ow0KfQ0KDQpwcmUgLmdvIC50eXBlbmFtZXsNCiAgICBjb2xvcjogI2ZmYmM1NDsNCn1QSwcIw2jj3l0JAABdCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAc3RhdGljXGNzc1xsaW5nLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDojZjNmM2YzfQojaGVhZGVye2JhY2tncm91bmQ6IzAwOTNjNDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzo0MHB4IDAgNDhweCAwO2NvbG9yOiNmYmZiZmJ9I2hlYWRlciBhOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy1tb3otdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy13ZWJraXQtdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzfQojaGVhZGVyLWltZ3t3aWR0aDo5NnB4O2hlaWdodDo5NnB4O2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe2xpbmUtaGVpZ2h0Ojk0cHg7Y29sb3I6I2ZiZmJmYjtwYWRkaW5nOjA7bWFyZ2luLWxlZnQ6MjRweH0jaGVhZGVyLWggYXtjb2xvcjojZmJmYmZifQojaGVhZGVyLXN1Yntjb2xvcjojZjNmM2YzO21hcmdpbi1sZWZ0OjEuMmVtO2ZvbnQtc2l6ZToxNnB4fQojbmF2e2xpbmUtaGVpZ2h0OjkwcHh9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O21hcmdpbi1sZWZ0OjQ0cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiNmM2YzZjM7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNmb290ZXJ7cGFkZGluZzozMHB4IDQwcHg7Y29sb3I6Izk5OX0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2dvLXRvcHtib3R0b206NTBweDtyaWdodDo0MHB4O3Bvc2l0aW9uOmZpeGVkO2NvbG9yOiNmZmY7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjhweDtvcGFjaXR5Oi40fQojYXJ0aWNsZS1jb250YWluZXJ7aGVpZ2h0OjEwMCV9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHN7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjM2cHg7LW1vei1ib3JkZXItcmFkaXVzOjM2cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjM2cHg7bGluZS1oZWlnaHQ6NTZweDtmb250LXNpemU6MjRweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDo0MHB4O21hcmdpbi1sZWZ0OjhweDtib3JkZXI6NnB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHMgYXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzOmhvdmVye2JveC1zaGFkb3c6MCAwIDRweCAjNjY2Oy1tb3otYm94LXNoYWRvdzowIDAgNHB4ICM2NjY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA0cHggIzY2Nn0KI2FydGljbGUtY29udGFpbmVyIC52aWV3c3t0b3A6MTRweDtsZWZ0OjA7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6MzBweDstbW96LWJvcmRlci1yYWRpdXM6MzBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzBweDtwYWRkaW5nOjA7Ym9yZGVyOjRweCBzb2xpZCAjZmZmO2JveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy1tb3otYm94LXNoYWRvdzowIDAgMnB4ICM5OTk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggIzk5OX0KI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjExNnB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxMXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjojZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2M3B4O2xlZnQ6LTIycHh9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbiAudGl0bGV7Zm9udC1zaXplOjI4cHg7cGFkZGluZy1ib3R0b206MjRweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aW1lLWluZm97Y29sb3I6Izk5OTttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZy1ib3R0b206MjBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZDt0ZXh0LWluZGVudDoxZW07Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIGFydGljbGV7bWFyZ2luLWJvdHRvbTo1MHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWlue21hcmdpbi1sZWZ0OjB9I2FydGljbGUtY29udGFpbmVyIC5hcnRpY2xlLXNpbmdsZSAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tZXRhe3JpZ2h0OjQ0cHg7dG9wOi0zNnB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC52aWV3c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDtib3JkZXI6NnB4IHNvbGlkICNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAudGFne2NvbG9yOiM5OTl9CiNhcnRpY2xlLXBhZ2Vye21hcmdpbi1sZWZ0OjExNnB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVte21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojOTk5O3BhZGRpbmc6MTJweCAxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweH0jYXJ0aWNsZS1wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kOiMwMDc5YmN9CiNjb21tZW50e2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNjb21tZW50IC5tZXRhe3JpZ2h0Oi0yNHB4O3RvcDotMzBweH0jY29tbWVudCAubWV0YSAuY29tbWVudHN7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjB9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbTozMnB4fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnttYXJnaW4tcmlnaHQ6MThweDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHh9CiNjb21tZW50LWxpc3QgLmMtbWV0YSBwe21hcmdpbi1ib3R0b206MH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTpibG9ja30jY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9yOmhvdmVye2NvbG9yOiMwMDViOWJ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseXtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2RkZDtwYWRkaW5nOjNweCAxMHB4fSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9CiNjb21tZW50LWxpc3QgLmMtY29udGVudHtwYWRkaW5nLXRvcDo0cHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2t7Zm9udC1zaXplOjEzcHg7Y29sb3I6I2U2NDM0NjttYXJnaW4tbGVmdDoxMnB4fQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtc2hvd3ttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LXRpdGxle21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0bzttYXJnaW4tYm90dG9tOjMwcHh9I2NvbW1lbnQtZm9ybSAuYy1pbmZve3dpZHRoOjI2JX0jY29tbWVudC1mb3JtIC5jLWluZm8gLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MH0KI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjcwJX0KI2NvbW1lbnQtZm9ybSAuYy1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O21hcmdpbi10b3A6NnB4O3dpZHRoOjUwcHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b319QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDowfSAjYXJ0aWNsZS1jb250YWluZXIgLm1ldGF7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW46YmVmb3Jle2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9ICNuYXYsI2hlYWRlci1oe2xpbmUtaGVpZ2h0OjUwcHh9ICNmb290ZXIgc3BhbntmbG9hdDpub25lO3RleHQtYWxpZ246Y2VudGVyfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaHttYXJnaW4tbGVmdDowfSAjaGVhZGVyLWltZ3tkaXNwbGF5Om5vbmV9ICNjb21tZW50LWZvcm17d2lkdGg6MTAwJX0gI25hdntmbG9hdDpsZWZ0fSNuYXYgbGl7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NDRweH19ClBLBwjPw+rWnCoAAJwqAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXHN0eWxlLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9iZy5wbmciKSByZXBlYXR9CiNoZWFkZXJ7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9oZWFkZXIuZ2lmIikgcmVwZWF0ICM0YzcyOTg7bWluLXdpZHRoOjEyMHB4O3BhZGRpbmc6MzBweCAwO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjUwcHg7LW1vei1ib3JkZXItcmFkaXVzOjUwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwcHh9CiNoZWFkZXItaHtwYWRkaW5nLXRvcDoyNHB4O2ZvbnQtc2l6ZTozMnB4fSNoZWFkZXItaCBhe2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0KI25hdntoZWlnaHQ6NTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym94LXNoYWRvdzowIDAgMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O3BhZGRpbmc6MCAxOHB4fSNuYXYgbGkgYXtmb250LXNpemU6MTZweDtjb2xvcjojMzMzO3BhZGRpbmc6MCAzMnB4O2Rpc3BsYXk6YmxvY2t9I25hdiBsaSBhOmhvdmVye2JvcmRlci1ib3R0b206NHB4IHNvbGlkICMwMDc5YmN9CiNuYXYuZml4ZWR7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTt0b3A6MH0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2Zvb3Rlcntjb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6IzFjMjQyOTtwYWRkaW5nOjI0cHggMH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsZXR0ZXItc3BhY2luZzoxcHh9I2Zvb3RlciBwIGF7Y29sb3I6I2NjYzttYXJnaW46MCAxNnB4fSNmb290ZXIgcCBhOmhvdmVye2NvbG9yOiNmYmZiZmJ9CiNmb290ZXIgcCBhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXt3aWR0aDoxMDhweDtsaW5lLWhlaWdodDoyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnZpZXdzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnRpbWV7Y29sb3I6I2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIGF7Y29sb3I6I2ZmZn0jYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTQwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZXtwYWRkaW5nOjhweCAxNnB4O2JhY2tncm91bmQtY29sb3I6IzRjNzI5ODtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjJweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoycHh9I2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxlIGF7Y29sb3I6I2VlZX0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxOHB4IDI0cHggMjRweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZve21hcmdpbi1ib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoycHg7Y29sb3I6Izk5OX0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLmZhe21hcmdpbi1yaWdodDo4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuc2hhcmUgLmZhe21hcmdpbi1yaWdodDowfQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+KntwYWRkaW5nOjZweCAxOHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+c3Bhbntib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmlnaHR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJpZ2h0Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZHtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC50aW1lLCNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAudmlld3Mgc3Bhbntmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjQ4cHh9CiNjb21tZW50e21hcmdpbi10b3A6LTI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjI0cHg7YmFja2dyb3VuZDojZmZmfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0b30jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxOHB4O3BhZGRpbmctYm90dG9tOjE4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1yZXBseXtjb2xvcjojOTk5fSNjb21tZW50LWxpc3QgLmMtcmVwbHk6aG92ZXJ7Y29sb3I6IzMzM30KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3J7Zm9udC1zaXplOjEzcHh9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhe21hcmdpbi1yaWdodDo2cHh9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YS5sZWZ0e2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI25hdiBsaXtwYWRkaW5nOjAgMTBweH0gI2hlYWRlci1pbWd7ZmxvYXQ6bGVmdDt3aWR0aDo2NHB4O2hlaWdodDo2NHB4fSAjaGVhZGVyLWh7cGFkZGluZzoxN3B4IDA7Zm9udC1zaXplOjI0cHh9ICNoZWFkZXItc3Vie2Rpc3BsYXk6bm9uZX0gI2FydGljbGUtY29udGFpbmVyIC50YWcsI2FydGljbGUtY29udGFpbmVyIC50aW1le2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjY29tbWVudC1saXN0IC5jLWF2YXRhcntkaXNwbGF5Om5vbmV9fQpQSwcIqnrsLo0oAACNKAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGZhdmljb24uaWNvAAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAAAACzfgfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N+B9uzfgfbs34H27N+B9uzfgfbs34H27N9B9uzfgfbs34H27N9B9uzfgfbs34H27N+B9uzfgfbsnwH1q96B8etfhittZNKkLqCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qDDf+6hhf/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+6gQj/uYEI/7mCCP+6gQj/uoII/7qCCP+5gQj/uYEI/7mCCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qCCP+5gQj/uYEI/7qBCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6ggj/uoEI/7qCCP+6ggj/uoEI/7qCCP+6gQj/uoEI/7mBCP+5gQj/uYIH/7mCB/+5ggf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/vIQF/7yEBf+7gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8gwX/vIQF/7yEBf+8gwX/vIQG/7yEBv/AhwP/wIYD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIcE/8CHBP/AhgP/wIYC/8WJAv/FiQH/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WKAv/FiQH/xYoD/8ePDv/Mmif/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yZMX/9avU//hwHX/6dKf//Pnzf/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uNAP/LoD3/8uvd/v79+v7//////////sqOAP7KjQD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44B/8uOAP/LjgD/y40A/8qOAP/LjgD/y44A/8uOAf/LjgH/y44A/8uOAP/LjgD/y44A/8uOAf/KjQD/y48G/9i5c//6+fX+/v///v7+/v/+/v7+yo4A/sqNAP/LjgD/y44A/8qOAP/KjgD/yo4A/8qOAP/LjgD/y44A/8qOAP/LjgD/y44A/8qNAP/LjQD/y44B/8mNAf/HjQj/yo4D/8qNAP/LjQD/yo0A/8qNAP/KjQD/y48C/9CaG//fvnH/9e/g//7+/v7////+/v7+//7+/v7LjgH6y44A/8qNAP/LjgD/y44B/8qOAP/KjgD/yo4A/8uOAP/KjgD/yo4A/8uOAP/LjgH/yo4A/8qNAP/JjAD/x5o0/8Gref+oi0j/zaZO/8WYMP/PnzH/1qY5/9qwT//iwnf/8N+5//v48v/+/v///v7+/////////////v7+/7ySMr67ihn/zJIM/8qOAP/KjQD/yo0A/8qNAP/KjgD/yo4A/8qOAP/KjQD/yo0A/8qNAP/LjgH/0JkY/8mjTf/Qxq3/5eXm/6alo//p5t//xL6x/+Hayf758+P++/bs//38+f/////+/////v7+/v/+/v7////////////+/v7/lZONlJmPef/mzpn/4L1q/9mtSP/UozL/0Zsf/8+WE//PlRH/z5UR/8+XF//Tnyj/2atD/+G/cf/t27P/0MzE/8PDw/7q6ur+tra2/ujo6P60tLX+2tvb/v39/f7+///+/v7+//////7////+/v7+//7+/v/////+/////v////6XlpaVkpKT//b29f/9+/f/+fTn//bt1//y5MX/8N+4/+7csv/v3LP/8eG7//Xpzv/58+T/9/Xy/8nJyv+vr6//paSk/729vf+UlJT/ubm5/6enp/+xsbH/0dHR//z8/P///////v7+//7+/v/+/v7//v7+/////////////v7+/6mpqZiRkZH/8vLy/////v/+/v7//////////////////v7+//7+/v/+/v///v/////////h4eD/urm5/+/v7//s7Oz/19fX/8bGxv/e3t7/9fX1/+rq6/+4uLj/8fHx///////+/v7+//////7+/v/+/v7////////////+/v7/m5ubZ4ODg/Dt7e3///////////7///7+/v7+//7+/v7//v7+/v7+/vn5+f729vb++vr6/ufn6P+3t7f/7e3t//j4+P7d3d3+2NjY/vLy8v7+/v7+2NjY/r6+vv74+Pj+//////////7////+/v7+//7+/v/////+/////v////41NTUjcXFx2Obm5v/////+/////v/////+/v7//////+/v7/7Q0ND/vr6+/rq6uv6+vr7/0dHR/s/Pz/6srKz/Z2dn/isrK/8jIyP/W1tb/6urq/+9vb3+5OTk/uXl5f/a2tr/39/f/vDw8P79/f3//////v7+/v7//////////o2NjSd1dXXa29vb//////7////+//////7+/v/h4eH/tbW1/srKyv/j4+P+5+fn/uPj4//Jycn+vr6+/re3t/8sLCz+AAAA/wAAAP8GBgb/hoaG/9fX1/6+vr7+vLy8/8HBwf++vr7+ubm5/sfHx//x8fH+/////v/////////+4ODgJISEhNnFxcX///////////7/////5+fn/7W1tf/k5OT///////////7//////////v7+/v7g4OD/tra2/66urv9ubm7/WVlZ/4ODg/+7u7v/vr6+/+Tk5P76+vr//f39//z8/P7w8PD/ysrK/7e3t//w8PD///////////+Hh4eAXV1d8aOjo////////////vv7+//BwcH/wcHB/62trf/Gxsb/+vr6///////+/v7//v7+/v/////W1tb/xMTE//b29v/29vb/3d3d/76+vv/k5OT/8fHx//7+/v/+/v7//v7+/v/////9/f3/zc3N/8PDw//7+/v//////4aGhviWlpb/i4uL//f39///////7u7u/6urq/9SUlL/ExMT/2dnZ//R0dH//f39//7+/v////////////Ly8v+4uLj/7+/v//r6+v/AwMD/nJyc/1RUVP9ubm7/3Nzc//7+/v/////+/v7+///////09PT/t7e3/+vr6///////7+/v/+zs7P98fHz/2NjY/v////7n5+f/k5OT/xYWFv8FBQX/Nzc3/5mZmf/7+/v//v7+//////7/////+vr6/8PDw//n5+f/8/Pz/6ysrP85OTn/AAAA/0VFRf6YmJj/9fX1//////7+/v7///////39/f/ExMT/3t7e////////////0dHR/zMzM/+Xl5f//////+fn5/+zs7P/aGho/xcXF/86Ojr/yMjI//7+/v/+/v7////////////4+Pj/vb29/+vr6//w8PD/s7Oz/0xMTP8AAAD/Dg4O/oKCgv/6+vr//////v7+/v///////v7+/8fHx//c3Nz///////////+4uLj/GRkZ/z8/P/7f39/+9vb2/r29vf/b29v+xMTE/tvb2//9/f3+/v7+/v////7////+/////uXl5f65ubn+9vb2//Pz8/++vr7/wcHB/nJycv5+fn7+4ODg///////+/v7+/v7+/v/////4+Pj+vLy8/ubm5v/////+/////vHx8f+ysrL/hYWF/ouLi/709PT/1NTU/729vf/5+fn+//////7+/v7////+//////////729vb+vb29/9bW1v///////f39/8fHx//Ozs7/+fn5/vz8/P7///////////////7////+/////9/f3/65ubn++Pj4/+7u7v7Jycn/+Pj4/v/////y8vL+iIiI/pubm//09PT/yMjI/729vf7n5+f/+vr6/vz8/P76+vr/5+fn/r29vf7Jycn/+vr6////////////8PDw/7e3t//Y2Nj+/f39/v///////////////v////7p6en/t7e3/uLi4v/x8fH/jo6O/nNzc+WQkJD+o6Oj/6CgoP5+fn76Tk5O4ZycnPvh4eH/1tbW/r29vf/AwMD/wcHB/76+vv+5ubn+1tbW/vr6+v//////////////////////6enp/7m5uf7Dw8P+39/f/+jo6P/k5OT+zMzM/7a2tv/d3d3+6urq/4ODg/9wcHD/q6urP3BwcGZFRUVpSkpKZ4WFhV+MjIw4bW1tm3d3d+utra3/2NjY/+Tk5P7l5eX/6enp//b29v7////////////////+/v7/////////////////9fX1/9bW1v/CwsL/vb29/8HBwf/R0dH/5OTk/8bGxv99fX3zY2Njzmtra9IREREA////AP///wC8vLwAAAAAAAAAAADOzs4LdnZ2RW1tbaN7e3vrmZmZ/7e3t//X19f/6Ojo//Dw8P/29vb/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KwAA8ysAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHN0YXRpY1xpbWdcaGVhZGVyLmdpZkdJRjg5YWQAZACzAABNdJpJbZJOdZxIbJBJbpJMc5lKb5RMcphKcJVLcZYAAAAAAAAAAAAAAAAAAAAAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjAxNUFBQzE1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjAxNUFBQzI1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFCRjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCMDE1QUFDMDUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFj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DQogICAgdmFyICRuYXYgPSAkKCcjbmF2Jyk7DQogICAgdmFyIHRvcCA9ICRuYXYub2Zmc2V0KCkudG9wOw0KICAgIGNvbnNvbGUubG9nKHRvcCk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkbmF2LmFkZENsYXNzKCJmaXhlZCIpLnJlbW92ZUNsYXNzKCJ0ZXh0LWNlbnRlciIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG5hdi5yZW1vdmVDbGFzcygiZml4ZWQiKS5hZGRDbGFzcygidGV4dC1jZW50ZXIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiB0b3BCdXR0b24oKSB7DQogICAgdmFyIHRvcCA9ICQoJyNuYXYnKS5vZmZzZXQoKS50b3A7DQogICAgdmFyICR0b3AgPSAkKCcjZ28tdG9wJyk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkdG9wLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdG9wLmFkZENsYXNzKCdoaWRlJyk7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkdG9wLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiAwfSwgNTAwKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pDQp9DQoNCmZ1bmN0aW9uIHJlbmRlck1hcmtkb3duKCkgew0KICAgIHZhciAkbWQgPSAkKCcubWFya2Rvd24nKTsNCiAgICAkbWQuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAkKGl0ZW0pLmh0bWwobWFya2VkKCQoaXRlbSkuaHRtbCgpLnJlcGxhY2UoLyZndDsvZywgJz4nKSkpOw0KICAgIH0pOw0KICAgIHZhciBjb2RlID0gJG1kLmZpbmQoJ3ByZSBjb2RlJyk7DQogICAgaWYgKGNvZGUubGVuZ3RoKSB7DQogICAgICAgICQoIjxsaW5rPiIpLmF0dHIoeyByZWw6ICJzdHlsZXNoZWV0IiwgdHlwZTogInRleHQvY3NzIiwgaHJlZjogIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MifSkuYXBwZW5kVG8oImhlYWQiKTsNCiAgICAgICAgJC5nZXRTY3JpcHQoIi9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBjb2RlLmVhY2goZnVuY3Rpb24gKGksIGl0ZW0pIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGl0ZW0pDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBpbml0Q29tbWVudCgpIHsNCiAgICB2YXIgJGxpc3QgPSAkKCcjY29tbWVudC1saXN0Jyk7DQogICAgaWYgKCEkbGlzdC5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpIHsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXV0aG9yJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF1dGhvciIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtZW1haWwiKSk7DQogICAgICAgICQoJyNjb21tZW50LXVybCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC11cmwiKSk7DQogICAgICAgICQoJyNjb21tZW50LWF2YXRhcicpLmF0dHIoInNyYyIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF2YXRhciIpKTsNCiAgICAgICAgJCgnLmMtYXZhdGFyJykucmVtb3ZlQ2xhc3MoIm51bGwiKTsNCiAgICB9DQogICAgJCgnI2NvbW1lbnQtY29udGVudCcpLm9uKCJmb2N1cyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKCQoJy5jLWF2YXRhcicpLmhhc0NsYXNzKCJudWxsIikpIHsNCiAgICAgICAgICAgICQoJy5jLWF2YXRhci1maWVsZCcpLnJlbW92ZSgpOw0KICAgICAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJCgnLm5vdC1tZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICQoJy5jLWluZm8tZmllbGRzJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LXNob3cnKS5vbigiY2xpY2siLCAiLmVuYWJsZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgiI2NvbW1lbnQtc2hvdyIpLnJlbW92ZSgpOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICB9KTsNCiAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdXRob3IiLCAkKCcjY29tbWVudC1hdXRob3InKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1lbWFpbCIsICQoJyNjb21tZW50LWVtYWlsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtdXJsIiwgJCgnI2NvbW1lbnQtdXJsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtYXZhdGFyIiwganNvbi5jb21tZW50LmF2YXRhcik7DQogICAgICAgICAgICB2YXIgdHBsID0gJCgkKCcjY29tbWVudC10cGwnKS5odG1sKCkpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF2YXRhciIpLmF0dHIoInNyYyIsIGpzb24uY29tbWVudC5hdmF0YXIpLmF0dHIoImFsdCIsIGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF1dGhvciIpLmF0dHIoImhyZWYiLCBqc29uLmNvbW1lbnQudXJsKS50ZXh0KGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXJlcGx5IikuYXR0cigicmVsIiwganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIHRwbC5maW5kKCIuYy1jb250ZW50IikuaHRtbChqc29uLmNvbW1lbnQuY29udGVudCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnBhcmVudF9tZCkgew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikuaHRtbChtYXJrZWQoanNvbi5jb21tZW50LnBhcmVudF9tZCkpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtcC1tZCIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHBsLmF0dHIoImlkIiwgImNvbW1lbnQtIiArIGpzb24uY29tbWVudC5pZCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnN0YXR1cyA9PSAiYXBwcm92ZWQiKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbGlzdC5hcHBlbmQodHBsKTsNCiAgICAgICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhbGVydCgi5o+Q5Lqk5aSx6LSlISIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJGxpc3Qub24oImNsaWNrIiwgIi5jLXJlcGx5IiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgdmFyIHBjID0gJCgnI2NvbW1lbnQtJyArIGlkKTsNCiAgICAgICAgdmFyIG1kID0gIj4gQCIgKyBwYy5maW5kKCIuYy1hdXRob3IiKS50ZXh0KCkgKyAiXG5cbiI7DQogICAgICAgIG1kICs9ICI+ICIgKyBwYy5maW5kKCIuYy1jb250ZW50IikuaHRtbCgpICsgIlxuIjsNCiAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLmJlZm9yZSgnPGRpdiBjbGFzcz0icmVwbHktbWQgbWFya2Rvd24iPicgKyBtYXJrZWQobWQpICsgJzwvZGl2PicpOw0KICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICBpZiAoJCgnI2NvbW1lbnQtc2hvdycpLmxlbmd0aCkgew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtc2hvdyAuZW5hYmxlJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICAgICAgfQ0KICAgICAgICAkKCcuY2FuY2VsLXJlcGx5Jykuc2hvdygpOw0KICAgICAgICB2YXIgdG9wID0gJCgnI2NvbW1lbnQtZm9ybScpLm9mZnNldCgpLnRvcDsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiB0b3B9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnLmNhbmNlbC1yZXBseScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlcGx5LW1kJykucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCn0NClBLBwge4R5ydRIAAHUSAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcanNcdXBsb2FkLmpzZnVuY3Rpb24gaW5pdFVwbG9hZChwKSB7DQogICAgJCgnI2F0dGFjaC1zaG93Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLnRyaWdnZXIoImNsaWNrIik7DQogICAgfSk7DQogICAgJCgnI2F0dGFjaC11cGxvYWQnKS5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoY29uZmlybSgi56uL5Y2z5LiK5LygPyIpKSB7DQogICAgICAgICAgICB2YXIgYmFyID0gJCgnPHAgY2xhc3M9ImZpbGUtcHJvZ3Jlc3MgaW5saW5lLWJsb2NrIj4wJTwvcD4nKTsNCiAgICAgICAgICAgICQoJyNhdHRhY2gtZm9ybScpLmFqYXhTdWJtaXQoew0KICAgICAgICAgICAgICAgICJiZWZvcmVTdWJtaXQiOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQocCkuYmVmb3JlKGJhcik7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAidXBsb2FkUHJvZ3Jlc3MiOiBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCB0b3RhbCwgcGVyY2VudENvbXBsZXRlKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBwZXJjZW50VmFsID0gcGVyY2VudENvbXBsZXRlICsgJyUnOw0KICAgICAgICAgICAgICAgICAgICBiYXIuY3NzKCJ3aWR0aCIsIHBlcmNlbnRWYWwpLmh0bWwocGVyY2VudFZhbCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKGpzb24ubXNnKS5hZGRDbGFzcygiZXJyIik7DQogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXIucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDAwKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKCIvIiArIGpzb24uZmlsZS5VcmwgKyAiJm5ic3A7Jm5ic3A7Jm5ic3A7KEAiICsganNvbi5maWxlLk5hbWUgKyAiKSIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudmFsKCIiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICQodGhpcykudmFsKCIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfVBLBwiIiRf79gQAAPYEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcbGliL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAACEAAABzdGF0aWNcbGliXGNvZGVtaXJyb3ItbW9kZS5taW4uanMhZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9L14oXHMqKShbKistXXwoXGQrKVwuKShccyopLyxlPSIqKy0iO0NvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0PWZ1bmN0aW9uKHIpe3ZhciBuLGk9ci5nZXRDdXJzb3IoKSxvPXIuZ2V0U3RhdGVBZnRlcihpLmxpbmUpLmxpc3QhPT0hMTtpZighb3x8IShuPXIuZ2V0TGluZShpLmxpbmUpLm1hdGNoKHQpKSlyZXR1cm4gci5leGVjQ29tbWFuZCgibmV3bGluZUFuZEluZGVudCIpLHZvaWQgMDt2YXIgbD1uWzFdLGE9bls0XSxzPWUuaW5kZXhPZihuWzJdKT49MD9uWzJdOnBhcnNlSW50KG5bM10sMTApKzErIi4iO3IucmVwbGFjZVNlbGVjdGlvbigiXG4iK2wrcythLCJlbmQiKX19KCksQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4gZS5mPWUuaW5saW5lPXIscih0LGUpfWZ1bmN0aW9uIG4odCxlLHIpe3JldHVybiBlLmY9ZS5ibG9jaz1yLHIodCxlKX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LmxpbmtUaXRsZT0hMSx0LmVtPSExLHQuc3Ryb25nPSExLHQucXVvdGU9MCxnfHx0LmYhPWx8fCh0LmY9Yyx0LmJsb2NrPW8pLHQudHJhaWxpbmdTcGFjZT0wLHQudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsdC50aGlzTGluZUhhc0NvbnRlbnQ9ITEsbnVsbH1mdW5jdGlvbiBvKHQsaSl7dmFyIG89aS5saXN0IT09ITE7aS5saXN0IT09ITEmJmkuaW5kZW50YXRpb25EaWZmPj0wPyhpLmluZGVudGF0aW9uRGlmZjw0JiYoaS5pbmRlbnRhdGlvbi09aS5pbmRlbnRhdGlvbkRpZmYpLGkubGlzdD1udWxsKTppLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbj4wPyhpLmxpc3Q9bnVsbCxpLmxpc3REZXB0aD1NYXRoLmZsb29yKGkuaW5kZW50YXRpb24vNCkpOmkubGlzdCE9PSExJiYoaS5saXN0PSExLGkubGlzdERlcHRoPTApO3ZhciBsPW51bGw7aWYoaS5pbmRlbnRhdGlvbkRpZmY+PTQpcmV0dXJuIGkuaW5kZW50YXRpb24tPTQsdC5za2lwVG9FbmQoKSxrO2lmKHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDtpZihsPXQubWF0Y2goUikpaS5oZWFkZXI9bFswXS5sZW5ndGg8PTY/bFswXS5sZW5ndGg6NjtlbHNlIGlmKGkucHJldkxpbmVIYXNDb250ZW50JiYobD10Lm1hdGNoKEcpKSlpLmhlYWRlcj0iPSI9PWxbMF0uY2hhckF0KDApPzE6MjtlbHNlIGlmKHQuZWF0KCI+IikpZm9yKGkuaW5kZW50YXRpb24rKyxpLnF1b3RlPTEsdC5lYXRTcGFjZSgpO3QuZWF0KCI+Iik7KXQuZWF0U3BhY2UoKSxpLnF1b3RlKys7ZWxzZXtpZigiWyI9PT10LnBlZWsoKSlyZXR1cm4gcih0LGksaCk7aWYodC5tYXRjaChJLCEwKSlyZXR1cm4gQTtpZihpLnByZXZMaW5lSGFzQ29udGVudCYmIW98fCF0Lm1hdGNoKFAsITApJiYhdC5tYXRjaChGLCEwKSl7aWYoZS5mZW5jZWRDb2RlQmxvY2tzJiZ0Lm1hdGNoKC9eYGBgKFtcdysjXSopLywhMCkpcmV0dXJuIGkubG9jYWxNb2RlPXgoUmVnRXhwLiQxKSxpLmxvY2FsTW9kZSYmKGkubG9jYWxTdGF0ZT1pLmxvY2FsTW9kZS5zdGFydFN0YXRlKCkpLG4odCxpLGEpLGt9ZWxzZSBpLmluZGVudGF0aW9uKz00LGkubGlzdD0hMCxpLmxpc3REZXB0aCsrLGUudGFza0xpc3RzJiZ0Lm1hdGNoKEIsITEpJiYoaS50YXNrTGlzdD0hMCl9cmV0dXJuIHIodCxpLGkuaW5saW5lKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9di50b2tlbih0LGUuaHRtbFN0YXRlKTtyZXR1cm4gZyYmInRhZyI9PT1yJiYib3BlblRhZyIhPT1lLmh0bWxTdGF0ZS50eXBlJiYhZS5odG1sU3RhdGUuY29udGV4dCYmKGUuZj1jLGUuYmxvY2s9byksZS5tZF9pbnNpZGUmJi0xIT10LmN1cnJlbnQoKS5pbmRleE9mKCI+IikmJihlLmY9YyxlLmJsb2NrPW8sZS5odG1sU3RhdGUuY29udGV4dD12b2lkIDApLHJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LnNvbCgpJiZ0Lm1hdGNoKC9eYGBgLywhMCk/KGUubG9jYWxNb2RlPWUubG9jYWxTdGF0ZT1udWxsLGUuZj1jLGUuYmxvY2s9byxrKTplLmxvY2FsTW9kZT9lLmxvY2FsTW9kZS50b2tlbih0LGUubG9jYWxTdGF0ZSk6KHQuc2tpcFRvRW5kKCksayl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1bXTtpZih0LnRhc2tPcGVuKXJldHVybiJtZXRhIjtpZih0LnRhc2tDbG9zZWQpcmV0dXJuInByb3BlcnR5IjtpZih0LnN0cm9uZyYmZS5wdXNoKHopLHQuZW0mJmUucHVzaChFKSx0LmxpbmtUZXh0JiZlLnB1c2goTyksdC5jb2RlJiZlLnB1c2goayksdC5oZWFkZXImJihlLnB1c2goQyksZS5wdXNoKEMrdC5oZWFkZXIpKSx0LnF1b3RlJiZlLnB1c2godC5xdW90ZSUyP3c6TCksdC5saXN0IT09ITEpe3ZhciByPSh0Lmxpc3REZXB0aC0xKSUzO3I/MT09PXI/ZS5wdXNoKE0pOmUucHVzaChUKTplLnB1c2goUyl9cmV0dXJuIHQudHJhaWxpbmdTcGFjZU5ld0xpbmU/ZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS1uZXctbGluZSIpOnQudHJhaWxpbmdTcGFjZSYmZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS0iKyh0LnRyYWlsaW5nU3BhY2UlMj8iYSI6ImIiKSksZS5sZW5ndGg/ZS5qb2luKCIgIik6bnVsbH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQubWF0Y2goXywhMCk/cyhlKTp2b2lkIDB9ZnVuY3Rpb24gYyh0LGkpe3ZhciBvPWkudGV4dCh0LGkpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgbylyZXR1cm4gbztpZihpLmxpc3QpcmV0dXJuIGkubGlzdD1udWxsLHMoaSk7aWYoaS50YXNrTGlzdCl7dmFyIGE9IngiIT09dC5tYXRjaChCLCEwKVsxXTtyZXR1cm4gYT9pLnRhc2tPcGVuPSEwOmkudGFza0Nsb3NlZD0hMCxpLnRhc2tMaXN0PSExLHMoaSl9aS50YXNrT3Blbj0hMSxpLnRhc2tDbG9zZWQ9ITE7dmFyIHU9dC5zb2woKSxjPXQubmV4dCgpO2lmKCJcXCI9PT1jKXJldHVybiB0Lm5leHQoKSxzKGkpO2lmKGkubGlua1RpdGxlKXtpLmxpbmtUaXRsZT0hMTt2YXIgaD1jOyIoIj09PWMmJihoPSIpIiksaD0oaCsiIikucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csIlxcJDEiKTt2YXIgZD0iXlxccyooPzpbXiIraCsiXFxcXF0rfFxcXFxcXFxcfFxcXFwuKSIraDtpZih0Lm1hdGNoKG5ldyBSZWdFeHAoZCksITApKXJldHVybiBXfWlmKCJgIj09PWMpe3ZhciBwPXMoaSksZz10LnBvczt0LmVhdFdoaWxlKCJgIik7dmFyIHY9MSt0LnBvcy1nO3JldHVybiBpLmNvZGU/dj09PWI/KGkuY29kZT0hMSxwKTpzKGkpOihiPXYsaS5jb2RlPSEwLHMoaSkpfWlmKGkuY29kZSlyZXR1cm4gcyhpKTtpZigiISI9PT1jJiZ0Lm1hdGNoKC9cW1teXF1dKlxdID8oPzpcKHxcWykvLCExKSlyZXR1cm4gdC5tYXRjaCgvXFtbXlxdXSpcXS8pLGkuaW5saW5lPWkuZj1mLE47aWYoIlsiPT09YyYmdC5tYXRjaCgvLipcXShcKHwgP1xbKS8sITEpKXJldHVybiBpLmxpbmtUZXh0PSEwLHMoaSk7aWYoIl0iPT09YyYmaS5saW5rVGV4dCl7dmFyIHk9cyhpKTtyZXR1cm4gaS5saW5rVGV4dD0hMSxpLmlubGluZT1pLmY9Zix5fWlmKCI8Ij09PWMmJnQubWF0Y2goL14oaHR0cHM/fGZ0cHM/KTpcL1wvKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEgsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXltePiBcXF0rQCg/OlteXFw+XXxcXC4pKz4vLCExKSlyZXR1cm4gcih0LGksbShELCI+IikpO2lmKCI8Ij09PWMmJnQubWF0Y2goL15cdy8sITEpKXtpZigtMSE9dC5zdHJpbmcuaW5kZXhPZigiPiIpKXt2YXIgeD10LnN0cmluZy5zdWJzdHJpbmcoMSx0LnN0cmluZy5pbmRleE9mKCI+IikpOy9tYXJrZG93blxzKj1ccyooJ3wiKXswLDF9MSgnfCIpezAsMX0vLnRlc3QoeCkmJihpLm1kX2luc2lkZT0hMCl9cmV0dXJuIHQuYmFja1VwKDEpLG4odCxpLGwpfWlmKCI8Ij09PWMmJnQubWF0Y2goL15cL1x3Kj8+LykpcmV0dXJuIGkubWRfaW5zaWRlPSExLCJ0YWciO3ZhciBDPSExO2lmKCFlLnVuZGVyc2NvcmVzQnJlYWtXb3JkcyYmIl8iPT09YyYmIl8iIT09dC5wZWVrKCkmJnQubWF0Y2goLyhcdykvLCExKSl7dmFyIGs9dC5wb3MtMjtpZihrPj0wKXt2YXIgdz10LnN0cmluZy5jaGFyQXQoayk7Il8iIT09dyYmdy5tYXRjaCgvKFx3KS8sITEpJiYoQz0hMCl9fXZhciBwPXMoaSk7aWYoIioiPT09Y3x8Il8iPT09YyYmIUMpaWYodSYmIiAiPT09dC5wZWVrKCkpO2Vsc2V7aWYoaS5zdHJvbmc9PT1jJiZ0LmVhdChjKSlyZXR1cm4gaS5zdHJvbmc9ITEscDtpZighaS5zdHJvbmcmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz1jLHMoaSk7aWYoaS5lbT09PWMpcmV0dXJuIGkuZW09ITEscDtpZighaS5lbSlyZXR1cm4gaS5lbT1jLHMoaSl9ZWxzZSBpZigiICI9PT1jJiYodC5lYXQoIioiKXx8dC5lYXQoIl8iKSkpe2lmKCIgIj09PXQucGVlaygpKXJldHVybiBzKGkpO3QuYmFja1VwKDEpfXJldHVybiIgIj09PWMmJih0Lm1hdGNoKC8gKyQvLCExKT9pLnRyYWlsaW5nU3BhY2UrKzppLnRyYWlsaW5nU3BhY2UmJihpLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSEwKSkscyhpKX1mdW5jdGlvbiBmKHQsZSl7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3ZhciBuPXQubmV4dCgpO3JldHVybiIoIj09PW58fCJbIj09PW4/cih0LGUsbShXLCIoIj09PW4/IikiOiJdIikpOiJlcnJvciJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0Lm1hdGNoKC9eW15cXV0qXF06LywhMCk/KGUuZj1kLE8pOnIodCxlLGMpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdC5lYXRTcGFjZSgpP251bGw6KHQubWF0Y2goL15bXlxzXSsvLCEwKSx2b2lkIDA9PT10LnBlZWsoKT9lLmxpbmtUaXRsZT0hMDp0Lm1hdGNoKC9eKD86XHMrKD86Iig/OlteIlxcXXxcXFxcfFxcLikrInwnKD86W14nXFxdfFxcXFx8XFwuKSsnfFwoKD86W14pXFxdfFxcXFx8XFwuKStcKSkpPy8sITApLGUuZj1lLmlubGluZT1jLFcpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIFZbdF18fCh0PSh0KyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpLFZbdF09bmV3IFJlZ0V4cCgiXig/OlteXFxcXF18XFxcXC4pKj8oIit0KyIpIikpLFZbdF19ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIHI9cnx8YyxmdW5jdGlvbihuLGkpe3JldHVybiBuLm1hdGNoKHAoZSkpLGkuaW5saW5lPWkuZj1yLHR9fXZhciBnPUNvZGVNaXJyb3IubW9kZXMuaGFzT3duUHJvcGVydHkoInhtbCIpLHY9Q29kZU1pcnJvci5nZXRNb2RlKHQsZz97bmFtZToieG1sIixodG1sTW9kZTohMH06InRleHQvcGxhaW4iKSx5PXtodG1sOiJodG1sbWl4ZWQiLGpzOiJqYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uIixjOiJ0ZXh0L3gtY3NyYyIsImMrKyI6InRleHQveC1jKytzcmMiLGphdmE6InRleHQveC1qYXZhIixjc2hhcnA6InRleHQveC1jc2hhcnAiLCJjIyI6InRleHQveC1jc2hhcnAiLHNjYWxhOiJ0ZXh0L3gtc2NhbGEifSx4PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9e30sbz1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5tb2RlcylDb2RlTWlycm9yLm1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZvLnB1c2gobCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyluW29bZV1dPW9bZV07dmFyIGE9W107Zm9yKHZhciBsIGluIENvZGVNaXJyb3IubWltZU1vZGVzKUNvZGVNaXJyb3IubWltZU1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZhLnB1c2goe21pbWU6bCxtb2RlOkNvZGVNaXJyb3IubWltZU1vZGVzW2xdfSk7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylyPWFbZV0ubWltZSxpW3JdPWFbZV0ubWltZTtmb3IodmFyIHMgaW4geSkoeVtzXWluIG58fHlbc11pbiBpKSYmKG5bc109eVtzXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdP0NvZGVNaXJyb3IuZ2V0TW9kZSh0LG5bZV0pOm51bGx9fSgpO3ZvaWQgMD09PWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYoZS51bmRlcnNjb3Jlc0JyZWFrV29yZHM9ITApLHZvaWQgMD09PWUuZmVuY2VkQ29kZUJsb2NrcyYmKGUuZmVuY2VkQ29kZUJsb2Nrcz0hMSksdm9pZCAwPT09ZS50YXNrTGlzdHMmJihlLnRhc2tMaXN0cz0hMSk7dmFyIGI9MCxDPSJoZWFkZXIiLGs9ImNvbW1lbnQiLHc9ImF0b20iLEw9Im51bWJlciIsUz0idmFyaWFibGUtMiIsTT0idmFyaWFibGUtMyIsVD0ia2V5d29yZCIsQT0iaHIiLE49InRhZyIsSD0ibGluayIsRD0ibGluayIsTz0ibGluayIsVz0ic3RyaW5nIixFPSJlbSIsej0ic3Ryb25nIixJPS9eKFsqXC09X10pKD86XHMqXDEpezIsfVxzKiQvLFA9L15bKlwtK11ccysvLEY9L15bMC05XStcLlxzKy8sQj0vXlxbKHh8IClcXSg/PVxzKS8sUj0vXiMrLyxHPS9eKD86XD17MSx9fC17MSx9KSQvLF89L15bXiFcW1xdKl9cXDw+YCAiJyhdKy8sVj1bXTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybntmOm8scHJldkxpbmVIYXNDb250ZW50OiExLHRoaXNMaW5lSGFzQ29udGVudDohMSxibG9jazpvLGh0bWxTdGF0ZTpDb2RlTWlycm9yLnN0YXJ0U3RhdGUodiksaW5kZW50YXRpb246MCxpbmxpbmU6Yyx0ZXh0OnUsbGlua1RleHQ6ITEsbGlua1RpdGxlOiExLGVtOiExLHN0cm9uZzohMSxoZWFkZXI6MCx0YXNrTGlzdDohMSxsaXN0OiExLGxpc3REZXB0aDowLHF1b3RlOjAsdHJhaWxpbmdTcGFjZTowLHRyYWlsaW5nU3BhY2VOZXdMaW5lOiExfX0sY29weVN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybntmOnQuZixwcmV2TGluZUhhc0NvbnRlbnQ6dC5wcmV2TGluZUhhc0NvbnRlbnQsdGhpc0xpbmVIYXNDb250ZW50OnQudGhpc0xpbmVIYXNDb250ZW50LGJsb2NrOnQuYmxvY2ssaHRtbFN0YXRlOkNvZGVNaXJyb3IuY29weVN0YXRlKHYsdC5odG1sU3RhdGUpLGluZGVudGF0aW9uOnQuaW5kZW50YXRpb24sbG9jYWxNb2RlOnQubG9jYWxNb2RlLGxvY2FsU3RhdGU6dC5sb2NhbE1vZGU/Q29kZU1pcnJvci5jb3B5U3RhdGUodC5sb2NhbE1vZGUsdC5sb2NhbFN0YXRlKTpudWxsLGlubGluZTp0LmlubGluZSx0ZXh0OnQudGV4dCxsaW5rVGl0bGU6dC5saW5rVGl0bGUsZW06dC5lbSxzdHJvbmc6dC5zdHJvbmcsaGVhZGVyOnQuaGVhZGVyLHRhc2tMaXN0OnQudGFza0xpc3QsbGlzdDp0Lmxpc3QsbGlzdERlcHRoOnQubGlzdERlcHRoLHF1b3RlOnQucXVvdGUsdHJhaWxpbmdTcGFjZTp0LnRyYWlsaW5nU3BhY2UsdHJhaWxpbmdTcGFjZU5ld0xpbmU6dC50cmFpbGluZ1NwYWNlTmV3TGluZSxtZF9pbnNpZGU6dC5tZF9pbnNpZGV9fSx0b2tlbjpmdW5jdGlvbih0LGUpe2lmKHQuc29sKCkpe2lmKHQubWF0Y2goL15ccyokLywhMCkpcmV0dXJuIGUucHJldkxpbmVIYXNDb250ZW50PSExLGkoZSk7ZS5wcmV2TGluZUhhc0NvbnRlbnQ9ZS50aGlzTGluZUhhc0NvbnRlbnQsZS50aGlzTGluZUhhc0NvbnRlbnQ9ITAsZS5oZWFkZXI9MCxlLnRhc2tMaXN0PSExLGUuY29kZT0hMSxlLnRyYWlsaW5nU3BhY2U9MCxlLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSExLGUuZj1lLmJsb2NrO3ZhciByPXQubWF0Y2goL15ccyovLCEwKVswXS5yZXBsYWNlKC9cdC9nLCIgICAgIikubGVuZ3RoLG49NCpNYXRoLmZsb29yKChyLWUuaW5kZW50YXRpb24pLzQpO24+NCYmKG49NCk7dmFyIG89ZS5pbmRlbnRhdGlvbituO2lmKGUuaW5kZW50YXRpb25EaWZmPW8tZS5pbmRlbnRhdGlvbixlLmluZGVudGF0aW9uPW8scj4wKXJldHVybiBudWxsfXJldHVybiBlLmYodCxlKX0sYmxhbmtMaW5lOmksZ2V0VHlwZTpzfX0sInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LW1hcmtkb3duIiwibWFya2Rvd24iKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4gZS50b2tlbml6ZT1yLHIodCxlKX12YXIgaT10Lm5leHQoKTtpZigiPCI9PWkpe2lmKHQuZWF0KCIhIikpcmV0dXJuIHQuZWF0KCJbIik/dC5tYXRjaCgiQ0RBVEFbIik/cihvKCJhdG9tIiwiXV0+IikpOm51bGw6dC5tYXRjaCgiLS0iKT9yKG8oImNvbW1lbnQiLCItLT4iKSk6dC5tYXRjaCgiRE9DVFlQRSIsITAsITApPyh0LmVhdFdoaWxlKC9bXHdcLl9cLV0vKSxyKGwoMSkpKTpudWxsO2lmKHQuZWF0KCI/IikpcmV0dXJuIHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLGUudG9rZW5pemU9bygibWV0YSIsIj8+IiksIm1ldGEiO3ZhciBhPXQuZWF0KCIvIik7eD0iIjtmb3IodmFyIHM7cz10LmVhdCgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7KXgrPXM7cmV0dXJuIHg/KGI9YT8iY2xvc2VUYWciOiJvcGVuVGFnIixlLnRva2VuaXplPW4sInRhZyIpOiJ0YWcgZXJyb3IifWlmKCImIj09aSl7dmFyIHU7cmV0dXJuIHU9dC5lYXQoIiMiKT90LmVhdCgieCIpP3QuZWF0V2hpbGUoL1thLWZBLUZcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXGRdLykmJnQuZWF0KCI7Iik6dC5lYXRXaGlsZSgvW1x3XC5cLTpdLykmJnQuZWF0KCI7IiksdT8iYXRvbSI6ImVycm9yIn1yZXR1cm4gdC5lYXRXaGlsZSgvW14mPF0vKSxudWxsfWZ1bmN0aW9uIG4odCxlKXt2YXIgbj10Lm5leHQoKTtpZigiPiI9PW58fCIvIj09biYmdC5lYXQoIj4iKSlyZXR1cm4gZS50b2tlbml6ZT1yLGI9Ij4iPT1uPyJlbmRUYWciOiJzZWxmY2xvc2VUYWciLCJ0YWciO2lmKCI9Ij09bilyZXR1cm4gYj0iZXF1YWxzIixudWxsO2lmKCI8Ij09bil7ZS50b2tlbml6ZT1yO3ZhciBvPWUudG9rZW5pemUodCxlKTtyZXR1cm4gbz9vKyIgZXJyb3IiOiJlcnJvciJ9cmV0dXJuL1tcJ1wiXS8udGVzdChuKT8oZS50b2tlbml6ZT1pKG4pLGUuc3RyaW5nU3RhcnRDb2w9dC5jb2x1bW4oKSxlLnRva2VuaXplKHQsZSkpOih0LmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKSwid29yZCIpfWZ1bmN0aW9uIGkodCl7dmFyIGU9ZnVuY3Rpb24oZSxyKXtmb3IoOyFlLmVvbCgpOylpZihlLm5leHQoKT09dCl7ci50b2tlbml6ZT1uO2JyZWFrfXJldHVybiJzdHJpbmcifTtyZXR1cm4gZS5pc0luQXR0cmlidXRlPSEwLGV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcig7IW4uZW9sKCk7KXtpZihuLm1hdGNoKGUpKXtpLnRva2VuaXplPXI7YnJlYWt9bi5uZXh0KCl9cmV0dXJuIHR9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpO251bGwhPShpPWUubmV4dCgpKTspe2lmKCI8Ij09aSlyZXR1cm4gbi50b2tlbml6ZT1sKHQrMSksbi50b2tlbml6ZShlLG4pO2lmKCI+Ij09aSl7aWYoMT09dCl7bi50b2tlbml6ZT1yO2JyZWFrfXJldHVybiBuLnRva2VuaXplPWwodC0xKSxuLnRva2VuaXplKGUsbil9fXJldHVybiJtZXRhIn19ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTE7dD49MDt0LS0pQy5jYy5wdXNoKGFyZ3VtZW50c1t0XSl9ZnVuY3Rpb24gcygpe3JldHVybiBhLmFwcGx5KG51bGwsYXJndW1lbnRzKSwhMH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9VC5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0KXx8Qy5jb250ZXh0JiZDLmNvbnRleHQubm9JbmRlbnQ7Qy5jb250ZXh0PXtwcmV2OkMuY29udGV4dCx0YWdOYW1lOnQsaW5kZW50OkMuaW5kZW50ZWQsc3RhcnRPZkxpbmU6ZSxub0luZGVudDpyfX1mdW5jdGlvbiBjKCl7Qy5jb250ZXh0JiYoQy5jb250ZXh0PUMuY29udGV4dC5wcmV2KX1mdW5jdGlvbiBmKHQpe2lmKCJvcGVuVGFnIj09dClyZXR1cm4gQy50YWdOYW1lPXgsQy50YWdTdGFydD1rLmNvbHVtbigpLHMobSxoKEMuc3RhcnRPZkxpbmUpKTtpZigiY2xvc2VUYWciPT10KXt2YXIgZT0hMTtyZXR1cm4gQy5jb250ZXh0P0MuY29udGV4dC50YWdOYW1lIT14JiYoVC5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KEMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiZjKCksZT0hQy5jb250ZXh0fHxDLmNvbnRleHQudGFnTmFtZSE9eCk6ZT0hMCxlJiYodz0iZXJyb3IiKSxzKGQoZSkpfXJldHVybiBzKCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9Qy50YWdOYW1lO3JldHVybiBDLnRhZ05hbWU9Qy50YWdTdGFydD1udWxsLCJzZWxmY2xvc2VUYWciPT1lfHwiZW5kVGFnIj09ZSYmVC5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkoci50b0xvd2VyQ2FzZSgpKT8ocChyLnRvTG93ZXJDYXNlKCkpLHMoKSk6ImVuZFRhZyI9PWU/KHAoci50b0xvd2VyQ2FzZSgpKSx1KHIsdCkscygpKTpzKCl9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiYodz0iZXJyb3IiKSwiZW5kVGFnIj09ZT8oYygpLHMoKSk6KHc9ImVycm9yIixzKGFyZ3VtZW50cy5jYWxsZWUpKX19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU7Oyl7aWYoIUMuY29udGV4dClyZXR1cm47aWYoZT1DLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCFULmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShlKXx8IVQuY29udGV4dEdyYWJiZXJzW2VdLmhhc093blByb3BlcnR5KHQpKXJldHVybjtjKCl9fWZ1bmN0aW9uIG0odCl7cmV0dXJuIndvcmQiPT10Pyh3PSJhdHRyaWJ1dGUiLHMoZyxtKSk6ImVuZFRhZyI9PXR8fCJzZWxmY2xvc2VUYWciPT10P2EoKToodz0iZXJyb3IiLHMobSkpfWZ1bmN0aW9uIGcodCl7aWYoImVxdWFscyI9PXQpcmV0dXJuIHModixtKTtpZihULmFsbG93TWlzc2luZyl7aWYoIndvcmQiPT10KXJldHVybiB3PSJhdHRyaWJ1dGUiLHMoZyxtKX1lbHNlIHc9ImVycm9yIjtyZXR1cm4iZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOnMoKX1mdW5jdGlvbiB2KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6IndvcmQiPT10JiZULmFsbG93VW5xdW90ZWQ/KHc9InN0cmluZyIscygpKToodz0iZXJyb3IiLCJlbmRUYWciPT10fHwic2VsZkNsb3NlVGFnIj09dD9hKCk6cygpKX1mdW5jdGlvbiB5KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6YSgpfXZhciB4LGIsQyxrLHcsTD10LmluZGVudFVuaXQsUz1lLm11bHRpbGluZVRhZ0luZGVudEZhY3Rvcnx8MSxNPWUubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZ3x8ITAsVD1lLmh0bWxNb2RlP3thdXRvU2VsZkNsb3NlcnM6e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxmcmFtZTohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxpbXBsaWNpdGx5Q2xvc2VkOntkZDohMCxsaTohMCxvcHRncm91cDohMCxvcHRpb246ITAscDohMCxycDohMCxydDohMCx0Ym9keTohMCx0ZDohMCx0Zm9vdDohMCx0aDohMCx0cjohMH0sY29udGV4dEdyYWJiZXJzOntkZDp7ZGQ6ITAsZHQ6ITB9LGR0OntkZDohMCxkdDohMH0sbGk6e2xpOiEwfSxvcHRpb246e29wdGlvbjohMCxvcHRncm91cDohMH0sb3B0Z3JvdXA6e29wdGdyb3VwOiEwfSxwOnthZGRyZXNzOiEwLGFydGljbGU6ITAsYXNpZGU6ITAsYmxvY2txdW90ZTohMCxkaXI6ITAsZGl2OiEwLGRsOiEwLGZpZWxkc2V0OiEwLGZvb3RlcjohMCxmb3JtOiEwLGgxOiEwLGgyOiEwLGgzOiEwLGg0OiEwLGg1OiEwLGg2OiEwLGhlYWRlcjohMCxoZ3JvdXA6ITAsaHI6ITAsbWVudTohMCxuYXY6ITAsb2w6ITAscDohMCxwcmU6ITAsc2VjdGlvbjohMCx0YWJsZTohMCx1bDohMH0scnA6e3JwOiEwLHJ0OiEwfSxydDp7cnA6ITAscnQ6ITB9LHRib2R5Ont0Ym9keTohMCx0Zm9vdDohMH0sdGQ6e3RkOiEwLHRoOiEwfSx0Zm9vdDp7dGJvZHk6ITB9LHRoOnt0ZDohMCx0aDohMH0sdGhlYWQ6e3Rib2R5OiEwLHRmb290OiEwfSx0cjp7dHI6ITB9fSxkb05vdEluZGVudDp7cHJlOiEwfSxhbGxvd1VucXVvdGVkOiEwLGFsbG93TWlzc2luZzohMH06e2F1dG9TZWxmQ2xvc2Vyczp7fSxpbXBsaWNpdGx5Q2xvc2VkOnt9LGNvbnRleHRHcmFiYmVyczp7fSxkb05vdEluZGVudDp7fSxhbGxvd1VucXVvdGVkOiExLGFsbG93TWlzc2luZzohMX0sQT1lLmFsaWduQ0RBVEE7cmV0dXJue3N0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57dG9rZW5pemU6cixjYzpbXSxpbmRlbnRlZDowLHN0YXJ0T2ZMaW5lOiEwLHRhZ05hbWU6bnVsbCx0YWdTdGFydDpudWxsLGNvbnRleHQ6bnVsbH19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYoIWUudGFnTmFtZSYmdC5zb2woKSYmKGUuc3RhcnRPZkxpbmU9ITAsZS5pbmRlbnRlZD10LmluZGVudGF0aW9uKCkpLHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDt3PWI9eD1udWxsO3ZhciByPWUudG9rZW5pemUodCxlKTtpZihlLnR5cGU9Yiwocnx8YikmJiJjb21tZW50IiE9cilmb3IoQz1lLGs9dDs7KXt2YXIgbj1lLmNjLnBvcCgpfHxmO2lmKG4oYnx8cikpYnJlYWt9cmV0dXJuIGUuc3RhcnRPZkxpbmU9ITEsdyYmKHI9ImVycm9yIj09dz9yKyIgZXJyb3IiOncpLHJ9LGluZGVudDpmdW5jdGlvbih0LGUsaSl7dmFyIG89dC5jb250ZXh0O2lmKHQudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSlyZXR1cm4gdC5zdHJpbmdTdGFydENvbCsxO2lmKHQudG9rZW5pemUhPW4mJnQudG9rZW5pemUhPXJ8fG8mJm8ubm9JbmRlbnQpcmV0dXJuIGk/aS5tYXRjaCgvXihccyopLylbMF0ubGVuZ3RoOjA7aWYodC50YWdOYW1lKXJldHVybiBNP3QudGFnU3RhcnQrdC50YWdOYW1lLmxlbmd0aCsyOnQudGFnU3RhcnQrTCpTO2lmKEEmJi88IVxbQ0RBVEFcWy8udGVzdChlKSlyZXR1cm4gMDtmb3IobyYmL148XC8vLnRlc3QoZSkmJihvPW8ucHJldik7byYmIW8uc3RhcnRPZkxpbmU7KW89by5wcmV2O3JldHVybiBvP28uaW5kZW50K0w6MH0sZWxlY3RyaWNDaGFyczoiLyIsYmxvY2tDb21tZW50U3RhcnQ6IjwhLS0iLGJsb2NrQ29tbWVudEVuZDoiLS0+Iixjb25maWd1cmF0aW9uOmUuaHRtbE1vZGU/Imh0bWwiOiJ4bWwiLGhlbHBlclR5cGU6ZS5odG1sTW9kZT8iaHRtbCI6InhtbCJ9fSksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIsInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwieG1sIiksQ29kZU1pcnJvci5taW1lTW9kZXMuaGFzT3duUHJvcGVydHkoInRleHQvaHRtbCIpfHxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIse25hbWU6InhtbCIsaHRtbE1vZGU6ITB9KTtQSwcIk9YPXYgyAACIMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAc3RhdGljXGxpYlxjb2RlbWlycm9yLm1pbi5qc3dpbmRvdy5Db2RlTWlycm9yPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQocixuKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQocixuKTt0aGlzLm9wdGlvbnM9bj1ufHx7fTtmb3IodmFyIGkgaW4gYW8pIW4uaGFzT3duUHJvcGVydHkoaSkmJmFvLmhhc093blByb3BlcnR5KGkpJiYobltpXT1hb1tpXSk7aChuKTt2YXIgbz0ic3RyaW5nIj09dHlwZW9mIG4udmFsdWU/MDpuLnZhbHVlLmZpcnN0LGw9dGhpcy5kaXNwbGF5PWUocixvKTtsLndyYXBwZXIuQ29kZU1pcnJvcj10aGlzLHUodGhpcyksbi5hdXRvZm9jdXMmJiFWaSYmcGUodGhpcyksdGhpcy5zdGF0ZT17a2V5TWFwczpbXSxvdmVybGF5czpbXSxtb2RlR2VuOjAsb3ZlcndyaXRlOiExLGZvY3VzZWQ6ITEsc3VwcHJlc3NFZGl0czohMSxwYXN0ZUluY29taW5nOiExLGRyYWdnaW5nVGV4dDohMSxoaWdobGlnaHQ6bmV3ICRufSxzKHRoaXMpLG4ubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIpO3ZhciBhPW4udmFsdWU7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcgd28obi52YWx1ZSxuLm1vZGUpKSxsZSh0aGlzLHBuKSh0aGlzLGEpLEFpJiZzZXRUaW1lb3V0KGlpKGRlLHRoaXMsITApLDIwKSxtZSh0aGlzKTt2YXIgYzt0cnl7Yz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0fWNhdGNoKGYpe31jfHxuLmF1dG9mb2N1cyYmIVZpP3NldFRpbWVvdXQoaWkoRWUsdGhpcyksMjApOnplKHRoaXMpLGxlKHRoaXMsZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gc28pc28ucHJvcGVydHlJc0VudW1lcmFibGUodCkmJnNvW3RdKHRoaXMsblt0XSx1byk7Zm9yKHZhciBlPTA7ZTxwby5sZW5ndGg7KytlKXBvW2VdKHRoaXMpfSkoKX1mdW5jdGlvbiBlKHQsZSl7dmFyIHI9e30sbj1yLmlucHV0PXNpKCJ0ZXh0YXJlYSIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lOyBmb250LXNpemU6IDRweDsiKTtyZXR1cm4gV2k/bi5zdHlsZS53aWR0aD0iMTAwMHB4IjpuLnNldEF0dHJpYnV0ZSgid3JhcCIsIm9mZiIpLEdpJiYobi5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwiZmFsc2UiKSxyLmlucHV0RGl2PXNpKCJkaXYiLFtuXSxudWxsLCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIpLHIuc2Nyb2xsYmFySD1zaSgiZGl2Iixbc2koImRpdiIsbnVsbCxudWxsLCJoZWlnaHQ6IDFweCIpXSwiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIiksci5zY3JvbGxiYXJWPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiAxcHgiKV0sIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpLHIuc2Nyb2xsYmFyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpLHIuZ3V0dGVyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpLHIubGluZURpdj1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWNvZGUiKSxyLnNlbGVjdGlvbkRpdj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSIpLHIuY3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIiksci5vdGhlckN1cnNvcj1zaSgiZGl2IiwiwqAiLCJDb2RlTWlycm9yLWN1cnNvciBDb2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpLHIubWVhc3VyZT1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLW1lYXN1cmUiKSxyLmxpbmVTcGFjZT1zaSgiZGl2Iixbci5tZWFzdXJlLHIuc2VsZWN0aW9uRGl2LHIubGluZURpdixyLmN1cnNvcixyLm90aGVyQ3Vyc29yXSxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKSxyLm1vdmVyPXNpKCJkaXYiLFtzaSgiZGl2Iixbci5saW5lU3BhY2VdLCJDb2RlTWlycm9yLWxpbmVzIildLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpLHIuc2l6ZXI9c2koImRpdiIsW3IubW92ZXJdLCJDb2RlTWlycm9yLXNpemVyIiksci5oZWlnaHRGb3JjZXI9c2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIitUbysicHg7IHdpZHRoOiAxcHg7Iiksci5ndXR0ZXJzPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVycyIpLHIubGluZUd1dHRlcj1udWxsLHIuc2Nyb2xsZXI9c2koImRpdiIsW3Iuc2l6ZXIsci5oZWlnaHRGb3JjZXIsci5ndXR0ZXJzXSwiQ29kZU1pcnJvci1zY3JvbGwiKSxyLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCItMSIpLHIud3JhcHBlcj1zaSgiZGl2Iixbci5pbnB1dERpdixyLnNjcm9sbGJhckgsci5zY3JvbGxiYXJWLHIuc2Nyb2xsYmFyRmlsbGVyLHIuZ3V0dGVyRmlsbGVyLHIuc2Nyb2xsZXJdLCJDb2RlTWlycm9yIiksSGkmJihyLmd1dHRlcnMuc3R5bGUuekluZGV4PS0xLHIuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0PTApLHQuYXBwZW5kQ2hpbGQ/dC5hcHBlbmRDaGlsZChyLndyYXBwZXIpOnQoci53cmFwcGVyKSxHaSYmKG4uc3R5bGUud2lkdGg9IjBweCIpLFdpfHwoci5zY3JvbGxlci5kcmFnZ2FibGU9ITApLEZpPyhyLmlucHV0RGl2LnN0eWxlLmhlaWdodD0iMXB4IixyLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIpOkhpJiYoci5zY3JvbGxiYXJILnN0eWxlLm1pbldpZHRoPXIuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aD0iMThweCIpLHIudmlld09mZnNldD1yLmxhc3RTaXplQz0wLHIuc2hvd2luZ0Zyb209ci5zaG93aW5nVG89ZSxyLmxpbmVOdW1XaWR0aD1yLmxpbmVOdW1Jbm5lcldpZHRoPXIubGluZU51bUNoYXJzPW51bGwsci5wcmV2SW5wdXQ9IiIsci5hbGlnbldpZGdldHM9ITEsci5wb2xsaW5nRmFzdD0hMSxyLnBvbGw9bmV3ICRuLHIuY2FjaGVkQ2hhcldpZHRoPXIuY2FjaGVkVGV4dEhlaWdodD1udWxsLHIubWVhc3VyZUxpbmVDYWNoZT1bXSxyLm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCxyLmluYWNjdXJhdGVTZWxlY3Rpb249ITEsci5tYXhMaW5lPW51bGwsci5tYXhMaW5lTGVuZ3RoPTAsci5tYXhMaW5lQ2hhbmdlZD0hMSxyLndoZWVsRFg9ci53aGVlbERZPXIud2hlZWxTdGFydFg9ci53aGVlbFN0YXJ0WT1udWxsLHJ9ZnVuY3Rpb24gcihlKXtlLmRvYy5tb2RlPXQuZ2V0TW9kZShlLm9wdGlvbnMsZS5kb2MubW9kZU9wdGlvbiksZS5kb2MuaXRlcihmdW5jdGlvbih0KXt0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKX0pLGUuZG9jLmZyb250aWVyPWUuZG9jLmZpcnN0LFcoZSwxMDApLGUuc3RhdGUubW9kZUdlbisrLGUuY3VyT3AmJnVlKGUpfWZ1bmN0aW9uIG4odCl7dC5vcHRpb25zLmxpbmVXcmFwcGluZz8odC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIsdC5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoPSIiKToodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci13cmFwIiwiIiksZih0KSksbyh0KSx1ZSh0KSxfKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkKHQpfSwxMDApfWZ1bmN0aW9uIGkodCl7dmFyIGU9cmUodC5kaXNwbGF5KSxyPXQub3B0aW9ucy5saW5lV3JhcHBpbmcsbj1yJiZNYXRoLm1heCg1LHQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC9uZSh0LmRpc3BsYXkpLTMpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gVnIodC5kb2MsaSk/MDpyPyhNYXRoLmNlaWwoaS50ZXh0Lmxlbmd0aC9uKXx8MSkqZTplfX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQuZG9jLHI9aSh0KTtlLml0ZXIoZnVuY3Rpb24odCl7dmFyIGU9cih0KTtlIT10LmhlaWdodCYmeW4odCxlKX0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dm9bdC5vcHRpb25zLmtleU1hcF0scj1lLnN0eWxlO3QuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20ta2V5bWFwLVxTKy9nLCIiKSsocj8iIGNtLWtleW1hcC0iK3I6IiIpLHQuc3RhdGUuZGlzYWJsZUlucHV0PWUuZGlzYWJsZUlucHV0fWZ1bmN0aW9uIHModCl7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCIiKSt0Lm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XHMpXHMqL2csIiBjbS1zLSIpLF8odCl9ZnVuY3Rpb24gYSh0KXt1KHQpLHVlKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtnKHQpfSwyMCl9ZnVuY3Rpb24gdSh0KXt2YXIgZT10LmRpc3BsYXkuZ3V0dGVycyxyPXQub3B0aW9ucy5ndXR0ZXJzO2FpKGUpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dLG89ZS5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlciAiK2kpKTsiQ29kZU1pcnJvci1saW5lbnVtYmVycyI9PWkmJih0LmRpc3BsYXkubGluZUd1dHRlcj1vLG8uc3R5bGUud2lkdGg9KHQuZGlzcGxheS5saW5lTnVtV2lkdGh8fDEpKyJweCIpfWUuc3R5bGUuZGlzcGxheT1uPyIiOiJub25lIn1mdW5jdGlvbiBjKHQsZSl7aWYoMD09ZS5oZWlnaHQpcmV0dXJuIDA7Zm9yKHZhciByLG49ZS50ZXh0Lmxlbmd0aCxpPWU7cj1ScihpKTspe3ZhciBvPXIuZmluZCgpO2k9Z24odCxvLmZyb20ubGluZSksbis9by5mcm9tLmNoLW8udG8uY2h9Zm9yKGk9ZTtyPUJyKGkpOyl7dmFyIG89ci5maW5kKCk7bi09aS50ZXh0Lmxlbmd0aC1vLmZyb20uY2gsaT1nbih0LG8udG8ubGluZSksbis9aS50ZXh0Lmxlbmd0aC1vLnRvLmNofXJldHVybiBufWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2M7ZS5tYXhMaW5lPWduKHIsci5maXJzdCksZS5tYXhMaW5lTGVuZ3RoPWMocixlLm1heExpbmUpLGUubWF4TGluZUNoYW5nZWQ9ITAsci5pdGVyKGZ1bmN0aW9uKHQpe3ZhciBuPWMocix0KTtuPmUubWF4TGluZUxlbmd0aCYmKGUubWF4TGluZUxlbmd0aD1uLGUubWF4TGluZT10KX0pfWZ1bmN0aW9uIGgodCl7dmFyIGU9dGkodC5ndXR0ZXJzLCJDb2RlTWlycm9yLWxpbmVudW1iZXJzIik7LTE9PWUmJnQubGluZU51bWJlcnM/dC5ndXR0ZXJzPXQuZ3V0dGVycy5jb25jYXQoWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0pOmU+LTEmJiF0LmxpbmVOdW1iZXJzJiYodC5ndXR0ZXJzPXQuZ3V0dGVycy5zbGljZSgwKSx0Lmd1dHRlcnMuc3BsaWNlKGUsMSkpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2MuaGVpZ2h0LG49citGKGUpO2Uuc2l6ZXIuc3R5bGUubWluSGVpZ2h0PWUuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcD1uKyJweCIsZS5ndXR0ZXJzLnN0eWxlLmhlaWdodD1NYXRoLm1heChuLGUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LVRvKSsicHgiO3ZhciBpPU1hdGgubWF4KG4sZS5zY3JvbGxlci5zY3JvbGxIZWlnaHQpLG89ZS5zY3JvbGxlci5zY3JvbGxXaWR0aD5lLnNjcm9sbGVyLmNsaWVudFdpZHRoKzEsbD1pPmUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KzE7bD8oZS5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhclYuc3R5bGUuYm90dG9tPW8/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9aS1lLnNjcm9sbGVyLmNsaWVudEhlaWdodCtlLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KyJweCIpOihlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9IjAiKSxvPyhlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFySC5zdHlsZS5yaWdodD1sP2RpKGUubWVhc3VyZSkrInB4IjoiMCIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9ZS5zY3JvbGxlci5zY3JvbGxXaWR0aC1lLnNjcm9sbGVyLmNsaWVudFdpZHRoK2Uuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCsicHgiKTooZS5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXk9IiIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjAiKSxvJiZsPyhlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoPWRpKGUubWVhc3VyZSkrInB4Iik6ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixvJiZ0Lm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXImJnQub3B0aW9ucy5maXhlZEd1dHRlcj8oZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodD1kaShlLm1lYXN1cmUpKyJweCIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGg9ZS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCIpOmUuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXk9IiIsUGkmJjA9PT1kaShlLm1lYXN1cmUpJiYoZS5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPWUuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQ9Umk/IjE4cHgiOiIxMnB4IixlLnNjcm9sbGJhclYuc3R5bGUucG9pbnRlckV2ZW50cz1lLnNjcm9sbGJhckguc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXQuc2Nyb2xsZXIuc2Nyb2xsVG9wLGk9dC53cmFwcGVyLmNsaWVudEhlaWdodDsibnVtYmVyIj09dHlwZW9mIHI/bj1yOnImJihuPXIudG9wLGk9ci5ib3R0b20tci50b3ApLG49TWF0aC5mbG9vcihuLUkodCkpO3ZhciBvPU1hdGguY2VpbChuK2kpO3JldHVybntmcm9tOnhuKGUsbiksdG86eG4oZSxvKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10LmRpc3BsYXk7aWYoZS5hbGlnbldpZGdldHN8fGUuZ3V0dGVycy5maXJzdENoaWxkJiZ0Lm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgcj15KGUpLWUuc2Nyb2xsZXIuc2Nyb2xsTGVmdCt0LmRvYy5zY3JvbGxMZWZ0LG49ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGk9cisicHgiLG89ZS5saW5lRGl2LmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpaWYoby5hbGlnbmFibGUpZm9yKHZhciBsPTAscz1vLmFsaWduYWJsZTtsPHMubGVuZ3RoOysrbClzW2xdLnN0eWxlLmxlZnQ9aTt0Lm9wdGlvbnMuZml4ZWRHdXR0ZXImJihlLmd1dHRlcnMuc3R5bGUubGVmdD1yK24rInB4Iil9fWZ1bmN0aW9uIG0odCl7aWYoIXQub3B0aW9ucy5saW5lTnVtYmVycylyZXR1cm4hMTt2YXIgZT10LmRvYyxyPXYodC5vcHRpb25zLGUuZmlyc3QrZS5zaXplLTEpLG49dC5kaXNwbGF5O2lmKHIubGVuZ3RoIT1uLmxpbmVOdW1DaGFycyl7dmFyIGk9bi5tZWFzdXJlLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzaSgiZGl2IixyKV0sIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSksbz1pLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsbD1pLm9mZnNldFdpZHRoLW87cmV0dXJuIG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD0iIixuLmxpbmVOdW1Jbm5lcldpZHRoPU1hdGgubWF4KG8sbi5saW5lR3V0dGVyLm9mZnNldFdpZHRoLWwpLG4ubGluZU51bVdpZHRoPW4ubGluZU51bUlubmVyV2lkdGgrbCxuLmxpbmVOdW1DaGFycz1uLmxpbmVOdW1Jbm5lcldpZHRoP3IubGVuZ3RoOi0xLG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD1uLmxpbmVOdW1XaWR0aCsicHgiLCEwfXJldHVybiExfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gU3RyaW5nKHQubGluZU51bWJlckZvcm1hdHRlcihlK3QuZmlyc3RMaW5lTnVtYmVyKSl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZmkodC5zY3JvbGxlcikubGVmdC1maSh0LnNpemVyKS5sZWZ0fWZ1bmN0aW9uIGIodCxlLHIsbil7Zm9yKHZhciBpLG89dC5kaXNwbGF5LnNob3dpbmdGcm9tLGw9dC5kaXNwbGF5LnNob3dpbmdUbyxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLGE9ITA7O2E9ITEpe3ZhciB1PXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtpZigheCh0LGUscyxuKSlicmVhaztpZihpPSEwLGU9W10sQSh0KSxkKHQpLGEmJnQub3B0aW9ucy5saW5lV3JhcHBpbmcmJnUhPXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCluPSEwO2Vsc2UgaWYobj0hMSxyJiYocj1NYXRoLm1pbih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIm51bWJlciI9PXR5cGVvZiByP3I6ci50b3ApKSxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLHMuZnJvbT49dC5kaXNwbGF5LnNob3dpbmdGcm9tJiZzLnRvPD10LmRpc3BsYXkuc2hvd2luZ1RvKWJyZWFrfXJldHVybiBpJiYoVW4odCwidXBkYXRlIix0KSwodC5kaXNwbGF5LnNob3dpbmdGcm9tIT1vfHx0LmRpc3BsYXkuc2hvd2luZ1RvIT1sKSYmVW4odCwidmlld3BvcnRDaGFuZ2UiLHQsdC5kaXNwbGF5LnNob3dpbmdGcm9tLHQuZGlzcGxheS5zaG93aW5nVG8pKSxpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9dC5kaXNwbGF5LG89dC5kb2M7aWYoIWkud3JhcHBlci5jbGllbnRXaWR0aClyZXR1cm4gaS5zaG93aW5nRnJvbT1pLnNob3dpbmdUbz1vLmZpcnN0LGkudmlld09mZnNldD0wLHZvaWQgMDtpZighKCFuJiYwPT1lLmxlbmd0aCYmci5mcm9tPmkuc2hvd2luZ0Zyb20mJnIudG88aS5zaG93aW5nVG8pKXttKHQpJiYoZT1be2Zyb206by5maXJzdCx0bzpvLmZpcnN0K28uc2l6ZX1dKTt2YXIgbD1pLnNpemVyLnN0eWxlLm1hcmdpbkxlZnQ9aS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCI7aS5zY3JvbGxiYXJILnN0eWxlLmxlZnQ9dC5vcHRpb25zLmZpeGVkR3V0dGVyP2w6IjAiO3ZhciBzPTEvMDtpZih0Lm9wdGlvbnMubGluZU51bWJlcnMpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpZVthXS5kaWZmJiZlW2FdLmZyb208cyYmKHM9ZVthXS5mcm9tKTt2YXIgdT1vLmZpcnN0K28uc2l6ZSxjPU1hdGgubWF4KHIuZnJvbS10Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4sby5maXJzdCksZj1NYXRoLm1pbih1LHIudG8rdC5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtpZihpLnNob3dpbmdGcm9tPGMmJmMtaS5zaG93aW5nRnJvbTwyMCYmKGM9TWF0aC5tYXgoby5maXJzdCxpLnNob3dpbmdGcm9tKSksaS5zaG93aW5nVG8+ZiYmaS5zaG93aW5nVG8tZjwyMCYmKGY9TWF0aC5taW4odSxpLnNob3dpbmdUbykpLFFpKWZvcihjPWJuKEdyKG8sZ24obyxjKSkpO3U+ZiYmVnIobyxnbihvLGYpKTspKytmO3ZhciBoPVt7ZnJvbTpNYXRoLm1heChpLnNob3dpbmdGcm9tLG8uZmlyc3QpLHRvOk1hdGgubWluKGkuc2hvd2luZ1RvLHUpfV07aWYoaD1oWzBdLmZyb20+PWhbMF0udG8/W106TChoLGUpLFFpKWZvcih2YXIgYT0wO2E8aC5sZW5ndGg7KythKWZvcih2YXIgZCxwPWhbYV07ZD1CcihnbihvLHAudG8tMSkpOyl7dmFyIGc9ZC5maW5kKCkuZnJvbS5saW5lO2lmKCEoZz5wLmZyb20pKXtoLnNwbGljZShhLS0sMSk7YnJlYWt9cC50bz1nfWZvcih2YXIgdj0wLGE9MDthPGgubGVuZ3RoOysrYSl7dmFyIHA9aFthXTtwLmZyb208YyYmKHAuZnJvbT1jKSxwLnRvPmYmJihwLnRvPWYpLHAuZnJvbT49cC50bz9oLnNwbGljZShhLS0sMSk6dis9cC50by1wLmZyb219aWYoIW4mJnY9PWYtYyYmYz09aS5zaG93aW5nRnJvbSYmZj09aS5zaG93aW5nVG8pcmV0dXJuIHcodCksdm9pZCAwO2guc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmZyb20tZS5mcm9tfSk7dHJ5e3ZhciB5PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYil7fS43KihmLWMpPnYmJihpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIpLFModCxjLGYsaCxzKSxpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0iIix5JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT15JiZ5Lm9mZnNldEhlaWdodCYmeS5mb2N1cygpO3ZhciB4PWMhPWkuc2hvd2luZ0Zyb218fGYhPWkuc2hvd2luZ1RvfHxpLmxhc3RTaXplQyE9aS53cmFwcGVyLmNsaWVudEhlaWdodDtyZXR1cm4geCYmKGkubGFzdFNpemVDPWkud3JhcHBlci5jbGllbnRIZWlnaHQsVyh0LDQwMCkpLGkuc2hvd2luZ0Zyb209YyxpLnNob3dpbmdUbz1mLEModCksdyh0KSwhMH19ZnVuY3Rpb24gQyh0KXtmb3IodmFyIGUscj10LmRpc3BsYXksbj1yLmxpbmVEaXYub2Zmc2V0VG9wLGk9ci5saW5lRGl2LmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpaWYoaS5saW5lT2JqKXtpZihIaSl7dmFyIG89aS5vZmZzZXRUb3AraS5vZmZzZXRIZWlnaHQ7ZT1vLW4sbj1vfWVsc2V7dmFyIGw9ZmkoaSk7ZT1sLmJvdHRvbS1sLnRvcH12YXIgcz1pLmxpbmVPYmouaGVpZ2h0LWU7aWYoMj5lJiYoZT1yZShyKSkscz4uMDAxfHwtLjAwMT5zKXt5bihpLmxpbmVPYmosZSk7dmFyIGE9aS5saW5lT2JqLndpZGdldHM7aWYoYSlmb3IodmFyIHU9MDt1PGEubGVuZ3RoOysrdSlhW3VdLmhlaWdodD1hW3VdLm5vZGUub2Zmc2V0SGVpZ2h0fX19ZnVuY3Rpb24gdyh0KXt2YXIgZT10LmRpc3BsYXkudmlld09mZnNldD1Dbih0LGduKHQuZG9jLHQuZGlzcGxheS5zaG93aW5nRnJvbSkpO3QuZGlzcGxheS5tb3Zlci5zdHlsZS50b3A9ZSsicHgifWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RofHwwO24+cjsrK3Ipe2Zvcih2YXIgaT1lW3JdLG89W10sbD1pLmRpZmZ8fDAscz0wLGE9dC5sZW5ndGg7YT5zOysrcyl7dmFyIHU9dFtzXTtpLnRvPD11LmZyb20mJmkuZGlmZj9vLnB1c2goe2Zyb206dS5mcm9tK2wsdG86dS50bytsfSk6aS50bzw9dS5mcm9tfHxpLmZyb20+PXUudG8/by5wdXNoKHUpOihpLmZyb20+dS5mcm9tJiZvLnB1c2goe2Zyb206dS5mcm9tLHRvOmkuZnJvbX0pLGkudG88dS50byYmby5wdXNoKHtmcm9tOmkudG8rbCx0bzp1LnRvK2x9KSl9dD1vfXJldHVybiB0fWZ1bmN0aW9uIGsodCl7Zm9yKHZhciBlPXQuZGlzcGxheSxyPXt9LG49e30saT1lLmd1dHRlcnMuZmlyc3RDaGlsZCxvPTA7aTtpPWkubmV4dFNpYmxpbmcsKytvKXJbdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0TGVmdCxuW3Qub3B0aW9ucy5ndXR0ZXJzW29dXT1pLm9mZnNldFdpZHRoO3JldHVybntmaXhlZFBvczp5KGUpLGd1dHRlclRvdGFsV2lkdGg6ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGd1dHRlckxlZnQ6cixndXR0ZXJXaWR0aDpuLHdyYXBwZXJXaWR0aDplLndyYXBwZXIuY2xpZW50V2lkdGh9fWZ1bmN0aW9uIFModCxlLHIsbixpKXtmdW5jdGlvbiBvKGUpe3ZhciByPWUubmV4dFNpYmxpbmc7cmV0dXJuIFdpJiZLaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD09ZT8oZS5zdHlsZS5kaXNwbGF5PSJub25lIixlLmxpbmVPYmo9bnVsbCk6ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLHJ9dmFyIGw9ayh0KSxzPXQuZGlzcGxheSxhPXQub3B0aW9ucy5saW5lTnVtYmVycztuLmxlbmd0aHx8V2kmJnQuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXR8fGFpKHMubGluZURpdik7dmFyIHU9cy5saW5lRGl2LGM9dS5maXJzdENoaWxkLGY9bi5zaGlmdCgpLGg9ZTtmb3IodC5kb2MuaXRlcihlLHIsZnVuY3Rpb24oZSl7aWYoZiYmZi50bz09aCYmKGY9bi5zaGlmdCgpKSxWcih0LmRvYyxlKSl7aWYoMCE9ZS5oZWlnaHQmJnluKGUsMCksZS53aWRnZXRzJiZjJiZjLnByZXZpb3VzU2libGluZylmb3IodmFyIHI9MDtyPGUud2lkZ2V0cy5sZW5ndGg7KytyKXt2YXIgcz1lLndpZGdldHNbcl07aWYocy5zaG93SWZIaWRkZW4pe3ZhciBkPWMucHJldmlvdXNTaWJsaW5nO2lmKC9wcmUvaS50ZXN0KGQubm9kZU5hbWUpKXt2YXIgcD1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpO2QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocCxkKSxwLmFwcGVuZENoaWxkKGQpLGQ9cH12YXIgZz1kLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzLm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKSk7cy5oYW5kbGVNb3VzZUV2ZW50c3x8KGcuaWdub3JlRXZlbnRzPSEwKSxUKHMsZyxkLGwpfX19ZWxzZSBpZihmJiZmLmZyb208PWgmJmYudG8+aCl7Zm9yKDtjLmxpbmVPYmohPWU7KWM9byhjKTthJiZoPj1pJiZjLmxpbmVOdW1iZXImJmNpKGMubGluZU51bWJlcix2KHQub3B0aW9ucyxoKSksYz1jLm5leHRTaWJsaW5nfWVsc2V7aWYoZS53aWRnZXRzKWZvcih2YXIgbSx5PTAsYj1jO2ImJjIwPnk7Kyt5LGI9Yi5uZXh0U2libGluZylpZihiLmxpbmVPYmo9PWUmJi9kaXYvaS50ZXN0KGIubm9kZU5hbWUpKXttPWI7YnJlYWt9dmFyIHg9TSh0LGUsaCxsLG0pO2lmKHghPW0pdS5pbnNlcnRCZWZvcmUoeCxjKTtlbHNle2Zvcig7YyE9bTspYz1vKGMpO2M9Yy5uZXh0U2libGluZ314LmxpbmVPYmo9ZX0rK2h9KTtjOyljPW8oYyl9ZnVuY3Rpb24gTSh0LGUscixuLGkpe3ZhciBvLGw9cm4odCxlKSxzPWwucHJlLGE9ZS5ndXR0ZXJNYXJrZXJzLHU9dC5kaXNwbGF5LGM9bC5iZ0NsYXNzP2wuYmdDbGFzcysiICIrKGUuYmdDbGFzc3x8IiIpOmUuYmdDbGFzcztpZighKHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YXx8Y3x8ZS53cmFwQ2xhc3N8fGUud2lkZ2V0cykpcmV0dXJuIHM7aWYoaSl7aS5hbGlnbmFibGU9bnVsbDtmb3IodmFyIGYsaD0hMCxkPTAscD1udWxsLGc9aS5maXJzdENoaWxkO2c7Zz1mKWlmKGY9Zy5uZXh0U2libGluZywvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChnLmNsYXNzTmFtZSkpe2Zvcih2YXIgbT0wO208ZS53aWRnZXRzLmxlbmd0aDsrK20pe3ZhciB5PWUud2lkZ2V0c1ttXTtpZih5Lm5vZGU9PWcuZmlyc3RDaGlsZCl7eS5hYm92ZXx8cHx8KHA9ZyksVCh5LGcsaSxuKSwrK2Q7YnJlYWt9fWlmKG09PWUud2lkZ2V0cy5sZW5ndGgpe2g9ITE7YnJlYWt9fWVsc2UgaS5yZW1vdmVDaGlsZChnKTtpLmluc2VydEJlZm9yZShzLHApLGgmJmQ9PWUud2lkZ2V0cy5sZW5ndGgmJihvPWksaS5jbGFzc05hbWU9ZS53cmFwQ2xhc3N8fCIiKX1pZihvfHwobz1zaSgiZGl2IixudWxsLGUud3JhcENsYXNzLCJwb3NpdGlvbjogcmVsYXRpdmUiKSxvLmFwcGVuZENoaWxkKHMpKSxjJiZvLmluc2VydEJlZm9yZShzaSgiZGl2IixudWxsLGMrIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIiksby5maXJzdENoaWxkKSx0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEpe3ZhciBiPW8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiKyh0Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bi5maXhlZFBvczotbi5ndXR0ZXJUb3RhbFdpZHRoKSsicHgiKSxvLmZpcnN0Q2hpbGQpO2lmKHQub3B0aW9ucy5maXhlZEd1dHRlciYmKG8uYWxpZ25hYmxlfHwoby5hbGlnbmFibGU9W10pKS5wdXNoKGIpLCF0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEmJmFbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXXx8KG8ubGluZU51bWJlcj1iLmFwcGVuZENoaWxkKHNpKCJkaXYiLHYodC5vcHRpb25zLHIpLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIituLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSsicHg7IHdpZHRoOiAiK3UubGluZU51bUlubmVyV2lkdGgrInB4IikpKSxhKWZvcih2YXIgeD0wO3g8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysreCl7dmFyIEM9dC5vcHRpb25zLmd1dHRlcnNbeF0sdz1hLmhhc093blByb3BlcnR5KEMpJiZhW0NdO3cmJmIuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3ddLCJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFtDXSsicHg7IHdpZHRoOiAiK24uZ3V0dGVyV2lkdGhbQ10rInB4IikpfX1pZihIaSYmKG8uc3R5bGUuekluZGV4PTIpLGUud2lkZ2V0cyYmbyE9aSlmb3IodmFyIG09MCxMPWUud2lkZ2V0czttPEwubGVuZ3RoOysrbSl7dmFyIHk9TFttXSxrPXNpKCJkaXYiLFt5Lm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTt5LmhhbmRsZU1vdXNlRXZlbnRzfHwoay5pZ25vcmVFdmVudHM9ITApLFQoeSxrLG8sbikseS5hYm92ZT9vLmluc2VydEJlZm9yZShrLHQub3B0aW9ucy5saW5lTnVtYmVycyYmMCE9ZS5oZWlnaHQ/YjpzKTpvLmFwcGVuZENoaWxkKGspLFVuKHksInJlZHJhdyIpfXJldHVybiBvfWZ1bmN0aW9uIFQodCxlLHIsbil7aWYodC5ub0hTY3JvbGwpeyhyLmFsaWduYWJsZXx8KHIuYWxpZ25hYmxlPVtdKSkucHVzaChlKTt2YXIgaT1uLndyYXBwZXJXaWR0aDtlLnN0eWxlLmxlZnQ9bi5maXhlZFBvcysicHgiLHQuY292ZXJHdXR0ZXJ8fChpLT1uLmd1dHRlclRvdGFsV2lkdGgsZS5zdHlsZS5wYWRkaW5nTGVmdD1uLmd1dHRlclRvdGFsV2lkdGgrInB4IiksZS5zdHlsZS53aWR0aD1pKyJweCJ9dC5jb3Zlckd1dHRlciYmKGUuc3R5bGUuekluZGV4PTUsZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHQubm9IU2Nyb2xsfHwoZS5zdHlsZS5tYXJnaW5MZWZ0PS1uLmd1dHRlclRvdGFsV2lkdGgrInB4IikpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5kaXNwbGF5LHI9amUodC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvKTtpZihyfHx0Lm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3Rpbmc/SCh0KTplLmN1cnNvci5zdHlsZS5kaXNwbGF5PWUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIscj9lLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSJub25lIjpOKHQpLHQub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKXt2YXIgbj1RKHQsdC5kb2Muc2VsLmhlYWQsImRpdiIpLGk9ZmkoZS53cmFwcGVyKSxvPWZpKGUubGluZURpdik7ZS5pbnB1dERpdi5zdHlsZS50b3A9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50SGVpZ2h0LTEwLG4udG9wK28udG9wLWkudG9wKSkrInB4IixlLmlucHV0RGl2LnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50V2lkdGgtMTAsbi5sZWZ0K28ubGVmdC1pLmxlZnQpKSsicHgifX1mdW5jdGlvbiBIKHQpe3ZhciBlPXQuZGlzcGxheSxyPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2Iik7ZS5jdXJzb3Iuc3R5bGUubGVmdD1yLmxlZnQrInB4IixlLmN1cnNvci5zdHlsZS50b3A9ci50b3ArInB4IixlLmN1cnNvci5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxyLmJvdHRvbS1yLnRvcCkqdC5vcHRpb25zLmN1cnNvckhlaWdodCsicHgiLGUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5vdGhlcj8oZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLGUub3RoZXJDdXJzb3Iuc3R5bGUubGVmdD1yLm90aGVyLmxlZnQrInB4IixlLm90aGVyQ3Vyc29yLnN0eWxlLnRvcD1yLm90aGVyLnRvcCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0PS44NSooci5vdGhlci5ib3R0b20tci5vdGhlci50b3ApKyJweCIpOmUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZnVuY3Rpb24gTih0KXtmdW5jdGlvbiBlKHQsZSxyLG4pezA+ZSYmKGU9MCksbC5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLXNlbGVjdGVkIiwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiK3QrInB4OyB0b3A6ICIrZSsicHg7IHdpZHRoOiAiKyhudWxsPT1yP3MtdDpyKSsicHg7IGhlaWdodDogIisobi1lKSsicHgiKSl9ZnVuY3Rpb24gcihyLG4sbyl7ZnVuY3Rpb24gbChlLG4pe3JldHVybiBxKHQsWWUocixlKSwiZGl2IixmLG4pfXZhciB1LGMsZj1nbihpLHIpLGg9Zi50ZXh0Lmxlbmd0aDtyZXR1cm4gZ2kod24oZiksbnx8MCxudWxsPT1vP2g6byxmdW5jdGlvbih0LHIsaSl7dmFyIGYsZCxwLGc9bCh0LCJsZWZ0Iik7aWYodD09cilmPWcsZD1wPWcubGVmdDtlbHNle2lmKGY9bChyLTEsInJpZ2h0IiksInJ0bCI9PWkpe3ZhciBtPWc7Zz1mLGY9bX1kPWcubGVmdCxwPWYucmlnaHR9bnVsbD09biYmMD09dCYmKGQ9YSksZi50b3AtZy50b3A+MyYmKGUoZCxnLnRvcCxudWxsLGcuYm90dG9tKSxkPWEsZy5ib3R0b208Zi50b3AmJmUoZCxnLmJvdHRvbSxudWxsLGYudG9wKSksbnVsbD09byYmcj09aCYmKHA9cyksKCF1fHxnLnRvcDx1LnRvcHx8Zy50b3A9PXUudG9wJiZnLmxlZnQ8dS5sZWZ0KSYmKHU9ZyksKCFjfHxmLmJvdHRvbT5jLmJvdHRvbXx8Zi5ib3R0b209PWMuYm90dG9tJiZmLnJpZ2h0PmMucmlnaHQpJiYoYz1mKSxhKzE+ZCYmKGQ9YSksZShkLGYudG9wLHAtZCxmLmJvdHRvbSl9KSx7c3RhcnQ6dSxlbmQ6Y319dmFyIG49dC5kaXNwbGF5LGk9dC5kb2Msbz10LmRvYy5zZWwsbD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscz1uLmxpbmVTcGFjZS5vZmZzZXRXaWR0aCxhPVAodC5kaXNwbGF5KTtpZihvLmZyb20ubGluZT09by50by5saW5lKXIoby5mcm9tLmxpbmUsby5mcm9tLmNoLG8udG8uY2gpO2Vsc2V7dmFyIHU9Z24oaSxvLmZyb20ubGluZSksYz1nbihpLG8udG8ubGluZSksZj1HcihpLHUpPT1HcihpLGMpLGg9cihvLmZyb20ubGluZSxvLmZyb20uY2gsZj91LnRleHQubGVuZ3RoOm51bGwpLmVuZCxkPXIoby50by5saW5lLGY/MDpudWxsLG8udG8uY2gpLnN0YXJ0O2YmJihoLnRvcDxkLnRvcC0yPyhlKGgucmlnaHQsaC50b3AsbnVsbCxoLmJvdHRvbSksZShhLGQudG9wLGQubGVmdCxkLmJvdHRvbSkpOmUoaC5yaWdodCxoLnRvcCxkLmxlZnQtaC5yaWdodCxoLmJvdHRvbSkpLGguYm90dG9tPGQudG9wJiZlKGEsaC5ib3R0b20sbnVsbCxkLnRvcCl9dWkobi5zZWxlY3Rpb25EaXYsbCksbi5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheT0iIn1mdW5jdGlvbiBEKHQpe2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIGU9dC5kaXNwbGF5O2NsZWFySW50ZXJ2YWwoZS5ibGlua2VyKTt2YXIgcj0hMDtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0iIix0Lm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlPjAmJihlLmJsaW5rZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0ocj0hcik/IiI6ImhpZGRlbiJ9LHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpKX19ZnVuY3Rpb24gVyh0LGUpe3QuZG9jLm1vZGUuc3RhcnRTdGF0ZSYmdC5kb2MuZnJvbnRpZXI8dC5kaXNwbGF5LnNob3dpbmdUbyYmdC5zdGF0ZS5oaWdobGlnaHQuc2V0KGUsaWkoTyx0KSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmRvYztpZihlLmZyb250aWVyPGUuZmlyc3QmJihlLmZyb250aWVyPWUuZmlyc3QpLCEoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdUbykpe3ZhciByLG49K25ldyBEYXRlK3Qub3B0aW9ucy53b3JrVGltZSxpPWJyKGUubW9kZSx6KHQsZS5mcm9udGllcikpLG89W107ZS5pdGVyKGUuZnJvbnRpZXIsTWF0aC5taW4oZS5maXJzdCtlLnNpemUsdC5kaXNwbGF5LnNob3dpbmdUbys1MDApLGZ1bmN0aW9uKGwpe2lmKGUuZnJvbnRpZXI+PXQuZGlzcGxheS5zaG93aW5nRnJvbSl7dmFyIHM9bC5zdHlsZXM7bC5zdHlsZXM9UXIodCxsLGksITApO2Zvcih2YXIgYT0hc3x8cy5sZW5ndGghPWwuc3R5bGVzLmxlbmd0aCx1PTA7IWEmJnU8cy5sZW5ndGg7Kyt1KWE9c1t1XSE9bC5zdHlsZXNbdV07YSYmKHImJnIuZW5kPT1lLmZyb250aWVyP3IuZW5kKys6by5wdXNoKHI9e3N0YXJ0OmUuZnJvbnRpZXIsZW5kOmUuZnJvbnRpZXIrMX0pKSxsLnN0YXRlQWZ0ZXI9YnIoZS5tb2RlLGkpfWVsc2UgdG4odCxsLnRleHQsaSksbC5zdGF0ZUFmdGVyPTA9PWUuZnJvbnRpZXIlNT9icihlLm1vZGUsaSk6bnVsbDtyZXR1cm4rK2UuZnJvbnRpZXIsK25ldyBEYXRlPm4/KFcodCx0Lm9wdGlvbnMud29ya0RlbGF5KSwhMCk6dm9pZCAwfSksby5sZW5ndGgmJmxlKHQsZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoOysrdCl1ZSh0aGlzLG9bdF0uc3RhcnQsb1t0XS5lbmQpfSkoKX19ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuLGksbz10LmRvYyxsPXI/LTE6ZS0odC5kb2MubW9kZS5pbm5lck1vZGU/MWUzOjEwMCkscz1lO3M+bDstLXMpe2lmKHM8PW8uZmlyc3QpcmV0dXJuIG8uZmlyc3Q7dmFyIGE9Z24obyxzLTEpO2lmKGEuc3RhdGVBZnRlciYmKCFyfHxzPD1vLmZyb250aWVyKSlyZXR1cm4gczt2YXIgdT1abihhLnRleHQsbnVsbCx0Lm9wdGlvbnMudGFiU2l6ZSk7KG51bGw9PWl8fG4+dSkmJihpPXMtMSxuPXUpfXJldHVybiBpfWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXQuZG9jLGk9dC5kaXNwbGF5O2lmKCFuLm1vZGUuc3RhcnRTdGF0ZSlyZXR1cm4hMDt2YXIgbz1FKHQsZSxyKSxsPW8+bi5maXJzdCYmZ24obixvLTEpLnN0YXRlQWZ0ZXI7cmV0dXJuIGw9bD9icihuLm1vZGUsbCk6eHIobi5tb2RlKSxuLml0ZXIobyxlLGZ1bmN0aW9uKHIpe3RuKHQsci50ZXh0LGwpO3ZhciBzPW89PWUtMXx8MD09byU1fHxvPj1pLnNob3dpbmdGcm9tJiZvPGkuc2hvd2luZ1RvO3Iuc3RhdGVBZnRlcj1zP2JyKG4ubW9kZSxsKTpudWxsLCsrb30pLHImJihuLmZyb250aWVyPW8pLGx9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5saW5lU3BhY2Uub2Zmc2V0VG9wfWZ1bmN0aW9uIEYodCl7cmV0dXJuIHQubW92ZXIub2Zmc2V0SGVpZ2h0LXQubGluZVNwYWNlLm9mZnNldEhlaWdodH1mdW5jdGlvbiBQKHQpe3ZhciBlPXVpKHQubWVhc3VyZSxzaSgicHJlIixudWxsLG51bGwsInRleHQtYWxpZ246IGxlZnQiKSkuYXBwZW5kQ2hpbGQoc2koInNwYW4iLCJ4IikpO3JldHVybiBlLm9mZnNldExlZnR9ZnVuY3Rpb24gUih0LGUscixuLGkpe3ZhciBvPS0xO2lmKG49bnx8Vih0LGUpLG4uY3J1ZGUpe3ZhciBsPW4ubGVmdCtyKm4ud2lkdGg7cmV0dXJue2xlZnQ6bCxyaWdodDpsK24ud2lkdGgsdG9wOm4udG9wLGJvdHRvbTpuLmJvdHRvbX19Zm9yKHZhciBzPXI7O3MrPW8pe3ZhciBhPW5bc107aWYoYSlicmVhazswPm8mJjA9PXMmJihvPTEpfXJldHVybiBpPXM+cj8ibGVmdCI6cj5zPyJyaWdodCI6aSwibGVmdCI9PWkmJmEubGVmdFNpZGU/YT1hLmxlZnRTaWRlOiJyaWdodCI9PWkmJmEucmlnaHRTaWRlJiYoYT1hLnJpZ2h0U2lkZSkse2xlZnQ6cj5zP2EucmlnaHQ6YS5sZWZ0LHJpZ2h0OnM+cj9hLmxlZnQ6YS5yaWdodCx0b3A6YS50b3AsYm90dG9tOmEuYm90dG9tfX1mdW5jdGlvbiBCKHQsZSl7Zm9yKHZhciByPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtpZihpLnRleHQ9PWUudGV4dCYmaS5tYXJrZWRTcGFucz09ZS5tYXJrZWRTcGFucyYmdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoPT1pLndpZHRoJiZpLmNsYXNzZXM9PWUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzcylyZXR1cm4gaX19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPUIodCxlKTtyJiYoci50ZXh0PXIubWVhc3VyZT1yLm1hcmtlZFNwYW5zPW51bGwpfWZ1bmN0aW9uIFYodCxlKXt2YXIgcj1CKHQsZSk7aWYocilyZXR1cm4gci5tZWFzdXJlO3ZhciBuPUsodCxlKSxpPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG89e3RleHQ6ZS50ZXh0LHdpZHRoOnQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCxtYXJrZWRTcGFuczplLm1hcmtlZFNwYW5zLG1lYXN1cmU6bixjbGFzc2VzOmUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzc307cmV0dXJuIDE2PT1pLmxlbmd0aD9pWysrdC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3MlMTZdPW86aS5wdXNoKG8pLG59ZnVuY3Rpb24gSyh0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9dC50b3AtcC50b3Ascj10LmJvdHRvbS1wLnRvcDtyPnYmJihyPXYpLDA+ZSYmKGU9MCk7Zm9yKHZhciBuPWcubGVuZ3RoLTI7bj49MDtuLT0yKXt2YXIgaT1nW25dLG89Z1tuKzFdO2lmKCEoaT5yfHxlPm8pJiYoZT49aSYmbz49cnx8aT49ZSYmcj49b3x8TWF0aC5taW4ocixvKS1NYXRoLm1heChlLGkpPj1yLWU+PjEpKXtnW25dPU1hdGgubWluKGUsaSksZ1tuKzFdPU1hdGgubWF4KHIsbyk7YnJlYWt9fXJldHVybiAwPm4mJihuPWcubGVuZ3RoLGcucHVzaChlLHIpKSx7bGVmdDp0LmxlZnQtcC5sZWZ0LHJpZ2h0OnQucmlnaHQtcC5sZWZ0LHRvcDpuLGJvdHRvbTpudWxsfX1mdW5jdGlvbiBuKHQpe3QuYm90dG9tPWdbdC50b3ArMV0sdC50b3A9Z1t0LnRvcF19aWYoIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFUodCxlKTt2YXIgaT10LmRpc3BsYXksbz1uaShlLnRleHQubGVuZ3RoKSxsPXJuKHQsZSxvLCEwKS5wcmU7aWYoQWkmJiFIaSYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmwuY2hpbGROb2Rlcy5sZW5ndGg+MTAwKXtmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MTAsdT1sLmNoaWxkTm9kZXMubGVuZ3RoLGM9MCxmPU1hdGguY2VpbCh1L2EpO2Y+YzsrK2Mpe2Zvcih2YXIgaD1zaSgiZGl2IixudWxsLG51bGwsImRpc3BsYXk6IGlubGluZS1ibG9jayIpLGQ9MDthPmQmJnU7KytkKWguYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKSwtLXU7cy5hcHBlbmRDaGlsZChoKX1sLmFwcGVuZENoaWxkKHMpfXVpKGkubWVhc3VyZSxsKTt2YXIgcD1maShpLmxpbmVEaXYpLGc9W10sbT1uaShlLnRleHQubGVuZ3RoKSx2PWwub2Zmc2V0SGVpZ2h0O05pJiZpLm1lYXN1cmUuZmlyc3QhPWwmJnVpKGkubWVhc3VyZSxsKTtmb3IodmFyIHksYz0wO2M8by5sZW5ndGg7KytjKWlmKHk9b1tjXSl7dmFyIGI9eSx4PW51bGw7aWYoL1xiQ29kZU1pcnJvci13aWRnZXRcYi8udGVzdCh5LmNsYXNzTmFtZSkmJnkuZ2V0Q2xpZW50UmVjdHMpezE9PXkuZmlyc3RDaGlsZC5ub2RlVHlwZSYmKGI9eS5maXJzdENoaWxkKTt2YXIgQz1iLmdldENsaWVudFJlY3RzKCk7Qy5sZW5ndGg+MSYmKHg9bVtjXT1yKENbMF0pLHgucmlnaHRTaWRlPXIoQ1tDLmxlbmd0aC0xXSkpfXh8fCh4PW1bY109cihmaShiKSkpLHkubWVhc3VyZVJpZ2h0JiYoeC5yaWdodD1maSh5Lm1lYXN1cmVSaWdodCkubGVmdCkseS5sZWZ0U2lkZSYmKHgubGVmdFNpZGU9cihmaSh5LmxlZnRTaWRlKSkpfWFpKHQuZGlzcGxheS5tZWFzdXJlKTtmb3IodmFyIHksYz0wO2M8bS5sZW5ndGg7KytjKSh5PW1bY10pJiYobih5KSx5LmxlZnRTaWRlJiZuKHkubGVmdFNpZGUpLHkucmlnaHRTaWRlJiZuKHkucmlnaHRTaWRlKSk7cmV0dXJuIG19ZnVuY3Rpb24gVSh0LGUpe3ZhciByPW5ldyBibyhlLnRleHQuc2xpY2UoMCwxMDApLG51bGwpO2UudGV4dENsYXNzJiYoci50ZXh0Q2xhc3M9ZS50ZXh0Q2xhc3MpO3ZhciBuPUsodCxyKSxpPVIodCxyLDAsbiwibGVmdCIpLG89Uih0LHIsOTksbiwicmlnaHQiKTtyZXR1cm57Y3J1ZGU6ITAsdG9wOmkudG9wLGxlZnQ6aS5sZWZ0LGJvdHRvbTppLmJvdHRvbSx3aWR0aDooby5yaWdodC1pLmxlZnQpLzEwMH19ZnVuY3Rpb24gWCh0LGUpe3ZhciByPSExO2lmKGUubWFya2VkU3BhbnMpZm9yKHZhciBuPTA7bjxlLm1hcmtlZFNwYW5zOysrbil7dmFyIGk9ZS5tYXJrZWRTcGFuc1tuXTshaS5jb2xsYXBzZWR8fG51bGwhPWkudG8mJmkudG8hPWUudGV4dC5sZW5ndGh8fChyPSEwKX12YXIgbz0hciYmQih0LGUpO2lmKG98fGUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFIodCxlLGUudGV4dC5sZW5ndGgsbyYmby5tZWFzdXJlLCJyaWdodCIpLnJpZ2h0O3ZhciBsPXJuKHQsZSxudWxsLCEwKS5wcmUscz1sLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSk7cmV0dXJuIHVpKHQuZGlzcGxheS5tZWFzdXJlLGwpLGZpKHMpLnJpZ2h0LWZpKHQuZGlzcGxheS5saW5lRGl2KS5sZWZ0fWZ1bmN0aW9uIF8odCl7dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zPTAsdC5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aD10LmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodD1udWxsLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fCh0LmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApLHQuZGlzcGxheS5saW5lTnVtQ2hhcnM9bnVsbH1mdW5jdGlvbiBZKCl7cmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBqKCl7cmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wfWZ1bmN0aW9uICQodCxlLHIsbil7aWYoZS53aWRnZXRzKWZvcih2YXIgaT0wO2k8ZS53aWRnZXRzLmxlbmd0aDsrK2kpaWYoZS53aWRnZXRzW2ldLmFib3ZlKXt2YXIgbz1ZcihlLndpZGdldHNbaV0pO3IudG9wKz1vLHIuYm90dG9tKz1vfWlmKCJsaW5lIj09bilyZXR1cm4gcjtufHwobj0ibG9jYWwiKTt2YXIgbD1Dbih0LGUpO2lmKCJsb2NhbCI9PW4/bCs9SSh0LmRpc3BsYXkpOmwtPXQuZGlzcGxheS52aWV3T2Zmc2V0LCJwYWdlIj09bnx8IndpbmRvdyI9PW4pe3ZhciBzPWZpKHQuZGlzcGxheS5saW5lU3BhY2UpO2wrPXMudG9wKygid2luZG93Ij09bj8wOmooKSk7dmFyIGE9cy5sZWZ0Kygid2luZG93Ij09bj8wOlkoKSk7ci5sZWZ0Kz1hLHIucmlnaHQrPWF9cmV0dXJuIHIudG9wKz1sLHIuYm90dG9tKz1sLHJ9ZnVuY3Rpb24gWih0LGUscil7aWYoImRpdiI9PXIpcmV0dXJuIGU7dmFyIG49ZS5sZWZ0LGk9ZS50b3A7aWYoInBhZ2UiPT1yKW4tPVkoKSxpLT1qKCk7ZWxzZSBpZigibG9jYWwiPT1yfHwhcil7dmFyIG89ZmkodC5kaXNwbGF5LnNpemVyKTtuKz1vLmxlZnQsaSs9by50b3B9dmFyIGw9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7cmV0dXJue2xlZnQ6bi1sLmxlZnQsdG9wOmktbC50b3B9fWZ1bmN0aW9uIHEodCxlLHIsbixpKXtyZXR1cm4gbnx8KG49Z24odC5kb2MsZS5saW5lKSksJCh0LG4sUih0LG4sZS5jaCxudWxsLGkpLHIpfWZ1bmN0aW9uIFEodCxlLHIsbixpKXtmdW5jdGlvbiBvKGUsbyl7dmFyIGw9Uih0LG4sZSxpLG8/InJpZ2h0IjoibGVmdCIpO3JldHVybiBvP2wubGVmdD1sLnJpZ2h0OmwucmlnaHQ9bC5sZWZ0LCQodCxuLGwscil9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXNbZV0sbj1yLmxldmVsJTI7cmV0dXJuIHQ9PW1pKHIpJiZlJiZyLmxldmVsPHNbZS0xXS5sZXZlbD8ocj1zWy0tZV0sdD12aShyKS0oci5sZXZlbCUyPzA6MSksbj0hMCk6dD09dmkocikmJmU8cy5sZW5ndGgtMSYmci5sZXZlbDxzW2UrMV0ubGV2ZWwmJihyPXNbKytlXSx0PW1pKHIpLXIubGV2ZWwlMixuPSExKSxuJiZ0PT1yLnRvJiZ0PnIuZnJvbT9vKHQtMSk6byh0LG4pfW49bnx8Z24odC5kb2MsZS5saW5lKSxpfHwoaT1WKHQsbikpO3ZhciBzPXduKG4pLGE9ZS5jaDtpZighcylyZXR1cm4gbyhhKTt2YXIgdT1MaShzLGEpLGM9bChhLHUpO3JldHVybiBudWxsIT1SbyYmKGMub3RoZXI9bChhLFJvKSksY31mdW5jdGlvbiBKKHQsZSxyLG4pe3ZhciBpPW5ldyBZZSh0LGUpO3JldHVybiBpLnhSZWw9bixyJiYoaS5vdXRzaWRlPSEwKSxpfWZ1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj10LmRvYztpZihyKz10LmRpc3BsYXkudmlld09mZnNldCwwPnIpcmV0dXJuIEoobi5maXJzdCwwLCEwLC0xKTt2YXIgaT14bihuLHIpLG89bi5maXJzdCtuLnNpemUtMTtpZihpPm8pcmV0dXJuIEoobi5maXJzdCtuLnNpemUtMSxnbihuLG8pLnRleHQubGVuZ3RoLCEwLDEpO2ZvcigwPmUmJihlPTApOzspe3ZhciBsPWduKG4saSkscz1lZSh0LGwsaSxlLHIpLGE9QnIobCksdT1hJiZhLmZpbmQoKTtpZighYXx8IShzLmNoPnUuZnJvbS5jaHx8cy5jaD09dS5mcm9tLmNoJiZzLnhSZWw+MCkpcmV0dXJuIHM7aT11LnRvLmxpbmV9fWZ1bmN0aW9uIGVlKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyhuKXt2YXIgaT1RKHQsWWUocixuKSwibGluZSIsZSx1KTtyZXR1cm4gcz0hMCxsPmkuYm90dG9tP2kubGVmdC1hOmw8aS50b3A/aS5sZWZ0K2E6KHM9ITEsaS5sZWZ0KX12YXIgbD1pLUNuKHQsZSkscz0hMSxhPTIqdC5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgsdT1WKHQsZSksYz13bihlKSxmPWUudGV4dC5sZW5ndGgsaD15aShlKSxkPWJpKGUpLHA9byhoKSxnPXMsbT1vKGQpLHY9cztpZihuPm0pcmV0dXJuIEoocixkLHYsMSk7Zm9yKDs7KXtpZihjP2Q9PWh8fGQ9PVNpKGUsaCwxKToxPj1kLWgpe2Zvcih2YXIgeT1wPm58fG0tbj49bi1wP2g6ZCxiPW4tKHk9PWg/cDptKTtEby50ZXN0KGUudGV4dC5jaGFyQXQoeSkpOykrK3k7dmFyIHg9SihyLHkseT09aD9nOnYsMD5iPy0xOmI/MTowKTtyZXR1cm4geH12YXIgQz1NYXRoLmNlaWwoZi8yKSx3PWgrQztpZihjKXt3PWg7Zm9yKHZhciBMPTA7Qz5MOysrTCl3PVNpKGUsdywxKX12YXIgaz1vKHcpO2s+bj8oZD13LG09aywodj1zKSYmKG0rPTFlMyksZj1DKTooaD13LHA9ayxnPXMsZi09Qyl9fWZ1bmN0aW9uIHJlKHQpe2lmKG51bGwhPXQuY2FjaGVkVGV4dEhlaWdodClyZXR1cm4gdC5jYWNoZWRUZXh0SGVpZ2h0O2lmKG51bGw9PV9pKXtfaT1zaSgicHJlIik7Zm9yKHZhciBlPTA7NDk+ZTsrK2UpX2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSksX2kuYXBwZW5kQ2hpbGQoc2koImJyIikpO19pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IikpfXVpKHQubWVhc3VyZSxfaSk7dmFyIHI9X2kub2Zmc2V0SGVpZ2h0LzUwO3JldHVybiByPjMmJih0LmNhY2hlZFRleHRIZWlnaHQ9ciksYWkodC5tZWFzdXJlKSxyfHwxfWZ1bmN0aW9uIG5lKHQpe2lmKG51bGwhPXQuY2FjaGVkQ2hhcldpZHRoKXJldHVybiB0LmNhY2hlZENoYXJXaWR0aDt2YXIgZT1zaSgic3BhbiIsIngiKSxyPXNpKCJwcmUiLFtlXSk7dWkodC5tZWFzdXJlLHIpO3ZhciBuPWUub2Zmc2V0V2lkdGg7cmV0dXJuIG4+MiYmKHQuY2FjaGVkQ2hhcldpZHRoPW4pLG58fDEwfWZ1bmN0aW9uIGllKHQpe3QuY3VyT3A9e2NoYW5nZXM6W10sZm9yY2VVcGRhdGU6ITEsdXBkYXRlSW5wdXQ6bnVsbCx1c2VyU2VsQ2hhbmdlOm51bGwsdGV4dENoYW5nZWQ6bnVsbCxzZWxlY3Rpb25DaGFuZ2VkOiExLGN1cnNvckFjdGl2aXR5OiExLHVwZGF0ZU1heExpbmU6ITEsdXBkYXRlU2Nyb2xsUG9zOiExLGlkOisrSml9LE1vKyt8fChTbz1bXSl9ZnVuY3Rpb24gb2UodCl7dmFyIGU9dC5jdXJPcCxyPXQuZG9jLG49dC5kaXNwbGF5O2lmKHQuY3VyT3A9bnVsbCxlLnVwZGF0ZU1heExpbmUmJmYodCksbi5tYXhMaW5lQ2hhbmdlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJm4ubWF4TGluZSl7dmFyIGk9WCh0LG4ubWF4TGluZSk7bi5zaXplci5zdHlsZS5taW5XaWR0aD1NYXRoLm1heCgwLGkrMytUbykrInB4IixuLm1heExpbmVDaGFuZ2VkPSExO3ZhciBvPU1hdGgubWF4KDAsbi5zaXplci5vZmZzZXRMZWZ0K24uc2l6ZXIub2Zmc2V0V2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCk7bzxyLnNjcm9sbExlZnQmJiFlLnVwZGF0ZVNjcm9sbFBvcyYmTWUodCxNYXRoLm1pbihuLnNjcm9sbGVyLnNjcm9sbExlZnQsbyksITApfXZhciBsLHM7aWYoZS51cGRhdGVTY3JvbGxQb3MpbD1lLnVwZGF0ZVNjcm9sbFBvcztlbHNlIGlmKGUuc2VsZWN0aW9uQ2hhbmdlZCYmbi5zY3JvbGxlci5jbGllbnRIZWlnaHQpe3ZhciBhPVEodCxyLnNlbC5oZWFkKTtsPXVyKHQsYS5sZWZ0LGEudG9wLGEubGVmdCxhLmJvdHRvbSl9aWYoKGUuY2hhbmdlcy5sZW5ndGh8fGUuZm9yY2VVcGRhdGV8fGwmJm51bGwhPWwuc2Nyb2xsVG9wKSYmKHM9Yih0LGUuY2hhbmdlcyxsJiZsLnNjcm9sbFRvcCxlLmZvcmNlVXBkYXRlKSx0LmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0JiYodC5kb2Muc2Nyb2xsVG9wPXQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApKSwhcyYmZS5zZWxlY3Rpb25DaGFuZ2VkJiZBKHQpLGUudXBkYXRlU2Nyb2xsUG9zKXt2YXIgdT1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LW4uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LGwuc2Nyb2xsVG9wKSksYz1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCxsLnNjcm9sbExlZnQpKTtuLnNjcm9sbGVyLnNjcm9sbFRvcD1uLnNjcm9sbGJhclYuc2Nyb2xsVG9wPXIuc2Nyb2xsVG9wPXUsbi5zY3JvbGxlci5zY3JvbGxMZWZ0PW4uc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PXIuc2Nyb2xsTGVmdD1jLGcodCksZS5zY3JvbGxUb1BvcyYmc3IodCxRZSh0LmRvYyxlLnNjcm9sbFRvUG9zLmZyb20pLFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MudG8pLGUuc2Nyb2xsVG9Qb3MubWFyZ2luKX1lbHNlIGwmJmxyKHQpO2Uuc2VsZWN0aW9uQ2hhbmdlZCYmRCh0KSx0LnN0YXRlLmZvY3VzZWQmJmUudXBkYXRlSW5wdXQmJmRlKHQsZS51c2VyU2VsQ2hhbmdlKTt2YXIgaD1lLm1heWJlSGlkZGVuTWFya2VycyxkPWUubWF5YmVVbmhpZGRlbk1hcmtlcnM7aWYoaClmb3IodmFyIHA9MDtwPGgubGVuZ3RoOysrcCloW3BdLmxpbmVzLmxlbmd0aHx8S24oaFtwXSwiaGlkZSIpO2lmKGQpZm9yKHZhciBwPTA7cDxkLmxlbmd0aDsrK3ApZFtwXS5saW5lcy5sZW5ndGgmJktuKGRbcF0sInVuaGlkZSIpO3ZhciBtO2lmKC0tTW98fChtPVNvLFNvPW51bGwpLGUudGV4dENoYW5nZWQmJktuKHQsImNoYW5nZSIsdCxlLnRleHRDaGFuZ2VkKSxlLmN1cnNvckFjdGl2aXR5JiZLbih0LCJjdXJzb3JBY3Rpdml0eSIsdCksbSlmb3IodmFyIHA9MDtwPG0ubGVuZ3RoOysrcCltW3BdKCl9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10fHx0aGlzLG49IXIuY3VyT3A7biYmaWUocik7dHJ5e3ZhciBpPWUuYXBwbHkocixhcmd1bWVudHMpfWZpbmFsbHl7biYmb2Uocil9cmV0dXJuIGl9fWZ1bmN0aW9uIHNlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5jbSYmIXRoaXMuY20uY3VyT3A7ciYmaWUodGhpcy5jbSk7dHJ5e2U9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtyJiZvZSh0aGlzLmNtKX1yZXR1cm4gZX19ZnVuY3Rpb24gYWUodCxlKXt2YXIgcixuPSF0LmN1ck9wO24mJmllKHQpO3RyeXtyPWUoKX1maW5hbGx5e24mJm9lKHQpfXJldHVybiByfWZ1bmN0aW9uIHVlKHQsZSxyLG4pe251bGw9PWUmJihlPXQuZG9jLmZpcnN0KSxudWxsPT1yJiYocj10LmRvYy5maXJzdCt0LmRvYy5zaXplKSx0LmN1ck9wLmNoYW5nZXMucHVzaCh7ZnJvbTplLHRvOnIsZGlmZjpufSl9ZnVuY3Rpb24gY2UodCl7dC5kaXNwbGF5LnBvbGxpbmdGYXN0fHx0LmRpc3BsYXkucG9sbC5zZXQodC5vcHRpb25zLnBvbGxJbnRlcnZhbCxmdW5jdGlvbigpe2hlKHQpLHQuc3RhdGUuZm9jdXNlZCYmY2UodCl9KX1mdW5jdGlvbiBmZSh0KXtmdW5jdGlvbiBlKCl7dmFyIG49aGUodCk7bnx8cj8odC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExLGNlKHQpKToocj0hMCx0LmRpc3BsYXkucG9sbC5zZXQoNjAsZSkpfXZhciByPSExO3QuZGlzcGxheS5wb2xsaW5nRmFzdD0hMCx0LmRpc3BsYXkucG9sbC5zZXQoMjAsZSl9ZnVuY3Rpb24gaGUodCl7dmFyIGU9dC5kaXNwbGF5LmlucHV0LHI9dC5kaXNwbGF5LnByZXZJbnB1dCxuPXQuZG9jLGk9bi5zZWw7aWYoIXQuc3RhdGUuZm9jdXNlZHx8SW8oZSl8fGdlKHQpfHx0LnN0YXRlLmRpc2FibGVJbnB1dClyZXR1cm4hMTt0LnN0YXRlLnBhc3RlSW5jb21pbmcmJnQuc3RhdGUuZmFrZWRMYXN0Q2hhciYmKGUudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxlLnZhbHVlLmxlbmd0aC0xKSx0LnN0YXRlLmZha2VkTGFzdENoYXI9ITEpO3ZhciBvPWUudmFsdWU7aWYobz09ciYmamUoaS5mcm9tLGkudG8pKXJldHVybiExO2lmKEFpJiYhTmkmJnQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj09PW8pcmV0dXJuIGRlKHQsITApLCExO3ZhciBsPSF0LmN1ck9wO2wmJmllKHQpLGkuc2hpZnQ9ITE7Zm9yKHZhciBzPTAsYT1NYXRoLm1pbihyLmxlbmd0aCxvLmxlbmd0aCk7YT5zJiZyLmNoYXJDb2RlQXQocyk9PW8uY2hhckNvZGVBdChzKTspKytzO3ZhciB1PWkuZnJvbSxjPWkudG87czxyLmxlbmd0aD91PVllKHUubGluZSx1LmNoLShyLmxlbmd0aC1zKSk6dC5zdGF0ZS5vdmVyd3JpdGUmJmplKHUsYykmJiF0LnN0YXRlLnBhc3RlSW5jb21pbmcmJihjPVllKGMubGluZSxNYXRoLm1pbihnbihuLGMubGluZSkudGV4dC5sZW5ndGgsYy5jaCsoby5sZW5ndGgtcykpKSk7dmFyIGY9dC5jdXJPcC51cGRhdGVJbnB1dCxoPXtmcm9tOnUsdG86Yyx0ZXh0OnpvKG8uc2xpY2UocykpLG9yaWdpbjp0LnN0YXRlLnBhc3RlSW5jb21pbmc/InBhc3RlIjoiK2lucHV0In07cmV0dXJuIEJlKHQuZG9jLGgsImVuZCIpLHQuY3VyT3AudXBkYXRlSW5wdXQ9ZixVbih0LCJpbnB1dFJlYWQiLHQsaCksby5sZW5ndGg+MWUzfHxvLmluZGV4T2YoIlxuIik+LTE/ZS52YWx1ZT10LmRpc3BsYXkucHJldklucHV0PSIiOnQuZGlzcGxheS5wcmV2SW5wdXQ9byxsJiZvZSh0KSx0LnN0YXRlLnBhc3RlSW5jb21pbmc9ITEsITB9ZnVuY3Rpb24gZGUodCxlKXt2YXIgcixuLGk9dC5kb2M7aWYoamUoaS5zZWwuZnJvbSxpLnNlbC50bykpZSYmKHQuZGlzcGxheS5wcmV2SW5wdXQ9dC5kaXNwbGF5LmlucHV0LnZhbHVlPSIiLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCkpO2Vsc2V7dC5kaXNwbGF5LnByZXZJbnB1dD0iIixyPUZvJiYoaS5zZWwudG8ubGluZS1pLnNlbC5mcm9tLmxpbmU+MTAwfHwobj10LmdldFNlbGVjdGlvbigpKS5sZW5ndGg+MWUzKTt2YXIgbz1yPyItIjpufHx0LmdldFNlbGVjdGlvbigpO3QuZGlzcGxheS5pbnB1dC52YWx1ZT1vLHQuc3RhdGUuZm9jdXNlZCYmSm4odC5kaXNwbGF5LmlucHV0KSxBaSYmIU5pJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW8pfXQuZGlzcGxheS5pbmFjY3VyYXRlU2VsZWN0aW9uPXJ9ZnVuY3Rpb24gcGUodCl7Im5vY3Vyc29yIj09dC5vcHRpb25zLnJlYWRPbmx5fHxWaSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09dC5kaXNwbGF5LmlucHV0fHx0LmRpc3BsYXkuaW5wdXQuZm9jdXMoKX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gdC5vcHRpb25zLnJlYWRPbmx5fHx0LmRvYy5jYW50RWRpdH1mdW5jdGlvbiBtZSh0KXtmdW5jdGlvbiBlKCl7dC5zdGF0ZS5mb2N1c2VkJiZzZXRUaW1lb3V0KGlpKHBlLHQpLDApfWZ1bmN0aW9uIHIoKXtudWxsPT1zJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz1udWxsLGwuY2FjaGVkQ2hhcldpZHRoPWwuY2FjaGVkVGV4dEhlaWdodD1Pbz1udWxsLF8odCksYWUodCxpaSh1ZSx0KSl9LDEwMCkpfWZ1bmN0aW9uIG4oKXtmb3IodmFyIHQ9bC53cmFwcGVyLnBhcmVudE5vZGU7dCYmdCE9ZG9jdW1lbnQuYm9keTt0PXQucGFyZW50Tm9kZSk7dD9zZXRUaW1lb3V0KG4sNWUzKTpWbih3aW5kb3csInJlc2l6ZSIscil9ZnVuY3Rpb24gaShlKXtYbih0LGUpfHx0Lm9wdGlvbnMub25EcmFnRXZlbnQmJnQub3B0aW9ucy5vbkRyYWdFdmVudCh0LEVuKGUpKXx8UG4oZSl9ZnVuY3Rpb24gbygpe2wuaW5hY2N1cmF0ZVNlbGVjdGlvbiYmKGwucHJldklucHV0PSIiLGwuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxsLmlucHV0LnZhbHVlPXQuZ2V0U2VsZWN0aW9uKCksSm4obC5pbnB1dCkpfXZhciBsPXQuZGlzcGxheTtHbihsLnNjcm9sbGVyLCJtb3VzZWRvd24iLGxlKHQsYmUpKSxBaT9HbihsLnNjcm9sbGVyLCJkYmxjbGljayIsbGUodCxmdW5jdGlvbihlKXtpZighWG4odCxlKSl7dmFyIHI9eWUodCxlKTtpZihyJiYhd2UodCxlKSYmIXZlKHQuZGlzcGxheSxlKSl7em4oZSk7dmFyIG49bXIoZ24odC5kb2Msci5saW5lKS50ZXh0LHIpO2VyKHQuZG9jLG4uZnJvbSxuLnRvKX19fSkpOkduKGwuc2Nyb2xsZXIsImRibGNsaWNrIixmdW5jdGlvbihlKXtYbih0LGUpfHx6bihlKX0pLEduKGwubGluZVNwYWNlLCJzZWxlY3RzdGFydCIsZnVuY3Rpb24odCl7dmUobCx0KXx8em4odCl9KSxaaXx8R24obC5zY3JvbGxlciwiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe0llKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJihTZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsVG9wKSxNZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwhMCksS24odCwic2Nyb2xsIix0KSl9KSxHbihsLnNjcm9sbGJhclYsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmU2UodCxsLnNjcm9sbGJhclYuc2Nyb2xsVG9wKX0pLEduKGwuc2Nyb2xsYmFySCwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZNZSh0LGwuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KX0pLEduKGwuc2Nyb2xsZXIsIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGUpe1RlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJET01Nb3VzZVNjcm9sbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsYmFySCwibW91c2Vkb3duIixlKSxHbihsLnNjcm9sbGJhclYsIm1vdXNlZG93biIsZSksR24obC53cmFwcGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC53cmFwcGVyLnNjcm9sbFRvcD1sLndyYXBwZXIuc2Nyb2xsTGVmdD0wfSk7dmFyIHM7R24od2luZG93LCJyZXNpemUiLHIpLHNldFRpbWVvdXQobiw1ZTMpLEduKGwuaW5wdXQsImtleXVwIixsZSh0LGZ1bmN0aW9uKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbktleUV2ZW50JiZ0Lm9wdGlvbnMub25LZXlFdmVudCh0LEVuKGUpKXx8MTY9PWUua2V5Q29kZSYmKHQuZG9jLnNlbC5zaGlmdD0hMSl9KSksR24obC5pbnB1dCwiaW5wdXQiLGZ1bmN0aW9uKCl7QWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW51bGwpLGZlKHQpfSksR24obC5pbnB1dCwia2V5ZG93biIsbGUodCxXZSkpLEduKGwuaW5wdXQsImtleXByZXNzIixsZSh0LE9lKSksR24obC5pbnB1dCwiZm9jdXMiLGlpKEVlLHQpKSxHbihsLmlucHV0LCJibHVyIixpaSh6ZSx0KSksdC5vcHRpb25zLmRyYWdEcm9wJiYoR24obC5zY3JvbGxlciwiZHJhZ3N0YXJ0IixmdW5jdGlvbihlKXtrZSh0LGUpfSksR24obC5zY3JvbGxlciwiZHJhZ2VudGVyIixpKSxHbihsLnNjcm9sbGVyLCJkcmFnb3ZlciIsaSksR24obC5zY3JvbGxlciwiZHJvcCIsbGUodCxMZSkpKSxHbihsLnNjcm9sbGVyLCJwYXN0ZSIsZnVuY3Rpb24oZSl7dmUobCxlKXx8KHBlKHQpLGZlKHQpKX0pLEduKGwuaW5wdXQsInBhc3RlIixmdW5jdGlvbigpe2lmKFdpJiYhdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYhKG5ldyBEYXRlLXQuc3RhdGUubGFzdE1pZGRsZURvd248MjAwKSl7dmFyIGU9bC5pbnB1dC5zZWxlY3Rpb25TdGFydCxyPWwuaW5wdXQuc2VsZWN0aW9uRW5kO2wuaW5wdXQudmFsdWUrPSIkIixsLmlucHV0LnNlbGVjdGlvblN0YXJ0PWUsbC5pbnB1dC5zZWxlY3Rpb25FbmQ9cix0LnN0YXRlLmZha2VkTGFzdENoYXI9ITB9dC5zdGF0ZS5wYXN0ZUluY29taW5nPSEwLGZlKHQpfSksR24obC5pbnB1dCwiY3V0IixvKSxHbihsLmlucHV0LCJjb3B5IixvKSxGaSYmR24obC5zaXplciwibW91c2V1cCIsZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0JiZsLmlucHV0LmJsdXIoKSxwZSh0KX0pfWZ1bmN0aW9uIHZlKHQsZSl7Zm9yKHZhciByPVJuKGUpO3IhPXQud3JhcHBlcjtyPXIucGFyZW50Tm9kZSlpZighcnx8ci5pZ25vcmVFdmVudHN8fHIucGFyZW50Tm9kZT09dC5zaXplciYmciE9dC5tb3ZlcilyZXR1cm4hMH1mdW5jdGlvbiB5ZSh0LGUscil7dmFyIG49dC5kaXNwbGF5O2lmKCFyKXt2YXIgaT1SbihlKTtpZihpPT1uLnNjcm9sbGJhckh8fGk9PW4uc2Nyb2xsYmFySC5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhclZ8fGk9PW4uc2Nyb2xsYmFyVi5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhckZpbGxlcnx8aT09bi5ndXR0ZXJGaWxsZXIpcmV0dXJuIG51bGx9dmFyIG8sbCxzPWZpKG4ubGluZVNwYWNlKTt0cnl7bz1lLmNsaWVudFgsbD1lLmNsaWVudFl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9cmV0dXJuIHRlKHQsby1zLmxlZnQsbC1zLnRvcCl9ZnVuY3Rpb24gYmUodCl7ZnVuY3Rpb24gZSh0KXtpZighamUodix0KSl7aWYodj10LCJzaW5nbGUiPT1jKXJldHVybiBlcihpLmRvYyxRZShsLGEpLHQpLHZvaWQgMDsKaWYoZz1RZShsLGcpLG09UWUobCxtKSwiZG91YmxlIj09Yyl7dmFyIGU9bXIoZ24obCx0LmxpbmUpLnRleHQsdCk7JGUodCxnKT9lcihpLmRvYyxlLmZyb20sbSk6ZXIoaS5kb2MsZyxlLnRvKX1lbHNlInRyaXBsZSI9PWMmJigkZSh0LGcpP2VyKGkuZG9jLG0sUWUobCxZZSh0LmxpbmUsMCkpKTplcihpLmRvYyxnLFFlKGwsWWUodC5saW5lKzEsMCkpKSl9fWZ1bmN0aW9uIHIodCl7dmFyIG49KytiLHM9eWUoaSx0LCEwKTtpZihzKWlmKGplKHMsaCkpe3ZhciBhPXQuY2xpZW50WTx5LnRvcD8tMjA6dC5jbGllbnRZPnkuYm90dG9tPzIwOjA7YSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmKG8uc2Nyb2xsZXIuc2Nyb2xsVG9wKz1hLHIodCkpfSksNTApfWVsc2V7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKSxoPXMsZShzKTt2YXIgdT1wKG8sbCk7KHMubGluZT49dS50b3x8cy5saW5lPHUuZnJvbSkmJnNldFRpbWVvdXQobGUoaSxmdW5jdGlvbigpe2I9PW4mJnIodCl9KSwxNTApfX1mdW5jdGlvbiBuKHQpe2I9MS8wLHpuKHQpLHBlKGkpLFZuKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLFZuKGRvY3VtZW50LCJtb3VzZXVwIixDKX1pZighWG4odGhpcyx0KSl7dmFyIGk9dGhpcyxvPWkuZGlzcGxheSxsPWkuZG9jLHM9bC5zZWw7aWYocy5zaGlmdD10LnNoaWZ0S2V5LHZlKG8sdCkpcmV0dXJuIFdpfHwoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe28uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwfSwxMDApKSx2b2lkIDA7aWYoIXdlKGksdCkpe3ZhciBhPXllKGksdCk7c3dpdGNoKEJuKHQpKXtjYXNlIDM6cmV0dXJuIFppJiZJZS5jYWxsKGksaSx0KSx2b2lkIDA7Y2FzZSAyOnJldHVybiBXaSYmKGkuc3RhdGUubGFzdE1pZGRsZURvd249K25ldyBEYXRlKSxhJiZlcihpLmRvYyxhKSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx6bih0KSx2b2lkIDB9aWYoIWEpcmV0dXJuIFJuKHQpPT1vLnNjcm9sbGVyJiZ6bih0KSx2b2lkIDA7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKTt2YXIgdT0rbmV3IERhdGUsYz0ic2luZ2xlIjtpZihqaSYmamkudGltZT51LTQwMCYmamUoamkucG9zLGEpKWM9InRyaXBsZSIsem4odCksc2V0VGltZW91dChpaShwZSxpKSwyMCksdnIoaSxhLmxpbmUpO2Vsc2UgaWYoWWkmJllpLnRpbWU+dS00MDAmJmplKFlpLnBvcyxhKSl7Yz0iZG91YmxlIixqaT17dGltZTp1LHBvczphfSx6bih0KTt2YXIgZj1tcihnbihsLGEubGluZSkudGV4dCxhKTtlcihpLmRvYyxmLmZyb20sZi50byl9ZWxzZSBZaT17dGltZTp1LHBvczphfTt2YXIgaD1hO2lmKGkub3B0aW9ucy5kcmFnRHJvcCYmV28mJiFnZShpKSYmIWplKHMuZnJvbSxzLnRvKSYmISRlKGEscy5mcm9tKSYmISRlKHMudG8sYSkmJiJzaW5nbGUiPT1jKXt2YXIgZD1sZShpLGZ1bmN0aW9uKGUpe1dpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEpLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PSExLFZuKGRvY3VtZW50LCJtb3VzZXVwIixkKSxWbihvLnNjcm9sbGVyLCJkcm9wIixkKSxNYXRoLmFicyh0LmNsaWVudFgtZS5jbGllbnRYKStNYXRoLmFicyh0LmNsaWVudFktZS5jbGllbnRZKTwxMCYmKHpuKGUpLGVyKGkuZG9jLGEpLHBlKGkpKX0pO3JldHVybiBXaSYmKG8uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwKSxpLnN0YXRlLmRyYWdnaW5nVGV4dD1kLG8uc2Nyb2xsZXIuZHJhZ0Ryb3AmJm8uc2Nyb2xsZXIuZHJhZ0Ryb3AoKSxHbihkb2N1bWVudCwibW91c2V1cCIsZCksR24oby5zY3JvbGxlciwiZHJvcCIsZCksdm9pZCAwfXpuKHQpLCJzaW5nbGUiPT1jJiZlcihpLmRvYyxRZShsLGEpKTt2YXIgZz1zLmZyb20sbT1zLnRvLHY9YSx5PWZpKG8ud3JhcHBlciksYj0wLHg9bGUoaSxmdW5jdGlvbih0KXtBaXx8Qm4odCk/cih0KTpuKHQpfSksQz1sZShpLG4pO0duKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixDKX19fWZ1bmN0aW9uIHhlKHQsZSxyLG4saSl7dHJ5e3ZhciBvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4hMX1pZihvPj1NYXRoLmZsb29yKGZpKHQuZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpcmV0dXJuITE7biYmem4oZSk7dmFyIHM9dC5kaXNwbGF5LGE9Zmkocy5saW5lRGl2KTtpZihsPmEuYm90dG9tfHwhWW4odCxyKSlyZXR1cm4gRm4oZSk7bC09YS50b3Atcy52aWV3T2Zmc2V0O2Zvcih2YXIgdT0wO3U8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysrdSl7dmFyIGM9cy5ndXR0ZXJzLmNoaWxkTm9kZXNbdV07aWYoYyYmZmkoYykucmlnaHQ+PW8pe3ZhciBmPXhuKHQuZG9jLGwpLGg9dC5vcHRpb25zLmd1dHRlcnNbdV07cmV0dXJuIGkodCxyLHQsZixoLGUpLEZuKGUpfX19ZnVuY3Rpb24gQ2UodCxlKXtyZXR1cm4gWW4odCwiZ3V0dGVyQ29udGV4dE1lbnUiKT94ZSh0LGUsImd1dHRlckNvbnRleHRNZW51IiwhMSxLbik6ITF9ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4geGUodCxlLCJndXR0ZXJDbGljayIsITAsVW4pfWZ1bmN0aW9uIExlKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHx2ZShlLmRpc3BsYXksdCl8fGUub3B0aW9ucy5vbkRyYWdFdmVudCYmZS5vcHRpb25zLm9uRHJhZ0V2ZW50KGUsRW4odCkpKSl7em4odCksQWkmJih0bz0rbmV3IERhdGUpO3ZhciByPXllKGUsdCwhMCksbj10LmRhdGFUcmFuc2Zlci5maWxlcztpZihyJiYhZ2UoZSkpaWYobiYmbi5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIGk9bi5sZW5ndGgsbz1BcnJheShpKSxsPTAscz1mdW5jdGlvbih0LG4pe3ZhciBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPWZ1bmN0aW9uKCl7b1tuXT1zLnJlc3VsdCwrK2w9PWkmJihyPVFlKGUuZG9jLHIpLEJlKGUuZG9jLHtmcm9tOnIsdG86cix0ZXh0OnpvKG8uam9pbigiXG4iKSksb3JpZ2luOiJwYXN0ZSJ9LCJhcm91bmQiKSl9LHMucmVhZEFzVGV4dCh0KX0sYT0wO2k+YTsrK2EpcyhuW2FdLGEpO2Vsc2V7aWYoZS5zdGF0ZS5kcmFnZ2luZ1RleHQmJiEkZShyLGUuZG9jLnNlbC5mcm9tKSYmISRlKGUuZG9jLnNlbC50byxyKSlyZXR1cm4gZS5zdGF0ZS5kcmFnZ2luZ1RleHQodCksc2V0VGltZW91dChpaShwZSxlKSwyMCksdm9pZCAwO3RyeXt2YXIgbz10LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7aWYobyl7dmFyIHU9ZS5kb2Muc2VsLmZyb20sYz1lLmRvYy5zZWwudG87bnIoZS5kb2MscixyKSxlLnN0YXRlLmRyYWdnaW5nVGV4dCYmX2UoZS5kb2MsIiIsdSxjLCJwYXN0ZSIpLGUucmVwbGFjZVNlbGVjdGlvbihvLG51bGwsInBhc3RlIikscGUoZSl9fWNhdGNoKHQpe319fX1mdW5jdGlvbiBrZSh0LGUpe2lmKEFpJiYoIXQuc3RhdGUuZHJhZ2dpbmdUZXh0fHwrbmV3IERhdGUtdG88MTAwKSlyZXR1cm4gUG4oZSksdm9pZCAwO2lmKCFYbih0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt2YXIgcj10LmdldFNlbGVjdGlvbigpO2lmKGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLHIpLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSYmIUlpKXt2YXIgbj1zaSgiaW1nIixudWxsLG51bGwsInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyIpO24uc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSIsemkmJihuLndpZHRoPW4uaGVpZ2h0PTEsdC5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQobiksbi5fdG9wPW4ub2Zmc2V0VG9wKSxlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UobiwwLDApLHppJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9fX1mdW5jdGlvbiBTZSh0LGUpe01hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1lKTwyfHwodC5kb2Muc2Nyb2xsVG9wPWUsVGl8fGIodCxbXSxlKSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT1lJiYodC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ZSksVGkmJmIodCxbXSksVyh0LDEwMCkpfWZ1bmN0aW9uIE1lKHQsZSxyKXsocj9lPT10LmRvYy5zY3JvbGxMZWZ0Ok1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtZSk8Mil8fChlPU1hdGgubWluKGUsdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoLXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCksdC5kb2Muc2Nyb2xsTGVmdD1lLGcodCksdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0IT1lJiYodC5kaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdD1lKSl9ZnVuY3Rpb24gVGUodCxlKXt2YXIgcj1lLndoZWVsRGVsdGFYLG49ZS53aGVlbERlbHRhWTtudWxsPT1yJiZlLmRldGFpbCYmZS5heGlzPT1lLkhPUklaT05UQUxfQVhJUyYmKHI9ZS5kZXRhaWwpLG51bGw9PW4mJmUuZGV0YWlsJiZlLmF4aXM9PWUuVkVSVElDQUxfQVhJUz9uPWUuZGV0YWlsOm51bGw9PW4mJihuPWUud2hlZWxEZWx0YSk7dmFyIGk9dC5kaXNwbGF5LG89aS5zY3JvbGxlcjtpZihyJiZvLnNjcm9sbFdpZHRoPm8uY2xpZW50V2lkdGh8fG4mJm8uc2Nyb2xsSGVpZ2h0Pm8uY2xpZW50SGVpZ2h0KXtpZihuJiZLaSYmV2kpZm9yKHZhciBsPWUudGFyZ2V0O2whPW87bD1sLnBhcmVudE5vZGUpaWYobC5saW5lT2JqKXt0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PWw7YnJlYWt9aWYociYmIVRpJiYhemkmJm51bGwhPXJvKXJldHVybiBuJiZTZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxUb3ArbipybyxvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodCkpKSxNZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxMZWZ0K3Iqcm8sby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoKSkpLHpuKGUpLGkud2hlZWxTdGFydFg9bnVsbCx2b2lkIDA7aWYobiYmbnVsbCE9cm8pe3ZhciBzPW4qcm8sYT10LmRvYy5zY3JvbGxUb3AsdT1hK2kud3JhcHBlci5jbGllbnRIZWlnaHQ7MD5zP2E9TWF0aC5tYXgoMCxhK3MtNTApOnU9TWF0aC5taW4odC5kb2MuaGVpZ2h0LHUrcys1MCksYih0LFtdLHt0b3A6YSxib3R0b206dX0pfTIwPmVvJiYobnVsbD09aS53aGVlbFN0YXJ0WD8oaS53aGVlbFN0YXJ0WD1vLnNjcm9sbExlZnQsaS53aGVlbFN0YXJ0WT1vLnNjcm9sbFRvcCxpLndoZWVsRFg9cixpLndoZWVsRFk9bixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYobnVsbCE9aS53aGVlbFN0YXJ0WCl7dmFyIHQ9by5zY3JvbGxMZWZ0LWkud2hlZWxTdGFydFgsZT1vLnNjcm9sbFRvcC1pLndoZWVsU3RhcnRZLHI9ZSYmaS53aGVlbERZJiZlL2kud2hlZWxEWXx8dCYmaS53aGVlbERYJiZ0L2kud2hlZWxEWDtpLndoZWVsU3RhcnRYPWkud2hlZWxTdGFydFk9bnVsbCxyJiYocm89KHJvKmVvK3IpLyhlbysxKSwrK2VvKX19LDIwMCkpOihpLndoZWVsRFgrPXIsaS53aGVlbERZKz1uKSl9fWZ1bmN0aW9uIEFlKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPW1vW2VdLCFlKSlyZXR1cm4hMTt0LmRpc3BsYXkucG9sbGluZ0Zhc3QmJmhlKHQpJiYodC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExKTt2YXIgbj10LmRvYyxpPW4uc2VsLnNoaWZ0LG89ITE7dHJ5e2dlKHQpJiYodC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSEwKSxyJiYobi5zZWwuc2hpZnQ9ITEpLG89ZSh0KSE9QW99ZmluYWxseXtuLnNlbC5zaGlmdD1pLHQuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gb31mdW5jdGlvbiBIZSh0KXt2YXIgZT10LnN0YXRlLmtleU1hcHMuc2xpY2UoMCk7cmV0dXJuIHQub3B0aW9ucy5leHRyYUtleXMmJmUucHVzaCh0Lm9wdGlvbnMuZXh0cmFLZXlzKSxlLnB1c2godC5vcHRpb25zLmtleU1hcCksZX1mdW5jdGlvbiBOZSh0LGUpe3ZhciByPUNyKHQub3B0aW9ucy5rZXlNYXApLG49ci5hdXRvO2NsZWFyVGltZW91dChubyksbiYmIUxyKGUpJiYobm89c2V0VGltZW91dChmdW5jdGlvbigpe0NyKHQub3B0aW9ucy5rZXlNYXApPT1yJiYodC5vcHRpb25zLmtleU1hcD1uLmNhbGw/bi5jYWxsKG51bGwsdCk6bixsKHQpKX0sNTApKTt2YXIgaT1rcihlLCEwKSxvPSExO2lmKCFpKXJldHVybiExO3ZhciBzPUhlKHQpO3JldHVybiBvPWUuc2hpZnRLZXk/d3IoIlNoaWZ0LSIraSxzLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSl8fHdyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiBlPy9eZ29bQS1aXS8udGVzdChlKTplLm1vdGlvbik/QWUodCxlKTp2b2lkIDB9KTp3cihpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSl9KSxvJiYoem4oZSksRCh0KSxOaSYmKGUub2xkS2V5Q29kZT1lLmtleUNvZGUsZS5rZXlDb2RlPTApLFVuKHQsImtleUhhbmRsZWQiLHQsaSxlKSksb31mdW5jdGlvbiBEZSh0LGUscil7dmFyIG49d3IoIiciK3IrIiciLEhlKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSk7cmV0dXJuIG4mJih6bihlKSxEKHQpLFVuKHQsImtleUhhbmRsZWQiLHQsIiciK3IrIiciLGUpKSxufWZ1bmN0aW9uIFdlKHQpe3ZhciBlPXRoaXM7aWYoZS5zdGF0ZS5mb2N1c2VkfHxFZShlKSwhKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe0FpJiYyNz09dC5rZXlDb2RlJiYodC5yZXR1cm5WYWx1ZT0hMSk7dmFyIHI9dC5rZXlDb2RlO2UuZG9jLnNlbC5zaGlmdD0xNj09cnx8dC5zaGlmdEtleTt2YXIgbj1OZShlLHQpO3ppJiYob289bj9yOm51bGwsIW4mJjg4PT1yJiYhRm8mJihLaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmZS5yZXBsYWNlU2VsZWN0aW9uKCIiKSl9fWZ1bmN0aW9uIE9lKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHxlLm9wdGlvbnMub25LZXlFdmVudCYmZS5vcHRpb25zLm9uS2V5RXZlbnQoZSxFbih0KSkpKXt2YXIgcj10LmtleUNvZGUsbj10LmNoYXJDb2RlO2lmKHppJiZyPT1vbylyZXR1cm4gb289bnVsbCx6bih0KSx2b2lkIDA7aWYoISh6aSYmKCF0LndoaWNofHx0LndoaWNoPDEwKXx8RmkpfHwhTmUoZSx0KSl7dmFyIGk9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1uP3I6bik7dGhpcy5vcHRpb25zLmVsZWN0cmljQ2hhcnMmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycyYmdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50JiYhZ2UodGhpcykmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGkpPi0xJiZzZXRUaW1lb3V0KGxlKGUsZnVuY3Rpb24oKXtocihlLGUuZG9jLnNlbC50by5saW5lLCJzbWFydCIpfSksNzUpLERlKGUsdCxpKXx8KEFpJiYhTmkmJihlLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUoZSkpfX19ZnVuY3Rpb24gRWUodCl7Im5vY3Vyc29yIiE9dC5vcHRpb25zLnJlYWRPbmx5JiYodC5zdGF0ZS5mb2N1c2VkfHwoS24odCwiZm9jdXMiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMCwtMT09dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pJiYodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3ItZm9jdXNlZCIpLHQuY3VyT3B8fChkZSh0LCEwKSxXaSYmc2V0VGltZW91dChpaShkZSx0LCEwKSwwKSkpLGNlKHQpLEQodCkpfWZ1bmN0aW9uIHplKHQpe3Quc3RhdGUuZm9jdXNlZCYmKEtuKHQsImJsdXIiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMSx0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCIiKSksY2xlYXJJbnRlcnZhbCh0LmRpc3BsYXkuYmxpbmtlciksc2V0VGltZW91dChmdW5jdGlvbigpe3Quc3RhdGUuZm9jdXNlZHx8KHQuZG9jLnNlbC5zaGlmdD0hMSl9LDE1MCl9ZnVuY3Rpb24gSWUodCxlKXtmdW5jdGlvbiByKCl7aWYobnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7dmFyIHQ9aS5pbnB1dC52YWx1ZT0i4oCLIisoamUoby5mcm9tLG8udG8pPyIiOmkuaW5wdXQudmFsdWUpO2kucHJldklucHV0PSLigIsiLGkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9MSxpLmlucHV0LnNlbGVjdGlvbkVuZD10Lmxlbmd0aH19ZnVuY3Rpb24gbigpe2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9dSxOaSYmKGkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9aS5zY3JvbGxlci5zY3JvbGxUb3A9cyksY2UodCksbnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7KCFBaXx8TmkpJiZyKCksY2xlYXJUaW1lb3V0KGlvKTt2YXIgZT0wLG49ZnVuY3Rpb24oKXsiICI9PWkucHJldklucHV0JiYwPT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0P2xlKHQsbW8uc2VsZWN0QWxsKSh0KTplKys8MTA/aW89c2V0VGltZW91dChuLDUwMCk6ZGUodCl9O2lvPXNldFRpbWVvdXQobiwyMDApfX1pZighWG4odCxlLCJjb250ZXh0bWVudSIpKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYy5zZWw7aWYoIXZlKGksZSkmJiFDZSh0LGUpKXt2YXIgbD15ZSh0LGUpLHM9aS5zY3JvbGxlci5zY3JvbGxUb3A7aWYobCYmIXppKXt2YXIgYT10Lm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51O2EmJihqZShvLmZyb20sby50byl8fCRlKGwsby5mcm9tKXx8ISRlKGwsby50bykpJiZsZSh0LG5yKSh0LmRvYyxsLGwpO3ZhciB1PWkuaW5wdXQuc3R5bGUuY3NzVGV4dDtpZihpLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5pbnB1dC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIisoZS5jbGllbnRZLTUpKyJweDsgbGVmdDogIisoZS5jbGllbnRYLTUpKyJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogd2hpdGU7IG91dGxpbmU6IG5vbmU7IisiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IC1tcy1vcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTsiLHBlKHQpLGRlKHQsITApLGplKG8uZnJvbSxvLnRvKSYmKGkuaW5wdXQudmFsdWU9aS5wcmV2SW5wdXQ9IiAiKSxBaSYmIU5pJiZyKCksWmkpe1BuKGUpO3ZhciBjPWZ1bmN0aW9uKCl7Vm4od2luZG93LCJtb3VzZXVwIixjKSxzZXRUaW1lb3V0KG4sMjApfTtHbih3aW5kb3csIm1vdXNldXAiLGMpfWVsc2Ugc2V0VGltZW91dChuLDUwKX19fX1mdW5jdGlvbiBGZSh0LGUscil7aWYoISRlKGUuZnJvbSxyKSlyZXR1cm4gUWUodCxyKTt2YXIgbj1lLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSk7aWYoci5saW5lPmUudG8ubGluZStuKXt2YXIgaT1yLmxpbmUtbixvPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGk+bz9ZZShvLGduKHQsbykudGV4dC5sZW5ndGgpOkplKHIsZ24odCxpKS50ZXh0Lmxlbmd0aCl9aWYoci5saW5lPT1lLnRvLmxpbmUrbilyZXR1cm4gSmUocixRbihlLnRleHQpLmxlbmd0aCsoMT09ZS50ZXh0Lmxlbmd0aD9lLmZyb20uY2g6MCkrZ24odCxlLnRvLmxpbmUpLnRleHQubGVuZ3RoLWUudG8uY2gpO3ZhciBsPXIubGluZS1lLmZyb20ubGluZTtyZXR1cm4gSmUocixlLnRleHRbbF0ubGVuZ3RoKyhsPzA6ZS5mcm9tLmNoKSl9ZnVuY3Rpb24gUGUodCxlLHIpe2lmKHImJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm57YW5jaG9yOkZlKHQsZSxyLmFuY2hvciksaGVhZDpGZSh0LGUsci5oZWFkKX07aWYoInN0YXJ0Ij09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOmUuZnJvbX07dmFyIG49bG8oZSk7aWYoImFyb3VuZCI9PXIpcmV0dXJue2FuY2hvcjplLmZyb20saGVhZDpufTtpZigiZW5kIj09cilyZXR1cm57YW5jaG9yOm4saGVhZDpufTt2YXIgaT1mdW5jdGlvbih0KXtpZigkZSh0LGUuZnJvbSkpcmV0dXJuIHQ7aWYoISRlKGUudG8sdCkpcmV0dXJuIG47dmFyIHI9dC5saW5lK2UudGV4dC5sZW5ndGgtKGUudG8ubGluZS1lLmZyb20ubGluZSktMSxpPXQuY2g7cmV0dXJuIHQubGluZT09ZS50by5saW5lJiYoaSs9bi5jaC1lLnRvLmNoKSxZZShyLGkpfTtyZXR1cm57YW5jaG9yOmkodC5zZWwuYW5jaG9yKSxoZWFkOmkodC5zZWwuaGVhZCl9fWZ1bmN0aW9uIFJlKHQsZSxyKXt2YXIgbj17Y2FuY2VsZWQ6ITEsZnJvbTplLmZyb20sdG86ZS50byx0ZXh0OmUudGV4dCxvcmlnaW46ZS5vcmlnaW4sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxlZD0hMH19O3JldHVybiByJiYobi51cGRhdGU9ZnVuY3Rpb24oZSxyLG4saSl7ZSYmKHRoaXMuZnJvbT1RZSh0LGUpKSxyJiYodGhpcy50bz1RZSh0LHIpKSxuJiYodGhpcy50ZXh0PW4pLHZvaWQgMCE9PWkmJih0aGlzLm9yaWdpbj1pKX0pLEtuKHQsImJlZm9yZUNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVDaGFuZ2UiLHQuY20sbiksbi5jYW5jZWxlZD9udWxsOntmcm9tOm4uZnJvbSx0bzpuLnRvLHRleHQ6bi50ZXh0LG9yaWdpbjpuLm9yaWdpbn19ZnVuY3Rpb24gQmUodCxlLHIsbil7aWYodC5jbSl7aWYoIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sQmUpKHQsZSxyLG4pO2lmKHQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cylyZXR1cm59aWYoIShZbih0LCJiZWZvcmVDaGFuZ2UiKXx8dC5jbSYmWW4odC5jbSwiYmVmb3JlQ2hhbmdlIikpfHwoZT1SZSh0LGUsITApKSl7dmFyIGk9cWkmJiFuJiZGcih0LGUuZnJvbSxlLnRvKTtpZihpKXtmb3IodmFyIG89aS5sZW5ndGgtMTtvPj0xOy0tbylHZSh0LHtmcm9tOmlbb10uZnJvbSx0bzppW29dLnRvLHRleHQ6WyIiXX0pO2kubGVuZ3RoJiZHZSh0LHtmcm9tOmlbMF0uZnJvbSx0bzppWzBdLnRvLHRleHQ6ZS50ZXh0fSxyKX1lbHNlIEdlKHQsZSxyKX19ZnVuY3Rpb24gR2UodCxlLHIpe2lmKDEhPWUudGV4dC5sZW5ndGh8fCIiIT1lLnRleHRbMF18fCFqZShlLmZyb20sZS50bykpe3ZhciBuPVBlKHQsZSxyKTtNbih0LGUsbix0LmNtP3QuY20uY3VyT3AuaWQ6MC8wKSxVZSh0LGUsbix6cih0LGUpKTt2YXIgaT1bXTtkbih0LGZ1bmN0aW9uKHQscil7cnx8LTEhPXRpKGksdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxlKSxpLnB1c2godC5oaXN0b3J5KSksVWUodCxlLG51bGwsenIodCxlKSl9KX19ZnVuY3Rpb24gVmUodCxlKXtpZighdC5jbXx8IXQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cyl7dmFyIHI9dC5oaXN0b3J5LG49KCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLnBvcCgpO2lmKG4pe3ZhciBpPXtjaGFuZ2VzOltdLGFuY2hvckJlZm9yZTpuLmFuY2hvckFmdGVyLGhlYWRCZWZvcmU6bi5oZWFkQWZ0ZXIsYW5jaG9yQWZ0ZXI6bi5hbmNob3JCZWZvcmUsaGVhZEFmdGVyOm4uaGVhZEJlZm9yZSxnZW5lcmF0aW9uOnIuZ2VuZXJhdGlvbn07KCJ1bmRvIj09ZT9yLnVuZG9uZTpyLmRvbmUpLnB1c2goaSksci5nZW5lcmF0aW9uPW4uZ2VuZXJhdGlvbnx8KytyLm1heEdlbmVyYXRpb247Zm9yKHZhciBvPVluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSxsPW4uY2hhbmdlcy5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHM9bi5jaGFuZ2VzW2xdO2lmKHMub3JpZ2luPWUsbyYmIVJlKHQscywhMSkpcmV0dXJuKCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLmxlbmd0aD0wLHZvaWQgMDtpLmNoYW5nZXMucHVzaChTbih0LHMpKTt2YXIgYT1sP1BlKHQscyxudWxsKTp7YW5jaG9yOm4uYW5jaG9yQmVmb3JlLGhlYWQ6bi5oZWFkQmVmb3JlfTtVZSh0LHMsYSxJcih0LHMpKTt2YXIgdT1bXTtkbih0LGZ1bmN0aW9uKHQsZSl7ZXx8LTEhPXRpKHUsdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxzKSx1LnB1c2godC5oaXN0b3J5KSksVWUodCxzLG51bGwsSXIodCxzKSl9KX19fX1mdW5jdGlvbiBLZSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIFllKHQubGluZStlLHQuY2gpfXQuZmlyc3QrPWUsdC5jbSYmdWUodC5jbSx0LmZpcnN0LHQuZmlyc3QsZSksdC5zZWwuaGVhZD1yKHQuc2VsLmhlYWQpLHQuc2VsLmFuY2hvcj1yKHQuc2VsLmFuY2hvciksdC5zZWwuZnJvbT1yKHQuc2VsLmZyb20pLHQuc2VsLnRvPXIodC5zZWwudG8pfWZ1bmN0aW9uIFVlKHQsZSxyLG4pe2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFVlKSh0LGUscixuKTtpZihlLnRvLmxpbmU8dC5maXJzdClyZXR1cm4gS2UodCxlLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSkpLHZvaWQgMDtpZighKGUuZnJvbS5saW5lPnQubGFzdExpbmUoKSkpe2lmKGUuZnJvbS5saW5lPHQuZmlyc3Qpe3ZhciBpPWUudGV4dC5sZW5ndGgtMS0odC5maXJzdC1lLmZyb20ubGluZSk7S2UodCxpKSxlPXtmcm9tOlllKHQuZmlyc3QsMCksdG86WWUoZS50by5saW5lK2ksZS50by5jaCksdGV4dDpbUW4oZS50ZXh0KV0sb3JpZ2luOmUub3JpZ2lufX12YXIgbz10Lmxhc3RMaW5lKCk7ZS50by5saW5lPm8mJihlPXtmcm9tOmUuZnJvbSx0bzpZZShvLGduKHQsbykudGV4dC5sZW5ndGgpLHRleHQ6W2UudGV4dFswXV0sb3JpZ2luOmUub3JpZ2lufSksZS5yZW1vdmVkPW1uKHQsZS5mcm9tLGUudG8pLHJ8fChyPVBlKHQsZSxudWxsKSksdC5jbT9YZSh0LmNtLGUsbixyKTpjbih0LGUsbixyKX19ZnVuY3Rpb24gWGUodCxlLHIsbil7dmFyIG89dC5kb2MsbD10LmRpc3BsYXkscz1lLmZyb20sYT1lLnRvLHU9ITEsZj1zLmxpbmU7dC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGY9Ym4oR3IobyxnbihvLHMubGluZSkpKSxvLml0ZXIoZixhLmxpbmUrMSxmdW5jdGlvbih0KXtyZXR1cm4gdD09bC5tYXhMaW5lPyh1PSEwLCEwKTp2b2lkIDB9KSksJGUoby5zZWwuaGVhZCxlLmZyb20pfHwkZShlLnRvLG8uc2VsLmhlYWQpfHwodC5jdXJPcC5jdXJzb3JBY3Rpdml0eT0hMCksY24obyxlLHIsbixpKHQpKSx0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoby5pdGVyKGYscy5saW5lK2UudGV4dC5sZW5ndGgsZnVuY3Rpb24odCl7dmFyIGU9YyhvLHQpO2U+bC5tYXhMaW5lTGVuZ3RoJiYobC5tYXhMaW5lPXQsbC5tYXhMaW5lTGVuZ3RoPWUsbC5tYXhMaW5lQ2hhbmdlZD0hMCx1PSExKX0pLHUmJih0LmN1ck9wLnVwZGF0ZU1heExpbmU9ITApKSxvLmZyb250aWVyPU1hdGgubWluKG8uZnJvbnRpZXIscy5saW5lKSxXKHQsNDAwKTt2YXIgaD1lLnRleHQubGVuZ3RoLShhLmxpbmUtcy5saW5lKS0xO2lmKHVlKHQscy5saW5lLGEubGluZSsxLGgpLFluKHQsImNoYW5nZSIpKXt2YXIgZD17ZnJvbTpzLHRvOmEsdGV4dDplLnRleHQscmVtb3ZlZDplLnJlbW92ZWQsb3JpZ2luOmUub3JpZ2lufTtpZih0LmN1ck9wLnRleHRDaGFuZ2VkKXtmb3IodmFyIHA9dC5jdXJPcC50ZXh0Q2hhbmdlZDtwLm5leHQ7cD1wLm5leHQpO3AubmV4dD1kfWVsc2UgdC5jdXJPcC50ZXh0Q2hhbmdlZD1kfX1mdW5jdGlvbiBfZSh0LGUscixuLGkpe2lmKG58fChuPXIpLCRlKG4scikpe3ZhciBvPW47bj1yLHI9b30ic3RyaW5nIj09dHlwZW9mIGUmJihlPXpvKGUpKSxCZSh0LHtmcm9tOnIsdG86bix0ZXh0OmUsb3JpZ2luOml9LG51bGwpfWZ1bmN0aW9uIFllKHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBZZT8odGhpcy5saW5lPXQsdGhpcy5jaD1lLHZvaWQgMCk6bmV3IFllKHQsZSl9ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gdC5saW5lPT1lLmxpbmUmJnQuY2g9PWUuY2h9ZnVuY3Rpb24gJGUodCxlKXtyZXR1cm4gdC5saW5lPGUubGluZXx8dC5saW5lPT1lLmxpbmUmJnQuY2g8ZS5jaH1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gWWUodC5saW5lLHQuY2gpfWZ1bmN0aW9uIHFlKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQuZmlyc3QsTWF0aC5taW4oZSx0LmZpcnN0K3Quc2l6ZS0xKSl9ZnVuY3Rpb24gUWUodCxlKXtpZihlLmxpbmU8dC5maXJzdClyZXR1cm4gWWUodC5maXJzdCwwKTt2YXIgcj10LmZpcnN0K3Quc2l6ZS0xO3JldHVybiBlLmxpbmU+cj9ZZShyLGduKHQscikudGV4dC5sZW5ndGgpOkplKGUsZ24odCxlLmxpbmUpLnRleHQubGVuZ3RoKX1mdW5jdGlvbiBKZSh0LGUpe3ZhciByPXQuY2g7cmV0dXJuIG51bGw9PXJ8fHI+ZT9ZZSh0LmxpbmUsZSk6MD5yP1llKHQubGluZSwwKTp0fWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJuIGU+PXQuZmlyc3QmJmU8dC5maXJzdCt0LnNpemV9ZnVuY3Rpb24gZXIodCxlLHIsbil7aWYodC5zZWwuc2hpZnR8fHQuc2VsLmV4dGVuZCl7dmFyIGk9dC5zZWwuYW5jaG9yO2lmKHIpe3ZhciBvPSRlKGUsaSk7byE9JGUocixpKT8oaT1lLGU9cik6byE9JGUoZSxyKSYmKGU9cil9bnIodCxpLGUsbil9ZWxzZSBucih0LGUscnx8ZSxuKTt0LmNtJiYodC5jbS5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwKX1mdW5jdGlvbiBycih0LGUscil7dmFyIG49e2FuY2hvcjplLGhlYWQ6cn07cmV0dXJuIEtuKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLHQuY20sbiksbi5hbmNob3I9UWUodCxuLmFuY2hvciksbi5oZWFkPVFlKHQsbi5oZWFkKSxufWZ1bmN0aW9uIG5yKHQsZSxyLG4saSl7aWYoIWkmJlluKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSl7dmFyIG89cnIodCxlLHIpO3I9by5oZWFkLGU9by5hbmNob3J9dmFyIGw9dC5zZWw7aWYobC5nb2FsQ29sdW1uPW51bGwsbnVsbD09biYmKG49JGUocixsLmhlYWQpPy0xOjEpLChpfHwhamUoZSxsLmFuY2hvcikpJiYoZT1vcih0LGUsbiwicHVzaCIhPWkpKSwoaXx8IWplKHIsbC5oZWFkKSkmJihyPW9yKHQscixuLCJwdXNoIiE9aSkpLCFqZShsLmFuY2hvcixlKXx8IWplKGwuaGVhZCxyKSl7bC5hbmNob3I9ZSxsLmhlYWQ9cjt2YXIgcz0kZShyLGUpO2wuZnJvbT1zP3I6ZSxsLnRvPXM/ZTpyLHQuY20mJih0LmNtLmN1ck9wLnVwZGF0ZUlucHV0PXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD10LmNtLmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxVbih0LCJjdXJzb3JBY3Rpdml0eSIsdCl9fWZ1bmN0aW9uIGlyKHQpe25yKHQuZG9jLHQuZG9jLnNlbC5mcm9tLHQuZG9jLnNlbC50byxudWxsLCJwdXNoIil9ZnVuY3Rpb24gb3IodCxlLHIsbil7dmFyIGk9ITEsbz1lLGw9cnx8MTt0LmNhbnRFZGl0PSExO3Q6Zm9yKDs7KXt2YXIgcz1nbih0LG8ubGluZSk7aWYocy5tYXJrZWRTcGFucylmb3IodmFyIGE9MDthPHMubWFya2VkU3BhbnMubGVuZ3RoOysrYSl7dmFyIHU9cy5tYXJrZWRTcGFuc1thXSxjPXUubWFya2VyO2lmKChudWxsPT11LmZyb218fChjLmluY2x1c2l2ZUxlZnQ/dS5mcm9tPD1vLmNoOnUuZnJvbTxvLmNoKSkmJihudWxsPT11LnRvfHwoYy5pbmNsdXNpdmVSaWdodD91LnRvPj1vLmNoOnUudG8+by5jaCkpKXtpZihuJiYoS24oYywiYmVmb3JlQ3Vyc29yRW50ZXIiKSxjLmV4cGxpY2l0bHlDbGVhcmVkKSl7aWYocy5tYXJrZWRTcGFucyl7LS1hO2NvbnRpbnVlfWJyZWFrfWlmKCFjLmF0b21pYyljb250aW51ZTt2YXIgZj1jLmZpbmQoKVswPmw/ImZyb20iOiJ0byJdO2lmKGplKGYsbykmJihmLmNoKz1sLGYuY2g8MD9mPWYubGluZT50LmZpcnN0P1FlKHQsWWUoZi5saW5lLTEpKTpudWxsOmYuY2g+cy50ZXh0Lmxlbmd0aCYmKGY9Zi5saW5lPHQuZmlyc3QrdC5zaXplLTE/WWUoZi5saW5lKzEsMCk6bnVsbCksIWYpKXtpZihpKXJldHVybiBuPyh0LmNhbnRFZGl0PSEwLFllKHQuZmlyc3QsMCkpOm9yKHQsZSxyLCEwKTtpPSEwLGY9ZSxsPS1sfW89Zjtjb250aW51ZSB0fX1yZXR1cm4gb319ZnVuY3Rpb24gbHIodCl7dmFyIGU9c3IodCx0LmRvYy5zZWwuaGVhZCxudWxsLHQub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pO2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIHI9dC5kaXNwbGF5LG49Zmkoci5zaXplciksaT1udWxsO2lmKGUudG9wK24udG9wPDA/aT0hMDplLmJvdHRvbStuLnRvcD4od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmKGk9ITEpLG51bGwhPWkmJiFCaSl7dmFyIG89Im5vbmUiPT1yLmN1cnNvci5zdHlsZS5kaXNwbGF5O28mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLHIuY3Vyc29yLnN0eWxlLmxlZnQ9ZS5sZWZ0KyJweCIsci5jdXJzb3Iuc3R5bGUudG9wPWUudG9wLXIudmlld09mZnNldCsicHgiKSxyLmN1cnNvci5zY3JvbGxJbnRvVmlldyhpKSxvJiYoci5jdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19ZnVuY3Rpb24gc3IodCxlLHIsbil7Zm9yKG51bGw9PW4mJihuPTApOzspe3ZhciBpPSExLG89USh0LGUpLGw9ciYmciE9ZT9RKHQscik6byxzPXVyKHQsTWF0aC5taW4oby5sZWZ0LGwubGVmdCksTWF0aC5taW4oby50b3AsbC50b3ApLW4sTWF0aC5tYXgoby5sZWZ0LGwubGVmdCksTWF0aC5tYXgoby5ib3R0b20sbC5ib3R0b20pK24pLGE9dC5kb2Muc2Nyb2xsVG9wLHU9dC5kb2Muc2Nyb2xsTGVmdDtpZihudWxsIT1zLnNjcm9sbFRvcCYmKFNlKHQscy5zY3JvbGxUb3ApLE1hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1hKT4xJiYoaT0hMCkpLG51bGwhPXMuc2Nyb2xsTGVmdCYmKE1lKHQscy5zY3JvbGxMZWZ0KSxNYXRoLmFicyh0LmRvYy5zY3JvbGxMZWZ0LXUpPjEmJihpPSEwKSksIWkpcmV0dXJuIG99fWZ1bmN0aW9uIGFyKHQsZSxyLG4saSl7dmFyIG89dXIodCxlLHIsbixpKTtudWxsIT1vLnNjcm9sbFRvcCYmU2UodCxvLnNjcm9sbFRvcCksbnVsbCE9by5zY3JvbGxMZWZ0JiZNZSh0LG8uc2Nyb2xsTGVmdCl9ZnVuY3Rpb24gdXIodCxlLHIsbixpKXt2YXIgbz10LmRpc3BsYXksbD1yZSh0LmRpc3BsYXkpOzA+ciYmKHI9MCk7dmFyIHM9by5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8sYT1vLnNjcm9sbGVyLnNjcm9sbFRvcCx1PXt9LGM9dC5kb2MuaGVpZ2h0K0YobyksZj1sPnIsaD1pPmMtbDtpZihhPnIpdS5zY3JvbGxUb3A9Zj8wOnI7ZWxzZSBpZihpPmErcyl7dmFyIGQ9TWF0aC5taW4ociwoaD9jOmkpLXMpO2QhPWEmJih1LnNjcm9sbFRvcD1kKX12YXIgcD1vLnNjcm9sbGVyLmNsaWVudFdpZHRoLVRvLGc9by5zY3JvbGxlci5zY3JvbGxMZWZ0O2UrPW8uZ3V0dGVycy5vZmZzZXRXaWR0aCxuKz1vLmd1dHRlcnMub2Zmc2V0V2lkdGg7dmFyIG09by5ndXR0ZXJzLm9mZnNldFdpZHRoLHY9bSsxMD5lO3JldHVybiBnK20+ZXx8dj8odiYmKGU9MCksdS5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsZS0xMC1tKSk6bj5wK2ctMyYmKHUuc2Nyb2xsTGVmdD1uKzEwLXApLHV9ZnVuY3Rpb24gY3IodCxlLHIpe3QuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0Om51bGw9PWU/dC5kb2Muc2Nyb2xsTGVmdDplLHNjcm9sbFRvcDpudWxsPT1yP3QuZG9jLnNjcm9sbFRvcDpyfX1mdW5jdGlvbiBmcih0LGUscil7dmFyIG49dC5jdXJPcC51cGRhdGVTY3JvbGxQb3N8fCh0LmN1ck9wLnVwZGF0ZVNjcm9sbFBvcz17c2Nyb2xsTGVmdDp0LmRvYy5zY3JvbGxMZWZ0LHNjcm9sbFRvcDp0LmRvYy5zY3JvbGxUb3B9KSxpPXQuZGlzcGxheS5zY3JvbGxlcjtuLnNjcm9sbFRvcD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsSGVpZ2h0LWkuY2xpZW50SGVpZ2h0LG4uc2Nyb2xsVG9wK3IpKSxuLnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihpLnNjcm9sbFdpZHRoLWkuY2xpZW50V2lkdGgsbi5zY3JvbGxMZWZ0K2UpKX1mdW5jdGlvbiBocih0LGUscixuKXt2YXIgaT10LmRvYztpZihudWxsPT1yJiYocj0iYWRkIiksInNtYXJ0Ij09cilpZih0LmRvYy5tb2RlLmluZGVudCl2YXIgbz16KHQsZSk7ZWxzZSByPSJwcmV2Ijt2YXIgbCxzPXQub3B0aW9ucy50YWJTaXplLGE9Z24oaSxlKSx1PVpuKGEudGV4dCxudWxsLHMpLGM9YS50ZXh0Lm1hdGNoKC9eXHMqLylbMF07aWYoInNtYXJ0Ij09ciYmKGw9dC5kb2MubW9kZS5pbmRlbnQobyxhLnRleHQuc2xpY2UoYy5sZW5ndGgpLGEudGV4dCksbD09QW8pKXtpZighbilyZXR1cm47cj0icHJldiJ9InByZXYiPT1yP2w9ZT5pLmZpcnN0P1puKGduKGksZS0xKS50ZXh0LG51bGwscyk6MDoiYWRkIj09cj9sPXUrdC5vcHRpb25zLmluZGVudFVuaXQ6InN1YnRyYWN0Ij09cj9sPXUtdC5vcHRpb25zLmluZGVudFVuaXQ6Im51bWJlciI9PXR5cGVvZiByJiYobD11K3IpLGw9TWF0aC5tYXgoMCxsKTt2YXIgZj0iIixoPTA7aWYodC5vcHRpb25zLmluZGVudFdpdGhUYWJzKWZvcih2YXIgZD1NYXRoLmZsb29yKGwvcyk7ZDstLWQpaCs9cyxmKz0iCSI7bD5oJiYoZis9cW4obC1oKSksZiE9Yz9fZSh0LmRvYyxmLFllKGUsMCksWWUoZSxjLmxlbmd0aCksIitpbnB1dCIpOmkuc2VsLmhlYWQubGluZT09ZSYmaS5zZWwuaGVhZC5jaDxjLmxlbmd0aCYmbnIoaSxZZShlLGMubGVuZ3RoKSxZZShlLGMubGVuZ3RoKSwxKSxhLnN0YXRlQWZ0ZXI9bnVsbH1mdW5jdGlvbiBkcih0LGUscil7dmFyIG49ZSxpPWUsbz10LmRvYztyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/aT1nbihvLHFlKG8sZSkpOm49Ym4oZSksbnVsbD09bj9udWxsOnIoaSxuKT8odWUodCxuLG4rMSksaSk6bnVsbH1mdW5jdGlvbiBwcih0LGUscixuLGkpe2Z1bmN0aW9uIG8oKXt2YXIgZT1zK3I7cmV0dXJuIGU8dC5maXJzdHx8ZT49dC5maXJzdCt0LnNpemU/Zj0hMToocz1lLGM9Z24odCxlKSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT0oaT9TaTpNaSkoYyxhLHIsITApO2lmKG51bGw9PWUpe2lmKHR8fCFvKCkpcmV0dXJuIGY9ITE7YT1pPygwPnI/Ymk6eWkpKGMpOjA+cj9jLnRleHQubGVuZ3RoOjB9ZWxzZSBhPWU7cmV0dXJuITB9dmFyIHM9ZS5saW5lLGE9ZS5jaCx1PXIsYz1nbih0LHMpLGY9ITA7aWYoImNoYXIiPT1uKWwoKTtlbHNlIGlmKCJjb2x1bW4iPT1uKWwoITApO2Vsc2UgaWYoIndvcmQiPT1ufHwiZ3JvdXAiPT1uKWZvcih2YXIgaD1udWxsLGQ9Imdyb3VwIj09bixwPSEwOyEoMD5yKXx8bCghcCk7cD0hMSl7dmFyIGc9Yy50ZXh0LmNoYXJBdChhKXx8IlxuIixtPW9pKGcpPyJ3IjpkPy9ccy8udGVzdChnKT9udWxsOiJwIjpudWxsO2lmKGgmJmghPW0pezA+ciYmKHI9MSxsKCkpO2JyZWFrfWlmKG0mJihoPW0pLHI+MCYmIWwoIXApKWJyZWFrfXZhciB2PW9yKHQsWWUocyxhKSx1LCEwKTtyZXR1cm4gZnx8KHYuaGl0U2lkZT0hMCksdn1mdW5jdGlvbiBncih0LGUscixuKXt2YXIgaSxvPXQuZG9jLGw9ZS5sZWZ0O2lmKCJwYWdlIj09bil7dmFyIHM9TWF0aC5taW4odC5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7aT1lLnRvcCtyKihzLSgwPnI/MS41Oi41KSpyZSh0LmRpc3BsYXkpKX1lbHNlImxpbmUiPT1uJiYoaT1yPjA/ZS5ib3R0b20rMzplLnRvcC0zKTtmb3IoOzspe3ZhciBhPXRlKHQsbCxpKTtpZighYS5vdXRzaWRlKWJyZWFrO2lmKDA+cj8wPj1pOmk+PW8uaGVpZ2h0KXthLmhpdFNpZGU9ITA7YnJlYWt9aSs9NSpyfXJldHVybiBhfWZ1bmN0aW9uIG1yKHQsZSl7dmFyIHI9ZS5jaCxuPWUuY2g7aWYodCl7KGUueFJlbDwwfHxuPT10Lmxlbmd0aCkmJnI/LS1yOisrbjtmb3IodmFyIGk9dC5jaGFyQXQociksbz1vaShpKT9vaTovXHMvLnRlc3QoaSk/ZnVuY3Rpb24odCl7cmV0dXJuL1xzLy50ZXN0KHQpfTpmdW5jdGlvbih0KXtyZXR1cm4hL1xzLy50ZXN0KHQpJiYhb2kodCl9O3I+MCYmbyh0LmNoYXJBdChyLTEpKTspLS1yO2Zvcig7bjx0Lmxlbmd0aCYmbyh0LmNoYXJBdChuKSk7KSsrbn1yZXR1cm57ZnJvbTpZZShlLmxpbmUsciksdG86WWUoZS5saW5lLG4pfX1mdW5jdGlvbiB2cih0LGUpe2VyKHQuZG9jLFllKGUsMCksUWUodC5kb2MsWWUoZSsxLDApKSl9ZnVuY3Rpb24geXIoZSxyLG4saSl7dC5kZWZhdWx0c1tlXT1yLG4mJihzb1tlXT1pP2Z1bmN0aW9uKHQsZSxyKXtyIT11byYmbih0LGUscil9Om4pfWZ1bmN0aW9uIGJyKHQsZSl7aWYoZT09PSEwKXJldHVybiBlO2lmKHQuY29weVN0YXRlKXJldHVybiB0LmNvcHlTdGF0ZShlKTt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpIGluc3RhbmNlb2YgQXJyYXkmJihpPWkuY29uY2F0KFtdKSkscltuXT1pfXJldHVybiByfWZ1bmN0aW9uIHhyKHQsZSxyKXtyZXR1cm4gdC5zdGFydFN0YXRlP3Quc3RhcnRTdGF0ZShlLHIpOiEwfWZ1bmN0aW9uIENyKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD92b1t0XTp0fWZ1bmN0aW9uIHdyKHQsZSxyKXtmdW5jdGlvbiBuKGUpe2U9Q3IoZSk7dmFyIGk9ZVt0XTtpZihpPT09ITEpcmV0dXJuInN0b3AiO2lmKG51bGwhPWkmJnIoaSkpcmV0dXJuITA7aWYoZS5ub2ZhbGx0aHJvdWdoKXJldHVybiJzdG9wIjt2YXIgbz1lLmZhbGx0aHJvdWdoO2lmKG51bGw9PW8pcmV0dXJuITE7aWYoIltvYmplY3QgQXJyYXldIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKXJldHVybiBuKG8pO2Zvcih2YXIgbD0wLHM9by5sZW5ndGg7cz5sOysrbCl7dmFyIGE9bihvW2xdKTtpZihhKXJldHVybiBhfXJldHVybiExfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgbz1uKGVbaV0pO2lmKG8pcmV0dXJuInN0b3AiIT1vfX1mdW5jdGlvbiBMcih0KXt2YXIgZT1Qb1t0LmtleUNvZGVdO3JldHVybiJDdHJsIj09ZXx8IkFsdCI9PWV8fCJTaGlmdCI9PWV8fCJNb2QiPT1lfWZ1bmN0aW9uIGtyKHQsZSl7aWYoemkmJjM0PT10LmtleUNvZGUmJnRbImNoYXIiXSlyZXR1cm4hMTt2YXIgcj1Qb1t0LmtleUNvZGVdO3JldHVybiBudWxsPT1yfHx0LmFsdEdyYXBoS2V5PyExOih0LmFsdEtleSYmKHI9IkFsdC0iK3IpLCgkaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmKHI9IkN0cmwtIityKSwoJGk/dC5jdHJsS2V5OnQubWV0YUtleSkmJihyPSJDbWQtIityKSwhZSYmdC5zaGlmdEtleSYmKHI9IlNoaWZ0LSIrcikscil9ZnVuY3Rpb24gU3IodCxlKXt0aGlzLnBvcz10aGlzLnN0YXJ0PTAsdGhpcy5zdHJpbmc9dCx0aGlzLnRhYlNpemU9ZXx8OCx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5sYXN0Q29sdW1uVmFsdWU9MH1mdW5jdGlvbiBNcih0LGUpe3RoaXMubGluZXM9W10sdGhpcy50eXBlPWUsdGhpcy5kb2M9dH1mdW5jdGlvbiBUcih0LGUscixuLGkpe2lmKG4mJm4uc2hhcmVkKXJldHVybiBIcih0LGUscixuLGkpO2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFRyKSh0LGUscixuLGkpO3ZhciBvPW5ldyBNcih0LGkpO2lmKCRlKHIsZSl8fGplKGUscikmJiJyYW5nZSI9PWkmJighbi5pbmNsdXNpdmVMZWZ0fHwhbi5pbmNsdXNpdmVSaWdodCkpcmV0dXJuIG87biYmcmkobixvKSxvLnJlcGxhY2VkV2l0aCYmKG8uY29sbGFwc2VkPSEwLG8ucmVwbGFjZWRXaXRoPXNpKCJzcGFuIixbby5yZXBsYWNlZFdpdGhdLCJDb2RlTWlycm9yLXdpZGdldCIpLG4uaGFuZGxlTW91c2VFdmVudHN8fChvLnJlcGxhY2VkV2l0aC5pZ25vcmVFdmVudHM9ITApKSxvLmNvbGxhcHNlZCYmKFFpPSEwKSxvLmFkZFRvSGlzdG9yeSYmTW4odCx7ZnJvbTplLHRvOnIsb3JpZ2luOiJtYXJrVGV4dCJ9LHtoZWFkOnQuc2VsLmhlYWQsYW5jaG9yOnQuc2VsLmFuY2hvcn0sMC8wKTt2YXIgbCxzLGEsdT1lLmxpbmUsYz0wLGY9dC5jbTtpZih0Lml0ZXIodSxyLmxpbmUrMSxmdW5jdGlvbihuKXtmJiZvLmNvbGxhcHNlZCYmIWYub3B0aW9ucy5saW5lV3JhcHBpbmcmJkdyKHQsbik9PWYuZGlzcGxheS5tYXhMaW5lJiYoYT0hMCk7dmFyIGk9e2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpvfTtjKz1uLnRleHQubGVuZ3RoLHU9PWUubGluZSYmKGkuZnJvbT1lLmNoLGMtPWUuY2gpLHU9PXIubGluZSYmKGkudG89ci5jaCxjLT1uLnRleHQubGVuZ3RoLXIuY2gpLG8uY29sbGFwc2VkJiYodT09ci5saW5lJiYocz1QcihuLHIuY2gpKSx1PT1lLmxpbmU/bD1QcihuLGUuY2gpOnluKG4sMCkpLFdyKG4saSksKyt1fSksby5jb2xsYXBzZWQmJnQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24oZSl7VnIodCxlKSYmeW4oZSwwKX0pLG8uY2xlYXJPbkVudGVyJiZHbihvLCJiZWZvcmVDdXJzb3JFbnRlciIsZnVuY3Rpb24oKXtvLmNsZWFyKCl9KSxvLnJlYWRPbmx5JiYocWk9ITAsKHQuaGlzdG9yeS5kb25lLmxlbmd0aHx8dC5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpJiZ0LmNsZWFySGlzdG9yeSgpKSxvLmNvbGxhcHNlZCl7aWYobCE9cyl0aHJvdyBuZXcgRXJyb3IoIkluc2VydGluZyBjb2xsYXBzZWQgbWFya2VyIG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpO28uc2l6ZT1jLG8uYXRvbWljPSEwfXJldHVybiBmJiYoYSYmKGYuY3VyT3AudXBkYXRlTWF4TGluZT0hMCksKG8uY2xhc3NOYW1lfHxvLnRpdGxlfHxvLnN0YXJ0U3R5bGV8fG8uZW5kU3R5bGV8fG8uY29sbGFwc2VkKSYmdWUoZixlLmxpbmUsci5saW5lKzEpLG8uYXRvbWljJiZpcihmKSksb31mdW5jdGlvbiBBcih0LGUpe3RoaXMubWFya2Vycz10LHRoaXMucHJpbWFyeT1lO2Zvcih2YXIgcj0wLG49dGhpcztyPHQubGVuZ3RoOysrcil0W3JdLnBhcmVudD10aGlzLEduKHRbcl0sImNsZWFyIixmdW5jdGlvbigpe24uY2xlYXIoKX0pfWZ1bmN0aW9uIEhyKHQsZSxyLG4saSl7bj1yaShuKSxuLnNoYXJlZD0hMTt2YXIgbz1bVHIodCxlLHIsbixpKV0sbD1vWzBdLHM9bi5yZXBsYWNlZFdpdGg7cmV0dXJuIGRuKHQsZnVuY3Rpb24odCl7cyYmKG4ucmVwbGFjZWRXaXRoPXMuY2xvbmVOb2RlKCEwKSksby5wdXNoKFRyKHQsUWUodCxlKSxRZSh0LHIpLG4saSkpO2Zvcih2YXIgYT0wO2E8dC5saW5rZWQubGVuZ3RoOysrYSlpZih0LmxpbmtlZFthXS5pc1BhcmVudClyZXR1cm47bD1RbihvKX0pLG5ldyBBcihvLGwpfWZ1bmN0aW9uIE5yKHQsZSl7aWYodClmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtpZihuLm1hcmtlcj09ZSlyZXR1cm4gbn19ZnVuY3Rpb24gRHIodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXRbbl0hPWUmJihyfHwocj1bXSkpLnB1c2godFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gV3IodCxlKXt0Lm1hcmtlZFNwYW5zPXQubWFya2VkU3BhbnM/dC5tYXJrZWRTcGFucy5jb25jYXQoW2VdKTpbZV0sZS5tYXJrZXIuYXR0YWNoTGluZSh0KX1mdW5jdGlvbiBPcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTtpZihzfHwobC5pbmNsdXNpdmVMZWZ0JiZsLmluY2x1c2l2ZVJpZ2h0fHwiYm9va21hcmsiPT1sLnR5cGUpJiZvLmZyb209PWUmJighcnx8IW8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7KG58fChuPVtdKSkucHVzaCh7ZnJvbTpvLmZyb20sdG86YT9udWxsOm8udG8sbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24gRXIodCxlLHIpe2lmKHQpZm9yKHZhciBuLGk9MDtpPHQubGVuZ3RoOysraSl7dmFyIG89dFtpXSxsPW8ubWFya2VyLHM9bnVsbD09by50b3x8KGwuaW5jbHVzaXZlUmlnaHQ/by50bz49ZTpvLnRvPmUpO2lmKHN8fCJib29rbWFyayI9PWwudHlwZSYmby5mcm9tPT1lJiYoIXJ8fG8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOmE/bnVsbDpvLmZyb20tZSx0bzpudWxsPT1vLnRvP251bGw6by50by1lLG1hcmtlcjpsfSl9fXJldHVybiBufWZ1bmN0aW9uIHpyKHQsZSl7dmFyIHI9dHIodCxlLmZyb20ubGluZSkmJmduKHQsZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zLG49dHIodCxlLnRvLmxpbmUpJiZnbih0LGUudG8ubGluZSkubWFya2VkU3BhbnM7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPWUuZnJvbS5jaCxvPWUudG8uY2gsbD1qZShlLmZyb20sZS50bykscz1PcihyLGksbCksYT1FcihuLG8sbCksdT0xPT1lLnRleHQubGVuZ3RoLGM9UW4oZS50ZXh0KS5sZW5ndGgrKHU/aTowKTtpZihzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKXt2YXIgaD1zW2ZdO2lmKG51bGw9PWgudG8pe3ZhciBkPU5yKGEsaC5tYXJrZXIpO2Q/dSYmKGgudG89bnVsbD09ZC50bz9udWxsOmQudG8rYyk6aC50bz1pfX1pZihhKWZvcih2YXIgZj0wO2Y8YS5sZW5ndGg7KytmKXt2YXIgaD1hW2ZdO2lmKG51bGwhPWgudG8mJihoLnRvKz1jKSxudWxsPT1oLmZyb20pe3ZhciBkPU5yKHMsaC5tYXJrZXIpO2R8fChoLmZyb209Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpKX1lbHNlIGguZnJvbSs9Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpfWlmKHUmJnMpe2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGwhPXNbZl0uZnJvbSYmc1tmXS5mcm9tPT1zW2ZdLnRvJiYiYm9va21hcmsiIT1zW2ZdLm1hcmtlci50eXBlJiZzLnNwbGljZShmLS0sMSk7cy5sZW5ndGh8fChzPW51bGwpfXZhciBwPVtzXTtpZighdSl7dmFyIGcsbT1lLnRleHQubGVuZ3RoLTI7aWYobT4wJiZzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGw9PXNbZl0udG8mJihnfHwoZz1bXSkpLnB1c2goe2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpzW2ZdLm1hcmtlcn0pO2Zvcih2YXIgZj0wO20+ZjsrK2YpcC5wdXNoKGcpO3AucHVzaChhKX1yZXR1cm4gcH1mdW5jdGlvbiBJcih0LGUpe3ZhciByPUFuKHQsZSksbj16cih0LGUpO2lmKCFyKXJldHVybiBuO2lmKCFuKXJldHVybiByO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgbz1yW2ldLGw9bltpXTtpZihvJiZsKXQ6Zm9yKHZhciBzPTA7czxsLmxlbmd0aDsrK3Mpe2Zvcih2YXIgYT1sW3NdLHU9MDt1PG8ubGVuZ3RoOysrdSlpZihvW3VdLm1hcmtlcj09YS5tYXJrZXIpY29udGludWUgdDtvLnB1c2goYSl9ZWxzZSBsJiYocltpXT1sKX1yZXR1cm4gcn1mdW5jdGlvbiBGcih0LGUscil7dmFyIG49bnVsbDtpZih0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe2lmKHQubWFya2VkU3BhbnMpZm9yKHZhciBlPTA7ZTx0Lm1hcmtlZFNwYW5zLmxlbmd0aDsrK2Upe3ZhciByPXQubWFya2VkU3BhbnNbZV0ubWFya2VyOyFyLnJlYWRPbmx5fHxuJiYtMSE9dGkobixyKXx8KG58fChuPVtdKSkucHVzaChyKX19KSwhbilyZXR1cm4gbnVsbDtmb3IodmFyIGk9W3tmcm9tOmUsdG86cn1dLG89MDtvPG4ubGVuZ3RoOysrbylmb3IodmFyIGw9bltvXSxzPWwuZmluZCgpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIHU9aVthXTtpZighJGUodS50byxzLmZyb20pJiYhJGUocy50byx1LmZyb20pKXt2YXIgYz1bYSwxXTsoJGUodS5mcm9tLHMuZnJvbSl8fCFsLmluY2x1c2l2ZUxlZnQmJmplKHUuZnJvbSxzLmZyb20pKSYmYy5wdXNoKHtmcm9tOnUuZnJvbSx0bzpzLmZyb219KSwoJGUocy50byx1LnRvKXx8IWwuaW5jbHVzaXZlUmlnaHQmJmplKHUudG8scy50bykpJiZjLnB1c2goe2Zyb206cy50byx0bzp1LnRvfSksaS5zcGxpY2UuYXBwbHkoaSxjKSxhKz1jLmxlbmd0aC0xfX1yZXR1cm4gaX1mdW5jdGlvbiBQcih0LGUpe3ZhciByLG49UWkmJnQubWFya2VkU3BhbnM7aWYobilmb3IodmFyIGksbz0wO288bi5sZW5ndGg7KytvKWk9bltvXSxpLm1hcmtlci5jb2xsYXBzZWQmJihudWxsPT1pLmZyb218fGkuZnJvbTxlKSYmKG51bGw9PWkudG98fGkudG8+ZSkmJighcnx8ci53aWR0aDxpLm1hcmtlci53aWR0aCkmJihyPWkubWFya2VyKTtyZXR1cm4gcn1mdW5jdGlvbiBScih0KXtyZXR1cm4gUHIodCwtMSl9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIFByKHQsdC50ZXh0Lmxlbmd0aCsxKX1mdW5jdGlvbiBHcih0LGUpe2Zvcih2YXIgcjtyPVJyKGUpOyllPWduKHQsci5maW5kKCkuZnJvbS5saW5lKTtyZXR1cm4gZX1mdW5jdGlvbiBWcih0LGUpe3ZhciByPVFpJiZlLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuLGk9MDtpPHIubGVuZ3RoOysraSlpZihuPXJbaV0sbi5tYXJrZXIuY29sbGFwc2VkKXtpZihudWxsPT1uLmZyb20pcmV0dXJuITA7aWYoIW4ubWFya2VyLnJlcGxhY2VkV2l0aCYmMD09bi5mcm9tJiZuLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZLcih0LGUsbikpcmV0dXJuITB9fWZ1bmN0aW9uIEtyKHQsZSxyKXtpZihudWxsPT1yLnRvKXt2YXIgbj1yLm1hcmtlci5maW5kKCkudG8saT1nbih0LG4ubGluZSk7cmV0dXJuIEtyKHQsaSxOcihpLm1hcmtlZFNwYW5zLHIubWFya2VyKSl9aWYoci5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJnIudG89PWUudGV4dC5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBvLGw9MDtsPGUubWFya2VkU3BhbnMubGVuZ3RoOysrbClpZihvPWUubWFya2VkU3BhbnNbbF0sby5tYXJrZXIuY29sbGFwc2VkJiYhby5tYXJrZXIucmVwbGFjZWRXaXRoJiZvLmZyb209PXIudG8mJihvLm1hcmtlci5pbmNsdXNpdmVMZWZ0fHxyLm1hcmtlci5pbmNsdXNpdmVSaWdodCkmJktyKHQsZSxvKSlyZXR1cm4hMH1mdW5jdGlvbiBVcih0KXt2YXIgZT10Lm1hcmtlZFNwYW5zO2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmRldGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1udWxsfX1mdW5jdGlvbiBYcih0LGUpe2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmF0dGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1lfX1mdW5jdGlvbiBfcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT0hdGhpcy5jbS5jdXJPcDtlJiZpZSh0aGlzLmNtKTt0cnl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtlJiZvZSh0aGlzLmNtKX1yZXR1cm4gcn19ZnVuY3Rpb24gWXIodCl7cmV0dXJuIG51bGwhPXQuaGVpZ2h0P3QuaGVpZ2h0Oih0Lm5vZGUucGFyZW50Tm9kZSYmMT09dC5ub2RlLnBhcmVudE5vZGUubm9kZVR5cGV8fHVpKHQuY20uZGlzcGxheS5tZWFzdXJlLHNpKCJkaXYiLFt0Lm5vZGVdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpKSx0LmhlaWdodD10Lm5vZGUub2Zmc2V0SGVpZ2h0KX1mdW5jdGlvbiBqcih0LGUscixuKXt2YXIgaT1uZXcgeW8odCxyLG4pO3JldHVybiBpLm5vSFNjcm9sbCYmKHQuZGlzcGxheS5hbGlnbldpZGdldHM9ITApLGRyKHQsZSxmdW5jdGlvbihlKXt2YXIgcj1lLndpZGdldHN8fChlLndpZGdldHM9W10pO2lmKG51bGw9PWkuaW5zZXJ0QXQ/ci5wdXNoKGkpOnIuc3BsaWNlKE1hdGgubWluKHIubGVuZ3RoLTEsTWF0aC5tYXgoMCxpLmluc2VydEF0KSksMCxpKSxpLmxpbmU9ZSwhVnIodC5kb2MsZSl8fGkuc2hvd0lmSGlkZGVuKXt2YXIgbj1Dbih0LGUpPHQuZG9jLnNjcm9sbFRvcDt5bihlLGUuaGVpZ2h0K1lyKGkpKSxuJiZmcih0LDAsaS5oZWlnaHQpfXJldHVybiEwfSksaX1mdW5jdGlvbiAkcih0LGUscixuKXt0LnRleHQ9ZSx0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKSxudWxsIT10Lm9yZGVyJiYodC5vcmRlcj1udWxsKSxVcih0KSxYcih0LHIpO3ZhciBpPW4/bih0KToxO2khPXQuaGVpZ2h0JiZ5bih0LGkpfWZ1bmN0aW9uIFpyKHQpe3QucGFyZW50PW51bGwsVXIodCl9ZnVuY3Rpb24gcXIodCxlLHIsbixpLG8pe3ZhciBsPXIuZmxhdHRlblNwYW5zO251bGw9PWwmJihsPXQub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciBzLGE9MCx1PW51bGwsYz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKCIiPT1lJiZyLmJsYW5rTGluZSYmci5ibGFua0xpbmUobik7IWMuZW9sKCk7KWMucG9zPnQub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGg/KGw9ITEsbyYmdG4odCxlLG4sYy5wb3MpLGMucG9zPWUubGVuZ3RoLHM9bnVsbCk6cz1yLnRva2VuKGMsbiksbCYmdT09c3x8KGE8Yy5zdGFydCYmaShjLnN0YXJ0LHUpLGE9Yy5zdGFydCx1PXMpLGMuc3RhcnQ9Yy5wb3M7Zm9yKDthPGMucG9zOyl7dmFyIGY9TWF0aC5taW4oYy5wb3MsYSs1ZTQpO2koZix1KSxhPWZ9fWZ1bmN0aW9uIFFyKHQsZSxyLG4pe3ZhciBpPVt0LnN0YXRlLm1vZGVHZW5dO3FyKHQsZS50ZXh0LHQuZG9jLm1vZGUscixmdW5jdGlvbih0LGUpe2kucHVzaCh0LGUpfSxuKTtmb3IodmFyIG89MDtvPHQuc3RhdGUub3ZlcmxheXMubGVuZ3RoOysrbyl7dmFyIGw9dC5zdGF0ZS5vdmVybGF5c1tvXSxzPTEsYT0wO3FyKHQsZS50ZXh0LGwubW9kZSwhMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1zO3Q+YTspe3ZhciBuPWlbc107bj50JiZpLnNwbGljZShzLDEsdCxpW3MrMV0sbikscys9MixhPU1hdGgubWluKHQsbil9aWYoZSlpZihsLm9wYXF1ZSlpLnNwbGljZShyLHMtcix0LGUpLHM9cisyO2Vsc2UgZm9yKDtzPnI7cis9Mil7dmFyIG89aVtyKzFdO2lbcisxXT1vP28rIiAiK2U6ZX19KX1yZXR1cm4gaX1mdW5jdGlvbiBKcih0LGUpe3JldHVybiBlLnN0eWxlcyYmZS5zdHlsZXNbMF09PXQuc3RhdGUubW9kZUdlbnx8KGUuc3R5bGVzPVFyKHQsZSxlLnN0YXRlQWZ0ZXI9eih0LGJuKGUpKSkpLGUuc3R5bGVzfWZ1bmN0aW9uIHRuKHQsZSxyLG4pe3ZhciBpPXQuZG9jLm1vZGUsbz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKG8uc3RhcnQ9by5wb3M9bnx8MCwiIj09ZSYmaS5ibGFua0xpbmUmJmkuYmxhbmtMaW5lKHIpOyFvLmVvbCgpJiZvLnBvczw9dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aDspaS50b2tlbihvLHIpLG8uc3RhcnQ9by5wb3N9ZnVuY3Rpb24gZW4odCxlKXtpZighdClyZXR1cm4gbnVsbDtmb3IoOzspe3ZhciByPXQubWF0Y2goLyg/Ol58XHMpbGluZS0oYmFja2dyb3VuZC0pPyhcUyspLyk7aWYoIXIpYnJlYWs7dD10LnNsaWNlKDAsci5pbmRleCkrdC5zbGljZShyLmluZGV4K3JbMF0ubGVuZ3RoKTt2YXIgbj1yWzFdPyJiZ0NsYXNzIjoidGV4dENsYXNzIjtudWxsPT1lW25dP2Vbbl09clsyXTpuZXcgUmVnRXhwKCIoPzpefHMpIityWzJdKyIoPzokfHMpIikudGVzdChlW25dKXx8KGVbbl0rPSIgIityWzJdKX1yZXR1cm4geG9bdF18fCh4b1t0XT0iY20tIit0LnJlcGxhY2UoLyArL2csIiBjbS0iKSl9ZnVuY3Rpb24gcm4odCxlLHIsbil7Zm9yKHZhciBpLG89ZSxsPSEwO2k9UnIobyk7KW89Z24odC5kb2MsaS5maW5kKCkuZnJvbS5saW5lKTt2YXIgcz17cHJlOnNpKCJwcmUiKSxjb2w6MCxwb3M6MCxtZWFzdXJlOm51bGwsbWVhc3VyZWRTb21ldGhpbmc6ITEsY206dCxjb3B5V2lkZ2V0czpufTtkb3tvLnRleHQmJihsPSExKSxzLm1lYXN1cmU9bz09ZSYmcixzLnBvcz0wLHMuYWRkVG9rZW49cy5tZWFzdXJlP2xuOm9uLChBaXx8V2kpJiZ0LmdldE9wdGlvbigibGluZVdyYXBwaW5nIikmJihzLmFkZFRva2VuPXNuKHMuYWRkVG9rZW4pKTt2YXIgYT11bihvLHMsSnIodCxvKSk7ciYmbz09ZSYmIXMubWVhc3VyZWRTb21ldGhpbmcmJihyWzBdPXMucHJlLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSkscy5tZWFzdXJlZFNvbWV0aGluZz0hMCksYSYmKG89Z24odC5kb2MsYS50by5saW5lKSl9d2hpbGUoYSk7IXJ8fHMubWVhc3VyZWRTb21ldGhpbmd8fHJbMF18fChyWzBdPXMucHJlLmFwcGVuZENoaWxkKGw/c2koInNwYW4iLCLCoCIpOnBpKHQuZGlzcGxheS5tZWFzdXJlKSkpLHMucHJlLmZpcnN0Q2hpbGR8fFZyKHQuZG9jLGUpfHxzLnByZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiwqAiKSk7dmFyIHU7aWYociYmKEFpfHxEaSkmJih1PXduKG8pKSl7dmFyIGM9dS5sZW5ndGgtMTt1W2NdLmZyb209PXVbY10udG8mJi0tYzt2YXIgZj11W2NdLGg9dVtjLTFdO2lmKGYuZnJvbSsxPT1mLnRvJiZoJiZmLmxldmVsPGgubGV2ZWwpe3ZhciBkPXJbcy5wb3MtMV07ZCYmZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkLm1lYXN1cmVSaWdodD1waSh0LmRpc3BsYXkubWVhc3VyZSksZC5uZXh0U2libGluZyl9fXZhciBwPXMudGV4dENsYXNzP3MudGV4dENsYXNzKyIgIisoZS50ZXh0Q2xhc3N8fCIiKTplLnRleHRDbGFzcztyZXR1cm4gcCYmKHMucHJlLmNsYXNzTmFtZT1wKSxLbih0LCJyZW5kZXJMaW5lIix0LGUscy5wcmUpLHN9ZnVuY3Rpb24gbm4odCl7dmFyIGU9c2koInNwYW4iLCLigKIiLCJjbS1pbnZhbGlkY2hhciIpO3JldHVybiBlLnRpdGxlPSJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNiksZX1mdW5jdGlvbiBvbih0LGUscixuLGksbyl7aWYoZSl7dmFyIGw9dC5jbS5vcHRpb25zLnNwZWNpYWxDaGFycztpZihsLnRlc3QoZSkpZm9yKHZhciBzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxhPTA7Oyl7bC5sYXN0SW5kZXg9YTt2YXIgdT1sLmV4ZWMoZSksYz11P3UuaW5kZXgtYTplLmxlbmd0aC1hO2lmKGMmJihzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuc2xpY2UoYSxhK2MpKSksdC5jb2wrPWMpLCF1KWJyZWFrO2lmKGErPWMrMSwiCSI9PXVbMF0pe3ZhciBmPXQuY20ub3B0aW9ucy50YWJTaXplLGg9Zi10LmNvbCVmO3MuYXBwZW5kQ2hpbGQoc2koInNwYW4iLHFuKGgpLCJjbS10YWIiKSksdC5jb2wrPWh9ZWxzZXt2YXIgZD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcih1WzBdKTtzLmFwcGVuZENoaWxkKGQpLHQuY29sKz0xfX1lbHNle3QuY29sKz1lLmxlbmd0aDt2YXIgcz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX1pZihyfHxufHxpfHx0Lm1lYXN1cmUpe3ZhciBwPXJ8fCIiO24mJihwKz1uKSxpJiYocCs9aSk7dmFyIGQ9c2koInNwYW4iLFtzXSxwKTtyZXR1cm4gbyYmKGQudGl0bGU9byksdC5wcmUuYXBwZW5kQ2hpbGQoZCl9dC5wcmUuYXBwZW5kQ2hpbGQocyl9fWZ1bmN0aW9uIGxuKHQsZSxyLG4saSl7Zm9yKHZhciBvPXQuY20ub3B0aW9ucy5saW5lV3JhcHBpbmcsbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgcz1lLmNoYXJBdChsKSxhPTA9PWw7cz49Iu2ggCImJiLtr78iPnMmJmw8ZS5sZW5ndGgtMT8ocz1lLnNsaWNlKGwsbCsyKSwrK2wpOmwmJm8mJmhpKGUsbCkmJnQucHJlLmFwcGVuZENoaWxkKHNpKCJ3YnIiKSk7dmFyIHU9dC5tZWFzdXJlW3QucG9zXSxjPXQubWVhc3VyZVt0LnBvc109b24odCxzLHIsYSYmbixsPT1lLmxlbmd0aC0xJiZpKTt1JiYoYy5sZWZ0U2lkZT11LmxlZnRTaWRlfHx1KSxBaSYmbyYmIiAiPT1zJiZsJiYhL1xzLy50ZXN0KGUuY2hhckF0KGwtMSkpJiZsPGUubGVuZ3RoLTEmJiEvXHMvLnRlc3QoZS5jaGFyQXQobCsxKSkmJihjLnN0eWxlLndoaXRlU3BhY2U9Im5vcm1hbCIpLHQucG9zKz1zLmxlbmd0aH1lLmxlbmd0aCYmKHQubWVhc3VyZWRTb21ldGhpbmc9ITApfWZ1bmN0aW9uIHNuKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlPSIgIixyPTA7cjx0Lmxlbmd0aC0yOysrcillKz1yJTI/IiAiOiLCoCI7cmV0dXJuIGUrPSIgIn1yZXR1cm4gZnVuY3Rpb24ocixuLGksbyxsLHMpe3JldHVybiB0KHIsbi5yZXBsYWNlKC8gezMsfS9nLGUpLGksbyxsLHMpfX1mdW5jdGlvbiBhbih0LGUscixuKXt2YXIgaT0hbiYmci5yZXBsYWNlZFdpdGg7aWYoaSYmKHQuY29weVdpZGdldHMmJihpPWkuY2xvbmVOb2RlKCEwKSksdC5wcmUuYXBwZW5kQ2hpbGQoaSksdC5tZWFzdXJlKSl7aWYoZSl0Lm1lYXN1cmVbdC5wb3NdPWk7ZWxzZXt2YXIgbz1waSh0LmNtLmRpc3BsYXkubWVhc3VyZSk7aWYoImJvb2ttYXJrIiE9ci50eXBlfHxyLmluc2VydExlZnQpe2lmKHQubWVhc3VyZVt0LnBvc10pcmV0dXJuO3QubWVhc3VyZVt0LnBvc109dC5wcmUuaW5zZXJ0QmVmb3JlKG8saSl9ZWxzZSB0Lm1lYXN1cmVbdC5wb3NdPXQucHJlLmFwcGVuZENoaWxkKG8pfXQubWVhc3VyZWRTb21ldGhpbmc9ITB9dC5wb3MrPWV9ZnVuY3Rpb24gdW4odCxlLHIpe3ZhciBuPXQubWFya2VkU3BhbnMsaT10LnRleHQsbz0wO2lmKG4pZm9yKHZhciBsLHMsYSx1LGMsZixoPWkubGVuZ3RoLGQ9MCxwPTEsZz0iIixtPTA7Oyl7aWYobT09ZCl7cz1hPXU9Yz0iIixmPW51bGwsbT0xLzA7Zm9yKHZhciB2PVtdLHk9MDt5PG4ubGVuZ3RoOysreSl7dmFyIGI9blt5XSx4PWIubWFya2VyO2IuZnJvbTw9ZCYmKG51bGw9PWIudG98fGIudG8+ZCk/KG51bGwhPWIudG8mJm0+Yi50byYmKG09Yi50byxhPSIiKSx4LmNsYXNzTmFtZSYmKHMrPSIgIit4LmNsYXNzTmFtZSkseC5zdGFydFN0eWxlJiZiLmZyb209PWQmJih1Kz0iICIreC5zdGFydFN0eWxlKSx4LmVuZFN0eWxlJiZiLnRvPT1tJiYoYSs9IiAiK3guZW5kU3R5bGUpLHgudGl0bGUmJiFjJiYoYz14LnRpdGxlKSx4LmNvbGxhcHNlZCYmKCFmfHxmLm1hcmtlci5zaXplPHguc2l6ZSkmJihmPWIpKTpiLmZyb20+ZCYmbT5iLmZyb20mJihtPWIuZnJvbSksImJvb2ttYXJrIj09eC50eXBlJiZiLmZyb209PWQmJngucmVwbGFjZWRXaXRoJiZ2LnB1c2goeCkKfWlmKGYmJihmLmZyb218fDApPT1kJiYoYW4oZSwobnVsbD09Zi50bz9oOmYudG8pLWQsZi5tYXJrZXIsbnVsbD09Zi5mcm9tKSxudWxsPT1mLnRvKSlyZXR1cm4gZi5tYXJrZXIuZmluZCgpO2lmKCFmJiZ2Lmxlbmd0aClmb3IodmFyIHk9MDt5PHYubGVuZ3RoOysreSlhbihlLDAsdlt5XSl9aWYoZD49aClicmVhaztmb3IodmFyIEM9TWF0aC5taW4oaCxtKTs7KXtpZihnKXt2YXIgdz1kK2cubGVuZ3RoO2lmKCFmKXt2YXIgTD13PkM/Zy5zbGljZSgwLEMtZCk6ZztlLmFkZFRva2VuKGUsTCxsP2wrczpzLHUsZCtMLmxlbmd0aD09bT9hOiIiLGMpfWlmKHc+PUMpe2c9Zy5zbGljZShDLWQpLGQ9QzticmVha31kPXcsdT0iIn1nPWkuc2xpY2UobyxvPXJbcCsrXSksbD1lbihyW3ArK10sZSl9fWVsc2UgZm9yKHZhciBwPTE7cDxyLmxlbmd0aDtwKz0yKWUuYWRkVG9rZW4oZSxpLnNsaWNlKG8sbz1yW3BdKSxlbihyW3ArMV0sZSkpfWZ1bmN0aW9uIGNuKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gcj9yW3RdOm51bGx9ZnVuY3Rpb24gbCh0LHIsbil7JHIodCxyLG4saSksVW4odCwiY2hhbmdlIix0LGUpfXZhciBzPWUuZnJvbSxhPWUudG8sdT1lLnRleHQsYz1nbih0LHMubGluZSksZj1nbih0LGEubGluZSksaD1Rbih1KSxkPW8odS5sZW5ndGgtMSkscD1hLmxpbmUtcy5saW5lO2lmKDAhPXMuY2h8fDAhPWEuY2h8fCIiIT1ofHx0LmNtJiYhdC5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSlpZihjPT1mKWlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKStoK2MudGV4dC5zbGljZShhLmNoKSxkKTtlbHNle2Zvcih2YXIgZz1bXSxtPTEsdj11Lmxlbmd0aC0xO3Y+bTsrK20pZy5wdXNoKG5ldyBibyh1W21dLG8obSksaSkpO2cucHVzaChuZXcgYm8oaCtjLnRleHQuc2xpY2UoYS5jaCksZCxpKSksbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK3VbMF0sbygwKSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZSBpZigxPT11Lmxlbmd0aClsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXStmLnRleHQuc2xpY2UoYS5jaCksbygwKSksdC5yZW1vdmUocy5saW5lKzEscCk7ZWxzZXtsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSxsKGYsaCtmLnRleHQuc2xpY2UoYS5jaCksZCk7Zm9yKHZhciBtPTEsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7cD4xJiZ0LnJlbW92ZShzLmxpbmUrMSxwLTEpLHQuaW5zZXJ0KHMubGluZSsxLGcpfWVsc2V7Zm9yKHZhciBtPTAsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7bChmLGYudGV4dCxkKSxwJiZ0LnJlbW92ZShzLmxpbmUscCksZy5sZW5ndGgmJnQuaW5zZXJ0KHMubGluZSxnKX1Vbih0LCJjaGFuZ2UiLHQsZSksbnIodCxuLmFuY2hvcixuLmhlYWQsbnVsbCwhMCl9ZnVuY3Rpb24gZm4odCl7dGhpcy5saW5lcz10LHRoaXMucGFyZW50PW51bGw7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPTA7cj5lOysrZSl0W2VdLnBhcmVudD10aGlzLG4rPXRbZV0uaGVpZ2h0O3RoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gaG4odCl7dGhpcy5jaGlsZHJlbj10O2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10Lmxlbmd0aDtpPm47KytuKXt2YXIgbz10W25dO2UrPW8uY2h1bmtTaXplKCkscis9by5oZWlnaHQsby5wYXJlbnQ9dGhpc310aGlzLnNpemU9ZSx0aGlzLmhlaWdodD1yLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24gZG4odCxlLHIpe2Z1bmN0aW9uIG4odCxpLG8pe2lmKHQubGlua2VkKWZvcih2YXIgbD0wO2w8dC5saW5rZWQubGVuZ3RoOysrbCl7dmFyIHM9dC5saW5rZWRbbF07aWYocy5kb2MhPWkpe3ZhciBhPW8mJnMuc2hhcmVkSGlzdDsoIXJ8fGEpJiYoZShzLmRvYyxhKSxuKHMuZG9jLHQsYSkpfX19bih0LG51bGwsITApfWZ1bmN0aW9uIHBuKHQsZSl7aWYoZS5jbSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuIik7dC5kb2M9ZSxlLmNtPXQsbyh0KSxyKHQpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fGYodCksdC5vcHRpb25zLm1vZGU9ZS5tb2RlT3B0aW9uLHVlKHQpfWZ1bmN0aW9uIGduKHQsZSl7Zm9yKGUtPXQuZmlyc3Q7IXQubGluZXM7KWZvcih2YXIgcj0wOzsrK3Ipe3ZhciBuPXQuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+ZSl7dD1uO2JyZWFrfWUtPWl9cmV0dXJuIHQubGluZXNbZV19ZnVuY3Rpb24gbW4odCxlLHIpe3ZhciBuPVtdLGk9ZS5saW5lO3JldHVybiB0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe3ZhciBvPXQudGV4dDtpPT1yLmxpbmUmJihvPW8uc2xpY2UoMCxyLmNoKSksaT09ZS5saW5lJiYobz1vLnNsaWNlKGUuY2gpKSxuLnB1c2gobyksKytpfSksbn1mdW5jdGlvbiB2bih0LGUscil7dmFyIG49W107cmV0dXJuIHQuaXRlcihlLHIsZnVuY3Rpb24odCl7bi5wdXNoKHQudGV4dCl9KSxufWZ1bmN0aW9uIHluKHQsZSl7Zm9yKHZhciByPWUtdC5oZWlnaHQsbj10O247bj1uLnBhcmVudCluLmhlaWdodCs9cn1mdW5jdGlvbiBibih0KXtpZihudWxsPT10LnBhcmVudClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQscj10aShlLmxpbmVzLHQpLG49ZS5wYXJlbnQ7bjtlPW4sbj1uLnBhcmVudClmb3IodmFyIGk9MDtuLmNoaWxkcmVuW2ldIT1lOysraSlyKz1uLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpO3JldHVybiByK2UuZmlyc3R9ZnVuY3Rpb24geG4odCxlKXt2YXIgcj10LmZpcnN0O3Q6ZG97Zm9yKHZhciBuPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10LmNoaWxkcmVuW25dLGw9by5oZWlnaHQ7aWYobD5lKXt0PW87Y29udGludWUgdH1lLT1sLHIrPW8uY2h1bmtTaXplKCl9cmV0dXJuIHJ9d2hpbGUoIXQubGluZXMpO2Zvcih2YXIgbj0wLGk9dC5saW5lcy5sZW5ndGg7aT5uOysrbil7dmFyIHM9dC5saW5lc1tuXSxhPXMuaGVpZ2h0O2lmKGE+ZSlicmVhaztlLT1hfXJldHVybiByK259ZnVuY3Rpb24gQ24odCxlKXtlPUdyKHQuZG9jLGUpO2Zvcih2YXIgcj0wLG49ZS5wYXJlbnQsaT0wO2k8bi5saW5lcy5sZW5ndGg7KytpKXt2YXIgbz1uLmxpbmVzW2ldO2lmKG89PWUpYnJlYWs7cis9by5oZWlnaHR9Zm9yKHZhciBsPW4ucGFyZW50O2w7bj1sLGw9bi5wYXJlbnQpZm9yKHZhciBpPTA7aTxsLmNoaWxkcmVuLmxlbmd0aDsrK2kpe3ZhciBzPWwuY2hpbGRyZW5baV07aWYocz09bilicmVhaztyKz1zLmhlaWdodH1yZXR1cm4gcn1mdW5jdGlvbiB3bih0KXt2YXIgZT10Lm9yZGVyO3JldHVybiBudWxsPT1lJiYoZT10Lm9yZGVyPUJvKHQudGV4dCkpLGV9ZnVuY3Rpb24gTG4odCl7cmV0dXJue2RvbmU6W10sdW5kb25lOltdLHVuZG9EZXB0aDoxLzAsbGFzdFRpbWU6MCxsYXN0T3A6bnVsbCxsYXN0T3JpZ2luOm51bGwsZ2VuZXJhdGlvbjp0fHwxLG1heEdlbmVyYXRpb246dHx8MX19ZnVuY3Rpb24ga24odCxlLHIsbil7dmFyIGk9ZVsic3BhbnNfIit0LmlkXSxvPTA7dC5pdGVyKE1hdGgubWF4KHQuZmlyc3QsciksTWF0aC5taW4odC5maXJzdCt0LnNpemUsbiksZnVuY3Rpb24ocil7ci5tYXJrZWRTcGFucyYmKChpfHwoaT1lWyJzcGFuc18iK3QuaWRdPXt9KSlbb109ci5tYXJrZWRTcGFucyksKytvfSl9ZnVuY3Rpb24gU24odCxlKXt2YXIgcj17bGluZTplLmZyb20ubGluZSxjaDplLmZyb20uY2h9LG49e2Zyb206cix0bzpsbyhlKSx0ZXh0Om1uKHQsZS5mcm9tLGUudG8pfTtyZXR1cm4ga24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKSxkbih0LGZ1bmN0aW9uKHQpe2tuKHQsbixlLmZyb20ubGluZSxlLnRvLmxpbmUrMSl9LCEwKSxufWZ1bmN0aW9uIE1uKHQsZSxyLG4pe3ZhciBpPXQuaGlzdG9yeTtpLnVuZG9uZS5sZW5ndGg9MDt2YXIgbz0rbmV3IERhdGUsbD1RbihpLmRvbmUpO2lmKGwmJihpLmxhc3RPcD09bnx8aS5sYXN0T3JpZ2luPT1lLm9yaWdpbiYmZS5vcmlnaW4mJigiKyI9PWUub3JpZ2luLmNoYXJBdCgwKSYmdC5jbSYmaS5sYXN0VGltZT5vLXQuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheXx8IioiPT1lLm9yaWdpbi5jaGFyQXQoMCkpKSl7dmFyIHM9UW4obC5jaGFuZ2VzKTtqZShlLmZyb20sZS50bykmJmplKGUuZnJvbSxzLnRvKT9zLnRvPWxvKGUpOmwuY2hhbmdlcy5wdXNoKFNuKHQsZSkpLGwuYW5jaG9yQWZ0ZXI9ci5hbmNob3IsbC5oZWFkQWZ0ZXI9ci5oZWFkfWVsc2UgZm9yKGw9e2NoYW5nZXM6W1NuKHQsZSldLGdlbmVyYXRpb246aS5nZW5lcmF0aW9uLGFuY2hvckJlZm9yZTp0LnNlbC5hbmNob3IsaGVhZEJlZm9yZTp0LnNlbC5oZWFkLGFuY2hvckFmdGVyOnIuYW5jaG9yLGhlYWRBZnRlcjpyLmhlYWR9LGkuZG9uZS5wdXNoKGwpLGkuZ2VuZXJhdGlvbj0rK2kubWF4R2VuZXJhdGlvbjtpLmRvbmUubGVuZ3RoPmkudW5kb0RlcHRoOylpLmRvbmUuc2hpZnQoKTtpLmxhc3RUaW1lPW8saS5sYXN0T3A9bixpLmxhc3RPcmlnaW49ZS5vcmlnaW59ZnVuY3Rpb24gVG4odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlLHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLm1hcmtlci5leHBsaWNpdGx5Q2xlYXJlZD9lfHwoZT10LnNsaWNlKDAscikpOmUmJmUucHVzaCh0W3JdKTtyZXR1cm4gZT9lLmxlbmd0aD9lOm51bGw6dH1mdW5jdGlvbiBBbih0LGUpe3ZhciByPWVbInNwYW5zXyIrdC5pZF07aWYoIXIpcmV0dXJuIG51bGw7Zm9yKHZhciBuPTAsaT1bXTtuPGUudGV4dC5sZW5ndGg7KytuKWkucHVzaChUbihyW25dKSk7cmV0dXJuIGl9ZnVuY3Rpb24gSG4odCxlKXtmb3IodmFyIHI9MCxuPVtdO3I8dC5sZW5ndGg7KytyKXt2YXIgaT10W3JdLG89aS5jaGFuZ2VzLGw9W107bi5wdXNoKHtjaGFuZ2VzOmwsYW5jaG9yQmVmb3JlOmkuYW5jaG9yQmVmb3JlLGhlYWRCZWZvcmU6aS5oZWFkQmVmb3JlLGFuY2hvckFmdGVyOmkuYW5jaG9yQWZ0ZXIsaGVhZEFmdGVyOmkuaGVhZEFmdGVyfSk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDsrK3Mpe3ZhciBhLHU9b1tzXTtpZihsLnB1c2goe2Zyb206dS5mcm9tLHRvOnUudG8sdGV4dDp1LnRleHR9KSxlKWZvcih2YXIgYyBpbiB1KShhPWMubWF0Y2goL15zcGFuc18oXGQrKSQvKSkmJnRpKGUsTnVtYmVyKGFbMV0pKT4tMSYmKFFuKGwpW2NdPXVbY10sZGVsZXRlIHVbY10pfX1yZXR1cm4gbn1mdW5jdGlvbiBObih0LGUscixuKXtyPHQubGluZT90LmxpbmUrPW46ZTx0LmxpbmUmJih0LmxpbmU9ZSx0LmNoPTApfWZ1bmN0aW9uIERuKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXtmb3IodmFyIG89dFtpXSxsPSEwLHM9MDtzPG8uY2hhbmdlcy5sZW5ndGg7KytzKXt2YXIgYT1vLmNoYW5nZXNbc107aWYoby5jb3BpZWR8fChhLmZyb209WmUoYS5mcm9tKSxhLnRvPVplKGEudG8pKSxyPGEuZnJvbS5saW5lKWEuZnJvbS5saW5lKz1uLGEudG8ubGluZSs9bjtlbHNlIGlmKGU8PWEudG8ubGluZSl7bD0hMTticmVha319by5jb3BpZWR8fChvLmFuY2hvckJlZm9yZT1aZShvLmFuY2hvckJlZm9yZSksby5oZWFkQmVmb3JlPVplKG8uaGVhZEJlZm9yZSksby5hbmNob3JBZnRlcj1aZShvLmFuY2hvckFmdGVyKSxvLnJlYWRBZnRlcj1aZShvLmhlYWRBZnRlciksby5jb3BpZWQ9ITApLGw/KE5uKG8uYW5jaG9yQmVmb3JlKSxObihvLmhlYWRCZWZvcmUpLE5uKG8uYW5jaG9yQWZ0ZXIpLE5uKG8uaGVhZEFmdGVyKSk6KHQuc3BsaWNlKDAsaSsxKSxpPTApfX1mdW5jdGlvbiBXbih0LGUpe3ZhciByPWUuZnJvbS5saW5lLG49ZS50by5saW5lLGk9ZS50ZXh0Lmxlbmd0aC0obi1yKS0xO0RuKHQuZG9uZSxyLG4saSksRG4odC51bmRvbmUscixuLGkpfWZ1bmN0aW9uIE9uKCl7UG4odGhpcyl9ZnVuY3Rpb24gRW4odCl7cmV0dXJuIHQuc3RvcHx8KHQuc3RvcD1PbiksdH1mdW5jdGlvbiB6bih0KXt0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIEluKHQpe3Quc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gRm4odCl7cmV0dXJuIG51bGwhPXQuZGVmYXVsdFByZXZlbnRlZD90LmRlZmF1bHRQcmV2ZW50ZWQ6MD09dC5yZXR1cm5WYWx1ZX1mdW5jdGlvbiBQbih0KXt6bih0KSxJbih0KX1mdW5jdGlvbiBSbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudH1mdW5jdGlvbiBCbih0KXt2YXIgZT10LndoaWNoO3JldHVybiBudWxsPT1lJiYoMSZ0LmJ1dHRvbj9lPTE6MiZ0LmJ1dHRvbj9lPTM6NCZ0LmJ1dHRvbiYmKGU9MikpLEtpJiZ0LmN0cmxLZXkmJjE9PWUmJihlPTMpLGV9ZnVuY3Rpb24gR24odCxlLHIpe2lmKHQuYWRkRXZlbnRMaXN0ZW5lcil0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuYXR0YWNoRXZlbnQpdC5hdHRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVyc3x8KHQuX2hhbmRsZXJzPXt9KSxpPW5bZV18fChuW2VdPVtdKTtpLnB1c2gocil9fWZ1bmN0aW9uIFZuKHQsZSxyKXtpZih0LnJlbW92ZUV2ZW50TGlzdGVuZXIpdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMSk7ZWxzZSBpZih0LmRldGFjaEV2ZW50KXQuZGV0YWNoRXZlbnQoIm9uIitlLHIpO2Vsc2V7dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKCFuKXJldHVybjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoOysraSlpZihuW2ldPT1yKXtuLnNwbGljZShpLDEpO2JyZWFrfX19ZnVuY3Rpb24gS24odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYocilmb3IodmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLGk9MDtpPHIubGVuZ3RoOysraSlyW2ldLmFwcGx5KG51bGwsbil9ZnVuY3Rpb24gVW4odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxpKX19dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKG4pe3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtTb3x8KCsrTW8sU289W10sc2V0VGltZW91dChfbiwwKSk7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDsrK28pU28ucHVzaChyKG5bb10pKX19ZnVuY3Rpb24gWG4odCxlLHIpe3JldHVybiBLbih0LHJ8fGUudHlwZSx0LGUpLEZuKGUpfHxlLmNvZGVtaXJyb3JJZ25vcmV9ZnVuY3Rpb24gX24oKXstLU1vO3ZhciB0PVNvO1NvPW51bGw7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2UpdFtlXSgpfWZ1bmN0aW9uIFluKHQsZSl7dmFyIHI9dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO3JldHVybiByJiZyLmxlbmd0aD4wfWZ1bmN0aW9uIGpuKHQpe3QucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7R24odGhpcyx0LGUpfSx0LnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXtWbih0aGlzLHQsZSl9fWZ1bmN0aW9uICRuKCl7dGhpcy5pZD1udWxsfWZ1bmN0aW9uIFpuKHQsZSxyLG4saSl7bnVsbD09ZSYmKGU9dC5zZWFyY2goL1teXHNcdTAwYTBdLyksLTE9PWUmJihlPXQubGVuZ3RoKSk7Zm9yKHZhciBvPW58fDAsbD1pfHwwO2U+bzsrK28pIgkiPT10LmNoYXJBdChvKT9sKz1yLWwlcjorK2w7cmV0dXJuIGx9ZnVuY3Rpb24gcW4odCl7Zm9yKDtIby5sZW5ndGg8PXQ7KUhvLnB1c2goUW4oSG8pKyIgIik7cmV0dXJuIEhvW3RdfWZ1bmN0aW9uIFFuKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfWZ1bmN0aW9uIEpuKHQpe2lmKEdpKXQuc2VsZWN0aW9uU3RhcnQ9MCx0LnNlbGVjdGlvbkVuZD10LnZhbHVlLmxlbmd0aDtlbHNlIHRyeXt0LnNlbGVjdCgpfWNhdGNoKGUpe319ZnVuY3Rpb24gdGkodCxlKXtpZih0LmluZGV4T2YpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO24+cjsrK3IpaWYodFtyXT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBlaSh0LGUpe2Z1bmN0aW9uIHIoKXt9ci5wcm90b3R5cGU9dDt2YXIgbj1uZXcgcjtyZXR1cm4gZSYmcmkoZSxuKSxufWZ1bmN0aW9uIHJpKHQsZSl7ZXx8KGU9e30pO2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT1bXSxyPTA7dD5yOysrcillLnB1c2godm9pZCAwKTtyZXR1cm4gZX1mdW5jdGlvbiBpaSh0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gb2kodCl7cmV0dXJuL1x3Ly50ZXN0KHQpfHx0PiLCgCImJih0LnRvVXBwZXJDYXNlKCkhPXQudG9Mb3dlckNhc2UoKXx8Tm8udGVzdCh0KSl9ZnVuY3Rpb24gbGkodCl7Zm9yKHZhciBlIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzaSh0LGUscixuKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO2lmKHImJihpLmNsYXNzTmFtZT1yKSxuJiYoaS5zdHlsZS5jc3NUZXh0PW4pLCJzdHJpbmciPT10eXBlb2YgZSljaShpLGUpO2Vsc2UgaWYoZSlmb3IodmFyIG89MDtvPGUubGVuZ3RoOysrbylpLmFwcGVuZENoaWxkKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGFpKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMubGVuZ3RoO2U+MDstLWUpdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3JldHVybiB0fWZ1bmN0aW9uIHVpKHQsZSl7cmV0dXJuIGFpKHQpLmFwcGVuZENoaWxkKGUpfWZ1bmN0aW9uIGNpKHQsZSl7Tmk/KHQuaW5uZXJIVE1MPSIiLHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpKTp0LnRleHRDb250ZW50PWV9ZnVuY3Rpb24gZmkodCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4hMX1mdW5jdGlvbiBkaSh0KXtpZihudWxsIT1PbylyZXR1cm4gT287dmFyIGU9c2koImRpdiIsbnVsbCxudWxsLCJ3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxvdy14OiBzY3JvbGwiKTtyZXR1cm4gdWkodCxlKSxlLm9mZnNldFdpZHRoJiYoT289ZS5vZmZzZXRIZWlnaHQtZS5jbGllbnRIZWlnaHQpLE9vfHwwfWZ1bmN0aW9uIHBpKHQpe2lmKG51bGw9PUVvKXt2YXIgZT1zaSgic3BhbiIsIuKAiyIpO3VpKHQsc2koInNwYW4iLFtlLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IildKSksMCE9dC5maXJzdENoaWxkLm9mZnNldEhlaWdodCYmKEVvPWUub2Zmc2V0V2lkdGg8PTEmJmUub2Zmc2V0SGVpZ2h0PjImJiFIaSl9cmV0dXJuIEVvP3NpKCJzcGFuIiwi4oCLIik6c2koInNwYW4iLCLCoCIsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgiKX1mdW5jdGlvbiBnaSh0LGUscixuKXtpZighdClyZXR1cm4gbihlLHIsImx0ciIpO2Zvcih2YXIgaT0hMSxvPTA7bzx0Lmxlbmd0aDsrK28pe3ZhciBsPXRbb107KGwuZnJvbTxyJiZsLnRvPmV8fGU9PXImJmwudG89PWUpJiYobihNYXRoLm1heChsLmZyb20sZSksTWF0aC5taW4obC50byxyKSwxPT1sLmxldmVsPyJydGwiOiJsdHIiKSxpPSEwKX1pfHxuKGUsciwibHRyIil9ZnVuY3Rpb24gbWkodCl7cmV0dXJuIHQubGV2ZWwlMj90LnRvOnQuZnJvbX1mdW5jdGlvbiB2aSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QuZnJvbTp0LnRvfWZ1bmN0aW9uIHlpKHQpe3ZhciBlPXduKHQpO3JldHVybiBlP21pKGVbMF0pOjB9ZnVuY3Rpb24gYmkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/dmkoUW4oZSkpOnQudGV4dC5sZW5ndGh9ZnVuY3Rpb24geGkodCxlKXt2YXIgcj1nbih0LmRvYyxlKSxuPUdyKHQuZG9jLHIpO24hPXImJihlPWJuKG4pKTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP2JpKG4pOnlpKG4pOjA7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gQ2kodCxlKXtmb3IodmFyIHIsbjtyPUJyKG49Z24odC5kb2MsZSkpOyllPXIuZmluZCgpLnRvLmxpbmU7dmFyIGk9d24obiksbz1pP2lbMF0ubGV2ZWwlMj95aShuKTpiaShuKTpuLnRleHQubGVuZ3RoO3JldHVybiBZZShlLG8pfWZ1bmN0aW9uIHdpKHQsZSxyKXt2YXIgbj10WzBdLmxldmVsO3JldHVybiBlPT1uPyEwOnI9PW4/ITE6cj5lfWZ1bmN0aW9uIExpKHQsZSl7Zm9yKHZhciByLG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXTtpZihpLmZyb208ZSYmaS50bz5lKXJldHVybiBSbz1udWxsLG47aWYoaS5mcm9tPT1lfHxpLnRvPT1lKXtpZihudWxsIT1yKXJldHVybiB3aSh0LGkubGV2ZWwsdFtyXS5sZXZlbCk/KFJvPXIsbik6KFJvPW4scik7cj1ufX1yZXR1cm4gUm89bnVsbCxyfWZ1bmN0aW9uIGtpKHQsZSxyLG4pe2lmKCFuKXJldHVybiBlK3I7ZG8gZSs9cjt3aGlsZShlPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChlKSkpO3JldHVybiBlfWZ1bmN0aW9uIFNpKHQsZSxyLG4pe3ZhciBpPXduKHQpO2lmKCFpKXJldHVybiBNaSh0LGUscixuKTtmb3IodmFyIG89TGkoaSxlKSxsPWlbb10scz1raSh0LGUsbC5sZXZlbCUyPy1yOnIsbik7Oyl7aWYocz5sLmZyb20mJnM8bC50bylyZXR1cm4gcztpZihzPT1sLmZyb218fHM9PWwudG8pcmV0dXJuIExpKGkscyk9PW8/czoobD1pW28rPXJdLHI+MD09bC5sZXZlbCUyP2wudG86bC5mcm9tKTtpZihsPWlbbys9cl0sIWwpcmV0dXJuIG51bGw7cz1yPjA9PWwubGV2ZWwlMj9raSh0LGwudG8sLTEsbik6a2kodCxsLmZyb20sMSxuKX19ZnVuY3Rpb24gTWkodCxlLHIsbil7dmFyIGk9ZStyO2lmKG4pZm9yKDtpPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChpKSk7KWkrPXI7cmV0dXJuIDA+aXx8aT50LnRleHQubGVuZ3RoP251bGw6aX12YXIgVGk9L2dlY2tvXC9cZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQWk9L01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSGk9QWkmJihudWxsPT1kb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw4KSxOaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDkpLERpPS9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFdpPS9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxPaT1XaSYmL1F0XC9cZCtcLlxkKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxFaT0vQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksemk9L09wZXJhXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSWk9L0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLEZpPS9LSFRNTFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFBpPS9NYWMgT1MgWCAxXGRcRChbNy05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFJpPS9NYWMgT1MgWCAxXGRcRChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEJpPS9QaGFudG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksR2k9L0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvTW9iaWxlXC9cdysvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksVmk9R2l8fC9BbmRyb2lkfHdlYk9TfEJsYWNrQmVycnl8T3BlcmEgTWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxLaT1HaXx8L01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFVpPS93aW4vaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksWGk9emkmJm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cLyhcZCpcLlxkKikvKTtYaSYmKFhpPU51bWJlcihYaVsxXSkpLFhpJiZYaT49MTUmJih6aT0hMSxXaT0hMCk7dmFyIF9pLFlpLGppLCRpPUtpJiYoT2l8fHppJiYobnVsbD09WGl8fDEyLjExPlhpKSksWmk9VGl8fEFpJiYhTmkscWk9ITEsUWk9ITEsSmk9MCx0bz0wLGVvPTAscm89bnVsbDtBaT9ybz0tLjUzOlRpP3JvPTE1OkVpP3JvPS0uNzpJaSYmKHJvPS0xLzMpO3ZhciBubyxpbyxvbz1udWxsLGxvPXQuY2hhbmdlRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQ/WWUodC5mcm9tLmxpbmUrdC50ZXh0Lmxlbmd0aC0xLFFuKHQudGV4dCkubGVuZ3RoKygxPT10LnRleHQubGVuZ3RoP3QuZnJvbS5jaDowKSk6dC50b307dC5Qb3M9WWUsdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsZm9jdXM6ZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKSxwZSh0aGlzKSxmZSh0aGlzKX0sc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHRpb25zLG49clt0XTsoclt0XSE9ZXx8Im1vZGUiPT10KSYmKHJbdF09ZSxzby5oYXNPd25Qcm9wZXJ0eSh0KSYmbGUodGhpcyxzb1t0XSkodGhpcyxlLG4pKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnNbdF19LGdldERvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY30sYWRkS2V5TWFwOmZ1bmN0aW9uKHQsZSl7dGhpcy5zdGF0ZS5rZXlNYXBzW2U/InB1c2giOiJ1bnNoaWZ0Il0odCl9LHJlbW92ZUtleU1hcDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdGF0ZS5rZXlNYXBzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT10fHwic3RyaW5nIiE9dHlwZW9mIGVbcl0mJmVbcl0ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSwhMH0sYWRkT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKGUscil7dmFyIG49ZS50b2tlbj9lOnQuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsZSk7aWYobi5zdGFydFN0YXRlKXRocm93IG5ldyBFcnJvcigiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKTt0aGlzLnN0YXRlLm92ZXJsYXlzLnB1c2goe21vZGU6bixtb2RlU3BlYzplLG9wYXF1ZTpyJiZyLm9wYXF1ZX0pLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpfSkscmVtb3ZlT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLm92ZXJsYXlzLHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG49ZVtyXS5tb2RlU3BlYztpZihuPT10fHwic3RyaW5nIj09dHlwZW9mIHQmJm4ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSx0aGlzLnN0YXRlLm1vZGVHZW4rKyx1ZSh0aGlzKSx2b2lkIDB9fSksaW5kZW50TGluZTpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXsic3RyaW5nIiE9dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZSYmKGU9bnVsbD09ZT90aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQ/InNtYXJ0IjoicHJldiI6ZT8iYWRkIjoic3VidHJhY3QiKSx0cih0aGlzLmRvYyx0KSYmaHIodGhpcyx0LGUscil9KSxpbmRlbnRTZWxlY3Rpb246bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRvYy5zZWw7aWYoamUoZS5mcm9tLGUudG8pKXJldHVybiBocih0aGlzLGUuZnJvbS5saW5lLHQpO2Zvcih2YXIgcj1lLnRvLmxpbmUtKGUudG8uY2g/MDoxKSxuPWUuZnJvbS5saW5lO3I+PW47KytuKWhyKHRoaXMsbix0KX0pLGdldFRva2VuQXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYzt0PVFlKHIsdCk7Zm9yKHZhciBuPXoodGhpcyx0LmxpbmUsZSksaT10aGlzLmRvYy5tb2RlLG89Z24ocix0LmxpbmUpLGw9bmV3IFNyKG8udGV4dCx0aGlzLm9wdGlvbnMudGFiU2l6ZSk7bC5wb3M8dC5jaCYmIWwuZW9sKCk7KXtsLnN0YXJ0PWwucG9zO3ZhciBzPWkudG9rZW4obCxuKX1yZXR1cm57c3RhcnQ6bC5zdGFydCxlbmQ6bC5wb3Msc3RyaW5nOmwuY3VycmVudCgpLGNsYXNzTmFtZTpzfHxudWxsLHR5cGU6c3x8bnVsbCxzdGF0ZTpufX0sZ2V0VG9rZW5UeXBlQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLmRvYyx0KTt2YXIgZT1Kcih0aGlzLGduKHRoaXMuZG9jLHQubGluZSkpLHI9MCxuPShlLmxlbmd0aC0xKS8yLGk9dC5jaDtpZigwPT1pKXJldHVybiBlWzJdO2Zvcig7Oyl7dmFyIG89cituPj4xO2lmKChvP2VbMipvLTFdOjApPj1pKW49bztlbHNle2lmKCEoZVsyKm8rMV08aSkpcmV0dXJuIGVbMipvKzJdO3I9bysxfX19LGdldE1vZGVBdDpmdW5jdGlvbihlKXt2YXIgcj10aGlzLmRvYy5tb2RlO3JldHVybiByLmlubmVyTW9kZT90LmlubmVyTW9kZShyLHRoaXMuZ2V0VG9rZW5BdChlKS5zdGF0ZSkubW9kZTpyfSxnZXRIZWxwZXI6ZnVuY3Rpb24odCxlKXtpZihnby5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHI9Z29bZV0sbj10aGlzLmdldE1vZGVBdCh0KTtyZXR1cm4gbltlXSYmcltuW2VdXXx8bi5oZWxwZXJUeXBlJiZyW24uaGVscGVyVHlwZV18fHJbbi5uYW1lXX19LGdldFN0YXRlQWZ0ZXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYztyZXR1cm4gdD1xZShyLG51bGw9PXQ/ci5maXJzdCtyLnNpemUtMTp0KSx6KHRoaXMsdCsxLGUpfSxjdXJzb3JDb29yZHM6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyZXR1cm4gcj1udWxsPT10P24uaGVhZDoib2JqZWN0Ij09dHlwZW9mIHQ/UWUodGhpcy5kb2MsdCk6dD9uLmZyb206bi50byxRKHRoaXMscixlfHwicGFnZSIpfSxjaGFyQ29vcmRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHEodGhpcyxRZSh0aGlzLmRvYyx0KSxlfHwicGFnZSIpfSxjb29yZHNDaGFyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHQsZXx8InBhZ2UiKSx0ZSh0aGlzLHQubGVmdCx0LnRvcCl9LGxpbmVBdEhlaWdodDpmdW5jdGlvbih0LGUpe3JldHVybiB0PVoodGhpcyx7dG9wOnQsbGVmdDowfSxlfHwicGFnZSIpLnRvcCx4bih0aGlzLmRvYyx0K3RoaXMuZGlzcGxheS52aWV3T2Zmc2V0KX0saGVpZ2h0QXRMaW5lOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ITEsbj10aGlzLmRvYy5maXJzdCt0aGlzLmRvYy5zaXplLTE7dDx0aGlzLmRvYy5maXJzdD90PXRoaXMuZG9jLmZpcnN0OnQ+biYmKHQ9bixyPSEwKTt2YXIgaT1nbih0aGlzLmRvYyx0KTtyZXR1cm4gJCh0aGlzLGduKHRoaXMuZG9jLHQpLHt0b3A6MCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wKyhyP2kuaGVpZ2h0OjApfSxkZWZhdWx0VGV4dEhlaWdodDpmdW5jdGlvbigpe3JldHVybiByZSh0aGlzLmRpc3BsYXkpfSxkZWZhdWx0Q2hhcldpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5lKHRoaXMuZGlzcGxheSl9LHNldEd1dHRlck1hcmtlcjpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ3V0dGVyTWFya2Vyc3x8KHQuZ3V0dGVyTWFya2Vycz17fSk7cmV0dXJuIG5bZV09ciwhciYmbGkobikmJih0Lmd1dHRlck1hcmtlcnM9bnVsbCksITB9KX0pLGNsZWFyR3V0dGVyOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZG9jLG49ci5maXJzdDtyLml0ZXIoZnVuY3Rpb24ocil7ci5ndXR0ZXJNYXJrZXJzJiZyLmd1dHRlck1hcmtlcnNbdF0mJihyLmd1dHRlck1hcmtlcnNbdF09bnVsbCx1ZShlLG4sbisxKSxsaShyLmd1dHRlck1hcmtlcnMpJiYoci5ndXR0ZXJNYXJrZXJzPW51bGwpKSwrK259KX0pLGFkZExpbmVDbGFzczpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPSJ0ZXh0Ij09ZT8idGV4dENsYXNzIjoiYmFja2dyb3VuZCI9PWU/ImJnQ2xhc3MiOiJ3cmFwQ2xhc3MiO2lmKHRbbl0pe2lmKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIrcisiKD86JHxcXHMpIikudGVzdCh0W25dKSlyZXR1cm4hMTt0W25dKz0iICIrcn1lbHNlIHRbbl09cjtyZXR1cm4hMH0pfSkscmVtb3ZlTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyIsaT10W25dO2lmKCFpKXJldHVybiExO2lmKG51bGw9PXIpdFtuXT1udWxsO2Vsc2V7dmFyIG89aS5tYXRjaChuZXcgUmVnRXhwKCIoPzpefFxccyspIityKyIoPzokfFxccyspIikpO2lmKCFvKXJldHVybiExO3ZhciBsPW8uaW5kZXgrb1swXS5sZW5ndGg7dFtuXT1pLnNsaWNlKDAsby5pbmRleCkrKG8uaW5kZXgmJmwhPWkubGVuZ3RoPyIgIjoiIikraS5zbGljZShsKXx8bnVsbH1yZXR1cm4hMH0pfSksYWRkTGluZVdpZGdldDpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4ganIodGhpcyx0LGUscil9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKHQpe3QuY2xlYXIoKX0sbGluZUluZm86ZnVuY3Rpb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZighdHIodGhpcy5kb2MsdCkpcmV0dXJuIG51bGw7dmFyIGU9dDtpZih0PWduKHRoaXMuZG9jLHQpLCF0KXJldHVybiBudWxsfWVsc2V7dmFyIGU9Ym4odCk7aWYobnVsbD09ZSlyZXR1cm4gbnVsbH1yZXR1cm57bGluZTplLGhhbmRsZTp0LHRleHQ6dC50ZXh0LGd1dHRlck1hcmtlcnM6dC5ndXR0ZXJNYXJrZXJzLHRleHRDbGFzczp0LnRleHRDbGFzcyxiZ0NsYXNzOnQuYmdDbGFzcyx3cmFwQ2xhc3M6dC53cmFwQ2xhc3Msd2lkZ2V0czp0LndpZGdldHN9fSxnZXRWaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZGlzcGxheS5zaG93aW5nRnJvbSx0bzp0aGlzLmRpc3BsYXkuc2hvd2luZ1RvfX0sYWRkV2lkZ2V0OmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89dGhpcy5kaXNwbGF5O3Q9USh0aGlzLFFlKHRoaXMuZG9jLHQpKTt2YXIgbD10LmJvdHRvbSxzPXQubGVmdDtpZihlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zaXplci5hcHBlbmRDaGlsZChlKSwib3ZlciI9PW4pbD10LnRvcDtlbHNlIGlmKCJhYm92ZSI9PW58fCJuZWFyIj09bil7dmFyIGE9TWF0aC5tYXgoby53cmFwcGVyLmNsaWVudEhlaWdodCx0aGlzLmRvYy5oZWlnaHQpLHU9TWF0aC5tYXgoby5zaXplci5jbGllbnRXaWR0aCxvLmxpbmVTcGFjZS5jbGllbnRXaWR0aCk7KCJhYm92ZSI9PW58fHQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PmEpJiZ0LnRvcD5lLm9mZnNldEhlaWdodD9sPXQudG9wLWUub2Zmc2V0SGVpZ2h0OnQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PD1hJiYobD10LmJvdHRvbSkscytlLm9mZnNldFdpZHRoPnUmJihzPXUtZS5vZmZzZXRXaWR0aCl9ZS5zdHlsZS50b3A9bCsicHgiLGUuc3R5bGUubGVmdD1lLnN0eWxlLnJpZ2h0PSIiLCJyaWdodCI9PWk/KHM9by5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoLGUuc3R5bGUucmlnaHQ9IjBweCIpOigibGVmdCI9PWk/cz0wOiJtaWRkbGUiPT1pJiYocz0oby5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoKS8yKSxlLnN0eWxlLmxlZnQ9cysicHgiKSxyJiZhcih0aGlzLHMsbCxzK2Uub2Zmc2V0V2lkdGgsbCtlLm9mZnNldEhlaWdodCl9LHRyaWdnZXJPbktleURvd246bGUobnVsbCxXZSksZXhlY0NvbW1hbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG1vW3RdKHRoaXMpfSxmaW5kUG9zSDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBvPTAsbD1RZSh0aGlzLmRvYyx0KTtlPm8mJihsPXByKHRoaXMuZG9jLGwsaSxyLG4pLCFsLmhpdFNpZGUpOysrbyk7cmV0dXJuIGx9LG1vdmVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyPW4uc2hpZnR8fG4uZXh0ZW5kfHxqZShuLmZyb20sbi50byk/cHIodGhpcy5kb2Msbi5oZWFkLHQsZSx0aGlzLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTowPnQ/bi5mcm9tOm4udG8sZXIodGhpcy5kb2MscixyLHQpfSksZGVsZXRlSDpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsO2plKHIuZnJvbSxyLnRvKT9fZSh0aGlzLmRvYywiIixyLmZyb20scHIodGhpcy5kb2Msci5oZWFkLHQsZSwhMSksIitkZWxldGUiKTpfZSh0aGlzLmRvYywiIixyLmZyb20sci50bywiK2RlbGV0ZSIpLHRoaXMuY3VyT3AudXNlclNlbENoYW5nZT0hMH0pLGZpbmRQb3NWOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTEsbz1uOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBsPTAscz1RZSh0aGlzLmRvYyx0KTtlPmw7KytsKXt2YXIgYT1RKHRoaXMscywiZGl2Iik7aWYobnVsbD09bz9vPWEubGVmdDphLmxlZnQ9byxzPWdyKHRoaXMsYSxpLHIpLHMuaGl0U2lkZSlicmVha31yZXR1cm4gc30sbW92ZVY6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jLnNlbCxuPVEodGhpcyxyLmhlYWQsImRpdiIpO251bGwhPXIuZ29hbENvbHVtbiYmKG4ubGVmdD1yLmdvYWxDb2x1bW4pO3ZhciBpPWdyKHRoaXMsbix0LGUpOyJwYWdlIj09ZSYmZnIodGhpcywwLHEodGhpcyxpLCJkaXYiKS50b3Atbi50b3ApLGVyKHRoaXMuZG9jLGksaSx0KSxyLmdvYWxDb2x1bW49bi5sZWZ0fSksdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpeyhudWxsPT10fHx0IT10aGlzLnN0YXRlLm92ZXJ3cml0ZSkmJigodGhpcy5zdGF0ZS5vdmVyd3JpdGU9IXRoaXMuc3RhdGUub3ZlcndyaXRlKT90aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI6dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWU9dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itb3ZlcndyaXRlIiwiIikpfSxoYXNGb2N1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmZvY3VzZWR9LHNjcm9sbFRvOmxlKG51bGwsZnVuY3Rpb24odCxlKXtjcih0aGlzLHQsZSl9KSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kaXNwbGF5LnNjcm9sbGVyLGU9VG87cmV0dXJue2xlZnQ6dC5zY3JvbGxMZWZ0LHRvcDp0LnNjcm9sbFRvcCxoZWlnaHQ6dC5zY3JvbGxIZWlnaHQtZSx3aWR0aDp0LnNjcm9sbFdpZHRoLWUsY2xpZW50SGVpZ2h0OnQuY2xpZW50SGVpZ2h0LWUsY2xpZW50V2lkdGg6dC5jbGllbnRXaWR0aC1lfX0sc2Nyb2xsSW50b1ZpZXc6bGUobnVsbCxmdW5jdGlvbih0LGUpe251bGw9PXQ/dD17ZnJvbTp0aGlzLmRvYy5zZWwuaGVhZCx0bzpudWxsfToibnVtYmVyIj09dHlwZW9mIHQ/dD17ZnJvbTpZZSh0LDApLHRvOm51bGx9Om51bGw9PXQuZnJvbSYmKHQ9e2Zyb206dCx0bzpudWxsfSksdC50b3x8KHQudG89dC5mcm9tKSxlfHwoZT0wKTt2YXIgcj10O251bGwhPXQuZnJvbS5saW5lJiYodGhpcy5jdXJPcC5zY3JvbGxUb1Bvcz17ZnJvbTp0LmZyb20sdG86dC50byxtYXJnaW46ZX0scj17ZnJvbTpRKHRoaXMsdC5mcm9tKSx0bzpRKHRoaXMsdC50byl9KTt2YXIgbj11cih0aGlzLE1hdGgubWluKHIuZnJvbS5sZWZ0LHIudG8ubGVmdCksTWF0aC5taW4oci5mcm9tLnRvcCxyLnRvLnRvcCktZSxNYXRoLm1heChyLmZyb20ucmlnaHQsci50by5yaWdodCksTWF0aC5tYXgoci5mcm9tLmJvdHRvbSxyLnRvLmJvdHRvbSkrZSk7Y3IodGhpcyxuLnNjcm9sbExlZnQsbi5zY3JvbGxUb3ApfSksc2V0U2l6ZTpsZShudWxsLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fC9eXGQrJC8udGVzdChTdHJpbmcodCkpP3QrInB4Ijp0fW51bGwhPXQmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aD1yKHQpKSxudWxsIT1lJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0PXIoZSkpLHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dGhpcy5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCksdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMH0pLG9wZXJhdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gYWUodGhpcyx0KX0scmVmcmVzaDpsZShudWxsLGZ1bmN0aW9uKCl7dmFyIHQ9bnVsbD09dGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7Xyh0aGlzKSxjcih0aGlzLHRoaXMuZG9jLnNjcm9sbExlZnQsdGhpcy5kb2Muc2Nyb2xsVG9wKSx1ZSh0aGlzKSx0JiZvKHRoaXMpfSksc3dhcERvYzpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jO3JldHVybiBlLmNtPW51bGwscG4odGhpcyx0KSxfKHRoaXMpLGRlKHRoaXMsITApLGNyKHRoaXMsdC5zY3JvbGxMZWZ0LHQuc2Nyb2xsVG9wKSxVbih0aGlzLCJzd2FwRG9jIix0aGlzLGUpLGV9KSxnZXRJbnB1dEZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dH0sZ2V0V3JhcHBlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXJ9LGdldFNjcm9sbGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXJ9LGdldEd1dHRlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnN9fSxqbih0KTt2YXIgc289dC5vcHRpb25IYW5kbGVycz17fSxhbz10LmRlZmF1bHRzPXt9LHVvPXQuSW5pdD17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ29kZU1pcnJvci5Jbml0In19O3lyKCJ2YWx1ZSIsIiIsZnVuY3Rpb24odCxlKXt0LnNldFZhbHVlKGUpfSwhMCkseXIoIm1vZGUiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRvYy5tb2RlT3B0aW9uPWUscih0KX0sITApLHlyKCJpbmRlbnRVbml0IiwyLHIsITApLHlyKCJpbmRlbnRXaXRoVGFicyIsITEpLHlyKCJzbWFydEluZGVudCIsITApLHlyKCJ0YWJTaXplIiw0LGZ1bmN0aW9uKHQpe3IodCksXyh0KSx1ZSh0KX0sITApLHlyKCJzcGVjaWFsQ2hhcnMiLC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVmZWZmXS9nLGZ1bmN0aW9uKHQsZSl7dC5vcHRpb25zLnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKGUuc291cmNlKyhlLnRlc3QoIgkiKT8iIjoifAkiKSwiZyIpLHQucmVmcmVzaCgpfSwhMCkseXIoInNwZWNpYWxDaGFyUGxhY2Vob2xkZXIiLG5uLGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSwhMCkseXIoImVsZWN0cmljQ2hhcnMiLCEwKSx5cigicnRsTW92ZVZpc3VhbGx5IiwhVWkpLHlyKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCEwKSx5cigidGhlbWUiLCJkZWZhdWx0IixmdW5jdGlvbih0KXtzKHQpLGEodCl9LCEwKSx5cigia2V5TWFwIiwiZGVmYXVsdCIsbCkseXIoImV4dHJhS2V5cyIsbnVsbCkseXIoIm9uS2V5RXZlbnQiLG51bGwpLHlyKCJvbkRyYWdFdmVudCIsbnVsbCkseXIoImxpbmVXcmFwcGluZyIsITEsbiwhMCkseXIoImd1dHRlcnMiLFtdLGZ1bmN0aW9uKHQpe2godC5vcHRpb25zKSxhKHQpfSwhMCkseXIoImZpeGVkR3V0dGVyIiwhMCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQ9ZT95KHQuZGlzcGxheSkrInB4IjoiMCIsdC5yZWZyZXNoKCl9LCEwKSx5cigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIiLCExLGQsITApLHlyKCJsaW5lTnVtYmVycyIsITEsZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZmlyc3RMaW5lTnVtYmVyIiwxLGEsITApLHlyKCJsaW5lTnVtYmVyRm9ybWF0dGVyIixmdW5jdGlvbih0KXtyZXR1cm4gdH0sYSwhMCkseXIoInNob3dDdXJzb3JXaGVuU2VsZWN0aW5nIiwhMSxBLCEwKSx5cigicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51IiwhMCkseXIoInJlYWRPbmx5IiwhMSxmdW5jdGlvbih0LGUpeyJub2N1cnNvciI9PWU/KHplKHQpLHQuZGlzcGxheS5pbnB1dC5ibHVyKCksdC5kaXNwbGF5LmRpc2FibGVkPSEwKToodC5kaXNwbGF5LmRpc2FibGVkPSExLGV8fGRlKHQsITApKX0pLHlyKCJkcmFnRHJvcCIsITApLHlyKCJjdXJzb3JCbGlua1JhdGUiLDUzMCkseXIoImN1cnNvclNjcm9sbE1hcmdpbiIsMCkseXIoImN1cnNvckhlaWdodCIsMSkseXIoIndvcmtUaW1lIiwxMDApLHlyKCJ3b3JrRGVsYXkiLDEwMCkseXIoImZsYXR0ZW5TcGFucyIsITApLHlyKCJwb2xsSW50ZXJ2YWwiLDEwMCkseXIoInVuZG9EZXB0aCIsNDAsZnVuY3Rpb24odCxlKXt0LmRvYy5oaXN0b3J5LnVuZG9EZXB0aD1lfSkseXIoImhpc3RvcnlFdmVudERlbGF5Iiw1MDApLHlyKCJ2aWV3cG9ydE1hcmdpbiIsMTAsZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigibWF4SGlnaGxpZ2h0TGVuZ3RoIiwxZTQsZnVuY3Rpb24odCl7cih0KSx0LnJlZnJlc2goKX0sITApLHlyKCJjcnVkZU1lYXN1cmluZ0Zyb20iLDFlNCkseXIoIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCEwLGZ1bmN0aW9uKHQsZSl7ZXx8KHQuZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3A9dC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQ9MCl9KSx5cigidGFiaW5kZXgiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRpc3BsYXkuaW5wdXQudGFiSW5kZXg9ZXx8IiJ9KSx5cigiYXV0b2ZvY3VzIixudWxsKTt2YXIgY289dC5tb2Rlcz17fSxmbz10Lm1pbWVNb2Rlcz17fTt0LmRlZmluZU1vZGU9ZnVuY3Rpb24oZSxyKXtpZih0LmRlZmF1bHRzLm1vZGV8fCJudWxsIj09ZXx8KHQuZGVmYXVsdHMubW9kZT1lKSxhcmd1bWVudHMubGVuZ3RoPjIpe3IuZGVwZW5kZW5jaWVzPVtdO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDsrK24pci5kZXBlbmRlbmNpZXMucHVzaChhcmd1bWVudHNbbl0pfWNvW2VdPXJ9LHQuZGVmaW5lTUlNRT1mdW5jdGlvbih0LGUpe2ZvW3RdPWV9LHQucmVzb2x2ZU1vZGU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiZmby5oYXNPd25Qcm9wZXJ0eShlKSllPWZvW2VdO2Vsc2UgaWYoZSYmInN0cmluZyI9PXR5cGVvZiBlLm5hbWUmJmZvLmhhc093blByb3BlcnR5KGUubmFtZSkpe3ZhciByPWZvW2UubmFtZV07ZT1laShyLGUpLGUubmFtZT1yLm5hbWV9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUmJi9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChlKSlyZXR1cm4gdC5yZXNvbHZlTW9kZSgiYXBwbGljYXRpb24veG1sIik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3tuYW1lOmV9OmV8fHtuYW1lOiJudWxsIn19LHQuZ2V0TW9kZT1mdW5jdGlvbihlLHIpe3ZhciByPXQucmVzb2x2ZU1vZGUociksbj1jb1tyLm5hbWVdO2lmKCFuKXJldHVybiB0LmdldE1vZGUoZSwidGV4dC9wbGFpbiIpO3ZhciBpPW4oZSxyKTtpZihoby5oYXNPd25Qcm9wZXJ0eShyLm5hbWUpKXt2YXIgbz1ob1tyLm5hbWVdO2Zvcih2YXIgbCBpbiBvKW8uaGFzT3duUHJvcGVydHkobCkmJihpLmhhc093blByb3BlcnR5KGwpJiYoaVsiXyIrbF09aVtsXSksaVtsXT1vW2xdKX1yZXR1cm4gaS5uYW1lPXIubmFtZSxpfSx0LmRlZmluZU1vZGUoIm51bGwiLGZ1bmN0aW9uKCl7cmV0dXJue3Rva2VuOmZ1bmN0aW9uKHQpe3Quc2tpcFRvRW5kKCl9fX0pLHQuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsIm51bGwiKTt2YXIgaG89dC5tb2RlRXh0ZW5zaW9ucz17fTt0LmV4dGVuZE1vZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1oby5oYXNPd25Qcm9wZXJ0eSh0KT9ob1t0XTpob1t0XT17fTtyaShlLHIpfSx0LmRlZmluZUV4dGVuc2lvbj1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlW2VdPXJ9LHQuZGVmaW5lRG9jRXh0ZW5zaW9uPWZ1bmN0aW9uKHQsZSl7d28ucHJvdG90eXBlW3RdPWV9LHQuZGVmaW5lT3B0aW9uPXlyO3ZhciBwbz1bXTt0LmRlZmluZUluaXRIb29rPWZ1bmN0aW9uKHQpe3BvLnB1c2godCl9O3ZhciBnbz10LmhlbHBlcnM9e307dC5yZWdpc3RlckhlbHBlcj1mdW5jdGlvbihlLHIsbil7Z28uaGFzT3duUHJvcGVydHkoZSl8fChnb1tlXT10W2VdPXt9KSxnb1tlXVtyXT1ufSx0LmlzV29yZENoYXI9b2ksdC5jb3B5U3RhdGU9YnIsdC5zdGFydFN0YXRlPXhyLHQuaW5uZXJNb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKDt0LmlubmVyTW9kZTspe3ZhciByPXQuaW5uZXJNb2RlKGUpO2lmKCFyfHxyLm1vZGU9PXQpYnJlYWs7ZT1yLnN0YXRlLHQ9ci5tb2RlfXJldHVybiByfHx7bW9kZTp0LHN0YXRlOmV9fTt2YXIgbW89dC5jb21tYW5kcz17c2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3Quc2V0U2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCksWWUodC5sYXN0TGluZSgpKSl9LGtpbGxMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCEwKSxyPXQuZ2V0Q3Vyc29yKCExKSxuPSFqZShlLHIpO258fHQuZ2V0TGluZShlLmxpbmUpLmxlbmd0aCE9ZS5jaD90LnJlcGxhY2VSYW5nZSgiIixlLG4/cjpZZShlLmxpbmUpLCIrZGVsZXRlIik6dC5yZXBsYWNlUmFuZ2UoIiIsZSxZZShlLmxpbmUrMSwwKSwiK2RlbGV0ZSIpfSxkZWxldGVMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkubGluZTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLDApLFllKGUpLCIrZGVsZXRlIil9LGRlbExpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCk7dC5yZXBsYWNlUmFuZ2UoIiIsWWUoZS5saW5lLDApLGUsIitkZWxldGUiKX0sdW5kbzpmdW5jdGlvbih0KXt0LnVuZG8oKX0scmVkbzpmdW5jdGlvbih0KXt0LnJlZG8oKX0sZ29Eb2NTdGFydDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0LmZpcnN0TGluZSgpLDApKX0sZ29Eb2NFbmQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oWWUodC5sYXN0TGluZSgpKSl9LGdvTGluZVN0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKHhpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVN0YXJ0U21hcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXhpKHQsZS5saW5lKSxuPXQuZ2V0TGluZUhhbmRsZShyLmxpbmUpLGk9d24obik7aWYoaSYmMCE9aVswXS5sZXZlbCl0LmV4dGVuZFNlbGVjdGlvbihyKTtlbHNle3ZhciBvPU1hdGgubWF4KDAsbi50ZXh0LnNlYXJjaCgvXFMvKSksbD1lLmxpbmU9PXIubGluZSYmZS5jaDw9byYmZS5jaDt0LmV4dGVuZFNlbGVjdGlvbihZZShyLmxpbmUsbD8wOm8pKX19LGdvTGluZUVuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihDaSh0LHQuZ2V0Q3Vyc29yKCkubGluZSkpfSxnb0xpbmVSaWdodDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OnQuZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoKzEwMCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lTGVmdDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OjAsdG9wOmV9LCJkaXYiKSl9LGdvTGluZVVwOmZ1bmN0aW9uKHQpe3QubW92ZVYoLTEsImxpbmUiKX0sZ29MaW5lRG93bjpmdW5jdGlvbih0KXt0Lm1vdmVWKDEsImxpbmUiKX0sZ29QYWdlVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwicGFnZSIpfSxnb1BhZ2VEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwicGFnZSIpfSxnb0NoYXJMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNoYXIiKX0sZ29DaGFyUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJjaGFyIil9LGdvQ29sdW1uTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJjb2x1bW4iKX0sZ29Db2x1bW5SaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNvbHVtbiIpfSxnb1dvcmRMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsIndvcmQiKX0sZ29Hcm91cFJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiZ3JvdXAiKX0sZ29Hcm91cExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiZ3JvdXAiKX0sZ29Xb3JkUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJ3b3JkIil9LGRlbENoYXJCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJjaGFyIil9LGRlbENoYXJBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwiY2hhciIpfSxkZWxXb3JkQmVmb3JlOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgtMSwid29yZCIpfSxkZWxXb3JkQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsIndvcmQiKX0sZGVsR3JvdXBCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJncm91cCIpfSxkZWxHcm91cEFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJncm91cCIpfSxpbmRlbnRBdXRvOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpfSxpbmRlbnRNb3JlOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKX0saW5kZW50TGVzczpmdW5jdGlvbih0KXt0LmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKX0saW5zZXJ0VGFiOmZ1bmN0aW9uKHQpe3QucmVwbGFjZVNlbGVjdGlvbigiCSIsImVuZCIsIitpbnB1dCIpfSxkZWZhdWx0VGFiOmZ1bmN0aW9uKHQpe3Quc29tZXRoaW5nU2VsZWN0ZWQoKT90LmluZGVudFNlbGVjdGlvbigiYWRkIik6dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LHRyYW5zcG9zZUNoYXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkscj10LmdldExpbmUoZS5saW5lKTtlLmNoPjAmJmUuY2g8ci5sZW5ndGgtMSYmdC5yZXBsYWNlUmFuZ2Uoci5jaGFyQXQoZS5jaCkrci5jaGFyQXQoZS5jaC0xKSxZZShlLmxpbmUsZS5jaC0xKSxZZShlLmxpbmUsZS5jaCsxKSl9LG5ld2xpbmVBbmRJbmRlbnQ6ZnVuY3Rpb24odCl7bGUodCxmdW5jdGlvbigpe3QucmVwbGFjZVNlbGVjdGlvbigiXG4iLCJlbmQiLCIraW5wdXQiKSx0LmluZGVudExpbmUodC5nZXRDdXJzb3IoKS5saW5lLG51bGwsITApfSkoKX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpe3QudG9nZ2xlT3ZlcndyaXRlKCl9fSx2bz10LmtleU1hcD17fTt2by5iYXNpYz17TGVmdDoiZ29DaGFyTGVmdCIsUmlnaHQ6ImdvQ2hhclJpZ2h0IixVcDoiZ29MaW5lVXAiLERvd246ImdvTGluZURvd24iLEVuZDoiZ29MaW5lRW5kIixIb21lOiJnb0xpbmVTdGFydFNtYXJ0IixQYWdlVXA6ImdvUGFnZVVwIixQYWdlRG93bjoiZ29QYWdlRG93biIsRGVsZXRlOiJkZWxDaGFyQWZ0ZXIiLEJhY2tzcGFjZToiZGVsQ2hhckJlZm9yZSIsIlNoaWZ0LUJhY2tzcGFjZSI6ImRlbENoYXJCZWZvcmUiLFRhYjoiZGVmYXVsdFRhYiIsIlNoaWZ0LVRhYiI6ImluZGVudEF1dG8iLEVudGVyOiJuZXdsaW5lQW5kSW5kZW50IixJbnNlcnQ6InRvZ2dsZU92ZXJ3cml0ZSJ9LHZvLnBjRGVmYXVsdD17IkN0cmwtQSI6InNlbGVjdEFsbCIsIkN0cmwtRCI6ImRlbGV0ZUxpbmUiLCJDdHJsLVoiOiJ1bmRvIiwiU2hpZnQtQ3RybC1aIjoicmVkbyIsIkN0cmwtWSI6InJlZG8iLCJDdHJsLUhvbWUiOiJnb0RvY1N0YXJ0IiwiQWx0LVVwIjoiZ29Eb2NTdGFydCIsIkN0cmwtRW5kIjoiZ29Eb2NFbmQiLCJDdHJsLURvd24iOiJnb0RvY0VuZCIsIkN0cmwtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQ3RybC1SaWdodCI6ImdvR3JvdXBSaWdodCIsIkFsdC1MZWZ0IjoiZ29MaW5lU3RhcnQiLCJBbHQtUmlnaHQiOiJnb0xpbmVFbmQiLCJDdHJsLUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ3RybC1TIjoic2F2ZSIsIkN0cmwtRiI6ImZpbmQiLCJDdHJsLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUN0cmwtRyI6ImZpbmRQcmV2IiwiU2hpZnQtQ3RybC1GIjoicmVwbGFjZSIsIlNoaWZ0LUN0cmwtUiI6InJlcGxhY2VBbGwiLCJDdHJsLVsiOiJpbmRlbnRMZXNzIiwiQ3RybC1dIjoiaW5kZW50TW9yZSIsZmFsbHRocm91Z2g6ImJhc2ljIn0sdm8ubWFjRGVmYXVsdD17IkNtZC1BIjoic2VsZWN0QWxsIiwiQ21kLUQiOiJkZWxldGVMaW5lIiwiQ21kLVoiOiJ1bmRvIiwiU2hpZnQtQ21kLVoiOiJyZWRvIiwiQ21kLVkiOiJyZWRvIiwiQ21kLVVwIjoiZ29Eb2NTdGFydCIsIkNtZC1FbmQiOiJnb0RvY0VuZCIsIkNtZC1Eb3duIjoiZ29Eb2NFbmQiLCJBbHQtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQWx0LVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQ21kLUxlZnQiOiJnb0xpbmVTdGFydCIsIkNtZC1SaWdodCI6ImdvTGluZUVuZCIsIkFsdC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQWZ0ZXIiLCJBbHQtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkNtZC1TIjoic2F2ZSIsIkNtZC1GIjoiZmluZCIsIkNtZC1HIjoiZmluZE5leHQiLCJTaGlmdC1DbWQtRyI6ImZpbmRQcmV2IiwiQ21kLUFsdC1GIjoicmVwbGFjZSIsIlNoaWZ0LUNtZC1BbHQtRiI6InJlcGxhY2VBbGwiLCJDbWQtWyI6ImluZGVudExlc3MiLCJDbWQtXSI6ImluZGVudE1vcmUiLCJDbWQtQmFja3NwYWNlIjoiZGVsTGluZUxlZnQiLGZhbGx0aHJvdWdoOlsiYmFzaWMiLCJlbWFjc3kiXX0sdm9bImRlZmF1bHQiXT1LaT92by5tYWNEZWZhdWx0OnZvLnBjRGVmYXVsdCx2by5lbWFjc3k9eyJDdHJsLUYiOiJnb0NoYXJSaWdodCIsIkN0cmwtQiI6ImdvQ2hhckxlZnQiLCJDdHJsLVAiOiJnb0xpbmVVcCIsIkN0cmwtTiI6ImdvTGluZURvd24iLCJBbHQtRiI6ImdvV29yZFJpZ2h0IiwiQWx0LUIiOiJnb1dvcmRMZWZ0IiwiQ3RybC1BIjoiZ29MaW5lU3RhcnQiLCJDdHJsLUUiOiJnb0xpbmVFbmQiLCJDdHJsLVYiOiJnb1BhZ2VEb3duIiwiU2hpZnQtQ3RybC1WIjoiZ29QYWdlVXAiLCJDdHJsLUQiOiJkZWxDaGFyQWZ0ZXIiLCJDdHJsLUgiOiJkZWxDaGFyQmVmb3JlIiwiQWx0LUQiOiJkZWxXb3JkQWZ0ZXIiLCJBbHQtQmFja3NwYWNlIjoiZGVsV29yZEJlZm9yZSIsIkN0cmwtSyI6ImtpbGxMaW5lIiwiQ3RybC1UIjoidHJhbnNwb3NlQ2hhcnMifSx0Lmxvb2t1cEtleT13cix0LmlzTW9kaWZpZXJLZXk9THIsdC5rZXlOYW1lPWtyLHQuZnJvbVRleHRBcmVhPWZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe2UudmFsdWU9dS5nZXRWYWx1ZSgpfWlmKHJ8fChyPXt9KSxyLnZhbHVlPWUudmFsdWUsIXIudGFiaW5kZXgmJmUudGFiaW5kZXgmJihyLnRhYmluZGV4PWUudGFiaW5kZXgpLCFyLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyJiYoci5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyKSxudWxsPT1yLmF1dG9mb2N1cyl7dmFyIGk9ZG9jdW1lbnQuYm9keTt0cnl7aT1kb2N1bWVudC5hY3RpdmVFbGVtZW50fWNhdGNoKG8pe31yLmF1dG9mb2N1cz1pPT1lfHxudWxsIT1lLmdldEF0dHJpYnV0ZSgiYXV0b2ZvY3VzIikmJmk9PWRvY3VtZW50LmJvZHl9aWYoZS5mb3JtJiYoR24oZS5mb3JtLCJzdWJtaXQiLG4pLCFyLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpKXt2YXIgbD1lLmZvcm0scz1sLnN1Ym1pdDt0cnl7dmFyIGE9bC5zdWJtaXQ9ZnVuY3Rpb24oKXtuKCksbC5zdWJtaXQ9cyxsLnN1Ym1pdCgpLGwuc3VibWl0PWF9fWNhdGNoKG8pe319ZS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgdT10KGZ1bmN0aW9uKHQpe2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlLm5leHRTaWJsaW5nKX0scik7cmV0dXJuIHUuc2F2ZT1uLHUuZ2V0VGV4dEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sdS50b1RleHRBcmVhPWZ1bmN0aW9uKCl7bigpLGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1LmdldFdyYXBwZXJFbGVtZW50KCkpLGUuc3R5bGUuZGlzcGxheT0iIixlLmZvcm0mJihWbihlLmZvcm0sInN1Ym1pdCIsbiksImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9ybS5zdWJtaXQmJihlLmZvcm0uc3VibWl0PXMpKX0sdX0sU3IucHJvdG90eXBlPXtlb2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuc3RyaW5nLmxlbmd0aH0sc29sOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMucG9zfSxwZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyl8fHZvaWQgMH0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGg/dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOnZvaWQgMH0sZWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXZhciByPWU9PXQ7ZWxzZSB2YXIgcj1lJiYodC50ZXN0P3QudGVzdChlKTp0KGUpKTtyZXR1cm4gcj8oKyt0aGlzLnBvcyxlKTp2b2lkIDB9LGVhdFdoaWxlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmVhdCh0KTspO3JldHVybiB0aGlzLnBvcz5lfSxlYXRTcGFjZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBvczsvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTspKyt0aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M+dH0sc2tpcFRvRW5kOmZ1bmN0aW9uKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofSxza2lwVG86ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuaW5kZXhPZih0LHRoaXMucG9zKTtyZXR1cm4gZT4tMT8odGhpcy5wb3M9ZSwhMCk6dm9pZCAwfSxiYWNrVXA6ZnVuY3Rpb24odCl7dGhpcy5wb3MtPXR9LGNvbHVtbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPVpuKHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlfSxpbmRlbnRhdGlvbjpmdW5jdGlvbigpe3JldHVybiBabih0aGlzLnN0cmluZyxudWxsLHRoaXMudGFiU2l6ZSl9LG1hdGNoOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBuPXRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaCh0KTtyZXR1cm4gbiYmbi5pbmRleD4wP251bGw6KG4mJmUhPT0hMSYmKHRoaXMucG9zKz1uWzBdLmxlbmd0aCksbil9dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIHI/dC50b0xvd2VyQ2FzZSgpOnR9LG89dGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLHQubGVuZ3RoKTtyZXR1cm4gaShvKT09aSh0KT8oZSE9PSExJiYodGhpcy5wb3MrPXQubGVuZ3RoKSwhMCk6dm9pZCAwfSxjdXJyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5wb3MpfX0sdC5TdHJpbmdTdHJlYW09U3IsdC5UZXh0TWFya2VyPU1yLGpuKE1yKSxNci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dmFyIHQ9dGhpcy5kb2MuY20sZT10JiYhdC5jdXJPcDtpZihlJiZpZSh0KSxZbih0aGlzLCJjbGVhciIpKXt2YXIgcj10aGlzLmZpbmQoKTtyJiZVbih0aGlzLCJjbGVhciIsci5mcm9tLHIudG8pfWZvcih2YXIgbj1udWxsLGk9bnVsbCxvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBsPXRoaXMubGluZXNbb10scz1OcihsLm1hcmtlZFNwYW5zLHRoaXMpO251bGwhPXMudG8mJihpPWJuKGwpKSxsLm1hcmtlZFNwYW5zPURyKGwubWFya2VkU3BhbnMscyksbnVsbCE9cy5mcm9tP249Ym4obCk6dGhpcy5jb2xsYXBzZWQmJiFWcih0aGlzLmRvYyxsKSYmdCYmeW4obCxyZSh0LmRpc3BsYXkpKX1pZih0JiZ0aGlzLmNvbGxhcHNlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcpZm9yKHZhciBvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBhPUdyKHQuZG9jLHRoaXMubGluZXNbb10pLHU9Yyh0LmRvYyxhKTt1PnQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYodC5kaXNwbGF5Lm1heExpbmU9YSx0LmRpc3BsYXkubWF4TGluZUxlbmd0aD11LHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCl9bnVsbCE9biYmdCYmdWUodCxuLGkrMSksdGhpcy5saW5lcy5sZW5ndGg9MCx0aGlzLmV4cGxpY2l0bHlDbGVhcmVkPSEwLHRoaXMuYXRvbWljJiZ0aGlzLmRvYy5jYW50RWRpdCYmKHRoaXMuZG9jLmNhbnRFZGl0PSExLHQmJmlyKHQpKSxlJiZvZSh0KX19LE1yLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscj0wO3I8dGhpcy5saW5lcy5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmxpbmVzW3JdLGk9TnIobi5tYXJrZWRTcGFucyx0aGlzKTtpZihudWxsIT1pLmZyb218fG51bGwhPWkudG8pe3ZhciBvPWJuKG4pO251bGwhPWkuZnJvbSYmKHQ9WWUobyxpLmZyb20pKSxudWxsIT1pLnRvJiYoZT1ZZShvLGkudG8pKX19cmV0dXJuImJvb2ttYXJrIj09dGhpcy50eXBlP3Q6dCYme2Zyb206dCx0bzplfX0sTXIucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZpbmQoKSxlPXRoaXMuZG9jLmNtO2lmKHQmJmUpeyJib29rbWFyayIhPXRoaXMudHlwZSYmKHQ9dC5mcm9tKTt2YXIgcj1nbih0aGlzLmRvYyx0LmxpbmUpO2lmKEcoZSxyKSx0LmxpbmU+PWUuZGlzcGxheS5zaG93aW5nRnJvbSYmdC5saW5lPGUuZGlzcGxheS5zaG93aW5nVG8pe2Zvcih2YXIgbj1lLmRpc3BsYXkubGluZURpdi5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKWlmKG4ubGluZU9iaj09cil7bi5vZmZzZXRIZWlnaHQhPXIuaGVpZ2h0JiZ5bihyLG4ub2Zmc2V0SGVpZ2h0KTsKYnJlYWt9YWUoZSxmdW5jdGlvbigpe2UuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD1lLmN1ck9wLmZvcmNlVXBkYXRlPWUuY3VyT3AudXBkYXRlTWF4TGluZT0hMH0pfX19LE1yLnByb3RvdHlwZS5hdHRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wO2UubWF5YmVIaWRkZW5NYXJrZXJzJiYtMSE9dGkoZS5tYXliZUhpZGRlbk1hcmtlcnMsdGhpcyl8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzfHwoZS5tYXliZVVuaGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcyl9dGhpcy5saW5lcy5wdXNoKHQpfSxNci5wcm90b3R5cGUuZGV0YWNoTGluZT1mdW5jdGlvbih0KXtpZih0aGlzLmxpbmVzLnNwbGljZSh0aSh0aGlzLmxpbmVzLHQpLDEpLCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wOyhlLm1heWJlSGlkZGVuTWFya2Vyc3x8KGUubWF5YmVIaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX19LHQuU2hhcmVkVGV4dE1hcmtlcj1BcixqbihBciksQXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3RoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITA7Zm9yKHZhciB0PTA7dDx0aGlzLm1hcmtlcnMubGVuZ3RoOysrdCl0aGlzLm1hcmtlcnNbdF0uY2xlYXIoKTtVbih0aGlzLCJjbGVhciIpfX0sQXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoKX07dmFyIHlvPXQuTGluZVdpZGdldD1mdW5jdGlvbih0LGUscil7aWYocilmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodGhpc1tuXT1yW25dKTt0aGlzLmNtPXQsdGhpcy5ub2RlPWV9O2puKHlvKSx5by5wcm90b3R5cGUuY2xlYXI9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxpbmUud2lkZ2V0cyxlPWJuKHRoaXMubGluZSk7aWYobnVsbCE9ZSYmdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdFtyXT09dGhpcyYmdC5zcGxpY2Uoci0tLDEpO3QubGVuZ3RofHwodGhpcy5saW5lLndpZGdldHM9bnVsbCk7dmFyIG49Q24odGhpcy5jbSx0aGlzLmxpbmUpPHRoaXMuY20uZG9jLnNjcm9sbFRvcDt5bih0aGlzLmxpbmUsTWF0aC5tYXgoMCx0aGlzLmxpbmUuaGVpZ2h0LVlyKHRoaXMpKSksbiYmZnIodGhpcy5jbSwwLC10aGlzLmhlaWdodCksdWUodGhpcy5jbSxlLGUrMSl9fSkseW8ucHJvdG90eXBlLmNoYW5nZWQ9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhlaWdodDt0aGlzLmhlaWdodD1udWxsO3ZhciBlPVlyKHRoaXMpLXQ7aWYoZSl7eW4odGhpcy5saW5lLHRoaXMubGluZS5oZWlnaHQrZSk7dmFyIHI9Ym4odGhpcy5saW5lKTt1ZSh0aGlzLmNtLHIscisxKX19KTt2YXIgYm89dC5MaW5lPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCxYcih0aGlzLGUpLHRoaXMuaGVpZ2h0PXI/cih0aGlzKToxfTtqbihibyksYm8ucHJvdG90eXBlLmxpbmVObz1mdW5jdGlvbigpe3JldHVybiBibih0aGlzKX07dmFyIHhvPXt9O2ZuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZXMubGVuZ3RofSxyZW1vdmVJbm5lcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LG49dCtlO24+cjsrK3Ipe3ZhciBpPXRoaXMubGluZXNbcl07dGhpcy5oZWlnaHQtPWkuaGVpZ2h0LFpyKGkpLFVuKGksImRlbGV0ZSIpfXRoaXMubGluZXMuc3BsaWNlKHQsZSl9LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe3Quc3BsaWNlLmFwcGx5KHQsW3QubGVuZ3RoLDBdLmNvbmNhdCh0aGlzLmxpbmVzKSl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmhlaWdodCs9cix0aGlzLmxpbmVzPXRoaXMubGluZXMuc2xpY2UoMCx0KS5jb25jYXQoZSkuY29uY2F0KHRoaXMubGluZXMuc2xpY2UodCkpO2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7aT5uOysrbillW25dLnBhcmVudD10aGlzfSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQrZTtuPnQ7Kyt0KWlmKHIodGhpcy5saW5lc1t0XSkpcmV0dXJuITB9fSxobi5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5zaXplLT1lO2Zvcih2YXIgcj0wO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmNoaWxkcmVuW3JdLGk9bi5jaHVua1NpemUoKTtpZihpPnQpe3ZhciBvPU1hdGgubWluKGUsaS10KSxsPW4uaGVpZ2h0O2lmKG4ucmVtb3ZlSW5uZXIodCxvKSx0aGlzLmhlaWdodC09bC1uLmhlaWdodCxpPT1vJiYodGhpcy5jaGlsZHJlbi5zcGxpY2Uoci0tLDEpLG4ucGFyZW50PW51bGwpLDA9PShlLT1vKSlicmVhazt0PTB9ZWxzZSB0LT1pfWlmKHRoaXMuc2l6ZS1lPDI1KXt2YXIgcz1bXTt0aGlzLmNvbGxhcHNlKHMpLHRoaXMuY2hpbGRyZW49W25ldyBmbihzKV0sdGhpcy5jaGlsZHJlblswXS5wYXJlbnQ9dGhpc319LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7cj5lOysrZSl0aGlzLmNoaWxkcmVuW2VdLmNvbGxhcHNlKHQpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbih0LGUscil7dGhpcy5zaXplKz1lLmxlbmd0aCx0aGlzLmhlaWdodCs9cjtmb3IodmFyIG49MCxpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRoaXMuY2hpbGRyZW5bbl0sbD1vLmNodW5rU2l6ZSgpO2lmKGw+PXQpe2lmKG8uaW5zZXJ0SW5uZXIodCxlLHIpLG8ubGluZXMmJm8ubGluZXMubGVuZ3RoPjUwKXtmb3IoO28ubGluZXMubGVuZ3RoPjUwOyl7dmFyIHM9by5saW5lcy5zcGxpY2Uoby5saW5lcy5sZW5ndGgtMjUsMjUpLGE9bmV3IGZuKHMpO28uaGVpZ2h0LT1hLmhlaWdodCx0aGlzLmNoaWxkcmVuLnNwbGljZShuKzEsMCxhKSxhLnBhcmVudD10aGlzfXRoaXMubWF5YmVTcGlsbCgpfWJyZWFrfXQtPWx9fSxtYXliZVNwaWxsOmZ1bmN0aW9uKCl7aWYoISh0aGlzLmNoaWxkcmVuLmxlbmd0aDw9MTApKXt2YXIgdD10aGlzO2Rve3ZhciBlPXQuY2hpbGRyZW4uc3BsaWNlKHQuY2hpbGRyZW4ubGVuZ3RoLTUsNSkscj1uZXcgaG4oZSk7aWYodC5wYXJlbnQpe3Quc2l6ZS09ci5zaXplLHQuaGVpZ2h0LT1yLmhlaWdodDt2YXIgbj10aSh0LnBhcmVudC5jaGlsZHJlbix0KTt0LnBhcmVudC5jaGlsZHJlbi5zcGxpY2UobisxLDAscil9ZWxzZXt2YXIgaT1uZXcgaG4odC5jaGlsZHJlbik7aS5wYXJlbnQ9dCx0LmNoaWxkcmVuPVtpLHJdLHQ9aX1yLnBhcmVudD10LnBhcmVudH13aGlsZSh0LmNoaWxkcmVuLmxlbmd0aD4xMCk7dC5wYXJlbnQubWF5YmVTcGlsbCgpfX0saXRlck46ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD50KXt2YXIgcz1NYXRoLm1pbihlLGwtdCk7aWYoby5pdGVyTih0LHMscikpcmV0dXJuITA7aWYoMD09KGUtPXMpKWJyZWFrO3Q9MH1lbHNlIHQtPWx9fX07dmFyIENvPTAsd289dC5Eb2M9ZnVuY3Rpb24odCxlLHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHdvKSlyZXR1cm4gbmV3IHdvKHQsZSxyKTtudWxsPT1yJiYocj0wKSxobi5jYWxsKHRoaXMsW25ldyBmbihbbmV3IGJvKCIiLG51bGwpXSldKSx0aGlzLmZpcnN0PXIsdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5jYW50RWRpdD0hMSx0aGlzLmhpc3Rvcnk9TG4oKSx0aGlzLmNsZWFuR2VuZXJhdGlvbj0xLHRoaXMuZnJvbnRpZXI9cjt2YXIgbj1ZZShyLDApO3RoaXMuc2VsPXtmcm9tOm4sdG86bixoZWFkOm4sYW5jaG9yOm4sc2hpZnQ6ITEsZXh0ZW5kOiExLGdvYWxDb2x1bW46bnVsbH0sdGhpcy5pZD0rK0NvLHRoaXMubW9kZU9wdGlvbj1lLCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9em8odCkpLGNuKHRoaXMse2Zyb206bix0bzpuLHRleHQ6dH0sbnVsbCx7aGVhZDpuLGFuY2hvcjpufSl9O3dvLnByb3RvdHlwZT1laShobi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOndvLGl0ZXI6ZnVuY3Rpb24odCxlLHIpe3I/dGhpcy5pdGVyTih0LXRoaXMuZmlyc3QsZS10LHIpOnRoaXMuaXRlck4odGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSx0KX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9ZS5sZW5ndGg7aT5uOysrbilyKz1lW25dLmhlaWdodDt0aGlzLmluc2VydElubmVyKHQtdGhpcy5maXJzdCxlLHIpfSxyZW1vdmU6ZnVuY3Rpb24odCxlKXt0aGlzLnJlbW92ZUlubmVyKHQtdGhpcy5maXJzdCxlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKTtyZXR1cm4gdD09PSExP2U6ZS5qb2luKHR8fCJcbiIpfSxzZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1ZZSh0aGlzLmZpcnN0LDApLHI9dGhpcy5maXJzdCt0aGlzLnNpemUtMTtCZSh0aGlzLHtmcm9tOmUsdG86WWUocixnbih0aGlzLHIpLnRleHQubGVuZ3RoKSx0ZXh0OnpvKHQpLG9yaWdpbjoic2V0VmFsdWUifSx7aGVhZDplLGFuY2hvcjplfSwhMCl9LHJlcGxhY2VSYW5nZTpmdW5jdGlvbih0LGUscixuKXtlPVFlKHRoaXMsZSkscj1yP1FlKHRoaXMscik6ZSxfZSh0aGlzLHQsZSxyLG4pfSxnZXRSYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49bW4odGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSkpO3JldHVybiByPT09ITE/bjpuLmpvaW4ocnx8IlxuIil9LGdldExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMaW5lSGFuZGxlKHQpO3JldHVybiBlJiZlLnRleHR9LHNldExpbmU6ZnVuY3Rpb24odCxlKXt0cih0aGlzLHQpJiZfZSh0aGlzLGUsWWUodCwwKSxRZSh0aGlzLFllKHQpKSl9LHJlbW92ZUxpbmU6ZnVuY3Rpb24odCl7dD9fZSh0aGlzLCIiLFFlKHRoaXMsWWUodC0xKSksUWUodGhpcyxZZSh0KSkpOl9lKHRoaXMsIiIsWWUoMCwwKSxRZSh0aGlzLFllKDEsMCkpKX0sZ2V0TGluZUhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdHIodGhpcyx0KT9nbih0aGlzLHQpOnZvaWQgMH0sZ2V0TGluZU51bWJlcjpmdW5jdGlvbih0KXtyZXR1cm4gYm4odCl9LGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJih0PWduKHRoaXMsdCkpLEdyKHRoaXMsdCl9LGxpbmVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LGZpcnN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0fSxsYXN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0K3RoaXMuc2l6ZS0xfSxjbGlwUG9zOmZ1bmN0aW9uKHQpe3JldHVybiBRZSh0aGlzLHQpfSxnZXRDdXJzb3I6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLnNlbDtyZXR1cm4gZT1udWxsPT10fHwiaGVhZCI9PXQ/ci5oZWFkOiJhbmNob3IiPT10P3IuYW5jaG9yOiJlbmQiPT10fHx0PT09ITE/ci50bzpyLmZyb20sWmUoZSl9LHNvbWV0aGluZ1NlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWplKHRoaXMuc2VsLmhlYWQsdGhpcy5zZWwuYW5jaG9yKX0sc2V0Q3Vyc29yOnNlKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1RZSh0aGlzLCJudW1iZXIiPT10eXBlb2YgdD9ZZSh0LGV8fDApOnQpO3I/ZXIodGhpcyxuKTpucih0aGlzLG4sbil9KSxzZXRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe25yKHRoaXMsUWUodGhpcyx0KSxRZSh0aGlzLGV8fHQpLHIpfSksZXh0ZW5kU2VsZWN0aW9uOnNlKGZ1bmN0aW9uKHQsZSxyKXtlcih0aGlzLFFlKHRoaXMsdCksZSYmUWUodGhpcyxlKSxyKX0pLGdldFNlbGVjdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRSYW5nZSh0aGlzLnNlbC5mcm9tLHRoaXMuc2VsLnRvLHQpfSxyZXBsYWNlU2VsZWN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtCZSh0aGlzLHtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8sdGV4dDp6byh0KSxvcmlnaW46cn0sZXx8ImFyb3VuZCIpfSx1bmRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywidW5kbyIpfSkscmVkbzpzZShmdW5jdGlvbigpe1ZlKHRoaXMsInJlZG8iKX0pLHNldEV4dGVuZGluZzpmdW5jdGlvbih0KXt0aGlzLnNlbC5leHRlbmQ9dH0saGlzdG9yeVNpemU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhpc3Rvcnk7cmV0dXJue3VuZG86dC5kb25lLmxlbmd0aCxyZWRvOnQudW5kb25lLmxlbmd0aH19LGNsZWFySGlzdG9yeTpmdW5jdGlvbigpe3RoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbil9LG1hcmtDbGVhbjpmdW5jdGlvbigpe3RoaXMuY2xlYW5HZW5lcmF0aW9uPXRoaXMuY2hhbmdlR2VuZXJhdGlvbigpfSxjaGFuZ2VHZW5lcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGlzdG9yeS5sYXN0T3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCx0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbn0saXNDbGVhbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb249PSh0fHx0aGlzLmNsZWFuR2VuZXJhdGlvbil9LGdldEhpc3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpIbih0aGlzLmhpc3RvcnkuZG9uZSksdW5kb25lOkhuKHRoaXMuaGlzdG9yeS51bmRvbmUpfX0sc2V0SGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmhpc3Rvcnk9TG4odGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO2UuZG9uZT10LmRvbmUuc2xpY2UoMCksZS51bmRvbmU9dC51bmRvbmUuc2xpY2UoMCl9LG1hcmtUZXh0OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVHIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSksciwicmFuZ2UiKX0sc2V0Qm9va21hcms6ZnVuY3Rpb24odCxlKXt2YXIgcj17cmVwbGFjZWRXaXRoOmUmJihudWxsPT1lLm5vZGVUeXBlP2Uud2lkZ2V0OmUpLGluc2VydExlZnQ6ZSYmZS5pbnNlcnRMZWZ0fTtyZXR1cm4gdD1RZSh0aGlzLHQpLFRyKHRoaXMsdCx0LHIsImJvb2ttYXJrIil9LGZpbmRNYXJrc0F0OmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT1bXSxyPWduKHRoaXMsdC5saW5lKS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dOyhudWxsPT1pLmZyb218fGkuZnJvbTw9dC5jaCkmJihudWxsPT1pLnRvfHxpLnRvPj10LmNoKSYmZS5wdXNoKGkubWFya2VyLnBhcmVudHx8aS5tYXJrZXIpfXJldHVybiBlfSxnZXRBbGxNYXJrczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLml0ZXIoZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKW51bGwhPXJbbl0uZnJvbSYmdC5wdXNoKHJbbl0ubWFya2VyKX0pLHR9LHBvc0Zyb21JbmRleDpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihuKXt2YXIgaT1uLnRleHQubGVuZ3RoKzE7cmV0dXJuIGk+dD8oZT10LCEwKToodC09aSwrK3Isdm9pZCAwKX0pLFFlKHRoaXMsWWUocixlKSl9LGluZGV4RnJvbVBvczpmdW5jdGlvbih0KXt0PVFlKHRoaXMsdCk7dmFyIGU9dC5jaDtyZXR1cm4gdC5saW5lPHRoaXMuZmlyc3R8fHQuY2g8MD8wOih0aGlzLml0ZXIodGhpcy5maXJzdCx0LmxpbmUsZnVuY3Rpb24odCl7ZSs9dC50ZXh0Lmxlbmd0aCsxfSksZSl9LGNvcHk6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHdvKHZuKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSksdGhpcy5tb2RlT3B0aW9uLHRoaXMuZmlyc3QpO3JldHVybiBlLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCxlLnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0LGUuc2VsPXtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8saGVhZDp0aGlzLnNlbC5oZWFkLGFuY2hvcjp0aGlzLnNlbC5hbmNob3Isc2hpZnQ6dGhpcy5zZWwuc2hpZnQsZXh0ZW5kOiExLGdvYWxDb2x1bW46dGhpcy5zZWwuZ29hbENvbHVtbn0sdCYmKGUuaGlzdG9yeS51bmRvRGVwdGg9dGhpcy5oaXN0b3J5LnVuZG9EZXB0aCxlLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpKSxlfSxsaW5rZWREb2M6ZnVuY3Rpb24odCl7dHx8KHQ9e30pO3ZhciBlPXRoaXMuZmlyc3Qscj10aGlzLmZpcnN0K3RoaXMuc2l6ZTtudWxsIT10LmZyb20mJnQuZnJvbT5lJiYoZT10LmZyb20pLG51bGwhPXQudG8mJnQudG88ciYmKHI9dC50byk7dmFyIG49bmV3IHdvKHZuKHRoaXMsZSxyKSx0Lm1vZGV8fHRoaXMubW9kZU9wdGlvbixlKTtyZXR1cm4gdC5zaGFyZWRIaXN0JiYobi5oaXN0b3J5PXRoaXMuaGlzdG9yeSksKHRoaXMubGlua2VkfHwodGhpcy5saW5rZWQ9W10pKS5wdXNoKHtkb2M6bixzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH0pLG4ubGlua2VkPVt7ZG9jOnRoaXMsaXNQYXJlbnQ6ITAsc2hhcmVkSGlzdDp0LnNoYXJlZEhpc3R9XSxufSx1bmxpbmtEb2M6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQmJihlPWUuZG9jKSx0aGlzLmxpbmtlZClmb3IodmFyIHI9MDtyPHRoaXMubGlua2VkLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGlua2VkW3JdO2lmKG4uZG9jPT1lKXt0aGlzLmxpbmtlZC5zcGxpY2UociwxKSxlLnVubGlua0RvYyh0aGlzKTticmVha319aWYoZS5oaXN0b3J5PT10aGlzLmhpc3Rvcnkpe3ZhciBpPVtlLmlkXTtkbihlLGZ1bmN0aW9uKHQpe2kucHVzaCh0LmlkKX0sITApLGUuaGlzdG9yeT1MbigpLGUuaGlzdG9yeS5kb25lPUhuKHRoaXMuaGlzdG9yeS5kb25lLGkpLGUuaGlzdG9yeS51bmRvbmU9SG4odGhpcy5oaXN0b3J5LnVuZG9uZSxpKX19LGl0ZXJMaW5rZWREb2NzOmZ1bmN0aW9uKHQpe2RuKHRoaXMsdCl9LGdldE1vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxnZXRFZGl0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbX19KSx3by5wcm90b3R5cGUuZWFjaExpbmU9d28ucHJvdG90eXBlLml0ZXI7dmFyIExvPSJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IiLnNwbGl0KCIgIik7Zm9yKHZhciBrbyBpbiB3by5wcm90b3R5cGUpd28ucHJvdG90eXBlLmhhc093blByb3BlcnR5KGtvKSYmdGkoTG8sa28pPDAmJih0LnByb3RvdHlwZVtrb109ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcy5kb2MsYXJndW1lbnRzKX19KHdvLnByb3RvdHlwZVtrb10pKTtqbih3byksdC5lX3N0b3A9UG4sdC5lX3ByZXZlbnREZWZhdWx0PXpuLHQuZV9zdG9wUHJvcGFnYXRpb249SW47dmFyIFNvLE1vPTA7dC5vbj1Hbix0Lm9mZj1Wbix0LnNpZ25hbD1Lbjt2YXIgVG89MzAsQW89dC5QYXNzPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLlBhc3MifX07JG4ucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodGhpcy5pZCksdGhpcy5pZD1zZXRUaW1lb3V0KGUsdCl9fSx0LmNvdW50Q29sdW1uPVpuO3ZhciBIbz1bIiJdLE5vPS9bXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLyxEbz0vW1x1MDMwMC1cdTAzNkZcdTA0ODMtXHUwNDg3XHUwNDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0LVx1MDVDNVx1MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEItXHUwNjVGXHUwNjcwXHUwNkQ2LVx1MDZEQ1x1MDZERi1cdTA2RTRcdTA2RTctXHUwNkU4XHUwNkVBLVx1MDZFRFx1QTY2Rlx1MURDMOKAk1x1MURGRlx1MjBEMOKAk1x1MjBGRlx1QTY3MC1cdUE2NzJcdUE2NzQtXHVBNjdEXHVBNjlGXHVkYzAwLVx1ZGZmZlx1RkUyMOKAk1x1RkUyRl0vO3QucmVwbGFjZUdldFJlY3Q9ZnVuY3Rpb24odCl7Zmk9dH07dmFyIFdvPWZ1bmN0aW9uKCl7aWYoTmkpcmV0dXJuITE7dmFyIHQ9c2koImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gdHx8ImRyYWdEcm9wImluIHR9KCk7VGk/aGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzY9PXQuY2hhckNvZGVBdChlLTEpJiYzOT09dC5jaGFyQ29kZUF0KGUpfTpJaSYmIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3JldHVybi9cLVteIFwtP118XD9bXiAhXCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfTpXaSYmL0Nocm9tZVwvKD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk/aGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZS0xKTtyZXR1cm4gcj49ODIwOCYmODIxMj49cn06V2kmJihoaT1mdW5jdGlvbih0LGUpe2lmKGU+MSYmNDU9PXQuY2hhckNvZGVBdChlLTEpKXtpZigvXHcvLnRlc3QodC5jaGFyQXQoZS0yKSkmJi9bXlwtP1wuXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITA7aWYoZT4yJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1tcZFwuLF0vLnRlc3QodC5jaGFyQXQoZSkpKXJldHVybiExfXJldHVybi9bfiEjJSYqKT0rfVxdXFx8XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZbXHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfSk7dmFyIE9vLEVvLHpvPTMhPSJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9W10sbj10Lmxlbmd0aDtuPj1lOyl7dmFyIGk9dC5pbmRleE9mKCJcbiIsZSk7LTE9PWkmJihpPXQubGVuZ3RoKTt2YXIgbz10LnNsaWNlKGUsIlxyIj09dC5jaGFyQXQoaS0xKT9pLTE6aSksbD1vLmluZGV4T2YoIlxyIik7LTEhPWw/KHIucHVzaChvLnNsaWNlKDAsbCkpLGUrPWwrMSk6KHIucHVzaChvKSxlPWkrMSl9cmV0dXJuIHJ9OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KC9cclxuP3xcbi8pfTt0LnNwbGl0TGluZXM9em87dmFyIElvPXdpbmRvdy5nZXRTZWxlY3Rpb24/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LnNlbGVjdGlvblN0YXJ0IT10LnNlbGVjdGlvbkVuZH1jYXRjaChlKXtyZXR1cm4hMX19OmZ1bmN0aW9uKHQpe3RyeXt2YXIgZT10Lm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCl9Y2F0Y2gocil7fXJldHVybiBlJiZlLnBhcmVudEVsZW1lbnQoKT09dD8wIT1lLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLGUpOiExfSxGbz1mdW5jdGlvbigpe3ZhciB0PXNpKCJkaXYiKTtyZXR1cm4ib25jb3B5ImluIHQ/ITA6KHQuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCJyZXR1cm47IiksImZ1bmN0aW9uIj09dHlwZW9mIHQub25jb3B5KX0oKSxQbz17MzoiRW50ZXIiLDg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkN0cmwiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjIiwzMjoiU3BhY2UiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJMZWZ0IiwzODoiVXAiLDM5OiJSaWdodCIsNDA6IkRvd24iLDQ0OiJQcmludFNjcm4iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDU5OiI7Iiw5MToiTW9kIiw5MjoiTW9kIiw5MzoiTW9kIiwxMDk6Ii0iLDEwNzoiPSIsMTI3OiJEZWxldGUiLDE4NjoiOyIsMTg3OiI9IiwxODg6IiwiLDE4OToiLSIsMTkwOiIuIiwxOTE6Ii8iLDE5MjoiYCIsMjE5OiJbIiwyMjA6IlxcIiwyMjE6Il0iLDIyMjoiJyIsNjMyNzY6IlBhZ2VVcCIsNjMyNzc6IlBhZ2VEb3duIiw2MzI3NToiRW5kIiw2MzI3MzoiSG9tZSIsNjMyMzQ6IkxlZnQiLDYzMjMyOiJVcCIsNjMyMzU6IlJpZ2h0Iiw2MzIzMzoiRG93biIsNjMzMDI6Ikluc2VydCIsNjMyNzI6IkRlbGV0ZSJ9O3Qua2V5TmFtZXM9UG8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDsxMD50O3QrKylQb1t0KzQ4XT1TdHJpbmcodCk7Zm9yKHZhciB0PTY1OzkwPj10O3QrKylQb1t0XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2Zvcih2YXIgdD0xOzEyPj10O3QrKylQb1t0KzExMV09UG9bdCs2MzIzNV09IkYiK3R9KCk7dmFyIFJvLEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gMjU1Pj10P2UuY2hhckF0KHQpOnQ+PTE0MjQmJjE1MjQ+PXQ/IlIiOnQ+PTE1MzYmJjE3OTE+PXQ/ci5jaGFyQXQodC0xNTM2KTp0Pj0xNzkyJiYyMjIwPj10PyJyIjoiTCJ9dmFyIGU9ImJiYmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJzc3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTEwiLHI9InJycnJycnJycnJycixyTk5tbW1tbW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tcnJycnJycm5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbW1tbW1tTm1tbW1ycnJycnJycnJycnJycnJycnIiLG49L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLyxpPS9bc3R3Tl0vLG89L1tMUnJdLyxsPS9bTGIxbl0vLHM9L1sxbl0vLGE9IkwiO3JldHVybiBmdW5jdGlvbihlKXtpZighbi50ZXN0KGUpKXJldHVybiExO2Zvcih2YXIgcix1PWUubGVuZ3RoLGM9W10sZj0wO3U+ZjsrK2YpYy5wdXNoKHI9dChlLmNoYXJDb2RlQXQoZikpKTtmb3IodmFyIGY9MCxoPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsibSI9PXI/Y1tmXT1oOmg9cn1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiMSI9PXImJiJyIj09ZD9jW2ZdPSJuIjpvLnRlc3QocikmJihkPXIsInIiPT1yJiYoY1tmXT0iUiIpKX1mb3IodmFyIGY9MSxoPWNbMF07dS0xPmY7KytmKXt2YXIgcj1jW2ZdOyIrIj09ciYmIjEiPT1oJiYiMSI9PWNbZisxXT9jW2ZdPSIxIjoiLCIhPXJ8fGghPWNbZisxXXx8IjEiIT1oJiYibiIhPWh8fChjW2ZdPWgpLGg9cn1mb3IodmFyIGY9MDt1PmY7KytmKXt2YXIgcj1jW2ZdO2lmKCIsIj09ciljW2ZdPSJOIjtlbHNlIGlmKCIlIj09cil7Zm9yKHZhciBwPWYrMTt1PnAmJiIlIj09Y1twXTsrK3ApO2Zvcih2YXIgZz1mJiYiISI9PWNbZi0xXXx8dS0xPnAmJiIxIj09Y1twXT8iMSI6Ik4iLG09ZjtwPm07KyttKWNbbV09ZztmPXAtMX19Zm9yKHZhciBmPTAsZD1hO3U+ZjsrK2Ype3ZhciByPWNbZl07IkwiPT1kJiYiMSI9PXI/Y1tmXT0iTCI6by50ZXN0KHIpJiYoZD1yKX1mb3IodmFyIGY9MDt1PmY7KytmKWlmKGkudGVzdChjW2ZdKSl7Zm9yKHZhciBwPWYrMTt1PnAmJmkudGVzdChjW3BdKTsrK3ApO2Zvcih2YXIgdj0iTCI9PShmP2NbZi0xXTphKSx5PSJMIj09KHUtMT5wP2NbcF06YSksZz12fHx5PyJMIjoiUiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfWZvcih2YXIgYix4PVtdLGY9MDt1PmY7KWlmKGwudGVzdChjW2ZdKSl7dmFyIEM9Zjtmb3IoKytmO3U+ZiYmbC50ZXN0KGNbZl0pOysrZik7eC5wdXNoKHtmcm9tOkMsdG86ZixsZXZlbDowfSl9ZWxzZXt2YXIgdz1mLEw9eC5sZW5ndGg7Zm9yKCsrZjt1PmYmJiJMIiE9Y1tmXTsrK2YpO2Zvcih2YXIgbT13O2Y+bTspaWYocy50ZXN0KGNbbV0pKXttPncmJnguc3BsaWNlKEwsMCx7ZnJvbTp3LHRvOm0sbGV2ZWw6MX0pO3ZhciBrPW07Zm9yKCsrbTtmPm0mJnMudGVzdChjW21dKTsrK20pO3guc3BsaWNlKEwsMCx7ZnJvbTprLHRvOm0sbGV2ZWw6Mn0pLHc9bX1lbHNlKyttO2Y+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86ZixsZXZlbDoxfSl9cmV0dXJuIDE9PXhbMF0ubGV2ZWwmJihiPWUubWF0Y2goL15ccysvKSkmJih4WzBdLmZyb209YlswXS5sZW5ndGgseC51bnNoaWZ0KHtmcm9tOjAsdG86YlswXS5sZW5ndGgsbGV2ZWw6MH0pKSwxPT1Rbih4KS5sZXZlbCYmKGI9ZS5tYXRjaCgvXHMrJC8pKSYmKFFuKHgpLnRvLT1iWzBdLmxlbmd0aCx4LnB1c2goe2Zyb206dS1iWzBdLmxlbmd0aCx0bzp1LGxldmVsOjB9KSkseFswXS5sZXZlbCE9UW4oeCkubGV2ZWwmJngucHVzaCh7ZnJvbTp1LHRvOnUsbGV2ZWw6eFswXS5sZXZlbH0pLHh9fSgpO3JldHVybiB0LnZlcnNpb249IjMuMjAuMCIsdH0oKTtQSwcIxlyRsL+vAQC/rwEAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAc3RhdGljXGxpYlxoaWdobGlnaHQubWluLmpzdmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChvKXtyZXR1cm4gby5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gYihwKXtmb3IodmFyIG89cC5maXJzdENoaWxkO287bz1vLm5leHRTaWJsaW5nKXtpZihvLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJDT0RFIil7cmV0dXJuIG99aWYoIShvLm5vZGVUeXBlPT0zJiZvLm5vZGVWYWx1ZS5tYXRjaCgvXHMrLykpKXticmVha319fWZ1bmN0aW9uIGgocCxvKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHAuY2hpbGROb2RlcyxmdW5jdGlvbihxKXtpZihxLm5vZGVUeXBlPT0zKXtyZXR1cm4gbz9xLm5vZGVWYWx1ZS5yZXBsYWNlKC9cbi9nLCIiKTpxLm5vZGVWYWx1ZX1pZihxLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJCUiIpe3JldHVybiJcbiJ9cmV0dXJuIGgocSxvKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIGEocSl7dmFyIHA9KHEuY2xhc3NOYW1lKyIgIisocS5wYXJlbnROb2RlP3EucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIpKS5zcGxpdCgvXHMrLyk7cD1wLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIil9KTtmb3IodmFyIG89MDtvPHAubGVuZ3RoO28rKyl7aWYoZVtwW29dXXx8cFtvXT09Im5vLWhpZ2hsaWdodCIpe3JldHVybiBwW29dfX19ZnVuY3Rpb24gYyhxKXt2YXIgbz1bXTsoZnVuY3Rpb24gcChyLHMpe2Zvcih2YXIgdD1yLmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpe2lmKHQubm9kZVR5cGU9PTMpe3MrPXQubm9kZVZhbHVlLmxlbmd0aH1lbHNle2lmKHQubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cys9MX1lbHNle2lmKHQubm9kZVR5cGU9PTEpe28ucHVzaCh7ZXZlbnQ6InN0YXJ0IixvZmZzZXQ6cyxub2RlOnR9KTtzPXAodCxzKTtvLnB1c2goe2V2ZW50OiJzdG9wIixvZmZzZXQ6cyxub2RlOnR9KX19fX1yZXR1cm4gc30pKHEsMCk7cmV0dXJuIG99ZnVuY3Rpb24gaihwLHIsdil7dmFyIHE9MDt2YXIgeT0iIjt2YXIgcz1bXTtmdW5jdGlvbiB1KCl7aWYoIXAubGVuZ3RofHwhci5sZW5ndGgpe3JldHVybiBwLmxlbmd0aD9wOnJ9aWYocFswXS5vZmZzZXQhPXJbMF0ub2Zmc2V0KXtyZXR1cm4ocFswXS5vZmZzZXQ8clswXS5vZmZzZXQpP3A6cn1yZXR1cm4gclswXS5ldmVudD09InN0YXJ0Ij9wOnJ9ZnVuY3Rpb24gdChBKXtmdW5jdGlvbiB6KEIpe3JldHVybiIgIitCLm5vZGVOYW1lKyc9IicrbChCLnZhbHVlKSsnIid9eSs9IjwiK0Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKStBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoQS5hdHRyaWJ1dGVzLHopLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB4KHope3krPSI8LyIrei5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKyI+In1mdW5jdGlvbiBvKHopeyh6LmV2ZW50PT0ic3RhcnQiP3Q6eCkoei5ub2RlKX13aGlsZShwLmxlbmd0aHx8ci5sZW5ndGgpe3ZhciB3PXUoKTt5Kz1sKHYuc3Vic3RyKHEsd1swXS5vZmZzZXQtcSkpO3E9d1swXS5vZmZzZXQ7aWYodz09cCl7cy5yZXZlcnNlKCkuZm9yRWFjaCh4KTtkb3tvKHcuc3BsaWNlKDAsMSlbMF0pO3c9dSgpfXdoaWxlKHc9PXAmJncubGVuZ3RoJiZ3WzBdLm9mZnNldD09cSk7cy5yZXZlcnNlKCkuZm9yRWFjaCh0KX1lbHNle2lmKHdbMF0uZXZlbnQ9PSJzdGFydCIpe3MucHVzaCh3WzBdLm5vZGUpfWVsc2V7cy5wb3AoKX1vKHcuc3BsaWNlKDAsMSlbMF0pfX1yZXR1cm4geStsKHYuc3Vic3RyKHEpKX1mdW5jdGlvbiBmKHIpe2Z1bmN0aW9uIG8ocyl7cmV0dXJuKHMmJnMuc291cmNlKXx8c31mdW5jdGlvbiBwKHQscyl7cmV0dXJuIFJlZ0V4cChvKHQpLCJtIisoci5jST8iaSI6IiIpKyhzPyJnIjoiIikpfWZ1bmN0aW9uIHEoeix4KXtpZih6LmNvbXBpbGVkKXtyZXR1cm59ei5jb21waWxlZD10cnVlO3ZhciB1PVtdO2lmKHouayl7dmFyIHM9e307ZnVuY3Rpb24gQShCLHQpe2lmKHIuY0kpe3Q9dC50b0xvd2VyQ2FzZSgpfXQuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBEPUMuc3BsaXQoInwiKTtzW0RbMF1dPVtCLERbMV0/TnVtYmVyKERbMV0pOjFdO3UucHVzaChEWzBdKX0pfXoubFI9cCh6Lmx8fCJcXGIiK2hsanMuSVIrIlxcYig/IVxcLikiLHRydWUpO2lmKHR5cGVvZiB6Lms9PSJzdHJpbmciKXtBKCJrZXl3b3JkIix6LmspfWVsc2V7Zm9yKHZhciB5IGluIHouayl7aWYoIXouay5oYXNPd25Qcm9wZXJ0eSh5KSl7Y29udGludWV9QSh5LHoua1t5XSl9fXouaz1zfWlmKHgpe2lmKHouYldLKXt6LmI9IlxcYigiK3Uuam9pbigifCIpKyIpXFxiKD8hXFwuKVxccyoifXouYlI9cCh6LmI/ei5iOiJcXEJ8XFxiIik7aWYoIXouZSYmIXouZVcpe3ouZT0iXFxCfFxcYiJ9aWYoei5lKXt6LmVSPXAoei5lKX16LnRFPW8oei5lKXx8IiI7aWYoei5lVyYmeC50RSl7ei50RSs9KHouZT8ifCI6IiIpK3gudEV9fWlmKHouaSl7ei5pUj1wKHouaSl9aWYoei5yPT09dW5kZWZpbmVkKXt6LnI9MX1pZighei5jKXt6LmM9W119Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7aWYoei5jW3ddPT0ic2VsZiIpe3ouY1t3XT16fXEoei5jW3ddLHopfWlmKHouc3RhcnRzKXtxKHouc3RhcnRzLHgpfXZhciB2PVtdO2Zvcih2YXIgdz0wO3c8ei5jLmxlbmd0aDt3Kyspe3YucHVzaChvKHouY1t3XS5iKSl9aWYoei50RSl7di5wdXNoKG8oei50RSkpfWlmKHouaSl7di5wdXNoKG8oei5pKSl9ei50PXYubGVuZ3RoP3Aodi5qb2luKCJ8IiksdHJ1ZSk6e2V4ZWM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9fX1xKHIpfWZ1bmN0aW9uIGQoRSxHLEMsTSl7ZnVuY3Rpb24gbyhyLFApe2Zvcih2YXIgTz0wO088UC5jLmxlbmd0aDtPKyspe3ZhciBOPVAuY1tPXS5iUi5leGVjKHIpO2lmKE4mJk4uaW5kZXg9PTApe3JldHVybiBQLmNbT119fX1mdW5jdGlvbiBzKE4scil7aWYoTi5lJiZOLmVSLnRlc3Qocikpe3JldHVybiBOfWlmKE4uZVcpe3JldHVybiBzKE4ucGFyZW50LHIpfX1mdW5jdGlvbiB0KHIsTil7cmV0dXJuICFDJiZOLmkmJk4uaVIudGVzdChyKX1mdW5jdGlvbiB5KE8scil7dmFyIE49SC5jST9yWzBdLnRvTG93ZXJDYXNlKCk6clswXTtyZXR1cm4gTy5rLmhhc093blByb3BlcnR5KE4pJiZPLmtbTl19ZnVuY3Rpb24gSSgpe3ZhciBOPWwodyk7aWYoIUIuayl7cmV0dXJuIE59dmFyIHI9IiI7dmFyIFE9MDtCLmxSLmxhc3RJbmRleD0wO3ZhciBPPUIubFIuZXhlYyhOKTt3aGlsZShPKXtyKz1OLnN1YnN0cihRLE8uaW5kZXgtUSk7dmFyIFA9eShCLE8pO2lmKFApe3YrPVBbMV07cis9JzxzcGFuIGNsYXNzPSInK1BbMF0rJyI+JytPWzBdKyI8L3NwYW4+In1lbHNle3IrPU9bMF19UT1CLmxSLmxhc3RJbmRleDtPPUIubFIuZXhlYyhOKX1yZXR1cm4gcitOLnN1YnN0cihRKX1mdW5jdGlvbiB6KCl7aWYoQi5zTCYmIWVbQi5zTF0pe3JldHVybiBsKHcpfXZhciBOPUIuc3ViTGFuZ3VhZ2VNb2RlPT0iY29udGludW91cyI/Qi50b3A6dW5kZWZpbmVkO3ZhciByPUIuc0w/ZChCLnNMLHcsdHJ1ZSxOKTpnKHcpO2lmKEIucj4wKXt2Kz1yLmtleXdvcmRfY291bnQ7QSs9ci5yfUIudG9wPXIudG9wO3JldHVybic8c3BhbiBjbGFzcz0iJytyLmxhbmd1YWdlKyciPicrci52YWx1ZSsiPC9zcGFuPiJ9ZnVuY3Rpb24gTCgpe3JldHVybiBCLnNMIT09dW5kZWZpbmVkP3ooKTpJKCl9ZnVuY3Rpb24gSyhPLHIpe3ZhciBOPU8uY04/JzxzcGFuIGNsYXNzPSInK08uY04rJyI+JzoiIjtpZihPLnJCKXt4Kz1OO3c9IiJ9ZWxzZXtpZihPLmVCKXt4Kz1sKHIpK047dz0iIn1lbHNle3grPU47dz1yfX1CPU9iamVjdC5jcmVhdGUoTyx7cGFyZW50Ont2YWx1ZTpCfX0pfWZ1bmN0aW9uIEQoTixyKXt3Kz1OO2lmKHI9PT11bmRlZmluZWQpe3grPUwoKTtyZXR1cm4gMH12YXIgUD1vKHIsQik7aWYoUCl7eCs9TCgpO0soUCxyKTtyZXR1cm4gUC5yQj8wOnIubGVuZ3RofXZhciBRPXMoQixyKTtpZihRKXt2YXIgTz1CO2lmKCEoTy5yRXx8Ty5lRSkpe3crPXJ9eCs9TCgpO2Rve2lmKEIuY04pe3grPSI8L3NwYW4+In1BKz1CLnI7Qj1CLnBhcmVudH13aGlsZShCIT1RLnBhcmVudCk7aWYoTy5lRSl7eCs9bChyKX13PSIiO2lmKFEuc3RhcnRzKXtLKFEuc3RhcnRzLCIiKX1yZXR1cm4gTy5yRT8wOnIubGVuZ3RofWlmKHQocixCKSl7dGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtICInK3IrJyIgZm9yIG1vZGUgIicrKEIuY058fCI8dW5uYW1lZD4iKSsnIicpfXcrPXI7cmV0dXJuIHIubGVuZ3RofHwxfXZhciBIPWVbRV07aWYoIUgpe3Rocm93IG5ldyBFcnJvcignVW5rbm93biBsYW5ndWFnZTogIicrRSsnIicpfWYoSCk7dmFyIEI9TXx8SDt2YXIgeD0iIjtmb3IodmFyIEY9QjtGIT1IO0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3g9JzxzcGFuIGNsYXNzPSInK0YuY04rJyI+Jyt4fX12YXIgdz0iIjt2YXIgQT0wO3ZhciB2PTA7dHJ5e3ZhciB1LHEscD0wO3doaWxlKHRydWUpe0IudC5sYXN0SW5kZXg9cDt1PUIudC5leGVjKEcpO2lmKCF1KXticmVha31xPUQoRy5zdWJzdHIocCx1LmluZGV4LXApLHVbMF0pO3A9dS5pbmRleCtxfUQoRy5zdWJzdHIocCkpO2Zvcih2YXIgRj1CO0YucGFyZW50O0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3grPSI8L3NwYW4+In19cmV0dXJue3I6QSxrZXl3b3JkX2NvdW50OnYsdmFsdWU6eCxsYW5ndWFnZTpFLHRvcDpCfX1jYXRjaChKKXtpZihKLm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpIT0tMSl7cmV0dXJue3I6MCxrZXl3b3JkX2NvdW50OjAsdmFsdWU6bChHKX19ZWxzZXt0aHJvdyBKfX19ZnVuY3Rpb24gZyhzKXt2YXIgbz17a2V5d29yZF9jb3VudDowLHI6MCx2YWx1ZTpsKHMpfTt2YXIgcT1vO2Zvcih2YXIgcCBpbiBlKXtpZighZS5oYXNPd25Qcm9wZXJ0eShwKSl7Y29udGludWV9dmFyIHI9ZChwLHMsZmFsc2UpO3IubGFuZ3VhZ2U9cDtpZihyLmtleXdvcmRfY291bnQrci5yPnEua2V5d29yZF9jb3VudCtxLnIpe3E9cn1pZihyLmtleXdvcmRfY291bnQrci5yPm8ua2V5d29yZF9jb3VudCtvLnIpe3E9bztvPXJ9fWlmKHEubGFuZ3VhZ2Upe28uc2Vjb25kX2Jlc3Q9cX1yZXR1cm4gb31mdW5jdGlvbiBpKHEscCxvKXtpZihwKXtxPXEucmVwbGFjZSgvXigoPFtePl0rPnxcdCkrKS9nbSxmdW5jdGlvbihyLHYsdSx0KXtyZXR1cm4gdi5yZXBsYWNlKC9cdC9nLHApfSl9aWYobyl7cT1xLnJlcGxhY2UoL1xuL2csIjxicj4iKX1yZXR1cm4gcX1mdW5jdGlvbiBtKHIsdSxwKXt2YXIgdj1oKHIscCk7dmFyIHQ9YShyKTtpZih0PT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJufXZhciB3PXQ/ZCh0LHYsdHJ1ZSk6Zyh2KTt0PXcubGFuZ3VhZ2U7dmFyIG89YyhyKTtpZihvLmxlbmd0aCl7dmFyIHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIik7cS5pbm5lckhUTUw9dy52YWx1ZTt3LnZhbHVlPWoobyxjKHEpLHYpfXcudmFsdWU9aSh3LnZhbHVlLHUscCk7dmFyIHM9ci5jbGFzc05hbWU7aWYoIXMubWF0Y2goIihcXHN8XikobGFuZ3VhZ2UtKT8iK3QrIihcXHN8JCkiKSl7cz1zPyhzKyIgIit0KTp0fXIuaW5uZXJIVE1MPXcudmFsdWU7ci5jbGFzc05hbWU9cztyLnJlc3VsdD17bGFuZ3VhZ2U6dCxrdzp3LmtleXdvcmRfY291bnQscmU6dy5yfTtpZih3LnNlY29uZF9iZXN0KXtyLnNlY29uZF9iZXN0PXtsYW5ndWFnZTp3LnNlY29uZF9iZXN0Lmxhbmd1YWdlLGt3Oncuc2Vjb25kX2Jlc3Qua2V5d29yZF9jb3VudCxyZTp3LnNlY29uZF9iZXN0LnJ9fX1mdW5jdGlvbiBuKCl7aWYobi5jYWxsZWQpe3JldHVybn1uLmNhbGxlZD10cnVlO0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIiksYikuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24obyl7bShvLGhsanMudGFiUmVwbGFjZSl9KX1mdW5jdGlvbiBrKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLG4sZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixuLGZhbHNlKX12YXIgZT17fTt0aGlzLkxBTkdVQUdFUz1lO3RoaXMuaGlnaGxpZ2h0PWQ7dGhpcy5oaWdobGlnaHRBdXRvPWc7dGhpcy5maXhNYXJrdXA9aTt0aGlzLmhpZ2hsaWdodEJsb2NrPW07dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW47dGhpcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPWs7dGhpcy5JUj0iW2EtekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSIoXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcYlxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bLStdP1xcZCspPykiO3RoaXMuQk5SPSJcXGIoMGJbMDFdKykiO3RoaXMuUlNSPSIhfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFwqfFxcKj18XFwrfFxcKz18LHxcXC58LXwtPXwvfC89fDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXD98XFxbfFxce3xcXCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iO3RoaXMuQkU9e2I6IlxcXFxbXFxzXFxTXSIscjowfTt0aGlzLkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlt0aGlzLkJFXSxyOjB9O3RoaXMuUVNNPXtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5DTENNPXtjTjoiY29tbWVudCIsYjoiLy8iLGU6IiQifTt0aGlzLkNCTENMTT17Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8ifTt0aGlzLkhDTT17Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQifTt0aGlzLk5NPXtjTjoibnVtYmVyIixiOnRoaXMuTlIscjowfTt0aGlzLkNOTT17Y046Im51bWJlciIsYjp0aGlzLkNOUixyOjB9O3RoaXMuQk5NPXtjTjoibnVtYmVyIixiOnRoaXMuQk5SLHI6MH07dGhpcy5SRUdFWFBfTU9ERT17Y046InJlZ2V4cCIsYjovXC8vLGU6L1wvW2dpbV0qLyxpOi9cbi8sYzpbdGhpcy5CRSx7YjovXFsvLGU6L1xdLyxyOjAsYzpbdGhpcy5CRV19XX07dGhpcy5pbmhlcml0PWZ1bmN0aW9uKHEscil7dmFyIG89e307Zm9yKHZhciBwIGluIHEpe29bcF09cVtwXX1pZihyKXtmb3IodmFyIHAgaW4gcil7b1twXT1yW3BdfX1yZXR1cm4gb319KCk7aGxqcy5MQU5HVUFHRVMuYmFzaD1mdW5jdGlvbihhKXt2YXIgYz17Y046InZhcmlhYmxlIixiOi9cJFtcd1xkI0BdW1x3XGRfXSovfTt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFx7KC4qPylcfS99O3ZhciBlPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOlthLkJFLGMsYix7Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfV0scjowfTt2YXIgZD17Y046InN0cmluZyIsYjovJy8sZTovJy8scjowfTtyZXR1cm57bDovLT9bYS16XSsvLGs6e2tleXdvcmQ6ImlmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciBicmVhayBjb250aW51ZSB3aGlsZSBpbiBkbyBkb25lIGV4aXQgcmV0dXJuIHNldCBkZWNsYXJlIGNhc2UgZXNhYyBleHBvcnQgZXhlYyIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSIsYnVpbHRfaW46InByaW50ZiBlY2hvIHJlYWQgY2QgcHdkIHB1c2hkIHBvcGQgZGlycyBsZXQgZXZhbCB1bnNldCB0eXBlc2V0IHJlYWRvbmx5IGdldG9wdHMgc291cmNlIHNob3B0IGNhbGxlciB0eXBlIGhhc2ggYmluZCBoZWxwIHN1ZG8iLG9wZXJhdG9yOiItbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEifSxjOlt7Y046InNoZWJhbmciLGI6L14jIVteXG5dK3NoXHMqJC8scjoxMH0se2NOOiJmdW5jdGlvbiIsYjovXHdbXHdcZF9dKlxzKlwoXHMqXClccypcey8sckI6dHJ1ZSxjOlt7Y046InRpdGxlIixiOi9cd1tcd1xkX10qL31dLHI6MH0sYS5IQ00sYS5OTSxlLGQsYyxiXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmNzPWZ1bmN0aW9uKGEpe3JldHVybntrOiJhYnN0cmFjdCBhcyBiYXNlIGJvb2wgYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2hlY2tlZCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWNpbWFsIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmFsc2UgZmluYWxseSBmaXhlZCBmbG9hdCBmb3IgZm9yZWFjaCBnb3RvIGlmIGltcGxpY2l0IGluIGludCBpbnRlcmZhY2UgaW50ZXJuYWwgaXMgbG9jayBsb25nIG5hbWVzcGFjZSBuZXcgbnVsbCBvYmplY3Qgb3BlcmF0b3Igb3V0IG92ZXJyaWRlIHBhcmFtcyBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmVhZG9ubHkgcmVmIHJldHVybiBzYnl0ZSBzZWFsZWQgc2hvcnQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVpbnQgdWxvbmcgdW5jaGVja2VkIHVuc2FmZSB1c2hvcnQgdXNpbmcgdmlydHVhbCB2b2xhdGlsZSB2b2lkIHdoaWxlIGFzeW5jIGF3YWl0IGFzY2VuZGluZyBkZXNjZW5kaW5nIGZyb20gZ2V0IGdyb3VwIGludG8gam9pbiBsZXQgb3JkZXJieSBwYXJ0aWFsIHNlbGVjdCBzZXQgdmFsdWUgdmFyIHdoZXJlIHlpZWxkIixjOlt7Y046ImNvbW1lbnQiLGI6Ii8vLyIsZToiJCIsckI6dHJ1ZSxjOlt7Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+In0se2NOOiJ4bWxEb2NUYWciLGI6IjwvPyIsZToiPiJ9XX0sYS5DTENNLGEuQ0JMQ0xNLHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIixrOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSByZWdpb24gZW5kcmVnaW9uIHByYWdtYSBjaGVja3N1bSJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIicsYzpbe2I6JyIiJ31dfSxhLkFTTSxhLlFTTSxhLkNOTV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5ydWJ5PWZ1bmN0aW9uKGUpe3ZhciBhPSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGo9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBnPXtrZXl3b3JkOiJhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyBpZiBCRUdJTiByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuIG5leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgbmlsIGVsc2UgYnJlYWsgdW5kZWYgbm90IHN1cGVyIGNsYXNzIGNhc2UgcmVxdWlyZSB5aWVsZCBhbGlhcyB3aGlsZSBlbnN1cmUgZWxzaWYgb3IgaW5jbHVkZSJ9O3ZhciBjPXtjTjoieWFyZG9jdGFnIixiOiJAW0EtWmEtel0rIn07dmFyIGs9W3tjTjoiY29tbWVudCIsYjoiIyIsZToiJCIsYzpbY119LHtjTjoiY29tbWVudCIsYjoiXlxcPWJlZ2luIixlOiJeXFw9ZW5kIixjOltjXSxyOjEwfSx7Y046ImNvbW1lbnQiLGI6Il5fX0VORF9fIixlOiJcXG4kIn1dO3ZhciBkPXtjTjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6YSxrOmd9O3ZhciBpPVtlLkJFLGRdO3ZhciBiPVt7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6aSxyOjB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXCgiLGU6IlxcKSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddP3siLGU6In0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddPzwiLGU6Ij4iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LyIsZToiLyIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPy0iLGU6Ii0iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFx8IixlOiJcXHwiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjovXEJcPyhcXFxkezEsM318XFx4W0EtRmEtZjAtOV17MSwyfXxcXHVbQS1GYS1mMC05XXs0fXxcXD9cUylcYi99XTt2YXIgaD17Y046ImZ1bmN0aW9uIixiV0s6dHJ1ZSxlOiIgfCR8OyIsazoiZGVmIixjOlt7Y046InRpdGxlIixiOmosbDphLGs6Z30se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixsOmEsazpnfV0uY29uY2F0KGspfTt2YXIgZj1rLmNvbmNhdChiLmNvbmNhdChbe2NOOiJjbGFzcyIsYldLOnRydWUsZToiJHw7IixrOiJjbGFzcyBtb2R1bGUiLGM6W3tjTjoidGl0bGUiLGI6IltBLVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixyOjB9LHtjTjoiaW5oZXJpdGFuY2UiLGI6IjxcXHMqIixjOlt7Y046InBhcmVudCIsYjoiKCIrZS5JUisiOjopPyIrZS5JUn1dfV0uY29uY2F0KGspfSxoLHtjTjoiY29uc3RhbnQiLGI6Iig6Oik/KFxcYltBLVpdXFx3Kig6Oik/KSsiLHI6MH0se2NOOiJzeW1ib2wiLGI6IjoiLGM6Yi5jb25jYXQoW3tiOmp9XSkscjowfSx7Y046InN5bWJvbCIsYjphKyI6IixyOjB9LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtjTjoidmFyaWFibGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSJ9LHtiOiIoIitlLlJTUisiKVxccyoiLGM6ay5jb25jYXQoW3tjTjoicmVnZXhwIixiOiIvIixlOiIvW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlcnsiLGU6In1bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyXFwoIixlOiJcXClbYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyISIsZToiIVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXFsiLGU6IlxcXVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfV0pLHI6MH1dKSk7ZC5jPWY7aC5jWzFdLmM9ZjtyZXR1cm57bDphLGs6ZyxjOmZ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5kaWZmPWZ1bmN0aW9uKGEpe3JldHVybntjOlt7Y046ImNodW5rIixiOiJeXFxAXFxAICtcXC1cXGQrLFxcZCsgK1xcK1xcZCssXFxkKyArXFxAXFxAJCIscjoxMH0se2NOOiJjaHVuayIsYjoiXlxcKlxcKlxcKiArXFxkKyxcXGQrICtcXCpcXCpcXCpcXCokIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwtXFwtXFwtICtcXGQrLFxcZCsgK1xcLVxcLVxcLVxcLSQiLHI6MTB9LHtjTjoiaGVhZGVyIixiOiJJbmRleDogIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Ij09PT09IixlOiI9PT09PSQifSx7Y046ImhlYWRlciIsYjoiXlxcLVxcLVxcLSIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwqezN9ICIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwrXFwrXFwrIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6IlxcKns1fSIsZToiXFwqezV9JCJ9LHtjTjoiYWRkaXRpb24iLGI6Il5cXCsiLGU6IiQifSx7Y046ImRlbGV0aW9uIixiOiJeXFwtIixlOiIkIn0se2NOOiJjaGFuZ2UiLGI6Il5cXCEiLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PWZ1bmN0aW9uKGEpe3JldHVybntrOntrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5In0sYzpbYS5BU00sYS5RU00sYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLHtiOiIoIithLlJTUisifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsazoicmV0dXJuIHRocm93IGNhc2UiLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlJFR0VYUF9NT0RFLHtiOi88LyxlOi8+Oy8sc0w6InhtbCJ9XSxyOjB9LHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6L3svLGs6ImZ1bmN0aW9uIixjOlt7Y046InRpdGxlIixiOi9bQS1aYS16JF9dWzAtOUEtWmEteiRfXSovfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxjOlthLkNMQ00sYS5DQkxDTE1dLGk6L1siJ1woXS99XSxpOi9cW3wlL31dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMueG1sPWZ1bmN0aW9uKGEpe3ZhciBjPSJbQS1aYS16MC05XFwuXzotXSsiO3ZhciBiPXtlVzp0cnVlLHI6MCxjOlt7Y046ImF0dHJpYnV0ZSIsYjpjLHI6MH0se2I6Jz0iJyxyQjp0cnVlLGU6JyInLGM6W3tjTjoidmFsdWUiLGI6JyInLGVXOnRydWV9XX0se2I6Ij0nIixyQjp0cnVlLGU6IiciLGM6W3tjTjoidmFsdWUiLGI6IiciLGVXOnRydWV9XX0se2I6Ij0iLGM6W3tjTjoidmFsdWUiLGI6IlteXFxzLz5dKyJ9XX1dfTtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSx7Y046ImRvY3R5cGUiLGI6IjwhRE9DVFlQRSIsZToiPiIscjoxMCxjOlt7YjoiXFxbIixlOiJcXF0ifV19LHtjTjoiY29tbWVudCIsYjoiPCEtLSIsZToiLS0+IixyOjEwfSx7Y046ImNkYXRhIixiOiI8XFwhXFxbQ0RBVEFcXFsiLGU6IlxcXVxcXT4iLHI6MTB9LHtjTjoidGFnIixiOiI8c3R5bGUoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InN0eWxlIn0sYzpbYl0sc3RhcnRzOntlOiI8L3N0eWxlPiIsckU6dHJ1ZSxzTDoiY3NzIn19LHtjTjoidGFnIixiOiI8c2NyaXB0KD89XFxzfD58JCkiLGU6Ij4iLGs6e3RpdGxlOiJzY3JpcHQifSxjOltiXSxzdGFydHM6e2U6IjxcL3NjcmlwdD4iLHJFOnRydWUsc0w6ImphdmFzY3JpcHQifX0se2I6IjwlIixlOiIlPiIsc0w6InZic2NyaXB0In0se2NOOiJ0YWciLGI6IjwvPyIsZToiLz8+IixyOjAsYzpbe2NOOiJ0aXRsZSIsYjoiW14gLz48XSsifSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFya2Rvd249ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiaGVhZGVyIixiOiJeI3sxLDN9IixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il4uKz9cXG5bPS1dezIsfSQifSx7YjoiPCIsZToiPiIsc0w6InhtbCIscjowfSx7Y046ImJ1bGxldCIsYjoiXihbKistXXwoXFxkK1xcLikpXFxzKyJ9LHtjTjoic3Ryb25nIixiOiJbKl9dezJ9Lis/WypfXXsyfSJ9LHtjTjoiZW1waGFzaXMiLGI6IlxcKi4rP1xcKiJ9LHtjTjoiZW1waGFzaXMiLGI6Il8uKz9fIixyOjB9LHtjTjoiYmxvY2txdW90ZSIsYjoiXj5cXHMrIixlOiIkIn0se2NOOiJjb2RlIixiOiJgLis/YCJ9LHtjTjoiY29kZSIsYjoiXiAgICAiLGU6IiQiLHI6MH0se2NOOiJob3Jpem9udGFsX3J1bGUiLGI6Il4tezMsfSIsZToiJCJ9LHtiOiJcXFsuKz9cXF1cXCguKz9cXCkiLHJCOnRydWUsYzpbe2NOOiJsaW5rX2xhYmVsIixiOiJcXFsuK1xcXSJ9LHtjTjoibGlua191cmwiLGI6IlxcKCIsZToiXFwpIixlQjp0cnVlLGVFOnRydWV9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3NzPWZ1bmN0aW9uKGEpe3ZhciBiPSJbYS16QS1aLV1bYS16QS1aMC05Xy1dKiI7dmFyIGM9e2NOOiJmdW5jdGlvbiIsYjpiKyJcXCgiLGU6IlxcKSIsYzpbInNlbGYiLGEuTk0sYS5BU00sYS5RU01dfTtyZXR1cm57Y0k6dHJ1ZSxpOiJbPS98J10iLGM6W2EuQ0JMQ0xNLHtjTjoiaWQiLGI6IlxcI1tBLVphLXowLTlfLV0rIn0se2NOOiJjbGFzcyIsYjoiXFwuW0EtWmEtejAtOV8tXSsiLHI6MH0se2NOOiJhdHRyX3NlbGVjdG9yIixiOiJcXFsiLGU6IlxcXSIsaToiJCJ9LHtjTjoicHNldWRvIixiOiI6KDopP1thLXpBLVowLTlcXF9cXC1cXCtcXChcXClcXFwiXFwnXSsifSx7Y046ImF0X3J1bGUiLGI6IkAoZm9udC1mYWNlfHBhZ2UpIixsOiJbYS16LV0rIixrOiJmb250LWZhY2UgcGFnZSJ9LHtjTjoiYXRfcnVsZSIsYjoiQCIsZToiW3s7XSIsYzpbe2NOOiJrZXl3b3JkIixiOi9cUysvfSx7YjovXHMvLGVXOnRydWUsZUU6dHJ1ZSxyOjAsYzpbYyxhLkFTTSxhLlFTTSxhLk5NXX1dfSx7Y046InRhZyIsYjpiLHI6MH0se2NOOiJydWxlcyIsYjoieyIsZToifSIsaToiW15cXHNdIixyOjAsYzpbYS5DQkxDTE0se2NOOiJydWxlIixiOiJbXlxcc10iLHJCOnRydWUsZToiOyIsZVc6dHJ1ZSxjOlt7Y046ImF0dHJpYnV0ZSIsYjoiW0EtWlxcX1xcLlxcLV0rIixlOiI6IixlRTp0cnVlLGk6IlteXFxzXSIsc3RhcnRzOntjTjoidmFsdWUiLGVXOnRydWUsZUU6dHJ1ZSxjOltjLGEuTk0sYS5RU00sYS5BU00sYS5DQkxDTE0se2NOOiJoZXhjb2xvciIsYjoiI1swLTlBLUZhLWZdKyJ9LHtjTjoiaW1wb3J0YW50IixiOiIhaW1wb3J0YW50In1dfX1dfV19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmh0dHA9ZnVuY3Rpb24oYSl7cmV0dXJue2k6IlxcUyIsYzpbe2NOOiJzdGF0dXMiLGI6Il5IVFRQL1swLTlcXC5dKyIsZToiJCIsYzpbe2NOOiJudW1iZXIiLGI6IlxcYlxcZHszfVxcYiJ9XX0se2NOOiJyZXF1ZXN0IixiOiJeW0EtWl0rICguKj8pIEhUVFAvWzAtOVxcLl0rJCIsckI6dHJ1ZSxlOiIkIixjOlt7Y046InN0cmluZyIsYjoiICIsZToiICIsZUI6dHJ1ZSxlRTp0cnVlfV19LHtjTjoiYXR0cmlidXRlIixiOiJeXFx3IixlOiI6ICIsZUU6dHJ1ZSxpOiJcXG58XFxzfD0iLHN0YXJ0czp7Y046InN0cmluZyIsZToiJCJ9fSx7YjoiXFxuXFxuIixzdGFydHM6e3NMOiIiLGVXOnRydWV9fV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhPWZ1bmN0aW9uKGEpe3JldHVybntrOiJmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0IGZvciB0cnVlIHdoaWxlIGxvbmcgdGhyb3cgc3RyaWN0ZnAgZmluYWxseSBwcm90ZWN0ZWQgaW1wb3J0IG5hdGl2ZSBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgYnJlYWsgdHJhbnNpZW50IG5ldyBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyIsYzpbe2NOOiJqYXZhZG9jIixiOiIvXFwqXFwqIixlOiJcXCovIixjOlt7Y046ImphdmFkb2N0YWciLGI6IihefFxccylAW0EtWmEtel0rIn1dLHI6MTB9LGEuQ0xDTSxhLkNCTENMTSxhLkFTTSxhLlFTTSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyBpbnRlcmZhY2UiLGVFOnRydWUsaToiOiIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMgaW1wbGVtZW50cyIscjoxMH0se2NOOiJ0aXRsZSIsYjphLlVJUn1dfSxhLkNOTSx7Y046ImFubm90YXRpb24iLGI6IkBbQS1aYS16XSsifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5waHA9ZnVuY3Rpb24oYSl7dmFyIGU9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkK1thLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSoifTt2YXIgYj1bYS5pbmhlcml0KGEuQVNNLHtpOm51bGx9KSxhLmluaGVyaXQoYS5RU00se2k6bnVsbH0pLHtjTjoic3RyaW5nIixiOidiIicsZTonIicsYzpbYS5CRV19LHtjTjoic3RyaW5nIixiOiJiJyIsZToiJyIsYzpbYS5CRV19XTt2YXIgYz1bYS5CTk0sYS5DTk1dO3ZhciBkPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3JldHVybntjSTp0cnVlLGw6YS5VSVIsazoiYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciB3aGlsZSBpc3NldCBwdWJsaWMgcHJvdGVjdGVkIGV4aXQgZm9yZWFjaCB0aHJvdyBlbHNlaWYgaW5jbHVkZSBfX0ZJTEVfXyBlbXB0eSByZXF1aXJlX29uY2UgZG8geG9yIHJldHVybiBpbXBsZW1lbnRzIHBhcmVudCBjbG9uZSB1c2UgX19DTEFTU19fIF9fTElORV9fIGVsc2UgYnJlYWsgcHJpbnQgZXZhbCBuZXcgY2F0Y2ggX19NRVRIT0RfXyBjYXNlIGV4Y2VwdGlvbiBkZWZhdWx0IGRpZSByZXF1aXJlIF9fRlVOQ1RJT05fXyBlbmRkZWNsYXJlIGZpbmFsIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSBlbmRmb3IgZW5kaWYgZGVjbGFyZSB1bnNldCB0cnVlIGZhbHNlIG5hbWVzcGFjZSB0cmFpdCBnb3RvIGluc3RhbmNlb2YgaW5zdGVhZG9mIF9fRElSX18gX19OQU1FU1BBQ0VfXyB5aWVsZCBmaW5hbGx5IixjOlthLkNMQ00sYS5IQ00se2NOOiJjb21tZW50IixiOiIvXFwqIixlOiJcXCovIixjOlt7Y046InBocGRvYyIsYjoiXFxzQFtBLVphLXpdKyJ9XX0se2NOOiJjb21tZW50IixiOiJfX2hhbHRfY29tcGlsZXIuKz87IixlVzp0cnVlLGs6Il9faGFsdF9jb21waWxlciIsbDphLlVJUn0se2NOOiJzdHJpbmciLGI6Ijw8PFsnXCJdP1xcdytbJ1wiXT8kIixlOiJeXFx3KzsiLGM6W2EuQkVdfSx7Y046InByZXByb2Nlc3NvciIsYjoiPFxcP3BocCIscjoxMH0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IlxcPz4ifSxlLHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6InsiLGs6ImZ1bmN0aW9uIixpOiJcXCR8XFxbfCUiLGM6W2Qse2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic2VsZiIsZSxhLkNCTENMTV0uY29uY2F0KGIpLmNvbmNhdChjKX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyIsaToiWzpcXChcXCRdIixjOlt7YldLOnRydWUsZVc6dHJ1ZSxrOiJleHRlbmRzIixjOltkXX0sZF19LHtiOiI9PiJ9XS5jb25jYXQoYikuY29uY2F0KGMpfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucHl0aG9uPWZ1bmN0aW9uKGEpe3ZhciBmPXtjTjoicHJvbXB0IixiOi9eKD4+PnxcLlwuXC4pIC99O3ZhciBjPVt7Y046InN0cmluZyIsYjovKHV8Yik/cj8nJycvLGU6LycnJy8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fGIpP3I/IiIiLyxlOi8iIiIvLGM6W2ZdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKScvLGU6LycvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKSIvLGU6LyIvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8oYnxiciknLyxlOi8nLyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6LyhifGJyKSIvLGU6LyIvLGM6W2EuQkVdfV0uY29uY2F0KFthLkFTTSxhLlFTTV0pO3ZhciBlPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3ZhciBkPXtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6WyJzZWxmIixhLkNOTSxmXS5jb25jYXQoYyl9O3ZhciBiPXtiV0s6dHJ1ZSxlOi86LyxpOi9bJHs9O1xuXS8sYzpbZSxkXSxyOjEwfTtyZXR1cm57azp7a2V5d29yZDoiYW5kIGVsaWYgaXMgZ2xvYmFsIGFzIGluIGlmIGZyb20gcmFpc2UgZm9yIGV4Y2VwdCBmaW5hbGx5IHByaW50IGltcG9ydCBwYXNzIHJldHVybiBleGVjIGVsc2UgYnJlYWsgbm90IHdpdGggY2xhc3MgYXNzZXJ0IHlpZWxkIHRyeSB3aGlsZSBjb250aW51ZSBkZWwgb3IgZGVmIGxhbWJkYSBub25sb2NhbHwxMCBOb25lIFRydWUgRmFsc2UiLGJ1aWx0X2luOiJFbGxpcHNpcyBOb3RJbXBsZW1lbnRlZCJ9LGk6Lyg8XC98LT58XD8pLyxjOmMuY29uY2F0KFtmLGEuSENNLGEuaW5oZXJpdChiLHtjTjoiZnVuY3Rpb24iLGs6ImRlZiJ9KSxhLmluaGVyaXQoYix7Y046ImNsYXNzIixrOiJjbGFzcyJ9KSxhLkNOTSx7Y046ImRlY29yYXRvciIsYjovQC8sZTovJC99LHtiOi9cYihwcmludHxleGVjKVwoL31dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnNxbD1mdW5jdGlvbihhKXtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046Im9wZXJhdG9yIixiOiIoYmVnaW58ZW5kfHN0YXJ0fGNvbW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxyZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNlfHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hfGdyYW50KVxcYig/ITopIixlOiI7IixlVzp0cnVlLGs6e2tleXdvcmQ6ImFsbCBwYXJ0aWFsIGdsb2JhbCBtb250aCBjdXJyZW50X3RpbWVzdGFtcCB1c2luZyBnbyByZXZva2Ugc21hbGxpbnQgaW5kaWNhdG9yIGVuZC1leGVjIGRpc2Nvbm5lY3Qgem9uZSB3aXRoIGNoYXJhY3RlciBhc3NlcnRpb24gdG8gYWRkIGN1cnJlbnRfdXNlciB1c2FnZSBpbnB1dCBsb2NhbCBhbHRlciBtYXRjaCBjb2xsYXRlIHJlYWwgdGhlbiByb2xsYmFjayBnZXQgcmVhZCB0aW1lc3RhbXAgc2Vzc2lvbl91c2VyIG5vdCBpbnRlZ2VyIGJpdCB1bmlxdWUgZGF5IG1pbnV0ZSBkZXNjIGluc2VydCBleGVjdXRlIGxpa2UgaWxpa2V8MiBsZXZlbCBkZWNpbWFsIGRyb3AgY29udGludWUgaXNvbGF0aW9uIGZvdW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvbWFpbiByaWdodCBuYXRpb25hbCBzb21lIG1vZHVsZSB0cmFuc2FjdGlvbiByZWxhdGl2ZSBzZWNvbmQgY29ubmVjdCBlc2NhcGUgY2xvc2Ugc3lzdGVtX3VzZXIgZm9yIGRlZmVycmVkIHNlY3Rpb24gY2FzdCBjdXJyZW50IHNxbHN0YXRlIGFsbG9jYXRlIGludGVyc2VjdCBkZWFsbG9jYXRlIG51bWVyaWMgcHVibGljIHByZXNlcnZlIGZ1bGwgZ290byBpbml0aWFsbHkgYXNjIG5vIGtleSBvdXRwdXQgY29sbGF0aW9uIGdyb3VwIGJ5IHVuaW9uIHNlc3Npb24gYm90aCBsYXN0IGxhbmd1YWdlIGNvbnN0cmFpbnQgY29sdW1uIG9mIHNwYWNlIGZvcmVpZ24gZGVmZXJyYWJsZSBwcmlvciBjb25uZWN0aW9uIHVua25vd24gYWN0aW9uIGNvbW1pdCB2aWV3IG9yIGZpcnN0IGludG8gZmxvYXQgeWVhciBwcmltYXJ5IGNhc2NhZGVkIGV4Y2VwdCByZXN0cmljdCBzZXQgcmVmZXJlbmNlcyBuYW1lcyB0YWJsZSBvdXRlciBvcGVuIHNlbGVjdCBzaXplIGFyZSByb3dzIGZyb20gcHJlcGFyZSBkaXN0aW5jdCBsZWFkaW5nIGNyZWF0ZSBvbmx5IG5leHQgaW5uZXIgYXV0aG9yaXphdGlvbiBzY2hlbWEgY29ycmVzcG9uZGluZyBvcHRpb24gZGVjbGFyZSBwcmVjaXNpb24gaW1tZWRpYXRlIGVsc2UgdGltZXpvbmVfbWludXRlIGV4dGVybmFsIHZhcnlpbmcgdHJhbnNsYXRpb24gdHJ1ZSBjYXNlIGV4Y2VwdGlvbiBqb2luIGhvdXIgZGVmYXVsdCBkb3VibGUgc2Nyb2xsIHZhbHVlIGN1cnNvciBkZXNjcmlwdG9yIHZhbHVlcyBkZWMgZmV0Y2ggcHJvY2VkdXJlIGRlbGV0ZSBhbmQgZmFsc2UgaW50IGlzIGRlc2NyaWJlIGNoYXIgYXMgYXQgaW4gdmFyY2hhciBudWxsIHRyYWlsaW5nIGFueSBhYnNvbHV0ZSBjdXJyZW50X3RpbWUgZW5kIGdyYW50IHByaXZpbGVnZXMgd2hlbiBjcm9zcyBjaGVjayB3cml0ZSBjdXJyZW50X2RhdGUgcGFkIGJlZ2luIHRlbXBvcmFyeSBleGVjIHRpbWUgdXBkYXRlIGNhdGFsb2cgdXNlciBzcWwgZGF0ZSBvbiBpZGVudGl0eSB0aW1lem9uZV9ob3VyIG5hdHVyYWwgd2hlbmV2ZXIgaW50ZXJ2YWwgd29yayBvcmRlciBjYXNjYWRlIGRpYWdub3N0aWNzIG5jaGFyIGhhdmluZyBsZWZ0IGNhbGwgZG8gaGFuZGxlciBsb2FkIHJlcGxhY2UgdHJ1bmNhdGUgc3RhcnQgbG9jayBzaG93IHByYWdtYSBleGlzdHMgbnVtYmVyIHRyaWdnZXIgaWYgYmVmb3JlIGFmdGVyIGVhY2ggcm93IixhZ2dyZWdhdGU6ImNvdW50IHN1bSBtaW4gbWF4IGF2ZyJ9LGM6W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOlthLkJFLHtiOiInJyJ9XSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlthLkJFLHtiOiciIid9XSxyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlthLkJFXX0sYS5DTk1dfSxhLkNCTENMTSx7Y046ImNvbW1lbnQiLGI6Ii0tIixlOiIkIn1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaW5pPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGk6IlteXFxzXSIsYzpbe2NOOiJjb21tZW50IixiOiI7IixlOiIkIn0se2NOOiJ0aXRsZSIsYjoiXlxcWyIsZToiXFxdIn0se2NOOiJzZXR0aW5nIixiOiJeW2EtejAtOVxcW1xcXV8tXStbIFxcdF0qPVsgXFx0XSoiLGU6IiQiLGM6W3tjTjoidmFsdWUiLGVXOnRydWUsazoib24gb2ZmIHRydWUgZmFsc2UgeWVzIG5vIixjOlthLlFTTSxhLk5NXSxyOjB9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucGVybD1mdW5jdGlvbihlKXt2YXIgYT0iZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjIG1hIHN5c3dyaXRlIHRyIHNlbmQgdW1hc2sgc3lzb3BlbiBzaG13cml0ZSB2ZWMgcXggdXRpbWUgbG9jYWwgb2N0IHNlbWN0bCBsb2NhbHRpbWUgcmVhZHBpcGUgZG8gcmV0dXJuIGZvcm1hdCByZWFkIHNwcmludGYgZGJtb3BlbiBwb3AgZ2V0cGdycCBub3QgZ2V0cHduYW0gcmV3aW5kZGlyIHFxZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50IHNodXRkb3duIGR1bXAgY2hvbXAgY29ubmVjdCBnZXRzb2NrbmFtZSBkaWUgc29ja2V0cGFpciBjbG9zZSBmbG9jayBleGlzdHMgaW5kZXggc2htZ2V0c3ViIGZvciBlbmRwd2VudCByZWRvIGxzdGF0IG1zZ2N0bCBzZXRwZ3JwIGFicyBleGl0IHNlbGVjdCBwcmludCByZWYgZ2V0aG9zdGJ5YWRkciB1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCBnZXRwZWVybmFtZSByZWN2IGxvZyBzZXRzb2Nrb3B0IGNvcyBsYXN0IHJldmVyc2UgZ2V0aG9zdGJ5bmFtZSBnZXRncm5hbSBzdHVkeSBmb3JtbGluZSBlbmRob3N0ZW50IHRpbWVzIGNob3AgbGVuZ3RoIGdldGhvc3RlbnQgZ2V0bmV0ZW50IHBhY2sgZ2V0cHJvdG9lbnQgZ2V0c2VydmJ5bmFtZSByYW5kIG1rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgZ2V0c29ja29wdCBnZXRwcmlvcml0eSByaW5kZXggd2FudGFycmF5IGhleCBzeXN0ZW0gZ2V0c2VydmJ5cG9ydCBlbmRzZXJ2ZW50IGludCBjaHIgdW50aWUgcm1kaXIgcHJvdG90eXBlIHRlbGwgbGlzdGVuIGZvcmsgc2htcmVhZCB1Y2ZpcnN0IHNldHByb3RvZW50IGVsc2Ugc3lzc2VlayBsaW5rIGdldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciBsY2ZpcnN0IHVudGlsIHdhcm4gd2hpbGUgdmFsdWVzIHNoaWZ0IHRlbGxkaXIgZ2V0cHd1aWQgbXkgZ2V0cHJvdG9ieW51bWJlciBkZWxldGUgYW5kIHNvcnQgdWMgZGVmaW5lZCBzcmFuZCBhY2NlcHQgcGFja2FnZSBzZWVrZGlyIGdldHByb3RvYnluYW1lIHNlbW9wIG91ciByZW5hbWUgc2VlayBpZiBxfDAgY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoIHRpZSBzaW4gbXNnZ2V0IG1hcCBzdGF0IGdldGxvZ2luIHVubGVzcyBlbHNpZiB0cnVuY2F0ZSBleGVjIGtleXMgZ2xvYiB0aWVkIGNsb3NlZGlyaW9jdGwgc29ja2V0IHJlYWRsaW5rIGV2YWwgeG9yIHJlYWRsaW5lIGJpbm1vZGUgc2V0c2VydmVudCBlb2Ygb3JkIGJpbmQgYWxhcm0gcGlwZSBhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbiI7dmFyIGQ9e2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToiXFx9IixrOmEscjoxMH07dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkIn07dmFyIGk9e2NOOiJ2YXJpYWJsZSIsYjoiW1xcJFxcJVxcQFxcKl0oXFxeXFx3XFxifCNcXHcrKFxcOlxcOlxcdyspKnxbXlxcc1xcd3tdfHtcXHcrfXxcXHcrKFxcOlxcOlxcdyopKikifTt2YXIgZj1bZS5CRSxkLGIsaV07dmFyIGg9e2I6Ii0+IixjOlt7YjplLklSfSx7YjoieyIsZToifSJ9XX07dmFyIGc9e2NOOiJjb21tZW50IixiOiJeKF9fRU5EX198X19EQVRBX18pIixlOiJcXG4kIixyOjV9O3ZhciBjPVtiLGksZS5IQ00sZyx7Y046ImNvbW1lbnQiLGI6Il5cXD1cXHciLGU6IlxcPWN1dCIsZVc6dHJ1ZX0saCx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFwoIixlOiJcXCkiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxceyIsZToiXFx9IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx8IixlOiJcXHwiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InF3XFxzK3EiLGU6InEiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltlLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOmYscjowfSx7Y046InN0cmluZyIsYjoiYCIsZToiYCIsYzpbZS5CRV19LHtjTjoic3RyaW5nIixiOiJ7XFx3K30iLHI6MH0se2NOOiJzdHJpbmciLGI6Ii0/XFx3K1xccypcXD1cXD4iLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2I6IigiK2UuUlNSKyJ8XFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxiKVxccyoiLGs6InNwbGl0IHJldHVybiBwcmludCByZXZlcnNlIGdyZXAiLHI6MCxjOltlLkhDTSxnLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2UuQkVdLHI6MH1dfSx7Y046InN1YiIsYldLOnRydWUsZToiKFxccypcXCguKj9cXCkpP1s7e10iLGs6InN1YiIscjo1fSx7Y046Im9wZXJhdG9yIixiOiItXFx3XFxiIixyOjB9XTtkLmM9YztoLmNbMV0uYz1jO3JldHVybntrOmEsYzpjfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMub2JqZWN0aXZlYz1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgc2l6ZW9mIHR5cGVkZWYgY29uc3Qgc3RydWN0IGZvciB1bmlvbiB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCBtdXRhYmxlIGlmIHB1YmxpYyBkbyByZXR1cm4gZ290byB2b2lkIGVudW0gZWxzZSBicmVhayBleHRlcm4gYXNtIGNhc2Ugc2hvcnQgZGVmYXVsdCBkb3VibGUgdGhyb3cgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSByZWFkb25seSBhc3NpZ24gcHJvcGVydHkgc2VsZiBzeW5jaHJvbml6ZWQgZW5kIHN5bnRoZXNpemUgaWQgb3B0aW9uYWwgcmVxdWlyZWQgbm9uYXRvbWljIHN1cGVyIHVuaWNoYXIgZmluYWxseSBkeW5hbWljIElCT3V0bGV0IElCQWN0aW9uIHNlbGVjdG9yIHN0cm9uZyB3ZWFrIHJlYWRvbmx5IixsaXRlcmFsOiJmYWxzZSB0cnVlIEZBTFNFIFRSVUUgbmlsIFlFUyBOTyBOVUxMIixidWlsdF9pbjoiTlNTdHJpbmcgTlNEaWN0aW9uYXJ5IENHUmVjdCBDR1BvaW50IFVJQnV0dG9uIFVJTGFiZWwgVUlUZXh0VmlldyBVSVdlYlZpZXcgTUtNYXBWaWV3IFVJU2VnbWVudGVkQ29udHJvbCBOU09iamVjdCBVSVRhYmxlVmlld0RlbGVnYXRlIFVJVGFibGVWaWV3RGF0YVNvdXJjZSBOU1RocmVhZCBVSUFjdGl2aXR5SW5kaWNhdG9yIFVJVGFiYmFyIFVJVG9vbEJhciBVSUJhckJ1dHRvbkl0ZW0gVUlJbWFnZVZpZXcgTlNBdXRvcmVsZWFzZVBvb2wgVUlUYWJsZVZpZXcgQk9PTCBOU0ludGVnZXIgQ0dGbG9hdCBOU0V4Y2VwdGlvbiBOU0xvZyBOU011dGFibGVTdHJpbmcgTlNNdXRhYmxlQXJyYXkgTlNNdXRhYmxlRGljdGlvbmFyeSBOU1VSTCBOU0luZGV4UGF0aCBDR1NpemUgVUlUYWJsZVZpZXdDZWxsIFVJVmlldyBVSVZpZXdDb250cm9sbGVyIFVJTmF2aWdhdGlvbkJhciBVSU5hdmlnYXRpb25Db250cm9sbGVyIFVJVGFiQmFyQ29udHJvbGxlciBVSVBvcG92ZXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXJEZWxlZ2F0ZSBVSUltYWdlIE5TTnVtYmVyIFVJU2VhcmNoQmFyIE5TRmV0Y2hlZFJlc3VsdHNDb250cm9sbGVyIE5TRmV0Y2hlZFJlc3VsdHNDaGFuZ2VUeXBlIFVJU2Nyb2xsVmlldyBVSVNjcm9sbFZpZXdEZWxlZ2F0ZSBVSUVkZ2VJbnNldHMgVUlDb2xvciBVSUZvbnQgVUlBcHBsaWNhdGlvbiBOU05vdEZvdW5kIE5TTm90aWZpY2F0aW9uQ2VudGVyIE5TTm90aWZpY2F0aW9uIFVJTG9jYWxOb3RpZmljYXRpb24gTlNCdW5kbGUgTlNGaWxlTWFuYWdlciBOU1RpbWVJbnRlcnZhbCBOU0RhdGUgTlNDYWxlbmRhciBOU1VzZXJEZWZhdWx0cyBVSVdpbmRvdyBOU1JhbmdlIE5TQXJyYXkgTlNFcnJvciBOU1VSTFJlcXVlc3QgTlNVUkxDb25uZWN0aW9uIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gTVBNb3ZpZVBsYXllckNvbnRyb2xsZXIgZGlzcGF0Y2hfb25jZV90IGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hfc3luYyBkaXNwYXRjaF9hc3luYyBkaXNwYXRjaF9vbmNlIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLGEuUVNNLHtjTjoic3RyaW5nIixiOiInIixlOiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIsYjoiI2ltcG9ydCIsZToiJCIsYzpbe2NOOiJ0aXRsZSIsYjonIicsZTonIid9LHtjTjoidGl0bGUiLGI6IjwiLGU6Ij4ifV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIn0se2NOOiJjbGFzcyIsYldLOnRydWUsZToiKHt8JCkiLGs6ImludGVyZmFjZSBjbGFzcyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiIsYzpbe2NOOiJpZCIsYjphLlVJUn1dfSx7Y046InZhcmlhYmxlIixiOiJcXC4iK2EuVUlSLHI6MH1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY29mZmVlc2NyaXB0PWZ1bmN0aW9uKGMpe3ZhciBiPXtrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSBuZXcgZG8gcmV0dXJuIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB0aHJvdyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBkZWJ1Z2dlciBzdXBlciB0aGVuIHVubGVzcyB1bnRpbCBsb29wIG9mIGJ5IHdoZW4gYW5kIG9yIGlzIGlzbnQgbm90IixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIHllcyBubyBvbiBvZmYiLHJlc2VydmVkOiJjYXNlIGRlZmF1bHQgZnVuY3Rpb24gdmFyIHZvaWQgd2l0aCBjb25zdCBsZXQgZW51bSBleHBvcnQgaW1wb3J0IG5hdGl2ZSBfX2hhc1Byb3AgX19leHRlbmRzIF9fc2xpY2UgX19iaW5kIF9faW5kZXhPZiIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGV4cG9ydHMgZ2xvYmFsIHdpbmRvdyBkb2N1bWVudCJ9O3ZhciBhPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiO3ZhciBmPXtjTjoidGl0bGUiLGI6YX07dmFyIGU9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsazpiLH07dmFyIGQ9W2MuQk5NLGMuaW5oZXJpdChjLkNOTSx7c3RhcnRzOntlOiIoXFxzKi8pPyIscjowfX0pLHtjTjoic3RyaW5nIixiOiInJyciLGU6IicnJyIsYzpbYy5CRV19LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltjLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciIiInLGU6JyIiIicsYzpbYy5CRSxlXX0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2MuQkUsZV0scjowfSx7Y046InJlZ2V4cCIsYjoiLy8vIixlOiIvLy8iLGM6W2MuSENNXX0se2NOOiJyZWdleHAiLGI6Ii8vW2dpbV0qIixyOjB9LHtjTjoicmVnZXhwIixiOiIvXFxTKFxcXFwufFteXFxuXSkqPy9bZ2ltXSooPz1cXHN8XFxXfCQpIn0se2NOOiJwcm9wZXJ0eSIsYjoiQCIrYX0se2I6ImAiLGU6ImAiLGVCOnRydWUsZUU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9XTtlLmM9ZDtyZXR1cm57azpiLGM6ZC5jb25jYXQoW3tjTjoiY29tbWVudCIsYjoiIyMjIixlOiIjIyMifSxjLkhDTSx7Y046ImZ1bmN0aW9uIixiOiIoIithKyJcXHMqPVxccyopPyhcXCguKlxcKSk/XFxzKlstPV0+IixlOiJbLT1dPiIsckI6dHJ1ZSxjOltmLHtjTjoicGFyYW1zIixiOiJcXCgiLHJCOnRydWUsYzpbe2I6L1woLyxlOi9cKS8sazpiLGM6WyJzZWxmIl0uY29uY2F0KGQpfV19XX0se2NOOiJjbGFzcyIsYldLOnRydWUsazoiY2xhc3MiLGU6IiQiLGk6Ils6XFxbXFxdXSIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMiLGVXOnRydWUsaToiOiIsYzpbZl19LGZdfSx7Y046ImF0dHJpYnV0ZSIsYjphKyI6IixlOiI6IixyQjp0cnVlLGVFOnRydWV9XSl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5uZ2lueD1mdW5jdGlvbihiKXt2YXIgYz1be2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkKyJ9LHtjTjoidmFyaWFibGUiLGI6IlxcJHsiLGU6In0ifSx7Y046InZhcmlhYmxlIixiOiJbXFwkXFxAXSIrYi5VSVJ9XTt2YXIgYT17ZVc6dHJ1ZSxsOiJbYS16L19dKyIsazp7YnVpbHRfaW46Im9uIG9mZiB5ZXMgbm8gdHJ1ZSBmYWxzZSBub25lIGJsb2NrZWQgZGVidWcgaW5mbyBub3RpY2Ugd2FybiBlcnJvciBjcml0IHNlbGVjdCBicmVhayBsYXN0IHBlcm1hbmVudCByZWRpcmVjdCBrcXVldWUgcnRzaWcgZXBvbGwgcG9sbCAvZGV2L3BvbGwifSxyOjAsaToiPT4iLGM6W2IuSENNLHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbYi5CRV0uY29uY2F0KGMpLHI6MH0se2NOOiJ1cmwiLGI6IihbYS16XSspOi8iLGU6IlxccyIsZVc6dHJ1ZSxlRTp0cnVlfSx7Y046InJlZ2V4cCIsYjoiXFxzXFxeIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6In5cXCo/XFxzKyIsZToiXFxzfHt8OyIsckU6dHJ1ZSxjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoicmVnZXhwIixiOiJcXCooXFwuW2EtelxcLV0rKSsiLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IihbYS16XFwtXStcXC4pK1xcKiIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046Im51bWJlciIsYjoiXFxiXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30oOlxcZHsxLDV9KT9cXGIifSx7Y046Im51bWJlciIsYjoiXFxiXFxkK1trS21NZ0dkc2hkd3ldKlxcYiIscjowfV0uY29uY2F0KGMpfTtyZXR1cm57YzpbYi5IQ00se2I6Yi5VSVIrIlxccyIsZToiO3x7IixyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6Yi5VSVIsc3RhcnRzOmF9XSxyOjB9XSxpOiJbXlxcc1xcfV0ifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuanNvbj1mdW5jdGlvbihhKXt2YXIgZT17bGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIn07dmFyIGQ9W2EuUVNNLGEuQ05NXTt2YXIgYz17Y046InZhbHVlIixlOiIsIixlVzp0cnVlLGVFOnRydWUsYzpkLGs6ZX07dmFyIGI9e2I6InsiLGU6In0iLGM6W3tjTjoiYXR0cmlidXRlIixiOidcXHMqIicsZTonIlxccyo6XFxzKicsZUI6dHJ1ZSxlRTp0cnVlLGM6W2EuQkVdLGk6IlxcbiIsc3RhcnRzOmN9XSxpOiJcXFMifTt2YXIgZj17YjoiXFxbIixlOiJcXF0iLGM6W2EuaW5oZXJpdChjLHtjTjpudWxsfSldLGk6IlxcUyJ9O2Quc3BsaWNlKGQubGVuZ3RoLDAsYixmKTtyZXR1cm57YzpkLGs6ZSxpOiJcXFMifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuYXBhY2hlPWZ1bmN0aW9uKGEpe3ZhciBiPXtjTjoibnVtYmVyIixiOiJbXFwkJV1cXGQrIn07cmV0dXJue2NJOnRydWUsYzpbYS5IQ00se2NOOiJ0YWciLGI6IjwvPyIsZToiPiJ9LHtjTjoia2V5d29yZCIsYjovXHcrLyxyOjAsazp7Y29tbW9uOiJvcmRlciBkZW55IGFsbG93IHNldGVudiByZXdyaXRlcnVsZSByZXdyaXRlZW5naW5lIHJld3JpdGVjb25kIGRvY3VtZW50cm9vdCBzZXRoYW5kbGVyIGVycm9yZG9jdW1lbnQgbG9hZG1vZHVsZSBvcHRpb25zIGhlYWRlciBsaXN0ZW4gc2VydmVycm9vdCBzZXJ2ZXJuYW1lIn0sc3RhcnRzOntlOi8kLyxyOjAsazp7bGl0ZXJhbDoib24gb2ZmIGFsbCJ9LGM6W3tjTjoic3FicmFja2V0IixiOiJcXHNcXFsiLGU6IlxcXSQifSx7Y046ImNicmFja2V0IixiOiJbXFwkJV1cXHsiLGU6IlxcfSIsYzpbInNlbGYiLGJdfSxiLGEuUVNNXX19XSxpOi9cUy99fShobGpzKTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImZhbHNlIGludCBmbG9hdCB3aGlsZSBwcml2YXRlIGNoYXIgY2F0Y2ggZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mIGR5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3Qgc3RydWN0IGZvciBzdGF0aWNfY2FzdHwxMCB1bmlvbiBuYW1lc3BhY2UgdW5zaWduZWQgbG9uZyB0aHJvdyB2b2xhdGlsZSBzdGF0aWMgcHJvdGVjdGVkIGJvb2wgdGVtcGxhdGUgbXV0YWJsZSBpZiBwdWJsaWMgZnJpZW5kIGRvIHJldHVybiBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgbmV3IGV4dGVybiB1c2luZyB0cnVlIGNsYXNzIGFzbSBjYXNlIHR5cGVpZCBzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgZGVsZXRlIGFsaWdub2YgY2hhcjE2X3QgY2hhcjMyX3QgY29uc3RleHByIGRlY2x0eXBlIG5vZXhjZXB0IG51bGxwdHIgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgX0Jvb2wgY29tcGxleCIsYnVpbHRfaW46InN0ZCBzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0cmluZ3N0cmVhbSBpc3RyaW5nc3RyZWFtIG9zdHJpbmdzdHJlYW0gYXV0b19wdHIgZGVxdWUgbGlzdCBxdWV1ZSBzdGFjayB2ZWN0b3IgbWFwIHNldCBiaXRzZXQgbXVsdGlzZXQgbXVsdGltYXAgdW5vcmRlcmVkX3NldCB1bm9yZGVyZWRfbWFwIHVub3JkZXJlZF9tdWx0aXNldCB1bm9yZGVyZWRfbXVsdGltYXAgYXJyYXkgc2hhcmVkX3B0ciJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJ1xcXFw/LiIsZToiJyIsaToiLiJ9LHtjTjoibnVtYmVyIixiOiJcXGIoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykodXxVfGx8THx1bHxVTHxmfEYpIn0sYS5DTk0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGM6W3tiOiI8IixlOiI+IixpOiJcXG4ifSxhLkNMQ01dfSx7Y046InN0bF9jb250YWluZXIiLGI6IlxcYihkZXF1ZXxsaXN0fHF1ZXVlfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsZToiPiIsazpiLHI6MTAsYzpbInNlbGYiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFrZWZpbGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6YS5CRX07cmV0dXJue2M6W2EuSENNLHtiOi9eXHcrXHMqXFcqPS8sckI6dHJ1ZSxyOjAsc3RhcnRzOntjTjoiY29uc3RhbnQiLGU6L1xzKlxXKj0vLGVFOnRydWUsc3RhcnRzOntlOi8kLyxyOjAsYzpbYl0sfX19LHtjTjoidGl0bGUiLGI6L15bXHddKzpccyokL30se2NOOiJwaG9ueSIsYjovXlwuUEhPTlk6LyxlOi8kLyxrOiIuUEhPTlkiLGw6L1tcLlx3XSsvfSx7YjovXlx0Ky8sZTovJC8sYzpbYS5RU00sYl19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmdvPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIiLGNvbnN0YW50OiJ0cnVlIGZhbHNlIGlvdGEgbmlsIix0eXBlbmFtZToiYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUiLGJ1aWx0X2luOiJhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIn0se2NOOiJudW1iZXIiLGI6IlteYS16QS1aXzAtOV0oXFwtfFxcKyk/XFxkKyhcXC5cXGQrfFxcL1xcZCspPygoZHxlfGZ8bHxzKShcXCt8XFwtKT9cXGQrKT8iLHI6MH0sYS5DTk1dfX0oaGxqcyk7UEsHCBVZbU72dQAA9nUAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHN0YXRpY1xsaWJcanF1ZXJ5LmZvcm0ubWluLmpzLyohCiAqIGpRdWVyeSBGb3JtIFBsdWdpbgogKiB2ZXJzaW9uOiAzLjQ2LjAtMjAxMy4xMS4yMQogKiBSZXF1aXJlcyBqUXVlcnkgdjEuNSBvciBsYXRlcgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTS4gQWxzdXAKICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9mb3JtLwogKiBQcm9qZWN0IHJlcG9zaXRvcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxzdXAvZm9ybQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcy4KICogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtI2NvcHlyaWdodC1hbmQtbGljZW5zZQogKi8KKGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoWyJqcXVlcnkiXSxhKX1lbHNle2EoKHR5cGVvZihqUXVlcnkpIT0idW5kZWZpbmVkIik/alF1ZXJ5OndpbmRvdy5aZXB0byl9fShmdW5jdGlvbihmKXt2YXIgYz17fTtjLmZpbGVhcGk9ZigiPGlucHV0IHR5cGU9J2ZpbGUnLz4iKS5nZXQoMCkuZmlsZXMhPT11bmRlZmluZWQ7Yy5mb3JtZGF0YT13aW5kb3cuRm9ybURhdGEhPT11bmRlZmluZWQ7dmFyIGU9ISFmLmZuLnByb3A7Zi5mbi5hdHRyMj1mdW5jdGlvbigpe2lmKCFlKXtyZXR1cm4gdGhpcy5hdHRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZz10aGlzLnByb3AuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKChnJiZnLmpxdWVyeSl8fHR5cGVvZiBnPT09InN0cmluZyIpe3JldHVybiBnfXJldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmLmZuLmFqYXhTdWJtaXQ9ZnVuY3Rpb24oail7aWYoIXRoaXMubGVuZ3RoKXtkKCJhamF4U3VibWl0OiBza2lwcGluZyBzdWJtaXQgcHJvY2VzcyAtIG5vIGVsZW1lbnQgc2VsZWN0ZWQiKTtyZXR1cm4gdGhpc312YXIgaSxDLG0sbz10aGlzO2lmKHR5cGVvZiBqPT0iZnVuY3Rpb24iKXtqPXtzdWNjZXNzOmp9fWVsc2V7aWYoaj09PXVuZGVmaW5lZCl7aj17fX19aT1qLnR5cGV8fHRoaXMuYXR0cjIoIm1ldGhvZCIpO0M9ai51cmx8fHRoaXMuYXR0cjIoImFjdGlvbiIpO209KHR5cGVvZiBDPT09InN0cmluZyIpP2YudHJpbShDKToiIjttPW18fHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIjtpZihtKXttPShtLm1hdGNoKC9eKFteI10rKS8pfHxbXSlbMV19aj1mLmV4dGVuZCh0cnVlLHt1cmw6bSxzdWNjZXNzOmYuYWpheFNldHRpbmdzLnN1Y2Nlc3MsdHlwZTppfHxmLmFqYXhTZXR0aW5ncy50eXBlLGlmcmFtZVNyYzovXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZnx8IiIpPyJqYXZhc2NyaXB0OmZhbHNlIjoiYWJvdXQ6YmxhbmsifSxqKTt2YXIgdT17fTt0aGlzLnRyaWdnZXIoImZvcm0tcHJlLXNlcmlhbGl6ZSIsW3RoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXByZS1zZXJpYWxpemUgdHJpZ2dlciIpO3JldHVybiB0aGlzfWlmKGouYmVmb3JlU2VyaWFsaXplJiZqLmJlZm9yZVNlcmlhbGl6ZSh0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTZXJpYWxpemUgY2FsbGJhY2siKTtyZXR1cm4gdGhpc312YXIgbj1qLnRyYWRpdGlvbmFsO2lmKG49PT11bmRlZmluZWQpe249Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWx9dmFyIHM9W107dmFyIEUsRj10aGlzLmZvcm1Ub0FycmF5KGouc2VtYW50aWMscyk7aWYoai5kYXRhKXtqLmV4dHJhRGF0YT1qLmRhdGE7RT1mLnBhcmFtKGouZGF0YSxuKX1pZihqLmJlZm9yZVN1Ym1pdCYmai5iZWZvcmVTdWJtaXQoRix0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTdWJtaXQgY2FsbGJhY2siKTtyZXR1cm4gdGhpc310aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LXZhbGlkYXRlIixbRix0aGlzLGosdV0pO2lmKHUudmV0byl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IHZldG9lZCB2aWEgZm9ybS1zdWJtaXQtdmFsaWRhdGUgdHJpZ2dlciIpO3JldHVybiB0aGlzfXZhciB5PWYucGFyYW0oRixuKTtpZihFKXt5PSh5Pyh5KyImIitFKTpFKX1pZihqLnR5cGUudG9VcHBlckNhc2UoKT09IkdFVCIpe2oudXJsKz0oai51cmwuaW5kZXhPZigiPyIpPj0wPyImIjoiPyIpK3k7ai5kYXRhPW51bGx9ZWxzZXtqLmRhdGE9eX12YXIgSD1bXTtpZihqLnJlc2V0Rm9ybSl7SC5wdXNoKGZ1bmN0aW9uKCl7by5yZXNldEZvcm0oKX0pfWlmKGouY2xlYXJGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLmNsZWFyRm9ybShqLmluY2x1ZGVIaWRkZW4pfSl9aWYoIWouZGF0YVR5cGUmJmoudGFyZ2V0KXt2YXIgbD1qLnN1Y2Nlc3N8fGZ1bmN0aW9uKCl7fTtILnB1c2goZnVuY3Rpb24ocSl7dmFyIGs9ai5yZXBsYWNlVGFyZ2V0PyJyZXBsYWNlV2l0aCI6Imh0bWwiO2Yoai50YXJnZXQpW2tdKHEpLmVhY2gobCxhcmd1bWVudHMpfSl9ZWxzZXtpZihqLnN1Y2Nlc3Mpe0gucHVzaChqLnN1Y2Nlc3MpfX1qLnN1Y2Nlc3M9ZnVuY3Rpb24oSyxxLEwpe3ZhciBKPWouY29udGV4dHx8dGhpcztmb3IodmFyIEk9MCxrPUgubGVuZ3RoO0k8aztJKyspe0hbSV0uYXBwbHkoSixbSyxxLEx8fG8sb10pfX07aWYoai5lcnJvcil7dmFyIHo9ai5lcnJvcjtqLmVycm9yPWZ1bmN0aW9uKEosayxxKXt2YXIgST1qLmNvbnRleHR8fHRoaXM7ei5hcHBseShJLFtKLGsscSxvXSl9fWlmKGouY29tcGxldGUpe3ZhciBoPWouY29tcGxldGU7ai5jb21wbGV0ZT1mdW5jdGlvbihJLGspe3ZhciBxPWouY29udGV4dHx8dGhpcztoLmFwcGx5KHEsW0ksayxvXSl9fXZhciBEPWYoImlucHV0W3R5cGU9ZmlsZV06ZW5hYmxlZCIsdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcykudmFsKCkhPT0iIn0pO3ZhciBwPUQubGVuZ3RoPjA7dmFyIEI9Im11bHRpcGFydC9mb3JtLWRhdGEiO3ZhciB4PShvLmF0dHIoImVuY3R5cGUiKT09Qnx8by5hdHRyKCJlbmNvZGluZyIpPT1CKTt2YXIgdz1jLmZpbGVhcGkmJmMuZm9ybWRhdGE7ZCgiZmlsZUFQSSA6Iit3KTt2YXIgcj0ocHx8eCkmJiF3O3ZhciB2O2lmKGouaWZyYW1lIT09ZmFsc2UmJihqLmlmcmFtZXx8cikpe2lmKGouY2xvc2VLZWVwQWxpdmUpe2YuZ2V0KGouY2xvc2VLZWVwQWxpdmUsZnVuY3Rpb24oKXt2PUcoRil9KX1lbHNle3Y9RyhGKX19ZWxzZXtpZigocHx8eCkmJncpe3Y9dChGKX1lbHNle3Y9Zi5hamF4KGopfX1vLnJlbW92ZURhdGEoImpxeGhyIikuZGF0YSgianF4aHIiLHYpO2Zvcih2YXIgQT0wO0E8cy5sZW5ndGg7QSsrKXtzW0FdPW51bGx9dGhpcy50cmlnZ2VyKCJmb3JtLXN1Ym1pdC1ub3RpZnkiLFt0aGlzLGpdKTtyZXR1cm4gdGhpcztmdW5jdGlvbiBnKEspe3ZhciBMPWYucGFyYW0oSyxqLnRyYWRpdGlvbmFsKS5zcGxpdCgiJiIpO3ZhciBxPUwubGVuZ3RoO3ZhciBrPVtdO3ZhciBKLEk7Zm9yKEo9MDtKPHE7SisrKXtMW0pdPUxbSl0ucmVwbGFjZSgvXCsvZywiICIpO0k9TFtKXS5zcGxpdCgiPSIpO2sucHVzaChbZGVjb2RlVVJJQ29tcG9uZW50KElbMF0pLGRlY29kZVVSSUNvbXBvbmVudChJWzFdKV0pfXJldHVybiBrfWZ1bmN0aW9uIHQocSl7dmFyIGs9bmV3IEZvcm1EYXRhKCk7Zm9yKHZhciBJPTA7STxxLmxlbmd0aDtJKyspe2suYXBwZW5kKHFbSV0ubmFtZSxxW0ldLnZhbHVlKX1pZihqLmV4dHJhRGF0YSl7dmFyIEw9ZyhqLmV4dHJhRGF0YSk7Zm9yKEk9MDtJPEwubGVuZ3RoO0krKyl7aWYoTFtJXSl7ay5hcHBlbmQoTFtJXVswXSxMW0ldWzFdKX19fWouZGF0YT1udWxsO3ZhciBLPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaix7Y29udGVudFR5cGU6ZmFsc2UscHJvY2Vzc0RhdGE6ZmFsc2UsY2FjaGU6ZmFsc2UsdHlwZTppfHwiUE9TVCJ9KTtpZihqLnVwbG9hZFByb2dyZXNzKXtLLnhocj1mdW5jdGlvbigpe3ZhciBNPWYuYWpheFNldHRpbmdzLnhocigpO2lmKE0udXBsb2FkKXtNLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oUSl7dmFyIFA9MDt2YXIgTj1RLmxvYWRlZHx8US5wb3NpdGlvbjt2YXIgTz1RLnRvdGFsO2lmKFEubGVuZ3RoQ29tcHV0YWJsZSl7UD1NYXRoLmNlaWwoTi9PKjEwMCl9ai51cGxvYWRQcm9ncmVzcyhRLE4sTyxQKX0sZmFsc2UpfXJldHVybiBNfX1LLmRhdGE9bnVsbDt2YXIgSj1LLmJlZm9yZVNlbmQ7Sy5iZWZvcmVTZW5kPWZ1bmN0aW9uKE4sTSl7aWYoai5mb3JtRGF0YSl7TS5kYXRhPWouZm9ybURhdGF9ZWxzZXtNLmRhdGE9a31pZihKKXtKLmNhbGwodGhpcyxOLE0pfX07cmV0dXJuIGYuYWpheChLKX1mdW5jdGlvbiBHKGFmKXt2YXIgTD1vWzBdLEssYWIsVixhZCxZLE4sUSxPLFAsWixhYyxUO3ZhciBhaT1mLkRlZmVycmVkKCk7YWkuYWJvcnQ9ZnVuY3Rpb24oYWope08uYWJvcnQoYWopfTtpZihhZil7Zm9yKGFiPTA7YWI8cy5sZW5ndGg7YWIrKyl7Sz1mKHNbYWJdKTtpZihlKXtLLnByb3AoImRpc2FibGVkIixmYWxzZSl9ZWxzZXtLLnJlbW92ZUF0dHIoImRpc2FibGVkIil9fX1WPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaik7Vi5jb250ZXh0PVYuY29udGV4dHx8VjtZPSJqcUZvcm1JTyIrKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtpZihWLmlmcmFtZVRhcmdldCl7Tj1mKFYuaWZyYW1lVGFyZ2V0KTtaPU4uYXR0cjIoIm5hbWUiKTtpZighWil7Ti5hdHRyMigibmFtZSIsWSl9ZWxzZXtZPVp9fWVsc2V7Tj1mKCc8aWZyYW1lIG5hbWU9IicrWSsnIiBzcmM9IicrVi5pZnJhbWVTcmMrJyIgLz4nKTtOLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6Ii0xMDAwcHgiLGxlZnQ6Ii0xMDAwcHgifSl9UT1OWzBdO089e2Fib3J0ZWQ6MCxyZXNwb25zZVRleHQ6bnVsbCxyZXNwb25zZVhNTDpudWxsLHN0YXR1czowLHN0YXR1c1RleHQ6Im4vYSIsZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbigpe30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbigpe30sYWJvcnQ6ZnVuY3Rpb24oYWope3ZhciBhaz0oYWo9PT0idGltZW91dCI/InRpbWVvdXQiOiJhYm9ydGVkIik7ZCgiYWJvcnRpbmcgdXBsb2FkLi4uICIrYWspO3RoaXMuYWJvcnRlZD0xO3RyeXtpZihRLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQpe1EuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgiU3RvcCIpfX1jYXRjaChhbCl7fU4uYXR0cigic3JjIixWLmlmcmFtZVNyYyk7Ty5lcnJvcj1haztpZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYWssYWopfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixha10pfWlmKFYuY29tcGxldGUpe1YuY29tcGxldGUuY2FsbChWLmNvbnRleHQsTyxhayl9fX07YWQ9Vi5nbG9iYWw7aWYoYWQmJjA9PT1mLmFjdGl2ZSsrKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTZW5kIixbTyxWXSl9aWYoVi5iZWZvcmVTZW5kJiZWLmJlZm9yZVNlbmQuY2FsbChWLmNvbnRleHQsTyxWKT09PWZhbHNlKXtpZihWLmdsb2JhbCl7Zi5hY3RpdmUtLX1haS5yZWplY3QoKTtyZXR1cm4gYWl9aWYoTy5hYm9ydGVkKXthaS5yZWplY3QoKTtyZXR1cm4gYWl9UD1MLmNsaztpZihQKXtaPVAubmFtZTtpZihaJiYhUC5kaXNhYmxlZCl7Vi5leHRyYURhdGE9Vi5leHRyYURhdGF8fHt9O1YuZXh0cmFEYXRhW1pdPVAudmFsdWU7aWYoUC50eXBlPT0iaW1hZ2UiKXtWLmV4dHJhRGF0YVtaKyIueCJdPUwuY2xrX3g7Vi5leHRyYURhdGFbWisiLnkiXT1MLmNsa195fX19dmFyIFU9MTt2YXIgUj0yO2Z1bmN0aW9uIFMoYWwpe3ZhciBhaz1udWxsO3RyeXtpZihhbC5jb250ZW50V2luZG93KXthaz1hbC5jb250ZW50V2luZG93LmRvY3VtZW50fX1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudFdpbmRvdyBkb2N1bWVudDogIithail9aWYoYWspe3JldHVybiBha310cnl7YWs9YWwuY29udGVudERvY3VtZW50P2FsLmNvbnRlbnREb2N1bWVudDphbC5kb2N1bWVudH1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudERvY3VtZW50OiAiK2FqKTthaz1hbC5kb2N1bWVudH1yZXR1cm4gYWt9dmFyIEo9ZigibWV0YVtuYW1lPWNzcmYtdG9rZW5dIikuYXR0cigiY29udGVudCIpO3ZhciBJPWYoIm1ldGFbbmFtZT1jc3JmLXBhcmFtXSIpLmF0dHIoImNvbnRlbnQiKTtpZihJJiZKKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbSV09Sn1mdW5jdGlvbiBhYSgpe3ZhciBhbD1vLmF0dHIyKCJ0YXJnZXQiKSxhaj1vLmF0dHIyKCJhY3Rpb24iKTtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixZKTtpZighaXx8L3Bvc3QvaS50ZXN0KGkpKXtMLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwiUE9TVCIpfWlmKGFqIT1WLnVybCl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsVi51cmwpfWlmKCFWLnNraXBFbmNvZGluZ092ZXJyaWRlJiYoIWl8fC9wb3N0L2kudGVzdChpKSkpe28uYXR0cih7ZW5jb2Rpbmc6Im11bHRpcGFydC9mb3JtLWRhdGEiLGVuY3R5cGU6Im11bHRpcGFydC9mb3JtLWRhdGEifSl9aWYoVi50aW1lb3V0KXtUPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthYz10cnVlO1goVSl9LFYudGltZW91dCl9ZnVuY3Rpb24gYW0oKXt0cnl7dmFyIGFxPVMoUSkucmVhZHlTdGF0ZTtkKCJzdGF0ZSA9ICIrYXEpO2lmKGFxJiZhcS50b0xvd2VyQ2FzZSgpPT0idW5pbml0aWFsaXplZCIpe3NldFRpbWVvdXQoYW0sNTApfX1jYXRjaChhcil7ZCgiU2VydmVyIGFib3J0OiAiLGFyLCIgKCIsYXIubmFtZSwiKSIpO1goUik7aWYoVCl7Y2xlYXJUaW1lb3V0KFQpfVQ9dW5kZWZpbmVkfX12YXIgYWs9W107dHJ5e2lmKFYuZXh0cmFEYXRhKXtmb3IodmFyIGFwIGluIFYuZXh0cmFEYXRhKXtpZihWLmV4dHJhRGF0YS5oYXNPd25Qcm9wZXJ0eShhcCkpe2lmKGYuaXNQbGFpbk9iamVjdChWLmV4dHJhRGF0YVthcF0pJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoIm5hbWUiKSYmVi5leHRyYURhdGFbYXBdLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrVi5leHRyYURhdGFbYXBdLm5hbWUrJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXS52YWx1ZSkuYXBwZW5kVG8oTClbMF0pfWVsc2V7YWsucHVzaChmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInK2FwKyciPicpLnZhbChWLmV4dHJhRGF0YVthcF0pLmFwcGVuZFRvKEwpWzBdKX19fX1pZighVi5pZnJhbWVUYXJnZXQpe04uYXBwZW5kVG8oImJvZHkiKX1pZihRLmF0dGFjaEV2ZW50KXtRLmF0dGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX1zZXRUaW1lb3V0KGFtLDE1KTt0cnl7TC5zdWJtaXQoKX1jYXRjaChhbil7dmFyIGFvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5zdWJtaXQ7YW8uYXBwbHkoTCl9fWZpbmFsbHl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsYWopO2lmKGFsKXtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixhbCl9ZWxzZXtvLnJlbW92ZUF0dHIoInRhcmdldCIpfWYoYWspLnJlbW92ZSgpfX1pZihWLmZvcmNlU3luYyl7YWEoKX1lbHNle3NldFRpbWVvdXQoYWEsMTApfXZhciBhZyxhaCxhZT01MCxNO2Z1bmN0aW9uIFgoYXApe2lmKE8uYWJvcnRlZHx8TSl7cmV0dXJufWFoPVMoUSk7aWYoIWFoKXtkKCJjYW5ub3QgYWNjZXNzIHJlc3BvbnNlIGRvY3VtZW50Iik7YXA9Un1pZihhcD09PVUmJk8pe08uYWJvcnQoInRpbWVvdXQiKTthaS5yZWplY3QoTywidGltZW91dCIpO3JldHVybn1lbHNle2lmKGFwPT1SJiZPKXtPLmFib3J0KCJzZXJ2ZXIgYWJvcnQiKTthaS5yZWplY3QoTywiZXJyb3IiLCJzZXJ2ZXIgYWJvcnQiKTtyZXR1cm59fWlmKCFhaHx8YWgubG9jYXRpb24uaHJlZj09Vi5pZnJhbWVTcmMpe2lmKCFhYyl7cmV0dXJufX1pZihRLmRldGFjaEV2ZW50KXtRLmRldGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX12YXIgYW49InN1Y2Nlc3MiLGFyO3RyeXtpZihhYyl7dGhyb3cidGltZW91dCJ9dmFyIGFtPVYuZGF0YVR5cGU9PSJ4bWwifHxhaC5YTUxEb2N1bWVudHx8Zi5pc1hNTERvYyhhaCk7ZCgiaXNYbWw9IithbSk7aWYoIWFtJiZ3aW5kb3cub3BlcmEmJihhaC5ib2R5PT09bnVsbHx8IWFoLmJvZHkuaW5uZXJIVE1MKSl7aWYoLS1hZSl7ZCgicmVxdWVpbmcgb25Mb2FkIGNhbGxiYWNrLCBET00gbm90IGF2YWlsYWJsZSIpO3NldFRpbWVvdXQoWCwyNTApO3JldHVybn19dmFyIGF0PWFoLmJvZHk/YWguYm9keTphaC5kb2N1bWVudEVsZW1lbnQ7Ty5yZXNwb25zZVRleHQ9YXQ/YXQuaW5uZXJIVE1MOm51bGw7Ty5yZXNwb25zZVhNTD1haC5YTUxEb2N1bWVudD9haC5YTUxEb2N1bWVudDphaDtpZihhbSl7Vi5kYXRhVHlwZT0ieG1sIn1PLmdldFJlc3BvbnNlSGVhZGVyPWZ1bmN0aW9uKGF3KXt2YXIgYXY9eyJjb250ZW50LXR5cGUiOlYuZGF0YVR5cGV9O3JldHVybiBhdlthdy50b0xvd2VyQ2FzZSgpXX07aWYoYXQpe08uc3RhdHVzPU51bWJlcihhdC5nZXRBdHRyaWJ1dGUoInN0YXR1cyIpKXx8Ty5zdGF0dXM7Ty5zdGF0dXNUZXh0PWF0LmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxPLnN0YXR1c1RleHR9dmFyIGFqPShWLmRhdGFUeXBlfHwiIikudG9Mb3dlckNhc2UoKTt2YXIgYXE9Lyhqc29ufHNjcmlwdHx0ZXh0KS8udGVzdChhaik7aWYoYXF8fFYudGV4dGFyZWEpe3ZhciBhbz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGV4dGFyZWEiKVswXTtpZihhbyl7Ty5yZXNwb25zZVRleHQ9YW8udmFsdWU7Ty5zdGF0dXM9TnVtYmVyKGFvLmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YW8uZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH1lbHNle2lmKGFxKXt2YXIgYWs9YWguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpWzBdO3ZhciBhdT1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKGFrKXtPLnJlc3BvbnNlVGV4dD1hay50ZXh0Q29udGVudD9hay50ZXh0Q29udGVudDphay5pbm5lclRleHR9ZWxzZXtpZihhdSl7Ty5yZXNwb25zZVRleHQ9YXUudGV4dENvbnRlbnQ/YXUudGV4dENvbnRlbnQ6YXUuaW5uZXJUZXh0fX19fX1lbHNle2lmKGFqPT0ieG1sIiYmIU8ucmVzcG9uc2VYTUwmJk8ucmVzcG9uc2VUZXh0KXtPLnJlc3BvbnNlWE1MPVcoTy5yZXNwb25zZVRleHQpfX10cnl7YWc9ayhPLGFqLFYpfWNhdGNoKGFsKXthbj0icGFyc2VyZXJyb3IiO08uZXJyb3I9YXI9KGFsfHxhbil9fWNhdGNoKGFsKXtkKCJlcnJvciBjYXVnaHQ6ICIsYWwpO2FuPSJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX1pZihPLmFib3J0ZWQpe2QoInVwbG9hZCBhYm9ydGVkIik7YW49bnVsbH1pZihPLnN0YXR1cyl7YW49KE8uc3RhdHVzPj0yMDAmJk8uc3RhdHVzPDMwMHx8Ty5zdGF0dXM9PT0zMDQpPyJzdWNjZXNzIjoiZXJyb3IifWlmKGFuPT09InN1Y2Nlc3MiKXtpZihWLnN1Y2Nlc3Mpe1Yuc3VjY2Vzcy5jYWxsKFYuY29udGV4dCxhZywic3VjY2VzcyIsTyl9YWkucmVzb2x2ZShPLnJlc3BvbnNlVGV4dCwic3VjY2VzcyIsTyk7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN1Y2Nlc3MiLFtPLFZdKX19ZWxzZXtpZihhbil7aWYoYXI9PT11bmRlZmluZWQpe2FyPU8uc3RhdHVzVGV4dH1pZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYW4sYXIpfWFpLnJlamVjdChPLCJlcnJvciIsYXIpO2lmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixhcl0pfX19aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbTyxWXSl9aWYoYWQmJiEtLWYuYWN0aXZlKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFuKX1NPXRydWU7aWYoVi50aW1lb3V0KXtjbGVhclRpbWVvdXQoVCl9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFWLmlmcmFtZVRhcmdldCl7Ti5yZW1vdmUoKX1lbHNle04uYXR0cigic3JjIixWLmlmcmFtZVNyYyl9Ty5yZXNwb25zZVhNTD1udWxsfSwxMDApfXZhciBXPWYucGFyc2VYTUx8fGZ1bmN0aW9uKGFqLGFrKXtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7YWs9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKTthay5hc3luYz0iZmFsc2UiO2FrLmxvYWRYTUwoYWopfWVsc2V7YWs9KG5ldyBET01QYXJzZXIoKSkucGFyc2VGcm9tU3RyaW5nKGFqLCJ0ZXh0L3htbCIpfXJldHVybihhayYmYWsuZG9jdW1lbnRFbGVtZW50JiZhay5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUhPSJwYXJzZXJlcnJvciIpP2FrOm51bGx9O3ZhciBxPWYucGFyc2VKU09OfHxmdW5jdGlvbihhail7cmV0dXJuIHdpbmRvd1siZXZhbCJdKCIoIithaisiKSIpfTt2YXIgaz1mdW5jdGlvbihhbyxhbSxhbCl7dmFyIGFrPWFvLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKXx8IiIsYWo9YW09PT0ieG1sInx8IWFtJiZhay5pbmRleE9mKCJ4bWwiKT49MCxhbj1haj9hby5yZXNwb25zZVhNTDphby5yZXNwb25zZVRleHQ7aWYoYWomJmFuLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZT09PSJwYXJzZXJlcnJvciIpe2lmKGYuZXJyb3Ipe2YuZXJyb3IoInBhcnNlcmVycm9yIil9fWlmKGFsJiZhbC5kYXRhRmlsdGVyKXthbj1hbC5kYXRhRmlsdGVyKGFuLGFtKX1pZih0eXBlb2YgYW49PT0ic3RyaW5nIil7aWYoYW09PT0ianNvbiJ8fCFhbSYmYWsuaW5kZXhPZigianNvbiIpPj0wKXthbj1xKGFuKX1lbHNle2lmKGFtPT09InNjcmlwdCJ8fCFhbSYmYWsuaW5kZXhPZigiamF2YXNjcmlwdCIpPj0wKXtmLmdsb2JhbEV2YWwoYW4pfX19cmV0dXJuIGFufTtyZXR1cm4gYWl9fTtmLmZuLmFqYXhGb3JtPWZ1bmN0aW9uKGcpe2c9Z3x8e307Zy5kZWxlZ2F0aW9uPWcuZGVsZWdhdGlvbiYmZi5pc0Z1bmN0aW9uKGYuZm4ub24pO2lmKCFnLmRlbGVnYXRpb24mJnRoaXMubGVuZ3RoPT09MCl7dmFyIGg9e3M6dGhpcy5zZWxlY3RvcixjOnRoaXMuY29udGV4dH07aWYoIWYuaXNSZWFkeSYmaC5zKXtkKCJET00gbm90IHJlYWR5LCBxdWV1aW5nIGFqYXhGb3JtIik7ZihmdW5jdGlvbigpe2YoaC5zLGguYykuYWpheEZvcm0oZyl9KTtyZXR1cm4gdGhpc31kKCJ0ZXJtaW5hdGluZzsgemVybyBlbGVtZW50cyBmb3VuZCBieSBzZWxlY3RvciIrKGYuaXNSZWFkeT8iIjoiIChET00gbm90IHJlYWR5KSIpKTtyZXR1cm4gdGhpc31pZihnLmRlbGVnYXRpb24pe2YoZG9jdW1lbnQpLm9mZigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGIpLm9mZigiY2xpY2suZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYSkub24oInN1Ym1pdC5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGIpLm9uKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGEpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIixnLGIpLmJpbmQoImNsaWNrLmZvcm0tcGx1Z2luIixnLGEpfTtmdW5jdGlvbiBiKGgpe3ZhciBnPWguZGF0YTtpZighaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aC5wcmV2ZW50RGVmYXVsdCgpO2YoaC50YXJnZXQpLmFqYXhTdWJtaXQoZyl9fWZ1bmN0aW9uIGEoayl7dmFyIGo9ay50YXJnZXQ7dmFyIGg9ZihqKTtpZighKGguaXMoIlt0eXBlPXN1Ym1pdF0sW3R5cGU9aW1hZ2VdIikpKXt2YXIgZz1oLmNsb3Nlc3QoIlt0eXBlPXN1Ym1pdF0iKTtpZihnLmxlbmd0aD09PTApe3JldHVybn1qPWdbMF19dmFyIGk9dGhpcztpLmNsaz1qO2lmKGoudHlwZT09ImltYWdlIil7aWYoay5vZmZzZXRYIT09dW5kZWZpbmVkKXtpLmNsa194PWsub2Zmc2V0WDtpLmNsa195PWsub2Zmc2V0WX1lbHNle2lmKHR5cGVvZiBmLmZuLm9mZnNldD09ImZ1bmN0aW9uIil7dmFyIGw9aC5vZmZzZXQoKTtpLmNsa194PWsucGFnZVgtbC5sZWZ0O2kuY2xrX3k9ay5wYWdlWS1sLnRvcH1lbHNle2kuY2xrX3g9ay5wYWdlWC1qLm9mZnNldExlZnQ7aS5jbGtfeT1rLnBhZ2VZLWoub2Zmc2V0VG9wfX19c2V0VGltZW91dChmdW5jdGlvbigpe2kuY2xrPWkuY2xrX3g9aS5jbGtfeT1udWxsfSwxMDApfWYuZm4uYWpheEZvcm1VbmJpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoInN1Ym1pdC5mb3JtLXBsdWdpbiBjbGljay5mb3JtLXBsdWdpbiIpfTtmLmZuLmZvcm1Ub0FycmF5PWZ1bmN0aW9uKHgsZyl7dmFyIHc9W107aWYodGhpcy5sZW5ndGg9PT0wKXtyZXR1cm4gd312YXIgbD10aGlzWzBdO3ZhciBwPXg/bC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOmwuZWxlbWVudHM7aWYoIXApe3JldHVybiB3fXZhciByLHEsbyx5LG0sdCxrO2ZvcihyPTAsdD1wLmxlbmd0aDtyPHQ7cisrKXttPXBbcl07bz1tLm5hbWU7aWYoIW98fG0uZGlzYWJsZWQpe2NvbnRpbnVlfWlmKHgmJmwuY2xrJiZtLnR5cGU9PSJpbWFnZSIpe2lmKGwuY2xrPT1tKXt3LnB1c2goe25hbWU6byx2YWx1ZTpmKG0pLnZhbCgpLHR5cGU6bS50eXBlfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfWNvbnRpbnVlfXk9Zi5maWVsZFZhbHVlKG0sdHJ1ZSk7aWYoeSYmeS5jb25zdHJ1Y3Rvcj09QXJyYXkpe2lmKGcpe2cucHVzaChtKX1mb3IocT0wLGs9eS5sZW5ndGg7cTxrO3ErKyl7dy5wdXNoKHtuYW1lOm8sdmFsdWU6eVtxXX0pfX1lbHNle2lmKGMuZmlsZWFwaSYmbS50eXBlPT0iZmlsZSIpe2lmKGcpe2cucHVzaChtKX12YXIgaD1tLmZpbGVzO2lmKGgubGVuZ3RoKXtmb3IocT0wO3E8aC5sZW5ndGg7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTpoW3FdLHR5cGU6bS50eXBlfSl9fWVsc2V7dy5wdXNoKHtuYW1lOm8sdmFsdWU6IiIsdHlwZTptLnR5cGV9KX19ZWxzZXtpZih5IT09bnVsbCYmdHlwZW9mIHkhPSJ1bmRlZmluZWQiKXtpZihnKXtnLnB1c2gobSl9dy5wdXNoKHtuYW1lOm8sdmFsdWU6eSx0eXBlOm0udHlwZSxyZXF1aXJlZDptLnJlcXVpcmVkfSl9fX19aWYoIXgmJmwuY2xrKXt2YXIgcz1mKGwuY2xrKSx1PXNbMF07bz11Lm5hbWU7aWYobyYmIXUuZGlzYWJsZWQmJnUudHlwZT09ImltYWdlIil7dy5wdXNoKHtuYW1lOm8sdmFsdWU6cy52YWwoKX0pO3cucHVzaCh7bmFtZTpvKyIueCIsdmFsdWU6bC5jbGtfeH0se25hbWU6bysiLnkiLHZhbHVlOmwuY2xrX3l9KX19cmV0dXJuIHd9O2YuZm4uZm9ybVNlcmlhbGl6ZT1mdW5jdGlvbihnKXtyZXR1cm4gZi5wYXJhbSh0aGlzLmZvcm1Ub0FycmF5KGcpKX07Zi5mbi5maWVsZFNlcmlhbGl6ZT1mdW5jdGlvbihoKXt2YXIgZz1bXTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5hbWU7aWYoIW0pe3JldHVybn12YXIgaz1mLmZpZWxkVmFsdWUodGhpcyxoKTtpZihrJiZrLmNvbnN0cnVjdG9yPT1BcnJheSl7Zm9yKHZhciBsPTAsaj1rLmxlbmd0aDtsPGo7bCsrKXtnLnB1c2goe25hbWU6bSx2YWx1ZTprW2xdfSl9fWVsc2V7aWYoayE9PW51bGwmJnR5cGVvZiBrIT0idW5kZWZpbmVkIil7Zy5wdXNoKHtuYW1lOnRoaXMubmFtZSx2YWx1ZTprfSl9fX0pO3JldHVybiBmLnBhcmFtKGcpfTtmLmZuLmZpZWxkVmFsdWU9ZnVuY3Rpb24obSl7Zm9yKHZhciBsPVtdLGo9MCxnPXRoaXMubGVuZ3RoO2o8ZztqKyspe3ZhciBrPXRoaXNbal07dmFyIGg9Zi5maWVsZFZhbHVlKGssbSk7aWYoaD09PW51bGx8fHR5cGVvZiBoPT0idW5kZWZpbmVkInx8KGguY29uc3RydWN0b3I9PUFycmF5JiYhaC5sZW5ndGgpKXtjb250aW51ZX1pZihoLmNvbnN0cnVjdG9yPT1BcnJheSl7Zi5tZXJnZShsLGgpfWVsc2V7bC5wdXNoKGgpfX1yZXR1cm4gbH07Zi5maWVsZFZhbHVlPWZ1bmN0aW9uKGcsbyl7dmFyIGo9Zy5uYW1lLHU9Zy50eXBlLHc9Zy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYobz09PXVuZGVmaW5lZCl7bz10cnVlfWlmKG8mJighanx8Zy5kaXNhYmxlZHx8dT09InJlc2V0Inx8dT09ImJ1dHRvbiJ8fCh1PT0iY2hlY2tib3gifHx1PT0icmFkaW8iKSYmIWcuY2hlY2tlZHx8KHU9PSJzdWJtaXQifHx1PT0iaW1hZ2UiKSYmZy5mb3JtJiZnLmZvcm0uY2xrIT1nfHx3PT0ic2VsZWN0IiYmZy5zZWxlY3RlZEluZGV4PT0tMSkpe3JldHVybiBudWxsfWlmKHc9PSJzZWxlY3QiKXt2YXIgcD1nLnNlbGVjdGVkSW5kZXg7aWYocDwwKXtyZXR1cm4gbnVsbH12YXIgcj1bXSxoPWcub3B0aW9uczt2YXIgbD0odT09InNlbGVjdC1vbmUiKTt2YXIgcT0obD9wKzE6aC5sZW5ndGgpO2Zvcih2YXIgaz0obD9wOjApO2s8cTtrKyspe3ZhciBtPWhba107aWYobS5zZWxlY3RlZCl7dmFyIHM9bS52YWx1ZTtpZighcyl7cz0obS5hdHRyaWJ1dGVzJiZtLmF0dHJpYnV0ZXMudmFsdWUmJiEobS5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZCkpP20udGV4dDptLnZhbHVlfWlmKGwpe3JldHVybiBzfXIucHVzaChzKX19cmV0dXJuIHJ9cmV0dXJuIGYoZykudmFsKCl9O2YuZm4uY2xlYXJGb3JtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKCJpbnB1dCxzZWxlY3QsdGV4dGFyZWEiLHRoaXMpLmNsZWFyRmllbGRzKGcpfSl9O2YuZm4uY2xlYXJGaWVsZHM9Zi5mbi5jbGVhcklucHV0cz1mdW5jdGlvbihnKXt2YXIgaD0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy50eXBlLGk9dGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoaC50ZXN0KGopfHxpPT0idGV4dGFyZWEiKXt0aGlzLnZhbHVlPSIifWVsc2V7aWYoaj09ImNoZWNrYm94Inx8aj09InJhZGlvIil7dGhpcy5jaGVja2VkPWZhbHNlfWVsc2V7aWYoaT09InNlbGVjdCIpe3RoaXMuc2VsZWN0ZWRJbmRleD0tMX1lbHNle2lmKGo9PSJmaWxlIil7aWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpe2YodGhpcykucmVwbGFjZVdpdGgoZih0aGlzKS5jbG9uZSh0cnVlKSl9ZWxzZXtmKHRoaXMpLnZhbCgiIil9fWVsc2V7aWYoZyl7aWYoKGc9PT10cnVlJiYvaGlkZGVuLy50ZXN0KGopKXx8KHR5cGVvZiBnPT0ic3RyaW5nIiYmZih0aGlzKS5pcyhnKSkpe3RoaXMudmFsdWU9IiJ9fX19fX19KX07Zi5mbi5yZXNldEZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMucmVzZXQ9PSJmdW5jdGlvbiJ8fCh0eXBlb2YgdGhpcy5yZXNldD09Im9iamVjdCImJiF0aGlzLnJlc2V0Lm5vZGVUeXBlKSl7dGhpcy5yZXNldCgpfX0pfTtmLmZuLmVuYWJsZT1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9IWd9KX07Zi5mbi5zZWxlY3RlZD1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXRoaXMudHlwZTtpZihoPT0iY2hlY2tib3gifHxoPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9Z31lbHNle2lmKHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ib3B0aW9uIil7dmFyIGk9Zih0aGlzKS5wYXJlbnQoInNlbGVjdCIpO2lmKGcmJmlbMF0mJmlbMF0udHlwZT09InNlbGVjdC1vbmUiKXtpLmZpbmQoIm9wdGlvbiIpLnNlbGVjdGVkKGZhbHNlKX10aGlzLnNlbGVjdGVkPWd9fX0pfTtmLmZuLmFqYXhTdWJtaXQuZGVidWc9ZmFsc2U7ZnVuY3Rpb24gZCgpe2lmKCFmLmZuLmFqYXhTdWJtaXQuZGVidWcpe3JldHVybn12YXIgZz0iW2pxdWVyeS5mb3JtXSAiK0FycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKTtpZih3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nKXt3aW5kb3cuY29uc29sZS5sb2coZyl9ZWxzZXtpZih3aW5kb3cub3BlcmEmJndpbmRvdy5vcGVyYS5wb3N0RXJyb3Ipe3dpbmRvdy5vcGVyYS5wb3N0RXJyb3IoZyl9fX19KSk7UEsHCHYQEAGjPgAAoz4AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xsaWJcbWFya2VkLm1pbi5qcyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9e30sdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5ydWxlcz1hLm5vcm1hbCx0aGlzLm9wdGlvbnMuZ2ZtJiYodGhpcy5ydWxlcz10aGlzLm9wdGlvbnMudGFibGVzP2EudGFibGVzOmEuZ2ZtKX1mdW5jdGlvbiB0KGUsdCl7aWYodGhpcy5vcHRpb25zPXR8fGguZGVmYXVsdHMsdGhpcy5saW5rcz1lLHRoaXMucnVsZXM9dS5ub3JtYWwsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBuLCF0aGlzLmxpbmtzKXRocm93IG5ldyBFcnJvcigiVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4iKTt0aGlzLm9wdGlvbnMuZ2ZtP3RoaXMucnVsZXM9dGhpcy5vcHRpb25zLmJyZWFrcz91LmJyZWFrczp1LmdmbTp0aGlzLm9wdGlvbnMucGVkYW50aWMmJih0aGlzLnJ1bGVzPXUucGVkYW50aWMpfWZ1bmN0aW9uIG4oKXt9ZnVuY3Rpb24gcihlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlLnJlcGxhY2UodD8vJi9nOi8mKD8hIz9cdys7KS9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCImIzM5OyIpfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZT1lLnNvdXJjZSx0PXR8fCIiLGZ1bmN0aW9uIG4ocixzKXtyZXR1cm4gcj8ocz1zLnNvdXJjZXx8cyxzPXMucmVwbGFjZSgvKF58W15cW10pXF4vZywiJDEiKSxlPWUucmVwbGFjZShyLHMpLG4pOm5ldyBSZWdFeHAoZSx0KX19ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdCxuLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt0PWFyZ3VtZW50c1tyXTtmb3IobiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX1yZXR1cm4gZX1mdW5jdGlvbiBoKHQsbixpKXtpZihpfHwiZnVuY3Rpb24iPT10eXBlb2Ygbil7aXx8KGk9bixuPW51bGwpLG49byh7fSxoLmRlZmF1bHRzLG58fHt9KTt2YXIgbCxhLHU9bi5oaWdobGlnaHQscD0wO3RyeXtsPWUubGV4KHQsbil9Y2F0Y2goYyl7cmV0dXJuIGkoYyl9YT1sLmxlbmd0aDt2YXIgZz1mdW5jdGlvbigpe3ZhciBlLHQ7dHJ5e2U9ci5wYXJzZShsLG4pfWNhdGNoKHMpe3Q9c31yZXR1cm4gbi5oaWdobGlnaHQ9dSx0P2kodCk6aShudWxsLGUpfTtpZighdXx8dS5sZW5ndGg8MylyZXR1cm4gZygpO2lmKGRlbGV0ZSBuLmhpZ2hsaWdodCwhYSlyZXR1cm4gZygpO2Zvcig7cDxsLmxlbmd0aDtwKyspIWZ1bmN0aW9uKGUpe3JldHVybiJjb2RlIiE9PWUudHlwZT8tLWF8fGcoKTp1KGUudGV4dCxlLmxhbmcsZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09bnx8bj09PWUudGV4dD8tLWF8fGcoKTooZS50ZXh0PW4sZS5lc2NhcGVkPSEwLC0tYXx8ZygpLHZvaWQgMCl9KX0obFtwXSl9ZWxzZSB0cnl7cmV0dXJuIG4mJihuPW8oe30saC5kZWZhdWx0cyxuKSksci5wYXJzZShlLmxleCh0LG4pLG4pfWNhdGNoKGMpe2lmKGMubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGpqL21hcmtlZC4iLChufHxoLmRlZmF1bHRzKS5zaWxlbnQpcmV0dXJuIjxwPkFuIGVycm9yIG9jY3VyZWQ6PC9wPjxwcmU+IitzKGMubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7dGhyb3cgY319dmFyIGE9e25ld2xpbmU6L15cbisvLGNvZGU6L14oIHs0fVteXG5dK1xuKikrLyxmZW5jZXM6bCxocjovXiggKlstKl9dKXszLH0gKig/OlxuK3wkKS8saGVhZGluZzovXiAqKCN7MSw2fSkgKihbXlxuXSs/KSAqIyogKig/OlxuK3wkKS8sbnB0YWJsZTpsLGxoZWFkaW5nOi9eKFteXG5dKylcbiAqKD18LSl7Mix9ICooPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oICo+W15cbl0rKFxuW15cbl0rKSpcbiopKy8sbGlzdDovXiggKikoYnVsbCkgW1xzXFNdKz8oPzpocnxcbnsyLH0oPyEgKSg/IVwxYnVsbCApXG4qfFxzKiQpLyxodG1sOi9eICooPzpjb21tZW50fGNsb3NlZHxjbG9zaW5nKSAqKD86XG57Mix9fFxzKiQpLyxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogK1siKF0oW15cbl0rKVsiKV0pPyAqKD86XG4rfCQpLyx0YWJsZTpsLHBhcmFncmFwaDovXigoPzpbXlxuXStcbj8oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8dGFnfGRlZikpKylcbiovLHRleHQ6L15bXlxuXSsvfTthLmJ1bGxldD0vKD86WyorLV18XGQrXC4pLyxhLml0ZW09L14oICopKGJ1bGwpIFteXG5dKig/OlxuKD8hXDFidWxsIClbXlxuXSopKi8sYS5pdGVtPWkoYS5pdGVtLCJnbSIpKC9idWxsL2csYS5idWxsZXQpKCksYS5saXN0PWkoYS5saXN0KSgvYnVsbC9nLGEuYnVsbGV0KSgiaHIiLC9cbisoPz0oPzogKlstKl9dKXszLH0gKig/OlxuK3wkKSkvKSgpLGEuX3RhZz0iKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6L3xAKVxcYiIsYS5odG1sPWkoYS5odG1sKSgiY29tbWVudCIsLzwhLS1bXHNcU10qPy0tPi8pKCJjbG9zZWQiLC88KHRhZylbXHNcU10rPzxcL1wxPi8pKCJjbG9zaW5nIiwvPHRhZyg/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPl0pKj8+LykoL3RhZy9nLGEuX3RhZykoKSxhLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiaHIiLGEuaHIpKCJoZWFkaW5nIixhLmhlYWRpbmcpKCJsaGVhZGluZyIsYS5saGVhZGluZykoImJsb2NrcXVvdGUiLGEuYmxvY2txdW90ZSkoInRhZyIsIjwiK2EuX3RhZykoImRlZiIsYS5kZWYpKCksYS5ub3JtYWw9byh7fSxhKSxhLmdmbT1vKHt9LGEubm9ybWFsLHtmZW5jZXM6L14gKihgezMsfXx+ezMsfSkgKihcUyspPyAqXG4oW1xzXFNdKz8pXHMqXDEgKig/OlxuK3wkKS8scGFyYWdyYXBoOi9eL30pLGEuZ2ZtLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiKD8hIiwiKD8hIithLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMiIpKyJ8IithLmxpc3Quc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMyIpKyJ8IikoKSxhLnRhYmxlcz1vKHt9LGEuZ2ZtLHtucHRhYmxlOi9eICooXFMuKlx8LiopXG4gKihbLTpdKyAqXHxbLXwgOl0qKVxuKCg/Oi4qXHwuKig/OlxufCQpKSopXG4qLyx0YWJsZTovXiAqXHwoLispXG4gKlx8KCAqWy06XStbLXwgOl0qKVxuKCg/OiAqXHwuKig/OlxufCQpKSopXG4qL30pLGUucnVsZXM9YSxlLmxleD1mdW5jdGlvbih0LG4pe3ZhciByPW5ldyBlKG4pO3JldHVybiByLmxleCh0KX0sZS5wcm90b3R5cGUubGV4PWZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9cdTAwYTAvZywiICIpLnJlcGxhY2UoL1x1MjQyNC9nLCJcbiIpLHRoaXMudG9rZW4oZSwhMCl9LGUucHJvdG90eXBlLnRva2VuPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIscyxpLGwsbyxoLHUscCxlPWUucmVwbGFjZSgvXiArJC9nbSwiIik7ZTspaWYoKHM9dGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoZSkpJiYoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksc1swXS5sZW5ndGg+MSYmdGhpcy50b2tlbnMucHVzaCh7dHlwZToic3BhY2UifSkpLHM9dGhpcy5ydWxlcy5jb2RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCkscz1zWzBdLnJlcGxhY2UoL14gezR9L2dtLCIiKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9zOnMucmVwbGFjZSgvXG4rJC8sIiIpfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuZmVuY2VzLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiY29kZSIsbGFuZzpzWzJdLHRleHQ6c1szXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDpzWzFdLmxlbmd0aCx0ZXh0OnNbMl19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMubnB0YWJsZS5leGVjKGUpKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLG89e3R5cGU6InRhYmxlIixoZWFkZXI6c1sxXS5yZXBsYWNlKC9eICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksYWxpZ246c1syXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGNlbGxzOnNbM10ucmVwbGFjZSgvXG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnNwbGl0KC8gKlx8ICovKTt0aGlzLnRva2Vucy5wdXNoKG8pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmxoZWFkaW5nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiaGVhZGluZyIsZGVwdGg6Ij0iPT09c1syXT8xOjIsdGV4dDpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaHIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJociJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9zdGFydCJ9KSxzPXNbMF0ucmVwbGFjZSgvXiAqPiA/L2dtLCIiKSx0aGlzLnRva2VuKHMsdCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9lbmQifSk7ZWxzZSBpZihzPXRoaXMucnVsZXMubGlzdC5leGVjKGUpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksaT1zWzJdLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3Rfc3RhcnQiLG9yZGVyZWQ6aS5sZW5ndGg+MX0pLHM9c1swXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pLG49ITEscD1zLmxlbmd0aCx1PTA7cD51O3UrKylvPXNbdV0saD1vLmxlbmd0aCxvPW8ucmVwbGFjZSgvXiAqKFsqKy1dfFxkK1wuKSArLywiIiksfm8uaW5kZXhPZigiXG4gIikmJihoLT1vLmxlbmd0aCxvPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9vLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpOm8ucmVwbGFjZShuZXcgUmVnRXhwKCJeIHsxLCIraCsifSIsImdtIiksIiIpKSx0aGlzLm9wdGlvbnMuc21hcnRMaXN0cyYmdSE9PXAtMSYmKGw9YS5idWxsZXQuZXhlYyhzW3UrMV0pWzBdLGk9PT1sfHxpLmxlbmd0aD4xJiZsLmxlbmd0aD4xfHwoZT1zLnNsaWNlKHUrMSkuam9pbigiXG4iKStlLHU9cC0xKSkscj1ufHwvXG5cbig/IVxzKiQpLy50ZXN0KG8pLHUhPT1wLTEmJihuPSJcbiI9PT1vLmNoYXJBdChvLmxlbmd0aC0xKSxyfHwocj1uKSksdGhpcy50b2tlbnMucHVzaCh7dHlwZTpyPyJsb29zZV9pdGVtX3N0YXJ0IjoibGlzdF9pdGVtX3N0YXJ0In0pLHRoaXMudG9rZW4obywhMSksdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9pdGVtX2VuZCJ9KTt0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2VuZCJ9KX1lbHNlIGlmKHM9dGhpcy5ydWxlcy5odG1sLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InBhcmFncmFwaCI6Imh0bWwiLHByZToicHJlIj09PXNbMV18fCJzY3JpcHQiPT09c1sxXXx8InN0eWxlIj09PXNbMV0sdGV4dDpzWzBdfSk7ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLmRlZi5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5saW5rc1tzWzFdLnRvTG93ZXJDYXNlKCldPXtocmVmOnNbMl0sdGl0bGU6c1szXX07ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC8oPzogKlx8ICopP1xuJC8sIiIpLnNwbGl0KCJcbiIpfSx1PTA7dTxvLmFsaWduLmxlbmd0aDt1Kyspby5hbGlnblt1XT0vXiAqLSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChvLmFsaWduW3VdKT8ibGVmdCI6bnVsbDtmb3IodT0wO3U8by5jZWxscy5sZW5ndGg7dSsrKW8uY2VsbHNbdV09by5jZWxsc1t1XS5yZXBsYWNlKC9eICpcfCAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJwYXJhZ3JhcGgiLHRleHQ6IlxuIj09PXNbMV0uY2hhckF0KHNbMV0ubGVuZ3RoLTEpP3NbMV0uc2xpY2UoMCwtMSk6c1sxXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJ0ZXh0Iix0ZXh0OnNbMF19KTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gdGhpcy50b2tlbnN9O3ZhciB1PXtlc2NhcGU6L15cXChbXFxgKnt9XFtcXSgpIytcLS4hXz5dKS8sYXV0b2xpbms6L148KFteID5dKyhAfDpcLylbXiA+XSspPi8sdXJsOmwsdGFnOi9ePCEtLVtcc1xTXSo/LS0+fF48XC8/XHcrKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vLGxpbms6L14hP1xbKGluc2lkZSlcXVwoaHJlZlwpLyxyZWZsaW5rOi9eIT9cWyhpbnNpZGUpXF1ccypcWyhbXlxdXSopXF0vLG5vbGluazovXiE/XFsoKD86XFtbXlxdXSpcXXxbXlxbXF1dKSopXF0vLHN0cm9uZzovXl9fKFtcc1xTXSs/KV9fKD8hXyl8XlwqXCooW1xzXFNdKz8pXCpcKig/IVwqKS8sZW06L15cYl8oKD86X198W1xzXFNdKSs/KV9cYnxeXCooKD86XCpcKnxbXHNcU10pKz8pXCooPyFcKikvLGNvZGU6L14oYCspXHMqKFtcc1xTXSo/W15gXSlccypcMSg/IWApLyxicjovXiB7Mix9XG4oPyFccyokKS8sZGVsOmwsdGV4dDovXltcc1xTXSs/KD89W1xcPCFcW18qYF18IHsyLH1cbnwkKS99O3UuX2luc2lkZT0vKD86XFtbXlxdXSpcXXxbXlxbXF1dfFxdKD89W15cW10qXF0pKSovLHUuX2hyZWY9L1xzKjw/KFtcc1xTXSo/KT4/KD86XHMrWyciXShbXHNcU10qPylbJyJdKT9ccyovLHUubGluaz1pKHUubGluaykoImluc2lkZSIsdS5faW5zaWRlKSgiaHJlZiIsdS5faHJlZikoKSx1LnJlZmxpbms9aSh1LnJlZmxpbmspKCJpbnNpZGUiLHUuX2luc2lkZSkoKSx1Lm5vcm1hbD1vKHt9LHUpLHUucGVkYW50aWM9byh7fSx1Lm5vcm1hbCx7c3Ryb25nOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW06L15fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pfF5cKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopL30pLHUuZ2ZtPW8oe30sdS5ub3JtYWwse2VzY2FwZTppKHUuZXNjYXBlKSgiXSkiLCJ+fF0pIikoKSx1cmw6L14oaHR0cHM/OlwvXC9bXlxzPF0rW148Liw6OyInKVxdXHNdKS8sZGVsOi9efn4oPz1cUykoW1xzXFNdKj9cUyl+fi8sdGV4dDppKHUudGV4dCkoIl18Iiwifl18IikoInwiLCJ8aHR0cHM/Oi8vfCIpKCl9KSx1LmJyZWFrcz1vKHt9LHUuZ2ZtLHticjppKHUuYnIpKCJ7Mix9IiwiKiIpKCksdGV4dDppKHUuZ2ZtLnRleHQpKCJ7Mix9IiwiKiIpKCl9KSx0LnJ1bGVzPXUsdC5vdXRwdXQ9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzPW5ldyB0KG4scik7cmV0dXJuIHMub3V0cHV0KGUpfSx0LnByb3RvdHlwZS5vdXRwdXQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpLGw9IiI7ZTspaWYoaT10aGlzLnJ1bGVzLmVzY2FwZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPWlbMV07ZWxzZSBpZihpPXRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSwiQCI9PT1pWzJdPyhuPSI6Ij09PWlbMV0uY2hhckF0KDYpP3RoaXMubWFuZ2xlKGlbMV0uc3Vic3RyaW5nKDcpKTp0aGlzLm1hbmdsZShpWzFdKSxyPXRoaXMubWFuZ2xlKCJtYWlsdG86Iikrbik6KG49cyhpWzFdKSxyPW4pLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudXJsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbj1zKGlbMV0pLHI9bixsKz10aGlzLnJlbmRlcmVyLmxpbmsocixudWxsLG4pO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRhZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3B0aW9ucy5zYW5pdGl6ZT9zKGlbMF0pOmlbMF07ZWxzZSBpZihpPXRoaXMucnVsZXMubGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3V0cHV0TGluayhpLHtocmVmOmlbMl0sdGl0bGU6aVszXX0pO2Vsc2UgaWYoKGk9dGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoZSkpfHwoaT10aGlzLnJ1bGVzLm5vbGluay5leGVjKGUpKSl7aWYoZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdD0oaVsyXXx8aVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSx0PXRoaXMubGlua3NbdC50b0xvd2VyQ2FzZSgpXSwhdHx8IXQuaHJlZil7bCs9aVswXS5jaGFyQXQoMCksZT1pWzBdLnN1YnN0cmluZygxKStlO2NvbnRpbnVlfWwrPXRoaXMub3V0cHV0TGluayhpLHQpfWVsc2UgaWYoaT10aGlzLnJ1bGVzLnN0cm9uZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuc3Ryb25nKHRoaXMub3V0cHV0KGlbMl18fGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5lbS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZW0odGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmNvZGVzcGFuKHMoaVsyXSwhMCkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmJyLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5icigpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmRlbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZGVsKHRoaXMub3V0cHV0KGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy50ZXh0LmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9cyh0aGlzLnNtYXJ0eXBhbnRzKGlbMF0pKTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gbH0sdC5wcm90b3R5cGUub3V0cHV0TGluaz1mdW5jdGlvbihlLHQpe3ZhciBuPXModC5ocmVmKSxyPXQudGl0bGU/cyh0LnRpdGxlKTpudWxsO3JldHVybiIhIiE9PWVbMF0uY2hhckF0KDApP3RoaXMucmVuZGVyZXIubGluayhuLHIsdGhpcy5vdXRwdXQoZVsxXSkpOnRoaXMucmVuZGVyZXIuaW1hZ2UobixyLHMoZVsxXSkpfSx0LnByb3RvdHlwZS5zbWFydHlwYW50cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2UucmVwbGFjZSgvLS0vZywi4oCUIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMeKAmCIpLnJlcGxhY2UoLycvZywi4oCZIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQx4oCcIikucmVwbGFjZSgvIi9nLCLigJ0iKS5yZXBsYWNlKC9cLnszfS9nLCLigKYiKTplfSx0LnByb3RvdHlwZS5tYW5nbGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiIscj1lLmxlbmd0aCxzPTA7cj5zO3MrKyl0PWUuY2hhckNvZGVBdChzKSxNYXRoLnJhbmRvbSgpPi41JiYodD0ieCIrdC50b1N0cmluZygxNikpLG4rPSImIyIrdCsiOyI7cmV0dXJuIG59LG4ucHJvdG90eXBlLmNvZGU9ZnVuY3Rpb24oZSx0LG4scil7aWYocj1yfHx7fSxyLmhpZ2hsaWdodCl7dmFyIGk9ci5oaWdobGlnaHQoZSx0KTtudWxsIT1pJiZpIT09ZSYmKG49ITAsZT1pKX1yZXR1cm4gdD8nPHByZT48Y29kZSBjbGFzcz0iJytyLmxhbmdQcmVmaXgrdCsnIj4nKyhuP2U6cyhlKSkrIlxuPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhuP2U6cyhlLCEwKSkrIlxuPC9jb2RlPjwvcHJlPiJ9LG4ucHJvdG90eXBlLmJsb2NrcXVvdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIjxibG9ja3F1b3RlPlxuIitlKyI8L2Jsb2NrcXVvdGU+XG4ifSxuLnByb3RvdHlwZS5odG1sPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxuLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aCIrdCsnIGlkPSInK3IuaGVhZGVyUHJlZml4K24udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlx3XSsvZywiLSIpKyciPicrZSsiPC9oIit0KyI+XG4ifSxuLnByb3RvdHlwZS5ocj1mdW5jdGlvbigpe3JldHVybiI8aHI+XG4ifSxuLnByb3RvdHlwZS5saXN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dD8ib2wiOiJ1bCI7cmV0dXJuIjwiK24rIj5cbiIrZSsiPC8iK24rIj5cbiJ9LG4ucHJvdG90eXBlLmxpc3RpdGVtPWZ1bmN0aW9uKGUpe3JldHVybiI8bGk+IitlKyI8L2xpPlxuIn0sbi5wcm90b3R5cGUucGFyYWdyYXBoPWZ1bmN0aW9uKGUpe3JldHVybiI8cD4iK2UrIjwvcD5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrZSsiPC90aGVhZD5cbiIrIjx0Ym9keT5cbiIrdCsiPC90Ym9keT5cbiIrIjwvdGFibGU+XG4ifSxuLnByb3RvdHlwZS50YWJsZXJvdz1mdW5jdGlvbihlKXtyZXR1cm4iPHRyPlxuIitlKyI8L3RyPlxuIn0sbi5wcm90b3R5cGUudGFibGVjZWxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5oZWFkZXI/InRoIjoidGQiLHI9dC5hbGlnbj8iPCIrbisnIHN0eWxlPSJ0ZXh0LWFsaWduOicrdC5hbGlnbisnIj4nOiI8IituKyI+IjtyZXR1cm4gcitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUuc3Ryb25nPWZ1bmN0aW9uKGUpe3JldHVybiI8c3Ryb25nPiIrZSsiPC9zdHJvbmc+In0sbi5wcm90b3R5cGUuZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxlbT4iK2UrIjwvZW0+In0sbi5wcm90b3R5cGUuY29kZXNwYW49ZnVuY3Rpb24oZSl7cmV0dXJuIjxjb2RlPiIrZSsiPC9jb2RlPiJ9LG4ucHJvdG90eXBlLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIjxicj4ifSxuLnByb3RvdHlwZS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIjxkZWw+IitlKyI8L2RlbD4ifSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0nPGEgaHJlZj0iJytlKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+IituKyI8L2E+In0sbi5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8aW1nIHNyYz0iJytlKyciIGFsdD0iJytuKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+In0sci5wYXJzZT1mdW5jdGlvbihlLHQsbil7dmFyIHM9bmV3IHIodCxuKTtyZXR1cm4gcy5wYXJzZShlKX0sci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7dGhpcy5pbmxpbmU9bmV3IHQoZS5saW5rcyx0aGlzLm9wdGlvbnMsdGhpcy5yZW5kZXJlciksdGhpcy50b2tlbnM9ZS5yZXZlcnNlKCk7Zm9yKHZhciBuPSIiO3RoaXMubmV4dCgpOyluKz10aGlzLnRvaygpO3JldHVybiBufSxyLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW49dGhpcy50b2tlbnMucG9wKCl9LHIucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdfHwwfSxyLnByb3RvdHlwZS5wYXJzZVRleHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy50b2tlbi50ZXh0OyJ0ZXh0Ij09PXRoaXMucGVlaygpLnR5cGU7KWUrPSJcbiIrdGhpcy5uZXh0KCkudGV4dDtyZXR1cm4gdGhpcy5pbmxpbmUub3V0cHV0KGUpfSxyLnByb3RvdHlwZS50b2s9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy50b2tlbi50eXBlKXtjYXNlInNwYWNlIjpyZXR1cm4iIjtjYXNlImhyIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpO2Nhc2UiaGVhZGluZyI6cmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSx0aGlzLnRva2VuLmRlcHRoLHRoaXMudG9rZW4udGV4dCx0aGlzLm9wdGlvbnMpO2Nhc2UiY29kZSI6cmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsdGhpcy50b2tlbi5sYW5nLHRoaXMudG9rZW4uZXNjYXBlZCx0aGlzLm9wdGlvbnMpO2Nhc2UidGFibGUiOnZhciBlLHQsbixyLHMsaT0iIixsPSIiO2ZvcihuPSIiLGU9MDtlPHRoaXMudG9rZW4uaGVhZGVyLmxlbmd0aDtlKyspcj17aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19LG4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLmhlYWRlcltlXSkse2hlYWRlcjohMCxhbGlnbjp0aGlzLnRva2VuLmFsaWduW2VdfSk7Zm9yKGkrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobiksZT0wO2U8dGhpcy50b2tlbi5jZWxscy5sZW5ndGg7ZSsrKXtmb3IodD10aGlzLnRva2VuLmNlbGxzW2VdLG49IiIscz0wO3M8dC5sZW5ndGg7cysrKW4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0W3NdKSx7aGVhZGVyOiExLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bc119KTtsKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KG4pfXJldHVybiB0aGlzLnJlbmRlcmVyLnRhYmxlKGksbCk7Y2FzZSJibG9ja3F1b3RlX3N0YXJ0Ijpmb3IodmFyIGw9IiI7ImJsb2NrcXVvdGVfZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShsKTtjYXNlImxpc3Rfc3RhcnQiOmZvcih2YXIgbD0iIixvPXRoaXMudG9rZW4ub3JkZXJlZDsibGlzdF9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0KGwsbyk7Y2FzZSJsaXN0X2l0ZW1fc3RhcnQiOmZvcih2YXIgbD0iIjsibGlzdF9pdGVtX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz0idGV4dCI9PT10aGlzLnRva2VuLnR5cGU/dGhpcy5wYXJzZVRleHQoKTp0aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGwpO2Nhc2UibG9vc2VfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJodG1sIjp2YXIgaD10aGlzLnRva2VuLnByZXx8dGhpcy5vcHRpb25zLnBlZGFudGljP3RoaXMudG9rZW4udGV4dDp0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KTtyZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKGgpO2Nhc2UicGFyYWdyYXBoIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCkpO2Nhc2UidGV4dCI6cmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VUZXh0KCkpfX0sbC5leGVjPWwsaC5vcHRpb25zPWguc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gbyhoLmRlZmF1bHRzLGUpLGh9LGguZGVmYXVsdHM9e2dmbTohMCx0YWJsZXM6ITAsYnJlYWtzOiExLHBlZGFudGljOiExLHNhbml0aXplOiExLHNtYXJ0TGlzdHM6ITEsc2lsZW50OiExLGhpZ2hsaWdodDpudWxsLGxhbmdQcmVmaXg6ImxhbmctIixzbWFydHlwYW50czohMSxoZWFkZXJQcmVmaXg6IiIscmVuZGVyZXI6bmV3IG59LGguUGFyc2VyPXIsaC5wYXJzZXI9ci5wYXJzZSxoLlJlbmRlcmVyPW4saC5MZXhlcj1lLGgubGV4ZXI9ZS5sZXgsaC5JbmxpbmVMZXhlcj10LGguaW5saW5lTGV4ZXI9dC5vdXRwdXQsaC5wYXJzZT1oLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1oOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTp0aGlzLm1hcmtlZD1ofS5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fCgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6Z2xvYmFsKX0oKSk7UEsHCEL6TGpTOQAAUzkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHN0YXRpY1xsaWJcdmFsaWRhdGUubWluLmpzLyoKICogdmFsaWRhdGUuanMgMS4zCiAqIENvcHlyaWdodCAoYykgMjAxMyBSaWNrIEhhcnJpc29uLCBodHRwOi8vcmlja2hhcnJpc29uLm1lCiAqIHZhbGlkYXRlLmpzIGlzIG9wZW4gc291cmNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqIFBvcnRpb25zIG9mIHZhbGlkYXRlLmpzIGFyZSBpbnNwaXJlZCBieSBDb2RlSWduaXRlci4KICogaHR0cDovL3JpY2toYXJyaXNvbi5naXRodWIuY29tL3ZhbGlkYXRlLmpzCiAqLwoKKGZ1bmN0aW9uKHEscixtKXt2YXIgcz17cmVxdWlyZWQ6IlRoZSAlcyBmaWVsZCBpcyByZXF1aXJlZC4iLG1hdGNoZXM6IlRoZSAlcyBmaWVsZCBkb2VzIG5vdCBtYXRjaCB0aGUgJXMgZmllbGQuIiwiZGVmYXVsdCI6IlRoZSAlcyBmaWVsZCBpcyBzdGlsbCBzZXQgdG8gZGVmYXVsdCwgcGxlYXNlIGNoYW5nZS4iLHZhbGlkX2VtYWlsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iLHZhbGlkX2VtYWlsczoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhbGwgdmFsaWQgZW1haWwgYWRkcmVzc2VzLiIsbWluX2xlbmd0aDoiVGhlICVzIGZpZWxkIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixtYXhfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBub3QgZXhjZWVkICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZXhhY3RfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBleGFjdGx5ICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZ3JlYXRlcl90aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAlcy4iLGxlc3NfdGhhbjoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBsZXNzIHRoYW4gJXMuIixhbHBoYToiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzLiIsYWxwaGFfbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycy4iLGFscGhhX2Rhc2g6IlRoZSAlcyBmaWVsZCBtdXN0IG9ubHkgY29udGFpbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBhbmQgZGFzaGVzLiIsbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5IG51bWJlcnMuIixpbnRlZ2VyOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFuIGludGVnZXIuIixkZWNpbWFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgZGVjaW1hbCBudW1iZXIuIixpc19uYXR1cmFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgcG9zaXRpdmUgbnVtYmVycy4iLGlzX25hdHVyYWxfbm9femVybzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4iLHZhbGlkX2lwOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgSVAuIix2YWxpZF9iYXNlNjQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBiYXNlNjQgc3RyaW5nLiIsdmFsaWRfY3JlZGl0X2NhcmQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIuIixpc19maWxlX3R5cGU6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSAlcyBmaWxlcy4iLHZhbGlkX3VybDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIFVSTC4ifSx0PWZ1bmN0aW9uKGEpe30sdT0vXiguKz8pXFsoLispXF0kLyxoPS9eWzAtOV0rJC8sdj0vXlwtP1swLTldKyQvLGs9L15cLT9bMC05XSpcLj9bMC05XSskLyxwPS9eW2EtekEtWjAtOS4hIyQlJmFtcDsnKitcLVwvPT9cXl9ge3x9flwtXStAW2EtekEtWjAtOVwtXSsoPzpcLlthLXpBLVowLTlcLV0rKSokLyx3PS9eW2Etel0rJC9pLHg9L15bYS16MC05XSskL2kseT0vXlthLXowLTlfXC1dKyQvaSx6PS9eWzAtOV0rJC9pLEE9L15bMS05XVswLTldKiQvaSxCPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KSQvaSxDPS9bXmEtekEtWjAtOVwvXCs9XS9pLEQ9L15bXGRcLVxzXSskLyxFPS9eKChodHRwfGh0dHBzKTpcL1wvKFx3Kzp7MCwxfVx3KkApPyhcUyspfCkoOlswLTldKyk/KFwvfFwvKFtcdyMhOi4/Kz0mJUAhXC1cL10pKT8kLyxlPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbGxiYWNrPWN8fHQ7dGhpcy5lcnJvcnM9W107dGhpcy5maWVsZHM9e307dGhpcy5mb3JtPXRoaXMuX2Zvcm1CeU5hbWVPck5vZGUoYSl8fHt9O3RoaXMubWVzc2FnZXM9e307dGhpcy5oYW5kbGVycz17fTthPTA7Zm9yKGM9Yi5sZW5ndGg7YTxjO2ErKyl7dmFyIGQ9YlthXTtpZigoZC5uYW1lfHxkLm5hbWVzKSYmZC5ydWxlcylpZihkLm5hbWVzKWZvcih2YXIgbD0wO2w8ZC5uYW1lcy5sZW5ndGg7bCsrKXRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lc1tsXSk7ZWxzZSB0aGlzLl9hZGRGaWVsZChkLGQubmFtZSl9dmFyIGc9dGhpcy5mb3JtLm9uc3VibWl0O3RoaXMuZm9ybS5vbnN1Ym1pdD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7dHJ5e3JldHVybiBhLl92YWxpZGF0ZUZvcm0oYikmJihnPT09bXx8ZygpKX1jYXRjaChjKXt9fX0odGhpcyl9LG49ZnVuY3Rpb24oYSxiKXt2YXIgYztpZigwPGEubGVuZ3RoJiYoInJhZGlvIj09PWFbMF0udHlwZXx8ImNoZWNrYm94Ij09PWFbMF0udHlwZSkpZm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoYVtjXS5jaGVja2VkKXJldHVybiBhW2NdW2JdfWVsc2UgcmV0dXJuIGFbYl19O2UucHJvdG90eXBlLnNldE1lc3NhZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLm1lc3NhZ2VzW2FdPWI7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLnJlZ2lzdGVyQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXthJiYoInN0cmluZyI9PT10eXBlb2YgYSYmYiYmImZ1bmN0aW9uIj09PXR5cGVvZiBiKSYmKHRoaXMuaGFuZGxlcnNbYV09Yik7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLl9mb3JtQnlOYW1lT3JOb2RlPWZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiPT09dHlwZW9mIGE/YTpyLmZvcm1zW2FdfTtlLnByb3RvdHlwZS5fYWRkRmllbGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmZpZWxkc1tiXT17bmFtZTpiLGRpc3BsYXk6YS5kaXNwbGF5fHxiLHJ1bGVzOmEucnVsZXMsaWQ6bnVsbCx0eXBlOm51bGwsdmFsdWU6bnVsbCxjaGVja2VkOm51bGx9fTtlLnByb3RvdHlwZS5fdmFsaWRhdGVGb3JtPWZ1bmN0aW9uKGEpe3RoaXMuZXJyb3JzPVtdO2Zvcih2YXIgYiBpbiB0aGlzLmZpZWxkcylpZih0aGlzLmZpZWxkcy5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGM9dGhpcy5maWVsZHNbYl18fHt9LGQ9dGhpcy5mb3JtW2MubmFtZV07ZCYmZCE9PW0mJihjLmlkPW4oZCwiaWQiKSxjLnR5cGU9MDxkLmxlbmd0aD9kWzBdLnR5cGU6ZC50eXBlLGMudmFsdWU9bihkLCJ2YWx1ZSIpLGMuY2hlY2tlZD1uKGQsImNoZWNrZWQiKSx0aGlzLl92YWxpZGF0ZUZpZWxkKGMpKX0iZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuY2FsbGJhY2smJnRoaXMuY2FsbGJhY2sodGhpcy5lcnJvcnMsYSk7MDx0aGlzLmVycm9ycy5sZW5ndGgmJihhJiZhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTpldmVudCYmKGV2ZW50LnJldHVyblZhbHVlPSExKSk7cmV0dXJuITB9O2UucHJvdG90eXBlLl92YWxpZGF0ZUZpZWxkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLnJ1bGVzLnNwbGl0KCJ8IiksYz1hLnJ1bGVzLmluZGV4T2YoInJlcXVpcmVkIiksZD0hYS52YWx1ZXx8IiI9PT1hLnZhbHVlfHxhLnZhbHVlPT09bSxsPTAsZz1iLmxlbmd0aDtsPGc7bCsrKXt2YXIgZj1iW2xdLGU9bnVsbCxoPSExLGs9dS5leGVjKGYpO2lmKC0xIT09Y3x8LTEhPT1mLmluZGV4T2YoIiFjYWxsYmFja18iKXx8IWQpaWYoayYmKGY9a1sxXSxlPWtbMl0pLCIhIj09PWYuY2hhckF0KDApJiYoZj1mLnN1YnN0cmluZygxLGYubGVuZ3RoKSksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLl9ob29rc1tmXT90aGlzLl9ob29rc1tmXS5hcHBseSh0aGlzLFthLGVdKXx8KGg9ITApOiJjYWxsYmFja18iPT09Zi5zdWJzdHJpbmcoMCw5KSYmKGY9Zi5zdWJzdHJpbmcoOSxmLmxlbmd0aCksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmhhbmRsZXJzW2ZdJiYhMT09PXRoaXMuaGFuZGxlcnNbZl0uYXBwbHkodGhpcyxbYS52YWx1ZSxlXSkmJihoPSEwKSksaCl7Yj10aGlzLm1lc3NhZ2VzW2ZdfHxzW2ZdO2M9IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aXRoIHRoZSAiK2EuZGlzcGxheSsiIGZpZWxkLiI7YiYmKGM9Yi5yZXBsYWNlKCIlcyIsYS5kaXNwbGF5KSxlJiYoYz1jLnJlcGxhY2UoIiVzIix0aGlzLmZpZWxkc1tlXT90aGlzLmZpZWxkc1tlXS5kaXNwbGF5OmUpKSk7dGhpcy5lcnJvcnMucHVzaCh7aWQ6YS5pZCxuYW1lOmEubmFtZSxtZXNzYWdlOmMscnVsZTpmfSk7YnJlYWt9fX07ZS5wcm90b3R5cGUuX2hvb2tzPXtyZXF1aXJlZDpmdW5jdGlvbihhKXt2YXIgYj1hLnZhbHVlO3JldHVybiJjaGVja2JveCI9PT1hLnR5cGV8fCJyYWRpbyI9PT1hLnR5cGU/ITA9PT1hLmNoZWNrZWQ6bnVsbCE9PWImJiIiIT09Yn0sImRlZmF1bHQiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUhPT1ifSxtYXRjaGVzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5mb3JtW2JdO3JldHVybiBjP2EudmFsdWU9PT1jLnZhbHVlOiExfSx2YWxpZF9lbWFpbDpmdW5jdGlvbihhKXtyZXR1cm4gcC50ZXN0KGEudmFsdWUpfSx2YWxpZF9lbWFpbHM6ZnVuY3Rpb24oYSl7YT1hLnZhbHVlLnNwbGl0KCIsIik7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspaWYoIXAudGVzdChhW2JdKSlyZXR1cm4hMTtyZXR1cm4hMH0sbWluX2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg+PXBhcnNlSW50KGIsMTApOiExfSxtYXhfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aDw9cGFyc2VJbnQoYiwxMCk6ITF9LGV4YWN0X2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg9PT1wYXJzZUludChiLDEwKTohMX0sZ3JlYXRlcl90aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPnBhcnNlRmxvYXQoYik6ITF9LGxlc3NfdGhhbjpmdW5jdGlvbihhLGIpe3JldHVybiBrLnRlc3QoYS52YWx1ZSk/cGFyc2VGbG9hdChhLnZhbHVlKTxwYXJzZUZsb2F0KGIpOiExfSxhbHBoYTpmdW5jdGlvbihhKXtyZXR1cm4gdy50ZXN0KGEudmFsdWUpfSxhbHBoYV9udW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiB4LnRlc3QoYS52YWx1ZSl9LGFscGhhX2Rhc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHkudGVzdChhLnZhbHVlKX0sbnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4gaC50ZXN0KGEudmFsdWUpfSxpbnRlZ2VyOmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoYS52YWx1ZSl9LGRlY2ltYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGsudGVzdChhLnZhbHVlKX0saXNfbmF0dXJhbDpmdW5jdGlvbihhKXtyZXR1cm4gei50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsX25vX3plcm86ZnVuY3Rpb24oYSl7cmV0dXJuIEEudGVzdChhLnZhbHVlKX0sdmFsaWRfaXA6ZnVuY3Rpb24oYSl7cmV0dXJuIEIudGVzdChhLnZhbHVlKX0sdmFsaWRfYmFzZTY0OmZ1bmN0aW9uKGEpe3JldHVybiBDLnRlc3QoYS52YWx1ZSl9LHZhbGlkX3VybDpmdW5jdGlvbihhKXtyZXR1cm4gRS50ZXN0KGEudmFsdWUpfSx2YWxpZF9jcmVkaXRfY2FyZDpmdW5jdGlvbihhKXtpZighRC50ZXN0KGEudmFsdWUpKXJldHVybiExO3ZhciBiPTAsYz0wLGQ9ITE7YT1hLnZhbHVlLnJlcGxhY2UoL1xEL2csIiIpO2Zvcih2YXIgZT1hLmxlbmd0aC0xOzA8PWU7ZS0tKWM9YS5jaGFyQXQoZSksYz1wYXJzZUludChjLDEwKSxkJiY5PChjKj0yKSYmKGMtPTkpLGIrPWMsZD0hZDtyZXR1cm4gMD09PWIlMTB9LGlzX2ZpbGVfdHlwZTpmdW5jdGlvbihhLGIpe2lmKCJmaWxlIiE9PWEudHlwZSlyZXR1cm4hMDt2YXIgYz1hLnZhbHVlLnN1YnN0cihhLnZhbHVlLmxhc3RJbmRleE9mKCIuIikrMSksZD1iLnNwbGl0KCIsIiksZT0hMSxnPTAsZj1kLmxlbmd0aDtmb3IoZztnPGY7ZysrKWM9PWRbZ10mJihlPSEwKTtyZXR1cm4gZX19O3EuRm9ybVZhbGlkYXRvcj1lfSkod2luZG93LGRvY3VtZW50KTsKUEsHCGaMH8QzGAAAMxgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAABQAAAHZpZXcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHZpZXdcYWRtaW4vUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcYWRtaW5cYXJ0aWNsZXMuaHRtbDx1bCBpZD0iYXJ0aWNsZS1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj4NCiAgICA8bGk+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5re75Yqg5paH56ugPC9hPg0KICAgIDwvbGk+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj48aDQgY2xhc3M9ImlubGluZS1ibG9jayB0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0YXJnZXQ9Il9ibGFuayI+e3suVGl0bGV9fTwvYT48L2g0Pnt7aWYgbmUgLlN0YXR1cyAicHVibGlzaCJ9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGJsIHN0YXR1cyI+6I2J56i/PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9InNsdWciPnt7LlNsdWd9fTwvc3Bhbj57e2lmIGVxIC5Jc0NvbW1lbnQgZmFsc2V9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iaXMtY29tbWVudCI+PGkgY2xhc3M9ImZhLWNvbW1lbnRzIGZhIj48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPGEgY2xhc3M9ImVkaXQgbGJsIGxibC1ncmVlbiIgaHJlZj0iL2FkbWluL2FydGljbGUve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+57yW6L6RPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIGxibCBsYmwtcmVkIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7liKDpmaQ8L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHVsIGlkPSJhcnRpY2xlLXBhZ2VyIiBjbGFzcz0icGFnZXIgY29udGFpbmVyOTYwIj57e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2FydGljbGVzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoIi5kZWwiKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgIGlmKGNvbmZpcm0oIuWIoOmZpOaWh+eroOWwhuS9v+ebuOWFs+WGheWuueWkseaViO+8geehruiupO+8nyIpKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICJ1cmwiOiIvYWRtaW4vYXJ0aWNsZS8iK2lkKyIvIiwNCiAgICAgICAgICAgICAgICAidHlwZSI6ImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgInN1Y2Nlc3MiOmZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5Yig6ZmkIik7DQogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCJZ0chJuBgAAbgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAADwAAAHZpZXdcYWRtaW5cY21kL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGFkbWluXGNtZFxiYWNrdXAuaHRtbDxoZWFkZXIgY2xhc3M9ImNtZC1oZWFkZXIgY2xlYXIiPg0KICAgIDxoMSBjbGFzcz0iY21kLXRpdGxlIGxlZnQiPuWkh+S7veaVsOaNrjwvaDE+DQogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIGxlZnQiIGlkPSJiYWNrdXAtYnRuIj7lpIfku708L2J1dHRvbj4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9ImJhY2t1cC1saXN0Ij57e3JhbmdlIC5GaWxlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlVGltZSAuTW9kVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj57ey5OYW1lfX0gPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii9jbWQvYmFja3VwL2ZpbGU/ZmlsZT17ey5OYW1lfX0iPjxpIGNsYXNzPSJmYSBmYS1leHRlcm5hbC1saW5rIj48L2k+PC9hPjwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InNpemUiPnt7RmlsZVNpemUgLlNpemV9fTwvc3Bhbj4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyIgcmVsPSJ7ey5OYW1lfX0iPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUtbyI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYmFja3VwLWJ0bicpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgdHlwZTogInBvc3QiLA0KICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgJCgnLmNtZC1saXN0JykucHJlcGVuZCgnPGxpIGNsYXNzPSJiYWNrdXAtbG9hZGluZyI+5aSH5Lu95LitLi48L2xpPicpOw0KICAgICAgICAgICAgICAgICAgICAkKCcjYmFja3VwLWJ0bicpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmJhY2t1cC1sb2FkaW5nJykucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuY21kLWxpc3QnKS5wcmVwZW5kKCc8bGkgY2xhc3M9ImJhY2t1cC1yZXN1bHQiPuWImuWImuWkh+S7veWIsCAnICsganNvbi5maWxlICsgJzwvbGk+Jyk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5zaG93KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuZGVsJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICB1cmw6ICIvY21kL2JhY2t1cC8/ZmlsZT0iICsgJCh0aGlzKS5hdHRyKCJyZWwiKSwNCiAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAkKHRoYXQpLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwi3m+bJRwcAAEcHAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXGNvbW1lbnRzLmh0bWw8ZGl2IGlkPSJjb21tZW50LWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAiPnt7cmFuZ2UgLkNvbW1lbnRzfX0NCiAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSJ7ey5BdXRob3J9fSIvPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtZW1haWwiPnt7LkVtYWlsfX08L3NwYW4+e3tpZiAuR2V0Q29udGVudH19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5Ae3suR2V0Q29udGVudC5UaXRsZX19PC9zcGFuPnt7ZWxzZX19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5A5peg5pWIPC9zcGFuPnt7ZW5kfX17e2lmIG5lIC5TdGF0dXMgImFwcHJvdmVkIn19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtY2hlY2siIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWuoeaguCI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45LitPC9hPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Zue5aSNIj48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtZGVsIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaQiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pnt7ZW5kfX0NCiAgICA8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGFjdGlvbj0iL2FkbWluL2NvbW1lbnRzLyIgY2xhc3M9ImZvcm0gY2xlYXIgbGVmdCIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQgbGVmdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiIGlkPSJjb21tZW50LXN1Ym1pdCI+5Zue5aSN6K+E6K66PC9idXR0b24+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJjb21tZW50LWNsb3NlIj7lhbPpl63lm57lpI08L2J1dHRvbj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIGlkPSJjb21tZW50LXBhcmVudCIgbmFtZT0icGlkIi8+DQogICAgPC9mb3JtPg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6K+E6K665bCG5L2/55u45YWz5YaF5a655peg5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5Yig6Zmk5aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtY2hlY2snKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5a6h5qC45ZCO5q2k5L2c6ICF5bCG5LiN5YaN5qCH6K6w5a6h5qC4ISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAicHV0IiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlrqHmoLjlpLHotKUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuYy1yZXBseScpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC0nK2lkKS5hcHBlbmQoJCgnI2NvbW1lbnQtZm9ybScpLmRldGFjaCgpLnNob3coKSk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suWbnuWkjSIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9jb21tZW50cy8iOw0KICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgYWxlcnQoIuWbnuWkjeWksei0pSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtY2xvc2UnKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuaGlkZSgpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIQJgI7+0PAADtDwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAdmlld1xhZG1pblxlZGl0X2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiIHZhbHVlPSJ7ey5BcnRpY2xlLlRpdGxlfX0iLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij57e0h0bWwgLkFydGljbGUuVGV4dH19PC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiIHZhbHVlPSJ7ey5BcnRpY2xlLlNsdWd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuagh+etvjwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0idGFnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWciIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTmoIfnrb4iIHZhbHVlPSJ7ey5BcnRpY2xlLlRhZ1N0cmluZ319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuQXJ0aWNsZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLkFydGljbGUuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLkFydGljbGUuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCEuc6fFtDQAAbQ0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcYWRtaW5cZWRpdF9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIiB2YWx1ZT0ie3suUGFnZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5QYWdlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suUGFnZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCJ7e2lmIGVxIC5QYWdlLlN0YXR1cyAicHVibGlzaCJ9fSBzZWxlY3RlZHt7ZW5kfX0+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQie3tpZiBlcSAuUGFnZS5TdGF0dXMgImRyYWZ0In19IHNlbGVjdGVke3tlbmR9fT7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0NvbW1lbnQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzTGlua2VkIGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuW3suS/neWtmO+8jOWOu+afpeeci++8n+i/mOaYr+e7p+e7ree8lui+kSIpKSB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9wYWdlcy8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcItngyMuMNAADjDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxmaWxlcy5odG1sPHVsIGlkPSJmaWxlcy1saXN0IiBjbGFzcz0iYWRtaW4gY29udGFpbmVyOTYwIHBhZ2VyIj4NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlcy1idG4tbGkiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgIDwvbGk+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaSBjbGFzcz0iZmlsZSIgaWQ9ImZpbGUte3suSWR9fSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ1cGxvYWQtdGltZSI+e3tEYXRlSW50NjQgLlVwbG9hZFRpbWUgIk1NLkREIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iL3t7LlVybH19IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Ii97ey5Vcmx9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmstc3F1YXJlIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIGZhZGUtb3V0IiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaTpmYTku7YiPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQogICAge3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9maWxlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIGluaXRVcGxvYWQoIiNhdHRhY2gtc2hvdyIpOw0KICAgICAgICAkKCIuZGVsIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWIoOmZpOmZhOS7tuebuOWFs+mTvuaOpeS8muWkseaViCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgInVybCI6ICIvYWRtaW4vZmlsZXMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgInN1Y2Nlc3MiOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNmaWxlLScraWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIYsWb+uwGAADsBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAdmlld1xhZG1pblxob21lLmh0bWw8ZGl2IGNsYXNzPSJhZG1pbiBjb250YWluZXIgY2xlYXIiIGlkPSJkYXNoYm9hcmQiPg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS01IGxlZnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ3ZWxjb21lIj4NCiAgICAgICAgICAgIDxoND5XZWxjb21lPC9oND4NCiAgICAgICAgICAgIDxwPuasoui/juWbnuadpe+8jCA8c3Ryb25nPnt7LlVzZXIuTmlja319PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0icXVpY2stbGluayI+DQogICAgICAgICAgICA8aDQ+5b+r6YCf6ZO+5o6lPC9oND4NCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mkrDlhpnmlofnq6A8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLyI+5p+l55yL5ZKM5a6h5qC46K+E6K66PC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyI+5L+u5pS56YWN572uPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wcm9maWxlLyI+5pu05paw5Liq5Lq66LWE5paZPC9hPjwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtMiBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHkiPg0KICAgICAgICAgICAgPGg0PuacgOaWsOa0u+WKqDwvaDQ+DQogICAgICAgICAgICA8cD7lhoXlrrnlvIDlj5HkuK0uLi48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS00IHJpZ2h0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHMiPg0KICAgICAgICAgICAgPGg0PuaVsOaNrue7n+iuoTwvaDQ+DQogICAgICAgICAgICA8cD7lt7Lnu4/lj5HluIPmlofnq6AgPHNwYW4gY2xhc3M9ImxibCBsYmwtcmVkIj57ey5TdGF0aXMuQXJ0aWNsZXN9fTwvc3Bhbj4g56+H77yMDQogICAgICAgICAgICDpobXpnaIgPHNwYW4gY2xhc3M9ImxibCBsYmwtcmVkIj57ey5TdGF0aXMuUGFnZXN9fTwvc3Bhbj4g5Liq77yMIDxici8+DQogICAgICAgICAgICDmlLbliLDor4TorrogPHNwYW4gY2xhc3M9ImxibCBsYmwtYmx1ZSI+e3suU3RhdGlzLkNvbW1lbnRzfX08L3NwYW4+IOasoe+8jA0KICAgICAgICAgICAg5LiK5LygIDxzcGFuIGNsYXNzPSJsYmwgbGJsLWdyZWVuIj57ey5TdGF0aXMuRmlsZXN9fTwvc3Bhbj4g5Liq6ZmE5Lu2PC9wPg0KICAgICAgICAgICAgPHA+5b2T5YmN56iL5bqP54mI5pys77yaPHN0cm9uZz57ey5TdGF0aXMuVmVyc2lvbn19PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ib2ZmaWNlIj4NCiAgICAgICAgICAgIDxoND7lrpjmlrnmtojmga88L2g0Pg0KICAgICAgICAgICAgPHA+6L+Y5rKh5pyJ5raI5oGvPC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCjwvZGl2PlBLBwghWR50LwYAAC8GAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXGxvZ2luLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+55m75b2VIC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+DQogICAgICAgICNsb2dpbi1mb3Jtew0KICAgICAgICAgICAgd2lkdGg6IDI4MHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG87DQogICAgICAgIH0NCiAgICAgICAgI2xvZ2luLWZvcm0gaDF7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4Ow0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGZvcm0gaWQ9ImxvZ2luLWZvcm0iIGNsYXNzPSJmb3JtIGZvcm0tdmVydGljYWwiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0IiBuYW1lPSJsb2dpbi1mb3JtIj4NCiAgICA8aDE+55m75b2VIC0gRnhoLkdvPC9oMT4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nlKjmiLflkI08L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InVzZXIiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idXNlciIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0icGFzc3dvcmQiPueUqOaIt+WvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IiBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InBhc3N3b3JkIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJwYXNzd29yZC1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPueZuyDlvZU8L2J1dHRvbj4NCiAgICA8c3BhbiBjbGFzcz0idGlwIj7pu5jorqTorrDkvY/nmbvpmYYz5aSpPC9zcGFuPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jZG4uc3RhdGljZmlsZS5vcmcvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS5mb3JtLzMuNDYvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi92YWxpZGF0ZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJsb2dpbi1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJ1c2VyIiwicnVsZXMiOiJhbHBoYV9udW1lcmljfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6InBhc3N3b3JkIiwicnVsZXMiOiJyZXF1aXJlZHxtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjbG9naW4tZm9ybScpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIueZu+W9lemUmeivr++8jOivt+ajgOafpeeUqOaIt+aIluWvhueggSIpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwjW4HhikAgAAJAIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXHBhZ2VzLmh0bWw8dWwgaWQ9ImFydGljbGUtbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+DQogICAgPGxpPg0KICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIiBocmVmPSIvYWRtaW4vcGFnZS93cml0ZS8iPua3u+WKoOmhtemdojwvYT4NCiAgICA8L2xpPnt7cmFuZ2UgLlBhZ2VzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+PGg0IGNsYXNzPSJpbmxpbmUtYmxvY2sgdGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LlRpdGxlfX08L2E+PC9oND57e2lmIG5lIC5TdGF0dXMgInB1Ymxpc2gifX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxibCBzdGF0dXMiPuiNieeovzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJzbHVnIj57ey5TbHVnfX08L3NwYW4+e3tpZiBlcSAuSXNDb21tZW50IGZhbHNlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImlzLWNvbW1lbnQiPjxpIGNsYXNzPSJmYS1jb21tZW50cyBmYSI+PC9pPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvc3Bhbj57e2VuZH19DQogICAgICAgIDxhIGNsYXNzPSJlZGl0IGxibCBsYmwtZ3JlZW4iIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPue8lui+kTwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBsYmwgbGJsLXJlZCIgaHJlZj0iL2FkbWluL3BhZ2Uve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+5Yig6ZmkPC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9wYWdlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKCIuZGVsIikub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBpZihjb25maXJtKCLliKDpmaTpobXpnaLlsIbkvb/nm7jlhbPlhoXlrrnlpLHmlYjvvIHnoa7orqTvvJ8iKSl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAidXJsIjoiL2FkbWluL3BhZ2UvIitpZCsiLyIsDQogICAgICAgICAgICAgICAgInR5cGUiOiJkZWxldGUiLA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suWIoOmZpCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0NCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhr5NshXAYAAFwGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXHBhc3N3b3JkLmh0bWw8Zm9ybSBpZD0icGFzc3dvcmQiIGNsYXNzPSJmb3JtIGZvcm0tYWxpZ24gY2xlYXIiIGFjdGlvbj0iIyIgbmFtZT0icGFzc3dvcmQtZm9ybSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJvbGQiPuaXp+WvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ib2xkIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0ib2xkIiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6aqM6K+B5pen5a+G56CBPC9zcGFuPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJvbGQtaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ibmV3Ij7mlrDlr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im5ldyIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im5ldyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5ldy1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJjb25maXJtIj7noa7orqTlr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9ImNvbmZpcm0iIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJjb25maXJtIiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iY29uZmlybS1pbnZhbGlkIj7noa7orqTlr4bnoIHkuI3ljLnphY08L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOS/ruaUuTwvYnV0dG9uPg0KICAgIDwvcD4NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigicGFzc3dvcmQtZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoib2xkIiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJuZXciLCJydWxlcyI6Im1pbl9sZW5ndGhbMl18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6ImNvbmZpcm0iLCJydWxlcyI6InJlcXVpcmVkfG1hdGNoZXNbbmV3XSJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Bhc3N3b3JkJykuYWpheFN1Ym1pdChmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZighanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhucSeBTwcAAE8HAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGFkbWluXHBsdWdpbi5odG1sPHVsIGlkPSJwbHVnaW4tbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+e3tyYW5nZSAuUGx1Z2luc319DQogICAgPGxpIGNsYXNzPSJjbGVhciI+e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCBsYmwgYWN0aXZlIGxibC1ncmVlbiI+Jm5ic3A7PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUgbGVmdCI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0idmVyc2lvbiBsZWZ0Ij57ey5WZXJzaW9ufX08L3NwYW4+e3tpZiAuSGFzU2V0dGluZ319DQogICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9wbHVnaW5zL3t7LktleX19LyI+6YCJ6aG5PC9hPnt7ZW5kfX17e2lmIC5Jc0FjdGl2ZX19DQogICAgICAgIDxhIGNsYXNzPSJkZWFjdGl2YXRlIGxibCBsYmwtcmVkIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LktleX19Ij7lsIHljbA8L2E+e3tlbHNlfX0NCiAgICAgICAgPGEgY2xhc3M9ImFjdGl2YXRlIGxibCBsYmwtYmx1ZSByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5r+A5rS7PC9hPnt7ZW5kfX0NCiAgICAgICAgPHAgY2xhc3M9ImRlc2MgbGVmdCI+e3suRGVzY319PC9wPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoIi5kZWFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImRlYWN0aXZhdGUiLA0KICAgICAgICAgICAgICAgICJwbHVnaW4iOiBwDQogICAgICAgICAgICB9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy5vZmYoImNsaWNrIikudGV4dCgi5LiL5qyh5r+A5rS7Iik7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWwgeWNsOWksei0pSIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0pOw0KICAgICAgICAkKCIuYWN0aXZhdGUiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgdmFyIHAgPSAkdGhpcy5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQucG9zdCgiIiwgew0KICAgICAgICAgICAgICAgICJhY3Rpb24iOiAiYWN0aXZhdGUiLA0KICAgICAgICAgICAgICAgICJwbHVnaW4iOiBwDQogICAgICAgICAgICB9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy5vZmYoImNsaWNrIikudGV4dCgi5LiL5qyh5bCB5Y2wIik7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIua/gOa0u+Wksei0pSIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIT3BZoWIGAABiBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAdmlld1xhZG1pblxwbHVnaW5fc2V0dGluZy5odG1sPGZvcm0gaWQ9InBsdWdpbi1zZXR0aW5nLWZvcm0iIGNsYXNzPSJmb3JtIGNvbnRhaW5lcjk2MCBhZG1pbiIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIHt7SHRtbCAuRm9ybX19DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgICAgICQoJyNwbHVnaW4tc2V0dGluZy1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiOiLkv53lrZjlpLHotKUiKTsNCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCDQrc9U4AQAAOAEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5ccHJvZmlsZS5odG1sPGZvcm0gaWQ9InByb2ZpbGUiIGNsYXNzPSJhZG1pbiBmb3JtIGNsZWFyIGZvcm0tYWxpZ24iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0IiBuYW1lPSJwcm9maWxlLWZvcm0iPg0KICAgIDxkaXYgY2xhc3M9ImF2YXRhciBncmlkLTEtNCBsZWZ0IHRleHQtY2VudGVyIj4NCiAgICAgICAgPGltZyBzcmM9Int7LlVzZXIuQXZhdGFyfX0iIGFsdD0ie3suVXNlci5OaWNrfX0iIGNsYXNzPSJmaWVsZCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGZpZWxkIGlubGluZS1ibG9jayI+5aS05YOP55SxIDxhIGhyZWY9Imh0dHA6Ly9ncmF2YXRhci5jb20vIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJuby1mb2xsb3ciPkdyYXZhdGFyPC9hPiDmj5Dkvps8L3NwYW4+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1yZWQgaW5saW5lLWJsb2NrIiBocmVmPSIvYWRtaW4vcGFzc3dvcmQvIj7kv67mlLnlr4bnoIE8L2E+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJpbmZvIHJpZ2h0IGdyaWQtMy00Ij4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InVzZXIiPueZu+W9leWQjTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVzZXIiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHZhbHVlPSJ7ey5Vc2VyLk5hbWV9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7nmbvlvZXnmoTnlKjmiLflkI08L3NwYW4+PGJyLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1c2VyLWludmFsaWQiPueUqOaIt+WQjeS4uuWtl+avjSvmlbDlrZfvvIzplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJuaWNrIj7mmLXnp7A8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJuaWNrIiB0eXBlPSJ0ZXh0IiBuYW1lPSJuaWNrIiB2YWx1ZT0ie3suVXNlci5OaWNrfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+5pi+56S65Zyo5YmN5Y+w55qE56ew5ZG8PC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ibmljay1pbnZhbGlkIj7mmLXnp7Dplb/luqYyLTIw5Liq5a2X56ymPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJlbWFpbCI+6YKu566xPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iZW1haWwiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgdmFsdWU9Int7LlVzZXIuRW1haWx9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7ogZTns7vpgq7nrrHvvIzljYHliIbph43opoHvvIE8L3NwYW4+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJlbWFpbC1pbnZhbGlkIj7pgq7nrrHmoLzlvI/plJnor688L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InVybCI+572R5Z2APC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0idXJsIiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgdmFsdWU9Int7LlVzZXIuVXJsfX0iIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVybC1pbnZhbGlkIj7nvZHlnYDmoLzlvI/plJnor688L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IGJpbyIgbmFtZT0iYmlvIiBpZD0iYmlvIj57ey5Vc2VyLkJpb319PC90ZXh0YXJlYT4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOS/ruaUuTwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInByb2ZpbGUtZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoidXNlciIsInJ1bGVzIjoiYWxwaGFfbnVtZXJpY3xtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJuaWNrIiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJlbWFpbCIsInJ1bGVzIjoidmFsaWRfZW1haWwifSwNCiAgICAgICAgICAgIHsibmFtZSI6InVybCIsInJ1bGVzIjoidmFsaWRfdXJsIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjcHJvZmlsZScpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIH4+hXwIMAAACDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxzZXR0aW5nLmh0bWw8dWwgaWQ9InNldHRpbmctbmF2IiBjbGFzcz0iY29udGFpbmVyOTYwIHRleHQtY2VudGVyIj4NCiAgICA8bGk+PGEgaHJlZj0iI2dlbmVyYWwiPuWfuuacrDwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSIjY3VzdG9tIj7oh6rlrprkuYk8L2E+PC9saT4NCjwvdWw+DQo8ZGl2IGlkPSJzZXR0aW5nLXBhbmVscyIgY2xhc3M9ImNvbnRhaW5lcjk2MCI+DQogICAgPGZvcm0gaWQ9InNldHRpbmctZm9ybSIgY2xhc3M9InNldHRpbmctZm9ybSBmb3JtIGZvcm0tYWxpZ24gc2V0dGluZy1wYW5lbCIgYWN0aW9uPSIvYWRtaW4vc2V0dGluZy8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdXJsIj7nq5nngrnlnLDlnYA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXVybCIgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJzaXRlX3VybCIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3VybGB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGl0bGUiPuermeeCueS4u+agh+mimDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdGl0bGUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfdGl0bGUiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtc3ViLXRpdGxlIj7nq5nngrnlia/moIfpopg8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXN1Yi10aXRsZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9zdWJfdGl0bGUiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9zdWJfdGl0bGVgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLWtleXdvcmRzIj5NZXRh5YWz6ZSu5a2XPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1rZXl3b3JkcyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9rZXl3b3JkcyIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9rZXl3b3Jkc2B9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtZGVzYyI+TWV0YeermeeCueS7i+e7jTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtZGVzYyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9kZXNjcmlwdGlvbiIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImFydGljbGUtc2l6ZSI+5Y2V6aG15paH56ug5YiX6KGo5pWwPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iYXJ0aWNsZS1zaXplIiBjbGFzcz0iaXB0IiB0eXBlPSJudW1iZXIiIG5hbWU9ImFydGljbGVfc2l6ZSIgdmFsdWU9Int7U2V0dGluZyBgYXJ0aWNsZV9zaXplYH19IiBtYXg9IjEwIiBtaW49IjMiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXRoZW1lIj7kuLvpopjnm67lvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXRoZW1lIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3RoZW1lIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3RoZW1lYH19Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kuLvpopjljbPmjIflkJHnmoTmqKHmnb/nm67lvZXvvIzlhbfkvZPlhoXlrrnor7flj4LogIMgZGVmYXVsdCDnm67lvZXvvIjljbMgZGVmYXVsdCDkuLvpopjvvIk8L3NwYW4+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzaXRlX3RoZW1lX2RlZiIgdmFsdWU9ImRlZmF1bHQiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJnby1tYXJrZG93biI+R2/muLLmn5NNYXJrZG93bjwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImdvLW1hcmtkb3duIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJlbmFibGVfZ29fbWFya2Rvd24iIHZhbHVlPSJ7e1NldHRpbmcgYGVuYWJsZV9nb19tYXJrZG93bmB9fSIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBibG9jayI+6buY6K6k5YWz6Zet77yM5L2/55So5YmN56uvbWFya2VkLmpz5riy5p+T77yM5aGrdHJ1ZeaXtuW8gOWQrzwvc3Bhbj4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImVuYWJsZV9nb19tYXJrZG93bl9kZWYiIHZhbHVlPSJmYWxzZSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwPg0KICAgICAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9mb3JtPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWN1c3RvbS1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nL2N1c3RvbS8iIG1ldGhvZD0icG9zdCI+e3tyYW5nZSAkaywkdiA6PSAuQ3VzdG9tfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHZhbHVlPSJ7eyRrfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7JHZ9fSIvPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiPua3u+WKoOS4gOmhuTwvYT4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS9v+eUqOWHveaVsOiHquWumuS5iemFjee9ru+8jOmcgOimgeWKoOWJjee8gCJjXyLvvIzlpoJHZXRTZXR0aW5nKCJjX2tleSIpPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImN1c3RvbS1pdGVtIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgcGxhY2Vob2xkZXI9IuWtl+auteWQjSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IuWtl+auteWAvCIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9zY3JpcHQ+DQogICAgPC9mb3JtPg0KICAgIDxkaXYgY2xhc3M9InNldHRpbmctcGFuZWwiPjMzMzwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeXRvb2xzLzEuMi43L2pxdWVyeS50b29scy5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI3NldHRpbmctbmF2JykudGFicygiLnNldHRpbmctcGFuZWwiKTsNCiAgICAgICAgJCgnLnNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiIDoganNvbi5tc2cpOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmFkZCcpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcjc2V0dGluZy1jdXN0b20tZm9ybScpLnByZXBlbmQoJCgiI2N1c3RvbS1pdGVtIikuaHRtbCgpKTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgaWYoY29uZmlybSgi6KaB5Yig6Zmk6L+Z6aG577yfIikpew0KICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwj1miLK5xEAAOcRAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAB2aWV3XGFkbWluXHdyaXRlX2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnmlofnq6DlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCiAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgPC9wPg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9hcnRpY2xlcy8iOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwi+ynR8IQwAACEMAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGFkbWluXHdyaXRlX3BhZ2UuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLpobXpnaLmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnpobXpnaLlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpobXpnaLnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCI+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQiPuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7nva7pobbpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImxpbmsiIGlkPSJpcy1saW5rIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vcGFnZXMvIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIcltVaXwMAAB8DAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAdmlld1xhZG1pbi5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+e3suVGl0bGV9fSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9hZG1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvdmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhciI+DQogICAgICAgIDxoMyBjbGFzcz0ibG9nbyBsZWZ0Ij5GeGguR28gLSA8c3Bhbj57ey5UaXRsZX19PC9zcGFuPjwvaDM+DQogICAgICAgIDxkaXYgY2xhc3M9Im5hdiBsZWZ0IHJlbGF0aXZlIj4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJkYXNoYm9hcmQgbGVmdCIgaHJlZj0iL2FkbWluLyI+PGkgY2xhc3M9ImZhIGZhLWRhc2hib2FyZCI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJhcnRpY2xlIGxlZnQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlcy8iIHRpdGxlPSLmlofnq6AiPjxpIGNsYXNzPSJmYSBmYS1jb3B5Ij48L2k+PC9hPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJwYWdlcyBsZWZ0IiBocmVmPSIvYWRtaW4vcGFnZXMvIiB0aXRsZT0i54us56uL6aG16Z2iIj48aSBjbGFzcz0iZmEgZmEtcGFzdGUiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iY29tbWVudHMgbGVmdCIgaHJlZj0iL2FkbWluL2NvbW1lbnRzLyIgdGl0bGU9IuivhOiuuiI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImZpbGVzIGxlZnQiIGhyZWY9Ii9hZG1pbi9maWxlcy8iIHRpdGxlPSLlqpLkvZPmlofku7YiPjxpIGNsYXNzPSJmYSBmYS1pbmJveCI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJwbHVnaW5zIGxlZnQiIGhyZWY9Ii9hZG1pbi9wbHVnaW5zLyIgdGl0bGU9IuaPkuS7tiI+PGkgY2xhc3M9ImZhIGZhLWdlYXJzIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9InNldHRpbmcgbGVmdCIgaHJlZj0iL2FkbWluL3NldHRpbmcvIiB0aXRsZT0i6K6+572uIj48aSBjbGFzcz0iZmEgZmEtY29nIj48L2k+PC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGEgY2xhc3M9Im91dCBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2xvZ291dC8iIHRpdGxlPSLpgIDlh7oiPjxpIGNsYXNzPSJmYSBmYS1wb3dlci1vZmYgZmEtbGciPjwvaT48L2E+DQogICAgICAgIDxhIGNsYXNzPSJwcm9maWxlIG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvYWRtaW4vcHJvZmlsZS8iIHRpdGxlPSLmiJEiPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0iZnJvbnQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii8iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0i5p+l55yL572R56uZIj48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluayI+PC9pPjwvYT4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0Ke0BDb250ZW50fQ0KPGRpdiBpZD0iZm9vdGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhciI+DQogICAgICAgPHAgY2xhc3M9ImxpbmtzIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgPGEgY2xhc3M9InN0YXQiIGhyZWY9IiMiPue7n+iuoTwvYT4NCiAgICAgICAgICAgPGEgY2xhc3M9ImJhY2t1cCIgaHJlZj0iL2NtZC9iYWNrdXAvIj7lpIfku708L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJlcnIiIGhyZWY9IiMiPuaXpeW/lzwvYT4NCiAgICAgICAgICAgPGEgY2xhc3M9InN5cyIgaHJlZj0iIyI+57O757ufPC9hPg0KICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImNwIHRleHQtY2VudGVyIj5Qcm91ZGx5IHB1Ymxpc2hlZCB3aXRoIEZ4aC5Hby48L3A+DQogICAgPC9kaXY+DQo8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD5QSwcImWww9qwIAACsCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xjbWQubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPuWkh+S7vSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jbWQuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keSBjbGFzcz0iY21kIj4NCntAQ29udGVudH0NCjxwIGNsYXNzPSJiYWNrIj48YSBocmVmPSJqYXZhc2NyaXB0Omhpc3RvcnkuYmFjaygpIj5CYWNrPC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcI1NYh2soBAADKAQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAdmlld1xkZWZhdWx0L1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGRlZmF1bHRcYXJ0aWNsZS5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LkFydGljbGUuU3RhdHVzfX0iIGlkPSJhcnRpY2xlLXt7LkFydGljbGUuSWR9fSI+e3t3aXRoIC5BcnRpY2xlfX0NCiAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWcgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdGFncyI+PC9pPnt7LlRhZ1N0cmluZ319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2aWV3cyBpbmxpbmUtYmxvY2sgcmlnaHQiPumYheivuyZuYnNwOyZuYnNwOzxzcGFuPnt7LkhpdHN9fTwvc3Bhbj4mbmJzcDsmbmJzcDvmrKE8L3NwYW4+DQogICAgICAgIDwvcD57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCMC4NIi3AwAAtwMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcZGVmYXVsdFxjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50Ij4NCiAgICA8ZGl2IGlkPSJjb21tZW50LWxpc3QiPnt7cmFuZ2UgLkNvbW1lbnRzfX17e2lmIC5Jc1ZhbGlkfX0NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciIgaWQ9ImNvbW1lbnQte3suSWR9fSI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9Int7LkF1dGhvcn19Ii8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSBjLWF1dGhvcnt7aWYgLklzQWRtaW59fSBhZG1pbnt7ZW5kfX0iIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+e3suQXV0aG9yfX17e2lmIC5Jc0FkbWlufX0mbmJzcDsmbmJzcDsoYWRtaW4pe3tlbmR9fTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9Int7LklkfX0iPjxpIGNsYXNzPSJmYSBmYS1xdW90ZS1yaWdodCI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+e3tlbmR9fXt7ZW5kfX0NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LXNob3ciIGNsYXNzPSJ0ZXh0LWNlbnRlciI+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGVuYWJsZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+e3tlbHNlfX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1yZWQiPuacrOaWh+WFs+mXreS6huivhOiuujwvYnV0dG9uPnt7ZW5kfX0NCiAgICA8L2Rpdj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgY2xhc3M9ImhpZGUgY2xlYXIgdGV4dC1jZW50ZXIgZm9ybSIgYWN0aW9uPSIvY29tbWVudC97ey5Db250ZW50LklkfX0vIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8gbGVmdCB0ZXh0LXJpZ2h0Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIGMtYXZhdGFyLWZpZWxkIj4NCiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBudWxsIiBzcmM9Ii9zdGF0aWMvaW1nL3NpdGUucG5nIiBhbHQ9IiIgaWQ9ImNvbW1lbnQtYXZhdGFyIi8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5vdC1tZSBibG9jayIgaHJlZj0iIyI+5LiN5piv5oiRPzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mby1maWVsZHMgaGlkZSI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLnp7DlkbwiIGlkPSJjb21tZW50LWF1dGhvciIvPjwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6YKu566xIiBpZD0iY29tbWVudC1lbWFpbCIvPiA8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgcGxhY2Vob2xkZXI9Iue9keWdgCIgaWQ9ImNvbW1lbnQtdXJsIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY29tbWVudC1wYXJlbnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIG5hbWU9InBpZCIvPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWNvbnRlbnQgdGV4dC1sZWZ0IHJpZ2h0Ij4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuWPkeihqOivhOiuujwvYnV0dG9uPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGJsIGxibC1ncmVlbiBjYW5jZWwtcmVwbHkiIHR5cGU9ImJ1dHRvbiI+5Y+W5raI5Zue5aSNPC9idXR0b24+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZm9ybT57e2VuZH19DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY29tbWVudC10cGwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0iIiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3IiIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT5Ob3c8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9IiI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jaGVjayI+PGkgY2xhc3M9ImZh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ICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL3N0eWxlLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19IC0gUlNTIDIuMCIgaHJlZj0iL3Jzcy54bWwiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIi8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8bmF2IGlkPSJuYXYiIGNsYXNzPSJjbGVhciB0ZXh0LWNlbnRlciI+DQogICAgPHVsPg0KICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iLyI+5paH56ugPC9hPjwvbGk+DQogICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvYWJvdXQtbWUuaHRtbCI+5YWz5LqOPC9hPjwvbGk+DQogICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvZnJpZW5kcy5odG1sIj7lpb3lj4s8L2E+PC9saT4NCiAgICA8L3VsPg0KPC9uYXY+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8cD4NCiAgICAgICAgPGEgY2xhc3M9IndlaWJvIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX3dlaWJvYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIj48L2k+V2VpYm88L2E+DQogICAgICAgIDxhIGNsYXNzPSJnaXQiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZ2l0aHViYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWdpdGh1YiI+PC9pPkdpdEh1YjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImVtYWlsIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX2VtYWlsYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlIj48L2k+RW1haWw8L2E+DQogICAgICAgIDxhIGNsYXNzPSJyc3MiIGhyZWY9Ii9yc3MueG1sIiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXJzcyI+PC9pPlJTUzwvYT57e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KICAgIDwvcD4NCiAgICA8c3Bhbj5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuIFByb3VkbHkgcHVibGlzaGVkIHdpdGggRnhoLkdvLjwvc3Bhbj4NCiAgICA8YSBpZD0iZ28tdG9wIiBocmVmPSIjIiBjbGFzcz0ibGJsIGhpZGUg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AAAAAAAAABYAAAB2aWV3XGxpbmdcY29tbWVudC5odG1sPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9InJlbGF0aXZlIj4NCiAgICA8aDQgaWQ9ImNvbW1lbnQtdGl0bGUiPuaWh+eroOivhOiuujwvaDQ+DQogICAgPGRpdiBjbGFzcz0ibWV0YSBhYnNvbHV0ZSB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLXJlZCBjb21tZW50cyI+PGEgaHJlZj0ie3suTGlua319I2NvbW1lbnQiPnt7LkNvbnRlbnQuQ29tbWVudE51bX19PC9hPjwvcD4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LWxpc3QiPnt7cmFuZ2UgLkNvbW1lbnRzfX17e2lmIC5Jc1ZhbGlkfX0NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciIgaWQ9ImNvbW1lbnQte3suSWR9fSI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9Int7LkF1dGhvcn19Ii8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24iPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSBjbGVhciI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IGxibCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19Ij7lm57lpI08L2E+DQogICAgICAgICAgICAgICAgICAgIDxwPjxhIGNsYXNzPSJjLWF1dGhvcnt7aWYgLklzQWRtaW59fSBhZG1pbnt7ZW5kfX0iIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+e3suQXV0aG9yfX17e2lmIC5Jc0FkbWlufX0mbmJzcDsmbmJzcDsoYWRtaW4pe3tlbmR9fTwvYT48L3A+DQogICAgICAgICAgICAgICAgICAgIDxwPjxzcGFuIGNsYXNzPSJjLXRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTSDmnIggREQg5pelIEhIIOaXtiBtbSDliIYifX08L3NwYW4+PC9wPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj57e2VuZH19e3tlbmR9fQ0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtc2hvdyIgY2xhc3M9InRleHQtY2VudGVyIj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gZW5hYmxlIj7lj5Hooajor4Torro8L2J1dHRvbj57e2Vsc2V9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXJlZCI+5pys5paH5YWz6Zet5LqG6K+E6K66PC9idXR0b24+e3tlbmR9fQ0KICAgIDwvZGl2Pnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBjbGFzcz0iaGlkZSBjbGVhciB0ZXh0LWNlbnRlciBmb3JtIiBhY3Rpb249Ii9jb21tZW50L3t7LkNvbnRlbnQuSWR9fS8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mbyBsZWZ0IHRleHQtcmlnaHQiPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0gYy1hdmF0YXItZmllbGQiPg0KICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIG51bGwiIHNyYz0iL3N0YXRpYy9pbWcvc2l0ZS5wbmciIGFsdD0iIiBpZD0iY29tbWVudC1hdmF0YXIiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibm90LW1lIGJsb2NrIiBocmVmPSIjIj7kuI3mmK/miJE/PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvLWZpZWxkcyBoaWRlIj4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuensOWRvCIgaWQ9ImNvbW1lbnQtYXV0aG9yIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpgq7nrrEiIGlkPSJjb21tZW50LWVtYWlsIi8+IDwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0idXJsIiBwbGFjZWhvbGRlcj0i572R5Z2AIiBpZD0iY29tbWVudC11cmwiLz48L3A+DQogICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjb21tZW50LXBhcmVudCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgbmFtZT0icGlkIi8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtY29udGVudCB0ZXh0LWxlZnQgcmlnaHQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGNhbmNlbC1yZXBseSIgdHlwZT0iYnV0dG9uIj7lj5bmtojlm57lpI08L2J1dHRvbj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9mb3JtPnt7ZW5kfX0NCiAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjb21tZW50LXRwbCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSIiLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIGNsZWFyIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkgbGJsIHJpZ2h0IiBocmVmPSIjIiByZWw9IiI+5Zue5aSNPC9hPg0KICAgICAgICAgICAgICAgICAgICA8cD48YSBjbGFzcz0iYy1hdXRob3IgIiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPjwvYT48L3A+DQogICAgICAgICAgICAgICAgICAgIDxwPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+Tm93PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY2hlY2siPuWuoeaguOS4re+8jOWIt+aWsOWQjumakOiXjzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPjwvc2VjdGlvbj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvc2NyaXB0Pg0KPC9kaXY+UEsHCGmgR6KVDQAAlQ0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHZpZXdcbGluZ1xlcnJvci9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xsaW5nXGVycm9yXGVycm9yLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouato+WcqOaJk+eejOedoTwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWKquWKm+WUpOmGku+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCBOERlJ4AQAAeAEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHZpZXdcbGluZ1xlcnJvclxub3Rmb3VuZC5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPumUmeivr+aPkOekujwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPmJvZHl7bWFyZ2luOiA0MHB4IDEwMHB4fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoMj7mgqjorr/pl67nmoTpobXpnaLnprvlrrblh7rotbA8L2gyPjxici8+DQo8cD7nqIvluo/lkZjmraPlnKjlm5vlpITlr7vmib7vvIzor7fnqI3lgJnorr/pl64uLi48L3A+DQo8cD48YSBocmVmPSIvIj7ov5Tlm57pppbpobU8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwiQ+dTAdQEAAHUBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGxpbmdcaG9tZS5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iLz4NCiAgICA8dGl0bGU+e3tpZiAuVGl0bGV9fXt7LlRpdGxlfX0gLSB7e2VuZH19e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC90aXRsZT4NCiAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRnhoR28gQmxvZyIgLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2xpbmcuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRpdGxlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0gLSBSU1MgMi4wIiBocmVmPSIvcnNzLnhtbCIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGhlYWRlciBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCI+DQogICAgICAgIDxpbWcgc3JjPSJ7e1NldHRpbmcgYGNfaG9tZV9hdmF0YXJgfX0iIGFsdD0ic2l0ZSIgaWQ9ImhlYWRlci1pbWciIGNsYXNzPSJsZWZ0Ii8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiIGNsYXNzPSJsZWZ0Ij48YSBocmVmPSIvIj57e1NldHRpbmcgInNpdGVfdGl0bGUifX08L2E+PC9oMT4NCiAgICAgICAgPGg0IGlkPSJoZWFkZXItc3ViIiBjbGFzcz0ibGVmdCI+e3tTZXR0aW5nICJzaXRlX3N1Yl90aXRsZSJ9fTwvaDQ+DQogICAgICAgIDxuYXYgaWQ9Im5hdiIgY2xhc3M9InJpZ2h0Ij4NCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iLyI+5paH56ugPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii9hYm91dC1tZS5odG1sIj7lhbPkuo48L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iL2ZyaWVuZHMuaHRtbCI+5aW95Y+LPC9hPjwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L25hdj4NCiAgICA8L2Rpdj4NCjwvaGVhZGVyPg0KPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbnRhaW5lcjk2MCI+DQogICAge0BDb250ZW50fQ0KPC9kaXY+DQo8Zm9vdGVyIGlkPSJmb290ZXIiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIGNsZWFyIj4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPkdvIMKpIDIwMTQgQWxsIHJpZ2h0cyByZXNlcnZlZC48L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJyaWdodCI+UHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9zcGFuPg0KICAgIDwvZGl2Pg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KICAgIHt7U2V0dGluZyBgY19mb290ZXJfZ2FgIHwgSHRtbH19DQo8L2Zvb3Rlcj4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL2hvbWUuanMiPjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPg0Ke3tIdG1sICI8IS0tIHRoYW5rcyBmb3IgdGhlbWUgTGluZ29uYmVycnkoaHR0cDovL3d3dy5hbmRlcnNub3Jlbi5zZS8pIGZvciBXb3JkUHJlc3MtLT4ifX1QSwcIQ329+tkIAADZCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAdmlld1xsaW5nXGluZGV4Lmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5JZH19Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBsZWZ0IHRleHQtY2VudGVyIHJlbGF0aXZlIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLXJlZCBjb21tZW50cyI+PGEgaHJlZj0ie3suTGlua319I2NvbW1lbnQiPnt7LkNvbW1lbnROdW19fTwvYT48L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyBhYnNvbHV0ZSI+e3suSGl0c319PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbiByZWxhdGl2ZSI+DQogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgICAgICA8cCBjbGFzcz0idGltZS1pbmZvIj57e2lmIC5Vc2VyfX08c3Ryb25nPnt7LlVzZXIuTmlja319PC9zdHJvbmc+Jm5ic3A7Jm5ic3A7Jm5ic3A7e3tlbmR9feWPkeihqOS6jiZuYnNwOyZuYnNwOyZuYnNwO3t7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJZWVlZIOW5tCBNTSDmnIggREQg5pelIn19PC9wPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuU3VtbWFyeX19PC9zZWN0aW9uPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWcgaW5saW5lLWJsb2NrIj7moIfnrb7vvJp7ey5UYWdTdHJpbmd9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iaW5saW5lLWJsb2NrIHJlYWQgcmlnaHQiIGhyZWY9Int7Lkxpbmt9fSI+57un57ut6ZiF6K+7PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2FydGljbGU+e3tlbmR9fQ0KICAgIDxkaXYgY2xhc3M9InBhZ2VyIHRleHQtY2VudGVyIiBpZD0iYXJ0aWNsZS1wYWdlciI+DQogICAgICAgIHt7aWYgLlBhZ2VyLklzTmV4dH19PGEgaHJlZj0iL3Ave3suUGFnZXIuTmV4dH19LyIgY2xhc3M9Iml0ZW0gbGVmdCI+6L6D5pen55qE5paH56ugPC9hPnt7ZW5kfX0NCiAgICAgICAge3tpZiAuUGFnZXIuSXNQcmV2fX08YSBocmVmPSIvcC97ey5QYWdlci5QcmV2fX0vIiBjbGFzcz0iaXRlbSBy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" \ No newline at end of file From 6756f35360901653d0527aa26cba11321e495ad5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Tue, 4 Feb 2014 22:42:54 +0800 Subject: [PATCH 14/82] add hooks, update theme --- app/handler/admin.go | 13 +++++++++++++ app/handler/cmd.go | 5 ++++- app/handler/upload.go | 2 ++ app/model/message.go | 5 +++++ static/css/ling.css | 1 + static/less/ling.less | 6 ++++++ view/ling/home.layout | 2 +- 7 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 app/model/message.go diff --git a/app/handler/admin.go b/app/handler/admin.go index ab3aea4..1a275b0 100644 --- a/app/handler/admin.go +++ b/app/handler/admin.go @@ -38,6 +38,7 @@ func AdminProfile(context *GoInk.Context) { Json(context, true).End() go model.SyncUsers() go model.UpdateCommentAdmin(user) + context.Do("profile_update", user) return } context.Layout("admin") @@ -58,6 +59,7 @@ func AdminPassword(context *GoInk.Context) { user.ChangePassword(context.String("new")) go model.SyncUsers() Json(context, true).End() + context.Do("password_update", user) return } context.Layout("admin") @@ -103,6 +105,7 @@ func ArticleWrite(context *GoInk.Context) { return } Json(context, true).Set("content", c).End() + context.Do("article_created", c) //c.Type = "article" return } @@ -141,6 +144,7 @@ func ArticleEdit(context *GoInk.Context) { //c.Format = "markdown" model.SaveContent(c) Json(context, true).Set("content", c).End() + context.Do("article_modified", c) //c.Type = "article" return } @@ -178,6 +182,7 @@ func PageWrite(context *GoInk.Context) { } Json(context, true).Set("content", c).End() //c.Type = "article" + context.Do("page_created", c) return } context.Layout("admin") @@ -225,6 +230,7 @@ func PageEdit(context *GoInk.Context) { //c.Format = "markdown" model.SaveContent(c) Json(context, true).Set("content", c).End() + context.Do("page_modified", c) //c.Type = "article" return } @@ -248,6 +254,7 @@ func AdminSetting(context *GoInk.Context) { } model.SyncSettings() Json(context, true).End() + context.Do("setting_saved") return } context.Layout("admin") @@ -268,6 +275,7 @@ func CustomSetting(context *GoInk.Context) { } model.SyncSettings() Json(context, true).End() + context.Do("setting_saved") return } @@ -277,6 +285,7 @@ func AdminComments(context *GoInk.Context) { cmt := model.GetCommentById(id) model.RemoveComment(cmt.Cid, id) Json(context, true).End() + context.Do("comment_delete", id) return } if context.Method == "PUT" { @@ -286,6 +295,7 @@ func AdminComments(context *GoInk.Context) { cmt2.GetReader().Active = true model.SaveComment(cmt2) Json(context, true).End() + context.Do("comment_change_status", cmt2) return } if context.Method == "POST" { @@ -332,11 +342,13 @@ func AdminPlugin(context *GoInk.Context) { plugin.Activate(pln) go plugin.Update(context.App()) Json(context, true).End() + context.Do("plugin_activated", pln) return } if action == "deactivate" { plugin.Deactivate(pln) Json(context, true).End() + context.Do("plugin_deactivated", pln) return } context.Status = 405 @@ -364,6 +376,7 @@ func PluginSetting(context *GoInk.Context) { if context.Method == "POST" { p.SetSetting(context.Input()) Json(context, true).End() + context.Do("plugin_setting_saved", p) return } context.Layout("admin") diff --git a/app/handler/cmd.go b/app/handler/cmd.go index 82de6e0..3d4694a 100644 --- a/app/handler/cmd.go +++ b/app/handler/cmd.go @@ -13,6 +13,7 @@ func CmdBackup(context *GoInk.Context) { return } Json(context, true).Set("file", file).End() + context.Do("bakcup_success", file) return } if context.Method == "DELETE" { @@ -23,6 +24,7 @@ func CmdBackup(context *GoInk.Context) { } cmd.RemoveBackupFile(file) Json(context, true).End() + context.Do("backup_delete", file) return } files, _ := cmd.GetBackupFiles() @@ -32,7 +34,8 @@ func CmdBackup(context *GoInk.Context) { }) } -func CmdBackupFile(context *GoInk.Context){ +func CmdBackupFile(context *GoInk.Context) { file := context.String("file") context.Download(cmd.GetBackupFileAbsPath(file)) + context.Do("backup_download", file) } diff --git a/app/handler/upload.go b/app/handler/upload.go index c2f37b2..28297d3 100644 --- a/app/handler/upload.go +++ b/app/handler/upload.go @@ -16,6 +16,7 @@ func AdminFiles(context *GoInk.Context) { id := context.Int("id") model.RemoveFile(id) Json(context, true).End() + context.Do("attach_delete", id) return } files, pager := model.GetFileList(context.Int("page"), 10) @@ -65,4 +66,5 @@ func FileUpload(context *GoInk.Context) { } model.CreateFile(ff) Json(context, true).Set("file", ff).End() + context.Do("attach_created", ff) } diff --git a/app/model/message.go b/app/model/message.go new file mode 100644 index 0000000..b2b2e98 --- /dev/null +++ b/app/model/message.go @@ -0,0 +1,5 @@ +package model + +type Message struct { + +} diff --git a/static/css/ling.css b/static/css/ling.css index 6ef693f..31a1357 100644 --- a/static/css/ling.css +++ b/static/css/ling.css @@ -102,6 +102,7 @@ html,body{background:#f3f3f3} #header{background:#0093c4;min-width:120px;padding:40px 0 48px 0;color:#fbfbfb}#header a:hover{color:#fff;text-shadow:0 0 3px #333;-moz-text-shadow:0 0 3px #333;-webkit-text-shadow:0 0 3px #333} #header-img{width:96px;height:96px;border-radius:50px;-moz-border-radius:50px;-webkit-border-radius:50px} #header-h{line-height:94px;color:#fbfbfb;padding:0;margin-left:24px}#header-h a{color:#fbfbfb} +#header-sub{color:#f3f3f3;margin-left:1.2em;font-size:16px} #nav{line-height:90px}#nav li{line-height:50px;margin-left:44px}#nav li a{font-size:18px;color:#f3f3f3;display:block}#nav li a:hover{color:#fff;text-shadow:0 0 3px #333;-moz-text-shadow:0 0 3px #333;-webkit-text-shadow:0 0 3px #333} #footer{padding:30px 40px;color:#999} #main{margin:30px auto} diff --git a/static/less/ling.less b/static/less/ling.less index 1cf85f7..c9e652a 100644 --- a/static/less/ling.less +++ b/static/less/ling.less @@ -33,6 +33,12 @@ html, body { margin-left: 24px; } +#header-sub{ + color:@white4; + margin-left: 1.2em; + font-size: 16px; +} + #nav { line-height: 90px; li { diff --git a/view/ling/home.layout b/view/ling/home.layout index b873ec0..2dbf493 100644 --- a/view/ling/home.layout +++ b/view/ling/home.layout @@ -20,7 +20,7 @@
    site

    {{Setting "site_title"}}

    - {{Html ``}} +

    {{Setting "site_sub_title"}}

    \ No newline at end of file +
    + \ No newline at end of file diff --git a/view/cmd.layout b/view/cmd.layout index 0c07b5a..dea1d10 100644 --- a/view/cmd.layout +++ b/view/cmd.layout @@ -2,7 +2,7 @@ - 备份 - Fxh.Go + {{.Title}} - Fxh.Go From 3f724d5dfd2518fb839818c6cd892eab32d264a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Wed, 5 Feb 2014 20:49:53 +0800 Subject: [PATCH 19/82] add log page --- app/app.go | 3 ++- app/cmd/log.go | 46 +++++++++++++++++++++++++++++++++++++++++ app/handler/cmd.go | 19 ++++++++++++++--- app/model/message.go | 7 ++++--- static/css/cmd.css | 5 +++++ static/less/cmd.less | 25 ++++++++++++++++++++++ view/admin.layout | 2 +- view/admin/cmd/log.html | 30 +++++++++++++++++++++++++++ 8 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 app/cmd/log.go create mode 100644 view/admin/cmd/log.html diff --git a/app/app.go b/app/app.go index 52eaad0..de06b38 100644 --- a/app/app.go +++ b/app/app.go @@ -195,7 +195,8 @@ func registerCmdHandler() { App.Route("GET,POST,DELETE", "/cmd/backup/", handler.Auth, handler.CmdBackup) App.Get("/cmd/backup/file", handler.Auth, handler.CmdBackupFile) - App.Route("GET,POST,DELETE","/cmd/message/",handler.Auth,handler.CmdMessage) + App.Route("GET,POST,DELETE", "/cmd/message/", handler.Auth, handler.CmdMessage) + App.Route("GET,DELETE", "/cmd/logs/", handler.Auth, handler.CmdLogs) } func registerHomeHandler() { diff --git a/app/cmd/log.go b/app/cmd/log.go new file mode 100644 index 0000000..5947b4f --- /dev/null +++ b/app/cmd/log.go @@ -0,0 +1,46 @@ +package cmd + +import ( + "github.com/fuxiaohei/GoBlog/GoInk" + "io/ioutil" + "os" + "path/filepath" +) + +type logItem struct { + Name string + CreateTime int64 + Text string +} + +func GetLogs(app *GoInk.App) []*logItem { + dir := app.Get("log_dir") + logs := make([]*logItem, 0) + filepath.Walk(dir, func(_ string, info os.FileInfo, err error) error { + if err == nil { + if info.IsDir() { + return nil + } + ext := filepath.Ext(info.Name()) + if ext != ".log" { + return nil + } + bytes, e := ioutil.ReadFile(filepath.Join(dir, info.Name())) + if e != nil { + return nil + } + l := new(logItem) + l.Name = info.Name() + l.CreateTime = info.ModTime().Unix() + l.Text = string(bytes) + logs = append([]*logItem{l}, logs...) + } + return nil + }) + return logs +} + +func RemoveLogFile(app *GoInk.App, file string) { + f := filepath.Join(app.Get("log_dir"), file) + os.Remove(f) +} diff --git a/app/handler/cmd.go b/app/handler/cmd.go index 8e5dc49..45c97b3 100644 --- a/app/handler/cmd.go +++ b/app/handler/cmd.go @@ -44,8 +44,21 @@ func CmdBackupFile(context *GoInk.Context) { func CmdMessage(context *GoInk.Context) { context.Layout("cmd") - context.Render("admin/cmd/message",map[string]interface {}{ - "Title":"消息", - "Messages":model.GetMessages(), + context.Render("admin/cmd/message", map[string]interface{}{ + "Title": "消息", + "Messages": model.GetMessages(), + }) +} + +func CmdLogs(context *GoInk.Context) { + if context.Method == "DELETE" { + cmd.RemoveLogFile(context.App(), context.String("file")) + Json(context, true).End() + return + } + context.Layout("cmd") + context.Render("admin/cmd/log", map[string]interface{}{ + "Title": "日志", + "Logs": cmd.GetLogs(context.App()), }) } diff --git a/app/model/message.go b/app/model/message.go index f3fc831..b98918b 100644 --- a/app/model/message.go +++ b/app/model/message.go @@ -41,7 +41,7 @@ func CreateMessage(tp string, data interface{}) *Message { return m } -func SetMessageGenerator(name string,fn func(v interface {})string){ +func SetMessageGenerator(name string, fn func(v interface{}) string) { messageGenerator[name] = fn } @@ -65,7 +65,7 @@ func GetUnreadMessages() []*Message { return ms } -func GetMessages()[]*Message{ +func GetMessages() []*Message { return messages } @@ -136,8 +136,9 @@ func generateCommentMessage(co interface{}) string { func StartMessageTimer() { time.AfterFunc(time.Duration(1)*time.Hour, func() { - println("write messages in 1 hours timer") + println("write messages in 1 hour timer") RecycleMessages() SyncMessages() + StartMessageTimer() }) } diff --git a/static/css/cmd.css b/static/css/cmd.css index 51e3f26..589d08f 100644 --- a/static/css/cmd.css +++ b/static/css/cmd.css @@ -110,3 +110,8 @@ a.lbl-green:hover{background-color:#649462;color:#fbfbfb} #message-list .message .data{color:#666;margin-left:1.2em}#message-list .message .data p{margin-bottom:0;line-height:24px} #message-list .message .read{top:0;right:12px;opacity:0}#message-list .message .read:hover{color:#e64346} #message-list .message:hover .read{opacity:1} +#log-list .log{font-size:12px} +#log-list .name{margin-right:1.5em;font-weight:bold} +#log-list .time,#log-list .name{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} +#log-list .text{line-height:20px;font-family:Consolas,"Courier New",Arial;color:#666;padding:8px 12px;background:#f3f3f3} +#log-list .remove{top:0;right:12px;color:#e64346} diff --git a/static/less/cmd.less b/static/less/cmd.less index 287d332..f8a51ce 100644 --- a/static/less/cmd.less +++ b/static/less/cmd.less @@ -69,4 +69,29 @@ } } } +} + +#log-list{ + .log{ + font-size: 12px; + } + .name{ + margin-right: 1.5em; + font-weight: bold; + } + .time,.name{ + font-family: Verdana, Tahoma, '微软雅黑', '宋体', sans-serif; + } + .text{ + line-height: 20px; + font-family: Consolas, "Courier New", Arial; + color: @black2; + padding: 8px 12px; + background: @white4; + } + .remove{ + top:0; + right:12px; + color: @red1; + } } \ No newline at end of file diff --git a/view/admin.layout b/view/admin.layout index 9ab029e..b3a09ac 100644 --- a/view/admin.layout +++ b/view/admin.layout @@ -33,7 +33,7 @@

    Proudly published with Fxh.Go.

    diff --git a/view/admin/cmd/log.html b/view/admin/cmd/log.html new file mode 100644 index 0000000..add269f --- /dev/null +++ b/view/admin/cmd/log.html @@ -0,0 +1,30 @@ +
    +

    错误日志

    +
    +
      {{range .Logs}} +
    • + {{.Name}} + {{DateInt64 .CreateTime "MM.DD HH:mm"}} +
      {{.Text}}
      + +
    • {{end}} +
    + \ No newline at end of file From 50b3d0c75efc5f39d65e11fce8086d32e7f466a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Wed, 5 Feb 2014 20:51:38 +0800 Subject: [PATCH 20/82] update zip bytes --- app/cmd/zip.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/cmd/zip.go b/app/cmd/zip.go index 6a8d073..713407d 100644 --- a/app/cmd/zip.go +++ b/app/cmd/zip.go @@ -1,2 +1,2 @@ package cmd -const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnttYXJnaW4tdG9wOjI0cHg7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3NldHRpbmctbmF2IGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDEycHh9I3NldHRpbmctbmF2IGxpIGF7cGFkZGluZzozcHggMTBweH0KI3NldHRpbmctbmF2IGxpIGE6aG92ZXIsI3NldHRpbmctbmF2IGxpIGEuY3VycmVudHtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMDA1YjlifQouc2V0dGluZy1wYW5lbHtkaXNwbGF5Om5vbmV9Ci5zZXR0aW5nLWZvcm17d2lkdGg6ODIwcHg7bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99LnNldHRpbmctZm9ybSAuaXB0e3dpZHRoOjQ4MHB4fQouc2V0dGluZy1mb3JtIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9Ci5zZXR0aW5nLWZvcm0gbGFiZWx7bWluLXdpZHRoOjEwZW19Ci5zZXR0aW5nLWZvcm0gLnRpcC5ibG9ja3ttYXJnaW4tbGVmdDoxMmVtfQojc2V0dGluZy1jdXN0b20tZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQua2V5e3dpZHRoOjI1MHB4fQojc2V0dGluZy1jdXN0b20tZm9ybSBpbnB1dC52YWx1ZXt3aWR0aDo2NTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojc2V0dGluZy1jdXN0b20tZm9ybSAudGlwe21hcmdpbi1sZWZ0OjB9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNudCwjY29tbWVudC1saXN0IC5jLWVtYWlse2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHh9CiNjb21tZW50LWxpc3QgLmMtcmVwbHl7Y29sb3I6Izk5OX0jY29tbWVudC1saXN0IC5jLXJlcGx5OmhvdmVye2NvbG9yOiMzMzN9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxM3B4fQojY29tbWVudC1saXN0IC5jLWF1dGhvci5hZG1pbntiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KI2NvbW1lbnQtbGlzdCAuYy1wLW1ke21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjaywjY29tbWVudC1saXN0IC5jLWRlbHtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhLCNjb21tZW50LWxpc3QgLmMtZGVsIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNoZWNrOmhvdmVyLCNjb21tZW50LWxpc3QgLmMtZGVsOmhvdmVye2NvbG9yOiNhYTM5M2N9CiNjb21tZW50LWZvcm17cGFkZGluZy10b3A6MTJweDtkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6NzJweH0jY29tbWVudC1mb3JtIC5idG57bWFyZ2luLXJpZ2h0OjI0cHh9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6NTAwcHg7aGVpZ2h0OjgwcHg7bWFyZ2luLXJpZ2h0OjI0cHh9CiNmaWxlcy1saXN0IGxpLmZpbGV7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNmaWxlcy1saXN0IGxpLmZpbGU+KnttYXJnaW4tcmlnaHQ6MTZweH0KI2ZpbGVzLWxpc3QgbGkuZmlsZTpob3ZlciAuZGVse29wYWNpdHk6MSAhaW1wb3J0YW50fQojZmlsZXMtbGlzdCAudXBsb2FkLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZmlsZXMtbGlzdCAuZGVse2NvbG9yOiNlNjQzNDZ9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2ZpbGVzLWxpc3QgLmZpbGUtcHJvZ3Jlc3MuZXJye2JhY2tncm91bmQ6cmdiYSgyNTUsNjgsNzEsMC4yKTtjb2xvcjojYWEzOTNjfQojZmlsZXMtbGlzdCAuc2l6ZXt3aWR0aDo0ZW07ZGlzcGxheTppbmxpbmUtYmxvY2t9CiNwbHVnaW4tbGlzdCBsaXttYXJnaW4tYm90dG9tOjE2cHg7cGFkZGluZy1ib3R0b206MTZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jcGx1Z2luLWxpc3QgbGkgLmRlc2N7bWFyZ2luLWJvdHRvbTowO3dpZHRoOjk5JTtjb2xvcjojOTk5fQojcGx1Z2luLWxpc3QgbGkgYS5sYmx7cGFkZGluZzowIDhweDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLnZlcnNpb257Y29sb3I6IzUwNzY1MDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLm5hbWV7Zm9udC1zaXplOjE2cHh9CiNwbHVnaW4tbGlzdCBsaSAuYWN0aXZle3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7bWFyZ2luLXJpZ2h0OjE2cHg7cGFkZGluZzowO21hcmdpbi10b3A6MTBweH0KI3BsdWdpbi1saXN0IGxpIC5zZXR0aW5ne21hcmdpbi1sZWZ0OjE2cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIHAuaXRlbXtjbGVhcjpib3RofQojcGx1Z2luLXNldHRpbmctZm9ybSBsYWJlbHtmbG9hdDpsZWZ0O21pbi13aWR0aDo2ZW07dGV4dC1hbGlnbjpyaWdodDttYXJnaW4tcmlnaHQ6MmVtfQojcGx1Z2luLXNldHRpbmctZm9ybSAudGl0bGV7cGFkZGluZy10b3A6MDttYXJnaW4tYm90dG9tOjE4cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIGlucHV0LmlwdHt3aWR0aDo2MDBweH0KI2Rhc2hib2FyZCAuZ3JpZC0xLTV7bWFyZ2luLXJpZ2h0OjQlfQojZGFzaGJvYXJkIC5xdWljay1saW5rIGxpe2xpc3Qtc3R5bGU6aW5zaWRlIGRpc2M7bWFyZ2luLWJvdHRvbTo2cHg7cGFkZGluZy1ib3R0b206NnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojZGFzaGJvYXJkIC5zdGF0cyAubGJse3BhZGRpbmc6MXB4IDVweDttYXJnaW46MCAzcHh9ClBLBwiIQdYpRy4AAEcuAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcY3NzXGNtZC5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfQpoZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9CmF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja30KdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9CmZpZWxkc2V0LGltZ3tib3JkZXI6MH0KYWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH0Kb2wsdWx7bGlzdC1zdHlsZTpub25lfQpjYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH0KaDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfQpxOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9CmFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfQpzdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9CnN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH0KbGVnZW5ke2NvbG9yOiMwMDB9Cmh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifQphe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifQpwe21hcmdpbi1ib3R0b206MThweH0KaDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9Cmgxe2ZvbnQtc2l6ZToyOHB4fQpoMntmb250LXNpemU6MjRweH0KaDN7Zm9udC1zaXplOjIxcHh9Cmg0e2ZvbnQtc2l6ZToxOXB4fQpoNXtmb250LXNpemU6MTZweH0KaDZ7Zm9udC1zaXplOjE0cHh9Ci50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fQoudGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fQoudGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9Ci5sZWZ0e2Zsb2F0OmxlZnR9Ci5yaWdodHtmbG9hdDpyaWdodH0KLmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfQoucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9Ci5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9Ci52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfQouaW5saW5le2Rpc3BsYXk6aW5saW5lfQouaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfQouYmxvY2t7ZGlzcGxheTpibG9ja30KLmZhZGUtb3V0e29wYWNpdHk6MH0KLmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9Ci5jb250YWluZXJ7bWF4LXdpZHRoOjEyMDBweDttYXJnaW46YXV0b30KLmNvbnRhaW5lcjk2MHttYXgtd2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99Ci5ncmlkLTEtMnt3aWR0aDo1MCV9Ci5ncmlkLTEtM3t3aWR0aDozMy4zMzMzJX0KLmdyaWQtMS00e3dpZHRoOjI1JX0KLmdyaWQtMS01e3dpZHRoOjIwJX0KLmdyaWQtMS02e3dpZHRoOjE2LjY2NjYlfQouZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9Ci5ncmlkLTMtNHt3aWR0aDo3NSV9Ci5ncmlkLTMtNXt3aWR0aDo2MCV9Ci5ncmlkLTQtNXt3aWR0aDo4MCV9Ci5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0LGJ1dHRvbntmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZn0KLmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0KLmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC5pcHR7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTttaW4td2lkdGg6MTgwcHh9LmZvcm0gLmlwdDpmb2N1c3tib3JkZXItY29sb3I6IzAwNzliY30KLmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfQouZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fQouZm9ybSAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9Ci5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9Ci5mb3JtLXZlcnRpY2FsIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3h9Ci5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fQouZm9ybS1hbGlnbiAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn0KYS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfQouYnRuLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0uYnRuLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2F9Ci5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifQouYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfQoubGJse3BhZGRpbmc6NHB4IDEycHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fQoubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KYS5sYmx7bGluZS1oZWlnaHQ6MjZweH0KYS5sYmwtcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYTtjb2xvcjojZmJmYmZifQoubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CmEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9CmEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifQoucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30KLnBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5pdGVtOmhvdmVyIGF7Y29sb3I6I2ZmZn0KLnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifQoucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgyLC5tYXJrZG93biBoMywubWFya2Rvd24gaDQsLm1hcmtkb3duIGg1LC5tYXJrZG93biBoNntwYWRkaW5nOjE4cHggMCA5cHggMDtmb250LXdlaWdodDpib2xkfQoubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHh9Ci5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMnttYXJnaW4tYm90dG9tOjEwcHg7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KLm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fQoubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Ci5tYXJrZG93biBoNXtmb250LXNpemU6MTZweH0KLm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fQoubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Ci5tYXJrZG93biB1bHtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlfQoubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0KLm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0KLm1hcmtkb3duIHAgY29kZXtjb2xvcjojYzczODNhfQoubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0KLm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Ci5tYXJrZG93biBvbCwubWFya2Rvd24gdWx7bWFyZ2luOjEycHggMjRweH0KLm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfQoubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0KLm1hcmtkb3duIHRhYmxlIHRoZWFke2JhY2tncm91bmQ6I2Y2ZjZmNn0KLmNtZHttYXJnaW46MjRweCA0OHB4fQouY21kLWhlYWRlcnttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1idG57bWFyZ2luOjEwcHggMCAwIDMwcHh9Ci5jbWQtbGlzdCBsaXttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1saXN0IGxpe2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGU7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jYmFja3VwLWxpc3QgbGk+c3BhbiwjYmFja3VwLWxpc3QgbGk+YXttYXJnaW4tcmlnaHQ6MTZweH0KI2JhY2t1cC1saXN0IGxpIC5kZWx7Y29sb3I6I2U2NDM0NjtvcGFjaXR5OjB9CiNiYWNrdXAtbGlzdCBsaSAubGlua3ttYXJnaW4tbGVmdDoxMnB4fQojYmFja3VwLWxpc3QgbGk6aG92ZXIgLmRlbHtvcGFjaXR5OjF9ClBLBwhaVpyB1hYAANYWAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAABzdGF0aWNcY3NzXGNvZGVtaXJyb3IuY3NzLyogQkFTSUNTICovCgouQ29kZU1pcnJvciB7CiAgICAvKiBTZXQgaGVpZ2h0LCB3aWR0aCwgYm9yZGVycywgYW5kIGdsb2JhbCBmb250IHByb3BlcnRpZXMgaGVyZSAqLwogICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiTWljcm9zb2Z0IFlhSGVpIiwgIkNvdXJpZXIgTmV3IiwgQXJpYWw7CiAgICBoZWlnaHQ6IDY2MHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgYm9yZGVyOjFweCBzb2xpZCAjOTk5Owp9CgouQ29kZU1pcnJvci1zY3JvbGwgewogICAgLyogU2V0IHNjcm9sbGluZyBiZWhhdmlvdXIgaGVyZSAqLwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi8qIFBBRERJTkcgKi8KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIHBhZGRpbmc6IDRweCAwOyAvKiBWZXJ0aWNhbCBwYWRkaW5nIGFyb3VuZCBjb250ZW50ICovCn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICBwYWRkaW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KfQoKLyogR1VUVEVSICovCgouQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLkNvZGVNaXJyb3ItbGluZW51bWJlcnMgewp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIHBhZGRpbmc6IDAgM3B4IDAgNXB4OwogICAgbWluLXdpZHRoOiAyMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBjb2xvcjogIzU1NTsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4Owp9CgovKiBDVVJTT1IgKi8KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogICAgei1pbmRleDogMzsKfQoKLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7Cn0KCi5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB3aWR0aDogYXV0bzsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6ICM3ZTc7CiAgICB6LWluZGV4OiAxOwp9CgovKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHsKfQoKLmNtLXRhYiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi8qIERFRkFVTFQgVEhFTUUgKi8KCi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQgewogICAgY29sb3I6ICM3MDg7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWF0b20gewogICAgY29sb3I6ICMyMTk7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7CiAgICBjb2xvcjogIzE2NDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tZGVmIHsKICAgIGNvbG9yOiAjMDBmOwp9CgouY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZSB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICMwNWE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTMgewogICAgY29sb3I6ICMwODU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5IHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3IgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHsKICAgIGNvbG9yOiAjYTUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1zdHJpbmcgewogICAgY29sb3I6ICNhMTE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0yIHsKICAgIGNvbG9yOiAjZjUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1tZXRhIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW4gewogICAgY29sb3I6ICMzMGE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICM5OTc7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7CiAgICBjb2xvcjogIzE3MDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIgewogICAgY29sb3I6IGJsdWU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1b3RlIHsKICAgIGNvbG9yOiAjMDkwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1ociB7CiAgICBjb2xvcjogIzk5OTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbGluayB7CiAgICBjb2xvcjogIzAwYzsKfQoKLmNtLW5lZ2F0aXZlIHsKICAgIGNvbG9yOiAjZDQ0Owp9CgouY20tcG9zaXRpdmUgewogICAgY29sb3I6ICMyOTI7Cn0KCi5jbS1oZWFkZXIsIC5jbS1zdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5jbS1lbSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5jbS1saW5rIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7CiAgICBjb2xvcjogI2YwMDsKfQoKLmNtLWludmFsaWRjaGFyIHsKICAgIGNvbG9yOiAjZjAwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjMGYwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjZjIyOwp9CgouQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogI2U4ZjJmZjsKfQoKLyogU1RPUCAqLwoKLyogVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGNvbnRhaW5zIHN0eWxlcyByZWxhdGVkIHRvIHRoZSBtZWNoYW5pY3Mgb2YKICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwoKLkNvZGVNaXJyb3IgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciAqLwogICAgbWFyZ2luLWJvdHRvbTogLTMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IC0zMHB4OwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CgouQ29kZU1pcnJvci1zaXplciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcKICAgYmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZAogICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA2OwogICAgZGlzcGxheTogbm9uZTsKfQoKLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7CiAgICByaWdodDogMDsKICAgIHRvcDogMDsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKfQoKLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgb3ZlcmZsb3cteDogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGxlZnQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHRvcDogMDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgei1pbmRleDogMzsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIG1hcmdpbi1ib3R0b206IC0zMnB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgLyogSGFjayB0byBtYWtlIElFNyBiZWhhdmUgKi8KICAgICp6b29tOiAxOwogICAgKmRpc3BsYXk6IGlubGluZTsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB6LWluZGV4OiA0Owp9CgouQ29kZU1pcnJvci1saW5lcyB7CiAgICBjdXJzb3I6IHRleHQ7Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovCiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLXdpZHRoOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgIG1hcmdpbjogMDsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICB6LWluZGV4OiAyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7Cn0KCi5Db2RlTWlycm9yLXdyYXAgcHJlIHsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKfQoKLkNvZGVNaXJyb3ItY29kZSBwcmUgewogICAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7CiAgICB3aWR0aDogLW1vei1maXQtY29udGVudDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogYXV0bzsKfQoKLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgei1pbmRleDogMDsKfQoKLkNvZGVNaXJyb3ItbGluZXdpZGdldCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi5Db2RlTWlycm9yLXdpZGdldCB7Cn0KCi5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7Cn0KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogMDsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogI2Q5ZDlkOTsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDdkNGYwOwp9CgouY20tc2VhcmNoaW5nIHsKICAgIGJhY2tncm91bmQ6ICNmZmE7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAuNCk7Cn0KCi8qIElFNyBoYWNrIHRvIHByZXZlbnQgaXQgZnJvbSByZXR1cm5pbmcgZnVubnkgb2Zmc2V0VG9wcyBvbiB0aGUgc3BhbnMgKi8KLkNvZGVNaXJyb3Igc3BhbiB7CiAgICAqdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwp9CgpAbWVkaWEgcHJpbnQgewogICAgLyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KICAgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQp9CgouY20tcy1iYXNlMTYtZGFyay5Db2RlTWlycm9yIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogIzIwMjAyMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBib3JkZXItcmlnaHQ6IDBweDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItbGluZW51bWJlciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2IwYjBiMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICM4ZjU1MzY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXRvbSB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1udW1iZXIgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWtleXdvcmQgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tc3RyaW5nIHsKICAgIGNvbG9yOiAjZjRiZjc1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICM2YTlmYjU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZGVmIHsKICAgIGNvbG9yOiAjZDI4NDQ1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICNlMGUwZTA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdGFnIHsKICAgIGNvbG9yOiAjYWM0MTQyOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWxpbmsgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZXJyb3IgewogICAgYmFja2dyb3VuZDogI2FjNDE0MjsKICAgIGNvbG9yOiAjYjBiMGIwOwp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogIzJGMkYyRiAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQpQSwcIIwM1gk4gAABOIAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAc3RhdGljXGNzc1xjb21tb24uY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH1oZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfWZpZWxkc2V0LGltZ3tib3JkZXI6MH1hZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfW9sLHVse2xpc3Qtc3R5bGU6bm9uZX1jYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9cTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfWFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfXN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH1zdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1sZWdlbmR7Y29sb3I6IzAwMH1odG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn1he3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifXB7bWFyZ2luLWJvdHRvbToxOHB4fWgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfWgxe2ZvbnQtc2l6ZToyOHB4fWgye2ZvbnQtc2l6ZToyNHB4fWgze2ZvbnQtc2l6ZToyMXB4fWg0e2ZvbnQtc2l6ZToxOXB4fWg1e2ZvbnQtc2l6ZToxNnB4fWg2e2ZvbnQtc2l6ZToxNHB4fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5sZWZ0e2Zsb2F0OmxlZnR9LnJpZ2h0e2Zsb2F0OnJpZ2h0fS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0udmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmZhZGUtb3V0e29wYWNpdHk6MH0uaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uY29udGFpbmVye3dpZHRoOjEyMDBweDttYXJnaW46YXV0b30uY29udGFpbmVyOTYwe3dpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmctYm90dG9tOjEycHh9Lm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fVBLBwh7vP2MJhQAACYUAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAABzdGF0aWNcY3NzXGhpZ2hsaWdodC5jc3MvKg0KDQpTdW5idXJzdC1saWtlIHN0eWxlIChjKSBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+DQoNCiovDQoNCnByZSBjb2RlIHsNCiAgICBkaXNwbGF5OiBibG9jazsgcGFkZGluZzogMC41ZW07DQogICAgYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmOGY4Zjg7DQp9DQoNCnByZSAuY29tbWVudCwNCnByZSAudGVtcGxhdGVfY29tbWVudCwNCnByZSAuamF2YWRvYyB7DQogICAgY29sb3I6ICNhZWFlYWU7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmtleXdvcmQsDQpwcmUgLnJ1YnkgLmZ1bmN0aW9uIC5rZXl3b3JkLA0KcHJlIC5yZXF1ZXN0LA0KcHJlIC5zdGF0dXMsDQpwcmUgLm5naW54IC50aXRsZSB7DQogICAgY29sb3I6ICNFMjg5NjQ7DQp9DQoNCnByZSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnN1YiAua2V5d29yZCwNCnByZSAubWV0aG9kLA0KcHJlIC5saXN0IC50aXRsZSB7DQogICAgY29sb3I6ICM5OUNGNTA7DQp9DQoNCnByZSAuc3RyaW5nLA0KcHJlIC50YWcgLnZhbHVlLA0KcHJlIC5jZGF0YSwNCnByZSAuZmlsdGVyIC5hcmd1bWVudCwNCnByZSAuYXR0cl9zZWxlY3RvciwNCnByZSAuYXBhY2hlIC5jYnJhY2tldCwNCnByZSAuZGF0ZSwNCnByZSAudGV4IC5jb21tYW5kLA0KcHJlIC5jb2ZmZWVzY3JpcHQgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICM2NUIwNDI7DQp9DQoNCnByZSAuc3Vic3Qgew0KICAgIGNvbG9yOiAjREFFRkEzOw0KfQ0KDQpwcmUgLnJlZ2V4cCB7DQogICAgY29sb3I6ICNFOUMwNjI7DQp9DQoNCnByZSAudGl0bGUsDQpwcmUgLnN1YiAuaWRlbnRpZmllciwNCnByZSAucGksDQpwcmUgLnRhZywNCnByZSAudGFnIC5rZXl3b3JkLA0KcHJlIC5kZWNvcmF0b3IsDQpwcmUgLnNoZWJhbmcsDQpwcmUgLnByb21wdCB7DQogICAgY29sb3I6ICM4OUJERkY7DQp9DQoNCnByZSAuY2xhc3MgLnRpdGxlLA0KcHJlIC5oYXNrZWxsIC50eXBlLA0KcHJlIC5zbWFsbHRhbGsgLmNsYXNzLA0KcHJlIC5qYXZhZG9jdGFnLA0KcHJlIC55YXJkb2N0YWcsDQpwcmUgLnBocGRvYyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCnByZSAuc3ltYm9sLA0KcHJlIC5ydWJ5IC5zeW1ib2wgLnN0cmluZywNCnByZSAubnVtYmVyIHsNCiAgICBjb2xvcjogIzMzODdDQzsNCn0NCg0KcHJlIC5wYXJhbXMsDQpwcmUgLnZhcmlhYmxlLA0KcHJlIC5jbG9qdXJlIC5hdHRyaWJ1dGUgew0KICAgIGNvbG9yOiAjM0U4N0UzOw0KfQ0KDQpwcmUgLmNzcyAudGFnLA0KcHJlIC5ydWxlcyAucHJvcGVydHksDQpwcmUgLnBzZXVkbywNCnByZSAudGV4IC5zcGVjaWFsIHsNCiAgICBjb2xvcjogI0NEQTg2OTsNCn0NCg0KcHJlIC5jc3MgLmNsYXNzIHsNCiAgICBjb2xvcjogIzlCNzAzRjsNCn0NCg0KcHJlIC5ydWxlcyAua2V5d29yZCB7DQogICAgY29sb3I6ICNDNUFGNzU7DQp9DQoNCnByZSAucnVsZXMgLnZhbHVlIHsNCiAgICBjb2xvcjogI0NGNkE0QzsNCn0NCg0KcHJlIC5jc3MgLmlkIHsNCiAgICBjb2xvcjogIzhCOThBQjsNCn0NCg0KcHJlIC5hbm5vdGF0aW9uLA0KcHJlIC5hcGFjaGUgLnNxYnJhY2tldCwNCnByZSAubmdpbnggLmJ1aWx0X2luIHsNCiAgICBjb2xvcjogIzlCODU5RDsNCn0NCg0KcHJlIC5wcmVwcm9jZXNzb3IsDQpwcmUgLnByYWdtYSB7DQogICAgY29sb3I6ICM4OTk2QTg7DQp9DQoNCnByZSAuaGV4Y29sb3IsDQpwcmUgLmNzcyAudmFsdWUgLm51bWJlciB7DQogICAgY29sb3I6ICNERDdCM0I7DQp9DQoNCnByZSAuY3NzIC5mdW5jdGlvbiB7DQogICAgY29sb3I6ICNEQUQwODU7DQp9DQoNCnByZSAuZGlmZiAuaGVhZGVyLA0KcHJlIC5jaHVuaywNCnByZSAudGV4IC5mb3JtdWxhIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEUyMjMxOw0KICAgIGNvbG9yOiAjRjhGOEY4Ow0KICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCn0NCg0KcHJlIC5kaWZmIC5jaGFuZ2Ugew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0QTQxMEQ7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuYWRkaXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTNCMjI7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuZGVsZXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0MjBFMDk7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuY29mZmVlc2NyaXB0IC5qYXZhc2NyaXB0LA0KcHJlIC5qYXZhc2NyaXB0IC54bWwsDQpwcmUgLnRleCAuZm9ybXVsYSwNCnByZSAueG1sIC5qYXZhc2NyaXB0LA0KcHJlIC54bWwgLnZic2NyaXB0LA0KcHJlIC54bWwgLmNzcywNCnByZSAueG1sIC5jZGF0YSB7DQogICAgb3BhY2l0eTogMC41Ow0KfQ0KDQpwcmUgLmdvIC50eXBlbmFtZXsNCiAgICBjb2xvcjogI2ZmYmM1NDsNCn1QSwcIw2jj3l0JAABdCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAc3RhdGljXGNzc1xsaW5nLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDojZjNmM2YzfQojaGVhZGVye2JhY2tncm91bmQ6IzAwOTNjNDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzo0MHB4IDAgNDhweCAwO2NvbG9yOiNmYmZiZmJ9I2hlYWRlciBhOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy1tb3otdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy13ZWJraXQtdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzfQojaGVhZGVyLWltZ3t3aWR0aDo5NnB4O2hlaWdodDo5NnB4O2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe2xpbmUtaGVpZ2h0Ojk0cHg7Y29sb3I6I2ZiZmJmYjtwYWRkaW5nOjA7bWFyZ2luLWxlZnQ6MjRweH0jaGVhZGVyLWggYXtjb2xvcjojZmJmYmZifQojaGVhZGVyLXN1Yntjb2xvcjojZjNmM2YzO21hcmdpbi1sZWZ0OjEuMmVtO2ZvbnQtc2l6ZToxNnB4fQojbmF2e2xpbmUtaGVpZ2h0OjkwcHh9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O21hcmdpbi1sZWZ0OjQ0cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiNmM2YzZjM7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNmb290ZXJ7cGFkZGluZzozMHB4IDQwcHg7Y29sb3I6Izk5OX0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2dvLXRvcHtib3R0b206NTBweDtyaWdodDo0MHB4O3Bvc2l0aW9uOmZpeGVkO2NvbG9yOiNmZmY7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjhweDtvcGFjaXR5Oi40fQojYXJ0aWNsZS1jb250YWluZXJ7aGVpZ2h0OjEwMCV9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHN7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjM2cHg7LW1vei1ib3JkZXItcmFkaXVzOjM2cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjM2cHg7bGluZS1oZWlnaHQ6NTZweDtmb250LXNpemU6MjRweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDo0MHB4O21hcmdpbi1sZWZ0OjhweDtib3JkZXI6NnB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHMgYXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzOmhvdmVye2JveC1zaGFkb3c6MCAwIDRweCAjNjY2Oy1tb3otYm94LXNoYWRvdzowIDAgNHB4ICM2NjY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA0cHggIzY2Nn0KI2FydGljbGUtY29udGFpbmVyIC52aWV3c3t0b3A6MTRweDtsZWZ0OjA7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6MzBweDstbW96LWJvcmRlci1yYWRpdXM6MzBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzBweDtwYWRkaW5nOjA7Ym9yZGVyOjRweCBzb2xpZCAjZmZmO2JveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy1tb3otYm94LXNoYWRvdzowIDAgMnB4ICM5OTk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggIzk5OX0KI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjExNnB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxMXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjojZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2M3B4O2xlZnQ6LTIycHh9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbiAudGl0bGV7Zm9udC1zaXplOjI4cHg7cGFkZGluZy1ib3R0b206MjRweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aW1lLWluZm97Y29sb3I6Izk5OTttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZy1ib3R0b206MjBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZDt0ZXh0LWluZGVudDoxZW07Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIGFydGljbGV7bWFyZ2luLWJvdHRvbTo1MHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWlue21hcmdpbi1sZWZ0OjB9I2FydGljbGUtY29udGFpbmVyIC5hcnRpY2xlLXNpbmdsZSAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tZXRhe3JpZ2h0OjQ0cHg7dG9wOi0zNnB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC52aWV3c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDtib3JkZXI6NnB4IHNvbGlkICNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAudGFne2NvbG9yOiM5OTl9CiNhcnRpY2xlLXBhZ2Vye21hcmdpbi1sZWZ0OjExNnB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVte21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojOTk5O3BhZGRpbmc6MTJweCAxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweH0jYXJ0aWNsZS1wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kOiMwMDc5YmN9CiNjb21tZW50e2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNjb21tZW50IC5tZXRhe3JpZ2h0Oi0yNHB4O3RvcDotMzBweH0jY29tbWVudCAubWV0YSAuY29tbWVudHN7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjB9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbTozMnB4fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnttYXJnaW4tcmlnaHQ6MThweDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHh9CiNjb21tZW50LWxpc3QgLmMtbWV0YSBwe21hcmdpbi1ib3R0b206MH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTpibG9ja30jY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9yOmhvdmVye2NvbG9yOiMwMDViOWJ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseXtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2RkZDtwYWRkaW5nOjNweCAxMHB4fSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9CiNjb21tZW50LWxpc3QgLmMtY29udGVudHtwYWRkaW5nLXRvcDo0cHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2t7Zm9udC1zaXplOjEzcHg7Y29sb3I6I2U2NDM0NjttYXJnaW4tbGVmdDoxMnB4fQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtc2hvd3ttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LXRpdGxle21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0bzttYXJnaW4tYm90dG9tOjMwcHh9I2NvbW1lbnQtZm9ybSAuYy1pbmZve3dpZHRoOjI2JX0jY29tbWVudC1mb3JtIC5jLWluZm8gLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MH0KI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjcwJX0KI2NvbW1lbnQtZm9ybSAuYy1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O21hcmdpbi10b3A6NnB4O3dpZHRoOjUwcHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b319QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDowfSAjYXJ0aWNsZS1jb250YWluZXIgLm1ldGF7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW46YmVmb3Jle2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9ICNuYXYsI2hlYWRlci1oe2xpbmUtaGVpZ2h0OjUwcHh9ICNmb290ZXIgc3BhbntmbG9hdDpub25lO3RleHQtYWxpZ246Y2VudGVyfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaHttYXJnaW4tbGVmdDowfSAjaGVhZGVyLWltZ3tkaXNwbGF5Om5vbmV9ICNjb21tZW50LWZvcm17d2lkdGg6MTAwJX0gI25hdntmbG9hdDpsZWZ0fSNuYXYgbGl7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NDRweH19ClBLBwjPw+rWnCoAAJwqAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXHN0eWxlLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9iZy5wbmciKSByZXBlYXR9CiNoZWFkZXJ7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9oZWFkZXIuZ2lmIikgcmVwZWF0ICM0YzcyOTg7bWluLXdpZHRoOjEyMHB4O3BhZGRpbmc6MzBweCAwO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjUwcHg7LW1vei1ib3JkZXItcmFkaXVzOjUwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwcHh9CiNoZWFkZXItaHtwYWRkaW5nLXRvcDoyNHB4O2ZvbnQtc2l6ZTozMnB4fSNoZWFkZXItaCBhe2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0KI25hdntoZWlnaHQ6NTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym94LXNoYWRvdzowIDAgMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O3BhZGRpbmc6MCAxOHB4fSNuYXYgbGkgYXtmb250LXNpemU6MTZweDtjb2xvcjojMzMzO3BhZGRpbmc6MCAzMnB4O2Rpc3BsYXk6YmxvY2t9I25hdiBsaSBhOmhvdmVye2JvcmRlci1ib3R0b206NHB4IHNvbGlkICMwMDc5YmN9CiNuYXYuZml4ZWR7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTt0b3A6MH0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2Zvb3Rlcntjb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6IzFjMjQyOTtwYWRkaW5nOjI0cHggMH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsZXR0ZXItc3BhY2luZzoxcHh9I2Zvb3RlciBwIGF7Y29sb3I6I2NjYzttYXJnaW46MCAxNnB4fSNmb290ZXIgcCBhOmhvdmVye2NvbG9yOiNmYmZiZmJ9CiNmb290ZXIgcCBhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXt3aWR0aDoxMDhweDtsaW5lLWhlaWdodDoyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnZpZXdzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnRpbWV7Y29sb3I6I2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIGF7Y29sb3I6I2ZmZn0jYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTQwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZXtwYWRkaW5nOjhweCAxNnB4O2JhY2tncm91bmQtY29sb3I6IzRjNzI5ODtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjJweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoycHh9I2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxlIGF7Y29sb3I6I2VlZX0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxOHB4IDI0cHggMjRweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZve21hcmdpbi1ib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoycHg7Y29sb3I6Izk5OX0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLmZhe21hcmdpbi1yaWdodDo4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuc2hhcmUgLmZhe21hcmdpbi1yaWdodDowfQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+KntwYWRkaW5nOjZweCAxOHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+c3Bhbntib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmlnaHR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJpZ2h0Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZHtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC50aW1lLCNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAudmlld3Mgc3Bhbntmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjQ4cHh9CiNjb21tZW50e21hcmdpbi10b3A6LTI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjI0cHg7YmFja2dyb3VuZDojZmZmfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0b30jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxOHB4O3BhZGRpbmctYm90dG9tOjE4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1yZXBseXtjb2xvcjojOTk5fSNjb21tZW50LWxpc3QgLmMtcmVwbHk6aG92ZXJ7Y29sb3I6IzMzM30KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3J7Zm9udC1zaXplOjEzcHh9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhe21hcmdpbi1yaWdodDo2cHh9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YS5sZWZ0e2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI25hdiBsaXtwYWRkaW5nOjAgMTBweH0gI2hlYWRlci1pbWd7ZmxvYXQ6bGVmdDt3aWR0aDo2NHB4O2hlaWdodDo2NHB4fSAjaGVhZGVyLWh7cGFkZGluZzoxN3B4IDA7Zm9udC1zaXplOjI0cHh9ICNoZWFkZXItc3Vie2Rpc3BsYXk6bm9uZX0gI2FydGljbGUtY29udGFpbmVyIC50YWcsI2FydGljbGUtY29udGFpbmVyIC50aW1le2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjY29tbWVudC1saXN0IC5jLWF2YXRhcntkaXNwbGF5Om5vbmV9fQpQSwcIqnrsLo0oAACNKAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGZhdmljb24uaWNvAAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAAAACzfgfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N+B9uzfgfbs34H27N+B9uzfgfbs34H27N9B9uzfgfbs34H27N9B9uzfgfbs34H27N+B9uzfgfbsnwH1q96B8etfhittZNKkLqCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qDDf+6hhf/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+6gQj/uYEI/7mCCP+6gQj/uoII/7qCCP+5gQj/uYEI/7mCCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qCCP+5gQj/uYEI/7qBCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6ggj/uoEI/7qCCP+6ggj/uoEI/7qCCP+6gQj/uoEI/7mBCP+5gQj/uYIH/7mCB/+5ggf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/vIQF/7yEBf+7gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8gwX/vIQF/7yEBf+8gwX/vIQG/7yEBv/AhwP/wIYD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIcE/8CHBP/AhgP/wIYC/8WJAv/FiQH/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WKAv/FiQH/xYoD/8ePDv/Mmif/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yZMX/9avU//hwHX/6dKf//Pnzf/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uNAP/LoD3/8uvd/v79+v7//////////sqOAP7KjQD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44B/8uOAP/LjgD/y40A/8qOAP/LjgD/y44A/8uOAf/LjgH/y44A/8uOAP/LjgD/y44A/8uOAf/KjQD/y48G/9i5c//6+fX+/v///v7+/v/+/v7+yo4A/sqNAP/LjgD/y44A/8qOAP/KjgD/yo4A/8qOAP/LjgD/y44A/8qOAP/LjgD/y44A/8qNAP/LjQD/y44B/8mNAf/HjQj/yo4D/8qNAP/LjQD/yo0A/8qNAP/KjQD/y48C/9CaG//fvnH/9e/g//7+/v7////+/v7+//7+/v7LjgH6y44A/8qNAP/LjgD/y44B/8qOAP/KjgD/yo4A/8uOAP/KjgD/yo4A/8uOAP/LjgH/yo4A/8qNAP/JjAD/x5o0/8Gref+oi0j/zaZO/8WYMP/PnzH/1qY5/9qwT//iwnf/8N+5//v48v/+/v///v7+/////////////v7+/7ySMr67ihn/zJIM/8qOAP/KjQD/yo0A/8qNAP/KjgD/yo4A/8qOAP/KjQD/yo0A/8qNAP/LjgH/0JkY/8mjTf/Qxq3/5eXm/6alo//p5t//xL6x/+Hayf758+P++/bs//38+f/////+/////v7+/v/+/v7////////////+/v7/lZONlJmPef/mzpn/4L1q/9mtSP/UozL/0Zsf/8+WE//PlRH/z5UR/8+XF//Tnyj/2atD/+G/cf/t27P/0MzE/8PDw/7q6ur+tra2/ujo6P60tLX+2tvb/v39/f7+///+/v7+//////7////+/v7+//7+/v/////+/////v////6XlpaVkpKT//b29f/9+/f/+fTn//bt1//y5MX/8N+4/+7csv/v3LP/8eG7//Xpzv/58+T/9/Xy/8nJyv+vr6//paSk/729vf+UlJT/ubm5/6enp/+xsbH/0dHR//z8/P///////v7+//7+/v/+/v7//v7+/////////////v7+/6mpqZiRkZH/8vLy/////v/+/v7//////////////////v7+//7+/v/+/v///v/////////h4eD/urm5/+/v7//s7Oz/19fX/8bGxv/e3t7/9fX1/+rq6/+4uLj/8fHx///////+/v7+//////7+/v/+/v7////////////+/v7/m5ubZ4ODg/Dt7e3///////////7///7+/v7+//7+/v7//v7+/v7+/vn5+f729vb++vr6/ufn6P+3t7f/7e3t//j4+P7d3d3+2NjY/vLy8v7+/v7+2NjY/r6+vv74+Pj+//////////7////+/v7+//7+/v/////+/////v////41NTUjcXFx2Obm5v/////+/////v/////+/v7//////+/v7/7Q0ND/vr6+/rq6uv6+vr7/0dHR/s/Pz/6srKz/Z2dn/isrK/8jIyP/W1tb/6urq/+9vb3+5OTk/uXl5f/a2tr/39/f/vDw8P79/f3//////v7+/v7//////////o2NjSd1dXXa29vb//////7////+//////7+/v/h4eH/tbW1/srKyv/j4+P+5+fn/uPj4//Jycn+vr6+/re3t/8sLCz+AAAA/wAAAP8GBgb/hoaG/9fX1/6+vr7+vLy8/8HBwf++vr7+ubm5/sfHx//x8fH+/////v/////////+4ODgJISEhNnFxcX///////////7/////5+fn/7W1tf/k5OT///////////7//////////v7+/v7g4OD/tra2/66urv9ubm7/WVlZ/4ODg/+7u7v/vr6+/+Tk5P76+vr//f39//z8/P7w8PD/ysrK/7e3t//w8PD///////////+Hh4eAXV1d8aOjo////////////vv7+//BwcH/wcHB/62trf/Gxsb/+vr6///////+/v7//v7+/v/////W1tb/xMTE//b29v/29vb/3d3d/76+vv/k5OT/8fHx//7+/v/+/v7//v7+/v/////9/f3/zc3N/8PDw//7+/v//////4aGhviWlpb/i4uL//f39///////7u7u/6urq/9SUlL/ExMT/2dnZ//R0dH//f39//7+/v////////////Ly8v+4uLj/7+/v//r6+v/AwMD/nJyc/1RUVP9ubm7/3Nzc//7+/v/////+/v7+///////09PT/t7e3/+vr6///////7+/v/+zs7P98fHz/2NjY/v////7n5+f/k5OT/xYWFv8FBQX/Nzc3/5mZmf/7+/v//v7+//////7/////+vr6/8PDw//n5+f/8/Pz/6ysrP85OTn/AAAA/0VFRf6YmJj/9fX1//////7+/v7///////39/f/ExMT/3t7e////////////0dHR/zMzM/+Xl5f//////+fn5/+zs7P/aGho/xcXF/86Ojr/yMjI//7+/v/+/v7////////////4+Pj/vb29/+vr6//w8PD/s7Oz/0xMTP8AAAD/Dg4O/oKCgv/6+vr//////v7+/v///////v7+/8fHx//c3Nz///////////+4uLj/GRkZ/z8/P/7f39/+9vb2/r29vf/b29v+xMTE/tvb2//9/f3+/v7+/v////7////+/////uXl5f65ubn+9vb2//Pz8/++vr7/wcHB/nJycv5+fn7+4ODg///////+/v7+/v7+/v/////4+Pj+vLy8/ubm5v/////+/////vHx8f+ysrL/hYWF/ouLi/709PT/1NTU/729vf/5+fn+//////7+/v7////+//////////729vb+vb29/9bW1v///////f39/8fHx//Ozs7/+fn5/vz8/P7///////////////7////+/////9/f3/65ubn++Pj4/+7u7v7Jycn/+Pj4/v/////y8vL+iIiI/pubm//09PT/yMjI/729vf7n5+f/+vr6/vz8/P76+vr/5+fn/r29vf7Jycn/+vr6////////////8PDw/7e3t//Y2Nj+/f39/v///////////////v////7p6en/t7e3/uLi4v/x8fH/jo6O/nNzc+WQkJD+o6Oj/6CgoP5+fn76Tk5O4ZycnPvh4eH/1tbW/r29vf/AwMD/wcHB/76+vv+5ubn+1tbW/vr6+v//////////////////////6enp/7m5uf7Dw8P+39/f/+jo6P/k5OT+zMzM/7a2tv/d3d3+6urq/4ODg/9wcHD/q6urP3BwcGZFRUVpSkpKZ4WFhV+MjIw4bW1tm3d3d+utra3/2NjY/+Tk5P7l5eX/6enp//b29v7////////////////+/v7/////////////////9fX1/9bW1v/CwsL/vb29/8HBwf/R0dH/5OTk/8bGxv99fX3zY2Njzmtra9IREREA////AP///wC8vLwAAAAAAAAAAADOzs4LdnZ2RW1tbaN7e3vrmZmZ/7e3t//X19f/6Ojo//Dw8P/29vb/+vr6//39/f////////////////////////////f39//q6ur/3d3d/re3t/+Ojo7+fHx84IeHh3K8vLwXcHBwHcPDwwCAgIAAICAgAD8/PwCYmJgAxsbGAJeXlwH///8AysrKDampqVN9fX2OcHBwxXt7e/d3d3f1gYGB+ZGRkfyjo6P7s7Oz+7+/v/vFxcX7xsbG+8DAwPuzs7P7nJyc/IGBgfp4eHj6cXFxzImJiYu+vr48////BaqqqgH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAAAAAABQSwcIqXMT8L4QAAC+EAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAc3RhdGljXGltZy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAc3RhdGljXGltZ1xiZy5wbmeJUE5HDQoaCgAAAA1JSERSAAAAlgAAAJYIAgAAALNj5rUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI2RTRGQ0JFNTVBQUUyMTE5NzAwQjU5OUUyOTNFQTA3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA5NzBGM0NFQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA5NzBGM0NEQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkFBQkJFQTE4RkI1RTIxMUJCRTNBQkY0MzkzOEFFQkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7MjgrrAAAoI0lEQVR42uzd7ZJkR5GtYXVSwP1fKCMQzBwDhHR2aXU/9SoKww5Dbh2Eqn60VWdl7ozwiPCP5cs9Pn399TePx+Nvf/vbp0+fvvvuu1//+td//etfX15ert9/9atfffvtt9dfr99/85vf/OUvf7l+/+qrr/bf6yPXX/fL9dm97frlevH6+PUQL17/7nXv2ZOvX66v2+t78/X7vvf777+/Hnu9sjdc/90brhevv16/XK9cX3H9vmFvYNdfr/fvT9cr11+/++Hn+uX60/X6XtyT98F96vr3+uD1y/XKNfjrndcrvnRjvl7xkevFSWNvuP7dmwntesj1huudE8Uefpec//CHP00EG4ShXL9sthvH3jO5TxbXv3vEZrvvuD5y/fcaxPVfs90b9inj/uqHnwndwycmw9jH9+aNe9+4lbhenHT28Q11I9/CX2/+6svP9d+t7l7fMzdBg9kHN0JztAW3BvvvRnt9fDt1kj2WfLthz58wb5LzqyyucW/yk+l2PdFMlLbwJrA37Iu7Ntcr13Ovt20rWYAdAu/voO24jWTfu8lcPz64p+1TRjXJfvvDzx7rZBCfrbC37RendqLcYu9MO+X7ky/amHdidsJ2mK4fmmCT3UYx08n9Pjl/+uMf/2fiu9705z//eQOydxyj63Wqw+4g2Y34Guj25kS/Ee89PrKB7v1bkn2L792BoG/38cl3n9pkqqv3HEI05z1wT95oN7Y9ZCNxjCzYjuDOur3lSye461HbfJSk791Md+h9yyXYqaU75PxgKq6f3/72t9ffdmavZ12jvN7NdFX/EN92hJ3oDeZDOWxfb/cxIdWW+16vXz97ZXKcmdxqXc/cqGxMIt54JqnN83r9Ehm5zKKwjluzPu16J22/6WxqPtvTObHuUdSMwU+q1wN31G6S86st/Acbh+L6/svP3kAdbc9OJ+yhm61p77Bfj3IsnC1ew5aQVZ/13p+Odd0XbT68Gypok58Bq23bBnfu99UT0AzkXjGLfWpP3j6weHvm9odXpvr2vfsvpbrXO9Ony/nT7373++v/tT17FnXhHFBfe5EQmV++lrnZ8sa9yVODe+YmT8ttuzlMVB+3aCKeQ+to8vdIfOPfpMx5v08QFZNJbWnrju0Y7a+mOQtnu3TX1sV1ZLcn7pDzp2+++e+fYA86Q53tL80NvknOr4qUyHZu+FENpwRSexw5bifaetVgjLBDNnu276rbsl+qWrnp+9kZ2qeqS52qbfPFkVtL8cBWaLLr/ph0hF8zxrOLe+dMALNKXVvm/Vyf2hOEg5epm3DEGw1Any7nz76sqGW/c4SuR2wyGwH3d0ti11/jnscxaW5/bXn+8sOPmJ0jw1AfBsNRs90YcKH3dB057qvpro1qT9t6czvpOuu68V8GaWd6Y9t4rmFvGJvR/t0ai9mvDwIuhBm+YkNtzHCHnD+PePPZ/t2XbbimKmyqTCcCfmOlf73netT1J46ijbwJ0ELz2XiG++u2/yZZn2WOHJfaL/PNJju+gAM04Vb6jrLYdEr1rz/8iF420x13mnnvF1fsr/v27dR9HEAjdLlJzp/+67/+QC9P2256XPBNGBIG1BDtsbeH78AP3AhAZQaxsbL524+bW0GAejoetecUWtvyHxqMG8yq1UsqbMbMsLt7bNE4blRxGV/EcEzuYjvG8iY5v4AMfN8G4Su3fxkSxoCiq43ltgirK2Vb+/rIpYI4LNutr2r9y9E0pO++/Ez6JsOy0of2wdTpls1qbdVhPXtz3Q0ua2HV67OL4cTR9RLZJIeYBLqBOM83yfnBxWA8F4U0tORWHB7HZnUtBsiAiSKawloO1mQ3QzJfYIcPNj2hTJeK9qYJGZ4qnGpFapN3QL71xetZkNQ0/8a2V/y1kft2G/U+zb/3b7Lbl9MNvLCb5PwGUdJpm0b9fip44iZES0JZcSUgI3tFHDoLsS+dl0U0mwljU0/SwaJRuZ3VlntIze1kB8mbv9qg087YdAYpzJHhZzkc4gQhx3YqIRxna1vEIG+S8wvVb7jEOq+a2aSL6xzvnRVu0ZbBadXs13dP3QNRqy3lVkxjr9OxRDmnYI/a5qD62A9nzulZzL4TuWFvzShG7xTUC70d/cb7TC80dTLZV3fZmLSny/nBm+f5TBtwuD2L1dkG2ac2PX4whdAkyxYMQONpEwrIw5mDVtuDpLy1vOwTBG7SKXgI7QQv7PRLQ1Kzm7X1a3TPNPp2cPM1qkunNbHQ9MIm62Tzxe6T89v5mJS9G3hoB21KOxnFi0H+Dao2h0ZXm/CkYMcNDvURzg6HbedmupeHvdFy5ECpzvfGM6UN4JbDEvhTg3K53PrNfTvDydgJ5qp4gjds8E7nDKRdeJOcH+a8Ecv77ABJoTWm2e97ur1D7WyH2ndbjOvceLGpE45l43EolG+Zqtm2Nf+CF9L3X+Vnj5W7p94dMrLjKC66N6kmK/YiG7lfOCAzkJMv8GhyY01vkvNrXPiRcPgJwN697Q45f44rl9zanw+glt3iMS4YKO6wMW132LbXe653yqWR0bDE61yyEyz/xjpAjmTZPPZSNCayHKQCS9sGt+r7Rg7UzpCc+BCsQUgbEiBQeMNJaeQqmDnCm83oV19+IIs3yfmFE89yTrNx9jaC4gKzJXtQNYboqlbKKyyEBQOJ1dESU07W5sOoCDD4L8AtEJSQY6dwH2GSaSRu8xQAn8UzGezNjrEsA6GYTs8cu1BI7A45vxIvBq7X0d8BmrwMut9Ud+CA8Fm4eTTQTjt3r4iWgLbWY+/pavFR6TGYJycNA8OBKJmFKivsR+k5Uk10UGIiHxGhQELIxPlsMCpa2KrcJOdPf/rT/5nCsfiF7IDCGyXrVayIKKm4D8T1PeJKsT9fzswMGJB3S5XPx2UqiJ4dvrbSjgVlRUD85ubTy0mxhZeymF9H20j9O4uChx0p2OnSW9xdX7dd34zP3rn/7thhpHHiYXJ2khkJADio4hZrMNsMK645f7qcH/yIzeE66VyyroRobO+cKqO1pmGAePzjrcos2Sw5X6NmzJmoydlaluw7ZHyS2kjowLkPMlZ1GQQSNgSoeuZTeHB9cNBoVdb2yiLC8o7o4Z2t65cGrxvP1nWb7D45v2btt8hL2okuh3Xx2uEUO7zbvB8W9J+yoDfJ+dWdkQMz7UJQzXQ7FqXB78WNvqRKARzGUYlGszQUbDmDAqZKDVSNksv27HRyCGHlM7o7ZwtSt8YFFvbM0uAbIdDhW4b9IuWyOaLGQBBhhDD9LdVNcn6pr8HB5aajYQmY7Eejhw02mAX61Q5bjzo7TircRHhXFhOjyFLWgxDDlevHoxGb2iKC1D0Ka6ZYjzk2NUibVXlwTEQ7RGHl7pPzy0FxLDKC3DCjIniC+BWkKDeiqR/uyXb6cAfY1f7LR2B76OEpk4mYBepWbSoON5C7K7bjPZakU9RtKCCcz8pRp4iTkskYWTgWe+BUoj3R9NMdcn4xDVnjfdk1Ge5D8fIeshLRNj0jqxsi5y5M5pjRGDUt17+XNOedVo7MjPCAHi5rlrN6nFoJXmd3xCe7B/IAsyY45wa+hZ+/EeLnF/tt0Yi1fLqcH05leagDBZiNHeHtrAM23O9TBXZ0M5lFpRs20UsiP8Bma1xEaUCyQRXEymlyEPe0Jc2rP235QnfwM8g1oIdzIUconuOCfoa4vqxfnVt6D1/rJjk/puIMq5Gm3AoyMmhqodXeCdZavLIJExNAqNj8ezL1YX42MZTfN8LdFyCbHZJAUBrInZlnDx1tvvDvArByy7NGCiFajLEosGVQ1hKF0FbYIbNvbpLzY6VWhcwH+zo0NDIApSATszEMd8FfUwQke9BweeqeSUYbogiSaJaxsi2qfPZApL/q3qYRJMFbMlhXa7tHMnYHfcdIWoqbXWalberQM97XsLfhbpLzY/t0wy2to/T1zcqEjUCkLDxqRqnFduXC1tuEqO1Py1GIavfBluyyfMIMFKMF4IeLdISezqgIARUFsLeDuGMt7NlRxtfaG66/bldBl1rw1u8CVd8h509ff/3N9hr+OZfBtmKTyxuQ6KE9wPMz0bA+VBSzNY7yRCRIW8PNKA4v7uEu7Cn7uFU52GA1zE3x4GVZPCsqzenbjWfASgG5oS0YJD2UYFVn+ulyfi2LAf2ZpPIAtSCkiQgrscKJKuxSdgyJ0zy+a3ZCIhSo36xY80G8IWqki1SyUNdJTQyUZAJFj6tQhp50JRp9iusbdx9vNlo/ckx3yPnRavFJpA6FuHVqqvXmJGiIZUCrsd6Ih97+3VI5J5WLZWFwQVtOzXRtjfdk4XBp/5K63FGsmUkH5s6BHFWnNrgcKlEHK4Dhgily8MHpifvk/OBxQdnLzaVtOLLyzt4PVSnPBwR65N8xQT5XqEYliqlhbC1C818Gvz5bCcH9L30ANxBUsHlCacF4gST7Rrr/0l3s0/tCNe6imm/Y001y/pzH6t6ZDRAmFxDBTlC24+w37JUjHGGwbtWEuM27t/FZ+OgNJDBfZgv3qSkTdZS0SosZuPKMFpmaI8aGpVKL1LAVALvHouibLxvGlqtErFm5Sc6f1neG417CPAvRuh4OYetvi8gMjG+BSKtbgVJQYOHXf3a/hhaZPlnOrcNreER310066DB8uWZhHDgPbzQtf33wghZClJ2txEIKXrzYHBCzOhPiUCIMdCSU5IFDUqdFGDrCKuct0vKgOOY8Zynolgwy/HfI+S3ZVNXP+SZQLK728cBRryna3KhsHIKmN48MwzbU/PIjF9OjfHCrRdB7v4YsRcNti1Z161AgcdESe82EWoiDA85gH3z7nfvlJQTsdt7RXuC5cn4NKpwSUEUbbLWQjjuken0Av2zqUa8lMBDCcwvrfP8Soppqo+fK+fMuUwosAqWjykgH/Nti13MXxR+wC0yvHrb+MpKF3XdyC81uyylC/Tl4Te8h4fOJ/DKXj3k+aCxe4d20HwaMtAkQKzp3lHFtxUiVjfN6k5xf3ZmDWVz/rSRzyGfBTHaCylKfPd1lPgehu4A9TwcqXaJGWfctyQCO/CzcsRZsPFfOryTEYjxbZCR5gttB5umBz/l1pd7WkavL5+tb7MOLU0bLZW+isS5lg2h4VW0tVdy6QOQBnueykqyREkMeR3k0IHvxqDGwc/+AVGEPPV/O++6B3zMAbUQht9LSCJtXw6yCVeT4vhEH80NGQq4lBIigNYKdv2DA5iWp/SJSPsrAOPpFIynPgzZgmk6JgTXbtT+1PqYlBquwmUiv03mfnB80njl87q/3A62Iq92OfqWRYRwVpJdZFhgAwGa6G13w+tpKRqmtfhVtRLgP7hdcI/4LEqlf0BpYX49ty0lAzESGCrxFnQKXW25Vg5o62Mq+8cg23CTnzx0vPjqO/usdR7sGvsKo7mtp9WjYWJaR2p99cgoa4vBmS7/AZpuJokhCLMC27p3f50fkrl1ns06ISWJqBC8qekekcUsdFiysuSQbjE5N4vGWum830OScl8Nt3tLiXnDEqu03fUWdN8n55WhKfKDpAsm2u2psC07syWtulptuY9qJXrd4R+K7JDO5i0vtbJ5lxLIcONdW5e92OxHGTRbtdvLWYfALMlB0hhpHIn1fZdBawEbAN8n5wWgZ9FQzNo54gJafetGPyKBLG6mSRAKzucrz3PM1gMLmFgujPAmoeRzjulXROdYMoR7ZeK3SQy0KXCJXuULJieXjAl3FORqlbvwrexDX0ur3yfmBt3L0GxNpUkSt65ngdAeoYR/vyJFq+VLnrzRi78eDFsjTTgw4TkYbSCyJgQlX6jf2G5M2j3w+hW49KlHKVXEIMCocxNkCp/CgicogWrla0Dvk/NqP9KME4olFhKAWpU8YpDfJ+aW9QaS2QU14sfpesT0N+IyjrQAPmgLR8wMLJ05POk91LrheW4ARZ6mRKRlBuh4pDdKbiXQ0W4/PkrXLWtF5MVxNETDagW5lCJq943WXnGc/sL7QPlGAOGlKqLtZ2krUG2qxmyvpZ6fiW9PMBjhh5AhqkUNmY5oSaZOeEoKhZUZIoC1hOYIBQ7U2S9OXNdMOJM0RQojI4T45P6SPD7rDRik+3ZaBLS0LAc5vsxHvaecszE/qaLyHdnBkGq/fr3WCIHNiG1C2Gl3mxY4pBXtLPqU9W1sWoW0OitTaVEqhjYUa3WIUtuAG6eYo9LlPzi84ryUxtLk9VdaefWpTC1rOXZxCa6cOVY2CIRigJJ+Ywe+Hg3BUQmsyqzd5T3+bFHTypWWKIuwMRQ7zeEsMZzWHL2tMyqQ5WArnDjrFfXJ+TfmqSO7lNi0DaG3xaHpT0yji0wZiWEBXk2H+bbrHuNu8zskrU6iYQAuUjuZ1g4kVIZRdUfTHtuC+a5VB5YL0Cmq3FbETWZrhAQh7sZXfz5Xz5w75Ld0nIPVXreU0E4rYF/SUkCwtKs9nzeZQCahLxIOiieH8VfiF89mMYxMC/1bps6MS8YlyfsijgtiP3hJiu6JcEtw05MG1xf5v4dnWbPNcY2vsPwgyE8halGliRcUSgOM6t9vFssSe2WYHRWRYvmUS2rSyzWukGtr5uQ6aPXpAAdIpd8j5ATpRU4mFzlyBjDvzHaYWMNTOgU7EyJqcwSyglLugpWpk36WpORGzIowER1eIokUZjB/q4cazpiobwJADiJW+KnRASkIO7yziCmQX7N4i56+//uajlfb7Vto4H7oSbO07F6yk3mq3f9uatuTSO+T8aJ2chS1Vy1bqNQMOQe9wqNKTkJPe1FNGYk/aoVS7FqcJGNqtdTMR8MGvOXLgq0nQyRApc7La3/64Jw1JdcuPwqrytHe9HFTVfbUszft6xOfK+Y3qebQp7JkFGYtqbahWoGHtqQNyNZT2BHBhod6QQLqFsWl/QLPax8XI5Sk1L8g3kb5ox4E9pFS2LYyQwPJQd1ViNatbJzwPEeFe2URaFHGHnN8u/iKC3uzZPlNtj9Kwxtv4/QrpVBHIfLbVhIO1Y1ru10FoR0Ip64kZc9rsG2mEegr7K/ht9nIIjhrgugn7XpkQ7jF30VI1vOm2ayvb++T8KGO6vDxmtnWtG+s4u73xjT1o5oxyP4pgxem9MrBYoki8HnwvDJB+Km7JZsgcHZ1Fi1YXr5JXkeA9qjtVjW+OI8KIZUEwrafBT2zu8yY5Pwh3ORfVOkqf2zsNKMVZxziq7ZWc28/2OJPQdr84BCXMQ7AOKvs+K9rlhsBImy6WIC1EfvCp2hQbIK4TtVhQVs9OakGdQaoNbmt53dzvk/ODkZhnv69Xb649rZ0O220xv1Zh5T6rKxBNWwnJOQswws/OFl9mik58djC6SraognrjBX1BzjjAnPv6F/Cwpm2v8VChR08VPwgJi02lHXo9TBGym+T8yiOlu8sVKMWhub2DQduMXRHOZrR7V9h7ioPyM+j7ezxwx04xdG9E6D0S2yjH5TQMj6CwZ6U9d2+tKilU9Fw5PxqcHv3PdpxVdLZpRLsGtGB1f6rB7wVzvZJYHaXKICuKoNAEbJuWNDWj2JWsDzL8PEYeYHM3Gii1/wT3SuTHrQVqt29xySXHjmGDOV93yPnRaz70uVYwB5JujW6rfppkAK/Uue99FGVglkc78elIITctGmk97T6I/QDBOSqYN705I1brWs76Ne0TidZ3ZJfqfdSwteLVfvLKlq2U2vvk/HaRHhdW5ISw1DRjJwZKwLHEm9bLFY4F34LybbPj1pXKoAXTgcY5c1setoFZksPbFx33yrXZ1FETOruL6duMoGrCw5u1NgrksBrdeaAf931y/tynfWyq9+04Gj5jjG9H9w4R4LUxbSi6YnFV2ggOh6Upfsyl+l07W73AD1yCASYEFk22zwK/tM5U7/pqGbdGTPMY1b7g8rgugyNtaq0GAcFzmO+Q86M3ZbTgT3DaMqJiBwXSbJzmFngKtlL7UE40Ndqcgomj96Rtwdwb0nbH5NVL5TqLjr+sYgapCSNqVglH+/lv5eaCiiumxmkRMIVuVHVi75Dz5yrfj1t5/99v5W1b2/7bbkblfWEL3CTn15RvwYJ2R4MLtBASveAohOxHRHJtKIqTz863TqAtBuzilk8q5vuZ1iS3u81z5fxaqP0L7D9Rv6YCsgMK/qkBPshnk5jb8exXOULenCjzDjl/+v3v//gvqoj2E+x9xzqxwRGKCrZ9di9020ZGVrc9qzahUNL3bXoMoPHV5T4dVyOp6dXZVzTW7kT9lrkV/+yRIoGny/l1CT+s2k+wZdtP4blyfrSddF01RT3HTcpoIL6pN+u2mz9FBBvkJe9TvOcDVpZpoveQo7b9be29CH8pJNZy33aqL2vhaCdM6bUSqtct7bBKoo3sui9qb8v2BRMT3yfnx3uUQXdslUfNFrVeAg4iICuBrBVM7XMNQ2q3LNe7o+U3A1fCTzt2OeJHD0hlNBhpTg+Urp2BSuot3bQFpNXPwBFJdv36pBtlqpf8uk/Oj3auBVGSQnMooDwU47YDmDTBXUcZCmGpz+PFiKiqXhr8wjjwhiFqAMPd8uKadNCGW0Qpsd5dXEL+lATYgZKETrSte68yO8qgLJVor2SfO+T8Vv3cC+AkXUmK9Acztm5RTex8EIquTgdwq+4ftLBmDF4FVpUlrsfIRXx/g6VDs5Pt1CobwzwrJ1H40SqqXoPZq6AoW+0t60Yq3oCA91rSp8v5AWtukh3jqK2p2kYRst6Sxl6esJ0ypNQeBGghZDR1p+NvG+303qVjqMKGXhHZRj7AEU7KBrmLMRtm6dY229a7Y5te7kWibRpLs7UVkOC1edA75PxoVaYd1IKoGSorP4XjVgC3RPailxYiTwlM3aHc2/X10UuBVUQiKqCBB5Y2Rz+bd1TZt+Nja1nUyij+a+cXvkY7YqN32BCKPaV5qc2NXBu2b3/8c4uc18zyPzimlgfY+VNGU8e9fZtvunFXP52ny/n15rRe9gECL8rF5vfzzVPX/vdylNZX9BYWqVREWMGfutkacMexQSRwbtK0x61QL4I/JHvogHZsbPHYE6sget/tc+X80lNSd65gINnV8NAJ4pVmA/Qta7/61r/bie17gXy3t2GwQVkBj41z1WMIDQ37aOGm2qaXBeJ/tqJKzu9tswulc78lDdFq0Oah6r7eJOdXjBS5GD25CIJTbBdQCyXs9iYYVIYma46enHIrlKprBtrXnGQVGKB0VjuV/vX+ElnSf39LjUnpRwr4VhsmqaSLfhmnjTspm3LDm1S6Q84PG/lou+jez+ayGXNkX2lxQZ7muKyR+92aDjwAeIS+XiHTWL5Y11TfnCAJ3oFb+Op8AanwdnJpeUPX+Ci9aOEEBc5BbS3EVqU3e9W0g3jukPOjvKDu3LpMTSlYHvEW7pBWKa1RoijKrhAbHZUSdSZZUx4NuiKVSxzHNfR6epCCNmazH01E8z+1LYCMHPWnTGDLKiSljylzQcf2v0/Or+7ML7baCB27zTlWeYoP3m5cnJq+2E5kPOGWq/XCkVvkzH4qIll4a9O1u9GBC9tZzhkzO/LSYRWa6TW+Tm8rB8ZsQ66jL9PepnTIFXK7+aGcREGVg7jaf+ARF3RgAs6/dEcLSFsm2FImgIvAycTbS/gOOb8SL26tMWe0j7ySeVJi7/uXqnP4D6CG9Pr058r5c0+I5WsYEnWBvaHxfdaUgGD2zk1TeuZsxKQzz6K2TVe2YtbtqtR7QBjL/XdEwvKsFMfKZPXOZVU4Mk1uWcCZL/fwIGv1KjZF3kNV2uvBNr1Jzq+28I1Ik259x42DH91K/8VupXzgp8v57eLZdjQ6uu80Y9kLz+ViGAB3WfUOwm1MOEhd7dUSOATtd9CqNhd3tT691RRlwmuHBmSviNsDywLPXsr1NEEIGm3KBVaiyoC+1a8X2tK89x1yfu0K/NEx77kd81pA2nYdN8n5YXNNh6iS3VJzgbiCKEMChlJRuE+uSt1RkK5rOeBWTtjXhIsd4DhqcoLC1eoTIaaiiLat6da2dRRIVI13UY/NB0xweohFjNFkrHwn5OUmOb+dwo8be/7xjT11fd0xIOVb4NDvE4hOpDfJ+XNQ8YtqxPT/5R4TKNLT5fyZkP9zT+X8+zcOawb7yXIup4gBaI+qtlnufd0lBDS/w/6hz8D3Dmi/zZl7a0QpgS3+s+uPe1UdKULU+Js3JPXfmreWWdlMxYnQXlok1gIrrDusH2kmOakd3Pvk/KgeMG69zEsVWeh6tM3k4h834Tg3ODzvCWTGNy+gsuu9gy5KqY4yTy6+E8bBkS53FHpD4dEJvoWZptASuwKVUoxq3kG1O9ycl4PxdYecH62SJQ49YY/zCxvsiYEmo42028R0aRsAcxo3gtWptIMxp6B3ohRH5RCq9i4UAuYvjOnoOB8Et6NJjb98+bHfwX7sK9Mob6wa26Paz7n95J4u59d2CR8FLj8BGQdA+nQ5P1qZcPTrP1yD4zZa4AumULsTipB6ZUsPSiOb1nXadDwR2Ica1+bwSlmQb9oBHaBDeY4u3PRNsX8skGJ1W4nrg/walWa7aALPsze+vL+RUquFO+T8EC0dZrN5bX+S76fNWzjhTMgvtxOUjTNE6igWEdV2VuRrM6Ku9FZsKdCGU8a8Pd777newqgkM77iTe8KRFep9fDj8rRoojN5qLI+6Q86vQcVH+8mfJiF8k5xfq3x/LonvA7Q8KvRbhM4p6FUBTea5D/NoIbXdLS48yFfHGW1TipLehu/UojOEd8j5ZZfE9jSUg8Wh7+2IE+t4x9MYba3FJ4QqNcqpSUD0FjJu0Aht9SCauyjfsgVEjRbe2rK847W6jtOUqdAmpCzMzHBzYQvSuR7v2wm3naLLUG6S86sifc/a++gQ/HQVrQv50+X8kHbCaXjfR6Bde9ULioGk7tovVAqp1pubPkcUUCIkKmTTS157k1iZcLgdojT0w5ahuG1ru3si6HUL7d3U9EiBm2Uily2pd4PhoXJKjrDta++T84/ybcACdmgOdGnLR0ue9lJpirV3wNQbbieJtmbszb2CBALSeRBRo3zUljgVgJ4OlBOYetTLjboWvA5Gb9ggG+ymw6nf1pmWQYrdUy6r3OdNcn6ttX/u1dG0XEucWuilaKixs0BVUqZs6/a9Al4XBCl5oldEgZWdp93ahR7gPhgdmBXOY8WhWeyZ+1M5OOXB8oZctdhg4w45/6iR2EGA6KVhRfF746c90uvI3F+M76WmUixM7dSi1I7K3rX1//w9RqV57XK3OavSexvDgnFIniwKzMW1FYr6HQWQOqK+6NvIj8vZuCEahN0h5xdAczvFDekp51pA3Q243eprevt1Ce3tJD+VqLyvc96n7Fy9VuW1OWNHP2eUbfTDdg+kzJ3+41p19TfcH6QH1AqOxnTmPGdqph0yVJb3Jinu1R1y/pwvLFFANuSj1ewTW81uGLfI2STdPaeRj0p+bJ+j24s+hlU1RZLaV1kpSXtYOg3rRS8VoHnI1gPK6hxgvmB+inYdNUG3KEqeZMUJe13TcFUQ+li0wrbYbK9LPljbnLX2/Chp8ely/uCR/vx5pG22XFeYaArg9hZ4MG7XZve4KNOt797D8Z55MBW0/Ib9BXYReh9pDX2hGSq2hPhsBYes5IYqSbkIurEoNue2bTglZN5fCFIP62hq/Vw5v8HcH33z7k4r3iTnB+rA9bMEOmKduxG4efQP8ZUVgSIt1YJDVhAZfdYeb1MjrxezbuHPxIeXzZxAZOgZseMlMnJpSXBLVj1tHINek9463i62w93bQIqjTqrte3iHnF9t4b9bcwj3NiBMHPcc4cMdTYMaZtS2iRSblOAi2uxmgRGJxNaOAZMSc0X1HZfTkDK53STnz7eI1vZ8FN3fUXS/PXGHnF/bJfwEe7CtIAq5/aLc4Jvk/LnvzC+zbPOn7H0KVXi6nN+uUDBhXrWeLAUDfYfSfb3EcIRca+qyj7d6xi+ODEN9GAxHrYjMcTEjPq6dKJk3NKDdPps+LTqsV8IMkquXuDZuF0AenOshsbxKnffNkHyFbp29quLpcn60Qahexzyl3tNRVF5Chyd5SF/derv7lA5KC81n4xmiKWxKh8/iXkepKKlEsmtP0SKKlb6jLDadUn1/2/LRxwJ4JK7QXJPbLEulZ27p0U+X82tlU29EAgpzwQH5IuK6lHUlPlL//yD1X/v3XDm/gAx6VUe/0iWYjaVIs5WPdVuaOTvw5YlgeTu3AEGcj+i+HPD2W2ZZe3VIsXIlL/QbC1QeN3ejtSxiuHFeGkfXSzxy7vLsxwbiPN8k50c7DnG9AE5c/xY5HB2pcBGEq3glbeJYzGmymyGZL9C7d+CQOnlytevZVuFUK1KbvAPyrS9ez4Kkpvk3tl48fkTu222tmFwKSXKtHYN4YTfJ+eVoYqWFQ/3+dnF1MX0TrZQVVwIysldapiUThoEiEcF2Hp6kg0WjcjurLVu33naxkLz5qw067QwJPOw/flYr+lEXe7jb3K9na1ukWeg75PyjUiNGEqJYr4wurnPc5t/tJdLLUKvZ14lnoBSQohfD+YiBTlKKlYjevd3y4/wjkUyh1+k0WaoNu1mht1uQvixGEVFHv/E+0wtNRYs6qoiZtKfL+UfpSqU01E5Z4qwO5hJiHT+YQmiSBV8NxnF0hGvTOesnfS8e1/D6sk8QuN7wyoyZHn2LUysy6RWGPfT1/o/KchDJuJ3k2PSCdGDXtbWPT5fz2/lwD/LeDTy0gzYlnBdoFsi/QZVSwt7dRgp2HNIYY9aySpxBTZMUgxVCa5tzFMXF6TrkS+C5hqlqsElz+rN3/27YeBKWX+8KjuvCm43nuPXwJjk/WluEAoQrcNxZvCXBS3NndtXOdqh9t8XYRQ0WoFnT2fnG41CoNtMV1Zp/wYtyWNqp6eiVzkdtx6ey6xfdl/sKAtXDozcfHLfaISeKXmpNb5Lza1z4kXD4CcDeXlL4XDk/dP3rbbEFatktHuOCgeIOG5PL42QAVkVQX1lKbEyZtjli8FwN1DRN7aVorAyUYmkq2TmlLVrYGZITx6MpsfFocNqbYxrg4vU2vFH8psEbZ/IOOb9w4stO5E1ALooLzJbsQdUYJYqzUl5hIXovZxNAFqb3VZsPoyLAaIMpd/+K0tDv5Z+ZZBqpt8PXZ/FMBrts1ZJLO2WBBAe7ccJ9cn4lXgxcr6O/A3Tcg9Jv+mj49b9o+HWTnF9r7XWa1NehkVD7MrJexYrKuz3uoP9AXNtE9C45t+8zVJ5Q2NtZi2601kusEajGvZU1v7n59HJSbOGlLPSUaRxSDqDgwW10wA5BXu8h0ItCxmfvVOSnqXCdeJicndTbCNo6r30QrMFsM6y45vzpcn7wIzaHleZWj7c1B9dW4VnvRgPi8Y+3KuqSeulZzVgJ7f3SMt6nc6Rk0fuBlkL4lgoTh8cWqtbRh4gHjVZlba8sIizvqE2M3L0meN14EJ15QHfI+TVr75KgRpdo7UDY3vqxzfthQf8pC3qTnD/XVHzUm/0v6s0UmerkLNZEmHc0Vd8/Xc4v9TU4uNx0NCwBU6+MkJGoRFrtDkM5TEKdHScVbiK8K4uJUWQp60G0rZy9wqMRm9oiglSXfWyQxXrak/igq7QDVZsBinaIwsrdJ+eXg+JYZAS5oZfTUuvo1b3etVfrOUybw3a6wnOpCa4gdQeJQJeeiFsXYlc2FYcbyN0V27XTaTOuRTqGnrcDXNUp4qRkMkYWjkUv7LUnjkZBT5fz/xVgAMwCMiX3lhRvAAAAAElFTkSuQmCCUEsHCJuj1O/zKwAA8ysAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHN0YXRpY1xpbWdcaGVhZGVyLmdpZkdJRjg5YWQAZACzAABNdJpJbZJOdZxIbJBJbpJMc5lKb5RMcphKcJVLcZYAAAAAAAAAAAAAAAAAAAAAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjAxNUFBQzE1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjAxNUFBQzI1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFCRjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCMDE1QUFDMDUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFj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DQogICAgdmFyICRuYXYgPSAkKCcjbmF2Jyk7DQogICAgdmFyIHRvcCA9ICRuYXYub2Zmc2V0KCkudG9wOw0KICAgIGNvbnNvbGUubG9nKHRvcCk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkbmF2LmFkZENsYXNzKCJmaXhlZCIpLnJlbW92ZUNsYXNzKCJ0ZXh0LWNlbnRlciIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG5hdi5yZW1vdmVDbGFzcygiZml4ZWQiKS5hZGRDbGFzcygidGV4dC1jZW50ZXIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiB0b3BCdXR0b24oKSB7DQogICAgdmFyIHRvcCA9ICQoJyNuYXYnKS5vZmZzZXQoKS50b3A7DQogICAgdmFyICR0b3AgPSAkKCcjZ28tdG9wJyk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkdG9wLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdG9wLmFkZENsYXNzKCdoaWRlJyk7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkdG9wLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiAwfSwgNTAwKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pDQp9DQoNCmZ1bmN0aW9uIHJlbmRlck1hcmtkb3duKCkgew0KICAgIHZhciAkbWQgPSAkKCcubWFya2Rvd24nKTsNCiAgICAkbWQuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAkKGl0ZW0pLmh0bWwobWFya2VkKCQoaXRlbSkuaHRtbCgpLnJlcGxhY2UoLyZndDsvZywgJz4nKSkpOw0KICAgIH0pOw0KICAgIHZhciBjb2RlID0gJG1kLmZpbmQoJ3ByZSBjb2RlJyk7DQogICAgaWYgKGNvZGUubGVuZ3RoKSB7DQogICAgICAgICQoIjxsaW5rPiIpLmF0dHIoeyByZWw6ICJzdHlsZXNoZWV0IiwgdHlwZTogInRleHQvY3NzIiwgaHJlZjogIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MifSkuYXBwZW5kVG8oImhlYWQiKTsNCiAgICAgICAgJC5nZXRTY3JpcHQoIi9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBjb2RlLmVhY2goZnVuY3Rpb24gKGksIGl0ZW0pIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGl0ZW0pDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBpbml0Q29tbWVudCgpIHsNCiAgICB2YXIgJGxpc3QgPSAkKCcjY29tbWVudC1saXN0Jyk7DQogICAgaWYgKCEkbGlzdC5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpIHsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXV0aG9yJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF1dGhvciIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtZW1haWwiKSk7DQogICAgICAgICQoJyNjb21tZW50LXVybCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC11cmwiKSk7DQogICAgICAgICQoJyNjb21tZW50LWF2YXRhcicpLmF0dHIoInNyYyIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF2YXRhciIpKTsNCiAgICAgICAgJCgnLmMtYXZhdGFyJykucmVtb3ZlQ2xhc3MoIm51bGwiKTsNCiAgICB9DQogICAgJCgnI2NvbW1lbnQtY29udGVudCcpLm9uKCJmb2N1cyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKCQoJy5jLWF2YXRhcicpLmhhc0NsYXNzKCJudWxsIikpIHsNCiAgICAgICAgICAgICQoJy5jLWF2YXRhci1maWVsZCcpLnJlbW92ZSgpOw0KICAgICAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJCgnLm5vdC1tZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICQoJy5jLWluZm8tZmllbGRzJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LXNob3cnKS5vbigiY2xpY2siLCAiLmVuYWJsZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgiI2NvbW1lbnQtc2hvdyIpLnJlbW92ZSgpOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICB9KTsNCiAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdXRob3IiLCAkKCcjY29tbWVudC1hdXRob3InKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1lbWFpbCIsICQoJyNjb21tZW50LWVtYWlsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtdXJsIiwgJCgnI2NvbW1lbnQtdXJsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtYXZhdGFyIiwganNvbi5jb21tZW50LmF2YXRhcik7DQogICAgICAgICAgICB2YXIgdHBsID0gJCgkKCcjY29tbWVudC10cGwnKS5odG1sKCkpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF2YXRhciIpLmF0dHIoInNyYyIsIGpzb24uY29tbWVudC5hdmF0YXIpLmF0dHIoImFsdCIsIGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF1dGhvciIpLmF0dHIoImhyZWYiLCBqc29uLmNvbW1lbnQudXJsKS50ZXh0KGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXJlcGx5IikuYXR0cigicmVsIiwganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIHRwbC5maW5kKCIuYy1jb250ZW50IikuaHRtbChqc29uLmNvbW1lbnQuY29udGVudCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnBhcmVudF9tZCkgew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikuaHRtbChtYXJrZWQoanNvbi5jb21tZW50LnBhcmVudF9tZCkpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtcC1tZCIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHBsLmF0dHIoImlkIiwgImNvbW1lbnQtIiArIGpzb24uY29tbWVudC5pZCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnN0YXR1cyA9PSAiYXBwcm92ZWQiKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbGlzdC5hcHBlbmQodHBsKTsNCiAgICAgICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhbGVydCgi5o+Q5Lqk5aSx6LSlISIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJGxpc3Qub24oImNsaWNrIiwgIi5jLXJlcGx5IiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgdmFyIHBjID0gJCgnI2NvbW1lbnQtJyArIGlkKTsNCiAgICAgICAgdmFyIG1kID0gIj4gQCIgKyBwYy5maW5kKCIuYy1hdXRob3IiKS50ZXh0KCkgKyAiXG5cbiI7DQogICAgICAgIG1kICs9ICI+ICIgKyBwYy5maW5kKCIuYy1jb250ZW50IikuaHRtbCgpICsgIlxuIjsNCiAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLmJlZm9yZSgnPGRpdiBjbGFzcz0icmVwbHktbWQgbWFya2Rvd24iPicgKyBtYXJrZWQobWQpICsgJzwvZGl2PicpOw0KICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICBpZiAoJCgnI2NvbW1lbnQtc2hvdycpLmxlbmd0aCkgew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtc2hvdyAuZW5hYmxlJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICAgICAgfQ0KICAgICAgICAkKCcuY2FuY2VsLXJlcGx5Jykuc2hvdygpOw0KICAgICAgICB2YXIgdG9wID0gJCgnI2NvbW1lbnQtZm9ybScpLm9mZnNldCgpLnRvcDsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiB0b3B9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnLmNhbmNlbC1yZXBseScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlcGx5LW1kJykucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCn0NClBLBwge4R5ydRIAAHUSAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcanNcdXBsb2FkLmpzZnVuY3Rpb24gaW5pdFVwbG9hZChwKSB7DQogICAgJCgnI2F0dGFjaC1zaG93Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLnRyaWdnZXIoImNsaWNrIik7DQogICAgfSk7DQogICAgJCgnI2F0dGFjaC11cGxvYWQnKS5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoY29uZmlybSgi56uL5Y2z5LiK5LygPyIpKSB7DQogICAgICAgICAgICB2YXIgYmFyID0gJCgnPHAgY2xhc3M9ImZpbGUtcHJvZ3Jlc3MgaW5saW5lLWJsb2NrIj4wJTwvcD4nKTsNCiAgICAgICAgICAgICQoJyNhdHRhY2gtZm9ybScpLmFqYXhTdWJtaXQoew0KICAgICAgICAgICAgICAgICJiZWZvcmVTdWJtaXQiOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQocCkuYmVmb3JlKGJhcik7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAidXBsb2FkUHJvZ3Jlc3MiOiBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCB0b3RhbCwgcGVyY2VudENvbXBsZXRlKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBwZXJjZW50VmFsID0gcGVyY2VudENvbXBsZXRlICsgJyUnOw0KICAgICAgICAgICAgICAgICAgICBiYXIuY3NzKCJ3aWR0aCIsIHBlcmNlbnRWYWwpLmh0bWwocGVyY2VudFZhbCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKGpzb24ubXNnKS5hZGRDbGFzcygiZXJyIik7DQogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXIucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDAwKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKCIvIiArIGpzb24uZmlsZS5VcmwgKyAiJm5ic3A7Jm5ic3A7Jm5ic3A7KEAiICsganNvbi5maWxlLk5hbWUgKyAiKSIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudmFsKCIiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICQodGhpcykudmFsKCIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfVBLBwiIiRf79gQAAPYEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcbGliL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAACEAAABzdGF0aWNcbGliXGNvZGVtaXJyb3ItbW9kZS5taW4uanMhZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9L14oXHMqKShbKistXXwoXGQrKVwuKShccyopLyxlPSIqKy0iO0NvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0PWZ1bmN0aW9uKHIpe3ZhciBuLGk9ci5nZXRDdXJzb3IoKSxvPXIuZ2V0U3RhdGVBZnRlcihpLmxpbmUpLmxpc3QhPT0hMTtpZighb3x8IShuPXIuZ2V0TGluZShpLmxpbmUpLm1hdGNoKHQpKSlyZXR1cm4gci5leGVjQ29tbWFuZCgibmV3bGluZUFuZEluZGVudCIpLHZvaWQgMDt2YXIgbD1uWzFdLGE9bls0XSxzPWUuaW5kZXhPZihuWzJdKT49MD9uWzJdOnBhcnNlSW50KG5bM10sMTApKzErIi4iO3IucmVwbGFjZVNlbGVjdGlvbigiXG4iK2wrcythLCJlbmQiKX19KCksQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4gZS5mPWUuaW5saW5lPXIscih0LGUpfWZ1bmN0aW9uIG4odCxlLHIpe3JldHVybiBlLmY9ZS5ibG9jaz1yLHIodCxlKX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LmxpbmtUaXRsZT0hMSx0LmVtPSExLHQuc3Ryb25nPSExLHQucXVvdGU9MCxnfHx0LmYhPWx8fCh0LmY9Yyx0LmJsb2NrPW8pLHQudHJhaWxpbmdTcGFjZT0wLHQudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsdC50aGlzTGluZUhhc0NvbnRlbnQ9ITEsbnVsbH1mdW5jdGlvbiBvKHQsaSl7dmFyIG89aS5saXN0IT09ITE7aS5saXN0IT09ITEmJmkuaW5kZW50YXRpb25EaWZmPj0wPyhpLmluZGVudGF0aW9uRGlmZjw0JiYoaS5pbmRlbnRhdGlvbi09aS5pbmRlbnRhdGlvbkRpZmYpLGkubGlzdD1udWxsKTppLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbj4wPyhpLmxpc3Q9bnVsbCxpLmxpc3REZXB0aD1NYXRoLmZsb29yKGkuaW5kZW50YXRpb24vNCkpOmkubGlzdCE9PSExJiYoaS5saXN0PSExLGkubGlzdERlcHRoPTApO3ZhciBsPW51bGw7aWYoaS5pbmRlbnRhdGlvbkRpZmY+PTQpcmV0dXJuIGkuaW5kZW50YXRpb24tPTQsdC5za2lwVG9FbmQoKSxrO2lmKHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDtpZihsPXQubWF0Y2goUikpaS5oZWFkZXI9bFswXS5sZW5ndGg8PTY/bFswXS5sZW5ndGg6NjtlbHNlIGlmKGkucHJldkxpbmVIYXNDb250ZW50JiYobD10Lm1hdGNoKEcpKSlpLmhlYWRlcj0iPSI9PWxbMF0uY2hhckF0KDApPzE6MjtlbHNlIGlmKHQuZWF0KCI+IikpZm9yKGkuaW5kZW50YXRpb24rKyxpLnF1b3RlPTEsdC5lYXRTcGFjZSgpO3QuZWF0KCI+Iik7KXQuZWF0U3BhY2UoKSxpLnF1b3RlKys7ZWxzZXtpZigiWyI9PT10LnBlZWsoKSlyZXR1cm4gcih0LGksaCk7aWYodC5tYXRjaChJLCEwKSlyZXR1cm4gQTtpZihpLnByZXZMaW5lSGFzQ29udGVudCYmIW98fCF0Lm1hdGNoKFAsITApJiYhdC5tYXRjaChGLCEwKSl7aWYoZS5mZW5jZWRDb2RlQmxvY2tzJiZ0Lm1hdGNoKC9eYGBgKFtcdysjXSopLywhMCkpcmV0dXJuIGkubG9jYWxNb2RlPXgoUmVnRXhwLiQxKSxpLmxvY2FsTW9kZSYmKGkubG9jYWxTdGF0ZT1pLmxvY2FsTW9kZS5zdGFydFN0YXRlKCkpLG4odCxpLGEpLGt9ZWxzZSBpLmluZGVudGF0aW9uKz00LGkubGlzdD0hMCxpLmxpc3REZXB0aCsrLGUudGFza0xpc3RzJiZ0Lm1hdGNoKEIsITEpJiYoaS50YXNrTGlzdD0hMCl9cmV0dXJuIHIodCxpLGkuaW5saW5lKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9di50b2tlbih0LGUuaHRtbFN0YXRlKTtyZXR1cm4gZyYmInRhZyI9PT1yJiYib3BlblRhZyIhPT1lLmh0bWxTdGF0ZS50eXBlJiYhZS5odG1sU3RhdGUuY29udGV4dCYmKGUuZj1jLGUuYmxvY2s9byksZS5tZF9pbnNpZGUmJi0xIT10LmN1cnJlbnQoKS5pbmRleE9mKCI+IikmJihlLmY9YyxlLmJsb2NrPW8sZS5odG1sU3RhdGUuY29udGV4dD12b2lkIDApLHJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LnNvbCgpJiZ0Lm1hdGNoKC9eYGBgLywhMCk/KGUubG9jYWxNb2RlPWUubG9jYWxTdGF0ZT1udWxsLGUuZj1jLGUuYmxvY2s9byxrKTplLmxvY2FsTW9kZT9lLmxvY2FsTW9kZS50b2tlbih0LGUubG9jYWxTdGF0ZSk6KHQuc2tpcFRvRW5kKCksayl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1bXTtpZih0LnRhc2tPcGVuKXJldHVybiJtZXRhIjtpZih0LnRhc2tDbG9zZWQpcmV0dXJuInByb3BlcnR5IjtpZih0LnN0cm9uZyYmZS5wdXNoKHopLHQuZW0mJmUucHVzaChFKSx0LmxpbmtUZXh0JiZlLnB1c2goTyksdC5jb2RlJiZlLnB1c2goayksdC5oZWFkZXImJihlLnB1c2goQyksZS5wdXNoKEMrdC5oZWFkZXIpKSx0LnF1b3RlJiZlLnB1c2godC5xdW90ZSUyP3c6TCksdC5saXN0IT09ITEpe3ZhciByPSh0Lmxpc3REZXB0aC0xKSUzO3I/MT09PXI/ZS5wdXNoKE0pOmUucHVzaChUKTplLnB1c2goUyl9cmV0dXJuIHQudHJhaWxpbmdTcGFjZU5ld0xpbmU/ZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS1uZXctbGluZSIpOnQudHJhaWxpbmdTcGFjZSYmZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS0iKyh0LnRyYWlsaW5nU3BhY2UlMj8iYSI6ImIiKSksZS5sZW5ndGg/ZS5qb2luKCIgIik6bnVsbH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQubWF0Y2goXywhMCk/cyhlKTp2b2lkIDB9ZnVuY3Rpb24gYyh0LGkpe3ZhciBvPWkudGV4dCh0LGkpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgbylyZXR1cm4gbztpZihpLmxpc3QpcmV0dXJuIGkubGlzdD1udWxsLHMoaSk7aWYoaS50YXNrTGlzdCl7dmFyIGE9IngiIT09dC5tYXRjaChCLCEwKVsxXTtyZXR1cm4gYT9pLnRhc2tPcGVuPSEwOmkudGFza0Nsb3NlZD0hMCxpLnRhc2tMaXN0PSExLHMoaSl9aS50YXNrT3Blbj0hMSxpLnRhc2tDbG9zZWQ9ITE7dmFyIHU9dC5zb2woKSxjPXQubmV4dCgpO2lmKCJcXCI9PT1jKXJldHVybiB0Lm5leHQoKSxzKGkpO2lmKGkubGlua1RpdGxlKXtpLmxpbmtUaXRsZT0hMTt2YXIgaD1jOyIoIj09PWMmJihoPSIpIiksaD0oaCsiIikucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csIlxcJDEiKTt2YXIgZD0iXlxccyooPzpbXiIraCsiXFxcXF0rfFxcXFxcXFxcfFxcXFwuKSIraDtpZih0Lm1hdGNoKG5ldyBSZWdFeHAoZCksITApKXJldHVybiBXfWlmKCJgIj09PWMpe3ZhciBwPXMoaSksZz10LnBvczt0LmVhdFdoaWxlKCJgIik7dmFyIHY9MSt0LnBvcy1nO3JldHVybiBpLmNvZGU/dj09PWI/KGkuY29kZT0hMSxwKTpzKGkpOihiPXYsaS5jb2RlPSEwLHMoaSkpfWlmKGkuY29kZSlyZXR1cm4gcyhpKTtpZigiISI9PT1jJiZ0Lm1hdGNoKC9cW1teXF1dKlxdID8oPzpcKHxcWykvLCExKSlyZXR1cm4gdC5tYXRjaCgvXFtbXlxdXSpcXS8pLGkuaW5saW5lPWkuZj1mLE47aWYoIlsiPT09YyYmdC5tYXRjaCgvLipcXShcKHwgP1xbKS8sITEpKXJldHVybiBpLmxpbmtUZXh0PSEwLHMoaSk7aWYoIl0iPT09YyYmaS5saW5rVGV4dCl7dmFyIHk9cyhpKTtyZXR1cm4gaS5saW5rVGV4dD0hMSxpLmlubGluZT1pLmY9Zix5fWlmKCI8Ij09PWMmJnQubWF0Y2goL14oaHR0cHM/fGZ0cHM/KTpcL1wvKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEgsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXltePiBcXF0rQCg/OlteXFw+XXxcXC4pKz4vLCExKSlyZXR1cm4gcih0LGksbShELCI+IikpO2lmKCI8Ij09PWMmJnQubWF0Y2goL15cdy8sITEpKXtpZigtMSE9dC5zdHJpbmcuaW5kZXhPZigiPiIpKXt2YXIgeD10LnN0cmluZy5zdWJzdHJpbmcoMSx0LnN0cmluZy5pbmRleE9mKCI+IikpOy9tYXJrZG93blxzKj1ccyooJ3wiKXswLDF9MSgnfCIpezAsMX0vLnRlc3QoeCkmJihpLm1kX2luc2lkZT0hMCl9cmV0dXJuIHQuYmFja1VwKDEpLG4odCxpLGwpfWlmKCI8Ij09PWMmJnQubWF0Y2goL15cL1x3Kj8+LykpcmV0dXJuIGkubWRfaW5zaWRlPSExLCJ0YWciO3ZhciBDPSExO2lmKCFlLnVuZGVyc2NvcmVzQnJlYWtXb3JkcyYmIl8iPT09YyYmIl8iIT09dC5wZWVrKCkmJnQubWF0Y2goLyhcdykvLCExKSl7dmFyIGs9dC5wb3MtMjtpZihrPj0wKXt2YXIgdz10LnN0cmluZy5jaGFyQXQoayk7Il8iIT09dyYmdy5tYXRjaCgvKFx3KS8sITEpJiYoQz0hMCl9fXZhciBwPXMoaSk7aWYoIioiPT09Y3x8Il8iPT09YyYmIUMpaWYodSYmIiAiPT09dC5wZWVrKCkpO2Vsc2V7aWYoaS5zdHJvbmc9PT1jJiZ0LmVhdChjKSlyZXR1cm4gaS5zdHJvbmc9ITEscDtpZighaS5zdHJvbmcmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz1jLHMoaSk7aWYoaS5lbT09PWMpcmV0dXJuIGkuZW09ITEscDtpZighaS5lbSlyZXR1cm4gaS5lbT1jLHMoaSl9ZWxzZSBpZigiICI9PT1jJiYodC5lYXQoIioiKXx8dC5lYXQoIl8iKSkpe2lmKCIgIj09PXQucGVlaygpKXJldHVybiBzKGkpO3QuYmFja1VwKDEpfXJldHVybiIgIj09PWMmJih0Lm1hdGNoKC8gKyQvLCExKT9pLnRyYWlsaW5nU3BhY2UrKzppLnRyYWlsaW5nU3BhY2UmJihpLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSEwKSkscyhpKX1mdW5jdGlvbiBmKHQsZSl7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3ZhciBuPXQubmV4dCgpO3JldHVybiIoIj09PW58fCJbIj09PW4/cih0LGUsbShXLCIoIj09PW4/IikiOiJdIikpOiJlcnJvciJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0Lm1hdGNoKC9eW15cXV0qXF06LywhMCk/KGUuZj1kLE8pOnIodCxlLGMpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdC5lYXRTcGFjZSgpP251bGw6KHQubWF0Y2goL15bXlxzXSsvLCEwKSx2b2lkIDA9PT10LnBlZWsoKT9lLmxpbmtUaXRsZT0hMDp0Lm1hdGNoKC9eKD86XHMrKD86Iig/OlteIlxcXXxcXFxcfFxcLikrInwnKD86W14nXFxdfFxcXFx8XFwuKSsnfFwoKD86W14pXFxdfFxcXFx8XFwuKStcKSkpPy8sITApLGUuZj1lLmlubGluZT1jLFcpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIFZbdF18fCh0PSh0KyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpLFZbdF09bmV3IFJlZ0V4cCgiXig/OlteXFxcXF18XFxcXC4pKj8oIit0KyIpIikpLFZbdF19ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIHI9cnx8YyxmdW5jdGlvbihuLGkpe3JldHVybiBuLm1hdGNoKHAoZSkpLGkuaW5saW5lPWkuZj1yLHR9fXZhciBnPUNvZGVNaXJyb3IubW9kZXMuaGFzT3duUHJvcGVydHkoInhtbCIpLHY9Q29kZU1pcnJvci5nZXRNb2RlKHQsZz97bmFtZToieG1sIixodG1sTW9kZTohMH06InRleHQvcGxhaW4iKSx5PXtodG1sOiJodG1sbWl4ZWQiLGpzOiJqYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uIixjOiJ0ZXh0L3gtY3NyYyIsImMrKyI6InRleHQveC1jKytzcmMiLGphdmE6InRleHQveC1qYXZhIixjc2hhcnA6InRleHQveC1jc2hhcnAiLCJjIyI6InRleHQveC1jc2hhcnAiLHNjYWxhOiJ0ZXh0L3gtc2NhbGEifSx4PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9e30sbz1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5tb2RlcylDb2RlTWlycm9yLm1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZvLnB1c2gobCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyluW29bZV1dPW9bZV07dmFyIGE9W107Zm9yKHZhciBsIGluIENvZGVNaXJyb3IubWltZU1vZGVzKUNvZGVNaXJyb3IubWltZU1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZhLnB1c2goe21pbWU6bCxtb2RlOkNvZGVNaXJyb3IubWltZU1vZGVzW2xdfSk7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylyPWFbZV0ubWltZSxpW3JdPWFbZV0ubWltZTtmb3IodmFyIHMgaW4geSkoeVtzXWluIG58fHlbc11pbiBpKSYmKG5bc109eVtzXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdP0NvZGVNaXJyb3IuZ2V0TW9kZSh0LG5bZV0pOm51bGx9fSgpO3ZvaWQgMD09PWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYoZS51bmRlcnNjb3Jlc0JyZWFrV29yZHM9ITApLHZvaWQgMD09PWUuZmVuY2VkQ29kZUJsb2NrcyYmKGUuZmVuY2VkQ29kZUJsb2Nrcz0hMSksdm9pZCAwPT09ZS50YXNrTGlzdHMmJihlLnRhc2tMaXN0cz0hMSk7dmFyIGI9MCxDPSJoZWFkZXIiLGs9ImNvbW1lbnQiLHc9ImF0b20iLEw9Im51bWJlciIsUz0idmFyaWFibGUtMiIsTT0idmFyaWFibGUtMyIsVD0ia2V5d29yZCIsQT0iaHIiLE49InRhZyIsSD0ibGluayIsRD0ibGluayIsTz0ibGluayIsVz0ic3RyaW5nIixFPSJlbSIsej0ic3Ryb25nIixJPS9eKFsqXC09X10pKD86XHMqXDEpezIsfVxzKiQvLFA9L15bKlwtK11ccysvLEY9L15bMC05XStcLlxzKy8sQj0vXlxbKHh8IClcXSg/PVxzKS8sUj0vXiMrLyxHPS9eKD86XD17MSx9fC17MSx9KSQvLF89L15bXiFcW1xdKl9cXDw+YCAiJyhdKy8sVj1bXTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybntmOm8scHJldkxpbmVIYXNDb250ZW50OiExLHRoaXNMaW5lSGFzQ29udGVudDohMSxibG9jazpvLGh0bWxTdGF0ZTpDb2RlTWlycm9yLnN0YXJ0U3RhdGUodiksaW5kZW50YXRpb246MCxpbmxpbmU6Yyx0ZXh0OnUsbGlua1RleHQ6ITEsbGlua1RpdGxlOiExLGVtOiExLHN0cm9uZzohMSxoZWFkZXI6MCx0YXNrTGlzdDohMSxsaXN0OiExLGxpc3REZXB0aDowLHF1b3RlOjAsdHJhaWxpbmdTcGFjZTowLHRyYWlsaW5nU3BhY2VOZXdMaW5lOiExfX0sY29weVN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybntmOnQuZixwcmV2TGluZUhhc0NvbnRlbnQ6dC5wcmV2TGluZUhhc0NvbnRlbnQsdGhpc0xpbmVIYXNDb250ZW50OnQudGhpc0xpbmVIYXNDb250ZW50LGJsb2NrOnQuYmxvY2ssaHRtbFN0YXRlOkNvZGVNaXJyb3IuY29weVN0YXRlKHYsdC5odG1sU3RhdGUpLGluZGVudGF0aW9uOnQuaW5kZW50YXRpb24sbG9jYWxNb2RlOnQubG9jYWxNb2RlLGxvY2FsU3RhdGU6dC5sb2NhbE1vZGU/Q29kZU1pcnJvci5jb3B5U3RhdGUodC5sb2NhbE1vZGUsdC5sb2NhbFN0YXRlKTpudWxsLGlubGluZTp0LmlubGluZSx0ZXh0OnQudGV4dCxsaW5rVGl0bGU6dC5saW5rVGl0bGUsZW06dC5lbSxzdHJvbmc6dC5zdHJvbmcsaGVhZGVyOnQuaGVhZGVyLHRhc2tMaXN0OnQudGFza0xpc3QsbGlzdDp0Lmxpc3QsbGlzdERlcHRoOnQubGlzdERlcHRoLHF1b3RlOnQucXVvdGUsdHJhaWxpbmdTcGFjZTp0LnRyYWlsaW5nU3BhY2UsdHJhaWxpbmdTcGFjZU5ld0xpbmU6dC50cmFpbGluZ1NwYWNlTmV3TGluZSxtZF9pbnNpZGU6dC5tZF9pbnNpZGV9fSx0b2tlbjpmdW5jdGlvbih0LGUpe2lmKHQuc29sKCkpe2lmKHQubWF0Y2goL15ccyokLywhMCkpcmV0dXJuIGUucHJldkxpbmVIYXNDb250ZW50PSExLGkoZSk7ZS5wcmV2TGluZUhhc0NvbnRlbnQ9ZS50aGlzTGluZUhhc0NvbnRlbnQsZS50aGlzTGluZUhhc0NvbnRlbnQ9ITAsZS5oZWFkZXI9MCxlLnRhc2tMaXN0PSExLGUuY29kZT0hMSxlLnRyYWlsaW5nU3BhY2U9MCxlLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSExLGUuZj1lLmJsb2NrO3ZhciByPXQubWF0Y2goL15ccyovLCEwKVswXS5yZXBsYWNlKC9cdC9nLCIgICAgIikubGVuZ3RoLG49NCpNYXRoLmZsb29yKChyLWUuaW5kZW50YXRpb24pLzQpO24+NCYmKG49NCk7dmFyIG89ZS5pbmRlbnRhdGlvbituO2lmKGUuaW5kZW50YXRpb25EaWZmPW8tZS5pbmRlbnRhdGlvbixlLmluZGVudGF0aW9uPW8scj4wKXJldHVybiBudWxsfXJldHVybiBlLmYodCxlKX0sYmxhbmtMaW5lOmksZ2V0VHlwZTpzfX0sInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LW1hcmtkb3duIiwibWFya2Rvd24iKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4gZS50b2tlbml6ZT1yLHIodCxlKX12YXIgaT10Lm5leHQoKTtpZigiPCI9PWkpe2lmKHQuZWF0KCIhIikpcmV0dXJuIHQuZWF0KCJbIik/dC5tYXRjaCgiQ0RBVEFbIik/cihvKCJhdG9tIiwiXV0+IikpOm51bGw6dC5tYXRjaCgiLS0iKT9yKG8oImNvbW1lbnQiLCItLT4iKSk6dC5tYXRjaCgiRE9DVFlQRSIsITAsITApPyh0LmVhdFdoaWxlKC9bXHdcLl9cLV0vKSxyKGwoMSkpKTpudWxsO2lmKHQuZWF0KCI/IikpcmV0dXJuIHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLGUudG9rZW5pemU9bygibWV0YSIsIj8+IiksIm1ldGEiO3ZhciBhPXQuZWF0KCIvIik7eD0iIjtmb3IodmFyIHM7cz10LmVhdCgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7KXgrPXM7cmV0dXJuIHg/KGI9YT8iY2xvc2VUYWciOiJvcGVuVGFnIixlLnRva2VuaXplPW4sInRhZyIpOiJ0YWcgZXJyb3IifWlmKCImIj09aSl7dmFyIHU7cmV0dXJuIHU9dC5lYXQoIiMiKT90LmVhdCgieCIpP3QuZWF0V2hpbGUoL1thLWZBLUZcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXGRdLykmJnQuZWF0KCI7Iik6dC5lYXRXaGlsZSgvW1x3XC5cLTpdLykmJnQuZWF0KCI7IiksdT8iYXRvbSI6ImVycm9yIn1yZXR1cm4gdC5lYXRXaGlsZSgvW14mPF0vKSxudWxsfWZ1bmN0aW9uIG4odCxlKXt2YXIgbj10Lm5leHQoKTtpZigiPiI9PW58fCIvIj09biYmdC5lYXQoIj4iKSlyZXR1cm4gZS50b2tlbml6ZT1yLGI9Ij4iPT1uPyJlbmRUYWciOiJzZWxmY2xvc2VUYWciLCJ0YWciO2lmKCI9Ij09bilyZXR1cm4gYj0iZXF1YWxzIixudWxsO2lmKCI8Ij09bil7ZS50b2tlbml6ZT1yO3ZhciBvPWUudG9rZW5pemUodCxlKTtyZXR1cm4gbz9vKyIgZXJyb3IiOiJlcnJvciJ9cmV0dXJuL1tcJ1wiXS8udGVzdChuKT8oZS50b2tlbml6ZT1pKG4pLGUuc3RyaW5nU3RhcnRDb2w9dC5jb2x1bW4oKSxlLnRva2VuaXplKHQsZSkpOih0LmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKSwid29yZCIpfWZ1bmN0aW9uIGkodCl7dmFyIGU9ZnVuY3Rpb24oZSxyKXtmb3IoOyFlLmVvbCgpOylpZihlLm5leHQoKT09dCl7ci50b2tlbml6ZT1uO2JyZWFrfXJldHVybiJzdHJpbmcifTtyZXR1cm4gZS5pc0luQXR0cmlidXRlPSEwLGV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcig7IW4uZW9sKCk7KXtpZihuLm1hdGNoKGUpKXtpLnRva2VuaXplPXI7YnJlYWt9bi5uZXh0KCl9cmV0dXJuIHR9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpO251bGwhPShpPWUubmV4dCgpKTspe2lmKCI8Ij09aSlyZXR1cm4gbi50b2tlbml6ZT1sKHQrMSksbi50b2tlbml6ZShlLG4pO2lmKCI+Ij09aSl7aWYoMT09dCl7bi50b2tlbml6ZT1yO2JyZWFrfXJldHVybiBuLnRva2VuaXplPWwodC0xKSxuLnRva2VuaXplKGUsbil9fXJldHVybiJtZXRhIn19ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTE7dD49MDt0LS0pQy5jYy5wdXNoKGFyZ3VtZW50c1t0XSl9ZnVuY3Rpb24gcygpe3JldHVybiBhLmFwcGx5KG51bGwsYXJndW1lbnRzKSwhMH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9VC5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0KXx8Qy5jb250ZXh0JiZDLmNvbnRleHQubm9JbmRlbnQ7Qy5jb250ZXh0PXtwcmV2OkMuY29udGV4dCx0YWdOYW1lOnQsaW5kZW50OkMuaW5kZW50ZWQsc3RhcnRPZkxpbmU6ZSxub0luZGVudDpyfX1mdW5jdGlvbiBjKCl7Qy5jb250ZXh0JiYoQy5jb250ZXh0PUMuY29udGV4dC5wcmV2KX1mdW5jdGlvbiBmKHQpe2lmKCJvcGVuVGFnIj09dClyZXR1cm4gQy50YWdOYW1lPXgsQy50YWdTdGFydD1rLmNvbHVtbigpLHMobSxoKEMuc3RhcnRPZkxpbmUpKTtpZigiY2xvc2VUYWciPT10KXt2YXIgZT0hMTtyZXR1cm4gQy5jb250ZXh0P0MuY29udGV4dC50YWdOYW1lIT14JiYoVC5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KEMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiZjKCksZT0hQy5jb250ZXh0fHxDLmNvbnRleHQudGFnTmFtZSE9eCk6ZT0hMCxlJiYodz0iZXJyb3IiKSxzKGQoZSkpfXJldHVybiBzKCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9Qy50YWdOYW1lO3JldHVybiBDLnRhZ05hbWU9Qy50YWdTdGFydD1udWxsLCJzZWxmY2xvc2VUYWciPT1lfHwiZW5kVGFnIj09ZSYmVC5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkoci50b0xvd2VyQ2FzZSgpKT8ocChyLnRvTG93ZXJDYXNlKCkpLHMoKSk6ImVuZFRhZyI9PWU/KHAoci50b0xvd2VyQ2FzZSgpKSx1KHIsdCkscygpKTpzKCl9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiYodz0iZXJyb3IiKSwiZW5kVGFnIj09ZT8oYygpLHMoKSk6KHc9ImVycm9yIixzKGFyZ3VtZW50cy5jYWxsZWUpKX19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU7Oyl7aWYoIUMuY29udGV4dClyZXR1cm47aWYoZT1DLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCFULmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShlKXx8IVQuY29udGV4dEdyYWJiZXJzW2VdLmhhc093blByb3BlcnR5KHQpKXJldHVybjtjKCl9fWZ1bmN0aW9uIG0odCl7cmV0dXJuIndvcmQiPT10Pyh3PSJhdHRyaWJ1dGUiLHMoZyxtKSk6ImVuZFRhZyI9PXR8fCJzZWxmY2xvc2VUYWciPT10P2EoKToodz0iZXJyb3IiLHMobSkpfWZ1bmN0aW9uIGcodCl7aWYoImVxdWFscyI9PXQpcmV0dXJuIHModixtKTtpZihULmFsbG93TWlzc2luZyl7aWYoIndvcmQiPT10KXJldHVybiB3PSJhdHRyaWJ1dGUiLHMoZyxtKX1lbHNlIHc9ImVycm9yIjtyZXR1cm4iZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOnMoKX1mdW5jdGlvbiB2KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6IndvcmQiPT10JiZULmFsbG93VW5xdW90ZWQ/KHc9InN0cmluZyIscygpKToodz0iZXJyb3IiLCJlbmRUYWciPT10fHwic2VsZkNsb3NlVGFnIj09dD9hKCk6cygpKX1mdW5jdGlvbiB5KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6YSgpfXZhciB4LGIsQyxrLHcsTD10LmluZGVudFVuaXQsUz1lLm11bHRpbGluZVRhZ0luZGVudEZhY3Rvcnx8MSxNPWUubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZ3x8ITAsVD1lLmh0bWxNb2RlP3thdXRvU2VsZkNsb3NlcnM6e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxmcmFtZTohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxpbXBsaWNpdGx5Q2xvc2VkOntkZDohMCxsaTohMCxvcHRncm91cDohMCxvcHRpb246ITAscDohMCxycDohMCxydDohMCx0Ym9keTohMCx0ZDohMCx0Zm9vdDohMCx0aDohMCx0cjohMH0sY29udGV4dEdyYWJiZXJzOntkZDp7ZGQ6ITAsZHQ6ITB9LGR0OntkZDohMCxkdDohMH0sbGk6e2xpOiEwfSxvcHRpb246e29wdGlvbjohMCxvcHRncm91cDohMH0sb3B0Z3JvdXA6e29wdGdyb3VwOiEwfSxwOnthZGRyZXNzOiEwLGFydGljbGU6ITAsYXNpZGU6ITAsYmxvY2txdW90ZTohMCxkaXI6ITAsZGl2OiEwLGRsOiEwLGZpZWxkc2V0OiEwLGZvb3RlcjohMCxmb3JtOiEwLGgxOiEwLGgyOiEwLGgzOiEwLGg0OiEwLGg1OiEwLGg2OiEwLGhlYWRlcjohMCxoZ3JvdXA6ITAsaHI6ITAsbWVudTohMCxuYXY6ITAsb2w6ITAscDohMCxwcmU6ITAsc2VjdGlvbjohMCx0YWJsZTohMCx1bDohMH0scnA6e3JwOiEwLHJ0OiEwfSxydDp7cnA6ITAscnQ6ITB9LHRib2R5Ont0Ym9keTohMCx0Zm9vdDohMH0sdGQ6e3RkOiEwLHRoOiEwfSx0Zm9vdDp7dGJvZHk6ITB9LHRoOnt0ZDohMCx0aDohMH0sdGhlYWQ6e3Rib2R5OiEwLHRmb290OiEwfSx0cjp7dHI6ITB9fSxkb05vdEluZGVudDp7cHJlOiEwfSxhbGxvd1VucXVvdGVkOiEwLGFsbG93TWlzc2luZzohMH06e2F1dG9TZWxmQ2xvc2Vyczp7fSxpbXBsaWNpdGx5Q2xvc2VkOnt9LGNvbnRleHRHcmFiYmVyczp7fSxkb05vdEluZGVudDp7fSxhbGxvd1VucXVvdGVkOiExLGFsbG93TWlzc2luZzohMX0sQT1lLmFsaWduQ0RBVEE7cmV0dXJue3N0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57dG9rZW5pemU6cixjYzpbXSxpbmRlbnRlZDowLHN0YXJ0T2ZMaW5lOiEwLHRhZ05hbWU6bnVsbCx0YWdTdGFydDpudWxsLGNvbnRleHQ6bnVsbH19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYoIWUudGFnTmFtZSYmdC5zb2woKSYmKGUuc3RhcnRPZkxpbmU9ITAsZS5pbmRlbnRlZD10LmluZGVudGF0aW9uKCkpLHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDt3PWI9eD1udWxsO3ZhciByPWUudG9rZW5pemUodCxlKTtpZihlLnR5cGU9Yiwocnx8YikmJiJjb21tZW50IiE9cilmb3IoQz1lLGs9dDs7KXt2YXIgbj1lLmNjLnBvcCgpfHxmO2lmKG4oYnx8cikpYnJlYWt9cmV0dXJuIGUuc3RhcnRPZkxpbmU9ITEsdyYmKHI9ImVycm9yIj09dz9yKyIgZXJyb3IiOncpLHJ9LGluZGVudDpmdW5jdGlvbih0LGUsaSl7dmFyIG89dC5jb250ZXh0O2lmKHQudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSlyZXR1cm4gdC5zdHJpbmdTdGFydENvbCsxO2lmKHQudG9rZW5pemUhPW4mJnQudG9rZW5pemUhPXJ8fG8mJm8ubm9JbmRlbnQpcmV0dXJuIGk/aS5tYXRjaCgvXihccyopLylbMF0ubGVuZ3RoOjA7aWYodC50YWdOYW1lKXJldHVybiBNP3QudGFnU3RhcnQrdC50YWdOYW1lLmxlbmd0aCsyOnQudGFnU3RhcnQrTCpTO2lmKEEmJi88IVxbQ0RBVEFcWy8udGVzdChlKSlyZXR1cm4gMDtmb3IobyYmL148XC8vLnRlc3QoZSkmJihvPW8ucHJldik7byYmIW8uc3RhcnRPZkxpbmU7KW89by5wcmV2O3JldHVybiBvP28uaW5kZW50K0w6MH0sZWxlY3RyaWNDaGFyczoiLyIsYmxvY2tDb21tZW50U3RhcnQ6IjwhLS0iLGJsb2NrQ29tbWVudEVuZDoiLS0+Iixjb25maWd1cmF0aW9uOmUuaHRtbE1vZGU/Imh0bWwiOiJ4bWwiLGhlbHBlclR5cGU6ZS5odG1sTW9kZT8iaHRtbCI6InhtbCJ9fSksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIsInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwieG1sIiksQ29kZU1pcnJvci5taW1lTW9kZXMuaGFzT3duUHJvcGVydHkoInRleHQvaHRtbCIpfHxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIse25hbWU6InhtbCIsaHRtbE1vZGU6ITB9KTtQSwcIk9YPXYgyAACIMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAc3RhdGljXGxpYlxjb2RlbWlycm9yLm1pbi5qc3dpbmRvdy5Db2RlTWlycm9yPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQocixuKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQocixuKTt0aGlzLm9wdGlvbnM9bj1ufHx7fTtmb3IodmFyIGkgaW4gYW8pIW4uaGFzT3duUHJvcGVydHkoaSkmJmFvLmhhc093blByb3BlcnR5KGkpJiYobltpXT1hb1tpXSk7aChuKTt2YXIgbz0ic3RyaW5nIj09dHlwZW9mIG4udmFsdWU/MDpuLnZhbHVlLmZpcnN0LGw9dGhpcy5kaXNwbGF5PWUocixvKTtsLndyYXBwZXIuQ29kZU1pcnJvcj10aGlzLHUodGhpcyksbi5hdXRvZm9jdXMmJiFWaSYmcGUodGhpcyksdGhpcy5zdGF0ZT17a2V5TWFwczpbXSxvdmVybGF5czpbXSxtb2RlR2VuOjAsb3ZlcndyaXRlOiExLGZvY3VzZWQ6ITEsc3VwcHJlc3NFZGl0czohMSxwYXN0ZUluY29taW5nOiExLGRyYWdnaW5nVGV4dDohMSxoaWdobGlnaHQ6bmV3ICRufSxzKHRoaXMpLG4ubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIpO3ZhciBhPW4udmFsdWU7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcgd28obi52YWx1ZSxuLm1vZGUpKSxsZSh0aGlzLHBuKSh0aGlzLGEpLEFpJiZzZXRUaW1lb3V0KGlpKGRlLHRoaXMsITApLDIwKSxtZSh0aGlzKTt2YXIgYzt0cnl7Yz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0fWNhdGNoKGYpe31jfHxuLmF1dG9mb2N1cyYmIVZpP3NldFRpbWVvdXQoaWkoRWUsdGhpcyksMjApOnplKHRoaXMpLGxlKHRoaXMsZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gc28pc28ucHJvcGVydHlJc0VudW1lcmFibGUodCkmJnNvW3RdKHRoaXMsblt0XSx1byk7Zm9yKHZhciBlPTA7ZTxwby5sZW5ndGg7KytlKXBvW2VdKHRoaXMpfSkoKX1mdW5jdGlvbiBlKHQsZSl7dmFyIHI9e30sbj1yLmlucHV0PXNpKCJ0ZXh0YXJlYSIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lOyBmb250LXNpemU6IDRweDsiKTtyZXR1cm4gV2k/bi5zdHlsZS53aWR0aD0iMTAwMHB4IjpuLnNldEF0dHJpYnV0ZSgid3JhcCIsIm9mZiIpLEdpJiYobi5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwiZmFsc2UiKSxyLmlucHV0RGl2PXNpKCJkaXYiLFtuXSxudWxsLCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIpLHIuc2Nyb2xsYmFySD1zaSgiZGl2Iixbc2koImRpdiIsbnVsbCxudWxsLCJoZWlnaHQ6IDFweCIpXSwiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIiksci5zY3JvbGxiYXJWPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiAxcHgiKV0sIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpLHIuc2Nyb2xsYmFyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpLHIuZ3V0dGVyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpLHIubGluZURpdj1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWNvZGUiKSxyLnNlbGVjdGlvbkRpdj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSIpLHIuY3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIiksci5vdGhlckN1cnNvcj1zaSgiZGl2IiwiwqAiLCJDb2RlTWlycm9yLWN1cnNvciBDb2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpLHIubWVhc3VyZT1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLW1lYXN1cmUiKSxyLmxpbmVTcGFjZT1zaSgiZGl2Iixbci5tZWFzdXJlLHIuc2VsZWN0aW9uRGl2LHIubGluZURpdixyLmN1cnNvcixyLm90aGVyQ3Vyc29yXSxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKSxyLm1vdmVyPXNpKCJkaXYiLFtzaSgiZGl2Iixbci5saW5lU3BhY2VdLCJDb2RlTWlycm9yLWxpbmVzIildLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpLHIuc2l6ZXI9c2koImRpdiIsW3IubW92ZXJdLCJDb2RlTWlycm9yLXNpemVyIiksci5oZWlnaHRGb3JjZXI9c2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIitUbysicHg7IHdpZHRoOiAxcHg7Iiksci5ndXR0ZXJzPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVycyIpLHIubGluZUd1dHRlcj1udWxsLHIuc2Nyb2xsZXI9c2koImRpdiIsW3Iuc2l6ZXIsci5oZWlnaHRGb3JjZXIsci5ndXR0ZXJzXSwiQ29kZU1pcnJvci1zY3JvbGwiKSxyLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCItMSIpLHIud3JhcHBlcj1zaSgiZGl2Iixbci5pbnB1dERpdixyLnNjcm9sbGJhckgsci5zY3JvbGxiYXJWLHIuc2Nyb2xsYmFyRmlsbGVyLHIuZ3V0dGVyRmlsbGVyLHIuc2Nyb2xsZXJdLCJDb2RlTWlycm9yIiksSGkmJihyLmd1dHRlcnMuc3R5bGUuekluZGV4PS0xLHIuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0PTApLHQuYXBwZW5kQ2hpbGQ/dC5hcHBlbmRDaGlsZChyLndyYXBwZXIpOnQoci53cmFwcGVyKSxHaSYmKG4uc3R5bGUud2lkdGg9IjBweCIpLFdpfHwoci5zY3JvbGxlci5kcmFnZ2FibGU9ITApLEZpPyhyLmlucHV0RGl2LnN0eWxlLmhlaWdodD0iMXB4IixyLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIpOkhpJiYoci5zY3JvbGxiYXJILnN0eWxlLm1pbldpZHRoPXIuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aD0iMThweCIpLHIudmlld09mZnNldD1yLmxhc3RTaXplQz0wLHIuc2hvd2luZ0Zyb209ci5zaG93aW5nVG89ZSxyLmxpbmVOdW1XaWR0aD1yLmxpbmVOdW1Jbm5lcldpZHRoPXIubGluZU51bUNoYXJzPW51bGwsci5wcmV2SW5wdXQ9IiIsci5hbGlnbldpZGdldHM9ITEsci5wb2xsaW5nRmFzdD0hMSxyLnBvbGw9bmV3ICRuLHIuY2FjaGVkQ2hhcldpZHRoPXIuY2FjaGVkVGV4dEhlaWdodD1udWxsLHIubWVhc3VyZUxpbmVDYWNoZT1bXSxyLm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCxyLmluYWNjdXJhdGVTZWxlY3Rpb249ITEsci5tYXhMaW5lPW51bGwsci5tYXhMaW5lTGVuZ3RoPTAsci5tYXhMaW5lQ2hhbmdlZD0hMSxyLndoZWVsRFg9ci53aGVlbERZPXIud2hlZWxTdGFydFg9ci53aGVlbFN0YXJ0WT1udWxsLHJ9ZnVuY3Rpb24gcihlKXtlLmRvYy5tb2RlPXQuZ2V0TW9kZShlLm9wdGlvbnMsZS5kb2MubW9kZU9wdGlvbiksZS5kb2MuaXRlcihmdW5jdGlvbih0KXt0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKX0pLGUuZG9jLmZyb250aWVyPWUuZG9jLmZpcnN0LFcoZSwxMDApLGUuc3RhdGUubW9kZUdlbisrLGUuY3VyT3AmJnVlKGUpfWZ1bmN0aW9uIG4odCl7dC5vcHRpb25zLmxpbmVXcmFwcGluZz8odC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIsdC5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoPSIiKToodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci13cmFwIiwiIiksZih0KSksbyh0KSx1ZSh0KSxfKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkKHQpfSwxMDApfWZ1bmN0aW9uIGkodCl7dmFyIGU9cmUodC5kaXNwbGF5KSxyPXQub3B0aW9ucy5saW5lV3JhcHBpbmcsbj1yJiZNYXRoLm1heCg1LHQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC9uZSh0LmRpc3BsYXkpLTMpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gVnIodC5kb2MsaSk/MDpyPyhNYXRoLmNlaWwoaS50ZXh0Lmxlbmd0aC9uKXx8MSkqZTplfX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQuZG9jLHI9aSh0KTtlLml0ZXIoZnVuY3Rpb24odCl7dmFyIGU9cih0KTtlIT10LmhlaWdodCYmeW4odCxlKX0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dm9bdC5vcHRpb25zLmtleU1hcF0scj1lLnN0eWxlO3QuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20ta2V5bWFwLVxTKy9nLCIiKSsocj8iIGNtLWtleW1hcC0iK3I6IiIpLHQuc3RhdGUuZGlzYWJsZUlucHV0PWUuZGlzYWJsZUlucHV0fWZ1bmN0aW9uIHModCl7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCIiKSt0Lm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XHMpXHMqL2csIiBjbS1zLSIpLF8odCl9ZnVuY3Rpb24gYSh0KXt1KHQpLHVlKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtnKHQpfSwyMCl9ZnVuY3Rpb24gdSh0KXt2YXIgZT10LmRpc3BsYXkuZ3V0dGVycyxyPXQub3B0aW9ucy5ndXR0ZXJzO2FpKGUpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dLG89ZS5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlciAiK2kpKTsiQ29kZU1pcnJvci1saW5lbnVtYmVycyI9PWkmJih0LmRpc3BsYXkubGluZUd1dHRlcj1vLG8uc3R5bGUud2lkdGg9KHQuZGlzcGxheS5saW5lTnVtV2lkdGh8fDEpKyJweCIpfWUuc3R5bGUuZGlzcGxheT1uPyIiOiJub25lIn1mdW5jdGlvbiBjKHQsZSl7aWYoMD09ZS5oZWlnaHQpcmV0dXJuIDA7Zm9yKHZhciByLG49ZS50ZXh0Lmxlbmd0aCxpPWU7cj1ScihpKTspe3ZhciBvPXIuZmluZCgpO2k9Z24odCxvLmZyb20ubGluZSksbis9by5mcm9tLmNoLW8udG8uY2h9Zm9yKGk9ZTtyPUJyKGkpOyl7dmFyIG89ci5maW5kKCk7bi09aS50ZXh0Lmxlbmd0aC1vLmZyb20uY2gsaT1nbih0LG8udG8ubGluZSksbis9aS50ZXh0Lmxlbmd0aC1vLnRvLmNofXJldHVybiBufWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2M7ZS5tYXhMaW5lPWduKHIsci5maXJzdCksZS5tYXhMaW5lTGVuZ3RoPWMocixlLm1heExpbmUpLGUubWF4TGluZUNoYW5nZWQ9ITAsci5pdGVyKGZ1bmN0aW9uKHQpe3ZhciBuPWMocix0KTtuPmUubWF4TGluZUxlbmd0aCYmKGUubWF4TGluZUxlbmd0aD1uLGUubWF4TGluZT10KX0pfWZ1bmN0aW9uIGgodCl7dmFyIGU9dGkodC5ndXR0ZXJzLCJDb2RlTWlycm9yLWxpbmVudW1iZXJzIik7LTE9PWUmJnQubGluZU51bWJlcnM/dC5ndXR0ZXJzPXQuZ3V0dGVycy5jb25jYXQoWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0pOmU+LTEmJiF0LmxpbmVOdW1iZXJzJiYodC5ndXR0ZXJzPXQuZ3V0dGVycy5zbGljZSgwKSx0Lmd1dHRlcnMuc3BsaWNlKGUsMSkpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2MuaGVpZ2h0LG49citGKGUpO2Uuc2l6ZXIuc3R5bGUubWluSGVpZ2h0PWUuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcD1uKyJweCIsZS5ndXR0ZXJzLnN0eWxlLmhlaWdodD1NYXRoLm1heChuLGUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LVRvKSsicHgiO3ZhciBpPU1hdGgubWF4KG4sZS5zY3JvbGxlci5zY3JvbGxIZWlnaHQpLG89ZS5zY3JvbGxlci5zY3JvbGxXaWR0aD5lLnNjcm9sbGVyLmNsaWVudFdpZHRoKzEsbD1pPmUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KzE7bD8oZS5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhclYuc3R5bGUuYm90dG9tPW8/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9aS1lLnNjcm9sbGVyLmNsaWVudEhlaWdodCtlLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KyJweCIpOihlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9IjAiKSxvPyhlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFySC5zdHlsZS5yaWdodD1sP2RpKGUubWVhc3VyZSkrInB4IjoiMCIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9ZS5zY3JvbGxlci5zY3JvbGxXaWR0aC1lLnNjcm9sbGVyLmNsaWVudFdpZHRoK2Uuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCsicHgiKTooZS5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXk9IiIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjAiKSxvJiZsPyhlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoPWRpKGUubWVhc3VyZSkrInB4Iik6ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixvJiZ0Lm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXImJnQub3B0aW9ucy5maXhlZEd1dHRlcj8oZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodD1kaShlLm1lYXN1cmUpKyJweCIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGg9ZS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCIpOmUuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXk9IiIsUGkmJjA9PT1kaShlLm1lYXN1cmUpJiYoZS5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPWUuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQ9Umk/IjE4cHgiOiIxMnB4IixlLnNjcm9sbGJhclYuc3R5bGUucG9pbnRlckV2ZW50cz1lLnNjcm9sbGJhckguc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXQuc2Nyb2xsZXIuc2Nyb2xsVG9wLGk9dC53cmFwcGVyLmNsaWVudEhlaWdodDsibnVtYmVyIj09dHlwZW9mIHI/bj1yOnImJihuPXIudG9wLGk9ci5ib3R0b20tci50b3ApLG49TWF0aC5mbG9vcihuLUkodCkpO3ZhciBvPU1hdGguY2VpbChuK2kpO3JldHVybntmcm9tOnhuKGUsbiksdG86eG4oZSxvKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10LmRpc3BsYXk7aWYoZS5hbGlnbldpZGdldHN8fGUuZ3V0dGVycy5maXJzdENoaWxkJiZ0Lm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgcj15KGUpLWUuc2Nyb2xsZXIuc2Nyb2xsTGVmdCt0LmRvYy5zY3JvbGxMZWZ0LG49ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGk9cisicHgiLG89ZS5saW5lRGl2LmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpaWYoby5hbGlnbmFibGUpZm9yKHZhciBsPTAscz1vLmFsaWduYWJsZTtsPHMubGVuZ3RoOysrbClzW2xdLnN0eWxlLmxlZnQ9aTt0Lm9wdGlvbnMuZml4ZWRHdXR0ZXImJihlLmd1dHRlcnMuc3R5bGUubGVmdD1yK24rInB4Iil9fWZ1bmN0aW9uIG0odCl7aWYoIXQub3B0aW9ucy5saW5lTnVtYmVycylyZXR1cm4hMTt2YXIgZT10LmRvYyxyPXYodC5vcHRpb25zLGUuZmlyc3QrZS5zaXplLTEpLG49dC5kaXNwbGF5O2lmKHIubGVuZ3RoIT1uLmxpbmVOdW1DaGFycyl7dmFyIGk9bi5tZWFzdXJlLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzaSgiZGl2IixyKV0sIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSksbz1pLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsbD1pLm9mZnNldFdpZHRoLW87cmV0dXJuIG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD0iIixuLmxpbmVOdW1Jbm5lcldpZHRoPU1hdGgubWF4KG8sbi5saW5lR3V0dGVyLm9mZnNldFdpZHRoLWwpLG4ubGluZU51bVdpZHRoPW4ubGluZU51bUlubmVyV2lkdGgrbCxuLmxpbmVOdW1DaGFycz1uLmxpbmVOdW1Jbm5lcldpZHRoP3IubGVuZ3RoOi0xLG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD1uLmxpbmVOdW1XaWR0aCsicHgiLCEwfXJldHVybiExfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gU3RyaW5nKHQubGluZU51bWJlckZvcm1hdHRlcihlK3QuZmlyc3RMaW5lTnVtYmVyKSl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZmkodC5zY3JvbGxlcikubGVmdC1maSh0LnNpemVyKS5sZWZ0fWZ1bmN0aW9uIGIodCxlLHIsbil7Zm9yKHZhciBpLG89dC5kaXNwbGF5LnNob3dpbmdGcm9tLGw9dC5kaXNwbGF5LnNob3dpbmdUbyxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLGE9ITA7O2E9ITEpe3ZhciB1PXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtpZigheCh0LGUscyxuKSlicmVhaztpZihpPSEwLGU9W10sQSh0KSxkKHQpLGEmJnQub3B0aW9ucy5saW5lV3JhcHBpbmcmJnUhPXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCluPSEwO2Vsc2UgaWYobj0hMSxyJiYocj1NYXRoLm1pbih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIm51bWJlciI9PXR5cGVvZiByP3I6ci50b3ApKSxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLHMuZnJvbT49dC5kaXNwbGF5LnNob3dpbmdGcm9tJiZzLnRvPD10LmRpc3BsYXkuc2hvd2luZ1RvKWJyZWFrfXJldHVybiBpJiYoVW4odCwidXBkYXRlIix0KSwodC5kaXNwbGF5LnNob3dpbmdGcm9tIT1vfHx0LmRpc3BsYXkuc2hvd2luZ1RvIT1sKSYmVW4odCwidmlld3BvcnRDaGFuZ2UiLHQsdC5kaXNwbGF5LnNob3dpbmdGcm9tLHQuZGlzcGxheS5zaG93aW5nVG8pKSxpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9dC5kaXNwbGF5LG89dC5kb2M7aWYoIWkud3JhcHBlci5jbGllbnRXaWR0aClyZXR1cm4gaS5zaG93aW5nRnJvbT1pLnNob3dpbmdUbz1vLmZpcnN0LGkudmlld09mZnNldD0wLHZvaWQgMDtpZighKCFuJiYwPT1lLmxlbmd0aCYmci5mcm9tPmkuc2hvd2luZ0Zyb20mJnIudG88aS5zaG93aW5nVG8pKXttKHQpJiYoZT1be2Zyb206by5maXJzdCx0bzpvLmZpcnN0K28uc2l6ZX1dKTt2YXIgbD1pLnNpemVyLnN0eWxlLm1hcmdpbkxlZnQ9aS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCI7aS5zY3JvbGxiYXJILnN0eWxlLmxlZnQ9dC5vcHRpb25zLmZpeGVkR3V0dGVyP2w6IjAiO3ZhciBzPTEvMDtpZih0Lm9wdGlvbnMubGluZU51bWJlcnMpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpZVthXS5kaWZmJiZlW2FdLmZyb208cyYmKHM9ZVthXS5mcm9tKTt2YXIgdT1vLmZpcnN0K28uc2l6ZSxjPU1hdGgubWF4KHIuZnJvbS10Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4sby5maXJzdCksZj1NYXRoLm1pbih1LHIudG8rdC5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtpZihpLnNob3dpbmdGcm9tPGMmJmMtaS5zaG93aW5nRnJvbTwyMCYmKGM9TWF0aC5tYXgoby5maXJzdCxpLnNob3dpbmdGcm9tKSksaS5zaG93aW5nVG8+ZiYmaS5zaG93aW5nVG8tZjwyMCYmKGY9TWF0aC5taW4odSxpLnNob3dpbmdUbykpLFFpKWZvcihjPWJuKEdyKG8sZ24obyxjKSkpO3U+ZiYmVnIobyxnbihvLGYpKTspKytmO3ZhciBoPVt7ZnJvbTpNYXRoLm1heChpLnNob3dpbmdGcm9tLG8uZmlyc3QpLHRvOk1hdGgubWluKGkuc2hvd2luZ1RvLHUpfV07aWYoaD1oWzBdLmZyb20+PWhbMF0udG8/W106TChoLGUpLFFpKWZvcih2YXIgYT0wO2E8aC5sZW5ndGg7KythKWZvcih2YXIgZCxwPWhbYV07ZD1CcihnbihvLHAudG8tMSkpOyl7dmFyIGc9ZC5maW5kKCkuZnJvbS5saW5lO2lmKCEoZz5wLmZyb20pKXtoLnNwbGljZShhLS0sMSk7YnJlYWt9cC50bz1nfWZvcih2YXIgdj0wLGE9MDthPGgubGVuZ3RoOysrYSl7dmFyIHA9aFthXTtwLmZyb208YyYmKHAuZnJvbT1jKSxwLnRvPmYmJihwLnRvPWYpLHAuZnJvbT49cC50bz9oLnNwbGljZShhLS0sMSk6dis9cC50by1wLmZyb219aWYoIW4mJnY9PWYtYyYmYz09aS5zaG93aW5nRnJvbSYmZj09aS5zaG93aW5nVG8pcmV0dXJuIHcodCksdm9pZCAwO2guc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmZyb20tZS5mcm9tfSk7dHJ5e3ZhciB5PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYil7fS43KihmLWMpPnYmJihpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIpLFModCxjLGYsaCxzKSxpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0iIix5JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT15JiZ5Lm9mZnNldEhlaWdodCYmeS5mb2N1cygpO3ZhciB4PWMhPWkuc2hvd2luZ0Zyb218fGYhPWkuc2hvd2luZ1RvfHxpLmxhc3RTaXplQyE9aS53cmFwcGVyLmNsaWVudEhlaWdodDtyZXR1cm4geCYmKGkubGFzdFNpemVDPWkud3JhcHBlci5jbGllbnRIZWlnaHQsVyh0LDQwMCkpLGkuc2hvd2luZ0Zyb209YyxpLnNob3dpbmdUbz1mLEModCksdyh0KSwhMH19ZnVuY3Rpb24gQyh0KXtmb3IodmFyIGUscj10LmRpc3BsYXksbj1yLmxpbmVEaXYub2Zmc2V0VG9wLGk9ci5saW5lRGl2LmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpaWYoaS5saW5lT2JqKXtpZihIaSl7dmFyIG89aS5vZmZzZXRUb3AraS5vZmZzZXRIZWlnaHQ7ZT1vLW4sbj1vfWVsc2V7dmFyIGw9ZmkoaSk7ZT1sLmJvdHRvbS1sLnRvcH12YXIgcz1pLmxpbmVPYmouaGVpZ2h0LWU7aWYoMj5lJiYoZT1yZShyKSkscz4uMDAxfHwtLjAwMT5zKXt5bihpLmxpbmVPYmosZSk7dmFyIGE9aS5saW5lT2JqLndpZGdldHM7aWYoYSlmb3IodmFyIHU9MDt1PGEubGVuZ3RoOysrdSlhW3VdLmhlaWdodD1hW3VdLm5vZGUub2Zmc2V0SGVpZ2h0fX19ZnVuY3Rpb24gdyh0KXt2YXIgZT10LmRpc3BsYXkudmlld09mZnNldD1Dbih0LGduKHQuZG9jLHQuZGlzcGxheS5zaG93aW5nRnJvbSkpO3QuZGlzcGxheS5tb3Zlci5zdHlsZS50b3A9ZSsicHgifWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RofHwwO24+cjsrK3Ipe2Zvcih2YXIgaT1lW3JdLG89W10sbD1pLmRpZmZ8fDAscz0wLGE9dC5sZW5ndGg7YT5zOysrcyl7dmFyIHU9dFtzXTtpLnRvPD11LmZyb20mJmkuZGlmZj9vLnB1c2goe2Zyb206dS5mcm9tK2wsdG86dS50bytsfSk6aS50bzw9dS5mcm9tfHxpLmZyb20+PXUudG8/by5wdXNoKHUpOihpLmZyb20+dS5mcm9tJiZvLnB1c2goe2Zyb206dS5mcm9tLHRvOmkuZnJvbX0pLGkudG88dS50byYmby5wdXNoKHtmcm9tOmkudG8rbCx0bzp1LnRvK2x9KSl9dD1vfXJldHVybiB0fWZ1bmN0aW9uIGsodCl7Zm9yKHZhciBlPXQuZGlzcGxheSxyPXt9LG49e30saT1lLmd1dHRlcnMuZmlyc3RDaGlsZCxvPTA7aTtpPWkubmV4dFNpYmxpbmcsKytvKXJbdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0TGVmdCxuW3Qub3B0aW9ucy5ndXR0ZXJzW29dXT1pLm9mZnNldFdpZHRoO3JldHVybntmaXhlZFBvczp5KGUpLGd1dHRlclRvdGFsV2lkdGg6ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGd1dHRlckxlZnQ6cixndXR0ZXJXaWR0aDpuLHdyYXBwZXJXaWR0aDplLndyYXBwZXIuY2xpZW50V2lkdGh9fWZ1bmN0aW9uIFModCxlLHIsbixpKXtmdW5jdGlvbiBvKGUpe3ZhciByPWUubmV4dFNpYmxpbmc7cmV0dXJuIFdpJiZLaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD09ZT8oZS5zdHlsZS5kaXNwbGF5PSJub25lIixlLmxpbmVPYmo9bnVsbCk6ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLHJ9dmFyIGw9ayh0KSxzPXQuZGlzcGxheSxhPXQub3B0aW9ucy5saW5lTnVtYmVycztuLmxlbmd0aHx8V2kmJnQuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXR8fGFpKHMubGluZURpdik7dmFyIHU9cy5saW5lRGl2LGM9dS5maXJzdENoaWxkLGY9bi5zaGlmdCgpLGg9ZTtmb3IodC5kb2MuaXRlcihlLHIsZnVuY3Rpb24oZSl7aWYoZiYmZi50bz09aCYmKGY9bi5zaGlmdCgpKSxWcih0LmRvYyxlKSl7aWYoMCE9ZS5oZWlnaHQmJnluKGUsMCksZS53aWRnZXRzJiZjJiZjLnByZXZpb3VzU2libGluZylmb3IodmFyIHI9MDtyPGUud2lkZ2V0cy5sZW5ndGg7KytyKXt2YXIgcz1lLndpZGdldHNbcl07aWYocy5zaG93SWZIaWRkZW4pe3ZhciBkPWMucHJldmlvdXNTaWJsaW5nO2lmKC9wcmUvaS50ZXN0KGQubm9kZU5hbWUpKXt2YXIgcD1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpO2QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocCxkKSxwLmFwcGVuZENoaWxkKGQpLGQ9cH12YXIgZz1kLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzLm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKSk7cy5oYW5kbGVNb3VzZUV2ZW50c3x8KGcuaWdub3JlRXZlbnRzPSEwKSxUKHMsZyxkLGwpfX19ZWxzZSBpZihmJiZmLmZyb208PWgmJmYudG8+aCl7Zm9yKDtjLmxpbmVPYmohPWU7KWM9byhjKTthJiZoPj1pJiZjLmxpbmVOdW1iZXImJmNpKGMubGluZU51bWJlcix2KHQub3B0aW9ucyxoKSksYz1jLm5leHRTaWJsaW5nfWVsc2V7aWYoZS53aWRnZXRzKWZvcih2YXIgbSx5PTAsYj1jO2ImJjIwPnk7Kyt5LGI9Yi5uZXh0U2libGluZylpZihiLmxpbmVPYmo9PWUmJi9kaXYvaS50ZXN0KGIubm9kZU5hbWUpKXttPWI7YnJlYWt9dmFyIHg9TSh0LGUsaCxsLG0pO2lmKHghPW0pdS5pbnNlcnRCZWZvcmUoeCxjKTtlbHNle2Zvcig7YyE9bTspYz1vKGMpO2M9Yy5uZXh0U2libGluZ314LmxpbmVPYmo9ZX0rK2h9KTtjOyljPW8oYyl9ZnVuY3Rpb24gTSh0LGUscixuLGkpe3ZhciBvLGw9cm4odCxlKSxzPWwucHJlLGE9ZS5ndXR0ZXJNYXJrZXJzLHU9dC5kaXNwbGF5LGM9bC5iZ0NsYXNzP2wuYmdDbGFzcysiICIrKGUuYmdDbGFzc3x8IiIpOmUuYmdDbGFzcztpZighKHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YXx8Y3x8ZS53cmFwQ2xhc3N8fGUud2lkZ2V0cykpcmV0dXJuIHM7aWYoaSl7aS5hbGlnbmFibGU9bnVsbDtmb3IodmFyIGYsaD0hMCxkPTAscD1udWxsLGc9aS5maXJzdENoaWxkO2c7Zz1mKWlmKGY9Zy5uZXh0U2libGluZywvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChnLmNsYXNzTmFtZSkpe2Zvcih2YXIgbT0wO208ZS53aWRnZXRzLmxlbmd0aDsrK20pe3ZhciB5PWUud2lkZ2V0c1ttXTtpZih5Lm5vZGU9PWcuZmlyc3RDaGlsZCl7eS5hYm92ZXx8cHx8KHA9ZyksVCh5LGcsaSxuKSwrK2Q7YnJlYWt9fWlmKG09PWUud2lkZ2V0cy5sZW5ndGgpe2g9ITE7YnJlYWt9fWVsc2UgaS5yZW1vdmVDaGlsZChnKTtpLmluc2VydEJlZm9yZShzLHApLGgmJmQ9PWUud2lkZ2V0cy5sZW5ndGgmJihvPWksaS5jbGFzc05hbWU9ZS53cmFwQ2xhc3N8fCIiKX1pZihvfHwobz1zaSgiZGl2IixudWxsLGUud3JhcENsYXNzLCJwb3NpdGlvbjogcmVsYXRpdmUiKSxvLmFwcGVuZENoaWxkKHMpKSxjJiZvLmluc2VydEJlZm9yZShzaSgiZGl2IixudWxsLGMrIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIiksby5maXJzdENoaWxkKSx0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEpe3ZhciBiPW8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiKyh0Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bi5maXhlZFBvczotbi5ndXR0ZXJUb3RhbFdpZHRoKSsicHgiKSxvLmZpcnN0Q2hpbGQpO2lmKHQub3B0aW9ucy5maXhlZEd1dHRlciYmKG8uYWxpZ25hYmxlfHwoby5hbGlnbmFibGU9W10pKS5wdXNoKGIpLCF0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEmJmFbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXXx8KG8ubGluZU51bWJlcj1iLmFwcGVuZENoaWxkKHNpKCJkaXYiLHYodC5vcHRpb25zLHIpLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIituLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSsicHg7IHdpZHRoOiAiK3UubGluZU51bUlubmVyV2lkdGgrInB4IikpKSxhKWZvcih2YXIgeD0wO3g8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysreCl7dmFyIEM9dC5vcHRpb25zLmd1dHRlcnNbeF0sdz1hLmhhc093blByb3BlcnR5KEMpJiZhW0NdO3cmJmIuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3ddLCJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFtDXSsicHg7IHdpZHRoOiAiK24uZ3V0dGVyV2lkdGhbQ10rInB4IikpfX1pZihIaSYmKG8uc3R5bGUuekluZGV4PTIpLGUud2lkZ2V0cyYmbyE9aSlmb3IodmFyIG09MCxMPWUud2lkZ2V0czttPEwubGVuZ3RoOysrbSl7dmFyIHk9TFttXSxrPXNpKCJkaXYiLFt5Lm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTt5LmhhbmRsZU1vdXNlRXZlbnRzfHwoay5pZ25vcmVFdmVudHM9ITApLFQoeSxrLG8sbikseS5hYm92ZT9vLmluc2VydEJlZm9yZShrLHQub3B0aW9ucy5saW5lTnVtYmVycyYmMCE9ZS5oZWlnaHQ/YjpzKTpvLmFwcGVuZENoaWxkKGspLFVuKHksInJlZHJhdyIpfXJldHVybiBvfWZ1bmN0aW9uIFQodCxlLHIsbil7aWYodC5ub0hTY3JvbGwpeyhyLmFsaWduYWJsZXx8KHIuYWxpZ25hYmxlPVtdKSkucHVzaChlKTt2YXIgaT1uLndyYXBwZXJXaWR0aDtlLnN0eWxlLmxlZnQ9bi5maXhlZFBvcysicHgiLHQuY292ZXJHdXR0ZXJ8fChpLT1uLmd1dHRlclRvdGFsV2lkdGgsZS5zdHlsZS5wYWRkaW5nTGVmdD1uLmd1dHRlclRvdGFsV2lkdGgrInB4IiksZS5zdHlsZS53aWR0aD1pKyJweCJ9dC5jb3Zlckd1dHRlciYmKGUuc3R5bGUuekluZGV4PTUsZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHQubm9IU2Nyb2xsfHwoZS5zdHlsZS5tYXJnaW5MZWZ0PS1uLmd1dHRlclRvdGFsV2lkdGgrInB4IikpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5kaXNwbGF5LHI9amUodC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvKTtpZihyfHx0Lm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3Rpbmc/SCh0KTplLmN1cnNvci5zdHlsZS5kaXNwbGF5PWUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIscj9lLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSJub25lIjpOKHQpLHQub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKXt2YXIgbj1RKHQsdC5kb2Muc2VsLmhlYWQsImRpdiIpLGk9ZmkoZS53cmFwcGVyKSxvPWZpKGUubGluZURpdik7ZS5pbnB1dERpdi5zdHlsZS50b3A9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50SGVpZ2h0LTEwLG4udG9wK28udG9wLWkudG9wKSkrInB4IixlLmlucHV0RGl2LnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50V2lkdGgtMTAsbi5sZWZ0K28ubGVmdC1pLmxlZnQpKSsicHgifX1mdW5jdGlvbiBIKHQpe3ZhciBlPXQuZGlzcGxheSxyPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2Iik7ZS5jdXJzb3Iuc3R5bGUubGVmdD1yLmxlZnQrInB4IixlLmN1cnNvci5zdHlsZS50b3A9ci50b3ArInB4IixlLmN1cnNvci5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxyLmJvdHRvbS1yLnRvcCkqdC5vcHRpb25zLmN1cnNvckhlaWdodCsicHgiLGUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5vdGhlcj8oZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLGUub3RoZXJDdXJzb3Iuc3R5bGUubGVmdD1yLm90aGVyLmxlZnQrInB4IixlLm90aGVyQ3Vyc29yLnN0eWxlLnRvcD1yLm90aGVyLnRvcCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0PS44NSooci5vdGhlci5ib3R0b20tci5vdGhlci50b3ApKyJweCIpOmUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZnVuY3Rpb24gTih0KXtmdW5jdGlvbiBlKHQsZSxyLG4pezA+ZSYmKGU9MCksbC5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLXNlbGVjdGVkIiwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiK3QrInB4OyB0b3A6ICIrZSsicHg7IHdpZHRoOiAiKyhudWxsPT1yP3MtdDpyKSsicHg7IGhlaWdodDogIisobi1lKSsicHgiKSl9ZnVuY3Rpb24gcihyLG4sbyl7ZnVuY3Rpb24gbChlLG4pe3JldHVybiBxKHQsWWUocixlKSwiZGl2IixmLG4pfXZhciB1LGMsZj1nbihpLHIpLGg9Zi50ZXh0Lmxlbmd0aDtyZXR1cm4gZ2kod24oZiksbnx8MCxudWxsPT1vP2g6byxmdW5jdGlvbih0LHIsaSl7dmFyIGYsZCxwLGc9bCh0LCJsZWZ0Iik7aWYodD09cilmPWcsZD1wPWcubGVmdDtlbHNle2lmKGY9bChyLTEsInJpZ2h0IiksInJ0bCI9PWkpe3ZhciBtPWc7Zz1mLGY9bX1kPWcubGVmdCxwPWYucmlnaHR9bnVsbD09biYmMD09dCYmKGQ9YSksZi50b3AtZy50b3A+MyYmKGUoZCxnLnRvcCxudWxsLGcuYm90dG9tKSxkPWEsZy5ib3R0b208Zi50b3AmJmUoZCxnLmJvdHRvbSxudWxsLGYudG9wKSksbnVsbD09byYmcj09aCYmKHA9cyksKCF1fHxnLnRvcDx1LnRvcHx8Zy50b3A9PXUudG9wJiZnLmxlZnQ8dS5sZWZ0KSYmKHU9ZyksKCFjfHxmLmJvdHRvbT5jLmJvdHRvbXx8Zi5ib3R0b209PWMuYm90dG9tJiZmLnJpZ2h0PmMucmlnaHQpJiYoYz1mKSxhKzE+ZCYmKGQ9YSksZShkLGYudG9wLHAtZCxmLmJvdHRvbSl9KSx7c3RhcnQ6dSxlbmQ6Y319dmFyIG49dC5kaXNwbGF5LGk9dC5kb2Msbz10LmRvYy5zZWwsbD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscz1uLmxpbmVTcGFjZS5vZmZzZXRXaWR0aCxhPVAodC5kaXNwbGF5KTtpZihvLmZyb20ubGluZT09by50by5saW5lKXIoby5mcm9tLmxpbmUsby5mcm9tLmNoLG8udG8uY2gpO2Vsc2V7dmFyIHU9Z24oaSxvLmZyb20ubGluZSksYz1nbihpLG8udG8ubGluZSksZj1HcihpLHUpPT1HcihpLGMpLGg9cihvLmZyb20ubGluZSxvLmZyb20uY2gsZj91LnRleHQubGVuZ3RoOm51bGwpLmVuZCxkPXIoby50by5saW5lLGY/MDpudWxsLG8udG8uY2gpLnN0YXJ0O2YmJihoLnRvcDxkLnRvcC0yPyhlKGgucmlnaHQsaC50b3AsbnVsbCxoLmJvdHRvbSksZShhLGQudG9wLGQubGVmdCxkLmJvdHRvbSkpOmUoaC5yaWdodCxoLnRvcCxkLmxlZnQtaC5yaWdodCxoLmJvdHRvbSkpLGguYm90dG9tPGQudG9wJiZlKGEsaC5ib3R0b20sbnVsbCxkLnRvcCl9dWkobi5zZWxlY3Rpb25EaXYsbCksbi5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheT0iIn1mdW5jdGlvbiBEKHQpe2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIGU9dC5kaXNwbGF5O2NsZWFySW50ZXJ2YWwoZS5ibGlua2VyKTt2YXIgcj0hMDtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0iIix0Lm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlPjAmJihlLmJsaW5rZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0ocj0hcik/IiI6ImhpZGRlbiJ9LHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpKX19ZnVuY3Rpb24gVyh0LGUpe3QuZG9jLm1vZGUuc3RhcnRTdGF0ZSYmdC5kb2MuZnJvbnRpZXI8dC5kaXNwbGF5LnNob3dpbmdUbyYmdC5zdGF0ZS5oaWdobGlnaHQuc2V0KGUsaWkoTyx0KSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmRvYztpZihlLmZyb250aWVyPGUuZmlyc3QmJihlLmZyb250aWVyPWUuZmlyc3QpLCEoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdUbykpe3ZhciByLG49K25ldyBEYXRlK3Qub3B0aW9ucy53b3JrVGltZSxpPWJyKGUubW9kZSx6KHQsZS5mcm9udGllcikpLG89W107ZS5pdGVyKGUuZnJvbnRpZXIsTWF0aC5taW4oZS5maXJzdCtlLnNpemUsdC5kaXNwbGF5LnNob3dpbmdUbys1MDApLGZ1bmN0aW9uKGwpe2lmKGUuZnJvbnRpZXI+PXQuZGlzcGxheS5zaG93aW5nRnJvbSl7dmFyIHM9bC5zdHlsZXM7bC5zdHlsZXM9UXIodCxsLGksITApO2Zvcih2YXIgYT0hc3x8cy5sZW5ndGghPWwuc3R5bGVzLmxlbmd0aCx1PTA7IWEmJnU8cy5sZW5ndGg7Kyt1KWE9c1t1XSE9bC5zdHlsZXNbdV07YSYmKHImJnIuZW5kPT1lLmZyb250aWVyP3IuZW5kKys6by5wdXNoKHI9e3N0YXJ0OmUuZnJvbnRpZXIsZW5kOmUuZnJvbnRpZXIrMX0pKSxsLnN0YXRlQWZ0ZXI9YnIoZS5tb2RlLGkpfWVsc2UgdG4odCxsLnRleHQsaSksbC5zdGF0ZUFmdGVyPTA9PWUuZnJvbnRpZXIlNT9icihlLm1vZGUsaSk6bnVsbDtyZXR1cm4rK2UuZnJvbnRpZXIsK25ldyBEYXRlPm4/KFcodCx0Lm9wdGlvbnMud29ya0RlbGF5KSwhMCk6dm9pZCAwfSksby5sZW5ndGgmJmxlKHQsZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoOysrdCl1ZSh0aGlzLG9bdF0uc3RhcnQsb1t0XS5lbmQpfSkoKX19ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuLGksbz10LmRvYyxsPXI/LTE6ZS0odC5kb2MubW9kZS5pbm5lck1vZGU/MWUzOjEwMCkscz1lO3M+bDstLXMpe2lmKHM8PW8uZmlyc3QpcmV0dXJuIG8uZmlyc3Q7dmFyIGE9Z24obyxzLTEpO2lmKGEuc3RhdGVBZnRlciYmKCFyfHxzPD1vLmZyb250aWVyKSlyZXR1cm4gczt2YXIgdT1abihhLnRleHQsbnVsbCx0Lm9wdGlvbnMudGFiU2l6ZSk7KG51bGw9PWl8fG4+dSkmJihpPXMtMSxuPXUpfXJldHVybiBpfWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXQuZG9jLGk9dC5kaXNwbGF5O2lmKCFuLm1vZGUuc3RhcnRTdGF0ZSlyZXR1cm4hMDt2YXIgbz1FKHQsZSxyKSxsPW8+bi5maXJzdCYmZ24obixvLTEpLnN0YXRlQWZ0ZXI7cmV0dXJuIGw9bD9icihuLm1vZGUsbCk6eHIobi5tb2RlKSxuLml0ZXIobyxlLGZ1bmN0aW9uKHIpe3RuKHQsci50ZXh0LGwpO3ZhciBzPW89PWUtMXx8MD09byU1fHxvPj1pLnNob3dpbmdGcm9tJiZvPGkuc2hvd2luZ1RvO3Iuc3RhdGVBZnRlcj1zP2JyKG4ubW9kZSxsKTpudWxsLCsrb30pLHImJihuLmZyb250aWVyPW8pLGx9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5saW5lU3BhY2Uub2Zmc2V0VG9wfWZ1bmN0aW9uIEYodCl7cmV0dXJuIHQubW92ZXIub2Zmc2V0SGVpZ2h0LXQubGluZVNwYWNlLm9mZnNldEhlaWdodH1mdW5jdGlvbiBQKHQpe3ZhciBlPXVpKHQubWVhc3VyZSxzaSgicHJlIixudWxsLG51bGwsInRleHQtYWxpZ246IGxlZnQiKSkuYXBwZW5kQ2hpbGQoc2koInNwYW4iLCJ4IikpO3JldHVybiBlLm9mZnNldExlZnR9ZnVuY3Rpb24gUih0LGUscixuLGkpe3ZhciBvPS0xO2lmKG49bnx8Vih0LGUpLG4uY3J1ZGUpe3ZhciBsPW4ubGVmdCtyKm4ud2lkdGg7cmV0dXJue2xlZnQ6bCxyaWdodDpsK24ud2lkdGgsdG9wOm4udG9wLGJvdHRvbTpuLmJvdHRvbX19Zm9yKHZhciBzPXI7O3MrPW8pe3ZhciBhPW5bc107aWYoYSlicmVhazswPm8mJjA9PXMmJihvPTEpfXJldHVybiBpPXM+cj8ibGVmdCI6cj5zPyJyaWdodCI6aSwibGVmdCI9PWkmJmEubGVmdFNpZGU/YT1hLmxlZnRTaWRlOiJyaWdodCI9PWkmJmEucmlnaHRTaWRlJiYoYT1hLnJpZ2h0U2lkZSkse2xlZnQ6cj5zP2EucmlnaHQ6YS5sZWZ0LHJpZ2h0OnM+cj9hLmxlZnQ6YS5yaWdodCx0b3A6YS50b3AsYm90dG9tOmEuYm90dG9tfX1mdW5jdGlvbiBCKHQsZSl7Zm9yKHZhciByPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtpZihpLnRleHQ9PWUudGV4dCYmaS5tYXJrZWRTcGFucz09ZS5tYXJrZWRTcGFucyYmdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoPT1pLndpZHRoJiZpLmNsYXNzZXM9PWUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzcylyZXR1cm4gaX19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPUIodCxlKTtyJiYoci50ZXh0PXIubWVhc3VyZT1yLm1hcmtlZFNwYW5zPW51bGwpfWZ1bmN0aW9uIFYodCxlKXt2YXIgcj1CKHQsZSk7aWYocilyZXR1cm4gci5tZWFzdXJlO3ZhciBuPUsodCxlKSxpPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG89e3RleHQ6ZS50ZXh0LHdpZHRoOnQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCxtYXJrZWRTcGFuczplLm1hcmtlZFNwYW5zLG1lYXN1cmU6bixjbGFzc2VzOmUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzc307cmV0dXJuIDE2PT1pLmxlbmd0aD9pWysrdC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3MlMTZdPW86aS5wdXNoKG8pLG59ZnVuY3Rpb24gSyh0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9dC50b3AtcC50b3Ascj10LmJvdHRvbS1wLnRvcDtyPnYmJihyPXYpLDA+ZSYmKGU9MCk7Zm9yKHZhciBuPWcubGVuZ3RoLTI7bj49MDtuLT0yKXt2YXIgaT1nW25dLG89Z1tuKzFdO2lmKCEoaT5yfHxlPm8pJiYoZT49aSYmbz49cnx8aT49ZSYmcj49b3x8TWF0aC5taW4ocixvKS1NYXRoLm1heChlLGkpPj1yLWU+PjEpKXtnW25dPU1hdGgubWluKGUsaSksZ1tuKzFdPU1hdGgubWF4KHIsbyk7YnJlYWt9fXJldHVybiAwPm4mJihuPWcubGVuZ3RoLGcucHVzaChlLHIpKSx7bGVmdDp0LmxlZnQtcC5sZWZ0LHJpZ2h0OnQucmlnaHQtcC5sZWZ0LHRvcDpuLGJvdHRvbTpudWxsfX1mdW5jdGlvbiBuKHQpe3QuYm90dG9tPWdbdC50b3ArMV0sdC50b3A9Z1t0LnRvcF19aWYoIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFUodCxlKTt2YXIgaT10LmRpc3BsYXksbz1uaShlLnRleHQubGVuZ3RoKSxsPXJuKHQsZSxvLCEwKS5wcmU7aWYoQWkmJiFIaSYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmwuY2hpbGROb2Rlcy5sZW5ndGg+MTAwKXtmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MTAsdT1sLmNoaWxkTm9kZXMubGVuZ3RoLGM9MCxmPU1hdGguY2VpbCh1L2EpO2Y+YzsrK2Mpe2Zvcih2YXIgaD1zaSgiZGl2IixudWxsLG51bGwsImRpc3BsYXk6IGlubGluZS1ibG9jayIpLGQ9MDthPmQmJnU7KytkKWguYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKSwtLXU7cy5hcHBlbmRDaGlsZChoKX1sLmFwcGVuZENoaWxkKHMpfXVpKGkubWVhc3VyZSxsKTt2YXIgcD1maShpLmxpbmVEaXYpLGc9W10sbT1uaShlLnRleHQubGVuZ3RoKSx2PWwub2Zmc2V0SGVpZ2h0O05pJiZpLm1lYXN1cmUuZmlyc3QhPWwmJnVpKGkubWVhc3VyZSxsKTtmb3IodmFyIHksYz0wO2M8by5sZW5ndGg7KytjKWlmKHk9b1tjXSl7dmFyIGI9eSx4PW51bGw7aWYoL1xiQ29kZU1pcnJvci13aWRnZXRcYi8udGVzdCh5LmNsYXNzTmFtZSkmJnkuZ2V0Q2xpZW50UmVjdHMpezE9PXkuZmlyc3RDaGlsZC5ub2RlVHlwZSYmKGI9eS5maXJzdENoaWxkKTt2YXIgQz1iLmdldENsaWVudFJlY3RzKCk7Qy5sZW5ndGg+MSYmKHg9bVtjXT1yKENbMF0pLHgucmlnaHRTaWRlPXIoQ1tDLmxlbmd0aC0xXSkpfXh8fCh4PW1bY109cihmaShiKSkpLHkubWVhc3VyZVJpZ2h0JiYoeC5yaWdodD1maSh5Lm1lYXN1cmVSaWdodCkubGVmdCkseS5sZWZ0U2lkZSYmKHgubGVmdFNpZGU9cihmaSh5LmxlZnRTaWRlKSkpfWFpKHQuZGlzcGxheS5tZWFzdXJlKTtmb3IodmFyIHksYz0wO2M8bS5sZW5ndGg7KytjKSh5PW1bY10pJiYobih5KSx5LmxlZnRTaWRlJiZuKHkubGVmdFNpZGUpLHkucmlnaHRTaWRlJiZuKHkucmlnaHRTaWRlKSk7cmV0dXJuIG19ZnVuY3Rpb24gVSh0LGUpe3ZhciByPW5ldyBibyhlLnRleHQuc2xpY2UoMCwxMDApLG51bGwpO2UudGV4dENsYXNzJiYoci50ZXh0Q2xhc3M9ZS50ZXh0Q2xhc3MpO3ZhciBuPUsodCxyKSxpPVIodCxyLDAsbiwibGVmdCIpLG89Uih0LHIsOTksbiwicmlnaHQiKTtyZXR1cm57Y3J1ZGU6ITAsdG9wOmkudG9wLGxlZnQ6aS5sZWZ0LGJvdHRvbTppLmJvdHRvbSx3aWR0aDooby5yaWdodC1pLmxlZnQpLzEwMH19ZnVuY3Rpb24gWCh0LGUpe3ZhciByPSExO2lmKGUubWFya2VkU3BhbnMpZm9yKHZhciBuPTA7bjxlLm1hcmtlZFNwYW5zOysrbil7dmFyIGk9ZS5tYXJrZWRTcGFuc1tuXTshaS5jb2xsYXBzZWR8fG51bGwhPWkudG8mJmkudG8hPWUudGV4dC5sZW5ndGh8fChyPSEwKX12YXIgbz0hciYmQih0LGUpO2lmKG98fGUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFIodCxlLGUudGV4dC5sZW5ndGgsbyYmby5tZWFzdXJlLCJyaWdodCIpLnJpZ2h0O3ZhciBsPXJuKHQsZSxudWxsLCEwKS5wcmUscz1sLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSk7cmV0dXJuIHVpKHQuZGlzcGxheS5tZWFzdXJlLGwpLGZpKHMpLnJpZ2h0LWZpKHQuZGlzcGxheS5saW5lRGl2KS5sZWZ0fWZ1bmN0aW9uIF8odCl7dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zPTAsdC5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aD10LmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodD1udWxsLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fCh0LmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApLHQuZGlzcGxheS5saW5lTnVtQ2hhcnM9bnVsbH1mdW5jdGlvbiBZKCl7cmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBqKCl7cmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wfWZ1bmN0aW9uICQodCxlLHIsbil7aWYoZS53aWRnZXRzKWZvcih2YXIgaT0wO2k8ZS53aWRnZXRzLmxlbmd0aDsrK2kpaWYoZS53aWRnZXRzW2ldLmFib3ZlKXt2YXIgbz1ZcihlLndpZGdldHNbaV0pO3IudG9wKz1vLHIuYm90dG9tKz1vfWlmKCJsaW5lIj09bilyZXR1cm4gcjtufHwobj0ibG9jYWwiKTt2YXIgbD1Dbih0LGUpO2lmKCJsb2NhbCI9PW4/bCs9SSh0LmRpc3BsYXkpOmwtPXQuZGlzcGxheS52aWV3T2Zmc2V0LCJwYWdlIj09bnx8IndpbmRvdyI9PW4pe3ZhciBzPWZpKHQuZGlzcGxheS5saW5lU3BhY2UpO2wrPXMudG9wKygid2luZG93Ij09bj8wOmooKSk7dmFyIGE9cy5sZWZ0Kygid2luZG93Ij09bj8wOlkoKSk7ci5sZWZ0Kz1hLHIucmlnaHQrPWF9cmV0dXJuIHIudG9wKz1sLHIuYm90dG9tKz1sLHJ9ZnVuY3Rpb24gWih0LGUscil7aWYoImRpdiI9PXIpcmV0dXJuIGU7dmFyIG49ZS5sZWZ0LGk9ZS50b3A7aWYoInBhZ2UiPT1yKW4tPVkoKSxpLT1qKCk7ZWxzZSBpZigibG9jYWwiPT1yfHwhcil7dmFyIG89ZmkodC5kaXNwbGF5LnNpemVyKTtuKz1vLmxlZnQsaSs9by50b3B9dmFyIGw9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7cmV0dXJue2xlZnQ6bi1sLmxlZnQsdG9wOmktbC50b3B9fWZ1bmN0aW9uIHEodCxlLHIsbixpKXtyZXR1cm4gbnx8KG49Z24odC5kb2MsZS5saW5lKSksJCh0LG4sUih0LG4sZS5jaCxudWxsLGkpLHIpfWZ1bmN0aW9uIFEodCxlLHIsbixpKXtmdW5jdGlvbiBvKGUsbyl7dmFyIGw9Uih0LG4sZSxpLG8/InJpZ2h0IjoibGVmdCIpO3JldHVybiBvP2wubGVmdD1sLnJpZ2h0OmwucmlnaHQ9bC5sZWZ0LCQodCxuLGwscil9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXNbZV0sbj1yLmxldmVsJTI7cmV0dXJuIHQ9PW1pKHIpJiZlJiZyLmxldmVsPHNbZS0xXS5sZXZlbD8ocj1zWy0tZV0sdD12aShyKS0oci5sZXZlbCUyPzA6MSksbj0hMCk6dD09dmkocikmJmU8cy5sZW5ndGgtMSYmci5sZXZlbDxzW2UrMV0ubGV2ZWwmJihyPXNbKytlXSx0PW1pKHIpLXIubGV2ZWwlMixuPSExKSxuJiZ0PT1yLnRvJiZ0PnIuZnJvbT9vKHQtMSk6byh0LG4pfW49bnx8Z24odC5kb2MsZS5saW5lKSxpfHwoaT1WKHQsbikpO3ZhciBzPXduKG4pLGE9ZS5jaDtpZighcylyZXR1cm4gbyhhKTt2YXIgdT1MaShzLGEpLGM9bChhLHUpO3JldHVybiBudWxsIT1SbyYmKGMub3RoZXI9bChhLFJvKSksY31mdW5jdGlvbiBKKHQsZSxyLG4pe3ZhciBpPW5ldyBZZSh0LGUpO3JldHVybiBpLnhSZWw9bixyJiYoaS5vdXRzaWRlPSEwKSxpfWZ1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj10LmRvYztpZihyKz10LmRpc3BsYXkudmlld09mZnNldCwwPnIpcmV0dXJuIEoobi5maXJzdCwwLCEwLC0xKTt2YXIgaT14bihuLHIpLG89bi5maXJzdCtuLnNpemUtMTtpZihpPm8pcmV0dXJuIEoobi5maXJzdCtuLnNpemUtMSxnbihuLG8pLnRleHQubGVuZ3RoLCEwLDEpO2ZvcigwPmUmJihlPTApOzspe3ZhciBsPWduKG4saSkscz1lZSh0LGwsaSxlLHIpLGE9QnIobCksdT1hJiZhLmZpbmQoKTtpZighYXx8IShzLmNoPnUuZnJvbS5jaHx8cy5jaD09dS5mcm9tLmNoJiZzLnhSZWw+MCkpcmV0dXJuIHM7aT11LnRvLmxpbmV9fWZ1bmN0aW9uIGVlKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyhuKXt2YXIgaT1RKHQsWWUocixuKSwibGluZSIsZSx1KTtyZXR1cm4gcz0hMCxsPmkuYm90dG9tP2kubGVmdC1hOmw8aS50b3A/aS5sZWZ0K2E6KHM9ITEsaS5sZWZ0KX12YXIgbD1pLUNuKHQsZSkscz0hMSxhPTIqdC5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgsdT1WKHQsZSksYz13bihlKSxmPWUudGV4dC5sZW5ndGgsaD15aShlKSxkPWJpKGUpLHA9byhoKSxnPXMsbT1vKGQpLHY9cztpZihuPm0pcmV0dXJuIEoocixkLHYsMSk7Zm9yKDs7KXtpZihjP2Q9PWh8fGQ9PVNpKGUsaCwxKToxPj1kLWgpe2Zvcih2YXIgeT1wPm58fG0tbj49bi1wP2g6ZCxiPW4tKHk9PWg/cDptKTtEby50ZXN0KGUudGV4dC5jaGFyQXQoeSkpOykrK3k7dmFyIHg9SihyLHkseT09aD9nOnYsMD5iPy0xOmI/MTowKTtyZXR1cm4geH12YXIgQz1NYXRoLmNlaWwoZi8yKSx3PWgrQztpZihjKXt3PWg7Zm9yKHZhciBMPTA7Qz5MOysrTCl3PVNpKGUsdywxKX12YXIgaz1vKHcpO2s+bj8oZD13LG09aywodj1zKSYmKG0rPTFlMyksZj1DKTooaD13LHA9ayxnPXMsZi09Qyl9fWZ1bmN0aW9uIHJlKHQpe2lmKG51bGwhPXQuY2FjaGVkVGV4dEhlaWdodClyZXR1cm4gdC5jYWNoZWRUZXh0SGVpZ2h0O2lmKG51bGw9PV9pKXtfaT1zaSgicHJlIik7Zm9yKHZhciBlPTA7NDk+ZTsrK2UpX2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSksX2kuYXBwZW5kQ2hpbGQoc2koImJyIikpO19pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IikpfXVpKHQubWVhc3VyZSxfaSk7dmFyIHI9X2kub2Zmc2V0SGVpZ2h0LzUwO3JldHVybiByPjMmJih0LmNhY2hlZFRleHRIZWlnaHQ9ciksYWkodC5tZWFzdXJlKSxyfHwxfWZ1bmN0aW9uIG5lKHQpe2lmKG51bGwhPXQuY2FjaGVkQ2hhcldpZHRoKXJldHVybiB0LmNhY2hlZENoYXJXaWR0aDt2YXIgZT1zaSgic3BhbiIsIngiKSxyPXNpKCJwcmUiLFtlXSk7dWkodC5tZWFzdXJlLHIpO3ZhciBuPWUub2Zmc2V0V2lkdGg7cmV0dXJuIG4+MiYmKHQuY2FjaGVkQ2hhcldpZHRoPW4pLG58fDEwfWZ1bmN0aW9uIGllKHQpe3QuY3VyT3A9e2NoYW5nZXM6W10sZm9yY2VVcGRhdGU6ITEsdXBkYXRlSW5wdXQ6bnVsbCx1c2VyU2VsQ2hhbmdlOm51bGwsdGV4dENoYW5nZWQ6bnVsbCxzZWxlY3Rpb25DaGFuZ2VkOiExLGN1cnNvckFjdGl2aXR5OiExLHVwZGF0ZU1heExpbmU6ITEsdXBkYXRlU2Nyb2xsUG9zOiExLGlkOisrSml9LE1vKyt8fChTbz1bXSl9ZnVuY3Rpb24gb2UodCl7dmFyIGU9dC5jdXJPcCxyPXQuZG9jLG49dC5kaXNwbGF5O2lmKHQuY3VyT3A9bnVsbCxlLnVwZGF0ZU1heExpbmUmJmYodCksbi5tYXhMaW5lQ2hhbmdlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJm4ubWF4TGluZSl7dmFyIGk9WCh0LG4ubWF4TGluZSk7bi5zaXplci5zdHlsZS5taW5XaWR0aD1NYXRoLm1heCgwLGkrMytUbykrInB4IixuLm1heExpbmVDaGFuZ2VkPSExO3ZhciBvPU1hdGgubWF4KDAsbi5zaXplci5vZmZzZXRMZWZ0K24uc2l6ZXIub2Zmc2V0V2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCk7bzxyLnNjcm9sbExlZnQmJiFlLnVwZGF0ZVNjcm9sbFBvcyYmTWUodCxNYXRoLm1pbihuLnNjcm9sbGVyLnNjcm9sbExlZnQsbyksITApfXZhciBsLHM7aWYoZS51cGRhdGVTY3JvbGxQb3MpbD1lLnVwZGF0ZVNjcm9sbFBvcztlbHNlIGlmKGUuc2VsZWN0aW9uQ2hhbmdlZCYmbi5zY3JvbGxlci5jbGllbnRIZWlnaHQpe3ZhciBhPVEodCxyLnNlbC5oZWFkKTtsPXVyKHQsYS5sZWZ0LGEudG9wLGEubGVmdCxhLmJvdHRvbSl9aWYoKGUuY2hhbmdlcy5sZW5ndGh8fGUuZm9yY2VVcGRhdGV8fGwmJm51bGwhPWwuc2Nyb2xsVG9wKSYmKHM9Yih0LGUuY2hhbmdlcyxsJiZsLnNjcm9sbFRvcCxlLmZvcmNlVXBkYXRlKSx0LmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0JiYodC5kb2Muc2Nyb2xsVG9wPXQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApKSwhcyYmZS5zZWxlY3Rpb25DaGFuZ2VkJiZBKHQpLGUudXBkYXRlU2Nyb2xsUG9zKXt2YXIgdT1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LW4uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LGwuc2Nyb2xsVG9wKSksYz1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCxsLnNjcm9sbExlZnQpKTtuLnNjcm9sbGVyLnNjcm9sbFRvcD1uLnNjcm9sbGJhclYuc2Nyb2xsVG9wPXIuc2Nyb2xsVG9wPXUsbi5zY3JvbGxlci5zY3JvbGxMZWZ0PW4uc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PXIuc2Nyb2xsTGVmdD1jLGcodCksZS5zY3JvbGxUb1BvcyYmc3IodCxRZSh0LmRvYyxlLnNjcm9sbFRvUG9zLmZyb20pLFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MudG8pLGUuc2Nyb2xsVG9Qb3MubWFyZ2luKX1lbHNlIGwmJmxyKHQpO2Uuc2VsZWN0aW9uQ2hhbmdlZCYmRCh0KSx0LnN0YXRlLmZvY3VzZWQmJmUudXBkYXRlSW5wdXQmJmRlKHQsZS51c2VyU2VsQ2hhbmdlKTt2YXIgaD1lLm1heWJlSGlkZGVuTWFya2VycyxkPWUubWF5YmVVbmhpZGRlbk1hcmtlcnM7aWYoaClmb3IodmFyIHA9MDtwPGgubGVuZ3RoOysrcCloW3BdLmxpbmVzLmxlbmd0aHx8S24oaFtwXSwiaGlkZSIpO2lmKGQpZm9yKHZhciBwPTA7cDxkLmxlbmd0aDsrK3ApZFtwXS5saW5lcy5sZW5ndGgmJktuKGRbcF0sInVuaGlkZSIpO3ZhciBtO2lmKC0tTW98fChtPVNvLFNvPW51bGwpLGUudGV4dENoYW5nZWQmJktuKHQsImNoYW5nZSIsdCxlLnRleHRDaGFuZ2VkKSxlLmN1cnNvckFjdGl2aXR5JiZLbih0LCJjdXJzb3JBY3Rpdml0eSIsdCksbSlmb3IodmFyIHA9MDtwPG0ubGVuZ3RoOysrcCltW3BdKCl9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10fHx0aGlzLG49IXIuY3VyT3A7biYmaWUocik7dHJ5e3ZhciBpPWUuYXBwbHkocixhcmd1bWVudHMpfWZpbmFsbHl7biYmb2Uocil9cmV0dXJuIGl9fWZ1bmN0aW9uIHNlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5jbSYmIXRoaXMuY20uY3VyT3A7ciYmaWUodGhpcy5jbSk7dHJ5e2U9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtyJiZvZSh0aGlzLmNtKX1yZXR1cm4gZX19ZnVuY3Rpb24gYWUodCxlKXt2YXIgcixuPSF0LmN1ck9wO24mJmllKHQpO3RyeXtyPWUoKX1maW5hbGx5e24mJm9lKHQpfXJldHVybiByfWZ1bmN0aW9uIHVlKHQsZSxyLG4pe251bGw9PWUmJihlPXQuZG9jLmZpcnN0KSxudWxsPT1yJiYocj10LmRvYy5maXJzdCt0LmRvYy5zaXplKSx0LmN1ck9wLmNoYW5nZXMucHVzaCh7ZnJvbTplLHRvOnIsZGlmZjpufSl9ZnVuY3Rpb24gY2UodCl7dC5kaXNwbGF5LnBvbGxpbmdGYXN0fHx0LmRpc3BsYXkucG9sbC5zZXQodC5vcHRpb25zLnBvbGxJbnRlcnZhbCxmdW5jdGlvbigpe2hlKHQpLHQuc3RhdGUuZm9jdXNlZCYmY2UodCl9KX1mdW5jdGlvbiBmZSh0KXtmdW5jdGlvbiBlKCl7dmFyIG49aGUodCk7bnx8cj8odC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExLGNlKHQpKToocj0hMCx0LmRpc3BsYXkucG9sbC5zZXQoNjAsZSkpfXZhciByPSExO3QuZGlzcGxheS5wb2xsaW5nRmFzdD0hMCx0LmRpc3BsYXkucG9sbC5zZXQoMjAsZSl9ZnVuY3Rpb24gaGUodCl7dmFyIGU9dC5kaXNwbGF5LmlucHV0LHI9dC5kaXNwbGF5LnByZXZJbnB1dCxuPXQuZG9jLGk9bi5zZWw7aWYoIXQuc3RhdGUuZm9jdXNlZHx8SW8oZSl8fGdlKHQpfHx0LnN0YXRlLmRpc2FibGVJbnB1dClyZXR1cm4hMTt0LnN0YXRlLnBhc3RlSW5jb21pbmcmJnQuc3RhdGUuZmFrZWRMYXN0Q2hhciYmKGUudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxlLnZhbHVlLmxlbmd0aC0xKSx0LnN0YXRlLmZha2VkTGFzdENoYXI9ITEpO3ZhciBvPWUudmFsdWU7aWYobz09ciYmamUoaS5mcm9tLGkudG8pKXJldHVybiExO2lmKEFpJiYhTmkmJnQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj09PW8pcmV0dXJuIGRlKHQsITApLCExO3ZhciBsPSF0LmN1ck9wO2wmJmllKHQpLGkuc2hpZnQ9ITE7Zm9yKHZhciBzPTAsYT1NYXRoLm1pbihyLmxlbmd0aCxvLmxlbmd0aCk7YT5zJiZyLmNoYXJDb2RlQXQocyk9PW8uY2hhckNvZGVBdChzKTspKytzO3ZhciB1PWkuZnJvbSxjPWkudG87czxyLmxlbmd0aD91PVllKHUubGluZSx1LmNoLShyLmxlbmd0aC1zKSk6dC5zdGF0ZS5vdmVyd3JpdGUmJmplKHUsYykmJiF0LnN0YXRlLnBhc3RlSW5jb21pbmcmJihjPVllKGMubGluZSxNYXRoLm1pbihnbihuLGMubGluZSkudGV4dC5sZW5ndGgsYy5jaCsoby5sZW5ndGgtcykpKSk7dmFyIGY9dC5jdXJPcC51cGRhdGVJbnB1dCxoPXtmcm9tOnUsdG86Yyx0ZXh0OnpvKG8uc2xpY2UocykpLG9yaWdpbjp0LnN0YXRlLnBhc3RlSW5jb21pbmc/InBhc3RlIjoiK2lucHV0In07cmV0dXJuIEJlKHQuZG9jLGgsImVuZCIpLHQuY3VyT3AudXBkYXRlSW5wdXQ9ZixVbih0LCJpbnB1dFJlYWQiLHQsaCksby5sZW5ndGg+MWUzfHxvLmluZGV4T2YoIlxuIik+LTE/ZS52YWx1ZT10LmRpc3BsYXkucHJldklucHV0PSIiOnQuZGlzcGxheS5wcmV2SW5wdXQ9byxsJiZvZSh0KSx0LnN0YXRlLnBhc3RlSW5jb21pbmc9ITEsITB9ZnVuY3Rpb24gZGUodCxlKXt2YXIgcixuLGk9dC5kb2M7aWYoamUoaS5zZWwuZnJvbSxpLnNlbC50bykpZSYmKHQuZGlzcGxheS5wcmV2SW5wdXQ9dC5kaXNwbGF5LmlucHV0LnZhbHVlPSIiLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCkpO2Vsc2V7dC5kaXNwbGF5LnByZXZJbnB1dD0iIixyPUZvJiYoaS5zZWwudG8ubGluZS1pLnNlbC5mcm9tLmxpbmU+MTAwfHwobj10LmdldFNlbGVjdGlvbigpKS5sZW5ndGg+MWUzKTt2YXIgbz1yPyItIjpufHx0LmdldFNlbGVjdGlvbigpO3QuZGlzcGxheS5pbnB1dC52YWx1ZT1vLHQuc3RhdGUuZm9jdXNlZCYmSm4odC5kaXNwbGF5LmlucHV0KSxBaSYmIU5pJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW8pfXQuZGlzcGxheS5pbmFjY3VyYXRlU2VsZWN0aW9uPXJ9ZnVuY3Rpb24gcGUodCl7Im5vY3Vyc29yIj09dC5vcHRpb25zLnJlYWRPbmx5fHxWaSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09dC5kaXNwbGF5LmlucHV0fHx0LmRpc3BsYXkuaW5wdXQuZm9jdXMoKX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gdC5vcHRpb25zLnJlYWRPbmx5fHx0LmRvYy5jYW50RWRpdH1mdW5jdGlvbiBtZSh0KXtmdW5jdGlvbiBlKCl7dC5zdGF0ZS5mb2N1c2VkJiZzZXRUaW1lb3V0KGlpKHBlLHQpLDApfWZ1bmN0aW9uIHIoKXtudWxsPT1zJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz1udWxsLGwuY2FjaGVkQ2hhcldpZHRoPWwuY2FjaGVkVGV4dEhlaWdodD1Pbz1udWxsLF8odCksYWUodCxpaSh1ZSx0KSl9LDEwMCkpfWZ1bmN0aW9uIG4oKXtmb3IodmFyIHQ9bC53cmFwcGVyLnBhcmVudE5vZGU7dCYmdCE9ZG9jdW1lbnQuYm9keTt0PXQucGFyZW50Tm9kZSk7dD9zZXRUaW1lb3V0KG4sNWUzKTpWbih3aW5kb3csInJlc2l6ZSIscil9ZnVuY3Rpb24gaShlKXtYbih0LGUpfHx0Lm9wdGlvbnMub25EcmFnRXZlbnQmJnQub3B0aW9ucy5vbkRyYWdFdmVudCh0LEVuKGUpKXx8UG4oZSl9ZnVuY3Rpb24gbygpe2wuaW5hY2N1cmF0ZVNlbGVjdGlvbiYmKGwucHJldklucHV0PSIiLGwuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxsLmlucHV0LnZhbHVlPXQuZ2V0U2VsZWN0aW9uKCksSm4obC5pbnB1dCkpfXZhciBsPXQuZGlzcGxheTtHbihsLnNjcm9sbGVyLCJtb3VzZWRvd24iLGxlKHQsYmUpKSxBaT9HbihsLnNjcm9sbGVyLCJkYmxjbGljayIsbGUodCxmdW5jdGlvbihlKXtpZighWG4odCxlKSl7dmFyIHI9eWUodCxlKTtpZihyJiYhd2UodCxlKSYmIXZlKHQuZGlzcGxheSxlKSl7em4oZSk7dmFyIG49bXIoZ24odC5kb2Msci5saW5lKS50ZXh0LHIpO2VyKHQuZG9jLG4uZnJvbSxuLnRvKX19fSkpOkduKGwuc2Nyb2xsZXIsImRibGNsaWNrIixmdW5jdGlvbihlKXtYbih0LGUpfHx6bihlKX0pLEduKGwubGluZVNwYWNlLCJzZWxlY3RzdGFydCIsZnVuY3Rpb24odCl7dmUobCx0KXx8em4odCl9KSxaaXx8R24obC5zY3JvbGxlciwiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe0llKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJihTZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsVG9wKSxNZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwhMCksS24odCwic2Nyb2xsIix0KSl9KSxHbihsLnNjcm9sbGJhclYsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmU2UodCxsLnNjcm9sbGJhclYuc2Nyb2xsVG9wKX0pLEduKGwuc2Nyb2xsYmFySCwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZNZSh0LGwuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KX0pLEduKGwuc2Nyb2xsZXIsIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGUpe1RlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJET01Nb3VzZVNjcm9sbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsYmFySCwibW91c2Vkb3duIixlKSxHbihsLnNjcm9sbGJhclYsIm1vdXNlZG93biIsZSksR24obC53cmFwcGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC53cmFwcGVyLnNjcm9sbFRvcD1sLndyYXBwZXIuc2Nyb2xsTGVmdD0wfSk7dmFyIHM7R24od2luZG93LCJyZXNpemUiLHIpLHNldFRpbWVvdXQobiw1ZTMpLEduKGwuaW5wdXQsImtleXVwIixsZSh0LGZ1bmN0aW9uKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbktleUV2ZW50JiZ0Lm9wdGlvbnMub25LZXlFdmVudCh0LEVuKGUpKXx8MTY9PWUua2V5Q29kZSYmKHQuZG9jLnNlbC5zaGlmdD0hMSl9KSksR24obC5pbnB1dCwiaW5wdXQiLGZ1bmN0aW9uKCl7QWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW51bGwpLGZlKHQpfSksR24obC5pbnB1dCwia2V5ZG93biIsbGUodCxXZSkpLEduKGwuaW5wdXQsImtleXByZXNzIixsZSh0LE9lKSksR24obC5pbnB1dCwiZm9jdXMiLGlpKEVlLHQpKSxHbihsLmlucHV0LCJibHVyIixpaSh6ZSx0KSksdC5vcHRpb25zLmRyYWdEcm9wJiYoR24obC5zY3JvbGxlciwiZHJhZ3N0YXJ0IixmdW5jdGlvbihlKXtrZSh0LGUpfSksR24obC5zY3JvbGxlciwiZHJhZ2VudGVyIixpKSxHbihsLnNjcm9sbGVyLCJkcmFnb3ZlciIsaSksR24obC5zY3JvbGxlciwiZHJvcCIsbGUodCxMZSkpKSxHbihsLnNjcm9sbGVyLCJwYXN0ZSIsZnVuY3Rpb24oZSl7dmUobCxlKXx8KHBlKHQpLGZlKHQpKX0pLEduKGwuaW5wdXQsInBhc3RlIixmdW5jdGlvbigpe2lmKFdpJiYhdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYhKG5ldyBEYXRlLXQuc3RhdGUubGFzdE1pZGRsZURvd248MjAwKSl7dmFyIGU9bC5pbnB1dC5zZWxlY3Rpb25TdGFydCxyPWwuaW5wdXQuc2VsZWN0aW9uRW5kO2wuaW5wdXQudmFsdWUrPSIkIixsLmlucHV0LnNlbGVjdGlvblN0YXJ0PWUsbC5pbnB1dC5zZWxlY3Rpb25FbmQ9cix0LnN0YXRlLmZha2VkTGFzdENoYXI9ITB9dC5zdGF0ZS5wYXN0ZUluY29taW5nPSEwLGZlKHQpfSksR24obC5pbnB1dCwiY3V0IixvKSxHbihsLmlucHV0LCJjb3B5IixvKSxGaSYmR24obC5zaXplciwibW91c2V1cCIsZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0JiZsLmlucHV0LmJsdXIoKSxwZSh0KX0pfWZ1bmN0aW9uIHZlKHQsZSl7Zm9yKHZhciByPVJuKGUpO3IhPXQud3JhcHBlcjtyPXIucGFyZW50Tm9kZSlpZighcnx8ci5pZ25vcmVFdmVudHN8fHIucGFyZW50Tm9kZT09dC5zaXplciYmciE9dC5tb3ZlcilyZXR1cm4hMH1mdW5jdGlvbiB5ZSh0LGUscil7dmFyIG49dC5kaXNwbGF5O2lmKCFyKXt2YXIgaT1SbihlKTtpZihpPT1uLnNjcm9sbGJhckh8fGk9PW4uc2Nyb2xsYmFySC5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhclZ8fGk9PW4uc2Nyb2xsYmFyVi5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhckZpbGxlcnx8aT09bi5ndXR0ZXJGaWxsZXIpcmV0dXJuIG51bGx9dmFyIG8sbCxzPWZpKG4ubGluZVNwYWNlKTt0cnl7bz1lLmNsaWVudFgsbD1lLmNsaWVudFl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9cmV0dXJuIHRlKHQsby1zLmxlZnQsbC1zLnRvcCl9ZnVuY3Rpb24gYmUodCl7ZnVuY3Rpb24gZSh0KXtpZighamUodix0KSl7aWYodj10LCJzaW5nbGUiPT1jKXJldHVybiBlcihpLmRvYyxRZShsLGEpLHQpLHZvaWQgMDsKaWYoZz1RZShsLGcpLG09UWUobCxtKSwiZG91YmxlIj09Yyl7dmFyIGU9bXIoZ24obCx0LmxpbmUpLnRleHQsdCk7JGUodCxnKT9lcihpLmRvYyxlLmZyb20sbSk6ZXIoaS5kb2MsZyxlLnRvKX1lbHNlInRyaXBsZSI9PWMmJigkZSh0LGcpP2VyKGkuZG9jLG0sUWUobCxZZSh0LmxpbmUsMCkpKTplcihpLmRvYyxnLFFlKGwsWWUodC5saW5lKzEsMCkpKSl9fWZ1bmN0aW9uIHIodCl7dmFyIG49KytiLHM9eWUoaSx0LCEwKTtpZihzKWlmKGplKHMsaCkpe3ZhciBhPXQuY2xpZW50WTx5LnRvcD8tMjA6dC5jbGllbnRZPnkuYm90dG9tPzIwOjA7YSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmKG8uc2Nyb2xsZXIuc2Nyb2xsVG9wKz1hLHIodCkpfSksNTApfWVsc2V7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKSxoPXMsZShzKTt2YXIgdT1wKG8sbCk7KHMubGluZT49dS50b3x8cy5saW5lPHUuZnJvbSkmJnNldFRpbWVvdXQobGUoaSxmdW5jdGlvbigpe2I9PW4mJnIodCl9KSwxNTApfX1mdW5jdGlvbiBuKHQpe2I9MS8wLHpuKHQpLHBlKGkpLFZuKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLFZuKGRvY3VtZW50LCJtb3VzZXVwIixDKX1pZighWG4odGhpcyx0KSl7dmFyIGk9dGhpcyxvPWkuZGlzcGxheSxsPWkuZG9jLHM9bC5zZWw7aWYocy5zaGlmdD10LnNoaWZ0S2V5LHZlKG8sdCkpcmV0dXJuIFdpfHwoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe28uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwfSwxMDApKSx2b2lkIDA7aWYoIXdlKGksdCkpe3ZhciBhPXllKGksdCk7c3dpdGNoKEJuKHQpKXtjYXNlIDM6cmV0dXJuIFppJiZJZS5jYWxsKGksaSx0KSx2b2lkIDA7Y2FzZSAyOnJldHVybiBXaSYmKGkuc3RhdGUubGFzdE1pZGRsZURvd249K25ldyBEYXRlKSxhJiZlcihpLmRvYyxhKSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx6bih0KSx2b2lkIDB9aWYoIWEpcmV0dXJuIFJuKHQpPT1vLnNjcm9sbGVyJiZ6bih0KSx2b2lkIDA7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKTt2YXIgdT0rbmV3IERhdGUsYz0ic2luZ2xlIjtpZihqaSYmamkudGltZT51LTQwMCYmamUoamkucG9zLGEpKWM9InRyaXBsZSIsem4odCksc2V0VGltZW91dChpaShwZSxpKSwyMCksdnIoaSxhLmxpbmUpO2Vsc2UgaWYoWWkmJllpLnRpbWU+dS00MDAmJmplKFlpLnBvcyxhKSl7Yz0iZG91YmxlIixqaT17dGltZTp1LHBvczphfSx6bih0KTt2YXIgZj1tcihnbihsLGEubGluZSkudGV4dCxhKTtlcihpLmRvYyxmLmZyb20sZi50byl9ZWxzZSBZaT17dGltZTp1LHBvczphfTt2YXIgaD1hO2lmKGkub3B0aW9ucy5kcmFnRHJvcCYmV28mJiFnZShpKSYmIWplKHMuZnJvbSxzLnRvKSYmISRlKGEscy5mcm9tKSYmISRlKHMudG8sYSkmJiJzaW5nbGUiPT1jKXt2YXIgZD1sZShpLGZ1bmN0aW9uKGUpe1dpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEpLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PSExLFZuKGRvY3VtZW50LCJtb3VzZXVwIixkKSxWbihvLnNjcm9sbGVyLCJkcm9wIixkKSxNYXRoLmFicyh0LmNsaWVudFgtZS5jbGllbnRYKStNYXRoLmFicyh0LmNsaWVudFktZS5jbGllbnRZKTwxMCYmKHpuKGUpLGVyKGkuZG9jLGEpLHBlKGkpKX0pO3JldHVybiBXaSYmKG8uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwKSxpLnN0YXRlLmRyYWdnaW5nVGV4dD1kLG8uc2Nyb2xsZXIuZHJhZ0Ryb3AmJm8uc2Nyb2xsZXIuZHJhZ0Ryb3AoKSxHbihkb2N1bWVudCwibW91c2V1cCIsZCksR24oby5zY3JvbGxlciwiZHJvcCIsZCksdm9pZCAwfXpuKHQpLCJzaW5nbGUiPT1jJiZlcihpLmRvYyxRZShsLGEpKTt2YXIgZz1zLmZyb20sbT1zLnRvLHY9YSx5PWZpKG8ud3JhcHBlciksYj0wLHg9bGUoaSxmdW5jdGlvbih0KXtBaXx8Qm4odCk/cih0KTpuKHQpfSksQz1sZShpLG4pO0duKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixDKX19fWZ1bmN0aW9uIHhlKHQsZSxyLG4saSl7dHJ5e3ZhciBvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4hMX1pZihvPj1NYXRoLmZsb29yKGZpKHQuZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpcmV0dXJuITE7biYmem4oZSk7dmFyIHM9dC5kaXNwbGF5LGE9Zmkocy5saW5lRGl2KTtpZihsPmEuYm90dG9tfHwhWW4odCxyKSlyZXR1cm4gRm4oZSk7bC09YS50b3Atcy52aWV3T2Zmc2V0O2Zvcih2YXIgdT0wO3U8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysrdSl7dmFyIGM9cy5ndXR0ZXJzLmNoaWxkTm9kZXNbdV07aWYoYyYmZmkoYykucmlnaHQ+PW8pe3ZhciBmPXhuKHQuZG9jLGwpLGg9dC5vcHRpb25zLmd1dHRlcnNbdV07cmV0dXJuIGkodCxyLHQsZixoLGUpLEZuKGUpfX19ZnVuY3Rpb24gQ2UodCxlKXtyZXR1cm4gWW4odCwiZ3V0dGVyQ29udGV4dE1lbnUiKT94ZSh0LGUsImd1dHRlckNvbnRleHRNZW51IiwhMSxLbik6ITF9ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4geGUodCxlLCJndXR0ZXJDbGljayIsITAsVW4pfWZ1bmN0aW9uIExlKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHx2ZShlLmRpc3BsYXksdCl8fGUub3B0aW9ucy5vbkRyYWdFdmVudCYmZS5vcHRpb25zLm9uRHJhZ0V2ZW50KGUsRW4odCkpKSl7em4odCksQWkmJih0bz0rbmV3IERhdGUpO3ZhciByPXllKGUsdCwhMCksbj10LmRhdGFUcmFuc2Zlci5maWxlcztpZihyJiYhZ2UoZSkpaWYobiYmbi5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIGk9bi5sZW5ndGgsbz1BcnJheShpKSxsPTAscz1mdW5jdGlvbih0LG4pe3ZhciBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPWZ1bmN0aW9uKCl7b1tuXT1zLnJlc3VsdCwrK2w9PWkmJihyPVFlKGUuZG9jLHIpLEJlKGUuZG9jLHtmcm9tOnIsdG86cix0ZXh0OnpvKG8uam9pbigiXG4iKSksb3JpZ2luOiJwYXN0ZSJ9LCJhcm91bmQiKSl9LHMucmVhZEFzVGV4dCh0KX0sYT0wO2k+YTsrK2EpcyhuW2FdLGEpO2Vsc2V7aWYoZS5zdGF0ZS5kcmFnZ2luZ1RleHQmJiEkZShyLGUuZG9jLnNlbC5mcm9tKSYmISRlKGUuZG9jLnNlbC50byxyKSlyZXR1cm4gZS5zdGF0ZS5kcmFnZ2luZ1RleHQodCksc2V0VGltZW91dChpaShwZSxlKSwyMCksdm9pZCAwO3RyeXt2YXIgbz10LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7aWYobyl7dmFyIHU9ZS5kb2Muc2VsLmZyb20sYz1lLmRvYy5zZWwudG87bnIoZS5kb2MscixyKSxlLnN0YXRlLmRyYWdnaW5nVGV4dCYmX2UoZS5kb2MsIiIsdSxjLCJwYXN0ZSIpLGUucmVwbGFjZVNlbGVjdGlvbihvLG51bGwsInBhc3RlIikscGUoZSl9fWNhdGNoKHQpe319fX1mdW5jdGlvbiBrZSh0LGUpe2lmKEFpJiYoIXQuc3RhdGUuZHJhZ2dpbmdUZXh0fHwrbmV3IERhdGUtdG88MTAwKSlyZXR1cm4gUG4oZSksdm9pZCAwO2lmKCFYbih0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt2YXIgcj10LmdldFNlbGVjdGlvbigpO2lmKGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLHIpLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSYmIUlpKXt2YXIgbj1zaSgiaW1nIixudWxsLG51bGwsInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyIpO24uc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSIsemkmJihuLndpZHRoPW4uaGVpZ2h0PTEsdC5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQobiksbi5fdG9wPW4ub2Zmc2V0VG9wKSxlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UobiwwLDApLHppJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9fX1mdW5jdGlvbiBTZSh0LGUpe01hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1lKTwyfHwodC5kb2Muc2Nyb2xsVG9wPWUsVGl8fGIodCxbXSxlKSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT1lJiYodC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ZSksVGkmJmIodCxbXSksVyh0LDEwMCkpfWZ1bmN0aW9uIE1lKHQsZSxyKXsocj9lPT10LmRvYy5zY3JvbGxMZWZ0Ok1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtZSk8Mil8fChlPU1hdGgubWluKGUsdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoLXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCksdC5kb2Muc2Nyb2xsTGVmdD1lLGcodCksdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0IT1lJiYodC5kaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdD1lKSl9ZnVuY3Rpb24gVGUodCxlKXt2YXIgcj1lLndoZWVsRGVsdGFYLG49ZS53aGVlbERlbHRhWTtudWxsPT1yJiZlLmRldGFpbCYmZS5heGlzPT1lLkhPUklaT05UQUxfQVhJUyYmKHI9ZS5kZXRhaWwpLG51bGw9PW4mJmUuZGV0YWlsJiZlLmF4aXM9PWUuVkVSVElDQUxfQVhJUz9uPWUuZGV0YWlsOm51bGw9PW4mJihuPWUud2hlZWxEZWx0YSk7dmFyIGk9dC5kaXNwbGF5LG89aS5zY3JvbGxlcjtpZihyJiZvLnNjcm9sbFdpZHRoPm8uY2xpZW50V2lkdGh8fG4mJm8uc2Nyb2xsSGVpZ2h0Pm8uY2xpZW50SGVpZ2h0KXtpZihuJiZLaSYmV2kpZm9yKHZhciBsPWUudGFyZ2V0O2whPW87bD1sLnBhcmVudE5vZGUpaWYobC5saW5lT2JqKXt0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PWw7YnJlYWt9aWYociYmIVRpJiYhemkmJm51bGwhPXJvKXJldHVybiBuJiZTZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxUb3ArbipybyxvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodCkpKSxNZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxMZWZ0K3Iqcm8sby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoKSkpLHpuKGUpLGkud2hlZWxTdGFydFg9bnVsbCx2b2lkIDA7aWYobiYmbnVsbCE9cm8pe3ZhciBzPW4qcm8sYT10LmRvYy5zY3JvbGxUb3AsdT1hK2kud3JhcHBlci5jbGllbnRIZWlnaHQ7MD5zP2E9TWF0aC5tYXgoMCxhK3MtNTApOnU9TWF0aC5taW4odC5kb2MuaGVpZ2h0LHUrcys1MCksYih0LFtdLHt0b3A6YSxib3R0b206dX0pfTIwPmVvJiYobnVsbD09aS53aGVlbFN0YXJ0WD8oaS53aGVlbFN0YXJ0WD1vLnNjcm9sbExlZnQsaS53aGVlbFN0YXJ0WT1vLnNjcm9sbFRvcCxpLndoZWVsRFg9cixpLndoZWVsRFk9bixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYobnVsbCE9aS53aGVlbFN0YXJ0WCl7dmFyIHQ9by5zY3JvbGxMZWZ0LWkud2hlZWxTdGFydFgsZT1vLnNjcm9sbFRvcC1pLndoZWVsU3RhcnRZLHI9ZSYmaS53aGVlbERZJiZlL2kud2hlZWxEWXx8dCYmaS53aGVlbERYJiZ0L2kud2hlZWxEWDtpLndoZWVsU3RhcnRYPWkud2hlZWxTdGFydFk9bnVsbCxyJiYocm89KHJvKmVvK3IpLyhlbysxKSwrK2VvKX19LDIwMCkpOihpLndoZWVsRFgrPXIsaS53aGVlbERZKz1uKSl9fWZ1bmN0aW9uIEFlKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPW1vW2VdLCFlKSlyZXR1cm4hMTt0LmRpc3BsYXkucG9sbGluZ0Zhc3QmJmhlKHQpJiYodC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExKTt2YXIgbj10LmRvYyxpPW4uc2VsLnNoaWZ0LG89ITE7dHJ5e2dlKHQpJiYodC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSEwKSxyJiYobi5zZWwuc2hpZnQ9ITEpLG89ZSh0KSE9QW99ZmluYWxseXtuLnNlbC5zaGlmdD1pLHQuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gb31mdW5jdGlvbiBIZSh0KXt2YXIgZT10LnN0YXRlLmtleU1hcHMuc2xpY2UoMCk7cmV0dXJuIHQub3B0aW9ucy5leHRyYUtleXMmJmUucHVzaCh0Lm9wdGlvbnMuZXh0cmFLZXlzKSxlLnB1c2godC5vcHRpb25zLmtleU1hcCksZX1mdW5jdGlvbiBOZSh0LGUpe3ZhciByPUNyKHQub3B0aW9ucy5rZXlNYXApLG49ci5hdXRvO2NsZWFyVGltZW91dChubyksbiYmIUxyKGUpJiYobm89c2V0VGltZW91dChmdW5jdGlvbigpe0NyKHQub3B0aW9ucy5rZXlNYXApPT1yJiYodC5vcHRpb25zLmtleU1hcD1uLmNhbGw/bi5jYWxsKG51bGwsdCk6bixsKHQpKX0sNTApKTt2YXIgaT1rcihlLCEwKSxvPSExO2lmKCFpKXJldHVybiExO3ZhciBzPUhlKHQpO3JldHVybiBvPWUuc2hpZnRLZXk/d3IoIlNoaWZ0LSIraSxzLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSl8fHdyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiBlPy9eZ29bQS1aXS8udGVzdChlKTplLm1vdGlvbik/QWUodCxlKTp2b2lkIDB9KTp3cihpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSl9KSxvJiYoem4oZSksRCh0KSxOaSYmKGUub2xkS2V5Q29kZT1lLmtleUNvZGUsZS5rZXlDb2RlPTApLFVuKHQsImtleUhhbmRsZWQiLHQsaSxlKSksb31mdW5jdGlvbiBEZSh0LGUscil7dmFyIG49d3IoIiciK3IrIiciLEhlKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSk7cmV0dXJuIG4mJih6bihlKSxEKHQpLFVuKHQsImtleUhhbmRsZWQiLHQsIiciK3IrIiciLGUpKSxufWZ1bmN0aW9uIFdlKHQpe3ZhciBlPXRoaXM7aWYoZS5zdGF0ZS5mb2N1c2VkfHxFZShlKSwhKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe0FpJiYyNz09dC5rZXlDb2RlJiYodC5yZXR1cm5WYWx1ZT0hMSk7dmFyIHI9dC5rZXlDb2RlO2UuZG9jLnNlbC5zaGlmdD0xNj09cnx8dC5zaGlmdEtleTt2YXIgbj1OZShlLHQpO3ppJiYob289bj9yOm51bGwsIW4mJjg4PT1yJiYhRm8mJihLaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmZS5yZXBsYWNlU2VsZWN0aW9uKCIiKSl9fWZ1bmN0aW9uIE9lKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHxlLm9wdGlvbnMub25LZXlFdmVudCYmZS5vcHRpb25zLm9uS2V5RXZlbnQoZSxFbih0KSkpKXt2YXIgcj10LmtleUNvZGUsbj10LmNoYXJDb2RlO2lmKHppJiZyPT1vbylyZXR1cm4gb289bnVsbCx6bih0KSx2b2lkIDA7aWYoISh6aSYmKCF0LndoaWNofHx0LndoaWNoPDEwKXx8RmkpfHwhTmUoZSx0KSl7dmFyIGk9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1uP3I6bik7dGhpcy5vcHRpb25zLmVsZWN0cmljQ2hhcnMmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycyYmdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50JiYhZ2UodGhpcykmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGkpPi0xJiZzZXRUaW1lb3V0KGxlKGUsZnVuY3Rpb24oKXtocihlLGUuZG9jLnNlbC50by5saW5lLCJzbWFydCIpfSksNzUpLERlKGUsdCxpKXx8KEFpJiYhTmkmJihlLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUoZSkpfX19ZnVuY3Rpb24gRWUodCl7Im5vY3Vyc29yIiE9dC5vcHRpb25zLnJlYWRPbmx5JiYodC5zdGF0ZS5mb2N1c2VkfHwoS24odCwiZm9jdXMiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMCwtMT09dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pJiYodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3ItZm9jdXNlZCIpLHQuY3VyT3B8fChkZSh0LCEwKSxXaSYmc2V0VGltZW91dChpaShkZSx0LCEwKSwwKSkpLGNlKHQpLEQodCkpfWZ1bmN0aW9uIHplKHQpe3Quc3RhdGUuZm9jdXNlZCYmKEtuKHQsImJsdXIiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMSx0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCIiKSksY2xlYXJJbnRlcnZhbCh0LmRpc3BsYXkuYmxpbmtlciksc2V0VGltZW91dChmdW5jdGlvbigpe3Quc3RhdGUuZm9jdXNlZHx8KHQuZG9jLnNlbC5zaGlmdD0hMSl9LDE1MCl9ZnVuY3Rpb24gSWUodCxlKXtmdW5jdGlvbiByKCl7aWYobnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7dmFyIHQ9aS5pbnB1dC52YWx1ZT0i4oCLIisoamUoby5mcm9tLG8udG8pPyIiOmkuaW5wdXQudmFsdWUpO2kucHJldklucHV0PSLigIsiLGkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9MSxpLmlucHV0LnNlbGVjdGlvbkVuZD10Lmxlbmd0aH19ZnVuY3Rpb24gbigpe2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9dSxOaSYmKGkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9aS5zY3JvbGxlci5zY3JvbGxUb3A9cyksY2UodCksbnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7KCFBaXx8TmkpJiZyKCksY2xlYXJUaW1lb3V0KGlvKTt2YXIgZT0wLG49ZnVuY3Rpb24oKXsiICI9PWkucHJldklucHV0JiYwPT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0P2xlKHQsbW8uc2VsZWN0QWxsKSh0KTplKys8MTA/aW89c2V0VGltZW91dChuLDUwMCk6ZGUodCl9O2lvPXNldFRpbWVvdXQobiwyMDApfX1pZighWG4odCxlLCJjb250ZXh0bWVudSIpKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYy5zZWw7aWYoIXZlKGksZSkmJiFDZSh0LGUpKXt2YXIgbD15ZSh0LGUpLHM9aS5zY3JvbGxlci5zY3JvbGxUb3A7aWYobCYmIXppKXt2YXIgYT10Lm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51O2EmJihqZShvLmZyb20sby50byl8fCRlKGwsby5mcm9tKXx8ISRlKGwsby50bykpJiZsZSh0LG5yKSh0LmRvYyxsLGwpO3ZhciB1PWkuaW5wdXQuc3R5bGUuY3NzVGV4dDtpZihpLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5pbnB1dC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIisoZS5jbGllbnRZLTUpKyJweDsgbGVmdDogIisoZS5jbGllbnRYLTUpKyJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogd2hpdGU7IG91dGxpbmU6IG5vbmU7IisiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IC1tcy1vcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTsiLHBlKHQpLGRlKHQsITApLGplKG8uZnJvbSxvLnRvKSYmKGkuaW5wdXQudmFsdWU9aS5wcmV2SW5wdXQ9IiAiKSxBaSYmIU5pJiZyKCksWmkpe1BuKGUpO3ZhciBjPWZ1bmN0aW9uKCl7Vm4od2luZG93LCJtb3VzZXVwIixjKSxzZXRUaW1lb3V0KG4sMjApfTtHbih3aW5kb3csIm1vdXNldXAiLGMpfWVsc2Ugc2V0VGltZW91dChuLDUwKX19fX1mdW5jdGlvbiBGZSh0LGUscil7aWYoISRlKGUuZnJvbSxyKSlyZXR1cm4gUWUodCxyKTt2YXIgbj1lLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSk7aWYoci5saW5lPmUudG8ubGluZStuKXt2YXIgaT1yLmxpbmUtbixvPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGk+bz9ZZShvLGduKHQsbykudGV4dC5sZW5ndGgpOkplKHIsZ24odCxpKS50ZXh0Lmxlbmd0aCl9aWYoci5saW5lPT1lLnRvLmxpbmUrbilyZXR1cm4gSmUocixRbihlLnRleHQpLmxlbmd0aCsoMT09ZS50ZXh0Lmxlbmd0aD9lLmZyb20uY2g6MCkrZ24odCxlLnRvLmxpbmUpLnRleHQubGVuZ3RoLWUudG8uY2gpO3ZhciBsPXIubGluZS1lLmZyb20ubGluZTtyZXR1cm4gSmUocixlLnRleHRbbF0ubGVuZ3RoKyhsPzA6ZS5mcm9tLmNoKSl9ZnVuY3Rpb24gUGUodCxlLHIpe2lmKHImJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm57YW5jaG9yOkZlKHQsZSxyLmFuY2hvciksaGVhZDpGZSh0LGUsci5oZWFkKX07aWYoInN0YXJ0Ij09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOmUuZnJvbX07dmFyIG49bG8oZSk7aWYoImFyb3VuZCI9PXIpcmV0dXJue2FuY2hvcjplLmZyb20saGVhZDpufTtpZigiZW5kIj09cilyZXR1cm57YW5jaG9yOm4saGVhZDpufTt2YXIgaT1mdW5jdGlvbih0KXtpZigkZSh0LGUuZnJvbSkpcmV0dXJuIHQ7aWYoISRlKGUudG8sdCkpcmV0dXJuIG47dmFyIHI9dC5saW5lK2UudGV4dC5sZW5ndGgtKGUudG8ubGluZS1lLmZyb20ubGluZSktMSxpPXQuY2g7cmV0dXJuIHQubGluZT09ZS50by5saW5lJiYoaSs9bi5jaC1lLnRvLmNoKSxZZShyLGkpfTtyZXR1cm57YW5jaG9yOmkodC5zZWwuYW5jaG9yKSxoZWFkOmkodC5zZWwuaGVhZCl9fWZ1bmN0aW9uIFJlKHQsZSxyKXt2YXIgbj17Y2FuY2VsZWQ6ITEsZnJvbTplLmZyb20sdG86ZS50byx0ZXh0OmUudGV4dCxvcmlnaW46ZS5vcmlnaW4sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxlZD0hMH19O3JldHVybiByJiYobi51cGRhdGU9ZnVuY3Rpb24oZSxyLG4saSl7ZSYmKHRoaXMuZnJvbT1RZSh0LGUpKSxyJiYodGhpcy50bz1RZSh0LHIpKSxuJiYodGhpcy50ZXh0PW4pLHZvaWQgMCE9PWkmJih0aGlzLm9yaWdpbj1pKX0pLEtuKHQsImJlZm9yZUNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVDaGFuZ2UiLHQuY20sbiksbi5jYW5jZWxlZD9udWxsOntmcm9tOm4uZnJvbSx0bzpuLnRvLHRleHQ6bi50ZXh0LG9yaWdpbjpuLm9yaWdpbn19ZnVuY3Rpb24gQmUodCxlLHIsbil7aWYodC5jbSl7aWYoIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sQmUpKHQsZSxyLG4pO2lmKHQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cylyZXR1cm59aWYoIShZbih0LCJiZWZvcmVDaGFuZ2UiKXx8dC5jbSYmWW4odC5jbSwiYmVmb3JlQ2hhbmdlIikpfHwoZT1SZSh0LGUsITApKSl7dmFyIGk9cWkmJiFuJiZGcih0LGUuZnJvbSxlLnRvKTtpZihpKXtmb3IodmFyIG89aS5sZW5ndGgtMTtvPj0xOy0tbylHZSh0LHtmcm9tOmlbb10uZnJvbSx0bzppW29dLnRvLHRleHQ6WyIiXX0pO2kubGVuZ3RoJiZHZSh0LHtmcm9tOmlbMF0uZnJvbSx0bzppWzBdLnRvLHRleHQ6ZS50ZXh0fSxyKX1lbHNlIEdlKHQsZSxyKX19ZnVuY3Rpb24gR2UodCxlLHIpe2lmKDEhPWUudGV4dC5sZW5ndGh8fCIiIT1lLnRleHRbMF18fCFqZShlLmZyb20sZS50bykpe3ZhciBuPVBlKHQsZSxyKTtNbih0LGUsbix0LmNtP3QuY20uY3VyT3AuaWQ6MC8wKSxVZSh0LGUsbix6cih0LGUpKTt2YXIgaT1bXTtkbih0LGZ1bmN0aW9uKHQscil7cnx8LTEhPXRpKGksdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxlKSxpLnB1c2godC5oaXN0b3J5KSksVWUodCxlLG51bGwsenIodCxlKSl9KX19ZnVuY3Rpb24gVmUodCxlKXtpZighdC5jbXx8IXQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cyl7dmFyIHI9dC5oaXN0b3J5LG49KCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLnBvcCgpO2lmKG4pe3ZhciBpPXtjaGFuZ2VzOltdLGFuY2hvckJlZm9yZTpuLmFuY2hvckFmdGVyLGhlYWRCZWZvcmU6bi5oZWFkQWZ0ZXIsYW5jaG9yQWZ0ZXI6bi5hbmNob3JCZWZvcmUsaGVhZEFmdGVyOm4uaGVhZEJlZm9yZSxnZW5lcmF0aW9uOnIuZ2VuZXJhdGlvbn07KCJ1bmRvIj09ZT9yLnVuZG9uZTpyLmRvbmUpLnB1c2goaSksci5nZW5lcmF0aW9uPW4uZ2VuZXJhdGlvbnx8KytyLm1heEdlbmVyYXRpb247Zm9yKHZhciBvPVluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSxsPW4uY2hhbmdlcy5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHM9bi5jaGFuZ2VzW2xdO2lmKHMub3JpZ2luPWUsbyYmIVJlKHQscywhMSkpcmV0dXJuKCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLmxlbmd0aD0wLHZvaWQgMDtpLmNoYW5nZXMucHVzaChTbih0LHMpKTt2YXIgYT1sP1BlKHQscyxudWxsKTp7YW5jaG9yOm4uYW5jaG9yQmVmb3JlLGhlYWQ6bi5oZWFkQmVmb3JlfTtVZSh0LHMsYSxJcih0LHMpKTt2YXIgdT1bXTtkbih0LGZ1bmN0aW9uKHQsZSl7ZXx8LTEhPXRpKHUsdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxzKSx1LnB1c2godC5oaXN0b3J5KSksVWUodCxzLG51bGwsSXIodCxzKSl9KX19fX1mdW5jdGlvbiBLZSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIFllKHQubGluZStlLHQuY2gpfXQuZmlyc3QrPWUsdC5jbSYmdWUodC5jbSx0LmZpcnN0LHQuZmlyc3QsZSksdC5zZWwuaGVhZD1yKHQuc2VsLmhlYWQpLHQuc2VsLmFuY2hvcj1yKHQuc2VsLmFuY2hvciksdC5zZWwuZnJvbT1yKHQuc2VsLmZyb20pLHQuc2VsLnRvPXIodC5zZWwudG8pfWZ1bmN0aW9uIFVlKHQsZSxyLG4pe2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFVlKSh0LGUscixuKTtpZihlLnRvLmxpbmU8dC5maXJzdClyZXR1cm4gS2UodCxlLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSkpLHZvaWQgMDtpZighKGUuZnJvbS5saW5lPnQubGFzdExpbmUoKSkpe2lmKGUuZnJvbS5saW5lPHQuZmlyc3Qpe3ZhciBpPWUudGV4dC5sZW5ndGgtMS0odC5maXJzdC1lLmZyb20ubGluZSk7S2UodCxpKSxlPXtmcm9tOlllKHQuZmlyc3QsMCksdG86WWUoZS50by5saW5lK2ksZS50by5jaCksdGV4dDpbUW4oZS50ZXh0KV0sb3JpZ2luOmUub3JpZ2lufX12YXIgbz10Lmxhc3RMaW5lKCk7ZS50by5saW5lPm8mJihlPXtmcm9tOmUuZnJvbSx0bzpZZShvLGduKHQsbykudGV4dC5sZW5ndGgpLHRleHQ6W2UudGV4dFswXV0sb3JpZ2luOmUub3JpZ2lufSksZS5yZW1vdmVkPW1uKHQsZS5mcm9tLGUudG8pLHJ8fChyPVBlKHQsZSxudWxsKSksdC5jbT9YZSh0LmNtLGUsbixyKTpjbih0LGUsbixyKX19ZnVuY3Rpb24gWGUodCxlLHIsbil7dmFyIG89dC5kb2MsbD10LmRpc3BsYXkscz1lLmZyb20sYT1lLnRvLHU9ITEsZj1zLmxpbmU7dC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGY9Ym4oR3IobyxnbihvLHMubGluZSkpKSxvLml0ZXIoZixhLmxpbmUrMSxmdW5jdGlvbih0KXtyZXR1cm4gdD09bC5tYXhMaW5lPyh1PSEwLCEwKTp2b2lkIDB9KSksJGUoby5zZWwuaGVhZCxlLmZyb20pfHwkZShlLnRvLG8uc2VsLmhlYWQpfHwodC5jdXJPcC5jdXJzb3JBY3Rpdml0eT0hMCksY24obyxlLHIsbixpKHQpKSx0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoby5pdGVyKGYscy5saW5lK2UudGV4dC5sZW5ndGgsZnVuY3Rpb24odCl7dmFyIGU9YyhvLHQpO2U+bC5tYXhMaW5lTGVuZ3RoJiYobC5tYXhMaW5lPXQsbC5tYXhMaW5lTGVuZ3RoPWUsbC5tYXhMaW5lQ2hhbmdlZD0hMCx1PSExKX0pLHUmJih0LmN1ck9wLnVwZGF0ZU1heExpbmU9ITApKSxvLmZyb250aWVyPU1hdGgubWluKG8uZnJvbnRpZXIscy5saW5lKSxXKHQsNDAwKTt2YXIgaD1lLnRleHQubGVuZ3RoLShhLmxpbmUtcy5saW5lKS0xO2lmKHVlKHQscy5saW5lLGEubGluZSsxLGgpLFluKHQsImNoYW5nZSIpKXt2YXIgZD17ZnJvbTpzLHRvOmEsdGV4dDplLnRleHQscmVtb3ZlZDplLnJlbW92ZWQsb3JpZ2luOmUub3JpZ2lufTtpZih0LmN1ck9wLnRleHRDaGFuZ2VkKXtmb3IodmFyIHA9dC5jdXJPcC50ZXh0Q2hhbmdlZDtwLm5leHQ7cD1wLm5leHQpO3AubmV4dD1kfWVsc2UgdC5jdXJPcC50ZXh0Q2hhbmdlZD1kfX1mdW5jdGlvbiBfZSh0LGUscixuLGkpe2lmKG58fChuPXIpLCRlKG4scikpe3ZhciBvPW47bj1yLHI9b30ic3RyaW5nIj09dHlwZW9mIGUmJihlPXpvKGUpKSxCZSh0LHtmcm9tOnIsdG86bix0ZXh0OmUsb3JpZ2luOml9LG51bGwpfWZ1bmN0aW9uIFllKHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBZZT8odGhpcy5saW5lPXQsdGhpcy5jaD1lLHZvaWQgMCk6bmV3IFllKHQsZSl9ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gdC5saW5lPT1lLmxpbmUmJnQuY2g9PWUuY2h9ZnVuY3Rpb24gJGUodCxlKXtyZXR1cm4gdC5saW5lPGUubGluZXx8dC5saW5lPT1lLmxpbmUmJnQuY2g8ZS5jaH1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gWWUodC5saW5lLHQuY2gpfWZ1bmN0aW9uIHFlKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQuZmlyc3QsTWF0aC5taW4oZSx0LmZpcnN0K3Quc2l6ZS0xKSl9ZnVuY3Rpb24gUWUodCxlKXtpZihlLmxpbmU8dC5maXJzdClyZXR1cm4gWWUodC5maXJzdCwwKTt2YXIgcj10LmZpcnN0K3Quc2l6ZS0xO3JldHVybiBlLmxpbmU+cj9ZZShyLGduKHQscikudGV4dC5sZW5ndGgpOkplKGUsZ24odCxlLmxpbmUpLnRleHQubGVuZ3RoKX1mdW5jdGlvbiBKZSh0LGUpe3ZhciByPXQuY2g7cmV0dXJuIG51bGw9PXJ8fHI+ZT9ZZSh0LmxpbmUsZSk6MD5yP1llKHQubGluZSwwKTp0fWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJuIGU+PXQuZmlyc3QmJmU8dC5maXJzdCt0LnNpemV9ZnVuY3Rpb24gZXIodCxlLHIsbil7aWYodC5zZWwuc2hpZnR8fHQuc2VsLmV4dGVuZCl7dmFyIGk9dC5zZWwuYW5jaG9yO2lmKHIpe3ZhciBvPSRlKGUsaSk7byE9JGUocixpKT8oaT1lLGU9cik6byE9JGUoZSxyKSYmKGU9cil9bnIodCxpLGUsbil9ZWxzZSBucih0LGUscnx8ZSxuKTt0LmNtJiYodC5jbS5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwKX1mdW5jdGlvbiBycih0LGUscil7dmFyIG49e2FuY2hvcjplLGhlYWQ6cn07cmV0dXJuIEtuKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLHQuY20sbiksbi5hbmNob3I9UWUodCxuLmFuY2hvciksbi5oZWFkPVFlKHQsbi5oZWFkKSxufWZ1bmN0aW9uIG5yKHQsZSxyLG4saSl7aWYoIWkmJlluKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSl7dmFyIG89cnIodCxlLHIpO3I9by5oZWFkLGU9by5hbmNob3J9dmFyIGw9dC5zZWw7aWYobC5nb2FsQ29sdW1uPW51bGwsbnVsbD09biYmKG49JGUocixsLmhlYWQpPy0xOjEpLChpfHwhamUoZSxsLmFuY2hvcikpJiYoZT1vcih0LGUsbiwicHVzaCIhPWkpKSwoaXx8IWplKHIsbC5oZWFkKSkmJihyPW9yKHQscixuLCJwdXNoIiE9aSkpLCFqZShsLmFuY2hvcixlKXx8IWplKGwuaGVhZCxyKSl7bC5hbmNob3I9ZSxsLmhlYWQ9cjt2YXIgcz0kZShyLGUpO2wuZnJvbT1zP3I6ZSxsLnRvPXM/ZTpyLHQuY20mJih0LmNtLmN1ck9wLnVwZGF0ZUlucHV0PXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD10LmNtLmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxVbih0LCJjdXJzb3JBY3Rpdml0eSIsdCl9fWZ1bmN0aW9uIGlyKHQpe25yKHQuZG9jLHQuZG9jLnNlbC5mcm9tLHQuZG9jLnNlbC50byxudWxsLCJwdXNoIil9ZnVuY3Rpb24gb3IodCxlLHIsbil7dmFyIGk9ITEsbz1lLGw9cnx8MTt0LmNhbnRFZGl0PSExO3Q6Zm9yKDs7KXt2YXIgcz1nbih0LG8ubGluZSk7aWYocy5tYXJrZWRTcGFucylmb3IodmFyIGE9MDthPHMubWFya2VkU3BhbnMubGVuZ3RoOysrYSl7dmFyIHU9cy5tYXJrZWRTcGFuc1thXSxjPXUubWFya2VyO2lmKChudWxsPT11LmZyb218fChjLmluY2x1c2l2ZUxlZnQ/dS5mcm9tPD1vLmNoOnUuZnJvbTxvLmNoKSkmJihudWxsPT11LnRvfHwoYy5pbmNsdXNpdmVSaWdodD91LnRvPj1vLmNoOnUudG8+by5jaCkpKXtpZihuJiYoS24oYywiYmVmb3JlQ3Vyc29yRW50ZXIiKSxjLmV4cGxpY2l0bHlDbGVhcmVkKSl7aWYocy5tYXJrZWRTcGFucyl7LS1hO2NvbnRpbnVlfWJyZWFrfWlmKCFjLmF0b21pYyljb250aW51ZTt2YXIgZj1jLmZpbmQoKVswPmw/ImZyb20iOiJ0byJdO2lmKGplKGYsbykmJihmLmNoKz1sLGYuY2g8MD9mPWYubGluZT50LmZpcnN0P1FlKHQsWWUoZi5saW5lLTEpKTpudWxsOmYuY2g+cy50ZXh0Lmxlbmd0aCYmKGY9Zi5saW5lPHQuZmlyc3QrdC5zaXplLTE/WWUoZi5saW5lKzEsMCk6bnVsbCksIWYpKXtpZihpKXJldHVybiBuPyh0LmNhbnRFZGl0PSEwLFllKHQuZmlyc3QsMCkpOm9yKHQsZSxyLCEwKTtpPSEwLGY9ZSxsPS1sfW89Zjtjb250aW51ZSB0fX1yZXR1cm4gb319ZnVuY3Rpb24gbHIodCl7dmFyIGU9c3IodCx0LmRvYy5zZWwuaGVhZCxudWxsLHQub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pO2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIHI9dC5kaXNwbGF5LG49Zmkoci5zaXplciksaT1udWxsO2lmKGUudG9wK24udG9wPDA/aT0hMDplLmJvdHRvbStuLnRvcD4od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmKGk9ITEpLG51bGwhPWkmJiFCaSl7dmFyIG89Im5vbmUiPT1yLmN1cnNvci5zdHlsZS5kaXNwbGF5O28mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLHIuY3Vyc29yLnN0eWxlLmxlZnQ9ZS5sZWZ0KyJweCIsci5jdXJzb3Iuc3R5bGUudG9wPWUudG9wLXIudmlld09mZnNldCsicHgiKSxyLmN1cnNvci5zY3JvbGxJbnRvVmlldyhpKSxvJiYoci5jdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19ZnVuY3Rpb24gc3IodCxlLHIsbil7Zm9yKG51bGw9PW4mJihuPTApOzspe3ZhciBpPSExLG89USh0LGUpLGw9ciYmciE9ZT9RKHQscik6byxzPXVyKHQsTWF0aC5taW4oby5sZWZ0LGwubGVmdCksTWF0aC5taW4oby50b3AsbC50b3ApLW4sTWF0aC5tYXgoby5sZWZ0LGwubGVmdCksTWF0aC5tYXgoby5ib3R0b20sbC5ib3R0b20pK24pLGE9dC5kb2Muc2Nyb2xsVG9wLHU9dC5kb2Muc2Nyb2xsTGVmdDtpZihudWxsIT1zLnNjcm9sbFRvcCYmKFNlKHQscy5zY3JvbGxUb3ApLE1hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1hKT4xJiYoaT0hMCkpLG51bGwhPXMuc2Nyb2xsTGVmdCYmKE1lKHQscy5zY3JvbGxMZWZ0KSxNYXRoLmFicyh0LmRvYy5zY3JvbGxMZWZ0LXUpPjEmJihpPSEwKSksIWkpcmV0dXJuIG99fWZ1bmN0aW9uIGFyKHQsZSxyLG4saSl7dmFyIG89dXIodCxlLHIsbixpKTtudWxsIT1vLnNjcm9sbFRvcCYmU2UodCxvLnNjcm9sbFRvcCksbnVsbCE9by5zY3JvbGxMZWZ0JiZNZSh0LG8uc2Nyb2xsTGVmdCl9ZnVuY3Rpb24gdXIodCxlLHIsbixpKXt2YXIgbz10LmRpc3BsYXksbD1yZSh0LmRpc3BsYXkpOzA+ciYmKHI9MCk7dmFyIHM9by5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8sYT1vLnNjcm9sbGVyLnNjcm9sbFRvcCx1PXt9LGM9dC5kb2MuaGVpZ2h0K0YobyksZj1sPnIsaD1pPmMtbDtpZihhPnIpdS5zY3JvbGxUb3A9Zj8wOnI7ZWxzZSBpZihpPmErcyl7dmFyIGQ9TWF0aC5taW4ociwoaD9jOmkpLXMpO2QhPWEmJih1LnNjcm9sbFRvcD1kKX12YXIgcD1vLnNjcm9sbGVyLmNsaWVudFdpZHRoLVRvLGc9by5zY3JvbGxlci5zY3JvbGxMZWZ0O2UrPW8uZ3V0dGVycy5vZmZzZXRXaWR0aCxuKz1vLmd1dHRlcnMub2Zmc2V0V2lkdGg7dmFyIG09by5ndXR0ZXJzLm9mZnNldFdpZHRoLHY9bSsxMD5lO3JldHVybiBnK20+ZXx8dj8odiYmKGU9MCksdS5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsZS0xMC1tKSk6bj5wK2ctMyYmKHUuc2Nyb2xsTGVmdD1uKzEwLXApLHV9ZnVuY3Rpb24gY3IodCxlLHIpe3QuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0Om51bGw9PWU/dC5kb2Muc2Nyb2xsTGVmdDplLHNjcm9sbFRvcDpudWxsPT1yP3QuZG9jLnNjcm9sbFRvcDpyfX1mdW5jdGlvbiBmcih0LGUscil7dmFyIG49dC5jdXJPcC51cGRhdGVTY3JvbGxQb3N8fCh0LmN1ck9wLnVwZGF0ZVNjcm9sbFBvcz17c2Nyb2xsTGVmdDp0LmRvYy5zY3JvbGxMZWZ0LHNjcm9sbFRvcDp0LmRvYy5zY3JvbGxUb3B9KSxpPXQuZGlzcGxheS5zY3JvbGxlcjtuLnNjcm9sbFRvcD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsSGVpZ2h0LWkuY2xpZW50SGVpZ2h0LG4uc2Nyb2xsVG9wK3IpKSxuLnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihpLnNjcm9sbFdpZHRoLWkuY2xpZW50V2lkdGgsbi5zY3JvbGxMZWZ0K2UpKX1mdW5jdGlvbiBocih0LGUscixuKXt2YXIgaT10LmRvYztpZihudWxsPT1yJiYocj0iYWRkIiksInNtYXJ0Ij09cilpZih0LmRvYy5tb2RlLmluZGVudCl2YXIgbz16KHQsZSk7ZWxzZSByPSJwcmV2Ijt2YXIgbCxzPXQub3B0aW9ucy50YWJTaXplLGE9Z24oaSxlKSx1PVpuKGEudGV4dCxudWxsLHMpLGM9YS50ZXh0Lm1hdGNoKC9eXHMqLylbMF07aWYoInNtYXJ0Ij09ciYmKGw9dC5kb2MubW9kZS5pbmRlbnQobyxhLnRleHQuc2xpY2UoYy5sZW5ndGgpLGEudGV4dCksbD09QW8pKXtpZighbilyZXR1cm47cj0icHJldiJ9InByZXYiPT1yP2w9ZT5pLmZpcnN0P1puKGduKGksZS0xKS50ZXh0LG51bGwscyk6MDoiYWRkIj09cj9sPXUrdC5vcHRpb25zLmluZGVudFVuaXQ6InN1YnRyYWN0Ij09cj9sPXUtdC5vcHRpb25zLmluZGVudFVuaXQ6Im51bWJlciI9PXR5cGVvZiByJiYobD11K3IpLGw9TWF0aC5tYXgoMCxsKTt2YXIgZj0iIixoPTA7aWYodC5vcHRpb25zLmluZGVudFdpdGhUYWJzKWZvcih2YXIgZD1NYXRoLmZsb29yKGwvcyk7ZDstLWQpaCs9cyxmKz0iCSI7bD5oJiYoZis9cW4obC1oKSksZiE9Yz9fZSh0LmRvYyxmLFllKGUsMCksWWUoZSxjLmxlbmd0aCksIitpbnB1dCIpOmkuc2VsLmhlYWQubGluZT09ZSYmaS5zZWwuaGVhZC5jaDxjLmxlbmd0aCYmbnIoaSxZZShlLGMubGVuZ3RoKSxZZShlLGMubGVuZ3RoKSwxKSxhLnN0YXRlQWZ0ZXI9bnVsbH1mdW5jdGlvbiBkcih0LGUscil7dmFyIG49ZSxpPWUsbz10LmRvYztyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/aT1nbihvLHFlKG8sZSkpOm49Ym4oZSksbnVsbD09bj9udWxsOnIoaSxuKT8odWUodCxuLG4rMSksaSk6bnVsbH1mdW5jdGlvbiBwcih0LGUscixuLGkpe2Z1bmN0aW9uIG8oKXt2YXIgZT1zK3I7cmV0dXJuIGU8dC5maXJzdHx8ZT49dC5maXJzdCt0LnNpemU/Zj0hMToocz1lLGM9Z24odCxlKSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT0oaT9TaTpNaSkoYyxhLHIsITApO2lmKG51bGw9PWUpe2lmKHR8fCFvKCkpcmV0dXJuIGY9ITE7YT1pPygwPnI/Ymk6eWkpKGMpOjA+cj9jLnRleHQubGVuZ3RoOjB9ZWxzZSBhPWU7cmV0dXJuITB9dmFyIHM9ZS5saW5lLGE9ZS5jaCx1PXIsYz1nbih0LHMpLGY9ITA7aWYoImNoYXIiPT1uKWwoKTtlbHNlIGlmKCJjb2x1bW4iPT1uKWwoITApO2Vsc2UgaWYoIndvcmQiPT1ufHwiZ3JvdXAiPT1uKWZvcih2YXIgaD1udWxsLGQ9Imdyb3VwIj09bixwPSEwOyEoMD5yKXx8bCghcCk7cD0hMSl7dmFyIGc9Yy50ZXh0LmNoYXJBdChhKXx8IlxuIixtPW9pKGcpPyJ3IjpkPy9ccy8udGVzdChnKT9udWxsOiJwIjpudWxsO2lmKGgmJmghPW0pezA+ciYmKHI9MSxsKCkpO2JyZWFrfWlmKG0mJihoPW0pLHI+MCYmIWwoIXApKWJyZWFrfXZhciB2PW9yKHQsWWUocyxhKSx1LCEwKTtyZXR1cm4gZnx8KHYuaGl0U2lkZT0hMCksdn1mdW5jdGlvbiBncih0LGUscixuKXt2YXIgaSxvPXQuZG9jLGw9ZS5sZWZ0O2lmKCJwYWdlIj09bil7dmFyIHM9TWF0aC5taW4odC5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7aT1lLnRvcCtyKihzLSgwPnI/MS41Oi41KSpyZSh0LmRpc3BsYXkpKX1lbHNlImxpbmUiPT1uJiYoaT1yPjA/ZS5ib3R0b20rMzplLnRvcC0zKTtmb3IoOzspe3ZhciBhPXRlKHQsbCxpKTtpZighYS5vdXRzaWRlKWJyZWFrO2lmKDA+cj8wPj1pOmk+PW8uaGVpZ2h0KXthLmhpdFNpZGU9ITA7YnJlYWt9aSs9NSpyfXJldHVybiBhfWZ1bmN0aW9uIG1yKHQsZSl7dmFyIHI9ZS5jaCxuPWUuY2g7aWYodCl7KGUueFJlbDwwfHxuPT10Lmxlbmd0aCkmJnI/LS1yOisrbjtmb3IodmFyIGk9dC5jaGFyQXQociksbz1vaShpKT9vaTovXHMvLnRlc3QoaSk/ZnVuY3Rpb24odCl7cmV0dXJuL1xzLy50ZXN0KHQpfTpmdW5jdGlvbih0KXtyZXR1cm4hL1xzLy50ZXN0KHQpJiYhb2kodCl9O3I+MCYmbyh0LmNoYXJBdChyLTEpKTspLS1yO2Zvcig7bjx0Lmxlbmd0aCYmbyh0LmNoYXJBdChuKSk7KSsrbn1yZXR1cm57ZnJvbTpZZShlLmxpbmUsciksdG86WWUoZS5saW5lLG4pfX1mdW5jdGlvbiB2cih0LGUpe2VyKHQuZG9jLFllKGUsMCksUWUodC5kb2MsWWUoZSsxLDApKSl9ZnVuY3Rpb24geXIoZSxyLG4saSl7dC5kZWZhdWx0c1tlXT1yLG4mJihzb1tlXT1pP2Z1bmN0aW9uKHQsZSxyKXtyIT11byYmbih0LGUscil9Om4pfWZ1bmN0aW9uIGJyKHQsZSl7aWYoZT09PSEwKXJldHVybiBlO2lmKHQuY29weVN0YXRlKXJldHVybiB0LmNvcHlTdGF0ZShlKTt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpIGluc3RhbmNlb2YgQXJyYXkmJihpPWkuY29uY2F0KFtdKSkscltuXT1pfXJldHVybiByfWZ1bmN0aW9uIHhyKHQsZSxyKXtyZXR1cm4gdC5zdGFydFN0YXRlP3Quc3RhcnRTdGF0ZShlLHIpOiEwfWZ1bmN0aW9uIENyKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD92b1t0XTp0fWZ1bmN0aW9uIHdyKHQsZSxyKXtmdW5jdGlvbiBuKGUpe2U9Q3IoZSk7dmFyIGk9ZVt0XTtpZihpPT09ITEpcmV0dXJuInN0b3AiO2lmKG51bGwhPWkmJnIoaSkpcmV0dXJuITA7aWYoZS5ub2ZhbGx0aHJvdWdoKXJldHVybiJzdG9wIjt2YXIgbz1lLmZhbGx0aHJvdWdoO2lmKG51bGw9PW8pcmV0dXJuITE7aWYoIltvYmplY3QgQXJyYXldIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKXJldHVybiBuKG8pO2Zvcih2YXIgbD0wLHM9by5sZW5ndGg7cz5sOysrbCl7dmFyIGE9bihvW2xdKTtpZihhKXJldHVybiBhfXJldHVybiExfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgbz1uKGVbaV0pO2lmKG8pcmV0dXJuInN0b3AiIT1vfX1mdW5jdGlvbiBMcih0KXt2YXIgZT1Qb1t0LmtleUNvZGVdO3JldHVybiJDdHJsIj09ZXx8IkFsdCI9PWV8fCJTaGlmdCI9PWV8fCJNb2QiPT1lfWZ1bmN0aW9uIGtyKHQsZSl7aWYoemkmJjM0PT10LmtleUNvZGUmJnRbImNoYXIiXSlyZXR1cm4hMTt2YXIgcj1Qb1t0LmtleUNvZGVdO3JldHVybiBudWxsPT1yfHx0LmFsdEdyYXBoS2V5PyExOih0LmFsdEtleSYmKHI9IkFsdC0iK3IpLCgkaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmKHI9IkN0cmwtIityKSwoJGk/dC5jdHJsS2V5OnQubWV0YUtleSkmJihyPSJDbWQtIityKSwhZSYmdC5zaGlmdEtleSYmKHI9IlNoaWZ0LSIrcikscil9ZnVuY3Rpb24gU3IodCxlKXt0aGlzLnBvcz10aGlzLnN0YXJ0PTAsdGhpcy5zdHJpbmc9dCx0aGlzLnRhYlNpemU9ZXx8OCx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5sYXN0Q29sdW1uVmFsdWU9MH1mdW5jdGlvbiBNcih0LGUpe3RoaXMubGluZXM9W10sdGhpcy50eXBlPWUsdGhpcy5kb2M9dH1mdW5jdGlvbiBUcih0LGUscixuLGkpe2lmKG4mJm4uc2hhcmVkKXJldHVybiBIcih0LGUscixuLGkpO2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFRyKSh0LGUscixuLGkpO3ZhciBvPW5ldyBNcih0LGkpO2lmKCRlKHIsZSl8fGplKGUscikmJiJyYW5nZSI9PWkmJighbi5pbmNsdXNpdmVMZWZ0fHwhbi5pbmNsdXNpdmVSaWdodCkpcmV0dXJuIG87biYmcmkobixvKSxvLnJlcGxhY2VkV2l0aCYmKG8uY29sbGFwc2VkPSEwLG8ucmVwbGFjZWRXaXRoPXNpKCJzcGFuIixbby5yZXBsYWNlZFdpdGhdLCJDb2RlTWlycm9yLXdpZGdldCIpLG4uaGFuZGxlTW91c2VFdmVudHN8fChvLnJlcGxhY2VkV2l0aC5pZ25vcmVFdmVudHM9ITApKSxvLmNvbGxhcHNlZCYmKFFpPSEwKSxvLmFkZFRvSGlzdG9yeSYmTW4odCx7ZnJvbTplLHRvOnIsb3JpZ2luOiJtYXJrVGV4dCJ9LHtoZWFkOnQuc2VsLmhlYWQsYW5jaG9yOnQuc2VsLmFuY2hvcn0sMC8wKTt2YXIgbCxzLGEsdT1lLmxpbmUsYz0wLGY9dC5jbTtpZih0Lml0ZXIodSxyLmxpbmUrMSxmdW5jdGlvbihuKXtmJiZvLmNvbGxhcHNlZCYmIWYub3B0aW9ucy5saW5lV3JhcHBpbmcmJkdyKHQsbik9PWYuZGlzcGxheS5tYXhMaW5lJiYoYT0hMCk7dmFyIGk9e2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpvfTtjKz1uLnRleHQubGVuZ3RoLHU9PWUubGluZSYmKGkuZnJvbT1lLmNoLGMtPWUuY2gpLHU9PXIubGluZSYmKGkudG89ci5jaCxjLT1uLnRleHQubGVuZ3RoLXIuY2gpLG8uY29sbGFwc2VkJiYodT09ci5saW5lJiYocz1QcihuLHIuY2gpKSx1PT1lLmxpbmU/bD1QcihuLGUuY2gpOnluKG4sMCkpLFdyKG4saSksKyt1fSksby5jb2xsYXBzZWQmJnQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24oZSl7VnIodCxlKSYmeW4oZSwwKX0pLG8uY2xlYXJPbkVudGVyJiZHbihvLCJiZWZvcmVDdXJzb3JFbnRlciIsZnVuY3Rpb24oKXtvLmNsZWFyKCl9KSxvLnJlYWRPbmx5JiYocWk9ITAsKHQuaGlzdG9yeS5kb25lLmxlbmd0aHx8dC5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpJiZ0LmNsZWFySGlzdG9yeSgpKSxvLmNvbGxhcHNlZCl7aWYobCE9cyl0aHJvdyBuZXcgRXJyb3IoIkluc2VydGluZyBjb2xsYXBzZWQgbWFya2VyIG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpO28uc2l6ZT1jLG8uYXRvbWljPSEwfXJldHVybiBmJiYoYSYmKGYuY3VyT3AudXBkYXRlTWF4TGluZT0hMCksKG8uY2xhc3NOYW1lfHxvLnRpdGxlfHxvLnN0YXJ0U3R5bGV8fG8uZW5kU3R5bGV8fG8uY29sbGFwc2VkKSYmdWUoZixlLmxpbmUsci5saW5lKzEpLG8uYXRvbWljJiZpcihmKSksb31mdW5jdGlvbiBBcih0LGUpe3RoaXMubWFya2Vycz10LHRoaXMucHJpbWFyeT1lO2Zvcih2YXIgcj0wLG49dGhpcztyPHQubGVuZ3RoOysrcil0W3JdLnBhcmVudD10aGlzLEduKHRbcl0sImNsZWFyIixmdW5jdGlvbigpe24uY2xlYXIoKX0pfWZ1bmN0aW9uIEhyKHQsZSxyLG4saSl7bj1yaShuKSxuLnNoYXJlZD0hMTt2YXIgbz1bVHIodCxlLHIsbixpKV0sbD1vWzBdLHM9bi5yZXBsYWNlZFdpdGg7cmV0dXJuIGRuKHQsZnVuY3Rpb24odCl7cyYmKG4ucmVwbGFjZWRXaXRoPXMuY2xvbmVOb2RlKCEwKSksby5wdXNoKFRyKHQsUWUodCxlKSxRZSh0LHIpLG4saSkpO2Zvcih2YXIgYT0wO2E8dC5saW5rZWQubGVuZ3RoOysrYSlpZih0LmxpbmtlZFthXS5pc1BhcmVudClyZXR1cm47bD1RbihvKX0pLG5ldyBBcihvLGwpfWZ1bmN0aW9uIE5yKHQsZSl7aWYodClmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtpZihuLm1hcmtlcj09ZSlyZXR1cm4gbn19ZnVuY3Rpb24gRHIodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXRbbl0hPWUmJihyfHwocj1bXSkpLnB1c2godFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gV3IodCxlKXt0Lm1hcmtlZFNwYW5zPXQubWFya2VkU3BhbnM/dC5tYXJrZWRTcGFucy5jb25jYXQoW2VdKTpbZV0sZS5tYXJrZXIuYXR0YWNoTGluZSh0KX1mdW5jdGlvbiBPcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTtpZihzfHwobC5pbmNsdXNpdmVMZWZ0JiZsLmluY2x1c2l2ZVJpZ2h0fHwiYm9va21hcmsiPT1sLnR5cGUpJiZvLmZyb209PWUmJighcnx8IW8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7KG58fChuPVtdKSkucHVzaCh7ZnJvbTpvLmZyb20sdG86YT9udWxsOm8udG8sbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24gRXIodCxlLHIpe2lmKHQpZm9yKHZhciBuLGk9MDtpPHQubGVuZ3RoOysraSl7dmFyIG89dFtpXSxsPW8ubWFya2VyLHM9bnVsbD09by50b3x8KGwuaW5jbHVzaXZlUmlnaHQ/by50bz49ZTpvLnRvPmUpO2lmKHN8fCJib29rbWFyayI9PWwudHlwZSYmby5mcm9tPT1lJiYoIXJ8fG8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOmE/bnVsbDpvLmZyb20tZSx0bzpudWxsPT1vLnRvP251bGw6by50by1lLG1hcmtlcjpsfSl9fXJldHVybiBufWZ1bmN0aW9uIHpyKHQsZSl7dmFyIHI9dHIodCxlLmZyb20ubGluZSkmJmduKHQsZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zLG49dHIodCxlLnRvLmxpbmUpJiZnbih0LGUudG8ubGluZSkubWFya2VkU3BhbnM7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPWUuZnJvbS5jaCxvPWUudG8uY2gsbD1qZShlLmZyb20sZS50bykscz1PcihyLGksbCksYT1FcihuLG8sbCksdT0xPT1lLnRleHQubGVuZ3RoLGM9UW4oZS50ZXh0KS5sZW5ndGgrKHU/aTowKTtpZihzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKXt2YXIgaD1zW2ZdO2lmKG51bGw9PWgudG8pe3ZhciBkPU5yKGEsaC5tYXJrZXIpO2Q/dSYmKGgudG89bnVsbD09ZC50bz9udWxsOmQudG8rYyk6aC50bz1pfX1pZihhKWZvcih2YXIgZj0wO2Y8YS5sZW5ndGg7KytmKXt2YXIgaD1hW2ZdO2lmKG51bGwhPWgudG8mJihoLnRvKz1jKSxudWxsPT1oLmZyb20pe3ZhciBkPU5yKHMsaC5tYXJrZXIpO2R8fChoLmZyb209Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpKX1lbHNlIGguZnJvbSs9Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpfWlmKHUmJnMpe2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGwhPXNbZl0uZnJvbSYmc1tmXS5mcm9tPT1zW2ZdLnRvJiYiYm9va21hcmsiIT1zW2ZdLm1hcmtlci50eXBlJiZzLnNwbGljZShmLS0sMSk7cy5sZW5ndGh8fChzPW51bGwpfXZhciBwPVtzXTtpZighdSl7dmFyIGcsbT1lLnRleHQubGVuZ3RoLTI7aWYobT4wJiZzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGw9PXNbZl0udG8mJihnfHwoZz1bXSkpLnB1c2goe2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpzW2ZdLm1hcmtlcn0pO2Zvcih2YXIgZj0wO20+ZjsrK2YpcC5wdXNoKGcpO3AucHVzaChhKX1yZXR1cm4gcH1mdW5jdGlvbiBJcih0LGUpe3ZhciByPUFuKHQsZSksbj16cih0LGUpO2lmKCFyKXJldHVybiBuO2lmKCFuKXJldHVybiByO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgbz1yW2ldLGw9bltpXTtpZihvJiZsKXQ6Zm9yKHZhciBzPTA7czxsLmxlbmd0aDsrK3Mpe2Zvcih2YXIgYT1sW3NdLHU9MDt1PG8ubGVuZ3RoOysrdSlpZihvW3VdLm1hcmtlcj09YS5tYXJrZXIpY29udGludWUgdDtvLnB1c2goYSl9ZWxzZSBsJiYocltpXT1sKX1yZXR1cm4gcn1mdW5jdGlvbiBGcih0LGUscil7dmFyIG49bnVsbDtpZih0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe2lmKHQubWFya2VkU3BhbnMpZm9yKHZhciBlPTA7ZTx0Lm1hcmtlZFNwYW5zLmxlbmd0aDsrK2Upe3ZhciByPXQubWFya2VkU3BhbnNbZV0ubWFya2VyOyFyLnJlYWRPbmx5fHxuJiYtMSE9dGkobixyKXx8KG58fChuPVtdKSkucHVzaChyKX19KSwhbilyZXR1cm4gbnVsbDtmb3IodmFyIGk9W3tmcm9tOmUsdG86cn1dLG89MDtvPG4ubGVuZ3RoOysrbylmb3IodmFyIGw9bltvXSxzPWwuZmluZCgpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIHU9aVthXTtpZighJGUodS50byxzLmZyb20pJiYhJGUocy50byx1LmZyb20pKXt2YXIgYz1bYSwxXTsoJGUodS5mcm9tLHMuZnJvbSl8fCFsLmluY2x1c2l2ZUxlZnQmJmplKHUuZnJvbSxzLmZyb20pKSYmYy5wdXNoKHtmcm9tOnUuZnJvbSx0bzpzLmZyb219KSwoJGUocy50byx1LnRvKXx8IWwuaW5jbHVzaXZlUmlnaHQmJmplKHUudG8scy50bykpJiZjLnB1c2goe2Zyb206cy50byx0bzp1LnRvfSksaS5zcGxpY2UuYXBwbHkoaSxjKSxhKz1jLmxlbmd0aC0xfX1yZXR1cm4gaX1mdW5jdGlvbiBQcih0LGUpe3ZhciByLG49UWkmJnQubWFya2VkU3BhbnM7aWYobilmb3IodmFyIGksbz0wO288bi5sZW5ndGg7KytvKWk9bltvXSxpLm1hcmtlci5jb2xsYXBzZWQmJihudWxsPT1pLmZyb218fGkuZnJvbTxlKSYmKG51bGw9PWkudG98fGkudG8+ZSkmJighcnx8ci53aWR0aDxpLm1hcmtlci53aWR0aCkmJihyPWkubWFya2VyKTtyZXR1cm4gcn1mdW5jdGlvbiBScih0KXtyZXR1cm4gUHIodCwtMSl9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIFByKHQsdC50ZXh0Lmxlbmd0aCsxKX1mdW5jdGlvbiBHcih0LGUpe2Zvcih2YXIgcjtyPVJyKGUpOyllPWduKHQsci5maW5kKCkuZnJvbS5saW5lKTtyZXR1cm4gZX1mdW5jdGlvbiBWcih0LGUpe3ZhciByPVFpJiZlLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuLGk9MDtpPHIubGVuZ3RoOysraSlpZihuPXJbaV0sbi5tYXJrZXIuY29sbGFwc2VkKXtpZihudWxsPT1uLmZyb20pcmV0dXJuITA7aWYoIW4ubWFya2VyLnJlcGxhY2VkV2l0aCYmMD09bi5mcm9tJiZuLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZLcih0LGUsbikpcmV0dXJuITB9fWZ1bmN0aW9uIEtyKHQsZSxyKXtpZihudWxsPT1yLnRvKXt2YXIgbj1yLm1hcmtlci5maW5kKCkudG8saT1nbih0LG4ubGluZSk7cmV0dXJuIEtyKHQsaSxOcihpLm1hcmtlZFNwYW5zLHIubWFya2VyKSl9aWYoci5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJnIudG89PWUudGV4dC5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBvLGw9MDtsPGUubWFya2VkU3BhbnMubGVuZ3RoOysrbClpZihvPWUubWFya2VkU3BhbnNbbF0sby5tYXJrZXIuY29sbGFwc2VkJiYhby5tYXJrZXIucmVwbGFjZWRXaXRoJiZvLmZyb209PXIudG8mJihvLm1hcmtlci5pbmNsdXNpdmVMZWZ0fHxyLm1hcmtlci5pbmNsdXNpdmVSaWdodCkmJktyKHQsZSxvKSlyZXR1cm4hMH1mdW5jdGlvbiBVcih0KXt2YXIgZT10Lm1hcmtlZFNwYW5zO2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmRldGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1udWxsfX1mdW5jdGlvbiBYcih0LGUpe2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmF0dGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1lfX1mdW5jdGlvbiBfcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT0hdGhpcy5jbS5jdXJPcDtlJiZpZSh0aGlzLmNtKTt0cnl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtlJiZvZSh0aGlzLmNtKX1yZXR1cm4gcn19ZnVuY3Rpb24gWXIodCl7cmV0dXJuIG51bGwhPXQuaGVpZ2h0P3QuaGVpZ2h0Oih0Lm5vZGUucGFyZW50Tm9kZSYmMT09dC5ub2RlLnBhcmVudE5vZGUubm9kZVR5cGV8fHVpKHQuY20uZGlzcGxheS5tZWFzdXJlLHNpKCJkaXYiLFt0Lm5vZGVdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpKSx0LmhlaWdodD10Lm5vZGUub2Zmc2V0SGVpZ2h0KX1mdW5jdGlvbiBqcih0LGUscixuKXt2YXIgaT1uZXcgeW8odCxyLG4pO3JldHVybiBpLm5vSFNjcm9sbCYmKHQuZGlzcGxheS5hbGlnbldpZGdldHM9ITApLGRyKHQsZSxmdW5jdGlvbihlKXt2YXIgcj1lLndpZGdldHN8fChlLndpZGdldHM9W10pO2lmKG51bGw9PWkuaW5zZXJ0QXQ/ci5wdXNoKGkpOnIuc3BsaWNlKE1hdGgubWluKHIubGVuZ3RoLTEsTWF0aC5tYXgoMCxpLmluc2VydEF0KSksMCxpKSxpLmxpbmU9ZSwhVnIodC5kb2MsZSl8fGkuc2hvd0lmSGlkZGVuKXt2YXIgbj1Dbih0LGUpPHQuZG9jLnNjcm9sbFRvcDt5bihlLGUuaGVpZ2h0K1lyKGkpKSxuJiZmcih0LDAsaS5oZWlnaHQpfXJldHVybiEwfSksaX1mdW5jdGlvbiAkcih0LGUscixuKXt0LnRleHQ9ZSx0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKSxudWxsIT10Lm9yZGVyJiYodC5vcmRlcj1udWxsKSxVcih0KSxYcih0LHIpO3ZhciBpPW4/bih0KToxO2khPXQuaGVpZ2h0JiZ5bih0LGkpfWZ1bmN0aW9uIFpyKHQpe3QucGFyZW50PW51bGwsVXIodCl9ZnVuY3Rpb24gcXIodCxlLHIsbixpLG8pe3ZhciBsPXIuZmxhdHRlblNwYW5zO251bGw9PWwmJihsPXQub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciBzLGE9MCx1PW51bGwsYz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKCIiPT1lJiZyLmJsYW5rTGluZSYmci5ibGFua0xpbmUobik7IWMuZW9sKCk7KWMucG9zPnQub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGg/KGw9ITEsbyYmdG4odCxlLG4sYy5wb3MpLGMucG9zPWUubGVuZ3RoLHM9bnVsbCk6cz1yLnRva2VuKGMsbiksbCYmdT09c3x8KGE8Yy5zdGFydCYmaShjLnN0YXJ0LHUpLGE9Yy5zdGFydCx1PXMpLGMuc3RhcnQ9Yy5wb3M7Zm9yKDthPGMucG9zOyl7dmFyIGY9TWF0aC5taW4oYy5wb3MsYSs1ZTQpO2koZix1KSxhPWZ9fWZ1bmN0aW9uIFFyKHQsZSxyLG4pe3ZhciBpPVt0LnN0YXRlLm1vZGVHZW5dO3FyKHQsZS50ZXh0LHQuZG9jLm1vZGUscixmdW5jdGlvbih0LGUpe2kucHVzaCh0LGUpfSxuKTtmb3IodmFyIG89MDtvPHQuc3RhdGUub3ZlcmxheXMubGVuZ3RoOysrbyl7dmFyIGw9dC5zdGF0ZS5vdmVybGF5c1tvXSxzPTEsYT0wO3FyKHQsZS50ZXh0LGwubW9kZSwhMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1zO3Q+YTspe3ZhciBuPWlbc107bj50JiZpLnNwbGljZShzLDEsdCxpW3MrMV0sbikscys9MixhPU1hdGgubWluKHQsbil9aWYoZSlpZihsLm9wYXF1ZSlpLnNwbGljZShyLHMtcix0LGUpLHM9cisyO2Vsc2UgZm9yKDtzPnI7cis9Mil7dmFyIG89aVtyKzFdO2lbcisxXT1vP28rIiAiK2U6ZX19KX1yZXR1cm4gaX1mdW5jdGlvbiBKcih0LGUpe3JldHVybiBlLnN0eWxlcyYmZS5zdHlsZXNbMF09PXQuc3RhdGUubW9kZUdlbnx8KGUuc3R5bGVzPVFyKHQsZSxlLnN0YXRlQWZ0ZXI9eih0LGJuKGUpKSkpLGUuc3R5bGVzfWZ1bmN0aW9uIHRuKHQsZSxyLG4pe3ZhciBpPXQuZG9jLm1vZGUsbz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKG8uc3RhcnQ9by5wb3M9bnx8MCwiIj09ZSYmaS5ibGFua0xpbmUmJmkuYmxhbmtMaW5lKHIpOyFvLmVvbCgpJiZvLnBvczw9dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aDspaS50b2tlbihvLHIpLG8uc3RhcnQ9by5wb3N9ZnVuY3Rpb24gZW4odCxlKXtpZighdClyZXR1cm4gbnVsbDtmb3IoOzspe3ZhciByPXQubWF0Y2goLyg/Ol58XHMpbGluZS0oYmFja2dyb3VuZC0pPyhcUyspLyk7aWYoIXIpYnJlYWs7dD10LnNsaWNlKDAsci5pbmRleCkrdC5zbGljZShyLmluZGV4K3JbMF0ubGVuZ3RoKTt2YXIgbj1yWzFdPyJiZ0NsYXNzIjoidGV4dENsYXNzIjtudWxsPT1lW25dP2Vbbl09clsyXTpuZXcgUmVnRXhwKCIoPzpefHMpIityWzJdKyIoPzokfHMpIikudGVzdChlW25dKXx8KGVbbl0rPSIgIityWzJdKX1yZXR1cm4geG9bdF18fCh4b1t0XT0iY20tIit0LnJlcGxhY2UoLyArL2csIiBjbS0iKSl9ZnVuY3Rpb24gcm4odCxlLHIsbil7Zm9yKHZhciBpLG89ZSxsPSEwO2k9UnIobyk7KW89Z24odC5kb2MsaS5maW5kKCkuZnJvbS5saW5lKTt2YXIgcz17cHJlOnNpKCJwcmUiKSxjb2w6MCxwb3M6MCxtZWFzdXJlOm51bGwsbWVhc3VyZWRTb21ldGhpbmc6ITEsY206dCxjb3B5V2lkZ2V0czpufTtkb3tvLnRleHQmJihsPSExKSxzLm1lYXN1cmU9bz09ZSYmcixzLnBvcz0wLHMuYWRkVG9rZW49cy5tZWFzdXJlP2xuOm9uLChBaXx8V2kpJiZ0LmdldE9wdGlvbigibGluZVdyYXBwaW5nIikmJihzLmFkZFRva2VuPXNuKHMuYWRkVG9rZW4pKTt2YXIgYT11bihvLHMsSnIodCxvKSk7ciYmbz09ZSYmIXMubWVhc3VyZWRTb21ldGhpbmcmJihyWzBdPXMucHJlLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSkscy5tZWFzdXJlZFNvbWV0aGluZz0hMCksYSYmKG89Z24odC5kb2MsYS50by5saW5lKSl9d2hpbGUoYSk7IXJ8fHMubWVhc3VyZWRTb21ldGhpbmd8fHJbMF18fChyWzBdPXMucHJlLmFwcGVuZENoaWxkKGw/c2koInNwYW4iLCLCoCIpOnBpKHQuZGlzcGxheS5tZWFzdXJlKSkpLHMucHJlLmZpcnN0Q2hpbGR8fFZyKHQuZG9jLGUpfHxzLnByZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiwqAiKSk7dmFyIHU7aWYociYmKEFpfHxEaSkmJih1PXduKG8pKSl7dmFyIGM9dS5sZW5ndGgtMTt1W2NdLmZyb209PXVbY10udG8mJi0tYzt2YXIgZj11W2NdLGg9dVtjLTFdO2lmKGYuZnJvbSsxPT1mLnRvJiZoJiZmLmxldmVsPGgubGV2ZWwpe3ZhciBkPXJbcy5wb3MtMV07ZCYmZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkLm1lYXN1cmVSaWdodD1waSh0LmRpc3BsYXkubWVhc3VyZSksZC5uZXh0U2libGluZyl9fXZhciBwPXMudGV4dENsYXNzP3MudGV4dENsYXNzKyIgIisoZS50ZXh0Q2xhc3N8fCIiKTplLnRleHRDbGFzcztyZXR1cm4gcCYmKHMucHJlLmNsYXNzTmFtZT1wKSxLbih0LCJyZW5kZXJMaW5lIix0LGUscy5wcmUpLHN9ZnVuY3Rpb24gbm4odCl7dmFyIGU9c2koInNwYW4iLCLigKIiLCJjbS1pbnZhbGlkY2hhciIpO3JldHVybiBlLnRpdGxlPSJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNiksZX1mdW5jdGlvbiBvbih0LGUscixuLGksbyl7aWYoZSl7dmFyIGw9dC5jbS5vcHRpb25zLnNwZWNpYWxDaGFycztpZihsLnRlc3QoZSkpZm9yKHZhciBzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxhPTA7Oyl7bC5sYXN0SW5kZXg9YTt2YXIgdT1sLmV4ZWMoZSksYz11P3UuaW5kZXgtYTplLmxlbmd0aC1hO2lmKGMmJihzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuc2xpY2UoYSxhK2MpKSksdC5jb2wrPWMpLCF1KWJyZWFrO2lmKGErPWMrMSwiCSI9PXVbMF0pe3ZhciBmPXQuY20ub3B0aW9ucy50YWJTaXplLGg9Zi10LmNvbCVmO3MuYXBwZW5kQ2hpbGQoc2koInNwYW4iLHFuKGgpLCJjbS10YWIiKSksdC5jb2wrPWh9ZWxzZXt2YXIgZD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcih1WzBdKTtzLmFwcGVuZENoaWxkKGQpLHQuY29sKz0xfX1lbHNle3QuY29sKz1lLmxlbmd0aDt2YXIgcz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX1pZihyfHxufHxpfHx0Lm1lYXN1cmUpe3ZhciBwPXJ8fCIiO24mJihwKz1uKSxpJiYocCs9aSk7dmFyIGQ9c2koInNwYW4iLFtzXSxwKTtyZXR1cm4gbyYmKGQudGl0bGU9byksdC5wcmUuYXBwZW5kQ2hpbGQoZCl9dC5wcmUuYXBwZW5kQ2hpbGQocyl9fWZ1bmN0aW9uIGxuKHQsZSxyLG4saSl7Zm9yKHZhciBvPXQuY20ub3B0aW9ucy5saW5lV3JhcHBpbmcsbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgcz1lLmNoYXJBdChsKSxhPTA9PWw7cz49Iu2ggCImJiLtr78iPnMmJmw8ZS5sZW5ndGgtMT8ocz1lLnNsaWNlKGwsbCsyKSwrK2wpOmwmJm8mJmhpKGUsbCkmJnQucHJlLmFwcGVuZENoaWxkKHNpKCJ3YnIiKSk7dmFyIHU9dC5tZWFzdXJlW3QucG9zXSxjPXQubWVhc3VyZVt0LnBvc109b24odCxzLHIsYSYmbixsPT1lLmxlbmd0aC0xJiZpKTt1JiYoYy5sZWZ0U2lkZT11LmxlZnRTaWRlfHx1KSxBaSYmbyYmIiAiPT1zJiZsJiYhL1xzLy50ZXN0KGUuY2hhckF0KGwtMSkpJiZsPGUubGVuZ3RoLTEmJiEvXHMvLnRlc3QoZS5jaGFyQXQobCsxKSkmJihjLnN0eWxlLndoaXRlU3BhY2U9Im5vcm1hbCIpLHQucG9zKz1zLmxlbmd0aH1lLmxlbmd0aCYmKHQubWVhc3VyZWRTb21ldGhpbmc9ITApfWZ1bmN0aW9uIHNuKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlPSIgIixyPTA7cjx0Lmxlbmd0aC0yOysrcillKz1yJTI/IiAiOiLCoCI7cmV0dXJuIGUrPSIgIn1yZXR1cm4gZnVuY3Rpb24ocixuLGksbyxsLHMpe3JldHVybiB0KHIsbi5yZXBsYWNlKC8gezMsfS9nLGUpLGksbyxsLHMpfX1mdW5jdGlvbiBhbih0LGUscixuKXt2YXIgaT0hbiYmci5yZXBsYWNlZFdpdGg7aWYoaSYmKHQuY29weVdpZGdldHMmJihpPWkuY2xvbmVOb2RlKCEwKSksdC5wcmUuYXBwZW5kQ2hpbGQoaSksdC5tZWFzdXJlKSl7aWYoZSl0Lm1lYXN1cmVbdC5wb3NdPWk7ZWxzZXt2YXIgbz1waSh0LmNtLmRpc3BsYXkubWVhc3VyZSk7aWYoImJvb2ttYXJrIiE9ci50eXBlfHxyLmluc2VydExlZnQpe2lmKHQubWVhc3VyZVt0LnBvc10pcmV0dXJuO3QubWVhc3VyZVt0LnBvc109dC5wcmUuaW5zZXJ0QmVmb3JlKG8saSl9ZWxzZSB0Lm1lYXN1cmVbdC5wb3NdPXQucHJlLmFwcGVuZENoaWxkKG8pfXQubWVhc3VyZWRTb21ldGhpbmc9ITB9dC5wb3MrPWV9ZnVuY3Rpb24gdW4odCxlLHIpe3ZhciBuPXQubWFya2VkU3BhbnMsaT10LnRleHQsbz0wO2lmKG4pZm9yKHZhciBsLHMsYSx1LGMsZixoPWkubGVuZ3RoLGQ9MCxwPTEsZz0iIixtPTA7Oyl7aWYobT09ZCl7cz1hPXU9Yz0iIixmPW51bGwsbT0xLzA7Zm9yKHZhciB2PVtdLHk9MDt5PG4ubGVuZ3RoOysreSl7dmFyIGI9blt5XSx4PWIubWFya2VyO2IuZnJvbTw9ZCYmKG51bGw9PWIudG98fGIudG8+ZCk/KG51bGwhPWIudG8mJm0+Yi50byYmKG09Yi50byxhPSIiKSx4LmNsYXNzTmFtZSYmKHMrPSIgIit4LmNsYXNzTmFtZSkseC5zdGFydFN0eWxlJiZiLmZyb209PWQmJih1Kz0iICIreC5zdGFydFN0eWxlKSx4LmVuZFN0eWxlJiZiLnRvPT1tJiYoYSs9IiAiK3guZW5kU3R5bGUpLHgudGl0bGUmJiFjJiYoYz14LnRpdGxlKSx4LmNvbGxhcHNlZCYmKCFmfHxmLm1hcmtlci5zaXplPHguc2l6ZSkmJihmPWIpKTpiLmZyb20+ZCYmbT5iLmZyb20mJihtPWIuZnJvbSksImJvb2ttYXJrIj09eC50eXBlJiZiLmZyb209PWQmJngucmVwbGFjZWRXaXRoJiZ2LnB1c2goeCkKfWlmKGYmJihmLmZyb218fDApPT1kJiYoYW4oZSwobnVsbD09Zi50bz9oOmYudG8pLWQsZi5tYXJrZXIsbnVsbD09Zi5mcm9tKSxudWxsPT1mLnRvKSlyZXR1cm4gZi5tYXJrZXIuZmluZCgpO2lmKCFmJiZ2Lmxlbmd0aClmb3IodmFyIHk9MDt5PHYubGVuZ3RoOysreSlhbihlLDAsdlt5XSl9aWYoZD49aClicmVhaztmb3IodmFyIEM9TWF0aC5taW4oaCxtKTs7KXtpZihnKXt2YXIgdz1kK2cubGVuZ3RoO2lmKCFmKXt2YXIgTD13PkM/Zy5zbGljZSgwLEMtZCk6ZztlLmFkZFRva2VuKGUsTCxsP2wrczpzLHUsZCtMLmxlbmd0aD09bT9hOiIiLGMpfWlmKHc+PUMpe2c9Zy5zbGljZShDLWQpLGQ9QzticmVha31kPXcsdT0iIn1nPWkuc2xpY2UobyxvPXJbcCsrXSksbD1lbihyW3ArK10sZSl9fWVsc2UgZm9yKHZhciBwPTE7cDxyLmxlbmd0aDtwKz0yKWUuYWRkVG9rZW4oZSxpLnNsaWNlKG8sbz1yW3BdKSxlbihyW3ArMV0sZSkpfWZ1bmN0aW9uIGNuKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gcj9yW3RdOm51bGx9ZnVuY3Rpb24gbCh0LHIsbil7JHIodCxyLG4saSksVW4odCwiY2hhbmdlIix0LGUpfXZhciBzPWUuZnJvbSxhPWUudG8sdT1lLnRleHQsYz1nbih0LHMubGluZSksZj1nbih0LGEubGluZSksaD1Rbih1KSxkPW8odS5sZW5ndGgtMSkscD1hLmxpbmUtcy5saW5lO2lmKDAhPXMuY2h8fDAhPWEuY2h8fCIiIT1ofHx0LmNtJiYhdC5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSlpZihjPT1mKWlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKStoK2MudGV4dC5zbGljZShhLmNoKSxkKTtlbHNle2Zvcih2YXIgZz1bXSxtPTEsdj11Lmxlbmd0aC0xO3Y+bTsrK20pZy5wdXNoKG5ldyBibyh1W21dLG8obSksaSkpO2cucHVzaChuZXcgYm8oaCtjLnRleHQuc2xpY2UoYS5jaCksZCxpKSksbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK3VbMF0sbygwKSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZSBpZigxPT11Lmxlbmd0aClsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXStmLnRleHQuc2xpY2UoYS5jaCksbygwKSksdC5yZW1vdmUocy5saW5lKzEscCk7ZWxzZXtsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSxsKGYsaCtmLnRleHQuc2xpY2UoYS5jaCksZCk7Zm9yKHZhciBtPTEsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7cD4xJiZ0LnJlbW92ZShzLmxpbmUrMSxwLTEpLHQuaW5zZXJ0KHMubGluZSsxLGcpfWVsc2V7Zm9yKHZhciBtPTAsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7bChmLGYudGV4dCxkKSxwJiZ0LnJlbW92ZShzLmxpbmUscCksZy5sZW5ndGgmJnQuaW5zZXJ0KHMubGluZSxnKX1Vbih0LCJjaGFuZ2UiLHQsZSksbnIodCxuLmFuY2hvcixuLmhlYWQsbnVsbCwhMCl9ZnVuY3Rpb24gZm4odCl7dGhpcy5saW5lcz10LHRoaXMucGFyZW50PW51bGw7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPTA7cj5lOysrZSl0W2VdLnBhcmVudD10aGlzLG4rPXRbZV0uaGVpZ2h0O3RoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gaG4odCl7dGhpcy5jaGlsZHJlbj10O2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10Lmxlbmd0aDtpPm47KytuKXt2YXIgbz10W25dO2UrPW8uY2h1bmtTaXplKCkscis9by5oZWlnaHQsby5wYXJlbnQ9dGhpc310aGlzLnNpemU9ZSx0aGlzLmhlaWdodD1yLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24gZG4odCxlLHIpe2Z1bmN0aW9uIG4odCxpLG8pe2lmKHQubGlua2VkKWZvcih2YXIgbD0wO2w8dC5saW5rZWQubGVuZ3RoOysrbCl7dmFyIHM9dC5saW5rZWRbbF07aWYocy5kb2MhPWkpe3ZhciBhPW8mJnMuc2hhcmVkSGlzdDsoIXJ8fGEpJiYoZShzLmRvYyxhKSxuKHMuZG9jLHQsYSkpfX19bih0LG51bGwsITApfWZ1bmN0aW9uIHBuKHQsZSl7aWYoZS5jbSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuIik7dC5kb2M9ZSxlLmNtPXQsbyh0KSxyKHQpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fGYodCksdC5vcHRpb25zLm1vZGU9ZS5tb2RlT3B0aW9uLHVlKHQpfWZ1bmN0aW9uIGduKHQsZSl7Zm9yKGUtPXQuZmlyc3Q7IXQubGluZXM7KWZvcih2YXIgcj0wOzsrK3Ipe3ZhciBuPXQuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+ZSl7dD1uO2JyZWFrfWUtPWl9cmV0dXJuIHQubGluZXNbZV19ZnVuY3Rpb24gbW4odCxlLHIpe3ZhciBuPVtdLGk9ZS5saW5lO3JldHVybiB0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe3ZhciBvPXQudGV4dDtpPT1yLmxpbmUmJihvPW8uc2xpY2UoMCxyLmNoKSksaT09ZS5saW5lJiYobz1vLnNsaWNlKGUuY2gpKSxuLnB1c2gobyksKytpfSksbn1mdW5jdGlvbiB2bih0LGUscil7dmFyIG49W107cmV0dXJuIHQuaXRlcihlLHIsZnVuY3Rpb24odCl7bi5wdXNoKHQudGV4dCl9KSxufWZ1bmN0aW9uIHluKHQsZSl7Zm9yKHZhciByPWUtdC5oZWlnaHQsbj10O247bj1uLnBhcmVudCluLmhlaWdodCs9cn1mdW5jdGlvbiBibih0KXtpZihudWxsPT10LnBhcmVudClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQscj10aShlLmxpbmVzLHQpLG49ZS5wYXJlbnQ7bjtlPW4sbj1uLnBhcmVudClmb3IodmFyIGk9MDtuLmNoaWxkcmVuW2ldIT1lOysraSlyKz1uLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpO3JldHVybiByK2UuZmlyc3R9ZnVuY3Rpb24geG4odCxlKXt2YXIgcj10LmZpcnN0O3Q6ZG97Zm9yKHZhciBuPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10LmNoaWxkcmVuW25dLGw9by5oZWlnaHQ7aWYobD5lKXt0PW87Y29udGludWUgdH1lLT1sLHIrPW8uY2h1bmtTaXplKCl9cmV0dXJuIHJ9d2hpbGUoIXQubGluZXMpO2Zvcih2YXIgbj0wLGk9dC5saW5lcy5sZW5ndGg7aT5uOysrbil7dmFyIHM9dC5saW5lc1tuXSxhPXMuaGVpZ2h0O2lmKGE+ZSlicmVhaztlLT1hfXJldHVybiByK259ZnVuY3Rpb24gQ24odCxlKXtlPUdyKHQuZG9jLGUpO2Zvcih2YXIgcj0wLG49ZS5wYXJlbnQsaT0wO2k8bi5saW5lcy5sZW5ndGg7KytpKXt2YXIgbz1uLmxpbmVzW2ldO2lmKG89PWUpYnJlYWs7cis9by5oZWlnaHR9Zm9yKHZhciBsPW4ucGFyZW50O2w7bj1sLGw9bi5wYXJlbnQpZm9yKHZhciBpPTA7aTxsLmNoaWxkcmVuLmxlbmd0aDsrK2kpe3ZhciBzPWwuY2hpbGRyZW5baV07aWYocz09bilicmVhaztyKz1zLmhlaWdodH1yZXR1cm4gcn1mdW5jdGlvbiB3bih0KXt2YXIgZT10Lm9yZGVyO3JldHVybiBudWxsPT1lJiYoZT10Lm9yZGVyPUJvKHQudGV4dCkpLGV9ZnVuY3Rpb24gTG4odCl7cmV0dXJue2RvbmU6W10sdW5kb25lOltdLHVuZG9EZXB0aDoxLzAsbGFzdFRpbWU6MCxsYXN0T3A6bnVsbCxsYXN0T3JpZ2luOm51bGwsZ2VuZXJhdGlvbjp0fHwxLG1heEdlbmVyYXRpb246dHx8MX19ZnVuY3Rpb24ga24odCxlLHIsbil7dmFyIGk9ZVsic3BhbnNfIit0LmlkXSxvPTA7dC5pdGVyKE1hdGgubWF4KHQuZmlyc3QsciksTWF0aC5taW4odC5maXJzdCt0LnNpemUsbiksZnVuY3Rpb24ocil7ci5tYXJrZWRTcGFucyYmKChpfHwoaT1lWyJzcGFuc18iK3QuaWRdPXt9KSlbb109ci5tYXJrZWRTcGFucyksKytvfSl9ZnVuY3Rpb24gU24odCxlKXt2YXIgcj17bGluZTplLmZyb20ubGluZSxjaDplLmZyb20uY2h9LG49e2Zyb206cix0bzpsbyhlKSx0ZXh0Om1uKHQsZS5mcm9tLGUudG8pfTtyZXR1cm4ga24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKSxkbih0LGZ1bmN0aW9uKHQpe2tuKHQsbixlLmZyb20ubGluZSxlLnRvLmxpbmUrMSl9LCEwKSxufWZ1bmN0aW9uIE1uKHQsZSxyLG4pe3ZhciBpPXQuaGlzdG9yeTtpLnVuZG9uZS5sZW5ndGg9MDt2YXIgbz0rbmV3IERhdGUsbD1RbihpLmRvbmUpO2lmKGwmJihpLmxhc3RPcD09bnx8aS5sYXN0T3JpZ2luPT1lLm9yaWdpbiYmZS5vcmlnaW4mJigiKyI9PWUub3JpZ2luLmNoYXJBdCgwKSYmdC5jbSYmaS5sYXN0VGltZT5vLXQuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheXx8IioiPT1lLm9yaWdpbi5jaGFyQXQoMCkpKSl7dmFyIHM9UW4obC5jaGFuZ2VzKTtqZShlLmZyb20sZS50bykmJmplKGUuZnJvbSxzLnRvKT9zLnRvPWxvKGUpOmwuY2hhbmdlcy5wdXNoKFNuKHQsZSkpLGwuYW5jaG9yQWZ0ZXI9ci5hbmNob3IsbC5oZWFkQWZ0ZXI9ci5oZWFkfWVsc2UgZm9yKGw9e2NoYW5nZXM6W1NuKHQsZSldLGdlbmVyYXRpb246aS5nZW5lcmF0aW9uLGFuY2hvckJlZm9yZTp0LnNlbC5hbmNob3IsaGVhZEJlZm9yZTp0LnNlbC5oZWFkLGFuY2hvckFmdGVyOnIuYW5jaG9yLGhlYWRBZnRlcjpyLmhlYWR9LGkuZG9uZS5wdXNoKGwpLGkuZ2VuZXJhdGlvbj0rK2kubWF4R2VuZXJhdGlvbjtpLmRvbmUubGVuZ3RoPmkudW5kb0RlcHRoOylpLmRvbmUuc2hpZnQoKTtpLmxhc3RUaW1lPW8saS5sYXN0T3A9bixpLmxhc3RPcmlnaW49ZS5vcmlnaW59ZnVuY3Rpb24gVG4odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlLHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLm1hcmtlci5leHBsaWNpdGx5Q2xlYXJlZD9lfHwoZT10LnNsaWNlKDAscikpOmUmJmUucHVzaCh0W3JdKTtyZXR1cm4gZT9lLmxlbmd0aD9lOm51bGw6dH1mdW5jdGlvbiBBbih0LGUpe3ZhciByPWVbInNwYW5zXyIrdC5pZF07aWYoIXIpcmV0dXJuIG51bGw7Zm9yKHZhciBuPTAsaT1bXTtuPGUudGV4dC5sZW5ndGg7KytuKWkucHVzaChUbihyW25dKSk7cmV0dXJuIGl9ZnVuY3Rpb24gSG4odCxlKXtmb3IodmFyIHI9MCxuPVtdO3I8dC5sZW5ndGg7KytyKXt2YXIgaT10W3JdLG89aS5jaGFuZ2VzLGw9W107bi5wdXNoKHtjaGFuZ2VzOmwsYW5jaG9yQmVmb3JlOmkuYW5jaG9yQmVmb3JlLGhlYWRCZWZvcmU6aS5oZWFkQmVmb3JlLGFuY2hvckFmdGVyOmkuYW5jaG9yQWZ0ZXIsaGVhZEFmdGVyOmkuaGVhZEFmdGVyfSk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDsrK3Mpe3ZhciBhLHU9b1tzXTtpZihsLnB1c2goe2Zyb206dS5mcm9tLHRvOnUudG8sdGV4dDp1LnRleHR9KSxlKWZvcih2YXIgYyBpbiB1KShhPWMubWF0Y2goL15zcGFuc18oXGQrKSQvKSkmJnRpKGUsTnVtYmVyKGFbMV0pKT4tMSYmKFFuKGwpW2NdPXVbY10sZGVsZXRlIHVbY10pfX1yZXR1cm4gbn1mdW5jdGlvbiBObih0LGUscixuKXtyPHQubGluZT90LmxpbmUrPW46ZTx0LmxpbmUmJih0LmxpbmU9ZSx0LmNoPTApfWZ1bmN0aW9uIERuKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXtmb3IodmFyIG89dFtpXSxsPSEwLHM9MDtzPG8uY2hhbmdlcy5sZW5ndGg7KytzKXt2YXIgYT1vLmNoYW5nZXNbc107aWYoby5jb3BpZWR8fChhLmZyb209WmUoYS5mcm9tKSxhLnRvPVplKGEudG8pKSxyPGEuZnJvbS5saW5lKWEuZnJvbS5saW5lKz1uLGEudG8ubGluZSs9bjtlbHNlIGlmKGU8PWEudG8ubGluZSl7bD0hMTticmVha319by5jb3BpZWR8fChvLmFuY2hvckJlZm9yZT1aZShvLmFuY2hvckJlZm9yZSksby5oZWFkQmVmb3JlPVplKG8uaGVhZEJlZm9yZSksby5hbmNob3JBZnRlcj1aZShvLmFuY2hvckFmdGVyKSxvLnJlYWRBZnRlcj1aZShvLmhlYWRBZnRlciksby5jb3BpZWQ9ITApLGw/KE5uKG8uYW5jaG9yQmVmb3JlKSxObihvLmhlYWRCZWZvcmUpLE5uKG8uYW5jaG9yQWZ0ZXIpLE5uKG8uaGVhZEFmdGVyKSk6KHQuc3BsaWNlKDAsaSsxKSxpPTApfX1mdW5jdGlvbiBXbih0LGUpe3ZhciByPWUuZnJvbS5saW5lLG49ZS50by5saW5lLGk9ZS50ZXh0Lmxlbmd0aC0obi1yKS0xO0RuKHQuZG9uZSxyLG4saSksRG4odC51bmRvbmUscixuLGkpfWZ1bmN0aW9uIE9uKCl7UG4odGhpcyl9ZnVuY3Rpb24gRW4odCl7cmV0dXJuIHQuc3RvcHx8KHQuc3RvcD1PbiksdH1mdW5jdGlvbiB6bih0KXt0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIEluKHQpe3Quc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gRm4odCl7cmV0dXJuIG51bGwhPXQuZGVmYXVsdFByZXZlbnRlZD90LmRlZmF1bHRQcmV2ZW50ZWQ6MD09dC5yZXR1cm5WYWx1ZX1mdW5jdGlvbiBQbih0KXt6bih0KSxJbih0KX1mdW5jdGlvbiBSbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudH1mdW5jdGlvbiBCbih0KXt2YXIgZT10LndoaWNoO3JldHVybiBudWxsPT1lJiYoMSZ0LmJ1dHRvbj9lPTE6MiZ0LmJ1dHRvbj9lPTM6NCZ0LmJ1dHRvbiYmKGU9MikpLEtpJiZ0LmN0cmxLZXkmJjE9PWUmJihlPTMpLGV9ZnVuY3Rpb24gR24odCxlLHIpe2lmKHQuYWRkRXZlbnRMaXN0ZW5lcil0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuYXR0YWNoRXZlbnQpdC5hdHRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVyc3x8KHQuX2hhbmRsZXJzPXt9KSxpPW5bZV18fChuW2VdPVtdKTtpLnB1c2gocil9fWZ1bmN0aW9uIFZuKHQsZSxyKXtpZih0LnJlbW92ZUV2ZW50TGlzdGVuZXIpdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMSk7ZWxzZSBpZih0LmRldGFjaEV2ZW50KXQuZGV0YWNoRXZlbnQoIm9uIitlLHIpO2Vsc2V7dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKCFuKXJldHVybjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoOysraSlpZihuW2ldPT1yKXtuLnNwbGljZShpLDEpO2JyZWFrfX19ZnVuY3Rpb24gS24odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYocilmb3IodmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLGk9MDtpPHIubGVuZ3RoOysraSlyW2ldLmFwcGx5KG51bGwsbil9ZnVuY3Rpb24gVW4odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxpKX19dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKG4pe3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtTb3x8KCsrTW8sU289W10sc2V0VGltZW91dChfbiwwKSk7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDsrK28pU28ucHVzaChyKG5bb10pKX19ZnVuY3Rpb24gWG4odCxlLHIpe3JldHVybiBLbih0LHJ8fGUudHlwZSx0LGUpLEZuKGUpfHxlLmNvZGVtaXJyb3JJZ25vcmV9ZnVuY3Rpb24gX24oKXstLU1vO3ZhciB0PVNvO1NvPW51bGw7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2UpdFtlXSgpfWZ1bmN0aW9uIFluKHQsZSl7dmFyIHI9dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO3JldHVybiByJiZyLmxlbmd0aD4wfWZ1bmN0aW9uIGpuKHQpe3QucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7R24odGhpcyx0LGUpfSx0LnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXtWbih0aGlzLHQsZSl9fWZ1bmN0aW9uICRuKCl7dGhpcy5pZD1udWxsfWZ1bmN0aW9uIFpuKHQsZSxyLG4saSl7bnVsbD09ZSYmKGU9dC5zZWFyY2goL1teXHNcdTAwYTBdLyksLTE9PWUmJihlPXQubGVuZ3RoKSk7Zm9yKHZhciBvPW58fDAsbD1pfHwwO2U+bzsrK28pIgkiPT10LmNoYXJBdChvKT9sKz1yLWwlcjorK2w7cmV0dXJuIGx9ZnVuY3Rpb24gcW4odCl7Zm9yKDtIby5sZW5ndGg8PXQ7KUhvLnB1c2goUW4oSG8pKyIgIik7cmV0dXJuIEhvW3RdfWZ1bmN0aW9uIFFuKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfWZ1bmN0aW9uIEpuKHQpe2lmKEdpKXQuc2VsZWN0aW9uU3RhcnQ9MCx0LnNlbGVjdGlvbkVuZD10LnZhbHVlLmxlbmd0aDtlbHNlIHRyeXt0LnNlbGVjdCgpfWNhdGNoKGUpe319ZnVuY3Rpb24gdGkodCxlKXtpZih0LmluZGV4T2YpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO24+cjsrK3IpaWYodFtyXT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBlaSh0LGUpe2Z1bmN0aW9uIHIoKXt9ci5wcm90b3R5cGU9dDt2YXIgbj1uZXcgcjtyZXR1cm4gZSYmcmkoZSxuKSxufWZ1bmN0aW9uIHJpKHQsZSl7ZXx8KGU9e30pO2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT1bXSxyPTA7dD5yOysrcillLnB1c2godm9pZCAwKTtyZXR1cm4gZX1mdW5jdGlvbiBpaSh0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gb2kodCl7cmV0dXJuL1x3Ly50ZXN0KHQpfHx0PiLCgCImJih0LnRvVXBwZXJDYXNlKCkhPXQudG9Mb3dlckNhc2UoKXx8Tm8udGVzdCh0KSl9ZnVuY3Rpb24gbGkodCl7Zm9yKHZhciBlIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzaSh0LGUscixuKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO2lmKHImJihpLmNsYXNzTmFtZT1yKSxuJiYoaS5zdHlsZS5jc3NUZXh0PW4pLCJzdHJpbmciPT10eXBlb2YgZSljaShpLGUpO2Vsc2UgaWYoZSlmb3IodmFyIG89MDtvPGUubGVuZ3RoOysrbylpLmFwcGVuZENoaWxkKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGFpKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMubGVuZ3RoO2U+MDstLWUpdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3JldHVybiB0fWZ1bmN0aW9uIHVpKHQsZSl7cmV0dXJuIGFpKHQpLmFwcGVuZENoaWxkKGUpfWZ1bmN0aW9uIGNpKHQsZSl7Tmk/KHQuaW5uZXJIVE1MPSIiLHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpKTp0LnRleHRDb250ZW50PWV9ZnVuY3Rpb24gZmkodCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4hMX1mdW5jdGlvbiBkaSh0KXtpZihudWxsIT1PbylyZXR1cm4gT287dmFyIGU9c2koImRpdiIsbnVsbCxudWxsLCJ3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxvdy14OiBzY3JvbGwiKTtyZXR1cm4gdWkodCxlKSxlLm9mZnNldFdpZHRoJiYoT289ZS5vZmZzZXRIZWlnaHQtZS5jbGllbnRIZWlnaHQpLE9vfHwwfWZ1bmN0aW9uIHBpKHQpe2lmKG51bGw9PUVvKXt2YXIgZT1zaSgic3BhbiIsIuKAiyIpO3VpKHQsc2koInNwYW4iLFtlLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IildKSksMCE9dC5maXJzdENoaWxkLm9mZnNldEhlaWdodCYmKEVvPWUub2Zmc2V0V2lkdGg8PTEmJmUub2Zmc2V0SGVpZ2h0PjImJiFIaSl9cmV0dXJuIEVvP3NpKCJzcGFuIiwi4oCLIik6c2koInNwYW4iLCLCoCIsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgiKX1mdW5jdGlvbiBnaSh0LGUscixuKXtpZighdClyZXR1cm4gbihlLHIsImx0ciIpO2Zvcih2YXIgaT0hMSxvPTA7bzx0Lmxlbmd0aDsrK28pe3ZhciBsPXRbb107KGwuZnJvbTxyJiZsLnRvPmV8fGU9PXImJmwudG89PWUpJiYobihNYXRoLm1heChsLmZyb20sZSksTWF0aC5taW4obC50byxyKSwxPT1sLmxldmVsPyJydGwiOiJsdHIiKSxpPSEwKX1pfHxuKGUsciwibHRyIil9ZnVuY3Rpb24gbWkodCl7cmV0dXJuIHQubGV2ZWwlMj90LnRvOnQuZnJvbX1mdW5jdGlvbiB2aSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QuZnJvbTp0LnRvfWZ1bmN0aW9uIHlpKHQpe3ZhciBlPXduKHQpO3JldHVybiBlP21pKGVbMF0pOjB9ZnVuY3Rpb24gYmkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/dmkoUW4oZSkpOnQudGV4dC5sZW5ndGh9ZnVuY3Rpb24geGkodCxlKXt2YXIgcj1nbih0LmRvYyxlKSxuPUdyKHQuZG9jLHIpO24hPXImJihlPWJuKG4pKTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP2JpKG4pOnlpKG4pOjA7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gQ2kodCxlKXtmb3IodmFyIHIsbjtyPUJyKG49Z24odC5kb2MsZSkpOyllPXIuZmluZCgpLnRvLmxpbmU7dmFyIGk9d24obiksbz1pP2lbMF0ubGV2ZWwlMj95aShuKTpiaShuKTpuLnRleHQubGVuZ3RoO3JldHVybiBZZShlLG8pfWZ1bmN0aW9uIHdpKHQsZSxyKXt2YXIgbj10WzBdLmxldmVsO3JldHVybiBlPT1uPyEwOnI9PW4/ITE6cj5lfWZ1bmN0aW9uIExpKHQsZSl7Zm9yKHZhciByLG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXTtpZihpLmZyb208ZSYmaS50bz5lKXJldHVybiBSbz1udWxsLG47aWYoaS5mcm9tPT1lfHxpLnRvPT1lKXtpZihudWxsIT1yKXJldHVybiB3aSh0LGkubGV2ZWwsdFtyXS5sZXZlbCk/KFJvPXIsbik6KFJvPW4scik7cj1ufX1yZXR1cm4gUm89bnVsbCxyfWZ1bmN0aW9uIGtpKHQsZSxyLG4pe2lmKCFuKXJldHVybiBlK3I7ZG8gZSs9cjt3aGlsZShlPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChlKSkpO3JldHVybiBlfWZ1bmN0aW9uIFNpKHQsZSxyLG4pe3ZhciBpPXduKHQpO2lmKCFpKXJldHVybiBNaSh0LGUscixuKTtmb3IodmFyIG89TGkoaSxlKSxsPWlbb10scz1raSh0LGUsbC5sZXZlbCUyPy1yOnIsbik7Oyl7aWYocz5sLmZyb20mJnM8bC50bylyZXR1cm4gcztpZihzPT1sLmZyb218fHM9PWwudG8pcmV0dXJuIExpKGkscyk9PW8/czoobD1pW28rPXJdLHI+MD09bC5sZXZlbCUyP2wudG86bC5mcm9tKTtpZihsPWlbbys9cl0sIWwpcmV0dXJuIG51bGw7cz1yPjA9PWwubGV2ZWwlMj9raSh0LGwudG8sLTEsbik6a2kodCxsLmZyb20sMSxuKX19ZnVuY3Rpb24gTWkodCxlLHIsbil7dmFyIGk9ZStyO2lmKG4pZm9yKDtpPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChpKSk7KWkrPXI7cmV0dXJuIDA+aXx8aT50LnRleHQubGVuZ3RoP251bGw6aX12YXIgVGk9L2dlY2tvXC9cZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQWk9L01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSGk9QWkmJihudWxsPT1kb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw4KSxOaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDkpLERpPS9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFdpPS9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxPaT1XaSYmL1F0XC9cZCtcLlxkKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxFaT0vQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksemk9L09wZXJhXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSWk9L0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLEZpPS9LSFRNTFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFBpPS9NYWMgT1MgWCAxXGRcRChbNy05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFJpPS9NYWMgT1MgWCAxXGRcRChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEJpPS9QaGFudG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksR2k9L0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvTW9iaWxlXC9cdysvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksVmk9R2l8fC9BbmRyb2lkfHdlYk9TfEJsYWNrQmVycnl8T3BlcmEgTWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxLaT1HaXx8L01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFVpPS93aW4vaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksWGk9emkmJm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cLyhcZCpcLlxkKikvKTtYaSYmKFhpPU51bWJlcihYaVsxXSkpLFhpJiZYaT49MTUmJih6aT0hMSxXaT0hMCk7dmFyIF9pLFlpLGppLCRpPUtpJiYoT2l8fHppJiYobnVsbD09WGl8fDEyLjExPlhpKSksWmk9VGl8fEFpJiYhTmkscWk9ITEsUWk9ITEsSmk9MCx0bz0wLGVvPTAscm89bnVsbDtBaT9ybz0tLjUzOlRpP3JvPTE1OkVpP3JvPS0uNzpJaSYmKHJvPS0xLzMpO3ZhciBubyxpbyxvbz1udWxsLGxvPXQuY2hhbmdlRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQ/WWUodC5mcm9tLmxpbmUrdC50ZXh0Lmxlbmd0aC0xLFFuKHQudGV4dCkubGVuZ3RoKygxPT10LnRleHQubGVuZ3RoP3QuZnJvbS5jaDowKSk6dC50b307dC5Qb3M9WWUsdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsZm9jdXM6ZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKSxwZSh0aGlzKSxmZSh0aGlzKX0sc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHRpb25zLG49clt0XTsoclt0XSE9ZXx8Im1vZGUiPT10KSYmKHJbdF09ZSxzby5oYXNPd25Qcm9wZXJ0eSh0KSYmbGUodGhpcyxzb1t0XSkodGhpcyxlLG4pKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnNbdF19LGdldERvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY30sYWRkS2V5TWFwOmZ1bmN0aW9uKHQsZSl7dGhpcy5zdGF0ZS5rZXlNYXBzW2U/InB1c2giOiJ1bnNoaWZ0Il0odCl9LHJlbW92ZUtleU1hcDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdGF0ZS5rZXlNYXBzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT10fHwic3RyaW5nIiE9dHlwZW9mIGVbcl0mJmVbcl0ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSwhMH0sYWRkT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKGUscil7dmFyIG49ZS50b2tlbj9lOnQuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsZSk7aWYobi5zdGFydFN0YXRlKXRocm93IG5ldyBFcnJvcigiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKTt0aGlzLnN0YXRlLm92ZXJsYXlzLnB1c2goe21vZGU6bixtb2RlU3BlYzplLG9wYXF1ZTpyJiZyLm9wYXF1ZX0pLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpfSkscmVtb3ZlT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLm92ZXJsYXlzLHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG49ZVtyXS5tb2RlU3BlYztpZihuPT10fHwic3RyaW5nIj09dHlwZW9mIHQmJm4ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSx0aGlzLnN0YXRlLm1vZGVHZW4rKyx1ZSh0aGlzKSx2b2lkIDB9fSksaW5kZW50TGluZTpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXsic3RyaW5nIiE9dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZSYmKGU9bnVsbD09ZT90aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQ/InNtYXJ0IjoicHJldiI6ZT8iYWRkIjoic3VidHJhY3QiKSx0cih0aGlzLmRvYyx0KSYmaHIodGhpcyx0LGUscil9KSxpbmRlbnRTZWxlY3Rpb246bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRvYy5zZWw7aWYoamUoZS5mcm9tLGUudG8pKXJldHVybiBocih0aGlzLGUuZnJvbS5saW5lLHQpO2Zvcih2YXIgcj1lLnRvLmxpbmUtKGUudG8uY2g/MDoxKSxuPWUuZnJvbS5saW5lO3I+PW47KytuKWhyKHRoaXMsbix0KX0pLGdldFRva2VuQXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYzt0PVFlKHIsdCk7Zm9yKHZhciBuPXoodGhpcyx0LmxpbmUsZSksaT10aGlzLmRvYy5tb2RlLG89Z24ocix0LmxpbmUpLGw9bmV3IFNyKG8udGV4dCx0aGlzLm9wdGlvbnMudGFiU2l6ZSk7bC5wb3M8dC5jaCYmIWwuZW9sKCk7KXtsLnN0YXJ0PWwucG9zO3ZhciBzPWkudG9rZW4obCxuKX1yZXR1cm57c3RhcnQ6bC5zdGFydCxlbmQ6bC5wb3Msc3RyaW5nOmwuY3VycmVudCgpLGNsYXNzTmFtZTpzfHxudWxsLHR5cGU6c3x8bnVsbCxzdGF0ZTpufX0sZ2V0VG9rZW5UeXBlQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLmRvYyx0KTt2YXIgZT1Kcih0aGlzLGduKHRoaXMuZG9jLHQubGluZSkpLHI9MCxuPShlLmxlbmd0aC0xKS8yLGk9dC5jaDtpZigwPT1pKXJldHVybiBlWzJdO2Zvcig7Oyl7dmFyIG89cituPj4xO2lmKChvP2VbMipvLTFdOjApPj1pKW49bztlbHNle2lmKCEoZVsyKm8rMV08aSkpcmV0dXJuIGVbMipvKzJdO3I9bysxfX19LGdldE1vZGVBdDpmdW5jdGlvbihlKXt2YXIgcj10aGlzLmRvYy5tb2RlO3JldHVybiByLmlubmVyTW9kZT90LmlubmVyTW9kZShyLHRoaXMuZ2V0VG9rZW5BdChlKS5zdGF0ZSkubW9kZTpyfSxnZXRIZWxwZXI6ZnVuY3Rpb24odCxlKXtpZihnby5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHI9Z29bZV0sbj10aGlzLmdldE1vZGVBdCh0KTtyZXR1cm4gbltlXSYmcltuW2VdXXx8bi5oZWxwZXJUeXBlJiZyW24uaGVscGVyVHlwZV18fHJbbi5uYW1lXX19LGdldFN0YXRlQWZ0ZXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYztyZXR1cm4gdD1xZShyLG51bGw9PXQ/ci5maXJzdCtyLnNpemUtMTp0KSx6KHRoaXMsdCsxLGUpfSxjdXJzb3JDb29yZHM6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyZXR1cm4gcj1udWxsPT10P24uaGVhZDoib2JqZWN0Ij09dHlwZW9mIHQ/UWUodGhpcy5kb2MsdCk6dD9uLmZyb206bi50byxRKHRoaXMscixlfHwicGFnZSIpfSxjaGFyQ29vcmRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHEodGhpcyxRZSh0aGlzLmRvYyx0KSxlfHwicGFnZSIpfSxjb29yZHNDaGFyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHQsZXx8InBhZ2UiKSx0ZSh0aGlzLHQubGVmdCx0LnRvcCl9LGxpbmVBdEhlaWdodDpmdW5jdGlvbih0LGUpe3JldHVybiB0PVoodGhpcyx7dG9wOnQsbGVmdDowfSxlfHwicGFnZSIpLnRvcCx4bih0aGlzLmRvYyx0K3RoaXMuZGlzcGxheS52aWV3T2Zmc2V0KX0saGVpZ2h0QXRMaW5lOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ITEsbj10aGlzLmRvYy5maXJzdCt0aGlzLmRvYy5zaXplLTE7dDx0aGlzLmRvYy5maXJzdD90PXRoaXMuZG9jLmZpcnN0OnQ+biYmKHQ9bixyPSEwKTt2YXIgaT1nbih0aGlzLmRvYyx0KTtyZXR1cm4gJCh0aGlzLGduKHRoaXMuZG9jLHQpLHt0b3A6MCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wKyhyP2kuaGVpZ2h0OjApfSxkZWZhdWx0VGV4dEhlaWdodDpmdW5jdGlvbigpe3JldHVybiByZSh0aGlzLmRpc3BsYXkpfSxkZWZhdWx0Q2hhcldpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5lKHRoaXMuZGlzcGxheSl9LHNldEd1dHRlck1hcmtlcjpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ3V0dGVyTWFya2Vyc3x8KHQuZ3V0dGVyTWFya2Vycz17fSk7cmV0dXJuIG5bZV09ciwhciYmbGkobikmJih0Lmd1dHRlck1hcmtlcnM9bnVsbCksITB9KX0pLGNsZWFyR3V0dGVyOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZG9jLG49ci5maXJzdDtyLml0ZXIoZnVuY3Rpb24ocil7ci5ndXR0ZXJNYXJrZXJzJiZyLmd1dHRlck1hcmtlcnNbdF0mJihyLmd1dHRlck1hcmtlcnNbdF09bnVsbCx1ZShlLG4sbisxKSxsaShyLmd1dHRlck1hcmtlcnMpJiYoci5ndXR0ZXJNYXJrZXJzPW51bGwpKSwrK259KX0pLGFkZExpbmVDbGFzczpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPSJ0ZXh0Ij09ZT8idGV4dENsYXNzIjoiYmFja2dyb3VuZCI9PWU/ImJnQ2xhc3MiOiJ3cmFwQ2xhc3MiO2lmKHRbbl0pe2lmKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIrcisiKD86JHxcXHMpIikudGVzdCh0W25dKSlyZXR1cm4hMTt0W25dKz0iICIrcn1lbHNlIHRbbl09cjtyZXR1cm4hMH0pfSkscmVtb3ZlTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyIsaT10W25dO2lmKCFpKXJldHVybiExO2lmKG51bGw9PXIpdFtuXT1udWxsO2Vsc2V7dmFyIG89aS5tYXRjaChuZXcgUmVnRXhwKCIoPzpefFxccyspIityKyIoPzokfFxccyspIikpO2lmKCFvKXJldHVybiExO3ZhciBsPW8uaW5kZXgrb1swXS5sZW5ndGg7dFtuXT1pLnNsaWNlKDAsby5pbmRleCkrKG8uaW5kZXgmJmwhPWkubGVuZ3RoPyIgIjoiIikraS5zbGljZShsKXx8bnVsbH1yZXR1cm4hMH0pfSksYWRkTGluZVdpZGdldDpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4ganIodGhpcyx0LGUscil9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKHQpe3QuY2xlYXIoKX0sbGluZUluZm86ZnVuY3Rpb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZighdHIodGhpcy5kb2MsdCkpcmV0dXJuIG51bGw7dmFyIGU9dDtpZih0PWduKHRoaXMuZG9jLHQpLCF0KXJldHVybiBudWxsfWVsc2V7dmFyIGU9Ym4odCk7aWYobnVsbD09ZSlyZXR1cm4gbnVsbH1yZXR1cm57bGluZTplLGhhbmRsZTp0LHRleHQ6dC50ZXh0LGd1dHRlck1hcmtlcnM6dC5ndXR0ZXJNYXJrZXJzLHRleHRDbGFzczp0LnRleHRDbGFzcyxiZ0NsYXNzOnQuYmdDbGFzcyx3cmFwQ2xhc3M6dC53cmFwQ2xhc3Msd2lkZ2V0czp0LndpZGdldHN9fSxnZXRWaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZGlzcGxheS5zaG93aW5nRnJvbSx0bzp0aGlzLmRpc3BsYXkuc2hvd2luZ1RvfX0sYWRkV2lkZ2V0OmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89dGhpcy5kaXNwbGF5O3Q9USh0aGlzLFFlKHRoaXMuZG9jLHQpKTt2YXIgbD10LmJvdHRvbSxzPXQubGVmdDtpZihlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zaXplci5hcHBlbmRDaGlsZChlKSwib3ZlciI9PW4pbD10LnRvcDtlbHNlIGlmKCJhYm92ZSI9PW58fCJuZWFyIj09bil7dmFyIGE9TWF0aC5tYXgoby53cmFwcGVyLmNsaWVudEhlaWdodCx0aGlzLmRvYy5oZWlnaHQpLHU9TWF0aC5tYXgoby5zaXplci5jbGllbnRXaWR0aCxvLmxpbmVTcGFjZS5jbGllbnRXaWR0aCk7KCJhYm92ZSI9PW58fHQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PmEpJiZ0LnRvcD5lLm9mZnNldEhlaWdodD9sPXQudG9wLWUub2Zmc2V0SGVpZ2h0OnQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PD1hJiYobD10LmJvdHRvbSkscytlLm9mZnNldFdpZHRoPnUmJihzPXUtZS5vZmZzZXRXaWR0aCl9ZS5zdHlsZS50b3A9bCsicHgiLGUuc3R5bGUubGVmdD1lLnN0eWxlLnJpZ2h0PSIiLCJyaWdodCI9PWk/KHM9by5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoLGUuc3R5bGUucmlnaHQ9IjBweCIpOigibGVmdCI9PWk/cz0wOiJtaWRkbGUiPT1pJiYocz0oby5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoKS8yKSxlLnN0eWxlLmxlZnQ9cysicHgiKSxyJiZhcih0aGlzLHMsbCxzK2Uub2Zmc2V0V2lkdGgsbCtlLm9mZnNldEhlaWdodCl9LHRyaWdnZXJPbktleURvd246bGUobnVsbCxXZSksZXhlY0NvbW1hbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG1vW3RdKHRoaXMpfSxmaW5kUG9zSDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBvPTAsbD1RZSh0aGlzLmRvYyx0KTtlPm8mJihsPXByKHRoaXMuZG9jLGwsaSxyLG4pLCFsLmhpdFNpZGUpOysrbyk7cmV0dXJuIGx9LG1vdmVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyPW4uc2hpZnR8fG4uZXh0ZW5kfHxqZShuLmZyb20sbi50byk/cHIodGhpcy5kb2Msbi5oZWFkLHQsZSx0aGlzLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTowPnQ/bi5mcm9tOm4udG8sZXIodGhpcy5kb2MscixyLHQpfSksZGVsZXRlSDpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsO2plKHIuZnJvbSxyLnRvKT9fZSh0aGlzLmRvYywiIixyLmZyb20scHIodGhpcy5kb2Msci5oZWFkLHQsZSwhMSksIitkZWxldGUiKTpfZSh0aGlzLmRvYywiIixyLmZyb20sci50bywiK2RlbGV0ZSIpLHRoaXMuY3VyT3AudXNlclNlbENoYW5nZT0hMH0pLGZpbmRQb3NWOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTEsbz1uOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBsPTAscz1RZSh0aGlzLmRvYyx0KTtlPmw7KytsKXt2YXIgYT1RKHRoaXMscywiZGl2Iik7aWYobnVsbD09bz9vPWEubGVmdDphLmxlZnQ9byxzPWdyKHRoaXMsYSxpLHIpLHMuaGl0U2lkZSlicmVha31yZXR1cm4gc30sbW92ZVY6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jLnNlbCxuPVEodGhpcyxyLmhlYWQsImRpdiIpO251bGwhPXIuZ29hbENvbHVtbiYmKG4ubGVmdD1yLmdvYWxDb2x1bW4pO3ZhciBpPWdyKHRoaXMsbix0LGUpOyJwYWdlIj09ZSYmZnIodGhpcywwLHEodGhpcyxpLCJkaXYiKS50b3Atbi50b3ApLGVyKHRoaXMuZG9jLGksaSx0KSxyLmdvYWxDb2x1bW49bi5sZWZ0fSksdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpeyhudWxsPT10fHx0IT10aGlzLnN0YXRlLm92ZXJ3cml0ZSkmJigodGhpcy5zdGF0ZS5vdmVyd3JpdGU9IXRoaXMuc3RhdGUub3ZlcndyaXRlKT90aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI6dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWU9dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itb3ZlcndyaXRlIiwiIikpfSxoYXNGb2N1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmZvY3VzZWR9LHNjcm9sbFRvOmxlKG51bGwsZnVuY3Rpb24odCxlKXtjcih0aGlzLHQsZSl9KSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kaXNwbGF5LnNjcm9sbGVyLGU9VG87cmV0dXJue2xlZnQ6dC5zY3JvbGxMZWZ0LHRvcDp0LnNjcm9sbFRvcCxoZWlnaHQ6dC5zY3JvbGxIZWlnaHQtZSx3aWR0aDp0LnNjcm9sbFdpZHRoLWUsY2xpZW50SGVpZ2h0OnQuY2xpZW50SGVpZ2h0LWUsY2xpZW50V2lkdGg6dC5jbGllbnRXaWR0aC1lfX0sc2Nyb2xsSW50b1ZpZXc6bGUobnVsbCxmdW5jdGlvbih0LGUpe251bGw9PXQ/dD17ZnJvbTp0aGlzLmRvYy5zZWwuaGVhZCx0bzpudWxsfToibnVtYmVyIj09dHlwZW9mIHQ/dD17ZnJvbTpZZSh0LDApLHRvOm51bGx9Om51bGw9PXQuZnJvbSYmKHQ9e2Zyb206dCx0bzpudWxsfSksdC50b3x8KHQudG89dC5mcm9tKSxlfHwoZT0wKTt2YXIgcj10O251bGwhPXQuZnJvbS5saW5lJiYodGhpcy5jdXJPcC5zY3JvbGxUb1Bvcz17ZnJvbTp0LmZyb20sdG86dC50byxtYXJnaW46ZX0scj17ZnJvbTpRKHRoaXMsdC5mcm9tKSx0bzpRKHRoaXMsdC50byl9KTt2YXIgbj11cih0aGlzLE1hdGgubWluKHIuZnJvbS5sZWZ0LHIudG8ubGVmdCksTWF0aC5taW4oci5mcm9tLnRvcCxyLnRvLnRvcCktZSxNYXRoLm1heChyLmZyb20ucmlnaHQsci50by5yaWdodCksTWF0aC5tYXgoci5mcm9tLmJvdHRvbSxyLnRvLmJvdHRvbSkrZSk7Y3IodGhpcyxuLnNjcm9sbExlZnQsbi5zY3JvbGxUb3ApfSksc2V0U2l6ZTpsZShudWxsLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fC9eXGQrJC8udGVzdChTdHJpbmcodCkpP3QrInB4Ijp0fW51bGwhPXQmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aD1yKHQpKSxudWxsIT1lJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0PXIoZSkpLHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dGhpcy5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCksdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMH0pLG9wZXJhdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gYWUodGhpcyx0KX0scmVmcmVzaDpsZShudWxsLGZ1bmN0aW9uKCl7dmFyIHQ9bnVsbD09dGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7Xyh0aGlzKSxjcih0aGlzLHRoaXMuZG9jLnNjcm9sbExlZnQsdGhpcy5kb2Muc2Nyb2xsVG9wKSx1ZSh0aGlzKSx0JiZvKHRoaXMpfSksc3dhcERvYzpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jO3JldHVybiBlLmNtPW51bGwscG4odGhpcyx0KSxfKHRoaXMpLGRlKHRoaXMsITApLGNyKHRoaXMsdC5zY3JvbGxMZWZ0LHQuc2Nyb2xsVG9wKSxVbih0aGlzLCJzd2FwRG9jIix0aGlzLGUpLGV9KSxnZXRJbnB1dEZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dH0sZ2V0V3JhcHBlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXJ9LGdldFNjcm9sbGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXJ9LGdldEd1dHRlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnN9fSxqbih0KTt2YXIgc289dC5vcHRpb25IYW5kbGVycz17fSxhbz10LmRlZmF1bHRzPXt9LHVvPXQuSW5pdD17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ29kZU1pcnJvci5Jbml0In19O3lyKCJ2YWx1ZSIsIiIsZnVuY3Rpb24odCxlKXt0LnNldFZhbHVlKGUpfSwhMCkseXIoIm1vZGUiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRvYy5tb2RlT3B0aW9uPWUscih0KX0sITApLHlyKCJpbmRlbnRVbml0IiwyLHIsITApLHlyKCJpbmRlbnRXaXRoVGFicyIsITEpLHlyKCJzbWFydEluZGVudCIsITApLHlyKCJ0YWJTaXplIiw0LGZ1bmN0aW9uKHQpe3IodCksXyh0KSx1ZSh0KX0sITApLHlyKCJzcGVjaWFsQ2hhcnMiLC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVmZWZmXS9nLGZ1bmN0aW9uKHQsZSl7dC5vcHRpb25zLnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKGUuc291cmNlKyhlLnRlc3QoIgkiKT8iIjoifAkiKSwiZyIpLHQucmVmcmVzaCgpfSwhMCkseXIoInNwZWNpYWxDaGFyUGxhY2Vob2xkZXIiLG5uLGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSwhMCkseXIoImVsZWN0cmljQ2hhcnMiLCEwKSx5cigicnRsTW92ZVZpc3VhbGx5IiwhVWkpLHlyKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCEwKSx5cigidGhlbWUiLCJkZWZhdWx0IixmdW5jdGlvbih0KXtzKHQpLGEodCl9LCEwKSx5cigia2V5TWFwIiwiZGVmYXVsdCIsbCkseXIoImV4dHJhS2V5cyIsbnVsbCkseXIoIm9uS2V5RXZlbnQiLG51bGwpLHlyKCJvbkRyYWdFdmVudCIsbnVsbCkseXIoImxpbmVXcmFwcGluZyIsITEsbiwhMCkseXIoImd1dHRlcnMiLFtdLGZ1bmN0aW9uKHQpe2godC5vcHRpb25zKSxhKHQpfSwhMCkseXIoImZpeGVkR3V0dGVyIiwhMCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQ9ZT95KHQuZGlzcGxheSkrInB4IjoiMCIsdC5yZWZyZXNoKCl9LCEwKSx5cigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIiLCExLGQsITApLHlyKCJsaW5lTnVtYmVycyIsITEsZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZmlyc3RMaW5lTnVtYmVyIiwxLGEsITApLHlyKCJsaW5lTnVtYmVyRm9ybWF0dGVyIixmdW5jdGlvbih0KXtyZXR1cm4gdH0sYSwhMCkseXIoInNob3dDdXJzb3JXaGVuU2VsZWN0aW5nIiwhMSxBLCEwKSx5cigicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51IiwhMCkseXIoInJlYWRPbmx5IiwhMSxmdW5jdGlvbih0LGUpeyJub2N1cnNvciI9PWU/KHplKHQpLHQuZGlzcGxheS5pbnB1dC5ibHVyKCksdC5kaXNwbGF5LmRpc2FibGVkPSEwKToodC5kaXNwbGF5LmRpc2FibGVkPSExLGV8fGRlKHQsITApKX0pLHlyKCJkcmFnRHJvcCIsITApLHlyKCJjdXJzb3JCbGlua1JhdGUiLDUzMCkseXIoImN1cnNvclNjcm9sbE1hcmdpbiIsMCkseXIoImN1cnNvckhlaWdodCIsMSkseXIoIndvcmtUaW1lIiwxMDApLHlyKCJ3b3JrRGVsYXkiLDEwMCkseXIoImZsYXR0ZW5TcGFucyIsITApLHlyKCJwb2xsSW50ZXJ2YWwiLDEwMCkseXIoInVuZG9EZXB0aCIsNDAsZnVuY3Rpb24odCxlKXt0LmRvYy5oaXN0b3J5LnVuZG9EZXB0aD1lfSkseXIoImhpc3RvcnlFdmVudERlbGF5Iiw1MDApLHlyKCJ2aWV3cG9ydE1hcmdpbiIsMTAsZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigibWF4SGlnaGxpZ2h0TGVuZ3RoIiwxZTQsZnVuY3Rpb24odCl7cih0KSx0LnJlZnJlc2goKX0sITApLHlyKCJjcnVkZU1lYXN1cmluZ0Zyb20iLDFlNCkseXIoIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCEwLGZ1bmN0aW9uKHQsZSl7ZXx8KHQuZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3A9dC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQ9MCl9KSx5cigidGFiaW5kZXgiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRpc3BsYXkuaW5wdXQudGFiSW5kZXg9ZXx8IiJ9KSx5cigiYXV0b2ZvY3VzIixudWxsKTt2YXIgY289dC5tb2Rlcz17fSxmbz10Lm1pbWVNb2Rlcz17fTt0LmRlZmluZU1vZGU9ZnVuY3Rpb24oZSxyKXtpZih0LmRlZmF1bHRzLm1vZGV8fCJudWxsIj09ZXx8KHQuZGVmYXVsdHMubW9kZT1lKSxhcmd1bWVudHMubGVuZ3RoPjIpe3IuZGVwZW5kZW5jaWVzPVtdO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDsrK24pci5kZXBlbmRlbmNpZXMucHVzaChhcmd1bWVudHNbbl0pfWNvW2VdPXJ9LHQuZGVmaW5lTUlNRT1mdW5jdGlvbih0LGUpe2ZvW3RdPWV9LHQucmVzb2x2ZU1vZGU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiZmby5oYXNPd25Qcm9wZXJ0eShlKSllPWZvW2VdO2Vsc2UgaWYoZSYmInN0cmluZyI9PXR5cGVvZiBlLm5hbWUmJmZvLmhhc093blByb3BlcnR5KGUubmFtZSkpe3ZhciByPWZvW2UubmFtZV07ZT1laShyLGUpLGUubmFtZT1yLm5hbWV9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUmJi9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChlKSlyZXR1cm4gdC5yZXNvbHZlTW9kZSgiYXBwbGljYXRpb24veG1sIik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3tuYW1lOmV9OmV8fHtuYW1lOiJudWxsIn19LHQuZ2V0TW9kZT1mdW5jdGlvbihlLHIpe3ZhciByPXQucmVzb2x2ZU1vZGUociksbj1jb1tyLm5hbWVdO2lmKCFuKXJldHVybiB0LmdldE1vZGUoZSwidGV4dC9wbGFpbiIpO3ZhciBpPW4oZSxyKTtpZihoby5oYXNPd25Qcm9wZXJ0eShyLm5hbWUpKXt2YXIgbz1ob1tyLm5hbWVdO2Zvcih2YXIgbCBpbiBvKW8uaGFzT3duUHJvcGVydHkobCkmJihpLmhhc093blByb3BlcnR5KGwpJiYoaVsiXyIrbF09aVtsXSksaVtsXT1vW2xdKX1yZXR1cm4gaS5uYW1lPXIubmFtZSxpfSx0LmRlZmluZU1vZGUoIm51bGwiLGZ1bmN0aW9uKCl7cmV0dXJue3Rva2VuOmZ1bmN0aW9uKHQpe3Quc2tpcFRvRW5kKCl9fX0pLHQuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsIm51bGwiKTt2YXIgaG89dC5tb2RlRXh0ZW5zaW9ucz17fTt0LmV4dGVuZE1vZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1oby5oYXNPd25Qcm9wZXJ0eSh0KT9ob1t0XTpob1t0XT17fTtyaShlLHIpfSx0LmRlZmluZUV4dGVuc2lvbj1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlW2VdPXJ9LHQuZGVmaW5lRG9jRXh0ZW5zaW9uPWZ1bmN0aW9uKHQsZSl7d28ucHJvdG90eXBlW3RdPWV9LHQuZGVmaW5lT3B0aW9uPXlyO3ZhciBwbz1bXTt0LmRlZmluZUluaXRIb29rPWZ1bmN0aW9uKHQpe3BvLnB1c2godCl9O3ZhciBnbz10LmhlbHBlcnM9e307dC5yZWdpc3RlckhlbHBlcj1mdW5jdGlvbihlLHIsbil7Z28uaGFzT3duUHJvcGVydHkoZSl8fChnb1tlXT10W2VdPXt9KSxnb1tlXVtyXT1ufSx0LmlzV29yZENoYXI9b2ksdC5jb3B5U3RhdGU9YnIsdC5zdGFydFN0YXRlPXhyLHQuaW5uZXJNb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKDt0LmlubmVyTW9kZTspe3ZhciByPXQuaW5uZXJNb2RlKGUpO2lmKCFyfHxyLm1vZGU9PXQpYnJlYWs7ZT1yLnN0YXRlLHQ9ci5tb2RlfXJldHVybiByfHx7bW9kZTp0LHN0YXRlOmV9fTt2YXIgbW89dC5jb21tYW5kcz17c2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3Quc2V0U2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCksWWUodC5sYXN0TGluZSgpKSl9LGtpbGxMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCEwKSxyPXQuZ2V0Q3Vyc29yKCExKSxuPSFqZShlLHIpO258fHQuZ2V0TGluZShlLmxpbmUpLmxlbmd0aCE9ZS5jaD90LnJlcGxhY2VSYW5nZSgiIixlLG4/cjpZZShlLmxpbmUpLCIrZGVsZXRlIik6dC5yZXBsYWNlUmFuZ2UoIiIsZSxZZShlLmxpbmUrMSwwKSwiK2RlbGV0ZSIpfSxkZWxldGVMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkubGluZTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLDApLFllKGUpLCIrZGVsZXRlIil9LGRlbExpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCk7dC5yZXBsYWNlUmFuZ2UoIiIsWWUoZS5saW5lLDApLGUsIitkZWxldGUiKX0sdW5kbzpmdW5jdGlvbih0KXt0LnVuZG8oKX0scmVkbzpmdW5jdGlvbih0KXt0LnJlZG8oKX0sZ29Eb2NTdGFydDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0LmZpcnN0TGluZSgpLDApKX0sZ29Eb2NFbmQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oWWUodC5sYXN0TGluZSgpKSl9LGdvTGluZVN0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKHhpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVN0YXJ0U21hcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXhpKHQsZS5saW5lKSxuPXQuZ2V0TGluZUhhbmRsZShyLmxpbmUpLGk9d24obik7aWYoaSYmMCE9aVswXS5sZXZlbCl0LmV4dGVuZFNlbGVjdGlvbihyKTtlbHNle3ZhciBvPU1hdGgubWF4KDAsbi50ZXh0LnNlYXJjaCgvXFMvKSksbD1lLmxpbmU9PXIubGluZSYmZS5jaDw9byYmZS5jaDt0LmV4dGVuZFNlbGVjdGlvbihZZShyLmxpbmUsbD8wOm8pKX19LGdvTGluZUVuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihDaSh0LHQuZ2V0Q3Vyc29yKCkubGluZSkpfSxnb0xpbmVSaWdodDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OnQuZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoKzEwMCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lTGVmdDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OjAsdG9wOmV9LCJkaXYiKSl9LGdvTGluZVVwOmZ1bmN0aW9uKHQpe3QubW92ZVYoLTEsImxpbmUiKX0sZ29MaW5lRG93bjpmdW5jdGlvbih0KXt0Lm1vdmVWKDEsImxpbmUiKX0sZ29QYWdlVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwicGFnZSIpfSxnb1BhZ2VEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwicGFnZSIpfSxnb0NoYXJMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNoYXIiKX0sZ29DaGFyUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJjaGFyIil9LGdvQ29sdW1uTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJjb2x1bW4iKX0sZ29Db2x1bW5SaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNvbHVtbiIpfSxnb1dvcmRMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsIndvcmQiKX0sZ29Hcm91cFJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiZ3JvdXAiKX0sZ29Hcm91cExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiZ3JvdXAiKX0sZ29Xb3JkUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJ3b3JkIil9LGRlbENoYXJCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJjaGFyIil9LGRlbENoYXJBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwiY2hhciIpfSxkZWxXb3JkQmVmb3JlOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgtMSwid29yZCIpfSxkZWxXb3JkQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsIndvcmQiKX0sZGVsR3JvdXBCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJncm91cCIpfSxkZWxHcm91cEFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJncm91cCIpfSxpbmRlbnRBdXRvOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpfSxpbmRlbnRNb3JlOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKX0saW5kZW50TGVzczpmdW5jdGlvbih0KXt0LmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKX0saW5zZXJ0VGFiOmZ1bmN0aW9uKHQpe3QucmVwbGFjZVNlbGVjdGlvbigiCSIsImVuZCIsIitpbnB1dCIpfSxkZWZhdWx0VGFiOmZ1bmN0aW9uKHQpe3Quc29tZXRoaW5nU2VsZWN0ZWQoKT90LmluZGVudFNlbGVjdGlvbigiYWRkIik6dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LHRyYW5zcG9zZUNoYXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkscj10LmdldExpbmUoZS5saW5lKTtlLmNoPjAmJmUuY2g8ci5sZW5ndGgtMSYmdC5yZXBsYWNlUmFuZ2Uoci5jaGFyQXQoZS5jaCkrci5jaGFyQXQoZS5jaC0xKSxZZShlLmxpbmUsZS5jaC0xKSxZZShlLmxpbmUsZS5jaCsxKSl9LG5ld2xpbmVBbmRJbmRlbnQ6ZnVuY3Rpb24odCl7bGUodCxmdW5jdGlvbigpe3QucmVwbGFjZVNlbGVjdGlvbigiXG4iLCJlbmQiLCIraW5wdXQiKSx0LmluZGVudExpbmUodC5nZXRDdXJzb3IoKS5saW5lLG51bGwsITApfSkoKX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpe3QudG9nZ2xlT3ZlcndyaXRlKCl9fSx2bz10LmtleU1hcD17fTt2by5iYXNpYz17TGVmdDoiZ29DaGFyTGVmdCIsUmlnaHQ6ImdvQ2hhclJpZ2h0IixVcDoiZ29MaW5lVXAiLERvd246ImdvTGluZURvd24iLEVuZDoiZ29MaW5lRW5kIixIb21lOiJnb0xpbmVTdGFydFNtYXJ0IixQYWdlVXA6ImdvUGFnZVVwIixQYWdlRG93bjoiZ29QYWdlRG93biIsRGVsZXRlOiJkZWxDaGFyQWZ0ZXIiLEJhY2tzcGFjZToiZGVsQ2hhckJlZm9yZSIsIlNoaWZ0LUJhY2tzcGFjZSI6ImRlbENoYXJCZWZvcmUiLFRhYjoiZGVmYXVsdFRhYiIsIlNoaWZ0LVRhYiI6ImluZGVudEF1dG8iLEVudGVyOiJuZXdsaW5lQW5kSW5kZW50IixJbnNlcnQ6InRvZ2dsZU92ZXJ3cml0ZSJ9LHZvLnBjRGVmYXVsdD17IkN0cmwtQSI6InNlbGVjdEFsbCIsIkN0cmwtRCI6ImRlbGV0ZUxpbmUiLCJDdHJsLVoiOiJ1bmRvIiwiU2hpZnQtQ3RybC1aIjoicmVkbyIsIkN0cmwtWSI6InJlZG8iLCJDdHJsLUhvbWUiOiJnb0RvY1N0YXJ0IiwiQWx0LVVwIjoiZ29Eb2NTdGFydCIsIkN0cmwtRW5kIjoiZ29Eb2NFbmQiLCJDdHJsLURvd24iOiJnb0RvY0VuZCIsIkN0cmwtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQ3RybC1SaWdodCI6ImdvR3JvdXBSaWdodCIsIkFsdC1MZWZ0IjoiZ29MaW5lU3RhcnQiLCJBbHQtUmlnaHQiOiJnb0xpbmVFbmQiLCJDdHJsLUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ3RybC1TIjoic2F2ZSIsIkN0cmwtRiI6ImZpbmQiLCJDdHJsLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUN0cmwtRyI6ImZpbmRQcmV2IiwiU2hpZnQtQ3RybC1GIjoicmVwbGFjZSIsIlNoaWZ0LUN0cmwtUiI6InJlcGxhY2VBbGwiLCJDdHJsLVsiOiJpbmRlbnRMZXNzIiwiQ3RybC1dIjoiaW5kZW50TW9yZSIsZmFsbHRocm91Z2g6ImJhc2ljIn0sdm8ubWFjRGVmYXVsdD17IkNtZC1BIjoic2VsZWN0QWxsIiwiQ21kLUQiOiJkZWxldGVMaW5lIiwiQ21kLVoiOiJ1bmRvIiwiU2hpZnQtQ21kLVoiOiJyZWRvIiwiQ21kLVkiOiJyZWRvIiwiQ21kLVVwIjoiZ29Eb2NTdGFydCIsIkNtZC1FbmQiOiJnb0RvY0VuZCIsIkNtZC1Eb3duIjoiZ29Eb2NFbmQiLCJBbHQtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQWx0LVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQ21kLUxlZnQiOiJnb0xpbmVTdGFydCIsIkNtZC1SaWdodCI6ImdvTGluZUVuZCIsIkFsdC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQWZ0ZXIiLCJBbHQtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkNtZC1TIjoic2F2ZSIsIkNtZC1GIjoiZmluZCIsIkNtZC1HIjoiZmluZE5leHQiLCJTaGlmdC1DbWQtRyI6ImZpbmRQcmV2IiwiQ21kLUFsdC1GIjoicmVwbGFjZSIsIlNoaWZ0LUNtZC1BbHQtRiI6InJlcGxhY2VBbGwiLCJDbWQtWyI6ImluZGVudExlc3MiLCJDbWQtXSI6ImluZGVudE1vcmUiLCJDbWQtQmFja3NwYWNlIjoiZGVsTGluZUxlZnQiLGZhbGx0aHJvdWdoOlsiYmFzaWMiLCJlbWFjc3kiXX0sdm9bImRlZmF1bHQiXT1LaT92by5tYWNEZWZhdWx0OnZvLnBjRGVmYXVsdCx2by5lbWFjc3k9eyJDdHJsLUYiOiJnb0NoYXJSaWdodCIsIkN0cmwtQiI6ImdvQ2hhckxlZnQiLCJDdHJsLVAiOiJnb0xpbmVVcCIsIkN0cmwtTiI6ImdvTGluZURvd24iLCJBbHQtRiI6ImdvV29yZFJpZ2h0IiwiQWx0LUIiOiJnb1dvcmRMZWZ0IiwiQ3RybC1BIjoiZ29MaW5lU3RhcnQiLCJDdHJsLUUiOiJnb0xpbmVFbmQiLCJDdHJsLVYiOiJnb1BhZ2VEb3duIiwiU2hpZnQtQ3RybC1WIjoiZ29QYWdlVXAiLCJDdHJsLUQiOiJkZWxDaGFyQWZ0ZXIiLCJDdHJsLUgiOiJkZWxDaGFyQmVmb3JlIiwiQWx0LUQiOiJkZWxXb3JkQWZ0ZXIiLCJBbHQtQmFja3NwYWNlIjoiZGVsV29yZEJlZm9yZSIsIkN0cmwtSyI6ImtpbGxMaW5lIiwiQ3RybC1UIjoidHJhbnNwb3NlQ2hhcnMifSx0Lmxvb2t1cEtleT13cix0LmlzTW9kaWZpZXJLZXk9THIsdC5rZXlOYW1lPWtyLHQuZnJvbVRleHRBcmVhPWZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe2UudmFsdWU9dS5nZXRWYWx1ZSgpfWlmKHJ8fChyPXt9KSxyLnZhbHVlPWUudmFsdWUsIXIudGFiaW5kZXgmJmUudGFiaW5kZXgmJihyLnRhYmluZGV4PWUudGFiaW5kZXgpLCFyLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyJiYoci5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyKSxudWxsPT1yLmF1dG9mb2N1cyl7dmFyIGk9ZG9jdW1lbnQuYm9keTt0cnl7aT1kb2N1bWVudC5hY3RpdmVFbGVtZW50fWNhdGNoKG8pe31yLmF1dG9mb2N1cz1pPT1lfHxudWxsIT1lLmdldEF0dHJpYnV0ZSgiYXV0b2ZvY3VzIikmJmk9PWRvY3VtZW50LmJvZHl9aWYoZS5mb3JtJiYoR24oZS5mb3JtLCJzdWJtaXQiLG4pLCFyLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpKXt2YXIgbD1lLmZvcm0scz1sLnN1Ym1pdDt0cnl7dmFyIGE9bC5zdWJtaXQ9ZnVuY3Rpb24oKXtuKCksbC5zdWJtaXQ9cyxsLnN1Ym1pdCgpLGwuc3VibWl0PWF9fWNhdGNoKG8pe319ZS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgdT10KGZ1bmN0aW9uKHQpe2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlLm5leHRTaWJsaW5nKX0scik7cmV0dXJuIHUuc2F2ZT1uLHUuZ2V0VGV4dEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sdS50b1RleHRBcmVhPWZ1bmN0aW9uKCl7bigpLGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1LmdldFdyYXBwZXJFbGVtZW50KCkpLGUuc3R5bGUuZGlzcGxheT0iIixlLmZvcm0mJihWbihlLmZvcm0sInN1Ym1pdCIsbiksImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9ybS5zdWJtaXQmJihlLmZvcm0uc3VibWl0PXMpKX0sdX0sU3IucHJvdG90eXBlPXtlb2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuc3RyaW5nLmxlbmd0aH0sc29sOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMucG9zfSxwZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyl8fHZvaWQgMH0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGg/dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOnZvaWQgMH0sZWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXZhciByPWU9PXQ7ZWxzZSB2YXIgcj1lJiYodC50ZXN0P3QudGVzdChlKTp0KGUpKTtyZXR1cm4gcj8oKyt0aGlzLnBvcyxlKTp2b2lkIDB9LGVhdFdoaWxlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmVhdCh0KTspO3JldHVybiB0aGlzLnBvcz5lfSxlYXRTcGFjZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBvczsvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTspKyt0aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M+dH0sc2tpcFRvRW5kOmZ1bmN0aW9uKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofSxza2lwVG86ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuaW5kZXhPZih0LHRoaXMucG9zKTtyZXR1cm4gZT4tMT8odGhpcy5wb3M9ZSwhMCk6dm9pZCAwfSxiYWNrVXA6ZnVuY3Rpb24odCl7dGhpcy5wb3MtPXR9LGNvbHVtbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPVpuKHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlfSxpbmRlbnRhdGlvbjpmdW5jdGlvbigpe3JldHVybiBabih0aGlzLnN0cmluZyxudWxsLHRoaXMudGFiU2l6ZSl9LG1hdGNoOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBuPXRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaCh0KTtyZXR1cm4gbiYmbi5pbmRleD4wP251bGw6KG4mJmUhPT0hMSYmKHRoaXMucG9zKz1uWzBdLmxlbmd0aCksbil9dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIHI/dC50b0xvd2VyQ2FzZSgpOnR9LG89dGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLHQubGVuZ3RoKTtyZXR1cm4gaShvKT09aSh0KT8oZSE9PSExJiYodGhpcy5wb3MrPXQubGVuZ3RoKSwhMCk6dm9pZCAwfSxjdXJyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5wb3MpfX0sdC5TdHJpbmdTdHJlYW09U3IsdC5UZXh0TWFya2VyPU1yLGpuKE1yKSxNci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dmFyIHQ9dGhpcy5kb2MuY20sZT10JiYhdC5jdXJPcDtpZihlJiZpZSh0KSxZbih0aGlzLCJjbGVhciIpKXt2YXIgcj10aGlzLmZpbmQoKTtyJiZVbih0aGlzLCJjbGVhciIsci5mcm9tLHIudG8pfWZvcih2YXIgbj1udWxsLGk9bnVsbCxvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBsPXRoaXMubGluZXNbb10scz1OcihsLm1hcmtlZFNwYW5zLHRoaXMpO251bGwhPXMudG8mJihpPWJuKGwpKSxsLm1hcmtlZFNwYW5zPURyKGwubWFya2VkU3BhbnMscyksbnVsbCE9cy5mcm9tP249Ym4obCk6dGhpcy5jb2xsYXBzZWQmJiFWcih0aGlzLmRvYyxsKSYmdCYmeW4obCxyZSh0LmRpc3BsYXkpKX1pZih0JiZ0aGlzLmNvbGxhcHNlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcpZm9yKHZhciBvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBhPUdyKHQuZG9jLHRoaXMubGluZXNbb10pLHU9Yyh0LmRvYyxhKTt1PnQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYodC5kaXNwbGF5Lm1heExpbmU9YSx0LmRpc3BsYXkubWF4TGluZUxlbmd0aD11LHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCl9bnVsbCE9biYmdCYmdWUodCxuLGkrMSksdGhpcy5saW5lcy5sZW5ndGg9MCx0aGlzLmV4cGxpY2l0bHlDbGVhcmVkPSEwLHRoaXMuYXRvbWljJiZ0aGlzLmRvYy5jYW50RWRpdCYmKHRoaXMuZG9jLmNhbnRFZGl0PSExLHQmJmlyKHQpKSxlJiZvZSh0KX19LE1yLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscj0wO3I8dGhpcy5saW5lcy5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmxpbmVzW3JdLGk9TnIobi5tYXJrZWRTcGFucyx0aGlzKTtpZihudWxsIT1pLmZyb218fG51bGwhPWkudG8pe3ZhciBvPWJuKG4pO251bGwhPWkuZnJvbSYmKHQ9WWUobyxpLmZyb20pKSxudWxsIT1pLnRvJiYoZT1ZZShvLGkudG8pKX19cmV0dXJuImJvb2ttYXJrIj09dGhpcy50eXBlP3Q6dCYme2Zyb206dCx0bzplfX0sTXIucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZpbmQoKSxlPXRoaXMuZG9jLmNtO2lmKHQmJmUpeyJib29rbWFyayIhPXRoaXMudHlwZSYmKHQ9dC5mcm9tKTt2YXIgcj1nbih0aGlzLmRvYyx0LmxpbmUpO2lmKEcoZSxyKSx0LmxpbmU+PWUuZGlzcGxheS5zaG93aW5nRnJvbSYmdC5saW5lPGUuZGlzcGxheS5zaG93aW5nVG8pe2Zvcih2YXIgbj1lLmRpc3BsYXkubGluZURpdi5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKWlmKG4ubGluZU9iaj09cil7bi5vZmZzZXRIZWlnaHQhPXIuaGVpZ2h0JiZ5bihyLG4ub2Zmc2V0SGVpZ2h0KTsKYnJlYWt9YWUoZSxmdW5jdGlvbigpe2UuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD1lLmN1ck9wLmZvcmNlVXBkYXRlPWUuY3VyT3AudXBkYXRlTWF4TGluZT0hMH0pfX19LE1yLnByb3RvdHlwZS5hdHRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wO2UubWF5YmVIaWRkZW5NYXJrZXJzJiYtMSE9dGkoZS5tYXliZUhpZGRlbk1hcmtlcnMsdGhpcyl8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzfHwoZS5tYXliZVVuaGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcyl9dGhpcy5saW5lcy5wdXNoKHQpfSxNci5wcm90b3R5cGUuZGV0YWNoTGluZT1mdW5jdGlvbih0KXtpZih0aGlzLmxpbmVzLnNwbGljZSh0aSh0aGlzLmxpbmVzLHQpLDEpLCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wOyhlLm1heWJlSGlkZGVuTWFya2Vyc3x8KGUubWF5YmVIaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX19LHQuU2hhcmVkVGV4dE1hcmtlcj1BcixqbihBciksQXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3RoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITA7Zm9yKHZhciB0PTA7dDx0aGlzLm1hcmtlcnMubGVuZ3RoOysrdCl0aGlzLm1hcmtlcnNbdF0uY2xlYXIoKTtVbih0aGlzLCJjbGVhciIpfX0sQXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoKX07dmFyIHlvPXQuTGluZVdpZGdldD1mdW5jdGlvbih0LGUscil7aWYocilmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodGhpc1tuXT1yW25dKTt0aGlzLmNtPXQsdGhpcy5ub2RlPWV9O2puKHlvKSx5by5wcm90b3R5cGUuY2xlYXI9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxpbmUud2lkZ2V0cyxlPWJuKHRoaXMubGluZSk7aWYobnVsbCE9ZSYmdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdFtyXT09dGhpcyYmdC5zcGxpY2Uoci0tLDEpO3QubGVuZ3RofHwodGhpcy5saW5lLndpZGdldHM9bnVsbCk7dmFyIG49Q24odGhpcy5jbSx0aGlzLmxpbmUpPHRoaXMuY20uZG9jLnNjcm9sbFRvcDt5bih0aGlzLmxpbmUsTWF0aC5tYXgoMCx0aGlzLmxpbmUuaGVpZ2h0LVlyKHRoaXMpKSksbiYmZnIodGhpcy5jbSwwLC10aGlzLmhlaWdodCksdWUodGhpcy5jbSxlLGUrMSl9fSkseW8ucHJvdG90eXBlLmNoYW5nZWQ9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhlaWdodDt0aGlzLmhlaWdodD1udWxsO3ZhciBlPVlyKHRoaXMpLXQ7aWYoZSl7eW4odGhpcy5saW5lLHRoaXMubGluZS5oZWlnaHQrZSk7dmFyIHI9Ym4odGhpcy5saW5lKTt1ZSh0aGlzLmNtLHIscisxKX19KTt2YXIgYm89dC5MaW5lPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCxYcih0aGlzLGUpLHRoaXMuaGVpZ2h0PXI/cih0aGlzKToxfTtqbihibyksYm8ucHJvdG90eXBlLmxpbmVObz1mdW5jdGlvbigpe3JldHVybiBibih0aGlzKX07dmFyIHhvPXt9O2ZuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZXMubGVuZ3RofSxyZW1vdmVJbm5lcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LG49dCtlO24+cjsrK3Ipe3ZhciBpPXRoaXMubGluZXNbcl07dGhpcy5oZWlnaHQtPWkuaGVpZ2h0LFpyKGkpLFVuKGksImRlbGV0ZSIpfXRoaXMubGluZXMuc3BsaWNlKHQsZSl9LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe3Quc3BsaWNlLmFwcGx5KHQsW3QubGVuZ3RoLDBdLmNvbmNhdCh0aGlzLmxpbmVzKSl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmhlaWdodCs9cix0aGlzLmxpbmVzPXRoaXMubGluZXMuc2xpY2UoMCx0KS5jb25jYXQoZSkuY29uY2F0KHRoaXMubGluZXMuc2xpY2UodCkpO2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7aT5uOysrbillW25dLnBhcmVudD10aGlzfSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQrZTtuPnQ7Kyt0KWlmKHIodGhpcy5saW5lc1t0XSkpcmV0dXJuITB9fSxobi5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5zaXplLT1lO2Zvcih2YXIgcj0wO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmNoaWxkcmVuW3JdLGk9bi5jaHVua1NpemUoKTtpZihpPnQpe3ZhciBvPU1hdGgubWluKGUsaS10KSxsPW4uaGVpZ2h0O2lmKG4ucmVtb3ZlSW5uZXIodCxvKSx0aGlzLmhlaWdodC09bC1uLmhlaWdodCxpPT1vJiYodGhpcy5jaGlsZHJlbi5zcGxpY2Uoci0tLDEpLG4ucGFyZW50PW51bGwpLDA9PShlLT1vKSlicmVhazt0PTB9ZWxzZSB0LT1pfWlmKHRoaXMuc2l6ZS1lPDI1KXt2YXIgcz1bXTt0aGlzLmNvbGxhcHNlKHMpLHRoaXMuY2hpbGRyZW49W25ldyBmbihzKV0sdGhpcy5jaGlsZHJlblswXS5wYXJlbnQ9dGhpc319LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7cj5lOysrZSl0aGlzLmNoaWxkcmVuW2VdLmNvbGxhcHNlKHQpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbih0LGUscil7dGhpcy5zaXplKz1lLmxlbmd0aCx0aGlzLmhlaWdodCs9cjtmb3IodmFyIG49MCxpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRoaXMuY2hpbGRyZW5bbl0sbD1vLmNodW5rU2l6ZSgpO2lmKGw+PXQpe2lmKG8uaW5zZXJ0SW5uZXIodCxlLHIpLG8ubGluZXMmJm8ubGluZXMubGVuZ3RoPjUwKXtmb3IoO28ubGluZXMubGVuZ3RoPjUwOyl7dmFyIHM9by5saW5lcy5zcGxpY2Uoby5saW5lcy5sZW5ndGgtMjUsMjUpLGE9bmV3IGZuKHMpO28uaGVpZ2h0LT1hLmhlaWdodCx0aGlzLmNoaWxkcmVuLnNwbGljZShuKzEsMCxhKSxhLnBhcmVudD10aGlzfXRoaXMubWF5YmVTcGlsbCgpfWJyZWFrfXQtPWx9fSxtYXliZVNwaWxsOmZ1bmN0aW9uKCl7aWYoISh0aGlzLmNoaWxkcmVuLmxlbmd0aDw9MTApKXt2YXIgdD10aGlzO2Rve3ZhciBlPXQuY2hpbGRyZW4uc3BsaWNlKHQuY2hpbGRyZW4ubGVuZ3RoLTUsNSkscj1uZXcgaG4oZSk7aWYodC5wYXJlbnQpe3Quc2l6ZS09ci5zaXplLHQuaGVpZ2h0LT1yLmhlaWdodDt2YXIgbj10aSh0LnBhcmVudC5jaGlsZHJlbix0KTt0LnBhcmVudC5jaGlsZHJlbi5zcGxpY2UobisxLDAscil9ZWxzZXt2YXIgaT1uZXcgaG4odC5jaGlsZHJlbik7aS5wYXJlbnQ9dCx0LmNoaWxkcmVuPVtpLHJdLHQ9aX1yLnBhcmVudD10LnBhcmVudH13aGlsZSh0LmNoaWxkcmVuLmxlbmd0aD4xMCk7dC5wYXJlbnQubWF5YmVTcGlsbCgpfX0saXRlck46ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD50KXt2YXIgcz1NYXRoLm1pbihlLGwtdCk7aWYoby5pdGVyTih0LHMscikpcmV0dXJuITA7aWYoMD09KGUtPXMpKWJyZWFrO3Q9MH1lbHNlIHQtPWx9fX07dmFyIENvPTAsd289dC5Eb2M9ZnVuY3Rpb24odCxlLHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHdvKSlyZXR1cm4gbmV3IHdvKHQsZSxyKTtudWxsPT1yJiYocj0wKSxobi5jYWxsKHRoaXMsW25ldyBmbihbbmV3IGJvKCIiLG51bGwpXSldKSx0aGlzLmZpcnN0PXIsdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5jYW50RWRpdD0hMSx0aGlzLmhpc3Rvcnk9TG4oKSx0aGlzLmNsZWFuR2VuZXJhdGlvbj0xLHRoaXMuZnJvbnRpZXI9cjt2YXIgbj1ZZShyLDApO3RoaXMuc2VsPXtmcm9tOm4sdG86bixoZWFkOm4sYW5jaG9yOm4sc2hpZnQ6ITEsZXh0ZW5kOiExLGdvYWxDb2x1bW46bnVsbH0sdGhpcy5pZD0rK0NvLHRoaXMubW9kZU9wdGlvbj1lLCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9em8odCkpLGNuKHRoaXMse2Zyb206bix0bzpuLHRleHQ6dH0sbnVsbCx7aGVhZDpuLGFuY2hvcjpufSl9O3dvLnByb3RvdHlwZT1laShobi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOndvLGl0ZXI6ZnVuY3Rpb24odCxlLHIpe3I/dGhpcy5pdGVyTih0LXRoaXMuZmlyc3QsZS10LHIpOnRoaXMuaXRlck4odGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSx0KX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9ZS5sZW5ndGg7aT5uOysrbilyKz1lW25dLmhlaWdodDt0aGlzLmluc2VydElubmVyKHQtdGhpcy5maXJzdCxlLHIpfSxyZW1vdmU6ZnVuY3Rpb24odCxlKXt0aGlzLnJlbW92ZUlubmVyKHQtdGhpcy5maXJzdCxlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKTtyZXR1cm4gdD09PSExP2U6ZS5qb2luKHR8fCJcbiIpfSxzZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1ZZSh0aGlzLmZpcnN0LDApLHI9dGhpcy5maXJzdCt0aGlzLnNpemUtMTtCZSh0aGlzLHtmcm9tOmUsdG86WWUocixnbih0aGlzLHIpLnRleHQubGVuZ3RoKSx0ZXh0OnpvKHQpLG9yaWdpbjoic2V0VmFsdWUifSx7aGVhZDplLGFuY2hvcjplfSwhMCl9LHJlcGxhY2VSYW5nZTpmdW5jdGlvbih0LGUscixuKXtlPVFlKHRoaXMsZSkscj1yP1FlKHRoaXMscik6ZSxfZSh0aGlzLHQsZSxyLG4pfSxnZXRSYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49bW4odGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSkpO3JldHVybiByPT09ITE/bjpuLmpvaW4ocnx8IlxuIil9LGdldExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMaW5lSGFuZGxlKHQpO3JldHVybiBlJiZlLnRleHR9LHNldExpbmU6ZnVuY3Rpb24odCxlKXt0cih0aGlzLHQpJiZfZSh0aGlzLGUsWWUodCwwKSxRZSh0aGlzLFllKHQpKSl9LHJlbW92ZUxpbmU6ZnVuY3Rpb24odCl7dD9fZSh0aGlzLCIiLFFlKHRoaXMsWWUodC0xKSksUWUodGhpcyxZZSh0KSkpOl9lKHRoaXMsIiIsWWUoMCwwKSxRZSh0aGlzLFllKDEsMCkpKX0sZ2V0TGluZUhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdHIodGhpcyx0KT9nbih0aGlzLHQpOnZvaWQgMH0sZ2V0TGluZU51bWJlcjpmdW5jdGlvbih0KXtyZXR1cm4gYm4odCl9LGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJih0PWduKHRoaXMsdCkpLEdyKHRoaXMsdCl9LGxpbmVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LGZpcnN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0fSxsYXN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0K3RoaXMuc2l6ZS0xfSxjbGlwUG9zOmZ1bmN0aW9uKHQpe3JldHVybiBRZSh0aGlzLHQpfSxnZXRDdXJzb3I6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLnNlbDtyZXR1cm4gZT1udWxsPT10fHwiaGVhZCI9PXQ/ci5oZWFkOiJhbmNob3IiPT10P3IuYW5jaG9yOiJlbmQiPT10fHx0PT09ITE/ci50bzpyLmZyb20sWmUoZSl9LHNvbWV0aGluZ1NlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWplKHRoaXMuc2VsLmhlYWQsdGhpcy5zZWwuYW5jaG9yKX0sc2V0Q3Vyc29yOnNlKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1RZSh0aGlzLCJudW1iZXIiPT10eXBlb2YgdD9ZZSh0LGV8fDApOnQpO3I/ZXIodGhpcyxuKTpucih0aGlzLG4sbil9KSxzZXRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe25yKHRoaXMsUWUodGhpcyx0KSxRZSh0aGlzLGV8fHQpLHIpfSksZXh0ZW5kU2VsZWN0aW9uOnNlKGZ1bmN0aW9uKHQsZSxyKXtlcih0aGlzLFFlKHRoaXMsdCksZSYmUWUodGhpcyxlKSxyKX0pLGdldFNlbGVjdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRSYW5nZSh0aGlzLnNlbC5mcm9tLHRoaXMuc2VsLnRvLHQpfSxyZXBsYWNlU2VsZWN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtCZSh0aGlzLHtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8sdGV4dDp6byh0KSxvcmlnaW46cn0sZXx8ImFyb3VuZCIpfSx1bmRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywidW5kbyIpfSkscmVkbzpzZShmdW5jdGlvbigpe1ZlKHRoaXMsInJlZG8iKX0pLHNldEV4dGVuZGluZzpmdW5jdGlvbih0KXt0aGlzLnNlbC5leHRlbmQ9dH0saGlzdG9yeVNpemU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhpc3Rvcnk7cmV0dXJue3VuZG86dC5kb25lLmxlbmd0aCxyZWRvOnQudW5kb25lLmxlbmd0aH19LGNsZWFySGlzdG9yeTpmdW5jdGlvbigpe3RoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbil9LG1hcmtDbGVhbjpmdW5jdGlvbigpe3RoaXMuY2xlYW5HZW5lcmF0aW9uPXRoaXMuY2hhbmdlR2VuZXJhdGlvbigpfSxjaGFuZ2VHZW5lcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGlzdG9yeS5sYXN0T3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCx0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbn0saXNDbGVhbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb249PSh0fHx0aGlzLmNsZWFuR2VuZXJhdGlvbil9LGdldEhpc3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpIbih0aGlzLmhpc3RvcnkuZG9uZSksdW5kb25lOkhuKHRoaXMuaGlzdG9yeS51bmRvbmUpfX0sc2V0SGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmhpc3Rvcnk9TG4odGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO2UuZG9uZT10LmRvbmUuc2xpY2UoMCksZS51bmRvbmU9dC51bmRvbmUuc2xpY2UoMCl9LG1hcmtUZXh0OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVHIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSksciwicmFuZ2UiKX0sc2V0Qm9va21hcms6ZnVuY3Rpb24odCxlKXt2YXIgcj17cmVwbGFjZWRXaXRoOmUmJihudWxsPT1lLm5vZGVUeXBlP2Uud2lkZ2V0OmUpLGluc2VydExlZnQ6ZSYmZS5pbnNlcnRMZWZ0fTtyZXR1cm4gdD1RZSh0aGlzLHQpLFRyKHRoaXMsdCx0LHIsImJvb2ttYXJrIil9LGZpbmRNYXJrc0F0OmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT1bXSxyPWduKHRoaXMsdC5saW5lKS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dOyhudWxsPT1pLmZyb218fGkuZnJvbTw9dC5jaCkmJihudWxsPT1pLnRvfHxpLnRvPj10LmNoKSYmZS5wdXNoKGkubWFya2VyLnBhcmVudHx8aS5tYXJrZXIpfXJldHVybiBlfSxnZXRBbGxNYXJrczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLml0ZXIoZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKW51bGwhPXJbbl0uZnJvbSYmdC5wdXNoKHJbbl0ubWFya2VyKX0pLHR9LHBvc0Zyb21JbmRleDpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihuKXt2YXIgaT1uLnRleHQubGVuZ3RoKzE7cmV0dXJuIGk+dD8oZT10LCEwKToodC09aSwrK3Isdm9pZCAwKX0pLFFlKHRoaXMsWWUocixlKSl9LGluZGV4RnJvbVBvczpmdW5jdGlvbih0KXt0PVFlKHRoaXMsdCk7dmFyIGU9dC5jaDtyZXR1cm4gdC5saW5lPHRoaXMuZmlyc3R8fHQuY2g8MD8wOih0aGlzLml0ZXIodGhpcy5maXJzdCx0LmxpbmUsZnVuY3Rpb24odCl7ZSs9dC50ZXh0Lmxlbmd0aCsxfSksZSl9LGNvcHk6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHdvKHZuKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSksdGhpcy5tb2RlT3B0aW9uLHRoaXMuZmlyc3QpO3JldHVybiBlLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCxlLnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0LGUuc2VsPXtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8saGVhZDp0aGlzLnNlbC5oZWFkLGFuY2hvcjp0aGlzLnNlbC5hbmNob3Isc2hpZnQ6dGhpcy5zZWwuc2hpZnQsZXh0ZW5kOiExLGdvYWxDb2x1bW46dGhpcy5zZWwuZ29hbENvbHVtbn0sdCYmKGUuaGlzdG9yeS51bmRvRGVwdGg9dGhpcy5oaXN0b3J5LnVuZG9EZXB0aCxlLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpKSxlfSxsaW5rZWREb2M6ZnVuY3Rpb24odCl7dHx8KHQ9e30pO3ZhciBlPXRoaXMuZmlyc3Qscj10aGlzLmZpcnN0K3RoaXMuc2l6ZTtudWxsIT10LmZyb20mJnQuZnJvbT5lJiYoZT10LmZyb20pLG51bGwhPXQudG8mJnQudG88ciYmKHI9dC50byk7dmFyIG49bmV3IHdvKHZuKHRoaXMsZSxyKSx0Lm1vZGV8fHRoaXMubW9kZU9wdGlvbixlKTtyZXR1cm4gdC5zaGFyZWRIaXN0JiYobi5oaXN0b3J5PXRoaXMuaGlzdG9yeSksKHRoaXMubGlua2VkfHwodGhpcy5saW5rZWQ9W10pKS5wdXNoKHtkb2M6bixzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH0pLG4ubGlua2VkPVt7ZG9jOnRoaXMsaXNQYXJlbnQ6ITAsc2hhcmVkSGlzdDp0LnNoYXJlZEhpc3R9XSxufSx1bmxpbmtEb2M6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQmJihlPWUuZG9jKSx0aGlzLmxpbmtlZClmb3IodmFyIHI9MDtyPHRoaXMubGlua2VkLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGlua2VkW3JdO2lmKG4uZG9jPT1lKXt0aGlzLmxpbmtlZC5zcGxpY2UociwxKSxlLnVubGlua0RvYyh0aGlzKTticmVha319aWYoZS5oaXN0b3J5PT10aGlzLmhpc3Rvcnkpe3ZhciBpPVtlLmlkXTtkbihlLGZ1bmN0aW9uKHQpe2kucHVzaCh0LmlkKX0sITApLGUuaGlzdG9yeT1MbigpLGUuaGlzdG9yeS5kb25lPUhuKHRoaXMuaGlzdG9yeS5kb25lLGkpLGUuaGlzdG9yeS51bmRvbmU9SG4odGhpcy5oaXN0b3J5LnVuZG9uZSxpKX19LGl0ZXJMaW5rZWREb2NzOmZ1bmN0aW9uKHQpe2RuKHRoaXMsdCl9LGdldE1vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxnZXRFZGl0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbX19KSx3by5wcm90b3R5cGUuZWFjaExpbmU9d28ucHJvdG90eXBlLml0ZXI7dmFyIExvPSJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IiLnNwbGl0KCIgIik7Zm9yKHZhciBrbyBpbiB3by5wcm90b3R5cGUpd28ucHJvdG90eXBlLmhhc093blByb3BlcnR5KGtvKSYmdGkoTG8sa28pPDAmJih0LnByb3RvdHlwZVtrb109ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcy5kb2MsYXJndW1lbnRzKX19KHdvLnByb3RvdHlwZVtrb10pKTtqbih3byksdC5lX3N0b3A9UG4sdC5lX3ByZXZlbnREZWZhdWx0PXpuLHQuZV9zdG9wUHJvcGFnYXRpb249SW47dmFyIFNvLE1vPTA7dC5vbj1Hbix0Lm9mZj1Wbix0LnNpZ25hbD1Lbjt2YXIgVG89MzAsQW89dC5QYXNzPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLlBhc3MifX07JG4ucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodGhpcy5pZCksdGhpcy5pZD1zZXRUaW1lb3V0KGUsdCl9fSx0LmNvdW50Q29sdW1uPVpuO3ZhciBIbz1bIiJdLE5vPS9bXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLyxEbz0vW1x1MDMwMC1cdTAzNkZcdTA0ODMtXHUwNDg3XHUwNDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0LVx1MDVDNVx1MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEItXHUwNjVGXHUwNjcwXHUwNkQ2LVx1MDZEQ1x1MDZERi1cdTA2RTRcdTA2RTctXHUwNkU4XHUwNkVBLVx1MDZFRFx1QTY2Rlx1MURDMOKAk1x1MURGRlx1MjBEMOKAk1x1MjBGRlx1QTY3MC1cdUE2NzJcdUE2NzQtXHVBNjdEXHVBNjlGXHVkYzAwLVx1ZGZmZlx1RkUyMOKAk1x1RkUyRl0vO3QucmVwbGFjZUdldFJlY3Q9ZnVuY3Rpb24odCl7Zmk9dH07dmFyIFdvPWZ1bmN0aW9uKCl7aWYoTmkpcmV0dXJuITE7dmFyIHQ9c2koImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gdHx8ImRyYWdEcm9wImluIHR9KCk7VGk/aGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzY9PXQuY2hhckNvZGVBdChlLTEpJiYzOT09dC5jaGFyQ29kZUF0KGUpfTpJaSYmIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3JldHVybi9cLVteIFwtP118XD9bXiAhXCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfTpXaSYmL0Nocm9tZVwvKD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk/aGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZS0xKTtyZXR1cm4gcj49ODIwOCYmODIxMj49cn06V2kmJihoaT1mdW5jdGlvbih0LGUpe2lmKGU+MSYmNDU9PXQuY2hhckNvZGVBdChlLTEpKXtpZigvXHcvLnRlc3QodC5jaGFyQXQoZS0yKSkmJi9bXlwtP1wuXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITA7aWYoZT4yJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1tcZFwuLF0vLnRlc3QodC5jaGFyQXQoZSkpKXJldHVybiExfXJldHVybi9bfiEjJSYqKT0rfVxdXFx8XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZbXHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfSk7dmFyIE9vLEVvLHpvPTMhPSJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9W10sbj10Lmxlbmd0aDtuPj1lOyl7dmFyIGk9dC5pbmRleE9mKCJcbiIsZSk7LTE9PWkmJihpPXQubGVuZ3RoKTt2YXIgbz10LnNsaWNlKGUsIlxyIj09dC5jaGFyQXQoaS0xKT9pLTE6aSksbD1vLmluZGV4T2YoIlxyIik7LTEhPWw/KHIucHVzaChvLnNsaWNlKDAsbCkpLGUrPWwrMSk6KHIucHVzaChvKSxlPWkrMSl9cmV0dXJuIHJ9OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KC9cclxuP3xcbi8pfTt0LnNwbGl0TGluZXM9em87dmFyIElvPXdpbmRvdy5nZXRTZWxlY3Rpb24/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LnNlbGVjdGlvblN0YXJ0IT10LnNlbGVjdGlvbkVuZH1jYXRjaChlKXtyZXR1cm4hMX19OmZ1bmN0aW9uKHQpe3RyeXt2YXIgZT10Lm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCl9Y2F0Y2gocil7fXJldHVybiBlJiZlLnBhcmVudEVsZW1lbnQoKT09dD8wIT1lLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLGUpOiExfSxGbz1mdW5jdGlvbigpe3ZhciB0PXNpKCJkaXYiKTtyZXR1cm4ib25jb3B5ImluIHQ/ITA6KHQuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCJyZXR1cm47IiksImZ1bmN0aW9uIj09dHlwZW9mIHQub25jb3B5KX0oKSxQbz17MzoiRW50ZXIiLDg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkN0cmwiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjIiwzMjoiU3BhY2UiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJMZWZ0IiwzODoiVXAiLDM5OiJSaWdodCIsNDA6IkRvd24iLDQ0OiJQcmludFNjcm4iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDU5OiI7Iiw5MToiTW9kIiw5MjoiTW9kIiw5MzoiTW9kIiwxMDk6Ii0iLDEwNzoiPSIsMTI3OiJEZWxldGUiLDE4NjoiOyIsMTg3OiI9IiwxODg6IiwiLDE4OToiLSIsMTkwOiIuIiwxOTE6Ii8iLDE5MjoiYCIsMjE5OiJbIiwyMjA6IlxcIiwyMjE6Il0iLDIyMjoiJyIsNjMyNzY6IlBhZ2VVcCIsNjMyNzc6IlBhZ2VEb3duIiw2MzI3NToiRW5kIiw2MzI3MzoiSG9tZSIsNjMyMzQ6IkxlZnQiLDYzMjMyOiJVcCIsNjMyMzU6IlJpZ2h0Iiw2MzIzMzoiRG93biIsNjMzMDI6Ikluc2VydCIsNjMyNzI6IkRlbGV0ZSJ9O3Qua2V5TmFtZXM9UG8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDsxMD50O3QrKylQb1t0KzQ4XT1TdHJpbmcodCk7Zm9yKHZhciB0PTY1OzkwPj10O3QrKylQb1t0XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2Zvcih2YXIgdD0xOzEyPj10O3QrKylQb1t0KzExMV09UG9bdCs2MzIzNV09IkYiK3R9KCk7dmFyIFJvLEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gMjU1Pj10P2UuY2hhckF0KHQpOnQ+PTE0MjQmJjE1MjQ+PXQ/IlIiOnQ+PTE1MzYmJjE3OTE+PXQ/ci5jaGFyQXQodC0xNTM2KTp0Pj0xNzkyJiYyMjIwPj10PyJyIjoiTCJ9dmFyIGU9ImJiYmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJzc3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTEwiLHI9InJycnJycnJycnJycixyTk5tbW1tbW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tcnJycnJycm5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbW1tbW1tTm1tbW1ycnJycnJycnJycnJycnJycnIiLG49L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLyxpPS9bc3R3Tl0vLG89L1tMUnJdLyxsPS9bTGIxbl0vLHM9L1sxbl0vLGE9IkwiO3JldHVybiBmdW5jdGlvbihlKXtpZighbi50ZXN0KGUpKXJldHVybiExO2Zvcih2YXIgcix1PWUubGVuZ3RoLGM9W10sZj0wO3U+ZjsrK2YpYy5wdXNoKHI9dChlLmNoYXJDb2RlQXQoZikpKTtmb3IodmFyIGY9MCxoPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsibSI9PXI/Y1tmXT1oOmg9cn1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiMSI9PXImJiJyIj09ZD9jW2ZdPSJuIjpvLnRlc3QocikmJihkPXIsInIiPT1yJiYoY1tmXT0iUiIpKX1mb3IodmFyIGY9MSxoPWNbMF07dS0xPmY7KytmKXt2YXIgcj1jW2ZdOyIrIj09ciYmIjEiPT1oJiYiMSI9PWNbZisxXT9jW2ZdPSIxIjoiLCIhPXJ8fGghPWNbZisxXXx8IjEiIT1oJiYibiIhPWh8fChjW2ZdPWgpLGg9cn1mb3IodmFyIGY9MDt1PmY7KytmKXt2YXIgcj1jW2ZdO2lmKCIsIj09ciljW2ZdPSJOIjtlbHNlIGlmKCIlIj09cil7Zm9yKHZhciBwPWYrMTt1PnAmJiIlIj09Y1twXTsrK3ApO2Zvcih2YXIgZz1mJiYiISI9PWNbZi0xXXx8dS0xPnAmJiIxIj09Y1twXT8iMSI6Ik4iLG09ZjtwPm07KyttKWNbbV09ZztmPXAtMX19Zm9yKHZhciBmPTAsZD1hO3U+ZjsrK2Ype3ZhciByPWNbZl07IkwiPT1kJiYiMSI9PXI/Y1tmXT0iTCI6by50ZXN0KHIpJiYoZD1yKX1mb3IodmFyIGY9MDt1PmY7KytmKWlmKGkudGVzdChjW2ZdKSl7Zm9yKHZhciBwPWYrMTt1PnAmJmkudGVzdChjW3BdKTsrK3ApO2Zvcih2YXIgdj0iTCI9PShmP2NbZi0xXTphKSx5PSJMIj09KHUtMT5wP2NbcF06YSksZz12fHx5PyJMIjoiUiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfWZvcih2YXIgYix4PVtdLGY9MDt1PmY7KWlmKGwudGVzdChjW2ZdKSl7dmFyIEM9Zjtmb3IoKytmO3U+ZiYmbC50ZXN0KGNbZl0pOysrZik7eC5wdXNoKHtmcm9tOkMsdG86ZixsZXZlbDowfSl9ZWxzZXt2YXIgdz1mLEw9eC5sZW5ndGg7Zm9yKCsrZjt1PmYmJiJMIiE9Y1tmXTsrK2YpO2Zvcih2YXIgbT13O2Y+bTspaWYocy50ZXN0KGNbbV0pKXttPncmJnguc3BsaWNlKEwsMCx7ZnJvbTp3LHRvOm0sbGV2ZWw6MX0pO3ZhciBrPW07Zm9yKCsrbTtmPm0mJnMudGVzdChjW21dKTsrK20pO3guc3BsaWNlKEwsMCx7ZnJvbTprLHRvOm0sbGV2ZWw6Mn0pLHc9bX1lbHNlKyttO2Y+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86ZixsZXZlbDoxfSl9cmV0dXJuIDE9PXhbMF0ubGV2ZWwmJihiPWUubWF0Y2goL15ccysvKSkmJih4WzBdLmZyb209YlswXS5sZW5ndGgseC51bnNoaWZ0KHtmcm9tOjAsdG86YlswXS5sZW5ndGgsbGV2ZWw6MH0pKSwxPT1Rbih4KS5sZXZlbCYmKGI9ZS5tYXRjaCgvXHMrJC8pKSYmKFFuKHgpLnRvLT1iWzBdLmxlbmd0aCx4LnB1c2goe2Zyb206dS1iWzBdLmxlbmd0aCx0bzp1LGxldmVsOjB9KSkseFswXS5sZXZlbCE9UW4oeCkubGV2ZWwmJngucHVzaCh7ZnJvbTp1LHRvOnUsbGV2ZWw6eFswXS5sZXZlbH0pLHh9fSgpO3JldHVybiB0LnZlcnNpb249IjMuMjAuMCIsdH0oKTtQSwcIxlyRsL+vAQC/rwEAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAc3RhdGljXGxpYlxoaWdobGlnaHQubWluLmpzdmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChvKXtyZXR1cm4gby5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gYihwKXtmb3IodmFyIG89cC5maXJzdENoaWxkO287bz1vLm5leHRTaWJsaW5nKXtpZihvLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJDT0RFIil7cmV0dXJuIG99aWYoIShvLm5vZGVUeXBlPT0zJiZvLm5vZGVWYWx1ZS5tYXRjaCgvXHMrLykpKXticmVha319fWZ1bmN0aW9uIGgocCxvKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHAuY2hpbGROb2RlcyxmdW5jdGlvbihxKXtpZihxLm5vZGVUeXBlPT0zKXtyZXR1cm4gbz9xLm5vZGVWYWx1ZS5yZXBsYWNlKC9cbi9nLCIiKTpxLm5vZGVWYWx1ZX1pZihxLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJCUiIpe3JldHVybiJcbiJ9cmV0dXJuIGgocSxvKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIGEocSl7dmFyIHA9KHEuY2xhc3NOYW1lKyIgIisocS5wYXJlbnROb2RlP3EucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIpKS5zcGxpdCgvXHMrLyk7cD1wLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIil9KTtmb3IodmFyIG89MDtvPHAubGVuZ3RoO28rKyl7aWYoZVtwW29dXXx8cFtvXT09Im5vLWhpZ2hsaWdodCIpe3JldHVybiBwW29dfX19ZnVuY3Rpb24gYyhxKXt2YXIgbz1bXTsoZnVuY3Rpb24gcChyLHMpe2Zvcih2YXIgdD1yLmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpe2lmKHQubm9kZVR5cGU9PTMpe3MrPXQubm9kZVZhbHVlLmxlbmd0aH1lbHNle2lmKHQubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cys9MX1lbHNle2lmKHQubm9kZVR5cGU9PTEpe28ucHVzaCh7ZXZlbnQ6InN0YXJ0IixvZmZzZXQ6cyxub2RlOnR9KTtzPXAodCxzKTtvLnB1c2goe2V2ZW50OiJzdG9wIixvZmZzZXQ6cyxub2RlOnR9KX19fX1yZXR1cm4gc30pKHEsMCk7cmV0dXJuIG99ZnVuY3Rpb24gaihwLHIsdil7dmFyIHE9MDt2YXIgeT0iIjt2YXIgcz1bXTtmdW5jdGlvbiB1KCl7aWYoIXAubGVuZ3RofHwhci5sZW5ndGgpe3JldHVybiBwLmxlbmd0aD9wOnJ9aWYocFswXS5vZmZzZXQhPXJbMF0ub2Zmc2V0KXtyZXR1cm4ocFswXS5vZmZzZXQ8clswXS5vZmZzZXQpP3A6cn1yZXR1cm4gclswXS5ldmVudD09InN0YXJ0Ij9wOnJ9ZnVuY3Rpb24gdChBKXtmdW5jdGlvbiB6KEIpe3JldHVybiIgIitCLm5vZGVOYW1lKyc9IicrbChCLnZhbHVlKSsnIid9eSs9IjwiK0Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKStBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoQS5hdHRyaWJ1dGVzLHopLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB4KHope3krPSI8LyIrei5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKyI+In1mdW5jdGlvbiBvKHopeyh6LmV2ZW50PT0ic3RhcnQiP3Q6eCkoei5ub2RlKX13aGlsZShwLmxlbmd0aHx8ci5sZW5ndGgpe3ZhciB3PXUoKTt5Kz1sKHYuc3Vic3RyKHEsd1swXS5vZmZzZXQtcSkpO3E9d1swXS5vZmZzZXQ7aWYodz09cCl7cy5yZXZlcnNlKCkuZm9yRWFjaCh4KTtkb3tvKHcuc3BsaWNlKDAsMSlbMF0pO3c9dSgpfXdoaWxlKHc9PXAmJncubGVuZ3RoJiZ3WzBdLm9mZnNldD09cSk7cy5yZXZlcnNlKCkuZm9yRWFjaCh0KX1lbHNle2lmKHdbMF0uZXZlbnQ9PSJzdGFydCIpe3MucHVzaCh3WzBdLm5vZGUpfWVsc2V7cy5wb3AoKX1vKHcuc3BsaWNlKDAsMSlbMF0pfX1yZXR1cm4geStsKHYuc3Vic3RyKHEpKX1mdW5jdGlvbiBmKHIpe2Z1bmN0aW9uIG8ocyl7cmV0dXJuKHMmJnMuc291cmNlKXx8c31mdW5jdGlvbiBwKHQscyl7cmV0dXJuIFJlZ0V4cChvKHQpLCJtIisoci5jST8iaSI6IiIpKyhzPyJnIjoiIikpfWZ1bmN0aW9uIHEoeix4KXtpZih6LmNvbXBpbGVkKXtyZXR1cm59ei5jb21waWxlZD10cnVlO3ZhciB1PVtdO2lmKHouayl7dmFyIHM9e307ZnVuY3Rpb24gQShCLHQpe2lmKHIuY0kpe3Q9dC50b0xvd2VyQ2FzZSgpfXQuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBEPUMuc3BsaXQoInwiKTtzW0RbMF1dPVtCLERbMV0/TnVtYmVyKERbMV0pOjFdO3UucHVzaChEWzBdKX0pfXoubFI9cCh6Lmx8fCJcXGIiK2hsanMuSVIrIlxcYig/IVxcLikiLHRydWUpO2lmKHR5cGVvZiB6Lms9PSJzdHJpbmciKXtBKCJrZXl3b3JkIix6LmspfWVsc2V7Zm9yKHZhciB5IGluIHouayl7aWYoIXouay5oYXNPd25Qcm9wZXJ0eSh5KSl7Y29udGludWV9QSh5LHoua1t5XSl9fXouaz1zfWlmKHgpe2lmKHouYldLKXt6LmI9IlxcYigiK3Uuam9pbigifCIpKyIpXFxiKD8hXFwuKVxccyoifXouYlI9cCh6LmI/ei5iOiJcXEJ8XFxiIik7aWYoIXouZSYmIXouZVcpe3ouZT0iXFxCfFxcYiJ9aWYoei5lKXt6LmVSPXAoei5lKX16LnRFPW8oei5lKXx8IiI7aWYoei5lVyYmeC50RSl7ei50RSs9KHouZT8ifCI6IiIpK3gudEV9fWlmKHouaSl7ei5pUj1wKHouaSl9aWYoei5yPT09dW5kZWZpbmVkKXt6LnI9MX1pZighei5jKXt6LmM9W119Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7aWYoei5jW3ddPT0ic2VsZiIpe3ouY1t3XT16fXEoei5jW3ddLHopfWlmKHouc3RhcnRzKXtxKHouc3RhcnRzLHgpfXZhciB2PVtdO2Zvcih2YXIgdz0wO3c8ei5jLmxlbmd0aDt3Kyspe3YucHVzaChvKHouY1t3XS5iKSl9aWYoei50RSl7di5wdXNoKG8oei50RSkpfWlmKHouaSl7di5wdXNoKG8oei5pKSl9ei50PXYubGVuZ3RoP3Aodi5qb2luKCJ8IiksdHJ1ZSk6e2V4ZWM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9fX1xKHIpfWZ1bmN0aW9uIGQoRSxHLEMsTSl7ZnVuY3Rpb24gbyhyLFApe2Zvcih2YXIgTz0wO088UC5jLmxlbmd0aDtPKyspe3ZhciBOPVAuY1tPXS5iUi5leGVjKHIpO2lmKE4mJk4uaW5kZXg9PTApe3JldHVybiBQLmNbT119fX1mdW5jdGlvbiBzKE4scil7aWYoTi5lJiZOLmVSLnRlc3Qocikpe3JldHVybiBOfWlmKE4uZVcpe3JldHVybiBzKE4ucGFyZW50LHIpfX1mdW5jdGlvbiB0KHIsTil7cmV0dXJuICFDJiZOLmkmJk4uaVIudGVzdChyKX1mdW5jdGlvbiB5KE8scil7dmFyIE49SC5jST9yWzBdLnRvTG93ZXJDYXNlKCk6clswXTtyZXR1cm4gTy5rLmhhc093blByb3BlcnR5KE4pJiZPLmtbTl19ZnVuY3Rpb24gSSgpe3ZhciBOPWwodyk7aWYoIUIuayl7cmV0dXJuIE59dmFyIHI9IiI7dmFyIFE9MDtCLmxSLmxhc3RJbmRleD0wO3ZhciBPPUIubFIuZXhlYyhOKTt3aGlsZShPKXtyKz1OLnN1YnN0cihRLE8uaW5kZXgtUSk7dmFyIFA9eShCLE8pO2lmKFApe3YrPVBbMV07cis9JzxzcGFuIGNsYXNzPSInK1BbMF0rJyI+JytPWzBdKyI8L3NwYW4+In1lbHNle3IrPU9bMF19UT1CLmxSLmxhc3RJbmRleDtPPUIubFIuZXhlYyhOKX1yZXR1cm4gcitOLnN1YnN0cihRKX1mdW5jdGlvbiB6KCl7aWYoQi5zTCYmIWVbQi5zTF0pe3JldHVybiBsKHcpfXZhciBOPUIuc3ViTGFuZ3VhZ2VNb2RlPT0iY29udGludW91cyI/Qi50b3A6dW5kZWZpbmVkO3ZhciByPUIuc0w/ZChCLnNMLHcsdHJ1ZSxOKTpnKHcpO2lmKEIucj4wKXt2Kz1yLmtleXdvcmRfY291bnQ7QSs9ci5yfUIudG9wPXIudG9wO3JldHVybic8c3BhbiBjbGFzcz0iJytyLmxhbmd1YWdlKyciPicrci52YWx1ZSsiPC9zcGFuPiJ9ZnVuY3Rpb24gTCgpe3JldHVybiBCLnNMIT09dW5kZWZpbmVkP3ooKTpJKCl9ZnVuY3Rpb24gSyhPLHIpe3ZhciBOPU8uY04/JzxzcGFuIGNsYXNzPSInK08uY04rJyI+JzoiIjtpZihPLnJCKXt4Kz1OO3c9IiJ9ZWxzZXtpZihPLmVCKXt4Kz1sKHIpK047dz0iIn1lbHNle3grPU47dz1yfX1CPU9iamVjdC5jcmVhdGUoTyx7cGFyZW50Ont2YWx1ZTpCfX0pfWZ1bmN0aW9uIEQoTixyKXt3Kz1OO2lmKHI9PT11bmRlZmluZWQpe3grPUwoKTtyZXR1cm4gMH12YXIgUD1vKHIsQik7aWYoUCl7eCs9TCgpO0soUCxyKTtyZXR1cm4gUC5yQj8wOnIubGVuZ3RofXZhciBRPXMoQixyKTtpZihRKXt2YXIgTz1CO2lmKCEoTy5yRXx8Ty5lRSkpe3crPXJ9eCs9TCgpO2Rve2lmKEIuY04pe3grPSI8L3NwYW4+In1BKz1CLnI7Qj1CLnBhcmVudH13aGlsZShCIT1RLnBhcmVudCk7aWYoTy5lRSl7eCs9bChyKX13PSIiO2lmKFEuc3RhcnRzKXtLKFEuc3RhcnRzLCIiKX1yZXR1cm4gTy5yRT8wOnIubGVuZ3RofWlmKHQocixCKSl7dGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtICInK3IrJyIgZm9yIG1vZGUgIicrKEIuY058fCI8dW5uYW1lZD4iKSsnIicpfXcrPXI7cmV0dXJuIHIubGVuZ3RofHwxfXZhciBIPWVbRV07aWYoIUgpe3Rocm93IG5ldyBFcnJvcignVW5rbm93biBsYW5ndWFnZTogIicrRSsnIicpfWYoSCk7dmFyIEI9TXx8SDt2YXIgeD0iIjtmb3IodmFyIEY9QjtGIT1IO0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3g9JzxzcGFuIGNsYXNzPSInK0YuY04rJyI+Jyt4fX12YXIgdz0iIjt2YXIgQT0wO3ZhciB2PTA7dHJ5e3ZhciB1LHEscD0wO3doaWxlKHRydWUpe0IudC5sYXN0SW5kZXg9cDt1PUIudC5leGVjKEcpO2lmKCF1KXticmVha31xPUQoRy5zdWJzdHIocCx1LmluZGV4LXApLHVbMF0pO3A9dS5pbmRleCtxfUQoRy5zdWJzdHIocCkpO2Zvcih2YXIgRj1CO0YucGFyZW50O0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3grPSI8L3NwYW4+In19cmV0dXJue3I6QSxrZXl3b3JkX2NvdW50OnYsdmFsdWU6eCxsYW5ndWFnZTpFLHRvcDpCfX1jYXRjaChKKXtpZihKLm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpIT0tMSl7cmV0dXJue3I6MCxrZXl3b3JkX2NvdW50OjAsdmFsdWU6bChHKX19ZWxzZXt0aHJvdyBKfX19ZnVuY3Rpb24gZyhzKXt2YXIgbz17a2V5d29yZF9jb3VudDowLHI6MCx2YWx1ZTpsKHMpfTt2YXIgcT1vO2Zvcih2YXIgcCBpbiBlKXtpZighZS5oYXNPd25Qcm9wZXJ0eShwKSl7Y29udGludWV9dmFyIHI9ZChwLHMsZmFsc2UpO3IubGFuZ3VhZ2U9cDtpZihyLmtleXdvcmRfY291bnQrci5yPnEua2V5d29yZF9jb3VudCtxLnIpe3E9cn1pZihyLmtleXdvcmRfY291bnQrci5yPm8ua2V5d29yZF9jb3VudCtvLnIpe3E9bztvPXJ9fWlmKHEubGFuZ3VhZ2Upe28uc2Vjb25kX2Jlc3Q9cX1yZXR1cm4gb31mdW5jdGlvbiBpKHEscCxvKXtpZihwKXtxPXEucmVwbGFjZSgvXigoPFtePl0rPnxcdCkrKS9nbSxmdW5jdGlvbihyLHYsdSx0KXtyZXR1cm4gdi5yZXBsYWNlKC9cdC9nLHApfSl9aWYobyl7cT1xLnJlcGxhY2UoL1xuL2csIjxicj4iKX1yZXR1cm4gcX1mdW5jdGlvbiBtKHIsdSxwKXt2YXIgdj1oKHIscCk7dmFyIHQ9YShyKTtpZih0PT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJufXZhciB3PXQ/ZCh0LHYsdHJ1ZSk6Zyh2KTt0PXcubGFuZ3VhZ2U7dmFyIG89YyhyKTtpZihvLmxlbmd0aCl7dmFyIHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIik7cS5pbm5lckhUTUw9dy52YWx1ZTt3LnZhbHVlPWoobyxjKHEpLHYpfXcudmFsdWU9aSh3LnZhbHVlLHUscCk7dmFyIHM9ci5jbGFzc05hbWU7aWYoIXMubWF0Y2goIihcXHN8XikobGFuZ3VhZ2UtKT8iK3QrIihcXHN8JCkiKSl7cz1zPyhzKyIgIit0KTp0fXIuaW5uZXJIVE1MPXcudmFsdWU7ci5jbGFzc05hbWU9cztyLnJlc3VsdD17bGFuZ3VhZ2U6dCxrdzp3LmtleXdvcmRfY291bnQscmU6dy5yfTtpZih3LnNlY29uZF9iZXN0KXtyLnNlY29uZF9iZXN0PXtsYW5ndWFnZTp3LnNlY29uZF9iZXN0Lmxhbmd1YWdlLGt3Oncuc2Vjb25kX2Jlc3Qua2V5d29yZF9jb3VudCxyZTp3LnNlY29uZF9iZXN0LnJ9fX1mdW5jdGlvbiBuKCl7aWYobi5jYWxsZWQpe3JldHVybn1uLmNhbGxlZD10cnVlO0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIiksYikuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24obyl7bShvLGhsanMudGFiUmVwbGFjZSl9KX1mdW5jdGlvbiBrKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLG4sZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixuLGZhbHNlKX12YXIgZT17fTt0aGlzLkxBTkdVQUdFUz1lO3RoaXMuaGlnaGxpZ2h0PWQ7dGhpcy5oaWdobGlnaHRBdXRvPWc7dGhpcy5maXhNYXJrdXA9aTt0aGlzLmhpZ2hsaWdodEJsb2NrPW07dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW47dGhpcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPWs7dGhpcy5JUj0iW2EtekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSIoXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcYlxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bLStdP1xcZCspPykiO3RoaXMuQk5SPSJcXGIoMGJbMDFdKykiO3RoaXMuUlNSPSIhfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFwqfFxcKj18XFwrfFxcKz18LHxcXC58LXwtPXwvfC89fDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXD98XFxbfFxce3xcXCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iO3RoaXMuQkU9e2I6IlxcXFxbXFxzXFxTXSIscjowfTt0aGlzLkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlt0aGlzLkJFXSxyOjB9O3RoaXMuUVNNPXtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5DTENNPXtjTjoiY29tbWVudCIsYjoiLy8iLGU6IiQifTt0aGlzLkNCTENMTT17Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8ifTt0aGlzLkhDTT17Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQifTt0aGlzLk5NPXtjTjoibnVtYmVyIixiOnRoaXMuTlIscjowfTt0aGlzLkNOTT17Y046Im51bWJlciIsYjp0aGlzLkNOUixyOjB9O3RoaXMuQk5NPXtjTjoibnVtYmVyIixiOnRoaXMuQk5SLHI6MH07dGhpcy5SRUdFWFBfTU9ERT17Y046InJlZ2V4cCIsYjovXC8vLGU6L1wvW2dpbV0qLyxpOi9cbi8sYzpbdGhpcy5CRSx7YjovXFsvLGU6L1xdLyxyOjAsYzpbdGhpcy5CRV19XX07dGhpcy5pbmhlcml0PWZ1bmN0aW9uKHEscil7dmFyIG89e307Zm9yKHZhciBwIGluIHEpe29bcF09cVtwXX1pZihyKXtmb3IodmFyIHAgaW4gcil7b1twXT1yW3BdfX1yZXR1cm4gb319KCk7aGxqcy5MQU5HVUFHRVMuYmFzaD1mdW5jdGlvbihhKXt2YXIgYz17Y046InZhcmlhYmxlIixiOi9cJFtcd1xkI0BdW1x3XGRfXSovfTt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFx7KC4qPylcfS99O3ZhciBlPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOlthLkJFLGMsYix7Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfV0scjowfTt2YXIgZD17Y046InN0cmluZyIsYjovJy8sZTovJy8scjowfTtyZXR1cm57bDovLT9bYS16XSsvLGs6e2tleXdvcmQ6ImlmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciBicmVhayBjb250aW51ZSB3aGlsZSBpbiBkbyBkb25lIGV4aXQgcmV0dXJuIHNldCBkZWNsYXJlIGNhc2UgZXNhYyBleHBvcnQgZXhlYyIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSIsYnVpbHRfaW46InByaW50ZiBlY2hvIHJlYWQgY2QgcHdkIHB1c2hkIHBvcGQgZGlycyBsZXQgZXZhbCB1bnNldCB0eXBlc2V0IHJlYWRvbmx5IGdldG9wdHMgc291cmNlIHNob3B0IGNhbGxlciB0eXBlIGhhc2ggYmluZCBoZWxwIHN1ZG8iLG9wZXJhdG9yOiItbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEifSxjOlt7Y046InNoZWJhbmciLGI6L14jIVteXG5dK3NoXHMqJC8scjoxMH0se2NOOiJmdW5jdGlvbiIsYjovXHdbXHdcZF9dKlxzKlwoXHMqXClccypcey8sckI6dHJ1ZSxjOlt7Y046InRpdGxlIixiOi9cd1tcd1xkX10qL31dLHI6MH0sYS5IQ00sYS5OTSxlLGQsYyxiXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmNzPWZ1bmN0aW9uKGEpe3JldHVybntrOiJhYnN0cmFjdCBhcyBiYXNlIGJvb2wgYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2hlY2tlZCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWNpbWFsIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmFsc2UgZmluYWxseSBmaXhlZCBmbG9hdCBmb3IgZm9yZWFjaCBnb3RvIGlmIGltcGxpY2l0IGluIGludCBpbnRlcmZhY2UgaW50ZXJuYWwgaXMgbG9jayBsb25nIG5hbWVzcGFjZSBuZXcgbnVsbCBvYmplY3Qgb3BlcmF0b3Igb3V0IG92ZXJyaWRlIHBhcmFtcyBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmVhZG9ubHkgcmVmIHJldHVybiBzYnl0ZSBzZWFsZWQgc2hvcnQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVpbnQgdWxvbmcgdW5jaGVja2VkIHVuc2FmZSB1c2hvcnQgdXNpbmcgdmlydHVhbCB2b2xhdGlsZSB2b2lkIHdoaWxlIGFzeW5jIGF3YWl0IGFzY2VuZGluZyBkZXNjZW5kaW5nIGZyb20gZ2V0IGdyb3VwIGludG8gam9pbiBsZXQgb3JkZXJieSBwYXJ0aWFsIHNlbGVjdCBzZXQgdmFsdWUgdmFyIHdoZXJlIHlpZWxkIixjOlt7Y046ImNvbW1lbnQiLGI6Ii8vLyIsZToiJCIsckI6dHJ1ZSxjOlt7Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+In0se2NOOiJ4bWxEb2NUYWciLGI6IjwvPyIsZToiPiJ9XX0sYS5DTENNLGEuQ0JMQ0xNLHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIixrOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSByZWdpb24gZW5kcmVnaW9uIHByYWdtYSBjaGVja3N1bSJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIicsYzpbe2I6JyIiJ31dfSxhLkFTTSxhLlFTTSxhLkNOTV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5ydWJ5PWZ1bmN0aW9uKGUpe3ZhciBhPSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGo9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBnPXtrZXl3b3JkOiJhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyBpZiBCRUdJTiByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuIG5leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgbmlsIGVsc2UgYnJlYWsgdW5kZWYgbm90IHN1cGVyIGNsYXNzIGNhc2UgcmVxdWlyZSB5aWVsZCBhbGlhcyB3aGlsZSBlbnN1cmUgZWxzaWYgb3IgaW5jbHVkZSJ9O3ZhciBjPXtjTjoieWFyZG9jdGFnIixiOiJAW0EtWmEtel0rIn07dmFyIGs9W3tjTjoiY29tbWVudCIsYjoiIyIsZToiJCIsYzpbY119LHtjTjoiY29tbWVudCIsYjoiXlxcPWJlZ2luIixlOiJeXFw9ZW5kIixjOltjXSxyOjEwfSx7Y046ImNvbW1lbnQiLGI6Il5fX0VORF9fIixlOiJcXG4kIn1dO3ZhciBkPXtjTjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6YSxrOmd9O3ZhciBpPVtlLkJFLGRdO3ZhciBiPVt7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6aSxyOjB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXCgiLGU6IlxcKSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddP3siLGU6In0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddPzwiLGU6Ij4iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LyIsZToiLyIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPy0iLGU6Ii0iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFx8IixlOiJcXHwiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjovXEJcPyhcXFxkezEsM318XFx4W0EtRmEtZjAtOV17MSwyfXxcXHVbQS1GYS1mMC05XXs0fXxcXD9cUylcYi99XTt2YXIgaD17Y046ImZ1bmN0aW9uIixiV0s6dHJ1ZSxlOiIgfCR8OyIsazoiZGVmIixjOlt7Y046InRpdGxlIixiOmosbDphLGs6Z30se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixsOmEsazpnfV0uY29uY2F0KGspfTt2YXIgZj1rLmNvbmNhdChiLmNvbmNhdChbe2NOOiJjbGFzcyIsYldLOnRydWUsZToiJHw7IixrOiJjbGFzcyBtb2R1bGUiLGM6W3tjTjoidGl0bGUiLGI6IltBLVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixyOjB9LHtjTjoiaW5oZXJpdGFuY2UiLGI6IjxcXHMqIixjOlt7Y046InBhcmVudCIsYjoiKCIrZS5JUisiOjopPyIrZS5JUn1dfV0uY29uY2F0KGspfSxoLHtjTjoiY29uc3RhbnQiLGI6Iig6Oik/KFxcYltBLVpdXFx3Kig6Oik/KSsiLHI6MH0se2NOOiJzeW1ib2wiLGI6IjoiLGM6Yi5jb25jYXQoW3tiOmp9XSkscjowfSx7Y046InN5bWJvbCIsYjphKyI6IixyOjB9LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtjTjoidmFyaWFibGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSJ9LHtiOiIoIitlLlJTUisiKVxccyoiLGM6ay5jb25jYXQoW3tjTjoicmVnZXhwIixiOiIvIixlOiIvW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlcnsiLGU6In1bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyXFwoIixlOiJcXClbYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyISIsZToiIVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXFsiLGU6IlxcXVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfV0pLHI6MH1dKSk7ZC5jPWY7aC5jWzFdLmM9ZjtyZXR1cm57bDphLGs6ZyxjOmZ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5kaWZmPWZ1bmN0aW9uKGEpe3JldHVybntjOlt7Y046ImNodW5rIixiOiJeXFxAXFxAICtcXC1cXGQrLFxcZCsgK1xcK1xcZCssXFxkKyArXFxAXFxAJCIscjoxMH0se2NOOiJjaHVuayIsYjoiXlxcKlxcKlxcKiArXFxkKyxcXGQrICtcXCpcXCpcXCpcXCokIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwtXFwtXFwtICtcXGQrLFxcZCsgK1xcLVxcLVxcLVxcLSQiLHI6MTB9LHtjTjoiaGVhZGVyIixiOiJJbmRleDogIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Ij09PT09IixlOiI9PT09PSQifSx7Y046ImhlYWRlciIsYjoiXlxcLVxcLVxcLSIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwqezN9ICIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwrXFwrXFwrIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6IlxcKns1fSIsZToiXFwqezV9JCJ9LHtjTjoiYWRkaXRpb24iLGI6Il5cXCsiLGU6IiQifSx7Y046ImRlbGV0aW9uIixiOiJeXFwtIixlOiIkIn0se2NOOiJjaGFuZ2UiLGI6Il5cXCEiLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PWZ1bmN0aW9uKGEpe3JldHVybntrOntrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5In0sYzpbYS5BU00sYS5RU00sYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLHtiOiIoIithLlJTUisifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsazoicmV0dXJuIHRocm93IGNhc2UiLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlJFR0VYUF9NT0RFLHtiOi88LyxlOi8+Oy8sc0w6InhtbCJ9XSxyOjB9LHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6L3svLGs6ImZ1bmN0aW9uIixjOlt7Y046InRpdGxlIixiOi9bQS1aYS16JF9dWzAtOUEtWmEteiRfXSovfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxjOlthLkNMQ00sYS5DQkxDTE1dLGk6L1siJ1woXS99XSxpOi9cW3wlL31dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMueG1sPWZ1bmN0aW9uKGEpe3ZhciBjPSJbQS1aYS16MC05XFwuXzotXSsiO3ZhciBiPXtlVzp0cnVlLHI6MCxjOlt7Y046ImF0dHJpYnV0ZSIsYjpjLHI6MH0se2I6Jz0iJyxyQjp0cnVlLGU6JyInLGM6W3tjTjoidmFsdWUiLGI6JyInLGVXOnRydWV9XX0se2I6Ij0nIixyQjp0cnVlLGU6IiciLGM6W3tjTjoidmFsdWUiLGI6IiciLGVXOnRydWV9XX0se2I6Ij0iLGM6W3tjTjoidmFsdWUiLGI6IlteXFxzLz5dKyJ9XX1dfTtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSx7Y046ImRvY3R5cGUiLGI6IjwhRE9DVFlQRSIsZToiPiIscjoxMCxjOlt7YjoiXFxbIixlOiJcXF0ifV19LHtjTjoiY29tbWVudCIsYjoiPCEtLSIsZToiLS0+IixyOjEwfSx7Y046ImNkYXRhIixiOiI8XFwhXFxbQ0RBVEFcXFsiLGU6IlxcXVxcXT4iLHI6MTB9LHtjTjoidGFnIixiOiI8c3R5bGUoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InN0eWxlIn0sYzpbYl0sc3RhcnRzOntlOiI8L3N0eWxlPiIsckU6dHJ1ZSxzTDoiY3NzIn19LHtjTjoidGFnIixiOiI8c2NyaXB0KD89XFxzfD58JCkiLGU6Ij4iLGs6e3RpdGxlOiJzY3JpcHQifSxjOltiXSxzdGFydHM6e2U6IjxcL3NjcmlwdD4iLHJFOnRydWUsc0w6ImphdmFzY3JpcHQifX0se2I6IjwlIixlOiIlPiIsc0w6InZic2NyaXB0In0se2NOOiJ0YWciLGI6IjwvPyIsZToiLz8+IixyOjAsYzpbe2NOOiJ0aXRsZSIsYjoiW14gLz48XSsifSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFya2Rvd249ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiaGVhZGVyIixiOiJeI3sxLDN9IixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il4uKz9cXG5bPS1dezIsfSQifSx7YjoiPCIsZToiPiIsc0w6InhtbCIscjowfSx7Y046ImJ1bGxldCIsYjoiXihbKistXXwoXFxkK1xcLikpXFxzKyJ9LHtjTjoic3Ryb25nIixiOiJbKl9dezJ9Lis/WypfXXsyfSJ9LHtjTjoiZW1waGFzaXMiLGI6IlxcKi4rP1xcKiJ9LHtjTjoiZW1waGFzaXMiLGI6Il8uKz9fIixyOjB9LHtjTjoiYmxvY2txdW90ZSIsYjoiXj5cXHMrIixlOiIkIn0se2NOOiJjb2RlIixiOiJgLis/YCJ9LHtjTjoiY29kZSIsYjoiXiAgICAiLGU6IiQiLHI6MH0se2NOOiJob3Jpem9udGFsX3J1bGUiLGI6Il4tezMsfSIsZToiJCJ9LHtiOiJcXFsuKz9cXF1cXCguKz9cXCkiLHJCOnRydWUsYzpbe2NOOiJsaW5rX2xhYmVsIixiOiJcXFsuK1xcXSJ9LHtjTjoibGlua191cmwiLGI6IlxcKCIsZToiXFwpIixlQjp0cnVlLGVFOnRydWV9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3NzPWZ1bmN0aW9uKGEpe3ZhciBiPSJbYS16QS1aLV1bYS16QS1aMC05Xy1dKiI7dmFyIGM9e2NOOiJmdW5jdGlvbiIsYjpiKyJcXCgiLGU6IlxcKSIsYzpbInNlbGYiLGEuTk0sYS5BU00sYS5RU01dfTtyZXR1cm57Y0k6dHJ1ZSxpOiJbPS98J10iLGM6W2EuQ0JMQ0xNLHtjTjoiaWQiLGI6IlxcI1tBLVphLXowLTlfLV0rIn0se2NOOiJjbGFzcyIsYjoiXFwuW0EtWmEtejAtOV8tXSsiLHI6MH0se2NOOiJhdHRyX3NlbGVjdG9yIixiOiJcXFsiLGU6IlxcXSIsaToiJCJ9LHtjTjoicHNldWRvIixiOiI6KDopP1thLXpBLVowLTlcXF9cXC1cXCtcXChcXClcXFwiXFwnXSsifSx7Y046ImF0X3J1bGUiLGI6IkAoZm9udC1mYWNlfHBhZ2UpIixsOiJbYS16LV0rIixrOiJmb250LWZhY2UgcGFnZSJ9LHtjTjoiYXRfcnVsZSIsYjoiQCIsZToiW3s7XSIsYzpbe2NOOiJrZXl3b3JkIixiOi9cUysvfSx7YjovXHMvLGVXOnRydWUsZUU6dHJ1ZSxyOjAsYzpbYyxhLkFTTSxhLlFTTSxhLk5NXX1dfSx7Y046InRhZyIsYjpiLHI6MH0se2NOOiJydWxlcyIsYjoieyIsZToifSIsaToiW15cXHNdIixyOjAsYzpbYS5DQkxDTE0se2NOOiJydWxlIixiOiJbXlxcc10iLHJCOnRydWUsZToiOyIsZVc6dHJ1ZSxjOlt7Y046ImF0dHJpYnV0ZSIsYjoiW0EtWlxcX1xcLlxcLV0rIixlOiI6IixlRTp0cnVlLGk6IlteXFxzXSIsc3RhcnRzOntjTjoidmFsdWUiLGVXOnRydWUsZUU6dHJ1ZSxjOltjLGEuTk0sYS5RU00sYS5BU00sYS5DQkxDTE0se2NOOiJoZXhjb2xvciIsYjoiI1swLTlBLUZhLWZdKyJ9LHtjTjoiaW1wb3J0YW50IixiOiIhaW1wb3J0YW50In1dfX1dfV19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmh0dHA9ZnVuY3Rpb24oYSl7cmV0dXJue2k6IlxcUyIsYzpbe2NOOiJzdGF0dXMiLGI6Il5IVFRQL1swLTlcXC5dKyIsZToiJCIsYzpbe2NOOiJudW1iZXIiLGI6IlxcYlxcZHszfVxcYiJ9XX0se2NOOiJyZXF1ZXN0IixiOiJeW0EtWl0rICguKj8pIEhUVFAvWzAtOVxcLl0rJCIsckI6dHJ1ZSxlOiIkIixjOlt7Y046InN0cmluZyIsYjoiICIsZToiICIsZUI6dHJ1ZSxlRTp0cnVlfV19LHtjTjoiYXR0cmlidXRlIixiOiJeXFx3IixlOiI6ICIsZUU6dHJ1ZSxpOiJcXG58XFxzfD0iLHN0YXJ0czp7Y046InN0cmluZyIsZToiJCJ9fSx7YjoiXFxuXFxuIixzdGFydHM6e3NMOiIiLGVXOnRydWV9fV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhPWZ1bmN0aW9uKGEpe3JldHVybntrOiJmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0IGZvciB0cnVlIHdoaWxlIGxvbmcgdGhyb3cgc3RyaWN0ZnAgZmluYWxseSBwcm90ZWN0ZWQgaW1wb3J0IG5hdGl2ZSBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgYnJlYWsgdHJhbnNpZW50IG5ldyBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyIsYzpbe2NOOiJqYXZhZG9jIixiOiIvXFwqXFwqIixlOiJcXCovIixjOlt7Y046ImphdmFkb2N0YWciLGI6IihefFxccylAW0EtWmEtel0rIn1dLHI6MTB9LGEuQ0xDTSxhLkNCTENMTSxhLkFTTSxhLlFTTSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyBpbnRlcmZhY2UiLGVFOnRydWUsaToiOiIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMgaW1wbGVtZW50cyIscjoxMH0se2NOOiJ0aXRsZSIsYjphLlVJUn1dfSxhLkNOTSx7Y046ImFubm90YXRpb24iLGI6IkBbQS1aYS16XSsifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5waHA9ZnVuY3Rpb24oYSl7dmFyIGU9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkK1thLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSoifTt2YXIgYj1bYS5pbmhlcml0KGEuQVNNLHtpOm51bGx9KSxhLmluaGVyaXQoYS5RU00se2k6bnVsbH0pLHtjTjoic3RyaW5nIixiOidiIicsZTonIicsYzpbYS5CRV19LHtjTjoic3RyaW5nIixiOiJiJyIsZToiJyIsYzpbYS5CRV19XTt2YXIgYz1bYS5CTk0sYS5DTk1dO3ZhciBkPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3JldHVybntjSTp0cnVlLGw6YS5VSVIsazoiYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciB3aGlsZSBpc3NldCBwdWJsaWMgcHJvdGVjdGVkIGV4aXQgZm9yZWFjaCB0aHJvdyBlbHNlaWYgaW5jbHVkZSBfX0ZJTEVfXyBlbXB0eSByZXF1aXJlX29uY2UgZG8geG9yIHJldHVybiBpbXBsZW1lbnRzIHBhcmVudCBjbG9uZSB1c2UgX19DTEFTU19fIF9fTElORV9fIGVsc2UgYnJlYWsgcHJpbnQgZXZhbCBuZXcgY2F0Y2ggX19NRVRIT0RfXyBjYXNlIGV4Y2VwdGlvbiBkZWZhdWx0IGRpZSByZXF1aXJlIF9fRlVOQ1RJT05fXyBlbmRkZWNsYXJlIGZpbmFsIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSBlbmRmb3IgZW5kaWYgZGVjbGFyZSB1bnNldCB0cnVlIGZhbHNlIG5hbWVzcGFjZSB0cmFpdCBnb3RvIGluc3RhbmNlb2YgaW5zdGVhZG9mIF9fRElSX18gX19OQU1FU1BBQ0VfXyB5aWVsZCBmaW5hbGx5IixjOlthLkNMQ00sYS5IQ00se2NOOiJjb21tZW50IixiOiIvXFwqIixlOiJcXCovIixjOlt7Y046InBocGRvYyIsYjoiXFxzQFtBLVphLXpdKyJ9XX0se2NOOiJjb21tZW50IixiOiJfX2hhbHRfY29tcGlsZXIuKz87IixlVzp0cnVlLGs6Il9faGFsdF9jb21waWxlciIsbDphLlVJUn0se2NOOiJzdHJpbmciLGI6Ijw8PFsnXCJdP1xcdytbJ1wiXT8kIixlOiJeXFx3KzsiLGM6W2EuQkVdfSx7Y046InByZXByb2Nlc3NvciIsYjoiPFxcP3BocCIscjoxMH0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IlxcPz4ifSxlLHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6InsiLGs6ImZ1bmN0aW9uIixpOiJcXCR8XFxbfCUiLGM6W2Qse2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic2VsZiIsZSxhLkNCTENMTV0uY29uY2F0KGIpLmNvbmNhdChjKX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyIsaToiWzpcXChcXCRdIixjOlt7YldLOnRydWUsZVc6dHJ1ZSxrOiJleHRlbmRzIixjOltkXX0sZF19LHtiOiI9PiJ9XS5jb25jYXQoYikuY29uY2F0KGMpfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucHl0aG9uPWZ1bmN0aW9uKGEpe3ZhciBmPXtjTjoicHJvbXB0IixiOi9eKD4+PnxcLlwuXC4pIC99O3ZhciBjPVt7Y046InN0cmluZyIsYjovKHV8Yik/cj8nJycvLGU6LycnJy8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fGIpP3I/IiIiLyxlOi8iIiIvLGM6W2ZdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKScvLGU6LycvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKSIvLGU6LyIvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8oYnxiciknLyxlOi8nLyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6LyhifGJyKSIvLGU6LyIvLGM6W2EuQkVdfV0uY29uY2F0KFthLkFTTSxhLlFTTV0pO3ZhciBlPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3ZhciBkPXtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6WyJzZWxmIixhLkNOTSxmXS5jb25jYXQoYyl9O3ZhciBiPXtiV0s6dHJ1ZSxlOi86LyxpOi9bJHs9O1xuXS8sYzpbZSxkXSxyOjEwfTtyZXR1cm57azp7a2V5d29yZDoiYW5kIGVsaWYgaXMgZ2xvYmFsIGFzIGluIGlmIGZyb20gcmFpc2UgZm9yIGV4Y2VwdCBmaW5hbGx5IHByaW50IGltcG9ydCBwYXNzIHJldHVybiBleGVjIGVsc2UgYnJlYWsgbm90IHdpdGggY2xhc3MgYXNzZXJ0IHlpZWxkIHRyeSB3aGlsZSBjb250aW51ZSBkZWwgb3IgZGVmIGxhbWJkYSBub25sb2NhbHwxMCBOb25lIFRydWUgRmFsc2UiLGJ1aWx0X2luOiJFbGxpcHNpcyBOb3RJbXBsZW1lbnRlZCJ9LGk6Lyg8XC98LT58XD8pLyxjOmMuY29uY2F0KFtmLGEuSENNLGEuaW5oZXJpdChiLHtjTjoiZnVuY3Rpb24iLGs6ImRlZiJ9KSxhLmluaGVyaXQoYix7Y046ImNsYXNzIixrOiJjbGFzcyJ9KSxhLkNOTSx7Y046ImRlY29yYXRvciIsYjovQC8sZTovJC99LHtiOi9cYihwcmludHxleGVjKVwoL31dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnNxbD1mdW5jdGlvbihhKXtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046Im9wZXJhdG9yIixiOiIoYmVnaW58ZW5kfHN0YXJ0fGNvbW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxyZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNlfHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hfGdyYW50KVxcYig/ITopIixlOiI7IixlVzp0cnVlLGs6e2tleXdvcmQ6ImFsbCBwYXJ0aWFsIGdsb2JhbCBtb250aCBjdXJyZW50X3RpbWVzdGFtcCB1c2luZyBnbyByZXZva2Ugc21hbGxpbnQgaW5kaWNhdG9yIGVuZC1leGVjIGRpc2Nvbm5lY3Qgem9uZSB3aXRoIGNoYXJhY3RlciBhc3NlcnRpb24gdG8gYWRkIGN1cnJlbnRfdXNlciB1c2FnZSBpbnB1dCBsb2NhbCBhbHRlciBtYXRjaCBjb2xsYXRlIHJlYWwgdGhlbiByb2xsYmFjayBnZXQgcmVhZCB0aW1lc3RhbXAgc2Vzc2lvbl91c2VyIG5vdCBpbnRlZ2VyIGJpdCB1bmlxdWUgZGF5IG1pbnV0ZSBkZXNjIGluc2VydCBleGVjdXRlIGxpa2UgaWxpa2V8MiBsZXZlbCBkZWNpbWFsIGRyb3AgY29udGludWUgaXNvbGF0aW9uIGZvdW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvbWFpbiByaWdodCBuYXRpb25hbCBzb21lIG1vZHVsZSB0cmFuc2FjdGlvbiByZWxhdGl2ZSBzZWNvbmQgY29ubmVjdCBlc2NhcGUgY2xvc2Ugc3lzdGVtX3VzZXIgZm9yIGRlZmVycmVkIHNlY3Rpb24gY2FzdCBjdXJyZW50IHNxbHN0YXRlIGFsbG9jYXRlIGludGVyc2VjdCBkZWFsbG9jYXRlIG51bWVyaWMgcHVibGljIHByZXNlcnZlIGZ1bGwgZ290byBpbml0aWFsbHkgYXNjIG5vIGtleSBvdXRwdXQgY29sbGF0aW9uIGdyb3VwIGJ5IHVuaW9uIHNlc3Npb24gYm90aCBsYXN0IGxhbmd1YWdlIGNvbnN0cmFpbnQgY29sdW1uIG9mIHNwYWNlIGZvcmVpZ24gZGVmZXJyYWJsZSBwcmlvciBjb25uZWN0aW9uIHVua25vd24gYWN0aW9uIGNvbW1pdCB2aWV3IG9yIGZpcnN0IGludG8gZmxvYXQgeWVhciBwcmltYXJ5IGNhc2NhZGVkIGV4Y2VwdCByZXN0cmljdCBzZXQgcmVmZXJlbmNlcyBuYW1lcyB0YWJsZSBvdXRlciBvcGVuIHNlbGVjdCBzaXplIGFyZSByb3dzIGZyb20gcHJlcGFyZSBkaXN0aW5jdCBsZWFkaW5nIGNyZWF0ZSBvbmx5IG5leHQgaW5uZXIgYXV0aG9yaXphdGlvbiBzY2hlbWEgY29ycmVzcG9uZGluZyBvcHRpb24gZGVjbGFyZSBwcmVjaXNpb24gaW1tZWRpYXRlIGVsc2UgdGltZXpvbmVfbWludXRlIGV4dGVybmFsIHZhcnlpbmcgdHJhbnNsYXRpb24gdHJ1ZSBjYXNlIGV4Y2VwdGlvbiBqb2luIGhvdXIgZGVmYXVsdCBkb3VibGUgc2Nyb2xsIHZhbHVlIGN1cnNvciBkZXNjcmlwdG9yIHZhbHVlcyBkZWMgZmV0Y2ggcHJvY2VkdXJlIGRlbGV0ZSBhbmQgZmFsc2UgaW50IGlzIGRlc2NyaWJlIGNoYXIgYXMgYXQgaW4gdmFyY2hhciBudWxsIHRyYWlsaW5nIGFueSBhYnNvbHV0ZSBjdXJyZW50X3RpbWUgZW5kIGdyYW50IHByaXZpbGVnZXMgd2hlbiBjcm9zcyBjaGVjayB3cml0ZSBjdXJyZW50X2RhdGUgcGFkIGJlZ2luIHRlbXBvcmFyeSBleGVjIHRpbWUgdXBkYXRlIGNhdGFsb2cgdXNlciBzcWwgZGF0ZSBvbiBpZGVudGl0eSB0aW1lem9uZV9ob3VyIG5hdHVyYWwgd2hlbmV2ZXIgaW50ZXJ2YWwgd29yayBvcmRlciBjYXNjYWRlIGRpYWdub3N0aWNzIG5jaGFyIGhhdmluZyBsZWZ0IGNhbGwgZG8gaGFuZGxlciBsb2FkIHJlcGxhY2UgdHJ1bmNhdGUgc3RhcnQgbG9jayBzaG93IHByYWdtYSBleGlzdHMgbnVtYmVyIHRyaWdnZXIgaWYgYmVmb3JlIGFmdGVyIGVhY2ggcm93IixhZ2dyZWdhdGU6ImNvdW50IHN1bSBtaW4gbWF4IGF2ZyJ9LGM6W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOlthLkJFLHtiOiInJyJ9XSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlthLkJFLHtiOiciIid9XSxyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlthLkJFXX0sYS5DTk1dfSxhLkNCTENMTSx7Y046ImNvbW1lbnQiLGI6Ii0tIixlOiIkIn1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaW5pPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGk6IlteXFxzXSIsYzpbe2NOOiJjb21tZW50IixiOiI7IixlOiIkIn0se2NOOiJ0aXRsZSIsYjoiXlxcWyIsZToiXFxdIn0se2NOOiJzZXR0aW5nIixiOiJeW2EtejAtOVxcW1xcXV8tXStbIFxcdF0qPVsgXFx0XSoiLGU6IiQiLGM6W3tjTjoidmFsdWUiLGVXOnRydWUsazoib24gb2ZmIHRydWUgZmFsc2UgeWVzIG5vIixjOlthLlFTTSxhLk5NXSxyOjB9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucGVybD1mdW5jdGlvbihlKXt2YXIgYT0iZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjIG1hIHN5c3dyaXRlIHRyIHNlbmQgdW1hc2sgc3lzb3BlbiBzaG13cml0ZSB2ZWMgcXggdXRpbWUgbG9jYWwgb2N0IHNlbWN0bCBsb2NhbHRpbWUgcmVhZHBpcGUgZG8gcmV0dXJuIGZvcm1hdCByZWFkIHNwcmludGYgZGJtb3BlbiBwb3AgZ2V0cGdycCBub3QgZ2V0cHduYW0gcmV3aW5kZGlyIHFxZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50IHNodXRkb3duIGR1bXAgY2hvbXAgY29ubmVjdCBnZXRzb2NrbmFtZSBkaWUgc29ja2V0cGFpciBjbG9zZSBmbG9jayBleGlzdHMgaW5kZXggc2htZ2V0c3ViIGZvciBlbmRwd2VudCByZWRvIGxzdGF0IG1zZ2N0bCBzZXRwZ3JwIGFicyBleGl0IHNlbGVjdCBwcmludCByZWYgZ2V0aG9zdGJ5YWRkciB1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCBnZXRwZWVybmFtZSByZWN2IGxvZyBzZXRzb2Nrb3B0IGNvcyBsYXN0IHJldmVyc2UgZ2V0aG9zdGJ5bmFtZSBnZXRncm5hbSBzdHVkeSBmb3JtbGluZSBlbmRob3N0ZW50IHRpbWVzIGNob3AgbGVuZ3RoIGdldGhvc3RlbnQgZ2V0bmV0ZW50IHBhY2sgZ2V0cHJvdG9lbnQgZ2V0c2VydmJ5bmFtZSByYW5kIG1rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgZ2V0c29ja29wdCBnZXRwcmlvcml0eSByaW5kZXggd2FudGFycmF5IGhleCBzeXN0ZW0gZ2V0c2VydmJ5cG9ydCBlbmRzZXJ2ZW50IGludCBjaHIgdW50aWUgcm1kaXIgcHJvdG90eXBlIHRlbGwgbGlzdGVuIGZvcmsgc2htcmVhZCB1Y2ZpcnN0IHNldHByb3RvZW50IGVsc2Ugc3lzc2VlayBsaW5rIGdldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciBsY2ZpcnN0IHVudGlsIHdhcm4gd2hpbGUgdmFsdWVzIHNoaWZ0IHRlbGxkaXIgZ2V0cHd1aWQgbXkgZ2V0cHJvdG9ieW51bWJlciBkZWxldGUgYW5kIHNvcnQgdWMgZGVmaW5lZCBzcmFuZCBhY2NlcHQgcGFja2FnZSBzZWVrZGlyIGdldHByb3RvYnluYW1lIHNlbW9wIG91ciByZW5hbWUgc2VlayBpZiBxfDAgY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoIHRpZSBzaW4gbXNnZ2V0IG1hcCBzdGF0IGdldGxvZ2luIHVubGVzcyBlbHNpZiB0cnVuY2F0ZSBleGVjIGtleXMgZ2xvYiB0aWVkIGNsb3NlZGlyaW9jdGwgc29ja2V0IHJlYWRsaW5rIGV2YWwgeG9yIHJlYWRsaW5lIGJpbm1vZGUgc2V0c2VydmVudCBlb2Ygb3JkIGJpbmQgYWxhcm0gcGlwZSBhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbiI7dmFyIGQ9e2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToiXFx9IixrOmEscjoxMH07dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkIn07dmFyIGk9e2NOOiJ2YXJpYWJsZSIsYjoiW1xcJFxcJVxcQFxcKl0oXFxeXFx3XFxifCNcXHcrKFxcOlxcOlxcdyspKnxbXlxcc1xcd3tdfHtcXHcrfXxcXHcrKFxcOlxcOlxcdyopKikifTt2YXIgZj1bZS5CRSxkLGIsaV07dmFyIGg9e2I6Ii0+IixjOlt7YjplLklSfSx7YjoieyIsZToifSJ9XX07dmFyIGc9e2NOOiJjb21tZW50IixiOiJeKF9fRU5EX198X19EQVRBX18pIixlOiJcXG4kIixyOjV9O3ZhciBjPVtiLGksZS5IQ00sZyx7Y046ImNvbW1lbnQiLGI6Il5cXD1cXHciLGU6IlxcPWN1dCIsZVc6dHJ1ZX0saCx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFwoIixlOiJcXCkiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxceyIsZToiXFx9IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx8IixlOiJcXHwiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InF3XFxzK3EiLGU6InEiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltlLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOmYscjowfSx7Y046InN0cmluZyIsYjoiYCIsZToiYCIsYzpbZS5CRV19LHtjTjoic3RyaW5nIixiOiJ7XFx3K30iLHI6MH0se2NOOiJzdHJpbmciLGI6Ii0/XFx3K1xccypcXD1cXD4iLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2I6IigiK2UuUlNSKyJ8XFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxiKVxccyoiLGs6InNwbGl0IHJldHVybiBwcmludCByZXZlcnNlIGdyZXAiLHI6MCxjOltlLkhDTSxnLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2UuQkVdLHI6MH1dfSx7Y046InN1YiIsYldLOnRydWUsZToiKFxccypcXCguKj9cXCkpP1s7e10iLGs6InN1YiIscjo1fSx7Y046Im9wZXJhdG9yIixiOiItXFx3XFxiIixyOjB9XTtkLmM9YztoLmNbMV0uYz1jO3JldHVybntrOmEsYzpjfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMub2JqZWN0aXZlYz1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgc2l6ZW9mIHR5cGVkZWYgY29uc3Qgc3RydWN0IGZvciB1bmlvbiB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCBtdXRhYmxlIGlmIHB1YmxpYyBkbyByZXR1cm4gZ290byB2b2lkIGVudW0gZWxzZSBicmVhayBleHRlcm4gYXNtIGNhc2Ugc2hvcnQgZGVmYXVsdCBkb3VibGUgdGhyb3cgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSByZWFkb25seSBhc3NpZ24gcHJvcGVydHkgc2VsZiBzeW5jaHJvbml6ZWQgZW5kIHN5bnRoZXNpemUgaWQgb3B0aW9uYWwgcmVxdWlyZWQgbm9uYXRvbWljIHN1cGVyIHVuaWNoYXIgZmluYWxseSBkeW5hbWljIElCT3V0bGV0IElCQWN0aW9uIHNlbGVjdG9yIHN0cm9uZyB3ZWFrIHJlYWRvbmx5IixsaXRlcmFsOiJmYWxzZSB0cnVlIEZBTFNFIFRSVUUgbmlsIFlFUyBOTyBOVUxMIixidWlsdF9pbjoiTlNTdHJpbmcgTlNEaWN0aW9uYXJ5IENHUmVjdCBDR1BvaW50IFVJQnV0dG9uIFVJTGFiZWwgVUlUZXh0VmlldyBVSVdlYlZpZXcgTUtNYXBWaWV3IFVJU2VnbWVudGVkQ29udHJvbCBOU09iamVjdCBVSVRhYmxlVmlld0RlbGVnYXRlIFVJVGFibGVWaWV3RGF0YVNvdXJjZSBOU1RocmVhZCBVSUFjdGl2aXR5SW5kaWNhdG9yIFVJVGFiYmFyIFVJVG9vbEJhciBVSUJhckJ1dHRvbkl0ZW0gVUlJbWFnZVZpZXcgTlNBdXRvcmVsZWFzZVBvb2wgVUlUYWJsZVZpZXcgQk9PTCBOU0ludGVnZXIgQ0dGbG9hdCBOU0V4Y2VwdGlvbiBOU0xvZyBOU011dGFibGVTdHJpbmcgTlNNdXRhYmxlQXJyYXkgTlNNdXRhYmxlRGljdGlvbmFyeSBOU1VSTCBOU0luZGV4UGF0aCBDR1NpemUgVUlUYWJsZVZpZXdDZWxsIFVJVmlldyBVSVZpZXdDb250cm9sbGVyIFVJTmF2aWdhdGlvbkJhciBVSU5hdmlnYXRpb25Db250cm9sbGVyIFVJVGFiQmFyQ29udHJvbGxlciBVSVBvcG92ZXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXJEZWxlZ2F0ZSBVSUltYWdlIE5TTnVtYmVyIFVJU2VhcmNoQmFyIE5TRmV0Y2hlZFJlc3VsdHNDb250cm9sbGVyIE5TRmV0Y2hlZFJlc3VsdHNDaGFuZ2VUeXBlIFVJU2Nyb2xsVmlldyBVSVNjcm9sbFZpZXdEZWxlZ2F0ZSBVSUVkZ2VJbnNldHMgVUlDb2xvciBVSUZvbnQgVUlBcHBsaWNhdGlvbiBOU05vdEZvdW5kIE5TTm90aWZpY2F0aW9uQ2VudGVyIE5TTm90aWZpY2F0aW9uIFVJTG9jYWxOb3RpZmljYXRpb24gTlNCdW5kbGUgTlNGaWxlTWFuYWdlciBOU1RpbWVJbnRlcnZhbCBOU0RhdGUgTlNDYWxlbmRhciBOU1VzZXJEZWZhdWx0cyBVSVdpbmRvdyBOU1JhbmdlIE5TQXJyYXkgTlNFcnJvciBOU1VSTFJlcXVlc3QgTlNVUkxDb25uZWN0aW9uIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gTVBNb3ZpZVBsYXllckNvbnRyb2xsZXIgZGlzcGF0Y2hfb25jZV90IGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hfc3luYyBkaXNwYXRjaF9hc3luYyBkaXNwYXRjaF9vbmNlIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLGEuUVNNLHtjTjoic3RyaW5nIixiOiInIixlOiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIsYjoiI2ltcG9ydCIsZToiJCIsYzpbe2NOOiJ0aXRsZSIsYjonIicsZTonIid9LHtjTjoidGl0bGUiLGI6IjwiLGU6Ij4ifV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIn0se2NOOiJjbGFzcyIsYldLOnRydWUsZToiKHt8JCkiLGs6ImludGVyZmFjZSBjbGFzcyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiIsYzpbe2NOOiJpZCIsYjphLlVJUn1dfSx7Y046InZhcmlhYmxlIixiOiJcXC4iK2EuVUlSLHI6MH1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY29mZmVlc2NyaXB0PWZ1bmN0aW9uKGMpe3ZhciBiPXtrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSBuZXcgZG8gcmV0dXJuIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB0aHJvdyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBkZWJ1Z2dlciBzdXBlciB0aGVuIHVubGVzcyB1bnRpbCBsb29wIG9mIGJ5IHdoZW4gYW5kIG9yIGlzIGlzbnQgbm90IixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIHllcyBubyBvbiBvZmYiLHJlc2VydmVkOiJjYXNlIGRlZmF1bHQgZnVuY3Rpb24gdmFyIHZvaWQgd2l0aCBjb25zdCBsZXQgZW51bSBleHBvcnQgaW1wb3J0IG5hdGl2ZSBfX2hhc1Byb3AgX19leHRlbmRzIF9fc2xpY2UgX19iaW5kIF9faW5kZXhPZiIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGV4cG9ydHMgZ2xvYmFsIHdpbmRvdyBkb2N1bWVudCJ9O3ZhciBhPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiO3ZhciBmPXtjTjoidGl0bGUiLGI6YX07dmFyIGU9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsazpiLH07dmFyIGQ9W2MuQk5NLGMuaW5oZXJpdChjLkNOTSx7c3RhcnRzOntlOiIoXFxzKi8pPyIscjowfX0pLHtjTjoic3RyaW5nIixiOiInJyciLGU6IicnJyIsYzpbYy5CRV19LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltjLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciIiInLGU6JyIiIicsYzpbYy5CRSxlXX0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2MuQkUsZV0scjowfSx7Y046InJlZ2V4cCIsYjoiLy8vIixlOiIvLy8iLGM6W2MuSENNXX0se2NOOiJyZWdleHAiLGI6Ii8vW2dpbV0qIixyOjB9LHtjTjoicmVnZXhwIixiOiIvXFxTKFxcXFwufFteXFxuXSkqPy9bZ2ltXSooPz1cXHN8XFxXfCQpIn0se2NOOiJwcm9wZXJ0eSIsYjoiQCIrYX0se2I6ImAiLGU6ImAiLGVCOnRydWUsZUU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9XTtlLmM9ZDtyZXR1cm57azpiLGM6ZC5jb25jYXQoW3tjTjoiY29tbWVudCIsYjoiIyMjIixlOiIjIyMifSxjLkhDTSx7Y046ImZ1bmN0aW9uIixiOiIoIithKyJcXHMqPVxccyopPyhcXCguKlxcKSk/XFxzKlstPV0+IixlOiJbLT1dPiIsckI6dHJ1ZSxjOltmLHtjTjoicGFyYW1zIixiOiJcXCgiLHJCOnRydWUsYzpbe2I6L1woLyxlOi9cKS8sazpiLGM6WyJzZWxmIl0uY29uY2F0KGQpfV19XX0se2NOOiJjbGFzcyIsYldLOnRydWUsazoiY2xhc3MiLGU6IiQiLGk6Ils6XFxbXFxdXSIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMiLGVXOnRydWUsaToiOiIsYzpbZl19LGZdfSx7Y046ImF0dHJpYnV0ZSIsYjphKyI6IixlOiI6IixyQjp0cnVlLGVFOnRydWV9XSl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5uZ2lueD1mdW5jdGlvbihiKXt2YXIgYz1be2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkKyJ9LHtjTjoidmFyaWFibGUiLGI6IlxcJHsiLGU6In0ifSx7Y046InZhcmlhYmxlIixiOiJbXFwkXFxAXSIrYi5VSVJ9XTt2YXIgYT17ZVc6dHJ1ZSxsOiJbYS16L19dKyIsazp7YnVpbHRfaW46Im9uIG9mZiB5ZXMgbm8gdHJ1ZSBmYWxzZSBub25lIGJsb2NrZWQgZGVidWcgaW5mbyBub3RpY2Ugd2FybiBlcnJvciBjcml0IHNlbGVjdCBicmVhayBsYXN0IHBlcm1hbmVudCByZWRpcmVjdCBrcXVldWUgcnRzaWcgZXBvbGwgcG9sbCAvZGV2L3BvbGwifSxyOjAsaToiPT4iLGM6W2IuSENNLHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbYi5CRV0uY29uY2F0KGMpLHI6MH0se2NOOiJ1cmwiLGI6IihbYS16XSspOi8iLGU6IlxccyIsZVc6dHJ1ZSxlRTp0cnVlfSx7Y046InJlZ2V4cCIsYjoiXFxzXFxeIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6In5cXCo/XFxzKyIsZToiXFxzfHt8OyIsckU6dHJ1ZSxjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoicmVnZXhwIixiOiJcXCooXFwuW2EtelxcLV0rKSsiLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IihbYS16XFwtXStcXC4pK1xcKiIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046Im51bWJlciIsYjoiXFxiXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30oOlxcZHsxLDV9KT9cXGIifSx7Y046Im51bWJlciIsYjoiXFxiXFxkK1trS21NZ0dkc2hkd3ldKlxcYiIscjowfV0uY29uY2F0KGMpfTtyZXR1cm57YzpbYi5IQ00se2I6Yi5VSVIrIlxccyIsZToiO3x7IixyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6Yi5VSVIsc3RhcnRzOmF9XSxyOjB9XSxpOiJbXlxcc1xcfV0ifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuanNvbj1mdW5jdGlvbihhKXt2YXIgZT17bGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIn07dmFyIGQ9W2EuUVNNLGEuQ05NXTt2YXIgYz17Y046InZhbHVlIixlOiIsIixlVzp0cnVlLGVFOnRydWUsYzpkLGs6ZX07dmFyIGI9e2I6InsiLGU6In0iLGM6W3tjTjoiYXR0cmlidXRlIixiOidcXHMqIicsZTonIlxccyo6XFxzKicsZUI6dHJ1ZSxlRTp0cnVlLGM6W2EuQkVdLGk6IlxcbiIsc3RhcnRzOmN9XSxpOiJcXFMifTt2YXIgZj17YjoiXFxbIixlOiJcXF0iLGM6W2EuaW5oZXJpdChjLHtjTjpudWxsfSldLGk6IlxcUyJ9O2Quc3BsaWNlKGQubGVuZ3RoLDAsYixmKTtyZXR1cm57YzpkLGs6ZSxpOiJcXFMifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuYXBhY2hlPWZ1bmN0aW9uKGEpe3ZhciBiPXtjTjoibnVtYmVyIixiOiJbXFwkJV1cXGQrIn07cmV0dXJue2NJOnRydWUsYzpbYS5IQ00se2NOOiJ0YWciLGI6IjwvPyIsZToiPiJ9LHtjTjoia2V5d29yZCIsYjovXHcrLyxyOjAsazp7Y29tbW9uOiJvcmRlciBkZW55IGFsbG93IHNldGVudiByZXdyaXRlcnVsZSByZXdyaXRlZW5naW5lIHJld3JpdGVjb25kIGRvY3VtZW50cm9vdCBzZXRoYW5kbGVyIGVycm9yZG9jdW1lbnQgbG9hZG1vZHVsZSBvcHRpb25zIGhlYWRlciBsaXN0ZW4gc2VydmVycm9vdCBzZXJ2ZXJuYW1lIn0sc3RhcnRzOntlOi8kLyxyOjAsazp7bGl0ZXJhbDoib24gb2ZmIGFsbCJ9LGM6W3tjTjoic3FicmFja2V0IixiOiJcXHNcXFsiLGU6IlxcXSQifSx7Y046ImNicmFja2V0IixiOiJbXFwkJV1cXHsiLGU6IlxcfSIsYzpbInNlbGYiLGJdfSxiLGEuUVNNXX19XSxpOi9cUy99fShobGpzKTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImZhbHNlIGludCBmbG9hdCB3aGlsZSBwcml2YXRlIGNoYXIgY2F0Y2ggZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mIGR5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3Qgc3RydWN0IGZvciBzdGF0aWNfY2FzdHwxMCB1bmlvbiBuYW1lc3BhY2UgdW5zaWduZWQgbG9uZyB0aHJvdyB2b2xhdGlsZSBzdGF0aWMgcHJvdGVjdGVkIGJvb2wgdGVtcGxhdGUgbXV0YWJsZSBpZiBwdWJsaWMgZnJpZW5kIGRvIHJldHVybiBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgbmV3IGV4dGVybiB1c2luZyB0cnVlIGNsYXNzIGFzbSBjYXNlIHR5cGVpZCBzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgZGVsZXRlIGFsaWdub2YgY2hhcjE2X3QgY2hhcjMyX3QgY29uc3RleHByIGRlY2x0eXBlIG5vZXhjZXB0IG51bGxwdHIgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgX0Jvb2wgY29tcGxleCIsYnVpbHRfaW46InN0ZCBzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0cmluZ3N0cmVhbSBpc3RyaW5nc3RyZWFtIG9zdHJpbmdzdHJlYW0gYXV0b19wdHIgZGVxdWUgbGlzdCBxdWV1ZSBzdGFjayB2ZWN0b3IgbWFwIHNldCBiaXRzZXQgbXVsdGlzZXQgbXVsdGltYXAgdW5vcmRlcmVkX3NldCB1bm9yZGVyZWRfbWFwIHVub3JkZXJlZF9tdWx0aXNldCB1bm9yZGVyZWRfbXVsdGltYXAgYXJyYXkgc2hhcmVkX3B0ciJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJ1xcXFw/LiIsZToiJyIsaToiLiJ9LHtjTjoibnVtYmVyIixiOiJcXGIoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykodXxVfGx8THx1bHxVTHxmfEYpIn0sYS5DTk0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGM6W3tiOiI8IixlOiI+IixpOiJcXG4ifSxhLkNMQ01dfSx7Y046InN0bF9jb250YWluZXIiLGI6IlxcYihkZXF1ZXxsaXN0fHF1ZXVlfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsZToiPiIsazpiLHI6MTAsYzpbInNlbGYiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFrZWZpbGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6YS5CRX07cmV0dXJue2M6W2EuSENNLHtiOi9eXHcrXHMqXFcqPS8sckI6dHJ1ZSxyOjAsc3RhcnRzOntjTjoiY29uc3RhbnQiLGU6L1xzKlxXKj0vLGVFOnRydWUsc3RhcnRzOntlOi8kLyxyOjAsYzpbYl0sfX19LHtjTjoidGl0bGUiLGI6L15bXHddKzpccyokL30se2NOOiJwaG9ueSIsYjovXlwuUEhPTlk6LyxlOi8kLyxrOiIuUEhPTlkiLGw6L1tcLlx3XSsvfSx7YjovXlx0Ky8sZTovJC8sYzpbYS5RU00sYl19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmdvPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIiLGNvbnN0YW50OiJ0cnVlIGZhbHNlIGlvdGEgbmlsIix0eXBlbmFtZToiYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUiLGJ1aWx0X2luOiJhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIn0se2NOOiJudW1iZXIiLGI6IlteYS16QS1aXzAtOV0oXFwtfFxcKyk/XFxkKyhcXC5cXGQrfFxcL1xcZCspPygoZHxlfGZ8bHxzKShcXCt8XFwtKT9cXGQrKT8iLHI6MH0sYS5DTk1dfX0oaGxqcyk7UEsHCBVZbU72dQAA9nUAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHN0YXRpY1xsaWJcanF1ZXJ5LmZvcm0ubWluLmpzLyohCiAqIGpRdWVyeSBGb3JtIFBsdWdpbgogKiB2ZXJzaW9uOiAzLjQ2LjAtMjAxMy4xMS4yMQogKiBSZXF1aXJlcyBqUXVlcnkgdjEuNSBvciBsYXRlcgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTS4gQWxzdXAKICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9mb3JtLwogKiBQcm9qZWN0IHJlcG9zaXRvcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxzdXAvZm9ybQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcy4KICogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtI2NvcHlyaWdodC1hbmQtbGljZW5zZQogKi8KKGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoWyJqcXVlcnkiXSxhKX1lbHNle2EoKHR5cGVvZihqUXVlcnkpIT0idW5kZWZpbmVkIik/alF1ZXJ5OndpbmRvdy5aZXB0byl9fShmdW5jdGlvbihmKXt2YXIgYz17fTtjLmZpbGVhcGk9ZigiPGlucHV0IHR5cGU9J2ZpbGUnLz4iKS5nZXQoMCkuZmlsZXMhPT11bmRlZmluZWQ7Yy5mb3JtZGF0YT13aW5kb3cuRm9ybURhdGEhPT11bmRlZmluZWQ7dmFyIGU9ISFmLmZuLnByb3A7Zi5mbi5hdHRyMj1mdW5jdGlvbigpe2lmKCFlKXtyZXR1cm4gdGhpcy5hdHRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZz10aGlzLnByb3AuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKChnJiZnLmpxdWVyeSl8fHR5cGVvZiBnPT09InN0cmluZyIpe3JldHVybiBnfXJldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmLmZuLmFqYXhTdWJtaXQ9ZnVuY3Rpb24oail7aWYoIXRoaXMubGVuZ3RoKXtkKCJhamF4U3VibWl0OiBza2lwcGluZyBzdWJtaXQgcHJvY2VzcyAtIG5vIGVsZW1lbnQgc2VsZWN0ZWQiKTtyZXR1cm4gdGhpc312YXIgaSxDLG0sbz10aGlzO2lmKHR5cGVvZiBqPT0iZnVuY3Rpb24iKXtqPXtzdWNjZXNzOmp9fWVsc2V7aWYoaj09PXVuZGVmaW5lZCl7aj17fX19aT1qLnR5cGV8fHRoaXMuYXR0cjIoIm1ldGhvZCIpO0M9ai51cmx8fHRoaXMuYXR0cjIoImFjdGlvbiIpO209KHR5cGVvZiBDPT09InN0cmluZyIpP2YudHJpbShDKToiIjttPW18fHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIjtpZihtKXttPShtLm1hdGNoKC9eKFteI10rKS8pfHxbXSlbMV19aj1mLmV4dGVuZCh0cnVlLHt1cmw6bSxzdWNjZXNzOmYuYWpheFNldHRpbmdzLnN1Y2Nlc3MsdHlwZTppfHxmLmFqYXhTZXR0aW5ncy50eXBlLGlmcmFtZVNyYzovXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZnx8IiIpPyJqYXZhc2NyaXB0OmZhbHNlIjoiYWJvdXQ6YmxhbmsifSxqKTt2YXIgdT17fTt0aGlzLnRyaWdnZXIoImZvcm0tcHJlLXNlcmlhbGl6ZSIsW3RoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXByZS1zZXJpYWxpemUgdHJpZ2dlciIpO3JldHVybiB0aGlzfWlmKGouYmVmb3JlU2VyaWFsaXplJiZqLmJlZm9yZVNlcmlhbGl6ZSh0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTZXJpYWxpemUgY2FsbGJhY2siKTtyZXR1cm4gdGhpc312YXIgbj1qLnRyYWRpdGlvbmFsO2lmKG49PT11bmRlZmluZWQpe249Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWx9dmFyIHM9W107dmFyIEUsRj10aGlzLmZvcm1Ub0FycmF5KGouc2VtYW50aWMscyk7aWYoai5kYXRhKXtqLmV4dHJhRGF0YT1qLmRhdGE7RT1mLnBhcmFtKGouZGF0YSxuKX1pZihqLmJlZm9yZVN1Ym1pdCYmai5iZWZvcmVTdWJtaXQoRix0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTdWJtaXQgY2FsbGJhY2siKTtyZXR1cm4gdGhpc310aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LXZhbGlkYXRlIixbRix0aGlzLGosdV0pO2lmKHUudmV0byl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IHZldG9lZCB2aWEgZm9ybS1zdWJtaXQtdmFsaWRhdGUgdHJpZ2dlciIpO3JldHVybiB0aGlzfXZhciB5PWYucGFyYW0oRixuKTtpZihFKXt5PSh5Pyh5KyImIitFKTpFKX1pZihqLnR5cGUudG9VcHBlckNhc2UoKT09IkdFVCIpe2oudXJsKz0oai51cmwuaW5kZXhPZigiPyIpPj0wPyImIjoiPyIpK3k7ai5kYXRhPW51bGx9ZWxzZXtqLmRhdGE9eX12YXIgSD1bXTtpZihqLnJlc2V0Rm9ybSl7SC5wdXNoKGZ1bmN0aW9uKCl7by5yZXNldEZvcm0oKX0pfWlmKGouY2xlYXJGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLmNsZWFyRm9ybShqLmluY2x1ZGVIaWRkZW4pfSl9aWYoIWouZGF0YVR5cGUmJmoudGFyZ2V0KXt2YXIgbD1qLnN1Y2Nlc3N8fGZ1bmN0aW9uKCl7fTtILnB1c2goZnVuY3Rpb24ocSl7dmFyIGs9ai5yZXBsYWNlVGFyZ2V0PyJyZXBsYWNlV2l0aCI6Imh0bWwiO2Yoai50YXJnZXQpW2tdKHEpLmVhY2gobCxhcmd1bWVudHMpfSl9ZWxzZXtpZihqLnN1Y2Nlc3Mpe0gucHVzaChqLnN1Y2Nlc3MpfX1qLnN1Y2Nlc3M9ZnVuY3Rpb24oSyxxLEwpe3ZhciBKPWouY29udGV4dHx8dGhpcztmb3IodmFyIEk9MCxrPUgubGVuZ3RoO0k8aztJKyspe0hbSV0uYXBwbHkoSixbSyxxLEx8fG8sb10pfX07aWYoai5lcnJvcil7dmFyIHo9ai5lcnJvcjtqLmVycm9yPWZ1bmN0aW9uKEosayxxKXt2YXIgST1qLmNvbnRleHR8fHRoaXM7ei5hcHBseShJLFtKLGsscSxvXSl9fWlmKGouY29tcGxldGUpe3ZhciBoPWouY29tcGxldGU7ai5jb21wbGV0ZT1mdW5jdGlvbihJLGspe3ZhciBxPWouY29udGV4dHx8dGhpcztoLmFwcGx5KHEsW0ksayxvXSl9fXZhciBEPWYoImlucHV0W3R5cGU9ZmlsZV06ZW5hYmxlZCIsdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcykudmFsKCkhPT0iIn0pO3ZhciBwPUQubGVuZ3RoPjA7dmFyIEI9Im11bHRpcGFydC9mb3JtLWRhdGEiO3ZhciB4PShvLmF0dHIoImVuY3R5cGUiKT09Qnx8by5hdHRyKCJlbmNvZGluZyIpPT1CKTt2YXIgdz1jLmZpbGVhcGkmJmMuZm9ybWRhdGE7ZCgiZmlsZUFQSSA6Iit3KTt2YXIgcj0ocHx8eCkmJiF3O3ZhciB2O2lmKGouaWZyYW1lIT09ZmFsc2UmJihqLmlmcmFtZXx8cikpe2lmKGouY2xvc2VLZWVwQWxpdmUpe2YuZ2V0KGouY2xvc2VLZWVwQWxpdmUsZnVuY3Rpb24oKXt2PUcoRil9KX1lbHNle3Y9RyhGKX19ZWxzZXtpZigocHx8eCkmJncpe3Y9dChGKX1lbHNle3Y9Zi5hamF4KGopfX1vLnJlbW92ZURhdGEoImpxeGhyIikuZGF0YSgianF4aHIiLHYpO2Zvcih2YXIgQT0wO0E8cy5sZW5ndGg7QSsrKXtzW0FdPW51bGx9dGhpcy50cmlnZ2VyKCJmb3JtLXN1Ym1pdC1ub3RpZnkiLFt0aGlzLGpdKTtyZXR1cm4gdGhpcztmdW5jdGlvbiBnKEspe3ZhciBMPWYucGFyYW0oSyxqLnRyYWRpdGlvbmFsKS5zcGxpdCgiJiIpO3ZhciBxPUwubGVuZ3RoO3ZhciBrPVtdO3ZhciBKLEk7Zm9yKEo9MDtKPHE7SisrKXtMW0pdPUxbSl0ucmVwbGFjZSgvXCsvZywiICIpO0k9TFtKXS5zcGxpdCgiPSIpO2sucHVzaChbZGVjb2RlVVJJQ29tcG9uZW50KElbMF0pLGRlY29kZVVSSUNvbXBvbmVudChJWzFdKV0pfXJldHVybiBrfWZ1bmN0aW9uIHQocSl7dmFyIGs9bmV3IEZvcm1EYXRhKCk7Zm9yKHZhciBJPTA7STxxLmxlbmd0aDtJKyspe2suYXBwZW5kKHFbSV0ubmFtZSxxW0ldLnZhbHVlKX1pZihqLmV4dHJhRGF0YSl7dmFyIEw9ZyhqLmV4dHJhRGF0YSk7Zm9yKEk9MDtJPEwubGVuZ3RoO0krKyl7aWYoTFtJXSl7ay5hcHBlbmQoTFtJXVswXSxMW0ldWzFdKX19fWouZGF0YT1udWxsO3ZhciBLPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaix7Y29udGVudFR5cGU6ZmFsc2UscHJvY2Vzc0RhdGE6ZmFsc2UsY2FjaGU6ZmFsc2UsdHlwZTppfHwiUE9TVCJ9KTtpZihqLnVwbG9hZFByb2dyZXNzKXtLLnhocj1mdW5jdGlvbigpe3ZhciBNPWYuYWpheFNldHRpbmdzLnhocigpO2lmKE0udXBsb2FkKXtNLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oUSl7dmFyIFA9MDt2YXIgTj1RLmxvYWRlZHx8US5wb3NpdGlvbjt2YXIgTz1RLnRvdGFsO2lmKFEubGVuZ3RoQ29tcHV0YWJsZSl7UD1NYXRoLmNlaWwoTi9PKjEwMCl9ai51cGxvYWRQcm9ncmVzcyhRLE4sTyxQKX0sZmFsc2UpfXJldHVybiBNfX1LLmRhdGE9bnVsbDt2YXIgSj1LLmJlZm9yZVNlbmQ7Sy5iZWZvcmVTZW5kPWZ1bmN0aW9uKE4sTSl7aWYoai5mb3JtRGF0YSl7TS5kYXRhPWouZm9ybURhdGF9ZWxzZXtNLmRhdGE9a31pZihKKXtKLmNhbGwodGhpcyxOLE0pfX07cmV0dXJuIGYuYWpheChLKX1mdW5jdGlvbiBHKGFmKXt2YXIgTD1vWzBdLEssYWIsVixhZCxZLE4sUSxPLFAsWixhYyxUO3ZhciBhaT1mLkRlZmVycmVkKCk7YWkuYWJvcnQ9ZnVuY3Rpb24oYWope08uYWJvcnQoYWopfTtpZihhZil7Zm9yKGFiPTA7YWI8cy5sZW5ndGg7YWIrKyl7Sz1mKHNbYWJdKTtpZihlKXtLLnByb3AoImRpc2FibGVkIixmYWxzZSl9ZWxzZXtLLnJlbW92ZUF0dHIoImRpc2FibGVkIil9fX1WPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaik7Vi5jb250ZXh0PVYuY29udGV4dHx8VjtZPSJqcUZvcm1JTyIrKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtpZihWLmlmcmFtZVRhcmdldCl7Tj1mKFYuaWZyYW1lVGFyZ2V0KTtaPU4uYXR0cjIoIm5hbWUiKTtpZighWil7Ti5hdHRyMigibmFtZSIsWSl9ZWxzZXtZPVp9fWVsc2V7Tj1mKCc8aWZyYW1lIG5hbWU9IicrWSsnIiBzcmM9IicrVi5pZnJhbWVTcmMrJyIgLz4nKTtOLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6Ii0xMDAwcHgiLGxlZnQ6Ii0xMDAwcHgifSl9UT1OWzBdO089e2Fib3J0ZWQ6MCxyZXNwb25zZVRleHQ6bnVsbCxyZXNwb25zZVhNTDpudWxsLHN0YXR1czowLHN0YXR1c1RleHQ6Im4vYSIsZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbigpe30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbigpe30sYWJvcnQ6ZnVuY3Rpb24oYWope3ZhciBhaz0oYWo9PT0idGltZW91dCI/InRpbWVvdXQiOiJhYm9ydGVkIik7ZCgiYWJvcnRpbmcgdXBsb2FkLi4uICIrYWspO3RoaXMuYWJvcnRlZD0xO3RyeXtpZihRLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQpe1EuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgiU3RvcCIpfX1jYXRjaChhbCl7fU4uYXR0cigic3JjIixWLmlmcmFtZVNyYyk7Ty5lcnJvcj1haztpZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYWssYWopfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixha10pfWlmKFYuY29tcGxldGUpe1YuY29tcGxldGUuY2FsbChWLmNvbnRleHQsTyxhayl9fX07YWQ9Vi5nbG9iYWw7aWYoYWQmJjA9PT1mLmFjdGl2ZSsrKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTZW5kIixbTyxWXSl9aWYoVi5iZWZvcmVTZW5kJiZWLmJlZm9yZVNlbmQuY2FsbChWLmNvbnRleHQsTyxWKT09PWZhbHNlKXtpZihWLmdsb2JhbCl7Zi5hY3RpdmUtLX1haS5yZWplY3QoKTtyZXR1cm4gYWl9aWYoTy5hYm9ydGVkKXthaS5yZWplY3QoKTtyZXR1cm4gYWl9UD1MLmNsaztpZihQKXtaPVAubmFtZTtpZihaJiYhUC5kaXNhYmxlZCl7Vi5leHRyYURhdGE9Vi5leHRyYURhdGF8fHt9O1YuZXh0cmFEYXRhW1pdPVAudmFsdWU7aWYoUC50eXBlPT0iaW1hZ2UiKXtWLmV4dHJhRGF0YVtaKyIueCJdPUwuY2xrX3g7Vi5leHRyYURhdGFbWisiLnkiXT1MLmNsa195fX19dmFyIFU9MTt2YXIgUj0yO2Z1bmN0aW9uIFMoYWwpe3ZhciBhaz1udWxsO3RyeXtpZihhbC5jb250ZW50V2luZG93KXthaz1hbC5jb250ZW50V2luZG93LmRvY3VtZW50fX1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudFdpbmRvdyBkb2N1bWVudDogIithail9aWYoYWspe3JldHVybiBha310cnl7YWs9YWwuY29udGVudERvY3VtZW50P2FsLmNvbnRlbnREb2N1bWVudDphbC5kb2N1bWVudH1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudERvY3VtZW50OiAiK2FqKTthaz1hbC5kb2N1bWVudH1yZXR1cm4gYWt9dmFyIEo9ZigibWV0YVtuYW1lPWNzcmYtdG9rZW5dIikuYXR0cigiY29udGVudCIpO3ZhciBJPWYoIm1ldGFbbmFtZT1jc3JmLXBhcmFtXSIpLmF0dHIoImNvbnRlbnQiKTtpZihJJiZKKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbSV09Sn1mdW5jdGlvbiBhYSgpe3ZhciBhbD1vLmF0dHIyKCJ0YXJnZXQiKSxhaj1vLmF0dHIyKCJhY3Rpb24iKTtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixZKTtpZighaXx8L3Bvc3QvaS50ZXN0KGkpKXtMLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwiUE9TVCIpfWlmKGFqIT1WLnVybCl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsVi51cmwpfWlmKCFWLnNraXBFbmNvZGluZ092ZXJyaWRlJiYoIWl8fC9wb3N0L2kudGVzdChpKSkpe28uYXR0cih7ZW5jb2Rpbmc6Im11bHRpcGFydC9mb3JtLWRhdGEiLGVuY3R5cGU6Im11bHRpcGFydC9mb3JtLWRhdGEifSl9aWYoVi50aW1lb3V0KXtUPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthYz10cnVlO1goVSl9LFYudGltZW91dCl9ZnVuY3Rpb24gYW0oKXt0cnl7dmFyIGFxPVMoUSkucmVhZHlTdGF0ZTtkKCJzdGF0ZSA9ICIrYXEpO2lmKGFxJiZhcS50b0xvd2VyQ2FzZSgpPT0idW5pbml0aWFsaXplZCIpe3NldFRpbWVvdXQoYW0sNTApfX1jYXRjaChhcil7ZCgiU2VydmVyIGFib3J0OiAiLGFyLCIgKCIsYXIubmFtZSwiKSIpO1goUik7aWYoVCl7Y2xlYXJUaW1lb3V0KFQpfVQ9dW5kZWZpbmVkfX12YXIgYWs9W107dHJ5e2lmKFYuZXh0cmFEYXRhKXtmb3IodmFyIGFwIGluIFYuZXh0cmFEYXRhKXtpZihWLmV4dHJhRGF0YS5oYXNPd25Qcm9wZXJ0eShhcCkpe2lmKGYuaXNQbGFpbk9iamVjdChWLmV4dHJhRGF0YVthcF0pJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoIm5hbWUiKSYmVi5leHRyYURhdGFbYXBdLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrVi5leHRyYURhdGFbYXBdLm5hbWUrJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXS52YWx1ZSkuYXBwZW5kVG8oTClbMF0pfWVsc2V7YWsucHVzaChmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInK2FwKyciPicpLnZhbChWLmV4dHJhRGF0YVthcF0pLmFwcGVuZFRvKEwpWzBdKX19fX1pZighVi5pZnJhbWVUYXJnZXQpe04uYXBwZW5kVG8oImJvZHkiKX1pZihRLmF0dGFjaEV2ZW50KXtRLmF0dGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX1zZXRUaW1lb3V0KGFtLDE1KTt0cnl7TC5zdWJtaXQoKX1jYXRjaChhbil7dmFyIGFvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5zdWJtaXQ7YW8uYXBwbHkoTCl9fWZpbmFsbHl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsYWopO2lmKGFsKXtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixhbCl9ZWxzZXtvLnJlbW92ZUF0dHIoInRhcmdldCIpfWYoYWspLnJlbW92ZSgpfX1pZihWLmZvcmNlU3luYyl7YWEoKX1lbHNle3NldFRpbWVvdXQoYWEsMTApfXZhciBhZyxhaCxhZT01MCxNO2Z1bmN0aW9uIFgoYXApe2lmKE8uYWJvcnRlZHx8TSl7cmV0dXJufWFoPVMoUSk7aWYoIWFoKXtkKCJjYW5ub3QgYWNjZXNzIHJlc3BvbnNlIGRvY3VtZW50Iik7YXA9Un1pZihhcD09PVUmJk8pe08uYWJvcnQoInRpbWVvdXQiKTthaS5yZWplY3QoTywidGltZW91dCIpO3JldHVybn1lbHNle2lmKGFwPT1SJiZPKXtPLmFib3J0KCJzZXJ2ZXIgYWJvcnQiKTthaS5yZWplY3QoTywiZXJyb3IiLCJzZXJ2ZXIgYWJvcnQiKTtyZXR1cm59fWlmKCFhaHx8YWgubG9jYXRpb24uaHJlZj09Vi5pZnJhbWVTcmMpe2lmKCFhYyl7cmV0dXJufX1pZihRLmRldGFjaEV2ZW50KXtRLmRldGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX12YXIgYW49InN1Y2Nlc3MiLGFyO3RyeXtpZihhYyl7dGhyb3cidGltZW91dCJ9dmFyIGFtPVYuZGF0YVR5cGU9PSJ4bWwifHxhaC5YTUxEb2N1bWVudHx8Zi5pc1hNTERvYyhhaCk7ZCgiaXNYbWw9IithbSk7aWYoIWFtJiZ3aW5kb3cub3BlcmEmJihhaC5ib2R5PT09bnVsbHx8IWFoLmJvZHkuaW5uZXJIVE1MKSl7aWYoLS1hZSl7ZCgicmVxdWVpbmcgb25Mb2FkIGNhbGxiYWNrLCBET00gbm90IGF2YWlsYWJsZSIpO3NldFRpbWVvdXQoWCwyNTApO3JldHVybn19dmFyIGF0PWFoLmJvZHk/YWguYm9keTphaC5kb2N1bWVudEVsZW1lbnQ7Ty5yZXNwb25zZVRleHQ9YXQ/YXQuaW5uZXJIVE1MOm51bGw7Ty5yZXNwb25zZVhNTD1haC5YTUxEb2N1bWVudD9haC5YTUxEb2N1bWVudDphaDtpZihhbSl7Vi5kYXRhVHlwZT0ieG1sIn1PLmdldFJlc3BvbnNlSGVhZGVyPWZ1bmN0aW9uKGF3KXt2YXIgYXY9eyJjb250ZW50LXR5cGUiOlYuZGF0YVR5cGV9O3JldHVybiBhdlthdy50b0xvd2VyQ2FzZSgpXX07aWYoYXQpe08uc3RhdHVzPU51bWJlcihhdC5nZXRBdHRyaWJ1dGUoInN0YXR1cyIpKXx8Ty5zdGF0dXM7Ty5zdGF0dXNUZXh0PWF0LmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxPLnN0YXR1c1RleHR9dmFyIGFqPShWLmRhdGFUeXBlfHwiIikudG9Mb3dlckNhc2UoKTt2YXIgYXE9Lyhqc29ufHNjcmlwdHx0ZXh0KS8udGVzdChhaik7aWYoYXF8fFYudGV4dGFyZWEpe3ZhciBhbz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGV4dGFyZWEiKVswXTtpZihhbyl7Ty5yZXNwb25zZVRleHQ9YW8udmFsdWU7Ty5zdGF0dXM9TnVtYmVyKGFvLmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YW8uZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH1lbHNle2lmKGFxKXt2YXIgYWs9YWguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpWzBdO3ZhciBhdT1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKGFrKXtPLnJlc3BvbnNlVGV4dD1hay50ZXh0Q29udGVudD9hay50ZXh0Q29udGVudDphay5pbm5lclRleHR9ZWxzZXtpZihhdSl7Ty5yZXNwb25zZVRleHQ9YXUudGV4dENvbnRlbnQ/YXUudGV4dENvbnRlbnQ6YXUuaW5uZXJUZXh0fX19fX1lbHNle2lmKGFqPT0ieG1sIiYmIU8ucmVzcG9uc2VYTUwmJk8ucmVzcG9uc2VUZXh0KXtPLnJlc3BvbnNlWE1MPVcoTy5yZXNwb25zZVRleHQpfX10cnl7YWc9ayhPLGFqLFYpfWNhdGNoKGFsKXthbj0icGFyc2VyZXJyb3IiO08uZXJyb3I9YXI9KGFsfHxhbil9fWNhdGNoKGFsKXtkKCJlcnJvciBjYXVnaHQ6ICIsYWwpO2FuPSJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX1pZihPLmFib3J0ZWQpe2QoInVwbG9hZCBhYm9ydGVkIik7YW49bnVsbH1pZihPLnN0YXR1cyl7YW49KE8uc3RhdHVzPj0yMDAmJk8uc3RhdHVzPDMwMHx8Ty5zdGF0dXM9PT0zMDQpPyJzdWNjZXNzIjoiZXJyb3IifWlmKGFuPT09InN1Y2Nlc3MiKXtpZihWLnN1Y2Nlc3Mpe1Yuc3VjY2Vzcy5jYWxsKFYuY29udGV4dCxhZywic3VjY2VzcyIsTyl9YWkucmVzb2x2ZShPLnJlc3BvbnNlVGV4dCwic3VjY2VzcyIsTyk7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN1Y2Nlc3MiLFtPLFZdKX19ZWxzZXtpZihhbil7aWYoYXI9PT11bmRlZmluZWQpe2FyPU8uc3RhdHVzVGV4dH1pZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYW4sYXIpfWFpLnJlamVjdChPLCJlcnJvciIsYXIpO2lmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixhcl0pfX19aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbTyxWXSl9aWYoYWQmJiEtLWYuYWN0aXZlKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFuKX1NPXRydWU7aWYoVi50aW1lb3V0KXtjbGVhclRpbWVvdXQoVCl9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFWLmlmcmFtZVRhcmdldCl7Ti5yZW1vdmUoKX1lbHNle04uYXR0cigic3JjIixWLmlmcmFtZVNyYyl9Ty5yZXNwb25zZVhNTD1udWxsfSwxMDApfXZhciBXPWYucGFyc2VYTUx8fGZ1bmN0aW9uKGFqLGFrKXtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7YWs9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKTthay5hc3luYz0iZmFsc2UiO2FrLmxvYWRYTUwoYWopfWVsc2V7YWs9KG5ldyBET01QYXJzZXIoKSkucGFyc2VGcm9tU3RyaW5nKGFqLCJ0ZXh0L3htbCIpfXJldHVybihhayYmYWsuZG9jdW1lbnRFbGVtZW50JiZhay5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUhPSJwYXJzZXJlcnJvciIpP2FrOm51bGx9O3ZhciBxPWYucGFyc2VKU09OfHxmdW5jdGlvbihhail7cmV0dXJuIHdpbmRvd1siZXZhbCJdKCIoIithaisiKSIpfTt2YXIgaz1mdW5jdGlvbihhbyxhbSxhbCl7dmFyIGFrPWFvLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKXx8IiIsYWo9YW09PT0ieG1sInx8IWFtJiZhay5pbmRleE9mKCJ4bWwiKT49MCxhbj1haj9hby5yZXNwb25zZVhNTDphby5yZXNwb25zZVRleHQ7aWYoYWomJmFuLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZT09PSJwYXJzZXJlcnJvciIpe2lmKGYuZXJyb3Ipe2YuZXJyb3IoInBhcnNlcmVycm9yIil9fWlmKGFsJiZhbC5kYXRhRmlsdGVyKXthbj1hbC5kYXRhRmlsdGVyKGFuLGFtKX1pZih0eXBlb2YgYW49PT0ic3RyaW5nIil7aWYoYW09PT0ianNvbiJ8fCFhbSYmYWsuaW5kZXhPZigianNvbiIpPj0wKXthbj1xKGFuKX1lbHNle2lmKGFtPT09InNjcmlwdCJ8fCFhbSYmYWsuaW5kZXhPZigiamF2YXNjcmlwdCIpPj0wKXtmLmdsb2JhbEV2YWwoYW4pfX19cmV0dXJuIGFufTtyZXR1cm4gYWl9fTtmLmZuLmFqYXhGb3JtPWZ1bmN0aW9uKGcpe2c9Z3x8e307Zy5kZWxlZ2F0aW9uPWcuZGVsZWdhdGlvbiYmZi5pc0Z1bmN0aW9uKGYuZm4ub24pO2lmKCFnLmRlbGVnYXRpb24mJnRoaXMubGVuZ3RoPT09MCl7dmFyIGg9e3M6dGhpcy5zZWxlY3RvcixjOnRoaXMuY29udGV4dH07aWYoIWYuaXNSZWFkeSYmaC5zKXtkKCJET00gbm90IHJlYWR5LCBxdWV1aW5nIGFqYXhGb3JtIik7ZihmdW5jdGlvbigpe2YoaC5zLGguYykuYWpheEZvcm0oZyl9KTtyZXR1cm4gdGhpc31kKCJ0ZXJtaW5hdGluZzsgemVybyBlbGVtZW50cyBmb3VuZCBieSBzZWxlY3RvciIrKGYuaXNSZWFkeT8iIjoiIChET00gbm90IHJlYWR5KSIpKTtyZXR1cm4gdGhpc31pZihnLmRlbGVnYXRpb24pe2YoZG9jdW1lbnQpLm9mZigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGIpLm9mZigiY2xpY2suZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYSkub24oInN1Ym1pdC5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGIpLm9uKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGEpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIixnLGIpLmJpbmQoImNsaWNrLmZvcm0tcGx1Z2luIixnLGEpfTtmdW5jdGlvbiBiKGgpe3ZhciBnPWguZGF0YTtpZighaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aC5wcmV2ZW50RGVmYXVsdCgpO2YoaC50YXJnZXQpLmFqYXhTdWJtaXQoZyl9fWZ1bmN0aW9uIGEoayl7dmFyIGo9ay50YXJnZXQ7dmFyIGg9ZihqKTtpZighKGguaXMoIlt0eXBlPXN1Ym1pdF0sW3R5cGU9aW1hZ2VdIikpKXt2YXIgZz1oLmNsb3Nlc3QoIlt0eXBlPXN1Ym1pdF0iKTtpZihnLmxlbmd0aD09PTApe3JldHVybn1qPWdbMF19dmFyIGk9dGhpcztpLmNsaz1qO2lmKGoudHlwZT09ImltYWdlIil7aWYoay5vZmZzZXRYIT09dW5kZWZpbmVkKXtpLmNsa194PWsub2Zmc2V0WDtpLmNsa195PWsub2Zmc2V0WX1lbHNle2lmKHR5cGVvZiBmLmZuLm9mZnNldD09ImZ1bmN0aW9uIil7dmFyIGw9aC5vZmZzZXQoKTtpLmNsa194PWsucGFnZVgtbC5sZWZ0O2kuY2xrX3k9ay5wYWdlWS1sLnRvcH1lbHNle2kuY2xrX3g9ay5wYWdlWC1qLm9mZnNldExlZnQ7aS5jbGtfeT1rLnBhZ2VZLWoub2Zmc2V0VG9wfX19c2V0VGltZW91dChmdW5jdGlvbigpe2kuY2xrPWkuY2xrX3g9aS5jbGtfeT1udWxsfSwxMDApfWYuZm4uYWpheEZvcm1VbmJpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoInN1Ym1pdC5mb3JtLXBsdWdpbiBjbGljay5mb3JtLXBsdWdpbiIpfTtmLmZuLmZvcm1Ub0FycmF5PWZ1bmN0aW9uKHgsZyl7dmFyIHc9W107aWYodGhpcy5sZW5ndGg9PT0wKXtyZXR1cm4gd312YXIgbD10aGlzWzBdO3ZhciBwPXg/bC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOmwuZWxlbWVudHM7aWYoIXApe3JldHVybiB3fXZhciByLHEsbyx5LG0sdCxrO2ZvcihyPTAsdD1wLmxlbmd0aDtyPHQ7cisrKXttPXBbcl07bz1tLm5hbWU7aWYoIW98fG0uZGlzYWJsZWQpe2NvbnRpbnVlfWlmKHgmJmwuY2xrJiZtLnR5cGU9PSJpbWFnZSIpe2lmKGwuY2xrPT1tKXt3LnB1c2goe25hbWU6byx2YWx1ZTpmKG0pLnZhbCgpLHR5cGU6bS50eXBlfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfWNvbnRpbnVlfXk9Zi5maWVsZFZhbHVlKG0sdHJ1ZSk7aWYoeSYmeS5jb25zdHJ1Y3Rvcj09QXJyYXkpe2lmKGcpe2cucHVzaChtKX1mb3IocT0wLGs9eS5sZW5ndGg7cTxrO3ErKyl7dy5wdXNoKHtuYW1lOm8sdmFsdWU6eVtxXX0pfX1lbHNle2lmKGMuZmlsZWFwaSYmbS50eXBlPT0iZmlsZSIpe2lmKGcpe2cucHVzaChtKX12YXIgaD1tLmZpbGVzO2lmKGgubGVuZ3RoKXtmb3IocT0wO3E8aC5sZW5ndGg7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTpoW3FdLHR5cGU6bS50eXBlfSl9fWVsc2V7dy5wdXNoKHtuYW1lOm8sdmFsdWU6IiIsdHlwZTptLnR5cGV9KX19ZWxzZXtpZih5IT09bnVsbCYmdHlwZW9mIHkhPSJ1bmRlZmluZWQiKXtpZihnKXtnLnB1c2gobSl9dy5wdXNoKHtuYW1lOm8sdmFsdWU6eSx0eXBlOm0udHlwZSxyZXF1aXJlZDptLnJlcXVpcmVkfSl9fX19aWYoIXgmJmwuY2xrKXt2YXIgcz1mKGwuY2xrKSx1PXNbMF07bz11Lm5hbWU7aWYobyYmIXUuZGlzYWJsZWQmJnUudHlwZT09ImltYWdlIil7dy5wdXNoKHtuYW1lOm8sdmFsdWU6cy52YWwoKX0pO3cucHVzaCh7bmFtZTpvKyIueCIsdmFsdWU6bC5jbGtfeH0se25hbWU6bysiLnkiLHZhbHVlOmwuY2xrX3l9KX19cmV0dXJuIHd9O2YuZm4uZm9ybVNlcmlhbGl6ZT1mdW5jdGlvbihnKXtyZXR1cm4gZi5wYXJhbSh0aGlzLmZvcm1Ub0FycmF5KGcpKX07Zi5mbi5maWVsZFNlcmlhbGl6ZT1mdW5jdGlvbihoKXt2YXIgZz1bXTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5hbWU7aWYoIW0pe3JldHVybn12YXIgaz1mLmZpZWxkVmFsdWUodGhpcyxoKTtpZihrJiZrLmNvbnN0cnVjdG9yPT1BcnJheSl7Zm9yKHZhciBsPTAsaj1rLmxlbmd0aDtsPGo7bCsrKXtnLnB1c2goe25hbWU6bSx2YWx1ZTprW2xdfSl9fWVsc2V7aWYoayE9PW51bGwmJnR5cGVvZiBrIT0idW5kZWZpbmVkIil7Zy5wdXNoKHtuYW1lOnRoaXMubmFtZSx2YWx1ZTprfSl9fX0pO3JldHVybiBmLnBhcmFtKGcpfTtmLmZuLmZpZWxkVmFsdWU9ZnVuY3Rpb24obSl7Zm9yKHZhciBsPVtdLGo9MCxnPXRoaXMubGVuZ3RoO2o8ZztqKyspe3ZhciBrPXRoaXNbal07dmFyIGg9Zi5maWVsZFZhbHVlKGssbSk7aWYoaD09PW51bGx8fHR5cGVvZiBoPT0idW5kZWZpbmVkInx8KGguY29uc3RydWN0b3I9PUFycmF5JiYhaC5sZW5ndGgpKXtjb250aW51ZX1pZihoLmNvbnN0cnVjdG9yPT1BcnJheSl7Zi5tZXJnZShsLGgpfWVsc2V7bC5wdXNoKGgpfX1yZXR1cm4gbH07Zi5maWVsZFZhbHVlPWZ1bmN0aW9uKGcsbyl7dmFyIGo9Zy5uYW1lLHU9Zy50eXBlLHc9Zy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYobz09PXVuZGVmaW5lZCl7bz10cnVlfWlmKG8mJighanx8Zy5kaXNhYmxlZHx8dT09InJlc2V0Inx8dT09ImJ1dHRvbiJ8fCh1PT0iY2hlY2tib3gifHx1PT0icmFkaW8iKSYmIWcuY2hlY2tlZHx8KHU9PSJzdWJtaXQifHx1PT0iaW1hZ2UiKSYmZy5mb3JtJiZnLmZvcm0uY2xrIT1nfHx3PT0ic2VsZWN0IiYmZy5zZWxlY3RlZEluZGV4PT0tMSkpe3JldHVybiBudWxsfWlmKHc9PSJzZWxlY3QiKXt2YXIgcD1nLnNlbGVjdGVkSW5kZXg7aWYocDwwKXtyZXR1cm4gbnVsbH12YXIgcj1bXSxoPWcub3B0aW9uczt2YXIgbD0odT09InNlbGVjdC1vbmUiKTt2YXIgcT0obD9wKzE6aC5sZW5ndGgpO2Zvcih2YXIgaz0obD9wOjApO2s8cTtrKyspe3ZhciBtPWhba107aWYobS5zZWxlY3RlZCl7dmFyIHM9bS52YWx1ZTtpZighcyl7cz0obS5hdHRyaWJ1dGVzJiZtLmF0dHJpYnV0ZXMudmFsdWUmJiEobS5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZCkpP20udGV4dDptLnZhbHVlfWlmKGwpe3JldHVybiBzfXIucHVzaChzKX19cmV0dXJuIHJ9cmV0dXJuIGYoZykudmFsKCl9O2YuZm4uY2xlYXJGb3JtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKCJpbnB1dCxzZWxlY3QsdGV4dGFyZWEiLHRoaXMpLmNsZWFyRmllbGRzKGcpfSl9O2YuZm4uY2xlYXJGaWVsZHM9Zi5mbi5jbGVhcklucHV0cz1mdW5jdGlvbihnKXt2YXIgaD0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy50eXBlLGk9dGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoaC50ZXN0KGopfHxpPT0idGV4dGFyZWEiKXt0aGlzLnZhbHVlPSIifWVsc2V7aWYoaj09ImNoZWNrYm94Inx8aj09InJhZGlvIil7dGhpcy5jaGVja2VkPWZhbHNlfWVsc2V7aWYoaT09InNlbGVjdCIpe3RoaXMuc2VsZWN0ZWRJbmRleD0tMX1lbHNle2lmKGo9PSJmaWxlIil7aWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpe2YodGhpcykucmVwbGFjZVdpdGgoZih0aGlzKS5jbG9uZSh0cnVlKSl9ZWxzZXtmKHRoaXMpLnZhbCgiIil9fWVsc2V7aWYoZyl7aWYoKGc9PT10cnVlJiYvaGlkZGVuLy50ZXN0KGopKXx8KHR5cGVvZiBnPT0ic3RyaW5nIiYmZih0aGlzKS5pcyhnKSkpe3RoaXMudmFsdWU9IiJ9fX19fX19KX07Zi5mbi5yZXNldEZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMucmVzZXQ9PSJmdW5jdGlvbiJ8fCh0eXBlb2YgdGhpcy5yZXNldD09Im9iamVjdCImJiF0aGlzLnJlc2V0Lm5vZGVUeXBlKSl7dGhpcy5yZXNldCgpfX0pfTtmLmZuLmVuYWJsZT1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9IWd9KX07Zi5mbi5zZWxlY3RlZD1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXRoaXMudHlwZTtpZihoPT0iY2hlY2tib3gifHxoPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9Z31lbHNle2lmKHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ib3B0aW9uIil7dmFyIGk9Zih0aGlzKS5wYXJlbnQoInNlbGVjdCIpO2lmKGcmJmlbMF0mJmlbMF0udHlwZT09InNlbGVjdC1vbmUiKXtpLmZpbmQoIm9wdGlvbiIpLnNlbGVjdGVkKGZhbHNlKX10aGlzLnNlbGVjdGVkPWd9fX0pfTtmLmZuLmFqYXhTdWJtaXQuZGVidWc9ZmFsc2U7ZnVuY3Rpb24gZCgpe2lmKCFmLmZuLmFqYXhTdWJtaXQuZGVidWcpe3JldHVybn12YXIgZz0iW2pxdWVyeS5mb3JtXSAiK0FycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKTtpZih3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nKXt3aW5kb3cuY29uc29sZS5sb2coZyl9ZWxzZXtpZih3aW5kb3cub3BlcmEmJndpbmRvdy5vcGVyYS5wb3N0RXJyb3Ipe3dpbmRvdy5vcGVyYS5wb3N0RXJyb3IoZyl9fX19KSk7UEsHCHYQEAGjPgAAoz4AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xsaWJcbWFya2VkLm1pbi5qcyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9e30sdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5ydWxlcz1hLm5vcm1hbCx0aGlzLm9wdGlvbnMuZ2ZtJiYodGhpcy5ydWxlcz10aGlzLm9wdGlvbnMudGFibGVzP2EudGFibGVzOmEuZ2ZtKX1mdW5jdGlvbiB0KGUsdCl7aWYodGhpcy5vcHRpb25zPXR8fGguZGVmYXVsdHMsdGhpcy5saW5rcz1lLHRoaXMucnVsZXM9dS5ub3JtYWwsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBuLCF0aGlzLmxpbmtzKXRocm93IG5ldyBFcnJvcigiVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4iKTt0aGlzLm9wdGlvbnMuZ2ZtP3RoaXMucnVsZXM9dGhpcy5vcHRpb25zLmJyZWFrcz91LmJyZWFrczp1LmdmbTp0aGlzLm9wdGlvbnMucGVkYW50aWMmJih0aGlzLnJ1bGVzPXUucGVkYW50aWMpfWZ1bmN0aW9uIG4oKXt9ZnVuY3Rpb24gcihlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlLnJlcGxhY2UodD8vJi9nOi8mKD8hIz9cdys7KS9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCImIzM5OyIpfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZT1lLnNvdXJjZSx0PXR8fCIiLGZ1bmN0aW9uIG4ocixzKXtyZXR1cm4gcj8ocz1zLnNvdXJjZXx8cyxzPXMucmVwbGFjZSgvKF58W15cW10pXF4vZywiJDEiKSxlPWUucmVwbGFjZShyLHMpLG4pOm5ldyBSZWdFeHAoZSx0KX19ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdCxuLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt0PWFyZ3VtZW50c1tyXTtmb3IobiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX1yZXR1cm4gZX1mdW5jdGlvbiBoKHQsbixpKXtpZihpfHwiZnVuY3Rpb24iPT10eXBlb2Ygbil7aXx8KGk9bixuPW51bGwpLG49byh7fSxoLmRlZmF1bHRzLG58fHt9KTt2YXIgbCxhLHU9bi5oaWdobGlnaHQscD0wO3RyeXtsPWUubGV4KHQsbil9Y2F0Y2goYyl7cmV0dXJuIGkoYyl9YT1sLmxlbmd0aDt2YXIgZz1mdW5jdGlvbigpe3ZhciBlLHQ7dHJ5e2U9ci5wYXJzZShsLG4pfWNhdGNoKHMpe3Q9c31yZXR1cm4gbi5oaWdobGlnaHQ9dSx0P2kodCk6aShudWxsLGUpfTtpZighdXx8dS5sZW5ndGg8MylyZXR1cm4gZygpO2lmKGRlbGV0ZSBuLmhpZ2hsaWdodCwhYSlyZXR1cm4gZygpO2Zvcig7cDxsLmxlbmd0aDtwKyspIWZ1bmN0aW9uKGUpe3JldHVybiJjb2RlIiE9PWUudHlwZT8tLWF8fGcoKTp1KGUudGV4dCxlLmxhbmcsZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09bnx8bj09PWUudGV4dD8tLWF8fGcoKTooZS50ZXh0PW4sZS5lc2NhcGVkPSEwLC0tYXx8ZygpLHZvaWQgMCl9KX0obFtwXSl9ZWxzZSB0cnl7cmV0dXJuIG4mJihuPW8oe30saC5kZWZhdWx0cyxuKSksci5wYXJzZShlLmxleCh0LG4pLG4pfWNhdGNoKGMpe2lmKGMubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGpqL21hcmtlZC4iLChufHxoLmRlZmF1bHRzKS5zaWxlbnQpcmV0dXJuIjxwPkFuIGVycm9yIG9jY3VyZWQ6PC9wPjxwcmU+IitzKGMubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7dGhyb3cgY319dmFyIGE9e25ld2xpbmU6L15cbisvLGNvZGU6L14oIHs0fVteXG5dK1xuKikrLyxmZW5jZXM6bCxocjovXiggKlstKl9dKXszLH0gKig/OlxuK3wkKS8saGVhZGluZzovXiAqKCN7MSw2fSkgKihbXlxuXSs/KSAqIyogKig/OlxuK3wkKS8sbnB0YWJsZTpsLGxoZWFkaW5nOi9eKFteXG5dKylcbiAqKD18LSl7Mix9ICooPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oICo+W15cbl0rKFxuW15cbl0rKSpcbiopKy8sbGlzdDovXiggKikoYnVsbCkgW1xzXFNdKz8oPzpocnxcbnsyLH0oPyEgKSg/IVwxYnVsbCApXG4qfFxzKiQpLyxodG1sOi9eICooPzpjb21tZW50fGNsb3NlZHxjbG9zaW5nKSAqKD86XG57Mix9fFxzKiQpLyxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogK1siKF0oW15cbl0rKVsiKV0pPyAqKD86XG4rfCQpLyx0YWJsZTpsLHBhcmFncmFwaDovXigoPzpbXlxuXStcbj8oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8dGFnfGRlZikpKylcbiovLHRleHQ6L15bXlxuXSsvfTthLmJ1bGxldD0vKD86WyorLV18XGQrXC4pLyxhLml0ZW09L14oICopKGJ1bGwpIFteXG5dKig/OlxuKD8hXDFidWxsIClbXlxuXSopKi8sYS5pdGVtPWkoYS5pdGVtLCJnbSIpKC9idWxsL2csYS5idWxsZXQpKCksYS5saXN0PWkoYS5saXN0KSgvYnVsbC9nLGEuYnVsbGV0KSgiaHIiLC9cbisoPz0oPzogKlstKl9dKXszLH0gKig/OlxuK3wkKSkvKSgpLGEuX3RhZz0iKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6L3xAKVxcYiIsYS5odG1sPWkoYS5odG1sKSgiY29tbWVudCIsLzwhLS1bXHNcU10qPy0tPi8pKCJjbG9zZWQiLC88KHRhZylbXHNcU10rPzxcL1wxPi8pKCJjbG9zaW5nIiwvPHRhZyg/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPl0pKj8+LykoL3RhZy9nLGEuX3RhZykoKSxhLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiaHIiLGEuaHIpKCJoZWFkaW5nIixhLmhlYWRpbmcpKCJsaGVhZGluZyIsYS5saGVhZGluZykoImJsb2NrcXVvdGUiLGEuYmxvY2txdW90ZSkoInRhZyIsIjwiK2EuX3RhZykoImRlZiIsYS5kZWYpKCksYS5ub3JtYWw9byh7fSxhKSxhLmdmbT1vKHt9LGEubm9ybWFsLHtmZW5jZXM6L14gKihgezMsfXx+ezMsfSkgKihcUyspPyAqXG4oW1xzXFNdKz8pXHMqXDEgKig/OlxuK3wkKS8scGFyYWdyYXBoOi9eL30pLGEuZ2ZtLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiKD8hIiwiKD8hIithLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMiIpKyJ8IithLmxpc3Quc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMyIpKyJ8IikoKSxhLnRhYmxlcz1vKHt9LGEuZ2ZtLHtucHRhYmxlOi9eICooXFMuKlx8LiopXG4gKihbLTpdKyAqXHxbLXwgOl0qKVxuKCg/Oi4qXHwuKig/OlxufCQpKSopXG4qLyx0YWJsZTovXiAqXHwoLispXG4gKlx8KCAqWy06XStbLXwgOl0qKVxuKCg/OiAqXHwuKig/OlxufCQpKSopXG4qL30pLGUucnVsZXM9YSxlLmxleD1mdW5jdGlvbih0LG4pe3ZhciByPW5ldyBlKG4pO3JldHVybiByLmxleCh0KX0sZS5wcm90b3R5cGUubGV4PWZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9cdTAwYTAvZywiICIpLnJlcGxhY2UoL1x1MjQyNC9nLCJcbiIpLHRoaXMudG9rZW4oZSwhMCl9LGUucHJvdG90eXBlLnRva2VuPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIscyxpLGwsbyxoLHUscCxlPWUucmVwbGFjZSgvXiArJC9nbSwiIik7ZTspaWYoKHM9dGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoZSkpJiYoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksc1swXS5sZW5ndGg+MSYmdGhpcy50b2tlbnMucHVzaCh7dHlwZToic3BhY2UifSkpLHM9dGhpcy5ydWxlcy5jb2RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCkscz1zWzBdLnJlcGxhY2UoL14gezR9L2dtLCIiKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9zOnMucmVwbGFjZSgvXG4rJC8sIiIpfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuZmVuY2VzLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiY29kZSIsbGFuZzpzWzJdLHRleHQ6c1szXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDpzWzFdLmxlbmd0aCx0ZXh0OnNbMl19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMubnB0YWJsZS5leGVjKGUpKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLG89e3R5cGU6InRhYmxlIixoZWFkZXI6c1sxXS5yZXBsYWNlKC9eICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksYWxpZ246c1syXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGNlbGxzOnNbM10ucmVwbGFjZSgvXG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnNwbGl0KC8gKlx8ICovKTt0aGlzLnRva2Vucy5wdXNoKG8pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmxoZWFkaW5nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiaGVhZGluZyIsZGVwdGg6Ij0iPT09c1syXT8xOjIsdGV4dDpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaHIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJociJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9zdGFydCJ9KSxzPXNbMF0ucmVwbGFjZSgvXiAqPiA/L2dtLCIiKSx0aGlzLnRva2VuKHMsdCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9lbmQifSk7ZWxzZSBpZihzPXRoaXMucnVsZXMubGlzdC5leGVjKGUpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksaT1zWzJdLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3Rfc3RhcnQiLG9yZGVyZWQ6aS5sZW5ndGg+MX0pLHM9c1swXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pLG49ITEscD1zLmxlbmd0aCx1PTA7cD51O3UrKylvPXNbdV0saD1vLmxlbmd0aCxvPW8ucmVwbGFjZSgvXiAqKFsqKy1dfFxkK1wuKSArLywiIiksfm8uaW5kZXhPZigiXG4gIikmJihoLT1vLmxlbmd0aCxvPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9vLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpOm8ucmVwbGFjZShuZXcgUmVnRXhwKCJeIHsxLCIraCsifSIsImdtIiksIiIpKSx0aGlzLm9wdGlvbnMuc21hcnRMaXN0cyYmdSE9PXAtMSYmKGw9YS5idWxsZXQuZXhlYyhzW3UrMV0pWzBdLGk9PT1sfHxpLmxlbmd0aD4xJiZsLmxlbmd0aD4xfHwoZT1zLnNsaWNlKHUrMSkuam9pbigiXG4iKStlLHU9cC0xKSkscj1ufHwvXG5cbig/IVxzKiQpLy50ZXN0KG8pLHUhPT1wLTEmJihuPSJcbiI9PT1vLmNoYXJBdChvLmxlbmd0aC0xKSxyfHwocj1uKSksdGhpcy50b2tlbnMucHVzaCh7dHlwZTpyPyJsb29zZV9pdGVtX3N0YXJ0IjoibGlzdF9pdGVtX3N0YXJ0In0pLHRoaXMudG9rZW4obywhMSksdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9pdGVtX2VuZCJ9KTt0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2VuZCJ9KX1lbHNlIGlmKHM9dGhpcy5ydWxlcy5odG1sLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InBhcmFncmFwaCI6Imh0bWwiLHByZToicHJlIj09PXNbMV18fCJzY3JpcHQiPT09c1sxXXx8InN0eWxlIj09PXNbMV0sdGV4dDpzWzBdfSk7ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLmRlZi5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5saW5rc1tzWzFdLnRvTG93ZXJDYXNlKCldPXtocmVmOnNbMl0sdGl0bGU6c1szXX07ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC8oPzogKlx8ICopP1xuJC8sIiIpLnNwbGl0KCJcbiIpfSx1PTA7dTxvLmFsaWduLmxlbmd0aDt1Kyspby5hbGlnblt1XT0vXiAqLSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChvLmFsaWduW3VdKT8ibGVmdCI6bnVsbDtmb3IodT0wO3U8by5jZWxscy5sZW5ndGg7dSsrKW8uY2VsbHNbdV09by5jZWxsc1t1XS5yZXBsYWNlKC9eICpcfCAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJwYXJhZ3JhcGgiLHRleHQ6IlxuIj09PXNbMV0uY2hhckF0KHNbMV0ubGVuZ3RoLTEpP3NbMV0uc2xpY2UoMCwtMSk6c1sxXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJ0ZXh0Iix0ZXh0OnNbMF19KTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gdGhpcy50b2tlbnN9O3ZhciB1PXtlc2NhcGU6L15cXChbXFxgKnt9XFtcXSgpIytcLS4hXz5dKS8sYXV0b2xpbms6L148KFteID5dKyhAfDpcLylbXiA+XSspPi8sdXJsOmwsdGFnOi9ePCEtLVtcc1xTXSo/LS0+fF48XC8/XHcrKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vLGxpbms6L14hP1xbKGluc2lkZSlcXVwoaHJlZlwpLyxyZWZsaW5rOi9eIT9cWyhpbnNpZGUpXF1ccypcWyhbXlxdXSopXF0vLG5vbGluazovXiE/XFsoKD86XFtbXlxdXSpcXXxbXlxbXF1dKSopXF0vLHN0cm9uZzovXl9fKFtcc1xTXSs/KV9fKD8hXyl8XlwqXCooW1xzXFNdKz8pXCpcKig/IVwqKS8sZW06L15cYl8oKD86X198W1xzXFNdKSs/KV9cYnxeXCooKD86XCpcKnxbXHNcU10pKz8pXCooPyFcKikvLGNvZGU6L14oYCspXHMqKFtcc1xTXSo/W15gXSlccypcMSg/IWApLyxicjovXiB7Mix9XG4oPyFccyokKS8sZGVsOmwsdGV4dDovXltcc1xTXSs/KD89W1xcPCFcW18qYF18IHsyLH1cbnwkKS99O3UuX2luc2lkZT0vKD86XFtbXlxdXSpcXXxbXlxbXF1dfFxdKD89W15cW10qXF0pKSovLHUuX2hyZWY9L1xzKjw/KFtcc1xTXSo/KT4/KD86XHMrWyciXShbXHNcU10qPylbJyJdKT9ccyovLHUubGluaz1pKHUubGluaykoImluc2lkZSIsdS5faW5zaWRlKSgiaHJlZiIsdS5faHJlZikoKSx1LnJlZmxpbms9aSh1LnJlZmxpbmspKCJpbnNpZGUiLHUuX2luc2lkZSkoKSx1Lm5vcm1hbD1vKHt9LHUpLHUucGVkYW50aWM9byh7fSx1Lm5vcm1hbCx7c3Ryb25nOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW06L15fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pfF5cKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopL30pLHUuZ2ZtPW8oe30sdS5ub3JtYWwse2VzY2FwZTppKHUuZXNjYXBlKSgiXSkiLCJ+fF0pIikoKSx1cmw6L14oaHR0cHM/OlwvXC9bXlxzPF0rW148Liw6OyInKVxdXHNdKS8sZGVsOi9efn4oPz1cUykoW1xzXFNdKj9cUyl+fi8sdGV4dDppKHUudGV4dCkoIl18Iiwifl18IikoInwiLCJ8aHR0cHM/Oi8vfCIpKCl9KSx1LmJyZWFrcz1vKHt9LHUuZ2ZtLHticjppKHUuYnIpKCJ7Mix9IiwiKiIpKCksdGV4dDppKHUuZ2ZtLnRleHQpKCJ7Mix9IiwiKiIpKCl9KSx0LnJ1bGVzPXUsdC5vdXRwdXQ9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzPW5ldyB0KG4scik7cmV0dXJuIHMub3V0cHV0KGUpfSx0LnByb3RvdHlwZS5vdXRwdXQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpLGw9IiI7ZTspaWYoaT10aGlzLnJ1bGVzLmVzY2FwZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPWlbMV07ZWxzZSBpZihpPXRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSwiQCI9PT1pWzJdPyhuPSI6Ij09PWlbMV0uY2hhckF0KDYpP3RoaXMubWFuZ2xlKGlbMV0uc3Vic3RyaW5nKDcpKTp0aGlzLm1hbmdsZShpWzFdKSxyPXRoaXMubWFuZ2xlKCJtYWlsdG86Iikrbik6KG49cyhpWzFdKSxyPW4pLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudXJsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbj1zKGlbMV0pLHI9bixsKz10aGlzLnJlbmRlcmVyLmxpbmsocixudWxsLG4pO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRhZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3B0aW9ucy5zYW5pdGl6ZT9zKGlbMF0pOmlbMF07ZWxzZSBpZihpPXRoaXMucnVsZXMubGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3V0cHV0TGluayhpLHtocmVmOmlbMl0sdGl0bGU6aVszXX0pO2Vsc2UgaWYoKGk9dGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoZSkpfHwoaT10aGlzLnJ1bGVzLm5vbGluay5leGVjKGUpKSl7aWYoZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdD0oaVsyXXx8aVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSx0PXRoaXMubGlua3NbdC50b0xvd2VyQ2FzZSgpXSwhdHx8IXQuaHJlZil7bCs9aVswXS5jaGFyQXQoMCksZT1pWzBdLnN1YnN0cmluZygxKStlO2NvbnRpbnVlfWwrPXRoaXMub3V0cHV0TGluayhpLHQpfWVsc2UgaWYoaT10aGlzLnJ1bGVzLnN0cm9uZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuc3Ryb25nKHRoaXMub3V0cHV0KGlbMl18fGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5lbS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZW0odGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmNvZGVzcGFuKHMoaVsyXSwhMCkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmJyLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5icigpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmRlbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZGVsKHRoaXMub3V0cHV0KGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy50ZXh0LmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9cyh0aGlzLnNtYXJ0eXBhbnRzKGlbMF0pKTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gbH0sdC5wcm90b3R5cGUub3V0cHV0TGluaz1mdW5jdGlvbihlLHQpe3ZhciBuPXModC5ocmVmKSxyPXQudGl0bGU/cyh0LnRpdGxlKTpudWxsO3JldHVybiIhIiE9PWVbMF0uY2hhckF0KDApP3RoaXMucmVuZGVyZXIubGluayhuLHIsdGhpcy5vdXRwdXQoZVsxXSkpOnRoaXMucmVuZGVyZXIuaW1hZ2UobixyLHMoZVsxXSkpfSx0LnByb3RvdHlwZS5zbWFydHlwYW50cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2UucmVwbGFjZSgvLS0vZywi4oCUIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMeKAmCIpLnJlcGxhY2UoLycvZywi4oCZIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQx4oCcIikucmVwbGFjZSgvIi9nLCLigJ0iKS5yZXBsYWNlKC9cLnszfS9nLCLigKYiKTplfSx0LnByb3RvdHlwZS5tYW5nbGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiIscj1lLmxlbmd0aCxzPTA7cj5zO3MrKyl0PWUuY2hhckNvZGVBdChzKSxNYXRoLnJhbmRvbSgpPi41JiYodD0ieCIrdC50b1N0cmluZygxNikpLG4rPSImIyIrdCsiOyI7cmV0dXJuIG59LG4ucHJvdG90eXBlLmNvZGU9ZnVuY3Rpb24oZSx0LG4scil7aWYocj1yfHx7fSxyLmhpZ2hsaWdodCl7dmFyIGk9ci5oaWdobGlnaHQoZSx0KTtudWxsIT1pJiZpIT09ZSYmKG49ITAsZT1pKX1yZXR1cm4gdD8nPHByZT48Y29kZSBjbGFzcz0iJytyLmxhbmdQcmVmaXgrdCsnIj4nKyhuP2U6cyhlKSkrIlxuPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhuP2U6cyhlLCEwKSkrIlxuPC9jb2RlPjwvcHJlPiJ9LG4ucHJvdG90eXBlLmJsb2NrcXVvdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIjxibG9ja3F1b3RlPlxuIitlKyI8L2Jsb2NrcXVvdGU+XG4ifSxuLnByb3RvdHlwZS5odG1sPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxuLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aCIrdCsnIGlkPSInK3IuaGVhZGVyUHJlZml4K24udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlx3XSsvZywiLSIpKyciPicrZSsiPC9oIit0KyI+XG4ifSxuLnByb3RvdHlwZS5ocj1mdW5jdGlvbigpe3JldHVybiI8aHI+XG4ifSxuLnByb3RvdHlwZS5saXN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dD8ib2wiOiJ1bCI7cmV0dXJuIjwiK24rIj5cbiIrZSsiPC8iK24rIj5cbiJ9LG4ucHJvdG90eXBlLmxpc3RpdGVtPWZ1bmN0aW9uKGUpe3JldHVybiI8bGk+IitlKyI8L2xpPlxuIn0sbi5wcm90b3R5cGUucGFyYWdyYXBoPWZ1bmN0aW9uKGUpe3JldHVybiI8cD4iK2UrIjwvcD5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrZSsiPC90aGVhZD5cbiIrIjx0Ym9keT5cbiIrdCsiPC90Ym9keT5cbiIrIjwvdGFibGU+XG4ifSxuLnByb3RvdHlwZS50YWJsZXJvdz1mdW5jdGlvbihlKXtyZXR1cm4iPHRyPlxuIitlKyI8L3RyPlxuIn0sbi5wcm90b3R5cGUudGFibGVjZWxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5oZWFkZXI/InRoIjoidGQiLHI9dC5hbGlnbj8iPCIrbisnIHN0eWxlPSJ0ZXh0LWFsaWduOicrdC5hbGlnbisnIj4nOiI8IituKyI+IjtyZXR1cm4gcitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUuc3Ryb25nPWZ1bmN0aW9uKGUpe3JldHVybiI8c3Ryb25nPiIrZSsiPC9zdHJvbmc+In0sbi5wcm90b3R5cGUuZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxlbT4iK2UrIjwvZW0+In0sbi5wcm90b3R5cGUuY29kZXNwYW49ZnVuY3Rpb24oZSl7cmV0dXJuIjxjb2RlPiIrZSsiPC9jb2RlPiJ9LG4ucHJvdG90eXBlLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIjxicj4ifSxuLnByb3RvdHlwZS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIjxkZWw+IitlKyI8L2RlbD4ifSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0nPGEgaHJlZj0iJytlKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+IituKyI8L2E+In0sbi5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8aW1nIHNyYz0iJytlKyciIGFsdD0iJytuKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+In0sci5wYXJzZT1mdW5jdGlvbihlLHQsbil7dmFyIHM9bmV3IHIodCxuKTtyZXR1cm4gcy5wYXJzZShlKX0sci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7dGhpcy5pbmxpbmU9bmV3IHQoZS5saW5rcyx0aGlzLm9wdGlvbnMsdGhpcy5yZW5kZXJlciksdGhpcy50b2tlbnM9ZS5yZXZlcnNlKCk7Zm9yKHZhciBuPSIiO3RoaXMubmV4dCgpOyluKz10aGlzLnRvaygpO3JldHVybiBufSxyLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW49dGhpcy50b2tlbnMucG9wKCl9LHIucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdfHwwfSxyLnByb3RvdHlwZS5wYXJzZVRleHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy50b2tlbi50ZXh0OyJ0ZXh0Ij09PXRoaXMucGVlaygpLnR5cGU7KWUrPSJcbiIrdGhpcy5uZXh0KCkudGV4dDtyZXR1cm4gdGhpcy5pbmxpbmUub3V0cHV0KGUpfSxyLnByb3RvdHlwZS50b2s9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy50b2tlbi50eXBlKXtjYXNlInNwYWNlIjpyZXR1cm4iIjtjYXNlImhyIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpO2Nhc2UiaGVhZGluZyI6cmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSx0aGlzLnRva2VuLmRlcHRoLHRoaXMudG9rZW4udGV4dCx0aGlzLm9wdGlvbnMpO2Nhc2UiY29kZSI6cmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsdGhpcy50b2tlbi5sYW5nLHRoaXMudG9rZW4uZXNjYXBlZCx0aGlzLm9wdGlvbnMpO2Nhc2UidGFibGUiOnZhciBlLHQsbixyLHMsaT0iIixsPSIiO2ZvcihuPSIiLGU9MDtlPHRoaXMudG9rZW4uaGVhZGVyLmxlbmd0aDtlKyspcj17aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19LG4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLmhlYWRlcltlXSkse2hlYWRlcjohMCxhbGlnbjp0aGlzLnRva2VuLmFsaWduW2VdfSk7Zm9yKGkrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobiksZT0wO2U8dGhpcy50b2tlbi5jZWxscy5sZW5ndGg7ZSsrKXtmb3IodD10aGlzLnRva2VuLmNlbGxzW2VdLG49IiIscz0wO3M8dC5sZW5ndGg7cysrKW4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0W3NdKSx7aGVhZGVyOiExLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bc119KTtsKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KG4pfXJldHVybiB0aGlzLnJlbmRlcmVyLnRhYmxlKGksbCk7Y2FzZSJibG9ja3F1b3RlX3N0YXJ0Ijpmb3IodmFyIGw9IiI7ImJsb2NrcXVvdGVfZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShsKTtjYXNlImxpc3Rfc3RhcnQiOmZvcih2YXIgbD0iIixvPXRoaXMudG9rZW4ub3JkZXJlZDsibGlzdF9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0KGwsbyk7Y2FzZSJsaXN0X2l0ZW1fc3RhcnQiOmZvcih2YXIgbD0iIjsibGlzdF9pdGVtX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz0idGV4dCI9PT10aGlzLnRva2VuLnR5cGU/dGhpcy5wYXJzZVRleHQoKTp0aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGwpO2Nhc2UibG9vc2VfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJodG1sIjp2YXIgaD10aGlzLnRva2VuLnByZXx8dGhpcy5vcHRpb25zLnBlZGFudGljP3RoaXMudG9rZW4udGV4dDp0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KTtyZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKGgpO2Nhc2UicGFyYWdyYXBoIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCkpO2Nhc2UidGV4dCI6cmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VUZXh0KCkpfX0sbC5leGVjPWwsaC5vcHRpb25zPWguc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gbyhoLmRlZmF1bHRzLGUpLGh9LGguZGVmYXVsdHM9e2dmbTohMCx0YWJsZXM6ITAsYnJlYWtzOiExLHBlZGFudGljOiExLHNhbml0aXplOiExLHNtYXJ0TGlzdHM6ITEsc2lsZW50OiExLGhpZ2hsaWdodDpudWxsLGxhbmdQcmVmaXg6ImxhbmctIixzbWFydHlwYW50czohMSxoZWFkZXJQcmVmaXg6IiIscmVuZGVyZXI6bmV3IG59LGguUGFyc2VyPXIsaC5wYXJzZXI9ci5wYXJzZSxoLlJlbmRlcmVyPW4saC5MZXhlcj1lLGgubGV4ZXI9ZS5sZXgsaC5JbmxpbmVMZXhlcj10LGguaW5saW5lTGV4ZXI9dC5vdXRwdXQsaC5wYXJzZT1oLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1oOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTp0aGlzLm1hcmtlZD1ofS5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fCgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6Z2xvYmFsKX0oKSk7UEsHCEL6TGpTOQAAUzkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHN0YXRpY1xsaWJcdmFsaWRhdGUubWluLmpzLyoKICogdmFsaWRhdGUuanMgMS4zCiAqIENvcHlyaWdodCAoYykgMjAxMyBSaWNrIEhhcnJpc29uLCBodHRwOi8vcmlja2hhcnJpc29uLm1lCiAqIHZhbGlkYXRlLmpzIGlzIG9wZW4gc291cmNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqIFBvcnRpb25zIG9mIHZhbGlkYXRlLmpzIGFyZSBpbnNwaXJlZCBieSBDb2RlSWduaXRlci4KICogaHR0cDovL3JpY2toYXJyaXNvbi5naXRodWIuY29tL3ZhbGlkYXRlLmpzCiAqLwoKKGZ1bmN0aW9uKHEscixtKXt2YXIgcz17cmVxdWlyZWQ6IlRoZSAlcyBmaWVsZCBpcyByZXF1aXJlZC4iLG1hdGNoZXM6IlRoZSAlcyBmaWVsZCBkb2VzIG5vdCBtYXRjaCB0aGUgJXMgZmllbGQuIiwiZGVmYXVsdCI6IlRoZSAlcyBmaWVsZCBpcyBzdGlsbCBzZXQgdG8gZGVmYXVsdCwgcGxlYXNlIGNoYW5nZS4iLHZhbGlkX2VtYWlsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iLHZhbGlkX2VtYWlsczoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhbGwgdmFsaWQgZW1haWwgYWRkcmVzc2VzLiIsbWluX2xlbmd0aDoiVGhlICVzIGZpZWxkIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixtYXhfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBub3QgZXhjZWVkICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZXhhY3RfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBleGFjdGx5ICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZ3JlYXRlcl90aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAlcy4iLGxlc3NfdGhhbjoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBsZXNzIHRoYW4gJXMuIixhbHBoYToiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzLiIsYWxwaGFfbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycy4iLGFscGhhX2Rhc2g6IlRoZSAlcyBmaWVsZCBtdXN0IG9ubHkgY29udGFpbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBhbmQgZGFzaGVzLiIsbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5IG51bWJlcnMuIixpbnRlZ2VyOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFuIGludGVnZXIuIixkZWNpbWFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgZGVjaW1hbCBudW1iZXIuIixpc19uYXR1cmFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgcG9zaXRpdmUgbnVtYmVycy4iLGlzX25hdHVyYWxfbm9femVybzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4iLHZhbGlkX2lwOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgSVAuIix2YWxpZF9iYXNlNjQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBiYXNlNjQgc3RyaW5nLiIsdmFsaWRfY3JlZGl0X2NhcmQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIuIixpc19maWxlX3R5cGU6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSAlcyBmaWxlcy4iLHZhbGlkX3VybDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIFVSTC4ifSx0PWZ1bmN0aW9uKGEpe30sdT0vXiguKz8pXFsoLispXF0kLyxoPS9eWzAtOV0rJC8sdj0vXlwtP1swLTldKyQvLGs9L15cLT9bMC05XSpcLj9bMC05XSskLyxwPS9eW2EtekEtWjAtOS4hIyQlJmFtcDsnKitcLVwvPT9cXl9ge3x9flwtXStAW2EtekEtWjAtOVwtXSsoPzpcLlthLXpBLVowLTlcLV0rKSokLyx3PS9eW2Etel0rJC9pLHg9L15bYS16MC05XSskL2kseT0vXlthLXowLTlfXC1dKyQvaSx6PS9eWzAtOV0rJC9pLEE9L15bMS05XVswLTldKiQvaSxCPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KSQvaSxDPS9bXmEtekEtWjAtOVwvXCs9XS9pLEQ9L15bXGRcLVxzXSskLyxFPS9eKChodHRwfGh0dHBzKTpcL1wvKFx3Kzp7MCwxfVx3KkApPyhcUyspfCkoOlswLTldKyk/KFwvfFwvKFtcdyMhOi4/Kz0mJUAhXC1cL10pKT8kLyxlPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbGxiYWNrPWN8fHQ7dGhpcy5lcnJvcnM9W107dGhpcy5maWVsZHM9e307dGhpcy5mb3JtPXRoaXMuX2Zvcm1CeU5hbWVPck5vZGUoYSl8fHt9O3RoaXMubWVzc2FnZXM9e307dGhpcy5oYW5kbGVycz17fTthPTA7Zm9yKGM9Yi5sZW5ndGg7YTxjO2ErKyl7dmFyIGQ9YlthXTtpZigoZC5uYW1lfHxkLm5hbWVzKSYmZC5ydWxlcylpZihkLm5hbWVzKWZvcih2YXIgbD0wO2w8ZC5uYW1lcy5sZW5ndGg7bCsrKXRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lc1tsXSk7ZWxzZSB0aGlzLl9hZGRGaWVsZChkLGQubmFtZSl9dmFyIGc9dGhpcy5mb3JtLm9uc3VibWl0O3RoaXMuZm9ybS5vbnN1Ym1pdD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7dHJ5e3JldHVybiBhLl92YWxpZGF0ZUZvcm0oYikmJihnPT09bXx8ZygpKX1jYXRjaChjKXt9fX0odGhpcyl9LG49ZnVuY3Rpb24oYSxiKXt2YXIgYztpZigwPGEubGVuZ3RoJiYoInJhZGlvIj09PWFbMF0udHlwZXx8ImNoZWNrYm94Ij09PWFbMF0udHlwZSkpZm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoYVtjXS5jaGVja2VkKXJldHVybiBhW2NdW2JdfWVsc2UgcmV0dXJuIGFbYl19O2UucHJvdG90eXBlLnNldE1lc3NhZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLm1lc3NhZ2VzW2FdPWI7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLnJlZ2lzdGVyQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXthJiYoInN0cmluZyI9PT10eXBlb2YgYSYmYiYmImZ1bmN0aW9uIj09PXR5cGVvZiBiKSYmKHRoaXMuaGFuZGxlcnNbYV09Yik7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLl9mb3JtQnlOYW1lT3JOb2RlPWZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiPT09dHlwZW9mIGE/YTpyLmZvcm1zW2FdfTtlLnByb3RvdHlwZS5fYWRkRmllbGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmZpZWxkc1tiXT17bmFtZTpiLGRpc3BsYXk6YS5kaXNwbGF5fHxiLHJ1bGVzOmEucnVsZXMsaWQ6bnVsbCx0eXBlOm51bGwsdmFsdWU6bnVsbCxjaGVja2VkOm51bGx9fTtlLnByb3RvdHlwZS5fdmFsaWRhdGVGb3JtPWZ1bmN0aW9uKGEpe3RoaXMuZXJyb3JzPVtdO2Zvcih2YXIgYiBpbiB0aGlzLmZpZWxkcylpZih0aGlzLmZpZWxkcy5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGM9dGhpcy5maWVsZHNbYl18fHt9LGQ9dGhpcy5mb3JtW2MubmFtZV07ZCYmZCE9PW0mJihjLmlkPW4oZCwiaWQiKSxjLnR5cGU9MDxkLmxlbmd0aD9kWzBdLnR5cGU6ZC50eXBlLGMudmFsdWU9bihkLCJ2YWx1ZSIpLGMuY2hlY2tlZD1uKGQsImNoZWNrZWQiKSx0aGlzLl92YWxpZGF0ZUZpZWxkKGMpKX0iZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuY2FsbGJhY2smJnRoaXMuY2FsbGJhY2sodGhpcy5lcnJvcnMsYSk7MDx0aGlzLmVycm9ycy5sZW5ndGgmJihhJiZhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTpldmVudCYmKGV2ZW50LnJldHVyblZhbHVlPSExKSk7cmV0dXJuITB9O2UucHJvdG90eXBlLl92YWxpZGF0ZUZpZWxkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLnJ1bGVzLnNwbGl0KCJ8IiksYz1hLnJ1bGVzLmluZGV4T2YoInJlcXVpcmVkIiksZD0hYS52YWx1ZXx8IiI9PT1hLnZhbHVlfHxhLnZhbHVlPT09bSxsPTAsZz1iLmxlbmd0aDtsPGc7bCsrKXt2YXIgZj1iW2xdLGU9bnVsbCxoPSExLGs9dS5leGVjKGYpO2lmKC0xIT09Y3x8LTEhPT1mLmluZGV4T2YoIiFjYWxsYmFja18iKXx8IWQpaWYoayYmKGY9a1sxXSxlPWtbMl0pLCIhIj09PWYuY2hhckF0KDApJiYoZj1mLnN1YnN0cmluZygxLGYubGVuZ3RoKSksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLl9ob29rc1tmXT90aGlzLl9ob29rc1tmXS5hcHBseSh0aGlzLFthLGVdKXx8KGg9ITApOiJjYWxsYmFja18iPT09Zi5zdWJzdHJpbmcoMCw5KSYmKGY9Zi5zdWJzdHJpbmcoOSxmLmxlbmd0aCksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmhhbmRsZXJzW2ZdJiYhMT09PXRoaXMuaGFuZGxlcnNbZl0uYXBwbHkodGhpcyxbYS52YWx1ZSxlXSkmJihoPSEwKSksaCl7Yj10aGlzLm1lc3NhZ2VzW2ZdfHxzW2ZdO2M9IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aXRoIHRoZSAiK2EuZGlzcGxheSsiIGZpZWxkLiI7YiYmKGM9Yi5yZXBsYWNlKCIlcyIsYS5kaXNwbGF5KSxlJiYoYz1jLnJlcGxhY2UoIiVzIix0aGlzLmZpZWxkc1tlXT90aGlzLmZpZWxkc1tlXS5kaXNwbGF5OmUpKSk7dGhpcy5lcnJvcnMucHVzaCh7aWQ6YS5pZCxuYW1lOmEubmFtZSxtZXNzYWdlOmMscnVsZTpmfSk7YnJlYWt9fX07ZS5wcm90b3R5cGUuX2hvb2tzPXtyZXF1aXJlZDpmdW5jdGlvbihhKXt2YXIgYj1hLnZhbHVlO3JldHVybiJjaGVja2JveCI9PT1hLnR5cGV8fCJyYWRpbyI9PT1hLnR5cGU/ITA9PT1hLmNoZWNrZWQ6bnVsbCE9PWImJiIiIT09Yn0sImRlZmF1bHQiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUhPT1ifSxtYXRjaGVzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5mb3JtW2JdO3JldHVybiBjP2EudmFsdWU9PT1jLnZhbHVlOiExfSx2YWxpZF9lbWFpbDpmdW5jdGlvbihhKXtyZXR1cm4gcC50ZXN0KGEudmFsdWUpfSx2YWxpZF9lbWFpbHM6ZnVuY3Rpb24oYSl7YT1hLnZhbHVlLnNwbGl0KCIsIik7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspaWYoIXAudGVzdChhW2JdKSlyZXR1cm4hMTtyZXR1cm4hMH0sbWluX2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg+PXBhcnNlSW50KGIsMTApOiExfSxtYXhfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aDw9cGFyc2VJbnQoYiwxMCk6ITF9LGV4YWN0X2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg9PT1wYXJzZUludChiLDEwKTohMX0sZ3JlYXRlcl90aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPnBhcnNlRmxvYXQoYik6ITF9LGxlc3NfdGhhbjpmdW5jdGlvbihhLGIpe3JldHVybiBrLnRlc3QoYS52YWx1ZSk/cGFyc2VGbG9hdChhLnZhbHVlKTxwYXJzZUZsb2F0KGIpOiExfSxhbHBoYTpmdW5jdGlvbihhKXtyZXR1cm4gdy50ZXN0KGEudmFsdWUpfSxhbHBoYV9udW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiB4LnRlc3QoYS52YWx1ZSl9LGFscGhhX2Rhc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHkudGVzdChhLnZhbHVlKX0sbnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4gaC50ZXN0KGEudmFsdWUpfSxpbnRlZ2VyOmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoYS52YWx1ZSl9LGRlY2ltYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGsudGVzdChhLnZhbHVlKX0saXNfbmF0dXJhbDpmdW5jdGlvbihhKXtyZXR1cm4gei50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsX25vX3plcm86ZnVuY3Rpb24oYSl7cmV0dXJuIEEudGVzdChhLnZhbHVlKX0sdmFsaWRfaXA6ZnVuY3Rpb24oYSl7cmV0dXJuIEIudGVzdChhLnZhbHVlKX0sdmFsaWRfYmFzZTY0OmZ1bmN0aW9uKGEpe3JldHVybiBDLnRlc3QoYS52YWx1ZSl9LHZhbGlkX3VybDpmdW5jdGlvbihhKXtyZXR1cm4gRS50ZXN0KGEudmFsdWUpfSx2YWxpZF9jcmVkaXRfY2FyZDpmdW5jdGlvbihhKXtpZighRC50ZXN0KGEudmFsdWUpKXJldHVybiExO3ZhciBiPTAsYz0wLGQ9ITE7YT1hLnZhbHVlLnJlcGxhY2UoL1xEL2csIiIpO2Zvcih2YXIgZT1hLmxlbmd0aC0xOzA8PWU7ZS0tKWM9YS5jaGFyQXQoZSksYz1wYXJzZUludChjLDEwKSxkJiY5PChjKj0yKSYmKGMtPTkpLGIrPWMsZD0hZDtyZXR1cm4gMD09PWIlMTB9LGlzX2ZpbGVfdHlwZTpmdW5jdGlvbihhLGIpe2lmKCJmaWxlIiE9PWEudHlwZSlyZXR1cm4hMDt2YXIgYz1hLnZhbHVlLnN1YnN0cihhLnZhbHVlLmxhc3RJbmRleE9mKCIuIikrMSksZD1iLnNwbGl0KCIsIiksZT0hMSxnPTAsZj1kLmxlbmd0aDtmb3IoZztnPGY7ZysrKWM9PWRbZ10mJihlPSEwKTtyZXR1cm4gZX19O3EuRm9ybVZhbGlkYXRvcj1lfSkod2luZG93LGRvY3VtZW50KTsKUEsHCGaMH8QzGAAAMxgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAABQAAAHZpZXcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHZpZXdcYWRtaW4vUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcYWRtaW5cYXJ0aWNsZXMuaHRtbDx1bCBpZD0iYXJ0aWNsZS1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj4NCiAgICA8bGk+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5re75Yqg5paH56ugPC9hPg0KICAgIDwvbGk+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj48aDQgY2xhc3M9ImlubGluZS1ibG9jayB0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0YXJnZXQ9Il9ibGFuayI+e3suVGl0bGV9fTwvYT48L2g0Pnt7aWYgbmUgLlN0YXR1cyAicHVibGlzaCJ9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGJsIHN0YXR1cyI+6I2J56i/PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9InNsdWciPnt7LlNsdWd9fTwvc3Bhbj57e2lmIGVxIC5Jc0NvbW1lbnQgZmFsc2V9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iaXMtY29tbWVudCI+PGkgY2xhc3M9ImZhLWNvbW1lbnRzIGZhIj48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPGEgY2xhc3M9ImVkaXQgbGJsIGxibC1ncmVlbiIgaHJlZj0iL2FkbWluL2FydGljbGUve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+57yW6L6RPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIGxibCBsYmwtcmVkIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7liKDpmaQ8L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHVsIGlkPSJhcnRpY2xlLXBhZ2VyIiBjbGFzcz0icGFnZXIgY29udGFpbmVyOTYwIj57e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2FydGljbGVzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoIi5kZWwiKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgIGlmKGNvbmZpcm0oIuWIoOmZpOaWh+eroOWwhuS9v+ebuOWFs+WGheWuueWkseaViO+8geehruiupO+8nyIpKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICJ1cmwiOiIvYWRtaW4vYXJ0aWNsZS8iK2lkKyIvIiwNCiAgICAgICAgICAgICAgICAidHlwZSI6ImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgInN1Y2Nlc3MiOmZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5Yig6ZmkIik7DQogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCJZ0chJuBgAAbgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAADwAAAHZpZXdcYWRtaW5cY21kL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGFkbWluXGNtZFxiYWNrdXAuaHRtbDxoZWFkZXIgY2xhc3M9ImNtZC1oZWFkZXIgY2xlYXIiPg0KICAgIDxoMSBjbGFzcz0iY21kLXRpdGxlIGxlZnQiPuWkh+S7veaVsOaNrjwvaDE+DQogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIGxlZnQiIGlkPSJiYWNrdXAtYnRuIj7lpIfku708L2J1dHRvbj4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9ImJhY2t1cC1saXN0Ij57e3JhbmdlIC5GaWxlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlVGltZSAuTW9kVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj57ey5OYW1lfX0gPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii9jbWQvYmFja3VwL2ZpbGU/ZmlsZT17ey5OYW1lfX0iPjxpIGNsYXNzPSJmYSBmYS1leHRlcm5hbC1saW5rIj48L2k+PC9hPjwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InNpemUiPnt7RmlsZVNpemUgLlNpemV9fTwvc3Bhbj4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyIgcmVsPSJ7ey5OYW1lfX0iPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUtbyI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYmFja3VwLWJ0bicpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgdHlwZTogInBvc3QiLA0KICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgJCgnLmNtZC1saXN0JykucHJlcGVuZCgnPGxpIGNsYXNzPSJiYWNrdXAtbG9hZGluZyI+5aSH5Lu95LitLi48L2xpPicpOw0KICAgICAgICAgICAgICAgICAgICAkKCcjYmFja3VwLWJ0bicpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmJhY2t1cC1sb2FkaW5nJykucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuY21kLWxpc3QnKS5wcmVwZW5kKCc8bGkgY2xhc3M9ImJhY2t1cC1yZXN1bHQiPuWImuWImuWkh+S7veWIsCAnICsganNvbi5maWxlICsgJzwvbGk+Jyk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5zaG93KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuZGVsJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICB1cmw6ICIvY21kL2JhY2t1cC8/ZmlsZT0iICsgJCh0aGlzKS5hdHRyKCJyZWwiKSwNCiAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAkKHRoYXQpLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwi3m+bJRwcAAEcHAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXGNvbW1lbnRzLmh0bWw8ZGl2IGlkPSJjb21tZW50LWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAiPnt7cmFuZ2UgLkNvbW1lbnRzfX0NCiAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSJ7ey5BdXRob3J9fSIvPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtZW1haWwiPnt7LkVtYWlsfX08L3NwYW4+e3tpZiAuR2V0Q29udGVudH19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5Ae3suR2V0Q29udGVudC5UaXRsZX19PC9zcGFuPnt7ZWxzZX19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5A5peg5pWIPC9zcGFuPnt7ZW5kfX17e2lmIG5lIC5TdGF0dXMgImFwcHJvdmVkIn19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtY2hlY2siIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWuoeaguCI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45LitPC9hPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Zue5aSNIj48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtZGVsIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaQiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pnt7ZW5kfX0NCiAgICA8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGFjdGlvbj0iL2FkbWluL2NvbW1lbnRzLyIgY2xhc3M9ImZvcm0gY2xlYXIgbGVmdCIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQgbGVmdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiIGlkPSJjb21tZW50LXN1Ym1pdCI+5Zue5aSN6K+E6K66PC9idXR0b24+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJjb21tZW50LWNsb3NlIj7lhbPpl63lm57lpI08L2J1dHRvbj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIGlkPSJjb21tZW50LXBhcmVudCIgbmFtZT0icGlkIi8+DQogICAgPC9mb3JtPg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6K+E6K665bCG5L2/55u45YWz5YaF5a655peg5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5Yig6Zmk5aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtY2hlY2snKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5a6h5qC45ZCO5q2k5L2c6ICF5bCG5LiN5YaN5qCH6K6w5a6h5qC4ISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAicHV0IiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlrqHmoLjlpLHotKUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuYy1yZXBseScpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC0nK2lkKS5hcHBlbmQoJCgnI2NvbW1lbnQtZm9ybScpLmRldGFjaCgpLnNob3coKSk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suWbnuWkjSIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9jb21tZW50cy8iOw0KICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgYWxlcnQoIuWbnuWkjeWksei0pSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtY2xvc2UnKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuaGlkZSgpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIQJgI7+0PAADtDwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAdmlld1xhZG1pblxlZGl0X2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiIHZhbHVlPSJ7ey5BcnRpY2xlLlRpdGxlfX0iLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij57e0h0bWwgLkFydGljbGUuVGV4dH19PC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiIHZhbHVlPSJ7ey5BcnRpY2xlLlNsdWd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuagh+etvjwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0idGFnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWciIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTmoIfnrb4iIHZhbHVlPSJ7ey5BcnRpY2xlLlRhZ1N0cmluZ319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuQXJ0aWNsZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLkFydGljbGUuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLkFydGljbGUuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCEuc6fFtDQAAbQ0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcYWRtaW5cZWRpdF9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIiB2YWx1ZT0ie3suUGFnZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5QYWdlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suUGFnZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCJ7e2lmIGVxIC5QYWdlLlN0YXR1cyAicHVibGlzaCJ9fSBzZWxlY3RlZHt7ZW5kfX0+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQie3tpZiBlcSAuUGFnZS5TdGF0dXMgImRyYWZ0In19IHNlbGVjdGVke3tlbmR9fT7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0NvbW1lbnQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzTGlua2VkIGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuW3suS/neWtmO+8jOWOu+afpeeci++8n+i/mOaYr+e7p+e7ree8lui+kSIpKSB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9wYWdlcy8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcItngyMuMNAADjDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxmaWxlcy5odG1sPHVsIGlkPSJmaWxlcy1saXN0IiBjbGFzcz0iYWRtaW4gY29udGFpbmVyOTYwIHBhZ2VyIj4NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlcy1idG4tbGkiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgIDwvbGk+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaSBjbGFzcz0iZmlsZSIgaWQ9ImZpbGUte3suSWR9fSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ1cGxvYWQtdGltZSI+e3tEYXRlSW50NjQgLlVwbG9hZFRpbWUgIk1NLkREIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iL3t7LlVybH19IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Ii97ey5Vcmx9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmstc3F1YXJlIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIGZhZGUtb3V0IiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaTpmYTku7YiPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQogICAge3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9maWxlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIGluaXRVcGxvYWQoIiNhdHRhY2gtc2hvdyIpOw0KICAgICAgICAkKCIuZGVsIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWIoOmZpOmZhOS7tuebuOWFs+mTvuaOpeS8muWkseaViCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgInVybCI6ICIvYWRtaW4vZmlsZXMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgInN1Y2Nlc3MiOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNmaWxlLScraWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIYsWb+uwGAADsBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAdmlld1xhZG1pblxob21lLmh0bWw8ZGl2IGNsYXNzPSJhZG1pbiBjb250YWluZXIgY2xlYXIiIGlkPSJkYXNoYm9hcmQiPg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS01IGxlZnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ3ZWxjb21lIj4NCiAgICAgICAgICAgIDxoND5XZWxjb21lPC9oND4NCiAgICAgICAgICAgIDxwPuasoui/juWbnuadpe+8jCA8c3Ryb25nPnt7LlVzZXIuTmlja319PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0icXVpY2stbGluayI+DQogICAgICAgICAgICA8aDQ+5b+r6YCf6ZO+5o6lPC9oND4NCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mkrDlhpnmlofnq6A8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLyI+5p+l55yL5ZKM5a6h5qC46K+E6K66PC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyI+5L+u5pS56YWN572uPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wcm9maWxlLyI+5pu05paw5Liq5Lq66LWE5paZPC9hPjwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtMiBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHkiPg0KICAgICAgICAgICAgPGg0PuacgOaWsOa0u+WKqDwvaDQ+DQogICAgICAgICAgICA8cD7lhoXlrrnlvIDlj5HkuK0uLi48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS00IHJpZ2h0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHMiPg0KICAgICAgICAgICAgPGg0PuaVsOaNrue7n+iuoTwvaDQ+DQogICAgICAgICAgICA8cD7lt7Lnu4/lj5HluIPmlofnq6AgPHNwYW4gY2xhc3M9ImxibCBsYmwtcmVkIj57ey5TdGF0aXMuQXJ0aWNsZXN9fTwvc3Bhbj4g56+H77yMDQogICAgICAgICAgICDpobXpnaIgPHNwYW4gY2xhc3M9ImxibCBsYmwtcmVkIj57ey5TdGF0aXMuUGFnZXN9fTwvc3Bhbj4g5Liq77yMIDxici8+DQogICAgICAgICAgICDmlLbliLDor4TorrogPHNwYW4gY2xhc3M9ImxibCBsYmwtYmx1ZSI+e3suU3RhdGlzLkNvbW1lbnRzfX08L3NwYW4+IOasoe+8jA0KICAgICAgICAgICAg5LiK5LygIDxzcGFuIGNsYXNzPSJsYmwgbGJsLWdyZWVuIj57ey5TdGF0aXMuRmlsZXN9fTwvc3Bhbj4g5Liq6ZmE5Lu2PC9wPg0KICAgICAgICAgICAgPHA+5b2T5YmN56iL5bqP54mI5pys77yaPHN0cm9uZz57ey5TdGF0aXMuVmVyc2lvbn19PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ib2ZmaWNlIj4NCiAgICAgICAgICAgIDxoND7lrpjmlrnmtojmga88L2g0Pg0KICAgICAgICAgICAgPHA+6L+Y5rKh5pyJ5raI5oGvPC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCjwvZGl2PlBLBwghWR50LwYAAC8GAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXGxvZ2luLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+55m75b2VIC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+DQogICAgICAgICNsb2dpbi1mb3Jtew0KICAgICAgICAgICAgd2lkdGg6IDI4MHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG87DQogICAgICAgIH0NCiAgICAgICAgI2xvZ2luLWZvcm0gaDF7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4Ow0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGZvcm0gaWQ9ImxvZ2luLWZvcm0iIGNsYXNzPSJmb3JtIGZvcm0tdmVydGljYWwiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0IiBuYW1lPSJsb2dpbi1mb3JtIj4NCiAgICA8aDE+55m75b2VIC0gRnhoLkdvPC9oMT4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nlKjmiLflkI08L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InVzZXIiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idXNlciIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0icGFzc3dvcmQiPueUqOaIt+WvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IiBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InBhc3N3b3JkIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJwYXNzd29yZC1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPueZuyDlvZU8L2J1dHRvbj4NCiAgICA8c3BhbiBjbGFzcz0idGlwIj7pu5jorqTorrDkvY/nmbvpmYYz5aSpPC9zcGFuPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jZG4uc3RhdGljZmlsZS5vcmcvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS5mb3JtLzMuNDYvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi92YWxpZGF0ZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJsb2dpbi1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJ1c2VyIiwicnVsZXMiOiJhbHBoYV9udW1lcmljfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6InBhc3N3b3JkIiwicnVsZXMiOiJyZXF1aXJlZHxtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjbG9naW4tZm9ybScpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIueZu+W9lemUmeivr++8jOivt+ajgOafpeeUqOaIt+aIluWvhueggSIpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwjW4HhikAgAAJAIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXHBhZ2VzLmh0bWw8dWwgaWQ9ImFydGljbGUtbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+DQogICAgPGxpPg0KICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIiBocmVmPSIvYWRtaW4vcGFnZS93cml0ZS8iPua3u+WKoOmhtemdojwvYT4NCiAgICA8L2xpPnt7cmFuZ2UgLlBhZ2VzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+PGg0IGNsYXNzPSJpbmxpbmUtYmxvY2sgdGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LlRpdGxlfX08L2E+PC9oND57e2lmIG5lIC5TdGF0dXMgInB1Ymxpc2gifX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxibCBzdGF0dXMiPuiNieeovzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJzbHVnIj57ey5TbHVnfX08L3NwYW4+e3tpZiBlcSAuSXNDb21tZW50IGZhbHNlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImlzLWNvbW1lbnQiPjxpIGNsYXNzPSJmYS1jb21tZW50cyBmYSI+PC9pPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvc3Bhbj57e2VuZH19DQogICAgICAgIDxhIGNsYXNzPSJlZGl0IGxibCBsYmwtZ3JlZW4iIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPue8lui+kTwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBsYmwgbGJsLXJlZCIgaHJlZj0iL2FkbWluL3BhZ2Uve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+5Yig6ZmkPC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9wYWdlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKCIuZGVsIikub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBpZihjb25maXJtKCLliKDpmaTpobXpnaLlsIbkvb/nm7jlhbPlhoXlrrnlpLHmlYjvvIHnoa7orqTvvJ8iKSl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAidXJsIjoiL2FkbWluL3BhZ2UvIitpZCsiLyIsDQogICAgICAgICAgICAgICAgInR5cGUiOiJkZWxldGUiLA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suWIoOmZpCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0NCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhr5NshXAYAAFwGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXHBhc3N3b3JkLmh0bWw8Zm9ybSBpZD0icGFzc3dvcmQiIGNsYXNzPSJmb3JtIGZvcm0tYWxpZ24gY2xlYXIiIGFjdGlvbj0iIyIgbmFtZT0icGFzc3dvcmQtZm9ybSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJvbGQiPuaXp+WvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ib2xkIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0ib2xkIiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6aqM6K+B5pen5a+G56CBPC9zcGFuPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJvbGQtaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ibmV3Ij7mlrDlr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im5ldyIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im5ldyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5ldy1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJjb25maXJtIj7noa7orqTlr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9ImNvbmZpcm0iIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJjb25maXJtIiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iY29uZmlybS1pbnZhbGlkIj7noa7orqTlr4bnoIHkuI3ljLnphY08L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOS/ruaUuTwvYnV0dG9uPg0KICAgIDwvcD4NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigicGFzc3dvcmQtZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoib2xkIiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJuZXciLCJydWxlcyI6Im1pbl9sZW5ndGhbMl18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6ImNvbmZpcm0iLCJydWxlcyI6InJlcXVpcmVkfG1hdGNoZXNbbmV3XSJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Bhc3N3b3JkJykuYWpheFN1Ym1pdChmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZighanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhucSeBTwcAAE8HAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGFkbWluXHBsdWdpbi5odG1sPHVsIGlkPSJwbHVnaW4tbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+e3tyYW5nZSAuUGx1Z2luc319DQogICAgPGxpIGNsYXNzPSJjbGVhciI+e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCBsYmwgYWN0aXZlIGxibC1ncmVlbiI+Jm5ic3A7PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUgbGVmdCI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0idmVyc2lvbiBsZWZ0Ij57ey5WZXJzaW9ufX08L3NwYW4+e3tpZiAuSGFzU2V0dGluZ319DQogICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9wbHVnaW5zL3t7LktleX19LyI+6YCJ6aG5PC9hPnt7ZW5kfX17e2lmIC5Jc0FjdGl2ZX19DQogICAgICAgIDxhIGNsYXNzPSJkZWFjdGl2YXRlIGxibCBsYmwtcmVkIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LktleX19Ij7lsIHljbA8L2E+e3tlbHNlfX0NCiAgICAgICAgPGEgY2xhc3M9ImFjdGl2YXRlIGxibCBsYmwtYmx1ZSByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5r+A5rS7PC9hPnt7ZW5kfX0NCiAgICAgICAgPHAgY2xhc3M9ImRlc2MgbGVmdCI+e3suRGVzY319PC9wPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoIi5kZWFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImRlYWN0aXZhdGUiLA0KICAgICAgICAgICAgICAgICJwbHVnaW4iOiBwDQogICAgICAgICAgICB9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy5vZmYoImNsaWNrIikudGV4dCgi5LiL5qyh5r+A5rS7Iik7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWwgeWNsOWksei0pSIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0pOw0KICAgICAgICAkKCIuYWN0aXZhdGUiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgdmFyIHAgPSAkdGhpcy5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQucG9zdCgiIiwgew0KICAgICAgICAgICAgICAgICJhY3Rpb24iOiAiYWN0aXZhdGUiLA0KICAgICAgICAgICAgICAgICJwbHVnaW4iOiBwDQogICAgICAgICAgICB9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy5vZmYoImNsaWNrIikudGV4dCgi5LiL5qyh5bCB5Y2wIik7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIua/gOa0u+Wksei0pSIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIT3BZoWIGAABiBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAdmlld1xhZG1pblxwbHVnaW5fc2V0dGluZy5odG1sPGZvcm0gaWQ9InBsdWdpbi1zZXR0aW5nLWZvcm0iIGNsYXNzPSJmb3JtIGNvbnRhaW5lcjk2MCBhZG1pbiIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIHt7SHRtbCAuRm9ybX19DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgICAgICQoJyNwbHVnaW4tc2V0dGluZy1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiOiLkv53lrZjlpLHotKUiKTsNCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCDQrc9U4AQAAOAEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5ccHJvZmlsZS5odG1sPGZvcm0gaWQ9InByb2ZpbGUiIGNsYXNzPSJhZG1pbiBmb3JtIGNsZWFyIGZvcm0tYWxpZ24iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0IiBuYW1lPSJwcm9maWxlLWZvcm0iPg0KICAgIDxkaXYgY2xhc3M9ImF2YXRhciBncmlkLTEtNCBsZWZ0IHRleHQtY2VudGVyIj4NCiAgICAgICAgPGltZyBzcmM9Int7LlVzZXIuQXZhdGFyfX0iIGFsdD0ie3suVXNlci5OaWNrfX0iIGNsYXNzPSJmaWVsZCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGZpZWxkIGlubGluZS1ibG9jayI+5aS05YOP55SxIDxhIGhyZWY9Imh0dHA6Ly9ncmF2YXRhci5jb20vIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJuby1mb2xsb3ciPkdyYXZhdGFyPC9hPiDmj5Dkvps8L3NwYW4+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1yZWQgaW5saW5lLWJsb2NrIiBocmVmPSIvYWRtaW4vcGFzc3dvcmQvIj7kv67mlLnlr4bnoIE8L2E+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJpbmZvIHJpZ2h0IGdyaWQtMy00Ij4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InVzZXIiPueZu+W9leWQjTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVzZXIiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHZhbHVlPSJ7ey5Vc2VyLk5hbWV9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7nmbvlvZXnmoTnlKjmiLflkI08L3NwYW4+PGJyLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1c2VyLWludmFsaWQiPueUqOaIt+WQjeS4uuWtl+avjSvmlbDlrZfvvIzplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJuaWNrIj7mmLXnp7A8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJuaWNrIiB0eXBlPSJ0ZXh0IiBuYW1lPSJuaWNrIiB2YWx1ZT0ie3suVXNlci5OaWNrfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+5pi+56S65Zyo5YmN5Y+w55qE56ew5ZG8PC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ibmljay1pbnZhbGlkIj7mmLXnp7Dplb/luqYyLTIw5Liq5a2X56ymPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJlbWFpbCI+6YKu566xPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iZW1haWwiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgdmFsdWU9Int7LlVzZXIuRW1haWx9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7ogZTns7vpgq7nrrHvvIzljYHliIbph43opoHvvIE8L3NwYW4+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJlbWFpbC1pbnZhbGlkIj7pgq7nrrHmoLzlvI/plJnor688L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InVybCI+572R5Z2APC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0idXJsIiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgdmFsdWU9Int7LlVzZXIuVXJsfX0iIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVybC1pbnZhbGlkIj7nvZHlnYDmoLzlvI/plJnor688L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IGJpbyIgbmFtZT0iYmlvIiBpZD0iYmlvIj57ey5Vc2VyLkJpb319PC90ZXh0YXJlYT4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOS/ruaUuTwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInByb2ZpbGUtZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoidXNlciIsInJ1bGVzIjoiYWxwaGFfbnVtZXJpY3xtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJuaWNrIiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJlbWFpbCIsInJ1bGVzIjoidmFsaWRfZW1haWwifSwNCiAgICAgICAgICAgIHsibmFtZSI6InVybCIsInJ1bGVzIjoidmFsaWRfdXJsIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjcHJvZmlsZScpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIH4+hXwIMAAACDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxzZXR0aW5nLmh0bWw8dWwgaWQ9InNldHRpbmctbmF2IiBjbGFzcz0iY29udGFpbmVyOTYwIHRleHQtY2VudGVyIj4NCiAgICA8bGk+PGEgaHJlZj0iI2dlbmVyYWwiPuWfuuacrDwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSIjY3VzdG9tIj7oh6rlrprkuYk8L2E+PC9saT4NCjwvdWw+DQo8ZGl2IGlkPSJzZXR0aW5nLXBhbmVscyIgY2xhc3M9ImNvbnRhaW5lcjk2MCI+DQogICAgPGZvcm0gaWQ9InNldHRpbmctZm9ybSIgY2xhc3M9InNldHRpbmctZm9ybSBmb3JtIGZvcm0tYWxpZ24gc2V0dGluZy1wYW5lbCIgYWN0aW9uPSIvYWRtaW4vc2V0dGluZy8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdXJsIj7nq5nngrnlnLDlnYA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXVybCIgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJzaXRlX3VybCIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3VybGB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGl0bGUiPuermeeCueS4u+agh+mimDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdGl0bGUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfdGl0bGUiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtc3ViLXRpdGxlIj7nq5nngrnlia/moIfpopg8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXN1Yi10aXRsZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9zdWJfdGl0bGUiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9zdWJfdGl0bGVgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLWtleXdvcmRzIj5NZXRh5YWz6ZSu5a2XPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1rZXl3b3JkcyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9rZXl3b3JkcyIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9rZXl3b3Jkc2B9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtZGVzYyI+TWV0YeermeeCueS7i+e7jTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtZGVzYyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9kZXNjcmlwdGlvbiIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImFydGljbGUtc2l6ZSI+5Y2V6aG15paH56ug5YiX6KGo5pWwPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iYXJ0aWNsZS1zaXplIiBjbGFzcz0iaXB0IiB0eXBlPSJudW1iZXIiIG5hbWU9ImFydGljbGVfc2l6ZSIgdmFsdWU9Int7U2V0dGluZyBgYXJ0aWNsZV9zaXplYH19IiBtYXg9IjEwIiBtaW49IjMiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXRoZW1lIj7kuLvpopjnm67lvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXRoZW1lIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3RoZW1lIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3RoZW1lYH19Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kuLvpopjljbPmjIflkJHnmoTmqKHmnb/nm67lvZXvvIzlhbfkvZPlhoXlrrnor7flj4LogIMgZGVmYXVsdCDnm67lvZXvvIjljbMgZGVmYXVsdCDkuLvpopjvvIk8L3NwYW4+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzaXRlX3RoZW1lX2RlZiIgdmFsdWU9ImRlZmF1bHQiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJnby1tYXJrZG93biI+R2/muLLmn5NNYXJrZG93bjwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImdvLW1hcmtkb3duIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJlbmFibGVfZ29fbWFya2Rvd24iIHZhbHVlPSJ7e1NldHRpbmcgYGVuYWJsZV9nb19tYXJrZG93bmB9fSIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBibG9jayI+6buY6K6k5YWz6Zet77yM5L2/55So5YmN56uvbWFya2VkLmpz5riy5p+T77yM5aGrdHJ1ZeaXtuW8gOWQrzwvc3Bhbj4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImVuYWJsZV9nb19tYXJrZG93bl9kZWYiIHZhbHVlPSJmYWxzZSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwPg0KICAgICAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9mb3JtPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWN1c3RvbS1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nL2N1c3RvbS8iIG1ldGhvZD0icG9zdCI+e3tyYW5nZSAkaywkdiA6PSAuQ3VzdG9tfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHZhbHVlPSJ7eyRrfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7JHZ9fSIvPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiPua3u+WKoOS4gOmhuTwvYT4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS9v+eUqOWHveaVsOiHquWumuS5iemFjee9ru+8jOmcgOimgeWKoOWJjee8gCJjXyLvvIzlpoJHZXRTZXR0aW5nKCJjX2tleSIpPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImN1c3RvbS1pdGVtIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgcGxhY2Vob2xkZXI9IuWtl+auteWQjSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IuWtl+auteWAvCIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9zY3JpcHQ+DQogICAgPC9mb3JtPg0KICAgIDxkaXYgY2xhc3M9InNldHRpbmctcGFuZWwiPjMzMzwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeXRvb2xzLzEuMi43L2pxdWVyeS50b29scy5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI3NldHRpbmctbmF2JykudGFicygiLnNldHRpbmctcGFuZWwiKTsNCiAgICAgICAgJCgnLnNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiIDoganNvbi5tc2cpOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmFkZCcpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcjc2V0dGluZy1jdXN0b20tZm9ybScpLnByZXBlbmQoJCgiI2N1c3RvbS1pdGVtIikuaHRtbCgpKTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgaWYoY29uZmlybSgi6KaB5Yig6Zmk6L+Z6aG577yfIikpew0KICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwj1miLK5xEAAOcRAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAB2aWV3XGFkbWluXHdyaXRlX2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnmlofnq6DlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCiAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgPC9wPg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9hcnRpY2xlcy8iOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwi+ynR8IQwAACEMAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGFkbWluXHdyaXRlX3BhZ2UuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLpobXpnaLmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnpobXpnaLlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpobXpnaLnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCI+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQiPuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7nva7pobbpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImxpbmsiIGlkPSJpcy1saW5rIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vcGFnZXMvIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIcltVaXwMAAB8DAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAdmlld1xhZG1pbi5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+e3suVGl0bGV9fSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9hZG1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvdmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhciI+DQogICAgICAgIDxoMyBjbGFzcz0ibG9nbyBsZWZ0Ij5GeGguR28gLSA8c3Bhbj57ey5UaXRsZX19PC9zcGFuPjwvaDM+DQogICAgICAgIDxkaXYgY2xhc3M9Im5hdiBsZWZ0IHJlbGF0aXZlIj4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJkYXNoYm9hcmQgbGVmdCIgaHJlZj0iL2FkbWluLyI+PGkgY2xhc3M9ImZhIGZhLWRhc2hib2FyZCI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJhcnRpY2xlIGxlZnQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlcy8iIHRpdGxlPSLmlofnq6AiPjxpIGNsYXNzPSJmYSBmYS1jb3B5Ij48L2k+PC9hPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJwYWdlcyBsZWZ0IiBocmVmPSIvYWRtaW4vcGFnZXMvIiB0aXRsZT0i54us56uL6aG16Z2iIj48aSBjbGFzcz0iZmEgZmEtcGFzdGUiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iY29tbWVudHMgbGVmdCIgaHJlZj0iL2FkbWluL2NvbW1lbnRzLyIgdGl0bGU9IuivhOiuuiI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImZpbGVzIGxlZnQiIGhyZWY9Ii9hZG1pbi9maWxlcy8iIHRpdGxlPSLlqpLkvZPmlofku7YiPjxpIGNsYXNzPSJmYSBmYS1pbmJveCI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJwbHVnaW5zIGxlZnQiIGhyZWY9Ii9hZG1pbi9wbHVnaW5zLyIgdGl0bGU9IuaPkuS7tiI+PGkgY2xhc3M9ImZhIGZhLWdlYXJzIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9InNldHRpbmcgbGVmdCIgaHJlZj0iL2FkbWluL3NldHRpbmcvIiB0aXRsZT0i6K6+572uIj48aSBjbGFzcz0iZmEgZmEtY29nIj48L2k+PC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGEgY2xhc3M9Im91dCBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2xvZ291dC8iIHRpdGxlPSLpgIDlh7oiPjxpIGNsYXNzPSJmYSBmYS1wb3dlci1vZmYgZmEtbGciPjwvaT48L2E+DQogICAgICAgIDxhIGNsYXNzPSJwcm9maWxlIG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvYWRtaW4vcHJvZmlsZS8iIHRpdGxlPSLmiJEiPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0iZnJvbnQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii8iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0i5p+l55yL572R56uZIj48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluayI+PC9pPjwvYT4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0Ke0BDb250ZW50fQ0KPGRpdiBpZD0iZm9vdGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhciI+DQogICAgICAgPHAgY2xhc3M9ImxpbmtzIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgPGEgY2xhc3M9InN0YXQiIGhyZWY9IiMiPue7n+iuoTwvYT4NCiAgICAgICAgICAgPGEgY2xhc3M9ImJhY2t1cCIgaHJlZj0iL2NtZC9iYWNrdXAvIj7lpIfku708L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJlcnIiIGhyZWY9IiMiPuaXpeW/lzwvYT4NCiAgICAgICAgICAgPGEgY2xhc3M9InN5cyIgaHJlZj0iIyI+57O757ufPC9hPg0KICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImNwIHRleHQtY2VudGVyIj5Qcm91ZGx5IHB1Ymxpc2hlZCB3aXRoIEZ4aC5Hby48L3A+DQogICAgPC9kaXY+DQo8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD5QSwcImWww9qwIAACsCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xjbWQubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPuWkh+S7vSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jbWQuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keSBjbGFzcz0iY21kIj4NCntAQ29udGVudH0NCjxwIGNsYXNzPSJiYWNrIj48YSBocmVmPSJqYXZhc2NyaXB0Omhpc3RvcnkuYmFjaygpIj5CYWNrPC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcI1NYh2soBAADKAQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAdmlld1xkZWZhdWx0L1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGRlZmF1bHRcYXJ0aWNsZS5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LkFydGljbGUuU3RhdHVzfX0iIGlkPSJhcnRpY2xlLXt7LkFydGljbGUuSWR9fSI+e3t3aXRoIC5BcnRpY2xlfX0NCiAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWcgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdGFncyI+PC9pPnt7LlRhZ1N0cmluZ319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2aWV3cyBpbmxpbmUtYmxvY2sgcmlnaHQiPumYheivuyZuYnNwOyZuYnNwOzxzcGFuPnt7LkhpdHN9fTwvc3Bhbj4mbmJzcDsmbmJzcDvmrKE8L3NwYW4+DQogICAgICAgIDwvcD57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCMC4NIi3AwAAtwMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcZGVmYXVsdFxjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50Ij4NCiAgICA8ZGl2IGlkPSJjb21tZW50LWxpc3QiPnt7cmFuZ2UgLkNvbW1lbnRzfX17e2lmIC5Jc1ZhbGlkfX0NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciIgaWQ9ImNvbW1lbnQte3suSWR9fSI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9Int7LkF1dGhvcn19Ii8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSBjLWF1dGhvcnt7aWYgLklzQWRtaW59fSBhZG1pbnt7ZW5kfX0iIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+e3suQXV0aG9yfX17e2lmIC5Jc0FkbWlufX0mbmJzcDsmbmJzcDsoYWRtaW4pe3tlbmR9fTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9Int7LklkfX0iPjxpIGNsYXNzPSJmYSBmYS1xdW90ZS1yaWdodCI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+e3tlbmR9fXt7ZW5kfX0NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LXNob3ciIGNsYXNzPSJ0ZXh0LWNlbnRlciI+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGVuYWJsZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+e3tlbHNlfX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1yZWQiPuacrOaWh+WFs+mXreS6huivhOiuujwvYnV0dG9uPnt7ZW5kfX0NCiAgICA8L2Rpdj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgY2xhc3M9ImhpZGUgY2xlYXIgdGV4dC1jZW50ZXIgZm9ybSIgYWN0aW9uPSIvY29tbWVudC97ey5Db250ZW50LklkfX0vIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8gbGVmdCB0ZXh0LXJpZ2h0Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIGMtYXZhdGFyLWZpZWxkIj4NCiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBudWxsIiBzcmM9Ii9zdGF0aWMvaW1nL3NpdGUucG5nIiBhbHQ9IiIgaWQ9ImNvbW1lbnQtYXZhdGFyIi8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5vdC1tZSBibG9jayIgaHJlZj0iIyI+5LiN5piv5oiRPzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mby1maWVsZHMgaGlkZSI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLnp7DlkbwiIGlkPSJjb21tZW50LWF1dGhvciIvPjwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6YKu566xIiBpZD0iY29tbWVudC1lbWFpbCIvPiA8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgcGxhY2Vob2xkZXI9Iue9keWdgCIgaWQ9ImNvbW1lbnQtdXJsIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY29tbWVudC1wYXJlbnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIG5hbWU9InBpZCIvPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWNvbnRlbnQgdGV4dC1sZWZ0IHJpZ2h0Ij4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuWPkeihqOivhOiuujwvYnV0dG9uPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGJsIGxibC1ncmVlbiBjYW5jZWwtcmVwbHkiIHR5cGU9ImJ1dHRvbiI+5Y+W5raI5Zue5aSNPC9idXR0b24+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZm9ybT57e2VuZH19DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY29tbWVudC10cGwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0iIiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3IiIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT5Ob3c8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9IiI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jaGVjayI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45Lit77yM5Yi35paw5ZCO6ZqQ6JePPC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPjwvc2VjdGlvbj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvc2NyaXB0Pg0KPC9kaXY+UEsHCG+ub1TiDAAA4gwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHZpZXdcZGVmYXVsdFxlcnJvci9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xkZWZhdWx0XGVycm9yXGVycm9yLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouato+WcqOaJk+eejOedoTwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWKquWKm+WUpOmGku+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCBOERlJ4AQAAeAEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHZpZXdcZGVmYXVsdFxlcnJvclxub3Rmb3VuZC5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPumUmeivr+aPkOekujwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPmJvZHl7bWFyZ2luOiA0MHB4IDEwMHB4fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoMj7mgqjorr/pl67nmoTpobXpnaLnprvlrrblh7rotbA8L2gyPjxici8+DQo8cD7nqIvluo/lkZjmraPlnKjlm5vlpITlr7vmib7vvIzor7fnqI3lgJnorr/pl64uLi48L3A+DQo8cD48YSBocmVmPSIvIj7ov5Tlm57pppbpobU8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwiQ+dTAdQEAAHUBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGRlZmF1bHRcaG9tZS5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iLz4NCiAgICA8dGl0bGU+e3tpZiAuVGl0bGV9fXt7LlRpdGxlfX0gLSB7e2VuZH19e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC90aXRsZT4NCiAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRnhoR28gQmxvZyIgLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL3N0eWxlLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19IC0gUlNTIDIuMCIgaHJlZj0iL3Jzcy54bWwiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIi8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8bmF2IGlkPSJuYXYiIGNsYXNzPSJjbGVhciB0ZXh0LWNlbnRlciI+DQogICAgPHVsPg0KICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iLyI+5paH56ugPC9hPjwvbGk+DQogICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvYWJvdXQtbWUuaHRtbCI+5YWz5LqOPC9hPjwvbGk+DQogICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvZnJpZW5kcy5odG1sIj7lpb3lj4s8L2E+PC9saT4NCiAgICA8L3VsPg0KPC9uYXY+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8cD4NCiAgICAgICAgPGEgY2xhc3M9IndlaWJvIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX3dlaWJvYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIj48L2k+V2VpYm88L2E+DQogICAgICAgIDxhIGNsYXNzPSJnaXQiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZ2l0aHViYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWdpdGh1YiI+PC9pPkdpdEh1YjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImVtYWlsIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX2VtYWlsYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlIj48L2k+RW1haWw8L2E+DQogICAgICAgIDxhIGNsYXNzPSJyc3MiIGhyZWY9Ii9yc3MueG1sIiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXJzcyI+PC9pPlJTUzwvYT57e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KICAgIDwvcD4NCiAgICA8c3Bhbj5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuIFByb3VkbHkgcHVibGlzaGVkIHdpdGggRnhoLkdvLjwvc3Bhbj4NCiAgICA8YSBpZD0iZ28tdG9wIiBocmVmPSIjIiBjbGFzcz0ibGJsIGhpZGUg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AAAAAAAAABYAAAB2aWV3XGxpbmdcY29tbWVudC5odG1sPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9InJlbGF0aXZlIj4NCiAgICA8aDQgaWQ9ImNvbW1lbnQtdGl0bGUiPuaWh+eroOivhOiuujwvaDQ+DQogICAgPGRpdiBjbGFzcz0ibWV0YSBhYnNvbHV0ZSB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLXJlZCBjb21tZW50cyI+PGEgaHJlZj0ie3suTGlua319I2NvbW1lbnQiPnt7LkNvbnRlbnQuQ29tbWVudE51bX19PC9hPjwvcD4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LWxpc3QiPnt7cmFuZ2UgLkNvbW1lbnRzfX17e2lmIC5Jc1ZhbGlkfX0NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciIgaWQ9ImNvbW1lbnQte3suSWR9fSI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9Int7LkF1dGhvcn19Ii8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24iPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSBjbGVhciI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IGxibCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19Ij7lm57lpI08L2E+DQogICAgICAgICAgICAgICAgICAgIDxwPjxhIGNsYXNzPSJjLWF1dGhvcnt7aWYgLklzQWRtaW59fSBhZG1pbnt7ZW5kfX0iIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+e3suQXV0aG9yfX17e2lmIC5Jc0FkbWlufX0mbmJzcDsmbmJzcDsoYWRtaW4pe3tlbmR9fTwvYT48L3A+DQogICAgICAgICAgICAgICAgICAgIDxwPjxzcGFuIGNsYXNzPSJjLXRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTSDmnIggREQg5pelIEhIIOaXtiBtbSDliIYifX08L3NwYW4+PC9wPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj57e2VuZH19e3tlbmR9fQ0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtc2hvdyIgY2xhc3M9InRleHQtY2VudGVyIj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gZW5hYmxlIj7lj5Hooajor4Torro8L2J1dHRvbj57e2Vsc2V9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXJlZCI+5pys5paH5YWz6Zet5LqG6K+E6K66PC9idXR0b24+e3tlbmR9fQ0KICAgIDwvZGl2Pnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBjbGFzcz0iaGlkZSBjbGVhciB0ZXh0LWNlbnRlciBmb3JtIiBhY3Rpb249Ii9jb21tZW50L3t7LkNvbnRlbnQuSWR9fS8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mbyBsZWZ0IHRleHQtcmlnaHQiPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0gYy1hdmF0YXItZmllbGQiPg0KICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIG51bGwiIHNyYz0iL3N0YXRpYy9pbWcvc2l0ZS5wbmciIGFsdD0iIiBpZD0iY29tbWVudC1hdmF0YXIiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibm90LW1lIGJsb2NrIiBocmVmPSIjIj7kuI3mmK/miJE/PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvLWZpZWxkcyBoaWRlIj4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuensOWRvCIgaWQ9ImNvbW1lbnQtYXV0aG9yIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpgq7nrrEiIGlkPSJjb21tZW50LWVtYWlsIi8+IDwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0idXJsIiBwbGFjZWhvbGRlcj0i572R5Z2AIiBpZD0iY29tbWVudC11cmwiLz48L3A+DQogICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjb21tZW50LXBhcmVudCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgbmFtZT0icGlkIi8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtY29udGVudCB0ZXh0LWxlZnQgcmlnaHQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGNhbmNlbC1yZXBseSIgdHlwZT0iYnV0dG9uIj7lj5bmtojlm57lpI08L2J1dHRvbj4NCiAgICAg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AAAAAAAAAAAAABUAAAB2aWV3XGxpbmdcaG9tZS5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iLz4NCiAgICA8dGl0bGU+e3tpZiAuVGl0bGV9fXt7LlRpdGxlfX0gLSB7e2VuZH19e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC90aXRsZT4NCiAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRnhoR28gQmxvZyIgLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2xpbmcuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRpdGxlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0gLSBSU1MgMi4wIiBocmVmPSIvcnNzLnhtbCIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGhlYWRlciBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCI+DQogICAgICAgIDxpbWcgc3JjPSJ7e1NldHRpbmcgYGNfaG9tZV9hdmF0YXJgfX0iIGFsdD0ic2l0ZSIgaWQ9ImhlYWRlci1pbWciIGNsYXNzPSJsZWZ0Ii8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiIGNsYXNzPSJsZWZ0Ij48YSBocmVmPSIvIj57e1NldHRpbmcgInNpdGVfdGl0bGUifX08L2E+PC9oMT4NCiAgICAgICAgPGg0IGlkPSJoZWFkZXItc3ViIiBjbGFzcz0ibGVmdCI+e3tTZXR0aW5nICJzaXRlX3N1Yl90aXRsZSJ9fTwvaDQ+DQogICAgICAgIDxuYXYgaWQ9Im5hdiIgY2xhc3M9InJpZ2h0Ij4NCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iLyI+5paH56ugPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii9hYm91dC1tZS5odG1sIj7lhbPkuo48L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iL2ZyaWVuZHMuaHRtbCI+5aW95Y+LPC9hPjwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L25hdj4NCiAgICA8L2Rpdj4NCjwvaGVhZGVyPg0KPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbnRhaW5lcjk2MCI+DQogICAge0BDb250ZW50fQ0KPC9kaXY+DQo8Zm9vdGVyIGlkPSJmb290ZXIiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIGNsZWFyIj4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPkdvIMKpIDIwMTQgQWxsIHJpZ2h0cyByZXNlcnZlZC48L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJyaWdodCI+UHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9zcGFuPg0KICAgIDwvZGl2Pg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KICAgIHt7U2V0dGluZyBgY19mb290ZXJfZ2FgIHwgSHRtbH19DQo8L2Zvb3Rlcj4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL2hvbWUuanMiPjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPg0Ke3tIdG1sICI8IS0tIHRoYW5rcyBmb3IgdGhlbWUgTGluZ29uYmVycnkoaHR0cDovL3d3dy5hbmRlcnNub3Jlbi5zZS8pIGZvciBXb3JkUHJlc3MtLT4ifX1QSwcIQ329+tkIAADZCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAdmlld1xsaW5nXGluZGV4Lmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5JZH19Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBsZWZ0IHRleHQtY2VudGVyIHJlbGF0aXZlIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLXJlZCBjb21tZW50cyI+PGEgaHJlZj0ie3suTGlua319I2NvbW1lbnQiPnt7LkNvbW1lbnROdW19fTwvYT48L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyBhYnNvbHV0ZSI+e3suSGl0c319PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbiByZWxhdGl2ZSI+DQogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgICAgICA8cCBjbGFzcz0idGltZS1pbmZvIj57e2lmIC5Vc2VyfX08c3Ryb25nPnt7LlVzZXIuTmlja319PC9zdHJvbmc+Jm5ic3A7Jm5ic3A7Jm5ic3A7e3tlbmR9feWPkeihqOS6jiZuYnNwOyZuYnNwOyZuYnNwO3t7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJZWVlZIOW5tCBNTSDmnIggREQg5pelIn19PC9wPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuU3VtbWFyeX19PC9zZWN0aW9uPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWcgaW5saW5lLWJsb2NrIj7moIfnrb7vvJp7ey5UYWdTdHJpbmd9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iaW5saW5lLWJsb2NrIHJlYWQgcmlnaHQiIGhyZWY9Int7Lkxpbmt9fSI+57un57ut6ZiF6K+7PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2FydGljbGU+e3tlbmR9fQ0KICAgIDxkaXYgY2xhc3M9InBhZ2VyIHRleHQtY2VudGVyIiBpZD0iYXJ0aWNsZS1wYWdlciI+DQogICAgICAgIHt7aWYgLlBhZ2VyLklzTmV4dH19PGEgaHJlZj0iL3Ave3suUGFnZXIuTmV4dH19LyIgY2xhc3M9Iml0ZW0gbGVmdCI+6L6D5pen55qE5paH56ugPC9hPnt7ZW5kfX0NCiAgICAgICAge3tpZiAuUGFnZXIuSXNQcmV2fX08YSBocmVmPSIvcC97ey5QYWdlci5QcmV2fX0vIiBjbGFzcz0iaXRlbSBy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" \ No newline at end of file +const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnttYXJnaW4tdG9wOjI0cHg7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3NldHRpbmctbmF2IGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDEycHh9I3NldHRpbmctbmF2IGxpIGF7cGFkZGluZzozcHggMTBweH0KI3NldHRpbmctbmF2IGxpIGE6aG92ZXIsI3NldHRpbmctbmF2IGxpIGEuY3VycmVudHtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMDA1YjlifQouc2V0dGluZy1wYW5lbHtkaXNwbGF5Om5vbmV9Ci5zZXR0aW5nLWZvcm17d2lkdGg6ODIwcHg7bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99LnNldHRpbmctZm9ybSAuaXB0e3dpZHRoOjQ4MHB4fQouc2V0dGluZy1mb3JtIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9Ci5zZXR0aW5nLWZvcm0gbGFiZWx7bWluLXdpZHRoOjEwZW19Ci5zZXR0aW5nLWZvcm0gLnRpcC5ibG9ja3ttYXJnaW4tbGVmdDoxMmVtfQojc2V0dGluZy1jdXN0b20tZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQua2V5e3dpZHRoOjI1MHB4fQojc2V0dGluZy1jdXN0b20tZm9ybSBpbnB1dC52YWx1ZXt3aWR0aDo2NTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojc2V0dGluZy1jdXN0b20tZm9ybSAudGlwe21hcmdpbi1sZWZ0OjB9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNudCwjY29tbWVudC1saXN0IC5jLWVtYWlse2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHh9CiNjb21tZW50LWxpc3QgLmMtcmVwbHl7Y29sb3I6Izk5OX0jY29tbWVudC1saXN0IC5jLXJlcGx5OmhvdmVye2NvbG9yOiMzMzN9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxM3B4fQojY29tbWVudC1saXN0IC5jLWF1dGhvci5hZG1pbntiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KI2NvbW1lbnQtbGlzdCAuYy1wLW1ke21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjaywjY29tbWVudC1saXN0IC5jLWRlbHtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhLCNjb21tZW50LWxpc3QgLmMtZGVsIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNoZWNrOmhvdmVyLCNjb21tZW50LWxpc3QgLmMtZGVsOmhvdmVye2NvbG9yOiNhYTM5M2N9CiNjb21tZW50LWZvcm17cGFkZGluZy10b3A6MTJweDtkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6NzJweH0jY29tbWVudC1mb3JtIC5idG57bWFyZ2luLXJpZ2h0OjI0cHh9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6NTAwcHg7aGVpZ2h0OjgwcHg7bWFyZ2luLXJpZ2h0OjI0cHh9CiNmaWxlcy1saXN0IGxpLmZpbGV7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNmaWxlcy1saXN0IGxpLmZpbGU+KnttYXJnaW4tcmlnaHQ6MTZweH0KI2ZpbGVzLWxpc3QgbGkuZmlsZTpob3ZlciAuZGVse29wYWNpdHk6MSAhaW1wb3J0YW50fQojZmlsZXMtbGlzdCAudXBsb2FkLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZmlsZXMtbGlzdCAuZGVse2NvbG9yOiNlNjQzNDZ9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2ZpbGVzLWxpc3QgLmZpbGUtcHJvZ3Jlc3MuZXJye2JhY2tncm91bmQ6cmdiYSgyNTUsNjgsNzEsMC4yKTtjb2xvcjojYWEzOTNjfQojZmlsZXMtbGlzdCAuc2l6ZXt3aWR0aDo0ZW07ZGlzcGxheTppbmxpbmUtYmxvY2t9CiNwbHVnaW4tbGlzdCBsaXttYXJnaW4tYm90dG9tOjE2cHg7cGFkZGluZy1ib3R0b206MTZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jcGx1Z2luLWxpc3QgbGkgLmRlc2N7bWFyZ2luLWJvdHRvbTowO3dpZHRoOjk5JTtjb2xvcjojOTk5fQojcGx1Z2luLWxpc3QgbGkgYS5sYmx7cGFkZGluZzowIDhweDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLnZlcnNpb257Y29sb3I6IzUwNzY1MDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLm5hbWV7Zm9udC1zaXplOjE2cHh9CiNwbHVnaW4tbGlzdCBsaSAuYWN0aXZle3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7bWFyZ2luLXJpZ2h0OjE2cHg7cGFkZGluZzowO21hcmdpbi10b3A6MTBweH0KI3BsdWdpbi1saXN0IGxpIC5zZXR0aW5ne21hcmdpbi1sZWZ0OjE2cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIHAuaXRlbXtjbGVhcjpib3RofQojcGx1Z2luLXNldHRpbmctZm9ybSBsYWJlbHtmbG9hdDpsZWZ0O21pbi13aWR0aDo2ZW07dGV4dC1hbGlnbjpyaWdodDttYXJnaW4tcmlnaHQ6MmVtfQojcGx1Z2luLXNldHRpbmctZm9ybSAudGl0bGV7cGFkZGluZy10b3A6MDttYXJnaW4tYm90dG9tOjE4cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIGlucHV0LmlwdHt3aWR0aDo2MDBweH0KI2Rhc2hib2FyZCAuZ3JpZC0xLTV7bWFyZ2luLXJpZ2h0OjIlfQojZGFzaGJvYXJkIC5xdWljay1saW5rIGxpe2xpc3Qtc3R5bGU6aW5zaWRlIGRpc2M7bWFyZ2luLWJvdHRvbTo2cHg7cGFkZGluZy1ib3R0b206NnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojZGFzaGJvYXJkIC5zdGF0cyAubGJse3BhZGRpbmc6MXB4IDVweDttYXJnaW46MCAzcHh9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2d7cGFkZGluZzo4cHggMTJweDttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGQ7bGluZS1oZWlnaHQ6MjRweDtmb250LXNpemU6MTJweH0jZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLmRhdGF7Y29sb3I6IzY2NjttYXJnaW4tbGVmdDoxLjJlbX0jZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5kYXRhIHB7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjI0cHh9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLnJlYWR7dG9wOjA7cmlnaHQ6MTJweDtvcGFjaXR5OjB9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAucmVhZDpob3Zlcntjb2xvcjojZTY0MzQ2fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4wNil9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZzpob3ZlciAucmVhZHtvcGFjaXR5OjF9ClBLBwjPelYnljAAAJYwAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcY3NzXGNtZC5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfQpoZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9CmF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja30KdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9CmZpZWxkc2V0LGltZ3tib3JkZXI6MH0KYWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH0Kb2wsdWx7bGlzdC1zdHlsZTpub25lfQpjYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH0KaDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfQpxOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9CmFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfQpzdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9CnN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH0KbGVnZW5ke2NvbG9yOiMwMDB9Cmh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifQphe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifQpwe21hcmdpbi1ib3R0b206MThweH0KaDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9Cmgxe2ZvbnQtc2l6ZToyOHB4fQpoMntmb250LXNpemU6MjRweH0KaDN7Zm9udC1zaXplOjIxcHh9Cmg0e2ZvbnQtc2l6ZToxOXB4fQpoNXtmb250LXNpemU6MTZweH0KaDZ7Zm9udC1zaXplOjE0cHh9Ci50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fQoudGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fQoudGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9Ci5sZWZ0e2Zsb2F0OmxlZnR9Ci5yaWdodHtmbG9hdDpyaWdodH0KLmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfQoucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9Ci5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9Ci52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfQouaW5saW5le2Rpc3BsYXk6aW5saW5lfQouaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfQouYmxvY2t7ZGlzcGxheTpibG9ja30KLmZhZGUtb3V0e29wYWNpdHk6MH0KLmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9Ci5jb250YWluZXJ7bWF4LXdpZHRoOjEyMDBweDttYXJnaW46YXV0b30KLmNvbnRhaW5lcjk2MHttYXgtd2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99Ci5ncmlkLTEtMnt3aWR0aDo1MCV9Ci5ncmlkLTEtM3t3aWR0aDozMy4zMzMzJX0KLmdyaWQtMS00e3dpZHRoOjI1JX0KLmdyaWQtMS01e3dpZHRoOjIwJX0KLmdyaWQtMS02e3dpZHRoOjE2LjY2NjYlfQouZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9Ci5ncmlkLTMtNHt3aWR0aDo3NSV9Ci5ncmlkLTMtNXt3aWR0aDo2MCV9Ci5ncmlkLTQtNXt3aWR0aDo4MCV9Ci5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0LGJ1dHRvbntmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZn0KLmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0KLmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC5pcHR7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTttaW4td2lkdGg6MTgwcHh9LmZvcm0gLmlwdDpmb2N1c3tib3JkZXItY29sb3I6IzAwNzliY30KLmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfQouZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fQouZm9ybSAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9Ci5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9Ci5mb3JtLXZlcnRpY2FsIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3h9Ci5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fQouZm9ybS1hbGlnbiAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn0KYS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfQouYnRuLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0uYnRuLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2F9Ci5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifQouYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfQoubGJse3BhZGRpbmc6NHB4IDEycHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fQoubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KYS5sYmx7bGluZS1oZWlnaHQ6MjZweH0KYS5sYmwtcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYTtjb2xvcjojZmJmYmZifQoubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CmEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9CmEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifQoucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30KLnBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5pdGVtOmhvdmVyIGF7Y29sb3I6I2ZmZn0KLnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifQoucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgyLC5tYXJrZG93biBoMywubWFya2Rvd24gaDQsLm1hcmtkb3duIGg1LC5tYXJrZG93biBoNntwYWRkaW5nOjE4cHggMCA5cHggMDtmb250LXdlaWdodDpib2xkfQoubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHh9Ci5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMnttYXJnaW4tYm90dG9tOjEwcHg7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KLm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fQoubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Ci5tYXJrZG93biBoNXtmb250LXNpemU6MTZweH0KLm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fQoubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Ci5tYXJrZG93biB1bHtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlfQoubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0KLm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0KLm1hcmtkb3duIHAgY29kZXtjb2xvcjojYzczODNhfQoubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0KLm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Ci5tYXJrZG93biBvbCwubWFya2Rvd24gdWx7bWFyZ2luOjEycHggMjRweH0KLm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfQoubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0KLm1hcmtkb3duIHRhYmxlIHRoZWFke2JhY2tncm91bmQ6I2Y2ZjZmNn0KLmNtZHttYXJnaW46MjRweCA0OHB4fQouY21kLWhlYWRlcnttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1idG57bWFyZ2luOjEwcHggMCAwIDMwcHh9Ci5jbWQtbGlzdCBsaXttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1saXN0IGxpe2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGU7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jYmFja3VwLWxpc3QgbGk+c3BhbiwjYmFja3VwLWxpc3QgbGk+YXttYXJnaW4tcmlnaHQ6MTZweH0KI2JhY2t1cC1saXN0IGxpIC5kZWx7Y29sb3I6I2U2NDM0NjtvcGFjaXR5OjB9CiNiYWNrdXAtbGlzdCBsaSAubGlua3ttYXJnaW4tbGVmdDoxMnB4fQojYmFja3VwLWxpc3QgbGk6aG92ZXIgLmRlbHtvcGFjaXR5OjF9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2V7cGFkZGluZzo4cHggMTJweDttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGQ7bGluZS1oZWlnaHQ6MjRweDtmb250LXNpemU6MTJweH0jbWVzc2FnZS1saXN0IC5tZXNzYWdlIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLmRhdGF7Y29sb3I6IzY2NjttYXJnaW4tbGVmdDoxLjJlbX0jbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5kYXRhIHB7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjI0cHh9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLnJlYWR7dG9wOjA7cmlnaHQ6MTJweDtvcGFjaXR5OjB9I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAucmVhZDpob3Zlcntjb2xvcjojZTY0MzQ2fQojbWVzc2FnZS1saXN0IC5tZXNzYWdlOmhvdmVyIC5yZWFke29wYWNpdHk6MX0KI2xvZy1saXN0IC5sb2d7Zm9udC1zaXplOjEycHh9CiNsb2ctbGlzdCAubmFtZXttYXJnaW4tcmlnaHQ6MS41ZW07Zm9udC13ZWlnaHQ6Ym9sZH0KI2xvZy1saXN0IC50aW1lLCNsb2ctbGlzdCAubmFtZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojbG9nLWxpc3QgLnRleHR7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsO2NvbG9yOiM2NjY7cGFkZGluZzo4cHggMTJweDtiYWNrZ3JvdW5kOiNmM2YzZjN9CiNsb2ctbGlzdCAucmVtb3Zle3RvcDowO3JpZ2h0OjEycHg7Y29sb3I6I2U2NDM0Nn0KUEsHCNI3xBsvGgAALxoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHN0YXRpY1xjc3NcY29kZW1pcnJvci5jc3MvKiBCQVNJQ1MgKi8KCi5Db2RlTWlycm9yIHsKICAgIC8qIFNldCBoZWlnaHQsIHdpZHRoLCBib3JkZXJzLCBhbmQgZ2xvYmFsIGZvbnQgcHJvcGVydGllcyBoZXJlICovCiAgICBmb250LWZhbWlseTogQ29uc29sYXMsICJNaWNyb3NvZnQgWWFIZWkiLCAiQ291cmllciBOZXciLCBBcmlhbDsKICAgIGhlaWdodDogNjYwcHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBib3JkZXI6MXB4IHNvbGlkICM5OTk7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiBTZXQgc2Nyb2xsaW5nIGJlaGF2aW91ciBoZXJlICovCiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLyogUEFERElORyAqLwoKLkNvZGVNaXJyb3ItbGluZXMgewogICAgcGFkZGluZzogNHB4IDA7IC8qIFZlcnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAqLwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyAvKiBUaGUgbGl0dGxlIHNxdWFyZSBiZXR3ZWVuIEggYW5kIFYgc2Nyb2xsYmFycyAqLwp9CgovKiBHVVRURVIgKi8KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVycyB7Cn0KCi5Db2RlTWlycm9yLWxpbmVudW1iZXIgewogICAgcGFkZGluZzogMCAzcHggMCA1cHg7CiAgICBtaW4td2lkdGg6IDIwcHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIGNvbG9yOiAjNTU1OwogICAgbGluZS1oZWlnaHQ6IDIwcHg7Cn0KCi8qIENVUlNPUiAqLwoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7CiAgICB6LWluZGV4OiAzOwp9CgovKiBTaG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0ICovCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHNpbHZlcjsKfQoKLkNvZGVNaXJyb3IuY20ta2V5bWFwLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHdpZHRoOiBhdXRvOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogIzdlNzsKICAgIHotaW5kZXg6IDE7Cn0KCi8qIENhbiBzdHlsZSBjdXJzb3IgZGlmZmVyZW50IGluIG92ZXJ3cml0ZSAobm9uLWluc2VydCkgbW9kZSAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IuQ29kZU1pcnJvci1vdmVyd3JpdGUgewp9CgouY20tdGFiIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLyogREVGQVVMVCBUSEVNRSAqLwoKLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7CiAgICBjb2xvcjogIzcwODsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7CiAgICBjb2xvcjogIzIxOTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHsKICAgIGNvbG9yOiAjMTY0Owp9CgouY20tcy1kZWZhdWx0IC5jbS1kZWYgewogICAgY29sb3I6ICMwMGY7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzA1YTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMyB7CiAgICBjb2xvcjogIzA4NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcHJvcGVydHkgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICNhNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZyB7CiAgICBjb2xvcjogI2ExMTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nLTIgewogICAgY29sb3I6ICNmNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW1ldGEgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1YWxpZmllciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnVpbHRpbiB7CiAgICBjb2xvcjogIzMwYTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnJhY2tldCB7CiAgICBjb2xvcjogIzk5NzsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdGFnIHsKICAgIGNvbG9yOiAjMTcwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICMwMGM7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhlYWRlciB7CiAgICBjb2xvcjogYmx1ZTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUgewogICAgY29sb3I6ICMwOTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhyIHsKICAgIGNvbG9yOiAjOTk5Owp9CgouY20tcy1kZWZhdWx0IC5jbS1saW5rIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tbmVnYXRpdmUgewogICAgY29sb3I6ICNkNDQ7Cn0KCi5jbS1wb3NpdGl2ZSB7CiAgICBjb2xvcjogIzI5MjsKfQoKLmNtLWhlYWRlciwgLmNtLXN0cm9uZyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLWVtIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmNtLWxpbmsgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWVycm9yIHsKICAgIGNvbG9yOiAjZjAwOwp9CgouY20taW52YWxpZGNoYXIgewogICAgY29sb3I6ICNmMDA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICMwZjA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICNmMjI7Cn0KCi5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjZThmMmZmOwp9CgovKiBTVE9QICovCgovKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgY29udGFpbnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZgogICB0aGUgZWRpdG9yLiBZb3UgcHJvYmFibHkgc2hvdWxkbid0IHRvdWNoIHRoZW0uICovCgouQ29kZU1pcnJvciB7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIGNvbG9yOiBibGFjazsKfQoKLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIC8qIDMwcHggaXMgdGhlIG1hZ2ljIG1hcmdpbiB1c2VkIHRvIGhpZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJhcnMgKi8KICAgIC8qIFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAgICBtYXJnaW4tYm90dG9tOiAtMzBweDsKICAgIG1hcmdpbi1yaWdodDogLTMwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdXRsaW5lOiBub25lOyAvKiBQcmV2ZW50IGRyYWdnaW5nIGZyb20gaGlnaGxpZ2h0aW5nIHRoZSBlbGVtZW50ICovCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KCi5Db2RlTWlycm9yLXNpemVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLyogVGhlIGZha2UsIHZpc2libGUgc2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSByZWRyYXcgZHVyaW5nIHNjcm9sbGluZwogICBiZWZvcmUgYWN0dWFsbCBzY3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNoYWtpbmcgYW5kCiAgIGZsaWNrZXJpbmcgYXJ0aWZhY3RzLiAqLwouQ29kZU1pcnJvci12c2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHotaW5kZXg6IDY7CiAgICBkaXNwbGF5OiBub25lOwp9CgouQ29kZU1pcnJvci12c2Nyb2xsYmFyIHsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcmZsb3cteTogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1oc2Nyb2xsYmFyIHsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBvdmVyZmxvdy14OiBzY3JvbGw7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIgewogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIgewogICAgbGVmdDogMDsKICAgIGJvdHRvbTogMDsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVycyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgdG9wOiAwOwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICB6LWluZGV4OiAzOwp9CgouQ29kZU1pcnJvci1ndXR0ZXIgewogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGhlaWdodDogMTAwJTsKICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgbWFyZ2luLWJvdHRvbTogLTMycHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAvKiBIYWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqLwogICAgKnpvb206IDE7CiAgICAqZGlzcGxheTogaW5saW5lOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZWx0IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIHotaW5kZXg6IDQ7Cn0KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIGN1cnNvcjogdGV4dDsKfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIC8qIFJlc2V0IHNvbWUgc3R5bGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgbWlnaHQgaGF2ZSBzZXQgKi8KICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItd2lkdGg6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgbWFyZ2luOiAwOwogICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIHotaW5kZXg6IDI7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKfQoKLkNvZGVNaXJyb3Itd3JhcCBwcmUgewogICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC1icmVhazogbm9ybWFsOwp9CgouQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICB3aWR0aDogLXdlYmtpdC1maXQtY29udGVudDsKICAgIHdpZHRoOiAtbW96LWZpdC1jb250ZW50OwogICAgd2lkdGg6IGZpdC1jb250ZW50Owp9CgouQ29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLWNvZGUgcHJlIHsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiBhdXRvOwp9CgouQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB6LWluZGV4OiAwOwp9CgouQ29kZU1pcnJvci1saW5ld2lkZ2V0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLkNvZGVNaXJyb3Itd2lkZ2V0IHsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwgewogICAgb3ZlcmZsb3cteDogaGlkZGVuOwp9CgouQ29kZU1pcnJvci1tZWFzdXJlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUgewogICAgcG9zaXRpb246IHN0YXRpYzsKfQoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiAwOwp9CgouQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgouQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDlkOWQ5Owp9CgouQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICNkN2Q0ZjA7Cn0KCi5jbS1zZWFyY2hpbmcgewogICAgYmFja2dyb3VuZDogI2ZmYTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDAsIC40KTsKfQoKLyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVybmluZyBmdW5ueSBvZmZzZXRUb3BzIG9uIHRoZSBzcGFucyAqLwouQ29kZU1pcnJvciBzcGFuIHsKICAgICp2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207Cn0KCkBtZWRpYSBwcmludCB7CiAgICAvKiBIaWRlIHRoZSBjdXJzb3Igd2hlbiBwcmludGluZyAqLwogICAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9Cn0KCi5jbS1zLWJhc2UxNi1kYXJrLkNvZGVNaXJyb3IgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGNvbG9yOiAjZTBlMGUwOwp9CgouY20tcy1iYXNlMTYtZGFyayBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjMjAyMDIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGJvcmRlci1yaWdodDogMHB4Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1jdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYjBiMGIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tY29tbWVudCB7CiAgICBjb2xvcjogIzhmNTUzNjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdG9tIHsKICAgIGNvbG9yOiAjYWE3NTlmOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLW51bWJlciB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1wcm9wZXJ0eSwgLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20ta2V5d29yZCB7CiAgICBjb2xvcjogI2FjNDE0MjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1zdHJpbmcgewogICAgY29sb3I6ICNmNGJmNzU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzZhOWZiNTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1kZWYgewogICAgY29sb3I6ICNkMjg0NDU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYnJhY2tldCB7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS10YWcgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tbGluayB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1lcnJvciB7CiAgICBiYWNrZ3JvdW5kOiAjYWM0MTQyOwogICAgY29sb3I6ICNiMGIwYjA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjMkYyRjJGICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9ClBLBwgjAzWCTiAAAE4gAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAABzdGF0aWNcY3NzXGNvbW1vbi5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfWhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9dGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9ZmllbGRzZXQsaW1ne2JvcmRlcjowfWFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9b2wsdWx7bGlzdC1zdHlsZTpub25lfWNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH1xOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9YWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9c3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfXN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWxlZ2VuZHtjb2xvcjojMDAwfWh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifWF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9cHttYXJnaW4tYm90dG9tOjE4cHh9aDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9aDF7Zm9udC1zaXplOjI4cHh9aDJ7Zm9udC1zaXplOjI0cHh9aDN7Zm9udC1zaXplOjIxcHh9aDR7Zm9udC1zaXplOjE5cHh9aDV7Zm9udC1zaXplOjE2cHh9aDZ7Zm9udC1zaXplOjE0cHh9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmxlZnR7ZmxvYXQ6bGVmdH0ucmlnaHR7ZmxvYXQ6cmlnaHR9LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfS52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uYmxvY2t7ZGlzcGxheTpibG9ja30uZmFkZS1vdXR7b3BhY2l0eTowfS5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5jb250YWluZXJ7d2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7d2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99LmdyaWQtMS0ye3dpZHRoOjUwJX0uZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9LmdyaWQtMS00e3dpZHRoOjI1JX0uZ3JpZC0xLTV7d2lkdGg6MjAlfS5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0uZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9LmdyaWQtMy00e3dpZHRoOjc1JX0uZ3JpZC0zLTV7d2lkdGg6NjAlfS5ncmlkLTQtNXt3aWR0aDo4MCV9LmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfWlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9LmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0uZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9LmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfS5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9LmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9LmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0uZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9LmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn1hLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9LmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfS5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifS5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9LmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn1hLmxibHtsaW5lLWhlaWdodDoyNnB4fWEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0ubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9YS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0ubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifWEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifS5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfS5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9LnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifS5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Lm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0ubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHg7cGFkZGluZy1ib3R0b206MTJweH0ubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Lm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fS5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0ubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Lm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fS5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0ubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0ubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0ubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfS5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0ubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0ubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0ubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Lm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfS5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fS5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9UEsHCHu8/YwmFAAAJhQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xjc3NcaGlnaGxpZ2h0LmNzcy8qDQoNClN1bmJ1cnN0LWxpa2Ugc3R5bGUgKGMpIFZhc2lseSBQb2xvdm55b3YgPHZhc3RAd2hpdGVhbnRzLm5ldD4NCg0KKi8NCg0KcHJlIGNvZGUgew0KICAgIGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAwLjVlbTsNCiAgICBiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2Y4ZjhmODsNCn0NCg0KcHJlIC5jb21tZW50LA0KcHJlIC50ZW1wbGF0ZV9jb21tZW50LA0KcHJlIC5qYXZhZG9jIHsNCiAgICBjb2xvcjogI2FlYWVhZTsNCiAgICBmb250LXN0eWxlOiBpdGFsaWM7DQp9DQoNCnByZSAua2V5d29yZCwNCnByZSAucnVieSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnJlcXVlc3QsDQpwcmUgLnN0YXR1cywNCnByZSAubmdpbnggLnRpdGxlIHsNCiAgICBjb2xvcjogI0UyODk2NDsNCn0NCg0KcHJlIC5mdW5jdGlvbiAua2V5d29yZCwNCnByZSAuc3ViIC5rZXl3b3JkLA0KcHJlIC5tZXRob2QsDQpwcmUgLmxpc3QgLnRpdGxlIHsNCiAgICBjb2xvcjogIzk5Q0Y1MDsNCn0NCg0KcHJlIC5zdHJpbmcsDQpwcmUgLnRhZyAudmFsdWUsDQpwcmUgLmNkYXRhLA0KcHJlIC5maWx0ZXIgLmFyZ3VtZW50LA0KcHJlIC5hdHRyX3NlbGVjdG9yLA0KcHJlIC5hcGFjaGUgLmNicmFja2V0LA0KcHJlIC5kYXRlLA0KcHJlIC50ZXggLmNvbW1hbmQsDQpwcmUgLmNvZmZlZXNjcmlwdCAuYXR0cmlidXRlIHsNCiAgICBjb2xvcjogIzY1QjA0MjsNCn0NCg0KcHJlIC5zdWJzdCB7DQogICAgY29sb3I6ICNEQUVGQTM7DQp9DQoNCnByZSAucmVnZXhwIHsNCiAgICBjb2xvcjogI0U5QzA2MjsNCn0NCg0KcHJlIC50aXRsZSwNCnByZSAuc3ViIC5pZGVudGlmaWVyLA0KcHJlIC5waSwNCnByZSAudGFnLA0KcHJlIC50YWcgLmtleXdvcmQsDQpwcmUgLmRlY29yYXRvciwNCnByZSAuc2hlYmFuZywNCnByZSAucHJvbXB0IHsNCiAgICBjb2xvcjogIzg5QkRGRjsNCn0NCg0KcHJlIC5jbGFzcyAudGl0bGUsDQpwcmUgLmhhc2tlbGwgLnR5cGUsDQpwcmUgLnNtYWxsdGFsayAuY2xhc3MsDQpwcmUgLmphdmFkb2N0YWcsDQpwcmUgLnlhcmRvY3RhZywNCnByZSAucGhwZG9jIHsNCiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCg0KcHJlIC5zeW1ib2wsDQpwcmUgLnJ1YnkgLnN5bWJvbCAuc3RyaW5nLA0KcHJlIC5udW1iZXIgew0KICAgIGNvbG9yOiAjMzM4N0NDOw0KfQ0KDQpwcmUgLnBhcmFtcywNCnByZSAudmFyaWFibGUsDQpwcmUgLmNsb2p1cmUgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICMzRTg3RTM7DQp9DQoNCnByZSAuY3NzIC50YWcsDQpwcmUgLnJ1bGVzIC5wcm9wZXJ0eSwNCnByZSAucHNldWRvLA0KcHJlIC50ZXggLnNwZWNpYWwgew0KICAgIGNvbG9yOiAjQ0RBODY5Ow0KfQ0KDQpwcmUgLmNzcyAuY2xhc3Mgew0KICAgIGNvbG9yOiAjOUI3MDNGOw0KfQ0KDQpwcmUgLnJ1bGVzIC5rZXl3b3JkIHsNCiAgICBjb2xvcjogI0M1QUY3NTsNCn0NCg0KcHJlIC5ydWxlcyAudmFsdWUgew0KICAgIGNvbG9yOiAjQ0Y2QTRDOw0KfQ0KDQpwcmUgLmNzcyAuaWQgew0KICAgIGNvbG9yOiAjOEI5OEFCOw0KfQ0KDQpwcmUgLmFubm90YXRpb24sDQpwcmUgLmFwYWNoZSAuc3FicmFja2V0LA0KcHJlIC5uZ2lueCAuYnVpbHRfaW4gew0KICAgIGNvbG9yOiAjOUI4NTlEOw0KfQ0KDQpwcmUgLnByZXByb2Nlc3NvciwNCnByZSAucHJhZ21hIHsNCiAgICBjb2xvcjogIzg5OTZBODsNCn0NCg0KcHJlIC5oZXhjb2xvciwNCnByZSAuY3NzIC52YWx1ZSAubnVtYmVyIHsNCiAgICBjb2xvcjogI0REN0IzQjsNCn0NCg0KcHJlIC5jc3MgLmZ1bmN0aW9uIHsNCiAgICBjb2xvcjogI0RBRDA4NTsNCn0NCg0KcHJlIC5kaWZmIC5oZWFkZXIsDQpwcmUgLmNodW5rLA0KcHJlIC50ZXggLmZvcm11bGEgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwRTIyMzE7DQogICAgY29sb3I6ICNGOEY4Rjg7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmRpZmYgLmNoYW5nZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzRBNDEwRDsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5hZGRpdGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI1M0IyMjsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5kZWxldGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzQyMEUwOTsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5jb2ZmZWVzY3JpcHQgLmphdmFzY3JpcHQsDQpwcmUgLmphdmFzY3JpcHQgLnhtbCwNCnByZSAudGV4IC5mb3JtdWxhLA0KcHJlIC54bWwgLmphdmFzY3JpcHQsDQpwcmUgLnhtbCAudmJzY3JpcHQsDQpwcmUgLnhtbCAuY3NzLA0KcHJlIC54bWwgLmNkYXRhIHsNCiAgICBvcGFjaXR5OiAwLjU7DQp9DQoNCnByZSAuZ28gLnR5cGVuYW1lew0KICAgIGNvbG9yOiAjZmZiYzU0Ow0KfVBLBwjDaOPeXQkAAF0JAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcY3NzXGxpbmcuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOiNmM2YzZjN9CiNoZWFkZXJ7YmFja2dyb3VuZDojMDA5M2M0O21pbi13aWR0aDoxMjBweDtwYWRkaW5nOjQwcHggMCA0OHB4IDA7Y29sb3I6I2ZiZmJmYn0jaGVhZGVyIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7Ym9yZGVyLXJhZGl1czo1MHB4Oy1tb3otYm9yZGVyLXJhZGl1czo1MHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo1MHB4fQojaGVhZGVyLWh7bGluZS1oZWlnaHQ6OTRweDtjb2xvcjojZmJmYmZiO3BhZGRpbmc6MDttYXJnaW4tbGVmdDoyNHB4fSNoZWFkZXItaCBhe2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItc3Vie2NvbG9yOiNmM2YzZjM7bWFyZ2luLWxlZnQ6MS4yZW07Zm9udC1zaXplOjE2cHh9CiNuYXZ7bGluZS1oZWlnaHQ6OTBweH0jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7bWFyZ2luLWxlZnQ6NDRweH0jbmF2IGxpIGF7Zm9udC1zaXplOjE4cHg7Y29sb3I6I2YzZjNmMztkaXNwbGF5OmJsb2NrfSNuYXYgbGkgYTpob3Zlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgMCAzcHggIzMzMzstbW96LXRleHQtc2hhZG93OjAgMCAzcHggIzMzMzstd2Via2l0LXRleHQtc2hhZG93OjAgMCAzcHggIzMzM30KI2Zvb3RlcntwYWRkaW5nOjMwcHggNDBweDtjb2xvcjojOTk5fQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0jYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAudmlld3N7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIC5jb21tZW50c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjQwcHg7bWFyZ2luLWxlZnQ6OHB4O2JvcmRlcjo2cHggc29saWQgI2ZmZjtib3gtc2hhZG93OjAgMCAycHggIzk5OTstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICM5OTl9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cyBhe2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHM6aG92ZXJ7Ym94LXNoYWRvdzowIDAgNHB4ICM2NjY7LW1vei1ib3gtc2hhZG93OjAgMCA0cHggIzY2Njstd2Via2l0LWJveC1zaGFkb3c6MCAwIDRweCAjNjY2fQojYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze3RvcDoxNHB4O2xlZnQ6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czozMHB4Oy1tb3otYm9yZGVyLXJhZGl1czozMHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozMHB4O3BhZGRpbmc6MDtib3JkZXI6NHB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tYWluOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7Ym9yZGVyOjExcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjYzcHg7bGVmdDotMjJweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aXRsZXtmb250LXNpemU6MjhweDtwYWRkaW5nLWJvdHRvbToyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW4gLnRpbWUtaW5mb3tjb2xvcjojOTk5O21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO3RleHQtaW5kZW50OjFlbTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjUwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1haW57bWFyZ2luLWxlZnQ6MH0jYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWluOmJlZm9yZXtkaXNwbGF5Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1ldGF7cmlnaHQ6NDRweDt0b3A6LTM2cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLnZpZXdze3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czozNnB4Oy1tb3otYm9yZGVyLXJhZGl1czozNnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozNnB4O2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1zaXplOjI0cHg7cGFkZGluZzowO2JvcmRlcjo2cHggc29saWQgI2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC50YWd7Y29sb3I6Izk5OX0KI2FydGljbGUtcGFnZXJ7bWFyZ2luLWxlZnQ6MTE2cHh9I2FydGljbGUtcGFnZXIgLml0ZW17bWFyZ2luOjA7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM5OTk7cGFkZGluZzoxMnB4IDE4cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQ6IzAwNzliY30KI2NvbW1lbnR7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2NvbW1lbnQgLm1ldGF7cmlnaHQ6LTI0cHg7dG9wOi0zMHB4fSNjb21tZW50IC5tZXRhIC5jb21tZW50c3ttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye21hcmdpbi1yaWdodDoxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDttYXJnaW4tdG9wOjZweH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIHB7bWFyZ2luLWJvdHRvbTowfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3J7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmJsb2NrfSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3I6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZGRkO3BhZGRpbmc6M3B4IDEwcHh9I2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KI2NvbW1lbnQtbGlzdCAuYy1jb250ZW50e3BhZGRpbmctdG9wOjRweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2O21hcmdpbi1sZWZ0OjEycHh9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1zaG93e21hcmdpbi1ib3R0b206MzJweH0KI2NvbW1lbnQtdGl0bGV7bWFyZ2luLWJvdHRvbToyMHB4O3BhZGRpbmctYm90dG9tOjIwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvO21hcmdpbi1ib3R0b206MzBweH0jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcntib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHg7d2lkdGg6NTBweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXtkaXNwbGF5Om5vbmV9ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH0gI25hdiwjaGVhZGVyLWh7bGluZS1oZWlnaHQ6NTBweH0gI2Zvb3RlciBzcGFue2Zsb2F0Om5vbmU7dGV4dC1hbGlnbjpjZW50ZXJ9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1oe21hcmdpbi1sZWZ0OjB9ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfSAjbmF2e2Zsb2F0OmxlZnR9I25hdiBsaXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo0NHB4fX0KUEsHCM/D6tacKgAAnCoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHN0YXRpY1xjc3Ncc3R5bGUuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2JnLnBuZyIpIHJlcGVhdH0KI2hlYWRlcntiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2hlYWRlci5naWYiKSByZXBlYXQgIzRjNzI5ODttaW4td2lkdGg6MTIwcHg7cGFkZGluZzozMHB4IDA7Y29sb3I6I2ZiZmJmYn0KI2hlYWRlci1pbWd7d2lkdGg6OTZweDtoZWlnaHQ6OTZweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe3BhZGRpbmctdG9wOjI0cHg7Zm9udC1zaXplOjMycHh9I2hlYWRlci1oIGF7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfQojbmF2e2hlaWdodDo1NHB4O2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3gtc2hhZG93OjAgMCAycHggI2JiYjstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICNiYmI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY30jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7cGFkZGluZzowIDE4cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7cGFkZGluZzowIDMycHg7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzAwNzliY30KI25hdi5maXhlZHtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO3RvcDowfQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZm9vdGVye2NvbG9yOiNjY2M7YmFja2dyb3VuZC1jb2xvcjojMWMyNDI5O3BhZGRpbmc6MjRweCAwfSNmb290ZXIgcHttYXJnaW4tYm90dG9tOjlweDtmb250LXdlaWdodDpib2xkO2xldHRlci1zcGFjaW5nOjFweH0jZm9vdGVyIHAgYXtjb2xvcjojY2NjO21hcmdpbjowIDE2cHh9I2Zvb3RlciBwIGE6aG92ZXJ7Y29sb3I6I2ZiZmJmYn0KI2Zvb3RlciBwIGEgLmZhe21hcmdpbi1yaWdodDo4cHh9CiNnby10b3B7Ym90dG9tOjUwcHg7cmlnaHQ6NDBweDtwb3NpdGlvbjpmaXhlZDtjb2xvcjojZmZmO3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo4cHg7b3BhY2l0eTouNH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhe3dpZHRoOjEwOHB4O2xpbmUtaGVpZ2h0OjI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudmlld3MsI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYXtjb2xvcjojZmZmfSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDoxNDBweH0KI2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxle3BhZGRpbmc6OHB4IDE2cHg7YmFja2dyb3VuZC1jb2xvcjojNGM3Mjk4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjJweH0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYXtjb2xvcjojZWVlfSNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtwYWRkaW5nOjE4cHggMjRweCAyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm97bWFyZ2luLWJvdHRvbTowO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcDpub25lO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjJweDtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5zaGFyZSAuZmF7bWFyZ2luLXJpZ2h0OjB9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz4qe3BhZGRpbmc6NnB4IDE4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz5zcGFue2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZX0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFke2NvbG9yOiM5OTl9I2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLnRpbWUsI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC52aWV3cyBzcGFue2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciBhcnRpY2xle21hcmdpbi1ib3R0b206NDhweH0KI2NvbW1lbnR7bWFyZ2luLXRvcDotMjRweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmZmZ9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvfSNjb21tZW50LWZvcm0gLmMtaW5mb3t3aWR0aDoyNiV9I2NvbW1lbnQtZm9ybSAuYy1pbmZvIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjB9CiNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDo3MCV9CiNjb21tZW50LWZvcm0gLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjE4cHg7cGFkZGluZy1ib3R0b206MThweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1saXN0IC5jLXNlY3Rpb257bWF4LXdpZHRoOjgzMHB4fQojY29tbWVudC1saXN0IC5jLWNoZWNre2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNlNjQzNDZ9I2NvbW1lbnQtbGlzdCAuYy1jaGVjayAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MH0gI2FydGljbGUtY29udGFpbmVyIC5tZXRhLmxlZnR7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MDt3aWR0aDphdXRvfSAjbmF2IGxpe3BhZGRpbmc6MCAxMHB4fSAjaGVhZGVyLWltZ3tmbG9hdDpsZWZ0O3dpZHRoOjY0cHg7aGVpZ2h0OjY0cHh9ICNoZWFkZXItaHtwYWRkaW5nOjE3cHggMDtmb250LXNpemU6MjRweH0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLnRhZywjYXJ0aWNsZS1jb250YWluZXIgLnRpbWV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3Jte3dpZHRoOjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1pbWd7ZGlzcGxheTpub25lfSAjaGVhZGVyLXN1YntkaXNwbGF5Om5vbmV9ICNjb21tZW50LWxpc3QgLmMtYXZhdGFye2Rpc3BsYXk6bm9uZX19ClBLBwiqeuwujSgAAI0oAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcZmF2aWNvbi5pY28AAAEAAQAgIAAAAQAgAKgQAAAWAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAEAAAEgsAABILAAAAAAAAAAAAALN+B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs34H27N+B9uzfgfbs34H27N+B9uzfgfbs30H27N+B9uzfgfbs30H27N+B9uzfgfbs34H27N+B9uyfAfWr3oHx61+GK21k0qQuoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoMN/7qGF/+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7qBCP+5gQj/uYII/7qBCP+6ggj/uoII/7mBCP+5gQj/uYII/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoII/7mBCP+5gQj/uoEI/7qBCP+6ggj/uoII/7qBCP+6ggj/uoEI/7qCCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6gQj/uYEI/7mBCP+5ggf/uYIH/7mCB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+8hAX/vIQF/7uDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yDBf+8hAX/vIQF/7yDBf+8hAb/vIQG/8CHA//AhgP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhwT/wIcE/8CGA//AhgL/xYkC/8WJAf/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYoC/8WJAf/FigP/x48O/8yaJ//JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/Jkxf/1q9T/+HAdf/p0p//8+fN/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y40A/8ugPf/y693+/v36/v/////////+yo4A/sqNAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgH/y44A/8uOAP/LjQD/yo4A/8uOAP/LjgD/y44B/8uOAf/LjgD/y44A/8uOAP/LjgD/y44B/8qNAP/Ljwb/2Llz//r59f7+///+/v7+//7+/v7KjgD+yo0A/8uOAP/LjgD/yo4A/8qOAP/KjgD/yo4A/8uOAP/LjgD/yo4A/8uOAP/LjgD/yo0A/8uNAP/LjgH/yY0B/8eNCP/KjgP/yo0A/8uNAP/KjQD/yo0A/8qNAP/LjwL/0Job/9++cf/17+D//v7+/v////7+/v7//v7+/suOAfrLjgD/yo0A/8uOAP/LjgH/yo4A/8qOAP/KjgD/y44A/8qOAP/KjgD/y44A/8uOAf/KjgD/yo0A/8mMAP/HmjT/wat5/6iLSP/Npk7/xZgw/8+fMf/Wpjn/2rBP/+LCd//w37n/+/jy//7+///+/v7////////////+/v7/vJIyvruKGf/Mkgz/yo4A/8qNAP/KjQD/yo0A/8qOAP/KjgD/yo4A/8qNAP/KjQD/yo0A/8uOAf/QmRj/yaNN/9DGrf/l5eb/pqWj/+nm3//EvrH/4drJ/vnz4/779uz//fz5//////7////+/v7+//7+/v////////////7+/v+Vk42UmY95/+bOmf/gvWr/2a1I/9SjMv/Rmx//z5YT/8+VEf/PlRH/z5cX/9OfKP/Zq0P/4b9x/+3bs//QzMT/w8PD/urq6v62trb+6Ojo/rS0tf7a29v+/f39/v7///7+/v7//////v////7+/v7//v7+//////7////+/////peWlpWSkpP/9vb1//379//59Of/9u3X//Lkxf/w37j/7tyy/+/cs//x4bv/9enO//nz5P/39fL/ycnK/6+vr/+lpKT/vb29/5SUlP+5ubn/p6en/7Gxsf/R0dH//Pz8///////+/v7//v7+//7+/v/+/v7////////////+/v7/qampmJGRkf/y8vL////+//7+/v/////////////////+/v7//v7+//7+///+/////////+Hh4P+6ubn/7+/v/+zs7P/X19f/xsbG/97e3v/19fX/6urr/7i4uP/x8fH///////7+/v7//////v7+//7+/v////////////7+/v+bm5tng4OD8O3t7f///////////v///v7+/v7//v7+/v/+/v7+/v7++fn5/vb29v76+vr+5+fo/7e3t//t7e3/+Pj4/t3d3f7Y2Nj+8vLy/v7+/v7Y2Nj+vr6+/vj4+P7//////////v////7+/v7//v7+//////7////+/////jU1NSNxcXHY5ubm//////7////+//////7+/v//////7+/v/tDQ0P++vr7+urq6/r6+vv/R0dH+z8/P/qysrP9nZ2f+Kysr/yMjI/9bW1v/q6ur/729vf7k5OT+5eXl/9ra2v/f39/+8PDw/v39/f/////+/v7+/v/////////+jY2NJ3V1ddrb29v//////v////7//////v7+/+Hh4f+1tbX+ysrK/+Pj4/7n5+f+4+Pj/8nJyf6+vr7+t7e3/ywsLP4AAAD/AAAA/wYGBv+Ghob/19fX/r6+vv68vLz/wcHB/76+vv65ubn+x8fH//Hx8f7////+//////////7g4OAkhISE2cXFxf///////////v/////n5+f/tbW1/+Tk5P///////////v/////////+/v7+/uDg4P+2trb/rq6u/25ubv9ZWVn/g4OD/7u7u/++vr7/5OTk/vr6+v/9/f3//Pz8/vDw8P/Kysr/t7e3//Dw8P///////////4eHh4BdXV3xo6Oj///////////++/v7/8HBwf/BwcH/ra2t/8bGxv/6+vr///////7+/v/+/v7+/////9bW1v/ExMT/9vb2//b29v/d3d3/vr6+/+Tk5P/x8fH//v7+//7+/v/+/v7+//////39/f/Nzc3/w8PD//v7+///////hoaG+JaWlv+Li4v/9/f3///////u7u7/q6ur/1JSUv8TExP/Z2dn/9HR0f/9/f3//v7+////////////8vLy/7i4uP/v7+//+vr6/8DAwP+cnJz/VFRU/25ubv/c3Nz//v7+//////7+/v7///////T09P+3t7f/6+vr///////v7+//7Ozs/3x8fP/Y2Nj+/////ufn5/+Tk5P/FhYW/wUFBf83Nzf/mZmZ//v7+//+/v7//////v/////6+vr/w8PD/+fn5//z8/P/rKys/zk5Of8AAAD/RUVF/piYmP/19fX//////v7+/v///////f39/8TExP/e3t7////////////R0dH/MzMz/5eXl///////5+fn/7Ozs/9oaGj/FxcX/zo6Ov/IyMj//v7+//7+/v////////////j4+P+9vb3/6+vr//Dw8P+zs7P/TExM/wAAAP8ODg7+goKC//r6+v/////+/v7+///////+/v7/x8fH/9zc3P///////////7i4uP8ZGRn/Pz8//t/f3/729vb+vb29/9vb2/7ExMT+29vb//39/f7+/v7+/////v////7////+5eXl/rm5uf729vb/8/Pz/76+vv/BwcH+cnJy/n5+fv7g4OD///////7+/v7+/v7+//////j4+P68vLz+5ubm//////7////+8fHx/7Kysv+FhYX+i4uL/vT09P/U1NT/vb29//n5+f7//////v7+/v////7//////////vb29v69vb3/1tbW///////9/f3/x8fH/87Ozv/5+fn+/Pz8/v///////////////v////7/////39/f/rm5uf74+Pj/7u7u/snJyf/4+Pj+//////Ly8v6IiIj+m5ub//T09P/IyMj/vb29/ufn5//6+vr+/Pz8/vr6+v/n5+f+vb29/snJyf/6+vr////////////w8PD/t7e3/9jY2P79/f3+///////////////+/////unp6f+3t7f+4uLi//Hx8f+Ojo7+c3Nz5ZCQkP6jo6P/oKCg/n5+fvpOTk7hnJyc++Hh4f/W1tb+vb29/8DAwP/BwcH/vr6+/7m5uf7W1tb++vr6///////////////////////p6en/ubm5/sPDw/7f39//6Ojo/+Tk5P7MzMz/tra2/93d3f7q6ur/g4OD/3BwcP+rq6s/cHBwZkVFRWlKSkpnhYWFX4yMjDhtbW2bd3d3662trf/Y2Nj/5OTk/uXl5f/p6en/9vb2/v////////////////7+/v/////////////////19fX/1tbW/8LCwv+9vb3/wcHB/9HR0f/k5OT/xsbG/319ffNjY2POa2tr0hEREQD///8A////ALy8vAAAAAAAAAAAAM7Ozgt2dnZFbW1to3t7e+uZmZn/t7e3/9fX1//o6Oj/8PDw//b29v/6+vr//f39////////////////////////////9/f3/+rq6v/d3d3+t7e3/46Ojv58fHzgh4eHcry8vBdwcHAdw8PDAICAgAAgICAAPz8/AJiYmADGxsYAl5eXAf///wDKysoNqampU319fY5wcHDFe3t793d3d/WBgYH5kZGR/KOjo/uzs7P7v7+/+8XFxfvGxsb7wMDA+7Ozs/ucnJz8gYGB+nh4ePpxcXHMiYmJi76+vjz///8FqqqqAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAAAAAAAFBLBwipcxPwvhAAAL4QAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcaW1nL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABEAAABzdGF0aWNcaW1nXGJnLnBuZ4lQTkcNChoKAAAADUlIRFIAAACWAAAAlggCAAAAs2PmtQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANmaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDk3MEYzQ0VCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDk3MEYzQ0RCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQUFCQkVBMThGQjVFMjExQkJFM0FC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bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFDMTUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCMDE1QUFDMjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkIwMTVBQUJGNTI0NDExRTI4RjEzQTA0OUM5QUZBOTdDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkIwMTVBQUMwNTI0NDExRTI4RjEzQTA0OUM5QUZBOTdDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAAGQAZAAABP8wmZQQQWZKvDnFSIWEIykZJaodmHGdBHVM7HdQH3qHKJWNhAsoc7LwRIGWj4jyYAiZYPR3cWV+zSchMIly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bigpIHsNCiAgICB2YXIgdG9wID0gJCgnI25hdicpLm9mZnNldCgpLnRvcDsNCiAgICB2YXIgJHRvcCA9ICQoJyNnby10b3AnKTsNCiAgICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKHRvcCA8ICQodGhpcykuc2Nyb2xsVG9wKCkpIHsNCiAgICAgICAgICAgICR0b3AucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR0b3AuYWRkQ2xhc3MoJ2hpZGUnKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgICR0b3Aub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IDB9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSkNCn0NCg0KZnVuY3Rpb24gcmVuZGVyTWFya2Rvd24oKSB7DQogICAgdmFyICRtZCA9ICQoJy5tYXJrZG93bicpOw0KICAgICRtZC5lYWNoKGZ1bmN0aW9uIChpLCBpdGVtKSB7DQogICAgICAgICQoaXRlbSkuaHRtbChtYXJrZWQoJChpdGVtKS5odG1sKCkucmVwbGFjZSgvJmd0Oy9nLCAnPicpKSk7DQogICAgfSk7DQogICAgdmFyIGNvZGUgPSAkbWQuZmluZCgncHJlIGNvZGUnKTsNCiAgICBpZiAoY29kZS5sZW5ndGgpIHsNCiAgICAgICAgJCgiPGxpbms+IikuYXR0cih7IHJlbDogInN0eWxlc2hlZXQiLCB0eXBlOiAidGV4dC9jc3MiLCBocmVmOiAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyJ9KS5hcHBlbmRUbygiaGVhZCIpOw0KICAgICAgICAkLmdldFNjcmlwdCgiL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGNvZGUuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soaXRlbSkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGluaXRDb21tZW50KCkgew0KICAgIHZhciAkbGlzdCA9ICQoJyNjb21tZW50LWxpc3QnKTsNCiAgICBpZiAoISRsaXN0Lmxlbmd0aCkgew0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1hdXRob3IiKSkgew0KICAgICAgICAkKCcjY29tbWVudC1hdXRob3InKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpOw0KICAgICAgICAkKCcjY29tbWVudC1lbWFpbCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1lbWFpbCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtdXJsJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LXVybCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXZhdGFyJykuYXR0cigic3JjIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXZhdGFyIikpOw0KICAgICAgICAkKCcuYy1hdmF0YXInKS5yZW1vdmVDbGFzcygibnVsbCIpOw0KICAgIH0NCiAgICAkKCcjY29tbWVudC1jb250ZW50Jykub24oImZvY3VzIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoJCgnLmMtYXZhdGFyJykuaGFzQ2xhc3MoIm51bGwiKSkgew0KICAgICAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICAgICAkKCcuYy1pbmZvLWZpZWxkcycpLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkKCcubm90LW1lJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1hdmF0YXItZmllbGQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnI2NvbW1lbnQtc2hvdycpLm9uKCJjbGljayIsICIuZW5hYmxlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIjY29tbWVudC1zaG93IikucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWF1dGhvciIsICQoJyNjb21tZW50LWF1dGhvcicpLnZhbCgpKTsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWVtYWlsIiwgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC11cmwiLCAkKCcjY29tbWVudC11cmwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdmF0YXIiLCBqc29uLmNvbW1lbnQuYXZhdGFyKTsNCiAgICAgICAgICAgIHZhciB0cGwgPSAkKCQoJyNjb21tZW50LXRwbCcpLmh0bWwoKSk7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXZhdGFyIikuYXR0cigic3JjIiwganNvbi5jb21tZW50LmF2YXRhcikuYXR0cigiYWx0IiwganNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXV0aG9yIikuYXR0cigiaHJlZiIsIGpzb24uY29tbWVudC51cmwpLnRleHQoanNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtcmVwbHkiKS5hdHRyKCJyZWwiLCBqc29uLmNvbW1lbnQuaWQpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKGpzb24uY29tbWVudC5jb250ZW50KTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQucGFyZW50X21kKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXAtbWQiKS5odG1sKG1hcmtlZChqc29uLmNvbW1lbnQucGFyZW50X21kKSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0cGwuYXR0cigiaWQiLCAiY29tbWVudC0iICsganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQuc3RhdHVzID09ICJhcHByb3ZlZCIpIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtY2hlY2siKS5yZW1vdmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRsaXN0LmFwcGVuZCh0cGwpOw0KICAgICAgICAgICAgJCgnLmNhbmNlbC1yZXBseScpLnRyaWdnZXIoImNsaWNrIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykudmFsKCIiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGFsZXJ0KCLmj5DkuqTlpLHotKUhIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkbGlzdC5vbigiY2xpY2siLCAiLmMtcmVwbHkiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZXBseS1tZCcpLnJlbW92ZSgpOw0KICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICB2YXIgcGMgPSAkKCcjY29tbWVudC0nICsgaWQpOw0KICAgICAgICB2YXIgbWQgPSAiPiBAIiArIHBjLmZpbmQoIi5jLWF1dGhvciIpLnRleHQoKSArICJcblxuIjsNCiAgICAgICAgbWQgKz0gIj4gIiArIHBjLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKCkgKyAiXG4iOw0KICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykuYmVmb3JlKCc8ZGl2IGNsYXNzPSJyZXBseS1tZCBtYXJrZG93biI+JyArIG1hcmtlZChtZCkgKyAnPC9kaXY+Jyk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbChpZCk7DQogICAgICAgIGlmICgkKCcjY29tbWVudC1zaG93JykubGVuZ3RoKSB7DQogICAgICAgICAgICAkKCcjY29tbWVudC1zaG93IC5lbmFibGUnKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICB9DQogICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS5zaG93KCk7DQogICAgICAgIHZhciB0b3AgPSAkKCcjY29tbWVudC1mb3JtJykub2Zmc2V0KCkudG9wOw0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IHRvcH0sIDUwMCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCiAgICAkKCcuY2FuY2VsLXJlcGx5Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAkKHRoaXMpLmhpZGUoKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KfQ0KUEsHCB7hHnJ1EgAAdRIAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHN0YXRpY1xqc1x1cGxvYWQuanNmdW5jdGlvbiBpbml0VXBsb2FkKHApIHsNCiAgICAkKCcjYXR0YWNoLXNob3cnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICB9KTsNCiAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmIChjb25maXJtKCLnq4vljbPkuIrkvKA/IikpIHsNCiAgICAgICAgICAgIHZhciBiYXIgPSAkKCc8cCBjbGFzcz0iZmlsZS1wcm9ncmVzcyBpbmxpbmUtYmxvY2siPjAlPC9wPicpOw0KICAgICAgICAgICAgJCgnI2F0dGFjaC1mb3JtJykuYWpheFN1Ym1pdCh7DQogICAgICAgICAgICAgICAgImJlZm9yZVN1Ym1pdCI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgJChwKS5iZWZvcmUoYmFyKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJ1cGxvYWRQcm9ncmVzcyI6IGZ1bmN0aW9uIChldmVudCwgcG9zaXRpb24sIHRvdGFsLCBwZXJjZW50Q29tcGxldGUpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRWYWwgPSBwZXJjZW50Q29tcGxldGUgKyAnJSc7DQogICAgICAgICAgICAgICAgICAgIGJhci5jc3MoIndpZHRoIiwgcGVyY2VudFZhbCkuaHRtbChwZXJjZW50VmFsKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoanNvbi5tc2cpLmFkZENsYXNzKCJlcnIiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhci5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMDApOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoIi8iICsganNvbi5maWxlLlVybCArICImbmJzcDsmbmJzcDsmbmJzcDsoQCIgKyBqc29uLmZpbGUuTmFtZSArICIpIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJCgnI2F0dGFjaC11cGxvYWQnKS52YWwoIiIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJCh0aGlzKS52YWwoIiIpOw0KICAgICAgICB9DQogICAgfSk7DQp9UEsHCIiJF/v2BAAA9gQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHN0YXRpY1xsaWIvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAHN0YXRpY1xsaWJcY29kZW1pcnJvci1tb2RlLm1pbi5qcyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0vXihccyopKFsqKy1dfChcZCspXC4pKFxzKikvLGU9IiorLSI7Q29kZU1pcnJvci5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT1yLmdldEN1cnNvcigpLG89ci5nZXRTdGF0ZUFmdGVyKGkubGluZSkubGlzdCE9PSExO2lmKCFvfHwhKG49ci5nZXRMaW5lKGkubGluZSkubWF0Y2godCkpKXJldHVybiByLmV4ZWNDb21tYW5kKCJuZXdsaW5lQW5kSW5kZW50Iiksdm9pZCAwO3ZhciBsPW5bMV0sYT1uWzRdLHM9ZS5pbmRleE9mKG5bMl0pPj0wP25bMl06cGFyc2VJbnQoblszXSwxMCkrMSsiLiI7ci5yZXBsYWNlU2VsZWN0aW9uKCJcbiIrbCtzK2EsImVuZCIpfX0oKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoIm1hcmtkb3duIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlLHIpe3JldHVybiBlLmY9ZS5pbmxpbmU9cixyKHQsZSl9ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIGUuZj1lLmJsb2NrPXIscih0LGUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubGlua1RpdGxlPSExLHQuZW09ITEsdC5zdHJvbmc9ITEsdC5xdW90ZT0wLGd8fHQuZiE9bHx8KHQuZj1jLHQuYmxvY2s9byksdC50cmFpbGluZ1NwYWNlPTAsdC50cmFpbGluZ1NwYWNlTmV3TGluZT0hMSx0LnRoaXNMaW5lSGFzQ29udGVudD0hMSxudWxsfWZ1bmN0aW9uIG8odCxpKXt2YXIgbz1pLmxpc3QhPT0hMTtpLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbkRpZmY+PTA/KGkuaW5kZW50YXRpb25EaWZmPDQmJihpLmluZGVudGF0aW9uLT1pLmluZGVudGF0aW9uRGlmZiksaS5saXN0PW51bGwpOmkubGlzdCE9PSExJiZpLmluZGVudGF0aW9uPjA/KGkubGlzdD1udWxsLGkubGlzdERlcHRoPU1hdGguZmxvb3IoaS5pbmRlbnRhdGlvbi80KSk6aS5saXN0IT09ITEmJihpLmxpc3Q9ITEsaS5saXN0RGVwdGg9MCk7dmFyIGw9bnVsbDtpZihpLmluZGVudGF0aW9uRGlmZj49NClyZXR1cm4gaS5pbmRlbnRhdGlvbi09NCx0LnNraXBUb0VuZCgpLGs7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO2lmKGw9dC5tYXRjaChSKSlpLmhlYWRlcj1sWzBdLmxlbmd0aDw9Nj9sWzBdLmxlbmd0aDo2O2Vsc2UgaWYoaS5wcmV2TGluZUhhc0NvbnRlbnQmJihsPXQubWF0Y2goRykpKWkuaGVhZGVyPSI9Ij09bFswXS5jaGFyQXQoMCk/MToyO2Vsc2UgaWYodC5lYXQoIj4iKSlmb3IoaS5pbmRlbnRhdGlvbisrLGkucXVvdGU9MSx0LmVhdFNwYWNlKCk7dC5lYXQoIj4iKTspdC5lYXRTcGFjZSgpLGkucXVvdGUrKztlbHNle2lmKCJbIj09PXQucGVlaygpKXJldHVybiByKHQsaSxoKTtpZih0Lm1hdGNoKEksITApKXJldHVybiBBO2lmKGkucHJldkxpbmVIYXNDb250ZW50JiYhb3x8IXQubWF0Y2goUCwhMCkmJiF0Lm1hdGNoKEYsITApKXtpZihlLmZlbmNlZENvZGVCbG9ja3MmJnQubWF0Y2goL15gYGAoW1x3KyNdKikvLCEwKSlyZXR1cm4gaS5sb2NhbE1vZGU9eChSZWdFeHAuJDEpLGkubG9jYWxNb2RlJiYoaS5sb2NhbFN0YXRlPWkubG9jYWxNb2RlLnN0YXJ0U3RhdGUoKSksbih0LGksYSksa31lbHNlIGkuaW5kZW50YXRpb24rPTQsaS5saXN0PSEwLGkubGlzdERlcHRoKyssZS50YXNrTGlzdHMmJnQubWF0Y2goQiwhMSkmJihpLnRhc2tMaXN0PSEwKX1yZXR1cm4gcih0LGksaS5pbmxpbmUpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj12LnRva2VuKHQsZS5odG1sU3RhdGUpO3JldHVybiBnJiYidGFnIj09PXImJiJvcGVuVGFnIiE9PWUuaHRtbFN0YXRlLnR5cGUmJiFlLmh0bWxTdGF0ZS5jb250ZXh0JiYoZS5mPWMsZS5ibG9jaz1vKSxlLm1kX2luc2lkZSYmLTEhPXQuY3VycmVudCgpLmluZGV4T2YoIj4iKSYmKGUuZj1jLGUuYmxvY2s9byxlLmh0bWxTdGF0ZS5jb250ZXh0PXZvaWQgMCkscn1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQuc29sKCkmJnQubWF0Y2goL15gYGAvLCEwKT8oZS5sb2NhbE1vZGU9ZS5sb2NhbFN0YXRlPW51bGwsZS5mPWMsZS5ibG9jaz1vLGspOmUubG9jYWxNb2RlP2UubG9jYWxNb2RlLnRva2VuKHQsZS5sb2NhbFN0YXRlKToodC5za2lwVG9FbmQoKSxrKX1mdW5jdGlvbiBzKHQpe3ZhciBlPVtdO2lmKHQudGFza09wZW4pcmV0dXJuIm1ldGEiO2lmKHQudGFza0Nsb3NlZClyZXR1cm4icHJvcGVydHkiO2lmKHQuc3Ryb25nJiZlLnB1c2goeiksdC5lbSYmZS5wdXNoKEUpLHQubGlua1RleHQmJmUucHVzaChPKSx0LmNvZGUmJmUucHVzaChrKSx0LmhlYWRlciYmKGUucHVzaChDKSxlLnB1c2goQyt0LmhlYWRlcikpLHQucXVvdGUmJmUucHVzaCh0LnF1b3RlJTI/dzpMKSx0Lmxpc3QhPT0hMSl7dmFyIHI9KHQubGlzdERlcHRoLTEpJTM7cj8xPT09cj9lLnB1c2goTSk6ZS5wdXNoKFQpOmUucHVzaChTKX1yZXR1cm4gdC50cmFpbGluZ1NwYWNlTmV3TGluZT9lLnB1c2goInRyYWlsaW5nLXNwYWNlLW5ldy1saW5lIik6dC50cmFpbGluZ1NwYWNlJiZlLnB1c2goInRyYWlsaW5nLXNwYWNlLSIrKHQudHJhaWxpbmdTcGFjZSUyPyJhIjoiYiIpKSxlLmxlbmd0aD9lLmpvaW4oIiAiKTpudWxsfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdC5tYXRjaChfLCEwKT9zKGUpOnZvaWQgMH1mdW5jdGlvbiBjKHQsaSl7dmFyIG89aS50ZXh0KHQsaSk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBvKXJldHVybiBvO2lmKGkubGlzdClyZXR1cm4gaS5saXN0PW51bGwscyhpKTtpZihpLnRhc2tMaXN0KXt2YXIgYT0ieCIhPT10Lm1hdGNoKEIsITApWzFdO3JldHVybiBhP2kudGFza09wZW49ITA6aS50YXNrQ2xvc2VkPSEwLGkudGFza0xpc3Q9ITEscyhpKX1pLnRhc2tPcGVuPSExLGkudGFza0Nsb3NlZD0hMTt2YXIgdT10LnNvbCgpLGM9dC5uZXh0KCk7aWYoIlxcIj09PWMpcmV0dXJuIHQubmV4dCgpLHMoaSk7aWYoaS5saW5rVGl0bGUpe2kubGlua1RpdGxlPSExO3ZhciBoPWM7IigiPT09YyYmKGg9IikiKSxoPShoKyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpO3ZhciBkPSJeXFxzKig/OlteIitoKyJcXFxcXSt8XFxcXFxcXFx8XFxcXC4pIitoO2lmKHQubWF0Y2gobmV3IFJlZ0V4cChkKSwhMCkpcmV0dXJuIFd9aWYoImAiPT09Yyl7dmFyIHA9cyhpKSxnPXQucG9zO3QuZWF0V2hpbGUoImAiKTt2YXIgdj0xK3QucG9zLWc7cmV0dXJuIGkuY29kZT92PT09Yj8oaS5jb2RlPSExLHApOnMoaSk6KGI9dixpLmNvZGU9ITAscyhpKSl9aWYoaS5jb2RlKXJldHVybiBzKGkpO2lmKCIhIj09PWMmJnQubWF0Y2goL1xbW15cXV0qXF0gPyg/OlwofFxbKS8sITEpKXJldHVybiB0Lm1hdGNoKC9cW1teXF1dKlxdLyksaS5pbmxpbmU9aS5mPWYsTjtpZigiWyI9PT1jJiZ0Lm1hdGNoKC8uKlxdKFwofCA/XFspLywhMSkpcmV0dXJuIGkubGlua1RleHQ9ITAscyhpKTtpZigiXSI9PT1jJiZpLmxpbmtUZXh0KXt2YXIgeT1zKGkpO3JldHVybiBpLmxpbmtUZXh0PSExLGkuaW5saW5lPWkuZj1mLHl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXihodHRwcz98ZnRwcz8pOlwvXC8oPzpbXlxcPl18XFwuKSs+LywhMSkpcmV0dXJuIHIodCxpLG0oSCwiPiIpKTtpZigiPCI9PT1jJiZ0Lm1hdGNoKC9eW14+IFxcXStAKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEQsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXlx3LywhMSkpe2lmKC0xIT10LnN0cmluZy5pbmRleE9mKCI+Iikpe3ZhciB4PXQuc3RyaW5nLnN1YnN0cmluZygxLHQuc3RyaW5nLmluZGV4T2YoIj4iKSk7L21hcmtkb3duXHMqPVxzKignfCIpezAsMX0xKCd8Iil7MCwxfS8udGVzdCh4KSYmKGkubWRfaW5zaWRlPSEwKX1yZXR1cm4gdC5iYWNrVXAoMSksbih0LGksbCl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXlwvXHcqPz4vKSlyZXR1cm4gaS5tZF9pbnNpZGU9ITEsInRhZyI7dmFyIEM9ITE7aWYoIWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYiXyI9PT1jJiYiXyIhPT10LnBlZWsoKSYmdC5tYXRjaCgvKFx3KS8sITEpKXt2YXIgaz10LnBvcy0yO2lmKGs+PTApe3ZhciB3PXQuc3RyaW5nLmNoYXJBdChrKTsiXyIhPT13JiZ3Lm1hdGNoKC8oXHcpLywhMSkmJihDPSEwKX19dmFyIHA9cyhpKTtpZigiKiI9PT1jfHwiXyI9PT1jJiYhQylpZih1JiYiICI9PT10LnBlZWsoKSk7ZWxzZXtpZihpLnN0cm9uZz09PWMmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz0hMSxwO2lmKCFpLnN0cm9uZyYmdC5lYXQoYykpcmV0dXJuIGkuc3Ryb25nPWMscyhpKTtpZihpLmVtPT09YylyZXR1cm4gaS5lbT0hMSxwO2lmKCFpLmVtKXJldHVybiBpLmVtPWMscyhpKX1lbHNlIGlmKCIgIj09PWMmJih0LmVhdCgiKiIpfHx0LmVhdCgiXyIpKSl7aWYoIiAiPT09dC5wZWVrKCkpcmV0dXJuIHMoaSk7dC5iYWNrVXAoMSl9cmV0dXJuIiAiPT09YyYmKHQubWF0Y2goLyArJC8sITEpP2kudHJhaWxpbmdTcGFjZSsrOmkudHJhaWxpbmdTcGFjZSYmKGkudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITApKSxzKGkpfWZ1bmN0aW9uIGYodCxlKXtpZih0LmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7dmFyIG49dC5uZXh0KCk7cmV0dXJuIigiPT09bnx8IlsiPT09bj9yKHQsZSxtKFcsIigiPT09bj8iKSI6Il0iKSk6ImVycm9yIn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQubWF0Y2goL15bXlxdXSpcXTovLCEwKT8oZS5mPWQsTyk6cih0LGUsYyl9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0LmVhdFNwYWNlKCk/bnVsbDoodC5tYXRjaCgvXlteXHNdKy8sITApLHZvaWQgMD09PXQucGVlaygpP2UubGlua1RpdGxlPSEwOnQubWF0Y2goL14oPzpccysoPzoiKD86W14iXFxdfFxcXFx8XFwuKSsifCcoPzpbXidcXF18XFxcXHxcXC4pKyd8XCgoPzpbXilcXF18XFxcXHxcXC4pK1wpKSk/LywhMCksZS5mPWUuaW5saW5lPWMsVyl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gVlt0XXx8KHQ9KHQrIiIpLnJlcGxhY2UoLyhbLj8qK14kW1xdXFwoKXt9fC1dKS9nLCJcXCQxIiksVlt0XT1uZXcgUmVnRXhwKCJeKD86W15cXFxcXXxcXFxcLikqPygiK3QrIikiKSksVlt0XX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gcj1yfHxjLGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4ubWF0Y2gocChlKSksaS5pbmxpbmU9aS5mPXIsdH19dmFyIGc9Q29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eSgieG1sIiksdj1Db2RlTWlycm9yLmdldE1vZGUodCxnP3tuYW1lOiJ4bWwiLGh0bWxNb2RlOiEwfToidGV4dC9wbGFpbiIpLHk9e2h0bWw6Imh0bWxtaXhlZCIsanM6ImphdmFzY3JpcHQiLGpzb246ImFwcGxpY2F0aW9uL2pzb24iLGM6InRleHQveC1jc3JjIiwiYysrIjoidGV4dC94LWMrK3NyYyIsamF2YToidGV4dC94LWphdmEiLGNzaGFycDoidGV4dC94LWNzaGFycCIsImMjIjoidGV4dC94LWNzaGFycCIsc2NhbGE6InRleHQveC1zY2FsYSJ9LHg9ZnVuY3Rpb24oKXt2YXIgZSxyLG49e30saT17fSxvPVtdO2Zvcih2YXIgbCBpbiBDb2RlTWlycm9yLm1vZGVzKUNvZGVNaXJyb3IubW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJm8ucHVzaChsKTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKW5bb1tlXV09b1tlXTt2YXIgYT1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5taW1lTW9kZXMpQ29kZU1pcnJvci5taW1lTW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJmEucHVzaCh7bWltZTpsLG1vZGU6Q29kZU1pcnJvci5taW1lTW9kZXNbbF19KTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXI9YVtlXS5taW1lLGlbcl09YVtlXS5taW1lO2Zvcih2YXIgcyBpbiB5KSh5W3NdaW4gbnx8eVtzXWluIGkpJiYobltzXT15W3NdKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV0/Q29kZU1pcnJvci5nZXRNb2RlKHQsbltlXSk6bnVsbH19KCk7dm9pZCAwPT09ZS51bmRlcnNjb3Jlc0JyZWFrV29yZHMmJihlLnVuZGVyc2NvcmVzQnJlYWtXb3Jkcz0hMCksdm9pZCAwPT09ZS5mZW5jZWRDb2RlQmxvY2tzJiYoZS5mZW5jZWRDb2RlQmxvY2tzPSExKSx2b2lkIDA9PT1lLnRhc2tMaXN0cyYmKGUudGFza0xpc3RzPSExKTt2YXIgYj0wLEM9ImhlYWRlciIsaz0iY29tbWVudCIsdz0iYXRvbSIsTD0ibnVtYmVyIixTPSJ2YXJpYWJsZS0yIixNPSJ2YXJpYWJsZS0zIixUPSJrZXl3b3JkIixBPSJociIsTj0idGFnIixIPSJsaW5rIixEPSJsaW5rIixPPSJsaW5rIixXPSJzdHJpbmciLEU9ImVtIix6PSJzdHJvbmciLEk9L14oWypcLT1fXSkoPzpccypcMSl7Mix9XHMqJC8sUD0vXlsqXC0rXVxzKy8sRj0vXlswLTldK1wuXHMrLyxCPS9eXFsoeHwgKVxdKD89XHMpLyxSPS9eIysvLEc9L14oPzpcPXsxLH18LXsxLH0pJC8sXz0vXlteIVxbXF0qX1xcPD5gICInKF0rLyxWPVtdO3JldHVybntzdGFydFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue2Y6byxwcmV2TGluZUhhc0NvbnRlbnQ6ITEsdGhpc0xpbmVIYXNDb250ZW50OiExLGJsb2NrOm8saHRtbFN0YXRlOkNvZGVNaXJyb3Iuc3RhcnRTdGF0ZSh2KSxpbmRlbnRhdGlvbjowLGlubGluZTpjLHRleHQ6dSxsaW5rVGV4dDohMSxsaW5rVGl0bGU6ITEsZW06ITEsc3Ryb25nOiExLGhlYWRlcjowLHRhc2tMaXN0OiExLGxpc3Q6ITEsbGlzdERlcHRoOjAscXVvdGU6MCx0cmFpbGluZ1NwYWNlOjAsdHJhaWxpbmdTcGFjZU5ld0xpbmU6ITF9fSxjb3B5U3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJue2Y6dC5mLHByZXZMaW5lSGFzQ29udGVudDp0LnByZXZMaW5lSGFzQ29udGVudCx0aGlzTGluZUhhc0NvbnRlbnQ6dC50aGlzTGluZUhhc0NvbnRlbnQsYmxvY2s6dC5ibG9jayxodG1sU3RhdGU6Q29kZU1pcnJvci5jb3B5U3RhdGUodix0Lmh0bWxTdGF0ZSksaW5kZW50YXRpb246dC5pbmRlbnRhdGlvbixsb2NhbE1vZGU6dC5sb2NhbE1vZGUsbG9jYWxTdGF0ZTp0LmxvY2FsTW9kZT9Db2RlTWlycm9yLmNvcHlTdGF0ZSh0LmxvY2FsTW9kZSx0LmxvY2FsU3RhdGUpOm51bGwsaW5saW5lOnQuaW5saW5lLHRleHQ6dC50ZXh0LGxpbmtUaXRsZTp0LmxpbmtUaXRsZSxlbTp0LmVtLHN0cm9uZzp0LnN0cm9uZyxoZWFkZXI6dC5oZWFkZXIsdGFza0xpc3Q6dC50YXNrTGlzdCxsaXN0OnQubGlzdCxsaXN0RGVwdGg6dC5saXN0RGVwdGgscXVvdGU6dC5xdW90ZSx0cmFpbGluZ1NwYWNlOnQudHJhaWxpbmdTcGFjZSx0cmFpbGluZ1NwYWNlTmV3TGluZTp0LnRyYWlsaW5nU3BhY2VOZXdMaW5lLG1kX2luc2lkZTp0Lm1kX2luc2lkZX19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYodC5zb2woKSl7aWYodC5tYXRjaCgvXlxzKiQvLCEwKSlyZXR1cm4gZS5wcmV2TGluZUhhc0NvbnRlbnQ9ITEsaShlKTtlLnByZXZMaW5lSGFzQ29udGVudD1lLnRoaXNMaW5lSGFzQ29udGVudCxlLnRoaXNMaW5lSGFzQ29udGVudD0hMCxlLmhlYWRlcj0wLGUudGFza0xpc3Q9ITEsZS5jb2RlPSExLGUudHJhaWxpbmdTcGFjZT0wLGUudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsZS5mPWUuYmxvY2s7dmFyIHI9dC5tYXRjaCgvXlxzKi8sITApWzBdLnJlcGxhY2UoL1x0L2csIiAgICAiKS5sZW5ndGgsbj00Kk1hdGguZmxvb3IoKHItZS5pbmRlbnRhdGlvbikvNCk7bj40JiYobj00KTt2YXIgbz1lLmluZGVudGF0aW9uK247aWYoZS5pbmRlbnRhdGlvbkRpZmY9by1lLmluZGVudGF0aW9uLGUuaW5kZW50YXRpb249byxyPjApcmV0dXJuIG51bGx9cmV0dXJuIGUuZih0LGUpfSxibGFua0xpbmU6aSxnZXRUeXBlOnN9fSwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbWFya2Rvd24iLCJtYXJrZG93biIpLENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiByKHIpe3JldHVybiBlLnRva2VuaXplPXIscih0LGUpfXZhciBpPXQubmV4dCgpO2lmKCI8Ij09aSl7aWYodC5lYXQoIiEiKSlyZXR1cm4gdC5lYXQoIlsiKT90Lm1hdGNoKCJDREFUQVsiKT9yKG8oImF0b20iLCJdXT4iKSk6bnVsbDp0Lm1hdGNoKCItLSIpP3IobygiY29tbWVudCIsIi0tPiIpKTp0Lm1hdGNoKCJET0NUWVBFIiwhMCwhMCk/KHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLHIobCgxKSkpOm51bGw7aWYodC5lYXQoIj8iKSlyZXR1cm4gdC5lYXRXaGlsZSgvW1x3XC5fXC1dLyksZS50b2tlbml6ZT1vKCJtZXRhIiwiPz4iKSwibWV0YSI7dmFyIGE9dC5lYXQoIi8iKTt4PSIiO2Zvcih2YXIgcztzPXQuZWF0KC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKTspeCs9cztyZXR1cm4geD8oYj1hPyJjbG9zZVRhZyI6Im9wZW5UYWciLGUudG9rZW5pemU9biwidGFnIik6InRhZyBlcnJvciJ9aWYoIiYiPT1pKXt2YXIgdTtyZXR1cm4gdT10LmVhdCgiIyIpP3QuZWF0KCJ4Iik/dC5lYXRXaGlsZSgvW2EtZkEtRlxkXS8pJiZ0LmVhdCgiOyIpOnQuZWF0V2hpbGUoL1tcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXHdcLlwtOl0vKSYmdC5lYXQoIjsiKSx1PyJhdG9tIjoiZXJyb3IifXJldHVybiB0LmVhdFdoaWxlKC9bXiY8XS8pLG51bGx9ZnVuY3Rpb24gbih0LGUpe3ZhciBuPXQubmV4dCgpO2lmKCI+Ij09bnx8Ii8iPT1uJiZ0LmVhdCgiPiIpKXJldHVybiBlLnRva2VuaXplPXIsYj0iPiI9PW4/ImVuZFRhZyI6InNlbGZjbG9zZVRhZyIsInRhZyI7aWYoIj0iPT1uKXJldHVybiBiPSJlcXVhbHMiLG51bGw7aWYoIjwiPT1uKXtlLnRva2VuaXplPXI7dmFyIG89ZS50b2tlbml6ZSh0LGUpO3JldHVybiBvP28rIiBlcnJvciI6ImVycm9yIn1yZXR1cm4vW1wnXCJdLy50ZXN0KG4pPyhlLnRva2VuaXplPWkobiksZS5zdHJpbmdTdGFydENvbD10LmNvbHVtbigpLGUudG9rZW5pemUodCxlKSk6KHQuZWF0V2hpbGUoL1teXHNcdTAwYTA9PD5cIlwnXS8pLCJ3b3JkIil9ZnVuY3Rpb24gaSh0KXt2YXIgZT1mdW5jdGlvbihlLHIpe2Zvcig7IWUuZW9sKCk7KWlmKGUubmV4dCgpPT10KXtyLnRva2VuaXplPW47YnJlYWt9cmV0dXJuInN0cmluZyJ9O3JldHVybiBlLmlzSW5BdHRyaWJ1dGU9ITAsZX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7Zm9yKDshbi5lb2woKTspe2lmKG4ubWF0Y2goZSkpe2kudG9rZW5pemU9cjticmVha31uLm5leHQoKX1yZXR1cm4gdH19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk7bnVsbCE9KGk9ZS5uZXh0KCkpOyl7aWYoIjwiPT1pKXJldHVybiBuLnRva2VuaXplPWwodCsxKSxuLnRva2VuaXplKGUsbik7aWYoIj4iPT1pKXtpZigxPT10KXtuLnRva2VuaXplPXI7YnJlYWt9cmV0dXJuIG4udG9rZW5pemU9bCh0LTEpLG4udG9rZW5pemUoZSxuKX19cmV0dXJuIm1ldGEifX1mdW5jdGlvbiBhKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMTt0Pj0wO3QtLSlDLmNjLnB1c2goYXJndW1lbnRzW3RdKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGEuYXBwbHkobnVsbCxhcmd1bWVudHMpLCEwfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1ULmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHQpfHxDLmNvbnRleHQmJkMuY29udGV4dC5ub0luZGVudDtDLmNvbnRleHQ9e3ByZXY6Qy5jb250ZXh0LHRhZ05hbWU6dCxpbmRlbnQ6Qy5pbmRlbnRlZCxzdGFydE9mTGluZTplLG5vSW5kZW50OnJ9fWZ1bmN0aW9uIGMoKXtDLmNvbnRleHQmJihDLmNvbnRleHQ9Qy5jb250ZXh0LnByZXYpfWZ1bmN0aW9uIGYodCl7aWYoIm9wZW5UYWciPT10KXJldHVybiBDLnRhZ05hbWU9eCxDLnRhZ1N0YXJ0PWsuY29sdW1uKCkscyhtLGgoQy5zdGFydE9mTGluZSkpO2lmKCJjbG9zZVRhZyI9PXQpe3ZhciBlPSExO3JldHVybiBDLmNvbnRleHQ/Qy5jb250ZXh0LnRhZ05hbWUhPXgmJihULmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoQy5jb250ZXh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkmJmMoKSxlPSFDLmNvbnRleHR8fEMuY29udGV4dC50YWdOYW1lIT14KTplPSEwLGUmJih3PSJlcnJvciIpLHMoZChlKSl9cmV0dXJuIHMoKX1mdW5jdGlvbiBoKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1DLnRhZ05hbWU7cmV0dXJuIEMudGFnTmFtZT1DLnRhZ1N0YXJ0PW51bGwsInNlbGZjbG9zZVRhZyI9PWV8fCJlbmRUYWciPT1lJiZULmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShyLnRvTG93ZXJDYXNlKCkpPyhwKHIudG9Mb3dlckNhc2UoKSkscygpKToiZW5kVGFnIj09ZT8ocChyLnRvTG93ZXJDYXNlKCkpLHUocix0KSxzKCkpOnMoKX19ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJih3PSJlcnJvciIpLCJlbmRUYWciPT1lPyhjKCkscygpKToodz0iZXJyb3IiLHMoYXJndW1lbnRzLmNhbGxlZSkpfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZTs7KXtpZighQy5jb250ZXh0KXJldHVybjtpZihlPUMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIVQuY29udGV4dEdyYWJiZXJzLmhhc093blByb3BlcnR5KGUpfHwhVC5jb250ZXh0R3JhYmJlcnNbZV0uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2MoKX19ZnVuY3Rpb24gbSh0KXtyZXR1cm4id29yZCI9PXQ/KHc9ImF0dHJpYnV0ZSIscyhnLG0pKToiZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOih3PSJlcnJvciIscyhtKSl9ZnVuY3Rpb24gZyh0KXtpZigiZXF1YWxzIj09dClyZXR1cm4gcyh2LG0pO2lmKFQuYWxsb3dNaXNzaW5nKXtpZigid29yZCI9PXQpcmV0dXJuIHc9ImF0dHJpYnV0ZSIscyhnLG0pfWVsc2Ugdz0iZXJyb3IiO3JldHVybiJlbmRUYWciPT10fHwic2VsZmNsb3NlVGFnIj09dD9hKCk6cygpfWZ1bmN0aW9uIHYodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KToid29yZCI9PXQmJlQuYWxsb3dVbnF1b3RlZD8odz0ic3RyaW5nIixzKCkpOih3PSJlcnJvciIsImVuZFRhZyI9PXR8fCJzZWxmQ2xvc2VUYWciPT10P2EoKTpzKCkpfWZ1bmN0aW9uIHkodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KTphKCl9dmFyIHgsYixDLGssdyxMPXQuaW5kZW50VW5pdCxTPWUubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yfHwxLE09ZS5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnfHwhMCxUPWUuaHRtbE1vZGU/e2F1dG9TZWxmQ2xvc2Vyczp7YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxjb21tYW5kOiEwLGVtYmVkOiEwLGZyYW1lOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LGltcGxpY2l0bHlDbG9zZWQ6e2RkOiEwLGxpOiEwLG9wdGdyb3VwOiEwLG9wdGlvbjohMCxwOiEwLHJwOiEwLHJ0OiEwLHRib2R5OiEwLHRkOiEwLHRmb290OiEwLHRoOiEwLHRyOiEwfSxjb250ZXh0R3JhYmJlcnM6e2RkOntkZDohMCxkdDohMH0sZHQ6e2RkOiEwLGR0OiEwfSxsaTp7bGk6ITB9LG9wdGlvbjp7b3B0aW9uOiEwLG9wdGdyb3VwOiEwfSxvcHRncm91cDp7b3B0Z3JvdXA6ITB9LHA6e2FkZHJlc3M6ITAsYXJ0aWNsZTohMCxhc2lkZTohMCxibG9ja3F1b3RlOiEwLGRpcjohMCxkaXY6ITAsZGw6ITAsZmllbGRzZXQ6ITAsZm9vdGVyOiEwLGZvcm06ITAsaDE6ITAsaDI6ITAsaDM6ITAsaDQ6ITAsaDU6ITAsaDY6ITAsaGVhZGVyOiEwLGhncm91cDohMCxocjohMCxtZW51OiEwLG5hdjohMCxvbDohMCxwOiEwLHByZTohMCxzZWN0aW9uOiEwLHRhYmxlOiEwLHVsOiEwfSxycDp7cnA6ITAscnQ6ITB9LHJ0OntycDohMCxydDohMH0sdGJvZHk6e3Rib2R5OiEwLHRmb290OiEwfSx0ZDp7dGQ6ITAsdGg6ITB9LHRmb290Ont0Ym9keTohMH0sdGg6e3RkOiEwLHRoOiEwfSx0aGVhZDp7dGJvZHk6ITAsdGZvb3Q6ITB9LHRyOnt0cjohMH19LGRvTm90SW5kZW50OntwcmU6ITB9LGFsbG93VW5xdW90ZWQ6ITAsYWxsb3dNaXNzaW5nOiEwfTp7YXV0b1NlbGZDbG9zZXJzOnt9LGltcGxpY2l0bHlDbG9zZWQ6e30sY29udGV4dEdyYWJiZXJzOnt9LGRvTm90SW5kZW50Ont9LGFsbG93VW5xdW90ZWQ6ITEsYWxsb3dNaXNzaW5nOiExfSxBPWUuYWxpZ25DREFUQTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybnt0b2tlbml6ZTpyLGNjOltdLGluZGVudGVkOjAsc3RhcnRPZkxpbmU6ITAsdGFnTmFtZTpudWxsLHRhZ1N0YXJ0Om51bGwsY29udGV4dDpudWxsfX0sdG9rZW46ZnVuY3Rpb24odCxlKXtpZighZS50YWdOYW1lJiZ0LnNvbCgpJiYoZS5zdGFydE9mTGluZT0hMCxlLmluZGVudGVkPXQuaW5kZW50YXRpb24oKSksdC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3c9Yj14PW51bGw7dmFyIHI9ZS50b2tlbml6ZSh0LGUpO2lmKGUudHlwZT1iLChyfHxiKSYmImNvbW1lbnQiIT1yKWZvcihDPWUsaz10Ozspe3ZhciBuPWUuY2MucG9wKCl8fGY7aWYobihifHxyKSlicmVha31yZXR1cm4gZS5zdGFydE9mTGluZT0hMSx3JiYocj0iZXJyb3IiPT13P3IrIiBlcnJvciI6dykscn0saW5kZW50OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10LmNvbnRleHQ7aWYodC50b2tlbml6ZS5pc0luQXR0cmlidXRlKXJldHVybiB0LnN0cmluZ1N0YXJ0Q29sKzE7aWYodC50b2tlbml6ZSE9biYmdC50b2tlbml6ZSE9cnx8byYmby5ub0luZGVudClyZXR1cm4gaT9pLm1hdGNoKC9eKFxzKikvKVswXS5sZW5ndGg6MDtpZih0LnRhZ05hbWUpcmV0dXJuIE0/dC50YWdTdGFydCt0LnRhZ05hbWUubGVuZ3RoKzI6dC50YWdTdGFydCtMKlM7aWYoQSYmLzwhXFtDREFUQVxbLy50ZXN0KGUpKXJldHVybiAwO2ZvcihvJiYvXjxcLy8udGVzdChlKSYmKG89by5wcmV2KTtvJiYhby5zdGFydE9mTGluZTspbz1vLnByZXY7cmV0dXJuIG8/by5pbmRlbnQrTDowfSxlbGVjdHJpY0NoYXJzOiIvIixibG9ja0NvbW1lbnRTdGFydDoiPCEtLSIsYmxvY2tDb21tZW50RW5kOiItLT4iLGNvbmZpZ3VyYXRpb246ZS5odG1sTW9kZT8iaHRtbCI6InhtbCIsaGVscGVyVHlwZTplLmh0bWxNb2RlPyJodG1sIjoieG1sIn19KSxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveG1sIiwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCJ4bWwiKSxDb2RlTWlycm9yLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIil8fENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIix7bmFtZToieG1sIixodG1sTW9kZTohMH0pO1BLBwiT1g9diDIAAIgyAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABwAAABzdGF0aWNcbGliXGNvZGVtaXJyb3IubWluLmpzd2luZG93LkNvZGVNaXJyb3I9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChyLG4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChyLG4pO3RoaXMub3B0aW9ucz1uPW58fHt9O2Zvcih2YXIgaSBpbiBhbykhbi5oYXNPd25Qcm9wZXJ0eShpKSYmYW8uaGFzT3duUHJvcGVydHkoaSkmJihuW2ldPWFvW2ldKTtoKG4pO3ZhciBvPSJzdHJpbmciPT10eXBlb2Ygbi52YWx1ZT8wOm4udmFsdWUuZmlyc3QsbD10aGlzLmRpc3BsYXk9ZShyLG8pO2wud3JhcHBlci5Db2RlTWlycm9yPXRoaXMsdSh0aGlzKSxuLmF1dG9mb2N1cyYmIVZpJiZwZSh0aGlzKSx0aGlzLnN0YXRlPXtrZXlNYXBzOltdLG92ZXJsYXlzOltdLG1vZGVHZW46MCxvdmVyd3JpdGU6ITEsZm9jdXNlZDohMSxzdXBwcmVzc0VkaXRzOiExLHBhc3RlSW5jb21pbmc6ITEsZHJhZ2dpbmdUZXh0OiExLGhpZ2hsaWdodDpuZXcgJG59LHModGhpcyksbi5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIik7dmFyIGE9bi52YWx1ZTsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyB3byhuLnZhbHVlLG4ubW9kZSkpLGxlKHRoaXMscG4pKHRoaXMsYSksQWkmJnNldFRpbWVvdXQoaWkoZGUsdGhpcywhMCksMjApLG1lKHRoaXMpO3ZhciBjO3RyeXtjPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXR9Y2F0Y2goZil7fWN8fG4uYXV0b2ZvY3VzJiYhVmk/c2V0VGltZW91dChpaShFZSx0aGlzKSwyMCk6emUodGhpcyksbGUodGhpcyxmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzbylzby5wcm9wZXJ0eUlzRW51bWVyYWJsZSh0KSYmc29bdF0odGhpcyxuW3RdLHVvKTtmb3IodmFyIGU9MDtlPHBvLmxlbmd0aDsrK2UpcG9bZV0odGhpcyl9KSgpfWZ1bmN0aW9uIGUodCxlKXt2YXIgcj17fSxuPXIuaW5wdXQ9c2koInRleHRhcmVhIixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmU7IGZvbnQtc2l6ZTogNHB4OyIpO3JldHVybiBXaT9uLnN0eWxlLndpZHRoPSIxMDAwcHgiOm4uc2V0QXR0cmlidXRlKCJ3cmFwIiwib2ZmIiksR2kmJihuLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkIGJsYWNrIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0Iiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCJmYWxzZSIpLHIuaW5wdXREaXY9c2koImRpdiIsW25dLG51bGwsIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iiksci5zY3JvbGxiYXJIPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsImhlaWdodDogMXB4IildLCJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKSxyLnNjcm9sbGJhclY9c2koImRpdiIsW3NpKCJkaXYiLG51bGwsbnVsbCwid2lkdGg6IDFweCIpXSwiQ29kZU1pcnJvci12c2Nyb2xsYmFyIiksci5zY3JvbGxiYXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIiksci5ndXR0ZXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIiksci5saW5lRGl2PXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY29kZSIpLHIuc2VsZWN0aW9uRGl2PXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxIiksci5jdXJzb3I9c2koImRpdiIsIsKgIiwiQ29kZU1pcnJvci1jdXJzb3IiKSxyLm90aGVyQ3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIiksci5tZWFzdXJlPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItbWVhc3VyZSIpLHIubGluZVNwYWNlPXNpKCJkaXYiLFtyLm1lYXN1cmUsci5zZWxlY3Rpb25EaXYsci5saW5lRGl2LHIuY3Vyc29yLHIub3RoZXJDdXJzb3JdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpLHIubW92ZXI9c2koImRpdiIsW3NpKCJkaXYiLFtyLmxpbmVTcGFjZV0sIkNvZGVNaXJyb3ItbGluZXMiKV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIiksci5zaXplcj1zaSgiZGl2Iixbci5tb3Zlcl0sIkNvZGVNaXJyb3Itc2l6ZXIiKSxyLmhlaWdodEZvcmNlcj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAiK1RvKyJweDsgd2lkdGg6IDFweDsiKSxyLmd1dHRlcnM9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXJzIiksci5saW5lR3V0dGVyPW51bGwsci5zY3JvbGxlcj1zaSgiZGl2Iixbci5zaXplcixyLmhlaWdodEZvcmNlcixyLmd1dHRlcnNdLCJDb2RlTWlycm9yLXNjcm9sbCIpLHIuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIi0xIiksci53cmFwcGVyPXNpKCJkaXYiLFtyLmlucHV0RGl2LHIuc2Nyb2xsYmFySCxyLnNjcm9sbGJhclYsci5zY3JvbGxiYXJGaWxsZXIsci5ndXR0ZXJGaWxsZXIsci5zY3JvbGxlcl0sIkNvZGVNaXJyb3IiKSxIaSYmKHIuZ3V0dGVycy5zdHlsZS56SW5kZXg9LTEsci5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQ9MCksdC5hcHBlbmRDaGlsZD90LmFwcGVuZENoaWxkKHIud3JhcHBlcik6dChyLndyYXBwZXIpLEdpJiYobi5zdHlsZS53aWR0aD0iMHB4IiksV2l8fChyLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCksRmk/KHIuaW5wdXREaXYuc3R5bGUuaGVpZ2h0PSIxcHgiLHIuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIik6SGkmJihyLnNjcm9sbGJhckguc3R5bGUubWluV2lkdGg9ci5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPSIxOHB4Iiksci52aWV3T2Zmc2V0PXIubGFzdFNpemVDPTAsci5zaG93aW5nRnJvbT1yLnNob3dpbmdUbz1lLHIubGluZU51bVdpZHRoPXIubGluZU51bUlubmVyV2lkdGg9ci5saW5lTnVtQ2hhcnM9bnVsbCxyLnByZXZJbnB1dD0iIixyLmFsaWduV2lkZ2V0cz0hMSxyLnBvbGxpbmdGYXN0PSExLHIucG9sbD1uZXcgJG4sci5jYWNoZWRDaGFyV2lkdGg9ci5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsci5tZWFzdXJlTGluZUNhY2hlPVtdLHIubWVhc3VyZUxpbmVDYWNoZVBvcz0wLHIuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxyLm1heExpbmU9bnVsbCxyLm1heExpbmVMZW5ndGg9MCxyLm1heExpbmVDaGFuZ2VkPSExLHIud2hlZWxEWD1yLndoZWVsRFk9ci53aGVlbFN0YXJ0WD1yLndoZWVsU3RhcnRZPW51bGwscn1mdW5jdGlvbiByKGUpe2UuZG9jLm1vZGU9dC5nZXRNb2RlKGUub3B0aW9ucyxlLmRvYy5tb2RlT3B0aW9uKSxlLmRvYy5pdGVyKGZ1bmN0aW9uKHQpe3Quc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpfSksZS5kb2MuZnJvbnRpZXI9ZS5kb2MuZmlyc3QsVyhlLDEwMCksZS5zdGF0ZS5tb2RlR2VuKyssZS5jdXJPcCYmdWUoZSl9ZnVuY3Rpb24gbih0KXt0Lm9wdGlvbnMubGluZVdyYXBwaW5nPyh0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIix0LmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGg9IiIpOih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCIiKSxmKHQpKSxvKHQpLHVlKHQpLF8odCksc2V0VGltZW91dChmdW5jdGlvbigpe2QodCl9LDEwMCl9ZnVuY3Rpb24gaSh0KXt2YXIgZT1yZSh0LmRpc3BsYXkpLHI9dC5vcHRpb25zLmxpbmVXcmFwcGluZyxuPXImJk1hdGgubWF4KDUsdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoL25lKHQuZGlzcGxheSktMyk7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBWcih0LmRvYyxpKT8wOnI/KE1hdGguY2VpbChpLnRleHQubGVuZ3RoL24pfHwxKSplOmV9fWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5kb2Mscj1pKHQpO2UuaXRlcihmdW5jdGlvbih0KXt2YXIgZT1yKHQpO2UhPXQuaGVpZ2h0JiZ5bih0LGUpfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT12b1t0Lm9wdGlvbnMua2V5TWFwXSxyPWUuc3R5bGU7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1rZXltYXAtXFMrL2csIiIpKyhyPyIgY20ta2V5bWFwLSIrcjoiIiksdC5zdGF0ZS5kaXNhYmxlSW5wdXQ9ZS5kaXNhYmxlSW5wdXR9ZnVuY3Rpb24gcyh0KXt0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLXMtXFMrL2csIiIpK3Qub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywiIGNtLXMtIiksXyh0KX1mdW5jdGlvbiBhKHQpe3UodCksdWUodCksc2V0VGltZW91dChmdW5jdGlvbigpe2codCl9LDIwKX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQuZGlzcGxheS5ndXR0ZXJzLHI9dC5vcHRpb25zLmd1dHRlcnM7YWkoZSk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl0sbz1lLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyICIraSkpOyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIj09aSYmKHQuZGlzcGxheS5saW5lR3V0dGVyPW8sby5zdHlsZS53aWR0aD0odC5kaXNwbGF5LmxpbmVOdW1XaWR0aHx8MSkrInB4Iil9ZS5zdHlsZS5kaXNwbGF5PW4/IiI6Im5vbmUifWZ1bmN0aW9uIGModCxlKXtpZigwPT1lLmhlaWdodClyZXR1cm4gMDtmb3IodmFyIHIsbj1lLnRleHQubGVuZ3RoLGk9ZTtyPVJyKGkpOyl7dmFyIG89ci5maW5kKCk7aT1nbih0LG8uZnJvbS5saW5lKSxuKz1vLmZyb20uY2gtby50by5jaH1mb3IoaT1lO3I9QnIoaSk7KXt2YXIgbz1yLmZpbmQoKTtuLT1pLnRleHQubGVuZ3RoLW8uZnJvbS5jaCxpPWduKHQsby50by5saW5lKSxuKz1pLnRleHQubGVuZ3RoLW8udG8uY2h9cmV0dXJuIG59ZnVuY3Rpb24gZih0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYztlLm1heExpbmU9Z24ocixyLmZpcnN0KSxlLm1heExpbmVMZW5ndGg9YyhyLGUubWF4TGluZSksZS5tYXhMaW5lQ2hhbmdlZD0hMCxyLml0ZXIoZnVuY3Rpb24odCl7dmFyIG49YyhyLHQpO24+ZS5tYXhMaW5lTGVuZ3RoJiYoZS5tYXhMaW5lTGVuZ3RoPW4sZS5tYXhMaW5lPXQpfSl9ZnVuY3Rpb24gaCh0KXt2YXIgZT10aSh0Lmd1dHRlcnMsIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiKTstMT09ZSYmdC5saW5lTnVtYmVycz90Lmd1dHRlcnM9dC5ndXR0ZXJzLmNvbmNhdChbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSk6ZT4tMSYmIXQubGluZU51bWJlcnMmJih0Lmd1dHRlcnM9dC5ndXR0ZXJzLnNsaWNlKDApLHQuZ3V0dGVycy5zcGxpY2UoZSwxKSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYy5oZWlnaHQsbj1yK0YoZSk7ZS5zaXplci5zdHlsZS5taW5IZWlnaHQ9ZS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wPW4rInB4IixlLmd1dHRlcnMuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KG4sZS5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8pKyJweCI7dmFyIGk9TWF0aC5tYXgobixlLnNjcm9sbGVyLnNjcm9sbEhlaWdodCksbz1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoPmUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrMSxsPWk+ZS5zY3JvbGxlci5jbGllbnRIZWlnaHQrMTtsPyhlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFyVi5zdHlsZS5ib3R0b209bz9kaShlLm1lYXN1cmUpKyJweCI6IjAiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1pLWUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0K2Uuc2Nyb2xsYmFyVi5jbGllbnRIZWlnaHQrInB4Iik6KGUuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5PSIiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD0iMCIpLG8/KGUuc2Nyb2xsYmFySC5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJILnN0eWxlLnJpZ2h0PWw/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoLWUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrZS5zY3JvbGxiYXJILmNsaWVudFdpZHRoKyJweCIpOihlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iMCIpLG8mJmw/KGUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQ9ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGg9ZGkoZS5tZWFzdXJlKSsicHgiKTplLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSIiLG8mJnQub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciYmdC5vcHRpb25zLmZpeGVkR3V0dGVyPyhlLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWRpKGUubWVhc3VyZSkrInB4IixlLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aD1lLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4Iik6ZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixQaSYmMD09PWRpKGUubWVhc3VyZSkmJihlLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGg9ZS5zY3JvbGxiYXJILnN0eWxlLm1pbkhlaWdodD1SaT8iMThweCI6IjEycHgiLGUuc2Nyb2xsYmFyVi5zdHlsZS5wb2ludGVyRXZlbnRzPWUuc2Nyb2xsYmFySC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIil9ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49dC5zY3JvbGxlci5zY3JvbGxUb3AsaT10LndyYXBwZXIuY2xpZW50SGVpZ2h0OyJudW1iZXIiPT10eXBlb2Ygcj9uPXI6ciYmKG49ci50b3AsaT1yLmJvdHRvbS1yLnRvcCksbj1NYXRoLmZsb29yKG4tSSh0KSk7dmFyIG89TWF0aC5jZWlsKG4raSk7cmV0dXJue2Zyb206eG4oZSxuKSx0bzp4bihlLG8pfX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuZGlzcGxheTtpZihlLmFsaWduV2lkZ2V0c3x8ZS5ndXR0ZXJzLmZpcnN0Q2hpbGQmJnQub3B0aW9ucy5maXhlZEd1dHRlcil7Zm9yKHZhciByPXkoZSktZS5zY3JvbGxlci5zY3JvbGxMZWZ0K3QuZG9jLnNjcm9sbExlZnQsbj1lLmd1dHRlcnMub2Zmc2V0V2lkdGgsaT1yKyJweCIsbz1lLmxpbmVEaXYuZmlyc3RDaGlsZDtvO289by5uZXh0U2libGluZylpZihvLmFsaWduYWJsZSlmb3IodmFyIGw9MCxzPW8uYWxpZ25hYmxlO2w8cy5sZW5ndGg7KytsKXNbbF0uc3R5bGUubGVmdD1pO3Qub3B0aW9ucy5maXhlZEd1dHRlciYmKGUuZ3V0dGVycy5zdHlsZS5sZWZ0PXIrbisicHgiKX19ZnVuY3Rpb24gbSh0KXtpZighdC5vcHRpb25zLmxpbmVOdW1iZXJzKXJldHVybiExO3ZhciBlPXQuZG9jLHI9dih0Lm9wdGlvbnMsZS5maXJzdCtlLnNpemUtMSksbj10LmRpc3BsYXk7aWYoci5sZW5ndGghPW4ubGluZU51bUNoYXJzKXt2YXIgaT1uLm1lYXN1cmUuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3NpKCJkaXYiLHIpXSwiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIpKSxvPWkuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCxsPWkub2Zmc2V0V2lkdGgtbztyZXR1cm4gbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPSIiLG4ubGluZU51bUlubmVyV2lkdGg9TWF0aC5tYXgobyxuLmxpbmVHdXR0ZXIub2Zmc2V0V2lkdGgtbCksbi5saW5lTnVtV2lkdGg9bi5saW5lTnVtSW5uZXJXaWR0aCtsLG4ubGluZU51bUNoYXJzPW4ubGluZU51bUlubmVyV2lkdGg/ci5sZW5ndGg6LTEsbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPW4ubGluZU51bVdpZHRoKyJweCIsITB9cmV0dXJuITF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiBTdHJpbmcodC5saW5lTnVtYmVyRm9ybWF0dGVyKGUrdC5maXJzdExpbmVOdW1iZXIpKX1mdW5jdGlvbiB5KHQpe3JldHVybiBmaSh0LnNjcm9sbGVyKS5sZWZ0LWZpKHQuc2l6ZXIpLmxlZnR9ZnVuY3Rpb24gYih0LGUscixuKXtmb3IodmFyIGksbz10LmRpc3BsYXkuc2hvd2luZ0Zyb20sbD10LmRpc3BsYXkuc2hvd2luZ1RvLHM9cCh0LmRpc3BsYXksdC5kb2MsciksYT0hMDs7YT0hMSl7dmFyIHU9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoO2lmKCF4KHQsZSxzLG4pKWJyZWFrO2lmKGk9ITAsZT1bXSxBKHQpLGQodCksYSYmdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmdSE9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKW49ITA7ZWxzZSBpZihuPSExLHImJihyPU1hdGgubWluKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwibnVtYmVyIj09dHlwZW9mIHI/cjpyLnRvcCkpLHM9cCh0LmRpc3BsYXksdC5kb2Mscikscy5mcm9tPj10LmRpc3BsYXkuc2hvd2luZ0Zyb20mJnMudG88PXQuZGlzcGxheS5zaG93aW5nVG8pYnJlYWt9cmV0dXJuIGkmJihVbih0LCJ1cGRhdGUiLHQpLCh0LmRpc3BsYXkuc2hvd2luZ0Zyb20hPW98fHQuZGlzcGxheS5zaG93aW5nVG8hPWwpJiZVbih0LCJ2aWV3cG9ydENoYW5nZSIsdCx0LmRpc3BsYXkuc2hvd2luZ0Zyb20sdC5kaXNwbGF5LnNob3dpbmdUbykpLGl9ZnVuY3Rpb24geCh0LGUscixuKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYztpZighaS53cmFwcGVyLmNsaWVudFdpZHRoKXJldHVybiBpLnNob3dpbmdGcm9tPWkuc2hvd2luZ1RvPW8uZmlyc3QsaS52aWV3T2Zmc2V0PTAsdm9pZCAwO2lmKCEoIW4mJjA9PWUubGVuZ3RoJiZyLmZyb20+aS5zaG93aW5nRnJvbSYmci50bzxpLnNob3dpbmdUbykpe20odCkmJihlPVt7ZnJvbTpvLmZpcnN0LHRvOm8uZmlyc3Qrby5zaXplfV0pO3ZhciBsPWkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdD1pLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4IjtpLnNjcm9sbGJhckguc3R5bGUubGVmdD10Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bDoiMCI7dmFyIHM9MS8wO2lmKHQub3B0aW9ucy5saW5lTnVtYmVycylmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSllW2FdLmRpZmYmJmVbYV0uZnJvbTxzJiYocz1lW2FdLmZyb20pO3ZhciB1PW8uZmlyc3Qrby5zaXplLGM9TWF0aC5tYXgoci5mcm9tLXQub3B0aW9ucy52aWV3cG9ydE1hcmdpbixvLmZpcnN0KSxmPU1hdGgubWluKHUsci50byt0Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4pO2lmKGkuc2hvd2luZ0Zyb208YyYmYy1pLnNob3dpbmdGcm9tPDIwJiYoYz1NYXRoLm1heChvLmZpcnN0LGkuc2hvd2luZ0Zyb20pKSxpLnNob3dpbmdUbz5mJiZpLnNob3dpbmdUby1mPDIwJiYoZj1NYXRoLm1pbih1LGkuc2hvd2luZ1RvKSksUWkpZm9yKGM9Ym4oR3IobyxnbihvLGMpKSk7dT5mJiZWcihvLGduKG8sZikpOykrK2Y7dmFyIGg9W3tmcm9tOk1hdGgubWF4KGkuc2hvd2luZ0Zyb20sby5maXJzdCksdG86TWF0aC5taW4oaS5zaG93aW5nVG8sdSl9XTtpZihoPWhbMF0uZnJvbT49aFswXS50bz9bXTpMKGgsZSksUWkpZm9yKHZhciBhPTA7YTxoLmxlbmd0aDsrK2EpZm9yKHZhciBkLHA9aFthXTtkPUJyKGduKG8scC50by0xKSk7KXt2YXIgZz1kLmZpbmQoKS5mcm9tLmxpbmU7aWYoIShnPnAuZnJvbSkpe2guc3BsaWNlKGEtLSwxKTticmVha31wLnRvPWd9Zm9yKHZhciB2PTAsYT0wO2E8aC5sZW5ndGg7KythKXt2YXIgcD1oW2FdO3AuZnJvbTxjJiYocC5mcm9tPWMpLHAudG8+ZiYmKHAudG89ZikscC5mcm9tPj1wLnRvP2guc3BsaWNlKGEtLSwxKTp2Kz1wLnRvLXAuZnJvbX1pZighbiYmdj09Zi1jJiZjPT1pLnNob3dpbmdGcm9tJiZmPT1pLnNob3dpbmdUbylyZXR1cm4gdyh0KSx2b2lkIDA7aC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZnJvbS1lLmZyb219KTt0cnl7dmFyIHk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudH1jYXRjaChiKXt9LjcqKGYtYyk+diYmKGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSJub25lIiksUyh0LGMsZixoLHMpLGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSIiLHkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPXkmJnkub2Zmc2V0SGVpZ2h0JiZ5LmZvY3VzKCk7dmFyIHg9YyE9aS5zaG93aW5nRnJvbXx8ZiE9aS5zaG93aW5nVG98fGkubGFzdFNpemVDIT1pLndyYXBwZXIuY2xpZW50SGVpZ2h0O3JldHVybiB4JiYoaS5sYXN0U2l6ZUM9aS53cmFwcGVyLmNsaWVudEhlaWdodCxXKHQsNDAwKSksaS5zaG93aW5nRnJvbT1jLGkuc2hvd2luZ1RvPWYsQyh0KSx3KHQpLCEwfX1mdW5jdGlvbiBDKHQpe2Zvcih2YXIgZSxyPXQuZGlzcGxheSxuPXIubGluZURpdi5vZmZzZXRUb3AsaT1yLmxpbmVEaXYuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylpZihpLmxpbmVPYmope2lmKEhpKXt2YXIgbz1pLm9mZnNldFRvcCtpLm9mZnNldEhlaWdodDtlPW8tbixuPW99ZWxzZXt2YXIgbD1maShpKTtlPWwuYm90dG9tLWwudG9wfXZhciBzPWkubGluZU9iai5oZWlnaHQtZTtpZigyPmUmJihlPXJlKHIpKSxzPi4wMDF8fC0uMDAxPnMpe3luKGkubGluZU9iaixlKTt2YXIgYT1pLmxpbmVPYmoud2lkZ2V0cztpZihhKWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7Kyt1KWFbdV0uaGVpZ2h0PWFbdV0ubm9kZS5vZmZzZXRIZWlnaHR9fX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQuZGlzcGxheS52aWV3T2Zmc2V0PUNuKHQsZ24odC5kb2MsdC5kaXNwbGF5LnNob3dpbmdGcm9tKSk7dC5kaXNwbGF5Lm1vdmVyLnN0eWxlLnRvcD1lKyJweCJ9ZnVuY3Rpb24gTCh0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGh8fDA7bj5yOysrcil7Zm9yKHZhciBpPWVbcl0sbz1bXSxsPWkuZGlmZnx8MCxzPTAsYT10Lmxlbmd0aDthPnM7KytzKXt2YXIgdT10W3NdO2kudG88PXUuZnJvbSYmaS5kaWZmP28ucHVzaCh7ZnJvbTp1LmZyb20rbCx0bzp1LnRvK2x9KTppLnRvPD11LmZyb218fGkuZnJvbT49dS50bz9vLnB1c2godSk6KGkuZnJvbT51LmZyb20mJm8ucHVzaCh7ZnJvbTp1LmZyb20sdG86aS5mcm9tfSksaS50bzx1LnRvJiZvLnB1c2goe2Zyb206aS50bytsLHRvOnUudG8rbH0pKX10PW99cmV0dXJuIHR9ZnVuY3Rpb24gayh0KXtmb3IodmFyIGU9dC5kaXNwbGF5LHI9e30sbj17fSxpPWUuZ3V0dGVycy5maXJzdENoaWxkLG89MDtpO2k9aS5uZXh0U2libGluZywrK28pclt0Lm9wdGlvbnMuZ3V0dGVyc1tvXV09aS5vZmZzZXRMZWZ0LG5bdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0V2lkdGg7cmV0dXJue2ZpeGVkUG9zOnkoZSksZ3V0dGVyVG90YWxXaWR0aDplLmd1dHRlcnMub2Zmc2V0V2lkdGgsZ3V0dGVyTGVmdDpyLGd1dHRlcldpZHRoOm4sd3JhcHBlcldpZHRoOmUud3JhcHBlci5jbGllbnRXaWR0aH19ZnVuY3Rpb24gUyh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSl7dmFyIHI9ZS5uZXh0U2libGluZztyZXR1cm4gV2kmJktpJiZ0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PT1lPyhlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGUubGluZU9iaj1udWxsKTplLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSkscn12YXIgbD1rKHQpLHM9dC5kaXNwbGF5LGE9dC5vcHRpb25zLmxpbmVOdW1iZXJzO24ubGVuZ3RofHxXaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldHx8YWkocy5saW5lRGl2KTt2YXIgdT1zLmxpbmVEaXYsYz11LmZpcnN0Q2hpbGQsZj1uLnNoaWZ0KCksaD1lO2Zvcih0LmRvYy5pdGVyKGUscixmdW5jdGlvbihlKXtpZihmJiZmLnRvPT1oJiYoZj1uLnNoaWZ0KCkpLFZyKHQuZG9jLGUpKXtpZigwIT1lLmhlaWdodCYmeW4oZSwwKSxlLndpZGdldHMmJmMmJmMucHJldmlvdXNTaWJsaW5nKWZvcih2YXIgcj0wO3I8ZS53aWRnZXRzLmxlbmd0aDsrK3Ipe3ZhciBzPWUud2lkZ2V0c1tyXTtpZihzLnNob3dJZkhpZGRlbil7dmFyIGQ9Yy5wcmV2aW91c1NpYmxpbmc7aWYoL3ByZS9pLnRlc3QoZC5ub2RlTmFtZSkpe3ZhciBwPXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIik7ZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwLGQpLHAuYXBwZW5kQ2hpbGQoZCksZD1wfXZhciBnPWQuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3Mubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTtzLmhhbmRsZU1vdXNlRXZlbnRzfHwoZy5pZ25vcmVFdmVudHM9ITApLFQocyxnLGQsbCl9fX1lbHNlIGlmKGYmJmYuZnJvbTw9aCYmZi50bz5oKXtmb3IoO2MubGluZU9iaiE9ZTspYz1vKGMpO2EmJmg+PWkmJmMubGluZU51bWJlciYmY2koYy5saW5lTnVtYmVyLHYodC5vcHRpb25zLGgpKSxjPWMubmV4dFNpYmxpbmd9ZWxzZXtpZihlLndpZGdldHMpZm9yKHZhciBtLHk9MCxiPWM7YiYmMjA+eTsrK3ksYj1iLm5leHRTaWJsaW5nKWlmKGIubGluZU9iaj09ZSYmL2Rpdi9pLnRlc3QoYi5ub2RlTmFtZSkpe209YjticmVha312YXIgeD1NKHQsZSxoLGwsbSk7aWYoeCE9bSl1Lmluc2VydEJlZm9yZSh4LGMpO2Vsc2V7Zm9yKDtjIT1tOyljPW8oYyk7Yz1jLm5leHRTaWJsaW5nfXgubGluZU9iaj1lfSsraH0pO2M7KWM9byhjKX1mdW5jdGlvbiBNKHQsZSxyLG4saSl7dmFyIG8sbD1ybih0LGUpLHM9bC5wcmUsYT1lLmd1dHRlck1hcmtlcnMsdT10LmRpc3BsYXksYz1sLmJnQ2xhc3M/bC5iZ0NsYXNzKyIgIisoZS5iZ0NsYXNzfHwiIik6ZS5iZ0NsYXNzO2lmKCEodC5vcHRpb25zLmxpbmVOdW1iZXJzfHxhfHxjfHxlLndyYXBDbGFzc3x8ZS53aWRnZXRzKSlyZXR1cm4gcztpZihpKXtpLmFsaWduYWJsZT1udWxsO2Zvcih2YXIgZixoPSEwLGQ9MCxwPW51bGwsZz1pLmZpcnN0Q2hpbGQ7ZztnPWYpaWYoZj1nLm5leHRTaWJsaW5nLC9cYkNvZGVNaXJyb3ItbGluZXdpZGdldFxiLy50ZXN0KGcuY2xhc3NOYW1lKSl7Zm9yKHZhciBtPTA7bTxlLndpZGdldHMubGVuZ3RoOysrbSl7dmFyIHk9ZS53aWRnZXRzW21dO2lmKHkubm9kZT09Zy5maXJzdENoaWxkKXt5LmFib3ZlfHxwfHwocD1nKSxUKHksZyxpLG4pLCsrZDticmVha319aWYobT09ZS53aWRnZXRzLmxlbmd0aCl7aD0hMTticmVha319ZWxzZSBpLnJlbW92ZUNoaWxkKGcpO2kuaW5zZXJ0QmVmb3JlKHMscCksaCYmZD09ZS53aWRnZXRzLmxlbmd0aCYmKG89aSxpLmNsYXNzTmFtZT1lLndyYXBDbGFzc3x8IiIpfWlmKG98fChvPXNpKCJkaXYiLG51bGwsZS53cmFwQ2xhc3MsInBvc2l0aW9uOiByZWxhdGl2ZSIpLG8uYXBwZW5kQ2hpbGQocykpLGMmJm8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsYysiIENvZGVNaXJyb3ItbGluZWJhY2tncm91bmQiKSxvLmZpcnN0Q2hpbGQpLHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSl7dmFyIGI9by5pbnNlcnRCZWZvcmUoc2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrKHQub3B0aW9ucy5maXhlZEd1dHRlcj9uLmZpeGVkUG9zOi1uLmd1dHRlclRvdGFsV2lkdGgpKyJweCIpLG8uZmlyc3RDaGlsZCk7aWYodC5vcHRpb25zLmZpeGVkR3V0dGVyJiYoby5hbGlnbmFibGV8fChvLmFsaWduYWJsZT1bXSkpLnB1c2goYiksIXQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSYmYVsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdfHwoby5saW5lTnVtYmVyPWIuYXBwZW5kQ2hpbGQoc2koImRpdiIsdih0Lm9wdGlvbnMsciksIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKyJweDsgd2lkdGg6ICIrdS5saW5lTnVtSW5uZXJXaWR0aCsicHgiKSkpLGEpZm9yKHZhciB4PTA7eDx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt4KXt2YXIgQz10Lm9wdGlvbnMuZ3V0dGVyc1t4XSx3PWEuaGFzT3duUHJvcGVydHkoQykmJmFbQ107dyYmYi5hcHBlbmRDaGlsZChzaSgiZGl2Iixbd10sIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsImxlZnQ6ICIrbi5ndXR0ZXJMZWZ0W0NdKyJweDsgd2lkdGg6ICIrbi5ndXR0ZXJXaWR0aFtDXSsicHgiKSl9fWlmKEhpJiYoby5zdHlsZS56SW5kZXg9MiksZS53aWRnZXRzJiZvIT1pKWZvcih2YXIgbT0wLEw9ZS53aWRnZXRzO208TC5sZW5ndGg7KyttKXt2YXIgeT1MW21dLGs9c2koImRpdiIsW3kubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpO3kuaGFuZGxlTW91c2VFdmVudHN8fChrLmlnbm9yZUV2ZW50cz0hMCksVCh5LGssbyxuKSx5LmFib3ZlP28uaW5zZXJ0QmVmb3JlKGssdC5vcHRpb25zLmxpbmVOdW1iZXJzJiYwIT1lLmhlaWdodD9iOnMpOm8uYXBwZW5kQ2hpbGQoayksVW4oeSwicmVkcmF3Iil9cmV0dXJuIG99ZnVuY3Rpb24gVCh0LGUscixuKXtpZih0Lm5vSFNjcm9sbCl7KHIuYWxpZ25hYmxlfHwoci5hbGlnbmFibGU9W10pKS5wdXNoKGUpO3ZhciBpPW4ud3JhcHBlcldpZHRoO2Uuc3R5bGUubGVmdD1uLmZpeGVkUG9zKyJweCIsdC5jb3Zlckd1dHRlcnx8KGktPW4uZ3V0dGVyVG90YWxXaWR0aCxlLnN0eWxlLnBhZGRpbmdMZWZ0PW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSxlLnN0eWxlLndpZHRoPWkrInB4In10LmNvdmVyR3V0dGVyJiYoZS5zdHlsZS56SW5kZXg9NSxlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdC5ub0hTY3JvbGx8fChlLnN0eWxlLm1hcmdpbkxlZnQ9LW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LmRpc3BsYXkscj1qZSh0LmRvYy5zZWwuZnJvbSx0LmRvYy5zZWwudG8pO2lmKHJ8fHQub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZz9IKHQpOmUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIixyP2Uuc2VsZWN0aW9uRGl2LnN0eWxlLmRpc3BsYXk9Im5vbmUiOk4odCksdC5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3Ipe3ZhciBuPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2IiksaT1maShlLndyYXBwZXIpLG89ZmkoZS5saW5lRGl2KTtlLmlucHV0RGl2LnN0eWxlLnRvcD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRIZWlnaHQtMTAsbi50b3Arby50b3AtaS50b3ApKSsicHgiLGUuaW5wdXREaXYuc3R5bGUubGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRXaWR0aC0xMCxuLmxlZnQrby5sZWZ0LWkubGVmdCkpKyJweCJ9fWZ1bmN0aW9uIEgodCl7dmFyIGU9dC5kaXNwbGF5LHI9USh0LHQuZG9jLnNlbC5oZWFkLCJkaXYiKTtlLmN1cnNvci5zdHlsZS5sZWZ0PXIubGVmdCsicHgiLGUuY3Vyc29yLnN0eWxlLnRvcD1yLnRvcCsicHgiLGUuY3Vyc29yLnN0eWxlLmhlaWdodD1NYXRoLm1heCgwLHIuYm90dG9tLXIudG9wKSp0Lm9wdGlvbnMuY3Vyc29ySGVpZ2h0KyJweCIsZS5jdXJzb3Iuc3R5bGUuZGlzcGxheT0iIixyLm90aGVyPyhlLm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsZS5vdGhlckN1cnNvci5zdHlsZS5sZWZ0PXIub3RoZXIubGVmdCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUudG9wPXIub3RoZXIudG9wKyJweCIsZS5vdGhlckN1cnNvci5zdHlsZS5oZWlnaHQ9Ljg1KihyLm90aGVyLmJvdHRvbS1yLm90aGVyLnRvcCkrInB4Iik6ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIn1mdW5jdGlvbiBOKHQpe2Z1bmN0aW9uIGUodCxlLHIsbil7MD5lJiYoZT0wKSxsLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrdCsicHg7IHRvcDogIitlKyJweDsgd2lkdGg6ICIrKG51bGw9PXI/cy10OnIpKyJweDsgaGVpZ2h0OiAiKyhuLWUpKyJweCIpKX1mdW5jdGlvbiByKHIsbixvKXtmdW5jdGlvbiBsKGUsbil7cmV0dXJuIHEodCxZZShyLGUpLCJkaXYiLGYsbil9dmFyIHUsYyxmPWduKGksciksaD1mLnRleHQubGVuZ3RoO3JldHVybiBnaSh3bihmKSxufHwwLG51bGw9PW8/aDpvLGZ1bmN0aW9uKHQscixpKXt2YXIgZixkLHAsZz1sKHQsImxlZnQiKTtpZih0PT1yKWY9ZyxkPXA9Zy5sZWZ0O2Vsc2V7aWYoZj1sKHItMSwicmlnaHQiKSwicnRsIj09aSl7dmFyIG09ZztnPWYsZj1tfWQ9Zy5sZWZ0LHA9Zi5yaWdodH1udWxsPT1uJiYwPT10JiYoZD1hKSxmLnRvcC1nLnRvcD4zJiYoZShkLGcudG9wLG51bGwsZy5ib3R0b20pLGQ9YSxnLmJvdHRvbTxmLnRvcCYmZShkLGcuYm90dG9tLG51bGwsZi50b3ApKSxudWxsPT1vJiZyPT1oJiYocD1zKSwoIXV8fGcudG9wPHUudG9wfHxnLnRvcD09dS50b3AmJmcubGVmdDx1LmxlZnQpJiYodT1nKSwoIWN8fGYuYm90dG9tPmMuYm90dG9tfHxmLmJvdHRvbT09Yy5ib3R0b20mJmYucmlnaHQ+Yy5yaWdodCkmJihjPWYpLGErMT5kJiYoZD1hKSxlKGQsZi50b3AscC1kLGYuYm90dG9tKX0pLHtzdGFydDp1LGVuZDpjfX12YXIgbj10LmRpc3BsYXksaT10LmRvYyxvPXQuZG9jLnNlbCxsPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxzPW4ubGluZVNwYWNlLm9mZnNldFdpZHRoLGE9UCh0LmRpc3BsYXkpO2lmKG8uZnJvbS5saW5lPT1vLnRvLmxpbmUpcihvLmZyb20ubGluZSxvLmZyb20uY2gsby50by5jaCk7ZWxzZXt2YXIgdT1nbihpLG8uZnJvbS5saW5lKSxjPWduKGksby50by5saW5lKSxmPUdyKGksdSk9PUdyKGksYyksaD1yKG8uZnJvbS5saW5lLG8uZnJvbS5jaCxmP3UudGV4dC5sZW5ndGg6bnVsbCkuZW5kLGQ9cihvLnRvLmxpbmUsZj8wOm51bGwsby50by5jaCkuc3RhcnQ7ZiYmKGgudG9wPGQudG9wLTI/KGUoaC5yaWdodCxoLnRvcCxudWxsLGguYm90dG9tKSxlKGEsZC50b3AsZC5sZWZ0LGQuYm90dG9tKSk6ZShoLnJpZ2h0LGgudG9wLGQubGVmdC1oLnJpZ2h0LGguYm90dG9tKSksaC5ib3R0b208ZC50b3AmJmUoYSxoLmJvdHRvbSxudWxsLGQudG9wKX11aShuLnNlbGVjdGlvbkRpdixsKSxuLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSIifWZ1bmN0aW9uIEQodCl7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgZT10LmRpc3BsYXk7Y2xlYXJJbnRlcnZhbChlLmJsaW5rZXIpO3ZhciByPSEwO2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PSIiLHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU+MCYmKGUuYmxpbmtlcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PShyPSFyKT8iIjoiaGlkZGVuIn0sdC5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSkpfX1mdW5jdGlvbiBXKHQsZSl7dC5kb2MubW9kZS5zdGFydFN0YXRlJiZ0LmRvYy5mcm9udGllcjx0LmRpc3BsYXkuc2hvd2luZ1RvJiZ0LnN0YXRlLmhpZ2hsaWdodC5zZXQoZSxpaShPLHQpKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuZG9jO2lmKGUuZnJvbnRpZXI8ZS5maXJzdCYmKGUuZnJvbnRpZXI9ZS5maXJzdCksIShlLmZyb250aWVyPj10LmRpc3BsYXkuc2hvd2luZ1RvKSl7dmFyIHIsbj0rbmV3IERhdGUrdC5vcHRpb25zLndvcmtUaW1lLGk9YnIoZS5tb2RlLHoodCxlLmZyb250aWVyKSksbz1bXTtlLml0ZXIoZS5mcm9udGllcixNYXRoLm1pbihlLmZpcnN0K2Uuc2l6ZSx0LmRpc3BsYXkuc2hvd2luZ1RvKzUwMCksZnVuY3Rpb24obCl7aWYoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdGcm9tKXt2YXIgcz1sLnN0eWxlcztsLnN0eWxlcz1Rcih0LGwsaSwhMCk7Zm9yKHZhciBhPSFzfHxzLmxlbmd0aCE9bC5zdHlsZXMubGVuZ3RoLHU9MDshYSYmdTxzLmxlbmd0aDsrK3UpYT1zW3VdIT1sLnN0eWxlc1t1XTthJiYociYmci5lbmQ9PWUuZnJvbnRpZXI/ci5lbmQrKzpvLnB1c2gocj17c3RhcnQ6ZS5mcm9udGllcixlbmQ6ZS5mcm9udGllcisxfSkpLGwuc3RhdGVBZnRlcj1icihlLm1vZGUsaSl9ZWxzZSB0bih0LGwudGV4dCxpKSxsLnN0YXRlQWZ0ZXI9MD09ZS5mcm9udGllciU1P2JyKGUubW9kZSxpKTpudWxsO3JldHVybisrZS5mcm9udGllciwrbmV3IERhdGU+bj8oVyh0LHQub3B0aW9ucy53b3JrRGVsYXkpLCEwKTp2b2lkIDB9KSxvLmxlbmd0aCYmbGUodCxmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8by5sZW5ndGg7Kyt0KXVlKHRoaXMsb1t0XS5zdGFydCxvW3RdLmVuZCl9KSgpfX1mdW5jdGlvbiBFKHQsZSxyKXtmb3IodmFyIG4saSxvPXQuZG9jLGw9cj8tMTplLSh0LmRvYy5tb2RlLmlubmVyTW9kZT8xZTM6MTAwKSxzPWU7cz5sOy0tcyl7aWYoczw9by5maXJzdClyZXR1cm4gby5maXJzdDt2YXIgYT1nbihvLHMtMSk7aWYoYS5zdGF0ZUFmdGVyJiYoIXJ8fHM8PW8uZnJvbnRpZXIpKXJldHVybiBzO3ZhciB1PVpuKGEudGV4dCxudWxsLHQub3B0aW9ucy50YWJTaXplKTsobnVsbD09aXx8bj51KSYmKGk9cy0xLG49dSl9cmV0dXJuIGl9ZnVuY3Rpb24geih0LGUscil7dmFyIG49dC5kb2MsaT10LmRpc3BsYXk7aWYoIW4ubW9kZS5zdGFydFN0YXRlKXJldHVybiEwO3ZhciBvPUUodCxlLHIpLGw9bz5uLmZpcnN0JiZnbihuLG8tMSkuc3RhdGVBZnRlcjtyZXR1cm4gbD1sP2JyKG4ubW9kZSxsKTp4cihuLm1vZGUpLG4uaXRlcihvLGUsZnVuY3Rpb24ocil7dG4odCxyLnRleHQsbCk7dmFyIHM9bz09ZS0xfHwwPT1vJTV8fG8+PWkuc2hvd2luZ0Zyb20mJm88aS5zaG93aW5nVG87ci5zdGF0ZUFmdGVyPXM/YnIobi5tb2RlLGwpOm51bGwsKytvfSksciYmKG4uZnJvbnRpZXI9byksbH1mdW5jdGlvbiBJKHQpe3JldHVybiB0LmxpbmVTcGFjZS5vZmZzZXRUb3B9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5tb3Zlci5vZmZzZXRIZWlnaHQtdC5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIFAodCl7dmFyIGU9dWkodC5tZWFzdXJlLHNpKCJwcmUiLG51bGwsbnVsbCwidGV4dC1hbGlnbjogbGVmdCIpKS5hcHBlbmRDaGlsZChzaSgic3BhbiIsIngiKSk7cmV0dXJuIGUub2Zmc2V0TGVmdH1mdW5jdGlvbiBSKHQsZSxyLG4saSl7dmFyIG89LTE7aWYobj1ufHxWKHQsZSksbi5jcnVkZSl7dmFyIGw9bi5sZWZ0K3Iqbi53aWR0aDtyZXR1cm57bGVmdDpsLHJpZ2h0Omwrbi53aWR0aCx0b3A6bi50b3AsYm90dG9tOm4uYm90dG9tfX1mb3IodmFyIHM9cjs7cys9byl7dmFyIGE9bltzXTtpZihhKWJyZWFrOzA+byYmMD09cyYmKG89MSl9cmV0dXJuIGk9cz5yPyJsZWZ0IjpyPnM/InJpZ2h0IjppLCJsZWZ0Ij09aSYmYS5sZWZ0U2lkZT9hPWEubGVmdFNpZGU6InJpZ2h0Ij09aSYmYS5yaWdodFNpZGUmJihhPWEucmlnaHRTaWRlKSx7bGVmdDpyPnM/YS5yaWdodDphLmxlZnQscmlnaHQ6cz5yP2EubGVmdDphLnJpZ2h0LHRvcDphLnRvcCxib3R0b206YS5ib3R0b219fWZ1bmN0aW9uIEIodCxlKXtmb3IodmFyIHI9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO2lmKGkudGV4dD09ZS50ZXh0JiZpLm1hcmtlZFNwYW5zPT1lLm1hcmtlZFNwYW5zJiZ0LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg9PWkud2lkdGgmJmkuY2xhc3Nlcz09ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzKXJldHVybiBpfX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI9Qih0LGUpO3ImJihyLnRleHQ9ci5tZWFzdXJlPXIubWFya2VkU3BhbnM9bnVsbCl9ZnVuY3Rpb24gVih0LGUpe3ZhciByPUIodCxlKTtpZihyKXJldHVybiByLm1lYXN1cmU7dmFyIG49Syh0LGUpLGk9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbz17dGV4dDplLnRleHQsd2lkdGg6dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLG1hcmtlZFNwYW5zOmUubWFya2VkU3BhbnMsbWVhc3VyZTpuLGNsYXNzZXM6ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzfTtyZXR1cm4gMTY9PWkubGVuZ3RoP2lbKyt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyUxNl09bzppLnB1c2gobyksbn1mdW5jdGlvbiBLKHQsZSl7ZnVuY3Rpb24gcih0KXt2YXIgZT10LnRvcC1wLnRvcCxyPXQuYm90dG9tLXAudG9wO3I+diYmKHI9diksMD5lJiYoZT0wKTtmb3IodmFyIG49Zy5sZW5ndGgtMjtuPj0wO24tPTIpe3ZhciBpPWdbbl0sbz1nW24rMV07aWYoIShpPnJ8fGU+bykmJihlPj1pJiZvPj1yfHxpPj1lJiZyPj1vfHxNYXRoLm1pbihyLG8pLU1hdGgubWF4KGUsaSk+PXItZT4+MSkpe2dbbl09TWF0aC5taW4oZSxpKSxnW24rMV09TWF0aC5tYXgocixvKTticmVha319cmV0dXJuIDA+biYmKG49Zy5sZW5ndGgsZy5wdXNoKGUscikpLHtsZWZ0OnQubGVmdC1wLmxlZnQscmlnaHQ6dC5yaWdodC1wLmxlZnQsdG9wOm4sYm90dG9tOm51bGx9fWZ1bmN0aW9uIG4odCl7dC5ib3R0b209Z1t0LnRvcCsxXSx0LnRvcD1nW3QudG9wXX1pZighdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gVSh0LGUpO3ZhciBpPXQuZGlzcGxheSxvPW5pKGUudGV4dC5sZW5ndGgpLGw9cm4odCxlLG8sITApLnByZTtpZihBaSYmIUhpJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbC5jaGlsZE5vZGVzLmxlbmd0aD4xMDApe2Zvcih2YXIgcz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYT0xMCx1PWwuY2hpbGROb2Rlcy5sZW5ndGgsYz0wLGY9TWF0aC5jZWlsKHUvYSk7Zj5jOysrYyl7Zm9yKHZhciBoPXNpKCJkaXYiLG51bGwsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrIiksZD0wO2E+ZCYmdTsrK2QpaC5hcHBlbmRDaGlsZChsLmZpcnN0Q2hpbGQpLC0tdTtzLmFwcGVuZENoaWxkKGgpfWwuYXBwZW5kQ2hpbGQocyl9dWkoaS5tZWFzdXJlLGwpO3ZhciBwPWZpKGkubGluZURpdiksZz1bXSxtPW5pKGUudGV4dC5sZW5ndGgpLHY9bC5vZmZzZXRIZWlnaHQ7TmkmJmkubWVhc3VyZS5maXJzdCE9bCYmdWkoaS5tZWFzdXJlLGwpO2Zvcih2YXIgeSxjPTA7YzxvLmxlbmd0aDsrK2MpaWYoeT1vW2NdKXt2YXIgYj15LHg9bnVsbDtpZigvXGJDb2RlTWlycm9yLXdpZGdldFxiLy50ZXN0KHkuY2xhc3NOYW1lKSYmeS5nZXRDbGllbnRSZWN0cyl7MT09eS5maXJzdENoaWxkLm5vZGVUeXBlJiYoYj15LmZpcnN0Q2hpbGQpO3ZhciBDPWIuZ2V0Q2xpZW50UmVjdHMoKTtDLmxlbmd0aD4xJiYoeD1tW2NdPXIoQ1swXSkseC5yaWdodFNpZGU9cihDW0MubGVuZ3RoLTFdKSl9eHx8KHg9bVtjXT1yKGZpKGIpKSkseS5tZWFzdXJlUmlnaHQmJih4LnJpZ2h0PWZpKHkubWVhc3VyZVJpZ2h0KS5sZWZ0KSx5LmxlZnRTaWRlJiYoeC5sZWZ0U2lkZT1yKGZpKHkubGVmdFNpZGUpKSl9YWkodC5kaXNwbGF5Lm1lYXN1cmUpO2Zvcih2YXIgeSxjPTA7YzxtLmxlbmd0aDsrK2MpKHk9bVtjXSkmJihuKHkpLHkubGVmdFNpZGUmJm4oeS5sZWZ0U2lkZSkseS5yaWdodFNpZGUmJm4oeS5yaWdodFNpZGUpKTtyZXR1cm4gbX1mdW5jdGlvbiBVKHQsZSl7dmFyIHI9bmV3IGJvKGUudGV4dC5zbGljZSgwLDEwMCksbnVsbCk7ZS50ZXh0Q2xhc3MmJihyLnRleHRDbGFzcz1lLnRleHRDbGFzcyk7dmFyIG49Syh0LHIpLGk9Uih0LHIsMCxuLCJsZWZ0Iiksbz1SKHQsciw5OSxuLCJyaWdodCIpO3JldHVybntjcnVkZTohMCx0b3A6aS50b3AsbGVmdDppLmxlZnQsYm90dG9tOmkuYm90dG9tLHdpZHRoOihvLnJpZ2h0LWkubGVmdCkvMTAwfX1mdW5jdGlvbiBYKHQsZSl7dmFyIHI9ITE7aWYoZS5tYXJrZWRTcGFucylmb3IodmFyIG49MDtuPGUubWFya2VkU3BhbnM7KytuKXt2YXIgaT1lLm1hcmtlZFNwYW5zW25dOyFpLmNvbGxhcHNlZHx8bnVsbCE9aS50byYmaS50byE9ZS50ZXh0Lmxlbmd0aHx8KHI9ITApfXZhciBvPSFyJiZCKHQsZSk7aWYob3x8ZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gUih0LGUsZS50ZXh0Lmxlbmd0aCxvJiZvLm1lYXN1cmUsInJpZ2h0IikucmlnaHQ7dmFyIGw9cm4odCxlLG51bGwsITApLnByZSxzPWwuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKTtyZXR1cm4gdWkodC5kaXNwbGF5Lm1lYXN1cmUsbCksZmkocykucmlnaHQtZmkodC5kaXNwbGF5LmxpbmVEaXYpLmxlZnR9ZnVuY3Rpb24gXyh0KXt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCx0LmRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoPXQuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCksdC5kaXNwbGF5LmxpbmVOdW1DaGFycz1udWxsfWZ1bmN0aW9uIFkoKXtyZXR1cm4gd2luZG93LnBhZ2VYT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGooKXtyZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3B9ZnVuY3Rpb24gJCh0LGUscixuKXtpZihlLndpZGdldHMpZm9yKHZhciBpPTA7aTxlLndpZGdldHMubGVuZ3RoOysraSlpZihlLndpZGdldHNbaV0uYWJvdmUpe3ZhciBvPVlyKGUud2lkZ2V0c1tpXSk7ci50b3ArPW8sci5ib3R0b20rPW99aWYoImxpbmUiPT1uKXJldHVybiByO258fChuPSJsb2NhbCIpO3ZhciBsPUNuKHQsZSk7aWYoImxvY2FsIj09bj9sKz1JKHQuZGlzcGxheSk6bC09dC5kaXNwbGF5LnZpZXdPZmZzZXQsInBhZ2UiPT1ufHwid2luZG93Ij09bil7dmFyIHM9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7bCs9cy50b3ArKCJ3aW5kb3ciPT1uPzA6aigpKTt2YXIgYT1zLmxlZnQrKCJ3aW5kb3ciPT1uPzA6WSgpKTtyLmxlZnQrPWEsci5yaWdodCs9YX1yZXR1cm4gci50b3ArPWwsci5ib3R0b20rPWwscn1mdW5jdGlvbiBaKHQsZSxyKXtpZigiZGl2Ij09cilyZXR1cm4gZTt2YXIgbj1lLmxlZnQsaT1lLnRvcDtpZigicGFnZSI9PXIpbi09WSgpLGktPWooKTtlbHNlIGlmKCJsb2NhbCI9PXJ8fCFyKXt2YXIgbz1maSh0LmRpc3BsYXkuc2l6ZXIpO24rPW8ubGVmdCxpKz1vLnRvcH12YXIgbD1maSh0LmRpc3BsYXkubGluZVNwYWNlKTtyZXR1cm57bGVmdDpuLWwubGVmdCx0b3A6aS1sLnRvcH19ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBufHwobj1nbih0LmRvYyxlLmxpbmUpKSwkKHQsbixSKHQsbixlLmNoLG51bGwsaSkscil9ZnVuY3Rpb24gUSh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSxvKXt2YXIgbD1SKHQsbixlLGksbz8icmlnaHQiOiJsZWZ0Iik7cmV0dXJuIG8/bC5sZWZ0PWwucmlnaHQ6bC5yaWdodD1sLmxlZnQsJCh0LG4sbCxyKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9c1tlXSxuPXIubGV2ZWwlMjtyZXR1cm4gdD09bWkocikmJmUmJnIubGV2ZWw8c1tlLTFdLmxldmVsPyhyPXNbLS1lXSx0PXZpKHIpLShyLmxldmVsJTI/MDoxKSxuPSEwKTp0PT12aShyKSYmZTxzLmxlbmd0aC0xJiZyLmxldmVsPHNbZSsxXS5sZXZlbCYmKHI9c1srK2VdLHQ9bWkociktci5sZXZlbCUyLG49ITEpLG4mJnQ9PXIudG8mJnQ+ci5mcm9tP28odC0xKTpvKHQsbil9bj1ufHxnbih0LmRvYyxlLmxpbmUpLGl8fChpPVYodCxuKSk7dmFyIHM9d24obiksYT1lLmNoO2lmKCFzKXJldHVybiBvKGEpO3ZhciB1PUxpKHMsYSksYz1sKGEsdSk7cmV0dXJuIG51bGwhPVJvJiYoYy5vdGhlcj1sKGEsUm8pKSxjfWZ1bmN0aW9uIEoodCxlLHIsbil7dmFyIGk9bmV3IFllKHQsZSk7cmV0dXJuIGkueFJlbD1uLHImJihpLm91dHNpZGU9ITApLGl9ZnVuY3Rpb24gdGUodCxlLHIpe3ZhciBuPXQuZG9jO2lmKHIrPXQuZGlzcGxheS52aWV3T2Zmc2V0LDA+cilyZXR1cm4gSihuLmZpcnN0LDAsITAsLTEpO3ZhciBpPXhuKG4sciksbz1uLmZpcnN0K24uc2l6ZS0xO2lmKGk+bylyZXR1cm4gSihuLmZpcnN0K24uc2l6ZS0xLGduKG4sbykudGV4dC5sZW5ndGgsITAsMSk7Zm9yKDA+ZSYmKGU9MCk7Oyl7dmFyIGw9Z24obixpKSxzPWVlKHQsbCxpLGUsciksYT1CcihsKSx1PWEmJmEuZmluZCgpO2lmKCFhfHwhKHMuY2g+dS5mcm9tLmNofHxzLmNoPT11LmZyb20uY2gmJnMueFJlbD4wKSlyZXR1cm4gcztpPXUudG8ubGluZX19ZnVuY3Rpb24gZWUodCxlLHIsbixpKXtmdW5jdGlvbiBvKG4pe3ZhciBpPVEodCxZZShyLG4pLCJsaW5lIixlLHUpO3JldHVybiBzPSEwLGw+aS5ib3R0b20/aS5sZWZ0LWE6bDxpLnRvcD9pLmxlZnQrYToocz0hMSxpLmxlZnQpfXZhciBsPWktQ24odCxlKSxzPSExLGE9Mip0LmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCx1PVYodCxlKSxjPXduKGUpLGY9ZS50ZXh0Lmxlbmd0aCxoPXlpKGUpLGQ9YmkoZSkscD1vKGgpLGc9cyxtPW8oZCksdj1zO2lmKG4+bSlyZXR1cm4gSihyLGQsdiwxKTtmb3IoOzspe2lmKGM/ZD09aHx8ZD09U2koZSxoLDEpOjE+PWQtaCl7Zm9yKHZhciB5PXA+bnx8bS1uPj1uLXA/aDpkLGI9bi0oeT09aD9wOm0pO0RvLnRlc3QoZS50ZXh0LmNoYXJBdCh5KSk7KSsreTt2YXIgeD1KKHIseSx5PT1oP2c6diwwPmI/LTE6Yj8xOjApO3JldHVybiB4fXZhciBDPU1hdGguY2VpbChmLzIpLHc9aCtDO2lmKGMpe3c9aDtmb3IodmFyIEw9MDtDPkw7KytMKXc9U2koZSx3LDEpfXZhciBrPW8odyk7az5uPyhkPXcsbT1rLCh2PXMpJiYobSs9MWUzKSxmPUMpOihoPXcscD1rLGc9cyxmLT1DKX19ZnVuY3Rpb24gcmUodCl7aWYobnVsbCE9dC5jYWNoZWRUZXh0SGVpZ2h0KXJldHVybiB0LmNhY2hlZFRleHRIZWlnaHQ7aWYobnVsbD09X2kpe19pPXNpKCJwcmUiKTtmb3IodmFyIGU9MDs0OT5lOysrZSlfaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKSxfaS5hcHBlbmRDaGlsZChzaSgiYnIiKSk7X2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSl9dWkodC5tZWFzdXJlLF9pKTt2YXIgcj1faS5vZmZzZXRIZWlnaHQvNTA7cmV0dXJuIHI+MyYmKHQuY2FjaGVkVGV4dEhlaWdodD1yKSxhaSh0Lm1lYXN1cmUpLHJ8fDF9ZnVuY3Rpb24gbmUodCl7aWYobnVsbCE9dC5jYWNoZWRDaGFyV2lkdGgpcmV0dXJuIHQuY2FjaGVkQ2hhcldpZHRoO3ZhciBlPXNpKCJzcGFuIiwieCIpLHI9c2koInByZSIsW2VdKTt1aSh0Lm1lYXN1cmUscik7dmFyIG49ZS5vZmZzZXRXaWR0aDtyZXR1cm4gbj4yJiYodC5jYWNoZWRDaGFyV2lkdGg9biksbnx8MTB9ZnVuY3Rpb24gaWUodCl7dC5jdXJPcD17Y2hhbmdlczpbXSxmb3JjZVVwZGF0ZTohMSx1cGRhdGVJbnB1dDpudWxsLHVzZXJTZWxDaGFuZ2U6bnVsbCx0ZXh0Q2hhbmdlZDpudWxsLHNlbGVjdGlvbkNoYW5nZWQ6ITEsY3Vyc29yQWN0aXZpdHk6ITEsdXBkYXRlTWF4TGluZTohMSx1cGRhdGVTY3JvbGxQb3M6ITEsaWQ6KytKaX0sTW8rK3x8KFNvPVtdKX1mdW5jdGlvbiBvZSh0KXt2YXIgZT10LmN1ck9wLHI9dC5kb2Msbj10LmRpc3BsYXk7aWYodC5jdXJPcD1udWxsLGUudXBkYXRlTWF4TGluZSYmZih0KSxuLm1heExpbmVDaGFuZ2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbi5tYXhMaW5lKXt2YXIgaT1YKHQsbi5tYXhMaW5lKTtuLnNpemVyLnN0eWxlLm1pbldpZHRoPU1hdGgubWF4KDAsaSszK1RvKSsicHgiLG4ubWF4TGluZUNoYW5nZWQ9ITE7dmFyIG89TWF0aC5tYXgoMCxuLnNpemVyLm9mZnNldExlZnQrbi5zaXplci5vZmZzZXRXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoKTtvPHIuc2Nyb2xsTGVmdCYmIWUudXBkYXRlU2Nyb2xsUG9zJiZNZSh0LE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsTGVmdCxvKSwhMCl9dmFyIGwscztpZihlLnVwZGF0ZVNjcm9sbFBvcylsPWUudXBkYXRlU2Nyb2xsUG9zO2Vsc2UgaWYoZS5zZWxlY3Rpb25DaGFuZ2VkJiZuLnNjcm9sbGVyLmNsaWVudEhlaWdodCl7dmFyIGE9USh0LHIuc2VsLmhlYWQpO2w9dXIodCxhLmxlZnQsYS50b3AsYS5sZWZ0LGEuYm90dG9tKX1pZigoZS5jaGFuZ2VzLmxlbmd0aHx8ZS5mb3JjZVVwZGF0ZXx8bCYmbnVsbCE9bC5zY3JvbGxUb3ApJiYocz1iKHQsZS5jaGFuZ2VzLGwmJmwuc2Nyb2xsVG9wLGUuZm9yY2VVcGRhdGUpLHQuZGlzcGxheS5zY3JvbGxlci5vZmZzZXRIZWlnaHQmJih0LmRvYy5zY3JvbGxUb3A9dC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCkpLCFzJiZlLnNlbGVjdGlvbkNoYW5nZWQmJkEodCksZS51cGRhdGVTY3JvbGxQb3Mpe3ZhciB1PU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxIZWlnaHQtbi5zY3JvbGxlci5jbGllbnRIZWlnaHQsbC5zY3JvbGxUb3ApKSxjPU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoLGwuc2Nyb2xsTGVmdCkpO24uc2Nyb2xsZXIuc2Nyb2xsVG9wPW4uc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ci5zY3JvbGxUb3A9dSxuLnNjcm9sbGVyLnNjcm9sbExlZnQ9bi5zY3JvbGxiYXJILnNjcm9sbExlZnQ9ci5zY3JvbGxMZWZ0PWMsZyh0KSxlLnNjcm9sbFRvUG9zJiZzcih0LFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MuZnJvbSksUWUodC5kb2MsZS5zY3JvbGxUb1Bvcy50byksZS5zY3JvbGxUb1Bvcy5tYXJnaW4pfWVsc2UgbCYmbHIodCk7ZS5zZWxlY3Rpb25DaGFuZ2VkJiZEKHQpLHQuc3RhdGUuZm9jdXNlZCYmZS51cGRhdGVJbnB1dCYmZGUodCxlLnVzZXJTZWxDaGFuZ2UpO3ZhciBoPWUubWF5YmVIaWRkZW5NYXJrZXJzLGQ9ZS5tYXliZVVuaGlkZGVuTWFya2VycztpZihoKWZvcih2YXIgcD0wO3A8aC5sZW5ndGg7KytwKWhbcF0ubGluZXMubGVuZ3RofHxLbihoW3BdLCJoaWRlIik7aWYoZClmb3IodmFyIHA9MDtwPGQubGVuZ3RoOysrcClkW3BdLmxpbmVzLmxlbmd0aCYmS24oZFtwXSwidW5oaWRlIik7dmFyIG07aWYoLS1Nb3x8KG09U28sU289bnVsbCksZS50ZXh0Q2hhbmdlZCYmS24odCwiY2hhbmdlIix0LGUudGV4dENoYW5nZWQpLGUuY3Vyc29yQWN0aXZpdHkmJktuKHQsImN1cnNvckFjdGl2aXR5Iix0KSxtKWZvcih2YXIgcD0wO3A8bS5sZW5ndGg7KytwKW1bcF0oKX1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXR8fHRoaXMsbj0hci5jdXJPcDtuJiZpZShyKTt0cnl7dmFyIGk9ZS5hcHBseShyLGFyZ3VtZW50cyl9ZmluYWxseXtuJiZvZShyKX1yZXR1cm4gaX19ZnVuY3Rpb24gc2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmNtJiYhdGhpcy5jbS5jdXJPcDtyJiZpZSh0aGlzLmNtKTt0cnl7ZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3ImJm9lKHRoaXMuY20pfXJldHVybiBlfX1mdW5jdGlvbiBhZSh0LGUpe3ZhciByLG49IXQuY3VyT3A7biYmaWUodCk7dHJ5e3I9ZSgpfWZpbmFsbHl7biYmb2UodCl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWUodCxlLHIsbil7bnVsbD09ZSYmKGU9dC5kb2MuZmlyc3QpLG51bGw9PXImJihyPXQuZG9jLmZpcnN0K3QuZG9jLnNpemUpLHQuY3VyT3AuY2hhbmdlcy5wdXNoKHtmcm9tOmUsdG86cixkaWZmOm59KX1mdW5jdGlvbiBjZSh0KXt0LmRpc3BsYXkucG9sbGluZ0Zhc3R8fHQuZGlzcGxheS5wb2xsLnNldCh0Lm9wdGlvbnMucG9sbEludGVydmFsLGZ1bmN0aW9uKCl7aGUodCksdC5zdGF0ZS5mb2N1c2VkJiZjZSh0KX0pfWZ1bmN0aW9uIGZlKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj1oZSh0KTtufHxyPyh0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEsY2UodCkpOihyPSEwLHQuZGlzcGxheS5wb2xsLnNldCg2MCxlKSl9dmFyIHI9ITE7dC5kaXNwbGF5LnBvbGxpbmdGYXN0PSEwLHQuZGlzcGxheS5wb2xsLnNldCgyMCxlKX1mdW5jdGlvbiBoZSh0KXt2YXIgZT10LmRpc3BsYXkuaW5wdXQscj10LmRpc3BsYXkucHJldklucHV0LG49dC5kb2MsaT1uLnNlbDtpZighdC5zdGF0ZS5mb2N1c2VkfHxJbyhlKXx8Z2UodCl8fHQuc3RhdGUuZGlzYWJsZUlucHV0KXJldHVybiExO3Quc3RhdGUucGFzdGVJbmNvbWluZyYmdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYoZS52YWx1ZT1lLnZhbHVlLnN1YnN0cmluZygwLGUudmFsdWUubGVuZ3RoLTEpLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMSk7dmFyIG89ZS52YWx1ZTtpZihvPT1yJiZqZShpLmZyb20saS50bykpcmV0dXJuITE7aWYoQWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPT09bylyZXR1cm4gZGUodCwhMCksITE7dmFyIGw9IXQuY3VyT3A7bCYmaWUodCksaS5zaGlmdD0hMTtmb3IodmFyIHM9MCxhPU1hdGgubWluKHIubGVuZ3RoLG8ubGVuZ3RoKTthPnMmJnIuY2hhckNvZGVBdChzKT09by5jaGFyQ29kZUF0KHMpOykrK3M7dmFyIHU9aS5mcm9tLGM9aS50bztzPHIubGVuZ3RoP3U9WWUodS5saW5lLHUuY2gtKHIubGVuZ3RoLXMpKTp0LnN0YXRlLm92ZXJ3cml0ZSYmamUodSxjKSYmIXQuc3RhdGUucGFzdGVJbmNvbWluZyYmKGM9WWUoYy5saW5lLE1hdGgubWluKGduKG4sYy5saW5lKS50ZXh0Lmxlbmd0aCxjLmNoKyhvLmxlbmd0aC1zKSkpKTt2YXIgZj10LmN1ck9wLnVwZGF0ZUlucHV0LGg9e2Zyb206dSx0bzpjLHRleHQ6em8oby5zbGljZShzKSksb3JpZ2luOnQuc3RhdGUucGFzdGVJbmNvbWluZz8icGFzdGUiOiIraW5wdXQifTtyZXR1cm4gQmUodC5kb2MsaCwiZW5kIiksdC5jdXJPcC51cGRhdGVJbnB1dD1mLFVuKHQsImlucHV0UmVhZCIsdCxoKSxvLmxlbmd0aD4xZTN8fG8uaW5kZXhPZigiXG4iKT4tMT9lLnZhbHVlPXQuZGlzcGxheS5wcmV2SW5wdXQ9IiI6dC5kaXNwbGF5LnByZXZJbnB1dD1vLGwmJm9lKHQpLHQuc3RhdGUucGFzdGVJbmNvbWluZz0hMSwhMH1mdW5jdGlvbiBkZSh0LGUpe3ZhciByLG4saT10LmRvYztpZihqZShpLnNlbC5mcm9tLGkuc2VsLnRvKSllJiYodC5kaXNwbGF5LnByZXZJbnB1dD10LmRpc3BsYXkuaW5wdXQudmFsdWU9IiIsQWkmJiFOaSYmKHQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSk7ZWxzZXt0LmRpc3BsYXkucHJldklucHV0PSIiLHI9Rm8mJihpLnNlbC50by5saW5lLWkuc2VsLmZyb20ubGluZT4xMDB8fChuPXQuZ2V0U2VsZWN0aW9uKCkpLmxlbmd0aD4xZTMpO3ZhciBvPXI/Ii0iOm58fHQuZ2V0U2VsZWN0aW9uKCk7dC5kaXNwbGF5LmlucHV0LnZhbHVlPW8sdC5zdGF0ZS5mb2N1c2VkJiZKbih0LmRpc3BsYXkuaW5wdXQpLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249byl9dC5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb249cn1mdW5jdGlvbiBwZSh0KXsibm9jdXJzb3IiPT10Lm9wdGlvbnMucmVhZE9ubHl8fFZpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT10LmRpc3BsYXkuaW5wdXR8fHQuZGlzcGxheS5pbnB1dC5mb2N1cygpfWZ1bmN0aW9uIGdlKHQpe3JldHVybiB0Lm9wdGlvbnMucmVhZE9ubHl8fHQuZG9jLmNhbnRFZGl0fWZ1bmN0aW9uIG1lKHQpe2Z1bmN0aW9uIGUoKXt0LnN0YXRlLmZvY3VzZWQmJnNldFRpbWVvdXQoaWkocGUsdCksMCl9ZnVuY3Rpb24gcigpe251bGw9PXMmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGwsbC5jYWNoZWRDaGFyV2lkdGg9bC5jYWNoZWRUZXh0SGVpZ2h0PU9vPW51bGwsXyh0KSxhZSh0LGlpKHVlLHQpKX0sMTAwKSl9ZnVuY3Rpb24gbigpe2Zvcih2YXIgdD1sLndyYXBwZXIucGFyZW50Tm9kZTt0JiZ0IT1kb2N1bWVudC5ib2R5O3Q9dC5wYXJlbnROb2RlKTt0P3NldFRpbWVvdXQobiw1ZTMpOlZuKHdpbmRvdywicmVzaXplIixyKX1mdW5jdGlvbiBpKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbkRyYWdFdmVudCYmdC5vcHRpb25zLm9uRHJhZ0V2ZW50KHQsRW4oZSkpfHxQbihlKX1mdW5jdGlvbiBvKCl7bC5pbmFjY3VyYXRlU2VsZWN0aW9uJiYobC5wcmV2SW5wdXQ9IiIsbC5pbmFjY3VyYXRlU2VsZWN0aW9uPSExLGwuaW5wdXQudmFsdWU9dC5nZXRTZWxlY3Rpb24oKSxKbihsLmlucHV0KSl9dmFyIGw9dC5kaXNwbGF5O0duKGwuc2Nyb2xsZXIsIm1vdXNlZG93biIsbGUodCxiZSkpLEFpP0duKGwuc2Nyb2xsZXIsImRibGNsaWNrIixsZSh0LGZ1bmN0aW9uKGUpe2lmKCFYbih0LGUpKXt2YXIgcj15ZSh0LGUpO2lmKHImJiF3ZSh0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt6bihlKTt2YXIgbj1tcihnbih0LmRvYyxyLmxpbmUpLnRleHQscik7ZXIodC5kb2Msbi5mcm9tLG4udG8pfX19KSk6R24obC5zY3JvbGxlciwiZGJsY2xpY2siLGZ1bmN0aW9uKGUpe1huKHQsZSl8fHpuKGUpfSksR24obC5saW5lU3BhY2UsInNlbGVjdHN0YXJ0IixmdW5jdGlvbih0KXt2ZShsLHQpfHx6bih0KX0pLFppfHxHbihsLnNjcm9sbGVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZSl7SWUodCxlKX0pLEduKGwuc2Nyb2xsZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmKFNlKHQsbC5zY3JvbGxlci5zY3JvbGxUb3ApLE1lKHQsbC5zY3JvbGxlci5zY3JvbGxMZWZ0LCEwKSxLbih0LCJzY3JvbGwiLHQpKX0pLEduKGwuc2Nyb2xsYmFyViwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZTZSh0LGwuc2Nyb2xsYmFyVi5zY3JvbGxUb3ApfSksR24obC5zY3JvbGxiYXJILCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJk1lKHQsbC5zY3JvbGxiYXJILnNjcm9sbExlZnQpfSksR24obC5zY3JvbGxlciwibW91c2V3aGVlbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsZXIsIkRPTU1vdXNlU2Nyb2xsIixmdW5jdGlvbihlKXtUZSh0LGUpfSksR24obC5zY3JvbGxiYXJILCJtb3VzZWRvd24iLGUpLEduKGwuc2Nyb2xsYmFyViwibW91c2Vkb3duIixlKSxHbihsLndyYXBwZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLndyYXBwZXIuc2Nyb2xsVG9wPWwud3JhcHBlci5zY3JvbGxMZWZ0PTB9KTt2YXIgcztHbih3aW5kb3csInJlc2l6ZSIsciksc2V0VGltZW91dChuLDVlMyksR24obC5pbnB1dCwia2V5dXAiLGxlKHQsZnVuY3Rpb24oZSl7WG4odCxlKXx8dC5vcHRpb25zLm9uS2V5RXZlbnQmJnQub3B0aW9ucy5vbktleUV2ZW50KHQsRW4oZSkpfHwxNj09ZS5rZXlDb2RlJiYodC5kb2Muc2VsLnNoaWZ0PSExKX0pKSxHbihsLmlucHV0LCJpbnB1dCIsZnVuY3Rpb24oKXtBaSYmIU5pJiZ0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24mJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUodCl9KSxHbihsLmlucHV0LCJrZXlkb3duIixsZSh0LFdlKSksR24obC5pbnB1dCwia2V5cHJlc3MiLGxlKHQsT2UpKSxHbihsLmlucHV0LCJmb2N1cyIsaWkoRWUsdCkpLEduKGwuaW5wdXQsImJsdXIiLGlpKHplLHQpKSx0Lm9wdGlvbnMuZHJhZ0Ryb3AmJihHbihsLnNjcm9sbGVyLCJkcmFnc3RhcnQiLGZ1bmN0aW9uKGUpe2tlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJkcmFnZW50ZXIiLGkpLEduKGwuc2Nyb2xsZXIsImRyYWdvdmVyIixpKSxHbihsLnNjcm9sbGVyLCJkcm9wIixsZSh0LExlKSkpLEduKGwuc2Nyb2xsZXIsInBhc3RlIixmdW5jdGlvbihlKXt2ZShsLGUpfHwocGUodCksZmUodCkpfSksR24obC5pbnB1dCwicGFzdGUiLGZ1bmN0aW9uKCl7aWYoV2kmJiF0LnN0YXRlLmZha2VkTGFzdENoYXImJiEobmV3IERhdGUtdC5zdGF0ZS5sYXN0TWlkZGxlRG93bjwyMDApKXt2YXIgZT1sLmlucHV0LnNlbGVjdGlvblN0YXJ0LHI9bC5pbnB1dC5zZWxlY3Rpb25FbmQ7bC5pbnB1dC52YWx1ZSs9IiQiLGwuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9ZSxsLmlucHV0LnNlbGVjdGlvbkVuZD1yLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMH10LnN0YXRlLnBhc3RlSW5jb21pbmc9ITAsZmUodCl9KSxHbihsLmlucHV0LCJjdXQiLG8pLEduKGwuaW5wdXQsImNvcHkiLG8pLEZpJiZHbihsLnNpemVyLCJtb3VzZXVwIixmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXQmJmwuaW5wdXQuYmx1cigpLHBlKHQpfSl9ZnVuY3Rpb24gdmUodCxlKXtmb3IodmFyIHI9Um4oZSk7ciE9dC53cmFwcGVyO3I9ci5wYXJlbnROb2RlKWlmKCFyfHxyLmlnbm9yZUV2ZW50c3x8ci5wYXJlbnROb2RlPT10LnNpemVyJiZyIT10Lm1vdmVyKXJldHVybiEwfWZ1bmN0aW9uIHllKHQsZSxyKXt2YXIgbj10LmRpc3BsYXk7aWYoIXIpe3ZhciBpPVJuKGUpO2lmKGk9PW4uc2Nyb2xsYmFySHx8aT09bi5zY3JvbGxiYXJILmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyVnx8aT09bi5zY3JvbGxiYXJWLmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyRmlsbGVyfHxpPT1uLmd1dHRlckZpbGxlcilyZXR1cm4gbnVsbH12YXIgbyxsLHM9Zmkobi5saW5lU3BhY2UpO3RyeXtvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGUodCxvLXMubGVmdCxsLXMudG9wKX1mdW5jdGlvbiBiZSh0KXtmdW5jdGlvbiBlKHQpe2lmKCFqZSh2LHQpKXtpZih2PXQsInNpbmdsZSI9PWMpcmV0dXJuIGVyKGkuZG9jLFFlKGwsYSksdCksdm9pZCAwOwppZihnPVFlKGwsZyksbT1RZShsLG0pLCJkb3VibGUiPT1jKXt2YXIgZT1tcihnbihsLHQubGluZSkudGV4dCx0KTskZSh0LGcpP2VyKGkuZG9jLGUuZnJvbSxtKTplcihpLmRvYyxnLGUudG8pfWVsc2UidHJpcGxlIj09YyYmKCRlKHQsZyk/ZXIoaS5kb2MsbSxRZShsLFllKHQubGluZSwwKSkpOmVyKGkuZG9jLGcsUWUobCxZZSh0LmxpbmUrMSwwKSkpKX19ZnVuY3Rpb24gcih0KXt2YXIgbj0rK2Iscz15ZShpLHQsITApO2lmKHMpaWYoamUocyxoKSl7dmFyIGE9dC5jbGllbnRZPHkudG9wPy0yMDp0LmNsaWVudFk+eS5ib3R0b20/MjA6MDthJiZzZXRUaW1lb3V0KGxlKGksZnVuY3Rpb24oKXtiPT1uJiYoby5zY3JvbGxlci5zY3JvbGxUb3ArPWEscih0KSl9KSw1MCl9ZWxzZXtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpLGg9cyxlKHMpO3ZhciB1PXAobyxsKTsocy5saW5lPj11LnRvfHxzLmxpbmU8dS5mcm9tKSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmcih0KX0pLDE1MCl9fWZ1bmN0aW9uIG4odCl7Yj0xLzAsem4odCkscGUoaSksVm4oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksVm4oZG9jdW1lbnQsIm1vdXNldXAiLEMpfWlmKCFYbih0aGlzLHQpKXt2YXIgaT10aGlzLG89aS5kaXNwbGF5LGw9aS5kb2Mscz1sLnNlbDtpZihzLnNoaWZ0PXQuc2hpZnRLZXksdmUobyx0KSlyZXR1cm4gV2l8fChvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5zY3JvbGxlci5kcmFnZ2FibGU9ITB9LDEwMCkpLHZvaWQgMDtpZighd2UoaSx0KSl7dmFyIGE9eWUoaSx0KTtzd2l0Y2goQm4odCkpe2Nhc2UgMzpyZXR1cm4gWmkmJkllLmNhbGwoaSxpLHQpLHZvaWQgMDtjYXNlIDI6cmV0dXJuIFdpJiYoaS5zdGF0ZS5sYXN0TWlkZGxlRG93bj0rbmV3IERhdGUpLGEmJmVyKGkuZG9jLGEpLHNldFRpbWVvdXQoaWkocGUsaSksMjApLHpuKHQpLHZvaWQgMH1pZighYSlyZXR1cm4gUm4odCk9PW8uc2Nyb2xsZXImJnpuKHQpLHZvaWQgMDtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpO3ZhciB1PStuZXcgRGF0ZSxjPSJzaW5nbGUiO2lmKGppJiZqaS50aW1lPnUtNDAwJiZqZShqaS5wb3MsYSkpYz0idHJpcGxlIix6bih0KSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx2cihpLGEubGluZSk7ZWxzZSBpZihZaSYmWWkudGltZT51LTQwMCYmamUoWWkucG9zLGEpKXtjPSJkb3VibGUiLGppPXt0aW1lOnUscG9zOmF9LHpuKHQpO3ZhciBmPW1yKGduKGwsYS5saW5lKS50ZXh0LGEpO2VyKGkuZG9jLGYuZnJvbSxmLnRvKX1lbHNlIFlpPXt0aW1lOnUscG9zOmF9O3ZhciBoPWE7aWYoaS5vcHRpb25zLmRyYWdEcm9wJiZXbyYmIWdlKGkpJiYhamUocy5mcm9tLHMudG8pJiYhJGUoYSxzLmZyb20pJiYhJGUocy50byxhKSYmInNpbmdsZSI9PWMpe3ZhciBkPWxlKGksZnVuY3Rpb24oZSl7V2kmJihvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSksaS5zdGF0ZS5kcmFnZ2luZ1RleHQ9ITEsVm4oZG9jdW1lbnQsIm1vdXNldXAiLGQpLFZuKG8uc2Nyb2xsZXIsImRyb3AiLGQpLE1hdGguYWJzKHQuY2xpZW50WC1lLmNsaWVudFgpK01hdGguYWJzKHQuY2xpZW50WS1lLmNsaWVudFkpPDEwJiYoem4oZSksZXIoaS5kb2MsYSkscGUoaSkpfSk7cmV0dXJuIFdpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITApLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PWQsby5zY3JvbGxlci5kcmFnRHJvcCYmby5zY3JvbGxlci5kcmFnRHJvcCgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixkKSxHbihvLnNjcm9sbGVyLCJkcm9wIixkKSx2b2lkIDB9em4odCksInNpbmdsZSI9PWMmJmVyKGkuZG9jLFFlKGwsYSkpO3ZhciBnPXMuZnJvbSxtPXMudG8sdj1hLHk9Zmkoby53cmFwcGVyKSxiPTAseD1sZShpLGZ1bmN0aW9uKHQpe0FpfHxCbih0KT9yKHQpOm4odCl9KSxDPWxlKGksbik7R24oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksR24oZG9jdW1lbnQsIm1vdXNldXAiLEMpfX19ZnVuY3Rpb24geGUodCxlLHIsbixpKXt0cnl7dmFyIG89ZS5jbGllbnRYLGw9ZS5jbGllbnRZfWNhdGNoKGUpe3JldHVybiExfWlmKG8+PU1hdGguZmxvb3IoZmkodC5kaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSlyZXR1cm4hMTtuJiZ6bihlKTt2YXIgcz10LmRpc3BsYXksYT1maShzLmxpbmVEaXYpO2lmKGw+YS5ib3R0b218fCFZbih0LHIpKXJldHVybiBGbihlKTtsLT1hLnRvcC1zLnZpZXdPZmZzZXQ7Zm9yKHZhciB1PTA7dTx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt1KXt2YXIgYz1zLmd1dHRlcnMuY2hpbGROb2Rlc1t1XTtpZihjJiZmaShjKS5yaWdodD49byl7dmFyIGY9eG4odC5kb2MsbCksaD10Lm9wdGlvbnMuZ3V0dGVyc1t1XTtyZXR1cm4gaSh0LHIsdCxmLGgsZSksRm4oZSl9fX1mdW5jdGlvbiBDZSh0LGUpe3JldHVybiBZbih0LCJndXR0ZXJDb250ZXh0TWVudSIpP3hlKHQsZSwiZ3V0dGVyQ29udGV4dE1lbnUiLCExLEtuKTohMX1mdW5jdGlvbiB3ZSh0LGUpe3JldHVybiB4ZSh0LGUsImd1dHRlckNsaWNrIiwhMCxVbil9ZnVuY3Rpb24gTGUodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fHZlKGUuZGlzcGxheSx0KXx8ZS5vcHRpb25zLm9uRHJhZ0V2ZW50JiZlLm9wdGlvbnMub25EcmFnRXZlbnQoZSxFbih0KSkpKXt6bih0KSxBaSYmKHRvPStuZXcgRGF0ZSk7dmFyIHI9eWUoZSx0LCEwKSxuPXQuZGF0YVRyYW5zZmVyLmZpbGVzO2lmKHImJiFnZShlKSlpZihuJiZuLmxlbmd0aCYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlKWZvcih2YXIgaT1uLmxlbmd0aCxvPUFycmF5KGkpLGw9MCxzPWZ1bmN0aW9uKHQsbil7dmFyIHM9bmV3IEZpbGVSZWFkZXI7cy5vbmxvYWQ9ZnVuY3Rpb24oKXtvW25dPXMucmVzdWx0LCsrbD09aSYmKHI9UWUoZS5kb2MsciksQmUoZS5kb2Mse2Zyb206cix0bzpyLHRleHQ6em8oby5qb2luKCJcbiIpKSxvcmlnaW46InBhc3RlIn0sImFyb3VuZCIpKX0scy5yZWFkQXNUZXh0KHQpfSxhPTA7aT5hOysrYSlzKG5bYV0sYSk7ZWxzZXtpZihlLnN0YXRlLmRyYWdnaW5nVGV4dCYmISRlKHIsZS5kb2Muc2VsLmZyb20pJiYhJGUoZS5kb2Muc2VsLnRvLHIpKXJldHVybiBlLnN0YXRlLmRyYWdnaW5nVGV4dCh0KSxzZXRUaW1lb3V0KGlpKHBlLGUpLDIwKSx2b2lkIDA7dHJ5e3ZhciBvPXQuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTtpZihvKXt2YXIgdT1lLmRvYy5zZWwuZnJvbSxjPWUuZG9jLnNlbC50bztucihlLmRvYyxyLHIpLGUuc3RhdGUuZHJhZ2dpbmdUZXh0JiZfZShlLmRvYywiIix1LGMsInBhc3RlIiksZS5yZXBsYWNlU2VsZWN0aW9uKG8sbnVsbCwicGFzdGUiKSxwZShlKX19Y2F0Y2godCl7fX19fWZ1bmN0aW9uIGtlKHQsZSl7aWYoQWkmJighdC5zdGF0ZS5kcmFnZ2luZ1RleHR8fCtuZXcgRGF0ZS10bzwxMDApKXJldHVybiBQbihlKSx2b2lkIDA7aWYoIVhuKHQsZSkmJiF2ZSh0LmRpc3BsYXksZSkpe3ZhciByPXQuZ2V0U2VsZWN0aW9uKCk7aWYoZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsciksZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlJiYhSWkpe3ZhciBuPXNpKCJpbWciLG51bGwsbnVsbCwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7bi5zcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09Iix6aSYmKG4ud2lkdGg9bi5oZWlnaHQ9MSx0LmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChuKSxuLl90b3A9bi5vZmZzZXRUb3ApLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLDAsMCksemkmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX19fWZ1bmN0aW9uIFNlKHQsZSl7TWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWUpPDJ8fCh0LmRvYy5zY3JvbGxUb3A9ZSxUaXx8Yih0LFtdLGUpLHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wPWUpLHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1lKSxUaSYmYih0LFtdKSxXKHQsMTAwKSl9ZnVuY3Rpb24gTWUodCxlLHIpeyhyP2U9PXQuZG9jLnNjcm9sbExlZnQ6TWF0aC5hYnModC5kb2Muc2Nyb2xsTGVmdC1lKTwyKXx8KGU9TWF0aC5taW4oZSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKSx0LmRvYy5zY3JvbGxMZWZ0PWUsZyh0KSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0PWUpLHQuZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PWUpKX1mdW5jdGlvbiBUZSh0LGUpe3ZhciByPWUud2hlZWxEZWx0YVgsbj1lLndoZWVsRGVsdGFZO251bGw9PXImJmUuZGV0YWlsJiZlLmF4aXM9PWUuSE9SSVpPTlRBTF9BWElTJiYocj1lLmRldGFpbCksbnVsbD09biYmZS5kZXRhaWwmJmUuYXhpcz09ZS5WRVJUSUNBTF9BWElTP249ZS5kZXRhaWw6bnVsbD09biYmKG49ZS53aGVlbERlbHRhKTt2YXIgaT10LmRpc3BsYXksbz1pLnNjcm9sbGVyO2lmKHImJm8uc2Nyb2xsV2lkdGg+by5jbGllbnRXaWR0aHx8biYmby5zY3JvbGxIZWlnaHQ+by5jbGllbnRIZWlnaHQpe2lmKG4mJktpJiZXaSlmb3IodmFyIGw9ZS50YXJnZXQ7bCE9bztsPWwucGFyZW50Tm9kZSlpZihsLmxpbmVPYmope3QuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQ9bDticmVha31pZihyJiYhVGkmJiF6aSYmbnVsbCE9cm8pcmV0dXJuIG4mJlNlKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbFRvcCtuKnJvLG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0KSkpLE1lKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbExlZnQrcipybyxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgpKSksem4oZSksaS53aGVlbFN0YXJ0WD1udWxsLHZvaWQgMDtpZihuJiZudWxsIT1ybyl7dmFyIHM9bipybyxhPXQuZG9jLnNjcm9sbFRvcCx1PWEraS53cmFwcGVyLmNsaWVudEhlaWdodDswPnM/YT1NYXRoLm1heCgwLGErcy01MCk6dT1NYXRoLm1pbih0LmRvYy5oZWlnaHQsdStzKzUwKSxiKHQsW10se3RvcDphLGJvdHRvbTp1fSl9MjA+ZW8mJihudWxsPT1pLndoZWVsU3RhcnRYPyhpLndoZWVsU3RhcnRYPW8uc2Nyb2xsTGVmdCxpLndoZWVsU3RhcnRZPW8uc2Nyb2xsVG9wLGkud2hlZWxEWD1yLGkud2hlZWxEWT1uLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihudWxsIT1pLndoZWVsU3RhcnRYKXt2YXIgdD1vLnNjcm9sbExlZnQtaS53aGVlbFN0YXJ0WCxlPW8uc2Nyb2xsVG9wLWkud2hlZWxTdGFydFkscj1lJiZpLndoZWVsRFkmJmUvaS53aGVlbERZfHx0JiZpLndoZWVsRFgmJnQvaS53aGVlbERYO2kud2hlZWxTdGFydFg9aS53aGVlbFN0YXJ0WT1udWxsLHImJihybz0ocm8qZW8rcikvKGVvKzEpLCsrZW8pfX0sMjAwKSk6KGkud2hlZWxEWCs9cixpLndoZWVsRFkrPW4pKX19ZnVuY3Rpb24gQWUodCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9bW9bZV0sIWUpKXJldHVybiExO3QuZGlzcGxheS5wb2xsaW5nRmFzdCYmaGUodCkmJih0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEpO3ZhciBuPXQuZG9jLGk9bi5zZWwuc2hpZnQsbz0hMTt0cnl7Z2UodCkmJih0LnN0YXRlLnN1cHByZXNzRWRpdHM9ITApLHImJihuLnNlbC5zaGlmdD0hMSksbz1lKHQpIT1Bb31maW5hbGx5e24uc2VsLnNoaWZ0PWksdC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSExfXJldHVybiBvfWZ1bmN0aW9uIEhlKHQpe3ZhciBlPXQuc3RhdGUua2V5TWFwcy5zbGljZSgwKTtyZXR1cm4gdC5vcHRpb25zLmV4dHJhS2V5cyYmZS5wdXNoKHQub3B0aW9ucy5leHRyYUtleXMpLGUucHVzaCh0Lm9wdGlvbnMua2V5TWFwKSxlfWZ1bmN0aW9uIE5lKHQsZSl7dmFyIHI9Q3IodC5vcHRpb25zLmtleU1hcCksbj1yLmF1dG87Y2xlYXJUaW1lb3V0KG5vKSxuJiYhTHIoZSkmJihubz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Q3IodC5vcHRpb25zLmtleU1hcCk9PXImJih0Lm9wdGlvbnMua2V5TWFwPW4uY2FsbD9uLmNhbGwobnVsbCx0KTpuLGwodCkpfSw1MCkpO3ZhciBpPWtyKGUsITApLG89ITE7aWYoIWkpcmV0dXJuITE7dmFyIHM9SGUodCk7cmV0dXJuIG89ZS5zaGlmdEtleT93cigiU2hpZnQtIitpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KXx8d3IoaSxzLGZ1bmN0aW9uKGUpe3JldHVybigic3RyaW5nIj09dHlwZW9mIGU/L15nb1tBLVpdLy50ZXN0KGUpOmUubW90aW9uKT9BZSh0LGUpOnZvaWQgMH0pOndyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4gQWUodCxlKX0pLG8mJih6bihlKSxEKHQpLE5pJiYoZS5vbGRLZXlDb2RlPWUua2V5Q29kZSxlLmtleUNvZGU9MCksVW4odCwia2V5SGFuZGxlZCIsdCxpLGUpKSxvfWZ1bmN0aW9uIERlKHQsZSxyKXt2YXIgbj13cigiJyIrcisiJyIsSGUodCksZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KTtyZXR1cm4gbiYmKHpuKGUpLEQodCksVW4odCwia2V5SGFuZGxlZCIsdCwiJyIrcisiJyIsZSkpLG59ZnVuY3Rpb24gV2UodCl7dmFyIGU9dGhpcztpZihlLnN0YXRlLmZvY3VzZWR8fEVlKGUpLCEoWG4oZSx0KXx8ZS5vcHRpb25zLm9uS2V5RXZlbnQmJmUub3B0aW9ucy5vbktleUV2ZW50KGUsRW4odCkpKSl7QWkmJjI3PT10LmtleUNvZGUmJih0LnJldHVyblZhbHVlPSExKTt2YXIgcj10LmtleUNvZGU7ZS5kb2Muc2VsLnNoaWZ0PTE2PT1yfHx0LnNoaWZ0S2V5O3ZhciBuPU5lKGUsdCk7emkmJihvbz1uP3I6bnVsbCwhbiYmODg9PXImJiFGbyYmKEtpP3QubWV0YUtleTp0LmN0cmxLZXkpJiZlLnJlcGxhY2VTZWxlY3Rpb24oIiIpKX19ZnVuY3Rpb24gT2UodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe3ZhciByPXQua2V5Q29kZSxuPXQuY2hhckNvZGU7aWYoemkmJnI9PW9vKXJldHVybiBvbz1udWxsLHpuKHQpLHZvaWQgMDtpZighKHppJiYoIXQud2hpY2h8fHQud2hpY2g8MTApfHxGaSl8fCFOZShlLHQpKXt2YXIgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PW4/cjpuKTt0aGlzLm9wdGlvbnMuZWxlY3RyaWNDaGFycyYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzJiZ0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQmJiFnZSh0aGlzKSYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzLmluZGV4T2YoaSk+LTEmJnNldFRpbWVvdXQobGUoZSxmdW5jdGlvbigpe2hyKGUsZS5kb2Muc2VsLnRvLmxpbmUsInNtYXJ0Iil9KSw3NSksRGUoZSx0LGkpfHwoQWkmJiFOaSYmKGUuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSxmZShlKSl9fX1mdW5jdGlvbiBFZSh0KXsibm9jdXJzb3IiIT10Lm9wdGlvbnMucmVhZE9ubHkmJih0LnN0YXRlLmZvY3VzZWR8fChLbih0LCJmb2N1cyIsdCksdC5zdGF0ZS5mb2N1c2VkPSEwLC0xPT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNvZGVNaXJyb3ItZm9jdXNlZFxiLykmJih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci1mb2N1c2VkIiksdC5jdXJPcHx8KGRlKHQsITApLFdpJiZzZXRUaW1lb3V0KGlpKGRlLHQsITApLDApKSksY2UodCksRCh0KSl9ZnVuY3Rpb24gemUodCl7dC5zdGF0ZS5mb2N1c2VkJiYoS24odCwiYmx1ciIsdCksdC5zdGF0ZS5mb2N1c2VkPSExLHQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3ItZm9jdXNlZCIsIiIpKSxjbGVhckludGVydmFsKHQuZGlzcGxheS5ibGlua2VyKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zdGF0ZS5mb2N1c2VkfHwodC5kb2Muc2VsLnNoaWZ0PSExKX0sMTUwKX1mdW5jdGlvbiBJZSh0LGUpe2Z1bmN0aW9uIHIoKXtpZihudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXt2YXIgdD1pLmlucHV0LnZhbHVlPSLigIsiKyhqZShvLmZyb20sby50byk/IiI6aS5pbnB1dC52YWx1ZSk7aS5wcmV2SW5wdXQ9IuKAiyIsaS5pbnB1dC5zZWxlY3Rpb25TdGFydD0xLGkuaW5wdXQuc2VsZWN0aW9uRW5kPXQubGVuZ3RofX1mdW5jdGlvbiBuKCl7aWYoaS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGkuaW5wdXQuc3R5bGUuY3NzVGV4dD11LE5pJiYoaS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1pLnNjcm9sbGVyLnNjcm9sbFRvcD1zKSxjZSh0KSxudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXsoIUFpfHxOaSkmJnIoKSxjbGVhclRpbWVvdXQoaW8pO3ZhciBlPTAsbj1mdW5jdGlvbigpeyIgIj09aS5wcmV2SW5wdXQmJjA9PWkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ/bGUodCxtby5zZWxlY3RBbGwpKHQpOmUrKzwxMD9pbz1zZXRUaW1lb3V0KG4sNTAwKTpkZSh0KX07aW89c2V0VGltZW91dChuLDIwMCl9fWlmKCFYbih0LGUsImNvbnRleHRtZW51Iikpe3ZhciBpPXQuZGlzcGxheSxvPXQuZG9jLnNlbDtpZighdmUoaSxlKSYmIUNlKHQsZSkpe3ZhciBsPXllKHQsZSkscz1pLnNjcm9sbGVyLnNjcm9sbFRvcDtpZihsJiYhemkpe3ZhciBhPXQub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnU7YSYmKGplKG8uZnJvbSxvLnRvKXx8JGUobCxvLmZyb20pfHwhJGUobCxvLnRvKSkmJmxlKHQsbnIpKHQuZG9jLGwsbCk7dmFyIHU9aS5pbnB1dC5zdHlsZS5jc3NUZXh0O2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9wOiAiKyhlLmNsaWVudFktNSkrInB4OyBsZWZ0OiAiKyhlLmNsaWVudFgtNSkrInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgb3V0bGluZTogbm9uZTsiKyJib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgLW1zLW9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyIscGUodCksZGUodCwhMCksamUoby5mcm9tLG8udG8pJiYoaS5pbnB1dC52YWx1ZT1pLnByZXZJbnB1dD0iICIpLEFpJiYhTmkmJnIoKSxaaSl7UG4oZSk7dmFyIGM9ZnVuY3Rpb24oKXtWbih3aW5kb3csIm1vdXNldXAiLGMpLHNldFRpbWVvdXQobiwyMCl9O0duKHdpbmRvdywibW91c2V1cCIsYyl9ZWxzZSBzZXRUaW1lb3V0KG4sNTApfX19fWZ1bmN0aW9uIEZlKHQsZSxyKXtpZighJGUoZS5mcm9tLHIpKXJldHVybiBRZSh0LHIpO3ZhciBuPWUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKTtpZihyLmxpbmU+ZS50by5saW5lK24pe3ZhciBpPXIubGluZS1uLG89dC5maXJzdCt0LnNpemUtMTtyZXR1cm4gaT5vP1llKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCk6SmUocixnbih0LGkpLnRleHQubGVuZ3RoKX1pZihyLmxpbmU9PWUudG8ubGluZStuKXJldHVybiBKZShyLFFuKGUudGV4dCkubGVuZ3RoKygxPT1lLnRleHQubGVuZ3RoP2UuZnJvbS5jaDowKStnbih0LGUudG8ubGluZSkudGV4dC5sZW5ndGgtZS50by5jaCk7dmFyIGw9ci5saW5lLWUuZnJvbS5saW5lO3JldHVybiBKZShyLGUudGV4dFtsXS5sZW5ndGgrKGw/MDplLmZyb20uY2gpKX1mdW5jdGlvbiBQZSh0LGUscil7aWYociYmIm9iamVjdCI9PXR5cGVvZiByKXJldHVybnthbmNob3I6RmUodCxlLHIuYW5jaG9yKSxoZWFkOkZlKHQsZSxyLmhlYWQpfTtpZigic3RhcnQiPT1yKXJldHVybnthbmNob3I6ZS5mcm9tLGhlYWQ6ZS5mcm9tfTt2YXIgbj1sbyhlKTtpZigiYXJvdW5kIj09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOm59O2lmKCJlbmQiPT1yKXJldHVybnthbmNob3I6bixoZWFkOm59O3ZhciBpPWZ1bmN0aW9uKHQpe2lmKCRlKHQsZS5mcm9tKSlyZXR1cm4gdDtpZighJGUoZS50byx0KSlyZXR1cm4gbjt2YXIgcj10LmxpbmUrZS50ZXh0Lmxlbmd0aC0oZS50by5saW5lLWUuZnJvbS5saW5lKS0xLGk9dC5jaDtyZXR1cm4gdC5saW5lPT1lLnRvLmxpbmUmJihpKz1uLmNoLWUudG8uY2gpLFllKHIsaSl9O3JldHVybnthbmNob3I6aSh0LnNlbC5hbmNob3IpLGhlYWQ6aSh0LnNlbC5oZWFkKX19ZnVuY3Rpb24gUmUodCxlLHIpe3ZhciBuPXtjYW5jZWxlZDohMSxmcm9tOmUuZnJvbSx0bzplLnRvLHRleHQ6ZS50ZXh0LG9yaWdpbjplLm9yaWdpbixjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGVkPSEwfX07cmV0dXJuIHImJihuLnVwZGF0ZT1mdW5jdGlvbihlLHIsbixpKXtlJiYodGhpcy5mcm9tPVFlKHQsZSkpLHImJih0aGlzLnRvPVFlKHQscikpLG4mJih0aGlzLnRleHQ9biksdm9pZCAwIT09aSYmKHRoaXMub3JpZ2luPWkpfSksS24odCwiYmVmb3JlQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZUNoYW5nZSIsdC5jbSxuKSxuLmNhbmNlbGVkP251bGw6e2Zyb206bi5mcm9tLHRvOm4udG8sdGV4dDpuLnRleHQsb3JpZ2luOm4ub3JpZ2lufX1mdW5jdGlvbiBCZSh0LGUscixuKXtpZih0LmNtKXtpZighdC5jbS5jdXJPcClyZXR1cm4gbGUodC5jbSxCZSkodCxlLHIsbik7aWYodC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXJldHVybn1pZighKFluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSl8fChlPVJlKHQsZSwhMCkpKXt2YXIgaT1xaSYmIW4mJkZyKHQsZS5mcm9tLGUudG8pO2lmKGkpe2Zvcih2YXIgbz1pLmxlbmd0aC0xO28+PTE7LS1vKUdlKHQse2Zyb206aVtvXS5mcm9tLHRvOmlbb10udG8sdGV4dDpbIiJdfSk7aS5sZW5ndGgmJkdlKHQse2Zyb206aVswXS5mcm9tLHRvOmlbMF0udG8sdGV4dDplLnRleHR9LHIpfWVsc2UgR2UodCxlLHIpfX1mdW5jdGlvbiBHZSh0LGUscil7aWYoMSE9ZS50ZXh0Lmxlbmd0aHx8IiIhPWUudGV4dFswXXx8IWplKGUuZnJvbSxlLnRvKSl7dmFyIG49UGUodCxlLHIpO01uKHQsZSxuLHQuY20/dC5jbS5jdXJPcC5pZDowLzApLFVlKHQsZSxuLHpyKHQsZSkpO3ZhciBpPVtdO2RuKHQsZnVuY3Rpb24odCxyKXtyfHwtMSE9dGkoaSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LGUpLGkucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LGUsbnVsbCx6cih0LGUpKX0pfX1mdW5jdGlvbiBWZSh0LGUpe2lmKCF0LmNtfHwhdC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXt2YXIgcj10Lmhpc3Rvcnksbj0oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkucG9wKCk7aWYobil7dmFyIGk9e2NoYW5nZXM6W10sYW5jaG9yQmVmb3JlOm4uYW5jaG9yQWZ0ZXIsaGVhZEJlZm9yZTpuLmhlYWRBZnRlcixhbmNob3JBZnRlcjpuLmFuY2hvckJlZm9yZSxoZWFkQWZ0ZXI6bi5oZWFkQmVmb3JlLGdlbmVyYXRpb246ci5nZW5lcmF0aW9ufTsoInVuZG8iPT1lP3IudW5kb25lOnIuZG9uZSkucHVzaChpKSxyLmdlbmVyYXRpb249bi5nZW5lcmF0aW9ufHwrK3IubWF4R2VuZXJhdGlvbjtmb3IodmFyIG89WW4odCwiYmVmb3JlQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZUNoYW5nZSIpLGw9bi5jaGFuZ2VzLmxlbmd0aC0xO2w+PTA7LS1sKXt2YXIgcz1uLmNoYW5nZXNbbF07aWYocy5vcmlnaW49ZSxvJiYhUmUodCxzLCExKSlyZXR1cm4oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkubGVuZ3RoPTAsdm9pZCAwO2kuY2hhbmdlcy5wdXNoKFNuKHQscykpO3ZhciBhPWw/UGUodCxzLG51bGwpOnthbmNob3I6bi5hbmNob3JCZWZvcmUsaGVhZDpuLmhlYWRCZWZvcmV9O1VlKHQscyxhLElyKHQscykpO3ZhciB1PVtdO2RuKHQsZnVuY3Rpb24odCxlKXtlfHwtMSE9dGkodSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LHMpLHUucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LHMsbnVsbCxJcih0LHMpKX0pfX19fWZ1bmN0aW9uIEtlKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gWWUodC5saW5lK2UsdC5jaCl9dC5maXJzdCs9ZSx0LmNtJiZ1ZSh0LmNtLHQuZmlyc3QsdC5maXJzdCxlKSx0LnNlbC5oZWFkPXIodC5zZWwuaGVhZCksdC5zZWwuYW5jaG9yPXIodC5zZWwuYW5jaG9yKSx0LnNlbC5mcm9tPXIodC5zZWwuZnJvbSksdC5zZWwudG89cih0LnNlbC50byl9ZnVuY3Rpb24gVWUodCxlLHIsbil7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVWUpKHQsZSxyLG4pO2lmKGUudG8ubGluZTx0LmZpcnN0KXJldHVybiBLZSh0LGUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKSksdm9pZCAwO2lmKCEoZS5mcm9tLmxpbmU+dC5sYXN0TGluZSgpKSl7aWYoZS5mcm9tLmxpbmU8dC5maXJzdCl7dmFyIGk9ZS50ZXh0Lmxlbmd0aC0xLSh0LmZpcnN0LWUuZnJvbS5saW5lKTtLZSh0LGkpLGU9e2Zyb206WWUodC5maXJzdCwwKSx0bzpZZShlLnRvLmxpbmUraSxlLnRvLmNoKSx0ZXh0OltRbihlLnRleHQpXSxvcmlnaW46ZS5vcmlnaW59fXZhciBvPXQubGFzdExpbmUoKTtlLnRvLmxpbmU+byYmKGU9e2Zyb206ZS5mcm9tLHRvOlllKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCksdGV4dDpbZS50ZXh0WzBdXSxvcmlnaW46ZS5vcmlnaW59KSxlLnJlbW92ZWQ9bW4odCxlLmZyb20sZS50bykscnx8KHI9UGUodCxlLG51bGwpKSx0LmNtP1hlKHQuY20sZSxuLHIpOmNuKHQsZSxuLHIpfX1mdW5jdGlvbiBYZSh0LGUscixuKXt2YXIgbz10LmRvYyxsPXQuZGlzcGxheSxzPWUuZnJvbSxhPWUudG8sdT0hMSxmPXMubGluZTt0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoZj1ibihHcihvLGduKG8scy5saW5lKSkpLG8uaXRlcihmLGEubGluZSsxLGZ1bmN0aW9uKHQpe3JldHVybiB0PT1sLm1heExpbmU/KHU9ITAsITApOnZvaWQgMH0pKSwkZShvLnNlbC5oZWFkLGUuZnJvbSl8fCRlKGUudG8sby5zZWwuaGVhZCl8fCh0LmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxjbihvLGUscixuLGkodCkpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fChvLml0ZXIoZixzLmxpbmUrZS50ZXh0Lmxlbmd0aCxmdW5jdGlvbih0KXt2YXIgZT1jKG8sdCk7ZT5sLm1heExpbmVMZW5ndGgmJihsLm1heExpbmU9dCxsLm1heExpbmVMZW5ndGg9ZSxsLm1heExpbmVDaGFuZ2VkPSEwLHU9ITEpfSksdSYmKHQuY3VyT3AudXBkYXRlTWF4TGluZT0hMCkpLG8uZnJvbnRpZXI9TWF0aC5taW4oby5mcm9udGllcixzLmxpbmUpLFcodCw0MDApO3ZhciBoPWUudGV4dC5sZW5ndGgtKGEubGluZS1zLmxpbmUpLTE7aWYodWUodCxzLmxpbmUsYS5saW5lKzEsaCksWW4odCwiY2hhbmdlIikpe3ZhciBkPXtmcm9tOnMsdG86YSx0ZXh0OmUudGV4dCxyZW1vdmVkOmUucmVtb3ZlZCxvcmlnaW46ZS5vcmlnaW59O2lmKHQuY3VyT3AudGV4dENoYW5nZWQpe2Zvcih2YXIgcD10LmN1ck9wLnRleHRDaGFuZ2VkO3AubmV4dDtwPXAubmV4dCk7cC5uZXh0PWR9ZWxzZSB0LmN1ck9wLnRleHRDaGFuZ2VkPWR9fWZ1bmN0aW9uIF9lKHQsZSxyLG4saSl7aWYobnx8KG49ciksJGUobixyKSl7dmFyIG89bjtuPXIscj1vfSJzdHJpbmciPT10eXBlb2YgZSYmKGU9em8oZSkpLEJlKHQse2Zyb206cix0bzpuLHRleHQ6ZSxvcmlnaW46aX0sbnVsbCl9ZnVuY3Rpb24gWWUodCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFllPyh0aGlzLmxpbmU9dCx0aGlzLmNoPWUsdm9pZCAwKTpuZXcgWWUodCxlKX1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiB0LmxpbmU9PWUubGluZSYmdC5jaD09ZS5jaH1mdW5jdGlvbiAkZSh0LGUpe3JldHVybiB0LmxpbmU8ZS5saW5lfHx0LmxpbmU9PWUubGluZSYmdC5jaDxlLmNofWZ1bmN0aW9uIFplKHQpe3JldHVybiBZZSh0LmxpbmUsdC5jaCl9ZnVuY3Rpb24gcWUodCxlKXtyZXR1cm4gTWF0aC5tYXgodC5maXJzdCxNYXRoLm1pbihlLHQuZmlyc3QrdC5zaXplLTEpKX1mdW5jdGlvbiBRZSh0LGUpe2lmKGUubGluZTx0LmZpcnN0KXJldHVybiBZZSh0LmZpcnN0LDApO3ZhciByPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGUubGluZT5yP1llKHIsZ24odCxyKS50ZXh0Lmxlbmd0aCk6SmUoZSxnbih0LGUubGluZSkudGV4dC5sZW5ndGgpfWZ1bmN0aW9uIEplKHQsZSl7dmFyIHI9dC5jaDtyZXR1cm4gbnVsbD09cnx8cj5lP1llKHQubGluZSxlKTowPnI/WWUodC5saW5lLDApOnR9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gZT49dC5maXJzdCYmZTx0LmZpcnN0K3Quc2l6ZX1mdW5jdGlvbiBlcih0LGUscixuKXtpZih0LnNlbC5zaGlmdHx8dC5zZWwuZXh0ZW5kKXt2YXIgaT10LnNlbC5hbmNob3I7aWYocil7dmFyIG89JGUoZSxpKTtvIT0kZShyLGkpPyhpPWUsZT1yKTpvIT0kZShlLHIpJiYoZT1yKX1ucih0LGksZSxuKX1lbHNlIG5yKHQsZSxyfHxlLG4pO3QuY20mJih0LmNtLmN1ck9wLnVzZXJTZWxDaGFuZ2U9ITApfWZ1bmN0aW9uIHJyKHQsZSxyKXt2YXIgbj17YW5jaG9yOmUsaGVhZDpyfTtyZXR1cm4gS24odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdC5jbSxuKSxuLmFuY2hvcj1RZSh0LG4uYW5jaG9yKSxuLmhlYWQ9UWUodCxuLmhlYWQpLG59ZnVuY3Rpb24gbnIodCxlLHIsbixpKXtpZighaSYmWW4odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpKXt2YXIgbz1ycih0LGUscik7cj1vLmhlYWQsZT1vLmFuY2hvcn12YXIgbD10LnNlbDtpZihsLmdvYWxDb2x1bW49bnVsbCxudWxsPT1uJiYobj0kZShyLGwuaGVhZCk/LTE6MSksKGl8fCFqZShlLGwuYW5jaG9yKSkmJihlPW9yKHQsZSxuLCJwdXNoIiE9aSkpLChpfHwhamUocixsLmhlYWQpKSYmKHI9b3IodCxyLG4sInB1c2giIT1pKSksIWplKGwuYW5jaG9yLGUpfHwhamUobC5oZWFkLHIpKXtsLmFuY2hvcj1lLGwuaGVhZD1yO3ZhciBzPSRlKHIsZSk7bC5mcm9tPXM/cjplLGwudG89cz9lOnIsdC5jbSYmKHQuY20uY3VyT3AudXBkYXRlSW5wdXQ9dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPXQuY20uY3VyT3AuY3Vyc29yQWN0aXZpdHk9ITApLFVuKHQsImN1cnNvckFjdGl2aXR5Iix0KX19ZnVuY3Rpb24gaXIodCl7bnIodC5kb2MsdC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvLG51bGwsInB1c2giKX1mdW5jdGlvbiBvcih0LGUscixuKXt2YXIgaT0hMSxvPWUsbD1yfHwxO3QuY2FudEVkaXQ9ITE7dDpmb3IoOzspe3ZhciBzPWduKHQsby5saW5lKTtpZihzLm1hcmtlZFNwYW5zKWZvcih2YXIgYT0wO2E8cy5tYXJrZWRTcGFucy5sZW5ndGg7KythKXt2YXIgdT1zLm1hcmtlZFNwYW5zW2FdLGM9dS5tYXJrZXI7aWYoKG51bGw9PXUuZnJvbXx8KGMuaW5jbHVzaXZlTGVmdD91LmZyb208PW8uY2g6dS5mcm9tPG8uY2gpKSYmKG51bGw9PXUudG98fChjLmluY2x1c2l2ZVJpZ2h0P3UudG8+PW8uY2g6dS50bz5vLmNoKSkpe2lmKG4mJihLbihjLCJiZWZvcmVDdXJzb3JFbnRlciIpLGMuZXhwbGljaXRseUNsZWFyZWQpKXtpZihzLm1hcmtlZFNwYW5zKXstLWE7Y29udGludWV9YnJlYWt9aWYoIWMuYXRvbWljKWNvbnRpbnVlO3ZhciBmPWMuZmluZCgpWzA+bD8iZnJvbSI6InRvIl07aWYoamUoZixvKSYmKGYuY2grPWwsZi5jaDwwP2Y9Zi5saW5lPnQuZmlyc3Q/UWUodCxZZShmLmxpbmUtMSkpOm51bGw6Zi5jaD5zLnRleHQubGVuZ3RoJiYoZj1mLmxpbmU8dC5maXJzdCt0LnNpemUtMT9ZZShmLmxpbmUrMSwwKTpudWxsKSwhZikpe2lmKGkpcmV0dXJuIG4/KHQuY2FudEVkaXQ9ITAsWWUodC5maXJzdCwwKSk6b3IodCxlLHIsITApO2k9ITAsZj1lLGw9LWx9bz1mO2NvbnRpbnVlIHR9fXJldHVybiBvfX1mdW5jdGlvbiBscih0KXt2YXIgZT1zcih0LHQuZG9jLnNlbC5oZWFkLG51bGwsdC5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbik7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgcj10LmRpc3BsYXksbj1maShyLnNpemVyKSxpPW51bGw7aWYoZS50b3Arbi50b3A8MD9pPSEwOmUuYm90dG9tK24udG9wPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoaT0hMSksbnVsbCE9aSYmIUJpKXt2YXIgbz0ibm9uZSI9PXIuY3Vyc29yLnN0eWxlLmRpc3BsYXk7byYmKHIuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5jdXJzb3Iuc3R5bGUubGVmdD1lLmxlZnQrInB4IixyLmN1cnNvci5zdHlsZS50b3A9ZS50b3Atci52aWV3T2Zmc2V0KyJweCIpLHIuY3Vyc29yLnNjcm9sbEludG9WaWV3KGkpLG8mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIil9fX1mdW5jdGlvbiBzcih0LGUscixuKXtmb3IobnVsbD09biYmKG49MCk7Oyl7dmFyIGk9ITEsbz1RKHQsZSksbD1yJiZyIT1lP1EodCxyKTpvLHM9dXIodCxNYXRoLm1pbihvLmxlZnQsbC5sZWZ0KSxNYXRoLm1pbihvLnRvcCxsLnRvcCktbixNYXRoLm1heChvLmxlZnQsbC5sZWZ0KSxNYXRoLm1heChvLmJvdHRvbSxsLmJvdHRvbSkrbiksYT10LmRvYy5zY3JvbGxUb3AsdT10LmRvYy5zY3JvbGxMZWZ0O2lmKG51bGwhPXMuc2Nyb2xsVG9wJiYoU2UodCxzLnNjcm9sbFRvcCksTWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWEpPjEmJihpPSEwKSksbnVsbCE9cy5zY3JvbGxMZWZ0JiYoTWUodCxzLnNjcm9sbExlZnQpLE1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtdSk+MSYmKGk9ITApKSwhaSlyZXR1cm4gb319ZnVuY3Rpb24gYXIodCxlLHIsbixpKXt2YXIgbz11cih0LGUscixuLGkpO251bGwhPW8uc2Nyb2xsVG9wJiZTZSh0LG8uc2Nyb2xsVG9wKSxudWxsIT1vLnNjcm9sbExlZnQmJk1lKHQsby5zY3JvbGxMZWZ0KX1mdW5jdGlvbiB1cih0LGUscixuLGkpe3ZhciBvPXQuZGlzcGxheSxsPXJlKHQuZGlzcGxheSk7MD5yJiYocj0wKTt2YXIgcz1vLnNjcm9sbGVyLmNsaWVudEhlaWdodC1UbyxhPW8uc2Nyb2xsZXIuc2Nyb2xsVG9wLHU9e30sYz10LmRvYy5oZWlnaHQrRihvKSxmPWw+cixoPWk+Yy1sO2lmKGE+cil1LnNjcm9sbFRvcD1mPzA6cjtlbHNlIGlmKGk+YStzKXt2YXIgZD1NYXRoLm1pbihyLChoP2M6aSktcyk7ZCE9YSYmKHUuc2Nyb2xsVG9wPWQpfXZhciBwPW8uc2Nyb2xsZXIuY2xpZW50V2lkdGgtVG8sZz1vLnNjcm9sbGVyLnNjcm9sbExlZnQ7ZSs9by5ndXR0ZXJzLm9mZnNldFdpZHRoLG4rPW8uZ3V0dGVycy5vZmZzZXRXaWR0aDt2YXIgbT1vLmd1dHRlcnMub2Zmc2V0V2lkdGgsdj1tKzEwPmU7cmV0dXJuIGcrbT5lfHx2Pyh2JiYoZT0wKSx1LnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxlLTEwLW0pKTpuPnArZy0zJiYodS5zY3JvbGxMZWZ0PW4rMTAtcCksdX1mdW5jdGlvbiBjcih0LGUscil7dC5jdXJPcC51cGRhdGVTY3JvbGxQb3M9e3Njcm9sbExlZnQ6bnVsbD09ZT90LmRvYy5zY3JvbGxMZWZ0OmUsc2Nyb2xsVG9wOm51bGw9PXI/dC5kb2Muc2Nyb2xsVG9wOnJ9fWZ1bmN0aW9uIGZyKHQsZSxyKXt2YXIgbj10LmN1ck9wLnVwZGF0ZVNjcm9sbFBvc3x8KHQuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0OnQuZG9jLnNjcm9sbExlZnQsc2Nyb2xsVG9wOnQuZG9jLnNjcm9sbFRvcH0pLGk9dC5kaXNwbGF5LnNjcm9sbGVyO24uc2Nyb2xsVG9wPU1hdGgubWF4KDAsTWF0aC5taW4oaS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQsbi5zY3JvbGxUb3ArcikpLG4uc2Nyb2xsTGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aCxuLnNjcm9sbExlZnQrZSkpfWZ1bmN0aW9uIGhyKHQsZSxyLG4pe3ZhciBpPXQuZG9jO2lmKG51bGw9PXImJihyPSJhZGQiKSwic21hcnQiPT1yKWlmKHQuZG9jLm1vZGUuaW5kZW50KXZhciBvPXoodCxlKTtlbHNlIHI9InByZXYiO3ZhciBsLHM9dC5vcHRpb25zLnRhYlNpemUsYT1nbihpLGUpLHU9Wm4oYS50ZXh0LG51bGwscyksYz1hLnRleHQubWF0Y2goL15ccyovKVswXTtpZigic21hcnQiPT1yJiYobD10LmRvYy5tb2RlLmluZGVudChvLGEudGV4dC5zbGljZShjLmxlbmd0aCksYS50ZXh0KSxsPT1Bbykpe2lmKCFuKXJldHVybjtyPSJwcmV2In0icHJldiI9PXI/bD1lPmkuZmlyc3Q/Wm4oZ24oaSxlLTEpLnRleHQsbnVsbCxzKTowOiJhZGQiPT1yP2w9dSt0Lm9wdGlvbnMuaW5kZW50VW5pdDoic3VidHJhY3QiPT1yP2w9dS10Lm9wdGlvbnMuaW5kZW50VW5pdDoibnVtYmVyIj09dHlwZW9mIHImJihsPXUrciksbD1NYXRoLm1heCgwLGwpO3ZhciBmPSIiLGg9MDtpZih0Lm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpZm9yKHZhciBkPU1hdGguZmxvb3IobC9zKTtkOy0tZCloKz1zLGYrPSIJIjtsPmgmJihmKz1xbihsLWgpKSxmIT1jP19lKHQuZG9jLGYsWWUoZSwwKSxZZShlLGMubGVuZ3RoKSwiK2lucHV0Iik6aS5zZWwuaGVhZC5saW5lPT1lJiZpLnNlbC5oZWFkLmNoPGMubGVuZ3RoJiZucihpLFllKGUsYy5sZW5ndGgpLFllKGUsYy5sZW5ndGgpLDEpLGEuc3RhdGVBZnRlcj1udWxsfWZ1bmN0aW9uIGRyKHQsZSxyKXt2YXIgbj1lLGk9ZSxvPXQuZG9jO3JldHVybiJudW1iZXIiPT10eXBlb2YgZT9pPWduKG8scWUobyxlKSk6bj1ibihlKSxudWxsPT1uP251bGw6cihpLG4pPyh1ZSh0LG4sbisxKSxpKTpudWxsfWZ1bmN0aW9uIHByKHQsZSxyLG4saSl7ZnVuY3Rpb24gbygpe3ZhciBlPXMrcjtyZXR1cm4gZTx0LmZpcnN0fHxlPj10LmZpcnN0K3Quc2l6ZT9mPSExOihzPWUsYz1nbih0LGUpKX1mdW5jdGlvbiBsKHQpe3ZhciBlPShpP1NpOk1pKShjLGEsciwhMCk7aWYobnVsbD09ZSl7aWYodHx8IW8oKSlyZXR1cm4gZj0hMTthPWk/KDA+cj9iaTp5aSkoYyk6MD5yP2MudGV4dC5sZW5ndGg6MH1lbHNlIGE9ZTtyZXR1cm4hMH12YXIgcz1lLmxpbmUsYT1lLmNoLHU9cixjPWduKHQscyksZj0hMDtpZigiY2hhciI9PW4pbCgpO2Vsc2UgaWYoImNvbHVtbiI9PW4pbCghMCk7ZWxzZSBpZigid29yZCI9PW58fCJncm91cCI9PW4pZm9yKHZhciBoPW51bGwsZD0iZ3JvdXAiPT1uLHA9ITA7ISgwPnIpfHxsKCFwKTtwPSExKXt2YXIgZz1jLnRleHQuY2hhckF0KGEpfHwiXG4iLG09b2koZyk/InciOmQ/L1xzLy50ZXN0KGcpP251bGw6InAiOm51bGw7aWYoaCYmaCE9bSl7MD5yJiYocj0xLGwoKSk7YnJlYWt9aWYobSYmKGg9bSkscj4wJiYhbCghcCkpYnJlYWt9dmFyIHY9b3IodCxZZShzLGEpLHUsITApO3JldHVybiBmfHwodi5oaXRTaWRlPSEwKSx2fWZ1bmN0aW9uIGdyKHQsZSxyLG4pe3ZhciBpLG89dC5kb2MsbD1lLmxlZnQ7aWYoInBhZ2UiPT1uKXt2YXIgcz1NYXRoLm1pbih0LmRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsd2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTtpPWUudG9wK3IqKHMtKDA+cj8xLjU6LjUpKnJlKHQuZGlzcGxheSkpfWVsc2UibGluZSI9PW4mJihpPXI+MD9lLmJvdHRvbSszOmUudG9wLTMpO2Zvcig7Oyl7dmFyIGE9dGUodCxsLGkpO2lmKCFhLm91dHNpZGUpYnJlYWs7aWYoMD5yPzA+PWk6aT49by5oZWlnaHQpe2EuaGl0U2lkZT0hMDticmVha31pKz01KnJ9cmV0dXJuIGF9ZnVuY3Rpb24gbXIodCxlKXt2YXIgcj1lLmNoLG49ZS5jaDtpZih0KXsoZS54UmVsPDB8fG49PXQubGVuZ3RoKSYmcj8tLXI6KytuO2Zvcih2YXIgaT10LmNoYXJBdChyKSxvPW9pKGkpP29pOi9ccy8udGVzdChpKT9mdW5jdGlvbih0KXtyZXR1cm4vXHMvLnRlc3QodCl9OmZ1bmN0aW9uKHQpe3JldHVybiEvXHMvLnRlc3QodCkmJiFvaSh0KX07cj4wJiZvKHQuY2hhckF0KHItMSkpOyktLXI7Zm9yKDtuPHQubGVuZ3RoJiZvKHQuY2hhckF0KG4pKTspKytufXJldHVybntmcm9tOlllKGUubGluZSxyKSx0bzpZZShlLmxpbmUsbil9fWZ1bmN0aW9uIHZyKHQsZSl7ZXIodC5kb2MsWWUoZSwwKSxRZSh0LmRvYyxZZShlKzEsMCkpKX1mdW5jdGlvbiB5cihlLHIsbixpKXt0LmRlZmF1bHRzW2VdPXIsbiYmKHNvW2VdPWk/ZnVuY3Rpb24odCxlLHIpe3IhPXVvJiZuKHQsZSxyKX06bil9ZnVuY3Rpb24gYnIodCxlKXtpZihlPT09ITApcmV0dXJuIGU7aWYodC5jb3B5U3RhdGUpcmV0dXJuIHQuY29weVN0YXRlKGUpO3ZhciByPXt9O2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dO2kgaW5zdGFuY2VvZiBBcnJheSYmKGk9aS5jb25jYXQoW10pKSxyW25dPWl9cmV0dXJuIHJ9ZnVuY3Rpb24geHIodCxlLHIpe3JldHVybiB0LnN0YXJ0U3RhdGU/dC5zdGFydFN0YXRlKGUscik6ITB9ZnVuY3Rpb24gQ3IodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3ZvW3RdOnR9ZnVuY3Rpb24gd3IodCxlLHIpe2Z1bmN0aW9uIG4oZSl7ZT1DcihlKTt2YXIgaT1lW3RdO2lmKGk9PT0hMSlyZXR1cm4ic3RvcCI7aWYobnVsbCE9aSYmcihpKSlyZXR1cm4hMDtpZihlLm5vZmFsbHRocm91Z2gpcmV0dXJuInN0b3AiO3ZhciBvPWUuZmFsbHRocm91Z2g7aWYobnVsbD09bylyZXR1cm4hMTtpZigiW29iamVjdCBBcnJheV0iIT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpcmV0dXJuIG4obyk7Zm9yKHZhciBsPTAscz1vLmxlbmd0aDtzPmw7KytsKXt2YXIgYT1uKG9bbF0pO2lmKGEpcmV0dXJuIGF9cmV0dXJuITF9Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBvPW4oZVtpXSk7aWYobylyZXR1cm4ic3RvcCIhPW99fWZ1bmN0aW9uIExyKHQpe3ZhciBlPVBvW3Qua2V5Q29kZV07cmV0dXJuIkN0cmwiPT1lfHwiQWx0Ij09ZXx8IlNoaWZ0Ij09ZXx8Ik1vZCI9PWV9ZnVuY3Rpb24ga3IodCxlKXtpZih6aSYmMzQ9PXQua2V5Q29kZSYmdFsiY2hhciJdKXJldHVybiExO3ZhciByPVBvW3Qua2V5Q29kZV07cmV0dXJuIG51bGw9PXJ8fHQuYWx0R3JhcGhLZXk/ITE6KHQuYWx0S2V5JiYocj0iQWx0LSIrciksKCRpP3QubWV0YUtleTp0LmN0cmxLZXkpJiYocj0iQ3RybC0iK3IpLCgkaT90LmN0cmxLZXk6dC5tZXRhS2V5KSYmKHI9IkNtZC0iK3IpLCFlJiZ0LnNoaWZ0S2V5JiYocj0iU2hpZnQtIityKSxyKX1mdW5jdGlvbiBTcih0LGUpe3RoaXMucG9zPXRoaXMuc3RhcnQ9MCx0aGlzLnN0cmluZz10LHRoaXMudGFiU2l6ZT1lfHw4LHRoaXMubGFzdENvbHVtblBvcz10aGlzLmxhc3RDb2x1bW5WYWx1ZT0wfWZ1bmN0aW9uIE1yKHQsZSl7dGhpcy5saW5lcz1bXSx0aGlzLnR5cGU9ZSx0aGlzLmRvYz10fWZ1bmN0aW9uIFRyKHQsZSxyLG4saSl7aWYobiYmbi5zaGFyZWQpcmV0dXJuIEhyKHQsZSxyLG4saSk7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVHIpKHQsZSxyLG4saSk7dmFyIG89bmV3IE1yKHQsaSk7aWYoJGUocixlKXx8amUoZSxyKSYmInJhbmdlIj09aSYmKCFuLmluY2x1c2l2ZUxlZnR8fCFuLmluY2x1c2l2ZVJpZ2h0KSlyZXR1cm4gbztuJiZyaShuLG8pLG8ucmVwbGFjZWRXaXRoJiYoby5jb2xsYXBzZWQ9ITAsby5yZXBsYWNlZFdpdGg9c2koInNwYW4iLFtvLnJlcGxhY2VkV2l0aF0sIkNvZGVNaXJyb3Itd2lkZ2V0Iiksbi5oYW5kbGVNb3VzZUV2ZW50c3x8KG8ucmVwbGFjZWRXaXRoLmlnbm9yZUV2ZW50cz0hMCkpLG8uY29sbGFwc2VkJiYoUWk9ITApLG8uYWRkVG9IaXN0b3J5JiZNbih0LHtmcm9tOmUsdG86cixvcmlnaW46Im1hcmtUZXh0In0se2hlYWQ6dC5zZWwuaGVhZCxhbmNob3I6dC5zZWwuYW5jaG9yfSwwLzApO3ZhciBsLHMsYSx1PWUubGluZSxjPTAsZj10LmNtO2lmKHQuaXRlcih1LHIubGluZSsxLGZ1bmN0aW9uKG4pe2YmJm8uY29sbGFwc2VkJiYhZi5vcHRpb25zLmxpbmVXcmFwcGluZyYmR3IodCxuKT09Zi5kaXNwbGF5Lm1heExpbmUmJihhPSEwKTt2YXIgaT17ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOm99O2MrPW4udGV4dC5sZW5ndGgsdT09ZS5saW5lJiYoaS5mcm9tPWUuY2gsYy09ZS5jaCksdT09ci5saW5lJiYoaS50bz1yLmNoLGMtPW4udGV4dC5sZW5ndGgtci5jaCksby5jb2xsYXBzZWQmJih1PT1yLmxpbmUmJihzPVByKG4sci5jaCkpLHU9PWUubGluZT9sPVByKG4sZS5jaCk6eW4obiwwKSksV3IobixpKSwrK3V9KSxvLmNvbGxhcHNlZCYmdC5pdGVyKGUubGluZSxyLmxpbmUrMSxmdW5jdGlvbihlKXtWcih0LGUpJiZ5bihlLDApfSksby5jbGVhck9uRW50ZXImJkduKG8sImJlZm9yZUN1cnNvckVudGVyIixmdW5jdGlvbigpe28uY2xlYXIoKX0pLG8ucmVhZE9ubHkmJihxaT0hMCwodC5oaXN0b3J5LmRvbmUubGVuZ3RofHx0Lmhpc3RvcnkudW5kb25lLmxlbmd0aCkmJnQuY2xlYXJIaXN0b3J5KCkpLG8uY29sbGFwc2VkKXtpZihsIT1zKXRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7by5zaXplPWMsby5hdG9taWM9ITB9cmV0dXJuIGYmJihhJiYoZi5jdXJPcC51cGRhdGVNYXhMaW5lPSEwKSwoby5jbGFzc05hbWV8fG8udGl0bGV8fG8uc3RhcnRTdHlsZXx8by5lbmRTdHlsZXx8by5jb2xsYXBzZWQpJiZ1ZShmLGUubGluZSxyLmxpbmUrMSksby5hdG9taWMmJmlyKGYpKSxvfWZ1bmN0aW9uIEFyKHQsZSl7dGhpcy5tYXJrZXJzPXQsdGhpcy5wcmltYXJ5PWU7Zm9yKHZhciByPTAsbj10aGlzO3I8dC5sZW5ndGg7KytyKXRbcl0ucGFyZW50PXRoaXMsR24odFtyXSwiY2xlYXIiLGZ1bmN0aW9uKCl7bi5jbGVhcigpfSl9ZnVuY3Rpb24gSHIodCxlLHIsbixpKXtuPXJpKG4pLG4uc2hhcmVkPSExO3ZhciBvPVtUcih0LGUscixuLGkpXSxsPW9bMF0scz1uLnJlcGxhY2VkV2l0aDtyZXR1cm4gZG4odCxmdW5jdGlvbih0KXtzJiYobi5yZXBsYWNlZFdpdGg9cy5jbG9uZU5vZGUoITApKSxvLnB1c2goVHIodCxRZSh0LGUpLFFlKHQsciksbixpKSk7Zm9yKHZhciBhPTA7YTx0LmxpbmtlZC5sZW5ndGg7KythKWlmKHQubGlua2VkW2FdLmlzUGFyZW50KXJldHVybjtsPVFuKG8pfSksbmV3IEFyKG8sbCl9ZnVuY3Rpb24gTnIodCxlKXtpZih0KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2lmKG4ubWFya2VyPT1lKXJldHVybiBufX1mdW5jdGlvbiBEcih0LGUpe2Zvcih2YXIgcixuPTA7bjx0Lmxlbmd0aDsrK24pdFtuXSE9ZSYmKHJ8fChyPVtdKSkucHVzaCh0W25dKTtyZXR1cm4gcn1mdW5jdGlvbiBXcih0LGUpe3QubWFya2VkU3BhbnM9dC5tYXJrZWRTcGFucz90Lm1hcmtlZFNwYW5zLmNvbmNhdChbZV0pOltlXSxlLm1hcmtlci5hdHRhY2hMaW5lKHQpfWZ1bmN0aW9uIE9yKHQsZSxyKXtpZih0KWZvcih2YXIgbixpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBvPXRbaV0sbD1vLm1hcmtlcixzPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpO2lmKHN8fChsLmluY2x1c2l2ZUxlZnQmJmwuaW5jbHVzaXZlUmlnaHR8fCJib29rbWFyayI9PWwudHlwZSkmJm8uZnJvbT09ZSYmKCFyfHwhby5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8udG98fChsLmluY2x1c2l2ZVJpZ2h0P28udG8+PWU6by50bz5lKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOm8uZnJvbSx0bzphP251bGw6by50byxtYXJrZXI6bH0pfX1yZXR1cm4gbn1mdW5jdGlvbiBFcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7aWYoc3x8ImJvb2ttYXJrIj09bC50eXBlJiZvLmZyb209PWUmJighcnx8by5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpOyhufHwobj1bXSkpLnB1c2goe2Zyb206YT9udWxsOm8uZnJvbS1lLHRvOm51bGw9PW8udG8/bnVsbDpvLnRvLWUsbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24genIodCxlKXt2YXIgcj10cih0LGUuZnJvbS5saW5lKSYmZ24odCxlLmZyb20ubGluZSkubWFya2VkU3BhbnMsbj10cih0LGUudG8ubGluZSkmJmduKHQsZS50by5saW5lKS5tYXJrZWRTcGFucztpZighciYmIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5mcm9tLmNoLG89ZS50by5jaCxsPWplKGUuZnJvbSxlLnRvKSxzPU9yKHIsaSxsKSxhPUVyKG4sbyxsKSx1PTE9PWUudGV4dC5sZW5ndGgsYz1RbihlLnRleHQpLmxlbmd0aCsodT9pOjApO2lmKHMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2Ype3ZhciBoPXNbZl07aWYobnVsbD09aC50byl7dmFyIGQ9TnIoYSxoLm1hcmtlcik7ZD91JiYoaC50bz1udWxsPT1kLnRvP251bGw6ZC50bytjKTpoLnRvPWl9fWlmKGEpZm9yKHZhciBmPTA7ZjxhLmxlbmd0aDsrK2Ype3ZhciBoPWFbZl07aWYobnVsbCE9aC50byYmKGgudG8rPWMpLG51bGw9PWguZnJvbSl7dmFyIGQ9TnIocyxoLm1hcmtlcik7ZHx8KGguZnJvbT1jLHUmJihzfHwocz1bXSkpLnB1c2goaCkpfWVsc2UgaC5mcm9tKz1jLHUmJihzfHwocz1bXSkpLnB1c2goaCl9aWYodSYmcyl7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbCE9c1tmXS5mcm9tJiZzW2ZdLmZyb209PXNbZl0udG8mJiJib29rbWFyayIhPXNbZl0ubWFya2VyLnR5cGUmJnMuc3BsaWNlKGYtLSwxKTtzLmxlbmd0aHx8KHM9bnVsbCl9dmFyIHA9W3NdO2lmKCF1KXt2YXIgZyxtPWUudGV4dC5sZW5ndGgtMjtpZihtPjAmJnMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbD09c1tmXS50byYmKGd8fChnPVtdKSkucHVzaCh7ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOnNbZl0ubWFya2VyfSk7Zm9yKHZhciBmPTA7bT5mOysrZilwLnB1c2goZyk7cC5wdXNoKGEpfXJldHVybiBwfWZ1bmN0aW9uIElyKHQsZSl7dmFyIHI9QW4odCxlKSxuPXpyKHQsZSk7aWYoIXIpcmV0dXJuIG47aWYoIW4pcmV0dXJuIHI7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBvPXJbaV0sbD1uW2ldO2lmKG8mJmwpdDpmb3IodmFyIHM9MDtzPGwubGVuZ3RoOysrcyl7Zm9yKHZhciBhPWxbc10sdT0wO3U8by5sZW5ndGg7Kyt1KWlmKG9bdV0ubWFya2VyPT1hLm1hcmtlciljb250aW51ZSB0O28ucHVzaChhKX1lbHNlIGwmJihyW2ldPWwpfXJldHVybiByfWZ1bmN0aW9uIEZyKHQsZSxyKXt2YXIgbj1udWxsO2lmKHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7aWYodC5tYXJrZWRTcGFucylmb3IodmFyIGU9MDtlPHQubWFya2VkU3BhbnMubGVuZ3RoOysrZSl7dmFyIHI9dC5tYXJrZWRTcGFuc1tlXS5tYXJrZXI7IXIucmVhZE9ubHl8fG4mJi0xIT10aShuLHIpfHwobnx8KG49W10pKS5wdXNoKHIpfX0pLCFuKXJldHVybiBudWxsO2Zvcih2YXIgaT1be2Zyb206ZSx0bzpyfV0sbz0wO288bi5sZW5ndGg7KytvKWZvcih2YXIgbD1uW29dLHM9bC5maW5kKCksYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgdT1pW2FdO2lmKCEkZSh1LnRvLHMuZnJvbSkmJiEkZShzLnRvLHUuZnJvbSkpe3ZhciBjPVthLDFdOygkZSh1LmZyb20scy5mcm9tKXx8IWwuaW5jbHVzaXZlTGVmdCYmamUodS5mcm9tLHMuZnJvbSkpJiZjLnB1c2goe2Zyb206dS5mcm9tLHRvOnMuZnJvbX0pLCgkZShzLnRvLHUudG8pfHwhbC5pbmNsdXNpdmVSaWdodCYmamUodS50byxzLnRvKSkmJmMucHVzaCh7ZnJvbTpzLnRvLHRvOnUudG99KSxpLnNwbGljZS5hcHBseShpLGMpLGErPWMubGVuZ3RoLTF9fXJldHVybiBpfWZ1bmN0aW9uIFByKHQsZSl7dmFyIHIsbj1RaSYmdC5tYXJrZWRTcGFucztpZihuKWZvcih2YXIgaSxvPTA7bzxuLmxlbmd0aDsrK28paT1uW29dLGkubWFya2VyLmNvbGxhcHNlZCYmKG51bGw9PWkuZnJvbXx8aS5mcm9tPGUpJiYobnVsbD09aS50b3x8aS50bz5lKSYmKCFyfHxyLndpZHRoPGkubWFya2VyLndpZHRoKSYmKHI9aS5tYXJrZXIpO3JldHVybiByfWZ1bmN0aW9uIFJyKHQpe3JldHVybiBQcih0LC0xKX1mdW5jdGlvbiBCcih0KXtyZXR1cm4gUHIodCx0LnRleHQubGVuZ3RoKzEpfWZ1bmN0aW9uIEdyKHQsZSl7Zm9yKHZhciByO3I9UnIoZSk7KWU9Z24odCxyLmZpbmQoKS5mcm9tLmxpbmUpO3JldHVybiBlfWZ1bmN0aW9uIFZyKHQsZSl7dmFyIHI9UWkmJmUubWFya2VkU3BhbnM7aWYocilmb3IodmFyIG4saT0wO2k8ci5sZW5ndGg7KytpKWlmKG49cltpXSxuLm1hcmtlci5jb2xsYXBzZWQpe2lmKG51bGw9PW4uZnJvbSlyZXR1cm4hMDtpZighbi5tYXJrZXIucmVwbGFjZWRXaXRoJiYwPT1uLmZyb20mJm4ubWFya2VyLmluY2x1c2l2ZUxlZnQmJktyKHQsZSxuKSlyZXR1cm4hMH19ZnVuY3Rpb24gS3IodCxlLHIpe2lmKG51bGw9PXIudG8pe3ZhciBuPXIubWFya2VyLmZpbmQoKS50byxpPWduKHQsbi5saW5lKTtyZXR1cm4gS3IodCxpLE5yKGkubWFya2VkU3BhbnMsci5tYXJrZXIpKX1pZihyLm1hcmtlci5pbmNsdXNpdmVSaWdodCYmci50bz09ZS50ZXh0Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG8sbD0wO2w8ZS5tYXJrZWRTcGFucy5sZW5ndGg7KytsKWlmKG89ZS5tYXJrZWRTcGFuc1tsXSxvLm1hcmtlci5jb2xsYXBzZWQmJiFvLm1hcmtlci5yZXBsYWNlZFdpdGgmJm8uZnJvbT09ci50byYmKG8ubWFya2VyLmluY2x1c2l2ZUxlZnR8fHIubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSYmS3IodCxlLG8pKXJldHVybiEwfWZ1bmN0aW9uIFVyKHQpe3ZhciBlPXQubWFya2VkU3BhbnM7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuZGV0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPW51bGx9fWZ1bmN0aW9uIFhyKHQsZSl7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuYXR0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPWV9fWZ1bmN0aW9uIF9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPSF0aGlzLmNtLmN1ck9wO2UmJmllKHRoaXMuY20pO3RyeXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2UmJm9lKHRoaXMuY20pfXJldHVybiByfX1mdW5jdGlvbiBZcih0KXtyZXR1cm4gbnVsbCE9dC5oZWlnaHQ/dC5oZWlnaHQ6KHQubm9kZS5wYXJlbnROb2RlJiYxPT10Lm5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZXx8dWkodC5jbS5kaXNwbGF5Lm1lYXN1cmUsc2koImRpdiIsW3Qubm9kZV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIikpLHQuaGVpZ2h0PXQubm9kZS5vZmZzZXRIZWlnaHQpfWZ1bmN0aW9uIGpyKHQsZSxyLG4pe3ZhciBpPW5ldyB5byh0LHIsbik7cmV0dXJuIGkubm9IU2Nyb2xsJiYodC5kaXNwbGF5LmFsaWduV2lkZ2V0cz0hMCksZHIodCxlLGZ1bmN0aW9uKGUpe3ZhciByPWUud2lkZ2V0c3x8KGUud2lkZ2V0cz1bXSk7aWYobnVsbD09aS5pbnNlcnRBdD9yLnB1c2goaSk6ci5zcGxpY2UoTWF0aC5taW4oci5sZW5ndGgtMSxNYXRoLm1heCgwLGkuaW5zZXJ0QXQpKSwwLGkpLGkubGluZT1lLCFWcih0LmRvYyxlKXx8aS5zaG93SWZIaWRkZW4pe3ZhciBuPUNuKHQsZSk8dC5kb2Muc2Nyb2xsVG9wO3luKGUsZS5oZWlnaHQrWXIoaSkpLG4mJmZyKHQsMCxpLmhlaWdodCl9cmV0dXJuITB9KSxpfWZ1bmN0aW9uICRyKHQsZSxyLG4pe3QudGV4dD1lLHQuc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpLG51bGwhPXQub3JkZXImJih0Lm9yZGVyPW51bGwpLFVyKHQpLFhyKHQscik7dmFyIGk9bj9uKHQpOjE7aSE9dC5oZWlnaHQmJnluKHQsaSl9ZnVuY3Rpb24gWnIodCl7dC5wYXJlbnQ9bnVsbCxVcih0KX1mdW5jdGlvbiBxcih0LGUscixuLGksbyl7dmFyIGw9ci5mbGF0dGVuU3BhbnM7bnVsbD09bCYmKGw9dC5vcHRpb25zLmZsYXR0ZW5TcGFucyk7dmFyIHMsYT0wLHU9bnVsbCxjPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3IoIiI9PWUmJnIuYmxhbmtMaW5lJiZyLmJsYW5rTGluZShuKTshYy5lb2woKTspYy5wb3M+dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aD8obD0hMSxvJiZ0bih0LGUsbixjLnBvcyksYy5wb3M9ZS5sZW5ndGgscz1udWxsKTpzPXIudG9rZW4oYyxuKSxsJiZ1PT1zfHwoYTxjLnN0YXJ0JiZpKGMuc3RhcnQsdSksYT1jLnN0YXJ0LHU9cyksYy5zdGFydD1jLnBvcztmb3IoO2E8Yy5wb3M7KXt2YXIgZj1NYXRoLm1pbihjLnBvcyxhKzVlNCk7aShmLHUpLGE9Zn19ZnVuY3Rpb24gUXIodCxlLHIsbil7dmFyIGk9W3Quc3RhdGUubW9kZUdlbl07cXIodCxlLnRleHQsdC5kb2MubW9kZSxyLGZ1bmN0aW9uKHQsZSl7aS5wdXNoKHQsZSl9LG4pO2Zvcih2YXIgbz0wO288dC5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7KytvKXt2YXIgbD10LnN0YXRlLm92ZXJsYXlzW29dLHM9MSxhPTA7cXIodCxlLnRleHQsbC5tb2RlLCEwLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXM7dD5hOyl7dmFyIG49aVtzXTtuPnQmJmkuc3BsaWNlKHMsMSx0LGlbcysxXSxuKSxzKz0yLGE9TWF0aC5taW4odCxuKX1pZihlKWlmKGwub3BhcXVlKWkuc3BsaWNlKHIscy1yLHQsZSkscz1yKzI7ZWxzZSBmb3IoO3M+cjtyKz0yKXt2YXIgbz1pW3IrMV07aVtyKzFdPW8/bysiICIrZTplfX0pfXJldHVybiBpfWZ1bmN0aW9uIEpyKHQsZSl7cmV0dXJuIGUuc3R5bGVzJiZlLnN0eWxlc1swXT09dC5zdGF0ZS5tb2RlR2VufHwoZS5zdHlsZXM9UXIodCxlLGUuc3RhdGVBZnRlcj16KHQsYm4oZSkpKSksZS5zdHlsZXN9ZnVuY3Rpb24gdG4odCxlLHIsbil7dmFyIGk9dC5kb2MubW9kZSxvPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3Ioby5zdGFydD1vLnBvcz1ufHwwLCIiPT1lJiZpLmJsYW5rTGluZSYmaS5ibGFua0xpbmUocik7IW8uZW9sKCkmJm8ucG9zPD10Lm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoOylpLnRva2VuKG8sciksby5zdGFydD1vLnBvc31mdW5jdGlvbiBlbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2Zvcig7Oyl7dmFyIHI9dC5tYXRjaCgvKD86XnxccylsaW5lLShiYWNrZ3JvdW5kLSk/KFxTKykvKTtpZighcilicmVhazt0PXQuc2xpY2UoMCxyLmluZGV4KSt0LnNsaWNlKHIuaW5kZXgrclswXS5sZW5ndGgpO3ZhciBuPXJbMV0/ImJnQ2xhc3MiOiJ0ZXh0Q2xhc3MiO251bGw9PWVbbl0/ZVtuXT1yWzJdOm5ldyBSZWdFeHAoIig/Ol58cykiK3JbMl0rIig/OiR8cykiKS50ZXN0KGVbbl0pfHwoZVtuXSs9IiAiK3JbMl0pfXJldHVybiB4b1t0XXx8KHhvW3RdPSJjbS0iK3QucmVwbGFjZSgvICsvZywiIGNtLSIpKX1mdW5jdGlvbiBybih0LGUscixuKXtmb3IodmFyIGksbz1lLGw9ITA7aT1ScihvKTspbz1nbih0LmRvYyxpLmZpbmQoKS5mcm9tLmxpbmUpO3ZhciBzPXtwcmU6c2koInByZSIpLGNvbDowLHBvczowLG1lYXN1cmU6bnVsbCxtZWFzdXJlZFNvbWV0aGluZzohMSxjbTp0LGNvcHlXaWRnZXRzOm59O2Rve28udGV4dCYmKGw9ITEpLHMubWVhc3VyZT1vPT1lJiZyLHMucG9zPTAscy5hZGRUb2tlbj1zLm1lYXN1cmU/bG46b24sKEFpfHxXaSkmJnQuZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSYmKHMuYWRkVG9rZW49c24ocy5hZGRUb2tlbikpO3ZhciBhPXVuKG8scyxKcih0LG8pKTtyJiZvPT1lJiYhcy5tZWFzdXJlZFNvbWV0aGluZyYmKHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKSxzLm1lYXN1cmVkU29tZXRoaW5nPSEwKSxhJiYobz1nbih0LmRvYyxhLnRvLmxpbmUpKX13aGlsZShhKTshcnx8cy5tZWFzdXJlZFNvbWV0aGluZ3x8clswXXx8KHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQobD9zaSgic3BhbiIsIsKgIik6cGkodC5kaXNwbGF5Lm1lYXN1cmUpKSkscy5wcmUuZmlyc3RDaGlsZHx8VnIodC5kb2MsZSl8fHMucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCLCoCIpKTt2YXIgdTtpZihyJiYoQWl8fERpKSYmKHU9d24obykpKXt2YXIgYz11Lmxlbmd0aC0xO3VbY10uZnJvbT09dVtjXS50byYmLS1jO3ZhciBmPXVbY10saD11W2MtMV07aWYoZi5mcm9tKzE9PWYudG8mJmgmJmYubGV2ZWw8aC5sZXZlbCl7dmFyIGQ9cltzLnBvcy0xXTtkJiZkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGQubWVhc3VyZVJpZ2h0PXBpKHQuZGlzcGxheS5tZWFzdXJlKSxkLm5leHRTaWJsaW5nKX19dmFyIHA9cy50ZXh0Q2xhc3M/cy50ZXh0Q2xhc3MrIiAiKyhlLnRleHRDbGFzc3x8IiIpOmUudGV4dENsYXNzO3JldHVybiBwJiYocy5wcmUuY2xhc3NOYW1lPXApLEtuKHQsInJlbmRlckxpbmUiLHQsZSxzLnByZSksc31mdW5jdGlvbiBubih0KXt2YXIgZT1zaSgic3BhbiIsIuKAoiIsImNtLWludmFsaWRjaGFyIik7cmV0dXJuIGUudGl0bGU9IlxcdSIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSxlfWZ1bmN0aW9uIG9uKHQsZSxyLG4saSxvKXtpZihlKXt2YXIgbD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJzO2lmKGwudGVzdChlKSlmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MDs7KXtsLmxhc3RJbmRleD1hO3ZhciB1PWwuZXhlYyhlKSxjPXU/dS5pbmRleC1hOmUubGVuZ3RoLWE7aWYoYyYmKHMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZS5zbGljZShhLGErYykpKSx0LmNvbCs9YyksIXUpYnJlYWs7aWYoYSs9YysxLCIJIj09dVswXSl7dmFyIGY9dC5jbS5vcHRpb25zLnRhYlNpemUsaD1mLXQuY29sJWY7cy5hcHBlbmRDaGlsZChzaSgic3BhbiIscW4oaCksImNtLXRhYiIpKSx0LmNvbCs9aH1lbHNle3ZhciBkPXQuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKHVbMF0pO3MuYXBwZW5kQ2hpbGQoZCksdC5jb2wrPTF9fWVsc2V7dC5jb2wrPWUubGVuZ3RoO3ZhciBzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpfWlmKHJ8fG58fGl8fHQubWVhc3VyZSl7dmFyIHA9cnx8IiI7biYmKHArPW4pLGkmJihwKz1pKTt2YXIgZD1zaSgic3BhbiIsW3NdLHApO3JldHVybiBvJiYoZC50aXRsZT1vKSx0LnByZS5hcHBlbmRDaGlsZChkKX10LnByZS5hcHBlbmRDaGlsZChzKX19ZnVuY3Rpb24gbG4odCxlLHIsbixpKXtmb3IodmFyIG89dC5jbS5vcHRpb25zLmxpbmVXcmFwcGluZyxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBzPWUuY2hhckF0KGwpLGE9MD09bDtzPj0i7aCAIiYmIu2vvyI+cyYmbDxlLmxlbmd0aC0xPyhzPWUuc2xpY2UobCxsKzIpLCsrbCk6bCYmbyYmaGkoZSxsKSYmdC5wcmUuYXBwZW5kQ2hpbGQoc2koIndiciIpKTt2YXIgdT10Lm1lYXN1cmVbdC5wb3NdLGM9dC5tZWFzdXJlW3QucG9zXT1vbih0LHMscixhJiZuLGw9PWUubGVuZ3RoLTEmJmkpO3UmJihjLmxlZnRTaWRlPXUubGVmdFNpZGV8fHUpLEFpJiZvJiYiICI9PXMmJmwmJiEvXHMvLnRlc3QoZS5jaGFyQXQobC0xKSkmJmw8ZS5sZW5ndGgtMSYmIS9ccy8udGVzdChlLmNoYXJBdChsKzEpKSYmKGMuc3R5bGUud2hpdGVTcGFjZT0ibm9ybWFsIiksdC5wb3MrPXMubGVuZ3RofWUubGVuZ3RoJiYodC5tZWFzdXJlZFNvbWV0aGluZz0hMCl9ZnVuY3Rpb24gc24odCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9IiAiLHI9MDtyPHQubGVuZ3RoLTI7KytyKWUrPXIlMj8iICI6IsKgIjtyZXR1cm4gZSs9IiAifXJldHVybiBmdW5jdGlvbihyLG4saSxvLGwscyl7cmV0dXJuIHQocixuLnJlcGxhY2UoLyB7Myx9L2csZSksaSxvLGwscyl9fWZ1bmN0aW9uIGFuKHQsZSxyLG4pe3ZhciBpPSFuJiZyLnJlcGxhY2VkV2l0aDtpZihpJiYodC5jb3B5V2lkZ2V0cyYmKGk9aS5jbG9uZU5vZGUoITApKSx0LnByZS5hcHBlbmRDaGlsZChpKSx0Lm1lYXN1cmUpKXtpZihlKXQubWVhc3VyZVt0LnBvc109aTtlbHNle3ZhciBvPXBpKHQuY20uZGlzcGxheS5tZWFzdXJlKTtpZigiYm9va21hcmsiIT1yLnR5cGV8fHIuaW5zZXJ0TGVmdCl7aWYodC5tZWFzdXJlW3QucG9zXSlyZXR1cm47dC5tZWFzdXJlW3QucG9zXT10LnByZS5pbnNlcnRCZWZvcmUobyxpKX1lbHNlIHQubWVhc3VyZVt0LnBvc109dC5wcmUuYXBwZW5kQ2hpbGQobyl9dC5tZWFzdXJlZFNvbWV0aGluZz0hMH10LnBvcys9ZX1mdW5jdGlvbiB1bih0LGUscil7dmFyIG49dC5tYXJrZWRTcGFucyxpPXQudGV4dCxvPTA7aWYobilmb3IodmFyIGwscyxhLHUsYyxmLGg9aS5sZW5ndGgsZD0wLHA9MSxnPSIiLG09MDs7KXtpZihtPT1kKXtzPWE9dT1jPSIiLGY9bnVsbCxtPTEvMDtmb3IodmFyIHY9W10seT0wO3k8bi5sZW5ndGg7Kyt5KXt2YXIgYj1uW3ldLHg9Yi5tYXJrZXI7Yi5mcm9tPD1kJiYobnVsbD09Yi50b3x8Yi50bz5kKT8obnVsbCE9Yi50byYmbT5iLnRvJiYobT1iLnRvLGE9IiIpLHguY2xhc3NOYW1lJiYocys9IiAiK3guY2xhc3NOYW1lKSx4LnN0YXJ0U3R5bGUmJmIuZnJvbT09ZCYmKHUrPSIgIit4LnN0YXJ0U3R5bGUpLHguZW5kU3R5bGUmJmIudG89PW0mJihhKz0iICIreC5lbmRTdHlsZSkseC50aXRsZSYmIWMmJihjPXgudGl0bGUpLHguY29sbGFwc2VkJiYoIWZ8fGYubWFya2VyLnNpemU8eC5zaXplKSYmKGY9YikpOmIuZnJvbT5kJiZtPmIuZnJvbSYmKG09Yi5mcm9tKSwiYm9va21hcmsiPT14LnR5cGUmJmIuZnJvbT09ZCYmeC5yZXBsYWNlZFdpdGgmJnYucHVzaCh4KQp9aWYoZiYmKGYuZnJvbXx8MCk9PWQmJihhbihlLChudWxsPT1mLnRvP2g6Zi50byktZCxmLm1hcmtlcixudWxsPT1mLmZyb20pLG51bGw9PWYudG8pKXJldHVybiBmLm1hcmtlci5maW5kKCk7aWYoIWYmJnYubGVuZ3RoKWZvcih2YXIgeT0wO3k8di5sZW5ndGg7Kyt5KWFuKGUsMCx2W3ldKX1pZihkPj1oKWJyZWFrO2Zvcih2YXIgQz1NYXRoLm1pbihoLG0pOzspe2lmKGcpe3ZhciB3PWQrZy5sZW5ndGg7aWYoIWYpe3ZhciBMPXc+Qz9nLnNsaWNlKDAsQy1kKTpnO2UuYWRkVG9rZW4oZSxMLGw/bCtzOnMsdSxkK0wubGVuZ3RoPT1tP2E6IiIsYyl9aWYodz49Qyl7Zz1nLnNsaWNlKEMtZCksZD1DO2JyZWFrfWQ9dyx1PSIifWc9aS5zbGljZShvLG89cltwKytdKSxsPWVuKHJbcCsrXSxlKX19ZWxzZSBmb3IodmFyIHA9MTtwPHIubGVuZ3RoO3ArPTIpZS5hZGRUb2tlbihlLGkuc2xpY2UobyxvPXJbcF0pLGVuKHJbcCsxXSxlKSl9ZnVuY3Rpb24gY24odCxlLHIsbixpKXtmdW5jdGlvbiBvKHQpe3JldHVybiByP3JbdF06bnVsbH1mdW5jdGlvbiBsKHQscixuKXskcih0LHIsbixpKSxVbih0LCJjaGFuZ2UiLHQsZSl9dmFyIHM9ZS5mcm9tLGE9ZS50byx1PWUudGV4dCxjPWduKHQscy5saW5lKSxmPWduKHQsYS5saW5lKSxoPVFuKHUpLGQ9byh1Lmxlbmd0aC0xKSxwPWEubGluZS1zLmxpbmU7aWYoMCE9cy5jaHx8MCE9YS5jaHx8IiIhPWh8fHQuY20mJiF0LmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKWlmKGM9PWYpaWYoMT09dS5sZW5ndGgpbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK2grYy50ZXh0LnNsaWNlKGEuY2gpLGQpO2Vsc2V7Zm9yKHZhciBnPVtdLG09MSx2PXUubGVuZ3RoLTE7dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7Zy5wdXNoKG5ldyBibyhoK2MudGV4dC5zbGljZShhLmNoKSxkLGkpKSxsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSx0Lmluc2VydChzLmxpbmUrMSxnKX1lbHNlIGlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdK2YudGV4dC5zbGljZShhLmNoKSxvKDApKSx0LnJlbW92ZShzLmxpbmUrMSxwKTtlbHNle2woYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdLG8oMCkpLGwoZixoK2YudGV4dC5zbGljZShhLmNoKSxkKTtmb3IodmFyIG09MSx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtwPjEmJnQucmVtb3ZlKHMubGluZSsxLHAtMSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZXtmb3IodmFyIG09MCx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtsKGYsZi50ZXh0LGQpLHAmJnQucmVtb3ZlKHMubGluZSxwKSxnLmxlbmd0aCYmdC5pbnNlcnQocy5saW5lLGcpfVVuKHQsImNoYW5nZSIsdCxlKSxucih0LG4uYW5jaG9yLG4uaGVhZCxudWxsLCEwKX1mdW5jdGlvbiBmbih0KXt0aGlzLmxpbmVzPXQsdGhpcy5wYXJlbnQ9bnVsbDtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49MDtyPmU7KytlKXRbZV0ucGFyZW50PXRoaXMsbis9dFtlXS5oZWlnaHQ7dGhpcy5oZWlnaHQ9bn1mdW5jdGlvbiBobih0KXt0aGlzLmNoaWxkcmVuPXQ7Zm9yKHZhciBlPTAscj0wLG49MCxpPXQubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRbbl07ZSs9by5jaHVua1NpemUoKSxyKz1vLmhlaWdodCxvLnBhcmVudD10aGlzfXRoaXMuc2l6ZT1lLHRoaXMuaGVpZ2h0PXIsdGhpcy5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBkbih0LGUscil7ZnVuY3Rpb24gbih0LGksbyl7aWYodC5saW5rZWQpZm9yKHZhciBsPTA7bDx0LmxpbmtlZC5sZW5ndGg7KytsKXt2YXIgcz10LmxpbmtlZFtsXTtpZihzLmRvYyE9aSl7dmFyIGE9byYmcy5zaGFyZWRIaXN0Oyghcnx8YSkmJihlKHMuZG9jLGEpLG4ocy5kb2MsdCxhKSl9fX1uKHQsbnVsbCwhMCl9ZnVuY3Rpb24gcG4odCxlKXtpZihlLmNtKXRocm93IG5ldyBFcnJvcigiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS4iKTt0LmRvYz1lLGUuY209dCxvKHQpLHIodCksdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8Zih0KSx0Lm9wdGlvbnMubW9kZT1lLm1vZGVPcHRpb24sdWUodCl9ZnVuY3Rpb24gZ24odCxlKXtmb3IoZS09dC5maXJzdDshdC5saW5lczspZm9yKHZhciByPTA7Oysrcil7dmFyIG49dC5jaGlsZHJlbltyXSxpPW4uY2h1bmtTaXplKCk7aWYoaT5lKXt0PW47YnJlYWt9ZS09aX1yZXR1cm4gdC5saW5lc1tlXX1mdW5jdGlvbiBtbih0LGUscil7dmFyIG49W10saT1lLmxpbmU7cmV0dXJuIHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7dmFyIG89dC50ZXh0O2k9PXIubGluZSYmKG89by5zbGljZSgwLHIuY2gpKSxpPT1lLmxpbmUmJihvPW8uc2xpY2UoZS5jaCkpLG4ucHVzaChvKSwrK2l9KSxufWZ1bmN0aW9uIHZuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5pdGVyKGUscixmdW5jdGlvbih0KXtuLnB1c2godC50ZXh0KX0pLG59ZnVuY3Rpb24geW4odCxlKXtmb3IodmFyIHI9ZS10LmhlaWdodCxuPXQ7bjtuPW4ucGFyZW50KW4uaGVpZ2h0Kz1yfWZ1bmN0aW9uIGJuKHQpe2lmKG51bGw9PXQucGFyZW50KXJldHVybiBudWxsO2Zvcih2YXIgZT10LnBhcmVudCxyPXRpKGUubGluZXMsdCksbj1lLnBhcmVudDtuO2U9bixuPW4ucGFyZW50KWZvcih2YXIgaT0wO24uY2hpbGRyZW5baV0hPWU7KytpKXIrPW4uY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7cmV0dXJuIHIrZS5maXJzdH1mdW5jdGlvbiB4bih0LGUpe3ZhciByPXQuZmlyc3Q7dDpkb3tmb3IodmFyIG49MCxpPXQuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXQuY2hpbGRyZW5bbl0sbD1vLmhlaWdodDtpZihsPmUpe3Q9bztjb250aW51ZSB0fWUtPWwscis9by5jaHVua1NpemUoKX1yZXR1cm4gcn13aGlsZSghdC5saW5lcyk7Zm9yKHZhciBuPTAsaT10LmxpbmVzLmxlbmd0aDtpPm47KytuKXt2YXIgcz10LmxpbmVzW25dLGE9cy5oZWlnaHQ7aWYoYT5lKWJyZWFrO2UtPWF9cmV0dXJuIHIrbn1mdW5jdGlvbiBDbih0LGUpe2U9R3IodC5kb2MsZSk7Zm9yKHZhciByPTAsbj1lLnBhcmVudCxpPTA7aTxuLmxpbmVzLmxlbmd0aDsrK2kpe3ZhciBvPW4ubGluZXNbaV07aWYobz09ZSlicmVhaztyKz1vLmhlaWdodH1mb3IodmFyIGw9bi5wYXJlbnQ7bDtuPWwsbD1uLnBhcmVudClmb3IodmFyIGk9MDtpPGwuY2hpbGRyZW4ubGVuZ3RoOysraSl7dmFyIHM9bC5jaGlsZHJlbltpXTtpZihzPT1uKWJyZWFrO3IrPXMuaGVpZ2h0fXJldHVybiByfWZ1bmN0aW9uIHduKHQpe3ZhciBlPXQub3JkZXI7cmV0dXJuIG51bGw9PWUmJihlPXQub3JkZXI9Qm8odC50ZXh0KSksZX1mdW5jdGlvbiBMbih0KXtyZXR1cm57ZG9uZTpbXSx1bmRvbmU6W10sdW5kb0RlcHRoOjEvMCxsYXN0VGltZTowLGxhc3RPcDpudWxsLGxhc3RPcmlnaW46bnVsbCxnZW5lcmF0aW9uOnR8fDEsbWF4R2VuZXJhdGlvbjp0fHwxfX1mdW5jdGlvbiBrbih0LGUscixuKXt2YXIgaT1lWyJzcGFuc18iK3QuaWRdLG89MDt0Lml0ZXIoTWF0aC5tYXgodC5maXJzdCxyKSxNYXRoLm1pbih0LmZpcnN0K3Quc2l6ZSxuKSxmdW5jdGlvbihyKXtyLm1hcmtlZFNwYW5zJiYoKGl8fChpPWVbInNwYW5zXyIrdC5pZF09e30pKVtvXT1yLm1hcmtlZFNwYW5zKSwrK299KX1mdW5jdGlvbiBTbih0LGUpe3ZhciByPXtsaW5lOmUuZnJvbS5saW5lLGNoOmUuZnJvbS5jaH0sbj17ZnJvbTpyLHRvOmxvKGUpLHRleHQ6bW4odCxlLmZyb20sZS50byl9O3JldHVybiBrbih0LG4sZS5mcm9tLmxpbmUsZS50by5saW5lKzEpLGRuKHQsZnVuY3Rpb24odCl7a24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKX0sITApLG59ZnVuY3Rpb24gTW4odCxlLHIsbil7dmFyIGk9dC5oaXN0b3J5O2kudW5kb25lLmxlbmd0aD0wO3ZhciBvPStuZXcgRGF0ZSxsPVFuKGkuZG9uZSk7aWYobCYmKGkubGFzdE9wPT1ufHxpLmxhc3RPcmlnaW49PWUub3JpZ2luJiZlLm9yaWdpbiYmKCIrIj09ZS5vcmlnaW4uY2hhckF0KDApJiZ0LmNtJiZpLmxhc3RUaW1lPm8tdC5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5fHwiKiI9PWUub3JpZ2luLmNoYXJBdCgwKSkpKXt2YXIgcz1RbihsLmNoYW5nZXMpO2plKGUuZnJvbSxlLnRvKSYmamUoZS5mcm9tLHMudG8pP3MudG89bG8oZSk6bC5jaGFuZ2VzLnB1c2goU24odCxlKSksbC5hbmNob3JBZnRlcj1yLmFuY2hvcixsLmhlYWRBZnRlcj1yLmhlYWR9ZWxzZSBmb3IobD17Y2hhbmdlczpbU24odCxlKV0sZ2VuZXJhdGlvbjppLmdlbmVyYXRpb24sYW5jaG9yQmVmb3JlOnQuc2VsLmFuY2hvcixoZWFkQmVmb3JlOnQuc2VsLmhlYWQsYW5jaG9yQWZ0ZXI6ci5hbmNob3IsaGVhZEFmdGVyOnIuaGVhZH0saS5kb25lLnB1c2gobCksaS5nZW5lcmF0aW9uPSsraS5tYXhHZW5lcmF0aW9uO2kuZG9uZS5sZW5ndGg+aS51bmRvRGVwdGg7KWkuZG9uZS5zaGlmdCgpO2kubGFzdFRpbWU9byxpLmxhc3RPcD1uLGkubGFzdE9yaWdpbj1lLm9yaWdpbn1mdW5jdGlvbiBUbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGUscj0wO3I8dC5sZW5ndGg7KytyKXRbcl0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkP2V8fChlPXQuc2xpY2UoMCxyKSk6ZSYmZS5wdXNoKHRbcl0pO3JldHVybiBlP2UubGVuZ3RoP2U6bnVsbDp0fWZ1bmN0aW9uIEFuKHQsZSl7dmFyIHI9ZVsic3BhbnNfIit0LmlkXTtpZighcilyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxpPVtdO248ZS50ZXh0Lmxlbmd0aDsrK24paS5wdXNoKFRuKHJbbl0pKTtyZXR1cm4gaX1mdW5jdGlvbiBIbih0LGUpe2Zvcih2YXIgcj0wLG49W107cjx0Lmxlbmd0aDsrK3Ipe3ZhciBpPXRbcl0sbz1pLmNoYW5nZXMsbD1bXTtuLnB1c2goe2NoYW5nZXM6bCxhbmNob3JCZWZvcmU6aS5hbmNob3JCZWZvcmUsaGVhZEJlZm9yZTppLmhlYWRCZWZvcmUsYW5jaG9yQWZ0ZXI6aS5hbmNob3JBZnRlcixoZWFkQWZ0ZXI6aS5oZWFkQWZ0ZXJ9KTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoOysrcyl7dmFyIGEsdT1vW3NdO2lmKGwucHVzaCh7ZnJvbTp1LmZyb20sdG86dS50byx0ZXh0OnUudGV4dH0pLGUpZm9yKHZhciBjIGluIHUpKGE9Yy5tYXRjaCgvXnNwYW5zXyhcZCspJC8pKSYmdGkoZSxOdW1iZXIoYVsxXSkpPi0xJiYoUW4obClbY109dVtjXSxkZWxldGUgdVtjXSl9fXJldHVybiBufWZ1bmN0aW9uIE5uKHQsZSxyLG4pe3I8dC5saW5lP3QubGluZSs9bjplPHQubGluZSYmKHQubGluZT1lLHQuY2g9MCl9ZnVuY3Rpb24gRG4odCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe2Zvcih2YXIgbz10W2ldLGw9ITAscz0wO3M8by5jaGFuZ2VzLmxlbmd0aDsrK3Mpe3ZhciBhPW8uY2hhbmdlc1tzXTtpZihvLmNvcGllZHx8KGEuZnJvbT1aZShhLmZyb20pLGEudG89WmUoYS50bykpLHI8YS5mcm9tLmxpbmUpYS5mcm9tLmxpbmUrPW4sYS50by5saW5lKz1uO2Vsc2UgaWYoZTw9YS50by5saW5lKXtsPSExO2JyZWFrfX1vLmNvcGllZHx8KG8uYW5jaG9yQmVmb3JlPVplKG8uYW5jaG9yQmVmb3JlKSxvLmhlYWRCZWZvcmU9WmUoby5oZWFkQmVmb3JlKSxvLmFuY2hvckFmdGVyPVplKG8uYW5jaG9yQWZ0ZXIpLG8ucmVhZEFmdGVyPVplKG8uaGVhZEFmdGVyKSxvLmNvcGllZD0hMCksbD8oTm4oby5hbmNob3JCZWZvcmUpLE5uKG8uaGVhZEJlZm9yZSksTm4oby5hbmNob3JBZnRlciksTm4oby5oZWFkQWZ0ZXIpKToodC5zcGxpY2UoMCxpKzEpLGk9MCl9fWZ1bmN0aW9uIFduKHQsZSl7dmFyIHI9ZS5mcm9tLmxpbmUsbj1lLnRvLmxpbmUsaT1lLnRleHQubGVuZ3RoLShuLXIpLTE7RG4odC5kb25lLHIsbixpKSxEbih0LnVuZG9uZSxyLG4saSl9ZnVuY3Rpb24gT24oKXtQbih0aGlzKX1mdW5jdGlvbiBFbih0KXtyZXR1cm4gdC5zdG9wfHwodC5zdG9wPU9uKSx0fWZ1bmN0aW9uIHpuKHQpe3QucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITF9ZnVuY3Rpb24gSW4odCl7dC5zdG9wUHJvcGFnYXRpb24/dC5zdG9wUHJvcGFnYXRpb24oKTp0LmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBGbih0KXtyZXR1cm4gbnVsbCE9dC5kZWZhdWx0UHJldmVudGVkP3QuZGVmYXVsdFByZXZlbnRlZDowPT10LnJldHVyblZhbHVlfWZ1bmN0aW9uIFBuKHQpe3puKHQpLEluKHQpfWZ1bmN0aW9uIFJuKHQpe3JldHVybiB0LnRhcmdldHx8dC5zcmNFbGVtZW50fWZ1bmN0aW9uIEJuKHQpe3ZhciBlPXQud2hpY2g7cmV0dXJuIG51bGw9PWUmJigxJnQuYnV0dG9uP2U9MToyJnQuYnV0dG9uP2U9Mzo0JnQuYnV0dG9uJiYoZT0yKSksS2kmJnQuY3RybEtleSYmMT09ZSYmKGU9MyksZX1mdW5jdGlvbiBHbih0LGUscil7aWYodC5hZGRFdmVudExpc3RlbmVyKXQuYWRkRXZlbnRMaXN0ZW5lcihlLHIsITEpO2Vsc2UgaWYodC5hdHRhY2hFdmVudCl0LmF0dGFjaEV2ZW50KCJvbiIrZSxyKTtlbHNle3ZhciBuPXQuX2hhbmRsZXJzfHwodC5faGFuZGxlcnM9e30pLGk9bltlXXx8KG5bZV09W10pO2kucHVzaChyKX19ZnVuY3Rpb24gVm4odCxlLHIpe2lmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcil0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuZGV0YWNoRXZlbnQpdC5kZXRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYoIW4pcmV0dXJuO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7KytpKWlmKG5baV09PXIpe24uc3BsaWNlKGksMSk7YnJlYWt9fX1mdW5jdGlvbiBLbih0LGUpe3ZhciByPXQuX2hhbmRsZXJzJiZ0Ll9oYW5kbGVyc1tlXTtpZihyKWZvcih2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMiksaT0wO2k8ci5sZW5ndGg7KytpKXJbaV0uYXBwbHkobnVsbCxuKX1mdW5jdGlvbiBVbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dC5hcHBseShudWxsLGkpfX12YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYobil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO1NvfHwoKytNbyxTbz1bXSxzZXRUaW1lb3V0KF9uLDApKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbylTby5wdXNoKHIobltvXSkpfX1mdW5jdGlvbiBYbih0LGUscil7cmV0dXJuIEtuKHQscnx8ZS50eXBlLHQsZSksRm4oZSl8fGUuY29kZW1pcnJvcklnbm9yZX1mdW5jdGlvbiBfbigpey0tTW87dmFyIHQ9U287U289bnVsbDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdKCl9ZnVuY3Rpb24gWW4odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07cmV0dXJuIHImJnIubGVuZ3RoPjB9ZnVuY3Rpb24gam4odCl7dC5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXtHbih0aGlzLHQsZSl9LHQucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe1ZuKHRoaXMsdCxlKX19ZnVuY3Rpb24gJG4oKXt0aGlzLmlkPW51bGx9ZnVuY3Rpb24gWm4odCxlLHIsbixpKXtudWxsPT1lJiYoZT10LnNlYXJjaCgvW15cc1x1MDBhMF0vKSwtMT09ZSYmKGU9dC5sZW5ndGgpKTtmb3IodmFyIG89bnx8MCxsPWl8fDA7ZT5vOysrbykiCSI9PXQuY2hhckF0KG8pP2wrPXItbCVyOisrbDtyZXR1cm4gbH1mdW5jdGlvbiBxbih0KXtmb3IoO0hvLmxlbmd0aDw9dDspSG8ucHVzaChRbihIbykrIiAiKTtyZXR1cm4gSG9bdF19ZnVuY3Rpb24gUW4odCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gSm4odCl7aWYoR2kpdC5zZWxlY3Rpb25TdGFydD0wLHQuc2VsZWN0aW9uRW5kPXQudmFsdWUubGVuZ3RoO2Vsc2UgdHJ5e3Quc2VsZWN0KCl9Y2F0Y2goZSl7fX1mdW5jdGlvbiB0aSh0LGUpe2lmKHQuaW5kZXhPZilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7bj5yOysrcilpZih0W3JdPT1lKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGVpKHQsZSl7ZnVuY3Rpb24gcigpe31yLnByb3RvdHlwZT10O3ZhciBuPW5ldyByO3JldHVybiBlJiZyaShlLG4pLG59ZnVuY3Rpb24gcmkodCxlKXtlfHwoZT17fSk7Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmkodCl7Zm9yKHZhciBlPVtdLHI9MDt0PnI7KytyKWUucHVzaCh2b2lkIDApO3JldHVybiBlfWZ1bmN0aW9uIGlpKHQpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShudWxsLGUpfX1mdW5jdGlvbiBvaSh0KXtyZXR1cm4vXHcvLnRlc3QodCl8fHQ+IsKAIiYmKHQudG9VcHBlckNhc2UoKSE9dC50b0xvd2VyQ2FzZSgpfHxOby50ZXN0KHQpKX1mdW5jdGlvbiBsaSh0KXtmb3IodmFyIGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpJiZ0W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7aWYociYmKGkuY2xhc3NOYW1lPXIpLG4mJihpLnN0eWxlLmNzc1RleHQ9biksInN0cmluZyI9PXR5cGVvZiBlKWNpKGksZSk7ZWxzZSBpZihlKWZvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKWkuYXBwZW5kQ2hpbGQoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gYWkodCl7Zm9yKHZhciBlPXQuY2hpbGROb2Rlcy5sZW5ndGg7ZT4wOy0tZSl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCk7cmV0dXJuIHR9ZnVuY3Rpb24gdWkodCxlKXtyZXR1cm4gYWkodCkuYXBwZW5kQ2hpbGQoZSl9ZnVuY3Rpb24gY2kodCxlKXtOaT8odC5pbm5lckhUTUw9IiIsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSkpOnQudGV4dENvbnRlbnQ9ZX1mdW5jdGlvbiBmaSh0KXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1mdW5jdGlvbiBoaSgpe3JldHVybiExfWZ1bmN0aW9uIGRpKHQpe2lmKG51bGwhPU9vKXJldHVybiBPbzt2YXIgZT1zaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7IG92ZXJmbG93LXg6IHNjcm9sbCIpO3JldHVybiB1aSh0LGUpLGUub2Zmc2V0V2lkdGgmJihPbz1lLm9mZnNldEhlaWdodC1lLmNsaWVudEhlaWdodCksT298fDB9ZnVuY3Rpb24gcGkodCl7aWYobnVsbD09RW8pe3ZhciBlPXNpKCJzcGFuIiwi4oCLIik7dWkodCxzaSgic3BhbiIsW2UsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKV0pKSwwIT10LmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0JiYoRW89ZS5vZmZzZXRXaWR0aDw9MSYmZS5vZmZzZXRIZWlnaHQ+MiYmIUhpKX1yZXR1cm4gRW8/c2koInNwYW4iLCLigIsiKTpzaSgic3BhbiIsIsKgIixudWxsLCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpfWZ1bmN0aW9uIGdpKHQsZSxyLG4pe2lmKCF0KXJldHVybiBuKGUsciwibHRyIik7Zm9yKHZhciBpPSExLG89MDtvPHQubGVuZ3RoOysrbyl7dmFyIGw9dFtvXTsobC5mcm9tPHImJmwudG8+ZXx8ZT09ciYmbC50bz09ZSkmJihuKE1hdGgubWF4KGwuZnJvbSxlKSxNYXRoLm1pbihsLnRvLHIpLDE9PWwubGV2ZWw/InJ0bCI6Imx0ciIpLGk9ITApfWl8fG4oZSxyLCJsdHIiKX1mdW5jdGlvbiBtaSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QudG86dC5mcm9tfWZ1bmN0aW9uIHZpKHQpe3JldHVybiB0LmxldmVsJTI/dC5mcm9tOnQudG99ZnVuY3Rpb24geWkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/bWkoZVswXSk6MH1mdW5jdGlvbiBiaSh0KXt2YXIgZT13bih0KTtyZXR1cm4gZT92aShRbihlKSk6dC50ZXh0Lmxlbmd0aH1mdW5jdGlvbiB4aSh0LGUpe3ZhciByPWduKHQuZG9jLGUpLG49R3IodC5kb2Mscik7biE9ciYmKGU9Ym4obikpO3ZhciBpPXduKG4pLG89aT9pWzBdLmxldmVsJTI/Ymkobik6eWkobik6MDtyZXR1cm4gWWUoZSxvKX1mdW5jdGlvbiBDaSh0LGUpe2Zvcih2YXIgcixuO3I9QnIobj1nbih0LmRvYyxlKSk7KWU9ci5maW5kKCkudG8ubGluZTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP3lpKG4pOmJpKG4pOm4udGV4dC5sZW5ndGg7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gd2kodCxlLHIpe3ZhciBuPXRbMF0ubGV2ZWw7cmV0dXJuIGU9PW4/ITA6cj09bj8hMTpyPmV9ZnVuY3Rpb24gTGkodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXt2YXIgaT10W25dO2lmKGkuZnJvbTxlJiZpLnRvPmUpcmV0dXJuIFJvPW51bGwsbjtpZihpLmZyb209PWV8fGkudG89PWUpe2lmKG51bGwhPXIpcmV0dXJuIHdpKHQsaS5sZXZlbCx0W3JdLmxldmVsKT8oUm89cixuKTooUm89bixyKTtyPW59fXJldHVybiBSbz1udWxsLHJ9ZnVuY3Rpb24ga2kodCxlLHIsbil7aWYoIW4pcmV0dXJuIGUrcjtkbyBlKz1yO3doaWxlKGU+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGUpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gU2kodCxlLHIsbil7dmFyIGk9d24odCk7aWYoIWkpcmV0dXJuIE1pKHQsZSxyLG4pO2Zvcih2YXIgbz1MaShpLGUpLGw9aVtvXSxzPWtpKHQsZSxsLmxldmVsJTI/LXI6cixuKTs7KXtpZihzPmwuZnJvbSYmczxsLnRvKXJldHVybiBzO2lmKHM9PWwuZnJvbXx8cz09bC50bylyZXR1cm4gTGkoaSxzKT09bz9zOihsPWlbbys9cl0scj4wPT1sLmxldmVsJTI/bC50bzpsLmZyb20pO2lmKGw9aVtvKz1yXSwhbClyZXR1cm4gbnVsbDtzPXI+MD09bC5sZXZlbCUyP2tpKHQsbC50bywtMSxuKTpraSh0LGwuZnJvbSwxLG4pfX1mdW5jdGlvbiBNaSh0LGUscixuKXt2YXIgaT1lK3I7aWYobilmb3IoO2k+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGkpKTspaSs9cjtyZXR1cm4gMD5pfHxpPnQudGV4dC5sZW5ndGg/bnVsbDppfXZhciBUaT0vZ2Vja29cL1xkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxBaT0vTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxIaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDgpLE5pPUFpJiYobnVsbD09ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU8OSksRGk9L1RyaWRlbnRcLyhbNy05XXxcZHsyLH0pXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksV2k9L1dlYktpdFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLE9pPVdpJiYvUXRcL1xkK1wuXGQrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEVpPS9DaHJvbWVcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx6aT0vT3BlcmFcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxJaT0vQXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvciksRmk9L0tIVE1MXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUGk9L01hYyBPUyBYIDFcZFxEKFs3LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUmk9L01hYyBPUyBYIDFcZFxEKFs4LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQmk9L1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxHaT0vQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJi9Nb2JpbGVcL1x3Ky8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxWaT1HaXx8L0FuZHJvaWR8d2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEtpPUdpfHwvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksVWk9L3dpbi9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxYaT16aSYmbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwvKFxkKlwuXGQqKS8pO1hpJiYoWGk9TnVtYmVyKFhpWzFdKSksWGkmJlhpPj0xNSYmKHppPSExLFdpPSEwKTt2YXIgX2ksWWksamksJGk9S2kmJihPaXx8emkmJihudWxsPT1YaXx8MTIuMTE+WGkpKSxaaT1UaXx8QWkmJiFOaSxxaT0hMSxRaT0hMSxKaT0wLHRvPTAsZW89MCxybz1udWxsO0FpP3JvPS0uNTM6VGk/cm89MTU6RWk/cm89LS43OklpJiYocm89LTEvMyk7dmFyIG5vLGlvLG9vPW51bGwsbG89dC5jaGFuZ2VFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dD9ZZSh0LmZyb20ubGluZSt0LnRleHQubGVuZ3RoLTEsUW4odC50ZXh0KS5sZW5ndGgrKDE9PXQudGV4dC5sZW5ndGg/dC5mcm9tLmNoOjApKTp0LnRvfTt0LlBvcz1ZZSx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxmb2N1czpmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpLHBlKHRoaXMpLGZlKHRoaXMpfSxzZXRPcHRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLm9wdGlvbnMsbj1yW3RdOyhyW3RdIT1lfHwibW9kZSI9PXQpJiYoclt0XT1lLHNvLmhhc093blByb3BlcnR5KHQpJiZsZSh0aGlzLHNvW3RdKSh0aGlzLGUsbikpfSxnZXRPcHRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9uc1t0XX0sZ2V0RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jfSxhZGRLZXlNYXA6ZnVuY3Rpb24odCxlKXt0aGlzLnN0YXRlLmtleU1hcHNbZT8icHVzaCI6InVuc2hpZnQiXSh0KX0scmVtb3ZlS2V5TWFwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLmtleU1hcHMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PXR8fCJzdHJpbmciIT10eXBlb2YgZVtyXSYmZVtyXS5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLCEwfSxhZGRPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnRva2VuP2U6dC5nZXRNb2RlKHRoaXMub3B0aW9ucyxlKTtpZihuLnN0YXJ0U3RhdGUpdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLiIpO3RoaXMuc3RhdGUub3ZlcmxheXMucHVzaCh7bW9kZTpuLG1vZGVTcGVjOmUsb3BhcXVlOnImJnIub3BhcXVlfSksdGhpcy5zdGF0ZS5tb2RlR2VuKyssdWUodGhpcyl9KSxyZW1vdmVPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuc3RhdGUub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLm1vZGVTcGVjO2lmKG49PXR8fCJzdHJpbmciPT10eXBlb2YgdCYmbi5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpLHZvaWQgMH19KSxpbmRlbnRMaW5lOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpeyJzdHJpbmciIT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlJiYoZT1udWxsPT1lP3RoaXMub3B0aW9ucy5zbWFydEluZGVudD8ic21hcnQiOiJwcmV2IjplPyJhZGQiOiJzdWJ0cmFjdCIpLHRyKHRoaXMuZG9jLHQpJiZocih0aGlzLHQsZSxyKX0pLGluZGVudFNlbGVjdGlvbjpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jLnNlbDtpZihqZShlLmZyb20sZS50bykpcmV0dXJuIGhyKHRoaXMsZS5mcm9tLmxpbmUsdCk7Zm9yKHZhciByPWUudG8ubGluZS0oZS50by5jaD8wOjEpLG49ZS5mcm9tLmxpbmU7cj49bjsrK24paHIodGhpcyxuLHQpfSksZ2V0VG9rZW5BdDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3Q9UWUocix0KTtmb3IodmFyIG49eih0aGlzLHQubGluZSxlKSxpPXRoaXMuZG9jLm1vZGUsbz1nbihyLHQubGluZSksbD1uZXcgU3Ioby50ZXh0LHRoaXMub3B0aW9ucy50YWJTaXplKTtsLnBvczx0LmNoJiYhbC5lb2woKTspe2wuc3RhcnQ9bC5wb3M7dmFyIHM9aS50b2tlbihsLG4pfXJldHVybntzdGFydDpsLnN0YXJ0LGVuZDpsLnBvcyxzdHJpbmc6bC5jdXJyZW50KCksY2xhc3NOYW1lOnN8fG51bGwsdHlwZTpzfHxudWxsLHN0YXRlOm59fSxnZXRUb2tlblR5cGVBdDpmdW5jdGlvbih0KXt0PVFlKHRoaXMuZG9jLHQpO3ZhciBlPUpyKHRoaXMsZ24odGhpcy5kb2MsdC5saW5lKSkscj0wLG49KGUubGVuZ3RoLTEpLzIsaT10LmNoO2lmKDA9PWkpcmV0dXJuIGVbMl07Zm9yKDs7KXt2YXIgbz1yK24+PjE7aWYoKG8/ZVsyKm8tMV06MCk+PWkpbj1vO2Vsc2V7aWYoIShlWzIqbysxXTxpKSlyZXR1cm4gZVsyKm8rMl07cj1vKzF9fX0sZ2V0TW9kZUF0OmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZG9jLm1vZGU7cmV0dXJuIHIuaW5uZXJNb2RlP3QuaW5uZXJNb2RlKHIsdGhpcy5nZXRUb2tlbkF0KGUpLnN0YXRlKS5tb2RlOnJ9LGdldEhlbHBlcjpmdW5jdGlvbih0LGUpe2lmKGdvLmhhc093blByb3BlcnR5KGUpKXt2YXIgcj1nb1tlXSxuPXRoaXMuZ2V0TW9kZUF0KHQpO3JldHVybiBuW2VdJiZyW25bZV1dfHxuLmhlbHBlclR5cGUmJnJbbi5oZWxwZXJUeXBlXXx8cltuLm5hbWVdfX0sZ2V0U3RhdGVBZnRlcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3JldHVybiB0PXFlKHIsbnVsbD09dD9yLmZpcnN0K3Iuc2l6ZS0xOnQpLHoodGhpcyx0KzEsZSl9LGN1cnNvckNvb3JkczpmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3JldHVybiByPW51bGw9PXQ/bi5oZWFkOiJvYmplY3QiPT10eXBlb2YgdD9RZSh0aGlzLmRvYyx0KTp0P24uZnJvbTpuLnRvLFEodGhpcyxyLGV8fCJwYWdlIil9LGNoYXJDb29yZHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcSh0aGlzLFFlKHRoaXMuZG9jLHQpLGV8fCJwYWdlIil9LGNvb3Jkc0NoYXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1aKHRoaXMsdCxlfHwicGFnZSIpLHRlKHRoaXMsdC5sZWZ0LHQudG9wKX0sbGluZUF0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHt0b3A6dCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wLHhuKHRoaXMuZG9jLHQrdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpfSxoZWlnaHRBdExpbmU6ZnVuY3Rpb24odCxlKXt2YXIgcj0hMSxuPXRoaXMuZG9jLmZpcnN0K3RoaXMuZG9jLnNpemUtMTt0PHRoaXMuZG9jLmZpcnN0P3Q9dGhpcy5kb2MuZmlyc3Q6dD5uJiYodD1uLHI9ITApO3ZhciBpPWduKHRoaXMuZG9jLHQpO3JldHVybiAkKHRoaXMsZ24odGhpcy5kb2MsdCkse3RvcDowLGxlZnQ6MH0sZXx8InBhZ2UiKS50b3ArKHI/aS5oZWlnaHQ6MCl9LGRlZmF1bHRUZXh0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHJlKHRoaXMuZGlzcGxheSl9LGRlZmF1bHRDaGFyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gbmUodGhpcy5kaXNwbGF5KX0sc2V0R3V0dGVyTWFya2VyOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49dC5ndXR0ZXJNYXJrZXJzfHwodC5ndXR0ZXJNYXJrZXJzPXt9KTtyZXR1cm4gbltlXT1yLCFyJiZsaShuKSYmKHQuZ3V0dGVyTWFya2Vycz1udWxsKSwhMH0pfSksY2xlYXJHdXR0ZXI6bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kb2Msbj1yLmZpcnN0O3IuaXRlcihmdW5jdGlvbihyKXtyLmd1dHRlck1hcmtlcnMmJnIuZ3V0dGVyTWFya2Vyc1t0XSYmKHIuZ3V0dGVyTWFya2Vyc1t0XT1udWxsLHVlKGUsbixuKzEpLGxpKHIuZ3V0dGVyTWFya2VycykmJihyLmd1dHRlck1hcmtlcnM9bnVsbCkpLCsrbn0pfSksYWRkTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyI7aWYodFtuXSl7aWYobmV3IFJlZ0V4cCgiKD86XnxcXHMpIityKyIoPzokfFxccykiKS50ZXN0KHRbbl0pKXJldHVybiExO3Rbbl0rPSIgIityfWVsc2UgdFtuXT1yO3JldHVybiEwfSl9KSxyZW1vdmVMaW5lQ2xhc3M6bGUobnVsbCxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRyKHRoaXMsdCxmdW5jdGlvbih0KXt2YXIgbj0idGV4dCI9PWU/InRleHRDbGFzcyI6ImJhY2tncm91bmQiPT1lPyJiZ0NsYXNzIjoid3JhcENsYXNzIixpPXRbbl07aWYoIWkpcmV0dXJuITE7aWYobnVsbD09cil0W25dPW51bGw7ZWxzZXt2YXIgbz1pLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3IrIig/OiR8XFxzKykiKSk7aWYoIW8pcmV0dXJuITE7dmFyIGw9by5pbmRleCtvWzBdLmxlbmd0aDt0W25dPWkuc2xpY2UoMCxvLmluZGV4KSsoby5pbmRleCYmbCE9aS5sZW5ndGg/IiAiOiIiKStpLnNsaWNlKGwpfHxudWxsfXJldHVybiEwfSl9KSxhZGRMaW5lV2lkZ2V0OmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBqcih0aGlzLHQsZSxyKX0pLHJlbW92ZUxpbmVXaWRnZXQ6ZnVuY3Rpb24odCl7dC5jbGVhcigpfSxsaW5lSW5mbzpmdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCF0cih0aGlzLmRvYyx0KSlyZXR1cm4gbnVsbDt2YXIgZT10O2lmKHQ9Z24odGhpcy5kb2MsdCksIXQpcmV0dXJuIG51bGx9ZWxzZXt2YXIgZT1ibih0KTtpZihudWxsPT1lKXJldHVybiBudWxsfXJldHVybntsaW5lOmUsaGFuZGxlOnQsdGV4dDp0LnRleHQsZ3V0dGVyTWFya2Vyczp0Lmd1dHRlck1hcmtlcnMsdGV4dENsYXNzOnQudGV4dENsYXNzLGJnQ2xhc3M6dC5iZ0NsYXNzLHdyYXBDbGFzczp0LndyYXBDbGFzcyx3aWRnZXRzOnQud2lkZ2V0c319LGdldFZpZXdwb3J0OmZ1bmN0aW9uKCl7cmV0dXJue2Zyb206dGhpcy5kaXNwbGF5LnNob3dpbmdGcm9tLHRvOnRoaXMuZGlzcGxheS5zaG93aW5nVG99fSxhZGRXaWRnZXQ6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz10aGlzLmRpc3BsYXk7dD1RKHRoaXMsUWUodGhpcy5kb2MsdCkpO3ZhciBsPXQuYm90dG9tLHM9dC5sZWZ0O2lmKGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnNpemVyLmFwcGVuZENoaWxkKGUpLCJvdmVyIj09bilsPXQudG9wO2Vsc2UgaWYoImFib3ZlIj09bnx8Im5lYXIiPT1uKXt2YXIgYT1NYXRoLm1heChvLndyYXBwZXIuY2xpZW50SGVpZ2h0LHRoaXMuZG9jLmhlaWdodCksdT1NYXRoLm1heChvLnNpemVyLmNsaWVudFdpZHRoLG8ubGluZVNwYWNlLmNsaWVudFdpZHRoKTsoImFib3ZlIj09bnx8dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ+YSkmJnQudG9wPmUub2Zmc2V0SGVpZ2h0P2w9dC50b3AtZS5vZmZzZXRIZWlnaHQ6dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ8PWEmJihsPXQuYm90dG9tKSxzK2Uub2Zmc2V0V2lkdGg+dSYmKHM9dS1lLm9mZnNldFdpZHRoKX1lLnN0eWxlLnRvcD1sKyJweCIsZS5zdHlsZS5sZWZ0PWUuc3R5bGUucmlnaHQ9IiIsInJpZ2h0Ij09aT8ocz1vLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgsZS5zdHlsZS5yaWdodD0iMHB4Iik6KCJsZWZ0Ij09aT9zPTA6Im1pZGRsZSI9PWkmJihzPShvLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgpLzIpLGUuc3R5bGUubGVmdD1zKyJweCIpLHImJmFyKHRoaXMscyxsLHMrZS5vZmZzZXRXaWR0aCxsK2Uub2Zmc2V0SGVpZ2h0KX0sdHJpZ2dlck9uS2V5RG93bjpsZShudWxsLFdlKSxleGVjQ29tbWFuZDpmdW5jdGlvbih0KXtyZXR1cm4gbW9bdF0odGhpcyl9LGZpbmRQb3NIOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTE7MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIG89MCxsPVFlKHRoaXMuZG9jLHQpO2U+byYmKGw9cHIodGhpcy5kb2MsbCxpLHIsbiksIWwuaGl0U2lkZSk7KytvKTtyZXR1cm4gbH0sbW92ZUg6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3I9bi5zaGlmdHx8bi5leHRlbmR8fGplKG4uZnJvbSxuLnRvKT9wcih0aGlzLmRvYyxuLmhlYWQsdCxlLHRoaXMub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkpOjA+dD9uLmZyb206bi50byxlcih0aGlzLmRvYyxyLHIsdCl9KSxkZWxldGVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYy5zZWw7amUoci5mcm9tLHIudG8pP19lKHRoaXMuZG9jLCIiLHIuZnJvbSxwcih0aGlzLmRvYyxyLmhlYWQsdCxlLCExKSwiK2RlbGV0ZSIpOl9lKHRoaXMuZG9jLCIiLHIuZnJvbSxyLnRvLCIrZGVsZXRlIiksdGhpcy5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwfSksZmluZFBvc1Y6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MSxvPW47MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIGw9MCxzPVFlKHRoaXMuZG9jLHQpO2U+bDsrK2wpe3ZhciBhPVEodGhpcyxzLCJkaXYiKTtpZihudWxsPT1vP289YS5sZWZ0OmEubGVmdD1vLHM9Z3IodGhpcyxhLGkscikscy5oaXRTaWRlKWJyZWFrfXJldHVybiBzfSxtb3ZlVjpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsLG49USh0aGlzLHIuaGVhZCwiZGl2Iik7bnVsbCE9ci5nb2FsQ29sdW1uJiYobi5sZWZ0PXIuZ29hbENvbHVtbik7dmFyIGk9Z3IodGhpcyxuLHQsZSk7InBhZ2UiPT1lJiZmcih0aGlzLDAscSh0aGlzLGksImRpdiIpLnRvcC1uLnRvcCksZXIodGhpcy5kb2MsaSxpLHQpLHIuZ29hbENvbHVtbj1uLmxlZnR9KSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7KG51bGw9PXR8fHQhPXRoaXMuc3RhdGUub3ZlcndyaXRlKSYmKCh0aGlzLnN0YXRlLm92ZXJ3cml0ZT0hdGhpcy5zdGF0ZS5vdmVyd3JpdGUpP3RoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itb3ZlcndyaXRlIjp0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZT10aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1vdmVyd3JpdGUiLCIiKSl9LGhhc0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuZm9jdXNlZH0sc2Nyb2xsVG86bGUobnVsbCxmdW5jdGlvbih0LGUpe2NyKHRoaXMsdCxlKX0pLGdldFNjcm9sbEluZm86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRpc3BsYXkuc2Nyb2xsZXIsZT1UbztyZXR1cm57bGVmdDp0LnNjcm9sbExlZnQsdG9wOnQuc2Nyb2xsVG9wLGhlaWdodDp0LnNjcm9sbEhlaWdodC1lLHdpZHRoOnQuc2Nyb2xsV2lkdGgtZSxjbGllbnRIZWlnaHQ6dC5jbGllbnRIZWlnaHQtZSxjbGllbnRXaWR0aDp0LmNsaWVudFdpZHRoLWV9fSxzY3JvbGxJbnRvVmlldzpsZShudWxsLGZ1bmN0aW9uKHQsZSl7bnVsbD09dD90PXtmcm9tOnRoaXMuZG9jLnNlbC5oZWFkLHRvOm51bGx9OiJudW1iZXIiPT10eXBlb2YgdD90PXtmcm9tOlllKHQsMCksdG86bnVsbH06bnVsbD09dC5mcm9tJiYodD17ZnJvbTp0LHRvOm51bGx9KSx0LnRvfHwodC50bz10LmZyb20pLGV8fChlPTApO3ZhciByPXQ7bnVsbCE9dC5mcm9tLmxpbmUmJih0aGlzLmN1ck9wLnNjcm9sbFRvUG9zPXtmcm9tOnQuZnJvbSx0bzp0LnRvLG1hcmdpbjplfSxyPXtmcm9tOlEodGhpcyx0LmZyb20pLHRvOlEodGhpcyx0LnRvKX0pO3ZhciBuPXVyKHRoaXMsTWF0aC5taW4oci5mcm9tLmxlZnQsci50by5sZWZ0KSxNYXRoLm1pbihyLmZyb20udG9wLHIudG8udG9wKS1lLE1hdGgubWF4KHIuZnJvbS5yaWdodCxyLnRvLnJpZ2h0KSxNYXRoLm1heChyLmZyb20uYm90dG9tLHIudG8uYm90dG9tKStlKTtjcih0aGlzLG4uc2Nyb2xsTGVmdCxuLnNjcm9sbFRvcCl9KSxzZXRTaXplOmxlKG51bGwsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8L15cZCskLy50ZXN0KFN0cmluZyh0KSk/dCsicHgiOnR9bnVsbCE9dCYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoPXIodCkpLG51bGwhPWUmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQ9cihlKSksdGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZyYmKHRoaXMuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aD10aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcz0wKSx0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwfSksb3BlcmF0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBhZSh0aGlzLHQpfSxyZWZyZXNoOmxlKG51bGwsZnVuY3Rpb24oKXt2YXIgdD1udWxsPT10aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDtfKHRoaXMpLGNyKHRoaXMsdGhpcy5kb2Muc2Nyb2xsTGVmdCx0aGlzLmRvYy5zY3JvbGxUb3ApLHVlKHRoaXMpLHQmJm8odGhpcyl9KSxzd2FwRG9jOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kb2M7cmV0dXJuIGUuY209bnVsbCxwbih0aGlzLHQpLF8odGhpcyksZGUodGhpcywhMCksY3IodGhpcyx0LnNjcm9sbExlZnQsdC5zY3JvbGxUb3ApLFVuKHRoaXMsInN3YXBEb2MiLHRoaXMsZSksZX0pLGdldElucHV0RmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0fSxnZXRXcmFwcGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcn0sZ2V0U2Nyb2xsZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcn0sZ2V0R3V0dGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyc319LGpuKHQpO3ZhciBzbz10Lm9wdGlvbkhhbmRsZXJzPXt9LGFvPXQuZGVmYXVsdHM9e30sdW89dC5Jbml0PXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLkluaXQifX07eXIoInZhbHVlIiwiIixmdW5jdGlvbih0LGUpe3Quc2V0VmFsdWUoZSl9LCEwKSx5cigibW9kZSIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZG9jLm1vZGVPcHRpb249ZSxyKHQpfSwhMCkseXIoImluZGVudFVuaXQiLDIsciwhMCkseXIoImluZGVudFdpdGhUYWJzIiwhMSkseXIoInNtYXJ0SW5kZW50IiwhMCkseXIoInRhYlNpemUiLDQsZnVuY3Rpb24odCl7cih0KSxfKHQpLHVlKHQpfSwhMCkseXIoInNwZWNpYWxDaGFycyIsL1tcdFx1MDAwMC1cdTAwMTlcdTAwYWRcdTIwMGJcdTIwMjhcdTIwMjlcdWZlZmZdL2csZnVuY3Rpb24odCxlKXt0Lm9wdGlvbnMuc3BlY2lhbENoYXJzPW5ldyBSZWdFeHAoZS5zb3VyY2UrKGUudGVzdCgiCSIpPyIiOiJ8CSIpLCJnIiksdC5yZWZyZXNoKCl9LCEwKSx5cigic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsbm4sZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigiZWxlY3RyaWNDaGFycyIsITApLHlyKCJydGxNb3ZlVmlzdWFsbHkiLCFVaSkseXIoIndob2xlTGluZVVwZGF0ZUJlZm9yZSIsITApLHlyKCJ0aGVtZSIsImRlZmF1bHQiLGZ1bmN0aW9uKHQpe3ModCksYSh0KX0sITApLHlyKCJrZXlNYXAiLCJkZWZhdWx0IixsKSx5cigiZXh0cmFLZXlzIixudWxsKSx5cigib25LZXlFdmVudCIsbnVsbCkseXIoIm9uRHJhZ0V2ZW50IixudWxsKSx5cigibGluZVdyYXBwaW5nIiwhMSxuLCEwKSx5cigiZ3V0dGVycyIsW10sZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZml4ZWRHdXR0ZXIiLCEwLGZ1bmN0aW9uKHQsZSl7dC5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdD1lP3kodC5kaXNwbGF5KSsicHgiOiIwIix0LnJlZnJlc2goKX0sITApLHlyKCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciIsITEsZCwhMCkseXIoImxpbmVOdW1iZXJzIiwhMSxmdW5jdGlvbih0KXtoKHQub3B0aW9ucyksYSh0KX0sITApLHlyKCJmaXJzdExpbmVOdW1iZXIiLDEsYSwhMCkseXIoImxpbmVOdW1iZXJGb3JtYXR0ZXIiLGZ1bmN0aW9uKHQpe3JldHVybiB0fSxhLCEwKSx5cigic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCExLEEsITApLHlyKCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUiLCEwKSx5cigicmVhZE9ubHkiLCExLGZ1bmN0aW9uKHQsZSl7Im5vY3Vyc29yIj09ZT8oemUodCksdC5kaXNwbGF5LmlucHV0LmJsdXIoKSx0LmRpc3BsYXkuZGlzYWJsZWQ9ITApOih0LmRpc3BsYXkuZGlzYWJsZWQ9ITEsZXx8ZGUodCwhMCkpfSkseXIoImRyYWdEcm9wIiwhMCkseXIoImN1cnNvckJsaW5rUmF0ZSIsNTMwKSx5cigiY3Vyc29yU2Nyb2xsTWFyZ2luIiwwKSx5cigiY3Vyc29ySGVpZ2h0IiwxKSx5cigid29ya1RpbWUiLDEwMCkseXIoIndvcmtEZWxheSIsMTAwKSx5cigiZmxhdHRlblNwYW5zIiwhMCkseXIoInBvbGxJbnRlcnZhbCIsMTAwKSx5cigidW5kb0RlcHRoIiw0MCxmdW5jdGlvbih0LGUpe3QuZG9jLmhpc3RvcnkudW5kb0RlcHRoPWV9KSx5cigiaGlzdG9yeUV2ZW50RGVsYXkiLDUwMCkseXIoInZpZXdwb3J0TWFyZ2luIiwxMCxmdW5jdGlvbih0KXt0LnJlZnJlc2goKX0sITApLHlyKCJtYXhIaWdobGlnaHRMZW5ndGgiLDFlNCxmdW5jdGlvbih0KXtyKHQpLHQucmVmcmVzaCgpfSwhMCkseXIoImNydWRlTWVhc3VyaW5nRnJvbSIsMWU0KSx5cigibW92ZUlucHV0V2l0aEN1cnNvciIsITAsZnVuY3Rpb24odCxlKXtlfHwodC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcD10LmRpc3BsYXkuaW5wdXREaXYuc3R5bGUubGVmdD0wKX0pLHlyKCJ0YWJpbmRleCIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5pbnB1dC50YWJJbmRleD1lfHwiIn0pLHlyKCJhdXRvZm9jdXMiLG51bGwpO3ZhciBjbz10Lm1vZGVzPXt9LGZvPXQubWltZU1vZGVzPXt9O3QuZGVmaW5lTW9kZT1mdW5jdGlvbihlLHIpe2lmKHQuZGVmYXVsdHMubW9kZXx8Im51bGwiPT1lfHwodC5kZWZhdWx0cy5tb2RlPWUpLGFyZ3VtZW50cy5sZW5ndGg+Mil7ci5kZXBlbmRlbmNpZXM9W107Zm9yKHZhciBuPTI7bjxhcmd1bWVudHMubGVuZ3RoOysrbilyLmRlcGVuZGVuY2llcy5wdXNoKGFyZ3VtZW50c1tuXSl9Y29bZV09cn0sdC5kZWZpbmVNSU1FPWZ1bmN0aW9uKHQsZSl7Zm9bdF09ZX0sdC5yZXNvbHZlTW9kZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJmZvLmhhc093blByb3BlcnR5KGUpKWU9Zm9bZV07ZWxzZSBpZihlJiYic3RyaW5nIj09dHlwZW9mIGUubmFtZSYmZm8uaGFzT3duUHJvcGVydHkoZS5uYW1lKSl7dmFyIHI9Zm9bZS5uYW1lXTtlPWVpKHIsZSksZS5uYW1lPXIubmFtZX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSYmL15bXHdcLV0rXC9bXHdcLV0rXCt4bWwkLy50ZXN0KGUpKXJldHVybiB0LnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/e25hbWU6ZX06ZXx8e25hbWU6Im51bGwifX0sdC5nZXRNb2RlPWZ1bmN0aW9uKGUscil7dmFyIHI9dC5yZXNvbHZlTW9kZShyKSxuPWNvW3IubmFtZV07aWYoIW4pcmV0dXJuIHQuZ2V0TW9kZShlLCJ0ZXh0L3BsYWluIik7dmFyIGk9bihlLHIpO2lmKGhvLmhhc093blByb3BlcnR5KHIubmFtZSkpe3ZhciBvPWhvW3IubmFtZV07Zm9yKHZhciBsIGluIG8pby5oYXNPd25Qcm9wZXJ0eShsKSYmKGkuaGFzT3duUHJvcGVydHkobCkmJihpWyJfIitsXT1pW2xdKSxpW2xdPW9bbF0pfXJldHVybiBpLm5hbWU9ci5uYW1lLGl9LHQuZGVmaW5lTW9kZSgibnVsbCIsZnVuY3Rpb24oKXtyZXR1cm57dG9rZW46ZnVuY3Rpb24odCl7dC5za2lwVG9FbmQoKX19fSksdC5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwibnVsbCIpO3ZhciBobz10Lm1vZGVFeHRlbnNpb25zPXt9O3QuZXh0ZW5kTW9kZT1mdW5jdGlvbih0LGUpe3ZhciByPWhvLmhhc093blByb3BlcnR5KHQpP2hvW3RdOmhvW3RdPXt9O3JpKGUscil9LHQuZGVmaW5lRXh0ZW5zaW9uPWZ1bmN0aW9uKGUscil7dC5wcm90b3R5cGVbZV09cn0sdC5kZWZpbmVEb2NFeHRlbnNpb249ZnVuY3Rpb24odCxlKXt3by5wcm90b3R5cGVbdF09ZX0sdC5kZWZpbmVPcHRpb249eXI7dmFyIHBvPVtdO3QuZGVmaW5lSW5pdEhvb2s9ZnVuY3Rpb24odCl7cG8ucHVzaCh0KX07dmFyIGdvPXQuaGVscGVycz17fTt0LnJlZ2lzdGVySGVscGVyPWZ1bmN0aW9uKGUscixuKXtnby5oYXNPd25Qcm9wZXJ0eShlKXx8KGdvW2VdPXRbZV09e30pLGdvW2VdW3JdPW59LHQuaXNXb3JkQ2hhcj1vaSx0LmNvcHlTdGF0ZT1icix0LnN0YXJ0U3RhdGU9eHIsdC5pbm5lck1vZGU9ZnVuY3Rpb24odCxlKXtmb3IoO3QuaW5uZXJNb2RlOyl7dmFyIHI9dC5pbm5lck1vZGUoZSk7aWYoIXJ8fHIubW9kZT09dClicmVhaztlPXIuc3RhdGUsdD1yLm1vZGV9cmV0dXJuIHJ8fHttb2RlOnQsc3RhdGU6ZX19O3ZhciBtbz10LmNvbW1hbmRzPXtzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dC5zZXRTZWxlY3Rpb24oWWUodC5maXJzdExpbmUoKSwwKSxZZSh0Lmxhc3RMaW5lKCkpKX0sa2lsbExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoITApLHI9dC5nZXRDdXJzb3IoITEpLG49IWplKGUscik7bnx8dC5nZXRMaW5lKGUubGluZSkubGVuZ3RoIT1lLmNoP3QucmVwbGFjZVJhbmdlKCIiLGUsbj9yOlllKGUubGluZSksIitkZWxldGUiKTp0LnJlcGxhY2VSYW5nZSgiIixlLFllKGUubGluZSsxLDApLCIrZGVsZXRlIil9LGRlbGV0ZUxpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKS5saW5lO3QucmVwbGFjZVJhbmdlKCIiLFllKGUsMCksWWUoZSksIitkZWxldGUiKX0sZGVsTGluZUxlZnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLmxpbmUsMCksZSwiK2RlbGV0ZSIpfSx1bmRvOmZ1bmN0aW9uKHQpe3QudW5kbygpfSxyZWRvOmZ1bmN0aW9uKHQpe3QucmVkbygpfSxnb0RvY1N0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCkpfSxnb0RvY0VuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0Lmxhc3RMaW5lKCkpKX0sZ29MaW5lU3RhcnQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oeGkodCx0LmdldEN1cnNvcigpLmxpbmUpKX0sZ29MaW5lU3RhcnRTbWFydDpmdW5jdGlvbih0KXt2YXIgZT10LmdldEN1cnNvcigpLHI9eGkodCxlLmxpbmUpLG49dC5nZXRMaW5lSGFuZGxlKHIubGluZSksaT13bihuKTtpZihpJiYwIT1pWzBdLmxldmVsKXQuZXh0ZW5kU2VsZWN0aW9uKHIpO2Vsc2V7dmFyIG89TWF0aC5tYXgoMCxuLnRleHQuc2VhcmNoKC9cUy8pKSxsPWUubGluZT09ci5saW5lJiZlLmNoPD1vJiZlLmNoO3QuZXh0ZW5kU2VsZWN0aW9uKFllKHIubGluZSxsPzA6bykpfX0sZ29MaW5lRW5kOmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKENpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVJpZ2h0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6dC5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGgrMTAwLHRvcDplfSwiZGl2IikpfSxnb0xpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwibGluZSIpfSxnb0xpbmVEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwibGluZSIpfSxnb1BhZ2VVcDpmdW5jdGlvbih0KXt0Lm1vdmVWKC0xLCJwYWdlIil9LGdvUGFnZURvd246ZnVuY3Rpb24odCl7dC5tb3ZlVigxLCJwYWdlIil9LGdvQ2hhckxlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiY2hhciIpfSxnb0NoYXJSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNoYXIiKX0sZ29Db2x1bW5MZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNvbHVtbiIpfSxnb0NvbHVtblJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiY29sdW1uIil9LGdvV29yZExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwid29yZCIpfSxnb0dyb3VwUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJncm91cCIpfSxnb0dyb3VwTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJncm91cCIpfSxnb1dvcmRSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsIndvcmQiKX0sZGVsQ2hhckJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImNoYXIiKX0sZGVsQ2hhckFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJjaGFyIil9LGRlbFdvcmRCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJ3b3JkIil9LGRlbFdvcmRBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwid29yZCIpfSxkZWxHcm91cEJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImdyb3VwIil9LGRlbEdyb3VwQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsImdyb3VwIil9LGluZGVudEF1dG86ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iil9LGluZGVudE1vcmU6ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oImFkZCIpfSxpbmRlbnRMZXNzOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpfSxpbnNlcnRUYWI6ZnVuY3Rpb24odCl7dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LGRlZmF1bHRUYWI6ZnVuY3Rpb24odCl7dC5zb21ldGhpbmdTZWxlY3RlZCgpP3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKTp0LnJlcGxhY2VTZWxlY3Rpb24oIgkiLCJlbmQiLCIraW5wdXQiKX0sdHJhbnNwb3NlQ2hhcnM6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXQuZ2V0TGluZShlLmxpbmUpO2UuY2g+MCYmZS5jaDxyLmxlbmd0aC0xJiZ0LnJlcGxhY2VSYW5nZShyLmNoYXJBdChlLmNoKStyLmNoYXJBdChlLmNoLTEpLFllKGUubGluZSxlLmNoLTEpLFllKGUubGluZSxlLmNoKzEpKX0sbmV3bGluZUFuZEluZGVudDpmdW5jdGlvbih0KXtsZSh0LGZ1bmN0aW9uKCl7dC5yZXBsYWNlU2VsZWN0aW9uKCJcbiIsImVuZCIsIitpbnB1dCIpLHQuaW5kZW50TGluZSh0LmdldEN1cnNvcigpLmxpbmUsbnVsbCwhMCl9KSgpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7dC50b2dnbGVPdmVyd3JpdGUoKX19LHZvPXQua2V5TWFwPXt9O3ZvLmJhc2ljPXtMZWZ0OiJnb0NoYXJMZWZ0IixSaWdodDoiZ29DaGFyUmlnaHQiLFVwOiJnb0xpbmVVcCIsRG93bjoiZ29MaW5lRG93biIsRW5kOiJnb0xpbmVFbmQiLEhvbWU6ImdvTGluZVN0YXJ0U21hcnQiLFBhZ2VVcDoiZ29QYWdlVXAiLFBhZ2VEb3duOiJnb1BhZ2VEb3duIixEZWxldGU6ImRlbENoYXJBZnRlciIsQmFja3NwYWNlOiJkZWxDaGFyQmVmb3JlIiwiU2hpZnQtQmFja3NwYWNlIjoiZGVsQ2hhckJlZm9yZSIsVGFiOiJkZWZhdWx0VGFiIiwiU2hpZnQtVGFiIjoiaW5kZW50QXV0byIsRW50ZXI6Im5ld2xpbmVBbmRJbmRlbnQiLEluc2VydDoidG9nZ2xlT3ZlcndyaXRlIn0sdm8ucGNEZWZhdWx0PXsiQ3RybC1BIjoic2VsZWN0QWxsIiwiQ3RybC1EIjoiZGVsZXRlTGluZSIsIkN0cmwtWiI6InVuZG8iLCJTaGlmdC1DdHJsLVoiOiJyZWRvIiwiQ3RybC1ZIjoicmVkbyIsIkN0cmwtSG9tZSI6ImdvRG9jU3RhcnQiLCJBbHQtVXAiOiJnb0RvY1N0YXJ0IiwiQ3RybC1FbmQiOiJnb0RvY0VuZCIsIkN0cmwtRG93biI6ImdvRG9jRW5kIiwiQ3RybC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJDdHJsLVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQWx0LUxlZnQiOiJnb0xpbmVTdGFydCIsIkFsdC1SaWdodCI6ImdvTGluZUVuZCIsIkN0cmwtQmFja3NwYWNlIjoiZGVsR3JvdXBCZWZvcmUiLCJDdHJsLURlbGV0ZSI6ImRlbEdyb3VwQWZ0ZXIiLCJDdHJsLVMiOiJzYXZlIiwiQ3RybC1GIjoiZmluZCIsIkN0cmwtRyI6ImZpbmROZXh0IiwiU2hpZnQtQ3RybC1HIjoiZmluZFByZXYiLCJTaGlmdC1DdHJsLUYiOiJyZXBsYWNlIiwiU2hpZnQtQ3RybC1SIjoicmVwbGFjZUFsbCIsIkN0cmwtWyI6ImluZGVudExlc3MiLCJDdHJsLV0iOiJpbmRlbnRNb3JlIixmYWxsdGhyb3VnaDoiYmFzaWMifSx2by5tYWNEZWZhdWx0PXsiQ21kLUEiOiJzZWxlY3RBbGwiLCJDbWQtRCI6ImRlbGV0ZUxpbmUiLCJDbWQtWiI6InVuZG8iLCJTaGlmdC1DbWQtWiI6InJlZG8iLCJDbWQtWSI6InJlZG8iLCJDbWQtVXAiOiJnb0RvY1N0YXJ0IiwiQ21kLUVuZCI6ImdvRG9jRW5kIiwiQ21kLURvd24iOiJnb0RvY0VuZCIsIkFsdC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJBbHQtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJDbWQtTGVmdCI6ImdvTGluZVN0YXJ0IiwiQ21kLVJpZ2h0IjoiZ29MaW5lRW5kIiwiQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1BbHQtQmFja3NwYWNlIjoiZGVsR3JvdXBBZnRlciIsIkFsdC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ21kLVMiOiJzYXZlIiwiQ21kLUYiOiJmaW5kIiwiQ21kLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUNtZC1HIjoiZmluZFByZXYiLCJDbWQtQWx0LUYiOiJyZXBsYWNlIiwiU2hpZnQtQ21kLUFsdC1GIjoicmVwbGFjZUFsbCIsIkNtZC1bIjoiaW5kZW50TGVzcyIsIkNtZC1dIjoiaW5kZW50TW9yZSIsIkNtZC1CYWNrc3BhY2UiOiJkZWxMaW5lTGVmdCIsZmFsbHRocm91Z2g6WyJiYXNpYyIsImVtYWNzeSJdfSx2b1siZGVmYXVsdCJdPUtpP3ZvLm1hY0RlZmF1bHQ6dm8ucGNEZWZhdWx0LHZvLmVtYWNzeT17IkN0cmwtRiI6ImdvQ2hhclJpZ2h0IiwiQ3RybC1CIjoiZ29DaGFyTGVmdCIsIkN0cmwtUCI6ImdvTGluZVVwIiwiQ3RybC1OIjoiZ29MaW5lRG93biIsIkFsdC1GIjoiZ29Xb3JkUmlnaHQiLCJBbHQtQiI6ImdvV29yZExlZnQiLCJDdHJsLUEiOiJnb0xpbmVTdGFydCIsIkN0cmwtRSI6ImdvTGluZUVuZCIsIkN0cmwtViI6ImdvUGFnZURvd24iLCJTaGlmdC1DdHJsLVYiOiJnb1BhZ2VVcCIsIkN0cmwtRCI6ImRlbENoYXJBZnRlciIsIkN0cmwtSCI6ImRlbENoYXJCZWZvcmUiLCJBbHQtRCI6ImRlbFdvcmRBZnRlciIsIkFsdC1CYWNrc3BhY2UiOiJkZWxXb3JkQmVmb3JlIiwiQ3RybC1LIjoia2lsbExpbmUiLCJDdHJsLVQiOiJ0cmFuc3Bvc2VDaGFycyJ9LHQubG9va3VwS2V5PXdyLHQuaXNNb2RpZmllcktleT1Mcix0LmtleU5hbWU9a3IsdC5mcm9tVGV4dEFyZWE9ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7ZS52YWx1ZT11LmdldFZhbHVlKCl9aWYocnx8KHI9e30pLHIudmFsdWU9ZS52YWx1ZSwhci50YWJpbmRleCYmZS50YWJpbmRleCYmKHIudGFiaW5kZXg9ZS50YWJpbmRleCksIXIucGxhY2Vob2xkZXImJmUucGxhY2Vob2xkZXImJihyLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIpLG51bGw9PXIuYXV0b2ZvY3VzKXt2YXIgaT1kb2N1bWVudC5ib2R5O3RyeXtpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2gobyl7fXIuYXV0b2ZvY3VzPWk9PWV8fG51bGwhPWUuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSYmaT09ZG9jdW1lbnQuYm9keX1pZihlLmZvcm0mJihHbihlLmZvcm0sInN1Ym1pdCIsbiksIXIubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkpe3ZhciBsPWUuZm9ybSxzPWwuc3VibWl0O3RyeXt2YXIgYT1sLnN1Ym1pdD1mdW5jdGlvbigpe24oKSxsLnN1Ym1pdD1zLGwuc3VibWl0KCksbC5zdWJtaXQ9YX19Y2F0Y2gobyl7fX1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciB1PXQoZnVuY3Rpb24odCl7ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGUubmV4dFNpYmxpbmcpfSxyKTtyZXR1cm4gdS5zYXZlPW4sdS5nZXRUZXh0QXJlYT1mdW5jdGlvbigpe3JldHVybiBlfSx1LnRvVGV4dEFyZWE9ZnVuY3Rpb24oKXtuKCksZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUuZ2V0V3JhcHBlckVsZW1lbnQoKSksZS5zdHlsZS5kaXNwbGF5PSIiLGUuZm9ybSYmKFZuKGUuZm9ybSwic3VibWl0IixuKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JtLnN1Ym1pdCYmKGUuZm9ybS5zdWJtaXQ9cykpfSx1fSxTci5wcm90b3R5cGU9e2VvbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcz49dGhpcy5zdHJpbmcubGVuZ3RofSxzb2w6ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy5wb3N9LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKXx8dm9pZCAwfSxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPHRoaXMuc3RyaW5nLmxlbmd0aD90aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyk6dm9pZCAwfSxlYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTtpZigic3RyaW5nIj09dHlwZW9mIHQpdmFyIHI9ZT09dDtlbHNlIHZhciByPWUmJih0LnRlc3Q/dC50ZXN0KGUpOnQoZSkpO3JldHVybiByPygrK3RoaXMucG9zLGUpOnZvaWQgMH0sZWF0V2hpbGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucG9zO3RoaXMuZWF0KHQpOyk7cmV0dXJuIHRoaXMucG9zPmV9LGVhdFNwYWNlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucG9zOy9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpOykrK3RoaXMucG9zO3JldHVybiB0aGlzLnBvcz50fSxza2lwVG9FbmQ6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0cmluZy5sZW5ndGh9LHNraXBUbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN0cmluZy5pbmRleE9mKHQsdGhpcy5wb3MpO3JldHVybiBlPi0xPyh0aGlzLnBvcz1lLCEwKTp2b2lkIDB9LGJhY2tVcDpmdW5jdGlvbih0KXt0aGlzLnBvcy09dH0sY29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENvbHVtblBvczx0aGlzLnN0YXJ0JiYodGhpcy5sYXN0Q29sdW1uVmFsdWU9Wm4odGhpcy5zdHJpbmcsdGhpcy5zdGFydCx0aGlzLnRhYlNpemUsdGhpcy5sYXN0Q29sdW1uUG9zLHRoaXMubGFzdENvbHVtblZhbHVlKSx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5zdGFydCksdGhpcy5sYXN0Q29sdW1uVmFsdWV9LGluZGVudGF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFpuKHRoaXMuc3RyaW5nLG51bGwsdGhpcy50YWJTaXplKX0sbWF0Y2g6ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIG49dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHQpO3JldHVybiBuJiZuLmluZGV4PjA/bnVsbDoobiYmZSE9PSExJiYodGhpcy5wb3MrPW5bMF0ubGVuZ3RoKSxuKX12YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gcj90LnRvTG93ZXJDYXNlKCk6dH0sbz10aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsdC5sZW5ndGgpO3JldHVybiBpKG8pPT1pKHQpPyhlIT09ITEmJih0aGlzLnBvcys9dC5sZW5ndGgpLCEwKTp2b2lkIDB9LGN1cnJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCx0aGlzLnBvcyl9fSx0LlN0cmluZ1N0cmVhbT1Tcix0LlRleHRNYXJrZXI9TXIsam4oTXIpLE1yLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKXt2YXIgdD10aGlzLmRvYy5jbSxlPXQmJiF0LmN1ck9wO2lmKGUmJmllKHQpLFluKHRoaXMsImNsZWFyIikpe3ZhciByPXRoaXMuZmluZCgpO3ImJlVuKHRoaXMsImNsZWFyIixyLmZyb20sci50byl9Zm9yKHZhciBuPW51bGwsaT1udWxsLG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGw9dGhpcy5saW5lc1tvXSxzPU5yKGwubWFya2VkU3BhbnMsdGhpcyk7bnVsbCE9cy50byYmKGk9Ym4obCkpLGwubWFya2VkU3BhbnM9RHIobC5tYXJrZWRTcGFucyxzKSxudWxsIT1zLmZyb20/bj1ibihsKTp0aGlzLmNvbGxhcHNlZCYmIVZyKHRoaXMuZG9jLGwpJiZ0JiZ5bihsLHJlKHQuZGlzcGxheSkpfWlmKHQmJnRoaXMuY29sbGFwc2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZylmb3IodmFyIG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGE9R3IodC5kb2MsdGhpcy5saW5lc1tvXSksdT1jKHQuZG9jLGEpO3U+dC5kaXNwbGF5Lm1heExpbmVMZW5ndGgmJih0LmRpc3BsYXkubWF4TGluZT1hLHQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoPXUsdC5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKX1udWxsIT1uJiZ0JiZ1ZSh0LG4saSsxKSx0aGlzLmxpbmVzLmxlbmd0aD0wLHRoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITAsdGhpcy5hdG9taWMmJnRoaXMuZG9jLmNhbnRFZGl0JiYodGhpcy5kb2MuY2FudEVkaXQ9ITEsdCYmaXIodCkpLGUmJm9lKHQpfX0sTXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyPTA7cjx0aGlzLmxpbmVzLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGluZXNbcl0saT1OcihuLm1hcmtlZFNwYW5zLHRoaXMpO2lmKG51bGwhPWkuZnJvbXx8bnVsbCE9aS50byl7dmFyIG89Ym4obik7bnVsbCE9aS5mcm9tJiYodD1ZZShvLGkuZnJvbSkpLG51bGwhPWkudG8mJihlPVllKG8saS50bykpfX1yZXR1cm4iYm9va21hcmsiPT10aGlzLnR5cGU/dDp0JiZ7ZnJvbTp0LHRvOmV9fSxNci5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZmluZCgpLGU9dGhpcy5kb2MuY207aWYodCYmZSl7ImJvb2ttYXJrIiE9dGhpcy50eXBlJiYodD10LmZyb20pO3ZhciByPWduKHRoaXMuZG9jLHQubGluZSk7aWYoRyhlLHIpLHQubGluZT49ZS5kaXNwbGF5LnNob3dpbmdGcm9tJiZ0LmxpbmU8ZS5kaXNwbGF5LnNob3dpbmdUbyl7Zm9yKHZhciBuPWUuZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpaWYobi5saW5lT2JqPT1yKXtuLm9mZnNldEhlaWdodCE9ci5oZWlnaHQmJnluKHIsbi5vZmZzZXRIZWlnaHQpOwpicmVha31hZShlLGZ1bmN0aW9uKCl7ZS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPWUuY3VyT3AuZm9yY2VVcGRhdGU9ZS5jdXJPcC51cGRhdGVNYXhMaW5lPSEwfSl9fX0sTXIucHJvdG90eXBlLmF0dGFjaExpbmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7ZS5tYXliZUhpZGRlbk1hcmtlcnMmJi0xIT10aShlLm1heWJlSGlkZGVuTWFya2Vycyx0aGlzKXx8KGUubWF5YmVVbmhpZGRlbk1hcmtlcnN8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX10aGlzLmxpbmVzLnB1c2godCl9LE1yLnByb3RvdHlwZS5kZXRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGluZXMuc3BsaWNlKHRpKHRoaXMubGluZXMsdCksMSksIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7KGUubWF5YmVIaWRkZW5NYXJrZXJzfHwoZS5tYXliZUhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfX0sdC5TaGFyZWRUZXh0TWFya2VyPUFyLGpuKEFyKSxBci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMDtmb3IodmFyIHQ9MDt0PHRoaXMubWFya2Vycy5sZW5ndGg7Kyt0KXRoaXMubWFya2Vyc1t0XS5jbGVhcigpO1VuKHRoaXMsImNsZWFyIil9fSxBci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaW1hcnkuZmluZCgpfTt2YXIgeW89dC5MaW5lV2lkZ2V0PWZ1bmN0aW9uKHQsZSxyKXtpZihyKWZvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0aGlzW25dPXJbbl0pO3RoaXMuY209dCx0aGlzLm5vZGU9ZX07am4oeW8pLHlvLnByb3RvdHlwZS5jbGVhcj1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMubGluZS53aWRnZXRzLGU9Ym4odGhpcy5saW5lKTtpZihudWxsIT1lJiZ0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdPT10aGlzJiZ0LnNwbGljZShyLS0sMSk7dC5sZW5ndGh8fCh0aGlzLmxpbmUud2lkZ2V0cz1udWxsKTt2YXIgbj1Dbih0aGlzLmNtLHRoaXMubGluZSk8dGhpcy5jbS5kb2Muc2Nyb2xsVG9wO3luKHRoaXMubGluZSxNYXRoLm1heCgwLHRoaXMubGluZS5oZWlnaHQtWXIodGhpcykpKSxuJiZmcih0aGlzLmNtLDAsLXRoaXMuaGVpZ2h0KSx1ZSh0aGlzLmNtLGUsZSsxKX19KSx5by5wcm90b3R5cGUuY2hhbmdlZD1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVpZ2h0O3RoaXMuaGVpZ2h0PW51bGw7dmFyIGU9WXIodGhpcyktdDtpZihlKXt5bih0aGlzLmxpbmUsdGhpcy5saW5lLmhlaWdodCtlKTt2YXIgcj1ibih0aGlzLmxpbmUpO3VlKHRoaXMuY20scixyKzEpfX0pO3ZhciBibz10LkxpbmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LFhyKHRoaXMsZSksdGhpcy5oZWlnaHQ9cj9yKHRoaXMpOjF9O2puKGJvKSxiby5wcm90b3R5cGUubGluZU5vPWZ1bmN0aW9uKCl7cmV0dXJuIGJuKHRoaXMpfTt2YXIgeG89e307Zm4ucHJvdG90eXBlPXtjaHVua1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saW5lcy5sZW5ndGh9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQsbj10K2U7bj5yOysrcil7dmFyIGk9dGhpcy5saW5lc1tyXTt0aGlzLmhlaWdodC09aS5oZWlnaHQsWnIoaSksVW4oaSwiZGVsZXRlIil9dGhpcy5saW5lcy5zcGxpY2UodCxlKX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7dC5zcGxpY2UuYXBwbHkodCxbdC5sZW5ndGgsMF0uY29uY2F0KHRoaXMubGluZXMpKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGVpZ2h0Kz1yLHRoaXMubGluZXM9dGhpcy5saW5lcy5zbGljZSgwLHQpLmNvbmNhdChlKS5jb25jYXQodGhpcy5saW5lcy5zbGljZSh0KSk7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtpPm47KytuKWVbbl0ucGFyZW50PXRoaXN9LGl0ZXJOOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dCtlO24+dDsrK3QpaWYocih0aGlzLmxpbmVzW3RdKSlyZXR1cm4hMH19LGhuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24odCxlKXt0aGlzLnNpemUtPWU7Zm9yKHZhciByPTA7cjx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+dCl7dmFyIG89TWF0aC5taW4oZSxpLXQpLGw9bi5oZWlnaHQ7aWYobi5yZW1vdmVJbm5lcih0LG8pLHRoaXMuaGVpZ2h0LT1sLW4uaGVpZ2h0LGk9PW8mJih0aGlzLmNoaWxkcmVuLnNwbGljZShyLS0sMSksbi5wYXJlbnQ9bnVsbCksMD09KGUtPW8pKWJyZWFrO3Q9MH1lbHNlIHQtPWl9aWYodGhpcy5zaXplLWU8MjUpe3ZhciBzPVtdO3RoaXMuY29sbGFwc2UocyksdGhpcy5jaGlsZHJlbj1bbmV3IGZuKHMpXSx0aGlzLmNoaWxkcmVuWzBdLnBhcmVudD10aGlzfX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmNoaWxkcmVuLmxlbmd0aDtyPmU7KytlKXRoaXMuY2hpbGRyZW5bZV0uY29sbGFwc2UodCl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpemUrPWUubGVuZ3RoLHRoaXMuaGVpZ2h0Kz1yO2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD49dCl7aWYoby5pbnNlcnRJbm5lcih0LGUsciksby5saW5lcyYmby5saW5lcy5sZW5ndGg+NTApe2Zvcig7by5saW5lcy5sZW5ndGg+NTA7KXt2YXIgcz1vLmxpbmVzLnNwbGljZShvLmxpbmVzLmxlbmd0aC0yNSwyNSksYT1uZXcgZm4ocyk7by5oZWlnaHQtPWEuaGVpZ2h0LHRoaXMuY2hpbGRyZW4uc3BsaWNlKG4rMSwwLGEpLGEucGFyZW50PXRoaXN9dGhpcy5tYXliZVNwaWxsKCl9YnJlYWt9dC09bH19LG1heWJlU3BpbGw6ZnVuY3Rpb24oKXtpZighKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPD0xMCkpe3ZhciB0PXRoaXM7ZG97dmFyIGU9dC5jaGlsZHJlbi5zcGxpY2UodC5jaGlsZHJlbi5sZW5ndGgtNSw1KSxyPW5ldyBobihlKTtpZih0LnBhcmVudCl7dC5zaXplLT1yLnNpemUsdC5oZWlnaHQtPXIuaGVpZ2h0O3ZhciBuPXRpKHQucGFyZW50LmNoaWxkcmVuLHQpO3QucGFyZW50LmNoaWxkcmVuLnNwbGljZShuKzEsMCxyKX1lbHNle3ZhciBpPW5ldyBobih0LmNoaWxkcmVuKTtpLnBhcmVudD10LHQuY2hpbGRyZW49W2kscl0sdD1pfXIucGFyZW50PXQucGFyZW50fXdoaWxlKHQuY2hpbGRyZW4ubGVuZ3RoPjEwKTt0LnBhcmVudC5tYXliZVNwaWxsKCl9fSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10aGlzLmNoaWxkcmVuW25dLGw9by5jaHVua1NpemUoKTtpZihsPnQpe3ZhciBzPU1hdGgubWluKGUsbC10KTtpZihvLml0ZXJOKHQscyxyKSlyZXR1cm4hMDtpZigwPT0oZS09cykpYnJlYWs7dD0wfWVsc2UgdC09bH19fTt2YXIgQ289MCx3bz10LkRvYz1mdW5jdGlvbih0LGUscil7aWYoISh0aGlzIGluc3RhbmNlb2Ygd28pKXJldHVybiBuZXcgd28odCxlLHIpO251bGw9PXImJihyPTApLGhuLmNhbGwodGhpcyxbbmV3IGZuKFtuZXcgYm8oIiIsbnVsbCldKV0pLHRoaXMuZmlyc3Q9cix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbExlZnQ9MCx0aGlzLmNhbnRFZGl0PSExLHRoaXMuaGlzdG9yeT1MbigpLHRoaXMuY2xlYW5HZW5lcmF0aW9uPTEsdGhpcy5mcm9udGllcj1yO3ZhciBuPVllKHIsMCk7dGhpcy5zZWw9e2Zyb206bix0bzpuLGhlYWQ6bixhbmNob3I6bixzaGlmdDohMSxleHRlbmQ6ITEsZ29hbENvbHVtbjpudWxsfSx0aGlzLmlkPSsrQ28sdGhpcy5tb2RlT3B0aW9uPWUsInN0cmluZyI9PXR5cGVvZiB0JiYodD16byh0KSksY24odGhpcyx7ZnJvbTpuLHRvOm4sdGV4dDp0fSxudWxsLHtoZWFkOm4sYW5jaG9yOm59KX07d28ucHJvdG90eXBlPWVpKGhuLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6d28saXRlcjpmdW5jdGlvbih0LGUscil7cj90aGlzLml0ZXJOKHQtdGhpcy5maXJzdCxlLXQscik6dGhpcy5pdGVyTih0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplLHQpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lLmxlbmd0aDtpPm47KytuKXIrPWVbbl0uaGVpZ2h0O3RoaXMuaW5zZXJ0SW5uZXIodC10aGlzLmZpcnN0LGUscil9LHJlbW92ZTpmdW5jdGlvbih0LGUpe3RoaXMucmVtb3ZlSW5uZXIodC10aGlzLmZpcnN0LGUpfSxnZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT12bih0aGlzLHRoaXMuZmlyc3QsdGhpcy5maXJzdCt0aGlzLnNpemUpO3JldHVybiB0PT09ITE/ZTplLmpvaW4odHx8IlxuIil9LHNldFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVllKHRoaXMuZmlyc3QsMCkscj10aGlzLmZpcnN0K3RoaXMuc2l6ZS0xO0JlKHRoaXMse2Zyb206ZSx0bzpZZShyLGduKHRoaXMscikudGV4dC5sZW5ndGgpLHRleHQ6em8odCksb3JpZ2luOiJzZXRWYWx1ZSJ9LHtoZWFkOmUsYW5jaG9yOmV9LCEwKX0scmVwbGFjZVJhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe2U9UWUodGhpcyxlKSxyPXI/UWUodGhpcyxyKTplLF9lKHRoaXMsdCxlLHIsbil9LGdldFJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1tbih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSk7cmV0dXJuIHI9PT0hMT9uOm4uam9pbihyfHwiXG4iKX0sZ2V0TGluZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldExpbmVIYW5kbGUodCk7cmV0dXJuIGUmJmUudGV4dH0sc2V0TGluZTpmdW5jdGlvbih0LGUpe3RyKHRoaXMsdCkmJl9lKHRoaXMsZSxZZSh0LDApLFFlKHRoaXMsWWUodCkpKX0scmVtb3ZlTGluZTpmdW5jdGlvbih0KXt0P19lKHRoaXMsIiIsUWUodGhpcyxZZSh0LTEpKSxRZSh0aGlzLFllKHQpKSk6X2UodGhpcywiIixZZSgwLDApLFFlKHRoaXMsWWUoMSwwKSkpfSxnZXRMaW5lSGFuZGxlOmZ1bmN0aW9uKHQpe3JldHVybiB0cih0aGlzLHQpP2duKHRoaXMsdCk6dm9pZCAwfSxnZXRMaW5lTnVtYmVyOmZ1bmN0aW9uKHQpe3JldHVybiBibih0KX0sZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ9Z24odGhpcyx0KSksR3IodGhpcyx0KX0sbGluZUNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0sZmlyc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3R9LGxhc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3QrdGhpcy5zaXplLTF9LGNsaXBQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIFFlKHRoaXMsdCl9LGdldEN1cnNvcjpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuc2VsO3JldHVybiBlPW51bGw9PXR8fCJoZWFkIj09dD9yLmhlYWQ6ImFuY2hvciI9PXQ/ci5hbmNob3I6ImVuZCI9PXR8fHQ9PT0hMT9yLnRvOnIuZnJvbSxaZShlKX0sc29tZXRoaW5nU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hamUodGhpcy5zZWwuaGVhZCx0aGlzLnNlbC5hbmNob3IpfSxzZXRDdXJzb3I6c2UoZnVuY3Rpb24odCxlLHIpe3ZhciBuPVFlKHRoaXMsIm51bWJlciI9PXR5cGVvZiB0P1llKHQsZXx8MCk6dCk7cj9lcih0aGlzLG4pOm5yKHRoaXMsbixuKX0pLHNldFNlbGVjdGlvbjpzZShmdW5jdGlvbih0LGUscil7bnIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZXx8dCkscil9KSxleHRlbmRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe2VyKHRoaXMsUWUodGhpcyx0KSxlJiZRZSh0aGlzLGUpLHIpfSksZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFJhbmdlKHRoaXMuc2VsLmZyb20sdGhpcy5zZWwudG8sdCl9LHJlcGxhY2VTZWxlY3Rpb246ZnVuY3Rpb24odCxlLHIpe0JlKHRoaXMse2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byx0ZXh0OnpvKHQpLG9yaWdpbjpyfSxlfHwiYXJvdW5kIil9LHVuZG86c2UoZnVuY3Rpb24oKXtWZSh0aGlzLCJ1bmRvIil9KSxyZWRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywicmVkbyIpfSksc2V0RXh0ZW5kaW5nOmZ1bmN0aW9uKHQpe3RoaXMuc2VsLmV4dGVuZD10fSxoaXN0b3J5U2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGlzdG9yeTtyZXR1cm57dW5kbzp0LmRvbmUubGVuZ3RoLHJlZG86dC51bmRvbmUubGVuZ3RofX0sY2xlYXJIaXN0b3J5OmZ1bmN0aW9uKCl7dGhpcy5oaXN0b3J5PUxuKHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKX0sbWFya0NsZWFuOmZ1bmN0aW9uKCl7dGhpcy5jbGVhbkdlbmVyYXRpb249dGhpcy5jaGFuZ2VHZW5lcmF0aW9uKCl9LGNoYW5nZUdlbmVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaXN0b3J5Lmxhc3RPcD10aGlzLmhpc3RvcnkubGFzdE9yaWdpbj1udWxsLHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9ufSxpc0NsZWFuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbj09KHR8fHRoaXMuY2xlYW5HZW5lcmF0aW9uKX0sZ2V0SGlzdG9yeTpmdW5jdGlvbigpe3JldHVybntkb25lOkhuKHRoaXMuaGlzdG9yeS5kb25lKSx1bmRvbmU6SG4odGhpcy5oaXN0b3J5LnVuZG9uZSl9fSxzZXRIaXN0b3J5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7ZS5kb25lPXQuZG9uZS5zbGljZSgwKSxlLnVuZG9uZT10LnVuZG9uZS5zbGljZSgwKX0sbWFya1RleHQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUcih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSxyLCJyYW5nZSIpfSxzZXRCb29rbWFyazpmdW5jdGlvbih0LGUpe3ZhciByPXtyZXBsYWNlZFdpdGg6ZSYmKG51bGw9PWUubm9kZVR5cGU/ZS53aWRnZXQ6ZSksaW5zZXJ0TGVmdDplJiZlLmluc2VydExlZnR9O3JldHVybiB0PVFlKHRoaXMsdCksVHIodGhpcyx0LHQsciwiYm9va21hcmsiKX0sZmluZE1hcmtzQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLHQpO3ZhciBlPVtdLHI9Z24odGhpcyx0LmxpbmUpLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07KG51bGw9PWkuZnJvbXx8aS5mcm9tPD10LmNoKSYmKG51bGw9PWkudG98fGkudG8+PXQuY2gpJiZlLnB1c2goaS5tYXJrZXIucGFyZW50fHxpLm1hcmtlcil9cmV0dXJuIGV9LGdldEFsbE1hcmtzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihlKXt2YXIgcj1lLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pbnVsbCE9cltuXS5mcm9tJiZ0LnB1c2gocltuXS5tYXJrZXIpfSksdH0scG9zRnJvbUluZGV4OmZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKG4pe3ZhciBpPW4udGV4dC5sZW5ndGgrMTtyZXR1cm4gaT50PyhlPXQsITApOih0LT1pLCsrcix2b2lkIDApfSksUWUodGhpcyxZZShyLGUpKX0saW5kZXhGcm9tUG9zOmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT10LmNoO3JldHVybiB0LmxpbmU8dGhpcy5maXJzdHx8dC5jaDwwPzA6KHRoaXMuaXRlcih0aGlzLmZpcnN0LHQubGluZSxmdW5jdGlvbih0KXtlKz10LnRleHQubGVuZ3RoKzF9KSxlKX0sY29weTpmdW5jdGlvbih0KXt2YXIgZT1uZXcgd28odm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKSx0aGlzLm1vZGVPcHRpb24sdGhpcy5maXJzdCk7cmV0dXJuIGUuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLGUuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbExlZnQsZS5zZWw9e2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byxoZWFkOnRoaXMuc2VsLmhlYWQsYW5jaG9yOnRoaXMuc2VsLmFuY2hvcixzaGlmdDp0aGlzLnNlbC5zaGlmdCxleHRlbmQ6ITEsZ29hbENvbHVtbjp0aGlzLnNlbC5nb2FsQ29sdW1ufSx0JiYoZS5oaXN0b3J5LnVuZG9EZXB0aD10aGlzLmhpc3RvcnkudW5kb0RlcHRoLGUuc2V0SGlzdG9yeSh0aGlzLmdldEhpc3RvcnkoKSkpLGV9LGxpbmtlZERvYzpmdW5jdGlvbih0KXt0fHwodD17fSk7dmFyIGU9dGhpcy5maXJzdCxyPXRoaXMuZmlyc3QrdGhpcy5zaXplO251bGwhPXQuZnJvbSYmdC5mcm9tPmUmJihlPXQuZnJvbSksbnVsbCE9dC50byYmdC50bzxyJiYocj10LnRvKTt2YXIgbj1uZXcgd28odm4odGhpcyxlLHIpLHQubW9kZXx8dGhpcy5tb2RlT3B0aW9uLGUpO3JldHVybiB0LnNoYXJlZEhpc3QmJihuLmhpc3Rvcnk9dGhpcy5oaXN0b3J5KSwodGhpcy5saW5rZWR8fCh0aGlzLmxpbmtlZD1bXSkpLnB1c2goe2RvYzpuLHNoYXJlZEhpc3Q6dC5zaGFyZWRIaXN0fSksbi5saW5rZWQ9W3tkb2M6dGhpcyxpc1BhcmVudDohMCxzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH1dLG59LHVubGlua0RvYzpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdCYmKGU9ZS5kb2MpLHRoaXMubGlua2VkKWZvcih2YXIgcj0wO3I8dGhpcy5saW5rZWQubGVuZ3RoOysrcil7dmFyIG49dGhpcy5saW5rZWRbcl07aWYobi5kb2M9PWUpe3RoaXMubGlua2VkLnNwbGljZShyLDEpLGUudW5saW5rRG9jKHRoaXMpO2JyZWFrfX1pZihlLmhpc3Rvcnk9PXRoaXMuaGlzdG9yeSl7dmFyIGk9W2UuaWRdO2RuKGUsZnVuY3Rpb24odCl7aS5wdXNoKHQuaWQpfSwhMCksZS5oaXN0b3J5PUxuKCksZS5oaXN0b3J5LmRvbmU9SG4odGhpcy5oaXN0b3J5LmRvbmUsaSksZS5oaXN0b3J5LnVuZG9uZT1Ibih0aGlzLmhpc3RvcnkudW5kb25lLGkpfX0saXRlckxpbmtlZERvY3M6ZnVuY3Rpb24odCl7ZG4odGhpcyx0KX0sZ2V0TW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtfX0pLHdvLnByb3RvdHlwZS5lYWNoTGluZT13by5wcm90b3R5cGUuaXRlcjt2YXIgTG89Iml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciIuc3BsaXQoIiAiKTtmb3IodmFyIGtvIGluIHdvLnByb3RvdHlwZSl3by5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa28pJiZ0aShMbyxrbyk8MCYmKHQucHJvdG90eXBlW2tvXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLmRvYyxhcmd1bWVudHMpfX0od28ucHJvdG90eXBlW2tvXSkpO2puKHdvKSx0LmVfc3RvcD1Qbix0LmVfcHJldmVudERlZmF1bHQ9em4sdC5lX3N0b3BQcm9wYWdhdGlvbj1Jbjt2YXIgU28sTW89MDt0Lm9uPUduLHQub2ZmPVZuLHQuc2lnbmFsPUtuO3ZhciBUbz0zMCxBbz10LlBhc3M9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNvZGVNaXJyb3IuUGFzcyJ9fTskbi5wcm90b3R5cGU9e3NldDpmdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0aGlzLmlkKSx0aGlzLmlkPXNldFRpbWVvdXQoZSx0KX19LHQuY291bnRDb2x1bW49Wm47dmFyIEhvPVsiIl0sTm89L1tcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vLERvPS9bXHUwMzAwLVx1MDM2Rlx1MDQ4My1cdTA0ODdcdTA0ODgtXHUwNDg5XHUwNTkxLVx1MDVCRFx1MDVCRlx1MDVDMS1cdTA1QzJcdTA1QzQtXHUwNUM1XHUwNUM3XHUwNjEwLVx1MDYxQVx1MDY0Qi1cdTA2NUZcdTA2NzBcdTA2RDYtXHUwNkRDXHUwNkRGLVx1MDZFNFx1MDZFNy1cdTA2RThcdTA2RUEtXHUwNkVEXHVBNjZGXHUxREMw4oCTXHUxREZGXHUyMEQw4oCTXHUyMEZGXHVBNjcwLVx1QTY3Mlx1QTY3NC1cdUE2N0RcdUE2OUZcdWRjMDAtXHVkZmZmXHVGRTIw4oCTXHVGRTJGXS87dC5yZXBsYWNlR2V0UmVjdD1mdW5jdGlvbih0KXtmaT10fTt2YXIgV289ZnVuY3Rpb24oKXtpZihOaSlyZXR1cm4hMTt2YXIgdD1zaSgiZGl2Iik7cmV0dXJuImRyYWdnYWJsZSJpbiB0fHwiZHJhZ0Ryb3AiaW4gdH0oKTtUaT9oaT1mdW5jdGlvbih0LGUpe3JldHVybiAzNj09dC5jaGFyQ29kZUF0KGUtMSkmJjM5PT10LmNoYXJDb2RlQXQoZSl9OklpJiYhL1ZlcnNpb25cLyhbNi05XXxcZFxkKVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpP2hpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuL1wtW14gXC0/XXxcP1teICFcJ1wiXCksLlwtXC86O1w/XF1cfV0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9OldpJiYvQ2hyb21lXC8oPzoyOXxbMy05XVxkfFxkXGRcZClcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2hhckNvZGVBdChlLTEpO3JldHVybiByPj04MjA4JiY4MjEyPj1yfTpXaSYmKGhpPWZ1bmN0aW9uKHQsZSl7aWYoZT4xJiY0NT09dC5jaGFyQ29kZUF0KGUtMSkpe2lmKC9cdy8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1teXC0/XC5dLy50ZXN0KHQuY2hhckF0KGUpKSlyZXR1cm4hMDtpZihlPjImJi9bXGRcLixdLy50ZXN0KHQuY2hhckF0KGUtMikpJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITF9cmV0dXJuL1t+ISMlJiopPSt9XF1cXHxcIlwuPiw6O11bKHtbPF18LVteXC0/XC5cdTIwMTAtXHUyMDFmXHUyMDI2XXxcP1tcd35gQCMkJVxeJiooXz0re1t8PjxdfOKApltcd35gQCMkJVxeJiooXz0re1s+PF0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9KTt2YXIgT28sRW8sem89MyE9IlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1bXSxuPXQubGVuZ3RoO24+PWU7KXt2YXIgaT10LmluZGV4T2YoIlxuIixlKTstMT09aSYmKGk9dC5sZW5ndGgpO3ZhciBvPXQuc2xpY2UoZSwiXHIiPT10LmNoYXJBdChpLTEpP2ktMTppKSxsPW8uaW5kZXhPZigiXHIiKTstMSE9bD8oci5wdXNoKG8uc2xpY2UoMCxsKSksZSs9bCsxKTooci5wdXNoKG8pLGU9aSsxKX1yZXR1cm4gcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoL1xyXG4/fFxuLyl9O3Quc3BsaXRMaW5lcz16bzt2YXIgSW89d2luZG93LmdldFNlbGVjdGlvbj9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuc2VsZWN0aW9uU3RhcnQhPXQuc2VsZWN0aW9uRW5kfWNhdGNoKGUpe3JldHVybiExfX06ZnVuY3Rpb24odCl7dHJ5e3ZhciBlPXQub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX1jYXRjaChyKXt9cmV0dXJuIGUmJmUucGFyZW50RWxlbWVudCgpPT10PzAhPWUuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsZSk6ITF9LEZvPWZ1bmN0aW9uKCl7dmFyIHQ9c2koImRpdiIpO3JldHVybiJvbmNvcHkiaW4gdD8hMDoodC5zZXRBdHRyaWJ1dGUoIm9uY29weSIsInJldHVybjsiKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5vbmNvcHkpfSgpLFBvPXszOiJFbnRlciIsODoiQmFja3NwYWNlIiw5OiJUYWIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ3RybCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2MiLDMyOiJTcGFjZSIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkxlZnQiLDM4OiJVcCIsMzk6IlJpZ2h0Iiw0MDoiRG93biIsNDQ6IlByaW50U2NybiIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsNTk6IjsiLDkxOiJNb2QiLDkyOiJNb2QiLDkzOiJNb2QiLDEwOToiLSIsMTA3OiI9IiwxMjc6IkRlbGV0ZSIsMTg2OiI7IiwxODc6Ij0iLDE4ODoiLCIsMTg5OiItIiwxOTA6Ii4iLDE5MToiLyIsMTkyOiJgIiwyMTk6IlsiLDIyMDoiXFwiLDIyMToiXSIsMjIyOiInIiw2MzI3NjoiUGFnZVVwIiw2MzI3NzoiUGFnZURvd24iLDYzMjc1OiJFbmQiLDYzMjczOiJIb21lIiw2MzIzNDoiTGVmdCIsNjMyMzI6IlVwIiw2MzIzNToiUmlnaHQiLDYzMjMzOiJEb3duIiw2MzMwMjoiSW5zZXJ0Iiw2MzI3MjoiRGVsZXRlIn07dC5rZXlOYW1lcz1QbyxmdW5jdGlvbigpe2Zvcih2YXIgdD0wOzEwPnQ7dCsrKVBvW3QrNDhdPVN0cmluZyh0KTtmb3IodmFyIHQ9NjU7OTA+PXQ7dCsrKVBvW3RdPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7Zm9yKHZhciB0PTE7MTI+PXQ7dCsrKVBvW3QrMTExXT1Qb1t0KzYzMjM1XT0iRiIrdH0oKTt2YXIgUm8sQm89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiAyNTU+PXQ/ZS5jaGFyQXQodCk6dD49MTQyNCYmMTUyND49dD8iUiI6dD49MTUzNiYmMTc5MT49dD9yLmNoYXJBdCh0LTE1MzYpOnQ+PTE3OTImJjIyMjA+PXQ/InIiOiJMIn12YXIgZT0iYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTCIscj0icnJycnJycnJycnJyLHJOTm1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1ycnJycnJybm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1ObW1tbXJycnJycnJycnJycnJycnJyciIsbj0vW1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUwNzAwLVx1MDhhY10vLGk9L1tzdHdOXS8sbz0vW0xScl0vLGw9L1tMYjFuXS8scz0vWzFuXS8sYT0iTCI7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFuLnRlc3QoZSkpcmV0dXJuITE7Zm9yKHZhciByLHU9ZS5sZW5ndGgsYz1bXSxmPTA7dT5mOysrZiljLnB1c2gocj10KGUuY2hhckNvZGVBdChmKSkpO2Zvcih2YXIgZj0wLGg9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyJtIj09cj9jW2ZdPWg6aD1yfWZvcih2YXIgZj0wLGQ9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyIxIj09ciYmInIiPT1kP2NbZl09Im4iOm8udGVzdChyKSYmKGQ9ciwiciI9PXImJihjW2ZdPSJSIikpfWZvcih2YXIgZj0xLGg9Y1swXTt1LTE+ZjsrK2Ype3ZhciByPWNbZl07IisiPT1yJiYiMSI9PWgmJiIxIj09Y1tmKzFdP2NbZl09IjEiOiIsIiE9cnx8aCE9Y1tmKzFdfHwiMSIhPWgmJiJuIiE9aHx8KGNbZl09aCksaD1yfWZvcih2YXIgZj0wO3U+ZjsrK2Ype3ZhciByPWNbZl07aWYoIiwiPT1yKWNbZl09Ik4iO2Vsc2UgaWYoIiUiPT1yKXtmb3IodmFyIHA9ZisxO3U+cCYmIiUiPT1jW3BdOysrcCk7Zm9yKHZhciBnPWYmJiIhIj09Y1tmLTFdfHx1LTE+cCYmIjEiPT1jW3BdPyIxIjoiTiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfX1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiTCI9PWQmJiIxIj09cj9jW2ZdPSJMIjpvLnRlc3QocikmJihkPXIpfWZvcih2YXIgZj0wO3U+ZjsrK2YpaWYoaS50ZXN0KGNbZl0pKXtmb3IodmFyIHA9ZisxO3U+cCYmaS50ZXN0KGNbcF0pOysrcCk7Zm9yKHZhciB2PSJMIj09KGY/Y1tmLTFdOmEpLHk9IkwiPT0odS0xPnA/Y1twXTphKSxnPXZ8fHk/IkwiOiJSIixtPWY7cD5tOysrbSljW21dPWc7Zj1wLTF9Zm9yKHZhciBiLHg9W10sZj0wO3U+ZjspaWYobC50ZXN0KGNbZl0pKXt2YXIgQz1mO2ZvcigrK2Y7dT5mJiZsLnRlc3QoY1tmXSk7KytmKTt4LnB1c2goe2Zyb206Qyx0bzpmLGxldmVsOjB9KX1lbHNle3ZhciB3PWYsTD14Lmxlbmd0aDtmb3IoKytmO3U+ZiYmIkwiIT1jW2ZdOysrZik7Zm9yKHZhciBtPXc7Zj5tOylpZihzLnRlc3QoY1ttXSkpe20+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86bSxsZXZlbDoxfSk7dmFyIGs9bTtmb3IoKyttO2Y+bSYmcy50ZXN0KGNbbV0pOysrbSk7eC5zcGxpY2UoTCwwLHtmcm9tOmssdG86bSxsZXZlbDoyfSksdz1tfWVsc2UrK207Zj53JiZ4LnNwbGljZShMLDAse2Zyb206dyx0bzpmLGxldmVsOjF9KX1yZXR1cm4gMT09eFswXS5sZXZlbCYmKGI9ZS5tYXRjaCgvXlxzKy8pKSYmKHhbMF0uZnJvbT1iWzBdLmxlbmd0aCx4LnVuc2hpZnQoe2Zyb206MCx0bzpiWzBdLmxlbmd0aCxsZXZlbDowfSkpLDE9PVFuKHgpLmxldmVsJiYoYj1lLm1hdGNoKC9ccyskLykpJiYoUW4oeCkudG8tPWJbMF0ubGVuZ3RoLHgucHVzaCh7ZnJvbTp1LWJbMF0ubGVuZ3RoLHRvOnUsbGV2ZWw6MH0pKSx4WzBdLmxldmVsIT1Rbih4KS5sZXZlbCYmeC5wdXNoKHtmcm9tOnUsdG86dSxsZXZlbDp4WzBdLmxldmVsfSkseH19KCk7cmV0dXJuIHQudmVyc2lvbj0iMy4yMC4wIix0fSgpO1BLBwjGXJGwv68BAL+vAQBQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAABzdGF0aWNcbGliXGhpZ2hsaWdodC5taW4uanN2YXIgaGxqcz1uZXcgZnVuY3Rpb24oKXtmdW5jdGlvbiBsKG8pe3JldHVybiBvLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvPC9nbSwiJmx0OyIpLnJlcGxhY2UoLz4vZ20sIiZndDsiKX1mdW5jdGlvbiBiKHApe2Zvcih2YXIgbz1wLmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpe2lmKG8ubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkNPREUiKXtyZXR1cm4gb31pZighKG8ubm9kZVR5cGU9PTMmJm8ubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe2JyZWFrfX19ZnVuY3Rpb24gaChwLG8pe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwocC5jaGlsZE5vZGVzLGZ1bmN0aW9uKHEpe2lmKHEubm9kZVR5cGU9PTMpe3JldHVybiBvP3Eubm9kZVZhbHVlLnJlcGxhY2UoL1xuL2csIiIpOnEubm9kZVZhbHVlfWlmKHEubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cmV0dXJuIlxuIn1yZXR1cm4gaChxLG8pfSkuam9pbigiIil9ZnVuY3Rpb24gYShxKXt2YXIgcD0ocS5jbGFzc05hbWUrIiAiKyhxLnBhcmVudE5vZGU/cS5wYXJlbnROb2RlLmNsYXNzTmFtZToiIikpLnNwbGl0KC9ccysvKTtwPXAubWFwKGZ1bmN0aW9uKHIpe3JldHVybiByLnJlcGxhY2UoL15sYW5ndWFnZS0vLCIiKX0pO2Zvcih2YXIgbz0wO288cC5sZW5ndGg7bysrKXtpZihlW3Bbb11dfHxwW29dPT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJuIHBbb119fX1mdW5jdGlvbiBjKHEpe3ZhciBvPVtdOyhmdW5jdGlvbiBwKHIscyl7Zm9yKHZhciB0PXIuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZyl7aWYodC5ub2RlVHlwZT09Myl7cys9dC5ub2RlVmFsdWUubGVuZ3RofWVsc2V7aWYodC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT0iQlIiKXtzKz0xfWVsc2V7aWYodC5ub2RlVHlwZT09MSl7by5wdXNoKHtldmVudDoic3RhcnQiLG9mZnNldDpzLG5vZGU6dH0pO3M9cCh0LHMpO28ucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDpzLG5vZGU6dH0pfX19fXJldHVybiBzfSkocSwwKTtyZXR1cm4gb31mdW5jdGlvbiBqKHAscix2KXt2YXIgcT0wO3ZhciB5PSIiO3ZhciBzPVtdO2Z1bmN0aW9uIHUoKXtpZighcC5sZW5ndGh8fCFyLmxlbmd0aCl7cmV0dXJuIHAubGVuZ3RoP3A6cn1pZihwWzBdLm9mZnNldCE9clswXS5vZmZzZXQpe3JldHVybihwWzBdLm9mZnNldDxyWzBdLm9mZnNldCk/cDpyfXJldHVybiByWzBdLmV2ZW50PT0ic3RhcnQiP3A6cn1mdW5jdGlvbiB0KEEpe2Z1bmN0aW9uIHooQil7cmV0dXJuIiAiK0Iubm9kZU5hbWUrJz0iJytsKEIudmFsdWUpKyciJ315Kz0iPCIrQS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChBLmF0dHJpYnV0ZXMseikuam9pbigiIikrIj4ifWZ1bmN0aW9uIHgoeil7eSs9IjwvIit6Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4ifWZ1bmN0aW9uIG8oeil7KHouZXZlbnQ9PSJzdGFydCI/dDp4KSh6Lm5vZGUpfXdoaWxlKHAubGVuZ3RofHxyLmxlbmd0aCl7dmFyIHc9dSgpO3krPWwodi5zdWJzdHIocSx3WzBdLm9mZnNldC1xKSk7cT13WzBdLm9mZnNldDtpZih3PT1wKXtzLnJldmVyc2UoKS5mb3JFYWNoKHgpO2Rve28ody5zcGxpY2UoMCwxKVswXSk7dz11KCl9d2hpbGUodz09cCYmdy5sZW5ndGgmJndbMF0ub2Zmc2V0PT1xKTtzLnJldmVyc2UoKS5mb3JFYWNoKHQpfWVsc2V7aWYod1swXS5ldmVudD09InN0YXJ0Iil7cy5wdXNoKHdbMF0ubm9kZSl9ZWxzZXtzLnBvcCgpfW8ody5zcGxpY2UoMCwxKVswXSl9fXJldHVybiB5K2wodi5zdWJzdHIocSkpfWZ1bmN0aW9uIGYocil7ZnVuY3Rpb24gbyhzKXtyZXR1cm4ocyYmcy5zb3VyY2UpfHxzfWZ1bmN0aW9uIHAodCxzKXtyZXR1cm4gUmVnRXhwKG8odCksIm0iKyhyLmNJPyJpIjoiIikrKHM/ImciOiIiKSl9ZnVuY3Rpb24gcSh6LHgpe2lmKHouY29tcGlsZWQpe3JldHVybn16LmNvbXBpbGVkPXRydWU7dmFyIHU9W107aWYoei5rKXt2YXIgcz17fTtmdW5jdGlvbiBBKEIsdCl7aWYoci5jSSl7dD10LnRvTG93ZXJDYXNlKCl9dC5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oQyl7dmFyIEQ9Qy5zcGxpdCgifCIpO3NbRFswXV09W0IsRFsxXT9OdW1iZXIoRFsxXSk6MV07dS5wdXNoKERbMF0pfSl9ei5sUj1wKHoubHx8IlxcYiIraGxqcy5JUisiXFxiKD8hXFwuKSIsdHJ1ZSk7aWYodHlwZW9mIHouaz09InN0cmluZyIpe0EoImtleXdvcmQiLHouayl9ZWxzZXtmb3IodmFyIHkgaW4gei5rKXtpZighei5rLmhhc093blByb3BlcnR5KHkpKXtjb250aW51ZX1BKHksei5rW3ldKX19ei5rPXN9aWYoeCl7aWYoei5iV0spe3ouYj0iXFxiKCIrdS5qb2luKCJ8IikrIilcXGIoPyFcXC4pXFxzKiJ9ei5iUj1wKHouYj96LmI6IlxcQnxcXGIiKTtpZighei5lJiYhei5lVyl7ei5lPSJcXEJ8XFxiIn1pZih6LmUpe3ouZVI9cCh6LmUpfXoudEU9byh6LmUpfHwiIjtpZih6LmVXJiZ4LnRFKXt6LnRFKz0oei5lPyJ8IjoiIikreC50RX19aWYoei5pKXt6LmlSPXAoei5pKX1pZih6LnI9PT11bmRlZmluZWQpe3oucj0xfWlmKCF6LmMpe3ouYz1bXX1mb3IodmFyIHc9MDt3PHouYy5sZW5ndGg7dysrKXtpZih6LmNbd109PSJzZWxmIil7ei5jW3ddPXp9cSh6LmNbd10seil9aWYoei5zdGFydHMpe3Eoei5zdGFydHMseCl9dmFyIHY9W107Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7di5wdXNoKG8oei5jW3ddLmIpKX1pZih6LnRFKXt2LnB1c2gobyh6LnRFKSl9aWYoei5pKXt2LnB1c2gobyh6LmkpKX16LnQ9di5sZW5ndGg/cCh2LmpvaW4oInwiKSx0cnVlKTp7ZXhlYzpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH19fXEocil9ZnVuY3Rpb24gZChFLEcsQyxNKXtmdW5jdGlvbiBvKHIsUCl7Zm9yKHZhciBPPTA7TzxQLmMubGVuZ3RoO08rKyl7dmFyIE49UC5jW09dLmJSLmV4ZWMocik7aWYoTiYmTi5pbmRleD09MCl7cmV0dXJuIFAuY1tPXX19fWZ1bmN0aW9uIHMoTixyKXtpZihOLmUmJk4uZVIudGVzdChyKSl7cmV0dXJuIE59aWYoTi5lVyl7cmV0dXJuIHMoTi5wYXJlbnQscil9fWZ1bmN0aW9uIHQocixOKXtyZXR1cm4gIUMmJk4uaSYmTi5pUi50ZXN0KHIpfWZ1bmN0aW9uIHkoTyxyKXt2YXIgTj1ILmNJP3JbMF0udG9Mb3dlckNhc2UoKTpyWzBdO3JldHVybiBPLmsuaGFzT3duUHJvcGVydHkoTikmJk8ua1tOXX1mdW5jdGlvbiBJKCl7dmFyIE49bCh3KTtpZighQi5rKXtyZXR1cm4gTn12YXIgcj0iIjt2YXIgUT0wO0IubFIubGFzdEluZGV4PTA7dmFyIE89Qi5sUi5leGVjKE4pO3doaWxlKE8pe3IrPU4uc3Vic3RyKFEsTy5pbmRleC1RKTt2YXIgUD15KEIsTyk7aWYoUCl7dis9UFsxXTtyKz0nPHNwYW4gY2xhc3M9IicrUFswXSsnIj4nK09bMF0rIjwvc3Bhbj4ifWVsc2V7cis9T1swXX1RPUIubFIubGFzdEluZGV4O089Qi5sUi5leGVjKE4pfXJldHVybiByK04uc3Vic3RyKFEpfWZ1bmN0aW9uIHooKXtpZihCLnNMJiYhZVtCLnNMXSl7cmV0dXJuIGwodyl9dmFyIE49Qi5zdWJMYW5ndWFnZU1vZGU9PSJjb250aW51b3VzIj9CLnRvcDp1bmRlZmluZWQ7dmFyIHI9Qi5zTD9kKEIuc0wsdyx0cnVlLE4pOmcodyk7aWYoQi5yPjApe3YrPXIua2V5d29yZF9jb3VudDtBKz1yLnJ9Qi50b3A9ci50b3A7cmV0dXJuJzxzcGFuIGNsYXNzPSInK3IubGFuZ3VhZ2UrJyI+JytyLnZhbHVlKyI8L3NwYW4+In1mdW5jdGlvbiBMKCl7cmV0dXJuIEIuc0whPT11bmRlZmluZWQ/eigpOkkoKX1mdW5jdGlvbiBLKE8scil7dmFyIE49Ty5jTj8nPHNwYW4gY2xhc3M9IicrTy5jTisnIj4nOiIiO2lmKE8uckIpe3grPU47dz0iIn1lbHNle2lmKE8uZUIpe3grPWwocikrTjt3PSIifWVsc2V7eCs9Tjt3PXJ9fUI9T2JqZWN0LmNyZWF0ZShPLHtwYXJlbnQ6e3ZhbHVlOkJ9fSl9ZnVuY3Rpb24gRChOLHIpe3crPU47aWYocj09PXVuZGVmaW5lZCl7eCs9TCgpO3JldHVybiAwfXZhciBQPW8ocixCKTtpZihQKXt4Kz1MKCk7SyhQLHIpO3JldHVybiBQLnJCPzA6ci5sZW5ndGh9dmFyIFE9cyhCLHIpO2lmKFEpe3ZhciBPPUI7aWYoIShPLnJFfHxPLmVFKSl7dys9cn14Kz1MKCk7ZG97aWYoQi5jTil7eCs9Ijwvc3Bhbj4ifUErPUIucjtCPUIucGFyZW50fXdoaWxlKEIhPVEucGFyZW50KTtpZihPLmVFKXt4Kz1sKHIpfXc9IiI7aWYoUS5zdGFydHMpe0soUS5zdGFydHMsIiIpfXJldHVybiBPLnJFPzA6ci5sZW5ndGh9aWYodChyLEIpKXt0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgbGV4ZW0gIicrcisnIiBmb3IgbW9kZSAiJysoQi5jTnx8Ijx1bm5hbWVkPiIpKyciJyl9dys9cjtyZXR1cm4gci5sZW5ndGh8fDF9dmFyIEg9ZVtFXTtpZighSCl7dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJytFKyciJyl9ZihIKTt2YXIgQj1NfHxIO3ZhciB4PSIiO2Zvcih2YXIgRj1CO0YhPUg7Rj1GLnBhcmVudCl7aWYoRi5jTil7eD0nPHNwYW4gY2xhc3M9IicrRi5jTisnIj4nK3h9fXZhciB3PSIiO3ZhciBBPTA7dmFyIHY9MDt0cnl7dmFyIHUscSxwPTA7d2hpbGUodHJ1ZSl7Qi50Lmxhc3RJbmRleD1wO3U9Qi50LmV4ZWMoRyk7aWYoIXUpe2JyZWFrfXE9RChHLnN1YnN0cihwLHUuaW5kZXgtcCksdVswXSk7cD11LmluZGV4K3F9RChHLnN1YnN0cihwKSk7Zm9yKHZhciBGPUI7Ri5wYXJlbnQ7Rj1GLnBhcmVudCl7aWYoRi5jTil7eCs9Ijwvc3Bhbj4ifX1yZXR1cm57cjpBLGtleXdvcmRfY291bnQ6dix2YWx1ZTp4LGxhbmd1YWdlOkUsdG9wOkJ9fWNhdGNoKEope2lmKEoubWVzc2FnZS5pbmRleE9mKCJJbGxlZ2FsIikhPS0xKXtyZXR1cm57cjowLGtleXdvcmRfY291bnQ6MCx2YWx1ZTpsKEcpfX1lbHNle3Rocm93IEp9fX1mdW5jdGlvbiBnKHMpe3ZhciBvPXtrZXl3b3JkX2NvdW50OjAscjowLHZhbHVlOmwocyl9O3ZhciBxPW87Zm9yKHZhciBwIGluIGUpe2lmKCFlLmhhc093blByb3BlcnR5KHApKXtjb250aW51ZX12YXIgcj1kKHAscyxmYWxzZSk7ci5sYW5ndWFnZT1wO2lmKHIua2V5d29yZF9jb3VudCtyLnI+cS5rZXl3b3JkX2NvdW50K3Eucil7cT1yfWlmKHIua2V5d29yZF9jb3VudCtyLnI+by5rZXl3b3JkX2NvdW50K28ucil7cT1vO289cn19aWYocS5sYW5ndWFnZSl7by5zZWNvbmRfYmVzdD1xfXJldHVybiBvfWZ1bmN0aW9uIGkocSxwLG8pe2lmKHApe3E9cS5yZXBsYWNlKC9eKCg8W14+XSs+fFx0KSspL2dtLGZ1bmN0aW9uKHIsdix1LHQpe3JldHVybiB2LnJlcGxhY2UoL1x0L2cscCl9KX1pZihvKXtxPXEucmVwbGFjZSgvXG4vZywiPGJyPiIpfXJldHVybiBxfWZ1bmN0aW9uIG0ocix1LHApe3ZhciB2PWgocixwKTt2YXIgdD1hKHIpO2lmKHQ9PSJuby1oaWdobGlnaHQiKXtyZXR1cm59dmFyIHc9dD9kKHQsdix0cnVlKTpnKHYpO3Q9dy5sYW5ndWFnZTt2YXIgbz1jKHIpO2lmKG8ubGVuZ3RoKXt2YXIgcT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKTtxLmlubmVySFRNTD13LnZhbHVlO3cudmFsdWU9aihvLGMocSksdil9dy52YWx1ZT1pKHcudmFsdWUsdSxwKTt2YXIgcz1yLmNsYXNzTmFtZTtpZighcy5tYXRjaCgiKFxcc3xeKShsYW5ndWFnZS0pPyIrdCsiKFxcc3wkKSIpKXtzPXM/KHMrIiAiK3QpOnR9ci5pbm5lckhUTUw9dy52YWx1ZTtyLmNsYXNzTmFtZT1zO3IucmVzdWx0PXtsYW5ndWFnZTp0LGt3Oncua2V5d29yZF9jb3VudCxyZTp3LnJ9O2lmKHcuc2Vjb25kX2Jlc3Qpe3Iuc2Vjb25kX2Jlc3Q9e2xhbmd1YWdlOncuc2Vjb25kX2Jlc3QubGFuZ3VhZ2Usa3c6dy5zZWNvbmRfYmVzdC5rZXl3b3JkX2NvdW50LHJlOncuc2Vjb25kX2Jlc3Qucn19fWZ1bmN0aW9uIG4oKXtpZihuLmNhbGxlZCl7cmV0dXJufW4uY2FsbGVkPXRydWU7QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKSxiKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbihvKXttKG8saGxqcy50YWJSZXBsYWNlKX0pfWZ1bmN0aW9uIGsoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsbixmYWxzZSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLG4sZmFsc2UpfXZhciBlPXt9O3RoaXMuTEFOR1VBR0VTPWU7dGhpcy5oaWdobGlnaHQ9ZDt0aGlzLmhpZ2hsaWdodEF1dG89Zzt0aGlzLmZpeE1hcmt1cD1pO3RoaXMuaGlnaGxpZ2h0QmxvY2s9bTt0aGlzLmluaXRIaWdobGlnaHRpbmc9bjt0aGlzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9azt0aGlzLklSPSJbYS16QS1aXVthLXpBLVowLTlfXSoiO3RoaXMuVUlSPSJbYS16QS1aX11bYS16QS1aMC05X10qIjt0aGlzLk5SPSJcXGJcXGQrKFxcLlxcZCspPyI7dGhpcy5DTlI9IihcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSI7dGhpcy5CTlI9IlxcYigwYlswMV0rKSI7dGhpcy5SU1I9IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfFxcLnwtfC09fC98Lz18Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+Pnw+Pnw+fFxcP3xcXFt8XFx7fFxcKHxcXF58XFxePXxcXHx8XFx8PXxcXHxcXHx8fiI7dGhpcy5CRT17YjoiXFxcXFtcXHNcXFNdIixyOjB9O3RoaXMuQVNNPXtjTjoic3RyaW5nIixiOiInIixlOiInIixpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5RU009e2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGk6IlxcbiIsYzpbdGhpcy5CRV0scjowfTt0aGlzLkNMQ009e2NOOiJjb21tZW50IixiOiIvLyIsZToiJCJ9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xcKiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9O3RoaXMuTk09e2NOOiJudW1iZXIiLGI6dGhpcy5OUixyOjB9O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLHI6MH07dGhpcy5CTk09e2NOOiJudW1iZXIiLGI6dGhpcy5CTlIscjowfTt0aGlzLlJFR0VYUF9NT0RFPXtjTjoicmVnZXhwIixiOi9cLy8sZTovXC9bZ2ltXSovLGk6L1xuLyxjOlt0aGlzLkJFLHtiOi9cWy8sZTovXF0vLHI6MCxjOlt0aGlzLkJFXX1dfTt0aGlzLmluaGVyaXQ9ZnVuY3Rpb24ocSxyKXt2YXIgbz17fTtmb3IodmFyIHAgaW4gcSl7b1twXT1xW3BdfWlmKHIpe2Zvcih2YXIgcCBpbiByKXtvW3BdPXJbcF19fXJldHVybiBvfX0oKTtobGpzLkxBTkdVQUdFUy5iYXNoPWZ1bmN0aW9uKGEpe3ZhciBjPXtjTjoidmFyaWFibGUiLGI6L1wkW1x3XGQjQF1bXHdcZF9dKi99O3ZhciBiPXtjTjoidmFyaWFibGUiLGI6L1wkXHsoLio/KVx9L307dmFyIGU9e2NOOiJzdHJpbmciLGI6LyIvLGU6LyIvLGM6W2EuQkUsYyxiLHtjTjoidmFyaWFibGUiLGI6L1wkXCgvLGU6L1wpLyxjOmEuQkV9XSxyOjB9O3ZhciBkPXtjTjoic3RyaW5nIixiOi8nLyxlOi8nLyxyOjB9O3JldHVybntsOi8tP1thLXpdKy8sazp7a2V5d29yZDoiaWYgdGhlbiBlbHNlIGVsaWYgZmkgZm9yIGJyZWFrIGNvbnRpbnVlIHdoaWxlIGluIGRvIGRvbmUgZXhpdCByZXR1cm4gc2V0IGRlY2xhcmUgY2FzZSBlc2FjIGV4cG9ydCBleGVjIixsaXRlcmFsOiJ0cnVlIGZhbHNlIixidWlsdF9pbjoicHJpbnRmIGVjaG8gcmVhZCBjZCBwd2QgcHVzaGQgcG9wZCBkaXJzIGxldCBldmFsIHVuc2V0IHR5cGVzZXQgcmVhZG9ubHkgZ2V0b3B0cyBzb3VyY2Ugc2hvcHQgY2FsbGVyIHR5cGUgaGFzaCBiaW5kIGhlbHAgc3VkbyIsb3BlcmF0b3I6Ii1uZSAtZXEgLWx0IC1ndCAtZiAtZCAtZSAtcyAtbCAtYSJ9LGM6W3tjTjoic2hlYmFuZyIsYjovXiMhW15cbl0rc2hccyokLyxyOjEwfSx7Y046ImZ1bmN0aW9uIixiOi9cd1tcd1xkX10qXHMqXChccypcKVxzKlx7LyxyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6L1x3W1x3XGRfXSovfV0scjowfSxhLkhDTSxhLk5NLGUsZCxjLGJdfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3M9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImFic3RyYWN0IGFzIGJhc2UgYm9vbCBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjaGVja2VkIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlY2ltYWwgZGVmYXVsdCBkZWxlZ2F0ZSBkbyBkb3VibGUgZWxzZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmYWxzZSBmaW5hbGx5IGZpeGVkIGZsb2F0IGZvciBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbmFtZXNwYWNlIG5ldyBudWxsIG9iamVjdCBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNieXRlIHNlYWxlZCBzaG9ydCBzaXplb2Ygc3RhY2thbGxvYyBzdGF0aWMgc3RyaW5nIHN0cnVjdCBzd2l0Y2ggdGhpcyB0aHJvdyB0cnVlIHRyeSB0eXBlb2YgdWludCB1bG9uZyB1bmNoZWNrZWQgdW5zYWZlIHVzaG9ydCB1c2luZyB2aXJ0dWFsIHZvbGF0aWxlIHZvaWQgd2hpbGUgYXN5bmMgYXdhaXQgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZnJvbSBnZXQgZ3JvdXAgaW50byBqb2luIGxldCBvcmRlcmJ5IHBhcnRpYWwgc2VsZWN0IHNldCB2YWx1ZSB2YXIgd2hlcmUgeWllbGQiLGM6W3tjTjoiY29tbWVudCIsYjoiLy8vIixlOiIkIixyQjp0cnVlLGM6W3tjTjoieG1sRG9jVGFnIixiOiIvLy98PCEtLXwtLT4ifSx7Y046InhtbERvY1RhZyIsYjoiPC8/IixlOiI+In1dfSxhLkNMQ00sYS5DQkxDTE0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGs6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHJlZ2lvbiBlbmRyZWdpb24gcHJhZ21hIGNoZWNrc3VtIn0se2NOOiJzdHJpbmciLGI6J0AiJyxlOiciJyxjOlt7YjonIiInfV19LGEuQVNNLGEuUVNNLGEuQ05NXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnJ1Ynk9ZnVuY3Rpb24oZSl7dmFyIGE9IlthLXpBLVpfXVthLXpBLVowLTlfXSooXFwhfFxcPyk/Ijt2YXIgaj0iW2EtekEtWl9dXFx3KlshPz1dP3xbLSt+XVxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFwqXFwqfFstLyslXiYqfmB8XXxcXFtcXF09PyI7dmFyIGc9e2tleXdvcmQ6ImFuZCBmYWxzZSB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIGlmIEJFR0lOIHJldHJ5IGVuZCBmb3IgdHJ1ZSBzZWxmIHdoZW4gbmV4dCB1bnRpbCBkbyBiZWdpbiB1bmxlc3MgRU5EIHJlc2N1ZSBuaWwgZWxzZSBicmVhayB1bmRlZiBub3Qgc3VwZXIgY2xhc3MgY2FzZSByZXF1aXJlIHlpZWxkIGFsaWFzIHdoaWxlIGVuc3VyZSBlbHNpZiBvciBpbmNsdWRlIn07dmFyIGM9e2NOOiJ5YXJkb2N0YWciLGI6IkBbQS1aYS16XSsifTt2YXIgaz1be2NOOiJjb21tZW50IixiOiIjIixlOiIkIixjOltjXX0se2NOOiJjb21tZW50IixiOiJeXFw9YmVnaW4iLGU6Il5cXD1lbmQiLGM6W2NdLHI6MTB9LHtjTjoiY29tbWVudCIsYjoiXl9fRU5EX18iLGU6IlxcbiQifV07dmFyIGQ9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsbDphLGs6Z307dmFyIGk9W2UuQkUsZF07dmFyIGI9W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOmkscjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcKCIsZToiXFwpIixjOml9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXFsiLGU6IlxcXSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/eyIsZToifSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/PCIsZToiPiIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8vIixlOiIvIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPyUiLGU6IiUiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LSIsZToiLSIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXHwiLGU6IlxcfCIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOi9cQlw/KFxcXGR7MSwzfXxcXHhbQS1GYS1mMC05XXsxLDJ9fFxcdVtBLUZhLWYwLTldezR9fFxcP1xTKVxiL31dO3ZhciBoPXtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6IiB8JHw7IixrOiJkZWYiLGM6W3tjTjoidGl0bGUiLGI6aixsOmEsazpnfSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGw6YSxrOmd9XS5jb25jYXQoayl9O3ZhciBmPWsuY29uY2F0KGIuY29uY2F0KFt7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIkfDsiLGs6ImNsYXNzIG1vZHVsZSIsYzpbe2NOOiJ0aXRsZSIsYjoiW0EtWmEtel9dXFx3Kig6OlxcdyspKihcXD98XFwhKT8iLHI6MH0se2NOOiJpbmhlcml0YW5jZSIsYjoiPFxccyoiLGM6W3tjTjoicGFyZW50IixiOiIoIitlLklSKyI6Oik/IitlLklSfV19XS5jb25jYXQoayl9LGgse2NOOiJjb25zdGFudCIsYjoiKDo6KT8oXFxiW0EtWl1cXHcqKDo6KT8pKyIscjowfSx7Y046InN5bWJvbCIsYjoiOiIsYzpiLmNvbmNhdChbe2I6an1dKSxyOjB9LHtjTjoic3ltYm9sIixiOmErIjoiLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2NOOiJ2YXJpYWJsZSIsYjoiKFxcJFxcVyl8KChcXCR8XFxAXFxAPykoXFx3KykpIn0se2I6IigiK2UuUlNSKyIpXFxzKiIsYzprLmNvbmNhdChbe2NOOiJyZWdleHAiLGI6Ii8iLGU6Ii9bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyeyIsZToifVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXCgiLGU6IlxcKVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXIhIixlOiIhW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlclxcWyIsZToiXFxdW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19XSkscjowfV0pKTtkLmM9ZjtoLmNbMV0uYz1mO3JldHVybntsOmEsazpnLGM6Zn19KGhsanMpO2hsanMuTEFOR1VBR0VTLmRpZmY9ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiY2h1bmsiLGI6Il5cXEBcXEAgK1xcLVxcZCssXFxkKyArXFwrXFxkKyxcXGQrICtcXEBcXEAkIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwqXFwqXFwqICtcXGQrLFxcZCsgK1xcKlxcKlxcKlxcKiQiLHI6MTB9LHtjTjoiY2h1bmsiLGI6Il5cXC1cXC1cXC0gK1xcZCssXFxkKyArXFwtXFwtXFwtXFwtJCIscjoxMH0se2NOOiJoZWFkZXIiLGI6IkluZGV4OiAiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiPT09PT0iLGU6Ij09PT09JCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwtXFwtXFwtIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCp7M30gIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCtcXCtcXCsiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXFwqezV9IixlOiJcXCp7NX0kIn0se2NOOiJhZGRpdGlvbiIsYjoiXlxcKyIsZToiJCJ9LHtjTjoiZGVsZXRpb24iLGI6Il5cXC0iLGU6IiQifSx7Y046ImNoYW5nZSIsYjoiXlxcISIsZToiJCJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmFzY3JpcHQ9ZnVuY3Rpb24oYSl7cmV0dXJue2s6e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHdpdGggdGhyb3cgY2FzZSBkZWZhdWx0IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGxldCB5aWVsZCBjb25zdCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCBOYU4gSW5maW5pdHkifSxjOlthLkFTTSxhLlFTTSxhLkNMQ00sYS5DQkxDTE0sYS5DTk0se2I6IigiK2EuUlNSKyJ8XFxiKGNhc2V8cmV0dXJufHRocm93KVxcYilcXHMqIixrOiJyZXR1cm4gdGhyb3cgY2FzZSIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUkVHRVhQX01PREUse2I6LzwvLGU6Lz47LyxzTDoieG1sIn1dLHI6MH0se2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZTovey8sazoiZnVuY3Rpb24iLGM6W3tjTjoidGl0bGUiLGI6L1tBLVphLXokX11bMC05QS1aYS16JF9dKi99LHtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6W2EuQ0xDTSxhLkNCTENMTV0saTovWyInXChdL31dLGk6L1xbfCUvfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy54bWw9ZnVuY3Rpb24oYSl7dmFyIGM9IltBLVphLXowLTlcXC5fOi1dKyI7dmFyIGI9e2VXOnRydWUscjowLGM6W3tjTjoiYXR0cmlidXRlIixiOmMscjowfSx7YjonPSInLHJCOnRydWUsZTonIicsYzpbe2NOOiJ2YWx1ZSIsYjonIicsZVc6dHJ1ZX1dfSx7YjoiPSciLHJCOnRydWUsZToiJyIsYzpbe2NOOiJ2YWx1ZSIsYjoiJyIsZVc6dHJ1ZX1dfSx7YjoiPSIsYzpbe2NOOiJ2YWx1ZSIsYjoiW15cXHMvPl0rIn1dfV19O3JldHVybntjSTp0cnVlLGM6W3tjTjoicGkiLGI6IjxcXD8iLGU6IlxcPz4iLHI6MTB9LHtjTjoiZG9jdHlwZSIsYjoiPCFET0NUWVBFIixlOiI+IixyOjEwLGM6W3tiOiJcXFsiLGU6IlxcXSJ9XX0se2NOOiJjb21tZW50IixiOiI8IS0tIixlOiItLT4iLHI6MTB9LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiIscjoxMH0se2NOOiJ0YWciLGI6IjxzdHlsZSg/PVxcc3w+fCQpIixlOiI+IixrOnt0aXRsZToic3R5bGUifSxjOltiXSxzdGFydHM6e2U6Ijwvc3R5bGU+IixyRTp0cnVlLHNMOiJjc3MifX0se2NOOiJ0YWciLGI6IjxzY3JpcHQoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InNjcmlwdCJ9LGM6W2JdLHN0YXJ0czp7ZToiPFwvc2NyaXB0PiIsckU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9fSx7YjoiPCUiLGU6IiU+IixzTDoidmJzY3JpcHQifSx7Y046InRhZyIsYjoiPC8/IixlOiIvPz4iLHI6MCxjOlt7Y046InRpdGxlIixiOiJbXiAvPjxdKyJ9LGJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYXJrZG93bj1mdW5jdGlvbihhKXtyZXR1cm57Yzpbe2NOOiJoZWFkZXIiLGI6Il4jezEsM30iLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXi4rP1xcbls9LV17Mix9JCJ9LHtiOiI8IixlOiI+IixzTDoieG1sIixyOjB9LHtjTjoiYnVsbGV0IixiOiJeKFsqKy1dfChcXGQrXFwuKSlcXHMrIn0se2NOOiJzdHJvbmciLGI6IlsqX117Mn0uKz9bKl9dezJ9In0se2NOOiJlbXBoYXNpcyIsYjoiXFwqLis/XFwqIn0se2NOOiJlbXBoYXNpcyIsYjoiXy4rP18iLHI6MH0se2NOOiJibG9ja3F1b3RlIixiOiJePlxccysiLGU6IiQifSx7Y046ImNvZGUiLGI6ImAuKz9gIn0se2NOOiJjb2RlIixiOiJeICAgICIsZToiJCIscjowfSx7Y046Imhvcml6b250YWxfcnVsZSIsYjoiXi17Myx9IixlOiIkIn0se2I6IlxcWy4rP1xcXVxcKC4rP1xcKSIsckI6dHJ1ZSxjOlt7Y046ImxpbmtfbGFiZWwiLGI6IlxcWy4rXFxdIn0se2NOOiJsaW5rX3VybCIsYjoiXFwoIixlOiJcXCkiLGVCOnRydWUsZUU6dHJ1ZX1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jc3M9ZnVuY3Rpb24oYSl7dmFyIGI9IlthLXpBLVotXVthLXpBLVowLTlfLV0qIjt2YXIgYz17Y046ImZ1bmN0aW9uIixiOmIrIlxcKCIsZToiXFwpIixjOlsic2VsZiIsYS5OTSxhLkFTTSxhLlFTTV19O3JldHVybntjSTp0cnVlLGk6Ils9L3wnXSIsYzpbYS5DQkxDTE0se2NOOiJpZCIsYjoiXFwjW0EtWmEtejAtOV8tXSsifSx7Y046ImNsYXNzIixiOiJcXC5bQS1aYS16MC05Xy1dKyIscjowfSx7Y046ImF0dHJfc2VsZWN0b3IiLGI6IlxcWyIsZToiXFxdIixpOiIkIn0se2NOOiJwc2V1ZG8iLGI6IjooOik/W2EtekEtWjAtOVxcX1xcLVxcK1xcKFxcKVxcXCJcXCddKyJ9LHtjTjoiYXRfcnVsZSIsYjoiQChmb250LWZhY2V8cGFnZSkiLGw6IlthLXotXSsiLGs6ImZvbnQtZmFjZSBwYWdlIn0se2NOOiJhdF9ydWxlIixiOiJAIixlOiJbeztdIixjOlt7Y046ImtleXdvcmQiLGI6L1xTKy99LHtiOi9ccy8sZVc6dHJ1ZSxlRTp0cnVlLHI6MCxjOltjLGEuQVNNLGEuUVNNLGEuTk1dfV19LHtjTjoidGFnIixiOmIscjowfSx7Y046InJ1bGVzIixiOiJ7IixlOiJ9IixpOiJbXlxcc10iLHI6MCxjOlthLkNCTENMTSx7Y046InJ1bGUiLGI6IlteXFxzXSIsckI6dHJ1ZSxlOiI7IixlVzp0cnVlLGM6W3tjTjoiYXR0cmlidXRlIixiOiJbQS1aXFxfXFwuXFwtXSsiLGU6IjoiLGVFOnRydWUsaToiW15cXHNdIixzdGFydHM6e2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxlRTp0cnVlLGM6W2MsYS5OTSxhLlFTTSxhLkFTTSxhLkNCTENMTSx7Y046ImhleGNvbG9yIixiOiIjWzAtOUEtRmEtZl0rIn0se2NOOiJpbXBvcnRhbnQiLGI6IiFpbXBvcnRhbnQifV19fV19XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaHR0cD1mdW5jdGlvbihhKXtyZXR1cm57aToiXFxTIixjOlt7Y046InN0YXR1cyIsYjoiXkhUVFAvWzAtOVxcLl0rIixlOiIkIixjOlt7Y046Im51bWJlciIsYjoiXFxiXFxkezN9XFxiIn1dfSx7Y046InJlcXVlc3QiLGI6Il5bQS1aXSsgKC4qPykgSFRUUC9bMC05XFwuXSskIixyQjp0cnVlLGU6IiQiLGM6W3tjTjoic3RyaW5nIixiOiIgIixlOiIgIixlQjp0cnVlLGVFOnRydWV9XX0se2NOOiJhdHRyaWJ1dGUiLGI6Il5cXHciLGU6IjogIixlRTp0cnVlLGk6IlxcbnxcXHN8PSIsc3RhcnRzOntjTjoic3RyaW5nIixlOiIkIn19LHtiOiJcXG5cXG4iLHN0YXJ0czp7c0w6IiIsZVc6dHJ1ZX19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmE9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkIGVudW0gZWxzZSBicmVhayB0cmFuc2llbnQgbmV3IGNhdGNoIGluc3RhbmNlb2YgYnl0ZSBzdXBlciB2b2xhdGlsZSBjYXNlIGFzc2VydCBzaG9ydCBwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIixjOlt7Y046ImphdmFkb2MiLGI6Ii9cXCpcXCoiLGU6IlxcKi8iLGM6W3tjTjoiamF2YWRvY3RhZyIsYjoiKF58XFxzKUBbQS1aYS16XSsifV0scjoxMH0sYS5DTENNLGEuQ0JMQ0xNLGEuQVNNLGEuUVNNLHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIGludGVyZmFjZSIsZUU6dHJ1ZSxpOiI6IixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyBpbXBsZW1lbnRzIixyOjEwfSx7Y046InRpdGxlIixiOmEuVUlSfV19LGEuQ05NLHtjTjoiYW5ub3RhdGlvbiIsYjoiQFtBLVphLXpdKyJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnBocD1mdW5jdGlvbihhKXt2YXIgZT17Y046InZhcmlhYmxlIixiOiJcXCQrW2EtekEtWl9ceDdmLVx4ZmZdW2EtekEtWjAtOV9ceDdmLVx4ZmZdKiJ9O3ZhciBiPVthLmluaGVyaXQoYS5BU00se2k6bnVsbH0pLGEuaW5oZXJpdChhLlFTTSx7aTpudWxsfSkse2NOOiJzdHJpbmciLGI6J2IiJyxlOiciJyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6ImInIixlOiInIixjOlthLkJFXX1dO3ZhciBjPVthLkJOTSxhLkNOTV07dmFyIGQ9e2NOOiJ0aXRsZSIsYjphLlVJUn07cmV0dXJue2NJOnRydWUsbDphLlVJUixrOiJhbmQgaW5jbHVkZV9vbmNlIGxpc3QgYWJzdHJhY3QgZ2xvYmFsIHByaXZhdGUgZWNobyBpbnRlcmZhY2UgYXMgc3RhdGljIGVuZHN3aXRjaCBhcnJheSBudWxsIGlmIGVuZHdoaWxlIG9yIGNvbnN0IGZvciBlbmRmb3JlYWNoIHNlbGYgdmFyIHdoaWxlIGlzc2V0IHB1YmxpYyBwcm90ZWN0ZWQgZXhpdCBmb3JlYWNoIHRocm93IGVsc2VpZiBpbmNsdWRlIF9fRklMRV9fIGVtcHR5IHJlcXVpcmVfb25jZSBkbyB4b3IgcmV0dXJuIGltcGxlbWVudHMgcGFyZW50IGNsb25lIHVzZSBfX0NMQVNTX18gX19MSU5FX18gZWxzZSBicmVhayBwcmludCBldmFsIG5ldyBjYXRjaCBfX01FVEhPRF9fIGNhc2UgZXhjZXB0aW9uIGRlZmF1bHQgZGllIHJlcXVpcmUgX19GVU5DVElPTl9fIGVuZGRlY2xhcmUgZmluYWwgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIGVuZGZvciBlbmRpZiBkZWNsYXJlIHVuc2V0IHRydWUgZmFsc2UgbmFtZXNwYWNlIHRyYWl0IGdvdG8gaW5zdGFuY2VvZiBpbnN0ZWFkb2YgX19ESVJfXyBfX05BTUVTUEFDRV9fIHlpZWxkIGZpbmFsbHkiLGM6W2EuQ0xDTSxhLkhDTSx7Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8iLGM6W3tjTjoicGhwZG9jIixiOiJcXHNAW0EtWmEtel0rIn1dfSx7Y046ImNvbW1lbnQiLGI6Il9faGFsdF9jb21waWxlci4rPzsiLGVXOnRydWUsazoiX19oYWx0X2NvbXBpbGVyIixsOmEuVUlSfSx7Y046InN0cmluZyIsYjoiPDw8WydcIl0/XFx3K1snXCJdPyQiLGU6Il5cXHcrOyIsYzpbYS5CRV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiI8XFw/cGhwIixyOjEwfSx7Y046InByZXByb2Nlc3NvciIsYjoiXFw/PiJ9LGUse2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZToieyIsazoiZnVuY3Rpb24iLGk6IlxcJHxcXFt8JSIsYzpbZCx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6WyJzZWxmIixlLGEuQ0JMQ0xNXS5jb25jYXQoYikuY29uY2F0KGMpfV19LHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIixpOiJbOlxcKFxcJF0iLGM6W3tiV0s6dHJ1ZSxlVzp0cnVlLGs6ImV4dGVuZHMiLGM6W2RdfSxkXX0se2I6Ij0+In1dLmNvbmNhdChiKS5jb25jYXQoYyl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5weXRob249ZnVuY3Rpb24oYSl7dmFyIGY9e2NOOiJwcm9tcHQiLGI6L14oPj4+fFwuXC5cLikgL307dmFyIGM9W3tjTjoic3RyaW5nIixiOi8odXxiKT9yPycnJy8sZTovJycnLyxjOltmXSxyOjEwfSx7Y046InN0cmluZyIsYjovKHV8Yik/cj8iIiIvLGU6LyIiIi8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpJy8sZTovJy8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpIi8sZTovIi8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6LyhifGJyKScvLGU6LycvLGM6W2EuQkVdfSx7Y046InN0cmluZyIsYjovKGJ8YnIpIi8sZTovIi8sYzpbYS5CRV19XS5jb25jYXQoW2EuQVNNLGEuUVNNXSk7dmFyIGU9e2NOOiJ0aXRsZSIsYjphLlVJUn07dmFyIGQ9e2NOOiJwYXJhbXMiLGI6L1woLyxlOi9cKS8sYzpbInNlbGYiLGEuQ05NLGZdLmNvbmNhdChjKX07dmFyIGI9e2JXSzp0cnVlLGU6LzovLGk6L1skez07XG5dLyxjOltlLGRdLHI6MTB9O3JldHVybntrOntrZXl3b3JkOiJhbmQgZWxpZiBpcyBnbG9iYWwgYXMgaW4gaWYgZnJvbSByYWlzZSBmb3IgZXhjZXB0IGZpbmFsbHkgcHJpbnQgaW1wb3J0IHBhc3MgcmV0dXJuIGV4ZWMgZWxzZSBicmVhayBub3Qgd2l0aCBjbGFzcyBhc3NlcnQgeWllbGQgdHJ5IHdoaWxlIGNvbnRpbnVlIGRlbCBvciBkZWYgbGFtYmRhIG5vbmxvY2FsfDEwIE5vbmUgVHJ1ZSBGYWxzZSIsYnVpbHRfaW46IkVsbGlwc2lzIE5vdEltcGxlbWVudGVkIn0saTovKDxcL3wtPnxcPykvLGM6Yy5jb25jYXQoW2YsYS5IQ00sYS5pbmhlcml0KGIse2NOOiJmdW5jdGlvbiIsazoiZGVmIn0pLGEuaW5oZXJpdChiLHtjTjoiY2xhc3MiLGs6ImNsYXNzIn0pLGEuQ05NLHtjTjoiZGVjb3JhdG9yIixiOi9ALyxlOi8kL30se2I6L1xiKHByaW50fGV4ZWMpXCgvfV0pfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuc3FsPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGM6W3tjTjoib3BlcmF0b3IiLGI6IihiZWdpbnxlbmR8c3RhcnR8Y29tbWl0fHJvbGxiYWNrfHNhdmVwb2ludHxsb2NrfGFsdGVyfGNyZWF0ZXxkcm9wfHJlbmFtZXxjYWxsfGRlbGV0ZXxkb3xoYW5kbGVyfGluc2VydHxsb2FkfHJlcGxhY2V8c2VsZWN0fHRydW5jYXRlfHVwZGF0ZXxzZXR8c2hvd3xwcmFnbWF8Z3JhbnQpXFxiKD8hOikiLGU6IjsiLGVXOnRydWUsazp7a2V5d29yZDoiYWxsIHBhcnRpYWwgZ2xvYmFsIG1vbnRoIGN1cnJlbnRfdGltZXN0YW1wIHVzaW5nIGdvIHJldm9rZSBzbWFsbGludCBpbmRpY2F0b3IgZW5kLWV4ZWMgZGlzY29ubmVjdCB6b25lIHdpdGggY2hhcmFjdGVyIGFzc2VydGlvbiB0byBhZGQgY3VycmVudF91c2VyIHVzYWdlIGlucHV0IGxvY2FsIGFsdGVyIG1hdGNoIGNvbGxhdGUgcmVhbCB0aGVuIHJvbGxiYWNrIGdldCByZWFkIHRpbWVzdGFtcCBzZXNzaW9uX3VzZXIgbm90IGludGVnZXIgYml0IHVuaXF1ZSBkYXkgbWludXRlIGRlc2MgaW5zZXJ0IGV4ZWN1dGUgbGlrZSBpbGlrZXwyIGxldmVsIGRlY2ltYWwgZHJvcCBjb250aW51ZSBpc29sYXRpb24gZm91bmQgd2hlcmUgY29uc3RyYWludHMgZG9tYWluIHJpZ2h0IG5hdGlvbmFsIHNvbWUgbW9kdWxlIHRyYW5zYWN0aW9uIHJlbGF0aXZlIHNlY29uZCBjb25uZWN0IGVzY2FwZSBjbG9zZSBzeXN0ZW1fdXNlciBmb3IgZGVmZXJyZWQgc2VjdGlvbiBjYXN0IGN1cnJlbnQgc3Fsc3RhdGUgYWxsb2NhdGUgaW50ZXJzZWN0IGRlYWxsb2NhdGUgbnVtZXJpYyBwdWJsaWMgcHJlc2VydmUgZnVsbCBnb3RvIGluaXRpYWxseSBhc2Mgbm8ga2V5IG91dHB1dCBjb2xsYXRpb24gZ3JvdXAgYnkgdW5pb24gc2Vzc2lvbiBib3RoIGxhc3QgbGFuZ3VhZ2UgY29uc3RyYWludCBjb2x1bW4gb2Ygc3BhY2UgZm9yZWlnbiBkZWZlcnJhYmxlIHByaW9yIGNvbm5lY3Rpb24gdW5rbm93biBhY3Rpb24gY29tbWl0IHZpZXcgb3IgZmlyc3QgaW50byBmbG9hdCB5ZWFyIHByaW1hcnkgY2FzY2FkZWQgZXhjZXB0IHJlc3RyaWN0IHNldCByZWZlcmVuY2VzIG5hbWVzIHRhYmxlIG91dGVyIG9wZW4gc2VsZWN0IHNpemUgYXJlIHJvd3MgZnJvbSBwcmVwYXJlIGRpc3RpbmN0IGxlYWRpbmcgY3JlYXRlIG9ubHkgbmV4dCBpbm5lciBhdXRob3JpemF0aW9uIHNjaGVtYSBjb3JyZXNwb25kaW5nIG9wdGlvbiBkZWNsYXJlIHByZWNpc2lvbiBpbW1lZGlhdGUgZWxzZSB0aW1lem9uZV9taW51dGUgZXh0ZXJuYWwgdmFyeWluZyB0cmFuc2xhdGlvbiB0cnVlIGNhc2UgZXhjZXB0aW9uIGpvaW4gaG91ciBkZWZhdWx0IGRvdWJsZSBzY3JvbGwgdmFsdWUgY3Vyc29yIGRlc2NyaXB0b3IgdmFsdWVzIGRlYyBmZXRjaCBwcm9jZWR1cmUgZGVsZXRlIGFuZCBmYWxzZSBpbnQgaXMgZGVzY3JpYmUgY2hhciBhcyBhdCBpbiB2YXJjaGFyIG51bGwgdHJhaWxpbmcgYW55IGFic29sdXRlIGN1cnJlbnRfdGltZSBlbmQgZ3JhbnQgcHJpdmlsZWdlcyB3aGVuIGNyb3NzIGNoZWNrIHdyaXRlIGN1cnJlbnRfZGF0ZSBwYWQgYmVnaW4gdGVtcG9yYXJ5IGV4ZWMgdGltZSB1cGRhdGUgY2F0YWxvZyB1c2VyIHNxbCBkYXRlIG9uIGlkZW50aXR5IHRpbWV6b25lX2hvdXIgbmF0dXJhbCB3aGVuZXZlciBpbnRlcnZhbCB3b3JrIG9yZGVyIGNhc2NhZGUgZGlhZ25vc3RpY3MgbmNoYXIgaGF2aW5nIGxlZnQgY2FsbCBkbyBoYW5kbGVyIGxvYWQgcmVwbGFjZSB0cnVuY2F0ZSBzdGFydCBsb2NrIHNob3cgcHJhZ21hIGV4aXN0cyBudW1iZXIgdHJpZ2dlciBpZiBiZWZvcmUgYWZ0ZXIgZWFjaCByb3ciLGFnZ3JlZ2F0ZToiY291bnQgc3VtIG1pbiBtYXggYXZnIn0sYzpbe2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2EuQkUse2I6IicnIn1dLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2EuQkUse2I6JyIiJ31dLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6W2EuQkVdfSxhLkNOTV19LGEuQ0JMQ0xNLHtjTjoiY29tbWVudCIsYjoiLS0iLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5pbmk9ZnVuY3Rpb24oYSl7cmV0dXJue2NJOnRydWUsaToiW15cXHNdIixjOlt7Y046ImNvbW1lbnQiLGI6IjsiLGU6IiQifSx7Y046InRpdGxlIixiOiJeXFxbIixlOiJcXF0ifSx7Y046InNldHRpbmciLGI6Il5bYS16MC05XFxbXFxdXy1dK1sgXFx0XSo9WyBcXHRdKiIsZToiJCIsYzpbe2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxrOiJvbiBvZmYgdHJ1ZSBmYWxzZSB5ZXMgbm8iLGM6W2EuUVNNLGEuTk1dLHI6MH1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKGUpe3ZhciBhPSJnZXRwd2VudCBnZXRzZXJ2ZW50IHF1b3RlbWV0YSBtc2dyY3Ygc2NhbGFyIGtpbGwgZGJtY2xvc2UgdW5kZWYgbGMgbWEgc3lzd3JpdGUgdHIgc2VuZCB1bWFzayBzeXNvcGVuIHNobXdyaXRlIHZlYyBxeCB1dGltZSBsb2NhbCBvY3Qgc2VtY3RsIGxvY2FsdGltZSByZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXFmaWxlbm8gcXcgZW5kcHJvdG9lbnQgd2FpdCBzZXRob3N0ZW50IGJsZXNzIHN8MCBvcGVuZGlyIGNvbnRpbnVlIGVhY2ggc2xlZXAgZW5kZ3JlbnQgc2h1dGRvd24gZHVtcCBjaG9tcCBjb25uZWN0IGdldHNvY2tuYW1lIGRpZSBzb2NrZXRwYWlyIGNsb3NlIGZsb2NrIGV4aXN0cyBpbmRleCBzaG1nZXRzdWIgZm9yIGVuZHB3ZW50IHJlZG8gbHN0YXQgbXNnY3RsIHNldHBncnAgYWJzIGV4aXQgc2VsZWN0IHByaW50IHJlZiBnZXRob3N0YnlhZGRyIHVuc2hpZnQgZmNudGwgc3lzY2FsbCBnb3RvIGdldG5ldGJ5YWRkciBqb2luIGdtdGltZSBzeW1saW5rIHNlbWdldCBzcGxpY2UgeHwwIGdldHBlZXJuYW1lIHJlY3YgbG9nIHNldHNvY2tvcHQgY29zIGxhc3QgcmV2ZXJzZSBnZXRob3N0YnluYW1lIGdldGdybmFtIHN0dWR5IGZvcm1saW5lIGVuZGhvc3RlbnQgdGltZXMgY2hvcCBsZW5ndGggZ2V0aG9zdGVudCBnZXRuZXRlbnQgcGFjayBnZXRwcm90b2VudCBnZXRzZXJ2YnluYW1lIHJhbmQgbWtkaXIgcG9zIGNobW9kIHl8MCBzdWJzdHIgZW5kbmV0ZW50IHByaW50ZiBuZXh0IG9wZW4gbXNnc25kIHJlYWRkaXIgdXNlIHVubGluayBnZXRzb2Nrb3B0IGdldHByaW9yaXR5IHJpbmRleCB3YW50YXJyYXkgaGV4IHN5c3RlbSBnZXRzZXJ2Ynlwb3J0IGVuZHNlcnZlbnQgaW50IGNociB1bnRpZSBybWRpciBwcm90b3R5cGUgdGVsbCBsaXN0ZW4gZm9yayBzaG1yZWFkIHVjZmlyc3Qgc2V0cHJvdG9lbnQgZWxzZSBzeXNzZWVrIGxpbmsgZ2V0Z3JnaWQgc2htY3RsIHdhaXRwaWQgdW5wYWNrIGdldG5ldGJ5bmFtZSByZXNldCBjaGRpciBncmVwIHNwbGl0IHJlcXVpcmUgY2FsbGVyIGxjZmlyc3QgdW50aWwgd2FybiB3aGlsZSB2YWx1ZXMgc2hpZnQgdGVsbGRpciBnZXRwd3VpZCBteSBnZXRwcm90b2J5bnVtYmVyIGRlbGV0ZSBhbmQgc29ydCB1YyBkZWZpbmVkIHNyYW5kIGFjY2VwdCBwYWNrYWdlIHNlZWtkaXIgZ2V0cHJvdG9ieW5hbWUgc2Vtb3Agb3VyIHJlbmFtZSBzZWVrIGlmIHF8MCBjaHJvb3Qgc3lzcmVhZCBzZXRwd2VudCBubyBjcnlwdCBnZXRjIGNob3duIHNxcnQgd3JpdGUgc2V0bmV0ZW50IHNldHByaW9yaXR5IGZvcmVhY2ggdGllIHNpbiBtc2dnZXQgbWFwIHN0YXQgZ2V0bG9naW4gdW5sZXNzIGVsc2lmIHRydW5jYXRlIGV4ZWMga2V5cyBnbG9iIHRpZWQgY2xvc2VkaXJpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlIGF0YW4yIGdldGdyZW50IGV4cCB0aW1lIHB1c2ggc2V0Z3JlbnQgZ3QgbHQgb3IgbmUgbXwwIGJyZWFrIGdpdmVuIHNheSBzdGF0ZSB3aGVuIjt2YXIgZD17Y046InN1YnN0IixiOiJbJEBdXFx7IixlOiJcXH0iLGs6YSxyOjEwfTt2YXIgYj17Y046InZhcmlhYmxlIixiOiJcXCRcXGQifTt2YXIgaT17Y046InZhcmlhYmxlIixiOiJbXFwkXFwlXFxAXFwqXShcXF5cXHdcXGJ8I1xcdysoXFw6XFw6XFx3KykqfFteXFxzXFx3e118e1xcdyt9fFxcdysoXFw6XFw6XFx3KikqKSJ9O3ZhciBmPVtlLkJFLGQsYixpXTt2YXIgaD17YjoiLT4iLGM6W3tiOmUuSVJ9LHtiOiJ7IixlOiJ9In1dfTt2YXIgZz17Y046ImNvbW1lbnQiLGI6Il4oX19FTkRfX3xfX0RBVEFfXykiLGU6IlxcbiQiLHI6NX07dmFyIGM9W2IsaSxlLkhDTSxnLHtjTjoiY29tbWVudCIsYjoiXlxcPVxcdyIsZToiXFw9Y3V0IixlVzp0cnVlfSxoLHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXCgiLGU6IlxcKSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcWyIsZToiXFxdIixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXHwiLGU6IlxcfCIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcPCIsZToiXFw+IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicXdcXHMrcSIsZToicSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2UuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6ZixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFXX0se2NOOiJzdHJpbmciLGI6IntcXHcrfSIscjowfSx7Y046InN0cmluZyIsYjoiLT9cXHcrXFxzKlxcPVxcPiIscjowfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscjowfSx7YjoiKCIrZS5SU1IrInxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXGIpXFxzKiIsazoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscjowLGM6W2UuSENNLGcse2NOOiJyZWdleHAiLGI6IihzfHRyfHkpLyhcXFxcLnxbXi9dKSovKFxcXFwufFteL10pKi9bYS16XSoiLHI6MTB9LHtjTjoicmVnZXhwIixiOiIobXxxcik/LyIsZToiL1thLXpdKiIsYzpbZS5CRV0scjowfV19LHtjTjoic3ViIixiV0s6dHJ1ZSxlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsazoic3ViIixyOjV9LHtjTjoib3BlcmF0b3IiLGI6Ii1cXHdcXGIiLHI6MH1dO2QuYz1jO2guY1sxXS5jPWM7cmV0dXJue2s6YSxjOmN9fShobGpzKTtobGpzLkxBTkdVQUdFUy5vYmplY3RpdmVjPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNhdGNoIGV4cG9ydCBzaXplb2YgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgZm9yIHVuaW9uIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIG11dGFibGUgaWYgcHVibGljIGRvIHJldHVybiBnb3RvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiBhc20gY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSB0aHJvdyByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHdjaGFyX3QgaW5saW5lIHJlYWRvbmx5IGFzc2lnbiBwcm9wZXJ0eSBzZWxmIHN5bmNocm9uaXplZCBlbmQgc3ludGhlc2l6ZSBpZCBvcHRpb25hbCByZXF1aXJlZCBub25hdG9taWMgc3VwZXIgdW5pY2hhciBmaW5hbGx5IGR5bmFtaWMgSUJPdXRsZXQgSUJBY3Rpb24gc2VsZWN0b3Igc3Ryb25nIHdlYWsgcmVhZG9ubHkiLGxpdGVyYWw6ImZhbHNlIHRydWUgRkFMU0UgVFJVRSBuaWwgWUVTIE5PIE5VTEwiLGJ1aWx0X2luOiJOU1N0cmluZyBOU0RpY3Rpb25hcnkgQ0dSZWN0IENHUG9pbnQgVUlCdXR0b24gVUlMYWJlbCBVSVRleHRWaWV3IFVJV2ViVmlldyBNS01hcFZpZXcgVUlTZWdtZW50ZWRDb250cm9sIE5TT2JqZWN0IFVJVGFibGVWaWV3RGVsZWdhdGUgVUlUYWJsZVZpZXdEYXRhU291cmNlIE5TVGhyZWFkIFVJQWN0aXZpdHlJbmRpY2F0b3IgVUlUYWJiYXIgVUlUb29sQmFyIFVJQmFyQnV0dG9uSXRlbSBVSUltYWdlVmlldyBOU0F1dG9yZWxlYXNlUG9vbCBVSVRhYmxlVmlldyBCT09MIE5TSW50ZWdlciBDR0Zsb2F0IE5TRXhjZXB0aW9uIE5TTG9nIE5TTXV0YWJsZVN0cmluZyBOU011dGFibGVBcnJheSBOU011dGFibGVEaWN0aW9uYXJ5IE5TVVJMIE5TSW5kZXhQYXRoIENHU2l6ZSBVSVRhYmxlVmlld0NlbGwgVUlWaWV3IFVJVmlld0NvbnRyb2xsZXIgVUlOYXZpZ2F0aW9uQmFyIFVJTmF2aWdhdGlvbkNvbnRyb2xsZXIgVUlUYWJCYXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXIgVUlQb3BvdmVyQ29udHJvbGxlckRlbGVnYXRlIFVJSW1hZ2UgTlNOdW1iZXIgVUlTZWFyY2hCYXIgTlNGZXRjaGVkUmVzdWx0c0NvbnRyb2xsZXIgTlNGZXRjaGVkUmVzdWx0c0NoYW5nZVR5cGUgVUlTY3JvbGxWaWV3IFVJU2Nyb2xsVmlld0RlbGVnYXRlIFVJRWRnZUluc2V0cyBVSUNvbG9yIFVJRm9udCBVSUFwcGxpY2F0aW9uIE5TTm90Rm91bmQgTlNOb3RpZmljYXRpb25DZW50ZXIgTlNOb3RpZmljYXRpb24gVUlMb2NhbE5vdGlmaWNhdGlvbiBOU0J1bmRsZSBOU0ZpbGVNYW5hZ2VyIE5TVGltZUludGVydmFsIE5TRGF0ZSBOU0NhbGVuZGFyIE5TVXNlckRlZmF1bHRzIFVJV2luZG93IE5TUmFuZ2UgTlNBcnJheSBOU0Vycm9yIE5TVVJMUmVxdWVzdCBOU1VSTENvbm5lY3Rpb24gVUlJbnRlcmZhY2VPcmllbnRhdGlvbiBNUE1vdmllUGxheWVyQ29udHJvbGxlciBkaXNwYXRjaF9vbmNlX3QgZGlzcGF0Y2hfcXVldWVfdCBkaXNwYXRjaF9zeW5jIGRpc3BhdGNoX2FzeW5jIGRpc3BhdGNoX29uY2UifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5DTk0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixpOiJbXlxcXFxdW14nXSJ9LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjaW1wb3J0IixlOiIkIixjOlt7Y046InRpdGxlIixiOiciJyxlOiciJ30se2NOOiJ0aXRsZSIsYjoiPCIsZToiPiJ9XX0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQifSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIoe3wkKSIsazoiaW50ZXJmYWNlIGNsYXNzIHByb3RvY29sIGltcGxlbWVudGF0aW9uIixjOlt7Y046ImlkIixiOmEuVUlSfV19LHtjTjoidmFyaWFibGUiLGI6IlxcLiIrYS5VSVIscjowfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jb2ZmZWVzY3JpcHQ9ZnVuY3Rpb24oYyl7dmFyIGI9e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHRoZW4gdW5sZXNzIHVudGlsIGxvb3Agb2YgYnkgd2hlbiBhbmQgb3IgaXMgaXNudCBub3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgeWVzIG5vIG9uIG9mZiIscmVzZXJ2ZWQ6ImNhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgdm9pZCB3aXRoIGNvbnN0IGxldCBlbnVtIGV4cG9ydCBpbXBvcnQgbmF0aXZlIF9faGFzUHJvcCBfX2V4dGVuZHMgX19zbGljZSBfX2JpbmQgX19pbmRleE9mIixidWlsdF9pbjoibnBtIHJlcXVpcmUgY29uc29sZSBwcmludCBtb2R1bGUgZXhwb3J0cyBnbG9iYWwgd2luZG93IGRvY3VtZW50In07dmFyIGE9IltBLVphLXokX11bMC05QS1aYS16JF9dKiI7dmFyIGY9e2NOOiJ0aXRsZSIsYjphfTt2YXIgZT17Y046InN1YnN0IixiOiIjXFx7IixlOiJ9IixrOmIsfTt2YXIgZD1bYy5CTk0sYy5pbmhlcml0KGMuQ05NLHtzdGFydHM6e2U6IihcXHMqLyk/IixyOjB9fSkse2NOOiJzdHJpbmciLGI6IicnJyIsZToiJycnIixjOltjLkJFXX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2MuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyIiIicsZTonIiIiJyxjOltjLkJFLGVdfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbYy5CRSxlXSxyOjB9LHtjTjoicmVnZXhwIixiOiIvLy8iLGU6Ii8vLyIsYzpbYy5IQ01dfSx7Y046InJlZ2V4cCIsYjoiLy9bZ2ltXSoiLHI6MH0se2NOOiJyZWdleHAiLGI6Ii9cXFMoXFxcXC58W15cXG5dKSo/L1tnaW1dKig/PVxcc3xcXFd8JCkifSx7Y046InByb3BlcnR5IixiOiJAIithfSx7YjoiYCIsZToiYCIsZUI6dHJ1ZSxlRTp0cnVlLHNMOiJqYXZhc2NyaXB0In1dO2UuYz1kO3JldHVybntrOmIsYzpkLmNvbmNhdChbe2NOOiJjb21tZW50IixiOiIjIyMiLGU6IiMjIyJ9LGMuSENNLHtjTjoiZnVuY3Rpb24iLGI6IigiK2ErIlxccyo9XFxzKik/KFxcKC4qXFwpKT9cXHMqWy09XT4iLGU6IlstPV0+IixyQjp0cnVlLGM6W2Yse2NOOiJwYXJhbXMiLGI6IlxcKCIsckI6dHJ1ZSxjOlt7YjovXCgvLGU6L1wpLyxrOmIsYzpbInNlbGYiXS5jb25jYXQoZCl9XX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxrOiJjbGFzcyIsZToiJCIsaToiWzpcXFtcXF1dIixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyIsZVc6dHJ1ZSxpOiI6IixjOltmXX0sZl19LHtjTjoiYXR0cmlidXRlIixiOmErIjoiLGU6IjoiLHJCOnRydWUsZUU6dHJ1ZX1dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLm5naW54PWZ1bmN0aW9uKGIpe3ZhciBjPVt7Y046InZhcmlhYmxlIixiOiJcXCRcXGQrIn0se2NOOiJ2YXJpYWJsZSIsYjoiXFwkeyIsZToifSJ9LHtjTjoidmFyaWFibGUiLGI6IltcXCRcXEBdIitiLlVJUn1dO3ZhciBhPXtlVzp0cnVlLGw6IlthLXovX10rIixrOntidWlsdF9pbjoib24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgc2VsZWN0IGJyZWFrIGxhc3QgcGVybWFuZW50IHJlZGlyZWN0IGtxdWV1ZSBydHNpZyBlcG9sbCBwb2xsIC9kZXYvcG9sbCJ9LHI6MCxpOiI9PiIsYzpbYi5IQ00se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2IuQkVdLmNvbmNhdChjKSxyOjB9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InVybCIsYjoiKFthLXpdKyk6LyIsZToiXFxzIixlVzp0cnVlLGVFOnRydWV9LHtjTjoicmVnZXhwIixiOiJcXHNcXF4iLGU6Ilxcc3x7fDsiLHJFOnRydWUsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiflxcKj9cXHMrIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IlxcKihcXC5bYS16XFwtXSspKyIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiKFthLXpcXC1dK1xcLikrXFwqIixjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoibnVtYmVyIixiOiJcXGJcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSg6XFxkezEsNX0pP1xcYiJ9LHtjTjoibnVtYmVyIixiOiJcXGJcXGQrW2tLbU1nR2RzaGR3eV0qXFxiIixyOjB9XS5jb25jYXQoYyl9O3JldHVybntjOltiLkhDTSx7YjpiLlVJUisiXFxzIixlOiI7fHsiLHJCOnRydWUsYzpbe2NOOiJ0aXRsZSIsYjpiLlVJUixzdGFydHM6YX1dLHI6MH1dLGk6IlteXFxzXFx9XSJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5qc29uPWZ1bmN0aW9uKGEpe3ZhciBlPXtsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwifTt2YXIgZD1bYS5RU00sYS5DTk1dO3ZhciBjPXtjTjoidmFsdWUiLGU6IiwiLGVXOnRydWUsZUU6dHJ1ZSxjOmQsazplfTt2YXIgYj17YjoieyIsZToifSIsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6J1xccyoiJyxlOiciXFxzKjpcXHMqJyxlQjp0cnVlLGVFOnRydWUsYzpbYS5CRV0saToiXFxuIixzdGFydHM6Y31dLGk6IlxcUyJ9O3ZhciBmPXtiOiJcXFsiLGU6IlxcXSIsYzpbYS5pbmhlcml0KGMse2NOOm51bGx9KV0saToiXFxTIn07ZC5zcGxpY2UoZC5sZW5ndGgsMCxiLGYpO3JldHVybntjOmQsazplLGk6IlxcUyJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5hcGFjaGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJudW1iZXIiLGI6IltcXCQlXVxcZCsifTtyZXR1cm57Y0k6dHJ1ZSxjOlthLkhDTSx7Y046InRhZyIsYjoiPC8/IixlOiI+In0se2NOOiJrZXl3b3JkIixiOi9cdysvLHI6MCxrOntjb21tb246Im9yZGVyIGRlbnkgYWxsb3cgc2V0ZW52IHJld3JpdGVydWxlIHJld3JpdGVlbmdpbmUgcmV3cml0ZWNvbmQgZG9jdW1lbnRyb290IHNldGhhbmRsZXIgZXJyb3Jkb2N1bWVudCBsb2FkbW9kdWxlIG9wdGlvbnMgaGVhZGVyIGxpc3RlbiBzZXJ2ZXJyb290IHNlcnZlcm5hbWUifSxzdGFydHM6e2U6LyQvLHI6MCxrOntsaXRlcmFsOiJvbiBvZmYgYWxsIn0sYzpbe2NOOiJzcWJyYWNrZXQiLGI6Ilxcc1xcWyIsZToiXFxdJCJ9LHtjTjoiY2JyYWNrZXQiLGI6IltcXCQlXVxceyIsZToiXFx9IixjOlsic2VsZiIsYl19LGIsYS5RU01dfX1dLGk6L1xTL319KGhsanMpO2hsanMuTEFOR1VBR0VTLmNwcD1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiZmFsc2UgaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBzdHJ1Y3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSB1bnNpZ25lZCBsb25nIHRocm93IHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgZG8gcmV0dXJuIGdvdG8gYXV0byB2b2lkIGVudW0gZWxzZSBicmVhayBuZXcgZXh0ZXJuIHVzaW5nIHRydWUgY2xhc3MgYXNtIGNhc2UgdHlwZWlkIHNob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSBkZWxldGUgYWxpZ25vZiBjaGFyMTZfdCBjaGFyMzJfdCBjb25zdGV4cHIgZGVjbHR5cGUgbm9leGNlcHQgbnVsbHB0ciBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBfQm9vbCBjb21wbGV4IixidWlsdF9pbjoic3RkIHN0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RyaW5nc3RyZWFtIGlzdHJpbmdzdHJlYW0gb3N0cmluZ3N0cmVhbSBhdXRvX3B0ciBkZXF1ZSBsaXN0IHF1ZXVlIHN0YWNrIHZlY3RvciBtYXAgc2V0IGJpdHNldCBtdWx0aXNldCBtdWx0aW1hcCB1bm9yZGVyZWRfc2V0IHVub3JkZXJlZF9tYXAgdW5vcmRlcmVkX211bHRpc2V0IHVub3JkZXJlZF9tdWx0aW1hcCBhcnJheSBzaGFyZWRfcHRyIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUVNNLHtjTjoic3RyaW5nIixiOiInXFxcXD8uIixlOiInIixpOiIuIn0se2NOOiJudW1iZXIiLGI6IlxcYihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSh1fFV8bHxMfHVsfFVMfGZ8RikifSxhLkNOTSx7Y046InByZXByb2Nlc3NvciIsYjoiIyIsZToiJCIsYzpbe2I6IjwiLGU6Ij4iLGk6IlxcbiJ9LGEuQ0xDTV19LHtjTjoic3RsX2NvbnRhaW5lciIsYjoiXFxiKGRlcXVlfGxpc3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5KVxccyo8IixlOiI+IixrOmIscjoxMCxjOlsic2VsZiJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYWtlZmlsZT1mdW5jdGlvbihhKXt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfTtyZXR1cm57YzpbYS5IQ00se2I6L15cdytccypcVyo9LyxyQjp0cnVlLHI6MCxzdGFydHM6e2NOOiJjb25zdGFudCIsZTovXHMqXFcqPS8sZUU6dHJ1ZSxzdGFydHM6e2U6LyQvLHI6MCxjOltiXSx9fX0se2NOOiJ0aXRsZSIsYjovXltcd10rOlxzKiQvfSx7Y046InBob255IixiOi9eXC5QSE9OWTovLGU6LyQvLGs6Ii5QSE9OWSIsbDovW1wuXHddKy99LHtiOi9eXHQrLyxlOi8kLyxjOlthLlFTTSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuZ289ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImJyZWFrIGRlZmF1bHQgZnVuYyBpbnRlcmZhY2Ugc2VsZWN0IGNhc2UgbWFwIHN0cnVjdCBjaGFuIGVsc2UgZ290byBwYWNrYWdlIHN3aXRjaCBjb25zdCBmYWxsdGhyb3VnaCBpZiByYW5nZSB0eXBlIGNvbnRpbnVlIGZvciBpbXBvcnQgcmV0dXJuIHZhciBnbyBkZWZlciIsY29uc3RhbnQ6InRydWUgZmFsc2UgaW90YSBuaWwiLHR5cGVuYW1lOiJib29sIGJ5dGUgY29tcGxleDY0IGNvbXBsZXgxMjggZmxvYXQzMiBmbG9hdDY0IGludDggaW50MTYgaW50MzIgaW50NjQgc3RyaW5nIHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0IGludCB1aW50IHVpbnRwdHIgcnVuZSIsYnVpbHRfaW46ImFwcGVuZCBjYXAgY2xvc2UgY29tcGxleCBjb3B5IGltYWcgbGVuIG1ha2UgbmV3IHBhbmljIHByaW50IHByaW50bG4gcmVhbCByZWNvdmVyIGRlbGV0ZSJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJyIsZToiW15cXFxcXSciLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAifSx7Y046Im51bWJlciIsYjoiW15hLXpBLVpfMC05XShcXC18XFwrKT9cXGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHMpKFxcK3xcXC0pP1xcZCspPyIscjowfSxhLkNOTV19fShobGpzKTtQSwcIFVltTvZ1AAD2dQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAc3RhdGljXGxpYlxqcXVlcnkuZm9ybS5taW4uanMvKiEKICogalF1ZXJ5IEZvcm0gUGx1Z2luCiAqIHZlcnNpb246IDMuNDYuMC0yMDEzLjExLjIxCiAqIFJlcXVpcmVzIGpRdWVyeSB2MS41IG9yIGxhdGVyCiAqIENvcHlyaWdodCAoYykgMjAxMyBNLiBBbHN1cAogKiBFeGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBhdDogaHR0cDovL21hbHN1cC5jb20vanF1ZXJ5L2Zvcm0vCiAqIFByb2plY3QgcmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKiBodHRwczovL2dpdGh1Yi5jb20vbWFsc3VwL2Zvcm0jY29weXJpZ2h0LWFuZC1saWNlbnNlCiAqLwooZnVuY3Rpb24oYSl7aWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbImpxdWVyeSJdLGEpfWVsc2V7YSgodHlwZW9mKGpRdWVyeSkhPSJ1bmRlZmluZWQiKT9qUXVlcnk6d2luZG93LlplcHRvKX19KGZ1bmN0aW9uKGYpe3ZhciBjPXt9O2MuZmlsZWFwaT1mKCI8aW5wdXQgdHlwZT0nZmlsZScvPiIpLmdldCgwKS5maWxlcyE9PXVuZGVmaW5lZDtjLmZvcm1kYXRhPXdpbmRvdy5Gb3JtRGF0YSE9PXVuZGVmaW5lZDt2YXIgZT0hIWYuZm4ucHJvcDtmLmZuLmF0dHIyPWZ1bmN0aW9uKCl7aWYoIWUpe3JldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBnPXRoaXMucHJvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoKGcmJmcuanF1ZXJ5KXx8dHlwZW9mIGc9PT0ic3RyaW5nIil7cmV0dXJuIGd9cmV0dXJuIHRoaXMuYXR0ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2YuZm4uYWpheFN1Ym1pdD1mdW5jdGlvbihqKXtpZighdGhpcy5sZW5ndGgpe2QoImFqYXhTdWJtaXQ6IHNraXBwaW5nIHN1Ym1pdCBwcm9jZXNzIC0gbm8gZWxlbWVudCBzZWxlY3RlZCIpO3JldHVybiB0aGlzfXZhciBpLEMsbSxvPXRoaXM7aWYodHlwZW9mIGo9PSJmdW5jdGlvbiIpe2o9e3N1Y2Nlc3M6an19ZWxzZXtpZihqPT09dW5kZWZpbmVkKXtqPXt9fX1pPWoudHlwZXx8dGhpcy5hdHRyMigibWV0aG9kIik7Qz1qLnVybHx8dGhpcy5hdHRyMigiYWN0aW9uIik7bT0odHlwZW9mIEM9PT0ic3RyaW5nIik/Zi50cmltKEMpOiIiO209bXx8d2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiO2lmKG0pe209KG0ubWF0Y2goL14oW14jXSspLyl8fFtdKVsxXX1qPWYuZXh0ZW5kKHRydWUse3VybDptLHN1Y2Nlc3M6Zi5hamF4U2V0dGluZ3Muc3VjY2Vzcyx0eXBlOml8fGYuYWpheFNldHRpbmdzLnR5cGUsaWZyYW1lU3JjOi9eaHR0cHMvaS50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIik/ImphdmFzY3JpcHQ6ZmFsc2UiOiJhYm91dDpibGFuayJ9LGopO3ZhciB1PXt9O3RoaXMudHJpZ2dlcigiZm9ybS1wcmUtc2VyaWFsaXplIixbdGhpcyxqLHVdKTtpZih1LnZldG8pe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tcHJlLXNlcmlhbGl6ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9aWYoai5iZWZvcmVTZXJpYWxpemUmJmouYmVmb3JlU2VyaWFsaXplKHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVNlcmlhbGl6ZSBjYWxsYmFjayIpO3JldHVybiB0aGlzfXZhciBuPWoudHJhZGl0aW9uYWw7aWYobj09PXVuZGVmaW5lZCl7bj1mLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbH12YXIgcz1bXTt2YXIgRSxGPXRoaXMuZm9ybVRvQXJyYXkoai5zZW1hbnRpYyxzKTtpZihqLmRhdGEpe2ouZXh0cmFEYXRhPWouZGF0YTtFPWYucGFyYW0oai5kYXRhLG4pfWlmKGouYmVmb3JlU3VibWl0JiZqLmJlZm9yZVN1Ym1pdChGLHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVN1Ym1pdCBjYWxsYmFjayIpO3JldHVybiB0aGlzfXRoaXMudHJpZ2dlcigiZm9ybS1zdWJtaXQtdmFsaWRhdGUiLFtGLHRoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXN1Ym1pdC12YWxpZGF0ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9dmFyIHk9Zi5wYXJhbShGLG4pO2lmKEUpe3k9KHk/KHkrIiYiK0UpOkUpfWlmKGoudHlwZS50b1VwcGVyQ2FzZSgpPT0iR0VUIil7ai51cmwrPShqLnVybC5pbmRleE9mKCI/Iik+PTA/IiYiOiI/IikreTtqLmRhdGE9bnVsbH1lbHNle2ouZGF0YT15fXZhciBIPVtdO2lmKGoucmVzZXRGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLnJlc2V0Rm9ybSgpfSl9aWYoai5jbGVhckZvcm0pe0gucHVzaChmdW5jdGlvbigpe28uY2xlYXJGb3JtKGouaW5jbHVkZUhpZGRlbil9KX1pZighai5kYXRhVHlwZSYmai50YXJnZXQpe3ZhciBsPWouc3VjY2Vzc3x8ZnVuY3Rpb24oKXt9O0gucHVzaChmdW5jdGlvbihxKXt2YXIgaz1qLnJlcGxhY2VUYXJnZXQ/InJlcGxhY2VXaXRoIjoiaHRtbCI7ZihqLnRhcmdldClba10ocSkuZWFjaChsLGFyZ3VtZW50cyl9KX1lbHNle2lmKGouc3VjY2Vzcyl7SC5wdXNoKGouc3VjY2Vzcyl9fWouc3VjY2Vzcz1mdW5jdGlvbihLLHEsTCl7dmFyIEo9ai5jb250ZXh0fHx0aGlzO2Zvcih2YXIgST0wLGs9SC5sZW5ndGg7STxrO0krKyl7SFtJXS5hcHBseShKLFtLLHEsTHx8byxvXSl9fTtpZihqLmVycm9yKXt2YXIgej1qLmVycm9yO2ouZXJyb3I9ZnVuY3Rpb24oSixrLHEpe3ZhciBJPWouY29udGV4dHx8dGhpczt6LmFwcGx5KEksW0osayxxLG9dKX19aWYoai5jb21wbGV0ZSl7dmFyIGg9ai5jb21wbGV0ZTtqLmNvbXBsZXRlPWZ1bmN0aW9uKEksayl7dmFyIHE9ai5jb250ZXh0fHx0aGlzO2guYXBwbHkocSxbSSxrLG9dKX19dmFyIEQ9ZigiaW5wdXRbdHlwZT1maWxlXTplbmFibGVkIix0aGlzKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzKS52YWwoKSE9PSIifSk7dmFyIHA9RC5sZW5ndGg+MDt2YXIgQj0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7dmFyIHg9KG8uYXR0cigiZW5jdHlwZSIpPT1CfHxvLmF0dHIoImVuY29kaW5nIik9PUIpO3ZhciB3PWMuZmlsZWFwaSYmYy5mb3JtZGF0YTtkKCJmaWxlQVBJIDoiK3cpO3ZhciByPShwfHx4KSYmIXc7dmFyIHY7aWYoai5pZnJhbWUhPT1mYWxzZSYmKGouaWZyYW1lfHxyKSl7aWYoai5jbG9zZUtlZXBBbGl2ZSl7Zi5nZXQoai5jbG9zZUtlZXBBbGl2ZSxmdW5jdGlvbigpe3Y9RyhGKX0pfWVsc2V7dj1HKEYpfX1lbHNle2lmKChwfHx4KSYmdyl7dj10KEYpfWVsc2V7dj1mLmFqYXgoail9fW8ucmVtb3ZlRGF0YSgianF4aHIiKS5kYXRhKCJqcXhociIsdik7Zm9yKHZhciBBPTA7QTxzLmxlbmd0aDtBKyspe3NbQV09bnVsbH10aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LW5vdGlmeSIsW3RoaXMsal0pO3JldHVybiB0aGlzO2Z1bmN0aW9uIGcoSyl7dmFyIEw9Zi5wYXJhbShLLGoudHJhZGl0aW9uYWwpLnNwbGl0KCImIik7dmFyIHE9TC5sZW5ndGg7dmFyIGs9W107dmFyIEosSTtmb3IoSj0wO0o8cTtKKyspe0xbSl09TFtKXS5yZXBsYWNlKC9cKy9nLCIgIik7ST1MW0pdLnNwbGl0KCI9Iik7ay5wdXNoKFtkZWNvZGVVUklDb21wb25lbnQoSVswXSksZGVjb2RlVVJJQ29tcG9uZW50KElbMV0pXSl9cmV0dXJuIGt9ZnVuY3Rpb24gdChxKXt2YXIgaz1uZXcgRm9ybURhdGEoKTtmb3IodmFyIEk9MDtJPHEubGVuZ3RoO0krKyl7ay5hcHBlbmQocVtJXS5uYW1lLHFbSV0udmFsdWUpfWlmKGouZXh0cmFEYXRhKXt2YXIgTD1nKGouZXh0cmFEYXRhKTtmb3IoST0wO0k8TC5sZW5ndGg7SSsrKXtpZihMW0ldKXtrLmFwcGVuZChMW0ldWzBdLExbSV1bMV0pfX19ai5kYXRhPW51bGw7dmFyIEs9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqLHtjb250ZW50VHlwZTpmYWxzZSxwcm9jZXNzRGF0YTpmYWxzZSxjYWNoZTpmYWxzZSx0eXBlOml8fCJQT1NUIn0pO2lmKGoudXBsb2FkUHJvZ3Jlc3Mpe0sueGhyPWZ1bmN0aW9uKCl7dmFyIE09Zi5hamF4U2V0dGluZ3MueGhyKCk7aWYoTS51cGxvYWQpe00udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihRKXt2YXIgUD0wO3ZhciBOPVEubG9hZGVkfHxRLnBvc2l0aW9uO3ZhciBPPVEudG90YWw7aWYoUS5sZW5ndGhDb21wdXRhYmxlKXtQPU1hdGguY2VpbChOL08qMTAwKX1qLnVwbG9hZFByb2dyZXNzKFEsTixPLFApfSxmYWxzZSl9cmV0dXJuIE19fUsuZGF0YT1udWxsO3ZhciBKPUsuYmVmb3JlU2VuZDtLLmJlZm9yZVNlbmQ9ZnVuY3Rpb24oTixNKXtpZihqLmZvcm1EYXRhKXtNLmRhdGE9ai5mb3JtRGF0YX1lbHNle00uZGF0YT1rfWlmKEope0ouY2FsbCh0aGlzLE4sTSl9fTtyZXR1cm4gZi5hamF4KEspfWZ1bmN0aW9uIEcoYWYpe3ZhciBMPW9bMF0sSyxhYixWLGFkLFksTixRLE8sUCxaLGFjLFQ7dmFyIGFpPWYuRGVmZXJyZWQoKTthaS5hYm9ydD1mdW5jdGlvbihhail7Ty5hYm9ydChhail9O2lmKGFmKXtmb3IoYWI9MDthYjxzLmxlbmd0aDthYisrKXtLPWYoc1thYl0pO2lmKGUpe0sucHJvcCgiZGlzYWJsZWQiLGZhbHNlKX1lbHNle0sucmVtb3ZlQXR0cigiZGlzYWJsZWQiKX19fVY9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqKTtWLmNvbnRleHQ9Vi5jb250ZXh0fHxWO1k9ImpxRm9ybUlPIisobmV3IERhdGUoKS5nZXRUaW1lKCkpO2lmKFYuaWZyYW1lVGFyZ2V0KXtOPWYoVi5pZnJhbWVUYXJnZXQpO1o9Ti5hdHRyMigibmFtZSIpO2lmKCFaKXtOLmF0dHIyKCJuYW1lIixZKX1lbHNle1k9Wn19ZWxzZXtOPWYoJzxpZnJhbWUgbmFtZT0iJytZKyciIHNyYz0iJytWLmlmcmFtZVNyYysnIiAvPicpO04uY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiLTEwMDBweCIsbGVmdDoiLTEwMDBweCJ9KX1RPU5bMF07Tz17YWJvcnRlZDowLHJlc3BvbnNlVGV4dDpudWxsLHJlc3BvbnNlWE1MOm51bGwsc3RhdHVzOjAsc3RhdHVzVGV4dDoibi9hIixnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXt9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKCl7fSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKCl7fSxhYm9ydDpmdW5jdGlvbihhail7dmFyIGFrPShhaj09PSJ0aW1lb3V0Ij8idGltZW91dCI6ImFib3J0ZWQiKTtkKCJhYm9ydGluZyB1cGxvYWQuLi4gIithayk7dGhpcy5hYm9ydGVkPTE7dHJ5e2lmKFEuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCl7US5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kKCJTdG9wIil9fWNhdGNoKGFsKXt9Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKTtPLmVycm9yPWFrO2lmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhayxhail9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFrXSl9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFrKX19fTthZD1WLmdsb2JhbDtpZihhZCYmMD09PWYuYWN0aXZlKyspe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iil9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFNlbmQiLFtPLFZdKX1pZihWLmJlZm9yZVNlbmQmJlYuYmVmb3JlU2VuZC5jYWxsKFYuY29udGV4dCxPLFYpPT09ZmFsc2Upe2lmKFYuZ2xvYmFsKXtmLmFjdGl2ZS0tfWFpLnJlamVjdCgpO3JldHVybiBhaX1pZihPLmFib3J0ZWQpe2FpLnJlamVjdCgpO3JldHVybiBhaX1QPUwuY2xrO2lmKFApe1o9UC5uYW1lO2lmKFomJiFQLmRpc2FibGVkKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbWl09UC52YWx1ZTtpZihQLnR5cGU9PSJpbWFnZSIpe1YuZXh0cmFEYXRhW1orIi54Il09TC5jbGtfeDtWLmV4dHJhRGF0YVtaKyIueSJdPUwuY2xrX3l9fX12YXIgVT0xO3ZhciBSPTI7ZnVuY3Rpb24gUyhhbCl7dmFyIGFrPW51bGw7dHJ5e2lmKGFsLmNvbnRlbnRXaW5kb3cpe2FrPWFsLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnR9fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50V2luZG93IGRvY3VtZW50OiAiK2FqKX1pZihhayl7cmV0dXJuIGFrfXRyeXthaz1hbC5jb250ZW50RG9jdW1lbnQ/YWwuY29udGVudERvY3VtZW50OmFsLmRvY3VtZW50fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50RG9jdW1lbnQ6ICIrYWopO2FrPWFsLmRvY3VtZW50fXJldHVybiBha312YXIgSj1mKCJtZXRhW25hbWU9Y3NyZi10b2tlbl0iKS5hdHRyKCJjb250ZW50Iik7dmFyIEk9ZigibWV0YVtuYW1lPWNzcmYtcGFyYW1dIikuYXR0cigiY29udGVudCIpO2lmKEkmJkope1YuZXh0cmFEYXRhPVYuZXh0cmFEYXRhfHx7fTtWLmV4dHJhRGF0YVtJXT1KfWZ1bmN0aW9uIGFhKCl7dmFyIGFsPW8uYXR0cjIoInRhcmdldCIpLGFqPW8uYXR0cjIoImFjdGlvbiIpO0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLFkpO2lmKCFpfHwvcG9zdC9pLnRlc3QoaSkpe0wuc2V0QXR0cmlidXRlKCJtZXRob2QiLCJQT1NUIil9aWYoYWohPVYudXJsKXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixWLnVybCl9aWYoIVYuc2tpcEVuY29kaW5nT3ZlcnJpZGUmJighaXx8L3Bvc3QvaS50ZXN0KGkpKSl7by5hdHRyKHtlbmNvZGluZzoibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsZW5jdHlwZToibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9KX1pZihWLnRpbWVvdXQpe1Q9c2V0VGltZW91dChmdW5jdGlvbigpe2FjPXRydWU7WChVKX0sVi50aW1lb3V0KX1mdW5jdGlvbiBhbSgpe3RyeXt2YXIgYXE9UyhRKS5yZWFkeVN0YXRlO2QoInN0YXRlID0gIithcSk7aWYoYXEmJmFxLnRvTG93ZXJDYXNlKCk9PSJ1bmluaXRpYWxpemVkIil7c2V0VGltZW91dChhbSw1MCl9fWNhdGNoKGFyKXtkKCJTZXJ2ZXIgYWJvcnQ6ICIsYXIsIiAoIixhci5uYW1lLCIpIik7WChSKTtpZihUKXtjbGVhclRpbWVvdXQoVCl9VD11bmRlZmluZWR9fXZhciBhaz1bXTt0cnl7aWYoVi5leHRyYURhdGEpe2Zvcih2YXIgYXAgaW4gVi5leHRyYURhdGEpe2lmKFYuZXh0cmFEYXRhLmhhc093blByb3BlcnR5KGFwKSl7aWYoZi5pc1BsYWluT2JqZWN0KFYuZXh0cmFEYXRhW2FwXSkmJlYuZXh0cmFEYXRhW2FwXS5oYXNPd25Qcm9wZXJ0eSgibmFtZSIpJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoInZhbHVlIikpe2FrLnB1c2goZignPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJytWLmV4dHJhRGF0YVthcF0ubmFtZSsnIj4nKS52YWwoVi5leHRyYURhdGFbYXBdLnZhbHVlKS5hcHBlbmRUbyhMKVswXSl9ZWxzZXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrYXArJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXSkuYXBwZW5kVG8oTClbMF0pfX19fWlmKCFWLmlmcmFtZVRhcmdldCl7Ti5hcHBlbmRUbygiYm9keSIpfWlmKFEuYXR0YWNoRXZlbnQpe1EuYXR0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXNldFRpbWVvdXQoYW0sMTUpO3RyeXtMLnN1Ym1pdCgpfWNhdGNoKGFuKXt2YXIgYW89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLnN1Ym1pdDthby5hcHBseShMKX19ZmluYWxseXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixhaik7aWYoYWwpe0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLGFsKX1lbHNle28ucmVtb3ZlQXR0cigidGFyZ2V0Iil9ZihhaykucmVtb3ZlKCl9fWlmKFYuZm9yY2VTeW5jKXthYSgpfWVsc2V7c2V0VGltZW91dChhYSwxMCl9dmFyIGFnLGFoLGFlPTUwLE07ZnVuY3Rpb24gWChhcCl7aWYoTy5hYm9ydGVkfHxNKXtyZXR1cm59YWg9UyhRKTtpZighYWgpe2QoImNhbm5vdCBhY2Nlc3MgcmVzcG9uc2UgZG9jdW1lbnQiKTthcD1SfWlmKGFwPT09VSYmTyl7Ty5hYm9ydCgidGltZW91dCIpO2FpLnJlamVjdChPLCJ0aW1lb3V0Iik7cmV0dXJufWVsc2V7aWYoYXA9PVImJk8pe08uYWJvcnQoInNlcnZlciBhYm9ydCIpO2FpLnJlamVjdChPLCJlcnJvciIsInNlcnZlciBhYm9ydCIpO3JldHVybn19aWYoIWFofHxhaC5sb2NhdGlvbi5ocmVmPT1WLmlmcmFtZVNyYyl7aWYoIWFjKXtyZXR1cm59fWlmKFEuZGV0YWNoRXZlbnQpe1EuZGV0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXZhciBhbj0ic3VjY2VzcyIsYXI7dHJ5e2lmKGFjKXt0aHJvdyJ0aW1lb3V0In12YXIgYW09Vi5kYXRhVHlwZT09InhtbCJ8fGFoLlhNTERvY3VtZW50fHxmLmlzWE1MRG9jKGFoKTtkKCJpc1htbD0iK2FtKTtpZighYW0mJndpbmRvdy5vcGVyYSYmKGFoLmJvZHk9PT1udWxsfHwhYWguYm9keS5pbm5lckhUTUwpKXtpZigtLWFlKXtkKCJyZXF1ZWluZyBvbkxvYWQgY2FsbGJhY2ssIERPTSBub3QgYXZhaWxhYmxlIik7c2V0VGltZW91dChYLDI1MCk7cmV0dXJufX12YXIgYXQ9YWguYm9keT9haC5ib2R5OmFoLmRvY3VtZW50RWxlbWVudDtPLnJlc3BvbnNlVGV4dD1hdD9hdC5pbm5lckhUTUw6bnVsbDtPLnJlc3BvbnNlWE1MPWFoLlhNTERvY3VtZW50P2FoLlhNTERvY3VtZW50OmFoO2lmKGFtKXtWLmRhdGFUeXBlPSJ4bWwifU8uZ2V0UmVzcG9uc2VIZWFkZXI9ZnVuY3Rpb24oYXcpe3ZhciBhdj17ImNvbnRlbnQtdHlwZSI6Vi5kYXRhVHlwZX07cmV0dXJuIGF2W2F3LnRvTG93ZXJDYXNlKCldfTtpZihhdCl7Ty5zdGF0dXM9TnVtYmVyKGF0LmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YXQuZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH12YXIgYWo9KFYuZGF0YVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpO3ZhciBhcT0vKGpzb258c2NyaXB0fHRleHQpLy50ZXN0KGFqKTtpZihhcXx8Vi50ZXh0YXJlYSl7dmFyIGFvPWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZXh0YXJlYSIpWzBdO2lmKGFvKXtPLnJlc3BvbnNlVGV4dD1hby52YWx1ZTtPLnN0YXR1cz1OdW1iZXIoYW8uZ2V0QXR0cmlidXRlKCJzdGF0dXMiKSl8fE8uc3RhdHVzO08uc3RhdHVzVGV4dD1hby5nZXRBdHRyaWJ1dGUoInN0YXR1c1RleHQiKXx8Ty5zdGF0dXNUZXh0fWVsc2V7aWYoYXEpe3ZhciBhaz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIilbMF07dmFyIGF1PWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoYWspe08ucmVzcG9uc2VUZXh0PWFrLnRleHRDb250ZW50P2FrLnRleHRDb250ZW50OmFrLmlubmVyVGV4dH1lbHNle2lmKGF1KXtPLnJlc3BvbnNlVGV4dD1hdS50ZXh0Q29udGVudD9hdS50ZXh0Q29udGVudDphdS5pbm5lclRleHR9fX19fWVsc2V7aWYoYWo9PSJ4bWwiJiYhTy5yZXNwb25zZVhNTCYmTy5yZXNwb25zZVRleHQpe08ucmVzcG9uc2VYTUw9VyhPLnJlc3BvbnNlVGV4dCl9fXRyeXthZz1rKE8sYWosVil9Y2F0Y2goYWwpe2FuPSJwYXJzZXJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX19Y2F0Y2goYWwpe2QoImVycm9yIGNhdWdodDogIixhbCk7YW49ImVycm9yIjtPLmVycm9yPWFyPShhbHx8YW4pfWlmKE8uYWJvcnRlZCl7ZCgidXBsb2FkIGFib3J0ZWQiKTthbj1udWxsfWlmKE8uc3RhdHVzKXthbj0oTy5zdGF0dXM+PTIwMCYmTy5zdGF0dXM8MzAwfHxPLnN0YXR1cz09PTMwNCk/InN1Y2Nlc3MiOiJlcnJvciJ9aWYoYW49PT0ic3VjY2VzcyIpe2lmKFYuc3VjY2Vzcyl7Vi5zdWNjZXNzLmNhbGwoVi5jb250ZXh0LGFnLCJzdWNjZXNzIixPKX1haS5yZXNvbHZlKE8ucmVzcG9uc2VUZXh0LCJzdWNjZXNzIixPKTtpZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4U3VjY2VzcyIsW08sVl0pfX1lbHNle2lmKGFuKXtpZihhcj09PXVuZGVmaW5lZCl7YXI9Ty5zdGF0dXNUZXh0fWlmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhbixhcil9YWkucmVqZWN0KE8sImVycm9yIixhcik7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFyXSl9fX1pZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtPLFZdKX1pZihhZCYmIS0tZi5hY3RpdmUpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKX1pZihWLmNvbXBsZXRlKXtWLmNvbXBsZXRlLmNhbGwoVi5jb250ZXh0LE8sYW4pfU09dHJ1ZTtpZihWLnRpbWVvdXQpe2NsZWFyVGltZW91dChUKX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIVYuaWZyYW1lVGFyZ2V0KXtOLnJlbW92ZSgpfWVsc2V7Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKX1PLnJlc3BvbnNlWE1MPW51bGx9LDEwMCl9dmFyIFc9Zi5wYXJzZVhNTHx8ZnVuY3Rpb24oYWosYWspe2lmKHdpbmRvdy5BY3RpdmVYT2JqZWN0KXthaz1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpO2FrLmFzeW5jPSJmYWxzZSI7YWsubG9hZFhNTChhail9ZWxzZXthaz0obmV3IERPTVBhcnNlcigpKS5wYXJzZUZyb21TdHJpbmcoYWosInRleHQveG1sIil9cmV0dXJuKGFrJiZhay5kb2N1bWVudEVsZW1lbnQmJmFrLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSE9InBhcnNlcmVycm9yIik/YWs6bnVsbH07dmFyIHE9Zi5wYXJzZUpTT058fGZ1bmN0aW9uKGFqKXtyZXR1cm4gd2luZG93WyJldmFsIl0oIigiK2FqKyIpIil9O3ZhciBrPWZ1bmN0aW9uKGFvLGFtLGFsKXt2YXIgYWs9YW8uZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixhaj1hbT09PSJ4bWwifHwhYW0mJmFrLmluZGV4T2YoInhtbCIpPj0wLGFuPWFqP2FvLnJlc3BvbnNlWE1MOmFvLnJlc3BvbnNlVGV4dDtpZihhaiYmYW4uZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lPT09InBhcnNlcmVycm9yIil7aWYoZi5lcnJvcil7Zi5lcnJvcigicGFyc2VyZXJyb3IiKX19aWYoYWwmJmFsLmRhdGFGaWx0ZXIpe2FuPWFsLmRhdGFGaWx0ZXIoYW4sYW0pfWlmKHR5cGVvZiBhbj09PSJzdHJpbmciKXtpZihhbT09PSJqc29uInx8IWFtJiZhay5pbmRleE9mKCJqc29uIik+PTApe2FuPXEoYW4pfWVsc2V7aWYoYW09PT0ic2NyaXB0Inx8IWFtJiZhay5pbmRleE9mKCJqYXZhc2NyaXB0Iik+PTApe2YuZ2xvYmFsRXZhbChhbil9fX1yZXR1cm4gYW59O3JldHVybiBhaX19O2YuZm4uYWpheEZvcm09ZnVuY3Rpb24oZyl7Zz1nfHx7fTtnLmRlbGVnYXRpb249Zy5kZWxlZ2F0aW9uJiZmLmlzRnVuY3Rpb24oZi5mbi5vbik7aWYoIWcuZGVsZWdhdGlvbiYmdGhpcy5sZW5ndGg9PT0wKXt2YXIgaD17czp0aGlzLnNlbGVjdG9yLGM6dGhpcy5jb250ZXh0fTtpZighZi5pc1JlYWR5JiZoLnMpe2QoIkRPTSBub3QgcmVhZHksIHF1ZXVpbmcgYWpheEZvcm0iKTtmKGZ1bmN0aW9uKCl7ZihoLnMsaC5jKS5hamF4Rm9ybShnKX0pO3JldHVybiB0aGlzfWQoInRlcm1pbmF0aW5nOyB6ZXJvIGVsZW1lbnRzIGZvdW5kIGJ5IHNlbGVjdG9yIisoZi5pc1JlYWR5PyIiOiIgKERPTSBub3QgcmVhZHkpIikpO3JldHVybiB0aGlzfWlmKGcuZGVsZWdhdGlvbil7Zihkb2N1bWVudCkub2ZmKCJzdWJtaXQuZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYikub2ZmKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixhKS5vbigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYikub24oImNsaWNrLmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuYWpheEZvcm1VbmJpbmQoKS5iaW5kKCJzdWJtaXQuZm9ybS1wbHVnaW4iLGcsYikuYmluZCgiY2xpY2suZm9ybS1wbHVnaW4iLGcsYSl9O2Z1bmN0aW9uIGIoaCl7dmFyIGc9aC5kYXRhO2lmKCFoLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtoLnByZXZlbnREZWZhdWx0KCk7ZihoLnRhcmdldCkuYWpheFN1Ym1pdChnKX19ZnVuY3Rpb24gYShrKXt2YXIgaj1rLnRhcmdldDt2YXIgaD1mKGopO2lmKCEoaC5pcygiW3R5cGU9c3VibWl0XSxbdHlwZT1pbWFnZV0iKSkpe3ZhciBnPWguY2xvc2VzdCgiW3R5cGU9c3VibWl0XSIpO2lmKGcubGVuZ3RoPT09MCl7cmV0dXJufWo9Z1swXX12YXIgaT10aGlzO2kuY2xrPWo7aWYoai50eXBlPT0iaW1hZ2UiKXtpZihrLm9mZnNldFghPT11bmRlZmluZWQpe2kuY2xrX3g9ay5vZmZzZXRYO2kuY2xrX3k9ay5vZmZzZXRZfWVsc2V7aWYodHlwZW9mIGYuZm4ub2Zmc2V0PT0iZnVuY3Rpb24iKXt2YXIgbD1oLm9mZnNldCgpO2kuY2xrX3g9ay5wYWdlWC1sLmxlZnQ7aS5jbGtfeT1rLnBhZ2VZLWwudG9wfWVsc2V7aS5jbGtfeD1rLnBhZ2VYLWoub2Zmc2V0TGVmdDtpLmNsa195PWsucGFnZVktai5vZmZzZXRUb3B9fX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5jbGs9aS5jbGtfeD1pLmNsa195PW51bGx9LDEwMCl9Zi5mbi5hamF4Rm9ybVVuYmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIGNsaWNrLmZvcm0tcGx1Z2luIil9O2YuZm4uZm9ybVRvQXJyYXk9ZnVuY3Rpb24oeCxnKXt2YXIgdz1bXTtpZih0aGlzLmxlbmd0aD09PTApe3JldHVybiB3fXZhciBsPXRoaXNbMF07dmFyIHA9eD9sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6bC5lbGVtZW50cztpZighcCl7cmV0dXJuIHd9dmFyIHIscSxvLHksbSx0LGs7Zm9yKHI9MCx0PXAubGVuZ3RoO3I8dDtyKyspe209cFtyXTtvPW0ubmFtZTtpZighb3x8bS5kaXNhYmxlZCl7Y29udGludWV9aWYoeCYmbC5jbGsmJm0udHlwZT09ImltYWdlIil7aWYobC5jbGs9PW0pe3cucHVzaCh7bmFtZTpvLHZhbHVlOmYobSkudmFsKCksdHlwZTptLnR5cGV9KTt3LnB1c2goe25hbWU6bysiLngiLHZhbHVlOmwuY2xrX3h9LHtuYW1lOm8rIi55Iix2YWx1ZTpsLmNsa195fSl9Y29udGludWV9eT1mLmZpZWxkVmFsdWUobSx0cnVlKTtpZih5JiZ5LmNvbnN0cnVjdG9yPT1BcnJheSl7aWYoZyl7Zy5wdXNoKG0pfWZvcihxPTAsaz15Lmxlbmd0aDtxPGs7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTp5W3FdfSl9fWVsc2V7aWYoYy5maWxlYXBpJiZtLnR5cGU9PSJmaWxlIil7aWYoZyl7Zy5wdXNoKG0pfXZhciBoPW0uZmlsZXM7aWYoaC5sZW5ndGgpe2ZvcihxPTA7cTxoLmxlbmd0aDtxKyspe3cucHVzaCh7bmFtZTpvLHZhbHVlOmhbcV0sdHlwZTptLnR5cGV9KX19ZWxzZXt3LnB1c2goe25hbWU6byx2YWx1ZToiIix0eXBlOm0udHlwZX0pfX1lbHNle2lmKHkhPT1udWxsJiZ0eXBlb2YgeSE9InVuZGVmaW5lZCIpe2lmKGcpe2cucHVzaChtKX13LnB1c2goe25hbWU6byx2YWx1ZTp5LHR5cGU6bS50eXBlLHJlcXVpcmVkOm0ucmVxdWlyZWR9KX19fX1pZigheCYmbC5jbGspe3ZhciBzPWYobC5jbGspLHU9c1swXTtvPXUubmFtZTtpZihvJiYhdS5kaXNhYmxlZCYmdS50eXBlPT0iaW1hZ2UiKXt3LnB1c2goe25hbWU6byx2YWx1ZTpzLnZhbCgpfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfX1yZXR1cm4gd307Zi5mbi5mb3JtU2VyaWFsaXplPWZ1bmN0aW9uKGcpe3JldHVybiBmLnBhcmFtKHRoaXMuZm9ybVRvQXJyYXkoZykpfTtmLmZuLmZpZWxkU2VyaWFsaXplPWZ1bmN0aW9uKGgpe3ZhciBnPVtdO3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBtPXRoaXMubmFtZTtpZighbSl7cmV0dXJufXZhciBrPWYuZmllbGRWYWx1ZSh0aGlzLGgpO2lmKGsmJmsuY29uc3RydWN0b3I9PUFycmF5KXtmb3IodmFyIGw9MCxqPWsubGVuZ3RoO2w8ajtsKyspe2cucHVzaCh7bmFtZTptLHZhbHVlOmtbbF19KX19ZWxzZXtpZihrIT09bnVsbCYmdHlwZW9mIGshPSJ1bmRlZmluZWQiKXtnLnB1c2goe25hbWU6dGhpcy5uYW1lLHZhbHVlOmt9KX19fSk7cmV0dXJuIGYucGFyYW0oZyl9O2YuZm4uZmllbGRWYWx1ZT1mdW5jdGlvbihtKXtmb3IodmFyIGw9W10saj0wLGc9dGhpcy5sZW5ndGg7ajxnO2orKyl7dmFyIGs9dGhpc1tqXTt2YXIgaD1mLmZpZWxkVmFsdWUoayxtKTtpZihoPT09bnVsbHx8dHlwZW9mIGg9PSJ1bmRlZmluZWQifHwoaC5jb25zdHJ1Y3Rvcj09QXJyYXkmJiFoLmxlbmd0aCkpe2NvbnRpbnVlfWlmKGguY29uc3RydWN0b3I9PUFycmF5KXtmLm1lcmdlKGwsaCl9ZWxzZXtsLnB1c2goaCl9fXJldHVybiBsfTtmLmZpZWxkVmFsdWU9ZnVuY3Rpb24oZyxvKXt2YXIgaj1nLm5hbWUsdT1nLnR5cGUsdz1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihvPT09dW5kZWZpbmVkKXtvPXRydWV9aWYobyYmKCFqfHxnLmRpc2FibGVkfHx1PT0icmVzZXQifHx1PT0iYnV0dG9uInx8KHU9PSJjaGVja2JveCJ8fHU9PSJyYWRpbyIpJiYhZy5jaGVja2VkfHwodT09InN1Ym1pdCJ8fHU9PSJpbWFnZSIpJiZnLmZvcm0mJmcuZm9ybS5jbGshPWd8fHc9PSJzZWxlY3QiJiZnLnNlbGVjdGVkSW5kZXg9PS0xKSl7cmV0dXJuIG51bGx9aWYodz09InNlbGVjdCIpe3ZhciBwPWcuc2VsZWN0ZWRJbmRleDtpZihwPDApe3JldHVybiBudWxsfXZhciByPVtdLGg9Zy5vcHRpb25zO3ZhciBsPSh1PT0ic2VsZWN0LW9uZSIpO3ZhciBxPShsP3ArMTpoLmxlbmd0aCk7Zm9yKHZhciBrPShsP3A6MCk7azxxO2srKyl7dmFyIG09aFtrXTtpZihtLnNlbGVjdGVkKXt2YXIgcz1tLnZhbHVlO2lmKCFzKXtzPShtLmF0dHJpYnV0ZXMmJm0uYXR0cmlidXRlcy52YWx1ZSYmIShtLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkKSk/bS50ZXh0Om0udmFsdWV9aWYobCl7cmV0dXJuIHN9ci5wdXNoKHMpfX1yZXR1cm4gcn1yZXR1cm4gZihnKS52YWwoKX07Zi5mbi5jbGVhckZvcm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YoImlucHV0LHNlbGVjdCx0ZXh0YXJlYSIsdGhpcykuY2xlYXJGaWVsZHMoZyl9KX07Zi5mbi5jbGVhckZpZWxkcz1mLmZuLmNsZWFySW5wdXRzPWZ1bmN0aW9uKGcpe3ZhciBoPS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaj10aGlzLnR5cGUsaT10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihoLnRlc3Qoail8fGk9PSJ0ZXh0YXJlYSIpe3RoaXMudmFsdWU9IiJ9ZWxzZXtpZihqPT0iY2hlY2tib3gifHxqPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9ZmFsc2V9ZWxzZXtpZihpPT0ic2VsZWN0Iil7dGhpcy5zZWxlY3RlZEluZGV4PS0xfWVsc2V7aWYoaj09ImZpbGUiKXtpZigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7Zih0aGlzKS5yZXBsYWNlV2l0aChmKHRoaXMpLmNsb25lKHRydWUpKX1lbHNle2YodGhpcykudmFsKCIiKX19ZWxzZXtpZihnKXtpZigoZz09PXRydWUmJi9oaWRkZW4vLnRlc3QoaikpfHwodHlwZW9mIGc9PSJzdHJpbmciJiZmKHRoaXMpLmlzKGcpKSl7dGhpcy52YWx1ZT0iIn19fX19fX0pfTtmLmZuLnJlc2V0Rm9ybT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5yZXNldD09ImZ1bmN0aW9uInx8KHR5cGVvZiB0aGlzLnJlc2V0PT0ib2JqZWN0IiYmIXRoaXMucmVzZXQubm9kZVR5cGUpKXt0aGlzLnJlc2V0KCl9fSl9O2YuZm4uZW5hYmxlPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hZ30pfTtmLmZuLnNlbGVjdGVkPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9dGhpcy50eXBlO2lmKGg9PSJjaGVja2JveCJ8fGg9PSJyYWRpbyIpe3RoaXMuY2hlY2tlZD1nfWVsc2V7aWYodGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJvcHRpb24iKXt2YXIgaT1mKHRoaXMpLnBhcmVudCgic2VsZWN0Iik7aWYoZyYmaVswXSYmaVswXS50eXBlPT0ic2VsZWN0LW9uZSIpe2kuZmluZCgib3B0aW9uIikuc2VsZWN0ZWQoZmFsc2UpfXRoaXMuc2VsZWN0ZWQ9Z319fSl9O2YuZm4uYWpheFN1Ym1pdC5kZWJ1Zz1mYWxzZTtmdW5jdGlvbiBkKCl7aWYoIWYuZm4uYWpheFN1Ym1pdC5kZWJ1Zyl7cmV0dXJufXZhciBnPSJbanF1ZXJ5LmZvcm1dICIrQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsIiIpO2lmKHdpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cpe3dpbmRvdy5jb25zb2xlLmxvZyhnKX1lbHNle2lmKHdpbmRvdy5vcGVyYSYmd2luZG93Lm9wZXJhLnBvc3RFcnJvcil7d2luZG93Lm9wZXJhLnBvc3RFcnJvcihnKX19fX0pKTtQSwcIdhAQAaM+AACjPgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAc3RhdGljXGxpYlxtYXJrZWQubWluLmpzIWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz17fSx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLnJ1bGVzPWEubm9ybWFsLHRoaXMub3B0aW9ucy5nZm0mJih0aGlzLnJ1bGVzPXRoaXMub3B0aW9ucy50YWJsZXM/YS50YWJsZXM6YS5nZm0pfWZ1bmN0aW9uIHQoZSx0KXtpZih0aGlzLm9wdGlvbnM9dHx8aC5kZWZhdWx0cyx0aGlzLmxpbmtzPWUsdGhpcy5ydWxlcz11Lm5vcm1hbCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sIXRoaXMubGlua3MpdGhyb3cgbmV3IEVycm9yKCJUb2tlbnMgYXJyYXkgcmVxdWlyZXMgYSBgbGlua3NgIHByb3BlcnR5LiIpO3RoaXMub3B0aW9ucy5nZm0/dGhpcy5ydWxlcz10aGlzLm9wdGlvbnMuYnJlYWtzP3UuYnJlYWtzOnUuZ2ZtOnRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHRoaXMucnVsZXM9dS5wZWRhbnRpYyl9ZnVuY3Rpb24gbigpe31mdW5jdGlvbiByKGUpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW49bnVsbCx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgbix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcn1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0Py8mL2c6LyYoPyEjP1x3KzspL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjMzk7Iil9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlPWUuc291cmNlLHQ9dHx8IiIsZnVuY3Rpb24gbihyLHMpe3JldHVybiByPyhzPXMuc291cmNlfHxzLHM9cy5yZXBsYWNlKC8oXnxbXlxbXSlcXi9nLCIkMSIpLGU9ZS5yZXBsYWNlKHIscyksbik6bmV3IFJlZ0V4cChlLHQpfX1mdW5jdGlvbiBsKCl7fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0LG4scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Q9YXJndW1lbnRzW3JdO2ZvcihuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfXJldHVybiBlfWZ1bmN0aW9uIGgodCxuLGkpe2lmKGl8fCJmdW5jdGlvbiI9PXR5cGVvZiBuKXtpfHwoaT1uLG49bnVsbCksbj1vKHt9LGguZGVmYXVsdHMsbnx8e30pO3ZhciBsLGEsdT1uLmhpZ2hsaWdodCxwPTA7dHJ5e2w9ZS5sZXgodCxuKX1jYXRjaChjKXtyZXR1cm4gaShjKX1hPWwubGVuZ3RoO3ZhciBnPWZ1bmN0aW9uKCl7dmFyIGUsdDt0cnl7ZT1yLnBhcnNlKGwsbil9Y2F0Y2gocyl7dD1zfXJldHVybiBuLmhpZ2hsaWdodD11LHQ/aSh0KTppKG51bGwsZSl9O2lmKCF1fHx1Lmxlbmd0aDwzKXJldHVybiBnKCk7aWYoZGVsZXRlIG4uaGlnaGxpZ2h0LCFhKXJldHVybiBnKCk7Zm9yKDtwPGwubGVuZ3RoO3ArKykhZnVuY3Rpb24oZSl7cmV0dXJuImNvZGUiIT09ZS50eXBlPy0tYXx8ZygpOnUoZS50ZXh0LGUubGFuZyxmdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1ufHxuPT09ZS50ZXh0Py0tYXx8ZygpOihlLnRleHQ9bixlLmVzY2FwZWQ9ITAsLS1hfHxnKCksdm9pZCAwKX0pfShsW3BdKX1lbHNlIHRyeXtyZXR1cm4gbiYmKG49byh7fSxoLmRlZmF1bHRzLG4pKSxyLnBhcnNlKGUubGV4KHQsbiksbil9Y2F0Y2goYyl7aWYoYy5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL2NoamovbWFya2VkLiIsKG58fGguZGVmYXVsdHMpLnNpbGVudClyZXR1cm4iPHA+QW4gZXJyb3Igb2NjdXJlZDo8L3A+PHByZT4iK3MoYy5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+Ijt0aHJvdyBjfX12YXIgYT17bmV3bGluZTovXlxuKy8sY29kZTovXiggezR9W15cbl0rXG4qKSsvLGZlbmNlczpsLGhyOi9eKCAqWy0qX10pezMsfSAqKD86XG4rfCQpLyxoZWFkaW5nOi9eICooI3sxLDZ9KSAqKFteXG5dKz8pICojKiAqKD86XG4rfCQpLyxucHRhYmxlOmwsbGhlYWRpbmc6L14oW15cbl0rKVxuICooPXwtKXsyLH0gKig/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggKj5bXlxuXSsoXG5bXlxuXSspKlxuKikrLyxsaXN0Oi9eKCAqKShidWxsKSBbXHNcU10rPyg/OmhyfFxuezIsfSg/ISApKD8hXDFidWxsIClcbip8XHMqJCkvLGh0bWw6L14gKig/OmNvbW1lbnR8Y2xvc2VkfGNsb3NpbmcpICooPzpcbnsyLH18XHMqJCkvLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArWyIoXShbXlxuXSspWyIpXSk/ICooPzpcbit8JCkvLHRhYmxlOmwscGFyYWdyYXBoOi9eKCg/OlteXG5dK1xuPyg/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXx0YWd8ZGVmKSkrKVxuKi8sdGV4dDovXlteXG5dKy99O2EuYnVsbGV0PS8oPzpbKistXXxcZCtcLikvLGEuaXRlbT0vXiggKikoYnVsbCkgW15cbl0qKD86XG4oPyFcMWJ1bGwgKVteXG5dKikqLyxhLml0ZW09aShhLml0ZW0sImdtIikoL2J1bGwvZyxhLmJ1bGxldCkoKSxhLmxpc3Q9aShhLmxpc3QpKC9idWxsL2csYS5idWxsZXQpKCJociIsL1xuKyg/PSg/OiAqWy0qX10pezMsfSAqKD86XG4rfCQpKS8pKCksYS5fdGFnPSIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITovfEApXFxiIixhLmh0bWw9aShhLmh0bWwpKCJjb21tZW50IiwvPCEtLVtcc1xTXSo/LS0+LykoImNsb3NlZCIsLzwodGFnKVtcc1xTXSs/PFwvXDE+LykoImNsb3NpbmciLC88dGFnKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vKSgvdGFnL2csYS5fdGFnKSgpLGEucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCJociIsYS5ocikoImhlYWRpbmciLGEuaGVhZGluZykoImxoZWFkaW5nIixhLmxoZWFkaW5nKSgiYmxvY2txdW90ZSIsYS5ibG9ja3F1b3RlKSgidGFnIiwiPCIrYS5fdGFnKSgiZGVmIixhLmRlZikoKSxhLm5vcm1hbD1vKHt9LGEpLGEuZ2ZtPW8oe30sYS5ub3JtYWwse2ZlbmNlczovXiAqKGB7Myx9fH57Myx9KSAqKFxTKyk/ICpcbihbXHNcU10rPylccypcMSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6L14vfSksYS5nZm0ucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCIoPyEiLCIoPyEiK2EuZ2ZtLmZlbmNlcy5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwyIikrInwiK2EubGlzdC5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwzIikrInwiKSgpLGEudGFibGVzPW8oe30sYS5nZm0se25wdGFibGU6L14gKihcUy4qXHwuKilcbiAqKFstOl0rICpcfFstfCA6XSopXG4oKD86LipcfC4qKD86XG58JCkpKilcbiovLHRhYmxlOi9eICpcfCguKylcbiAqXHwoICpbLTpdK1stfCA6XSopXG4oKD86ICpcfC4qKD86XG58JCkpKilcbiovfSksZS5ydWxlcz1hLGUubGV4PWZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IGUobik7cmV0dXJuIHIubGV4KHQpfSxlLnByb3RvdHlwZS5sZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9cclxufFxyL2csIlxuIikucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL1x1MDBhMC9nLCIgIikucmVwbGFjZSgvXHUyNDI0L2csIlxuIiksdGhpcy50b2tlbihlLCEwKX0sZS5wcm90b3R5cGUudG9rZW49ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixzLGksbCxvLGgsdSxwLGU9ZS5yZXBsYWNlKC9eICskL2dtLCIiKTtlOylpZigocz10aGlzLnJ1bGVzLm5ld2xpbmUuZXhlYyhlKSkmJihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzWzBdLmxlbmd0aD4xJiZ0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJzcGFjZSJ9KSkscz10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzPXNbMF0ucmVwbGFjZSgvXiB7NH0vZ20sIiIpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3M6cy5yZXBsYWNlKC9cbiskLywiIil9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIixsYW5nOnNbMl0sdGV4dDpzWzNdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaGVhZGluZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmciLGRlcHRoOnNbMV0ubGVuZ3RoLHRleHQ6c1syXX0pO2Vsc2UgaWYodCYmKHM9dGhpcy5ydWxlcy5ucHRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC9cbiQvLCIiKS5zcGxpdCgiXG4iKX0sdT0wO3U8by5hbGlnbi5sZW5ndGg7dSsrKW8uYWxpZ25bdV09L14gKi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3Qoby5hbGlnblt1XSk/ImxlZnQiOm51bGw7Zm9yKHU9MDt1PG8uY2VsbHMubGVuZ3RoO3UrKylvLmNlbGxzW3VdPW8uY2VsbHNbdV0uc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZihzPXRoaXMucnVsZXMubGhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDoiPSI9PT1zWzJdPzE6Mix0ZXh0OnNbMV19KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5oci5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhyIn0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmJsb2NrcXVvdGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX3N0YXJ0In0pLHM9c1swXS5yZXBsYWNlKC9eICo+ID8vZ20sIiIpLHRoaXMudG9rZW4ocyx0KSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX2VuZCJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5saXN0LmV4ZWMoZSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxpPXNbMl0sdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9zdGFydCIsb3JkZXJlZDppLmxlbmd0aD4xfSkscz1zWzBdLm1hdGNoKHRoaXMucnVsZXMuaXRlbSksbj0hMSxwPXMubGVuZ3RoLHU9MDtwPnU7dSsrKW89c1t1XSxoPW8ubGVuZ3RoLG89by5yZXBsYWNlKC9eICooWyorLV18XGQrXC4pICsvLCIiKSx+by5pbmRleE9mKCJcbiAiKSYmKGgtPW8ubGVuZ3RoLG89dGhpcy5vcHRpb25zLnBlZGFudGljP28ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik6by5yZXBsYWNlKG5ldyBSZWdFeHAoIl4gezEsIitoKyJ9IiwiZ20iKSwiIikpLHRoaXMub3B0aW9ucy5zbWFydExpc3RzJiZ1IT09cC0xJiYobD1hLmJ1bGxldC5leGVjKHNbdSsxXSlbMF0saT09PWx8fGkubGVuZ3RoPjEmJmwubGVuZ3RoPjF8fChlPXMuc2xpY2UodSsxKS5qb2luKCJcbiIpK2UsdT1wLTEpKSxyPW58fC9cblxuKD8hXHMqJCkvLnRlc3QobyksdSE9PXAtMSYmKG49IlxuIj09PW8uY2hhckF0KG8ubGVuZ3RoLTEpLHJ8fChyPW4pKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnI/Imxvb3NlX2l0ZW1fc3RhcnQiOiJsaXN0X2l0ZW1fc3RhcnQifSksdGhpcy50b2tlbihvLCExKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW1fZW5kIn0pO3RoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3RfZW5kIn0pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmh0bWwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8icGFyYWdyYXBoIjoiaHRtbCIscHJlOiJwcmUiPT09c1sxXXx8InNjcmlwdCI9PT1zWzFdfHwic3R5bGUiPT09c1sxXSx0ZXh0OnNbMF19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMuZGVmLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLmxpbmtzW3NbMV0udG9Mb3dlckNhc2UoKV09e2hyZWY6c1syXSx0aXRsZTpzWzNdfTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMudGFibGUuZXhlYyhlKSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxvPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOnNbMV0ucmVwbGFjZSgvXiAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGFsaWduOnNbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxjZWxsczpzWzNdLnJlcGxhY2UoLyg/OiAqXHwgKik/XG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnJlcGxhY2UoL14gKlx8ICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyk7dGhpcy50b2tlbnMucHVzaChvKX1lbHNlIGlmKHQmJihzPXRoaXMucnVsZXMucGFyYWdyYXBoLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InBhcmFncmFwaCIsdGV4dDoiXG4iPT09c1sxXS5jaGFyQXQoc1sxXS5sZW5ndGgtMSk/c1sxXS5zbGljZSgwLC0xKTpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMudGV4dC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InRleHQiLHRleHQ6c1swXX0pO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiB0aGlzLnRva2Vuc307dmFyIHU9e2VzY2FwZTovXlxcKFtcXGAqe31cW1xdKCkjK1wtLiFfPl0pLyxhdXRvbGluazovXjwoW14gPl0rKEB8OlwvKVteID5dKyk+Lyx1cmw6bCx0YWc6L148IS0tW1xzXFNdKj8tLT58XjxcLz9cdysoPzoiW14iXSoifCdbXiddKid8W14nIj5dKSo/Pi8sbGluazovXiE/XFsoaW5zaWRlKVxdXChocmVmXCkvLHJlZmxpbms6L14hP1xbKGluc2lkZSlcXVxzKlxbKFteXF1dKilcXS8sbm9saW5rOi9eIT9cWygoPzpcW1teXF1dKlxdfFteXFtcXV0pKilcXS8sc3Ryb25nOi9eX18oW1xzXFNdKz8pX18oPyFfKXxeXCpcKihbXHNcU10rPylcKlwqKD8hXCopLyxlbTovXlxiXygoPzpfX3xbXHNcU10pKz8pX1xifF5cKigoPzpcKlwqfFtcc1xTXSkrPylcKig/IVwqKS8sY29kZTovXihgKylccyooW1xzXFNdKj9bXmBdKVxzKlwxKD8hYCkvLGJyOi9eIHsyLH1cbig/IVxzKiQpLyxkZWw6bCx0ZXh0Oi9eW1xzXFNdKz8oPz1bXFw8IVxbXypgXXwgezIsfVxufCQpL307dS5faW5zaWRlPS8oPzpcW1teXF1dKlxdfFteXFtcXV18XF0oPz1bXlxbXSpcXSkpKi8sdS5faHJlZj0vXHMqPD8oW1xzXFNdKj8pPj8oPzpccytbJyJdKFtcc1xTXSo/KVsnIl0pP1xzKi8sdS5saW5rPWkodS5saW5rKSgiaW5zaWRlIix1Ll9pbnNpZGUpKCJocmVmIix1Ll9ocmVmKSgpLHUucmVmbGluaz1pKHUucmVmbGluaykoImluc2lkZSIsdS5faW5zaWRlKSgpLHUubm9ybWFsPW8oe30sdSksdS5wZWRhbnRpYz1vKHt9LHUubm9ybWFsLHtzdHJvbmc6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbTovXl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXyl8XlwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKikvfSksdS5nZm09byh7fSx1Lm5vcm1hbCx7ZXNjYXBlOmkodS5lc2NhcGUpKCJdKSIsIn58XSkiKSgpLHVybDovXihodHRwcz86XC9cL1teXHM8XStbXjwuLDo7IicpXF1cc10pLyxkZWw6L15+fig/PVxTKShbXHNcU10qP1xTKX5+Lyx0ZXh0OmkodS50ZXh0KSgiXXwiLCJ+XXwiKSgifCIsInxodHRwcz86Ly98IikoKX0pLHUuYnJlYWtzPW8oe30sdS5nZm0se2JyOmkodS5icikoInsyLH0iLCIqIikoKSx0ZXh0OmkodS5nZm0udGV4dCkoInsyLH0iLCIqIikoKX0pLHQucnVsZXM9dSx0Lm91dHB1dD1mdW5jdGlvbihlLG4scil7dmFyIHM9bmV3IHQobixyKTtyZXR1cm4gcy5vdXRwdXQoZSl9LHQucHJvdG90eXBlLm91dHB1dD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGksbD0iIjtlOylpZihpPXRoaXMucnVsZXMuZXNjYXBlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9aVsxXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5hdXRvbGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLCJAIj09PWlbMl0/KG49IjoiPT09aVsxXS5jaGFyQXQoNik/dGhpcy5tYW5nbGUoaVsxXS5zdWJzdHJpbmcoNykpOnRoaXMubWFuZ2xlKGlbMV0pLHI9dGhpcy5tYW5nbGUoIm1haWx0bzoiKStuKToobj1zKGlbMV0pLHI9biksbCs9dGhpcy5yZW5kZXJlci5saW5rKHIsbnVsbCxuKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy51cmwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxuPXMoaVsxXSkscj1uLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudGFnLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vcHRpb25zLnNhbml0aXplP3MoaVswXSk6aVswXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5saW5rLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vdXRwdXRMaW5rKGkse2hyZWY6aVsyXSx0aXRsZTppWzNdfSk7ZWxzZSBpZigoaT10aGlzLnJ1bGVzLnJlZmxpbmsuZXhlYyhlKSl8fChpPXRoaXMucnVsZXMubm9saW5rLmV4ZWMoZSkpKXtpZihlPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx0PShpWzJdfHxpWzFdKS5yZXBsYWNlKC9ccysvZywiICIpLHQ9dGhpcy5saW5rc1t0LnRvTG93ZXJDYXNlKCldLCF0fHwhdC5ocmVmKXtsKz1pWzBdLmNoYXJBdCgwKSxlPWlbMF0uc3Vic3RyaW5nKDEpK2U7Y29udGludWV9bCs9dGhpcy5vdXRwdXRMaW5rKGksdCl9ZWxzZSBpZihpPXRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5zdHJvbmcodGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmVtLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5lbSh0aGlzLm91dHB1dChpWzJdfHxpWzFdKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuY29kZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuY29kZXNwYW4ocyhpWzJdLCEwKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuYnIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmJyKCk7ZWxzZSBpZihpPXRoaXMucnVsZXMuZGVsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoaVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz1zKHRoaXMuc21hcnR5cGFudHMoaVswXSkpO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiBsfSx0LnByb3RvdHlwZS5vdXRwdXRMaW5rPWZ1bmN0aW9uKGUsdCl7dmFyIG49cyh0LmhyZWYpLHI9dC50aXRsZT9zKHQudGl0bGUpOm51bGw7cmV0dXJuIiEiIT09ZVswXS5jaGFyQXQoMCk/dGhpcy5yZW5kZXJlci5saW5rKG4scix0aGlzLm91dHB1dChlWzFdKSk6dGhpcy5yZW5kZXJlci5pbWFnZShuLHIscyhlWzFdKSl9LHQucHJvdG90eXBlLnNtYXJ0eXBhbnRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/ZS5yZXBsYWNlKC8tLS9nLCLigJQiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQx4oCYIikucmVwbGFjZSgvJy9nLCLigJkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDHigJwiKS5yZXBsYWNlKC8iL2csIuKAnSIpLnJlcGxhY2UoL1wuezN9L2csIuKApiIpOmV9LHQucHJvdG90eXBlLm1hbmdsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixyPWUubGVuZ3RoLHM9MDtyPnM7cysrKXQ9ZS5jaGFyQ29kZUF0KHMpLE1hdGgucmFuZG9tKCk+LjUmJih0PSJ4Iit0LnRvU3RyaW5nKDE2KSksbis9IiYjIit0KyI7IjtyZXR1cm4gbn0sbi5wcm90b3R5cGUuY29kZT1mdW5jdGlvbihlLHQsbixyKXtpZihyPXJ8fHt9LHIuaGlnaGxpZ2h0KXt2YXIgaT1yLmhpZ2hsaWdodChlLHQpO251bGwhPWkmJmkhPT1lJiYobj0hMCxlPWkpfXJldHVybiB0Pyc8cHJlPjxjb2RlIGNsYXNzPSInK3IubGFuZ1ByZWZpeCt0KyciPicrKG4/ZTpzKGUpKSsiXG48L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKG4/ZTpzKGUsITApKSsiXG48L2NvZGU+PC9wcmU+In0sbi5wcm90b3R5cGUuYmxvY2txdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4iPGJsb2NrcXVvdGU+XG4iK2UrIjwvYmxvY2txdW90ZT5cbiJ9LG4ucHJvdG90eXBlLmh0bWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG4ucHJvdG90eXBlLmhlYWRpbmc9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIjxoIit0KycgaWQ9Iicrci5oZWFkZXJQcmVmaXgrbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teXHddKy9nLCItIikrJyI+JytlKyI8L2giK3QrIj5cbiJ9LG4ucHJvdG90eXBlLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIjxocj5cbiJ9LG4ucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj10PyJvbCI6InVsIjtyZXR1cm4iPCIrbisiPlxuIitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUubGlzdGl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxsaT4iK2UrIjwvbGk+XG4ifSxuLnByb3RvdHlwZS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7cmV0dXJuIjxwPiIrZSsiPC9wPlxuIn0sbi5wcm90b3R5cGUudGFibGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHRhYmxlPlxuPHRoZWFkPlxuIitlKyI8L3RoZWFkPlxuIisiPHRib2R5PlxuIit0KyI8L3Rib2R5PlxuIisiPC90YWJsZT5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlcm93PWZ1bmN0aW9uKGUpe3JldHVybiI8dHI+XG4iK2UrIjwvdHI+XG4ifSxuLnByb3RvdHlwZS50YWJsZWNlbGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmhlYWRlcj8idGgiOiJ0ZCIscj10LmFsaWduPyI8IituKycgc3R5bGU9InRleHQtYWxpZ246Jyt0LmFsaWduKyciPic6IjwiK24rIj4iO3JldHVybiByK2UrIjwvIituKyI+XG4ifSxuLnByb3RvdHlwZS5zdHJvbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIjxzdHJvbmc+IitlKyI8L3N0cm9uZz4ifSxuLnByb3RvdHlwZS5lbT1mdW5jdGlvbihlKXtyZXR1cm4iPGVtPiIrZSsiPC9lbT4ifSxuLnByb3RvdHlwZS5jb2Rlc3Bhbj1mdW5jdGlvbihlKXtyZXR1cm4iPGNvZGU+IitlKyI8L2NvZGU+In0sbi5wcm90b3R5cGUuYnI9ZnVuY3Rpb24oKXtyZXR1cm4iPGJyPiJ9LG4ucHJvdG90eXBlLmRlbD1mdW5jdGlvbihlKXtyZXR1cm4iPGRlbD4iK2UrIjwvZGVsPiJ9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8YSBocmVmPSInK2UrJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4iK24rIjwvYT4ifSxuLnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9JzxpbWcgc3JjPSInK2UrJyIgYWx0PSInK24rJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4ifSxyLnBhcnNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1uZXcgcih0LG4pO3JldHVybiBzLnBhcnNlKGUpfSxyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlKXt0aGlzLmlubGluZT1uZXcgdChlLmxpbmtzLHRoaXMub3B0aW9ucyx0aGlzLnJlbmRlcmVyKSx0aGlzLnRva2Vucz1lLnJldmVyc2UoKTtmb3IodmFyIG49IiI7dGhpcy5uZXh0KCk7KW4rPXRoaXMudG9rKCk7cmV0dXJuIG59LHIucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbj10aGlzLnRva2Vucy5wb3AoKX0sci5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGgtMV18fDB9LHIucHJvdG90eXBlLnBhcnNlVGV4dD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnRva2VuLnRleHQ7InRleHQiPT09dGhpcy5wZWVrKCkudHlwZTspZSs9IlxuIit0aGlzLm5leHQoKS50ZXh0O3JldHVybiB0aGlzLmlubGluZS5vdXRwdXQoZSl9LHIucHJvdG90eXBlLnRvaz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLnRva2VuLnR5cGUpe2Nhc2Uic3BhY2UiOnJldHVybiIiO2Nhc2UiaHIiOnJldHVybiB0aGlzLnJlbmRlcmVyLmhyKCk7Y2FzZSJoZWFkaW5nIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpLHRoaXMudG9rZW4uZGVwdGgsdGhpcy50b2tlbi50ZXh0LHRoaXMub3B0aW9ucyk7Y2FzZSJjb2RlIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5jb2RlKHRoaXMudG9rZW4udGV4dCx0aGlzLnRva2VuLmxhbmcsdGhpcy50b2tlbi5lc2NhcGVkLHRoaXMub3B0aW9ucyk7Y2FzZSJ0YWJsZSI6dmFyIGUsdCxuLHIscyxpPSIiLGw9IiI7Zm9yKG49IiIsZT0wO2U8dGhpcy50b2tlbi5oZWFkZXIubGVuZ3RoO2UrKylyPXtoZWFkZXI6ITAsYWxpZ246dGhpcy50b2tlbi5hbGlnbltlXX0sbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4uaGVhZGVyW2VdKSx7aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19KTtmb3IoaSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhuKSxlPTA7ZTx0aGlzLnRva2VuLmNlbGxzLmxlbmd0aDtlKyspe2Zvcih0PXRoaXMudG9rZW4uY2VsbHNbZV0sbj0iIixzPTA7czx0Lmxlbmd0aDtzKyspbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRbc10pLHtoZWFkZXI6ITEsYWxpZ246dGhpcy50b2tlbi5hbGlnbltzXX0pO2wrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobil9cmV0dXJuIHRoaXMucmVuZGVyZXIudGFibGUoaSxsKTtjYXNlImJsb2NrcXVvdGVfc3RhcnQiOmZvcih2YXIgbD0iIjsiYmxvY2txdW90ZV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGwpO2Nhc2UibGlzdF9zdGFydCI6Zm9yKHZhciBsPSIiLG89dGhpcy50b2tlbi5vcmRlcmVkOyJsaXN0X2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3QobCxvKTtjYXNlImxpc3RfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPSJ0ZXh0Ij09PXRoaXMudG9rZW4udHlwZT90aGlzLnBhcnNlVGV4dCgpOnRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJsb29zZV9pdGVtX3N0YXJ0Ijpmb3IodmFyIGw9IiI7Imxpc3RfaXRlbV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0aXRlbShsKTtjYXNlImh0bWwiOnZhciBoPXRoaXMudG9rZW4ucHJlfHx0aGlzLm9wdGlvbnMucGVkYW50aWM/dGhpcy50b2tlbi50ZXh0OnRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpO3JldHVybiB0aGlzLnJlbmRlcmVyLmh0bWwoaCk7Y2FzZSJwYXJhZ3JhcGgiOnJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZVRleHQoKSl9fSxsLmV4ZWM9bCxoLm9wdGlvbnM9aC5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBvKGguZGVmYXVsdHMsZSksaH0saC5kZWZhdWx0cz17Z2ZtOiEwLHRhYmxlczohMCxicmVha3M6ITEscGVkYW50aWM6ITEsc2FuaXRpemU6ITEsc21hcnRMaXN0czohMSxzaWxlbnQ6ITEsaGlnaGxpZ2h0Om51bGwsbGFuZ1ByZWZpeDoibGFuZy0iLHNtYXJ0eXBhbnRzOiExLGhlYWRlclByZWZpeDoiIixyZW5kZXJlcjpuZXcgbn0saC5QYXJzZXI9cixoLnBhcnNlcj1yLnBhcnNlLGguUmVuZGVyZXI9bixoLkxleGVyPWUsaC5sZXhlcj1lLmxleCxoLklubGluZUxleGVyPXQsaC5pbmxpbmVMZXhlcj10Lm91dHB1dCxoLnBhcnNlPWgsIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWg6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZnVuY3Rpb24oKXtyZXR1cm4gaH0pOnRoaXMubWFya2VkPWh9LmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpnbG9iYWwpfSgpKTtQSwcIQvpMalM5AABTOQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAc3RhdGljXGxpYlx2YWxpZGF0ZS5taW4uanMvKgogKiB2YWxpZGF0ZS5qcyAxLjMKICogQ29weXJpZ2h0IChjKSAyMDEzIFJpY2sgSGFycmlzb24sIGh0dHA6Ly9yaWNraGFycmlzb24ubWUKICogdmFsaWRhdGUuanMgaXMgb3BlbiBzb3VyY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KICogUG9ydGlvbnMgb2YgdmFsaWRhdGUuanMgYXJlIGluc3BpcmVkIGJ5IENvZGVJZ25pdGVyLgogKiBodHRwOi8vcmlja2hhcnJpc29uLmdpdGh1Yi5jb20vdmFsaWRhdGUuanMKICovCgooZnVuY3Rpb24ocSxyLG0pe3ZhciBzPXtyZXF1aXJlZDoiVGhlICVzIGZpZWxkIGlzIHJlcXVpcmVkLiIsbWF0Y2hlczoiVGhlICVzIGZpZWxkIGRvZXMgbm90IG1hdGNoIHRoZSAlcyBmaWVsZC4iLCJkZWZhdWx0IjoiVGhlICVzIGZpZWxkIGlzIHN0aWxsIHNldCB0byBkZWZhdWx0LCBwbGVhc2UgY2hhbmdlLiIsdmFsaWRfZW1haWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiIsdmFsaWRfZW1haWxzOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFsbCB2YWxpZCBlbWFpbCBhZGRyZXNzZXMuIixtaW5fbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBhdCBsZWFzdCAlcyBjaGFyYWN0ZXJzIGluIGxlbmd0aC4iLG1heF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IG5vdCBleGNlZWQgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixleGFjdF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IGJlIGV4YWN0bHkgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixncmVhdGVyX3RoYW46IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBudW1iZXIgZ3JlYXRlciB0aGFuICVzLiIsbGVzc190aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGxlc3MgdGhhbiAlcy4iLGFscGhhOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMuIixhbHBoYV9udW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzLiIsYWxwaGFfZGFzaDoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycywgdW5kZXJzY29yZXMsIGFuZCBkYXNoZXMuIixudW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgbnVtYmVycy4iLGludGVnZXI6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYW4gaW50ZWdlci4iLGRlY2ltYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBkZWNpbWFsIG51bWJlci4iLGlzX25hdHVyYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSBwb3NpdGl2ZSBudW1iZXJzLiIsaXNfbmF0dXJhbF9ub196ZXJvOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvLiIsdmFsaWRfaXA6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBJUC4iLHZhbGlkX2Jhc2U2NDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIGJhc2U2NCBzdHJpbmcuIix2YWxpZF9jcmVkaXRfY2FyZDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci4iLGlzX2ZpbGVfdHlwZToiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5ICVzIGZpbGVzLiIsdmFsaWRfdXJsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgVVJMLiJ9LHQ9ZnVuY3Rpb24oYSl7fSx1PS9eKC4rPylcWyguKylcXSQvLGg9L15bMC05XSskLyx2PS9eXC0/WzAtOV0rJC8saz0vXlwtP1swLTldKlwuP1swLTldKyQvLHA9L15bYS16QS1aMC05LiEjJCUmYW1wOycqK1wtXC89P1xeX2B7fH1+XC1dK0BbYS16QS1aMC05XC1dKyg/OlwuW2EtekEtWjAtOVwtXSspKiQvLHc9L15bYS16XSskL2kseD0vXlthLXowLTldKyQvaSx5PS9eW2EtejAtOV9cLV0rJC9pLHo9L15bMC05XSskL2ksQT0vXlsxLTldWzAtOV0qJC9pLEI9L14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pJC9pLEM9L1teYS16QS1aMC05XC9cKz1dL2ksRD0vXltcZFwtXHNdKyQvLEU9L14oKGh0dHB8aHR0cHMpOlwvXC8oXHcrOnswLDF9XHcqQCk/KFxTKyl8KSg6WzAtOV0rKT8oXC98XC8oW1x3IyE6Lj8rPSYlQCFcLVwvXSkpPyQvLGU9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY2FsbGJhY2s9Y3x8dDt0aGlzLmVycm9ycz1bXTt0aGlzLmZpZWxkcz17fTt0aGlzLmZvcm09dGhpcy5fZm9ybUJ5TmFtZU9yTm9kZShhKXx8e307dGhpcy5tZXNzYWdlcz17fTt0aGlzLmhhbmRsZXJzPXt9O2E9MDtmb3IoYz1iLmxlbmd0aDthPGM7YSsrKXt2YXIgZD1iW2FdO2lmKChkLm5hbWV8fGQubmFtZXMpJiZkLnJ1bGVzKWlmKGQubmFtZXMpZm9yKHZhciBsPTA7bDxkLm5hbWVzLmxlbmd0aDtsKyspdGhpcy5fYWRkRmllbGQoZCxkLm5hbWVzW2xdKTtlbHNlIHRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lKX12YXIgZz10aGlzLmZvcm0ub25zdWJtaXQ7dGhpcy5mb3JtLm9uc3VibWl0PWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXt0cnl7cmV0dXJuIGEuX3ZhbGlkYXRlRm9ybShiKSYmKGc9PT1tfHxnKCkpfWNhdGNoKGMpe319fSh0aGlzKX0sbj1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKDA8YS5sZW5ndGgmJigicmFkaW8iPT09YVswXS50eXBlfHwiY2hlY2tib3giPT09YVswXS50eXBlKSlmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXtpZihhW2NdLmNoZWNrZWQpcmV0dXJuIGFbY11bYl19ZWxzZSByZXR1cm4gYVtiXX07ZS5wcm90b3R5cGUuc2V0TWVzc2FnZT1mdW5jdGlvbihhLGIpe3RoaXMubWVzc2FnZXNbYV09YjtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUucmVnaXN0ZXJDYWxsYmFjaz1mdW5jdGlvbihhLGIpe2EmJigic3RyaW5nIj09PXR5cGVvZiBhJiZiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGIpJiYodGhpcy5oYW5kbGVyc1thXT1iKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuX2Zvcm1CeU5hbWVPck5vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgYT9hOnIuZm9ybXNbYV19O2UucHJvdG90eXBlLl9hZGRGaWVsZD1mdW5jdGlvbihhLGIpe3RoaXMuZmllbGRzW2JdPXtuYW1lOmIsZGlzcGxheTphLmRpc3BsYXl8fGIscnVsZXM6YS5ydWxlcyxpZDpudWxsLHR5cGU6bnVsbCx2YWx1ZTpudWxsLGNoZWNrZWQ6bnVsbH19O2UucHJvdG90eXBlLl92YWxpZGF0ZUZvcm09ZnVuY3Rpb24oYSl7dGhpcy5lcnJvcnM9W107Zm9yKHZhciBiIGluIHRoaXMuZmllbGRzKWlmKHRoaXMuZmllbGRzLmhhc093blByb3BlcnR5KGIpKXt2YXIgYz10aGlzLmZpZWxkc1tiXXx8e30sZD10aGlzLmZvcm1bYy5uYW1lXTtkJiZkIT09bSYmKGMuaWQ9bihkLCJpZCIpLGMudHlwZT0wPGQubGVuZ3RoP2RbMF0udHlwZTpkLnR5cGUsYy52YWx1ZT1uKGQsInZhbHVlIiksYy5jaGVja2VkPW4oZCwiY2hlY2tlZCIpLHRoaXMuX3ZhbGlkYXRlRmllbGQoYykpfSJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5jYWxsYmFjayYmdGhpcy5jYWxsYmFjayh0aGlzLmVycm9ycyxhKTswPHRoaXMuZXJyb3JzLmxlbmd0aCYmKGEmJmEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmV2ZW50JiYoZXZlbnQucmV0dXJuVmFsdWU9ITEpKTtyZXR1cm4hMH07ZS5wcm90b3R5cGUuX3ZhbGlkYXRlRmllbGQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEucnVsZXMuc3BsaXQoInwiKSxjPWEucnVsZXMuaW5kZXhPZigicmVxdWlyZWQiKSxkPSFhLnZhbHVlfHwiIj09PWEudmFsdWV8fGEudmFsdWU9PT1tLGw9MCxnPWIubGVuZ3RoO2w8ZztsKyspe3ZhciBmPWJbbF0sZT1udWxsLGg9ITEsaz11LmV4ZWMoZik7aWYoLTEhPT1jfHwtMSE9PWYuaW5kZXhPZigiIWNhbGxiYWNrXyIpfHwhZClpZihrJiYoZj1rWzFdLGU9a1syXSksIiEiPT09Zi5jaGFyQXQoMCkmJihmPWYuc3Vic3RyaW5nKDEsZi5sZW5ndGgpKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuX2hvb2tzW2ZdP3RoaXMuX2hvb2tzW2ZdLmFwcGx5KHRoaXMsW2EsZV0pfHwoaD0hMCk6ImNhbGxiYWNrXyI9PT1mLnN1YnN0cmluZygwLDkpJiYoZj1mLnN1YnN0cmluZyg5LGYubGVuZ3RoKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuaGFuZGxlcnNbZl0mJiExPT09dGhpcy5oYW5kbGVyc1tmXS5hcHBseSh0aGlzLFthLnZhbHVlLGVdKSYmKGg9ITApKSxoKXtiPXRoaXMubWVzc2FnZXNbZl18fHNbZl07Yz0iQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdpdGggdGhlICIrYS5kaXNwbGF5KyIgZmllbGQuIjtiJiYoYz1iLnJlcGxhY2UoIiVzIixhLmRpc3BsYXkpLGUmJihjPWMucmVwbGFjZSgiJXMiLHRoaXMuZmllbGRzW2VdP3RoaXMuZmllbGRzW2VdLmRpc3BsYXk6ZSkpKTt0aGlzLmVycm9ycy5wdXNoKHtpZDphLmlkLG5hbWU6YS5uYW1lLG1lc3NhZ2U6YyxydWxlOmZ9KTticmVha319fTtlLnByb3RvdHlwZS5faG9va3M9e3JlcXVpcmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWEudmFsdWU7cmV0dXJuImNoZWNrYm94Ij09PWEudHlwZXx8InJhZGlvIj09PWEudHlwZT8hMD09PWEuY2hlY2tlZDpudWxsIT09YiYmIiIhPT1ifSwiZGVmYXVsdCI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS52YWx1ZSE9PWJ9LG1hdGNoZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmZvcm1bYl07cmV0dXJuIGM/YS52YWx1ZT09PWMudmFsdWU6ITF9LHZhbGlkX2VtYWlsOmZ1bmN0aW9uKGEpe3JldHVybiBwLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2VtYWlsczpmdW5jdGlvbihhKXthPWEudmFsdWUuc3BsaXQoIiwiKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKylpZighcC50ZXN0KGFbYl0pKXJldHVybiExO3JldHVybiEwfSxtaW5fbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD49cGFyc2VJbnQoYiwxMCk6ITF9LG1heF9sZW5ndGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC50ZXN0KGIpP2EudmFsdWUubGVuZ3RoPD1wYXJzZUludChiLDEwKTohMX0sZXhhY3RfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD09PXBhcnNlSW50KGIsMTApOiExfSxncmVhdGVyX3RoYW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpP3BhcnNlRmxvYXQoYS52YWx1ZSk+cGFyc2VGbG9hdChiKTohMX0sbGVzc190aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPHBhcnNlRmxvYXQoYik6ITF9LGFscGhhOmZ1bmN0aW9uKGEpe3JldHVybiB3LnRlc3QoYS52YWx1ZSl9LGFscGhhX251bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIHgudGVzdChhLnZhbHVlKX0sYWxwaGFfZGFzaDpmdW5jdGlvbihhKXtyZXR1cm4geS50ZXN0KGEudmFsdWUpfSxudW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiBoLnRlc3QoYS52YWx1ZSl9LGludGVnZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHYudGVzdChhLnZhbHVlKX0sZGVjaW1hbDpmdW5jdGlvbihhKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsOmZ1bmN0aW9uKGEpe3JldHVybiB6LnRlc3QoYS52YWx1ZSl9LGlzX25hdHVyYWxfbm9femVybzpmdW5jdGlvbihhKXtyZXR1cm4gQS50ZXN0KGEudmFsdWUpfSx2YWxpZF9pcDpmdW5jdGlvbihhKXtyZXR1cm4gQi50ZXN0KGEudmFsdWUpfSx2YWxpZF9iYXNlNjQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEMudGVzdChhLnZhbHVlKX0sdmFsaWRfdXJsOmZ1bmN0aW9uKGEpe3JldHVybiBFLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2NyZWRpdF9jYXJkOmZ1bmN0aW9uKGEpe2lmKCFELnRlc3QoYS52YWx1ZSkpcmV0dXJuITE7dmFyIGI9MCxjPTAsZD0hMTthPWEudmFsdWUucmVwbGFjZSgvXEQvZywiIik7Zm9yKHZhciBlPWEubGVuZ3RoLTE7MDw9ZTtlLS0pYz1hLmNoYXJBdChlKSxjPXBhcnNlSW50KGMsMTApLGQmJjk8KGMqPTIpJiYoYy09OSksYis9YyxkPSFkO3JldHVybiAwPT09YiUxMH0saXNfZmlsZV90eXBlOmZ1bmN0aW9uKGEsYil7aWYoImZpbGUiIT09YS50eXBlKXJldHVybiEwO3ZhciBjPWEudmFsdWUuc3Vic3RyKGEudmFsdWUubGFzdEluZGV4T2YoIi4iKSsxKSxkPWIuc3BsaXQoIiwiKSxlPSExLGc9MCxmPWQubGVuZ3RoO2ZvcihnO2c8ZjtnKyspYz09ZFtnXSYmKGU9ITApO3JldHVybiBlfX07cS5Gb3JtVmFsaWRhdG9yPWV9KSh3aW5kb3csZG9jdW1lbnQpOwpQSwcIZowfxDMYAAAzGAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAdmlldy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAdmlld1xhZG1pbi9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxhcnRpY2xlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mt7vliqDmlofnq6A8L2E+DQogICAgPC9saT57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk5paH56ug5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9hcnRpY2xlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIlnRyEm4GAABuBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xhZG1pblxjbWQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcYWRtaW5cY21kXGJhY2t1cC5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciBjbGVhciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUgbGVmdCI+5aSH5Lu95pWw5o2uPC9oMT4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUgbGVmdCIgaWQ9ImJhY2t1cC1idG4iPuWkh+S7vTwvYnV0dG9uPg0KPC9oZWFkZXI+DQo8dWwgY2xhc3M9ImNtZC1saXN0IiBpZD0iYmFja3VwLWxpc3QiPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVUaW1lIC5Nb2RUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fSA8YSBjbGFzcz0ibGluayIgaHJlZj0iL2NtZC9iYWNrdXAvZmlsZT9maWxlPXt7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIiByZWw9Int7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZS1vIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNiYWNrdXAtYnRuJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICB0eXBlOiAicG9zdCIsDQogICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAkKCcuY21kLWxpc3QnKS5wcmVwZW5kKCc8bGkgY2xhc3M9ImJhY2t1cC1sb2FkaW5nIj7lpIfku73kuK0uLjwvbGk+Jyk7DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuaGlkZSgpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuYmFja3VwLWxvYWRpbmcnKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLXJlc3VsdCI+5Yia5Yia5aSH5Lu95YiwICcgKyBqc29uLmZpbGUgKyAnPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkKCcjYmFja3VwLWJ0bicpLnNob3coKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHVybDogIi9jbWQvYmFja3VwLz9maWxlPSIgKyAkKHRoaXMpLmF0dHIoInJlbCIpLA0KICAgICAgICAgICAgICAgIHR5cGU6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICQodGhhdCkucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCLeb5slHBwAARwcAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cY21kXGxvZy5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUiPumUmeivr+aXpeW/lzwvaDE+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJsb2ctbGlzdCI+e3tyYW5nZSAuTG9nc319DQogICAgPGxpIGNsYXNzPSJsb2cgcmVsYXRpdmUiPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSBpbmxpbmUtYmxvY2siPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxwcmUgY2xhc3M9InRleHQiPnt7LlRleHR9fTwvcHJlPg0KICAgICAgICA8YSBjbGFzcz0icmVtb3ZlIGFic29sdXRlIiBocmVmPSIvY21kL2xvZ3MvP2ZpbGU9e3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZW1vdmUnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi56Gu6K6k5Yig6Zmk6K6w5b2VIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgIHVybDokdGhpcy5hdHRyKCJocmVmIiksDQogICAgICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcI3rBgWBkEAAAZBAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAdmlld1xhZG1pblxjbWRcbWVzc2FnZS5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUiPua2iOaBr+iusOW9lTwvaDE+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJtZXNzYWdlLWxpc3QiPnt7cmFuZ2UgLk1lc3NhZ2VzfX0NCiAgICA8bGkgY2xhc3M9Im1lc3NhZ2UgcmVsYXRpdmUiPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhIj57e0h0bWwgLkRhdGF9fTwvZGl2Pg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD5QSwcIyZjInUYBAABGAQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxjb21tZW50cy5odG1sPGRpdiBpZD0iY29tbWVudC1saXN0IiBjbGFzcz0iYWRtaW4gY29udGFpbmVyOTYwIj57e3JhbmdlIC5Db21tZW50c319DQogICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciIgaWQ9ImNvbW1lbnQte3suSWR9fSI+DQogICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIGMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLXRpbWUiPjxpIGNsYXNzPSJmYSBmYS1jbG9jay1vIj48L2k+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWVtYWlsIj57ey5FbWFpbH19PC9zcGFuPnt7aWYgLkdldENvbnRlbnR9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNudCI+QHt7LkdldENvbnRlbnQuVGl0bGV9fTwvc3Bhbj57e2Vsc2V9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNudCI+QOaXoOaViDwvc3Bhbj57e2VuZH19e3tpZiBuZSAuU3RhdHVzICJhcHByb3ZlZCJ9fQ0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLWNoZWNrIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLlrqHmoLgiPjxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSI+PC9pPuWuoeaguOS4rTwvYT57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWbnuWkjSI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLWRlbCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Yig6ZmkIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj57e2VuZH19DQogICAgPHVsIGlkPSJhcnRpY2xlLXBhZ2VyIiBjbGFzcz0icGFnZXIgY29udGFpbmVyOTYwIj57e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgICAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQogICAgPC91bD4NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9jb21tZW50cy8iIGNsYXNzPSJmb3JtIGNsZWFyIGxlZnQiIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IGxlZnQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIiBpZD0iY29tbWVudC1zdWJtaXQiPuWbnuWkjeivhOiuujwvYnV0dG9uPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIiBpZD0iY29tbWVudC1jbG9zZSI+5YWz6Zet5Zue5aSNPC9idXR0b24+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBpZD0iY29tbWVudC1wYXJlbnQiIG5hbWU9InBpZCIvPg0KICAgIDwvZm9ybT4NCjwvZGl2Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtZGVsJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWIoOmZpOivhOiuuuWwhuS9v+ebuOWFs+WGheWuueaXoOaViCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgIHVybDogIi9hZG1pbi9jb21tZW50cy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NvbW1lbnQtJyArIGlkKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWIoOmZpOWksei0pSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5jLWNoZWNrJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWuoeaguOWQjuatpOS9nOiAheWwhuS4jeWGjeagh+iusOWuoeaguCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogInB1dCIsDQogICAgICAgICAgICAgICAgICAgIHVybDogIi9hZG1pbi9jb21tZW50cy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NvbW1lbnQtJyArIGlkKS5maW5kKCIuYy1jaGVjayIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5a6h5qC45aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtcmVwbHknKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtJytpZCkuYXBwZW5kKCQoJyNjb21tZW50LWZvcm0nKS5kZXRhY2goKS5zaG93KCkpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKGlkKTsNCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Llm57lpI0iKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vY29tbWVudHMvIjsNCiAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlm57lpI3lpLHotKUiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgICQoJyNjb21tZW50LWNsb3NlJykub24oImNsaWNrIixmdW5jdGlvbigpew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtZm9ybScpLmhpZGUoKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LWNvbnRlbnQnKS52YWwoIiIpOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCECYCO/tDwAA7Q8AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAHZpZXdcYWRtaW5cZWRpdF9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIiB2YWx1ZT0ie3suQXJ0aWNsZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5BcnRpY2xlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suQXJ0aWNsZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+IiB2YWx1ZT0ie3suQXJ0aWNsZS5UYWdTdHJpbmd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoInt7aWYgZXEgLkFydGljbGUuU3RhdHVzICJwdWJsaXNoIn19IHNlbGVjdGVke3tlbmR9fT7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCJ7e2lmIGVxIC5BcnRpY2xlLlN0YXR1cyAiZHJhZnQifX0gc2VsZWN0ZWR7e2VuZH19PuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuQXJ0aWNsZS5Jc0NvbW1lbnQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgi5bey5L+d5a2Y77yM5Y675p+l55yL77yf6L+Y5piv57un57ut57yW6L6RIikpIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2FydGljbGVzLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhLnOnxbQ0AAG0NAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGFkbWluXGVkaXRfcGFnZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9Iumhtemdouagh+mimCIgdmFsdWU9Int7LlBhZ2UuVGl0bGV9fSIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPnt7SHRtbCAuUGFnZS5UZXh0fX08L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumhtemdoueahOWUr+S4gOmTvuaOpSIgdmFsdWU9Int7LlBhZ2UuU2x1Z319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuUGFnZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLlBhZ2UuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPue9rumhtumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ibGluayIgaWQ9ImlzLWxpbmsiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNMaW5rZWQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vcGFnZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCLZ4MjLjDQAA4w0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5cZmlsZXMuaHRtbDx1bCBpZD0iZmlsZXMtbGlzdCIgY2xhc3M9ImFkbWluIGNvbnRhaW5lcjk2MCBwYWdlciI+DQogICAgPGxpIGNsYXNzPSJmaWxlIiBpZD0iZmlsZXMtYnRuLWxpIj4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICA8L2xpPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlLXt7LklkfX0iPg0KICAgICAgICA8c3BhbiBjbGFzcz0idXBsb2FkLXRpbWUiPnt7RGF0ZUludDY0IC5VcGxvYWRUaW1lICJNTS5ERCJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InNpemUiPnt7RmlsZVNpemUgLlNpemV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii97ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSIve3suVXJsfX0iPjxpIGNsYXNzPSJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZSI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBmYWRlLW91dCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Yig6Zmk6ZmE5Lu2Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KICAgIHt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vZmlsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICBpbml0VXBsb2FkKCIjYXR0YWNoLXNob3ciKTsNCiAgICAgICAgJCgiLmRlbCIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLliKDpmaTpmYTku7bnm7jlhbPpk77mjqXkvJrlpLHmlYghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiL2FkbWluL2ZpbGVzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZmlsZS0nK2lkKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCGLFm/rsBgAA7AYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHZpZXdcYWRtaW5caG9tZS5odG1sPGRpdiBjbGFzcz0iYWRtaW4gY29udGFpbmVyIGNsZWFyIiBpZD0iZGFzaGJvYXJkIj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtNSBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0id2VsY29tZSI+DQogICAgICAgICAgICA8aDQ+V2VsY29tZTwvaDQ+DQogICAgICAgICAgICA8cD7mrKLov47lm57mnaXvvIwgPHN0cm9uZz57ey5Vc2VyLk5pY2t9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InF1aWNrLWxpbmsiPg0KICAgICAgICAgICAgPGg0PuW/q+mAn+mTvuaOpTwvaDQ+DQogICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5pKw5YaZ5paH56ugPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wYWdlL3dyaXRlLyI+5re75Yqg6aG16Z2iPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iPuafpeeci+WSjOWuoeaguOivhOiuujwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vc2V0dGluZy8iPuS/ruaUuemFjee9rjwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vcHJvZmlsZS8iPuabtOaWsOS4quS6uui1hOaWmTwvYT48L2xpPg0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTIgbGVmdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5Ij4NCiAgICAgICAgICAgIDxoND7mnIDmlrDmtLvliqg8L2g0Pnt7cmFuZ2UgLk1lc3NhZ2VzfX0NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1zZyByZWxhdGl2ZSB7ey5UeXBlfX0iPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YSI+e3tIdG1sIC5EYXRhfX08L2Rpdj4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0icmVhZCBhYnNvbHV0ZSIgaHJlZj0iL2FkbWluL21lc3NhZ2UvcmVhZD9pZD17ey5JZH19IiByZWw9Int7LklkfX0iPjxpIGNsYXNzPSJmYSBmYS1jaGVjayI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pnt7ZW5kfX17e2lmIGx0IChsZW4gLk1lc3NhZ2VzKSAxfX0NCiAgICAgICAgICAgIDxwPuayoeacieaWsOeahOa0u+WKqOS/oeaBrzwvcD4NCiAgICAgICAgICAgIHt7ZW5kfX0NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTQgcmlnaHQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cyI+DQogICAgICAgICAgICA8aDQ+5pWw5o2u57uf6K6hPC9oND4NCiAgICAgICAgICAgIDxwPuW3sue7j+WPkeW4g+aWh+eroCA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5BcnRpY2xlc319PC9zcGFuPiDnr4fvvIwNCiAgICAgICAgICAgIOmhtemdoiA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5QYWdlc319PC9zcGFuPiDkuKrvvIwgPGJyLz4NCiAgICAgICAgICAgIOaUtuWIsOivhOiuuiA8c3BhbiBjbGFzcz0ibGJsIGxibC1ibHVlIj57ey5TdGF0aXMuQ29tbWVudHN9fTwvc3Bhbj4g5qyh77yMDQogICAgICAgICAgICDkuIrkvKAgPHNwYW4gY2xhc3M9ImxibCBsYmwtZ3JlZW4iPnt7LlN0YXRpcy5GaWxlc319PC9zcGFuPiDkuKrpmYTku7Y8L3A+DQogICAgICAgICAgICA8cD7lvZPliY3nqIvluo/niYjmnKzvvJo8c3Ryb25nPnt7LlN0YXRpcy5WZXJzaW9ufX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJvZmZpY2UiPg0KICAgICAgICAgICAgPGg0PuWumOaWuea2iOaBrzwvaDQ+DQogICAgICAgICAgICA8cD7ov5jmsqHmnInmtojmga88L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgICAgJCgiLnJlYWQiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICQucG9zdCgkdGhpcy5hdHRyKCJocmVmIiksZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICR0aGlzLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgIH0pOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgfSk7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcI9JTc5iAJAAAgCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxsb2dpbi5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPueZu+W9lSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPg0KICAgICAgICAjbG9naW4tZm9ybXsNCiAgICAgICAgICAgIHdpZHRoOiAyODBweDsNCiAgICAgICAgICAgIG1hcmdpbjogODBweCBhdXRvOw0KICAgICAgICB9DQogICAgICAgICNsb2dpbi1mb3JtIGgxew0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsNCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxmb3JtIGlkPSJsb2dpbi1mb3JtIiBjbGFzcz0iZm9ybSBmb3JtLXZlcnRpY2FsIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0ibG9naW4tZm9ybSI+DQogICAgPGgxPueZu+W9lSAtIEZ4aC5HbzwvaDE+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0idXNlciI+55So5oi35ZCNPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQiIGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InVzZXIiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVzZXItaW52YWxpZCI+55So5oi35ZCN5Li65a2X5q+NK+aVsOWtl++8jOmVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9InBhc3N3b3JkIj7nlKjmiLflr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJwYXNzd29yZCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0icGFzc3dvcmQtaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7nmbsg5b2VPC9idXR0b24+DQogICAgPHNwYW4gY2xhc3M9InRpcCI+6buY6K6k6K6w5L2P55m76ZmGM+WkqTwvc3Bhbj4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2Nkbi5zdGF0aWNmaWxlLm9yZy9qcXVlcnkuZm9ybS8zLjQ2L2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvdmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigibG9naW4tZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoidXNlciIsInJ1bGVzIjoiYWxwaGFfbnVtZXJpY3xtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJwYXNzd29yZCIsInJ1bGVzIjoicmVxdWlyZWR8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI2xvZ2luLWZvcm0nKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLnmbvlvZXplJnor6/vvIzor7fmo4Dmn6XnlKjmiLfmiJblr4bnoIEiKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcI1uB4YpAIAACQCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxwYWdlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+DQogICAgPC9saT57e3JhbmdlIC5QYWdlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vcGFnZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk6aG16Z2i5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9wYWdlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIa+TbIVwGAABcBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxwYXNzd29yZC5odG1sPGZvcm0gaWQ9InBhc3N3b3JkIiBjbGFzcz0iZm9ybSBmb3JtLWFsaWduIGNsZWFyIiBhY3Rpb249IiMiIG5hbWU9InBhc3N3b3JkLWZvcm0iIG1ldGhvZD0icG9zdCI+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ib2xkIj7ml6flr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im9sZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im9sZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPumqjOivgeaXp+WvhueggTwvc3Bhbj48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ib2xkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im5ldyI+5paw5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJuZXciIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJuZXciIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuZXctaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0iY29uZmlybSI+56Gu6K6k5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImNvbmZpcm0taW52YWxpZCI+56Gu6K6k5a+G56CB5LiN5Yy56YWNPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInBhc3N3b3JkLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6Im9sZCIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmV3IiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJjb25maXJtIiwicnVsZXMiOiJyZXF1aXJlZHxtYXRjaGVzW25ld10ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwYXNzd29yZCcpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIbnEngU8HAABPBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xhZG1pblxwbHVnaW4uaHRtbDx1bCBpZD0icGx1Z2luLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPnt7cmFuZ2UgLlBsdWdpbnN9fQ0KICAgIDxsaSBjbGFzcz0iY2xlYXIiPnt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQgbGJsIGFjdGl2ZSBsYmwtZ3JlZW4iPiZuYnNwOzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGxlZnQiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24gbGVmdCI+e3suVmVyc2lvbn19PC9zcGFuPnt7aWYgLkhhc1NldHRpbmd9fQ0KICAgICAgICA8YSBjbGFzcz0ic2V0dGluZyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy97ey5LZXl9fS8iPumAiemhuTwvYT57e2VuZH19e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8YSBjbGFzcz0iZGVhY3RpdmF0ZSBsYmwgbGJsLXJlZCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5bCB5Y2wPC9hPnt7ZWxzZX19DQogICAgICAgIDxhIGNsYXNzPSJhY3RpdmF0ZSBsYmwgbGJsLWJsdWUgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPua/gOa0uzwvYT57e2VuZH19DQogICAgICAgIDxwIGNsYXNzPSJkZXNjIGxlZnQiPnt7LkRlc2N9fTwvcD4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIuZGVhY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJkZWFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoea/gOa0uyIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlsIHljbDlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgiLmFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoeWwgeWNsCIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLmv4DmtLvlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCE9wWaFiBgAAYgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAHZpZXdcYWRtaW5ccGx1Z2luX3NldHRpbmcuaHRtbDxmb3JtIGlkPSJwbHVnaW4tc2V0dGluZy1mb3JtIiBjbGFzcz0iZm9ybSBjb250YWluZXI5NjAgYWRtaW4iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICB7e0h0bWwgLkZvcm19fQ0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICAgICAgICAkKCcjcGx1Z2luLXNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIjoi5L+d5a2Y5aSx6LSlIik7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwg0K3PVOAEAADgBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHByb2ZpbGUuaHRtbDxmb3JtIGlkPSJwcm9maWxlIiBjbGFzcz0iYWRtaW4gZm9ybSBjbGVhciBmb3JtLWFsaWduIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0icHJvZmlsZS1mb3JtIj4NCiAgICA8ZGl2IGNsYXNzPSJhdmF0YXIgZ3JpZC0xLTQgbGVmdCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7ey5Vc2VyLkF2YXRhcn19IiBhbHQ9Int7LlVzZXIuTmlja319IiBjbGFzcz0iZmllbGQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBmaWVsZCBpbmxpbmUtYmxvY2siPuWktOWDj+eUsSA8YSBocmVmPSJodHRwOi8vZ3JhdmF0YXIuY29tLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm8tZm9sbG93Ij5HcmF2YXRhcjwvYT4g5o+Q5L6bPC9zcGFuPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tcmVkIGlubGluZS1ibG9jayIgaHJlZj0iL2FkbWluL3Bhc3N3b3JkLyI+5L+u5pS55a+G56CBPC9hPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaW5mbyByaWdodCBncmlkLTMtNCI+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nmbvlvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiB2YWx1ZT0ie3suVXNlci5OYW1lfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+55m75b2V55qE55So5oi35ZCNPC9zcGFuPjxici8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ibmljayI+5pi156ewPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ibmljayIgdHlwZT0idGV4dCIgbmFtZT0ibmljayIgdmFsdWU9Int7LlVzZXIuTmlja319IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuaYvuekuuWcqOWJjeWPsOeahOensOWRvDwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5pY2staW52YWxpZCI+5pi156ew6ZW/5bqmMi0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZW1haWwiPumCrueusTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImVtYWlsIiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHZhbHVlPSJ7ey5Vc2VyLkVtYWlsfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6IGU57O76YKu566x77yM5Y2B5YiG6YeN6KaB77yBPC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iZW1haWwtaW52YWxpZCI+6YKu566x5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1cmwiPue9keWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVybCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHZhbHVlPSJ7ey5Vc2VyLlVybH19IiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1cmwtaW52YWxpZCI+572R5Z2A5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBiaW8iIG5hbWU9ImJpbyIgaWQ9ImJpbyI+e3suVXNlci5CaW99fTwvdGV4dGFyZWE+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwcm9maWxlLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmljayIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiZW1haWwiLCJydWxlcyI6InZhbGlkX2VtYWlsIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJ1cmwiLCJydWxlcyI6InZhbGlkX3VybCJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Byb2ZpbGUnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCB+PoV8CDAAAAgwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cc2V0dGluZy5odG1sPHVsIGlkPSJzZXR0aW5nLW5hdiIgY2xhc3M9ImNvbnRhaW5lcjk2MCB0ZXh0LWNlbnRlciI+DQogICAgPGxpPjxhIGhyZWY9IiNnZW5lcmFsIj7ln7rmnKw8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iI2N1c3RvbSI+6Ieq5a6a5LmJPC9hPjwvbGk+DQo8L3VsPg0KPGRpdiBpZD0ic2V0dGluZy1wYW5lbHMiIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybSBmb3JtLWFsaWduIHNldHRpbmctcGFuZWwiIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXVybCI+56uZ54K55Zyw5Z2APC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS11cmwiIGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0ic2l0ZV91cmwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV91cmxgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXRpdGxlIj7nq5nngrnkuLvmoIfpopg8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3RpdGxlIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXN1Yi10aXRsZSI+56uZ54K55Ymv5qCH6aKYPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1zdWItdGl0bGUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfc3ViX3RpdGxlIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfc3ViX3RpdGxlYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1rZXl3b3JkcyI+TWV0YeWFs+mUruWtlzwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUta2V5d29yZHMiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfa2V5d29yZHMiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLWRlc2MiPk1ldGHnq5nngrnku4vnu408L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLWRlc2MiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfZGVzY3JpcHRpb24iIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfZGVzY3JpcHRpb25gfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJhcnRpY2xlLXNpemUiPuWNlemhteaWh+eroOWIl+ihqOaVsDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImFydGljbGUtc2l6ZSIgY2xhc3M9ImlwdCIgdHlwZT0ibnVtYmVyIiBuYW1lPSJhcnRpY2xlX3NpemUiIHZhbHVlPSJ7e1NldHRpbmcgYGFydGljbGVfc2l6ZWB9fSIgbWF4PSIxMCIgbWluPSIzIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS10aGVtZSI+5Li76aKY55uu5b2V5ZCNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aGVtZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aGVtZSIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV90aGVtZWB9fSIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBibG9jayI+5Li76aKY5Y2z5oyH5ZCR55qE5qih5p2/55uu5b2V77yM5YW35L2T5YaF5a656K+35Y+C6ICDIGRlZmF1bHQg55uu5b2V77yI5Y2zIGRlZmF1bHQg5Li76aKY77yJPC9zcGFuPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2l0ZV90aGVtZV9kZWYiIHZhbHVlPSJkZWZhdWx0Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZ28tbWFya2Rvd24iPkdv5riy5p+TTWFya2Rvd248L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJnby1tYXJrZG93biIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duIiB2YWx1ZT0ie3tTZXR0aW5nIGBlbmFibGVfZ29fbWFya2Rvd25gfX0iLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPum7mOiupOWFs+mXre+8jOS9v+eUqOWJjeerr21hcmtlZC5qc+a4suafk++8jOWhq3RydWXml7blvIDlkK88L3NwYW4+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlbmFibGVfZ29fbWFya2Rvd25fZGVmIiB2YWx1ZT0iZmFsc2UiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZg8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZm9ybT4NCiAgICA8Zm9ybSBpZD0ic2V0dGluZy1jdXN0b20tZm9ybSIgY2xhc3M9InNldHRpbmctZm9ybSBmb3JtIGZvcm0tYWxpZ24gc2V0dGluZy1wYW5lbCIgYWN0aW9uPSIvYWRtaW4vc2V0dGluZy9jdXN0b20vIiBtZXRob2Q9InBvc3QiPnt7cmFuZ2UgJGssJHYgOj0gLkN1c3RvbX19DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IGtleSIgdHlwZT0idGV4dCIgbmFtZT0ia2V5IiB2YWx1ZT0ie3ska319Ii8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHZhbHVlPSJ7eyR2fX0iLz4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgPC9wPnt7ZW5kfX0NCiAgICAgICAgPHA+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmDwvYnV0dG9uPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtZ3JlZW4gYWRkIiBocmVmPSIjIj7mt7vliqDkuIDpobk8L2E+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kvb/nlKjlh73mlbDoh6rlrprkuYnphY3nva7vvIzpnIDopoHliqDliY3nvIAiY18i77yM5aaCR2V0U2V0dGluZygiY19rZXkiKTwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjdXN0b20taXRlbSI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSLlrZfmrrXlkI0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSLlrZfmrrXlgLwiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvc2NyaXB0Pg0KICAgIDwvZm9ybT4NCiAgICA8ZGl2IGNsYXNzPSJzZXR0aW5nLXBhbmVsIj4zMzM8L2Rpdj4NCjwvZGl2Pg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnl0b29scy8xLjIuNy9qcXVlcnkudG9vbHMubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNzZXR0aW5nLW5hdicpLnRhYnMoIi5zZXR0aW5nLXBhbmVsIik7DQogICAgICAgICQoJy5zZXR0aW5nLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIiA6IGpzb24ubXNnKTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5hZGQnKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnI3NldHRpbmctY3VzdG9tLWZvcm0nKS5wcmVwZW5kKCQoIiNjdXN0b20taXRlbSIpLmh0bWwoKSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuZGVsJykub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGlmKGNvbmZpcm0oIuimgeWIoOmZpOi/memhue+8nyIpKXsNCiAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcI9ZoiyucRAADnEQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xhZG1pblx3cml0ZV9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ5paH56ug5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5qCH562+PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJ0YWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InRhZyIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOagh+etviIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoIj7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCI+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgIDwvcD4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIvsp0fCEMAAAhDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblx3cml0ZV9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ6aG16Z2i5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL3BhZ2VzLyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCHJbVWl8DAAAfAwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHZpZXdcYWRtaW4ubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPnt7LlRpdGxlfX0gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvYWRtaW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgICA8aDMgY2xhc3M9ImxvZ28gbGVmdCI+RnhoLkdvIC0gPHNwYW4+e3suVGl0bGV9fTwvc3Bhbj48L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJuYXYgbGVmdCByZWxhdGl2ZSI+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGFzaGJvYXJkIGxlZnQiIGhyZWY9Ii9hZG1pbi8iPjxpIGNsYXNzPSJmYSBmYS1kYXNoYm9hcmQiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iYXJ0aWNsZSBsZWZ0IiBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvIiB0aXRsZT0i5paH56ugIj48aSBjbGFzcz0iZmEgZmEtY29weSI+PC9pPjwvYT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGFnZXMgbGVmdCIgaHJlZj0iL2FkbWluL3BhZ2VzLyIgdGl0bGU9IueLrOeri+mhtemdoiI+PGkgY2xhc3M9ImZhIGZhLXBhc3RlIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImNvbW1lbnRzIGxlZnQiIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iIHRpdGxlPSLor4TorroiPjxpIGNsYXNzPSJmYSBmYS1jb21tZW50cyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJmaWxlcyBsZWZ0IiBocmVmPSIvYWRtaW4vZmlsZXMvIiB0aXRsZT0i5aqS5L2T5paH5Lu2Ij48aSBjbGFzcz0iZmEgZmEtaW5ib3giPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGx1Z2lucyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy8iIHRpdGxlPSLmj5Lku7YiPjxpIGNsYXNzPSJmYSBmYS1nZWFycyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyIgdGl0bGU9Iuiuvue9riI+PGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPjwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxhIGNsYXNzPSJvdXQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii9sb2dvdXQvIiB0aXRsZT0i6YCA5Ye6Ij48aSBjbGFzcz0iZmEgZmEtcG93ZXItb2ZmIGZhLWxnIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0icHJvZmlsZSBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIiB0aXRsZT0i5oiRIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImZyb250IG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Iuafpeeci+e9keermSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+DQogICAgPC9kaXY+DQo8L2Rpdj4NCntAQ29udGVudH0NCjxkaXYgaWQ9ImZvb3RlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgIDxwIGNsYXNzPSJsaW5rcyB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgIDxhIGNsYXNzPSJzdGF0IiBocmVmPSIvY21kL21lc3NhZ2UvIj7mtojmga88L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJiYWNrdXAiIGhyZWY9Ii9jbWQvYmFja3VwLyI+5aSH5Lu9PC9hPg0KICAgICAgICAgICA8YSBjbGFzcz0iZXJyIiBocmVmPSIvY21kL2xvZ3MvIj7ml6Xlv5c8L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJzeXMiIGhyZWY9IiMiPuezu+e7nzwvYT4NCiAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJjcCB0ZXh0LWNlbnRlciI+UHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9wPg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCNn4qlTBCAAAwQgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAADwAAAHZpZXdcY21kLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT57ey5UaXRsZX19IC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NtZC5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5IGNsYXNzPSJjbWQiPg0Ke0BDb250ZW50fQ0KPHAgY2xhc3M9ImJhY2siPjxhIGhyZWY9ImphdmFzY3JpcHQ6aGlzdG9yeS5iYWNrKCkiPkJhY2s8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwgKfcgAzgEAAM4BAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAB2aWV3XGRlZmF1bHQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcZGVmYXVsdFxhcnRpY2xlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIge3suQXJ0aWNsZS5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj4NCiAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImF1dGhvciBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+e3suVXNlci5OaWNrfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj57e2lmIC5UYWdTdHJpbmd9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS10YWdzIj48L2k+e3suVGFnU3RyaW5nfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZpZXdzIGlubGluZS1ibG9jayByaWdodCI+6ZiF6K+7Jm5ic3A7Jm5ic3A7PHNwYW4+e3suSGl0c319PC9zcGFuPiZuYnNwOyZuYnNwO+asoTwvc3Bhbj4NCiAgICAgICAgPC9wPnt7ZW5kfX0NCiAgICA8L2FydGljbGU+DQogICAge3tIdG1sIC5Db21tZW50SHRtbH19DQo8L2Rpdj5QSwcIwLg0iLcDAAC3AwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xkZWZhdWx0XGNvbW1lbnQuaHRtbDxkaXYgaWQ9ImNvbW1lbnQiPg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiBsZWZ0Ij4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIGMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj57e2VuZH19e3tlbmR9fQ0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtc2hvdyIgY2xhc3M9InRleHQtY2VudGVyIj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gZW5hYmxlIj7lj5Hooajor4Torro8L2J1dHRvbj57e2Vsc2V9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXJlZCI+5pys5paH5YWz6Zet5LqG6K+E6K66PC9idXR0b24+e3tlbmR9fQ0KICAgIDwvZGl2Pnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBjbGFzcz0iaGlkZSBjbGVhciB0ZXh0LWNlbnRlciBmb3JtIiBhY3Rpb249Ii9jb21tZW50L3t7LkNvbnRlbnQuSWR9fS8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mbyBsZWZ0IHRleHQtcmlnaHQiPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0gYy1hdmF0YXItZmllbGQiPg0KICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIG51bGwiIHNyYz0iL3N0YXRpYy9pbWcvc2l0ZS5wbmciIGFsdD0iIiBpZD0iY29tbWVudC1hdmF0YXIiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibm90LW1lIGJsb2NrIiBocmVmPSIjIj7kuI3mmK/miJE/PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvLWZpZWxkcyBoaWRlIj4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuensOWRvCIgaWQ9ImNvbW1lbnQtYXV0aG9yIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpgq7nrrEiIGlkPSJjb21tZW50LWVtYWlsIi8+IDwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0idXJsIiBwbGFjZWhvbGRlcj0i572R5Z2AIiBpZD0iY29tbWVudC11cmwiLz48L3A+DQogICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjb21tZW50LXBhcmVudCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgbmFtZT0icGlkIi8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtY29udGVudCB0ZXh0LWxlZnQgcmlnaHQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGNhbmNlbC1yZXBseSIgdHlwZT0iYnV0dG9uIj7lj5bmtojlm57lpI08L2J1dHRvbj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9mb3JtPnt7ZW5kfX0NCiAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjb21tZW50LXRwbCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSIiIGFsdD0iIi8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSBjLWF1dGhvciIgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPk5vdzwvc3Bhbj4NCiAgICAg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a2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3Mvc3R5bGUuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRpdGxlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0gLSBSU1MgMi4wIiBocmVmPSIvcnNzLnhtbCIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGhlYWRlciBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7e1NldHRpbmcgYGNfaG9tZV9hdmF0YXJgfX0iIGFsdD0ic2l0ZSIgaWQ9ImhlYWRlci1pbWciLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCI+PGEgaHJlZj0iLyI+e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC9hPjwvaDE+DQogICAgICAgIDxoNCBpZD0iaGVhZGVyLXN1YiI+e3tTZXR0aW5nICJzaXRlX3N1Yl90aXRsZSJ9fTwvaDQ+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxuYXYgaWQ9Im5hdiIgY2xhc3M9ImNsZWFyIHRleHQtY2VudGVyIj4NCiAgICA8dWw+DQogICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvIj7mlofnq6A8L2E+PC9saT4NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii9hYm91dC1tZS5odG1sIj7lhbPkuo48L2E+PC9saT4NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii9mcmllbmRzLmh0bWwiPuWlveWPizwvYT48L2xpPg0KICAgIDwvdWw+DQo8L25hdj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxwPg0KICAgICAgICA8YSBjbGFzcz0id2VpYm8iIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfd2VpYm9gfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtd2VpYm8iPjwvaT5XZWlibzwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImdpdCIgaHJlZj0ie3tTZXR0aW5nIGBjX2Zvb3Rlcl9naXRodWJgfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZ2l0aHViIj48L2k+R2l0SHViPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZW1haWwiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZW1haWxgfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZW52ZWxvcGUiPjwvaT5FbWFpbDwvYT4NCiAgICAgICAgPGEgY2xhc3M9InJzcyIgaHJlZj0iL3Jzcy54bWwiIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtcnNzIj48L2k+UlNTPC9hPnt7U2V0dGluZyBgY19mb290ZXJfZ2FgIHwgSHRtbH19DQogICAgPC9wPg0KICAgIDxzcGFuPkdvIMKpIDIwMTQgQWxsIHJpZ2h0cyByZXNlcnZlZC4gUHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9zcGFuPg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIlQW0/JQJAACUCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xkZWZhdWx0XGluZGV4Lmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5JZH19Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBsZWZ0IHRleHQtY2VudGVyIj57e2lmIGd0IC5Db21tZW50TnVtIDB9fQ0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PHN0cm9uZz57ey5Db21tZW50TnVtfX0g4oSDPC9zdHJvbmc+PC9hPjwvcD57e2VuZH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyI+PGkgY2xhc3M9ImZhIGZhLWV5ZSI+PC9pPjxzdHJvbmc+e3suSGl0c319IOKEiTwvc3Ryb25nPjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyYXkgdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT48c3Ryb25nPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1haW4iPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuU3VtbWFyeX19PC9zZWN0aW9uPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0aG9yIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT57ey5Vc2VyLk5pY2t9fTwvc3Bhbj57e2VuZH19e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXRhZ3MiPjwvaT57ey5UYWdTdHJpbmd9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlubGluZS1ibG9jayByZWFkIHJpZ2h0IiBocmVmPSJ7ey5MaW5rfX0iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT7nu6fnu63pmIXor7s8L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvYXJ0aWNsZT57e2VuZH19DQogICAgPGRpdiBjbGFzcz0icGFnZXIgdGV4dC1jZW50ZXIiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxhIGhyZWY9Ii9wL3t7Ln19LyIgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFn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LklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9ImMtdGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NIOaciCBERCDml6UgSEgg5pe2IG1tIOWIhiJ9fTwvc3Bhbj48L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEgY2xlYXIiPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSBsYmwgcmlnaHQiIGhyZWY9IiMiIHJlbD0iIj7lm57lpI08L2E+DQogICAgICAgICAgICAgICAgICAgIDxwPjxhIGNsYXNzPSJjLWF1dGhvciAiIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj5Ob3c8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jaGVjayI+5a6h5qC45Lit77yM5Yi35paw5ZCO6ZqQ6JePPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+PC9zZWN0aW9uPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9zY3JpcHQ+DQo8L2Rpdj5QSwcIaaBHopUNAACVDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAdmlld1xsaW5nXGVycm9yL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGxpbmdcZXJyb3JcZXJyb3IuaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7plJnor6/mj5DnpLo8L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT5ib2R5e21hcmdpbjogNDBweCAxMDBweH08L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8aDI+5oKo6K6/6Zeu55qE6aG16Z2i5q2j5Zyo5omT556M552hPC9oMj48YnIvPg0KPHA+56iL5bqP5ZGY5q2j5Zyo5Yqq5Yqb5ZSk6YaS77yM6K+356iN5YCZ6K6/6ZeuLi4uPC9wPg0KPHA+PGEgaHJlZj0iLyI+6L+U5Zue6aaW6aG1PC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIE4RGUngBAAB4AQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xsaW5nXGVycm9yXG5vdGZvdW5kLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouemu+WutuWHuui1sDwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWbm+WkhOWvu+aJvu+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCJD51MB1AQAAdQEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcbGluZ1xob21lLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvbGluZy5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIgY2xhc3M9ImxlZnQiLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCIgY2xhc3M9ImxlZnQiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiIGNsYXNzPSJsZWZ0Ij57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4NCiAgICAgICAgPG5hdiBpZD0ibmF2IiBjbGFzcz0icmlnaHQiPg0KICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvIj7mlofnq6A8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iL2Fib3V0LW1lLmh0bWwiPuWFs+S6jjwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvZnJpZW5kcy5odG1sIj7lpb3lj4s8L2E+PC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvbmF2Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgY2xlYXIiPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+R28gwqkgMjAxNCBBbGwgcmlnaHRzIHJlc2VydmVkLjwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InJpZ2h0Ij5Qcm91ZGx5IHB1Ymxpc2hlZCB3aXRoIEZ4aC5Hby48L3NwYW4+DQogICAgPC9kaXY+DQogICAgPGEgaWQ9ImdvLXRvcCIgaHJlZj0iIyIgY2xhc3M9ImxibCBoaWRlIGxibC1ibHVlIiB0aXRsZT0i5Zue5Yiw6aG26YOoIj48aSBjbGFzcz0iZmEgZmEtYXJyb3ctdXAgZmEtbGciPjwvaT48L2E+DQogICAge3tTZXR0aW5nIGBjX2Zvb3Rlcl9nYWAgfCBIdG1sfX0NCjwvZm9vdGVyPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvaG9tZS5qcyI+PC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+DQp7e0h0bWwgIjwhLS0gdGhhbmtzIGZvciB0aGVtZSBMaW5nb25iZXJyeShodHRwOi8vd3d3LmFuZGVyc25vcmVuLnNlLykgZm9yIFdvcmRQcmVzcy0tPiJ9fVBLBwhDfb362QgAANkIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAAB2aWV3XGxpbmdcaW5kZXguaHRtbDxkaXYgaWQ9ImFydGljbGUtY29udGFpbmVyIiBjbGFzcz0iY2xlYXIiPnt7cmFuZ2UgLkFydGljbGVzfX0NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIge3suU3RhdHVzfX0iIGlkPSJhcnRpY2xlLXt7LklkfX0iPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGxlZnQgdGV4dC1jZW50ZXIgcmVsYXRpdmUiPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+e3suQ29tbWVudE51bX19PC9hPjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIGFic29sdXRlIj57ey5IaXRzfX08L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIHJlbGF0aXZlIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJ0aW1lLWluZm8iPnt7aWYgLlVzZXJ9fTxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDt7e2VuZH195Y+R6KGo5LqOJm5ic3A7Jm5ic3A7Jm5ic3A7e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIllZWVkg5bm0IE1NIOaciCBERCDml6UifX08L3A+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5TdW1tYXJ5fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPuagh+etvu+8mnt7LlRhZ1N0cmluZ319PC9zcGFuPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJpbmxpbmUtYmxvY2sgcmVhZCByaWdodCIgaHJlZj0ie3suTGlua319Ij7nu6fnu63pmIXor7s8L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvYXJ0aWNsZT57e2VuZH19DQogICAgPGRpdiBjbGFzcz0icGFnZXIgdGV4dC1jZW50ZXIiIGlkPSJhcnRpY2xlLXBhZ2VyIj4NCiAgICAgICAge3tpZiAuUGFnZXIuSXNOZXh0fX08YSBo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" \ No newline at end of file From 2c0b74d720753c341f963c61c069b80320a02914 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Thu, 6 Feb 2014 09:42:56 +0800 Subject: [PATCH 21/82] update zip bytes --- app/cmd/zip.go | 2 +- app/model/storage.go | 3 +++ view/admin/setting.html | 4 ++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/cmd/zip.go b/app/cmd/zip.go index 713407d..07b2330 100644 --- a/app/cmd/zip.go +++ b/app/cmd/zip.go @@ -1,2 +1,2 @@ package cmd -const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnttYXJnaW4tdG9wOjI0cHg7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3NldHRpbmctbmF2IGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDEycHh9I3NldHRpbmctbmF2IGxpIGF7cGFkZGluZzozcHggMTBweH0KI3NldHRpbmctbmF2IGxpIGE6aG92ZXIsI3NldHRpbmctbmF2IGxpIGEuY3VycmVudHtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMDA1YjlifQouc2V0dGluZy1wYW5lbHtkaXNwbGF5Om5vbmV9Ci5zZXR0aW5nLWZvcm17d2lkdGg6ODIwcHg7bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99LnNldHRpbmctZm9ybSAuaXB0e3dpZHRoOjQ4MHB4fQouc2V0dGluZy1mb3JtIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9Ci5zZXR0aW5nLWZvcm0gbGFiZWx7bWluLXdpZHRoOjEwZW19Ci5zZXR0aW5nLWZvcm0gLnRpcC5ibG9ja3ttYXJnaW4tbGVmdDoxMmVtfQojc2V0dGluZy1jdXN0b20tZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQua2V5e3dpZHRoOjI1MHB4fQojc2V0dGluZy1jdXN0b20tZm9ybSBpbnB1dC52YWx1ZXt3aWR0aDo2NTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojc2V0dGluZy1jdXN0b20tZm9ybSAudGlwe21hcmdpbi1sZWZ0OjB9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNudCwjY29tbWVudC1saXN0IC5jLWVtYWlse2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHh9CiNjb21tZW50LWxpc3QgLmMtcmVwbHl7Y29sb3I6Izk5OX0jY29tbWVudC1saXN0IC5jLXJlcGx5OmhvdmVye2NvbG9yOiMzMzN9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxM3B4fQojY29tbWVudC1saXN0IC5jLWF1dGhvci5hZG1pbntiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KI2NvbW1lbnQtbGlzdCAuYy1wLW1ke21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjaywjY29tbWVudC1saXN0IC5jLWRlbHtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhLCNjb21tZW50LWxpc3QgLmMtZGVsIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNoZWNrOmhvdmVyLCNjb21tZW50LWxpc3QgLmMtZGVsOmhvdmVye2NvbG9yOiNhYTM5M2N9CiNjb21tZW50LWZvcm17cGFkZGluZy10b3A6MTJweDtkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6NzJweH0jY29tbWVudC1mb3JtIC5idG57bWFyZ2luLXJpZ2h0OjI0cHh9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6NTAwcHg7aGVpZ2h0OjgwcHg7bWFyZ2luLXJpZ2h0OjI0cHh9CiNmaWxlcy1saXN0IGxpLmZpbGV7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNmaWxlcy1saXN0IGxpLmZpbGU+KnttYXJnaW4tcmlnaHQ6MTZweH0KI2ZpbGVzLWxpc3QgbGkuZmlsZTpob3ZlciAuZGVse29wYWNpdHk6MSAhaW1wb3J0YW50fQojZmlsZXMtbGlzdCAudXBsb2FkLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZmlsZXMtbGlzdCAuZGVse2NvbG9yOiNlNjQzNDZ9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2ZpbGVzLWxpc3QgLmZpbGUtcHJvZ3Jlc3MuZXJye2JhY2tncm91bmQ6cmdiYSgyNTUsNjgsNzEsMC4yKTtjb2xvcjojYWEzOTNjfQojZmlsZXMtbGlzdCAuc2l6ZXt3aWR0aDo0ZW07ZGlzcGxheTppbmxpbmUtYmxvY2t9CiNwbHVnaW4tbGlzdCBsaXttYXJnaW4tYm90dG9tOjE2cHg7cGFkZGluZy1ib3R0b206MTZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jcGx1Z2luLWxpc3QgbGkgLmRlc2N7bWFyZ2luLWJvdHRvbTowO3dpZHRoOjk5JTtjb2xvcjojOTk5fQojcGx1Z2luLWxpc3QgbGkgYS5sYmx7cGFkZGluZzowIDhweDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLnZlcnNpb257Y29sb3I6IzUwNzY1MDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLm5hbWV7Zm9udC1zaXplOjE2cHh9CiNwbHVnaW4tbGlzdCBsaSAuYWN0aXZle3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7bWFyZ2luLXJpZ2h0OjE2cHg7cGFkZGluZzowO21hcmdpbi10b3A6MTBweH0KI3BsdWdpbi1saXN0IGxpIC5zZXR0aW5ne21hcmdpbi1sZWZ0OjE2cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIHAuaXRlbXtjbGVhcjpib3RofQojcGx1Z2luLXNldHRpbmctZm9ybSBsYWJlbHtmbG9hdDpsZWZ0O21pbi13aWR0aDo2ZW07dGV4dC1hbGlnbjpyaWdodDttYXJnaW4tcmlnaHQ6MmVtfQojcGx1Z2luLXNldHRpbmctZm9ybSAudGl0bGV7cGFkZGluZy10b3A6MDttYXJnaW4tYm90dG9tOjE4cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIGlucHV0LmlwdHt3aWR0aDo2MDBweH0KI2Rhc2hib2FyZCAuZ3JpZC0xLTV7bWFyZ2luLXJpZ2h0OjIlfQojZGFzaGJvYXJkIC5xdWljay1saW5rIGxpe2xpc3Qtc3R5bGU6aW5zaWRlIGRpc2M7bWFyZ2luLWJvdHRvbTo2cHg7cGFkZGluZy1ib3R0b206NnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojZGFzaGJvYXJkIC5zdGF0cyAubGJse3BhZGRpbmc6MXB4IDVweDttYXJnaW46MCAzcHh9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2d7cGFkZGluZzo4cHggMTJweDttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGQ7bGluZS1oZWlnaHQ6MjRweDtmb250LXNpemU6MTJweH0jZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLmRhdGF7Y29sb3I6IzY2NjttYXJnaW4tbGVmdDoxLjJlbX0jZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5kYXRhIHB7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjI0cHh9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLnJlYWR7dG9wOjA7cmlnaHQ6MTJweDtvcGFjaXR5OjB9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAucmVhZDpob3Zlcntjb2xvcjojZTY0MzQ2fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4wNil9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZzpob3ZlciAucmVhZHtvcGFjaXR5OjF9ClBLBwjPelYnljAAAJYwAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcY3NzXGNtZC5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfQpoZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9CmF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja30KdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9CmZpZWxkc2V0LGltZ3tib3JkZXI6MH0KYWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH0Kb2wsdWx7bGlzdC1zdHlsZTpub25lfQpjYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH0KaDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfQpxOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9CmFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfQpzdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9CnN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH0KbGVnZW5ke2NvbG9yOiMwMDB9Cmh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifQphe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifQpwe21hcmdpbi1ib3R0b206MThweH0KaDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9Cmgxe2ZvbnQtc2l6ZToyOHB4fQpoMntmb250LXNpemU6MjRweH0KaDN7Zm9udC1zaXplOjIxcHh9Cmg0e2ZvbnQtc2l6ZToxOXB4fQpoNXtmb250LXNpemU6MTZweH0KaDZ7Zm9udC1zaXplOjE0cHh9Ci50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fQoudGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fQoudGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9Ci5sZWZ0e2Zsb2F0OmxlZnR9Ci5yaWdodHtmbG9hdDpyaWdodH0KLmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfQoucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9Ci5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9Ci52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfQouaW5saW5le2Rpc3BsYXk6aW5saW5lfQouaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfQouYmxvY2t7ZGlzcGxheTpibG9ja30KLmZhZGUtb3V0e29wYWNpdHk6MH0KLmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9Ci5jb250YWluZXJ7bWF4LXdpZHRoOjEyMDBweDttYXJnaW46YXV0b30KLmNvbnRhaW5lcjk2MHttYXgtd2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99Ci5ncmlkLTEtMnt3aWR0aDo1MCV9Ci5ncmlkLTEtM3t3aWR0aDozMy4zMzMzJX0KLmdyaWQtMS00e3dpZHRoOjI1JX0KLmdyaWQtMS01e3dpZHRoOjIwJX0KLmdyaWQtMS02e3dpZHRoOjE2LjY2NjYlfQouZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9Ci5ncmlkLTMtNHt3aWR0aDo3NSV9Ci5ncmlkLTMtNXt3aWR0aDo2MCV9Ci5ncmlkLTQtNXt3aWR0aDo4MCV9Ci5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0LGJ1dHRvbntmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZn0KLmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0KLmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC5pcHR7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTttaW4td2lkdGg6MTgwcHh9LmZvcm0gLmlwdDpmb2N1c3tib3JkZXItY29sb3I6IzAwNzliY30KLmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfQouZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fQouZm9ybSAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9Ci5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9Ci5mb3JtLXZlcnRpY2FsIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3h9Ci5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fQouZm9ybS1hbGlnbiAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn0KYS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfQouYnRuLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0uYnRuLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2F9Ci5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifQouYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfQoubGJse3BhZGRpbmc6NHB4IDEycHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fQoubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KYS5sYmx7bGluZS1oZWlnaHQ6MjZweH0KYS5sYmwtcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYTtjb2xvcjojZmJmYmZifQoubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CmEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9CmEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifQoucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30KLnBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5pdGVtOmhvdmVyIGF7Y29sb3I6I2ZmZn0KLnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifQoucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgyLC5tYXJrZG93biBoMywubWFya2Rvd24gaDQsLm1hcmtkb3duIGg1LC5tYXJrZG93biBoNntwYWRkaW5nOjE4cHggMCA5cHggMDtmb250LXdlaWdodDpib2xkfQoubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHh9Ci5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMnttYXJnaW4tYm90dG9tOjEwcHg7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KLm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fQoubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Ci5tYXJrZG93biBoNXtmb250LXNpemU6MTZweH0KLm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fQoubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Ci5tYXJrZG93biB1bHtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlfQoubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0KLm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0KLm1hcmtkb3duIHAgY29kZXtjb2xvcjojYzczODNhfQoubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0KLm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Ci5tYXJrZG93biBvbCwubWFya2Rvd24gdWx7bWFyZ2luOjEycHggMjRweH0KLm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfQoubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0KLm1hcmtkb3duIHRhYmxlIHRoZWFke2JhY2tncm91bmQ6I2Y2ZjZmNn0KLmNtZHttYXJnaW46MjRweCA0OHB4fQouY21kLWhlYWRlcnttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1idG57bWFyZ2luOjEwcHggMCAwIDMwcHh9Ci5jbWQtbGlzdCBsaXttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1saXN0IGxpe2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGU7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jYmFja3VwLWxpc3QgbGk+c3BhbiwjYmFja3VwLWxpc3QgbGk+YXttYXJnaW4tcmlnaHQ6MTZweH0KI2JhY2t1cC1saXN0IGxpIC5kZWx7Y29sb3I6I2U2NDM0NjtvcGFjaXR5OjB9CiNiYWNrdXAtbGlzdCBsaSAubGlua3ttYXJnaW4tbGVmdDoxMnB4fQojYmFja3VwLWxpc3QgbGk6aG92ZXIgLmRlbHtvcGFjaXR5OjF9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2V7cGFkZGluZzo4cHggMTJweDttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGQ7bGluZS1oZWlnaHQ6MjRweDtmb250LXNpemU6MTJweH0jbWVzc2FnZS1saXN0IC5tZXNzYWdlIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLmRhdGF7Y29sb3I6IzY2NjttYXJnaW4tbGVmdDoxLjJlbX0jbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5kYXRhIHB7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjI0cHh9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLnJlYWR7dG9wOjA7cmlnaHQ6MTJweDtvcGFjaXR5OjB9I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAucmVhZDpob3Zlcntjb2xvcjojZTY0MzQ2fQojbWVzc2FnZS1saXN0IC5tZXNzYWdlOmhvdmVyIC5yZWFke29wYWNpdHk6MX0KI2xvZy1saXN0IC5sb2d7Zm9udC1zaXplOjEycHh9CiNsb2ctbGlzdCAubmFtZXttYXJnaW4tcmlnaHQ6MS41ZW07Zm9udC13ZWlnaHQ6Ym9sZH0KI2xvZy1saXN0IC50aW1lLCNsb2ctbGlzdCAubmFtZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojbG9nLWxpc3QgLnRleHR7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsO2NvbG9yOiM2NjY7cGFkZGluZzo4cHggMTJweDtiYWNrZ3JvdW5kOiNmM2YzZjN9CiNsb2ctbGlzdCAucmVtb3Zle3RvcDowO3JpZ2h0OjEycHg7Y29sb3I6I2U2NDM0Nn0KUEsHCNI3xBsvGgAALxoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHN0YXRpY1xjc3NcY29kZW1pcnJvci5jc3MvKiBCQVNJQ1MgKi8KCi5Db2RlTWlycm9yIHsKICAgIC8qIFNldCBoZWlnaHQsIHdpZHRoLCBib3JkZXJzLCBhbmQgZ2xvYmFsIGZvbnQgcHJvcGVydGllcyBoZXJlICovCiAgICBmb250LWZhbWlseTogQ29uc29sYXMsICJNaWNyb3NvZnQgWWFIZWkiLCAiQ291cmllciBOZXciLCBBcmlhbDsKICAgIGhlaWdodDogNjYwcHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBib3JkZXI6MXB4IHNvbGlkICM5OTk7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiBTZXQgc2Nyb2xsaW5nIGJlaGF2aW91ciBoZXJlICovCiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLyogUEFERElORyAqLwoKLkNvZGVNaXJyb3ItbGluZXMgewogICAgcGFkZGluZzogNHB4IDA7IC8qIFZlcnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAqLwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyAvKiBUaGUgbGl0dGxlIHNxdWFyZSBiZXR3ZWVuIEggYW5kIFYgc2Nyb2xsYmFycyAqLwp9CgovKiBHVVRURVIgKi8KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVycyB7Cn0KCi5Db2RlTWlycm9yLWxpbmVudW1iZXIgewogICAgcGFkZGluZzogMCAzcHggMCA1cHg7CiAgICBtaW4td2lkdGg6IDIwcHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIGNvbG9yOiAjNTU1OwogICAgbGluZS1oZWlnaHQ6IDIwcHg7Cn0KCi8qIENVUlNPUiAqLwoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7CiAgICB6LWluZGV4OiAzOwp9CgovKiBTaG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0ICovCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHNpbHZlcjsKfQoKLkNvZGVNaXJyb3IuY20ta2V5bWFwLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHdpZHRoOiBhdXRvOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogIzdlNzsKICAgIHotaW5kZXg6IDE7Cn0KCi8qIENhbiBzdHlsZSBjdXJzb3IgZGlmZmVyZW50IGluIG92ZXJ3cml0ZSAobm9uLWluc2VydCkgbW9kZSAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IuQ29kZU1pcnJvci1vdmVyd3JpdGUgewp9CgouY20tdGFiIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLyogREVGQVVMVCBUSEVNRSAqLwoKLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7CiAgICBjb2xvcjogIzcwODsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7CiAgICBjb2xvcjogIzIxOTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHsKICAgIGNvbG9yOiAjMTY0Owp9CgouY20tcy1kZWZhdWx0IC5jbS1kZWYgewogICAgY29sb3I6ICMwMGY7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzA1YTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMyB7CiAgICBjb2xvcjogIzA4NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcHJvcGVydHkgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICNhNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZyB7CiAgICBjb2xvcjogI2ExMTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nLTIgewogICAgY29sb3I6ICNmNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW1ldGEgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1YWxpZmllciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnVpbHRpbiB7CiAgICBjb2xvcjogIzMwYTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnJhY2tldCB7CiAgICBjb2xvcjogIzk5NzsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdGFnIHsKICAgIGNvbG9yOiAjMTcwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICMwMGM7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhlYWRlciB7CiAgICBjb2xvcjogYmx1ZTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUgewogICAgY29sb3I6ICMwOTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhyIHsKICAgIGNvbG9yOiAjOTk5Owp9CgouY20tcy1kZWZhdWx0IC5jbS1saW5rIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tbmVnYXRpdmUgewogICAgY29sb3I6ICNkNDQ7Cn0KCi5jbS1wb3NpdGl2ZSB7CiAgICBjb2xvcjogIzI5MjsKfQoKLmNtLWhlYWRlciwgLmNtLXN0cm9uZyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLWVtIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmNtLWxpbmsgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWVycm9yIHsKICAgIGNvbG9yOiAjZjAwOwp9CgouY20taW52YWxpZGNoYXIgewogICAgY29sb3I6ICNmMDA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICMwZjA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICNmMjI7Cn0KCi5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjZThmMmZmOwp9CgovKiBTVE9QICovCgovKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgY29udGFpbnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZgogICB0aGUgZWRpdG9yLiBZb3UgcHJvYmFibHkgc2hvdWxkbid0IHRvdWNoIHRoZW0uICovCgouQ29kZU1pcnJvciB7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIGNvbG9yOiBibGFjazsKfQoKLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIC8qIDMwcHggaXMgdGhlIG1hZ2ljIG1hcmdpbiB1c2VkIHRvIGhpZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJhcnMgKi8KICAgIC8qIFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAgICBtYXJnaW4tYm90dG9tOiAtMzBweDsKICAgIG1hcmdpbi1yaWdodDogLTMwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdXRsaW5lOiBub25lOyAvKiBQcmV2ZW50IGRyYWdnaW5nIGZyb20gaGlnaGxpZ2h0aW5nIHRoZSBlbGVtZW50ICovCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KCi5Db2RlTWlycm9yLXNpemVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLyogVGhlIGZha2UsIHZpc2libGUgc2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSByZWRyYXcgZHVyaW5nIHNjcm9sbGluZwogICBiZWZvcmUgYWN0dWFsbCBzY3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNoYWtpbmcgYW5kCiAgIGZsaWNrZXJpbmcgYXJ0aWZhY3RzLiAqLwouQ29kZU1pcnJvci12c2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHotaW5kZXg6IDY7CiAgICBkaXNwbGF5OiBub25lOwp9CgouQ29kZU1pcnJvci12c2Nyb2xsYmFyIHsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcmZsb3cteTogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1oc2Nyb2xsYmFyIHsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBvdmVyZmxvdy14OiBzY3JvbGw7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIgewogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIgewogICAgbGVmdDogMDsKICAgIGJvdHRvbTogMDsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVycyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgdG9wOiAwOwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICB6LWluZGV4OiAzOwp9CgouQ29kZU1pcnJvci1ndXR0ZXIgewogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGhlaWdodDogMTAwJTsKICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgbWFyZ2luLWJvdHRvbTogLTMycHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAvKiBIYWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqLwogICAgKnpvb206IDE7CiAgICAqZGlzcGxheTogaW5saW5lOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZWx0IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIHotaW5kZXg6IDQ7Cn0KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIGN1cnNvcjogdGV4dDsKfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIC8qIFJlc2V0IHNvbWUgc3R5bGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgbWlnaHQgaGF2ZSBzZXQgKi8KICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItd2lkdGg6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgbWFyZ2luOiAwOwogICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIHotaW5kZXg6IDI7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKfQoKLkNvZGVNaXJyb3Itd3JhcCBwcmUgewogICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC1icmVhazogbm9ybWFsOwp9CgouQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICB3aWR0aDogLXdlYmtpdC1maXQtY29udGVudDsKICAgIHdpZHRoOiAtbW96LWZpdC1jb250ZW50OwogICAgd2lkdGg6IGZpdC1jb250ZW50Owp9CgouQ29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLWNvZGUgcHJlIHsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiBhdXRvOwp9CgouQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB6LWluZGV4OiAwOwp9CgouQ29kZU1pcnJvci1saW5ld2lkZ2V0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLkNvZGVNaXJyb3Itd2lkZ2V0IHsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwgewogICAgb3ZlcmZsb3cteDogaGlkZGVuOwp9CgouQ29kZU1pcnJvci1tZWFzdXJlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUgewogICAgcG9zaXRpb246IHN0YXRpYzsKfQoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiAwOwp9CgouQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgouQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDlkOWQ5Owp9CgouQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICNkN2Q0ZjA7Cn0KCi5jbS1zZWFyY2hpbmcgewogICAgYmFja2dyb3VuZDogI2ZmYTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDAsIC40KTsKfQoKLyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVybmluZyBmdW5ueSBvZmZzZXRUb3BzIG9uIHRoZSBzcGFucyAqLwouQ29kZU1pcnJvciBzcGFuIHsKICAgICp2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207Cn0KCkBtZWRpYSBwcmludCB7CiAgICAvKiBIaWRlIHRoZSBjdXJzb3Igd2hlbiBwcmludGluZyAqLwogICAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9Cn0KCi5jbS1zLWJhc2UxNi1kYXJrLkNvZGVNaXJyb3IgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGNvbG9yOiAjZTBlMGUwOwp9CgouY20tcy1iYXNlMTYtZGFyayBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjMjAyMDIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGJvcmRlci1yaWdodDogMHB4Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1jdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYjBiMGIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tY29tbWVudCB7CiAgICBjb2xvcjogIzhmNTUzNjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdG9tIHsKICAgIGNvbG9yOiAjYWE3NTlmOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLW51bWJlciB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1wcm9wZXJ0eSwgLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20ta2V5d29yZCB7CiAgICBjb2xvcjogI2FjNDE0MjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1zdHJpbmcgewogICAgY29sb3I6ICNmNGJmNzU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzZhOWZiNTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1kZWYgewogICAgY29sb3I6ICNkMjg0NDU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYnJhY2tldCB7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS10YWcgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tbGluayB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1lcnJvciB7CiAgICBiYWNrZ3JvdW5kOiAjYWM0MTQyOwogICAgY29sb3I6ICNiMGIwYjA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjMkYyRjJGICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9ClBLBwgjAzWCTiAAAE4gAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAABzdGF0aWNcY3NzXGNvbW1vbi5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfWhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9dGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9ZmllbGRzZXQsaW1ne2JvcmRlcjowfWFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9b2wsdWx7bGlzdC1zdHlsZTpub25lfWNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH1xOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9YWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9c3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfXN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWxlZ2VuZHtjb2xvcjojMDAwfWh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifWF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9cHttYXJnaW4tYm90dG9tOjE4cHh9aDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9aDF7Zm9udC1zaXplOjI4cHh9aDJ7Zm9udC1zaXplOjI0cHh9aDN7Zm9udC1zaXplOjIxcHh9aDR7Zm9udC1zaXplOjE5cHh9aDV7Zm9udC1zaXplOjE2cHh9aDZ7Zm9udC1zaXplOjE0cHh9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmxlZnR7ZmxvYXQ6bGVmdH0ucmlnaHR7ZmxvYXQ6cmlnaHR9LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfS52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uYmxvY2t7ZGlzcGxheTpibG9ja30uZmFkZS1vdXR7b3BhY2l0eTowfS5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5jb250YWluZXJ7d2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7d2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99LmdyaWQtMS0ye3dpZHRoOjUwJX0uZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9LmdyaWQtMS00e3dpZHRoOjI1JX0uZ3JpZC0xLTV7d2lkdGg6MjAlfS5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0uZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9LmdyaWQtMy00e3dpZHRoOjc1JX0uZ3JpZC0zLTV7d2lkdGg6NjAlfS5ncmlkLTQtNXt3aWR0aDo4MCV9LmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfWlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9LmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0uZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9LmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfS5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9LmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9LmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0uZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9LmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn1hLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9LmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfS5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifS5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9LmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn1hLmxibHtsaW5lLWhlaWdodDoyNnB4fWEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0ubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9YS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0ubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifWEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifS5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfS5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9LnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifS5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Lm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0ubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHg7cGFkZGluZy1ib3R0b206MTJweH0ubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Lm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fS5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0ubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Lm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fS5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0ubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0ubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0ubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfS5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0ubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0ubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0ubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Lm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfS5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fS5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9UEsHCHu8/YwmFAAAJhQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xjc3NcaGlnaGxpZ2h0LmNzcy8qDQoNClN1bmJ1cnN0LWxpa2Ugc3R5bGUgKGMpIFZhc2lseSBQb2xvdm55b3YgPHZhc3RAd2hpdGVhbnRzLm5ldD4NCg0KKi8NCg0KcHJlIGNvZGUgew0KICAgIGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAwLjVlbTsNCiAgICBiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2Y4ZjhmODsNCn0NCg0KcHJlIC5jb21tZW50LA0KcHJlIC50ZW1wbGF0ZV9jb21tZW50LA0KcHJlIC5qYXZhZG9jIHsNCiAgICBjb2xvcjogI2FlYWVhZTsNCiAgICBmb250LXN0eWxlOiBpdGFsaWM7DQp9DQoNCnByZSAua2V5d29yZCwNCnByZSAucnVieSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnJlcXVlc3QsDQpwcmUgLnN0YXR1cywNCnByZSAubmdpbnggLnRpdGxlIHsNCiAgICBjb2xvcjogI0UyODk2NDsNCn0NCg0KcHJlIC5mdW5jdGlvbiAua2V5d29yZCwNCnByZSAuc3ViIC5rZXl3b3JkLA0KcHJlIC5tZXRob2QsDQpwcmUgLmxpc3QgLnRpdGxlIHsNCiAgICBjb2xvcjogIzk5Q0Y1MDsNCn0NCg0KcHJlIC5zdHJpbmcsDQpwcmUgLnRhZyAudmFsdWUsDQpwcmUgLmNkYXRhLA0KcHJlIC5maWx0ZXIgLmFyZ3VtZW50LA0KcHJlIC5hdHRyX3NlbGVjdG9yLA0KcHJlIC5hcGFjaGUgLmNicmFja2V0LA0KcHJlIC5kYXRlLA0KcHJlIC50ZXggLmNvbW1hbmQsDQpwcmUgLmNvZmZlZXNjcmlwdCAuYXR0cmlidXRlIHsNCiAgICBjb2xvcjogIzY1QjA0MjsNCn0NCg0KcHJlIC5zdWJzdCB7DQogICAgY29sb3I6ICNEQUVGQTM7DQp9DQoNCnByZSAucmVnZXhwIHsNCiAgICBjb2xvcjogI0U5QzA2MjsNCn0NCg0KcHJlIC50aXRsZSwNCnByZSAuc3ViIC5pZGVudGlmaWVyLA0KcHJlIC5waSwNCnByZSAudGFnLA0KcHJlIC50YWcgLmtleXdvcmQsDQpwcmUgLmRlY29yYXRvciwNCnByZSAuc2hlYmFuZywNCnByZSAucHJvbXB0IHsNCiAgICBjb2xvcjogIzg5QkRGRjsNCn0NCg0KcHJlIC5jbGFzcyAudGl0bGUsDQpwcmUgLmhhc2tlbGwgLnR5cGUsDQpwcmUgLnNtYWxsdGFsayAuY2xhc3MsDQpwcmUgLmphdmFkb2N0YWcsDQpwcmUgLnlhcmRvY3RhZywNCnByZSAucGhwZG9jIHsNCiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCg0KcHJlIC5zeW1ib2wsDQpwcmUgLnJ1YnkgLnN5bWJvbCAuc3RyaW5nLA0KcHJlIC5udW1iZXIgew0KICAgIGNvbG9yOiAjMzM4N0NDOw0KfQ0KDQpwcmUgLnBhcmFtcywNCnByZSAudmFyaWFibGUsDQpwcmUgLmNsb2p1cmUgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICMzRTg3RTM7DQp9DQoNCnByZSAuY3NzIC50YWcsDQpwcmUgLnJ1bGVzIC5wcm9wZXJ0eSwNCnByZSAucHNldWRvLA0KcHJlIC50ZXggLnNwZWNpYWwgew0KICAgIGNvbG9yOiAjQ0RBODY5Ow0KfQ0KDQpwcmUgLmNzcyAuY2xhc3Mgew0KICAgIGNvbG9yOiAjOUI3MDNGOw0KfQ0KDQpwcmUgLnJ1bGVzIC5rZXl3b3JkIHsNCiAgICBjb2xvcjogI0M1QUY3NTsNCn0NCg0KcHJlIC5ydWxlcyAudmFsdWUgew0KICAgIGNvbG9yOiAjQ0Y2QTRDOw0KfQ0KDQpwcmUgLmNzcyAuaWQgew0KICAgIGNvbG9yOiAjOEI5OEFCOw0KfQ0KDQpwcmUgLmFubm90YXRpb24sDQpwcmUgLmFwYWNoZSAuc3FicmFja2V0LA0KcHJlIC5uZ2lueCAuYnVpbHRfaW4gew0KICAgIGNvbG9yOiAjOUI4NTlEOw0KfQ0KDQpwcmUgLnByZXByb2Nlc3NvciwNCnByZSAucHJhZ21hIHsNCiAgICBjb2xvcjogIzg5OTZBODsNCn0NCg0KcHJlIC5oZXhjb2xvciwNCnByZSAuY3NzIC52YWx1ZSAubnVtYmVyIHsNCiAgICBjb2xvcjogI0REN0IzQjsNCn0NCg0KcHJlIC5jc3MgLmZ1bmN0aW9uIHsNCiAgICBjb2xvcjogI0RBRDA4NTsNCn0NCg0KcHJlIC5kaWZmIC5oZWFkZXIsDQpwcmUgLmNodW5rLA0KcHJlIC50ZXggLmZvcm11bGEgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwRTIyMzE7DQogICAgY29sb3I6ICNGOEY4Rjg7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmRpZmYgLmNoYW5nZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzRBNDEwRDsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5hZGRpdGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI1M0IyMjsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5kZWxldGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzQyMEUwOTsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5jb2ZmZWVzY3JpcHQgLmphdmFzY3JpcHQsDQpwcmUgLmphdmFzY3JpcHQgLnhtbCwNCnByZSAudGV4IC5mb3JtdWxhLA0KcHJlIC54bWwgLmphdmFzY3JpcHQsDQpwcmUgLnhtbCAudmJzY3JpcHQsDQpwcmUgLnhtbCAuY3NzLA0KcHJlIC54bWwgLmNkYXRhIHsNCiAgICBvcGFjaXR5OiAwLjU7DQp9DQoNCnByZSAuZ28gLnR5cGVuYW1lew0KICAgIGNvbG9yOiAjZmZiYzU0Ow0KfVBLBwjDaOPeXQkAAF0JAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcY3NzXGxpbmcuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOiNmM2YzZjN9CiNoZWFkZXJ7YmFja2dyb3VuZDojMDA5M2M0O21pbi13aWR0aDoxMjBweDtwYWRkaW5nOjQwcHggMCA0OHB4IDA7Y29sb3I6I2ZiZmJmYn0jaGVhZGVyIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7Ym9yZGVyLXJhZGl1czo1MHB4Oy1tb3otYm9yZGVyLXJhZGl1czo1MHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo1MHB4fQojaGVhZGVyLWh7bGluZS1oZWlnaHQ6OTRweDtjb2xvcjojZmJmYmZiO3BhZGRpbmc6MDttYXJnaW4tbGVmdDoyNHB4fSNoZWFkZXItaCBhe2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItc3Vie2NvbG9yOiNmM2YzZjM7bWFyZ2luLWxlZnQ6MS4yZW07Zm9udC1zaXplOjE2cHh9CiNuYXZ7bGluZS1oZWlnaHQ6OTBweH0jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7bWFyZ2luLWxlZnQ6NDRweH0jbmF2IGxpIGF7Zm9udC1zaXplOjE4cHg7Y29sb3I6I2YzZjNmMztkaXNwbGF5OmJsb2NrfSNuYXYgbGkgYTpob3Zlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgMCAzcHggIzMzMzstbW96LXRleHQtc2hhZG93OjAgMCAzcHggIzMzMzstd2Via2l0LXRleHQtc2hhZG93OjAgMCAzcHggIzMzM30KI2Zvb3RlcntwYWRkaW5nOjMwcHggNDBweDtjb2xvcjojOTk5fQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0jYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAudmlld3N7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIC5jb21tZW50c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjQwcHg7bWFyZ2luLWxlZnQ6OHB4O2JvcmRlcjo2cHggc29saWQgI2ZmZjtib3gtc2hhZG93OjAgMCAycHggIzk5OTstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICM5OTl9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cyBhe2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHM6aG92ZXJ7Ym94LXNoYWRvdzowIDAgNHB4ICM2NjY7LW1vei1ib3gtc2hhZG93OjAgMCA0cHggIzY2Njstd2Via2l0LWJveC1zaGFkb3c6MCAwIDRweCAjNjY2fQojYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze3RvcDoxNHB4O2xlZnQ6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czozMHB4Oy1tb3otYm9yZGVyLXJhZGl1czozMHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozMHB4O3BhZGRpbmc6MDtib3JkZXI6NHB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tYWluOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7Ym9yZGVyOjExcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjYzcHg7bGVmdDotMjJweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aXRsZXtmb250LXNpemU6MjhweDtwYWRkaW5nLWJvdHRvbToyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW4gLnRpbWUtaW5mb3tjb2xvcjojOTk5O21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO3RleHQtaW5kZW50OjFlbTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjUwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1haW57bWFyZ2luLWxlZnQ6MH0jYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWluOmJlZm9yZXtkaXNwbGF5Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1ldGF7cmlnaHQ6NDRweDt0b3A6LTM2cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLnZpZXdze3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czozNnB4Oy1tb3otYm9yZGVyLXJhZGl1czozNnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozNnB4O2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1zaXplOjI0cHg7cGFkZGluZzowO2JvcmRlcjo2cHggc29saWQgI2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC50YWd7Y29sb3I6Izk5OX0KI2FydGljbGUtcGFnZXJ7bWFyZ2luLWxlZnQ6MTE2cHh9I2FydGljbGUtcGFnZXIgLml0ZW17bWFyZ2luOjA7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM5OTk7cGFkZGluZzoxMnB4IDE4cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQ6IzAwNzliY30KI2NvbW1lbnR7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2NvbW1lbnQgLm1ldGF7cmlnaHQ6LTI0cHg7dG9wOi0zMHB4fSNjb21tZW50IC5tZXRhIC5jb21tZW50c3ttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye21hcmdpbi1yaWdodDoxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDttYXJnaW4tdG9wOjZweH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIHB7bWFyZ2luLWJvdHRvbTowfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3J7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmJsb2NrfSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3I6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZGRkO3BhZGRpbmc6M3B4IDEwcHh9I2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KI2NvbW1lbnQtbGlzdCAuYy1jb250ZW50e3BhZGRpbmctdG9wOjRweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2O21hcmdpbi1sZWZ0OjEycHh9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1zaG93e21hcmdpbi1ib3R0b206MzJweH0KI2NvbW1lbnQtdGl0bGV7bWFyZ2luLWJvdHRvbToyMHB4O3BhZGRpbmctYm90dG9tOjIwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvO21hcmdpbi1ib3R0b206MzBweH0jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcntib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHg7d2lkdGg6NTBweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXtkaXNwbGF5Om5vbmV9ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH0gI25hdiwjaGVhZGVyLWh7bGluZS1oZWlnaHQ6NTBweH0gI2Zvb3RlciBzcGFue2Zsb2F0Om5vbmU7dGV4dC1hbGlnbjpjZW50ZXJ9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1oe21hcmdpbi1sZWZ0OjB9ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfSAjbmF2e2Zsb2F0OmxlZnR9I25hdiBsaXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo0NHB4fX0KUEsHCM/D6tacKgAAnCoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHN0YXRpY1xjc3Ncc3R5bGUuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2JnLnBuZyIpIHJlcGVhdH0KI2hlYWRlcntiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2hlYWRlci5naWYiKSByZXBlYXQgIzRjNzI5ODttaW4td2lkdGg6MTIwcHg7cGFkZGluZzozMHB4IDA7Y29sb3I6I2ZiZmJmYn0KI2hlYWRlci1pbWd7d2lkdGg6OTZweDtoZWlnaHQ6OTZweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe3BhZGRpbmctdG9wOjI0cHg7Zm9udC1zaXplOjMycHh9I2hlYWRlci1oIGF7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfQojbmF2e2hlaWdodDo1NHB4O2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3gtc2hhZG93OjAgMCAycHggI2JiYjstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICNiYmI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY30jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7cGFkZGluZzowIDE4cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7cGFkZGluZzowIDMycHg7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzAwNzliY30KI25hdi5maXhlZHtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO3RvcDowfQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZm9vdGVye2NvbG9yOiNjY2M7YmFja2dyb3VuZC1jb2xvcjojMWMyNDI5O3BhZGRpbmc6MjRweCAwfSNmb290ZXIgcHttYXJnaW4tYm90dG9tOjlweDtmb250LXdlaWdodDpib2xkO2xldHRlci1zcGFjaW5nOjFweH0jZm9vdGVyIHAgYXtjb2xvcjojY2NjO21hcmdpbjowIDE2cHh9I2Zvb3RlciBwIGE6aG92ZXJ7Y29sb3I6I2ZiZmJmYn0KI2Zvb3RlciBwIGEgLmZhe21hcmdpbi1yaWdodDo4cHh9CiNnby10b3B7Ym90dG9tOjUwcHg7cmlnaHQ6NDBweDtwb3NpdGlvbjpmaXhlZDtjb2xvcjojZmZmO3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo4cHg7b3BhY2l0eTouNH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhe3dpZHRoOjEwOHB4O2xpbmUtaGVpZ2h0OjI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudmlld3MsI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYXtjb2xvcjojZmZmfSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDoxNDBweH0KI2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxle3BhZGRpbmc6OHB4IDE2cHg7YmFja2dyb3VuZC1jb2xvcjojNGM3Mjk4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjJweH0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYXtjb2xvcjojZWVlfSNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtwYWRkaW5nOjE4cHggMjRweCAyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm97bWFyZ2luLWJvdHRvbTowO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcDpub25lO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjJweDtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5zaGFyZSAuZmF7bWFyZ2luLXJpZ2h0OjB9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz4qe3BhZGRpbmc6NnB4IDE4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz5zcGFue2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZX0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFke2NvbG9yOiM5OTl9I2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLnRpbWUsI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC52aWV3cyBzcGFue2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciBhcnRpY2xle21hcmdpbi1ib3R0b206NDhweH0KI2NvbW1lbnR7bWFyZ2luLXRvcDotMjRweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmZmZ9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvfSNjb21tZW50LWZvcm0gLmMtaW5mb3t3aWR0aDoyNiV9I2NvbW1lbnQtZm9ybSAuYy1pbmZvIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjB9CiNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDo3MCV9CiNjb21tZW50LWZvcm0gLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjE4cHg7cGFkZGluZy1ib3R0b206MThweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1saXN0IC5jLXNlY3Rpb257bWF4LXdpZHRoOjgzMHB4fQojY29tbWVudC1saXN0IC5jLWNoZWNre2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNlNjQzNDZ9I2NvbW1lbnQtbGlzdCAuYy1jaGVjayAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MH0gI2FydGljbGUtY29udGFpbmVyIC5tZXRhLmxlZnR7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MDt3aWR0aDphdXRvfSAjbmF2IGxpe3BhZGRpbmc6MCAxMHB4fSAjaGVhZGVyLWltZ3tmbG9hdDpsZWZ0O3dpZHRoOjY0cHg7aGVpZ2h0OjY0cHh9ICNoZWFkZXItaHtwYWRkaW5nOjE3cHggMDtmb250LXNpemU6MjRweH0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLnRhZywjYXJ0aWNsZS1jb250YWluZXIgLnRpbWV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3Jte3dpZHRoOjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1pbWd7ZGlzcGxheTpub25lfSAjaGVhZGVyLXN1YntkaXNwbGF5Om5vbmV9ICNjb21tZW50LWxpc3QgLmMtYXZhdGFye2Rpc3BsYXk6bm9uZX19ClBLBwiqeuwujSgAAI0oAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcZmF2aWNvbi5pY28AAAEAAQAgIAAAAQAgAKgQAAAWAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAEAAAEgsAABILAAAAAAAAAAAAALN+B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs34H27N+B9uzfgfbs34H27N+B9uzfgfbs30H27N+B9uzfgfbs30H27N+B9uzfgfbs34H27N+B9uyfAfWr3oHx61+GK21k0qQuoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoMN/7qGF/+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7qBCP+5gQj/uYII/7qBCP+6ggj/uoII/7mBCP+5gQj/uYII/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoII/7mBCP+5gQj/uoEI/7qBCP+6ggj/uoII/7qBCP+6ggj/uoEI/7qCCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6gQj/uYEI/7mBCP+5ggf/uYIH/7mCB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+8hAX/vIQF/7uDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yDBf+8hAX/vIQF/7yDBf+8hAb/vIQG/8CHA//AhgP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhwT/wIcE/8CGA//AhgL/xYkC/8WJAf/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYoC/8WJAf/FigP/x48O/8yaJ//JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/Jkxf/1q9T/+HAdf/p0p//8+fN/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y40A/8ugPf/y693+/v36/v/////////+yo4A/sqNAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgH/y44A/8uOAP/LjQD/yo4A/8uOAP/LjgD/y44B/8uOAf/LjgD/y44A/8uOAP/LjgD/y44B/8qNAP/Ljwb/2Llz//r59f7+///+/v7+//7+/v7KjgD+yo0A/8uOAP/LjgD/yo4A/8qOAP/KjgD/yo4A/8uOAP/LjgD/yo4A/8uOAP/LjgD/yo0A/8uNAP/LjgH/yY0B/8eNCP/KjgP/yo0A/8uNAP/KjQD/yo0A/8qNAP/LjwL/0Job/9++cf/17+D//v7+/v////7+/v7//v7+/suOAfrLjgD/yo0A/8uOAP/LjgH/yo4A/8qOAP/KjgD/y44A/8qOAP/KjgD/y44A/8uOAf/KjgD/yo0A/8mMAP/HmjT/wat5/6iLSP/Npk7/xZgw/8+fMf/Wpjn/2rBP/+LCd//w37n/+/jy//7+///+/v7////////////+/v7/vJIyvruKGf/Mkgz/yo4A/8qNAP/KjQD/yo0A/8qOAP/KjgD/yo4A/8qNAP/KjQD/yo0A/8uOAf/QmRj/yaNN/9DGrf/l5eb/pqWj/+nm3//EvrH/4drJ/vnz4/779uz//fz5//////7////+/v7+//7+/v////////////7+/v+Vk42UmY95/+bOmf/gvWr/2a1I/9SjMv/Rmx//z5YT/8+VEf/PlRH/z5cX/9OfKP/Zq0P/4b9x/+3bs//QzMT/w8PD/urq6v62trb+6Ojo/rS0tf7a29v+/f39/v7///7+/v7//////v////7+/v7//v7+//////7////+/////peWlpWSkpP/9vb1//379//59Of/9u3X//Lkxf/w37j/7tyy/+/cs//x4bv/9enO//nz5P/39fL/ycnK/6+vr/+lpKT/vb29/5SUlP+5ubn/p6en/7Gxsf/R0dH//Pz8///////+/v7//v7+//7+/v/+/v7////////////+/v7/qampmJGRkf/y8vL////+//7+/v/////////////////+/v7//v7+//7+///+/////////+Hh4P+6ubn/7+/v/+zs7P/X19f/xsbG/97e3v/19fX/6urr/7i4uP/x8fH///////7+/v7//////v7+//7+/v////////////7+/v+bm5tng4OD8O3t7f///////////v///v7+/v7//v7+/v/+/v7+/v7++fn5/vb29v76+vr+5+fo/7e3t//t7e3/+Pj4/t3d3f7Y2Nj+8vLy/v7+/v7Y2Nj+vr6+/vj4+P7//////////v////7+/v7//v7+//////7////+/////jU1NSNxcXHY5ubm//////7////+//////7+/v//////7+/v/tDQ0P++vr7+urq6/r6+vv/R0dH+z8/P/qysrP9nZ2f+Kysr/yMjI/9bW1v/q6ur/729vf7k5OT+5eXl/9ra2v/f39/+8PDw/v39/f/////+/v7+/v/////////+jY2NJ3V1ddrb29v//////v////7//////v7+/+Hh4f+1tbX+ysrK/+Pj4/7n5+f+4+Pj/8nJyf6+vr7+t7e3/ywsLP4AAAD/AAAA/wYGBv+Ghob/19fX/r6+vv68vLz/wcHB/76+vv65ubn+x8fH//Hx8f7////+//////////7g4OAkhISE2cXFxf///////////v/////n5+f/tbW1/+Tk5P///////////v/////////+/v7+/uDg4P+2trb/rq6u/25ubv9ZWVn/g4OD/7u7u/++vr7/5OTk/vr6+v/9/f3//Pz8/vDw8P/Kysr/t7e3//Dw8P///////////4eHh4BdXV3xo6Oj///////////++/v7/8HBwf/BwcH/ra2t/8bGxv/6+vr///////7+/v/+/v7+/////9bW1v/ExMT/9vb2//b29v/d3d3/vr6+/+Tk5P/x8fH//v7+//7+/v/+/v7+//////39/f/Nzc3/w8PD//v7+///////hoaG+JaWlv+Li4v/9/f3///////u7u7/q6ur/1JSUv8TExP/Z2dn/9HR0f/9/f3//v7+////////////8vLy/7i4uP/v7+//+vr6/8DAwP+cnJz/VFRU/25ubv/c3Nz//v7+//////7+/v7///////T09P+3t7f/6+vr///////v7+//7Ozs/3x8fP/Y2Nj+/////ufn5/+Tk5P/FhYW/wUFBf83Nzf/mZmZ//v7+//+/v7//////v/////6+vr/w8PD/+fn5//z8/P/rKys/zk5Of8AAAD/RUVF/piYmP/19fX//////v7+/v///////f39/8TExP/e3t7////////////R0dH/MzMz/5eXl///////5+fn/7Ozs/9oaGj/FxcX/zo6Ov/IyMj//v7+//7+/v////////////j4+P+9vb3/6+vr//Dw8P+zs7P/TExM/wAAAP8ODg7+goKC//r6+v/////+/v7+///////+/v7/x8fH/9zc3P///////////7i4uP8ZGRn/Pz8//t/f3/729vb+vb29/9vb2/7ExMT+29vb//39/f7+/v7+/////v////7////+5eXl/rm5uf729vb/8/Pz/76+vv/BwcH+cnJy/n5+fv7g4OD///////7+/v7+/v7+//////j4+P68vLz+5ubm//////7////+8fHx/7Kysv+FhYX+i4uL/vT09P/U1NT/vb29//n5+f7//////v7+/v////7//////////vb29v69vb3/1tbW///////9/f3/x8fH/87Ozv/5+fn+/Pz8/v///////////////v////7/////39/f/rm5uf74+Pj/7u7u/snJyf/4+Pj+//////Ly8v6IiIj+m5ub//T09P/IyMj/vb29/ufn5//6+vr+/Pz8/vr6+v/n5+f+vb29/snJyf/6+vr////////////w8PD/t7e3/9jY2P79/f3+///////////////+/////unp6f+3t7f+4uLi//Hx8f+Ojo7+c3Nz5ZCQkP6jo6P/oKCg/n5+fvpOTk7hnJyc++Hh4f/W1tb+vb29/8DAwP/BwcH/vr6+/7m5uf7W1tb++vr6///////////////////////p6en/ubm5/sPDw/7f39//6Ojo/+Tk5P7MzMz/tra2/93d3f7q6ur/g4OD/3BwcP+rq6s/cHBwZkVFRWlKSkpnhYWFX4yMjDhtbW2bd3d3662trf/Y2Nj/5OTk/uXl5f/p6en/9vb2/v////////////////7+/v/////////////////19fX/1tbW/8LCwv+9vb3/wcHB/9HR0f/k5OT/xsbG/319ffNjY2POa2tr0hEREQD///8A////ALy8vAAAAAAAAAAAAM7Ozgt2dnZFbW1to3t7e+uZmZn/t7e3/9fX1//o6Oj/8PDw//b29v/6+vr//f39////////////////////////////9/f3/+rq6v/d3d3+t7e3/46Ojv58fHzgh4eHcry8vBdwcHAdw8PDAICAgAAgICAAPz8/AJiYmADGxsYAl5eXAf///wDKysoNqampU319fY5wcHDFe3t793d3d/WBgYH5kZGR/KOjo/uzs7P7v7+/+8XFxfvGxsb7wMDA+7Ozs/ucnJz8gYGB+nh4ePpxcXHMiYmJi76+vjz///8FqqqqAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAAAAAAAFBLBwipcxPwvhAAAL4QAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcaW1nL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABEAAABzdGF0aWNcaW1nXGJnLnBuZ4lQTkcNChoKAAAADUlIRFIAAACWAAAAlggCAAAAs2PmtQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANmaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDk3MEYzQ0VCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDk3MEYzQ0RCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQUFCQkVBMThGQjVFMjExQkJFM0FC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bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFDMTUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCMDE1QUFDMjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkIwMTVBQUJGNTI0NDExRTI4RjEzQTA0OUM5QUZBOTdDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkIwMTVBQUMwNTI0NDExRTI4RjEzQTA0OUM5QUZBOTdDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAAGQAZAAABP8wmZQQQWZKvDnFSIWEIykZJaodmHGdBHVM7HdQH3qHKJWNhAsoc7LwRIGWj4jyYAiZYPR3cWV+zSchMIlyeikRSVeRyGSz0O2WKFAKiANrrYmzOCMzu57tTUAlLSMGAVsoUFwTXC1YTVY7HSJLOCJsMwdwa3EVcjYhnAWdOIF1FWAmOSAbfwlQgH95VqaErlKEiyp/EzFmQEonXb4iUFFQUkYugyqxiLvJzmKsSwZ3Gx8JciOdbG5tCG5JXj8tVYfY1+hlbGaUn6Ycd5s1a2U41d31lHfb2m9xcN02tRFlKQ6AAqEQWpIBANuchXLc/DkAgAQdefo6jcDnLo8IhaH/KCJseFCghnOSYqEc1ccEoBSfLCRr5cIMFDGoWKDA10PSCWwkUFHL5MMeG4FzQtnz6Q5SuzOsCqjA0dOppp2xPjX5WaYftj/hCF0ZJKVWUCKqPI4J8+lGVItAHeJDKRPOoSZCLPDKJYkGtaIeTan7R5DSUrfr1mh80/DGwYZtCgCQI+dgqBCTCSre52Zhm8jf0h2llucfurRgKsQYxE41vKk+2nZl+S2Fhp5E6jX9FzqfqDhq/iHEdjkjJhadPyO8fEPyuZBqMDl0CAmyunWC56g1Q7T173kTQhK3pNjhN27EhzfPnMAympDNh2OejqmzRqXd8PMOmLgvj+NrFGeY/0OlsONWHnew0tMHgYHAU0xloAVLX2385Vs81tBwzYGDBIUMFaUZw8MzCBQyzlhkUYOXI8wAJpQcBOxhGGs98HLaOMSokMgVQqg2kxdAbAVTinDEBpgpO2BnQysy1jNVjUudsx0lJx1xzlYJ4nBTOx3tRNUoVMWoWzQVNnkGJ2pouFBHhrEC1w4IshakWi+5EAOPJZSzhWCNWEBBFUYIYqedJZrgSI6JGJMoF0mQICIMw7wwoJS9edALkhJ4xskl6YwC3FfnLLRVHb7QSGVuU2FgYh99QBHPSRZigFg+mXLKCZdd7BIqlSrVk9dWlKpRlI+B5eNgDl+KoItgeZaZDf95lWijJhpsBgIobLEJa4SPp4zzBGlAfrjFE+SSRUGjqpz600lL9eTOsPQkV0IOQtCCViDKxNgsELP8sVqrIdj47iRMDOgUrcbeCmdwTriyEq5KyerDaMN2WaGUlP0WrXSiaoWTm2csPIqNWNJDjwQBwbrOeZ9RVwFC1Gzjsqe16pOPNK1tEspBckUsnwwKZYzPQZ0kNBBQw+Gn0Q0vvKRsLtvyJVOHWaw2m3nqZGcNdf29zCBVcP61bLOtjDEgE118faXH84L87g/0LuGRkkcppQ5Ao1ymVMbfSCUd11/Lyi5UEFJ4xNtxOgHspD7wBHZXz9bjlkRqq1tTvUKe+A7/HpdSlbgfrgysm4WbAlT3HGdjIuyksaho8Na3wYYcdUWeEWdVoqBRwWQTI72O3onN3nSDlRTs04GnHd55tiPWsqNtjfybDL/KVEzKV6LTjIFU9LWXX3MFxTsQx8RtGFjuZxrAkyZ22yHQdNhABhIAloXUTUNBVwat3ag3N35yf3uDPsQTpd60Jla3AdM7igSf5RSmNoXh362+ZJF3BQUnRfBK8tR3lHh1cIIx0UDosGAbCVzAFVgwoQowJ5NlXCEXjcACMbK3AzEtaYKbet8omFYgLvEpFZuQ0NdWEKqI2MMNXfoEfHSHMvZlQzzuo4ztVBeZ4yzHfgIMmht41jLs/2AEIpIzVvaixMGidcI9kRnfFGnSqcClLSVw+gnVrsYlbQTiHWeyGcp2+AEoRq5N3qhiQqQIFNd1gDR40MUhVHLHFwIjSN5aCwhsaCx6RPGBLFgEI14YBAskQQg5euQrRGSlawBCbYs7kyg4aEpLBYpV5GJgQkCCRQTgDztzYccXFGjKzP2gELbgETGCMIBicEFEPALSWJLRGaJd8YqQmQz9MDEZAdAyjUX031Jk07Z5+RBSyiLHEIYJPUOkIXiG0ckMThOQdJQSQpKcRgcGtp2YcWMbf1Pamv4Uk8Jp5Y1giGPC3rW39tisbZLw4jVIdxaWDOuQOlgQ4/axCWHxzv88R6kkJZD4smrUIEpJitB30oEqquTqU1JUT9GyWB7r4DNkIIkIRRRDPxy4IST0e8wsz0E0/20mh5TRSnAeRjc7OqVSN9oaPHWiDQwt46ALXRnkMFYG/iGIBtvIJRyAAwnHmLGKoYrpGSnBRfJFZJD06ZtnLGYNJfxgHkXrBjdKgzyB+DMnUhJgCUQ2oXbowk9MoRWEltaWEDRwlpVh6Rk6M9QfthJNexXDPGf0Vz7woFiDnUdh1Zi0ZgqQZ8eZzE07U9CRSKY+BbDmGZPTHfjs0w5j6ojHJkGMfRjFU2lw0lMKN5uVVRA2VyibRDE1kf6AT64BKkgW63da+u2MmpL/IS1FwkqXTZ3MH6iYF6DadCdj9KtEJHqhJmtxk9WVTxRyHYiwAIiPeIHkDJABnz1OItOQFtce7zoqbt1RisYOlR51+GhcTAnVz1gEO1Y7mQfe6J+2rWhOxGjNYHZIV13WAJ50BEoFTYCdqMhMbBImMCo9d8B0og5NSzrJXC6cYTje8WY+cWgvFhNYj+DmsqGxIjW9t8X6iESQ1A1ZFf+mTSY+FH0VtS7jJBedxm5twp4AiluiJEAhu3ajIUuMQLQYH+WoVC5EJi0DdZjlflbDbFmx49UUzM0cRug6T1HYacDUTdpuLzLLmWZPLSPNnY2EdrtCAyH1KmFdaZBZaetQ/wuNMMPQFQK8f4mpc+yW3ikLNSvYmtGtAMqBO/WTNQaac6C7KNeK8hZ1dnTJhKqCL02XpijdEi48/cQ5dFQpEnAjQhWAhlqS4FSmvMPpG2aaMZ0OkjK8e4gN6NthSGirYjDMYCcZpbuMrQQ71aAZXYoVoXlN8nrb1c1qOKzbVpptXRl8MSw8dFIqpIoR3J7bm3doIcoopd7TmW1XWie3cnB73+vugr9zRI4TUW2ZzXjCMes0iAAwC0y20jBw/mmG1KBEwJUCDiwwFA2J4kuo5dW1boLyLxi3QrKpih0y8ovRPlKYvhaEdx7DeFlkEdEwYkLKYLTsNeyuMzr6a65Sev/asvy8h6iDDsxdlNU5tZQ8hDjOQ4RzfcIiCAkw95KhoFwIbzp1aKEUxxmVQkpjdsXDqWmzOBhvJadcTXaFM2Q3f5UgqH3H5Ol5FfCAIVFqAZusPCyTgazUPPOMKBASC+IqUTPlm3J7SuMjqviusGg3LlK1i+gD2jOJQ3QfS+eK9eGZniVDtJpq0abqSE2BFkLp/iDyyWthHIK6HbjCW9h2X/FiquOAlrYKflcbSfedgkFZZucVftExjs3wfZw07u3CHLUtU+scux30CW34soI384RCYzgiuLzU5cixPqKTtiLCNtLESoIPSD9gtgfJzQYTs6eQjLDM3vIdTiBtiV//eZyS3JcRGsTTK/CjA/FnCUEjaPZWf2jwF9w0WzQQWX7ACpJyMvIlgNWCY37VV44iIdoXbWMgXq7RT5vjfn/FRiPyahY3eI1wTIgQTC7waAsGSfmyTLnBIOeGMxVFECTAUVvVHLW2TorRD0rXYDZ2gysxOI03bAT0RA8hHskWIDhwUfIzXUQ0D/kWTqrRF4vzC4XThakBFwziB0bCRwm0CgdyAOXFFTJQIETIX8UjWMPlOf00DkUwOo6wOUz3SuX3DjOQNp1EI1ZChLDiVu+Xh10RXDDxeL4FgTMyZRNman/ICfcyiHuIB0MANSFkcImEielSDzeFbfdnbZMRRQFR/xw/6A2DE4H40F4iNjdSdSGCtiEyE4r9wT91ww4RyHa8NxHhgUXSQTTtITNXkz1T8mm8Aj29UAzPYAveJRYzgQgqdH6dpiaadYoklSHexgjk50i2sUmJ5ki3kX1MtQFpIDY19w014R9sh0iwEAynRBsVUzmdIoY4yA4j9AVmASlTg0LUKAi4sIdW4AVlcQxa8AK58kKkMofXZYYzwlF68BFY2EfhIVqk5T1epTsodUT8c1qutYAqZW03lU7Hlzfl1gJuAUO7YBpxkZEt0xFFkhgMKEj2c1aD9EymxVzNJVp8dgACECAsqV7rx0CZ8T2qhZHpYVAEAXq89nzpIR4AYoVGdsNHyccC1hGRhjWR/qAhRmJXcSSIT2Z99CRZC+VOPtR2q/aHpWInqmEMIrIlUjcRaBkGpzAg5/MUuWNe/pNLlnQ0jhFnH5E1qEcqbcUfJPVRd7khCiQ6GKZ4EKJIUYUjKSAm7vcyTpCOhtkgytYzS5l5YAVGe1ke17UQV8kH6OgTcBABADtQSwcIQETjPPQQAAD0EAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAc3RhdGljXGltZ1xzaXRlLnBuZ4lQTkcNChoKAAAADUlIRFIAAACAAAAAgAgGAAAAwz5hywAAF4JJREFUeJztnWlwHGeZx3894xlJI+uWLTvBh5zYY2OFOFAkKSdO7GSLaxkcqAIWliWEoqjaKiBQ1O5SW0UgfFiq9stuNrscX0gIC0sSCCGT4CS7ENsJTmwIdhzLssaXLie2ddk6ZiSNpns/9Ns9b/f0HJK6Z1qp+Ve96pl+e3pa8/yf433eC6qooooqqqiiiiqqqKKKKqqooooqqqiiinc+lEo/gNeIxWI7gN3AHqAZuKPA5QNAH3AMeAnYH4/Hr3j8iBXFO5IAsVhsN3AfcA/QuMTbHQceAR59J5LhHUWAWCz2BeBBYL1HX/EY8J14PN7n0f3LjncEAcogeDveMURY1gQQ/v0hCvt1C7o2jHHDhnE6V09QX5vRjzUZ0ABN4UR/C6DwZn8L5y838OZQM8nZFU63mkAnwb+78s9UCMuWALFY7OvAv5VybdeGK9y9421ujY5QX5sGVNAygAaaoh80xXyNqr/WNAVUhcOnV3H4zCpeO9tGci6HDAeBvcs1Plh2BIjFYs3oWv/5YtfetWOYz+4eYnVzWjqrokt8XpAgrR+FsDVhCewkQFWYngnxzF/eRfzYtXYiTAB3xuPxYy7+q2XBsiKAEP4B4D2FruvaOMmXPjzEprVzQBDrv6kBGSH0edDSQBrUOdA0nRtC+CYJ5PeqwlQqzC+PbODZN66Rv3YCuDcejz/t7n/tLYKVfoBSUarwP7P7Il//xNu0NAYhUAtKDShhcQyJsgKUYLYQBEUBRQVUFIMvinxQzBIKqrx3/Thdayc48VazYQ1qgL+JRqP9iURi2ViCZWEBShF+pDbDv3zxHJvWZoTAhaAJiKIgHLxeDO3X5kSZFVZgBtR0VvPVgPQ6W3TXEGA6FeL7+7bR/baZblhW7mBZWIBoNPoCcHO++tXNc3z38/1sWgsE6nTNN7Q/UCOO4awFQLYABjmUrDooeoCoSOesmpINGMMrVPZEh7k8UUvfaD3oluCz0Wj0l4lEwveBoe8JEIvFHgI+la8+Upvhh187Q0drUBe+UqsXkwCGGwhJlsEw/cI6KJLw9fYgMJ/zXYrpBqS/moKiwc0bxnQSjJkkuEuQYMat38IL+JoAIqX7w3z1htnvaFGEoGXtrxXWoEaKA8LC/wvXoAjhm+5BE5IVboKMJHTZBji/v2XDOJcn6+gbiwB0ANckEglfB4W+JYDw+y8ATfmu+YdP9nHDpnQewUtHJSyIsEKyAIow/whZGpqvSsd5s2WQvVCKEOXcgXjdtWaSo0PNXEmFAG6MRqNvJBKJU27/Pm4hUOkHKICCqd3YrRe5dduUFNkLDbeQoA4CEQjUSyWSrTNdhWEd5FaCUci2CtAkvddQFE1qHOiv62vm+codZ+VH/akgsy/hSwsQi8U2Av+Tr3510wz/+KlzhMPhrBDtRZFcglIrLEBI8v1Imq9mi6abfj0GEIki82Ihfk3JKYpkCZpr50FT6L7YCHo84FtX4FcL8GChyvvvOU19rYLefg9K2ipbA6MFEBFaL4oSscUFdq0XeQFWYE0iadkHcNB8OSRQgE/vuMCqlXPGqc+LfgvfwXcEENqfN83btWGcGzZOoNtmKZInKBWDDKIVYLqBiLVVYArZKEarwBC8FCeUAhsRPn3jBbn2odJvVD74jgDANwpVfubOsyJ6F+13xSgBWzEsQ0j4/JXC78uZQPtnDIcv3Q9yg/4caNbX4to914/IVuAOQW5fwY8E+EK+itVNKW7YOG47W6iJJjfhgrb3xT5bDFrxS4A9143Ibwu6tkrAVwSIxWIFh3B97JZ+8UpzKKq1aJro8EmLNO+0ftSM3j+HzzjeV/pKC+zEkV5L1+653kKAe/zWIvAVAYCPF6q8dctlIVhNj9bNkrG9nkfv5jVy/CmdAGpKkGBO1M87fFa+r/FdC/gPbNeuXjkru4FG9HGKvoHfCLA7X8XqphlWN6UwMnTZo1S0+WwnjzorCT8pFUEC1bAG4jP2e1m+Bxw13kwAgd1gyNjeMSG/LUjycsM3BBABUt7ET9f6MenHzkhFErqh8Zpd+NOgTomjRAKzzFnJYLk/NiErjsLW3yo5rwFWZy0AwMf85AZ8QwAKaD9A1/px6Yc1BC6XuWxRhfA1mQDTWQJoKUGOWevn7PdkHlAkWSu2eN/B9ztYg641FgtQ9H8tJxxHO1YInYUqOxpnhPaJ4E6xCV8NQCCg99cHRICnZvQmnyYnPKWRQKYrmJXIYAhfGipmyfmT5738tEVbEnsAX2QG/USA3YUqO1dPYgzeVDSEkOZ04WoigWMIX1VByWTb/GbzTkjM7jJM4dtdghj4kU/wgGMzsnjQ6JusoJ8IUBD14Yz042u6dgcEAdQABISAVQ0UFZR5KbVrGxEkjweUBS+7BNWu/WLAKKC7giwZNMkKaMWFDwsYxu41/ESAjQVrTfMvrAAIQSm6fFV0wQeMbtyQjQAG7E3FtCT4GVBnxOt82m/39XncwzKBn4LAgrN6NPnHVaXh2tqsEFpKCFA09zR78GcrmtQ01MTn1RlxP/n+kvaLZ9AcySC9LwF+6RzykwUoDCEERSWr8eZx1ub3jbF/tjF/Zgwg2vg5rYh0VuiqjWwm+bAIXZ5QYm/+FYJfBo0uKwKYQhdapon3ioreKlAywvenRfBXjAByDkHNClSVNdxuCfJoPwuzAH7BsiHA+UsNdHZMoqlCxxRMC6ApoCiiBaDNgjJHdtyfw8QQTWT4NDHkCwXUQI6bsU8K0ex1svabRFhe8FMMcLBQ5eWrtVktVK1TtgxhmOP4VUCdFwkhh0SQOivq0QVvF64q3S9P4Ge1BIW1/7w+SNSX8BMBCuLc8Erhf500MpAjuCwZsnVI54xrLEQyJoHY3YCK5ZzZkSiTQc2v/Zenauynjnv2Qy0QfiJAwaDoxFCz+KGxBmg5ws0eTSGrAanInwnYjlKdSQyr8K3EkFoHBdCXawH6lvA7uQo/xQDnC1V2v9XEdCpEfe08BDQR+AGKgiaNy8vO6zOCPnJCAPOkEUzahnbnaLZR59A8NF/nwfRckO5LDfbTvmgBwDKyAKBbAWfNl3y3Rcvt5j+r+bJ1cL6P3RIoOZbAdEEFcGSgxen00UX+Rq7DNwSIx+P7i13zh1MdViFpTubcKkRNDaBlpCKE70QK8zOakvs9TsIv4PcN5CFA0f+1XPANAQSeKVR5pK+VS1JrQA7anGOBYsXq+zXbfXNmBS9Q+JenajgymNP1f9xPq4n4jQAvFb2gt8MWyMnaG8gJ/PK7CSc3YCOEKhHCbh1K+WfOtDudfmSBv4mn8BsBHi12QfzNtXpOICeid9Z+awvAiRT26x3iB7slKAHTc0Ge7elwqvLFOAADviKAMI0F3UByLshPXu10COgCVqFmipj/jF3jA7mClwPCBfby/eTIepJzOTPvDvptaTlfEUCg6MpfR/pbOHy+tWALILfNb9VwZxfgfL9iTT07ui82sP+s/80/lD4LoqyIxWL9FOkejoQz/OiTx1hZM485yVMh+xoK/3f2fICWfW3JCywQ03NBvhnvYngqbK8aiMfjGxZ8Q4/hRwsAcH+xC5JzQR7Yt03S4sJNwkKtAMd7LLJj5z9f2eQkfIDvLOqGHsOX08MTicSpaDR6F1BQY66kQlyerOGWdVeyAsvpmpX8tyV7F7CldgPZzy4SD7/SyR/7Wp2qBuLx+BcWfWMP4VcLACVYAYD9Z9t5+JVO/Y2tRy/bGeRUZOEv3RM+/EpnPr8PcO+Sv8Aj+NICACQSiYvRaDQA3Fns2r7xCJenauhaM0k4WP4RGUWEfxB4OpFIXCzjI5UMXwaBMmKx2BsUWRzSwMbWJF+57TydrUmPn0rH9FyQB17Y6tTb54QJ9BTwS+gbUfiiQ2g5EGAj8AYlbvwQCWf49I0X+Oi7L3n6XEcGWnj4j51Obf1SMYCeFHqkkmTwPQHAHEG7oB60ja1Jvvj+AbavmXT1WbovNvD4sWudungtSLWsJTx9leBcSdZoAD3/UfZdSZYFAcDcFGLBiZSNrUk+uu0SN68f1yeXLBJHBlp49mRHUcEDnLn7y4xs24WCgqJA/XA/NZMj1I/0Exnup264n/DkSL6Pl3UzimVBAGkPoE8BtYu5RyScoatjkpvXj7OxNVk0TpieC9J9sZETFxs4MtiSr22fgzN3f5nhrbvE4qOKuQip/bhiLknDUA8rh3poOvtnQhM5hCgLEXxLAOH770NfMsaTrWC2dzi7h/PjkUX59tN3fZnhbbskQecnQPaoz3KqmRym8czrNHcfoHZ4QL7tY8D9XrkG3xFAaPs3gI9V+FFKxnw4wpv3/DPJ9g02AZdOAPl83eV+Wv+yj6bul42v8Gx7Gt8QoAIbP7mCiTVb6P7IN8nURhwEvDgCGMfw1WGaul+m7dCvja87iL4pRZ9bz19xAixXwRs4+Pc/KyDgpRHAqA9fHaZj34+oG+wBl/cjqNioYDcEn6pv49yWuxns3MmaC8eInohTNz3q2jM6IVxTw9zsLAAzDXmzf64i3bRKftuIi8PKy04A4eMfosTsnhMuXnMj57bczWhHVD+hKAx27mRw007WnXuVdef/SNvlhCvPa+Cad63j9t13ceXqVV4U2wKViwChq8OG9gM842ZAWDYCiIWRfsoSgrvBDbeS2P5RkvXteZ3X4KadDF63k0hylPcc/m9WvX1isV/H5uhWbtzxXrp27KCppZX5jMojP/ovs/7qNdsWfe+FoDUbA4DLg0rKQgCxx9+DLHIf33PX7+H85rsKCt6OZH07x2/5HHc//S3z3J4PfIiacJjxsVHGRkdNPw3QvmqVXtpX0dbezpboVjKaSiajkVFVMqq+mdTbFwbN+82HvZ/zF7o6TOMJc9rkhNu7knlKAKH1v2WRS6IMbriVxLaPLEjwMpL17cItHALg2J//xHe//6+sCAYJBgIEgwGCAYWAEhDLBCtomqavQKOp+pAwRUVTFFRgfGyM8bEx8/5T7d4P8Gmzar/rA0o9Gw8gfH0/ixD+aPtmfv/BBzn2vr8jGWlb0nMk3rPXfD0+NsqRVw+Za0sHFAVFUQgEFIKBgOWoKIpeb64hrXAu0Wu591SbtwQIzCZl7QcPxhR6QoBYLPYgerfngkx+KtLKodu/xqFd9y9Z8AaSK9uzwSLw1OO/YCaVMptoASHogLAE+lEI32zK6eXM6SwB5sMR5mu8dQGtr++T3w6UMntqoXCdALFY7KfAAwv9XCL6YQ7s+Raj7ZvdfiR6JSuQSqX4w/++aNF+Q/hBmQSyFRCRwlnJAky1e5u2CM4maXn9efmUJ/MJXIsBSt3Z046Jxms5etPnmGh+l2dpqdGOKBMt62gc1wO4Z3/7G26/8w7WdKwxNdwQuKZpaKpinjdGGo+OjjA2ms0xeG3+W17fR2DW0mFV0kbZC4WbFmDBbftzm+7kwO5/YqLpWhcfI893bfuA5f0zTz1lZtqsbkAxrYMue/14ptfq/703/xbtP+5Vr6ArBBDNvKK7eRtIr6jlT+//Et3bP+HG15eEwetuI1WfjSsOvfIyp3p6zLyroigEFUPrc/Oyp3utO79d8TAH0NR90K79nk0oWTIBxGidks1TekUth3Z+lYtrbljqVy8Y595ttQK/+fWvzLkkigKBQADJ6mfnmQCJ3h7LZ2caLOlZV7HK2vSDEuZMLhZuuYCc5bDz4dDOrzLR6L3Jd8LgdbeRDteZ70/1nOTA/v3Z1WdV1dwfQi6jI1b/D96lgZu7D9oHh7ia+rVjyQQQvVJ3UiIJmq5eKH6RR0iHI5y3xQK/fvJJ0DQ0TSMjjlkW6MfenpOWz1xZu9WzZ3TQ/t949mW4ZAEECUqayLG9+ylC6ZQbX7soDF53u+X9yMgwTzzxOKqmoaqafhRE0C2ARuKU1fx7FQDWD/bYtX8Cj6eTu9YKiMfjjwLfK3ZdaH6GLYnni13mGZIr2xm87jbLuX3PPcfk5BSqqqKqhvANawC9p6wBoFdNwFWv5mj/016PEnY1ERSPx79Dkfn9AJvOHyCSHCt2mWdI7LDu25RMJnnyycfJqBqqppPAIMLw8DBjo9YBm5MeJIHqB3uoH+qxn/bU/IM3qeB7KWEhxB3Hfu7BV5cGPT1s9ePP/+53XLp8yeYG4NSpkzmf96IFsDpX+wfc7vlzgusEECbrXooEhW2jZ2gbPeP215eMXpsVAPjxD35ARnIDqqaR6MnRSqba3LUA4YlhJ+0vy1IynnQGiaCw6IzYm45WzgqMrtnKROs6y7lTPSc5ebI76wY0lcEByxBt14UPjtoPZVpNxLPuYGG+Cu4DXJcaI9q7r9AlnuLcuz+Yc+4XP3vMdAPTU9MMDVoJ4PYgkPDEMC0nX7afPl6u+YKerg8gxrE/VuiaznP7K9YsHLz+dlIrrQmdwYEBXn75IKqq0Xsq1/yPu5wC7qig9kN5Foi4nwJBYSidYvsJxx+hLLCnhwGe+PnPmJ6eotfB/7uZAQzOJmk8+7pTVdmWkvOcACIo3EuBoHDd4BEarw55/SiOGLx+lyU9DPqYgd+/+EJOBxC4S4BVR58nOJszR/GZci4lV5YlYsQ/tLfQNV0VsgLpcITzDrHAS//3IheGBnPOu+UCgrNJ2o86JsQ8b/vLKNsaQWI4U96gsG3kDOsGDpfrcSwY3Lwr51wqlRuXuBkA5tF+KPNKomVdJKpYUBg99buKBITJle0MXX970esmXWwCtp503CHnsXIvEFGJVcLyBoV1yTE2nS26XrQnSNxUfFd3t/oAWk8eJJy7HgCU2fxDBQggGJ63+7jz7H4iSW/n9zkhubKd0TWFu3lTLgWAa197yum065M+SkFF1gmUSJCDUDrF9uOVCQhPF7ECbmQB204ezLc8zKNLvvkiULGFIkWm6z6nujVvH6dt5HSZnwhG125lojW/kCddmAm02jnyhwotJF3RlULFGALHoLDr+K/K+zACfV25iSEDS20FNAz1UDcy4FQ1UKml4iq+VGw8HnfsPm68eoF1/a+V/XmGNu/KSQ8DjLswDGztYUffDx6N+S8FFSeAgGNQuP34ryrSLHSyAkvNADYM9dBwITe1LFCxXUR8QYB8QWEonWJLz3Nlf54Lm3flmPvUEgeBdBzL6/s9m/RRCnxBAMgfFG4681LZm4XpcIS+Lmt6eCkuoGZimOZzjp0+UEHzDz4iAJhB4X/Yz+/4c8EeZU9wwZYenq+pX/S9rjmS1/dDhTeR8hUBAOLx+P3YdhJvGz5N27C7a/4UQ6qhnbc2Z9PDi00D10wM096TM+DDgKeTPkqB7wggsBd9AWUTN/2p/FbgzHv1uYtL6QO4trD2V3wTKV8SwGkMQV1yjOjJZ8v6HKmGdsbXbmXGoVlYCoKzSVqcB3xAhVK/dviSAOA826jz9B/K3iw8+76PM7nITqC1bzxfaLn4igsffEwAyA0KQ+kU2489UdZnGFu7jbe25I4XKIYVs0nW5G/6QYWjfwO+JgDkBoXr+l6j8UruSB0vsZhewFWnDhbS/oqlfu3wPQEE9iKli7uOPVnBRykNa469UKj60TI9RlEsCwJkZxspEwBtwwnW9b1a4afKRf1IP00Xelh35Clq8u8IAj6I/g1UfLXwhSAWi92DGDWTirRy4EPfJh2K6Mt7gPhvpOVdsB3letvRXBEmzyrekakR6iaHCaWTNIwMgALNb/WgAPUjA6wobW8g0FO/Ny7xp3ANFVstfDGIx+NPx2Kx7wEP1CXH2NT7e3q7Yku+b2RqhMjUCOG5aRrHBlCA1ov6kPDG0QUJtxT4RvthmVkAA3+99+PPBdT5j6RDdRz84LdJGu10BwsQSqf05eEUaL+kr/TVODZAaC5FZHqYuqmyDz9rqXT2T8aysgAGAur8386Hal8PpVObth99nHPRv6JdLA/feGWQ0FySyPSo53sHLAIVT/3asSwtAOirk6nB0OFAJl3adl7+wH0it+EbLFsCwOL3EqwQJuLxeFOlH8KOZekCDMTj8UdjsVify7fdCHS6eL9mYAf6vsFVVFFFFVVUUUUVVVRRRRVVVFFFFRXD/wOxE9od9Ke7pQAAAABJRU5ErkJgglBLBwgfI483uxcAALsXAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAoAAABzdGF0aWNcanMvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHN0YXRpY1xqc1xob21lLmpzJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgew0KICAgIC8vZml4SGVhZGVyKCk7DQogICAgdG9wQnV0dG9uKCk7DQogICAgcmVuZGVyTWFya2Rvd24oKTsNCiAgICBpbml0Q29tbWVudCgpOw0KfSk7DQoNCmZ1bmN0aW9uIGZpeEhlYWRlcigpIHsNCiAgICB2YXIgJG5hdiA9ICQoJyNuYXYnKTsNCiAgICB2YXIgdG9wID0gJG5hdi5vZmZzZXQoKS50b3A7DQogICAgY29uc29sZS5sb2codG9wKTsNCiAgICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKHRvcCA8ICQodGhpcykuc2Nyb2xsVG9wKCkpIHsNCiAgICAgICAgICAgICRuYXYuYWRkQ2xhc3MoImZpeGVkIikucmVtb3ZlQ2xhc3MoInRleHQtY2VudGVyIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkbmF2LnJlbW92ZUNsYXNzKCJmaXhlZCIpLmFkZENsYXNzKCJ0ZXh0LWNlbnRlciIpOw0KICAgICAgICB9DQogICAgfSk7DQp9DQoNCmZ1bmN0aW9uIHRvcEJ1dHRvbigpIHsNCiAgICB2YXIgdG9wID0gJCgnI25hdicpLm9mZnNldCgpLnRvcDsNCiAgICB2YXIgJHRvcCA9ICQoJyNnby10b3AnKTsNCiAgICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKHRvcCA8ICQodGhpcykuc2Nyb2xsVG9wKCkpIHsNCiAgICAgICAgICAgICR0b3AucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR0b3AuYWRkQ2xhc3MoJ2hpZGUnKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgICR0b3Aub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IDB9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSkNCn0NCg0KZnVuY3Rpb24gcmVuZGVyTWFya2Rvd24oKSB7DQogICAgdmFyICRtZCA9ICQoJy5tYXJrZG93bicpOw0KICAgICRtZC5lYWNoKGZ1bmN0aW9uIChpLCBpdGVtKSB7DQogICAgICAgICQoaXRlbSkuaHRtbChtYXJrZWQoJChpdGVtKS5odG1sKCkucmVwbGFjZSgvJmd0Oy9nLCAnPicpKSk7DQogICAgfSk7DQogICAgdmFyIGNvZGUgPSAkbWQuZmluZCgncHJlIGNvZGUnKTsNCiAgICBpZiAoY29kZS5sZW5ndGgpIHsNCiAgICAgICAgJCgiPGxpbms+IikuYXR0cih7IHJlbDogInN0eWxlc2hlZXQiLCB0eXBlOiAidGV4dC9jc3MiLCBocmVmOiAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyJ9KS5hcHBlbmRUbygiaGVhZCIpOw0KICAgICAgICAkLmdldFNjcmlwdCgiL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGNvZGUuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soaXRlbSkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGluaXRDb21tZW50KCkgew0KICAgIHZhciAkbGlzdCA9ICQoJyNjb21tZW50LWxpc3QnKTsNCiAgICBpZiAoISRsaXN0Lmxlbmd0aCkgew0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1hdXRob3IiKSkgew0KICAgICAgICAkKCcjY29tbWVudC1hdXRob3InKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpOw0KICAgICAgICAkKCcjY29tbWVudC1lbWFpbCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1lbWFpbCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtdXJsJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LXVybCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXZhdGFyJykuYXR0cigic3JjIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXZhdGFyIikpOw0KICAgICAgICAkKCcuYy1hdmF0YXInKS5yZW1vdmVDbGFzcygibnVsbCIpOw0KICAgIH0NCiAgICAkKCcjY29tbWVudC1jb250ZW50Jykub24oImZvY3VzIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoJCgnLmMtYXZhdGFyJykuaGFzQ2xhc3MoIm51bGwiKSkgew0KICAgICAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICAgICAkKCcuYy1pbmZvLWZpZWxkcycpLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkKCcubm90LW1lJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1hdmF0YXItZmllbGQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnI2NvbW1lbnQtc2hvdycpLm9uKCJjbGljayIsICIuZW5hYmxlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIjY29tbWVudC1zaG93IikucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWF1dGhvciIsICQoJyNjb21tZW50LWF1dGhvcicpLnZhbCgpKTsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWVtYWlsIiwgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC11cmwiLCAkKCcjY29tbWVudC11cmwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdmF0YXIiLCBqc29uLmNvbW1lbnQuYXZhdGFyKTsNCiAgICAgICAgICAgIHZhciB0cGwgPSAkKCQoJyNjb21tZW50LXRwbCcpLmh0bWwoKSk7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXZhdGFyIikuYXR0cigic3JjIiwganNvbi5jb21tZW50LmF2YXRhcikuYXR0cigiYWx0IiwganNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXV0aG9yIikuYXR0cigiaHJlZiIsIGpzb24uY29tbWVudC51cmwpLnRleHQoanNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtcmVwbHkiKS5hdHRyKCJyZWwiLCBqc29uLmNvbW1lbnQuaWQpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKGpzb24uY29tbWVudC5jb250ZW50KTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQucGFyZW50X21kKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXAtbWQiKS5odG1sKG1hcmtlZChqc29uLmNvbW1lbnQucGFyZW50X21kKSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0cGwuYXR0cigiaWQiLCAiY29tbWVudC0iICsganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQuc3RhdHVzID09ICJhcHByb3ZlZCIpIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtY2hlY2siKS5yZW1vdmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRsaXN0LmFwcGVuZCh0cGwpOw0KICAgICAgICAgICAgJCgnLmNhbmNlbC1yZXBseScpLnRyaWdnZXIoImNsaWNrIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykudmFsKCIiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGFsZXJ0KCLmj5DkuqTlpLHotKUhIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkbGlzdC5vbigiY2xpY2siLCAiLmMtcmVwbHkiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZXBseS1tZCcpLnJlbW92ZSgpOw0KICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICB2YXIgcGMgPSAkKCcjY29tbWVudC0nICsgaWQpOw0KICAgICAgICB2YXIgbWQgPSAiPiBAIiArIHBjLmZpbmQoIi5jLWF1dGhvciIpLnRleHQoKSArICJcblxuIjsNCiAgICAgICAgbWQgKz0gIj4gIiArIHBjLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKCkgKyAiXG4iOw0KICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykuYmVmb3JlKCc8ZGl2IGNsYXNzPSJyZXBseS1tZCBtYXJrZG93biI+JyArIG1hcmtlZChtZCkgKyAnPC9kaXY+Jyk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbChpZCk7DQogICAgICAgIGlmICgkKCcjY29tbWVudC1zaG93JykubGVuZ3RoKSB7DQogICAgICAgICAgICAkKCcjY29tbWVudC1zaG93IC5lbmFibGUnKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICB9DQogICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS5zaG93KCk7DQogICAgICAgIHZhciB0b3AgPSAkKCcjY29tbWVudC1mb3JtJykub2Zmc2V0KCkudG9wOw0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IHRvcH0sIDUwMCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCiAgICAkKCcuY2FuY2VsLXJlcGx5Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAkKHRoaXMpLmhpZGUoKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KfQ0KUEsHCB7hHnJ1EgAAdRIAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHN0YXRpY1xqc1x1cGxvYWQuanNmdW5jdGlvbiBpbml0VXBsb2FkKHApIHsNCiAgICAkKCcjYXR0YWNoLXNob3cnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICB9KTsNCiAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmIChjb25maXJtKCLnq4vljbPkuIrkvKA/IikpIHsNCiAgICAgICAgICAgIHZhciBiYXIgPSAkKCc8cCBjbGFzcz0iZmlsZS1wcm9ncmVzcyBpbmxpbmUtYmxvY2siPjAlPC9wPicpOw0KICAgICAgICAgICAgJCgnI2F0dGFjaC1mb3JtJykuYWpheFN1Ym1pdCh7DQogICAgICAgICAgICAgICAgImJlZm9yZVN1Ym1pdCI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgJChwKS5iZWZvcmUoYmFyKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJ1cGxvYWRQcm9ncmVzcyI6IGZ1bmN0aW9uIChldmVudCwgcG9zaXRpb24sIHRvdGFsLCBwZXJjZW50Q29tcGxldGUpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRWYWwgPSBwZXJjZW50Q29tcGxldGUgKyAnJSc7DQogICAgICAgICAgICAgICAgICAgIGJhci5jc3MoIndpZHRoIiwgcGVyY2VudFZhbCkuaHRtbChwZXJjZW50VmFsKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoanNvbi5tc2cpLmFkZENsYXNzKCJlcnIiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhci5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMDApOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoIi8iICsganNvbi5maWxlLlVybCArICImbmJzcDsmbmJzcDsmbmJzcDsoQCIgKyBqc29uLmZpbGUuTmFtZSArICIpIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJCgnI2F0dGFjaC11cGxvYWQnKS52YWwoIiIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJCh0aGlzKS52YWwoIiIpOw0KICAgICAgICB9DQogICAgfSk7DQp9UEsHCIiJF/v2BAAA9gQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHN0YXRpY1xsaWIvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAHN0YXRpY1xsaWJcY29kZW1pcnJvci1tb2RlLm1pbi5qcyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0vXihccyopKFsqKy1dfChcZCspXC4pKFxzKikvLGU9IiorLSI7Q29kZU1pcnJvci5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT1yLmdldEN1cnNvcigpLG89ci5nZXRTdGF0ZUFmdGVyKGkubGluZSkubGlzdCE9PSExO2lmKCFvfHwhKG49ci5nZXRMaW5lKGkubGluZSkubWF0Y2godCkpKXJldHVybiByLmV4ZWNDb21tYW5kKCJuZXdsaW5lQW5kSW5kZW50Iiksdm9pZCAwO3ZhciBsPW5bMV0sYT1uWzRdLHM9ZS5pbmRleE9mKG5bMl0pPj0wP25bMl06cGFyc2VJbnQoblszXSwxMCkrMSsiLiI7ci5yZXBsYWNlU2VsZWN0aW9uKCJcbiIrbCtzK2EsImVuZCIpfX0oKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoIm1hcmtkb3duIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlLHIpe3JldHVybiBlLmY9ZS5pbmxpbmU9cixyKHQsZSl9ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIGUuZj1lLmJsb2NrPXIscih0LGUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubGlua1RpdGxlPSExLHQuZW09ITEsdC5zdHJvbmc9ITEsdC5xdW90ZT0wLGd8fHQuZiE9bHx8KHQuZj1jLHQuYmxvY2s9byksdC50cmFpbGluZ1NwYWNlPTAsdC50cmFpbGluZ1NwYWNlTmV3TGluZT0hMSx0LnRoaXNMaW5lSGFzQ29udGVudD0hMSxudWxsfWZ1bmN0aW9uIG8odCxpKXt2YXIgbz1pLmxpc3QhPT0hMTtpLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbkRpZmY+PTA/KGkuaW5kZW50YXRpb25EaWZmPDQmJihpLmluZGVudGF0aW9uLT1pLmluZGVudGF0aW9uRGlmZiksaS5saXN0PW51bGwpOmkubGlzdCE9PSExJiZpLmluZGVudGF0aW9uPjA/KGkubGlzdD1udWxsLGkubGlzdERlcHRoPU1hdGguZmxvb3IoaS5pbmRlbnRhdGlvbi80KSk6aS5saXN0IT09ITEmJihpLmxpc3Q9ITEsaS5saXN0RGVwdGg9MCk7dmFyIGw9bnVsbDtpZihpLmluZGVudGF0aW9uRGlmZj49NClyZXR1cm4gaS5pbmRlbnRhdGlvbi09NCx0LnNraXBUb0VuZCgpLGs7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO2lmKGw9dC5tYXRjaChSKSlpLmhlYWRlcj1sWzBdLmxlbmd0aDw9Nj9sWzBdLmxlbmd0aDo2O2Vsc2UgaWYoaS5wcmV2TGluZUhhc0NvbnRlbnQmJihsPXQubWF0Y2goRykpKWkuaGVhZGVyPSI9Ij09bFswXS5jaGFyQXQoMCk/MToyO2Vsc2UgaWYodC5lYXQoIj4iKSlmb3IoaS5pbmRlbnRhdGlvbisrLGkucXVvdGU9MSx0LmVhdFNwYWNlKCk7dC5lYXQoIj4iKTspdC5lYXRTcGFjZSgpLGkucXVvdGUrKztlbHNle2lmKCJbIj09PXQucGVlaygpKXJldHVybiByKHQsaSxoKTtpZih0Lm1hdGNoKEksITApKXJldHVybiBBO2lmKGkucHJldkxpbmVIYXNDb250ZW50JiYhb3x8IXQubWF0Y2goUCwhMCkmJiF0Lm1hdGNoKEYsITApKXtpZihlLmZlbmNlZENvZGVCbG9ja3MmJnQubWF0Y2goL15gYGAoW1x3KyNdKikvLCEwKSlyZXR1cm4gaS5sb2NhbE1vZGU9eChSZWdFeHAuJDEpLGkubG9jYWxNb2RlJiYoaS5sb2NhbFN0YXRlPWkubG9jYWxNb2RlLnN0YXJ0U3RhdGUoKSksbih0LGksYSksa31lbHNlIGkuaW5kZW50YXRpb24rPTQsaS5saXN0PSEwLGkubGlzdERlcHRoKyssZS50YXNrTGlzdHMmJnQubWF0Y2goQiwhMSkmJihpLnRhc2tMaXN0PSEwKX1yZXR1cm4gcih0LGksaS5pbmxpbmUpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj12LnRva2VuKHQsZS5odG1sU3RhdGUpO3JldHVybiBnJiYidGFnIj09PXImJiJvcGVuVGFnIiE9PWUuaHRtbFN0YXRlLnR5cGUmJiFlLmh0bWxTdGF0ZS5jb250ZXh0JiYoZS5mPWMsZS5ibG9jaz1vKSxlLm1kX2luc2lkZSYmLTEhPXQuY3VycmVudCgpLmluZGV4T2YoIj4iKSYmKGUuZj1jLGUuYmxvY2s9byxlLmh0bWxTdGF0ZS5jb250ZXh0PXZvaWQgMCkscn1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQuc29sKCkmJnQubWF0Y2goL15gYGAvLCEwKT8oZS5sb2NhbE1vZGU9ZS5sb2NhbFN0YXRlPW51bGwsZS5mPWMsZS5ibG9jaz1vLGspOmUubG9jYWxNb2RlP2UubG9jYWxNb2RlLnRva2VuKHQsZS5sb2NhbFN0YXRlKToodC5za2lwVG9FbmQoKSxrKX1mdW5jdGlvbiBzKHQpe3ZhciBlPVtdO2lmKHQudGFza09wZW4pcmV0dXJuIm1ldGEiO2lmKHQudGFza0Nsb3NlZClyZXR1cm4icHJvcGVydHkiO2lmKHQuc3Ryb25nJiZlLnB1c2goeiksdC5lbSYmZS5wdXNoKEUpLHQubGlua1RleHQmJmUucHVzaChPKSx0LmNvZGUmJmUucHVzaChrKSx0LmhlYWRlciYmKGUucHVzaChDKSxlLnB1c2goQyt0LmhlYWRlcikpLHQucXVvdGUmJmUucHVzaCh0LnF1b3RlJTI/dzpMKSx0Lmxpc3QhPT0hMSl7dmFyIHI9KHQubGlzdERlcHRoLTEpJTM7cj8xPT09cj9lLnB1c2goTSk6ZS5wdXNoKFQpOmUucHVzaChTKX1yZXR1cm4gdC50cmFpbGluZ1NwYWNlTmV3TGluZT9lLnB1c2goInRyYWlsaW5nLXNwYWNlLW5ldy1saW5lIik6dC50cmFpbGluZ1NwYWNlJiZlLnB1c2goInRyYWlsaW5nLXNwYWNlLSIrKHQudHJhaWxpbmdTcGFjZSUyPyJhIjoiYiIpKSxlLmxlbmd0aD9lLmpvaW4oIiAiKTpudWxsfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdC5tYXRjaChfLCEwKT9zKGUpOnZvaWQgMH1mdW5jdGlvbiBjKHQsaSl7dmFyIG89aS50ZXh0KHQsaSk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBvKXJldHVybiBvO2lmKGkubGlzdClyZXR1cm4gaS5saXN0PW51bGwscyhpKTtpZihpLnRhc2tMaXN0KXt2YXIgYT0ieCIhPT10Lm1hdGNoKEIsITApWzFdO3JldHVybiBhP2kudGFza09wZW49ITA6aS50YXNrQ2xvc2VkPSEwLGkudGFza0xpc3Q9ITEscyhpKX1pLnRhc2tPcGVuPSExLGkudGFza0Nsb3NlZD0hMTt2YXIgdT10LnNvbCgpLGM9dC5uZXh0KCk7aWYoIlxcIj09PWMpcmV0dXJuIHQubmV4dCgpLHMoaSk7aWYoaS5saW5rVGl0bGUpe2kubGlua1RpdGxlPSExO3ZhciBoPWM7IigiPT09YyYmKGg9IikiKSxoPShoKyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpO3ZhciBkPSJeXFxzKig/OlteIitoKyJcXFxcXSt8XFxcXFxcXFx8XFxcXC4pIitoO2lmKHQubWF0Y2gobmV3IFJlZ0V4cChkKSwhMCkpcmV0dXJuIFd9aWYoImAiPT09Yyl7dmFyIHA9cyhpKSxnPXQucG9zO3QuZWF0V2hpbGUoImAiKTt2YXIgdj0xK3QucG9zLWc7cmV0dXJuIGkuY29kZT92PT09Yj8oaS5jb2RlPSExLHApOnMoaSk6KGI9dixpLmNvZGU9ITAscyhpKSl9aWYoaS5jb2RlKXJldHVybiBzKGkpO2lmKCIhIj09PWMmJnQubWF0Y2goL1xbW15cXV0qXF0gPyg/OlwofFxbKS8sITEpKXJldHVybiB0Lm1hdGNoKC9cW1teXF1dKlxdLyksaS5pbmxpbmU9aS5mPWYsTjtpZigiWyI9PT1jJiZ0Lm1hdGNoKC8uKlxdKFwofCA/XFspLywhMSkpcmV0dXJuIGkubGlua1RleHQ9ITAscyhpKTtpZigiXSI9PT1jJiZpLmxpbmtUZXh0KXt2YXIgeT1zKGkpO3JldHVybiBpLmxpbmtUZXh0PSExLGkuaW5saW5lPWkuZj1mLHl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXihodHRwcz98ZnRwcz8pOlwvXC8oPzpbXlxcPl18XFwuKSs+LywhMSkpcmV0dXJuIHIodCxpLG0oSCwiPiIpKTtpZigiPCI9PT1jJiZ0Lm1hdGNoKC9eW14+IFxcXStAKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEQsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXlx3LywhMSkpe2lmKC0xIT10LnN0cmluZy5pbmRleE9mKCI+Iikpe3ZhciB4PXQuc3RyaW5nLnN1YnN0cmluZygxLHQuc3RyaW5nLmluZGV4T2YoIj4iKSk7L21hcmtkb3duXHMqPVxzKignfCIpezAsMX0xKCd8Iil7MCwxfS8udGVzdCh4KSYmKGkubWRfaW5zaWRlPSEwKX1yZXR1cm4gdC5iYWNrVXAoMSksbih0LGksbCl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXlwvXHcqPz4vKSlyZXR1cm4gaS5tZF9pbnNpZGU9ITEsInRhZyI7dmFyIEM9ITE7aWYoIWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYiXyI9PT1jJiYiXyIhPT10LnBlZWsoKSYmdC5tYXRjaCgvKFx3KS8sITEpKXt2YXIgaz10LnBvcy0yO2lmKGs+PTApe3ZhciB3PXQuc3RyaW5nLmNoYXJBdChrKTsiXyIhPT13JiZ3Lm1hdGNoKC8oXHcpLywhMSkmJihDPSEwKX19dmFyIHA9cyhpKTtpZigiKiI9PT1jfHwiXyI9PT1jJiYhQylpZih1JiYiICI9PT10LnBlZWsoKSk7ZWxzZXtpZihpLnN0cm9uZz09PWMmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz0hMSxwO2lmKCFpLnN0cm9uZyYmdC5lYXQoYykpcmV0dXJuIGkuc3Ryb25nPWMscyhpKTtpZihpLmVtPT09YylyZXR1cm4gaS5lbT0hMSxwO2lmKCFpLmVtKXJldHVybiBpLmVtPWMscyhpKX1lbHNlIGlmKCIgIj09PWMmJih0LmVhdCgiKiIpfHx0LmVhdCgiXyIpKSl7aWYoIiAiPT09dC5wZWVrKCkpcmV0dXJuIHMoaSk7dC5iYWNrVXAoMSl9cmV0dXJuIiAiPT09YyYmKHQubWF0Y2goLyArJC8sITEpP2kudHJhaWxpbmdTcGFjZSsrOmkudHJhaWxpbmdTcGFjZSYmKGkudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITApKSxzKGkpfWZ1bmN0aW9uIGYodCxlKXtpZih0LmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7dmFyIG49dC5uZXh0KCk7cmV0dXJuIigiPT09bnx8IlsiPT09bj9yKHQsZSxtKFcsIigiPT09bj8iKSI6Il0iKSk6ImVycm9yIn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQubWF0Y2goL15bXlxdXSpcXTovLCEwKT8oZS5mPWQsTyk6cih0LGUsYyl9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0LmVhdFNwYWNlKCk/bnVsbDoodC5tYXRjaCgvXlteXHNdKy8sITApLHZvaWQgMD09PXQucGVlaygpP2UubGlua1RpdGxlPSEwOnQubWF0Y2goL14oPzpccysoPzoiKD86W14iXFxdfFxcXFx8XFwuKSsifCcoPzpbXidcXF18XFxcXHxcXC4pKyd8XCgoPzpbXilcXF18XFxcXHxcXC4pK1wpKSk/LywhMCksZS5mPWUuaW5saW5lPWMsVyl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gVlt0XXx8KHQ9KHQrIiIpLnJlcGxhY2UoLyhbLj8qK14kW1xdXFwoKXt9fC1dKS9nLCJcXCQxIiksVlt0XT1uZXcgUmVnRXhwKCJeKD86W15cXFxcXXxcXFxcLikqPygiK3QrIikiKSksVlt0XX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gcj1yfHxjLGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4ubWF0Y2gocChlKSksaS5pbmxpbmU9aS5mPXIsdH19dmFyIGc9Q29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eSgieG1sIiksdj1Db2RlTWlycm9yLmdldE1vZGUodCxnP3tuYW1lOiJ4bWwiLGh0bWxNb2RlOiEwfToidGV4dC9wbGFpbiIpLHk9e2h0bWw6Imh0bWxtaXhlZCIsanM6ImphdmFzY3JpcHQiLGpzb246ImFwcGxpY2F0aW9uL2pzb24iLGM6InRleHQveC1jc3JjIiwiYysrIjoidGV4dC94LWMrK3NyYyIsamF2YToidGV4dC94LWphdmEiLGNzaGFycDoidGV4dC94LWNzaGFycCIsImMjIjoidGV4dC94LWNzaGFycCIsc2NhbGE6InRleHQveC1zY2FsYSJ9LHg9ZnVuY3Rpb24oKXt2YXIgZSxyLG49e30saT17fSxvPVtdO2Zvcih2YXIgbCBpbiBDb2RlTWlycm9yLm1vZGVzKUNvZGVNaXJyb3IubW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJm8ucHVzaChsKTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKW5bb1tlXV09b1tlXTt2YXIgYT1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5taW1lTW9kZXMpQ29kZU1pcnJvci5taW1lTW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJmEucHVzaCh7bWltZTpsLG1vZGU6Q29kZU1pcnJvci5taW1lTW9kZXNbbF19KTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXI9YVtlXS5taW1lLGlbcl09YVtlXS5taW1lO2Zvcih2YXIgcyBpbiB5KSh5W3NdaW4gbnx8eVtzXWluIGkpJiYobltzXT15W3NdKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV0/Q29kZU1pcnJvci5nZXRNb2RlKHQsbltlXSk6bnVsbH19KCk7dm9pZCAwPT09ZS51bmRlcnNjb3Jlc0JyZWFrV29yZHMmJihlLnVuZGVyc2NvcmVzQnJlYWtXb3Jkcz0hMCksdm9pZCAwPT09ZS5mZW5jZWRDb2RlQmxvY2tzJiYoZS5mZW5jZWRDb2RlQmxvY2tzPSExKSx2b2lkIDA9PT1lLnRhc2tMaXN0cyYmKGUudGFza0xpc3RzPSExKTt2YXIgYj0wLEM9ImhlYWRlciIsaz0iY29tbWVudCIsdz0iYXRvbSIsTD0ibnVtYmVyIixTPSJ2YXJpYWJsZS0yIixNPSJ2YXJpYWJsZS0zIixUPSJrZXl3b3JkIixBPSJociIsTj0idGFnIixIPSJsaW5rIixEPSJsaW5rIixPPSJsaW5rIixXPSJzdHJpbmciLEU9ImVtIix6PSJzdHJvbmciLEk9L14oWypcLT1fXSkoPzpccypcMSl7Mix9XHMqJC8sUD0vXlsqXC0rXVxzKy8sRj0vXlswLTldK1wuXHMrLyxCPS9eXFsoeHwgKVxdKD89XHMpLyxSPS9eIysvLEc9L14oPzpcPXsxLH18LXsxLH0pJC8sXz0vXlteIVxbXF0qX1xcPD5gICInKF0rLyxWPVtdO3JldHVybntzdGFydFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue2Y6byxwcmV2TGluZUhhc0NvbnRlbnQ6ITEsdGhpc0xpbmVIYXNDb250ZW50OiExLGJsb2NrOm8saHRtbFN0YXRlOkNvZGVNaXJyb3Iuc3RhcnRTdGF0ZSh2KSxpbmRlbnRhdGlvbjowLGlubGluZTpjLHRleHQ6dSxsaW5rVGV4dDohMSxsaW5rVGl0bGU6ITEsZW06ITEsc3Ryb25nOiExLGhlYWRlcjowLHRhc2tMaXN0OiExLGxpc3Q6ITEsbGlzdERlcHRoOjAscXVvdGU6MCx0cmFpbGluZ1NwYWNlOjAsdHJhaWxpbmdTcGFjZU5ld0xpbmU6ITF9fSxjb3B5U3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJue2Y6dC5mLHByZXZMaW5lSGFzQ29udGVudDp0LnByZXZMaW5lSGFzQ29udGVudCx0aGlzTGluZUhhc0NvbnRlbnQ6dC50aGlzTGluZUhhc0NvbnRlbnQsYmxvY2s6dC5ibG9jayxodG1sU3RhdGU6Q29kZU1pcnJvci5jb3B5U3RhdGUodix0Lmh0bWxTdGF0ZSksaW5kZW50YXRpb246dC5pbmRlbnRhdGlvbixsb2NhbE1vZGU6dC5sb2NhbE1vZGUsbG9jYWxTdGF0ZTp0LmxvY2FsTW9kZT9Db2RlTWlycm9yLmNvcHlTdGF0ZSh0LmxvY2FsTW9kZSx0LmxvY2FsU3RhdGUpOm51bGwsaW5saW5lOnQuaW5saW5lLHRleHQ6dC50ZXh0LGxpbmtUaXRsZTp0LmxpbmtUaXRsZSxlbTp0LmVtLHN0cm9uZzp0LnN0cm9uZyxoZWFkZXI6dC5oZWFkZXIsdGFza0xpc3Q6dC50YXNrTGlzdCxsaXN0OnQubGlzdCxsaXN0RGVwdGg6dC5saXN0RGVwdGgscXVvdGU6dC5xdW90ZSx0cmFpbGluZ1NwYWNlOnQudHJhaWxpbmdTcGFjZSx0cmFpbGluZ1NwYWNlTmV3TGluZTp0LnRyYWlsaW5nU3BhY2VOZXdMaW5lLG1kX2luc2lkZTp0Lm1kX2luc2lkZX19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYodC5zb2woKSl7aWYodC5tYXRjaCgvXlxzKiQvLCEwKSlyZXR1cm4gZS5wcmV2TGluZUhhc0NvbnRlbnQ9ITEsaShlKTtlLnByZXZMaW5lSGFzQ29udGVudD1lLnRoaXNMaW5lSGFzQ29udGVudCxlLnRoaXNMaW5lSGFzQ29udGVudD0hMCxlLmhlYWRlcj0wLGUudGFza0xpc3Q9ITEsZS5jb2RlPSExLGUudHJhaWxpbmdTcGFjZT0wLGUudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsZS5mPWUuYmxvY2s7dmFyIHI9dC5tYXRjaCgvXlxzKi8sITApWzBdLnJlcGxhY2UoL1x0L2csIiAgICAiKS5sZW5ndGgsbj00Kk1hdGguZmxvb3IoKHItZS5pbmRlbnRhdGlvbikvNCk7bj40JiYobj00KTt2YXIgbz1lLmluZGVudGF0aW9uK247aWYoZS5pbmRlbnRhdGlvbkRpZmY9by1lLmluZGVudGF0aW9uLGUuaW5kZW50YXRpb249byxyPjApcmV0dXJuIG51bGx9cmV0dXJuIGUuZih0LGUpfSxibGFua0xpbmU6aSxnZXRUeXBlOnN9fSwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbWFya2Rvd24iLCJtYXJrZG93biIpLENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiByKHIpe3JldHVybiBlLnRva2VuaXplPXIscih0LGUpfXZhciBpPXQubmV4dCgpO2lmKCI8Ij09aSl7aWYodC5lYXQoIiEiKSlyZXR1cm4gdC5lYXQoIlsiKT90Lm1hdGNoKCJDREFUQVsiKT9yKG8oImF0b20iLCJdXT4iKSk6bnVsbDp0Lm1hdGNoKCItLSIpP3IobygiY29tbWVudCIsIi0tPiIpKTp0Lm1hdGNoKCJET0NUWVBFIiwhMCwhMCk/KHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLHIobCgxKSkpOm51bGw7aWYodC5lYXQoIj8iKSlyZXR1cm4gdC5lYXRXaGlsZSgvW1x3XC5fXC1dLyksZS50b2tlbml6ZT1vKCJtZXRhIiwiPz4iKSwibWV0YSI7dmFyIGE9dC5lYXQoIi8iKTt4PSIiO2Zvcih2YXIgcztzPXQuZWF0KC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKTspeCs9cztyZXR1cm4geD8oYj1hPyJjbG9zZVRhZyI6Im9wZW5UYWciLGUudG9rZW5pemU9biwidGFnIik6InRhZyBlcnJvciJ9aWYoIiYiPT1pKXt2YXIgdTtyZXR1cm4gdT10LmVhdCgiIyIpP3QuZWF0KCJ4Iik/dC5lYXRXaGlsZSgvW2EtZkEtRlxkXS8pJiZ0LmVhdCgiOyIpOnQuZWF0V2hpbGUoL1tcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXHdcLlwtOl0vKSYmdC5lYXQoIjsiKSx1PyJhdG9tIjoiZXJyb3IifXJldHVybiB0LmVhdFdoaWxlKC9bXiY8XS8pLG51bGx9ZnVuY3Rpb24gbih0LGUpe3ZhciBuPXQubmV4dCgpO2lmKCI+Ij09bnx8Ii8iPT1uJiZ0LmVhdCgiPiIpKXJldHVybiBlLnRva2VuaXplPXIsYj0iPiI9PW4/ImVuZFRhZyI6InNlbGZjbG9zZVRhZyIsInRhZyI7aWYoIj0iPT1uKXJldHVybiBiPSJlcXVhbHMiLG51bGw7aWYoIjwiPT1uKXtlLnRva2VuaXplPXI7dmFyIG89ZS50b2tlbml6ZSh0LGUpO3JldHVybiBvP28rIiBlcnJvciI6ImVycm9yIn1yZXR1cm4vW1wnXCJdLy50ZXN0KG4pPyhlLnRva2VuaXplPWkobiksZS5zdHJpbmdTdGFydENvbD10LmNvbHVtbigpLGUudG9rZW5pemUodCxlKSk6KHQuZWF0V2hpbGUoL1teXHNcdTAwYTA9PD5cIlwnXS8pLCJ3b3JkIil9ZnVuY3Rpb24gaSh0KXt2YXIgZT1mdW5jdGlvbihlLHIpe2Zvcig7IWUuZW9sKCk7KWlmKGUubmV4dCgpPT10KXtyLnRva2VuaXplPW47YnJlYWt9cmV0dXJuInN0cmluZyJ9O3JldHVybiBlLmlzSW5BdHRyaWJ1dGU9ITAsZX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7Zm9yKDshbi5lb2woKTspe2lmKG4ubWF0Y2goZSkpe2kudG9rZW5pemU9cjticmVha31uLm5leHQoKX1yZXR1cm4gdH19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk7bnVsbCE9KGk9ZS5uZXh0KCkpOyl7aWYoIjwiPT1pKXJldHVybiBuLnRva2VuaXplPWwodCsxKSxuLnRva2VuaXplKGUsbik7aWYoIj4iPT1pKXtpZigxPT10KXtuLnRva2VuaXplPXI7YnJlYWt9cmV0dXJuIG4udG9rZW5pemU9bCh0LTEpLG4udG9rZW5pemUoZSxuKX19cmV0dXJuIm1ldGEifX1mdW5jdGlvbiBhKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMTt0Pj0wO3QtLSlDLmNjLnB1c2goYXJndW1lbnRzW3RdKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGEuYXBwbHkobnVsbCxhcmd1bWVudHMpLCEwfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1ULmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHQpfHxDLmNvbnRleHQmJkMuY29udGV4dC5ub0luZGVudDtDLmNvbnRleHQ9e3ByZXY6Qy5jb250ZXh0LHRhZ05hbWU6dCxpbmRlbnQ6Qy5pbmRlbnRlZCxzdGFydE9mTGluZTplLG5vSW5kZW50OnJ9fWZ1bmN0aW9uIGMoKXtDLmNvbnRleHQmJihDLmNvbnRleHQ9Qy5jb250ZXh0LnByZXYpfWZ1bmN0aW9uIGYodCl7aWYoIm9wZW5UYWciPT10KXJldHVybiBDLnRhZ05hbWU9eCxDLnRhZ1N0YXJ0PWsuY29sdW1uKCkscyhtLGgoQy5zdGFydE9mTGluZSkpO2lmKCJjbG9zZVRhZyI9PXQpe3ZhciBlPSExO3JldHVybiBDLmNvbnRleHQ/Qy5jb250ZXh0LnRhZ05hbWUhPXgmJihULmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoQy5jb250ZXh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkmJmMoKSxlPSFDLmNvbnRleHR8fEMuY29udGV4dC50YWdOYW1lIT14KTplPSEwLGUmJih3PSJlcnJvciIpLHMoZChlKSl9cmV0dXJuIHMoKX1mdW5jdGlvbiBoKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1DLnRhZ05hbWU7cmV0dXJuIEMudGFnTmFtZT1DLnRhZ1N0YXJ0PW51bGwsInNlbGZjbG9zZVRhZyI9PWV8fCJlbmRUYWciPT1lJiZULmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShyLnRvTG93ZXJDYXNlKCkpPyhwKHIudG9Mb3dlckNhc2UoKSkscygpKToiZW5kVGFnIj09ZT8ocChyLnRvTG93ZXJDYXNlKCkpLHUocix0KSxzKCkpOnMoKX19ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJih3PSJlcnJvciIpLCJlbmRUYWciPT1lPyhjKCkscygpKToodz0iZXJyb3IiLHMoYXJndW1lbnRzLmNhbGxlZSkpfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZTs7KXtpZighQy5jb250ZXh0KXJldHVybjtpZihlPUMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIVQuY29udGV4dEdyYWJiZXJzLmhhc093blByb3BlcnR5KGUpfHwhVC5jb250ZXh0R3JhYmJlcnNbZV0uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2MoKX19ZnVuY3Rpb24gbSh0KXtyZXR1cm4id29yZCI9PXQ/KHc9ImF0dHJpYnV0ZSIscyhnLG0pKToiZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOih3PSJlcnJvciIscyhtKSl9ZnVuY3Rpb24gZyh0KXtpZigiZXF1YWxzIj09dClyZXR1cm4gcyh2LG0pO2lmKFQuYWxsb3dNaXNzaW5nKXtpZigid29yZCI9PXQpcmV0dXJuIHc9ImF0dHJpYnV0ZSIscyhnLG0pfWVsc2Ugdz0iZXJyb3IiO3JldHVybiJlbmRUYWciPT10fHwic2VsZmNsb3NlVGFnIj09dD9hKCk6cygpfWZ1bmN0aW9uIHYodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KToid29yZCI9PXQmJlQuYWxsb3dVbnF1b3RlZD8odz0ic3RyaW5nIixzKCkpOih3PSJlcnJvciIsImVuZFRhZyI9PXR8fCJzZWxmQ2xvc2VUYWciPT10P2EoKTpzKCkpfWZ1bmN0aW9uIHkodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KTphKCl9dmFyIHgsYixDLGssdyxMPXQuaW5kZW50VW5pdCxTPWUubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yfHwxLE09ZS5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnfHwhMCxUPWUuaHRtbE1vZGU/e2F1dG9TZWxmQ2xvc2Vyczp7YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxjb21tYW5kOiEwLGVtYmVkOiEwLGZyYW1lOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LGltcGxpY2l0bHlDbG9zZWQ6e2RkOiEwLGxpOiEwLG9wdGdyb3VwOiEwLG9wdGlvbjohMCxwOiEwLHJwOiEwLHJ0OiEwLHRib2R5OiEwLHRkOiEwLHRmb290OiEwLHRoOiEwLHRyOiEwfSxjb250ZXh0R3JhYmJlcnM6e2RkOntkZDohMCxkdDohMH0sZHQ6e2RkOiEwLGR0OiEwfSxsaTp7bGk6ITB9LG9wdGlvbjp7b3B0aW9uOiEwLG9wdGdyb3VwOiEwfSxvcHRncm91cDp7b3B0Z3JvdXA6ITB9LHA6e2FkZHJlc3M6ITAsYXJ0aWNsZTohMCxhc2lkZTohMCxibG9ja3F1b3RlOiEwLGRpcjohMCxkaXY6ITAsZGw6ITAsZmllbGRzZXQ6ITAsZm9vdGVyOiEwLGZvcm06ITAsaDE6ITAsaDI6ITAsaDM6ITAsaDQ6ITAsaDU6ITAsaDY6ITAsaGVhZGVyOiEwLGhncm91cDohMCxocjohMCxtZW51OiEwLG5hdjohMCxvbDohMCxwOiEwLHByZTohMCxzZWN0aW9uOiEwLHRhYmxlOiEwLHVsOiEwfSxycDp7cnA6ITAscnQ6ITB9LHJ0OntycDohMCxydDohMH0sdGJvZHk6e3Rib2R5OiEwLHRmb290OiEwfSx0ZDp7dGQ6ITAsdGg6ITB9LHRmb290Ont0Ym9keTohMH0sdGg6e3RkOiEwLHRoOiEwfSx0aGVhZDp7dGJvZHk6ITAsdGZvb3Q6ITB9LHRyOnt0cjohMH19LGRvTm90SW5kZW50OntwcmU6ITB9LGFsbG93VW5xdW90ZWQ6ITAsYWxsb3dNaXNzaW5nOiEwfTp7YXV0b1NlbGZDbG9zZXJzOnt9LGltcGxpY2l0bHlDbG9zZWQ6e30sY29udGV4dEdyYWJiZXJzOnt9LGRvTm90SW5kZW50Ont9LGFsbG93VW5xdW90ZWQ6ITEsYWxsb3dNaXNzaW5nOiExfSxBPWUuYWxpZ25DREFUQTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybnt0b2tlbml6ZTpyLGNjOltdLGluZGVudGVkOjAsc3RhcnRPZkxpbmU6ITAsdGFnTmFtZTpudWxsLHRhZ1N0YXJ0Om51bGwsY29udGV4dDpudWxsfX0sdG9rZW46ZnVuY3Rpb24odCxlKXtpZighZS50YWdOYW1lJiZ0LnNvbCgpJiYoZS5zdGFydE9mTGluZT0hMCxlLmluZGVudGVkPXQuaW5kZW50YXRpb24oKSksdC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3c9Yj14PW51bGw7dmFyIHI9ZS50b2tlbml6ZSh0LGUpO2lmKGUudHlwZT1iLChyfHxiKSYmImNvbW1lbnQiIT1yKWZvcihDPWUsaz10Ozspe3ZhciBuPWUuY2MucG9wKCl8fGY7aWYobihifHxyKSlicmVha31yZXR1cm4gZS5zdGFydE9mTGluZT0hMSx3JiYocj0iZXJyb3IiPT13P3IrIiBlcnJvciI6dykscn0saW5kZW50OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10LmNvbnRleHQ7aWYodC50b2tlbml6ZS5pc0luQXR0cmlidXRlKXJldHVybiB0LnN0cmluZ1N0YXJ0Q29sKzE7aWYodC50b2tlbml6ZSE9biYmdC50b2tlbml6ZSE9cnx8byYmby5ub0luZGVudClyZXR1cm4gaT9pLm1hdGNoKC9eKFxzKikvKVswXS5sZW5ndGg6MDtpZih0LnRhZ05hbWUpcmV0dXJuIE0/dC50YWdTdGFydCt0LnRhZ05hbWUubGVuZ3RoKzI6dC50YWdTdGFydCtMKlM7aWYoQSYmLzwhXFtDREFUQVxbLy50ZXN0KGUpKXJldHVybiAwO2ZvcihvJiYvXjxcLy8udGVzdChlKSYmKG89by5wcmV2KTtvJiYhby5zdGFydE9mTGluZTspbz1vLnByZXY7cmV0dXJuIG8/by5pbmRlbnQrTDowfSxlbGVjdHJpY0NoYXJzOiIvIixibG9ja0NvbW1lbnRTdGFydDoiPCEtLSIsYmxvY2tDb21tZW50RW5kOiItLT4iLGNvbmZpZ3VyYXRpb246ZS5odG1sTW9kZT8iaHRtbCI6InhtbCIsaGVscGVyVHlwZTplLmh0bWxNb2RlPyJodG1sIjoieG1sIn19KSxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveG1sIiwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCJ4bWwiKSxDb2RlTWlycm9yLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIil8fENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIix7bmFtZToieG1sIixodG1sTW9kZTohMH0pO1BLBwiT1g9diDIAAIgyAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABwAAABzdGF0aWNcbGliXGNvZGVtaXJyb3IubWluLmpzd2luZG93LkNvZGVNaXJyb3I9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChyLG4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChyLG4pO3RoaXMub3B0aW9ucz1uPW58fHt9O2Zvcih2YXIgaSBpbiBhbykhbi5oYXNPd25Qcm9wZXJ0eShpKSYmYW8uaGFzT3duUHJvcGVydHkoaSkmJihuW2ldPWFvW2ldKTtoKG4pO3ZhciBvPSJzdHJpbmciPT10eXBlb2Ygbi52YWx1ZT8wOm4udmFsdWUuZmlyc3QsbD10aGlzLmRpc3BsYXk9ZShyLG8pO2wud3JhcHBlci5Db2RlTWlycm9yPXRoaXMsdSh0aGlzKSxuLmF1dG9mb2N1cyYmIVZpJiZwZSh0aGlzKSx0aGlzLnN0YXRlPXtrZXlNYXBzOltdLG92ZXJsYXlzOltdLG1vZGVHZW46MCxvdmVyd3JpdGU6ITEsZm9jdXNlZDohMSxzdXBwcmVzc0VkaXRzOiExLHBhc3RlSW5jb21pbmc6ITEsZHJhZ2dpbmdUZXh0OiExLGhpZ2hsaWdodDpuZXcgJG59LHModGhpcyksbi5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIik7dmFyIGE9bi52YWx1ZTsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyB3byhuLnZhbHVlLG4ubW9kZSkpLGxlKHRoaXMscG4pKHRoaXMsYSksQWkmJnNldFRpbWVvdXQoaWkoZGUsdGhpcywhMCksMjApLG1lKHRoaXMpO3ZhciBjO3RyeXtjPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXR9Y2F0Y2goZil7fWN8fG4uYXV0b2ZvY3VzJiYhVmk/c2V0VGltZW91dChpaShFZSx0aGlzKSwyMCk6emUodGhpcyksbGUodGhpcyxmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzbylzby5wcm9wZXJ0eUlzRW51bWVyYWJsZSh0KSYmc29bdF0odGhpcyxuW3RdLHVvKTtmb3IodmFyIGU9MDtlPHBvLmxlbmd0aDsrK2UpcG9bZV0odGhpcyl9KSgpfWZ1bmN0aW9uIGUodCxlKXt2YXIgcj17fSxuPXIuaW5wdXQ9c2koInRleHRhcmVhIixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmU7IGZvbnQtc2l6ZTogNHB4OyIpO3JldHVybiBXaT9uLnN0eWxlLndpZHRoPSIxMDAwcHgiOm4uc2V0QXR0cmlidXRlKCJ3cmFwIiwib2ZmIiksR2kmJihuLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkIGJsYWNrIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0Iiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCJmYWxzZSIpLHIuaW5wdXREaXY9c2koImRpdiIsW25dLG51bGwsIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iiksci5zY3JvbGxiYXJIPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsImhlaWdodDogMXB4IildLCJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKSxyLnNjcm9sbGJhclY9c2koImRpdiIsW3NpKCJkaXYiLG51bGwsbnVsbCwid2lkdGg6IDFweCIpXSwiQ29kZU1pcnJvci12c2Nyb2xsYmFyIiksci5zY3JvbGxiYXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIiksci5ndXR0ZXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIiksci5saW5lRGl2PXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY29kZSIpLHIuc2VsZWN0aW9uRGl2PXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxIiksci5jdXJzb3I9c2koImRpdiIsIsKgIiwiQ29kZU1pcnJvci1jdXJzb3IiKSxyLm90aGVyQ3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIiksci5tZWFzdXJlPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItbWVhc3VyZSIpLHIubGluZVNwYWNlPXNpKCJkaXYiLFtyLm1lYXN1cmUsci5zZWxlY3Rpb25EaXYsci5saW5lRGl2LHIuY3Vyc29yLHIub3RoZXJDdXJzb3JdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpLHIubW92ZXI9c2koImRpdiIsW3NpKCJkaXYiLFtyLmxpbmVTcGFjZV0sIkNvZGVNaXJyb3ItbGluZXMiKV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIiksci5zaXplcj1zaSgiZGl2Iixbci5tb3Zlcl0sIkNvZGVNaXJyb3Itc2l6ZXIiKSxyLmhlaWdodEZvcmNlcj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAiK1RvKyJweDsgd2lkdGg6IDFweDsiKSxyLmd1dHRlcnM9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXJzIiksci5saW5lR3V0dGVyPW51bGwsci5zY3JvbGxlcj1zaSgiZGl2Iixbci5zaXplcixyLmhlaWdodEZvcmNlcixyLmd1dHRlcnNdLCJDb2RlTWlycm9yLXNjcm9sbCIpLHIuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIi0xIiksci53cmFwcGVyPXNpKCJkaXYiLFtyLmlucHV0RGl2LHIuc2Nyb2xsYmFySCxyLnNjcm9sbGJhclYsci5zY3JvbGxiYXJGaWxsZXIsci5ndXR0ZXJGaWxsZXIsci5zY3JvbGxlcl0sIkNvZGVNaXJyb3IiKSxIaSYmKHIuZ3V0dGVycy5zdHlsZS56SW5kZXg9LTEsci5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQ9MCksdC5hcHBlbmRDaGlsZD90LmFwcGVuZENoaWxkKHIud3JhcHBlcik6dChyLndyYXBwZXIpLEdpJiYobi5zdHlsZS53aWR0aD0iMHB4IiksV2l8fChyLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCksRmk/KHIuaW5wdXREaXYuc3R5bGUuaGVpZ2h0PSIxcHgiLHIuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIik6SGkmJihyLnNjcm9sbGJhckguc3R5bGUubWluV2lkdGg9ci5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPSIxOHB4Iiksci52aWV3T2Zmc2V0PXIubGFzdFNpemVDPTAsci5zaG93aW5nRnJvbT1yLnNob3dpbmdUbz1lLHIubGluZU51bVdpZHRoPXIubGluZU51bUlubmVyV2lkdGg9ci5saW5lTnVtQ2hhcnM9bnVsbCxyLnByZXZJbnB1dD0iIixyLmFsaWduV2lkZ2V0cz0hMSxyLnBvbGxpbmdGYXN0PSExLHIucG9sbD1uZXcgJG4sci5jYWNoZWRDaGFyV2lkdGg9ci5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsci5tZWFzdXJlTGluZUNhY2hlPVtdLHIubWVhc3VyZUxpbmVDYWNoZVBvcz0wLHIuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxyLm1heExpbmU9bnVsbCxyLm1heExpbmVMZW5ndGg9MCxyLm1heExpbmVDaGFuZ2VkPSExLHIud2hlZWxEWD1yLndoZWVsRFk9ci53aGVlbFN0YXJ0WD1yLndoZWVsU3RhcnRZPW51bGwscn1mdW5jdGlvbiByKGUpe2UuZG9jLm1vZGU9dC5nZXRNb2RlKGUub3B0aW9ucyxlLmRvYy5tb2RlT3B0aW9uKSxlLmRvYy5pdGVyKGZ1bmN0aW9uKHQpe3Quc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpfSksZS5kb2MuZnJvbnRpZXI9ZS5kb2MuZmlyc3QsVyhlLDEwMCksZS5zdGF0ZS5tb2RlR2VuKyssZS5jdXJPcCYmdWUoZSl9ZnVuY3Rpb24gbih0KXt0Lm9wdGlvbnMubGluZVdyYXBwaW5nPyh0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIix0LmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGg9IiIpOih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCIiKSxmKHQpKSxvKHQpLHVlKHQpLF8odCksc2V0VGltZW91dChmdW5jdGlvbigpe2QodCl9LDEwMCl9ZnVuY3Rpb24gaSh0KXt2YXIgZT1yZSh0LmRpc3BsYXkpLHI9dC5vcHRpb25zLmxpbmVXcmFwcGluZyxuPXImJk1hdGgubWF4KDUsdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoL25lKHQuZGlzcGxheSktMyk7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBWcih0LmRvYyxpKT8wOnI/KE1hdGguY2VpbChpLnRleHQubGVuZ3RoL24pfHwxKSplOmV9fWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5kb2Mscj1pKHQpO2UuaXRlcihmdW5jdGlvbih0KXt2YXIgZT1yKHQpO2UhPXQuaGVpZ2h0JiZ5bih0LGUpfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT12b1t0Lm9wdGlvbnMua2V5TWFwXSxyPWUuc3R5bGU7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1rZXltYXAtXFMrL2csIiIpKyhyPyIgY20ta2V5bWFwLSIrcjoiIiksdC5zdGF0ZS5kaXNhYmxlSW5wdXQ9ZS5kaXNhYmxlSW5wdXR9ZnVuY3Rpb24gcyh0KXt0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLXMtXFMrL2csIiIpK3Qub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywiIGNtLXMtIiksXyh0KX1mdW5jdGlvbiBhKHQpe3UodCksdWUodCksc2V0VGltZW91dChmdW5jdGlvbigpe2codCl9LDIwKX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQuZGlzcGxheS5ndXR0ZXJzLHI9dC5vcHRpb25zLmd1dHRlcnM7YWkoZSk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl0sbz1lLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyICIraSkpOyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIj09aSYmKHQuZGlzcGxheS5saW5lR3V0dGVyPW8sby5zdHlsZS53aWR0aD0odC5kaXNwbGF5LmxpbmVOdW1XaWR0aHx8MSkrInB4Iil9ZS5zdHlsZS5kaXNwbGF5PW4/IiI6Im5vbmUifWZ1bmN0aW9uIGModCxlKXtpZigwPT1lLmhlaWdodClyZXR1cm4gMDtmb3IodmFyIHIsbj1lLnRleHQubGVuZ3RoLGk9ZTtyPVJyKGkpOyl7dmFyIG89ci5maW5kKCk7aT1nbih0LG8uZnJvbS5saW5lKSxuKz1vLmZyb20uY2gtby50by5jaH1mb3IoaT1lO3I9QnIoaSk7KXt2YXIgbz1yLmZpbmQoKTtuLT1pLnRleHQubGVuZ3RoLW8uZnJvbS5jaCxpPWduKHQsby50by5saW5lKSxuKz1pLnRleHQubGVuZ3RoLW8udG8uY2h9cmV0dXJuIG59ZnVuY3Rpb24gZih0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYztlLm1heExpbmU9Z24ocixyLmZpcnN0KSxlLm1heExpbmVMZW5ndGg9YyhyLGUubWF4TGluZSksZS5tYXhMaW5lQ2hhbmdlZD0hMCxyLml0ZXIoZnVuY3Rpb24odCl7dmFyIG49YyhyLHQpO24+ZS5tYXhMaW5lTGVuZ3RoJiYoZS5tYXhMaW5lTGVuZ3RoPW4sZS5tYXhMaW5lPXQpfSl9ZnVuY3Rpb24gaCh0KXt2YXIgZT10aSh0Lmd1dHRlcnMsIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiKTstMT09ZSYmdC5saW5lTnVtYmVycz90Lmd1dHRlcnM9dC5ndXR0ZXJzLmNvbmNhdChbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSk6ZT4tMSYmIXQubGluZU51bWJlcnMmJih0Lmd1dHRlcnM9dC5ndXR0ZXJzLnNsaWNlKDApLHQuZ3V0dGVycy5zcGxpY2UoZSwxKSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYy5oZWlnaHQsbj1yK0YoZSk7ZS5zaXplci5zdHlsZS5taW5IZWlnaHQ9ZS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wPW4rInB4IixlLmd1dHRlcnMuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KG4sZS5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8pKyJweCI7dmFyIGk9TWF0aC5tYXgobixlLnNjcm9sbGVyLnNjcm9sbEhlaWdodCksbz1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoPmUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrMSxsPWk+ZS5zY3JvbGxlci5jbGllbnRIZWlnaHQrMTtsPyhlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFyVi5zdHlsZS5ib3R0b209bz9kaShlLm1lYXN1cmUpKyJweCI6IjAiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1pLWUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0K2Uuc2Nyb2xsYmFyVi5jbGllbnRIZWlnaHQrInB4Iik6KGUuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5PSIiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD0iMCIpLG8/KGUuc2Nyb2xsYmFySC5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJILnN0eWxlLnJpZ2h0PWw/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoLWUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrZS5zY3JvbGxiYXJILmNsaWVudFdpZHRoKyJweCIpOihlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iMCIpLG8mJmw/KGUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQ9ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGg9ZGkoZS5tZWFzdXJlKSsicHgiKTplLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSIiLG8mJnQub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciYmdC5vcHRpb25zLmZpeGVkR3V0dGVyPyhlLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWRpKGUubWVhc3VyZSkrInB4IixlLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aD1lLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4Iik6ZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixQaSYmMD09PWRpKGUubWVhc3VyZSkmJihlLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGg9ZS5zY3JvbGxiYXJILnN0eWxlLm1pbkhlaWdodD1SaT8iMThweCI6IjEycHgiLGUuc2Nyb2xsYmFyVi5zdHlsZS5wb2ludGVyRXZlbnRzPWUuc2Nyb2xsYmFySC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIil9ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49dC5zY3JvbGxlci5zY3JvbGxUb3AsaT10LndyYXBwZXIuY2xpZW50SGVpZ2h0OyJudW1iZXIiPT10eXBlb2Ygcj9uPXI6ciYmKG49ci50b3AsaT1yLmJvdHRvbS1yLnRvcCksbj1NYXRoLmZsb29yKG4tSSh0KSk7dmFyIG89TWF0aC5jZWlsKG4raSk7cmV0dXJue2Zyb206eG4oZSxuKSx0bzp4bihlLG8pfX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuZGlzcGxheTtpZihlLmFsaWduV2lkZ2V0c3x8ZS5ndXR0ZXJzLmZpcnN0Q2hpbGQmJnQub3B0aW9ucy5maXhlZEd1dHRlcil7Zm9yKHZhciByPXkoZSktZS5zY3JvbGxlci5zY3JvbGxMZWZ0K3QuZG9jLnNjcm9sbExlZnQsbj1lLmd1dHRlcnMub2Zmc2V0V2lkdGgsaT1yKyJweCIsbz1lLmxpbmVEaXYuZmlyc3RDaGlsZDtvO289by5uZXh0U2libGluZylpZihvLmFsaWduYWJsZSlmb3IodmFyIGw9MCxzPW8uYWxpZ25hYmxlO2w8cy5sZW5ndGg7KytsKXNbbF0uc3R5bGUubGVmdD1pO3Qub3B0aW9ucy5maXhlZEd1dHRlciYmKGUuZ3V0dGVycy5zdHlsZS5sZWZ0PXIrbisicHgiKX19ZnVuY3Rpb24gbSh0KXtpZighdC5vcHRpb25zLmxpbmVOdW1iZXJzKXJldHVybiExO3ZhciBlPXQuZG9jLHI9dih0Lm9wdGlvbnMsZS5maXJzdCtlLnNpemUtMSksbj10LmRpc3BsYXk7aWYoci5sZW5ndGghPW4ubGluZU51bUNoYXJzKXt2YXIgaT1uLm1lYXN1cmUuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3NpKCJkaXYiLHIpXSwiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIpKSxvPWkuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCxsPWkub2Zmc2V0V2lkdGgtbztyZXR1cm4gbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPSIiLG4ubGluZU51bUlubmVyV2lkdGg9TWF0aC5tYXgobyxuLmxpbmVHdXR0ZXIub2Zmc2V0V2lkdGgtbCksbi5saW5lTnVtV2lkdGg9bi5saW5lTnVtSW5uZXJXaWR0aCtsLG4ubGluZU51bUNoYXJzPW4ubGluZU51bUlubmVyV2lkdGg/ci5sZW5ndGg6LTEsbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPW4ubGluZU51bVdpZHRoKyJweCIsITB9cmV0dXJuITF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiBTdHJpbmcodC5saW5lTnVtYmVyRm9ybWF0dGVyKGUrdC5maXJzdExpbmVOdW1iZXIpKX1mdW5jdGlvbiB5KHQpe3JldHVybiBmaSh0LnNjcm9sbGVyKS5sZWZ0LWZpKHQuc2l6ZXIpLmxlZnR9ZnVuY3Rpb24gYih0LGUscixuKXtmb3IodmFyIGksbz10LmRpc3BsYXkuc2hvd2luZ0Zyb20sbD10LmRpc3BsYXkuc2hvd2luZ1RvLHM9cCh0LmRpc3BsYXksdC5kb2MsciksYT0hMDs7YT0hMSl7dmFyIHU9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoO2lmKCF4KHQsZSxzLG4pKWJyZWFrO2lmKGk9ITAsZT1bXSxBKHQpLGQodCksYSYmdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmdSE9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKW49ITA7ZWxzZSBpZihuPSExLHImJihyPU1hdGgubWluKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwibnVtYmVyIj09dHlwZW9mIHI/cjpyLnRvcCkpLHM9cCh0LmRpc3BsYXksdC5kb2Mscikscy5mcm9tPj10LmRpc3BsYXkuc2hvd2luZ0Zyb20mJnMudG88PXQuZGlzcGxheS5zaG93aW5nVG8pYnJlYWt9cmV0dXJuIGkmJihVbih0LCJ1cGRhdGUiLHQpLCh0LmRpc3BsYXkuc2hvd2luZ0Zyb20hPW98fHQuZGlzcGxheS5zaG93aW5nVG8hPWwpJiZVbih0LCJ2aWV3cG9ydENoYW5nZSIsdCx0LmRpc3BsYXkuc2hvd2luZ0Zyb20sdC5kaXNwbGF5LnNob3dpbmdUbykpLGl9ZnVuY3Rpb24geCh0LGUscixuKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYztpZighaS53cmFwcGVyLmNsaWVudFdpZHRoKXJldHVybiBpLnNob3dpbmdGcm9tPWkuc2hvd2luZ1RvPW8uZmlyc3QsaS52aWV3T2Zmc2V0PTAsdm9pZCAwO2lmKCEoIW4mJjA9PWUubGVuZ3RoJiZyLmZyb20+aS5zaG93aW5nRnJvbSYmci50bzxpLnNob3dpbmdUbykpe20odCkmJihlPVt7ZnJvbTpvLmZpcnN0LHRvOm8uZmlyc3Qrby5zaXplfV0pO3ZhciBsPWkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdD1pLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4IjtpLnNjcm9sbGJhckguc3R5bGUubGVmdD10Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bDoiMCI7dmFyIHM9MS8wO2lmKHQub3B0aW9ucy5saW5lTnVtYmVycylmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSllW2FdLmRpZmYmJmVbYV0uZnJvbTxzJiYocz1lW2FdLmZyb20pO3ZhciB1PW8uZmlyc3Qrby5zaXplLGM9TWF0aC5tYXgoci5mcm9tLXQub3B0aW9ucy52aWV3cG9ydE1hcmdpbixvLmZpcnN0KSxmPU1hdGgubWluKHUsci50byt0Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4pO2lmKGkuc2hvd2luZ0Zyb208YyYmYy1pLnNob3dpbmdGcm9tPDIwJiYoYz1NYXRoLm1heChvLmZpcnN0LGkuc2hvd2luZ0Zyb20pKSxpLnNob3dpbmdUbz5mJiZpLnNob3dpbmdUby1mPDIwJiYoZj1NYXRoLm1pbih1LGkuc2hvd2luZ1RvKSksUWkpZm9yKGM9Ym4oR3IobyxnbihvLGMpKSk7dT5mJiZWcihvLGduKG8sZikpOykrK2Y7dmFyIGg9W3tmcm9tOk1hdGgubWF4KGkuc2hvd2luZ0Zyb20sby5maXJzdCksdG86TWF0aC5taW4oaS5zaG93aW5nVG8sdSl9XTtpZihoPWhbMF0uZnJvbT49aFswXS50bz9bXTpMKGgsZSksUWkpZm9yKHZhciBhPTA7YTxoLmxlbmd0aDsrK2EpZm9yKHZhciBkLHA9aFthXTtkPUJyKGduKG8scC50by0xKSk7KXt2YXIgZz1kLmZpbmQoKS5mcm9tLmxpbmU7aWYoIShnPnAuZnJvbSkpe2guc3BsaWNlKGEtLSwxKTticmVha31wLnRvPWd9Zm9yKHZhciB2PTAsYT0wO2E8aC5sZW5ndGg7KythKXt2YXIgcD1oW2FdO3AuZnJvbTxjJiYocC5mcm9tPWMpLHAudG8+ZiYmKHAudG89ZikscC5mcm9tPj1wLnRvP2guc3BsaWNlKGEtLSwxKTp2Kz1wLnRvLXAuZnJvbX1pZighbiYmdj09Zi1jJiZjPT1pLnNob3dpbmdGcm9tJiZmPT1pLnNob3dpbmdUbylyZXR1cm4gdyh0KSx2b2lkIDA7aC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZnJvbS1lLmZyb219KTt0cnl7dmFyIHk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudH1jYXRjaChiKXt9LjcqKGYtYyk+diYmKGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSJub25lIiksUyh0LGMsZixoLHMpLGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSIiLHkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPXkmJnkub2Zmc2V0SGVpZ2h0JiZ5LmZvY3VzKCk7dmFyIHg9YyE9aS5zaG93aW5nRnJvbXx8ZiE9aS5zaG93aW5nVG98fGkubGFzdFNpemVDIT1pLndyYXBwZXIuY2xpZW50SGVpZ2h0O3JldHVybiB4JiYoaS5sYXN0U2l6ZUM9aS53cmFwcGVyLmNsaWVudEhlaWdodCxXKHQsNDAwKSksaS5zaG93aW5nRnJvbT1jLGkuc2hvd2luZ1RvPWYsQyh0KSx3KHQpLCEwfX1mdW5jdGlvbiBDKHQpe2Zvcih2YXIgZSxyPXQuZGlzcGxheSxuPXIubGluZURpdi5vZmZzZXRUb3AsaT1yLmxpbmVEaXYuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylpZihpLmxpbmVPYmope2lmKEhpKXt2YXIgbz1pLm9mZnNldFRvcCtpLm9mZnNldEhlaWdodDtlPW8tbixuPW99ZWxzZXt2YXIgbD1maShpKTtlPWwuYm90dG9tLWwudG9wfXZhciBzPWkubGluZU9iai5oZWlnaHQtZTtpZigyPmUmJihlPXJlKHIpKSxzPi4wMDF8fC0uMDAxPnMpe3luKGkubGluZU9iaixlKTt2YXIgYT1pLmxpbmVPYmoud2lkZ2V0cztpZihhKWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7Kyt1KWFbdV0uaGVpZ2h0PWFbdV0ubm9kZS5vZmZzZXRIZWlnaHR9fX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQuZGlzcGxheS52aWV3T2Zmc2V0PUNuKHQsZ24odC5kb2MsdC5kaXNwbGF5LnNob3dpbmdGcm9tKSk7dC5kaXNwbGF5Lm1vdmVyLnN0eWxlLnRvcD1lKyJweCJ9ZnVuY3Rpb24gTCh0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGh8fDA7bj5yOysrcil7Zm9yKHZhciBpPWVbcl0sbz1bXSxsPWkuZGlmZnx8MCxzPTAsYT10Lmxlbmd0aDthPnM7KytzKXt2YXIgdT10W3NdO2kudG88PXUuZnJvbSYmaS5kaWZmP28ucHVzaCh7ZnJvbTp1LmZyb20rbCx0bzp1LnRvK2x9KTppLnRvPD11LmZyb218fGkuZnJvbT49dS50bz9vLnB1c2godSk6KGkuZnJvbT51LmZyb20mJm8ucHVzaCh7ZnJvbTp1LmZyb20sdG86aS5mcm9tfSksaS50bzx1LnRvJiZvLnB1c2goe2Zyb206aS50bytsLHRvOnUudG8rbH0pKX10PW99cmV0dXJuIHR9ZnVuY3Rpb24gayh0KXtmb3IodmFyIGU9dC5kaXNwbGF5LHI9e30sbj17fSxpPWUuZ3V0dGVycy5maXJzdENoaWxkLG89MDtpO2k9aS5uZXh0U2libGluZywrK28pclt0Lm9wdGlvbnMuZ3V0dGVyc1tvXV09aS5vZmZzZXRMZWZ0LG5bdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0V2lkdGg7cmV0dXJue2ZpeGVkUG9zOnkoZSksZ3V0dGVyVG90YWxXaWR0aDplLmd1dHRlcnMub2Zmc2V0V2lkdGgsZ3V0dGVyTGVmdDpyLGd1dHRlcldpZHRoOm4sd3JhcHBlcldpZHRoOmUud3JhcHBlci5jbGllbnRXaWR0aH19ZnVuY3Rpb24gUyh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSl7dmFyIHI9ZS5uZXh0U2libGluZztyZXR1cm4gV2kmJktpJiZ0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PT1lPyhlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGUubGluZU9iaj1udWxsKTplLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSkscn12YXIgbD1rKHQpLHM9dC5kaXNwbGF5LGE9dC5vcHRpb25zLmxpbmVOdW1iZXJzO24ubGVuZ3RofHxXaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldHx8YWkocy5saW5lRGl2KTt2YXIgdT1zLmxpbmVEaXYsYz11LmZpcnN0Q2hpbGQsZj1uLnNoaWZ0KCksaD1lO2Zvcih0LmRvYy5pdGVyKGUscixmdW5jdGlvbihlKXtpZihmJiZmLnRvPT1oJiYoZj1uLnNoaWZ0KCkpLFZyKHQuZG9jLGUpKXtpZigwIT1lLmhlaWdodCYmeW4oZSwwKSxlLndpZGdldHMmJmMmJmMucHJldmlvdXNTaWJsaW5nKWZvcih2YXIgcj0wO3I8ZS53aWRnZXRzLmxlbmd0aDsrK3Ipe3ZhciBzPWUud2lkZ2V0c1tyXTtpZihzLnNob3dJZkhpZGRlbil7dmFyIGQ9Yy5wcmV2aW91c1NpYmxpbmc7aWYoL3ByZS9pLnRlc3QoZC5ub2RlTmFtZSkpe3ZhciBwPXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIik7ZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwLGQpLHAuYXBwZW5kQ2hpbGQoZCksZD1wfXZhciBnPWQuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3Mubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTtzLmhhbmRsZU1vdXNlRXZlbnRzfHwoZy5pZ25vcmVFdmVudHM9ITApLFQocyxnLGQsbCl9fX1lbHNlIGlmKGYmJmYuZnJvbTw9aCYmZi50bz5oKXtmb3IoO2MubGluZU9iaiE9ZTspYz1vKGMpO2EmJmg+PWkmJmMubGluZU51bWJlciYmY2koYy5saW5lTnVtYmVyLHYodC5vcHRpb25zLGgpKSxjPWMubmV4dFNpYmxpbmd9ZWxzZXtpZihlLndpZGdldHMpZm9yKHZhciBtLHk9MCxiPWM7YiYmMjA+eTsrK3ksYj1iLm5leHRTaWJsaW5nKWlmKGIubGluZU9iaj09ZSYmL2Rpdi9pLnRlc3QoYi5ub2RlTmFtZSkpe209YjticmVha312YXIgeD1NKHQsZSxoLGwsbSk7aWYoeCE9bSl1Lmluc2VydEJlZm9yZSh4LGMpO2Vsc2V7Zm9yKDtjIT1tOyljPW8oYyk7Yz1jLm5leHRTaWJsaW5nfXgubGluZU9iaj1lfSsraH0pO2M7KWM9byhjKX1mdW5jdGlvbiBNKHQsZSxyLG4saSl7dmFyIG8sbD1ybih0LGUpLHM9bC5wcmUsYT1lLmd1dHRlck1hcmtlcnMsdT10LmRpc3BsYXksYz1sLmJnQ2xhc3M/bC5iZ0NsYXNzKyIgIisoZS5iZ0NsYXNzfHwiIik6ZS5iZ0NsYXNzO2lmKCEodC5vcHRpb25zLmxpbmVOdW1iZXJzfHxhfHxjfHxlLndyYXBDbGFzc3x8ZS53aWRnZXRzKSlyZXR1cm4gcztpZihpKXtpLmFsaWduYWJsZT1udWxsO2Zvcih2YXIgZixoPSEwLGQ9MCxwPW51bGwsZz1pLmZpcnN0Q2hpbGQ7ZztnPWYpaWYoZj1nLm5leHRTaWJsaW5nLC9cYkNvZGVNaXJyb3ItbGluZXdpZGdldFxiLy50ZXN0KGcuY2xhc3NOYW1lKSl7Zm9yKHZhciBtPTA7bTxlLndpZGdldHMubGVuZ3RoOysrbSl7dmFyIHk9ZS53aWRnZXRzW21dO2lmKHkubm9kZT09Zy5maXJzdENoaWxkKXt5LmFib3ZlfHxwfHwocD1nKSxUKHksZyxpLG4pLCsrZDticmVha319aWYobT09ZS53aWRnZXRzLmxlbmd0aCl7aD0hMTticmVha319ZWxzZSBpLnJlbW92ZUNoaWxkKGcpO2kuaW5zZXJ0QmVmb3JlKHMscCksaCYmZD09ZS53aWRnZXRzLmxlbmd0aCYmKG89aSxpLmNsYXNzTmFtZT1lLndyYXBDbGFzc3x8IiIpfWlmKG98fChvPXNpKCJkaXYiLG51bGwsZS53cmFwQ2xhc3MsInBvc2l0aW9uOiByZWxhdGl2ZSIpLG8uYXBwZW5kQ2hpbGQocykpLGMmJm8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsYysiIENvZGVNaXJyb3ItbGluZWJhY2tncm91bmQiKSxvLmZpcnN0Q2hpbGQpLHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSl7dmFyIGI9by5pbnNlcnRCZWZvcmUoc2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrKHQub3B0aW9ucy5maXhlZEd1dHRlcj9uLmZpeGVkUG9zOi1uLmd1dHRlclRvdGFsV2lkdGgpKyJweCIpLG8uZmlyc3RDaGlsZCk7aWYodC5vcHRpb25zLmZpeGVkR3V0dGVyJiYoby5hbGlnbmFibGV8fChvLmFsaWduYWJsZT1bXSkpLnB1c2goYiksIXQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSYmYVsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdfHwoby5saW5lTnVtYmVyPWIuYXBwZW5kQ2hpbGQoc2koImRpdiIsdih0Lm9wdGlvbnMsciksIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKyJweDsgd2lkdGg6ICIrdS5saW5lTnVtSW5uZXJXaWR0aCsicHgiKSkpLGEpZm9yKHZhciB4PTA7eDx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt4KXt2YXIgQz10Lm9wdGlvbnMuZ3V0dGVyc1t4XSx3PWEuaGFzT3duUHJvcGVydHkoQykmJmFbQ107dyYmYi5hcHBlbmRDaGlsZChzaSgiZGl2Iixbd10sIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsImxlZnQ6ICIrbi5ndXR0ZXJMZWZ0W0NdKyJweDsgd2lkdGg6ICIrbi5ndXR0ZXJXaWR0aFtDXSsicHgiKSl9fWlmKEhpJiYoby5zdHlsZS56SW5kZXg9MiksZS53aWRnZXRzJiZvIT1pKWZvcih2YXIgbT0wLEw9ZS53aWRnZXRzO208TC5sZW5ndGg7KyttKXt2YXIgeT1MW21dLGs9c2koImRpdiIsW3kubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpO3kuaGFuZGxlTW91c2VFdmVudHN8fChrLmlnbm9yZUV2ZW50cz0hMCksVCh5LGssbyxuKSx5LmFib3ZlP28uaW5zZXJ0QmVmb3JlKGssdC5vcHRpb25zLmxpbmVOdW1iZXJzJiYwIT1lLmhlaWdodD9iOnMpOm8uYXBwZW5kQ2hpbGQoayksVW4oeSwicmVkcmF3Iil9cmV0dXJuIG99ZnVuY3Rpb24gVCh0LGUscixuKXtpZih0Lm5vSFNjcm9sbCl7KHIuYWxpZ25hYmxlfHwoci5hbGlnbmFibGU9W10pKS5wdXNoKGUpO3ZhciBpPW4ud3JhcHBlcldpZHRoO2Uuc3R5bGUubGVmdD1uLmZpeGVkUG9zKyJweCIsdC5jb3Zlckd1dHRlcnx8KGktPW4uZ3V0dGVyVG90YWxXaWR0aCxlLnN0eWxlLnBhZGRpbmdMZWZ0PW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSxlLnN0eWxlLndpZHRoPWkrInB4In10LmNvdmVyR3V0dGVyJiYoZS5zdHlsZS56SW5kZXg9NSxlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdC5ub0hTY3JvbGx8fChlLnN0eWxlLm1hcmdpbkxlZnQ9LW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LmRpc3BsYXkscj1qZSh0LmRvYy5zZWwuZnJvbSx0LmRvYy5zZWwudG8pO2lmKHJ8fHQub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZz9IKHQpOmUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIixyP2Uuc2VsZWN0aW9uRGl2LnN0eWxlLmRpc3BsYXk9Im5vbmUiOk4odCksdC5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3Ipe3ZhciBuPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2IiksaT1maShlLndyYXBwZXIpLG89ZmkoZS5saW5lRGl2KTtlLmlucHV0RGl2LnN0eWxlLnRvcD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRIZWlnaHQtMTAsbi50b3Arby50b3AtaS50b3ApKSsicHgiLGUuaW5wdXREaXYuc3R5bGUubGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRXaWR0aC0xMCxuLmxlZnQrby5sZWZ0LWkubGVmdCkpKyJweCJ9fWZ1bmN0aW9uIEgodCl7dmFyIGU9dC5kaXNwbGF5LHI9USh0LHQuZG9jLnNlbC5oZWFkLCJkaXYiKTtlLmN1cnNvci5zdHlsZS5sZWZ0PXIubGVmdCsicHgiLGUuY3Vyc29yLnN0eWxlLnRvcD1yLnRvcCsicHgiLGUuY3Vyc29yLnN0eWxlLmhlaWdodD1NYXRoLm1heCgwLHIuYm90dG9tLXIudG9wKSp0Lm9wdGlvbnMuY3Vyc29ySGVpZ2h0KyJweCIsZS5jdXJzb3Iuc3R5bGUuZGlzcGxheT0iIixyLm90aGVyPyhlLm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsZS5vdGhlckN1cnNvci5zdHlsZS5sZWZ0PXIub3RoZXIubGVmdCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUudG9wPXIub3RoZXIudG9wKyJweCIsZS5vdGhlckN1cnNvci5zdHlsZS5oZWlnaHQ9Ljg1KihyLm90aGVyLmJvdHRvbS1yLm90aGVyLnRvcCkrInB4Iik6ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIn1mdW5jdGlvbiBOKHQpe2Z1bmN0aW9uIGUodCxlLHIsbil7MD5lJiYoZT0wKSxsLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrdCsicHg7IHRvcDogIitlKyJweDsgd2lkdGg6ICIrKG51bGw9PXI/cy10OnIpKyJweDsgaGVpZ2h0OiAiKyhuLWUpKyJweCIpKX1mdW5jdGlvbiByKHIsbixvKXtmdW5jdGlvbiBsKGUsbil7cmV0dXJuIHEodCxZZShyLGUpLCJkaXYiLGYsbil9dmFyIHUsYyxmPWduKGksciksaD1mLnRleHQubGVuZ3RoO3JldHVybiBnaSh3bihmKSxufHwwLG51bGw9PW8/aDpvLGZ1bmN0aW9uKHQscixpKXt2YXIgZixkLHAsZz1sKHQsImxlZnQiKTtpZih0PT1yKWY9ZyxkPXA9Zy5sZWZ0O2Vsc2V7aWYoZj1sKHItMSwicmlnaHQiKSwicnRsIj09aSl7dmFyIG09ZztnPWYsZj1tfWQ9Zy5sZWZ0LHA9Zi5yaWdodH1udWxsPT1uJiYwPT10JiYoZD1hKSxmLnRvcC1nLnRvcD4zJiYoZShkLGcudG9wLG51bGwsZy5ib3R0b20pLGQ9YSxnLmJvdHRvbTxmLnRvcCYmZShkLGcuYm90dG9tLG51bGwsZi50b3ApKSxudWxsPT1vJiZyPT1oJiYocD1zKSwoIXV8fGcudG9wPHUudG9wfHxnLnRvcD09dS50b3AmJmcubGVmdDx1LmxlZnQpJiYodT1nKSwoIWN8fGYuYm90dG9tPmMuYm90dG9tfHxmLmJvdHRvbT09Yy5ib3R0b20mJmYucmlnaHQ+Yy5yaWdodCkmJihjPWYpLGErMT5kJiYoZD1hKSxlKGQsZi50b3AscC1kLGYuYm90dG9tKX0pLHtzdGFydDp1LGVuZDpjfX12YXIgbj10LmRpc3BsYXksaT10LmRvYyxvPXQuZG9jLnNlbCxsPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxzPW4ubGluZVNwYWNlLm9mZnNldFdpZHRoLGE9UCh0LmRpc3BsYXkpO2lmKG8uZnJvbS5saW5lPT1vLnRvLmxpbmUpcihvLmZyb20ubGluZSxvLmZyb20uY2gsby50by5jaCk7ZWxzZXt2YXIgdT1nbihpLG8uZnJvbS5saW5lKSxjPWduKGksby50by5saW5lKSxmPUdyKGksdSk9PUdyKGksYyksaD1yKG8uZnJvbS5saW5lLG8uZnJvbS5jaCxmP3UudGV4dC5sZW5ndGg6bnVsbCkuZW5kLGQ9cihvLnRvLmxpbmUsZj8wOm51bGwsby50by5jaCkuc3RhcnQ7ZiYmKGgudG9wPGQudG9wLTI/KGUoaC5yaWdodCxoLnRvcCxudWxsLGguYm90dG9tKSxlKGEsZC50b3AsZC5sZWZ0LGQuYm90dG9tKSk6ZShoLnJpZ2h0LGgudG9wLGQubGVmdC1oLnJpZ2h0LGguYm90dG9tKSksaC5ib3R0b208ZC50b3AmJmUoYSxoLmJvdHRvbSxudWxsLGQudG9wKX11aShuLnNlbGVjdGlvbkRpdixsKSxuLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSIifWZ1bmN0aW9uIEQodCl7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgZT10LmRpc3BsYXk7Y2xlYXJJbnRlcnZhbChlLmJsaW5rZXIpO3ZhciByPSEwO2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PSIiLHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU+MCYmKGUuYmxpbmtlcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PShyPSFyKT8iIjoiaGlkZGVuIn0sdC5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSkpfX1mdW5jdGlvbiBXKHQsZSl7dC5kb2MubW9kZS5zdGFydFN0YXRlJiZ0LmRvYy5mcm9udGllcjx0LmRpc3BsYXkuc2hvd2luZ1RvJiZ0LnN0YXRlLmhpZ2hsaWdodC5zZXQoZSxpaShPLHQpKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuZG9jO2lmKGUuZnJvbnRpZXI8ZS5maXJzdCYmKGUuZnJvbnRpZXI9ZS5maXJzdCksIShlLmZyb250aWVyPj10LmRpc3BsYXkuc2hvd2luZ1RvKSl7dmFyIHIsbj0rbmV3IERhdGUrdC5vcHRpb25zLndvcmtUaW1lLGk9YnIoZS5tb2RlLHoodCxlLmZyb250aWVyKSksbz1bXTtlLml0ZXIoZS5mcm9udGllcixNYXRoLm1pbihlLmZpcnN0K2Uuc2l6ZSx0LmRpc3BsYXkuc2hvd2luZ1RvKzUwMCksZnVuY3Rpb24obCl7aWYoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdGcm9tKXt2YXIgcz1sLnN0eWxlcztsLnN0eWxlcz1Rcih0LGwsaSwhMCk7Zm9yKHZhciBhPSFzfHxzLmxlbmd0aCE9bC5zdHlsZXMubGVuZ3RoLHU9MDshYSYmdTxzLmxlbmd0aDsrK3UpYT1zW3VdIT1sLnN0eWxlc1t1XTthJiYociYmci5lbmQ9PWUuZnJvbnRpZXI/ci5lbmQrKzpvLnB1c2gocj17c3RhcnQ6ZS5mcm9udGllcixlbmQ6ZS5mcm9udGllcisxfSkpLGwuc3RhdGVBZnRlcj1icihlLm1vZGUsaSl9ZWxzZSB0bih0LGwudGV4dCxpKSxsLnN0YXRlQWZ0ZXI9MD09ZS5mcm9udGllciU1P2JyKGUubW9kZSxpKTpudWxsO3JldHVybisrZS5mcm9udGllciwrbmV3IERhdGU+bj8oVyh0LHQub3B0aW9ucy53b3JrRGVsYXkpLCEwKTp2b2lkIDB9KSxvLmxlbmd0aCYmbGUodCxmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8by5sZW5ndGg7Kyt0KXVlKHRoaXMsb1t0XS5zdGFydCxvW3RdLmVuZCl9KSgpfX1mdW5jdGlvbiBFKHQsZSxyKXtmb3IodmFyIG4saSxvPXQuZG9jLGw9cj8tMTplLSh0LmRvYy5tb2RlLmlubmVyTW9kZT8xZTM6MTAwKSxzPWU7cz5sOy0tcyl7aWYoczw9by5maXJzdClyZXR1cm4gby5maXJzdDt2YXIgYT1nbihvLHMtMSk7aWYoYS5zdGF0ZUFmdGVyJiYoIXJ8fHM8PW8uZnJvbnRpZXIpKXJldHVybiBzO3ZhciB1PVpuKGEudGV4dCxudWxsLHQub3B0aW9ucy50YWJTaXplKTsobnVsbD09aXx8bj51KSYmKGk9cy0xLG49dSl9cmV0dXJuIGl9ZnVuY3Rpb24geih0LGUscil7dmFyIG49dC5kb2MsaT10LmRpc3BsYXk7aWYoIW4ubW9kZS5zdGFydFN0YXRlKXJldHVybiEwO3ZhciBvPUUodCxlLHIpLGw9bz5uLmZpcnN0JiZnbihuLG8tMSkuc3RhdGVBZnRlcjtyZXR1cm4gbD1sP2JyKG4ubW9kZSxsKTp4cihuLm1vZGUpLG4uaXRlcihvLGUsZnVuY3Rpb24ocil7dG4odCxyLnRleHQsbCk7dmFyIHM9bz09ZS0xfHwwPT1vJTV8fG8+PWkuc2hvd2luZ0Zyb20mJm88aS5zaG93aW5nVG87ci5zdGF0ZUFmdGVyPXM/YnIobi5tb2RlLGwpOm51bGwsKytvfSksciYmKG4uZnJvbnRpZXI9byksbH1mdW5jdGlvbiBJKHQpe3JldHVybiB0LmxpbmVTcGFjZS5vZmZzZXRUb3B9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5tb3Zlci5vZmZzZXRIZWlnaHQtdC5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIFAodCl7dmFyIGU9dWkodC5tZWFzdXJlLHNpKCJwcmUiLG51bGwsbnVsbCwidGV4dC1hbGlnbjogbGVmdCIpKS5hcHBlbmRDaGlsZChzaSgic3BhbiIsIngiKSk7cmV0dXJuIGUub2Zmc2V0TGVmdH1mdW5jdGlvbiBSKHQsZSxyLG4saSl7dmFyIG89LTE7aWYobj1ufHxWKHQsZSksbi5jcnVkZSl7dmFyIGw9bi5sZWZ0K3Iqbi53aWR0aDtyZXR1cm57bGVmdDpsLHJpZ2h0Omwrbi53aWR0aCx0b3A6bi50b3AsYm90dG9tOm4uYm90dG9tfX1mb3IodmFyIHM9cjs7cys9byl7dmFyIGE9bltzXTtpZihhKWJyZWFrOzA+byYmMD09cyYmKG89MSl9cmV0dXJuIGk9cz5yPyJsZWZ0IjpyPnM/InJpZ2h0IjppLCJsZWZ0Ij09aSYmYS5sZWZ0U2lkZT9hPWEubGVmdFNpZGU6InJpZ2h0Ij09aSYmYS5yaWdodFNpZGUmJihhPWEucmlnaHRTaWRlKSx7bGVmdDpyPnM/YS5yaWdodDphLmxlZnQscmlnaHQ6cz5yP2EubGVmdDphLnJpZ2h0LHRvcDphLnRvcCxib3R0b206YS5ib3R0b219fWZ1bmN0aW9uIEIodCxlKXtmb3IodmFyIHI9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO2lmKGkudGV4dD09ZS50ZXh0JiZpLm1hcmtlZFNwYW5zPT1lLm1hcmtlZFNwYW5zJiZ0LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg9PWkud2lkdGgmJmkuY2xhc3Nlcz09ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzKXJldHVybiBpfX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI9Qih0LGUpO3ImJihyLnRleHQ9ci5tZWFzdXJlPXIubWFya2VkU3BhbnM9bnVsbCl9ZnVuY3Rpb24gVih0LGUpe3ZhciByPUIodCxlKTtpZihyKXJldHVybiByLm1lYXN1cmU7dmFyIG49Syh0LGUpLGk9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbz17dGV4dDplLnRleHQsd2lkdGg6dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLG1hcmtlZFNwYW5zOmUubWFya2VkU3BhbnMsbWVhc3VyZTpuLGNsYXNzZXM6ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzfTtyZXR1cm4gMTY9PWkubGVuZ3RoP2lbKyt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyUxNl09bzppLnB1c2gobyksbn1mdW5jdGlvbiBLKHQsZSl7ZnVuY3Rpb24gcih0KXt2YXIgZT10LnRvcC1wLnRvcCxyPXQuYm90dG9tLXAudG9wO3I+diYmKHI9diksMD5lJiYoZT0wKTtmb3IodmFyIG49Zy5sZW5ndGgtMjtuPj0wO24tPTIpe3ZhciBpPWdbbl0sbz1nW24rMV07aWYoIShpPnJ8fGU+bykmJihlPj1pJiZvPj1yfHxpPj1lJiZyPj1vfHxNYXRoLm1pbihyLG8pLU1hdGgubWF4KGUsaSk+PXItZT4+MSkpe2dbbl09TWF0aC5taW4oZSxpKSxnW24rMV09TWF0aC5tYXgocixvKTticmVha319cmV0dXJuIDA+biYmKG49Zy5sZW5ndGgsZy5wdXNoKGUscikpLHtsZWZ0OnQubGVmdC1wLmxlZnQscmlnaHQ6dC5yaWdodC1wLmxlZnQsdG9wOm4sYm90dG9tOm51bGx9fWZ1bmN0aW9uIG4odCl7dC5ib3R0b209Z1t0LnRvcCsxXSx0LnRvcD1nW3QudG9wXX1pZighdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gVSh0LGUpO3ZhciBpPXQuZGlzcGxheSxvPW5pKGUudGV4dC5sZW5ndGgpLGw9cm4odCxlLG8sITApLnByZTtpZihBaSYmIUhpJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbC5jaGlsZE5vZGVzLmxlbmd0aD4xMDApe2Zvcih2YXIgcz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYT0xMCx1PWwuY2hpbGROb2Rlcy5sZW5ndGgsYz0wLGY9TWF0aC5jZWlsKHUvYSk7Zj5jOysrYyl7Zm9yKHZhciBoPXNpKCJkaXYiLG51bGwsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrIiksZD0wO2E+ZCYmdTsrK2QpaC5hcHBlbmRDaGlsZChsLmZpcnN0Q2hpbGQpLC0tdTtzLmFwcGVuZENoaWxkKGgpfWwuYXBwZW5kQ2hpbGQocyl9dWkoaS5tZWFzdXJlLGwpO3ZhciBwPWZpKGkubGluZURpdiksZz1bXSxtPW5pKGUudGV4dC5sZW5ndGgpLHY9bC5vZmZzZXRIZWlnaHQ7TmkmJmkubWVhc3VyZS5maXJzdCE9bCYmdWkoaS5tZWFzdXJlLGwpO2Zvcih2YXIgeSxjPTA7YzxvLmxlbmd0aDsrK2MpaWYoeT1vW2NdKXt2YXIgYj15LHg9bnVsbDtpZigvXGJDb2RlTWlycm9yLXdpZGdldFxiLy50ZXN0KHkuY2xhc3NOYW1lKSYmeS5nZXRDbGllbnRSZWN0cyl7MT09eS5maXJzdENoaWxkLm5vZGVUeXBlJiYoYj15LmZpcnN0Q2hpbGQpO3ZhciBDPWIuZ2V0Q2xpZW50UmVjdHMoKTtDLmxlbmd0aD4xJiYoeD1tW2NdPXIoQ1swXSkseC5yaWdodFNpZGU9cihDW0MubGVuZ3RoLTFdKSl9eHx8KHg9bVtjXT1yKGZpKGIpKSkseS5tZWFzdXJlUmlnaHQmJih4LnJpZ2h0PWZpKHkubWVhc3VyZVJpZ2h0KS5sZWZ0KSx5LmxlZnRTaWRlJiYoeC5sZWZ0U2lkZT1yKGZpKHkubGVmdFNpZGUpKSl9YWkodC5kaXNwbGF5Lm1lYXN1cmUpO2Zvcih2YXIgeSxjPTA7YzxtLmxlbmd0aDsrK2MpKHk9bVtjXSkmJihuKHkpLHkubGVmdFNpZGUmJm4oeS5sZWZ0U2lkZSkseS5yaWdodFNpZGUmJm4oeS5yaWdodFNpZGUpKTtyZXR1cm4gbX1mdW5jdGlvbiBVKHQsZSl7dmFyIHI9bmV3IGJvKGUudGV4dC5zbGljZSgwLDEwMCksbnVsbCk7ZS50ZXh0Q2xhc3MmJihyLnRleHRDbGFzcz1lLnRleHRDbGFzcyk7dmFyIG49Syh0LHIpLGk9Uih0LHIsMCxuLCJsZWZ0Iiksbz1SKHQsciw5OSxuLCJyaWdodCIpO3JldHVybntjcnVkZTohMCx0b3A6aS50b3AsbGVmdDppLmxlZnQsYm90dG9tOmkuYm90dG9tLHdpZHRoOihvLnJpZ2h0LWkubGVmdCkvMTAwfX1mdW5jdGlvbiBYKHQsZSl7dmFyIHI9ITE7aWYoZS5tYXJrZWRTcGFucylmb3IodmFyIG49MDtuPGUubWFya2VkU3BhbnM7KytuKXt2YXIgaT1lLm1hcmtlZFNwYW5zW25dOyFpLmNvbGxhcHNlZHx8bnVsbCE9aS50byYmaS50byE9ZS50ZXh0Lmxlbmd0aHx8KHI9ITApfXZhciBvPSFyJiZCKHQsZSk7aWYob3x8ZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gUih0LGUsZS50ZXh0Lmxlbmd0aCxvJiZvLm1lYXN1cmUsInJpZ2h0IikucmlnaHQ7dmFyIGw9cm4odCxlLG51bGwsITApLnByZSxzPWwuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKTtyZXR1cm4gdWkodC5kaXNwbGF5Lm1lYXN1cmUsbCksZmkocykucmlnaHQtZmkodC5kaXNwbGF5LmxpbmVEaXYpLmxlZnR9ZnVuY3Rpb24gXyh0KXt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCx0LmRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoPXQuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCksdC5kaXNwbGF5LmxpbmVOdW1DaGFycz1udWxsfWZ1bmN0aW9uIFkoKXtyZXR1cm4gd2luZG93LnBhZ2VYT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGooKXtyZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3B9ZnVuY3Rpb24gJCh0LGUscixuKXtpZihlLndpZGdldHMpZm9yKHZhciBpPTA7aTxlLndpZGdldHMubGVuZ3RoOysraSlpZihlLndpZGdldHNbaV0uYWJvdmUpe3ZhciBvPVlyKGUud2lkZ2V0c1tpXSk7ci50b3ArPW8sci5ib3R0b20rPW99aWYoImxpbmUiPT1uKXJldHVybiByO258fChuPSJsb2NhbCIpO3ZhciBsPUNuKHQsZSk7aWYoImxvY2FsIj09bj9sKz1JKHQuZGlzcGxheSk6bC09dC5kaXNwbGF5LnZpZXdPZmZzZXQsInBhZ2UiPT1ufHwid2luZG93Ij09bil7dmFyIHM9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7bCs9cy50b3ArKCJ3aW5kb3ciPT1uPzA6aigpKTt2YXIgYT1zLmxlZnQrKCJ3aW5kb3ciPT1uPzA6WSgpKTtyLmxlZnQrPWEsci5yaWdodCs9YX1yZXR1cm4gci50b3ArPWwsci5ib3R0b20rPWwscn1mdW5jdGlvbiBaKHQsZSxyKXtpZigiZGl2Ij09cilyZXR1cm4gZTt2YXIgbj1lLmxlZnQsaT1lLnRvcDtpZigicGFnZSI9PXIpbi09WSgpLGktPWooKTtlbHNlIGlmKCJsb2NhbCI9PXJ8fCFyKXt2YXIgbz1maSh0LmRpc3BsYXkuc2l6ZXIpO24rPW8ubGVmdCxpKz1vLnRvcH12YXIgbD1maSh0LmRpc3BsYXkubGluZVNwYWNlKTtyZXR1cm57bGVmdDpuLWwubGVmdCx0b3A6aS1sLnRvcH19ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBufHwobj1nbih0LmRvYyxlLmxpbmUpKSwkKHQsbixSKHQsbixlLmNoLG51bGwsaSkscil9ZnVuY3Rpb24gUSh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSxvKXt2YXIgbD1SKHQsbixlLGksbz8icmlnaHQiOiJsZWZ0Iik7cmV0dXJuIG8/bC5sZWZ0PWwucmlnaHQ6bC5yaWdodD1sLmxlZnQsJCh0LG4sbCxyKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9c1tlXSxuPXIubGV2ZWwlMjtyZXR1cm4gdD09bWkocikmJmUmJnIubGV2ZWw8c1tlLTFdLmxldmVsPyhyPXNbLS1lXSx0PXZpKHIpLShyLmxldmVsJTI/MDoxKSxuPSEwKTp0PT12aShyKSYmZTxzLmxlbmd0aC0xJiZyLmxldmVsPHNbZSsxXS5sZXZlbCYmKHI9c1srK2VdLHQ9bWkociktci5sZXZlbCUyLG49ITEpLG4mJnQ9PXIudG8mJnQ+ci5mcm9tP28odC0xKTpvKHQsbil9bj1ufHxnbih0LmRvYyxlLmxpbmUpLGl8fChpPVYodCxuKSk7dmFyIHM9d24obiksYT1lLmNoO2lmKCFzKXJldHVybiBvKGEpO3ZhciB1PUxpKHMsYSksYz1sKGEsdSk7cmV0dXJuIG51bGwhPVJvJiYoYy5vdGhlcj1sKGEsUm8pKSxjfWZ1bmN0aW9uIEoodCxlLHIsbil7dmFyIGk9bmV3IFllKHQsZSk7cmV0dXJuIGkueFJlbD1uLHImJihpLm91dHNpZGU9ITApLGl9ZnVuY3Rpb24gdGUodCxlLHIpe3ZhciBuPXQuZG9jO2lmKHIrPXQuZGlzcGxheS52aWV3T2Zmc2V0LDA+cilyZXR1cm4gSihuLmZpcnN0LDAsITAsLTEpO3ZhciBpPXhuKG4sciksbz1uLmZpcnN0K24uc2l6ZS0xO2lmKGk+bylyZXR1cm4gSihuLmZpcnN0K24uc2l6ZS0xLGduKG4sbykudGV4dC5sZW5ndGgsITAsMSk7Zm9yKDA+ZSYmKGU9MCk7Oyl7dmFyIGw9Z24obixpKSxzPWVlKHQsbCxpLGUsciksYT1CcihsKSx1PWEmJmEuZmluZCgpO2lmKCFhfHwhKHMuY2g+dS5mcm9tLmNofHxzLmNoPT11LmZyb20uY2gmJnMueFJlbD4wKSlyZXR1cm4gcztpPXUudG8ubGluZX19ZnVuY3Rpb24gZWUodCxlLHIsbixpKXtmdW5jdGlvbiBvKG4pe3ZhciBpPVEodCxZZShyLG4pLCJsaW5lIixlLHUpO3JldHVybiBzPSEwLGw+aS5ib3R0b20/aS5sZWZ0LWE6bDxpLnRvcD9pLmxlZnQrYToocz0hMSxpLmxlZnQpfXZhciBsPWktQ24odCxlKSxzPSExLGE9Mip0LmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCx1PVYodCxlKSxjPXduKGUpLGY9ZS50ZXh0Lmxlbmd0aCxoPXlpKGUpLGQ9YmkoZSkscD1vKGgpLGc9cyxtPW8oZCksdj1zO2lmKG4+bSlyZXR1cm4gSihyLGQsdiwxKTtmb3IoOzspe2lmKGM/ZD09aHx8ZD09U2koZSxoLDEpOjE+PWQtaCl7Zm9yKHZhciB5PXA+bnx8bS1uPj1uLXA/aDpkLGI9bi0oeT09aD9wOm0pO0RvLnRlc3QoZS50ZXh0LmNoYXJBdCh5KSk7KSsreTt2YXIgeD1KKHIseSx5PT1oP2c6diwwPmI/LTE6Yj8xOjApO3JldHVybiB4fXZhciBDPU1hdGguY2VpbChmLzIpLHc9aCtDO2lmKGMpe3c9aDtmb3IodmFyIEw9MDtDPkw7KytMKXc9U2koZSx3LDEpfXZhciBrPW8odyk7az5uPyhkPXcsbT1rLCh2PXMpJiYobSs9MWUzKSxmPUMpOihoPXcscD1rLGc9cyxmLT1DKX19ZnVuY3Rpb24gcmUodCl7aWYobnVsbCE9dC5jYWNoZWRUZXh0SGVpZ2h0KXJldHVybiB0LmNhY2hlZFRleHRIZWlnaHQ7aWYobnVsbD09X2kpe19pPXNpKCJwcmUiKTtmb3IodmFyIGU9MDs0OT5lOysrZSlfaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKSxfaS5hcHBlbmRDaGlsZChzaSgiYnIiKSk7X2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSl9dWkodC5tZWFzdXJlLF9pKTt2YXIgcj1faS5vZmZzZXRIZWlnaHQvNTA7cmV0dXJuIHI+MyYmKHQuY2FjaGVkVGV4dEhlaWdodD1yKSxhaSh0Lm1lYXN1cmUpLHJ8fDF9ZnVuY3Rpb24gbmUodCl7aWYobnVsbCE9dC5jYWNoZWRDaGFyV2lkdGgpcmV0dXJuIHQuY2FjaGVkQ2hhcldpZHRoO3ZhciBlPXNpKCJzcGFuIiwieCIpLHI9c2koInByZSIsW2VdKTt1aSh0Lm1lYXN1cmUscik7dmFyIG49ZS5vZmZzZXRXaWR0aDtyZXR1cm4gbj4yJiYodC5jYWNoZWRDaGFyV2lkdGg9biksbnx8MTB9ZnVuY3Rpb24gaWUodCl7dC5jdXJPcD17Y2hhbmdlczpbXSxmb3JjZVVwZGF0ZTohMSx1cGRhdGVJbnB1dDpudWxsLHVzZXJTZWxDaGFuZ2U6bnVsbCx0ZXh0Q2hhbmdlZDpudWxsLHNlbGVjdGlvbkNoYW5nZWQ6ITEsY3Vyc29yQWN0aXZpdHk6ITEsdXBkYXRlTWF4TGluZTohMSx1cGRhdGVTY3JvbGxQb3M6ITEsaWQ6KytKaX0sTW8rK3x8KFNvPVtdKX1mdW5jdGlvbiBvZSh0KXt2YXIgZT10LmN1ck9wLHI9dC5kb2Msbj10LmRpc3BsYXk7aWYodC5jdXJPcD1udWxsLGUudXBkYXRlTWF4TGluZSYmZih0KSxuLm1heExpbmVDaGFuZ2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbi5tYXhMaW5lKXt2YXIgaT1YKHQsbi5tYXhMaW5lKTtuLnNpemVyLnN0eWxlLm1pbldpZHRoPU1hdGgubWF4KDAsaSszK1RvKSsicHgiLG4ubWF4TGluZUNoYW5nZWQ9ITE7dmFyIG89TWF0aC5tYXgoMCxuLnNpemVyLm9mZnNldExlZnQrbi5zaXplci5vZmZzZXRXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoKTtvPHIuc2Nyb2xsTGVmdCYmIWUudXBkYXRlU2Nyb2xsUG9zJiZNZSh0LE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsTGVmdCxvKSwhMCl9dmFyIGwscztpZihlLnVwZGF0ZVNjcm9sbFBvcylsPWUudXBkYXRlU2Nyb2xsUG9zO2Vsc2UgaWYoZS5zZWxlY3Rpb25DaGFuZ2VkJiZuLnNjcm9sbGVyLmNsaWVudEhlaWdodCl7dmFyIGE9USh0LHIuc2VsLmhlYWQpO2w9dXIodCxhLmxlZnQsYS50b3AsYS5sZWZ0LGEuYm90dG9tKX1pZigoZS5jaGFuZ2VzLmxlbmd0aHx8ZS5mb3JjZVVwZGF0ZXx8bCYmbnVsbCE9bC5zY3JvbGxUb3ApJiYocz1iKHQsZS5jaGFuZ2VzLGwmJmwuc2Nyb2xsVG9wLGUuZm9yY2VVcGRhdGUpLHQuZGlzcGxheS5zY3JvbGxlci5vZmZzZXRIZWlnaHQmJih0LmRvYy5zY3JvbGxUb3A9dC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCkpLCFzJiZlLnNlbGVjdGlvbkNoYW5nZWQmJkEodCksZS51cGRhdGVTY3JvbGxQb3Mpe3ZhciB1PU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxIZWlnaHQtbi5zY3JvbGxlci5jbGllbnRIZWlnaHQsbC5zY3JvbGxUb3ApKSxjPU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoLGwuc2Nyb2xsTGVmdCkpO24uc2Nyb2xsZXIuc2Nyb2xsVG9wPW4uc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ci5zY3JvbGxUb3A9dSxuLnNjcm9sbGVyLnNjcm9sbExlZnQ9bi5zY3JvbGxiYXJILnNjcm9sbExlZnQ9ci5zY3JvbGxMZWZ0PWMsZyh0KSxlLnNjcm9sbFRvUG9zJiZzcih0LFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MuZnJvbSksUWUodC5kb2MsZS5zY3JvbGxUb1Bvcy50byksZS5zY3JvbGxUb1Bvcy5tYXJnaW4pfWVsc2UgbCYmbHIodCk7ZS5zZWxlY3Rpb25DaGFuZ2VkJiZEKHQpLHQuc3RhdGUuZm9jdXNlZCYmZS51cGRhdGVJbnB1dCYmZGUodCxlLnVzZXJTZWxDaGFuZ2UpO3ZhciBoPWUubWF5YmVIaWRkZW5NYXJrZXJzLGQ9ZS5tYXliZVVuaGlkZGVuTWFya2VycztpZihoKWZvcih2YXIgcD0wO3A8aC5sZW5ndGg7KytwKWhbcF0ubGluZXMubGVuZ3RofHxLbihoW3BdLCJoaWRlIik7aWYoZClmb3IodmFyIHA9MDtwPGQubGVuZ3RoOysrcClkW3BdLmxpbmVzLmxlbmd0aCYmS24oZFtwXSwidW5oaWRlIik7dmFyIG07aWYoLS1Nb3x8KG09U28sU289bnVsbCksZS50ZXh0Q2hhbmdlZCYmS24odCwiY2hhbmdlIix0LGUudGV4dENoYW5nZWQpLGUuY3Vyc29yQWN0aXZpdHkmJktuKHQsImN1cnNvckFjdGl2aXR5Iix0KSxtKWZvcih2YXIgcD0wO3A8bS5sZW5ndGg7KytwKW1bcF0oKX1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXR8fHRoaXMsbj0hci5jdXJPcDtuJiZpZShyKTt0cnl7dmFyIGk9ZS5hcHBseShyLGFyZ3VtZW50cyl9ZmluYWxseXtuJiZvZShyKX1yZXR1cm4gaX19ZnVuY3Rpb24gc2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmNtJiYhdGhpcy5jbS5jdXJPcDtyJiZpZSh0aGlzLmNtKTt0cnl7ZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3ImJm9lKHRoaXMuY20pfXJldHVybiBlfX1mdW5jdGlvbiBhZSh0LGUpe3ZhciByLG49IXQuY3VyT3A7biYmaWUodCk7dHJ5e3I9ZSgpfWZpbmFsbHl7biYmb2UodCl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWUodCxlLHIsbil7bnVsbD09ZSYmKGU9dC5kb2MuZmlyc3QpLG51bGw9PXImJihyPXQuZG9jLmZpcnN0K3QuZG9jLnNpemUpLHQuY3VyT3AuY2hhbmdlcy5wdXNoKHtmcm9tOmUsdG86cixkaWZmOm59KX1mdW5jdGlvbiBjZSh0KXt0LmRpc3BsYXkucG9sbGluZ0Zhc3R8fHQuZGlzcGxheS5wb2xsLnNldCh0Lm9wdGlvbnMucG9sbEludGVydmFsLGZ1bmN0aW9uKCl7aGUodCksdC5zdGF0ZS5mb2N1c2VkJiZjZSh0KX0pfWZ1bmN0aW9uIGZlKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj1oZSh0KTtufHxyPyh0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEsY2UodCkpOihyPSEwLHQuZGlzcGxheS5wb2xsLnNldCg2MCxlKSl9dmFyIHI9ITE7dC5kaXNwbGF5LnBvbGxpbmdGYXN0PSEwLHQuZGlzcGxheS5wb2xsLnNldCgyMCxlKX1mdW5jdGlvbiBoZSh0KXt2YXIgZT10LmRpc3BsYXkuaW5wdXQscj10LmRpc3BsYXkucHJldklucHV0LG49dC5kb2MsaT1uLnNlbDtpZighdC5zdGF0ZS5mb2N1c2VkfHxJbyhlKXx8Z2UodCl8fHQuc3RhdGUuZGlzYWJsZUlucHV0KXJldHVybiExO3Quc3RhdGUucGFzdGVJbmNvbWluZyYmdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYoZS52YWx1ZT1lLnZhbHVlLnN1YnN0cmluZygwLGUudmFsdWUubGVuZ3RoLTEpLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMSk7dmFyIG89ZS52YWx1ZTtpZihvPT1yJiZqZShpLmZyb20saS50bykpcmV0dXJuITE7aWYoQWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPT09bylyZXR1cm4gZGUodCwhMCksITE7dmFyIGw9IXQuY3VyT3A7bCYmaWUodCksaS5zaGlmdD0hMTtmb3IodmFyIHM9MCxhPU1hdGgubWluKHIubGVuZ3RoLG8ubGVuZ3RoKTthPnMmJnIuY2hhckNvZGVBdChzKT09by5jaGFyQ29kZUF0KHMpOykrK3M7dmFyIHU9aS5mcm9tLGM9aS50bztzPHIubGVuZ3RoP3U9WWUodS5saW5lLHUuY2gtKHIubGVuZ3RoLXMpKTp0LnN0YXRlLm92ZXJ3cml0ZSYmamUodSxjKSYmIXQuc3RhdGUucGFzdGVJbmNvbWluZyYmKGM9WWUoYy5saW5lLE1hdGgubWluKGduKG4sYy5saW5lKS50ZXh0Lmxlbmd0aCxjLmNoKyhvLmxlbmd0aC1zKSkpKTt2YXIgZj10LmN1ck9wLnVwZGF0ZUlucHV0LGg9e2Zyb206dSx0bzpjLHRleHQ6em8oby5zbGljZShzKSksb3JpZ2luOnQuc3RhdGUucGFzdGVJbmNvbWluZz8icGFzdGUiOiIraW5wdXQifTtyZXR1cm4gQmUodC5kb2MsaCwiZW5kIiksdC5jdXJPcC51cGRhdGVJbnB1dD1mLFVuKHQsImlucHV0UmVhZCIsdCxoKSxvLmxlbmd0aD4xZTN8fG8uaW5kZXhPZigiXG4iKT4tMT9lLnZhbHVlPXQuZGlzcGxheS5wcmV2SW5wdXQ9IiI6dC5kaXNwbGF5LnByZXZJbnB1dD1vLGwmJm9lKHQpLHQuc3RhdGUucGFzdGVJbmNvbWluZz0hMSwhMH1mdW5jdGlvbiBkZSh0LGUpe3ZhciByLG4saT10LmRvYztpZihqZShpLnNlbC5mcm9tLGkuc2VsLnRvKSllJiYodC5kaXNwbGF5LnByZXZJbnB1dD10LmRpc3BsYXkuaW5wdXQudmFsdWU9IiIsQWkmJiFOaSYmKHQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSk7ZWxzZXt0LmRpc3BsYXkucHJldklucHV0PSIiLHI9Rm8mJihpLnNlbC50by5saW5lLWkuc2VsLmZyb20ubGluZT4xMDB8fChuPXQuZ2V0U2VsZWN0aW9uKCkpLmxlbmd0aD4xZTMpO3ZhciBvPXI/Ii0iOm58fHQuZ2V0U2VsZWN0aW9uKCk7dC5kaXNwbGF5LmlucHV0LnZhbHVlPW8sdC5zdGF0ZS5mb2N1c2VkJiZKbih0LmRpc3BsYXkuaW5wdXQpLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249byl9dC5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb249cn1mdW5jdGlvbiBwZSh0KXsibm9jdXJzb3IiPT10Lm9wdGlvbnMucmVhZE9ubHl8fFZpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT10LmRpc3BsYXkuaW5wdXR8fHQuZGlzcGxheS5pbnB1dC5mb2N1cygpfWZ1bmN0aW9uIGdlKHQpe3JldHVybiB0Lm9wdGlvbnMucmVhZE9ubHl8fHQuZG9jLmNhbnRFZGl0fWZ1bmN0aW9uIG1lKHQpe2Z1bmN0aW9uIGUoKXt0LnN0YXRlLmZvY3VzZWQmJnNldFRpbWVvdXQoaWkocGUsdCksMCl9ZnVuY3Rpb24gcigpe251bGw9PXMmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGwsbC5jYWNoZWRDaGFyV2lkdGg9bC5jYWNoZWRUZXh0SGVpZ2h0PU9vPW51bGwsXyh0KSxhZSh0LGlpKHVlLHQpKX0sMTAwKSl9ZnVuY3Rpb24gbigpe2Zvcih2YXIgdD1sLndyYXBwZXIucGFyZW50Tm9kZTt0JiZ0IT1kb2N1bWVudC5ib2R5O3Q9dC5wYXJlbnROb2RlKTt0P3NldFRpbWVvdXQobiw1ZTMpOlZuKHdpbmRvdywicmVzaXplIixyKX1mdW5jdGlvbiBpKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbkRyYWdFdmVudCYmdC5vcHRpb25zLm9uRHJhZ0V2ZW50KHQsRW4oZSkpfHxQbihlKX1mdW5jdGlvbiBvKCl7bC5pbmFjY3VyYXRlU2VsZWN0aW9uJiYobC5wcmV2SW5wdXQ9IiIsbC5pbmFjY3VyYXRlU2VsZWN0aW9uPSExLGwuaW5wdXQudmFsdWU9dC5nZXRTZWxlY3Rpb24oKSxKbihsLmlucHV0KSl9dmFyIGw9dC5kaXNwbGF5O0duKGwuc2Nyb2xsZXIsIm1vdXNlZG93biIsbGUodCxiZSkpLEFpP0duKGwuc2Nyb2xsZXIsImRibGNsaWNrIixsZSh0LGZ1bmN0aW9uKGUpe2lmKCFYbih0LGUpKXt2YXIgcj15ZSh0LGUpO2lmKHImJiF3ZSh0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt6bihlKTt2YXIgbj1tcihnbih0LmRvYyxyLmxpbmUpLnRleHQscik7ZXIodC5kb2Msbi5mcm9tLG4udG8pfX19KSk6R24obC5zY3JvbGxlciwiZGJsY2xpY2siLGZ1bmN0aW9uKGUpe1huKHQsZSl8fHpuKGUpfSksR24obC5saW5lU3BhY2UsInNlbGVjdHN0YXJ0IixmdW5jdGlvbih0KXt2ZShsLHQpfHx6bih0KX0pLFppfHxHbihsLnNjcm9sbGVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZSl7SWUodCxlKX0pLEduKGwuc2Nyb2xsZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmKFNlKHQsbC5zY3JvbGxlci5zY3JvbGxUb3ApLE1lKHQsbC5zY3JvbGxlci5zY3JvbGxMZWZ0LCEwKSxLbih0LCJzY3JvbGwiLHQpKX0pLEduKGwuc2Nyb2xsYmFyViwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZTZSh0LGwuc2Nyb2xsYmFyVi5zY3JvbGxUb3ApfSksR24obC5zY3JvbGxiYXJILCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJk1lKHQsbC5zY3JvbGxiYXJILnNjcm9sbExlZnQpfSksR24obC5zY3JvbGxlciwibW91c2V3aGVlbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsZXIsIkRPTU1vdXNlU2Nyb2xsIixmdW5jdGlvbihlKXtUZSh0LGUpfSksR24obC5zY3JvbGxiYXJILCJtb3VzZWRvd24iLGUpLEduKGwuc2Nyb2xsYmFyViwibW91c2Vkb3duIixlKSxHbihsLndyYXBwZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLndyYXBwZXIuc2Nyb2xsVG9wPWwud3JhcHBlci5zY3JvbGxMZWZ0PTB9KTt2YXIgcztHbih3aW5kb3csInJlc2l6ZSIsciksc2V0VGltZW91dChuLDVlMyksR24obC5pbnB1dCwia2V5dXAiLGxlKHQsZnVuY3Rpb24oZSl7WG4odCxlKXx8dC5vcHRpb25zLm9uS2V5RXZlbnQmJnQub3B0aW9ucy5vbktleUV2ZW50KHQsRW4oZSkpfHwxNj09ZS5rZXlDb2RlJiYodC5kb2Muc2VsLnNoaWZ0PSExKX0pKSxHbihsLmlucHV0LCJpbnB1dCIsZnVuY3Rpb24oKXtBaSYmIU5pJiZ0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24mJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUodCl9KSxHbihsLmlucHV0LCJrZXlkb3duIixsZSh0LFdlKSksR24obC5pbnB1dCwia2V5cHJlc3MiLGxlKHQsT2UpKSxHbihsLmlucHV0LCJmb2N1cyIsaWkoRWUsdCkpLEduKGwuaW5wdXQsImJsdXIiLGlpKHplLHQpKSx0Lm9wdGlvbnMuZHJhZ0Ryb3AmJihHbihsLnNjcm9sbGVyLCJkcmFnc3RhcnQiLGZ1bmN0aW9uKGUpe2tlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJkcmFnZW50ZXIiLGkpLEduKGwuc2Nyb2xsZXIsImRyYWdvdmVyIixpKSxHbihsLnNjcm9sbGVyLCJkcm9wIixsZSh0LExlKSkpLEduKGwuc2Nyb2xsZXIsInBhc3RlIixmdW5jdGlvbihlKXt2ZShsLGUpfHwocGUodCksZmUodCkpfSksR24obC5pbnB1dCwicGFzdGUiLGZ1bmN0aW9uKCl7aWYoV2kmJiF0LnN0YXRlLmZha2VkTGFzdENoYXImJiEobmV3IERhdGUtdC5zdGF0ZS5sYXN0TWlkZGxlRG93bjwyMDApKXt2YXIgZT1sLmlucHV0LnNlbGVjdGlvblN0YXJ0LHI9bC5pbnB1dC5zZWxlY3Rpb25FbmQ7bC5pbnB1dC52YWx1ZSs9IiQiLGwuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9ZSxsLmlucHV0LnNlbGVjdGlvbkVuZD1yLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMH10LnN0YXRlLnBhc3RlSW5jb21pbmc9ITAsZmUodCl9KSxHbihsLmlucHV0LCJjdXQiLG8pLEduKGwuaW5wdXQsImNvcHkiLG8pLEZpJiZHbihsLnNpemVyLCJtb3VzZXVwIixmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXQmJmwuaW5wdXQuYmx1cigpLHBlKHQpfSl9ZnVuY3Rpb24gdmUodCxlKXtmb3IodmFyIHI9Um4oZSk7ciE9dC53cmFwcGVyO3I9ci5wYXJlbnROb2RlKWlmKCFyfHxyLmlnbm9yZUV2ZW50c3x8ci5wYXJlbnROb2RlPT10LnNpemVyJiZyIT10Lm1vdmVyKXJldHVybiEwfWZ1bmN0aW9uIHllKHQsZSxyKXt2YXIgbj10LmRpc3BsYXk7aWYoIXIpe3ZhciBpPVJuKGUpO2lmKGk9PW4uc2Nyb2xsYmFySHx8aT09bi5zY3JvbGxiYXJILmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyVnx8aT09bi5zY3JvbGxiYXJWLmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyRmlsbGVyfHxpPT1uLmd1dHRlckZpbGxlcilyZXR1cm4gbnVsbH12YXIgbyxsLHM9Zmkobi5saW5lU3BhY2UpO3RyeXtvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGUodCxvLXMubGVmdCxsLXMudG9wKX1mdW5jdGlvbiBiZSh0KXtmdW5jdGlvbiBlKHQpe2lmKCFqZSh2LHQpKXtpZih2PXQsInNpbmdsZSI9PWMpcmV0dXJuIGVyKGkuZG9jLFFlKGwsYSksdCksdm9pZCAwOwppZihnPVFlKGwsZyksbT1RZShsLG0pLCJkb3VibGUiPT1jKXt2YXIgZT1tcihnbihsLHQubGluZSkudGV4dCx0KTskZSh0LGcpP2VyKGkuZG9jLGUuZnJvbSxtKTplcihpLmRvYyxnLGUudG8pfWVsc2UidHJpcGxlIj09YyYmKCRlKHQsZyk/ZXIoaS5kb2MsbSxRZShsLFllKHQubGluZSwwKSkpOmVyKGkuZG9jLGcsUWUobCxZZSh0LmxpbmUrMSwwKSkpKX19ZnVuY3Rpb24gcih0KXt2YXIgbj0rK2Iscz15ZShpLHQsITApO2lmKHMpaWYoamUocyxoKSl7dmFyIGE9dC5jbGllbnRZPHkudG9wPy0yMDp0LmNsaWVudFk+eS5ib3R0b20/MjA6MDthJiZzZXRUaW1lb3V0KGxlKGksZnVuY3Rpb24oKXtiPT1uJiYoby5zY3JvbGxlci5zY3JvbGxUb3ArPWEscih0KSl9KSw1MCl9ZWxzZXtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpLGg9cyxlKHMpO3ZhciB1PXAobyxsKTsocy5saW5lPj11LnRvfHxzLmxpbmU8dS5mcm9tKSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmcih0KX0pLDE1MCl9fWZ1bmN0aW9uIG4odCl7Yj0xLzAsem4odCkscGUoaSksVm4oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksVm4oZG9jdW1lbnQsIm1vdXNldXAiLEMpfWlmKCFYbih0aGlzLHQpKXt2YXIgaT10aGlzLG89aS5kaXNwbGF5LGw9aS5kb2Mscz1sLnNlbDtpZihzLnNoaWZ0PXQuc2hpZnRLZXksdmUobyx0KSlyZXR1cm4gV2l8fChvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5zY3JvbGxlci5kcmFnZ2FibGU9ITB9LDEwMCkpLHZvaWQgMDtpZighd2UoaSx0KSl7dmFyIGE9eWUoaSx0KTtzd2l0Y2goQm4odCkpe2Nhc2UgMzpyZXR1cm4gWmkmJkllLmNhbGwoaSxpLHQpLHZvaWQgMDtjYXNlIDI6cmV0dXJuIFdpJiYoaS5zdGF0ZS5sYXN0TWlkZGxlRG93bj0rbmV3IERhdGUpLGEmJmVyKGkuZG9jLGEpLHNldFRpbWVvdXQoaWkocGUsaSksMjApLHpuKHQpLHZvaWQgMH1pZighYSlyZXR1cm4gUm4odCk9PW8uc2Nyb2xsZXImJnpuKHQpLHZvaWQgMDtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpO3ZhciB1PStuZXcgRGF0ZSxjPSJzaW5nbGUiO2lmKGppJiZqaS50aW1lPnUtNDAwJiZqZShqaS5wb3MsYSkpYz0idHJpcGxlIix6bih0KSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx2cihpLGEubGluZSk7ZWxzZSBpZihZaSYmWWkudGltZT51LTQwMCYmamUoWWkucG9zLGEpKXtjPSJkb3VibGUiLGppPXt0aW1lOnUscG9zOmF9LHpuKHQpO3ZhciBmPW1yKGduKGwsYS5saW5lKS50ZXh0LGEpO2VyKGkuZG9jLGYuZnJvbSxmLnRvKX1lbHNlIFlpPXt0aW1lOnUscG9zOmF9O3ZhciBoPWE7aWYoaS5vcHRpb25zLmRyYWdEcm9wJiZXbyYmIWdlKGkpJiYhamUocy5mcm9tLHMudG8pJiYhJGUoYSxzLmZyb20pJiYhJGUocy50byxhKSYmInNpbmdsZSI9PWMpe3ZhciBkPWxlKGksZnVuY3Rpb24oZSl7V2kmJihvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSksaS5zdGF0ZS5kcmFnZ2luZ1RleHQ9ITEsVm4oZG9jdW1lbnQsIm1vdXNldXAiLGQpLFZuKG8uc2Nyb2xsZXIsImRyb3AiLGQpLE1hdGguYWJzKHQuY2xpZW50WC1lLmNsaWVudFgpK01hdGguYWJzKHQuY2xpZW50WS1lLmNsaWVudFkpPDEwJiYoem4oZSksZXIoaS5kb2MsYSkscGUoaSkpfSk7cmV0dXJuIFdpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITApLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PWQsby5zY3JvbGxlci5kcmFnRHJvcCYmby5zY3JvbGxlci5kcmFnRHJvcCgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixkKSxHbihvLnNjcm9sbGVyLCJkcm9wIixkKSx2b2lkIDB9em4odCksInNpbmdsZSI9PWMmJmVyKGkuZG9jLFFlKGwsYSkpO3ZhciBnPXMuZnJvbSxtPXMudG8sdj1hLHk9Zmkoby53cmFwcGVyKSxiPTAseD1sZShpLGZ1bmN0aW9uKHQpe0FpfHxCbih0KT9yKHQpOm4odCl9KSxDPWxlKGksbik7R24oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksR24oZG9jdW1lbnQsIm1vdXNldXAiLEMpfX19ZnVuY3Rpb24geGUodCxlLHIsbixpKXt0cnl7dmFyIG89ZS5jbGllbnRYLGw9ZS5jbGllbnRZfWNhdGNoKGUpe3JldHVybiExfWlmKG8+PU1hdGguZmxvb3IoZmkodC5kaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSlyZXR1cm4hMTtuJiZ6bihlKTt2YXIgcz10LmRpc3BsYXksYT1maShzLmxpbmVEaXYpO2lmKGw+YS5ib3R0b218fCFZbih0LHIpKXJldHVybiBGbihlKTtsLT1hLnRvcC1zLnZpZXdPZmZzZXQ7Zm9yKHZhciB1PTA7dTx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt1KXt2YXIgYz1zLmd1dHRlcnMuY2hpbGROb2Rlc1t1XTtpZihjJiZmaShjKS5yaWdodD49byl7dmFyIGY9eG4odC5kb2MsbCksaD10Lm9wdGlvbnMuZ3V0dGVyc1t1XTtyZXR1cm4gaSh0LHIsdCxmLGgsZSksRm4oZSl9fX1mdW5jdGlvbiBDZSh0LGUpe3JldHVybiBZbih0LCJndXR0ZXJDb250ZXh0TWVudSIpP3hlKHQsZSwiZ3V0dGVyQ29udGV4dE1lbnUiLCExLEtuKTohMX1mdW5jdGlvbiB3ZSh0LGUpe3JldHVybiB4ZSh0LGUsImd1dHRlckNsaWNrIiwhMCxVbil9ZnVuY3Rpb24gTGUodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fHZlKGUuZGlzcGxheSx0KXx8ZS5vcHRpb25zLm9uRHJhZ0V2ZW50JiZlLm9wdGlvbnMub25EcmFnRXZlbnQoZSxFbih0KSkpKXt6bih0KSxBaSYmKHRvPStuZXcgRGF0ZSk7dmFyIHI9eWUoZSx0LCEwKSxuPXQuZGF0YVRyYW5zZmVyLmZpbGVzO2lmKHImJiFnZShlKSlpZihuJiZuLmxlbmd0aCYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlKWZvcih2YXIgaT1uLmxlbmd0aCxvPUFycmF5KGkpLGw9MCxzPWZ1bmN0aW9uKHQsbil7dmFyIHM9bmV3IEZpbGVSZWFkZXI7cy5vbmxvYWQ9ZnVuY3Rpb24oKXtvW25dPXMucmVzdWx0LCsrbD09aSYmKHI9UWUoZS5kb2MsciksQmUoZS5kb2Mse2Zyb206cix0bzpyLHRleHQ6em8oby5qb2luKCJcbiIpKSxvcmlnaW46InBhc3RlIn0sImFyb3VuZCIpKX0scy5yZWFkQXNUZXh0KHQpfSxhPTA7aT5hOysrYSlzKG5bYV0sYSk7ZWxzZXtpZihlLnN0YXRlLmRyYWdnaW5nVGV4dCYmISRlKHIsZS5kb2Muc2VsLmZyb20pJiYhJGUoZS5kb2Muc2VsLnRvLHIpKXJldHVybiBlLnN0YXRlLmRyYWdnaW5nVGV4dCh0KSxzZXRUaW1lb3V0KGlpKHBlLGUpLDIwKSx2b2lkIDA7dHJ5e3ZhciBvPXQuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTtpZihvKXt2YXIgdT1lLmRvYy5zZWwuZnJvbSxjPWUuZG9jLnNlbC50bztucihlLmRvYyxyLHIpLGUuc3RhdGUuZHJhZ2dpbmdUZXh0JiZfZShlLmRvYywiIix1LGMsInBhc3RlIiksZS5yZXBsYWNlU2VsZWN0aW9uKG8sbnVsbCwicGFzdGUiKSxwZShlKX19Y2F0Y2godCl7fX19fWZ1bmN0aW9uIGtlKHQsZSl7aWYoQWkmJighdC5zdGF0ZS5kcmFnZ2luZ1RleHR8fCtuZXcgRGF0ZS10bzwxMDApKXJldHVybiBQbihlKSx2b2lkIDA7aWYoIVhuKHQsZSkmJiF2ZSh0LmRpc3BsYXksZSkpe3ZhciByPXQuZ2V0U2VsZWN0aW9uKCk7aWYoZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsciksZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlJiYhSWkpe3ZhciBuPXNpKCJpbWciLG51bGwsbnVsbCwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7bi5zcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09Iix6aSYmKG4ud2lkdGg9bi5oZWlnaHQ9MSx0LmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChuKSxuLl90b3A9bi5vZmZzZXRUb3ApLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLDAsMCksemkmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX19fWZ1bmN0aW9uIFNlKHQsZSl7TWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWUpPDJ8fCh0LmRvYy5zY3JvbGxUb3A9ZSxUaXx8Yih0LFtdLGUpLHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wPWUpLHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1lKSxUaSYmYih0LFtdKSxXKHQsMTAwKSl9ZnVuY3Rpb24gTWUodCxlLHIpeyhyP2U9PXQuZG9jLnNjcm9sbExlZnQ6TWF0aC5hYnModC5kb2Muc2Nyb2xsTGVmdC1lKTwyKXx8KGU9TWF0aC5taW4oZSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKSx0LmRvYy5zY3JvbGxMZWZ0PWUsZyh0KSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0PWUpLHQuZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PWUpKX1mdW5jdGlvbiBUZSh0LGUpe3ZhciByPWUud2hlZWxEZWx0YVgsbj1lLndoZWVsRGVsdGFZO251bGw9PXImJmUuZGV0YWlsJiZlLmF4aXM9PWUuSE9SSVpPTlRBTF9BWElTJiYocj1lLmRldGFpbCksbnVsbD09biYmZS5kZXRhaWwmJmUuYXhpcz09ZS5WRVJUSUNBTF9BWElTP249ZS5kZXRhaWw6bnVsbD09biYmKG49ZS53aGVlbERlbHRhKTt2YXIgaT10LmRpc3BsYXksbz1pLnNjcm9sbGVyO2lmKHImJm8uc2Nyb2xsV2lkdGg+by5jbGllbnRXaWR0aHx8biYmby5zY3JvbGxIZWlnaHQ+by5jbGllbnRIZWlnaHQpe2lmKG4mJktpJiZXaSlmb3IodmFyIGw9ZS50YXJnZXQ7bCE9bztsPWwucGFyZW50Tm9kZSlpZihsLmxpbmVPYmope3QuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQ9bDticmVha31pZihyJiYhVGkmJiF6aSYmbnVsbCE9cm8pcmV0dXJuIG4mJlNlKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbFRvcCtuKnJvLG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0KSkpLE1lKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbExlZnQrcipybyxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgpKSksem4oZSksaS53aGVlbFN0YXJ0WD1udWxsLHZvaWQgMDtpZihuJiZudWxsIT1ybyl7dmFyIHM9bipybyxhPXQuZG9jLnNjcm9sbFRvcCx1PWEraS53cmFwcGVyLmNsaWVudEhlaWdodDswPnM/YT1NYXRoLm1heCgwLGErcy01MCk6dT1NYXRoLm1pbih0LmRvYy5oZWlnaHQsdStzKzUwKSxiKHQsW10se3RvcDphLGJvdHRvbTp1fSl9MjA+ZW8mJihudWxsPT1pLndoZWVsU3RhcnRYPyhpLndoZWVsU3RhcnRYPW8uc2Nyb2xsTGVmdCxpLndoZWVsU3RhcnRZPW8uc2Nyb2xsVG9wLGkud2hlZWxEWD1yLGkud2hlZWxEWT1uLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihudWxsIT1pLndoZWVsU3RhcnRYKXt2YXIgdD1vLnNjcm9sbExlZnQtaS53aGVlbFN0YXJ0WCxlPW8uc2Nyb2xsVG9wLWkud2hlZWxTdGFydFkscj1lJiZpLndoZWVsRFkmJmUvaS53aGVlbERZfHx0JiZpLndoZWVsRFgmJnQvaS53aGVlbERYO2kud2hlZWxTdGFydFg9aS53aGVlbFN0YXJ0WT1udWxsLHImJihybz0ocm8qZW8rcikvKGVvKzEpLCsrZW8pfX0sMjAwKSk6KGkud2hlZWxEWCs9cixpLndoZWVsRFkrPW4pKX19ZnVuY3Rpb24gQWUodCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9bW9bZV0sIWUpKXJldHVybiExO3QuZGlzcGxheS5wb2xsaW5nRmFzdCYmaGUodCkmJih0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEpO3ZhciBuPXQuZG9jLGk9bi5zZWwuc2hpZnQsbz0hMTt0cnl7Z2UodCkmJih0LnN0YXRlLnN1cHByZXNzRWRpdHM9ITApLHImJihuLnNlbC5zaGlmdD0hMSksbz1lKHQpIT1Bb31maW5hbGx5e24uc2VsLnNoaWZ0PWksdC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSExfXJldHVybiBvfWZ1bmN0aW9uIEhlKHQpe3ZhciBlPXQuc3RhdGUua2V5TWFwcy5zbGljZSgwKTtyZXR1cm4gdC5vcHRpb25zLmV4dHJhS2V5cyYmZS5wdXNoKHQub3B0aW9ucy5leHRyYUtleXMpLGUucHVzaCh0Lm9wdGlvbnMua2V5TWFwKSxlfWZ1bmN0aW9uIE5lKHQsZSl7dmFyIHI9Q3IodC5vcHRpb25zLmtleU1hcCksbj1yLmF1dG87Y2xlYXJUaW1lb3V0KG5vKSxuJiYhTHIoZSkmJihubz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Q3IodC5vcHRpb25zLmtleU1hcCk9PXImJih0Lm9wdGlvbnMua2V5TWFwPW4uY2FsbD9uLmNhbGwobnVsbCx0KTpuLGwodCkpfSw1MCkpO3ZhciBpPWtyKGUsITApLG89ITE7aWYoIWkpcmV0dXJuITE7dmFyIHM9SGUodCk7cmV0dXJuIG89ZS5zaGlmdEtleT93cigiU2hpZnQtIitpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KXx8d3IoaSxzLGZ1bmN0aW9uKGUpe3JldHVybigic3RyaW5nIj09dHlwZW9mIGU/L15nb1tBLVpdLy50ZXN0KGUpOmUubW90aW9uKT9BZSh0LGUpOnZvaWQgMH0pOndyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4gQWUodCxlKX0pLG8mJih6bihlKSxEKHQpLE5pJiYoZS5vbGRLZXlDb2RlPWUua2V5Q29kZSxlLmtleUNvZGU9MCksVW4odCwia2V5SGFuZGxlZCIsdCxpLGUpKSxvfWZ1bmN0aW9uIERlKHQsZSxyKXt2YXIgbj13cigiJyIrcisiJyIsSGUodCksZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KTtyZXR1cm4gbiYmKHpuKGUpLEQodCksVW4odCwia2V5SGFuZGxlZCIsdCwiJyIrcisiJyIsZSkpLG59ZnVuY3Rpb24gV2UodCl7dmFyIGU9dGhpcztpZihlLnN0YXRlLmZvY3VzZWR8fEVlKGUpLCEoWG4oZSx0KXx8ZS5vcHRpb25zLm9uS2V5RXZlbnQmJmUub3B0aW9ucy5vbktleUV2ZW50KGUsRW4odCkpKSl7QWkmJjI3PT10LmtleUNvZGUmJih0LnJldHVyblZhbHVlPSExKTt2YXIgcj10LmtleUNvZGU7ZS5kb2Muc2VsLnNoaWZ0PTE2PT1yfHx0LnNoaWZ0S2V5O3ZhciBuPU5lKGUsdCk7emkmJihvbz1uP3I6bnVsbCwhbiYmODg9PXImJiFGbyYmKEtpP3QubWV0YUtleTp0LmN0cmxLZXkpJiZlLnJlcGxhY2VTZWxlY3Rpb24oIiIpKX19ZnVuY3Rpb24gT2UodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe3ZhciByPXQua2V5Q29kZSxuPXQuY2hhckNvZGU7aWYoemkmJnI9PW9vKXJldHVybiBvbz1udWxsLHpuKHQpLHZvaWQgMDtpZighKHppJiYoIXQud2hpY2h8fHQud2hpY2g8MTApfHxGaSl8fCFOZShlLHQpKXt2YXIgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PW4/cjpuKTt0aGlzLm9wdGlvbnMuZWxlY3RyaWNDaGFycyYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzJiZ0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQmJiFnZSh0aGlzKSYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzLmluZGV4T2YoaSk+LTEmJnNldFRpbWVvdXQobGUoZSxmdW5jdGlvbigpe2hyKGUsZS5kb2Muc2VsLnRvLmxpbmUsInNtYXJ0Iil9KSw3NSksRGUoZSx0LGkpfHwoQWkmJiFOaSYmKGUuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSxmZShlKSl9fX1mdW5jdGlvbiBFZSh0KXsibm9jdXJzb3IiIT10Lm9wdGlvbnMucmVhZE9ubHkmJih0LnN0YXRlLmZvY3VzZWR8fChLbih0LCJmb2N1cyIsdCksdC5zdGF0ZS5mb2N1c2VkPSEwLC0xPT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNvZGVNaXJyb3ItZm9jdXNlZFxiLykmJih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci1mb2N1c2VkIiksdC5jdXJPcHx8KGRlKHQsITApLFdpJiZzZXRUaW1lb3V0KGlpKGRlLHQsITApLDApKSksY2UodCksRCh0KSl9ZnVuY3Rpb24gemUodCl7dC5zdGF0ZS5mb2N1c2VkJiYoS24odCwiYmx1ciIsdCksdC5zdGF0ZS5mb2N1c2VkPSExLHQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3ItZm9jdXNlZCIsIiIpKSxjbGVhckludGVydmFsKHQuZGlzcGxheS5ibGlua2VyKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zdGF0ZS5mb2N1c2VkfHwodC5kb2Muc2VsLnNoaWZ0PSExKX0sMTUwKX1mdW5jdGlvbiBJZSh0LGUpe2Z1bmN0aW9uIHIoKXtpZihudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXt2YXIgdD1pLmlucHV0LnZhbHVlPSLigIsiKyhqZShvLmZyb20sby50byk/IiI6aS5pbnB1dC52YWx1ZSk7aS5wcmV2SW5wdXQ9IuKAiyIsaS5pbnB1dC5zZWxlY3Rpb25TdGFydD0xLGkuaW5wdXQuc2VsZWN0aW9uRW5kPXQubGVuZ3RofX1mdW5jdGlvbiBuKCl7aWYoaS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGkuaW5wdXQuc3R5bGUuY3NzVGV4dD11LE5pJiYoaS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1pLnNjcm9sbGVyLnNjcm9sbFRvcD1zKSxjZSh0KSxudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXsoIUFpfHxOaSkmJnIoKSxjbGVhclRpbWVvdXQoaW8pO3ZhciBlPTAsbj1mdW5jdGlvbigpeyIgIj09aS5wcmV2SW5wdXQmJjA9PWkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ/bGUodCxtby5zZWxlY3RBbGwpKHQpOmUrKzwxMD9pbz1zZXRUaW1lb3V0KG4sNTAwKTpkZSh0KX07aW89c2V0VGltZW91dChuLDIwMCl9fWlmKCFYbih0LGUsImNvbnRleHRtZW51Iikpe3ZhciBpPXQuZGlzcGxheSxvPXQuZG9jLnNlbDtpZighdmUoaSxlKSYmIUNlKHQsZSkpe3ZhciBsPXllKHQsZSkscz1pLnNjcm9sbGVyLnNjcm9sbFRvcDtpZihsJiYhemkpe3ZhciBhPXQub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnU7YSYmKGplKG8uZnJvbSxvLnRvKXx8JGUobCxvLmZyb20pfHwhJGUobCxvLnRvKSkmJmxlKHQsbnIpKHQuZG9jLGwsbCk7dmFyIHU9aS5pbnB1dC5zdHlsZS5jc3NUZXh0O2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9wOiAiKyhlLmNsaWVudFktNSkrInB4OyBsZWZ0OiAiKyhlLmNsaWVudFgtNSkrInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgb3V0bGluZTogbm9uZTsiKyJib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgLW1zLW9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyIscGUodCksZGUodCwhMCksamUoby5mcm9tLG8udG8pJiYoaS5pbnB1dC52YWx1ZT1pLnByZXZJbnB1dD0iICIpLEFpJiYhTmkmJnIoKSxaaSl7UG4oZSk7dmFyIGM9ZnVuY3Rpb24oKXtWbih3aW5kb3csIm1vdXNldXAiLGMpLHNldFRpbWVvdXQobiwyMCl9O0duKHdpbmRvdywibW91c2V1cCIsYyl9ZWxzZSBzZXRUaW1lb3V0KG4sNTApfX19fWZ1bmN0aW9uIEZlKHQsZSxyKXtpZighJGUoZS5mcm9tLHIpKXJldHVybiBRZSh0LHIpO3ZhciBuPWUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKTtpZihyLmxpbmU+ZS50by5saW5lK24pe3ZhciBpPXIubGluZS1uLG89dC5maXJzdCt0LnNpemUtMTtyZXR1cm4gaT5vP1llKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCk6SmUocixnbih0LGkpLnRleHQubGVuZ3RoKX1pZihyLmxpbmU9PWUudG8ubGluZStuKXJldHVybiBKZShyLFFuKGUudGV4dCkubGVuZ3RoKygxPT1lLnRleHQubGVuZ3RoP2UuZnJvbS5jaDowKStnbih0LGUudG8ubGluZSkudGV4dC5sZW5ndGgtZS50by5jaCk7dmFyIGw9ci5saW5lLWUuZnJvbS5saW5lO3JldHVybiBKZShyLGUudGV4dFtsXS5sZW5ndGgrKGw/MDplLmZyb20uY2gpKX1mdW5jdGlvbiBQZSh0LGUscil7aWYociYmIm9iamVjdCI9PXR5cGVvZiByKXJldHVybnthbmNob3I6RmUodCxlLHIuYW5jaG9yKSxoZWFkOkZlKHQsZSxyLmhlYWQpfTtpZigic3RhcnQiPT1yKXJldHVybnthbmNob3I6ZS5mcm9tLGhlYWQ6ZS5mcm9tfTt2YXIgbj1sbyhlKTtpZigiYXJvdW5kIj09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOm59O2lmKCJlbmQiPT1yKXJldHVybnthbmNob3I6bixoZWFkOm59O3ZhciBpPWZ1bmN0aW9uKHQpe2lmKCRlKHQsZS5mcm9tKSlyZXR1cm4gdDtpZighJGUoZS50byx0KSlyZXR1cm4gbjt2YXIgcj10LmxpbmUrZS50ZXh0Lmxlbmd0aC0oZS50by5saW5lLWUuZnJvbS5saW5lKS0xLGk9dC5jaDtyZXR1cm4gdC5saW5lPT1lLnRvLmxpbmUmJihpKz1uLmNoLWUudG8uY2gpLFllKHIsaSl9O3JldHVybnthbmNob3I6aSh0LnNlbC5hbmNob3IpLGhlYWQ6aSh0LnNlbC5oZWFkKX19ZnVuY3Rpb24gUmUodCxlLHIpe3ZhciBuPXtjYW5jZWxlZDohMSxmcm9tOmUuZnJvbSx0bzplLnRvLHRleHQ6ZS50ZXh0LG9yaWdpbjplLm9yaWdpbixjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGVkPSEwfX07cmV0dXJuIHImJihuLnVwZGF0ZT1mdW5jdGlvbihlLHIsbixpKXtlJiYodGhpcy5mcm9tPVFlKHQsZSkpLHImJih0aGlzLnRvPVFlKHQscikpLG4mJih0aGlzLnRleHQ9biksdm9pZCAwIT09aSYmKHRoaXMub3JpZ2luPWkpfSksS24odCwiYmVmb3JlQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZUNoYW5nZSIsdC5jbSxuKSxuLmNhbmNlbGVkP251bGw6e2Zyb206bi5mcm9tLHRvOm4udG8sdGV4dDpuLnRleHQsb3JpZ2luOm4ub3JpZ2lufX1mdW5jdGlvbiBCZSh0LGUscixuKXtpZih0LmNtKXtpZighdC5jbS5jdXJPcClyZXR1cm4gbGUodC5jbSxCZSkodCxlLHIsbik7aWYodC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXJldHVybn1pZighKFluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSl8fChlPVJlKHQsZSwhMCkpKXt2YXIgaT1xaSYmIW4mJkZyKHQsZS5mcm9tLGUudG8pO2lmKGkpe2Zvcih2YXIgbz1pLmxlbmd0aC0xO28+PTE7LS1vKUdlKHQse2Zyb206aVtvXS5mcm9tLHRvOmlbb10udG8sdGV4dDpbIiJdfSk7aS5sZW5ndGgmJkdlKHQse2Zyb206aVswXS5mcm9tLHRvOmlbMF0udG8sdGV4dDplLnRleHR9LHIpfWVsc2UgR2UodCxlLHIpfX1mdW5jdGlvbiBHZSh0LGUscil7aWYoMSE9ZS50ZXh0Lmxlbmd0aHx8IiIhPWUudGV4dFswXXx8IWplKGUuZnJvbSxlLnRvKSl7dmFyIG49UGUodCxlLHIpO01uKHQsZSxuLHQuY20/dC5jbS5jdXJPcC5pZDowLzApLFVlKHQsZSxuLHpyKHQsZSkpO3ZhciBpPVtdO2RuKHQsZnVuY3Rpb24odCxyKXtyfHwtMSE9dGkoaSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LGUpLGkucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LGUsbnVsbCx6cih0LGUpKX0pfX1mdW5jdGlvbiBWZSh0LGUpe2lmKCF0LmNtfHwhdC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXt2YXIgcj10Lmhpc3Rvcnksbj0oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkucG9wKCk7aWYobil7dmFyIGk9e2NoYW5nZXM6W10sYW5jaG9yQmVmb3JlOm4uYW5jaG9yQWZ0ZXIsaGVhZEJlZm9yZTpuLmhlYWRBZnRlcixhbmNob3JBZnRlcjpuLmFuY2hvckJlZm9yZSxoZWFkQWZ0ZXI6bi5oZWFkQmVmb3JlLGdlbmVyYXRpb246ci5nZW5lcmF0aW9ufTsoInVuZG8iPT1lP3IudW5kb25lOnIuZG9uZSkucHVzaChpKSxyLmdlbmVyYXRpb249bi5nZW5lcmF0aW9ufHwrK3IubWF4R2VuZXJhdGlvbjtmb3IodmFyIG89WW4odCwiYmVmb3JlQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZUNoYW5nZSIpLGw9bi5jaGFuZ2VzLmxlbmd0aC0xO2w+PTA7LS1sKXt2YXIgcz1uLmNoYW5nZXNbbF07aWYocy5vcmlnaW49ZSxvJiYhUmUodCxzLCExKSlyZXR1cm4oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkubGVuZ3RoPTAsdm9pZCAwO2kuY2hhbmdlcy5wdXNoKFNuKHQscykpO3ZhciBhPWw/UGUodCxzLG51bGwpOnthbmNob3I6bi5hbmNob3JCZWZvcmUsaGVhZDpuLmhlYWRCZWZvcmV9O1VlKHQscyxhLElyKHQscykpO3ZhciB1PVtdO2RuKHQsZnVuY3Rpb24odCxlKXtlfHwtMSE9dGkodSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LHMpLHUucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LHMsbnVsbCxJcih0LHMpKX0pfX19fWZ1bmN0aW9uIEtlKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gWWUodC5saW5lK2UsdC5jaCl9dC5maXJzdCs9ZSx0LmNtJiZ1ZSh0LmNtLHQuZmlyc3QsdC5maXJzdCxlKSx0LnNlbC5oZWFkPXIodC5zZWwuaGVhZCksdC5zZWwuYW5jaG9yPXIodC5zZWwuYW5jaG9yKSx0LnNlbC5mcm9tPXIodC5zZWwuZnJvbSksdC5zZWwudG89cih0LnNlbC50byl9ZnVuY3Rpb24gVWUodCxlLHIsbil7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVWUpKHQsZSxyLG4pO2lmKGUudG8ubGluZTx0LmZpcnN0KXJldHVybiBLZSh0LGUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKSksdm9pZCAwO2lmKCEoZS5mcm9tLmxpbmU+dC5sYXN0TGluZSgpKSl7aWYoZS5mcm9tLmxpbmU8dC5maXJzdCl7dmFyIGk9ZS50ZXh0Lmxlbmd0aC0xLSh0LmZpcnN0LWUuZnJvbS5saW5lKTtLZSh0LGkpLGU9e2Zyb206WWUodC5maXJzdCwwKSx0bzpZZShlLnRvLmxpbmUraSxlLnRvLmNoKSx0ZXh0OltRbihlLnRleHQpXSxvcmlnaW46ZS5vcmlnaW59fXZhciBvPXQubGFzdExpbmUoKTtlLnRvLmxpbmU+byYmKGU9e2Zyb206ZS5mcm9tLHRvOlllKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCksdGV4dDpbZS50ZXh0WzBdXSxvcmlnaW46ZS5vcmlnaW59KSxlLnJlbW92ZWQ9bW4odCxlLmZyb20sZS50bykscnx8KHI9UGUodCxlLG51bGwpKSx0LmNtP1hlKHQuY20sZSxuLHIpOmNuKHQsZSxuLHIpfX1mdW5jdGlvbiBYZSh0LGUscixuKXt2YXIgbz10LmRvYyxsPXQuZGlzcGxheSxzPWUuZnJvbSxhPWUudG8sdT0hMSxmPXMubGluZTt0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoZj1ibihHcihvLGduKG8scy5saW5lKSkpLG8uaXRlcihmLGEubGluZSsxLGZ1bmN0aW9uKHQpe3JldHVybiB0PT1sLm1heExpbmU/KHU9ITAsITApOnZvaWQgMH0pKSwkZShvLnNlbC5oZWFkLGUuZnJvbSl8fCRlKGUudG8sby5zZWwuaGVhZCl8fCh0LmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxjbihvLGUscixuLGkodCkpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fChvLml0ZXIoZixzLmxpbmUrZS50ZXh0Lmxlbmd0aCxmdW5jdGlvbih0KXt2YXIgZT1jKG8sdCk7ZT5sLm1heExpbmVMZW5ndGgmJihsLm1heExpbmU9dCxsLm1heExpbmVMZW5ndGg9ZSxsLm1heExpbmVDaGFuZ2VkPSEwLHU9ITEpfSksdSYmKHQuY3VyT3AudXBkYXRlTWF4TGluZT0hMCkpLG8uZnJvbnRpZXI9TWF0aC5taW4oby5mcm9udGllcixzLmxpbmUpLFcodCw0MDApO3ZhciBoPWUudGV4dC5sZW5ndGgtKGEubGluZS1zLmxpbmUpLTE7aWYodWUodCxzLmxpbmUsYS5saW5lKzEsaCksWW4odCwiY2hhbmdlIikpe3ZhciBkPXtmcm9tOnMsdG86YSx0ZXh0OmUudGV4dCxyZW1vdmVkOmUucmVtb3ZlZCxvcmlnaW46ZS5vcmlnaW59O2lmKHQuY3VyT3AudGV4dENoYW5nZWQpe2Zvcih2YXIgcD10LmN1ck9wLnRleHRDaGFuZ2VkO3AubmV4dDtwPXAubmV4dCk7cC5uZXh0PWR9ZWxzZSB0LmN1ck9wLnRleHRDaGFuZ2VkPWR9fWZ1bmN0aW9uIF9lKHQsZSxyLG4saSl7aWYobnx8KG49ciksJGUobixyKSl7dmFyIG89bjtuPXIscj1vfSJzdHJpbmciPT10eXBlb2YgZSYmKGU9em8oZSkpLEJlKHQse2Zyb206cix0bzpuLHRleHQ6ZSxvcmlnaW46aX0sbnVsbCl9ZnVuY3Rpb24gWWUodCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFllPyh0aGlzLmxpbmU9dCx0aGlzLmNoPWUsdm9pZCAwKTpuZXcgWWUodCxlKX1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiB0LmxpbmU9PWUubGluZSYmdC5jaD09ZS5jaH1mdW5jdGlvbiAkZSh0LGUpe3JldHVybiB0LmxpbmU8ZS5saW5lfHx0LmxpbmU9PWUubGluZSYmdC5jaDxlLmNofWZ1bmN0aW9uIFplKHQpe3JldHVybiBZZSh0LmxpbmUsdC5jaCl9ZnVuY3Rpb24gcWUodCxlKXtyZXR1cm4gTWF0aC5tYXgodC5maXJzdCxNYXRoLm1pbihlLHQuZmlyc3QrdC5zaXplLTEpKX1mdW5jdGlvbiBRZSh0LGUpe2lmKGUubGluZTx0LmZpcnN0KXJldHVybiBZZSh0LmZpcnN0LDApO3ZhciByPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGUubGluZT5yP1llKHIsZ24odCxyKS50ZXh0Lmxlbmd0aCk6SmUoZSxnbih0LGUubGluZSkudGV4dC5sZW5ndGgpfWZ1bmN0aW9uIEplKHQsZSl7dmFyIHI9dC5jaDtyZXR1cm4gbnVsbD09cnx8cj5lP1llKHQubGluZSxlKTowPnI/WWUodC5saW5lLDApOnR9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gZT49dC5maXJzdCYmZTx0LmZpcnN0K3Quc2l6ZX1mdW5jdGlvbiBlcih0LGUscixuKXtpZih0LnNlbC5zaGlmdHx8dC5zZWwuZXh0ZW5kKXt2YXIgaT10LnNlbC5hbmNob3I7aWYocil7dmFyIG89JGUoZSxpKTtvIT0kZShyLGkpPyhpPWUsZT1yKTpvIT0kZShlLHIpJiYoZT1yKX1ucih0LGksZSxuKX1lbHNlIG5yKHQsZSxyfHxlLG4pO3QuY20mJih0LmNtLmN1ck9wLnVzZXJTZWxDaGFuZ2U9ITApfWZ1bmN0aW9uIHJyKHQsZSxyKXt2YXIgbj17YW5jaG9yOmUsaGVhZDpyfTtyZXR1cm4gS24odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdC5jbSxuKSxuLmFuY2hvcj1RZSh0LG4uYW5jaG9yKSxuLmhlYWQ9UWUodCxuLmhlYWQpLG59ZnVuY3Rpb24gbnIodCxlLHIsbixpKXtpZighaSYmWW4odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpKXt2YXIgbz1ycih0LGUscik7cj1vLmhlYWQsZT1vLmFuY2hvcn12YXIgbD10LnNlbDtpZihsLmdvYWxDb2x1bW49bnVsbCxudWxsPT1uJiYobj0kZShyLGwuaGVhZCk/LTE6MSksKGl8fCFqZShlLGwuYW5jaG9yKSkmJihlPW9yKHQsZSxuLCJwdXNoIiE9aSkpLChpfHwhamUocixsLmhlYWQpKSYmKHI9b3IodCxyLG4sInB1c2giIT1pKSksIWplKGwuYW5jaG9yLGUpfHwhamUobC5oZWFkLHIpKXtsLmFuY2hvcj1lLGwuaGVhZD1yO3ZhciBzPSRlKHIsZSk7bC5mcm9tPXM/cjplLGwudG89cz9lOnIsdC5jbSYmKHQuY20uY3VyT3AudXBkYXRlSW5wdXQ9dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPXQuY20uY3VyT3AuY3Vyc29yQWN0aXZpdHk9ITApLFVuKHQsImN1cnNvckFjdGl2aXR5Iix0KX19ZnVuY3Rpb24gaXIodCl7bnIodC5kb2MsdC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvLG51bGwsInB1c2giKX1mdW5jdGlvbiBvcih0LGUscixuKXt2YXIgaT0hMSxvPWUsbD1yfHwxO3QuY2FudEVkaXQ9ITE7dDpmb3IoOzspe3ZhciBzPWduKHQsby5saW5lKTtpZihzLm1hcmtlZFNwYW5zKWZvcih2YXIgYT0wO2E8cy5tYXJrZWRTcGFucy5sZW5ndGg7KythKXt2YXIgdT1zLm1hcmtlZFNwYW5zW2FdLGM9dS5tYXJrZXI7aWYoKG51bGw9PXUuZnJvbXx8KGMuaW5jbHVzaXZlTGVmdD91LmZyb208PW8uY2g6dS5mcm9tPG8uY2gpKSYmKG51bGw9PXUudG98fChjLmluY2x1c2l2ZVJpZ2h0P3UudG8+PW8uY2g6dS50bz5vLmNoKSkpe2lmKG4mJihLbihjLCJiZWZvcmVDdXJzb3JFbnRlciIpLGMuZXhwbGljaXRseUNsZWFyZWQpKXtpZihzLm1hcmtlZFNwYW5zKXstLWE7Y29udGludWV9YnJlYWt9aWYoIWMuYXRvbWljKWNvbnRpbnVlO3ZhciBmPWMuZmluZCgpWzA+bD8iZnJvbSI6InRvIl07aWYoamUoZixvKSYmKGYuY2grPWwsZi5jaDwwP2Y9Zi5saW5lPnQuZmlyc3Q/UWUodCxZZShmLmxpbmUtMSkpOm51bGw6Zi5jaD5zLnRleHQubGVuZ3RoJiYoZj1mLmxpbmU8dC5maXJzdCt0LnNpemUtMT9ZZShmLmxpbmUrMSwwKTpudWxsKSwhZikpe2lmKGkpcmV0dXJuIG4/KHQuY2FudEVkaXQ9ITAsWWUodC5maXJzdCwwKSk6b3IodCxlLHIsITApO2k9ITAsZj1lLGw9LWx9bz1mO2NvbnRpbnVlIHR9fXJldHVybiBvfX1mdW5jdGlvbiBscih0KXt2YXIgZT1zcih0LHQuZG9jLnNlbC5oZWFkLG51bGwsdC5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbik7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgcj10LmRpc3BsYXksbj1maShyLnNpemVyKSxpPW51bGw7aWYoZS50b3Arbi50b3A8MD9pPSEwOmUuYm90dG9tK24udG9wPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoaT0hMSksbnVsbCE9aSYmIUJpKXt2YXIgbz0ibm9uZSI9PXIuY3Vyc29yLnN0eWxlLmRpc3BsYXk7byYmKHIuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5jdXJzb3Iuc3R5bGUubGVmdD1lLmxlZnQrInB4IixyLmN1cnNvci5zdHlsZS50b3A9ZS50b3Atci52aWV3T2Zmc2V0KyJweCIpLHIuY3Vyc29yLnNjcm9sbEludG9WaWV3KGkpLG8mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIil9fX1mdW5jdGlvbiBzcih0LGUscixuKXtmb3IobnVsbD09biYmKG49MCk7Oyl7dmFyIGk9ITEsbz1RKHQsZSksbD1yJiZyIT1lP1EodCxyKTpvLHM9dXIodCxNYXRoLm1pbihvLmxlZnQsbC5sZWZ0KSxNYXRoLm1pbihvLnRvcCxsLnRvcCktbixNYXRoLm1heChvLmxlZnQsbC5sZWZ0KSxNYXRoLm1heChvLmJvdHRvbSxsLmJvdHRvbSkrbiksYT10LmRvYy5zY3JvbGxUb3AsdT10LmRvYy5zY3JvbGxMZWZ0O2lmKG51bGwhPXMuc2Nyb2xsVG9wJiYoU2UodCxzLnNjcm9sbFRvcCksTWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWEpPjEmJihpPSEwKSksbnVsbCE9cy5zY3JvbGxMZWZ0JiYoTWUodCxzLnNjcm9sbExlZnQpLE1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtdSk+MSYmKGk9ITApKSwhaSlyZXR1cm4gb319ZnVuY3Rpb24gYXIodCxlLHIsbixpKXt2YXIgbz11cih0LGUscixuLGkpO251bGwhPW8uc2Nyb2xsVG9wJiZTZSh0LG8uc2Nyb2xsVG9wKSxudWxsIT1vLnNjcm9sbExlZnQmJk1lKHQsby5zY3JvbGxMZWZ0KX1mdW5jdGlvbiB1cih0LGUscixuLGkpe3ZhciBvPXQuZGlzcGxheSxsPXJlKHQuZGlzcGxheSk7MD5yJiYocj0wKTt2YXIgcz1vLnNjcm9sbGVyLmNsaWVudEhlaWdodC1UbyxhPW8uc2Nyb2xsZXIuc2Nyb2xsVG9wLHU9e30sYz10LmRvYy5oZWlnaHQrRihvKSxmPWw+cixoPWk+Yy1sO2lmKGE+cil1LnNjcm9sbFRvcD1mPzA6cjtlbHNlIGlmKGk+YStzKXt2YXIgZD1NYXRoLm1pbihyLChoP2M6aSktcyk7ZCE9YSYmKHUuc2Nyb2xsVG9wPWQpfXZhciBwPW8uc2Nyb2xsZXIuY2xpZW50V2lkdGgtVG8sZz1vLnNjcm9sbGVyLnNjcm9sbExlZnQ7ZSs9by5ndXR0ZXJzLm9mZnNldFdpZHRoLG4rPW8uZ3V0dGVycy5vZmZzZXRXaWR0aDt2YXIgbT1vLmd1dHRlcnMub2Zmc2V0V2lkdGgsdj1tKzEwPmU7cmV0dXJuIGcrbT5lfHx2Pyh2JiYoZT0wKSx1LnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxlLTEwLW0pKTpuPnArZy0zJiYodS5zY3JvbGxMZWZ0PW4rMTAtcCksdX1mdW5jdGlvbiBjcih0LGUscil7dC5jdXJPcC51cGRhdGVTY3JvbGxQb3M9e3Njcm9sbExlZnQ6bnVsbD09ZT90LmRvYy5zY3JvbGxMZWZ0OmUsc2Nyb2xsVG9wOm51bGw9PXI/dC5kb2Muc2Nyb2xsVG9wOnJ9fWZ1bmN0aW9uIGZyKHQsZSxyKXt2YXIgbj10LmN1ck9wLnVwZGF0ZVNjcm9sbFBvc3x8KHQuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0OnQuZG9jLnNjcm9sbExlZnQsc2Nyb2xsVG9wOnQuZG9jLnNjcm9sbFRvcH0pLGk9dC5kaXNwbGF5LnNjcm9sbGVyO24uc2Nyb2xsVG9wPU1hdGgubWF4KDAsTWF0aC5taW4oaS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQsbi5zY3JvbGxUb3ArcikpLG4uc2Nyb2xsTGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aCxuLnNjcm9sbExlZnQrZSkpfWZ1bmN0aW9uIGhyKHQsZSxyLG4pe3ZhciBpPXQuZG9jO2lmKG51bGw9PXImJihyPSJhZGQiKSwic21hcnQiPT1yKWlmKHQuZG9jLm1vZGUuaW5kZW50KXZhciBvPXoodCxlKTtlbHNlIHI9InByZXYiO3ZhciBsLHM9dC5vcHRpb25zLnRhYlNpemUsYT1nbihpLGUpLHU9Wm4oYS50ZXh0LG51bGwscyksYz1hLnRleHQubWF0Y2goL15ccyovKVswXTtpZigic21hcnQiPT1yJiYobD10LmRvYy5tb2RlLmluZGVudChvLGEudGV4dC5zbGljZShjLmxlbmd0aCksYS50ZXh0KSxsPT1Bbykpe2lmKCFuKXJldHVybjtyPSJwcmV2In0icHJldiI9PXI/bD1lPmkuZmlyc3Q/Wm4oZ24oaSxlLTEpLnRleHQsbnVsbCxzKTowOiJhZGQiPT1yP2w9dSt0Lm9wdGlvbnMuaW5kZW50VW5pdDoic3VidHJhY3QiPT1yP2w9dS10Lm9wdGlvbnMuaW5kZW50VW5pdDoibnVtYmVyIj09dHlwZW9mIHImJihsPXUrciksbD1NYXRoLm1heCgwLGwpO3ZhciBmPSIiLGg9MDtpZih0Lm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpZm9yKHZhciBkPU1hdGguZmxvb3IobC9zKTtkOy0tZCloKz1zLGYrPSIJIjtsPmgmJihmKz1xbihsLWgpKSxmIT1jP19lKHQuZG9jLGYsWWUoZSwwKSxZZShlLGMubGVuZ3RoKSwiK2lucHV0Iik6aS5zZWwuaGVhZC5saW5lPT1lJiZpLnNlbC5oZWFkLmNoPGMubGVuZ3RoJiZucihpLFllKGUsYy5sZW5ndGgpLFllKGUsYy5sZW5ndGgpLDEpLGEuc3RhdGVBZnRlcj1udWxsfWZ1bmN0aW9uIGRyKHQsZSxyKXt2YXIgbj1lLGk9ZSxvPXQuZG9jO3JldHVybiJudW1iZXIiPT10eXBlb2YgZT9pPWduKG8scWUobyxlKSk6bj1ibihlKSxudWxsPT1uP251bGw6cihpLG4pPyh1ZSh0LG4sbisxKSxpKTpudWxsfWZ1bmN0aW9uIHByKHQsZSxyLG4saSl7ZnVuY3Rpb24gbygpe3ZhciBlPXMrcjtyZXR1cm4gZTx0LmZpcnN0fHxlPj10LmZpcnN0K3Quc2l6ZT9mPSExOihzPWUsYz1nbih0LGUpKX1mdW5jdGlvbiBsKHQpe3ZhciBlPShpP1NpOk1pKShjLGEsciwhMCk7aWYobnVsbD09ZSl7aWYodHx8IW8oKSlyZXR1cm4gZj0hMTthPWk/KDA+cj9iaTp5aSkoYyk6MD5yP2MudGV4dC5sZW5ndGg6MH1lbHNlIGE9ZTtyZXR1cm4hMH12YXIgcz1lLmxpbmUsYT1lLmNoLHU9cixjPWduKHQscyksZj0hMDtpZigiY2hhciI9PW4pbCgpO2Vsc2UgaWYoImNvbHVtbiI9PW4pbCghMCk7ZWxzZSBpZigid29yZCI9PW58fCJncm91cCI9PW4pZm9yKHZhciBoPW51bGwsZD0iZ3JvdXAiPT1uLHA9ITA7ISgwPnIpfHxsKCFwKTtwPSExKXt2YXIgZz1jLnRleHQuY2hhckF0KGEpfHwiXG4iLG09b2koZyk/InciOmQ/L1xzLy50ZXN0KGcpP251bGw6InAiOm51bGw7aWYoaCYmaCE9bSl7MD5yJiYocj0xLGwoKSk7YnJlYWt9aWYobSYmKGg9bSkscj4wJiYhbCghcCkpYnJlYWt9dmFyIHY9b3IodCxZZShzLGEpLHUsITApO3JldHVybiBmfHwodi5oaXRTaWRlPSEwKSx2fWZ1bmN0aW9uIGdyKHQsZSxyLG4pe3ZhciBpLG89dC5kb2MsbD1lLmxlZnQ7aWYoInBhZ2UiPT1uKXt2YXIgcz1NYXRoLm1pbih0LmRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsd2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTtpPWUudG9wK3IqKHMtKDA+cj8xLjU6LjUpKnJlKHQuZGlzcGxheSkpfWVsc2UibGluZSI9PW4mJihpPXI+MD9lLmJvdHRvbSszOmUudG9wLTMpO2Zvcig7Oyl7dmFyIGE9dGUodCxsLGkpO2lmKCFhLm91dHNpZGUpYnJlYWs7aWYoMD5yPzA+PWk6aT49by5oZWlnaHQpe2EuaGl0U2lkZT0hMDticmVha31pKz01KnJ9cmV0dXJuIGF9ZnVuY3Rpb24gbXIodCxlKXt2YXIgcj1lLmNoLG49ZS5jaDtpZih0KXsoZS54UmVsPDB8fG49PXQubGVuZ3RoKSYmcj8tLXI6KytuO2Zvcih2YXIgaT10LmNoYXJBdChyKSxvPW9pKGkpP29pOi9ccy8udGVzdChpKT9mdW5jdGlvbih0KXtyZXR1cm4vXHMvLnRlc3QodCl9OmZ1bmN0aW9uKHQpe3JldHVybiEvXHMvLnRlc3QodCkmJiFvaSh0KX07cj4wJiZvKHQuY2hhckF0KHItMSkpOyktLXI7Zm9yKDtuPHQubGVuZ3RoJiZvKHQuY2hhckF0KG4pKTspKytufXJldHVybntmcm9tOlllKGUubGluZSxyKSx0bzpZZShlLmxpbmUsbil9fWZ1bmN0aW9uIHZyKHQsZSl7ZXIodC5kb2MsWWUoZSwwKSxRZSh0LmRvYyxZZShlKzEsMCkpKX1mdW5jdGlvbiB5cihlLHIsbixpKXt0LmRlZmF1bHRzW2VdPXIsbiYmKHNvW2VdPWk/ZnVuY3Rpb24odCxlLHIpe3IhPXVvJiZuKHQsZSxyKX06bil9ZnVuY3Rpb24gYnIodCxlKXtpZihlPT09ITApcmV0dXJuIGU7aWYodC5jb3B5U3RhdGUpcmV0dXJuIHQuY29weVN0YXRlKGUpO3ZhciByPXt9O2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dO2kgaW5zdGFuY2VvZiBBcnJheSYmKGk9aS5jb25jYXQoW10pKSxyW25dPWl9cmV0dXJuIHJ9ZnVuY3Rpb24geHIodCxlLHIpe3JldHVybiB0LnN0YXJ0U3RhdGU/dC5zdGFydFN0YXRlKGUscik6ITB9ZnVuY3Rpb24gQ3IodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3ZvW3RdOnR9ZnVuY3Rpb24gd3IodCxlLHIpe2Z1bmN0aW9uIG4oZSl7ZT1DcihlKTt2YXIgaT1lW3RdO2lmKGk9PT0hMSlyZXR1cm4ic3RvcCI7aWYobnVsbCE9aSYmcihpKSlyZXR1cm4hMDtpZihlLm5vZmFsbHRocm91Z2gpcmV0dXJuInN0b3AiO3ZhciBvPWUuZmFsbHRocm91Z2g7aWYobnVsbD09bylyZXR1cm4hMTtpZigiW29iamVjdCBBcnJheV0iIT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpcmV0dXJuIG4obyk7Zm9yKHZhciBsPTAscz1vLmxlbmd0aDtzPmw7KytsKXt2YXIgYT1uKG9bbF0pO2lmKGEpcmV0dXJuIGF9cmV0dXJuITF9Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBvPW4oZVtpXSk7aWYobylyZXR1cm4ic3RvcCIhPW99fWZ1bmN0aW9uIExyKHQpe3ZhciBlPVBvW3Qua2V5Q29kZV07cmV0dXJuIkN0cmwiPT1lfHwiQWx0Ij09ZXx8IlNoaWZ0Ij09ZXx8Ik1vZCI9PWV9ZnVuY3Rpb24ga3IodCxlKXtpZih6aSYmMzQ9PXQua2V5Q29kZSYmdFsiY2hhciJdKXJldHVybiExO3ZhciByPVBvW3Qua2V5Q29kZV07cmV0dXJuIG51bGw9PXJ8fHQuYWx0R3JhcGhLZXk/ITE6KHQuYWx0S2V5JiYocj0iQWx0LSIrciksKCRpP3QubWV0YUtleTp0LmN0cmxLZXkpJiYocj0iQ3RybC0iK3IpLCgkaT90LmN0cmxLZXk6dC5tZXRhS2V5KSYmKHI9IkNtZC0iK3IpLCFlJiZ0LnNoaWZ0S2V5JiYocj0iU2hpZnQtIityKSxyKX1mdW5jdGlvbiBTcih0LGUpe3RoaXMucG9zPXRoaXMuc3RhcnQ9MCx0aGlzLnN0cmluZz10LHRoaXMudGFiU2l6ZT1lfHw4LHRoaXMubGFzdENvbHVtblBvcz10aGlzLmxhc3RDb2x1bW5WYWx1ZT0wfWZ1bmN0aW9uIE1yKHQsZSl7dGhpcy5saW5lcz1bXSx0aGlzLnR5cGU9ZSx0aGlzLmRvYz10fWZ1bmN0aW9uIFRyKHQsZSxyLG4saSl7aWYobiYmbi5zaGFyZWQpcmV0dXJuIEhyKHQsZSxyLG4saSk7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVHIpKHQsZSxyLG4saSk7dmFyIG89bmV3IE1yKHQsaSk7aWYoJGUocixlKXx8amUoZSxyKSYmInJhbmdlIj09aSYmKCFuLmluY2x1c2l2ZUxlZnR8fCFuLmluY2x1c2l2ZVJpZ2h0KSlyZXR1cm4gbztuJiZyaShuLG8pLG8ucmVwbGFjZWRXaXRoJiYoby5jb2xsYXBzZWQ9ITAsby5yZXBsYWNlZFdpdGg9c2koInNwYW4iLFtvLnJlcGxhY2VkV2l0aF0sIkNvZGVNaXJyb3Itd2lkZ2V0Iiksbi5oYW5kbGVNb3VzZUV2ZW50c3x8KG8ucmVwbGFjZWRXaXRoLmlnbm9yZUV2ZW50cz0hMCkpLG8uY29sbGFwc2VkJiYoUWk9ITApLG8uYWRkVG9IaXN0b3J5JiZNbih0LHtmcm9tOmUsdG86cixvcmlnaW46Im1hcmtUZXh0In0se2hlYWQ6dC5zZWwuaGVhZCxhbmNob3I6dC5zZWwuYW5jaG9yfSwwLzApO3ZhciBsLHMsYSx1PWUubGluZSxjPTAsZj10LmNtO2lmKHQuaXRlcih1LHIubGluZSsxLGZ1bmN0aW9uKG4pe2YmJm8uY29sbGFwc2VkJiYhZi5vcHRpb25zLmxpbmVXcmFwcGluZyYmR3IodCxuKT09Zi5kaXNwbGF5Lm1heExpbmUmJihhPSEwKTt2YXIgaT17ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOm99O2MrPW4udGV4dC5sZW5ndGgsdT09ZS5saW5lJiYoaS5mcm9tPWUuY2gsYy09ZS5jaCksdT09ci5saW5lJiYoaS50bz1yLmNoLGMtPW4udGV4dC5sZW5ndGgtci5jaCksby5jb2xsYXBzZWQmJih1PT1yLmxpbmUmJihzPVByKG4sci5jaCkpLHU9PWUubGluZT9sPVByKG4sZS5jaCk6eW4obiwwKSksV3IobixpKSwrK3V9KSxvLmNvbGxhcHNlZCYmdC5pdGVyKGUubGluZSxyLmxpbmUrMSxmdW5jdGlvbihlKXtWcih0LGUpJiZ5bihlLDApfSksby5jbGVhck9uRW50ZXImJkduKG8sImJlZm9yZUN1cnNvckVudGVyIixmdW5jdGlvbigpe28uY2xlYXIoKX0pLG8ucmVhZE9ubHkmJihxaT0hMCwodC5oaXN0b3J5LmRvbmUubGVuZ3RofHx0Lmhpc3RvcnkudW5kb25lLmxlbmd0aCkmJnQuY2xlYXJIaXN0b3J5KCkpLG8uY29sbGFwc2VkKXtpZihsIT1zKXRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7by5zaXplPWMsby5hdG9taWM9ITB9cmV0dXJuIGYmJihhJiYoZi5jdXJPcC51cGRhdGVNYXhMaW5lPSEwKSwoby5jbGFzc05hbWV8fG8udGl0bGV8fG8uc3RhcnRTdHlsZXx8by5lbmRTdHlsZXx8by5jb2xsYXBzZWQpJiZ1ZShmLGUubGluZSxyLmxpbmUrMSksby5hdG9taWMmJmlyKGYpKSxvfWZ1bmN0aW9uIEFyKHQsZSl7dGhpcy5tYXJrZXJzPXQsdGhpcy5wcmltYXJ5PWU7Zm9yKHZhciByPTAsbj10aGlzO3I8dC5sZW5ndGg7KytyKXRbcl0ucGFyZW50PXRoaXMsR24odFtyXSwiY2xlYXIiLGZ1bmN0aW9uKCl7bi5jbGVhcigpfSl9ZnVuY3Rpb24gSHIodCxlLHIsbixpKXtuPXJpKG4pLG4uc2hhcmVkPSExO3ZhciBvPVtUcih0LGUscixuLGkpXSxsPW9bMF0scz1uLnJlcGxhY2VkV2l0aDtyZXR1cm4gZG4odCxmdW5jdGlvbih0KXtzJiYobi5yZXBsYWNlZFdpdGg9cy5jbG9uZU5vZGUoITApKSxvLnB1c2goVHIodCxRZSh0LGUpLFFlKHQsciksbixpKSk7Zm9yKHZhciBhPTA7YTx0LmxpbmtlZC5sZW5ndGg7KythKWlmKHQubGlua2VkW2FdLmlzUGFyZW50KXJldHVybjtsPVFuKG8pfSksbmV3IEFyKG8sbCl9ZnVuY3Rpb24gTnIodCxlKXtpZih0KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2lmKG4ubWFya2VyPT1lKXJldHVybiBufX1mdW5jdGlvbiBEcih0LGUpe2Zvcih2YXIgcixuPTA7bjx0Lmxlbmd0aDsrK24pdFtuXSE9ZSYmKHJ8fChyPVtdKSkucHVzaCh0W25dKTtyZXR1cm4gcn1mdW5jdGlvbiBXcih0LGUpe3QubWFya2VkU3BhbnM9dC5tYXJrZWRTcGFucz90Lm1hcmtlZFNwYW5zLmNvbmNhdChbZV0pOltlXSxlLm1hcmtlci5hdHRhY2hMaW5lKHQpfWZ1bmN0aW9uIE9yKHQsZSxyKXtpZih0KWZvcih2YXIgbixpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBvPXRbaV0sbD1vLm1hcmtlcixzPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpO2lmKHN8fChsLmluY2x1c2l2ZUxlZnQmJmwuaW5jbHVzaXZlUmlnaHR8fCJib29rbWFyayI9PWwudHlwZSkmJm8uZnJvbT09ZSYmKCFyfHwhby5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8udG98fChsLmluY2x1c2l2ZVJpZ2h0P28udG8+PWU6by50bz5lKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOm8uZnJvbSx0bzphP251bGw6by50byxtYXJrZXI6bH0pfX1yZXR1cm4gbn1mdW5jdGlvbiBFcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7aWYoc3x8ImJvb2ttYXJrIj09bC50eXBlJiZvLmZyb209PWUmJighcnx8by5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpOyhufHwobj1bXSkpLnB1c2goe2Zyb206YT9udWxsOm8uZnJvbS1lLHRvOm51bGw9PW8udG8/bnVsbDpvLnRvLWUsbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24genIodCxlKXt2YXIgcj10cih0LGUuZnJvbS5saW5lKSYmZ24odCxlLmZyb20ubGluZSkubWFya2VkU3BhbnMsbj10cih0LGUudG8ubGluZSkmJmduKHQsZS50by5saW5lKS5tYXJrZWRTcGFucztpZighciYmIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5mcm9tLmNoLG89ZS50by5jaCxsPWplKGUuZnJvbSxlLnRvKSxzPU9yKHIsaSxsKSxhPUVyKG4sbyxsKSx1PTE9PWUudGV4dC5sZW5ndGgsYz1RbihlLnRleHQpLmxlbmd0aCsodT9pOjApO2lmKHMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2Ype3ZhciBoPXNbZl07aWYobnVsbD09aC50byl7dmFyIGQ9TnIoYSxoLm1hcmtlcik7ZD91JiYoaC50bz1udWxsPT1kLnRvP251bGw6ZC50bytjKTpoLnRvPWl9fWlmKGEpZm9yKHZhciBmPTA7ZjxhLmxlbmd0aDsrK2Ype3ZhciBoPWFbZl07aWYobnVsbCE9aC50byYmKGgudG8rPWMpLG51bGw9PWguZnJvbSl7dmFyIGQ9TnIocyxoLm1hcmtlcik7ZHx8KGguZnJvbT1jLHUmJihzfHwocz1bXSkpLnB1c2goaCkpfWVsc2UgaC5mcm9tKz1jLHUmJihzfHwocz1bXSkpLnB1c2goaCl9aWYodSYmcyl7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbCE9c1tmXS5mcm9tJiZzW2ZdLmZyb209PXNbZl0udG8mJiJib29rbWFyayIhPXNbZl0ubWFya2VyLnR5cGUmJnMuc3BsaWNlKGYtLSwxKTtzLmxlbmd0aHx8KHM9bnVsbCl9dmFyIHA9W3NdO2lmKCF1KXt2YXIgZyxtPWUudGV4dC5sZW5ndGgtMjtpZihtPjAmJnMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbD09c1tmXS50byYmKGd8fChnPVtdKSkucHVzaCh7ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOnNbZl0ubWFya2VyfSk7Zm9yKHZhciBmPTA7bT5mOysrZilwLnB1c2goZyk7cC5wdXNoKGEpfXJldHVybiBwfWZ1bmN0aW9uIElyKHQsZSl7dmFyIHI9QW4odCxlKSxuPXpyKHQsZSk7aWYoIXIpcmV0dXJuIG47aWYoIW4pcmV0dXJuIHI7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBvPXJbaV0sbD1uW2ldO2lmKG8mJmwpdDpmb3IodmFyIHM9MDtzPGwubGVuZ3RoOysrcyl7Zm9yKHZhciBhPWxbc10sdT0wO3U8by5sZW5ndGg7Kyt1KWlmKG9bdV0ubWFya2VyPT1hLm1hcmtlciljb250aW51ZSB0O28ucHVzaChhKX1lbHNlIGwmJihyW2ldPWwpfXJldHVybiByfWZ1bmN0aW9uIEZyKHQsZSxyKXt2YXIgbj1udWxsO2lmKHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7aWYodC5tYXJrZWRTcGFucylmb3IodmFyIGU9MDtlPHQubWFya2VkU3BhbnMubGVuZ3RoOysrZSl7dmFyIHI9dC5tYXJrZWRTcGFuc1tlXS5tYXJrZXI7IXIucmVhZE9ubHl8fG4mJi0xIT10aShuLHIpfHwobnx8KG49W10pKS5wdXNoKHIpfX0pLCFuKXJldHVybiBudWxsO2Zvcih2YXIgaT1be2Zyb206ZSx0bzpyfV0sbz0wO288bi5sZW5ndGg7KytvKWZvcih2YXIgbD1uW29dLHM9bC5maW5kKCksYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgdT1pW2FdO2lmKCEkZSh1LnRvLHMuZnJvbSkmJiEkZShzLnRvLHUuZnJvbSkpe3ZhciBjPVthLDFdOygkZSh1LmZyb20scy5mcm9tKXx8IWwuaW5jbHVzaXZlTGVmdCYmamUodS5mcm9tLHMuZnJvbSkpJiZjLnB1c2goe2Zyb206dS5mcm9tLHRvOnMuZnJvbX0pLCgkZShzLnRvLHUudG8pfHwhbC5pbmNsdXNpdmVSaWdodCYmamUodS50byxzLnRvKSkmJmMucHVzaCh7ZnJvbTpzLnRvLHRvOnUudG99KSxpLnNwbGljZS5hcHBseShpLGMpLGErPWMubGVuZ3RoLTF9fXJldHVybiBpfWZ1bmN0aW9uIFByKHQsZSl7dmFyIHIsbj1RaSYmdC5tYXJrZWRTcGFucztpZihuKWZvcih2YXIgaSxvPTA7bzxuLmxlbmd0aDsrK28paT1uW29dLGkubWFya2VyLmNvbGxhcHNlZCYmKG51bGw9PWkuZnJvbXx8aS5mcm9tPGUpJiYobnVsbD09aS50b3x8aS50bz5lKSYmKCFyfHxyLndpZHRoPGkubWFya2VyLndpZHRoKSYmKHI9aS5tYXJrZXIpO3JldHVybiByfWZ1bmN0aW9uIFJyKHQpe3JldHVybiBQcih0LC0xKX1mdW5jdGlvbiBCcih0KXtyZXR1cm4gUHIodCx0LnRleHQubGVuZ3RoKzEpfWZ1bmN0aW9uIEdyKHQsZSl7Zm9yKHZhciByO3I9UnIoZSk7KWU9Z24odCxyLmZpbmQoKS5mcm9tLmxpbmUpO3JldHVybiBlfWZ1bmN0aW9uIFZyKHQsZSl7dmFyIHI9UWkmJmUubWFya2VkU3BhbnM7aWYocilmb3IodmFyIG4saT0wO2k8ci5sZW5ndGg7KytpKWlmKG49cltpXSxuLm1hcmtlci5jb2xsYXBzZWQpe2lmKG51bGw9PW4uZnJvbSlyZXR1cm4hMDtpZighbi5tYXJrZXIucmVwbGFjZWRXaXRoJiYwPT1uLmZyb20mJm4ubWFya2VyLmluY2x1c2l2ZUxlZnQmJktyKHQsZSxuKSlyZXR1cm4hMH19ZnVuY3Rpb24gS3IodCxlLHIpe2lmKG51bGw9PXIudG8pe3ZhciBuPXIubWFya2VyLmZpbmQoKS50byxpPWduKHQsbi5saW5lKTtyZXR1cm4gS3IodCxpLE5yKGkubWFya2VkU3BhbnMsci5tYXJrZXIpKX1pZihyLm1hcmtlci5pbmNsdXNpdmVSaWdodCYmci50bz09ZS50ZXh0Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG8sbD0wO2w8ZS5tYXJrZWRTcGFucy5sZW5ndGg7KytsKWlmKG89ZS5tYXJrZWRTcGFuc1tsXSxvLm1hcmtlci5jb2xsYXBzZWQmJiFvLm1hcmtlci5yZXBsYWNlZFdpdGgmJm8uZnJvbT09ci50byYmKG8ubWFya2VyLmluY2x1c2l2ZUxlZnR8fHIubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSYmS3IodCxlLG8pKXJldHVybiEwfWZ1bmN0aW9uIFVyKHQpe3ZhciBlPXQubWFya2VkU3BhbnM7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuZGV0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPW51bGx9fWZ1bmN0aW9uIFhyKHQsZSl7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuYXR0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPWV9fWZ1bmN0aW9uIF9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPSF0aGlzLmNtLmN1ck9wO2UmJmllKHRoaXMuY20pO3RyeXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2UmJm9lKHRoaXMuY20pfXJldHVybiByfX1mdW5jdGlvbiBZcih0KXtyZXR1cm4gbnVsbCE9dC5oZWlnaHQ/dC5oZWlnaHQ6KHQubm9kZS5wYXJlbnROb2RlJiYxPT10Lm5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZXx8dWkodC5jbS5kaXNwbGF5Lm1lYXN1cmUsc2koImRpdiIsW3Qubm9kZV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIikpLHQuaGVpZ2h0PXQubm9kZS5vZmZzZXRIZWlnaHQpfWZ1bmN0aW9uIGpyKHQsZSxyLG4pe3ZhciBpPW5ldyB5byh0LHIsbik7cmV0dXJuIGkubm9IU2Nyb2xsJiYodC5kaXNwbGF5LmFsaWduV2lkZ2V0cz0hMCksZHIodCxlLGZ1bmN0aW9uKGUpe3ZhciByPWUud2lkZ2V0c3x8KGUud2lkZ2V0cz1bXSk7aWYobnVsbD09aS5pbnNlcnRBdD9yLnB1c2goaSk6ci5zcGxpY2UoTWF0aC5taW4oci5sZW5ndGgtMSxNYXRoLm1heCgwLGkuaW5zZXJ0QXQpKSwwLGkpLGkubGluZT1lLCFWcih0LmRvYyxlKXx8aS5zaG93SWZIaWRkZW4pe3ZhciBuPUNuKHQsZSk8dC5kb2Muc2Nyb2xsVG9wO3luKGUsZS5oZWlnaHQrWXIoaSkpLG4mJmZyKHQsMCxpLmhlaWdodCl9cmV0dXJuITB9KSxpfWZ1bmN0aW9uICRyKHQsZSxyLG4pe3QudGV4dD1lLHQuc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpLG51bGwhPXQub3JkZXImJih0Lm9yZGVyPW51bGwpLFVyKHQpLFhyKHQscik7dmFyIGk9bj9uKHQpOjE7aSE9dC5oZWlnaHQmJnluKHQsaSl9ZnVuY3Rpb24gWnIodCl7dC5wYXJlbnQ9bnVsbCxVcih0KX1mdW5jdGlvbiBxcih0LGUscixuLGksbyl7dmFyIGw9ci5mbGF0dGVuU3BhbnM7bnVsbD09bCYmKGw9dC5vcHRpb25zLmZsYXR0ZW5TcGFucyk7dmFyIHMsYT0wLHU9bnVsbCxjPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3IoIiI9PWUmJnIuYmxhbmtMaW5lJiZyLmJsYW5rTGluZShuKTshYy5lb2woKTspYy5wb3M+dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aD8obD0hMSxvJiZ0bih0LGUsbixjLnBvcyksYy5wb3M9ZS5sZW5ndGgscz1udWxsKTpzPXIudG9rZW4oYyxuKSxsJiZ1PT1zfHwoYTxjLnN0YXJ0JiZpKGMuc3RhcnQsdSksYT1jLnN0YXJ0LHU9cyksYy5zdGFydD1jLnBvcztmb3IoO2E8Yy5wb3M7KXt2YXIgZj1NYXRoLm1pbihjLnBvcyxhKzVlNCk7aShmLHUpLGE9Zn19ZnVuY3Rpb24gUXIodCxlLHIsbil7dmFyIGk9W3Quc3RhdGUubW9kZUdlbl07cXIodCxlLnRleHQsdC5kb2MubW9kZSxyLGZ1bmN0aW9uKHQsZSl7aS5wdXNoKHQsZSl9LG4pO2Zvcih2YXIgbz0wO288dC5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7KytvKXt2YXIgbD10LnN0YXRlLm92ZXJsYXlzW29dLHM9MSxhPTA7cXIodCxlLnRleHQsbC5tb2RlLCEwLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXM7dD5hOyl7dmFyIG49aVtzXTtuPnQmJmkuc3BsaWNlKHMsMSx0LGlbcysxXSxuKSxzKz0yLGE9TWF0aC5taW4odCxuKX1pZihlKWlmKGwub3BhcXVlKWkuc3BsaWNlKHIscy1yLHQsZSkscz1yKzI7ZWxzZSBmb3IoO3M+cjtyKz0yKXt2YXIgbz1pW3IrMV07aVtyKzFdPW8/bysiICIrZTplfX0pfXJldHVybiBpfWZ1bmN0aW9uIEpyKHQsZSl7cmV0dXJuIGUuc3R5bGVzJiZlLnN0eWxlc1swXT09dC5zdGF0ZS5tb2RlR2VufHwoZS5zdHlsZXM9UXIodCxlLGUuc3RhdGVBZnRlcj16KHQsYm4oZSkpKSksZS5zdHlsZXN9ZnVuY3Rpb24gdG4odCxlLHIsbil7dmFyIGk9dC5kb2MubW9kZSxvPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3Ioby5zdGFydD1vLnBvcz1ufHwwLCIiPT1lJiZpLmJsYW5rTGluZSYmaS5ibGFua0xpbmUocik7IW8uZW9sKCkmJm8ucG9zPD10Lm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoOylpLnRva2VuKG8sciksby5zdGFydD1vLnBvc31mdW5jdGlvbiBlbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2Zvcig7Oyl7dmFyIHI9dC5tYXRjaCgvKD86XnxccylsaW5lLShiYWNrZ3JvdW5kLSk/KFxTKykvKTtpZighcilicmVhazt0PXQuc2xpY2UoMCxyLmluZGV4KSt0LnNsaWNlKHIuaW5kZXgrclswXS5sZW5ndGgpO3ZhciBuPXJbMV0/ImJnQ2xhc3MiOiJ0ZXh0Q2xhc3MiO251bGw9PWVbbl0/ZVtuXT1yWzJdOm5ldyBSZWdFeHAoIig/Ol58cykiK3JbMl0rIig/OiR8cykiKS50ZXN0KGVbbl0pfHwoZVtuXSs9IiAiK3JbMl0pfXJldHVybiB4b1t0XXx8KHhvW3RdPSJjbS0iK3QucmVwbGFjZSgvICsvZywiIGNtLSIpKX1mdW5jdGlvbiBybih0LGUscixuKXtmb3IodmFyIGksbz1lLGw9ITA7aT1ScihvKTspbz1nbih0LmRvYyxpLmZpbmQoKS5mcm9tLmxpbmUpO3ZhciBzPXtwcmU6c2koInByZSIpLGNvbDowLHBvczowLG1lYXN1cmU6bnVsbCxtZWFzdXJlZFNvbWV0aGluZzohMSxjbTp0LGNvcHlXaWRnZXRzOm59O2Rve28udGV4dCYmKGw9ITEpLHMubWVhc3VyZT1vPT1lJiZyLHMucG9zPTAscy5hZGRUb2tlbj1zLm1lYXN1cmU/bG46b24sKEFpfHxXaSkmJnQuZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSYmKHMuYWRkVG9rZW49c24ocy5hZGRUb2tlbikpO3ZhciBhPXVuKG8scyxKcih0LG8pKTtyJiZvPT1lJiYhcy5tZWFzdXJlZFNvbWV0aGluZyYmKHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKSxzLm1lYXN1cmVkU29tZXRoaW5nPSEwKSxhJiYobz1nbih0LmRvYyxhLnRvLmxpbmUpKX13aGlsZShhKTshcnx8cy5tZWFzdXJlZFNvbWV0aGluZ3x8clswXXx8KHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQobD9zaSgic3BhbiIsIsKgIik6cGkodC5kaXNwbGF5Lm1lYXN1cmUpKSkscy5wcmUuZmlyc3RDaGlsZHx8VnIodC5kb2MsZSl8fHMucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCLCoCIpKTt2YXIgdTtpZihyJiYoQWl8fERpKSYmKHU9d24obykpKXt2YXIgYz11Lmxlbmd0aC0xO3VbY10uZnJvbT09dVtjXS50byYmLS1jO3ZhciBmPXVbY10saD11W2MtMV07aWYoZi5mcm9tKzE9PWYudG8mJmgmJmYubGV2ZWw8aC5sZXZlbCl7dmFyIGQ9cltzLnBvcy0xXTtkJiZkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGQubWVhc3VyZVJpZ2h0PXBpKHQuZGlzcGxheS5tZWFzdXJlKSxkLm5leHRTaWJsaW5nKX19dmFyIHA9cy50ZXh0Q2xhc3M/cy50ZXh0Q2xhc3MrIiAiKyhlLnRleHRDbGFzc3x8IiIpOmUudGV4dENsYXNzO3JldHVybiBwJiYocy5wcmUuY2xhc3NOYW1lPXApLEtuKHQsInJlbmRlckxpbmUiLHQsZSxzLnByZSksc31mdW5jdGlvbiBubih0KXt2YXIgZT1zaSgic3BhbiIsIuKAoiIsImNtLWludmFsaWRjaGFyIik7cmV0dXJuIGUudGl0bGU9IlxcdSIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSxlfWZ1bmN0aW9uIG9uKHQsZSxyLG4saSxvKXtpZihlKXt2YXIgbD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJzO2lmKGwudGVzdChlKSlmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MDs7KXtsLmxhc3RJbmRleD1hO3ZhciB1PWwuZXhlYyhlKSxjPXU/dS5pbmRleC1hOmUubGVuZ3RoLWE7aWYoYyYmKHMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZS5zbGljZShhLGErYykpKSx0LmNvbCs9YyksIXUpYnJlYWs7aWYoYSs9YysxLCIJIj09dVswXSl7dmFyIGY9dC5jbS5vcHRpb25zLnRhYlNpemUsaD1mLXQuY29sJWY7cy5hcHBlbmRDaGlsZChzaSgic3BhbiIscW4oaCksImNtLXRhYiIpKSx0LmNvbCs9aH1lbHNle3ZhciBkPXQuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKHVbMF0pO3MuYXBwZW5kQ2hpbGQoZCksdC5jb2wrPTF9fWVsc2V7dC5jb2wrPWUubGVuZ3RoO3ZhciBzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpfWlmKHJ8fG58fGl8fHQubWVhc3VyZSl7dmFyIHA9cnx8IiI7biYmKHArPW4pLGkmJihwKz1pKTt2YXIgZD1zaSgic3BhbiIsW3NdLHApO3JldHVybiBvJiYoZC50aXRsZT1vKSx0LnByZS5hcHBlbmRDaGlsZChkKX10LnByZS5hcHBlbmRDaGlsZChzKX19ZnVuY3Rpb24gbG4odCxlLHIsbixpKXtmb3IodmFyIG89dC5jbS5vcHRpb25zLmxpbmVXcmFwcGluZyxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBzPWUuY2hhckF0KGwpLGE9MD09bDtzPj0i7aCAIiYmIu2vvyI+cyYmbDxlLmxlbmd0aC0xPyhzPWUuc2xpY2UobCxsKzIpLCsrbCk6bCYmbyYmaGkoZSxsKSYmdC5wcmUuYXBwZW5kQ2hpbGQoc2koIndiciIpKTt2YXIgdT10Lm1lYXN1cmVbdC5wb3NdLGM9dC5tZWFzdXJlW3QucG9zXT1vbih0LHMscixhJiZuLGw9PWUubGVuZ3RoLTEmJmkpO3UmJihjLmxlZnRTaWRlPXUubGVmdFNpZGV8fHUpLEFpJiZvJiYiICI9PXMmJmwmJiEvXHMvLnRlc3QoZS5jaGFyQXQobC0xKSkmJmw8ZS5sZW5ndGgtMSYmIS9ccy8udGVzdChlLmNoYXJBdChsKzEpKSYmKGMuc3R5bGUud2hpdGVTcGFjZT0ibm9ybWFsIiksdC5wb3MrPXMubGVuZ3RofWUubGVuZ3RoJiYodC5tZWFzdXJlZFNvbWV0aGluZz0hMCl9ZnVuY3Rpb24gc24odCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9IiAiLHI9MDtyPHQubGVuZ3RoLTI7KytyKWUrPXIlMj8iICI6IsKgIjtyZXR1cm4gZSs9IiAifXJldHVybiBmdW5jdGlvbihyLG4saSxvLGwscyl7cmV0dXJuIHQocixuLnJlcGxhY2UoLyB7Myx9L2csZSksaSxvLGwscyl9fWZ1bmN0aW9uIGFuKHQsZSxyLG4pe3ZhciBpPSFuJiZyLnJlcGxhY2VkV2l0aDtpZihpJiYodC5jb3B5V2lkZ2V0cyYmKGk9aS5jbG9uZU5vZGUoITApKSx0LnByZS5hcHBlbmRDaGlsZChpKSx0Lm1lYXN1cmUpKXtpZihlKXQubWVhc3VyZVt0LnBvc109aTtlbHNle3ZhciBvPXBpKHQuY20uZGlzcGxheS5tZWFzdXJlKTtpZigiYm9va21hcmsiIT1yLnR5cGV8fHIuaW5zZXJ0TGVmdCl7aWYodC5tZWFzdXJlW3QucG9zXSlyZXR1cm47dC5tZWFzdXJlW3QucG9zXT10LnByZS5pbnNlcnRCZWZvcmUobyxpKX1lbHNlIHQubWVhc3VyZVt0LnBvc109dC5wcmUuYXBwZW5kQ2hpbGQobyl9dC5tZWFzdXJlZFNvbWV0aGluZz0hMH10LnBvcys9ZX1mdW5jdGlvbiB1bih0LGUscil7dmFyIG49dC5tYXJrZWRTcGFucyxpPXQudGV4dCxvPTA7aWYobilmb3IodmFyIGwscyxhLHUsYyxmLGg9aS5sZW5ndGgsZD0wLHA9MSxnPSIiLG09MDs7KXtpZihtPT1kKXtzPWE9dT1jPSIiLGY9bnVsbCxtPTEvMDtmb3IodmFyIHY9W10seT0wO3k8bi5sZW5ndGg7Kyt5KXt2YXIgYj1uW3ldLHg9Yi5tYXJrZXI7Yi5mcm9tPD1kJiYobnVsbD09Yi50b3x8Yi50bz5kKT8obnVsbCE9Yi50byYmbT5iLnRvJiYobT1iLnRvLGE9IiIpLHguY2xhc3NOYW1lJiYocys9IiAiK3guY2xhc3NOYW1lKSx4LnN0YXJ0U3R5bGUmJmIuZnJvbT09ZCYmKHUrPSIgIit4LnN0YXJ0U3R5bGUpLHguZW5kU3R5bGUmJmIudG89PW0mJihhKz0iICIreC5lbmRTdHlsZSkseC50aXRsZSYmIWMmJihjPXgudGl0bGUpLHguY29sbGFwc2VkJiYoIWZ8fGYubWFya2VyLnNpemU8eC5zaXplKSYmKGY9YikpOmIuZnJvbT5kJiZtPmIuZnJvbSYmKG09Yi5mcm9tKSwiYm9va21hcmsiPT14LnR5cGUmJmIuZnJvbT09ZCYmeC5yZXBsYWNlZFdpdGgmJnYucHVzaCh4KQp9aWYoZiYmKGYuZnJvbXx8MCk9PWQmJihhbihlLChudWxsPT1mLnRvP2g6Zi50byktZCxmLm1hcmtlcixudWxsPT1mLmZyb20pLG51bGw9PWYudG8pKXJldHVybiBmLm1hcmtlci5maW5kKCk7aWYoIWYmJnYubGVuZ3RoKWZvcih2YXIgeT0wO3k8di5sZW5ndGg7Kyt5KWFuKGUsMCx2W3ldKX1pZihkPj1oKWJyZWFrO2Zvcih2YXIgQz1NYXRoLm1pbihoLG0pOzspe2lmKGcpe3ZhciB3PWQrZy5sZW5ndGg7aWYoIWYpe3ZhciBMPXc+Qz9nLnNsaWNlKDAsQy1kKTpnO2UuYWRkVG9rZW4oZSxMLGw/bCtzOnMsdSxkK0wubGVuZ3RoPT1tP2E6IiIsYyl9aWYodz49Qyl7Zz1nLnNsaWNlKEMtZCksZD1DO2JyZWFrfWQ9dyx1PSIifWc9aS5zbGljZShvLG89cltwKytdKSxsPWVuKHJbcCsrXSxlKX19ZWxzZSBmb3IodmFyIHA9MTtwPHIubGVuZ3RoO3ArPTIpZS5hZGRUb2tlbihlLGkuc2xpY2UobyxvPXJbcF0pLGVuKHJbcCsxXSxlKSl9ZnVuY3Rpb24gY24odCxlLHIsbixpKXtmdW5jdGlvbiBvKHQpe3JldHVybiByP3JbdF06bnVsbH1mdW5jdGlvbiBsKHQscixuKXskcih0LHIsbixpKSxVbih0LCJjaGFuZ2UiLHQsZSl9dmFyIHM9ZS5mcm9tLGE9ZS50byx1PWUudGV4dCxjPWduKHQscy5saW5lKSxmPWduKHQsYS5saW5lKSxoPVFuKHUpLGQ9byh1Lmxlbmd0aC0xKSxwPWEubGluZS1zLmxpbmU7aWYoMCE9cy5jaHx8MCE9YS5jaHx8IiIhPWh8fHQuY20mJiF0LmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKWlmKGM9PWYpaWYoMT09dS5sZW5ndGgpbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK2grYy50ZXh0LnNsaWNlKGEuY2gpLGQpO2Vsc2V7Zm9yKHZhciBnPVtdLG09MSx2PXUubGVuZ3RoLTE7dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7Zy5wdXNoKG5ldyBibyhoK2MudGV4dC5zbGljZShhLmNoKSxkLGkpKSxsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSx0Lmluc2VydChzLmxpbmUrMSxnKX1lbHNlIGlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdK2YudGV4dC5zbGljZShhLmNoKSxvKDApKSx0LnJlbW92ZShzLmxpbmUrMSxwKTtlbHNle2woYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdLG8oMCkpLGwoZixoK2YudGV4dC5zbGljZShhLmNoKSxkKTtmb3IodmFyIG09MSx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtwPjEmJnQucmVtb3ZlKHMubGluZSsxLHAtMSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZXtmb3IodmFyIG09MCx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtsKGYsZi50ZXh0LGQpLHAmJnQucmVtb3ZlKHMubGluZSxwKSxnLmxlbmd0aCYmdC5pbnNlcnQocy5saW5lLGcpfVVuKHQsImNoYW5nZSIsdCxlKSxucih0LG4uYW5jaG9yLG4uaGVhZCxudWxsLCEwKX1mdW5jdGlvbiBmbih0KXt0aGlzLmxpbmVzPXQsdGhpcy5wYXJlbnQ9bnVsbDtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49MDtyPmU7KytlKXRbZV0ucGFyZW50PXRoaXMsbis9dFtlXS5oZWlnaHQ7dGhpcy5oZWlnaHQ9bn1mdW5jdGlvbiBobih0KXt0aGlzLmNoaWxkcmVuPXQ7Zm9yKHZhciBlPTAscj0wLG49MCxpPXQubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRbbl07ZSs9by5jaHVua1NpemUoKSxyKz1vLmhlaWdodCxvLnBhcmVudD10aGlzfXRoaXMuc2l6ZT1lLHRoaXMuaGVpZ2h0PXIsdGhpcy5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBkbih0LGUscil7ZnVuY3Rpb24gbih0LGksbyl7aWYodC5saW5rZWQpZm9yKHZhciBsPTA7bDx0LmxpbmtlZC5sZW5ndGg7KytsKXt2YXIgcz10LmxpbmtlZFtsXTtpZihzLmRvYyE9aSl7dmFyIGE9byYmcy5zaGFyZWRIaXN0Oyghcnx8YSkmJihlKHMuZG9jLGEpLG4ocy5kb2MsdCxhKSl9fX1uKHQsbnVsbCwhMCl9ZnVuY3Rpb24gcG4odCxlKXtpZihlLmNtKXRocm93IG5ldyBFcnJvcigiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS4iKTt0LmRvYz1lLGUuY209dCxvKHQpLHIodCksdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8Zih0KSx0Lm9wdGlvbnMubW9kZT1lLm1vZGVPcHRpb24sdWUodCl9ZnVuY3Rpb24gZ24odCxlKXtmb3IoZS09dC5maXJzdDshdC5saW5lczspZm9yKHZhciByPTA7Oysrcil7dmFyIG49dC5jaGlsZHJlbltyXSxpPW4uY2h1bmtTaXplKCk7aWYoaT5lKXt0PW47YnJlYWt9ZS09aX1yZXR1cm4gdC5saW5lc1tlXX1mdW5jdGlvbiBtbih0LGUscil7dmFyIG49W10saT1lLmxpbmU7cmV0dXJuIHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7dmFyIG89dC50ZXh0O2k9PXIubGluZSYmKG89by5zbGljZSgwLHIuY2gpKSxpPT1lLmxpbmUmJihvPW8uc2xpY2UoZS5jaCkpLG4ucHVzaChvKSwrK2l9KSxufWZ1bmN0aW9uIHZuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5pdGVyKGUscixmdW5jdGlvbih0KXtuLnB1c2godC50ZXh0KX0pLG59ZnVuY3Rpb24geW4odCxlKXtmb3IodmFyIHI9ZS10LmhlaWdodCxuPXQ7bjtuPW4ucGFyZW50KW4uaGVpZ2h0Kz1yfWZ1bmN0aW9uIGJuKHQpe2lmKG51bGw9PXQucGFyZW50KXJldHVybiBudWxsO2Zvcih2YXIgZT10LnBhcmVudCxyPXRpKGUubGluZXMsdCksbj1lLnBhcmVudDtuO2U9bixuPW4ucGFyZW50KWZvcih2YXIgaT0wO24uY2hpbGRyZW5baV0hPWU7KytpKXIrPW4uY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7cmV0dXJuIHIrZS5maXJzdH1mdW5jdGlvbiB4bih0LGUpe3ZhciByPXQuZmlyc3Q7dDpkb3tmb3IodmFyIG49MCxpPXQuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXQuY2hpbGRyZW5bbl0sbD1vLmhlaWdodDtpZihsPmUpe3Q9bztjb250aW51ZSB0fWUtPWwscis9by5jaHVua1NpemUoKX1yZXR1cm4gcn13aGlsZSghdC5saW5lcyk7Zm9yKHZhciBuPTAsaT10LmxpbmVzLmxlbmd0aDtpPm47KytuKXt2YXIgcz10LmxpbmVzW25dLGE9cy5oZWlnaHQ7aWYoYT5lKWJyZWFrO2UtPWF9cmV0dXJuIHIrbn1mdW5jdGlvbiBDbih0LGUpe2U9R3IodC5kb2MsZSk7Zm9yKHZhciByPTAsbj1lLnBhcmVudCxpPTA7aTxuLmxpbmVzLmxlbmd0aDsrK2kpe3ZhciBvPW4ubGluZXNbaV07aWYobz09ZSlicmVhaztyKz1vLmhlaWdodH1mb3IodmFyIGw9bi5wYXJlbnQ7bDtuPWwsbD1uLnBhcmVudClmb3IodmFyIGk9MDtpPGwuY2hpbGRyZW4ubGVuZ3RoOysraSl7dmFyIHM9bC5jaGlsZHJlbltpXTtpZihzPT1uKWJyZWFrO3IrPXMuaGVpZ2h0fXJldHVybiByfWZ1bmN0aW9uIHduKHQpe3ZhciBlPXQub3JkZXI7cmV0dXJuIG51bGw9PWUmJihlPXQub3JkZXI9Qm8odC50ZXh0KSksZX1mdW5jdGlvbiBMbih0KXtyZXR1cm57ZG9uZTpbXSx1bmRvbmU6W10sdW5kb0RlcHRoOjEvMCxsYXN0VGltZTowLGxhc3RPcDpudWxsLGxhc3RPcmlnaW46bnVsbCxnZW5lcmF0aW9uOnR8fDEsbWF4R2VuZXJhdGlvbjp0fHwxfX1mdW5jdGlvbiBrbih0LGUscixuKXt2YXIgaT1lWyJzcGFuc18iK3QuaWRdLG89MDt0Lml0ZXIoTWF0aC5tYXgodC5maXJzdCxyKSxNYXRoLm1pbih0LmZpcnN0K3Quc2l6ZSxuKSxmdW5jdGlvbihyKXtyLm1hcmtlZFNwYW5zJiYoKGl8fChpPWVbInNwYW5zXyIrdC5pZF09e30pKVtvXT1yLm1hcmtlZFNwYW5zKSwrK299KX1mdW5jdGlvbiBTbih0LGUpe3ZhciByPXtsaW5lOmUuZnJvbS5saW5lLGNoOmUuZnJvbS5jaH0sbj17ZnJvbTpyLHRvOmxvKGUpLHRleHQ6bW4odCxlLmZyb20sZS50byl9O3JldHVybiBrbih0LG4sZS5mcm9tLmxpbmUsZS50by5saW5lKzEpLGRuKHQsZnVuY3Rpb24odCl7a24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKX0sITApLG59ZnVuY3Rpb24gTW4odCxlLHIsbil7dmFyIGk9dC5oaXN0b3J5O2kudW5kb25lLmxlbmd0aD0wO3ZhciBvPStuZXcgRGF0ZSxsPVFuKGkuZG9uZSk7aWYobCYmKGkubGFzdE9wPT1ufHxpLmxhc3RPcmlnaW49PWUub3JpZ2luJiZlLm9yaWdpbiYmKCIrIj09ZS5vcmlnaW4uY2hhckF0KDApJiZ0LmNtJiZpLmxhc3RUaW1lPm8tdC5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5fHwiKiI9PWUub3JpZ2luLmNoYXJBdCgwKSkpKXt2YXIgcz1RbihsLmNoYW5nZXMpO2plKGUuZnJvbSxlLnRvKSYmamUoZS5mcm9tLHMudG8pP3MudG89bG8oZSk6bC5jaGFuZ2VzLnB1c2goU24odCxlKSksbC5hbmNob3JBZnRlcj1yLmFuY2hvcixsLmhlYWRBZnRlcj1yLmhlYWR9ZWxzZSBmb3IobD17Y2hhbmdlczpbU24odCxlKV0sZ2VuZXJhdGlvbjppLmdlbmVyYXRpb24sYW5jaG9yQmVmb3JlOnQuc2VsLmFuY2hvcixoZWFkQmVmb3JlOnQuc2VsLmhlYWQsYW5jaG9yQWZ0ZXI6ci5hbmNob3IsaGVhZEFmdGVyOnIuaGVhZH0saS5kb25lLnB1c2gobCksaS5nZW5lcmF0aW9uPSsraS5tYXhHZW5lcmF0aW9uO2kuZG9uZS5sZW5ndGg+aS51bmRvRGVwdGg7KWkuZG9uZS5zaGlmdCgpO2kubGFzdFRpbWU9byxpLmxhc3RPcD1uLGkubGFzdE9yaWdpbj1lLm9yaWdpbn1mdW5jdGlvbiBUbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGUscj0wO3I8dC5sZW5ndGg7KytyKXRbcl0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkP2V8fChlPXQuc2xpY2UoMCxyKSk6ZSYmZS5wdXNoKHRbcl0pO3JldHVybiBlP2UubGVuZ3RoP2U6bnVsbDp0fWZ1bmN0aW9uIEFuKHQsZSl7dmFyIHI9ZVsic3BhbnNfIit0LmlkXTtpZighcilyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxpPVtdO248ZS50ZXh0Lmxlbmd0aDsrK24paS5wdXNoKFRuKHJbbl0pKTtyZXR1cm4gaX1mdW5jdGlvbiBIbih0LGUpe2Zvcih2YXIgcj0wLG49W107cjx0Lmxlbmd0aDsrK3Ipe3ZhciBpPXRbcl0sbz1pLmNoYW5nZXMsbD1bXTtuLnB1c2goe2NoYW5nZXM6bCxhbmNob3JCZWZvcmU6aS5hbmNob3JCZWZvcmUsaGVhZEJlZm9yZTppLmhlYWRCZWZvcmUsYW5jaG9yQWZ0ZXI6aS5hbmNob3JBZnRlcixoZWFkQWZ0ZXI6aS5oZWFkQWZ0ZXJ9KTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoOysrcyl7dmFyIGEsdT1vW3NdO2lmKGwucHVzaCh7ZnJvbTp1LmZyb20sdG86dS50byx0ZXh0OnUudGV4dH0pLGUpZm9yKHZhciBjIGluIHUpKGE9Yy5tYXRjaCgvXnNwYW5zXyhcZCspJC8pKSYmdGkoZSxOdW1iZXIoYVsxXSkpPi0xJiYoUW4obClbY109dVtjXSxkZWxldGUgdVtjXSl9fXJldHVybiBufWZ1bmN0aW9uIE5uKHQsZSxyLG4pe3I8dC5saW5lP3QubGluZSs9bjplPHQubGluZSYmKHQubGluZT1lLHQuY2g9MCl9ZnVuY3Rpb24gRG4odCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe2Zvcih2YXIgbz10W2ldLGw9ITAscz0wO3M8by5jaGFuZ2VzLmxlbmd0aDsrK3Mpe3ZhciBhPW8uY2hhbmdlc1tzXTtpZihvLmNvcGllZHx8KGEuZnJvbT1aZShhLmZyb20pLGEudG89WmUoYS50bykpLHI8YS5mcm9tLmxpbmUpYS5mcm9tLmxpbmUrPW4sYS50by5saW5lKz1uO2Vsc2UgaWYoZTw9YS50by5saW5lKXtsPSExO2JyZWFrfX1vLmNvcGllZHx8KG8uYW5jaG9yQmVmb3JlPVplKG8uYW5jaG9yQmVmb3JlKSxvLmhlYWRCZWZvcmU9WmUoby5oZWFkQmVmb3JlKSxvLmFuY2hvckFmdGVyPVplKG8uYW5jaG9yQWZ0ZXIpLG8ucmVhZEFmdGVyPVplKG8uaGVhZEFmdGVyKSxvLmNvcGllZD0hMCksbD8oTm4oby5hbmNob3JCZWZvcmUpLE5uKG8uaGVhZEJlZm9yZSksTm4oby5hbmNob3JBZnRlciksTm4oby5oZWFkQWZ0ZXIpKToodC5zcGxpY2UoMCxpKzEpLGk9MCl9fWZ1bmN0aW9uIFduKHQsZSl7dmFyIHI9ZS5mcm9tLmxpbmUsbj1lLnRvLmxpbmUsaT1lLnRleHQubGVuZ3RoLShuLXIpLTE7RG4odC5kb25lLHIsbixpKSxEbih0LnVuZG9uZSxyLG4saSl9ZnVuY3Rpb24gT24oKXtQbih0aGlzKX1mdW5jdGlvbiBFbih0KXtyZXR1cm4gdC5zdG9wfHwodC5zdG9wPU9uKSx0fWZ1bmN0aW9uIHpuKHQpe3QucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITF9ZnVuY3Rpb24gSW4odCl7dC5zdG9wUHJvcGFnYXRpb24/dC5zdG9wUHJvcGFnYXRpb24oKTp0LmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBGbih0KXtyZXR1cm4gbnVsbCE9dC5kZWZhdWx0UHJldmVudGVkP3QuZGVmYXVsdFByZXZlbnRlZDowPT10LnJldHVyblZhbHVlfWZ1bmN0aW9uIFBuKHQpe3puKHQpLEluKHQpfWZ1bmN0aW9uIFJuKHQpe3JldHVybiB0LnRhcmdldHx8dC5zcmNFbGVtZW50fWZ1bmN0aW9uIEJuKHQpe3ZhciBlPXQud2hpY2g7cmV0dXJuIG51bGw9PWUmJigxJnQuYnV0dG9uP2U9MToyJnQuYnV0dG9uP2U9Mzo0JnQuYnV0dG9uJiYoZT0yKSksS2kmJnQuY3RybEtleSYmMT09ZSYmKGU9MyksZX1mdW5jdGlvbiBHbih0LGUscil7aWYodC5hZGRFdmVudExpc3RlbmVyKXQuYWRkRXZlbnRMaXN0ZW5lcihlLHIsITEpO2Vsc2UgaWYodC5hdHRhY2hFdmVudCl0LmF0dGFjaEV2ZW50KCJvbiIrZSxyKTtlbHNle3ZhciBuPXQuX2hhbmRsZXJzfHwodC5faGFuZGxlcnM9e30pLGk9bltlXXx8KG5bZV09W10pO2kucHVzaChyKX19ZnVuY3Rpb24gVm4odCxlLHIpe2lmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcil0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuZGV0YWNoRXZlbnQpdC5kZXRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYoIW4pcmV0dXJuO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7KytpKWlmKG5baV09PXIpe24uc3BsaWNlKGksMSk7YnJlYWt9fX1mdW5jdGlvbiBLbih0LGUpe3ZhciByPXQuX2hhbmRsZXJzJiZ0Ll9oYW5kbGVyc1tlXTtpZihyKWZvcih2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMiksaT0wO2k8ci5sZW5ndGg7KytpKXJbaV0uYXBwbHkobnVsbCxuKX1mdW5jdGlvbiBVbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dC5hcHBseShudWxsLGkpfX12YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYobil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO1NvfHwoKytNbyxTbz1bXSxzZXRUaW1lb3V0KF9uLDApKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbylTby5wdXNoKHIobltvXSkpfX1mdW5jdGlvbiBYbih0LGUscil7cmV0dXJuIEtuKHQscnx8ZS50eXBlLHQsZSksRm4oZSl8fGUuY29kZW1pcnJvcklnbm9yZX1mdW5jdGlvbiBfbigpey0tTW87dmFyIHQ9U287U289bnVsbDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdKCl9ZnVuY3Rpb24gWW4odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07cmV0dXJuIHImJnIubGVuZ3RoPjB9ZnVuY3Rpb24gam4odCl7dC5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXtHbih0aGlzLHQsZSl9LHQucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe1ZuKHRoaXMsdCxlKX19ZnVuY3Rpb24gJG4oKXt0aGlzLmlkPW51bGx9ZnVuY3Rpb24gWm4odCxlLHIsbixpKXtudWxsPT1lJiYoZT10LnNlYXJjaCgvW15cc1x1MDBhMF0vKSwtMT09ZSYmKGU9dC5sZW5ndGgpKTtmb3IodmFyIG89bnx8MCxsPWl8fDA7ZT5vOysrbykiCSI9PXQuY2hhckF0KG8pP2wrPXItbCVyOisrbDtyZXR1cm4gbH1mdW5jdGlvbiBxbih0KXtmb3IoO0hvLmxlbmd0aDw9dDspSG8ucHVzaChRbihIbykrIiAiKTtyZXR1cm4gSG9bdF19ZnVuY3Rpb24gUW4odCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gSm4odCl7aWYoR2kpdC5zZWxlY3Rpb25TdGFydD0wLHQuc2VsZWN0aW9uRW5kPXQudmFsdWUubGVuZ3RoO2Vsc2UgdHJ5e3Quc2VsZWN0KCl9Y2F0Y2goZSl7fX1mdW5jdGlvbiB0aSh0LGUpe2lmKHQuaW5kZXhPZilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7bj5yOysrcilpZih0W3JdPT1lKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGVpKHQsZSl7ZnVuY3Rpb24gcigpe31yLnByb3RvdHlwZT10O3ZhciBuPW5ldyByO3JldHVybiBlJiZyaShlLG4pLG59ZnVuY3Rpb24gcmkodCxlKXtlfHwoZT17fSk7Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmkodCl7Zm9yKHZhciBlPVtdLHI9MDt0PnI7KytyKWUucHVzaCh2b2lkIDApO3JldHVybiBlfWZ1bmN0aW9uIGlpKHQpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShudWxsLGUpfX1mdW5jdGlvbiBvaSh0KXtyZXR1cm4vXHcvLnRlc3QodCl8fHQ+IsKAIiYmKHQudG9VcHBlckNhc2UoKSE9dC50b0xvd2VyQ2FzZSgpfHxOby50ZXN0KHQpKX1mdW5jdGlvbiBsaSh0KXtmb3IodmFyIGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpJiZ0W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7aWYociYmKGkuY2xhc3NOYW1lPXIpLG4mJihpLnN0eWxlLmNzc1RleHQ9biksInN0cmluZyI9PXR5cGVvZiBlKWNpKGksZSk7ZWxzZSBpZihlKWZvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKWkuYXBwZW5kQ2hpbGQoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gYWkodCl7Zm9yKHZhciBlPXQuY2hpbGROb2Rlcy5sZW5ndGg7ZT4wOy0tZSl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCk7cmV0dXJuIHR9ZnVuY3Rpb24gdWkodCxlKXtyZXR1cm4gYWkodCkuYXBwZW5kQ2hpbGQoZSl9ZnVuY3Rpb24gY2kodCxlKXtOaT8odC5pbm5lckhUTUw9IiIsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSkpOnQudGV4dENvbnRlbnQ9ZX1mdW5jdGlvbiBmaSh0KXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1mdW5jdGlvbiBoaSgpe3JldHVybiExfWZ1bmN0aW9uIGRpKHQpe2lmKG51bGwhPU9vKXJldHVybiBPbzt2YXIgZT1zaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7IG92ZXJmbG93LXg6IHNjcm9sbCIpO3JldHVybiB1aSh0LGUpLGUub2Zmc2V0V2lkdGgmJihPbz1lLm9mZnNldEhlaWdodC1lLmNsaWVudEhlaWdodCksT298fDB9ZnVuY3Rpb24gcGkodCl7aWYobnVsbD09RW8pe3ZhciBlPXNpKCJzcGFuIiwi4oCLIik7dWkodCxzaSgic3BhbiIsW2UsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKV0pKSwwIT10LmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0JiYoRW89ZS5vZmZzZXRXaWR0aDw9MSYmZS5vZmZzZXRIZWlnaHQ+MiYmIUhpKX1yZXR1cm4gRW8/c2koInNwYW4iLCLigIsiKTpzaSgic3BhbiIsIsKgIixudWxsLCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpfWZ1bmN0aW9uIGdpKHQsZSxyLG4pe2lmKCF0KXJldHVybiBuKGUsciwibHRyIik7Zm9yKHZhciBpPSExLG89MDtvPHQubGVuZ3RoOysrbyl7dmFyIGw9dFtvXTsobC5mcm9tPHImJmwudG8+ZXx8ZT09ciYmbC50bz09ZSkmJihuKE1hdGgubWF4KGwuZnJvbSxlKSxNYXRoLm1pbihsLnRvLHIpLDE9PWwubGV2ZWw/InJ0bCI6Imx0ciIpLGk9ITApfWl8fG4oZSxyLCJsdHIiKX1mdW5jdGlvbiBtaSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QudG86dC5mcm9tfWZ1bmN0aW9uIHZpKHQpe3JldHVybiB0LmxldmVsJTI/dC5mcm9tOnQudG99ZnVuY3Rpb24geWkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/bWkoZVswXSk6MH1mdW5jdGlvbiBiaSh0KXt2YXIgZT13bih0KTtyZXR1cm4gZT92aShRbihlKSk6dC50ZXh0Lmxlbmd0aH1mdW5jdGlvbiB4aSh0LGUpe3ZhciByPWduKHQuZG9jLGUpLG49R3IodC5kb2Mscik7biE9ciYmKGU9Ym4obikpO3ZhciBpPXduKG4pLG89aT9pWzBdLmxldmVsJTI/Ymkobik6eWkobik6MDtyZXR1cm4gWWUoZSxvKX1mdW5jdGlvbiBDaSh0LGUpe2Zvcih2YXIgcixuO3I9QnIobj1nbih0LmRvYyxlKSk7KWU9ci5maW5kKCkudG8ubGluZTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP3lpKG4pOmJpKG4pOm4udGV4dC5sZW5ndGg7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gd2kodCxlLHIpe3ZhciBuPXRbMF0ubGV2ZWw7cmV0dXJuIGU9PW4/ITA6cj09bj8hMTpyPmV9ZnVuY3Rpb24gTGkodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXt2YXIgaT10W25dO2lmKGkuZnJvbTxlJiZpLnRvPmUpcmV0dXJuIFJvPW51bGwsbjtpZihpLmZyb209PWV8fGkudG89PWUpe2lmKG51bGwhPXIpcmV0dXJuIHdpKHQsaS5sZXZlbCx0W3JdLmxldmVsKT8oUm89cixuKTooUm89bixyKTtyPW59fXJldHVybiBSbz1udWxsLHJ9ZnVuY3Rpb24ga2kodCxlLHIsbil7aWYoIW4pcmV0dXJuIGUrcjtkbyBlKz1yO3doaWxlKGU+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGUpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gU2kodCxlLHIsbil7dmFyIGk9d24odCk7aWYoIWkpcmV0dXJuIE1pKHQsZSxyLG4pO2Zvcih2YXIgbz1MaShpLGUpLGw9aVtvXSxzPWtpKHQsZSxsLmxldmVsJTI/LXI6cixuKTs7KXtpZihzPmwuZnJvbSYmczxsLnRvKXJldHVybiBzO2lmKHM9PWwuZnJvbXx8cz09bC50bylyZXR1cm4gTGkoaSxzKT09bz9zOihsPWlbbys9cl0scj4wPT1sLmxldmVsJTI/bC50bzpsLmZyb20pO2lmKGw9aVtvKz1yXSwhbClyZXR1cm4gbnVsbDtzPXI+MD09bC5sZXZlbCUyP2tpKHQsbC50bywtMSxuKTpraSh0LGwuZnJvbSwxLG4pfX1mdW5jdGlvbiBNaSh0LGUscixuKXt2YXIgaT1lK3I7aWYobilmb3IoO2k+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGkpKTspaSs9cjtyZXR1cm4gMD5pfHxpPnQudGV4dC5sZW5ndGg/bnVsbDppfXZhciBUaT0vZ2Vja29cL1xkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxBaT0vTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxIaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDgpLE5pPUFpJiYobnVsbD09ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU8OSksRGk9L1RyaWRlbnRcLyhbNy05XXxcZHsyLH0pXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksV2k9L1dlYktpdFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLE9pPVdpJiYvUXRcL1xkK1wuXGQrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEVpPS9DaHJvbWVcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx6aT0vT3BlcmFcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxJaT0vQXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvciksRmk9L0tIVE1MXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUGk9L01hYyBPUyBYIDFcZFxEKFs3LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUmk9L01hYyBPUyBYIDFcZFxEKFs4LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQmk9L1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxHaT0vQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJi9Nb2JpbGVcL1x3Ky8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxWaT1HaXx8L0FuZHJvaWR8d2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEtpPUdpfHwvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksVWk9L3dpbi9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxYaT16aSYmbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwvKFxkKlwuXGQqKS8pO1hpJiYoWGk9TnVtYmVyKFhpWzFdKSksWGkmJlhpPj0xNSYmKHppPSExLFdpPSEwKTt2YXIgX2ksWWksamksJGk9S2kmJihPaXx8emkmJihudWxsPT1YaXx8MTIuMTE+WGkpKSxaaT1UaXx8QWkmJiFOaSxxaT0hMSxRaT0hMSxKaT0wLHRvPTAsZW89MCxybz1udWxsO0FpP3JvPS0uNTM6VGk/cm89MTU6RWk/cm89LS43OklpJiYocm89LTEvMyk7dmFyIG5vLGlvLG9vPW51bGwsbG89dC5jaGFuZ2VFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dD9ZZSh0LmZyb20ubGluZSt0LnRleHQubGVuZ3RoLTEsUW4odC50ZXh0KS5sZW5ndGgrKDE9PXQudGV4dC5sZW5ndGg/dC5mcm9tLmNoOjApKTp0LnRvfTt0LlBvcz1ZZSx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxmb2N1czpmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpLHBlKHRoaXMpLGZlKHRoaXMpfSxzZXRPcHRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLm9wdGlvbnMsbj1yW3RdOyhyW3RdIT1lfHwibW9kZSI9PXQpJiYoclt0XT1lLHNvLmhhc093blByb3BlcnR5KHQpJiZsZSh0aGlzLHNvW3RdKSh0aGlzLGUsbikpfSxnZXRPcHRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9uc1t0XX0sZ2V0RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jfSxhZGRLZXlNYXA6ZnVuY3Rpb24odCxlKXt0aGlzLnN0YXRlLmtleU1hcHNbZT8icHVzaCI6InVuc2hpZnQiXSh0KX0scmVtb3ZlS2V5TWFwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLmtleU1hcHMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PXR8fCJzdHJpbmciIT10eXBlb2YgZVtyXSYmZVtyXS5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLCEwfSxhZGRPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnRva2VuP2U6dC5nZXRNb2RlKHRoaXMub3B0aW9ucyxlKTtpZihuLnN0YXJ0U3RhdGUpdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLiIpO3RoaXMuc3RhdGUub3ZlcmxheXMucHVzaCh7bW9kZTpuLG1vZGVTcGVjOmUsb3BhcXVlOnImJnIub3BhcXVlfSksdGhpcy5zdGF0ZS5tb2RlR2VuKyssdWUodGhpcyl9KSxyZW1vdmVPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuc3RhdGUub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLm1vZGVTcGVjO2lmKG49PXR8fCJzdHJpbmciPT10eXBlb2YgdCYmbi5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpLHZvaWQgMH19KSxpbmRlbnRMaW5lOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpeyJzdHJpbmciIT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlJiYoZT1udWxsPT1lP3RoaXMub3B0aW9ucy5zbWFydEluZGVudD8ic21hcnQiOiJwcmV2IjplPyJhZGQiOiJzdWJ0cmFjdCIpLHRyKHRoaXMuZG9jLHQpJiZocih0aGlzLHQsZSxyKX0pLGluZGVudFNlbGVjdGlvbjpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jLnNlbDtpZihqZShlLmZyb20sZS50bykpcmV0dXJuIGhyKHRoaXMsZS5mcm9tLmxpbmUsdCk7Zm9yKHZhciByPWUudG8ubGluZS0oZS50by5jaD8wOjEpLG49ZS5mcm9tLmxpbmU7cj49bjsrK24paHIodGhpcyxuLHQpfSksZ2V0VG9rZW5BdDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3Q9UWUocix0KTtmb3IodmFyIG49eih0aGlzLHQubGluZSxlKSxpPXRoaXMuZG9jLm1vZGUsbz1nbihyLHQubGluZSksbD1uZXcgU3Ioby50ZXh0LHRoaXMub3B0aW9ucy50YWJTaXplKTtsLnBvczx0LmNoJiYhbC5lb2woKTspe2wuc3RhcnQ9bC5wb3M7dmFyIHM9aS50b2tlbihsLG4pfXJldHVybntzdGFydDpsLnN0YXJ0LGVuZDpsLnBvcyxzdHJpbmc6bC5jdXJyZW50KCksY2xhc3NOYW1lOnN8fG51bGwsdHlwZTpzfHxudWxsLHN0YXRlOm59fSxnZXRUb2tlblR5cGVBdDpmdW5jdGlvbih0KXt0PVFlKHRoaXMuZG9jLHQpO3ZhciBlPUpyKHRoaXMsZ24odGhpcy5kb2MsdC5saW5lKSkscj0wLG49KGUubGVuZ3RoLTEpLzIsaT10LmNoO2lmKDA9PWkpcmV0dXJuIGVbMl07Zm9yKDs7KXt2YXIgbz1yK24+PjE7aWYoKG8/ZVsyKm8tMV06MCk+PWkpbj1vO2Vsc2V7aWYoIShlWzIqbysxXTxpKSlyZXR1cm4gZVsyKm8rMl07cj1vKzF9fX0sZ2V0TW9kZUF0OmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZG9jLm1vZGU7cmV0dXJuIHIuaW5uZXJNb2RlP3QuaW5uZXJNb2RlKHIsdGhpcy5nZXRUb2tlbkF0KGUpLnN0YXRlKS5tb2RlOnJ9LGdldEhlbHBlcjpmdW5jdGlvbih0LGUpe2lmKGdvLmhhc093blByb3BlcnR5KGUpKXt2YXIgcj1nb1tlXSxuPXRoaXMuZ2V0TW9kZUF0KHQpO3JldHVybiBuW2VdJiZyW25bZV1dfHxuLmhlbHBlclR5cGUmJnJbbi5oZWxwZXJUeXBlXXx8cltuLm5hbWVdfX0sZ2V0U3RhdGVBZnRlcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3JldHVybiB0PXFlKHIsbnVsbD09dD9yLmZpcnN0K3Iuc2l6ZS0xOnQpLHoodGhpcyx0KzEsZSl9LGN1cnNvckNvb3JkczpmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3JldHVybiByPW51bGw9PXQ/bi5oZWFkOiJvYmplY3QiPT10eXBlb2YgdD9RZSh0aGlzLmRvYyx0KTp0P24uZnJvbTpuLnRvLFEodGhpcyxyLGV8fCJwYWdlIil9LGNoYXJDb29yZHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcSh0aGlzLFFlKHRoaXMuZG9jLHQpLGV8fCJwYWdlIil9LGNvb3Jkc0NoYXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1aKHRoaXMsdCxlfHwicGFnZSIpLHRlKHRoaXMsdC5sZWZ0LHQudG9wKX0sbGluZUF0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHt0b3A6dCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wLHhuKHRoaXMuZG9jLHQrdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpfSxoZWlnaHRBdExpbmU6ZnVuY3Rpb24odCxlKXt2YXIgcj0hMSxuPXRoaXMuZG9jLmZpcnN0K3RoaXMuZG9jLnNpemUtMTt0PHRoaXMuZG9jLmZpcnN0P3Q9dGhpcy5kb2MuZmlyc3Q6dD5uJiYodD1uLHI9ITApO3ZhciBpPWduKHRoaXMuZG9jLHQpO3JldHVybiAkKHRoaXMsZ24odGhpcy5kb2MsdCkse3RvcDowLGxlZnQ6MH0sZXx8InBhZ2UiKS50b3ArKHI/aS5oZWlnaHQ6MCl9LGRlZmF1bHRUZXh0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHJlKHRoaXMuZGlzcGxheSl9LGRlZmF1bHRDaGFyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gbmUodGhpcy5kaXNwbGF5KX0sc2V0R3V0dGVyTWFya2VyOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49dC5ndXR0ZXJNYXJrZXJzfHwodC5ndXR0ZXJNYXJrZXJzPXt9KTtyZXR1cm4gbltlXT1yLCFyJiZsaShuKSYmKHQuZ3V0dGVyTWFya2Vycz1udWxsKSwhMH0pfSksY2xlYXJHdXR0ZXI6bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kb2Msbj1yLmZpcnN0O3IuaXRlcihmdW5jdGlvbihyKXtyLmd1dHRlck1hcmtlcnMmJnIuZ3V0dGVyTWFya2Vyc1t0XSYmKHIuZ3V0dGVyTWFya2Vyc1t0XT1udWxsLHVlKGUsbixuKzEpLGxpKHIuZ3V0dGVyTWFya2VycykmJihyLmd1dHRlck1hcmtlcnM9bnVsbCkpLCsrbn0pfSksYWRkTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyI7aWYodFtuXSl7aWYobmV3IFJlZ0V4cCgiKD86XnxcXHMpIityKyIoPzokfFxccykiKS50ZXN0KHRbbl0pKXJldHVybiExO3Rbbl0rPSIgIityfWVsc2UgdFtuXT1yO3JldHVybiEwfSl9KSxyZW1vdmVMaW5lQ2xhc3M6bGUobnVsbCxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRyKHRoaXMsdCxmdW5jdGlvbih0KXt2YXIgbj0idGV4dCI9PWU/InRleHRDbGFzcyI6ImJhY2tncm91bmQiPT1lPyJiZ0NsYXNzIjoid3JhcENsYXNzIixpPXRbbl07aWYoIWkpcmV0dXJuITE7aWYobnVsbD09cil0W25dPW51bGw7ZWxzZXt2YXIgbz1pLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3IrIig/OiR8XFxzKykiKSk7aWYoIW8pcmV0dXJuITE7dmFyIGw9by5pbmRleCtvWzBdLmxlbmd0aDt0W25dPWkuc2xpY2UoMCxvLmluZGV4KSsoby5pbmRleCYmbCE9aS5sZW5ndGg/IiAiOiIiKStpLnNsaWNlKGwpfHxudWxsfXJldHVybiEwfSl9KSxhZGRMaW5lV2lkZ2V0OmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBqcih0aGlzLHQsZSxyKX0pLHJlbW92ZUxpbmVXaWRnZXQ6ZnVuY3Rpb24odCl7dC5jbGVhcigpfSxsaW5lSW5mbzpmdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCF0cih0aGlzLmRvYyx0KSlyZXR1cm4gbnVsbDt2YXIgZT10O2lmKHQ9Z24odGhpcy5kb2MsdCksIXQpcmV0dXJuIG51bGx9ZWxzZXt2YXIgZT1ibih0KTtpZihudWxsPT1lKXJldHVybiBudWxsfXJldHVybntsaW5lOmUsaGFuZGxlOnQsdGV4dDp0LnRleHQsZ3V0dGVyTWFya2Vyczp0Lmd1dHRlck1hcmtlcnMsdGV4dENsYXNzOnQudGV4dENsYXNzLGJnQ2xhc3M6dC5iZ0NsYXNzLHdyYXBDbGFzczp0LndyYXBDbGFzcyx3aWRnZXRzOnQud2lkZ2V0c319LGdldFZpZXdwb3J0OmZ1bmN0aW9uKCl7cmV0dXJue2Zyb206dGhpcy5kaXNwbGF5LnNob3dpbmdGcm9tLHRvOnRoaXMuZGlzcGxheS5zaG93aW5nVG99fSxhZGRXaWRnZXQ6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz10aGlzLmRpc3BsYXk7dD1RKHRoaXMsUWUodGhpcy5kb2MsdCkpO3ZhciBsPXQuYm90dG9tLHM9dC5sZWZ0O2lmKGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnNpemVyLmFwcGVuZENoaWxkKGUpLCJvdmVyIj09bilsPXQudG9wO2Vsc2UgaWYoImFib3ZlIj09bnx8Im5lYXIiPT1uKXt2YXIgYT1NYXRoLm1heChvLndyYXBwZXIuY2xpZW50SGVpZ2h0LHRoaXMuZG9jLmhlaWdodCksdT1NYXRoLm1heChvLnNpemVyLmNsaWVudFdpZHRoLG8ubGluZVNwYWNlLmNsaWVudFdpZHRoKTsoImFib3ZlIj09bnx8dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ+YSkmJnQudG9wPmUub2Zmc2V0SGVpZ2h0P2w9dC50b3AtZS5vZmZzZXRIZWlnaHQ6dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ8PWEmJihsPXQuYm90dG9tKSxzK2Uub2Zmc2V0V2lkdGg+dSYmKHM9dS1lLm9mZnNldFdpZHRoKX1lLnN0eWxlLnRvcD1sKyJweCIsZS5zdHlsZS5sZWZ0PWUuc3R5bGUucmlnaHQ9IiIsInJpZ2h0Ij09aT8ocz1vLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgsZS5zdHlsZS5yaWdodD0iMHB4Iik6KCJsZWZ0Ij09aT9zPTA6Im1pZGRsZSI9PWkmJihzPShvLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgpLzIpLGUuc3R5bGUubGVmdD1zKyJweCIpLHImJmFyKHRoaXMscyxsLHMrZS5vZmZzZXRXaWR0aCxsK2Uub2Zmc2V0SGVpZ2h0KX0sdHJpZ2dlck9uS2V5RG93bjpsZShudWxsLFdlKSxleGVjQ29tbWFuZDpmdW5jdGlvbih0KXtyZXR1cm4gbW9bdF0odGhpcyl9LGZpbmRQb3NIOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTE7MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIG89MCxsPVFlKHRoaXMuZG9jLHQpO2U+byYmKGw9cHIodGhpcy5kb2MsbCxpLHIsbiksIWwuaGl0U2lkZSk7KytvKTtyZXR1cm4gbH0sbW92ZUg6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3I9bi5zaGlmdHx8bi5leHRlbmR8fGplKG4uZnJvbSxuLnRvKT9wcih0aGlzLmRvYyxuLmhlYWQsdCxlLHRoaXMub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkpOjA+dD9uLmZyb206bi50byxlcih0aGlzLmRvYyxyLHIsdCl9KSxkZWxldGVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYy5zZWw7amUoci5mcm9tLHIudG8pP19lKHRoaXMuZG9jLCIiLHIuZnJvbSxwcih0aGlzLmRvYyxyLmhlYWQsdCxlLCExKSwiK2RlbGV0ZSIpOl9lKHRoaXMuZG9jLCIiLHIuZnJvbSxyLnRvLCIrZGVsZXRlIiksdGhpcy5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwfSksZmluZFBvc1Y6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MSxvPW47MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIGw9MCxzPVFlKHRoaXMuZG9jLHQpO2U+bDsrK2wpe3ZhciBhPVEodGhpcyxzLCJkaXYiKTtpZihudWxsPT1vP289YS5sZWZ0OmEubGVmdD1vLHM9Z3IodGhpcyxhLGkscikscy5oaXRTaWRlKWJyZWFrfXJldHVybiBzfSxtb3ZlVjpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsLG49USh0aGlzLHIuaGVhZCwiZGl2Iik7bnVsbCE9ci5nb2FsQ29sdW1uJiYobi5sZWZ0PXIuZ29hbENvbHVtbik7dmFyIGk9Z3IodGhpcyxuLHQsZSk7InBhZ2UiPT1lJiZmcih0aGlzLDAscSh0aGlzLGksImRpdiIpLnRvcC1uLnRvcCksZXIodGhpcy5kb2MsaSxpLHQpLHIuZ29hbENvbHVtbj1uLmxlZnR9KSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7KG51bGw9PXR8fHQhPXRoaXMuc3RhdGUub3ZlcndyaXRlKSYmKCh0aGlzLnN0YXRlLm92ZXJ3cml0ZT0hdGhpcy5zdGF0ZS5vdmVyd3JpdGUpP3RoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itb3ZlcndyaXRlIjp0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZT10aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1vdmVyd3JpdGUiLCIiKSl9LGhhc0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuZm9jdXNlZH0sc2Nyb2xsVG86bGUobnVsbCxmdW5jdGlvbih0LGUpe2NyKHRoaXMsdCxlKX0pLGdldFNjcm9sbEluZm86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRpc3BsYXkuc2Nyb2xsZXIsZT1UbztyZXR1cm57bGVmdDp0LnNjcm9sbExlZnQsdG9wOnQuc2Nyb2xsVG9wLGhlaWdodDp0LnNjcm9sbEhlaWdodC1lLHdpZHRoOnQuc2Nyb2xsV2lkdGgtZSxjbGllbnRIZWlnaHQ6dC5jbGllbnRIZWlnaHQtZSxjbGllbnRXaWR0aDp0LmNsaWVudFdpZHRoLWV9fSxzY3JvbGxJbnRvVmlldzpsZShudWxsLGZ1bmN0aW9uKHQsZSl7bnVsbD09dD90PXtmcm9tOnRoaXMuZG9jLnNlbC5oZWFkLHRvOm51bGx9OiJudW1iZXIiPT10eXBlb2YgdD90PXtmcm9tOlllKHQsMCksdG86bnVsbH06bnVsbD09dC5mcm9tJiYodD17ZnJvbTp0LHRvOm51bGx9KSx0LnRvfHwodC50bz10LmZyb20pLGV8fChlPTApO3ZhciByPXQ7bnVsbCE9dC5mcm9tLmxpbmUmJih0aGlzLmN1ck9wLnNjcm9sbFRvUG9zPXtmcm9tOnQuZnJvbSx0bzp0LnRvLG1hcmdpbjplfSxyPXtmcm9tOlEodGhpcyx0LmZyb20pLHRvOlEodGhpcyx0LnRvKX0pO3ZhciBuPXVyKHRoaXMsTWF0aC5taW4oci5mcm9tLmxlZnQsci50by5sZWZ0KSxNYXRoLm1pbihyLmZyb20udG9wLHIudG8udG9wKS1lLE1hdGgubWF4KHIuZnJvbS5yaWdodCxyLnRvLnJpZ2h0KSxNYXRoLm1heChyLmZyb20uYm90dG9tLHIudG8uYm90dG9tKStlKTtjcih0aGlzLG4uc2Nyb2xsTGVmdCxuLnNjcm9sbFRvcCl9KSxzZXRTaXplOmxlKG51bGwsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8L15cZCskLy50ZXN0KFN0cmluZyh0KSk/dCsicHgiOnR9bnVsbCE9dCYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoPXIodCkpLG51bGwhPWUmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQ9cihlKSksdGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZyYmKHRoaXMuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aD10aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcz0wKSx0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwfSksb3BlcmF0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBhZSh0aGlzLHQpfSxyZWZyZXNoOmxlKG51bGwsZnVuY3Rpb24oKXt2YXIgdD1udWxsPT10aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDtfKHRoaXMpLGNyKHRoaXMsdGhpcy5kb2Muc2Nyb2xsTGVmdCx0aGlzLmRvYy5zY3JvbGxUb3ApLHVlKHRoaXMpLHQmJm8odGhpcyl9KSxzd2FwRG9jOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kb2M7cmV0dXJuIGUuY209bnVsbCxwbih0aGlzLHQpLF8odGhpcyksZGUodGhpcywhMCksY3IodGhpcyx0LnNjcm9sbExlZnQsdC5zY3JvbGxUb3ApLFVuKHRoaXMsInN3YXBEb2MiLHRoaXMsZSksZX0pLGdldElucHV0RmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0fSxnZXRXcmFwcGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcn0sZ2V0U2Nyb2xsZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcn0sZ2V0R3V0dGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyc319LGpuKHQpO3ZhciBzbz10Lm9wdGlvbkhhbmRsZXJzPXt9LGFvPXQuZGVmYXVsdHM9e30sdW89dC5Jbml0PXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLkluaXQifX07eXIoInZhbHVlIiwiIixmdW5jdGlvbih0LGUpe3Quc2V0VmFsdWUoZSl9LCEwKSx5cigibW9kZSIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZG9jLm1vZGVPcHRpb249ZSxyKHQpfSwhMCkseXIoImluZGVudFVuaXQiLDIsciwhMCkseXIoImluZGVudFdpdGhUYWJzIiwhMSkseXIoInNtYXJ0SW5kZW50IiwhMCkseXIoInRhYlNpemUiLDQsZnVuY3Rpb24odCl7cih0KSxfKHQpLHVlKHQpfSwhMCkseXIoInNwZWNpYWxDaGFycyIsL1tcdFx1MDAwMC1cdTAwMTlcdTAwYWRcdTIwMGJcdTIwMjhcdTIwMjlcdWZlZmZdL2csZnVuY3Rpb24odCxlKXt0Lm9wdGlvbnMuc3BlY2lhbENoYXJzPW5ldyBSZWdFeHAoZS5zb3VyY2UrKGUudGVzdCgiCSIpPyIiOiJ8CSIpLCJnIiksdC5yZWZyZXNoKCl9LCEwKSx5cigic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsbm4sZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigiZWxlY3RyaWNDaGFycyIsITApLHlyKCJydGxNb3ZlVmlzdWFsbHkiLCFVaSkseXIoIndob2xlTGluZVVwZGF0ZUJlZm9yZSIsITApLHlyKCJ0aGVtZSIsImRlZmF1bHQiLGZ1bmN0aW9uKHQpe3ModCksYSh0KX0sITApLHlyKCJrZXlNYXAiLCJkZWZhdWx0IixsKSx5cigiZXh0cmFLZXlzIixudWxsKSx5cigib25LZXlFdmVudCIsbnVsbCkseXIoIm9uRHJhZ0V2ZW50IixudWxsKSx5cigibGluZVdyYXBwaW5nIiwhMSxuLCEwKSx5cigiZ3V0dGVycyIsW10sZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZml4ZWRHdXR0ZXIiLCEwLGZ1bmN0aW9uKHQsZSl7dC5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdD1lP3kodC5kaXNwbGF5KSsicHgiOiIwIix0LnJlZnJlc2goKX0sITApLHlyKCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciIsITEsZCwhMCkseXIoImxpbmVOdW1iZXJzIiwhMSxmdW5jdGlvbih0KXtoKHQub3B0aW9ucyksYSh0KX0sITApLHlyKCJmaXJzdExpbmVOdW1iZXIiLDEsYSwhMCkseXIoImxpbmVOdW1iZXJGb3JtYXR0ZXIiLGZ1bmN0aW9uKHQpe3JldHVybiB0fSxhLCEwKSx5cigic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCExLEEsITApLHlyKCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUiLCEwKSx5cigicmVhZE9ubHkiLCExLGZ1bmN0aW9uKHQsZSl7Im5vY3Vyc29yIj09ZT8oemUodCksdC5kaXNwbGF5LmlucHV0LmJsdXIoKSx0LmRpc3BsYXkuZGlzYWJsZWQ9ITApOih0LmRpc3BsYXkuZGlzYWJsZWQ9ITEsZXx8ZGUodCwhMCkpfSkseXIoImRyYWdEcm9wIiwhMCkseXIoImN1cnNvckJsaW5rUmF0ZSIsNTMwKSx5cigiY3Vyc29yU2Nyb2xsTWFyZ2luIiwwKSx5cigiY3Vyc29ySGVpZ2h0IiwxKSx5cigid29ya1RpbWUiLDEwMCkseXIoIndvcmtEZWxheSIsMTAwKSx5cigiZmxhdHRlblNwYW5zIiwhMCkseXIoInBvbGxJbnRlcnZhbCIsMTAwKSx5cigidW5kb0RlcHRoIiw0MCxmdW5jdGlvbih0LGUpe3QuZG9jLmhpc3RvcnkudW5kb0RlcHRoPWV9KSx5cigiaGlzdG9yeUV2ZW50RGVsYXkiLDUwMCkseXIoInZpZXdwb3J0TWFyZ2luIiwxMCxmdW5jdGlvbih0KXt0LnJlZnJlc2goKX0sITApLHlyKCJtYXhIaWdobGlnaHRMZW5ndGgiLDFlNCxmdW5jdGlvbih0KXtyKHQpLHQucmVmcmVzaCgpfSwhMCkseXIoImNydWRlTWVhc3VyaW5nRnJvbSIsMWU0KSx5cigibW92ZUlucHV0V2l0aEN1cnNvciIsITAsZnVuY3Rpb24odCxlKXtlfHwodC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcD10LmRpc3BsYXkuaW5wdXREaXYuc3R5bGUubGVmdD0wKX0pLHlyKCJ0YWJpbmRleCIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5pbnB1dC50YWJJbmRleD1lfHwiIn0pLHlyKCJhdXRvZm9jdXMiLG51bGwpO3ZhciBjbz10Lm1vZGVzPXt9LGZvPXQubWltZU1vZGVzPXt9O3QuZGVmaW5lTW9kZT1mdW5jdGlvbihlLHIpe2lmKHQuZGVmYXVsdHMubW9kZXx8Im51bGwiPT1lfHwodC5kZWZhdWx0cy5tb2RlPWUpLGFyZ3VtZW50cy5sZW5ndGg+Mil7ci5kZXBlbmRlbmNpZXM9W107Zm9yKHZhciBuPTI7bjxhcmd1bWVudHMubGVuZ3RoOysrbilyLmRlcGVuZGVuY2llcy5wdXNoKGFyZ3VtZW50c1tuXSl9Y29bZV09cn0sdC5kZWZpbmVNSU1FPWZ1bmN0aW9uKHQsZSl7Zm9bdF09ZX0sdC5yZXNvbHZlTW9kZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJmZvLmhhc093blByb3BlcnR5KGUpKWU9Zm9bZV07ZWxzZSBpZihlJiYic3RyaW5nIj09dHlwZW9mIGUubmFtZSYmZm8uaGFzT3duUHJvcGVydHkoZS5uYW1lKSl7dmFyIHI9Zm9bZS5uYW1lXTtlPWVpKHIsZSksZS5uYW1lPXIubmFtZX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSYmL15bXHdcLV0rXC9bXHdcLV0rXCt4bWwkLy50ZXN0KGUpKXJldHVybiB0LnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/e25hbWU6ZX06ZXx8e25hbWU6Im51bGwifX0sdC5nZXRNb2RlPWZ1bmN0aW9uKGUscil7dmFyIHI9dC5yZXNvbHZlTW9kZShyKSxuPWNvW3IubmFtZV07aWYoIW4pcmV0dXJuIHQuZ2V0TW9kZShlLCJ0ZXh0L3BsYWluIik7dmFyIGk9bihlLHIpO2lmKGhvLmhhc093blByb3BlcnR5KHIubmFtZSkpe3ZhciBvPWhvW3IubmFtZV07Zm9yKHZhciBsIGluIG8pby5oYXNPd25Qcm9wZXJ0eShsKSYmKGkuaGFzT3duUHJvcGVydHkobCkmJihpWyJfIitsXT1pW2xdKSxpW2xdPW9bbF0pfXJldHVybiBpLm5hbWU9ci5uYW1lLGl9LHQuZGVmaW5lTW9kZSgibnVsbCIsZnVuY3Rpb24oKXtyZXR1cm57dG9rZW46ZnVuY3Rpb24odCl7dC5za2lwVG9FbmQoKX19fSksdC5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwibnVsbCIpO3ZhciBobz10Lm1vZGVFeHRlbnNpb25zPXt9O3QuZXh0ZW5kTW9kZT1mdW5jdGlvbih0LGUpe3ZhciByPWhvLmhhc093blByb3BlcnR5KHQpP2hvW3RdOmhvW3RdPXt9O3JpKGUscil9LHQuZGVmaW5lRXh0ZW5zaW9uPWZ1bmN0aW9uKGUscil7dC5wcm90b3R5cGVbZV09cn0sdC5kZWZpbmVEb2NFeHRlbnNpb249ZnVuY3Rpb24odCxlKXt3by5wcm90b3R5cGVbdF09ZX0sdC5kZWZpbmVPcHRpb249eXI7dmFyIHBvPVtdO3QuZGVmaW5lSW5pdEhvb2s9ZnVuY3Rpb24odCl7cG8ucHVzaCh0KX07dmFyIGdvPXQuaGVscGVycz17fTt0LnJlZ2lzdGVySGVscGVyPWZ1bmN0aW9uKGUscixuKXtnby5oYXNPd25Qcm9wZXJ0eShlKXx8KGdvW2VdPXRbZV09e30pLGdvW2VdW3JdPW59LHQuaXNXb3JkQ2hhcj1vaSx0LmNvcHlTdGF0ZT1icix0LnN0YXJ0U3RhdGU9eHIsdC5pbm5lck1vZGU9ZnVuY3Rpb24odCxlKXtmb3IoO3QuaW5uZXJNb2RlOyl7dmFyIHI9dC5pbm5lck1vZGUoZSk7aWYoIXJ8fHIubW9kZT09dClicmVhaztlPXIuc3RhdGUsdD1yLm1vZGV9cmV0dXJuIHJ8fHttb2RlOnQsc3RhdGU6ZX19O3ZhciBtbz10LmNvbW1hbmRzPXtzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dC5zZXRTZWxlY3Rpb24oWWUodC5maXJzdExpbmUoKSwwKSxZZSh0Lmxhc3RMaW5lKCkpKX0sa2lsbExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoITApLHI9dC5nZXRDdXJzb3IoITEpLG49IWplKGUscik7bnx8dC5nZXRMaW5lKGUubGluZSkubGVuZ3RoIT1lLmNoP3QucmVwbGFjZVJhbmdlKCIiLGUsbj9yOlllKGUubGluZSksIitkZWxldGUiKTp0LnJlcGxhY2VSYW5nZSgiIixlLFllKGUubGluZSsxLDApLCIrZGVsZXRlIil9LGRlbGV0ZUxpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKS5saW5lO3QucmVwbGFjZVJhbmdlKCIiLFllKGUsMCksWWUoZSksIitkZWxldGUiKX0sZGVsTGluZUxlZnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLmxpbmUsMCksZSwiK2RlbGV0ZSIpfSx1bmRvOmZ1bmN0aW9uKHQpe3QudW5kbygpfSxyZWRvOmZ1bmN0aW9uKHQpe3QucmVkbygpfSxnb0RvY1N0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCkpfSxnb0RvY0VuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0Lmxhc3RMaW5lKCkpKX0sZ29MaW5lU3RhcnQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oeGkodCx0LmdldEN1cnNvcigpLmxpbmUpKX0sZ29MaW5lU3RhcnRTbWFydDpmdW5jdGlvbih0KXt2YXIgZT10LmdldEN1cnNvcigpLHI9eGkodCxlLmxpbmUpLG49dC5nZXRMaW5lSGFuZGxlKHIubGluZSksaT13bihuKTtpZihpJiYwIT1pWzBdLmxldmVsKXQuZXh0ZW5kU2VsZWN0aW9uKHIpO2Vsc2V7dmFyIG89TWF0aC5tYXgoMCxuLnRleHQuc2VhcmNoKC9cUy8pKSxsPWUubGluZT09ci5saW5lJiZlLmNoPD1vJiZlLmNoO3QuZXh0ZW5kU2VsZWN0aW9uKFllKHIubGluZSxsPzA6bykpfX0sZ29MaW5lRW5kOmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKENpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVJpZ2h0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6dC5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGgrMTAwLHRvcDplfSwiZGl2IikpfSxnb0xpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwibGluZSIpfSxnb0xpbmVEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwibGluZSIpfSxnb1BhZ2VVcDpmdW5jdGlvbih0KXt0Lm1vdmVWKC0xLCJwYWdlIil9LGdvUGFnZURvd246ZnVuY3Rpb24odCl7dC5tb3ZlVigxLCJwYWdlIil9LGdvQ2hhckxlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiY2hhciIpfSxnb0NoYXJSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNoYXIiKX0sZ29Db2x1bW5MZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNvbHVtbiIpfSxnb0NvbHVtblJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiY29sdW1uIil9LGdvV29yZExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwid29yZCIpfSxnb0dyb3VwUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJncm91cCIpfSxnb0dyb3VwTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJncm91cCIpfSxnb1dvcmRSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsIndvcmQiKX0sZGVsQ2hhckJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImNoYXIiKX0sZGVsQ2hhckFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJjaGFyIil9LGRlbFdvcmRCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJ3b3JkIil9LGRlbFdvcmRBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwid29yZCIpfSxkZWxHcm91cEJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImdyb3VwIil9LGRlbEdyb3VwQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsImdyb3VwIil9LGluZGVudEF1dG86ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iil9LGluZGVudE1vcmU6ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oImFkZCIpfSxpbmRlbnRMZXNzOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpfSxpbnNlcnRUYWI6ZnVuY3Rpb24odCl7dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LGRlZmF1bHRUYWI6ZnVuY3Rpb24odCl7dC5zb21ldGhpbmdTZWxlY3RlZCgpP3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKTp0LnJlcGxhY2VTZWxlY3Rpb24oIgkiLCJlbmQiLCIraW5wdXQiKX0sdHJhbnNwb3NlQ2hhcnM6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXQuZ2V0TGluZShlLmxpbmUpO2UuY2g+MCYmZS5jaDxyLmxlbmd0aC0xJiZ0LnJlcGxhY2VSYW5nZShyLmNoYXJBdChlLmNoKStyLmNoYXJBdChlLmNoLTEpLFllKGUubGluZSxlLmNoLTEpLFllKGUubGluZSxlLmNoKzEpKX0sbmV3bGluZUFuZEluZGVudDpmdW5jdGlvbih0KXtsZSh0LGZ1bmN0aW9uKCl7dC5yZXBsYWNlU2VsZWN0aW9uKCJcbiIsImVuZCIsIitpbnB1dCIpLHQuaW5kZW50TGluZSh0LmdldEN1cnNvcigpLmxpbmUsbnVsbCwhMCl9KSgpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7dC50b2dnbGVPdmVyd3JpdGUoKX19LHZvPXQua2V5TWFwPXt9O3ZvLmJhc2ljPXtMZWZ0OiJnb0NoYXJMZWZ0IixSaWdodDoiZ29DaGFyUmlnaHQiLFVwOiJnb0xpbmVVcCIsRG93bjoiZ29MaW5lRG93biIsRW5kOiJnb0xpbmVFbmQiLEhvbWU6ImdvTGluZVN0YXJ0U21hcnQiLFBhZ2VVcDoiZ29QYWdlVXAiLFBhZ2VEb3duOiJnb1BhZ2VEb3duIixEZWxldGU6ImRlbENoYXJBZnRlciIsQmFja3NwYWNlOiJkZWxDaGFyQmVmb3JlIiwiU2hpZnQtQmFja3NwYWNlIjoiZGVsQ2hhckJlZm9yZSIsVGFiOiJkZWZhdWx0VGFiIiwiU2hpZnQtVGFiIjoiaW5kZW50QXV0byIsRW50ZXI6Im5ld2xpbmVBbmRJbmRlbnQiLEluc2VydDoidG9nZ2xlT3ZlcndyaXRlIn0sdm8ucGNEZWZhdWx0PXsiQ3RybC1BIjoic2VsZWN0QWxsIiwiQ3RybC1EIjoiZGVsZXRlTGluZSIsIkN0cmwtWiI6InVuZG8iLCJTaGlmdC1DdHJsLVoiOiJyZWRvIiwiQ3RybC1ZIjoicmVkbyIsIkN0cmwtSG9tZSI6ImdvRG9jU3RhcnQiLCJBbHQtVXAiOiJnb0RvY1N0YXJ0IiwiQ3RybC1FbmQiOiJnb0RvY0VuZCIsIkN0cmwtRG93biI6ImdvRG9jRW5kIiwiQ3RybC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJDdHJsLVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQWx0LUxlZnQiOiJnb0xpbmVTdGFydCIsIkFsdC1SaWdodCI6ImdvTGluZUVuZCIsIkN0cmwtQmFja3NwYWNlIjoiZGVsR3JvdXBCZWZvcmUiLCJDdHJsLURlbGV0ZSI6ImRlbEdyb3VwQWZ0ZXIiLCJDdHJsLVMiOiJzYXZlIiwiQ3RybC1GIjoiZmluZCIsIkN0cmwtRyI6ImZpbmROZXh0IiwiU2hpZnQtQ3RybC1HIjoiZmluZFByZXYiLCJTaGlmdC1DdHJsLUYiOiJyZXBsYWNlIiwiU2hpZnQtQ3RybC1SIjoicmVwbGFjZUFsbCIsIkN0cmwtWyI6ImluZGVudExlc3MiLCJDdHJsLV0iOiJpbmRlbnRNb3JlIixmYWxsdGhyb3VnaDoiYmFzaWMifSx2by5tYWNEZWZhdWx0PXsiQ21kLUEiOiJzZWxlY3RBbGwiLCJDbWQtRCI6ImRlbGV0ZUxpbmUiLCJDbWQtWiI6InVuZG8iLCJTaGlmdC1DbWQtWiI6InJlZG8iLCJDbWQtWSI6InJlZG8iLCJDbWQtVXAiOiJnb0RvY1N0YXJ0IiwiQ21kLUVuZCI6ImdvRG9jRW5kIiwiQ21kLURvd24iOiJnb0RvY0VuZCIsIkFsdC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJBbHQtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJDbWQtTGVmdCI6ImdvTGluZVN0YXJ0IiwiQ21kLVJpZ2h0IjoiZ29MaW5lRW5kIiwiQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1BbHQtQmFja3NwYWNlIjoiZGVsR3JvdXBBZnRlciIsIkFsdC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ21kLVMiOiJzYXZlIiwiQ21kLUYiOiJmaW5kIiwiQ21kLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUNtZC1HIjoiZmluZFByZXYiLCJDbWQtQWx0LUYiOiJyZXBsYWNlIiwiU2hpZnQtQ21kLUFsdC1GIjoicmVwbGFjZUFsbCIsIkNtZC1bIjoiaW5kZW50TGVzcyIsIkNtZC1dIjoiaW5kZW50TW9yZSIsIkNtZC1CYWNrc3BhY2UiOiJkZWxMaW5lTGVmdCIsZmFsbHRocm91Z2g6WyJiYXNpYyIsImVtYWNzeSJdfSx2b1siZGVmYXVsdCJdPUtpP3ZvLm1hY0RlZmF1bHQ6dm8ucGNEZWZhdWx0LHZvLmVtYWNzeT17IkN0cmwtRiI6ImdvQ2hhclJpZ2h0IiwiQ3RybC1CIjoiZ29DaGFyTGVmdCIsIkN0cmwtUCI6ImdvTGluZVVwIiwiQ3RybC1OIjoiZ29MaW5lRG93biIsIkFsdC1GIjoiZ29Xb3JkUmlnaHQiLCJBbHQtQiI6ImdvV29yZExlZnQiLCJDdHJsLUEiOiJnb0xpbmVTdGFydCIsIkN0cmwtRSI6ImdvTGluZUVuZCIsIkN0cmwtViI6ImdvUGFnZURvd24iLCJTaGlmdC1DdHJsLVYiOiJnb1BhZ2VVcCIsIkN0cmwtRCI6ImRlbENoYXJBZnRlciIsIkN0cmwtSCI6ImRlbENoYXJCZWZvcmUiLCJBbHQtRCI6ImRlbFdvcmRBZnRlciIsIkFsdC1CYWNrc3BhY2UiOiJkZWxXb3JkQmVmb3JlIiwiQ3RybC1LIjoia2lsbExpbmUiLCJDdHJsLVQiOiJ0cmFuc3Bvc2VDaGFycyJ9LHQubG9va3VwS2V5PXdyLHQuaXNNb2RpZmllcktleT1Mcix0LmtleU5hbWU9a3IsdC5mcm9tVGV4dEFyZWE9ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7ZS52YWx1ZT11LmdldFZhbHVlKCl9aWYocnx8KHI9e30pLHIudmFsdWU9ZS52YWx1ZSwhci50YWJpbmRleCYmZS50YWJpbmRleCYmKHIudGFiaW5kZXg9ZS50YWJpbmRleCksIXIucGxhY2Vob2xkZXImJmUucGxhY2Vob2xkZXImJihyLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIpLG51bGw9PXIuYXV0b2ZvY3VzKXt2YXIgaT1kb2N1bWVudC5ib2R5O3RyeXtpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2gobyl7fXIuYXV0b2ZvY3VzPWk9PWV8fG51bGwhPWUuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSYmaT09ZG9jdW1lbnQuYm9keX1pZihlLmZvcm0mJihHbihlLmZvcm0sInN1Ym1pdCIsbiksIXIubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkpe3ZhciBsPWUuZm9ybSxzPWwuc3VibWl0O3RyeXt2YXIgYT1sLnN1Ym1pdD1mdW5jdGlvbigpe24oKSxsLnN1Ym1pdD1zLGwuc3VibWl0KCksbC5zdWJtaXQ9YX19Y2F0Y2gobyl7fX1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciB1PXQoZnVuY3Rpb24odCl7ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGUubmV4dFNpYmxpbmcpfSxyKTtyZXR1cm4gdS5zYXZlPW4sdS5nZXRUZXh0QXJlYT1mdW5jdGlvbigpe3JldHVybiBlfSx1LnRvVGV4dEFyZWE9ZnVuY3Rpb24oKXtuKCksZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUuZ2V0V3JhcHBlckVsZW1lbnQoKSksZS5zdHlsZS5kaXNwbGF5PSIiLGUuZm9ybSYmKFZuKGUuZm9ybSwic3VibWl0IixuKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JtLnN1Ym1pdCYmKGUuZm9ybS5zdWJtaXQ9cykpfSx1fSxTci5wcm90b3R5cGU9e2VvbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcz49dGhpcy5zdHJpbmcubGVuZ3RofSxzb2w6ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy5wb3N9LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKXx8dm9pZCAwfSxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPHRoaXMuc3RyaW5nLmxlbmd0aD90aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyk6dm9pZCAwfSxlYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTtpZigic3RyaW5nIj09dHlwZW9mIHQpdmFyIHI9ZT09dDtlbHNlIHZhciByPWUmJih0LnRlc3Q/dC50ZXN0KGUpOnQoZSkpO3JldHVybiByPygrK3RoaXMucG9zLGUpOnZvaWQgMH0sZWF0V2hpbGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucG9zO3RoaXMuZWF0KHQpOyk7cmV0dXJuIHRoaXMucG9zPmV9LGVhdFNwYWNlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucG9zOy9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpOykrK3RoaXMucG9zO3JldHVybiB0aGlzLnBvcz50fSxza2lwVG9FbmQ6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0cmluZy5sZW5ndGh9LHNraXBUbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN0cmluZy5pbmRleE9mKHQsdGhpcy5wb3MpO3JldHVybiBlPi0xPyh0aGlzLnBvcz1lLCEwKTp2b2lkIDB9LGJhY2tVcDpmdW5jdGlvbih0KXt0aGlzLnBvcy09dH0sY29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENvbHVtblBvczx0aGlzLnN0YXJ0JiYodGhpcy5sYXN0Q29sdW1uVmFsdWU9Wm4odGhpcy5zdHJpbmcsdGhpcy5zdGFydCx0aGlzLnRhYlNpemUsdGhpcy5sYXN0Q29sdW1uUG9zLHRoaXMubGFzdENvbHVtblZhbHVlKSx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5zdGFydCksdGhpcy5sYXN0Q29sdW1uVmFsdWV9LGluZGVudGF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFpuKHRoaXMuc3RyaW5nLG51bGwsdGhpcy50YWJTaXplKX0sbWF0Y2g6ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIG49dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHQpO3JldHVybiBuJiZuLmluZGV4PjA/bnVsbDoobiYmZSE9PSExJiYodGhpcy5wb3MrPW5bMF0ubGVuZ3RoKSxuKX12YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gcj90LnRvTG93ZXJDYXNlKCk6dH0sbz10aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsdC5sZW5ndGgpO3JldHVybiBpKG8pPT1pKHQpPyhlIT09ITEmJih0aGlzLnBvcys9dC5sZW5ndGgpLCEwKTp2b2lkIDB9LGN1cnJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCx0aGlzLnBvcyl9fSx0LlN0cmluZ1N0cmVhbT1Tcix0LlRleHRNYXJrZXI9TXIsam4oTXIpLE1yLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKXt2YXIgdD10aGlzLmRvYy5jbSxlPXQmJiF0LmN1ck9wO2lmKGUmJmllKHQpLFluKHRoaXMsImNsZWFyIikpe3ZhciByPXRoaXMuZmluZCgpO3ImJlVuKHRoaXMsImNsZWFyIixyLmZyb20sci50byl9Zm9yKHZhciBuPW51bGwsaT1udWxsLG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGw9dGhpcy5saW5lc1tvXSxzPU5yKGwubWFya2VkU3BhbnMsdGhpcyk7bnVsbCE9cy50byYmKGk9Ym4obCkpLGwubWFya2VkU3BhbnM9RHIobC5tYXJrZWRTcGFucyxzKSxudWxsIT1zLmZyb20/bj1ibihsKTp0aGlzLmNvbGxhcHNlZCYmIVZyKHRoaXMuZG9jLGwpJiZ0JiZ5bihsLHJlKHQuZGlzcGxheSkpfWlmKHQmJnRoaXMuY29sbGFwc2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZylmb3IodmFyIG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGE9R3IodC5kb2MsdGhpcy5saW5lc1tvXSksdT1jKHQuZG9jLGEpO3U+dC5kaXNwbGF5Lm1heExpbmVMZW5ndGgmJih0LmRpc3BsYXkubWF4TGluZT1hLHQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoPXUsdC5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKX1udWxsIT1uJiZ0JiZ1ZSh0LG4saSsxKSx0aGlzLmxpbmVzLmxlbmd0aD0wLHRoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITAsdGhpcy5hdG9taWMmJnRoaXMuZG9jLmNhbnRFZGl0JiYodGhpcy5kb2MuY2FudEVkaXQ9ITEsdCYmaXIodCkpLGUmJm9lKHQpfX0sTXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyPTA7cjx0aGlzLmxpbmVzLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGluZXNbcl0saT1OcihuLm1hcmtlZFNwYW5zLHRoaXMpO2lmKG51bGwhPWkuZnJvbXx8bnVsbCE9aS50byl7dmFyIG89Ym4obik7bnVsbCE9aS5mcm9tJiYodD1ZZShvLGkuZnJvbSkpLG51bGwhPWkudG8mJihlPVllKG8saS50bykpfX1yZXR1cm4iYm9va21hcmsiPT10aGlzLnR5cGU/dDp0JiZ7ZnJvbTp0LHRvOmV9fSxNci5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZmluZCgpLGU9dGhpcy5kb2MuY207aWYodCYmZSl7ImJvb2ttYXJrIiE9dGhpcy50eXBlJiYodD10LmZyb20pO3ZhciByPWduKHRoaXMuZG9jLHQubGluZSk7aWYoRyhlLHIpLHQubGluZT49ZS5kaXNwbGF5LnNob3dpbmdGcm9tJiZ0LmxpbmU8ZS5kaXNwbGF5LnNob3dpbmdUbyl7Zm9yKHZhciBuPWUuZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpaWYobi5saW5lT2JqPT1yKXtuLm9mZnNldEhlaWdodCE9ci5oZWlnaHQmJnluKHIsbi5vZmZzZXRIZWlnaHQpOwpicmVha31hZShlLGZ1bmN0aW9uKCl7ZS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPWUuY3VyT3AuZm9yY2VVcGRhdGU9ZS5jdXJPcC51cGRhdGVNYXhMaW5lPSEwfSl9fX0sTXIucHJvdG90eXBlLmF0dGFjaExpbmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7ZS5tYXliZUhpZGRlbk1hcmtlcnMmJi0xIT10aShlLm1heWJlSGlkZGVuTWFya2Vycyx0aGlzKXx8KGUubWF5YmVVbmhpZGRlbk1hcmtlcnN8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX10aGlzLmxpbmVzLnB1c2godCl9LE1yLnByb3RvdHlwZS5kZXRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGluZXMuc3BsaWNlKHRpKHRoaXMubGluZXMsdCksMSksIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7KGUubWF5YmVIaWRkZW5NYXJrZXJzfHwoZS5tYXliZUhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfX0sdC5TaGFyZWRUZXh0TWFya2VyPUFyLGpuKEFyKSxBci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMDtmb3IodmFyIHQ9MDt0PHRoaXMubWFya2Vycy5sZW5ndGg7Kyt0KXRoaXMubWFya2Vyc1t0XS5jbGVhcigpO1VuKHRoaXMsImNsZWFyIil9fSxBci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaW1hcnkuZmluZCgpfTt2YXIgeW89dC5MaW5lV2lkZ2V0PWZ1bmN0aW9uKHQsZSxyKXtpZihyKWZvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0aGlzW25dPXJbbl0pO3RoaXMuY209dCx0aGlzLm5vZGU9ZX07am4oeW8pLHlvLnByb3RvdHlwZS5jbGVhcj1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMubGluZS53aWRnZXRzLGU9Ym4odGhpcy5saW5lKTtpZihudWxsIT1lJiZ0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdPT10aGlzJiZ0LnNwbGljZShyLS0sMSk7dC5sZW5ndGh8fCh0aGlzLmxpbmUud2lkZ2V0cz1udWxsKTt2YXIgbj1Dbih0aGlzLmNtLHRoaXMubGluZSk8dGhpcy5jbS5kb2Muc2Nyb2xsVG9wO3luKHRoaXMubGluZSxNYXRoLm1heCgwLHRoaXMubGluZS5oZWlnaHQtWXIodGhpcykpKSxuJiZmcih0aGlzLmNtLDAsLXRoaXMuaGVpZ2h0KSx1ZSh0aGlzLmNtLGUsZSsxKX19KSx5by5wcm90b3R5cGUuY2hhbmdlZD1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVpZ2h0O3RoaXMuaGVpZ2h0PW51bGw7dmFyIGU9WXIodGhpcyktdDtpZihlKXt5bih0aGlzLmxpbmUsdGhpcy5saW5lLmhlaWdodCtlKTt2YXIgcj1ibih0aGlzLmxpbmUpO3VlKHRoaXMuY20scixyKzEpfX0pO3ZhciBibz10LkxpbmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LFhyKHRoaXMsZSksdGhpcy5oZWlnaHQ9cj9yKHRoaXMpOjF9O2puKGJvKSxiby5wcm90b3R5cGUubGluZU5vPWZ1bmN0aW9uKCl7cmV0dXJuIGJuKHRoaXMpfTt2YXIgeG89e307Zm4ucHJvdG90eXBlPXtjaHVua1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saW5lcy5sZW5ndGh9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQsbj10K2U7bj5yOysrcil7dmFyIGk9dGhpcy5saW5lc1tyXTt0aGlzLmhlaWdodC09aS5oZWlnaHQsWnIoaSksVW4oaSwiZGVsZXRlIil9dGhpcy5saW5lcy5zcGxpY2UodCxlKX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7dC5zcGxpY2UuYXBwbHkodCxbdC5sZW5ndGgsMF0uY29uY2F0KHRoaXMubGluZXMpKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGVpZ2h0Kz1yLHRoaXMubGluZXM9dGhpcy5saW5lcy5zbGljZSgwLHQpLmNvbmNhdChlKS5jb25jYXQodGhpcy5saW5lcy5zbGljZSh0KSk7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtpPm47KytuKWVbbl0ucGFyZW50PXRoaXN9LGl0ZXJOOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dCtlO24+dDsrK3QpaWYocih0aGlzLmxpbmVzW3RdKSlyZXR1cm4hMH19LGhuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24odCxlKXt0aGlzLnNpemUtPWU7Zm9yKHZhciByPTA7cjx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+dCl7dmFyIG89TWF0aC5taW4oZSxpLXQpLGw9bi5oZWlnaHQ7aWYobi5yZW1vdmVJbm5lcih0LG8pLHRoaXMuaGVpZ2h0LT1sLW4uaGVpZ2h0LGk9PW8mJih0aGlzLmNoaWxkcmVuLnNwbGljZShyLS0sMSksbi5wYXJlbnQ9bnVsbCksMD09KGUtPW8pKWJyZWFrO3Q9MH1lbHNlIHQtPWl9aWYodGhpcy5zaXplLWU8MjUpe3ZhciBzPVtdO3RoaXMuY29sbGFwc2UocyksdGhpcy5jaGlsZHJlbj1bbmV3IGZuKHMpXSx0aGlzLmNoaWxkcmVuWzBdLnBhcmVudD10aGlzfX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmNoaWxkcmVuLmxlbmd0aDtyPmU7KytlKXRoaXMuY2hpbGRyZW5bZV0uY29sbGFwc2UodCl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpemUrPWUubGVuZ3RoLHRoaXMuaGVpZ2h0Kz1yO2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD49dCl7aWYoby5pbnNlcnRJbm5lcih0LGUsciksby5saW5lcyYmby5saW5lcy5sZW5ndGg+NTApe2Zvcig7by5saW5lcy5sZW5ndGg+NTA7KXt2YXIgcz1vLmxpbmVzLnNwbGljZShvLmxpbmVzLmxlbmd0aC0yNSwyNSksYT1uZXcgZm4ocyk7by5oZWlnaHQtPWEuaGVpZ2h0LHRoaXMuY2hpbGRyZW4uc3BsaWNlKG4rMSwwLGEpLGEucGFyZW50PXRoaXN9dGhpcy5tYXliZVNwaWxsKCl9YnJlYWt9dC09bH19LG1heWJlU3BpbGw6ZnVuY3Rpb24oKXtpZighKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPD0xMCkpe3ZhciB0PXRoaXM7ZG97dmFyIGU9dC5jaGlsZHJlbi5zcGxpY2UodC5jaGlsZHJlbi5sZW5ndGgtNSw1KSxyPW5ldyBobihlKTtpZih0LnBhcmVudCl7dC5zaXplLT1yLnNpemUsdC5oZWlnaHQtPXIuaGVpZ2h0O3ZhciBuPXRpKHQucGFyZW50LmNoaWxkcmVuLHQpO3QucGFyZW50LmNoaWxkcmVuLnNwbGljZShuKzEsMCxyKX1lbHNle3ZhciBpPW5ldyBobih0LmNoaWxkcmVuKTtpLnBhcmVudD10LHQuY2hpbGRyZW49W2kscl0sdD1pfXIucGFyZW50PXQucGFyZW50fXdoaWxlKHQuY2hpbGRyZW4ubGVuZ3RoPjEwKTt0LnBhcmVudC5tYXliZVNwaWxsKCl9fSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10aGlzLmNoaWxkcmVuW25dLGw9by5jaHVua1NpemUoKTtpZihsPnQpe3ZhciBzPU1hdGgubWluKGUsbC10KTtpZihvLml0ZXJOKHQscyxyKSlyZXR1cm4hMDtpZigwPT0oZS09cykpYnJlYWs7dD0wfWVsc2UgdC09bH19fTt2YXIgQ289MCx3bz10LkRvYz1mdW5jdGlvbih0LGUscil7aWYoISh0aGlzIGluc3RhbmNlb2Ygd28pKXJldHVybiBuZXcgd28odCxlLHIpO251bGw9PXImJihyPTApLGhuLmNhbGwodGhpcyxbbmV3IGZuKFtuZXcgYm8oIiIsbnVsbCldKV0pLHRoaXMuZmlyc3Q9cix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbExlZnQ9MCx0aGlzLmNhbnRFZGl0PSExLHRoaXMuaGlzdG9yeT1MbigpLHRoaXMuY2xlYW5HZW5lcmF0aW9uPTEsdGhpcy5mcm9udGllcj1yO3ZhciBuPVllKHIsMCk7dGhpcy5zZWw9e2Zyb206bix0bzpuLGhlYWQ6bixhbmNob3I6bixzaGlmdDohMSxleHRlbmQ6ITEsZ29hbENvbHVtbjpudWxsfSx0aGlzLmlkPSsrQ28sdGhpcy5tb2RlT3B0aW9uPWUsInN0cmluZyI9PXR5cGVvZiB0JiYodD16byh0KSksY24odGhpcyx7ZnJvbTpuLHRvOm4sdGV4dDp0fSxudWxsLHtoZWFkOm4sYW5jaG9yOm59KX07d28ucHJvdG90eXBlPWVpKGhuLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6d28saXRlcjpmdW5jdGlvbih0LGUscil7cj90aGlzLml0ZXJOKHQtdGhpcy5maXJzdCxlLXQscik6dGhpcy5pdGVyTih0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplLHQpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lLmxlbmd0aDtpPm47KytuKXIrPWVbbl0uaGVpZ2h0O3RoaXMuaW5zZXJ0SW5uZXIodC10aGlzLmZpcnN0LGUscil9LHJlbW92ZTpmdW5jdGlvbih0LGUpe3RoaXMucmVtb3ZlSW5uZXIodC10aGlzLmZpcnN0LGUpfSxnZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT12bih0aGlzLHRoaXMuZmlyc3QsdGhpcy5maXJzdCt0aGlzLnNpemUpO3JldHVybiB0PT09ITE/ZTplLmpvaW4odHx8IlxuIil9LHNldFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVllKHRoaXMuZmlyc3QsMCkscj10aGlzLmZpcnN0K3RoaXMuc2l6ZS0xO0JlKHRoaXMse2Zyb206ZSx0bzpZZShyLGduKHRoaXMscikudGV4dC5sZW5ndGgpLHRleHQ6em8odCksb3JpZ2luOiJzZXRWYWx1ZSJ9LHtoZWFkOmUsYW5jaG9yOmV9LCEwKX0scmVwbGFjZVJhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe2U9UWUodGhpcyxlKSxyPXI/UWUodGhpcyxyKTplLF9lKHRoaXMsdCxlLHIsbil9LGdldFJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1tbih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSk7cmV0dXJuIHI9PT0hMT9uOm4uam9pbihyfHwiXG4iKX0sZ2V0TGluZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldExpbmVIYW5kbGUodCk7cmV0dXJuIGUmJmUudGV4dH0sc2V0TGluZTpmdW5jdGlvbih0LGUpe3RyKHRoaXMsdCkmJl9lKHRoaXMsZSxZZSh0LDApLFFlKHRoaXMsWWUodCkpKX0scmVtb3ZlTGluZTpmdW5jdGlvbih0KXt0P19lKHRoaXMsIiIsUWUodGhpcyxZZSh0LTEpKSxRZSh0aGlzLFllKHQpKSk6X2UodGhpcywiIixZZSgwLDApLFFlKHRoaXMsWWUoMSwwKSkpfSxnZXRMaW5lSGFuZGxlOmZ1bmN0aW9uKHQpe3JldHVybiB0cih0aGlzLHQpP2duKHRoaXMsdCk6dm9pZCAwfSxnZXRMaW5lTnVtYmVyOmZ1bmN0aW9uKHQpe3JldHVybiBibih0KX0sZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ9Z24odGhpcyx0KSksR3IodGhpcyx0KX0sbGluZUNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0sZmlyc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3R9LGxhc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3QrdGhpcy5zaXplLTF9LGNsaXBQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIFFlKHRoaXMsdCl9LGdldEN1cnNvcjpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuc2VsO3JldHVybiBlPW51bGw9PXR8fCJoZWFkIj09dD9yLmhlYWQ6ImFuY2hvciI9PXQ/ci5hbmNob3I6ImVuZCI9PXR8fHQ9PT0hMT9yLnRvOnIuZnJvbSxaZShlKX0sc29tZXRoaW5nU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hamUodGhpcy5zZWwuaGVhZCx0aGlzLnNlbC5hbmNob3IpfSxzZXRDdXJzb3I6c2UoZnVuY3Rpb24odCxlLHIpe3ZhciBuPVFlKHRoaXMsIm51bWJlciI9PXR5cGVvZiB0P1llKHQsZXx8MCk6dCk7cj9lcih0aGlzLG4pOm5yKHRoaXMsbixuKX0pLHNldFNlbGVjdGlvbjpzZShmdW5jdGlvbih0LGUscil7bnIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZXx8dCkscil9KSxleHRlbmRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe2VyKHRoaXMsUWUodGhpcyx0KSxlJiZRZSh0aGlzLGUpLHIpfSksZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFJhbmdlKHRoaXMuc2VsLmZyb20sdGhpcy5zZWwudG8sdCl9LHJlcGxhY2VTZWxlY3Rpb246ZnVuY3Rpb24odCxlLHIpe0JlKHRoaXMse2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byx0ZXh0OnpvKHQpLG9yaWdpbjpyfSxlfHwiYXJvdW5kIil9LHVuZG86c2UoZnVuY3Rpb24oKXtWZSh0aGlzLCJ1bmRvIil9KSxyZWRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywicmVkbyIpfSksc2V0RXh0ZW5kaW5nOmZ1bmN0aW9uKHQpe3RoaXMuc2VsLmV4dGVuZD10fSxoaXN0b3J5U2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGlzdG9yeTtyZXR1cm57dW5kbzp0LmRvbmUubGVuZ3RoLHJlZG86dC51bmRvbmUubGVuZ3RofX0sY2xlYXJIaXN0b3J5OmZ1bmN0aW9uKCl7dGhpcy5oaXN0b3J5PUxuKHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKX0sbWFya0NsZWFuOmZ1bmN0aW9uKCl7dGhpcy5jbGVhbkdlbmVyYXRpb249dGhpcy5jaGFuZ2VHZW5lcmF0aW9uKCl9LGNoYW5nZUdlbmVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaXN0b3J5Lmxhc3RPcD10aGlzLmhpc3RvcnkubGFzdE9yaWdpbj1udWxsLHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9ufSxpc0NsZWFuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbj09KHR8fHRoaXMuY2xlYW5HZW5lcmF0aW9uKX0sZ2V0SGlzdG9yeTpmdW5jdGlvbigpe3JldHVybntkb25lOkhuKHRoaXMuaGlzdG9yeS5kb25lKSx1bmRvbmU6SG4odGhpcy5oaXN0b3J5LnVuZG9uZSl9fSxzZXRIaXN0b3J5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7ZS5kb25lPXQuZG9uZS5zbGljZSgwKSxlLnVuZG9uZT10LnVuZG9uZS5zbGljZSgwKX0sbWFya1RleHQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUcih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSxyLCJyYW5nZSIpfSxzZXRCb29rbWFyazpmdW5jdGlvbih0LGUpe3ZhciByPXtyZXBsYWNlZFdpdGg6ZSYmKG51bGw9PWUubm9kZVR5cGU/ZS53aWRnZXQ6ZSksaW5zZXJ0TGVmdDplJiZlLmluc2VydExlZnR9O3JldHVybiB0PVFlKHRoaXMsdCksVHIodGhpcyx0LHQsciwiYm9va21hcmsiKX0sZmluZE1hcmtzQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLHQpO3ZhciBlPVtdLHI9Z24odGhpcyx0LmxpbmUpLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07KG51bGw9PWkuZnJvbXx8aS5mcm9tPD10LmNoKSYmKG51bGw9PWkudG98fGkudG8+PXQuY2gpJiZlLnB1c2goaS5tYXJrZXIucGFyZW50fHxpLm1hcmtlcil9cmV0dXJuIGV9LGdldEFsbE1hcmtzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihlKXt2YXIgcj1lLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pbnVsbCE9cltuXS5mcm9tJiZ0LnB1c2gocltuXS5tYXJrZXIpfSksdH0scG9zRnJvbUluZGV4OmZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKG4pe3ZhciBpPW4udGV4dC5sZW5ndGgrMTtyZXR1cm4gaT50PyhlPXQsITApOih0LT1pLCsrcix2b2lkIDApfSksUWUodGhpcyxZZShyLGUpKX0saW5kZXhGcm9tUG9zOmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT10LmNoO3JldHVybiB0LmxpbmU8dGhpcy5maXJzdHx8dC5jaDwwPzA6KHRoaXMuaXRlcih0aGlzLmZpcnN0LHQubGluZSxmdW5jdGlvbih0KXtlKz10LnRleHQubGVuZ3RoKzF9KSxlKX0sY29weTpmdW5jdGlvbih0KXt2YXIgZT1uZXcgd28odm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKSx0aGlzLm1vZGVPcHRpb24sdGhpcy5maXJzdCk7cmV0dXJuIGUuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLGUuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbExlZnQsZS5zZWw9e2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byxoZWFkOnRoaXMuc2VsLmhlYWQsYW5jaG9yOnRoaXMuc2VsLmFuY2hvcixzaGlmdDp0aGlzLnNlbC5zaGlmdCxleHRlbmQ6ITEsZ29hbENvbHVtbjp0aGlzLnNlbC5nb2FsQ29sdW1ufSx0JiYoZS5oaXN0b3J5LnVuZG9EZXB0aD10aGlzLmhpc3RvcnkudW5kb0RlcHRoLGUuc2V0SGlzdG9yeSh0aGlzLmdldEhpc3RvcnkoKSkpLGV9LGxpbmtlZERvYzpmdW5jdGlvbih0KXt0fHwodD17fSk7dmFyIGU9dGhpcy5maXJzdCxyPXRoaXMuZmlyc3QrdGhpcy5zaXplO251bGwhPXQuZnJvbSYmdC5mcm9tPmUmJihlPXQuZnJvbSksbnVsbCE9dC50byYmdC50bzxyJiYocj10LnRvKTt2YXIgbj1uZXcgd28odm4odGhpcyxlLHIpLHQubW9kZXx8dGhpcy5tb2RlT3B0aW9uLGUpO3JldHVybiB0LnNoYXJlZEhpc3QmJihuLmhpc3Rvcnk9dGhpcy5oaXN0b3J5KSwodGhpcy5saW5rZWR8fCh0aGlzLmxpbmtlZD1bXSkpLnB1c2goe2RvYzpuLHNoYXJlZEhpc3Q6dC5zaGFyZWRIaXN0fSksbi5saW5rZWQ9W3tkb2M6dGhpcyxpc1BhcmVudDohMCxzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH1dLG59LHVubGlua0RvYzpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdCYmKGU9ZS5kb2MpLHRoaXMubGlua2VkKWZvcih2YXIgcj0wO3I8dGhpcy5saW5rZWQubGVuZ3RoOysrcil7dmFyIG49dGhpcy5saW5rZWRbcl07aWYobi5kb2M9PWUpe3RoaXMubGlua2VkLnNwbGljZShyLDEpLGUudW5saW5rRG9jKHRoaXMpO2JyZWFrfX1pZihlLmhpc3Rvcnk9PXRoaXMuaGlzdG9yeSl7dmFyIGk9W2UuaWRdO2RuKGUsZnVuY3Rpb24odCl7aS5wdXNoKHQuaWQpfSwhMCksZS5oaXN0b3J5PUxuKCksZS5oaXN0b3J5LmRvbmU9SG4odGhpcy5oaXN0b3J5LmRvbmUsaSksZS5oaXN0b3J5LnVuZG9uZT1Ibih0aGlzLmhpc3RvcnkudW5kb25lLGkpfX0saXRlckxpbmtlZERvY3M6ZnVuY3Rpb24odCl7ZG4odGhpcyx0KX0sZ2V0TW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtfX0pLHdvLnByb3RvdHlwZS5lYWNoTGluZT13by5wcm90b3R5cGUuaXRlcjt2YXIgTG89Iml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciIuc3BsaXQoIiAiKTtmb3IodmFyIGtvIGluIHdvLnByb3RvdHlwZSl3by5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa28pJiZ0aShMbyxrbyk8MCYmKHQucHJvdG90eXBlW2tvXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLmRvYyxhcmd1bWVudHMpfX0od28ucHJvdG90eXBlW2tvXSkpO2puKHdvKSx0LmVfc3RvcD1Qbix0LmVfcHJldmVudERlZmF1bHQ9em4sdC5lX3N0b3BQcm9wYWdhdGlvbj1Jbjt2YXIgU28sTW89MDt0Lm9uPUduLHQub2ZmPVZuLHQuc2lnbmFsPUtuO3ZhciBUbz0zMCxBbz10LlBhc3M9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNvZGVNaXJyb3IuUGFzcyJ9fTskbi5wcm90b3R5cGU9e3NldDpmdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0aGlzLmlkKSx0aGlzLmlkPXNldFRpbWVvdXQoZSx0KX19LHQuY291bnRDb2x1bW49Wm47dmFyIEhvPVsiIl0sTm89L1tcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vLERvPS9bXHUwMzAwLVx1MDM2Rlx1MDQ4My1cdTA0ODdcdTA0ODgtXHUwNDg5XHUwNTkxLVx1MDVCRFx1MDVCRlx1MDVDMS1cdTA1QzJcdTA1QzQtXHUwNUM1XHUwNUM3XHUwNjEwLVx1MDYxQVx1MDY0Qi1cdTA2NUZcdTA2NzBcdTA2RDYtXHUwNkRDXHUwNkRGLVx1MDZFNFx1MDZFNy1cdTA2RThcdTA2RUEtXHUwNkVEXHVBNjZGXHUxREMw4oCTXHUxREZGXHUyMEQw4oCTXHUyMEZGXHVBNjcwLVx1QTY3Mlx1QTY3NC1cdUE2N0RcdUE2OUZcdWRjMDAtXHVkZmZmXHVGRTIw4oCTXHVGRTJGXS87dC5yZXBsYWNlR2V0UmVjdD1mdW5jdGlvbih0KXtmaT10fTt2YXIgV289ZnVuY3Rpb24oKXtpZihOaSlyZXR1cm4hMTt2YXIgdD1zaSgiZGl2Iik7cmV0dXJuImRyYWdnYWJsZSJpbiB0fHwiZHJhZ0Ryb3AiaW4gdH0oKTtUaT9oaT1mdW5jdGlvbih0LGUpe3JldHVybiAzNj09dC5jaGFyQ29kZUF0KGUtMSkmJjM5PT10LmNoYXJDb2RlQXQoZSl9OklpJiYhL1ZlcnNpb25cLyhbNi05XXxcZFxkKVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpP2hpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuL1wtW14gXC0/XXxcP1teICFcJ1wiXCksLlwtXC86O1w/XF1cfV0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9OldpJiYvQ2hyb21lXC8oPzoyOXxbMy05XVxkfFxkXGRcZClcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2hhckNvZGVBdChlLTEpO3JldHVybiByPj04MjA4JiY4MjEyPj1yfTpXaSYmKGhpPWZ1bmN0aW9uKHQsZSl7aWYoZT4xJiY0NT09dC5jaGFyQ29kZUF0KGUtMSkpe2lmKC9cdy8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1teXC0/XC5dLy50ZXN0KHQuY2hhckF0KGUpKSlyZXR1cm4hMDtpZihlPjImJi9bXGRcLixdLy50ZXN0KHQuY2hhckF0KGUtMikpJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITF9cmV0dXJuL1t+ISMlJiopPSt9XF1cXHxcIlwuPiw6O11bKHtbPF18LVteXC0/XC5cdTIwMTAtXHUyMDFmXHUyMDI2XXxcP1tcd35gQCMkJVxeJiooXz0re1t8PjxdfOKApltcd35gQCMkJVxeJiooXz0re1s+PF0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9KTt2YXIgT28sRW8sem89MyE9IlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1bXSxuPXQubGVuZ3RoO24+PWU7KXt2YXIgaT10LmluZGV4T2YoIlxuIixlKTstMT09aSYmKGk9dC5sZW5ndGgpO3ZhciBvPXQuc2xpY2UoZSwiXHIiPT10LmNoYXJBdChpLTEpP2ktMTppKSxsPW8uaW5kZXhPZigiXHIiKTstMSE9bD8oci5wdXNoKG8uc2xpY2UoMCxsKSksZSs9bCsxKTooci5wdXNoKG8pLGU9aSsxKX1yZXR1cm4gcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoL1xyXG4/fFxuLyl9O3Quc3BsaXRMaW5lcz16bzt2YXIgSW89d2luZG93LmdldFNlbGVjdGlvbj9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuc2VsZWN0aW9uU3RhcnQhPXQuc2VsZWN0aW9uRW5kfWNhdGNoKGUpe3JldHVybiExfX06ZnVuY3Rpb24odCl7dHJ5e3ZhciBlPXQub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX1jYXRjaChyKXt9cmV0dXJuIGUmJmUucGFyZW50RWxlbWVudCgpPT10PzAhPWUuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsZSk6ITF9LEZvPWZ1bmN0aW9uKCl7dmFyIHQ9c2koImRpdiIpO3JldHVybiJvbmNvcHkiaW4gdD8hMDoodC5zZXRBdHRyaWJ1dGUoIm9uY29weSIsInJldHVybjsiKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5vbmNvcHkpfSgpLFBvPXszOiJFbnRlciIsODoiQmFja3NwYWNlIiw5OiJUYWIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ3RybCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2MiLDMyOiJTcGFjZSIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkxlZnQiLDM4OiJVcCIsMzk6IlJpZ2h0Iiw0MDoiRG93biIsNDQ6IlByaW50U2NybiIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsNTk6IjsiLDkxOiJNb2QiLDkyOiJNb2QiLDkzOiJNb2QiLDEwOToiLSIsMTA3OiI9IiwxMjc6IkRlbGV0ZSIsMTg2OiI7IiwxODc6Ij0iLDE4ODoiLCIsMTg5OiItIiwxOTA6Ii4iLDE5MToiLyIsMTkyOiJgIiwyMTk6IlsiLDIyMDoiXFwiLDIyMToiXSIsMjIyOiInIiw2MzI3NjoiUGFnZVVwIiw2MzI3NzoiUGFnZURvd24iLDYzMjc1OiJFbmQiLDYzMjczOiJIb21lIiw2MzIzNDoiTGVmdCIsNjMyMzI6IlVwIiw2MzIzNToiUmlnaHQiLDYzMjMzOiJEb3duIiw2MzMwMjoiSW5zZXJ0Iiw2MzI3MjoiRGVsZXRlIn07dC5rZXlOYW1lcz1QbyxmdW5jdGlvbigpe2Zvcih2YXIgdD0wOzEwPnQ7dCsrKVBvW3QrNDhdPVN0cmluZyh0KTtmb3IodmFyIHQ9NjU7OTA+PXQ7dCsrKVBvW3RdPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7Zm9yKHZhciB0PTE7MTI+PXQ7dCsrKVBvW3QrMTExXT1Qb1t0KzYzMjM1XT0iRiIrdH0oKTt2YXIgUm8sQm89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiAyNTU+PXQ/ZS5jaGFyQXQodCk6dD49MTQyNCYmMTUyND49dD8iUiI6dD49MTUzNiYmMTc5MT49dD9yLmNoYXJBdCh0LTE1MzYpOnQ+PTE3OTImJjIyMjA+PXQ/InIiOiJMIn12YXIgZT0iYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTCIscj0icnJycnJycnJycnJyLHJOTm1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1ycnJycnJybm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1ObW1tbXJycnJycnJycnJycnJycnJyciIsbj0vW1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUwNzAwLVx1MDhhY10vLGk9L1tzdHdOXS8sbz0vW0xScl0vLGw9L1tMYjFuXS8scz0vWzFuXS8sYT0iTCI7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFuLnRlc3QoZSkpcmV0dXJuITE7Zm9yKHZhciByLHU9ZS5sZW5ndGgsYz1bXSxmPTA7dT5mOysrZiljLnB1c2gocj10KGUuY2hhckNvZGVBdChmKSkpO2Zvcih2YXIgZj0wLGg9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyJtIj09cj9jW2ZdPWg6aD1yfWZvcih2YXIgZj0wLGQ9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyIxIj09ciYmInIiPT1kP2NbZl09Im4iOm8udGVzdChyKSYmKGQ9ciwiciI9PXImJihjW2ZdPSJSIikpfWZvcih2YXIgZj0xLGg9Y1swXTt1LTE+ZjsrK2Ype3ZhciByPWNbZl07IisiPT1yJiYiMSI9PWgmJiIxIj09Y1tmKzFdP2NbZl09IjEiOiIsIiE9cnx8aCE9Y1tmKzFdfHwiMSIhPWgmJiJuIiE9aHx8KGNbZl09aCksaD1yfWZvcih2YXIgZj0wO3U+ZjsrK2Ype3ZhciByPWNbZl07aWYoIiwiPT1yKWNbZl09Ik4iO2Vsc2UgaWYoIiUiPT1yKXtmb3IodmFyIHA9ZisxO3U+cCYmIiUiPT1jW3BdOysrcCk7Zm9yKHZhciBnPWYmJiIhIj09Y1tmLTFdfHx1LTE+cCYmIjEiPT1jW3BdPyIxIjoiTiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfX1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiTCI9PWQmJiIxIj09cj9jW2ZdPSJMIjpvLnRlc3QocikmJihkPXIpfWZvcih2YXIgZj0wO3U+ZjsrK2YpaWYoaS50ZXN0KGNbZl0pKXtmb3IodmFyIHA9ZisxO3U+cCYmaS50ZXN0KGNbcF0pOysrcCk7Zm9yKHZhciB2PSJMIj09KGY/Y1tmLTFdOmEpLHk9IkwiPT0odS0xPnA/Y1twXTphKSxnPXZ8fHk/IkwiOiJSIixtPWY7cD5tOysrbSljW21dPWc7Zj1wLTF9Zm9yKHZhciBiLHg9W10sZj0wO3U+ZjspaWYobC50ZXN0KGNbZl0pKXt2YXIgQz1mO2ZvcigrK2Y7dT5mJiZsLnRlc3QoY1tmXSk7KytmKTt4LnB1c2goe2Zyb206Qyx0bzpmLGxldmVsOjB9KX1lbHNle3ZhciB3PWYsTD14Lmxlbmd0aDtmb3IoKytmO3U+ZiYmIkwiIT1jW2ZdOysrZik7Zm9yKHZhciBtPXc7Zj5tOylpZihzLnRlc3QoY1ttXSkpe20+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86bSxsZXZlbDoxfSk7dmFyIGs9bTtmb3IoKyttO2Y+bSYmcy50ZXN0KGNbbV0pOysrbSk7eC5zcGxpY2UoTCwwLHtmcm9tOmssdG86bSxsZXZlbDoyfSksdz1tfWVsc2UrK207Zj53JiZ4LnNwbGljZShMLDAse2Zyb206dyx0bzpmLGxldmVsOjF9KX1yZXR1cm4gMT09eFswXS5sZXZlbCYmKGI9ZS5tYXRjaCgvXlxzKy8pKSYmKHhbMF0uZnJvbT1iWzBdLmxlbmd0aCx4LnVuc2hpZnQoe2Zyb206MCx0bzpiWzBdLmxlbmd0aCxsZXZlbDowfSkpLDE9PVFuKHgpLmxldmVsJiYoYj1lLm1hdGNoKC9ccyskLykpJiYoUW4oeCkudG8tPWJbMF0ubGVuZ3RoLHgucHVzaCh7ZnJvbTp1LWJbMF0ubGVuZ3RoLHRvOnUsbGV2ZWw6MH0pKSx4WzBdLmxldmVsIT1Rbih4KS5sZXZlbCYmeC5wdXNoKHtmcm9tOnUsdG86dSxsZXZlbDp4WzBdLmxldmVsfSkseH19KCk7cmV0dXJuIHQudmVyc2lvbj0iMy4yMC4wIix0fSgpO1BLBwjGXJGwv68BAL+vAQBQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAABzdGF0aWNcbGliXGhpZ2hsaWdodC5taW4uanN2YXIgaGxqcz1uZXcgZnVuY3Rpb24oKXtmdW5jdGlvbiBsKG8pe3JldHVybiBvLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvPC9nbSwiJmx0OyIpLnJlcGxhY2UoLz4vZ20sIiZndDsiKX1mdW5jdGlvbiBiKHApe2Zvcih2YXIgbz1wLmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpe2lmKG8ubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkNPREUiKXtyZXR1cm4gb31pZighKG8ubm9kZVR5cGU9PTMmJm8ubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe2JyZWFrfX19ZnVuY3Rpb24gaChwLG8pe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwocC5jaGlsZE5vZGVzLGZ1bmN0aW9uKHEpe2lmKHEubm9kZVR5cGU9PTMpe3JldHVybiBvP3Eubm9kZVZhbHVlLnJlcGxhY2UoL1xuL2csIiIpOnEubm9kZVZhbHVlfWlmKHEubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cmV0dXJuIlxuIn1yZXR1cm4gaChxLG8pfSkuam9pbigiIil9ZnVuY3Rpb24gYShxKXt2YXIgcD0ocS5jbGFzc05hbWUrIiAiKyhxLnBhcmVudE5vZGU/cS5wYXJlbnROb2RlLmNsYXNzTmFtZToiIikpLnNwbGl0KC9ccysvKTtwPXAubWFwKGZ1bmN0aW9uKHIpe3JldHVybiByLnJlcGxhY2UoL15sYW5ndWFnZS0vLCIiKX0pO2Zvcih2YXIgbz0wO288cC5sZW5ndGg7bysrKXtpZihlW3Bbb11dfHxwW29dPT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJuIHBbb119fX1mdW5jdGlvbiBjKHEpe3ZhciBvPVtdOyhmdW5jdGlvbiBwKHIscyl7Zm9yKHZhciB0PXIuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZyl7aWYodC5ub2RlVHlwZT09Myl7cys9dC5ub2RlVmFsdWUubGVuZ3RofWVsc2V7aWYodC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT0iQlIiKXtzKz0xfWVsc2V7aWYodC5ub2RlVHlwZT09MSl7by5wdXNoKHtldmVudDoic3RhcnQiLG9mZnNldDpzLG5vZGU6dH0pO3M9cCh0LHMpO28ucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDpzLG5vZGU6dH0pfX19fXJldHVybiBzfSkocSwwKTtyZXR1cm4gb31mdW5jdGlvbiBqKHAscix2KXt2YXIgcT0wO3ZhciB5PSIiO3ZhciBzPVtdO2Z1bmN0aW9uIHUoKXtpZighcC5sZW5ndGh8fCFyLmxlbmd0aCl7cmV0dXJuIHAubGVuZ3RoP3A6cn1pZihwWzBdLm9mZnNldCE9clswXS5vZmZzZXQpe3JldHVybihwWzBdLm9mZnNldDxyWzBdLm9mZnNldCk/cDpyfXJldHVybiByWzBdLmV2ZW50PT0ic3RhcnQiP3A6cn1mdW5jdGlvbiB0KEEpe2Z1bmN0aW9uIHooQil7cmV0dXJuIiAiK0Iubm9kZU5hbWUrJz0iJytsKEIudmFsdWUpKyciJ315Kz0iPCIrQS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChBLmF0dHJpYnV0ZXMseikuam9pbigiIikrIj4ifWZ1bmN0aW9uIHgoeil7eSs9IjwvIit6Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4ifWZ1bmN0aW9uIG8oeil7KHouZXZlbnQ9PSJzdGFydCI/dDp4KSh6Lm5vZGUpfXdoaWxlKHAubGVuZ3RofHxyLmxlbmd0aCl7dmFyIHc9dSgpO3krPWwodi5zdWJzdHIocSx3WzBdLm9mZnNldC1xKSk7cT13WzBdLm9mZnNldDtpZih3PT1wKXtzLnJldmVyc2UoKS5mb3JFYWNoKHgpO2Rve28ody5zcGxpY2UoMCwxKVswXSk7dz11KCl9d2hpbGUodz09cCYmdy5sZW5ndGgmJndbMF0ub2Zmc2V0PT1xKTtzLnJldmVyc2UoKS5mb3JFYWNoKHQpfWVsc2V7aWYod1swXS5ldmVudD09InN0YXJ0Iil7cy5wdXNoKHdbMF0ubm9kZSl9ZWxzZXtzLnBvcCgpfW8ody5zcGxpY2UoMCwxKVswXSl9fXJldHVybiB5K2wodi5zdWJzdHIocSkpfWZ1bmN0aW9uIGYocil7ZnVuY3Rpb24gbyhzKXtyZXR1cm4ocyYmcy5zb3VyY2UpfHxzfWZ1bmN0aW9uIHAodCxzKXtyZXR1cm4gUmVnRXhwKG8odCksIm0iKyhyLmNJPyJpIjoiIikrKHM/ImciOiIiKSl9ZnVuY3Rpb24gcSh6LHgpe2lmKHouY29tcGlsZWQpe3JldHVybn16LmNvbXBpbGVkPXRydWU7dmFyIHU9W107aWYoei5rKXt2YXIgcz17fTtmdW5jdGlvbiBBKEIsdCl7aWYoci5jSSl7dD10LnRvTG93ZXJDYXNlKCl9dC5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oQyl7dmFyIEQ9Qy5zcGxpdCgifCIpO3NbRFswXV09W0IsRFsxXT9OdW1iZXIoRFsxXSk6MV07dS5wdXNoKERbMF0pfSl9ei5sUj1wKHoubHx8IlxcYiIraGxqcy5JUisiXFxiKD8hXFwuKSIsdHJ1ZSk7aWYodHlwZW9mIHouaz09InN0cmluZyIpe0EoImtleXdvcmQiLHouayl9ZWxzZXtmb3IodmFyIHkgaW4gei5rKXtpZighei5rLmhhc093blByb3BlcnR5KHkpKXtjb250aW51ZX1BKHksei5rW3ldKX19ei5rPXN9aWYoeCl7aWYoei5iV0spe3ouYj0iXFxiKCIrdS5qb2luKCJ8IikrIilcXGIoPyFcXC4pXFxzKiJ9ei5iUj1wKHouYj96LmI6IlxcQnxcXGIiKTtpZighei5lJiYhei5lVyl7ei5lPSJcXEJ8XFxiIn1pZih6LmUpe3ouZVI9cCh6LmUpfXoudEU9byh6LmUpfHwiIjtpZih6LmVXJiZ4LnRFKXt6LnRFKz0oei5lPyJ8IjoiIikreC50RX19aWYoei5pKXt6LmlSPXAoei5pKX1pZih6LnI9PT11bmRlZmluZWQpe3oucj0xfWlmKCF6LmMpe3ouYz1bXX1mb3IodmFyIHc9MDt3PHouYy5sZW5ndGg7dysrKXtpZih6LmNbd109PSJzZWxmIil7ei5jW3ddPXp9cSh6LmNbd10seil9aWYoei5zdGFydHMpe3Eoei5zdGFydHMseCl9dmFyIHY9W107Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7di5wdXNoKG8oei5jW3ddLmIpKX1pZih6LnRFKXt2LnB1c2gobyh6LnRFKSl9aWYoei5pKXt2LnB1c2gobyh6LmkpKX16LnQ9di5sZW5ndGg/cCh2LmpvaW4oInwiKSx0cnVlKTp7ZXhlYzpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH19fXEocil9ZnVuY3Rpb24gZChFLEcsQyxNKXtmdW5jdGlvbiBvKHIsUCl7Zm9yKHZhciBPPTA7TzxQLmMubGVuZ3RoO08rKyl7dmFyIE49UC5jW09dLmJSLmV4ZWMocik7aWYoTiYmTi5pbmRleD09MCl7cmV0dXJuIFAuY1tPXX19fWZ1bmN0aW9uIHMoTixyKXtpZihOLmUmJk4uZVIudGVzdChyKSl7cmV0dXJuIE59aWYoTi5lVyl7cmV0dXJuIHMoTi5wYXJlbnQscil9fWZ1bmN0aW9uIHQocixOKXtyZXR1cm4gIUMmJk4uaSYmTi5pUi50ZXN0KHIpfWZ1bmN0aW9uIHkoTyxyKXt2YXIgTj1ILmNJP3JbMF0udG9Mb3dlckNhc2UoKTpyWzBdO3JldHVybiBPLmsuaGFzT3duUHJvcGVydHkoTikmJk8ua1tOXX1mdW5jdGlvbiBJKCl7dmFyIE49bCh3KTtpZighQi5rKXtyZXR1cm4gTn12YXIgcj0iIjt2YXIgUT0wO0IubFIubGFzdEluZGV4PTA7dmFyIE89Qi5sUi5leGVjKE4pO3doaWxlKE8pe3IrPU4uc3Vic3RyKFEsTy5pbmRleC1RKTt2YXIgUD15KEIsTyk7aWYoUCl7dis9UFsxXTtyKz0nPHNwYW4gY2xhc3M9IicrUFswXSsnIj4nK09bMF0rIjwvc3Bhbj4ifWVsc2V7cis9T1swXX1RPUIubFIubGFzdEluZGV4O089Qi5sUi5leGVjKE4pfXJldHVybiByK04uc3Vic3RyKFEpfWZ1bmN0aW9uIHooKXtpZihCLnNMJiYhZVtCLnNMXSl7cmV0dXJuIGwodyl9dmFyIE49Qi5zdWJMYW5ndWFnZU1vZGU9PSJjb250aW51b3VzIj9CLnRvcDp1bmRlZmluZWQ7dmFyIHI9Qi5zTD9kKEIuc0wsdyx0cnVlLE4pOmcodyk7aWYoQi5yPjApe3YrPXIua2V5d29yZF9jb3VudDtBKz1yLnJ9Qi50b3A9ci50b3A7cmV0dXJuJzxzcGFuIGNsYXNzPSInK3IubGFuZ3VhZ2UrJyI+JytyLnZhbHVlKyI8L3NwYW4+In1mdW5jdGlvbiBMKCl7cmV0dXJuIEIuc0whPT11bmRlZmluZWQ/eigpOkkoKX1mdW5jdGlvbiBLKE8scil7dmFyIE49Ty5jTj8nPHNwYW4gY2xhc3M9IicrTy5jTisnIj4nOiIiO2lmKE8uckIpe3grPU47dz0iIn1lbHNle2lmKE8uZUIpe3grPWwocikrTjt3PSIifWVsc2V7eCs9Tjt3PXJ9fUI9T2JqZWN0LmNyZWF0ZShPLHtwYXJlbnQ6e3ZhbHVlOkJ9fSl9ZnVuY3Rpb24gRChOLHIpe3crPU47aWYocj09PXVuZGVmaW5lZCl7eCs9TCgpO3JldHVybiAwfXZhciBQPW8ocixCKTtpZihQKXt4Kz1MKCk7SyhQLHIpO3JldHVybiBQLnJCPzA6ci5sZW5ndGh9dmFyIFE9cyhCLHIpO2lmKFEpe3ZhciBPPUI7aWYoIShPLnJFfHxPLmVFKSl7dys9cn14Kz1MKCk7ZG97aWYoQi5jTil7eCs9Ijwvc3Bhbj4ifUErPUIucjtCPUIucGFyZW50fXdoaWxlKEIhPVEucGFyZW50KTtpZihPLmVFKXt4Kz1sKHIpfXc9IiI7aWYoUS5zdGFydHMpe0soUS5zdGFydHMsIiIpfXJldHVybiBPLnJFPzA6ci5sZW5ndGh9aWYodChyLEIpKXt0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgbGV4ZW0gIicrcisnIiBmb3IgbW9kZSAiJysoQi5jTnx8Ijx1bm5hbWVkPiIpKyciJyl9dys9cjtyZXR1cm4gci5sZW5ndGh8fDF9dmFyIEg9ZVtFXTtpZighSCl7dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJytFKyciJyl9ZihIKTt2YXIgQj1NfHxIO3ZhciB4PSIiO2Zvcih2YXIgRj1CO0YhPUg7Rj1GLnBhcmVudCl7aWYoRi5jTil7eD0nPHNwYW4gY2xhc3M9IicrRi5jTisnIj4nK3h9fXZhciB3PSIiO3ZhciBBPTA7dmFyIHY9MDt0cnl7dmFyIHUscSxwPTA7d2hpbGUodHJ1ZSl7Qi50Lmxhc3RJbmRleD1wO3U9Qi50LmV4ZWMoRyk7aWYoIXUpe2JyZWFrfXE9RChHLnN1YnN0cihwLHUuaW5kZXgtcCksdVswXSk7cD11LmluZGV4K3F9RChHLnN1YnN0cihwKSk7Zm9yKHZhciBGPUI7Ri5wYXJlbnQ7Rj1GLnBhcmVudCl7aWYoRi5jTil7eCs9Ijwvc3Bhbj4ifX1yZXR1cm57cjpBLGtleXdvcmRfY291bnQ6dix2YWx1ZTp4LGxhbmd1YWdlOkUsdG9wOkJ9fWNhdGNoKEope2lmKEoubWVzc2FnZS5pbmRleE9mKCJJbGxlZ2FsIikhPS0xKXtyZXR1cm57cjowLGtleXdvcmRfY291bnQ6MCx2YWx1ZTpsKEcpfX1lbHNle3Rocm93IEp9fX1mdW5jdGlvbiBnKHMpe3ZhciBvPXtrZXl3b3JkX2NvdW50OjAscjowLHZhbHVlOmwocyl9O3ZhciBxPW87Zm9yKHZhciBwIGluIGUpe2lmKCFlLmhhc093blByb3BlcnR5KHApKXtjb250aW51ZX12YXIgcj1kKHAscyxmYWxzZSk7ci5sYW5ndWFnZT1wO2lmKHIua2V5d29yZF9jb3VudCtyLnI+cS5rZXl3b3JkX2NvdW50K3Eucil7cT1yfWlmKHIua2V5d29yZF9jb3VudCtyLnI+by5rZXl3b3JkX2NvdW50K28ucil7cT1vO289cn19aWYocS5sYW5ndWFnZSl7by5zZWNvbmRfYmVzdD1xfXJldHVybiBvfWZ1bmN0aW9uIGkocSxwLG8pe2lmKHApe3E9cS5yZXBsYWNlKC9eKCg8W14+XSs+fFx0KSspL2dtLGZ1bmN0aW9uKHIsdix1LHQpe3JldHVybiB2LnJlcGxhY2UoL1x0L2cscCl9KX1pZihvKXtxPXEucmVwbGFjZSgvXG4vZywiPGJyPiIpfXJldHVybiBxfWZ1bmN0aW9uIG0ocix1LHApe3ZhciB2PWgocixwKTt2YXIgdD1hKHIpO2lmKHQ9PSJuby1oaWdobGlnaHQiKXtyZXR1cm59dmFyIHc9dD9kKHQsdix0cnVlKTpnKHYpO3Q9dy5sYW5ndWFnZTt2YXIgbz1jKHIpO2lmKG8ubGVuZ3RoKXt2YXIgcT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKTtxLmlubmVySFRNTD13LnZhbHVlO3cudmFsdWU9aihvLGMocSksdil9dy52YWx1ZT1pKHcudmFsdWUsdSxwKTt2YXIgcz1yLmNsYXNzTmFtZTtpZighcy5tYXRjaCgiKFxcc3xeKShsYW5ndWFnZS0pPyIrdCsiKFxcc3wkKSIpKXtzPXM/KHMrIiAiK3QpOnR9ci5pbm5lckhUTUw9dy52YWx1ZTtyLmNsYXNzTmFtZT1zO3IucmVzdWx0PXtsYW5ndWFnZTp0LGt3Oncua2V5d29yZF9jb3VudCxyZTp3LnJ9O2lmKHcuc2Vjb25kX2Jlc3Qpe3Iuc2Vjb25kX2Jlc3Q9e2xhbmd1YWdlOncuc2Vjb25kX2Jlc3QubGFuZ3VhZ2Usa3c6dy5zZWNvbmRfYmVzdC5rZXl3b3JkX2NvdW50LHJlOncuc2Vjb25kX2Jlc3Qucn19fWZ1bmN0aW9uIG4oKXtpZihuLmNhbGxlZCl7cmV0dXJufW4uY2FsbGVkPXRydWU7QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKSxiKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbihvKXttKG8saGxqcy50YWJSZXBsYWNlKX0pfWZ1bmN0aW9uIGsoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsbixmYWxzZSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLG4sZmFsc2UpfXZhciBlPXt9O3RoaXMuTEFOR1VBR0VTPWU7dGhpcy5oaWdobGlnaHQ9ZDt0aGlzLmhpZ2hsaWdodEF1dG89Zzt0aGlzLmZpeE1hcmt1cD1pO3RoaXMuaGlnaGxpZ2h0QmxvY2s9bTt0aGlzLmluaXRIaWdobGlnaHRpbmc9bjt0aGlzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9azt0aGlzLklSPSJbYS16QS1aXVthLXpBLVowLTlfXSoiO3RoaXMuVUlSPSJbYS16QS1aX11bYS16QS1aMC05X10qIjt0aGlzLk5SPSJcXGJcXGQrKFxcLlxcZCspPyI7dGhpcy5DTlI9IihcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSI7dGhpcy5CTlI9IlxcYigwYlswMV0rKSI7dGhpcy5SU1I9IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfFxcLnwtfC09fC98Lz18Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+Pnw+Pnw+fFxcP3xcXFt8XFx7fFxcKHxcXF58XFxePXxcXHx8XFx8PXxcXHxcXHx8fiI7dGhpcy5CRT17YjoiXFxcXFtcXHNcXFNdIixyOjB9O3RoaXMuQVNNPXtjTjoic3RyaW5nIixiOiInIixlOiInIixpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5RU009e2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGk6IlxcbiIsYzpbdGhpcy5CRV0scjowfTt0aGlzLkNMQ009e2NOOiJjb21tZW50IixiOiIvLyIsZToiJCJ9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xcKiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9O3RoaXMuTk09e2NOOiJudW1iZXIiLGI6dGhpcy5OUixyOjB9O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLHI6MH07dGhpcy5CTk09e2NOOiJudW1iZXIiLGI6dGhpcy5CTlIscjowfTt0aGlzLlJFR0VYUF9NT0RFPXtjTjoicmVnZXhwIixiOi9cLy8sZTovXC9bZ2ltXSovLGk6L1xuLyxjOlt0aGlzLkJFLHtiOi9cWy8sZTovXF0vLHI6MCxjOlt0aGlzLkJFXX1dfTt0aGlzLmluaGVyaXQ9ZnVuY3Rpb24ocSxyKXt2YXIgbz17fTtmb3IodmFyIHAgaW4gcSl7b1twXT1xW3BdfWlmKHIpe2Zvcih2YXIgcCBpbiByKXtvW3BdPXJbcF19fXJldHVybiBvfX0oKTtobGpzLkxBTkdVQUdFUy5iYXNoPWZ1bmN0aW9uKGEpe3ZhciBjPXtjTjoidmFyaWFibGUiLGI6L1wkW1x3XGQjQF1bXHdcZF9dKi99O3ZhciBiPXtjTjoidmFyaWFibGUiLGI6L1wkXHsoLio/KVx9L307dmFyIGU9e2NOOiJzdHJpbmciLGI6LyIvLGU6LyIvLGM6W2EuQkUsYyxiLHtjTjoidmFyaWFibGUiLGI6L1wkXCgvLGU6L1wpLyxjOmEuQkV9XSxyOjB9O3ZhciBkPXtjTjoic3RyaW5nIixiOi8nLyxlOi8nLyxyOjB9O3JldHVybntsOi8tP1thLXpdKy8sazp7a2V5d29yZDoiaWYgdGhlbiBlbHNlIGVsaWYgZmkgZm9yIGJyZWFrIGNvbnRpbnVlIHdoaWxlIGluIGRvIGRvbmUgZXhpdCByZXR1cm4gc2V0IGRlY2xhcmUgY2FzZSBlc2FjIGV4cG9ydCBleGVjIixsaXRlcmFsOiJ0cnVlIGZhbHNlIixidWlsdF9pbjoicHJpbnRmIGVjaG8gcmVhZCBjZCBwd2QgcHVzaGQgcG9wZCBkaXJzIGxldCBldmFsIHVuc2V0IHR5cGVzZXQgcmVhZG9ubHkgZ2V0b3B0cyBzb3VyY2Ugc2hvcHQgY2FsbGVyIHR5cGUgaGFzaCBiaW5kIGhlbHAgc3VkbyIsb3BlcmF0b3I6Ii1uZSAtZXEgLWx0IC1ndCAtZiAtZCAtZSAtcyAtbCAtYSJ9LGM6W3tjTjoic2hlYmFuZyIsYjovXiMhW15cbl0rc2hccyokLyxyOjEwfSx7Y046ImZ1bmN0aW9uIixiOi9cd1tcd1xkX10qXHMqXChccypcKVxzKlx7LyxyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6L1x3W1x3XGRfXSovfV0scjowfSxhLkhDTSxhLk5NLGUsZCxjLGJdfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3M9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImFic3RyYWN0IGFzIGJhc2UgYm9vbCBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjaGVja2VkIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlY2ltYWwgZGVmYXVsdCBkZWxlZ2F0ZSBkbyBkb3VibGUgZWxzZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmYWxzZSBmaW5hbGx5IGZpeGVkIGZsb2F0IGZvciBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbmFtZXNwYWNlIG5ldyBudWxsIG9iamVjdCBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNieXRlIHNlYWxlZCBzaG9ydCBzaXplb2Ygc3RhY2thbGxvYyBzdGF0aWMgc3RyaW5nIHN0cnVjdCBzd2l0Y2ggdGhpcyB0aHJvdyB0cnVlIHRyeSB0eXBlb2YgdWludCB1bG9uZyB1bmNoZWNrZWQgdW5zYWZlIHVzaG9ydCB1c2luZyB2aXJ0dWFsIHZvbGF0aWxlIHZvaWQgd2hpbGUgYXN5bmMgYXdhaXQgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZnJvbSBnZXQgZ3JvdXAgaW50byBqb2luIGxldCBvcmRlcmJ5IHBhcnRpYWwgc2VsZWN0IHNldCB2YWx1ZSB2YXIgd2hlcmUgeWllbGQiLGM6W3tjTjoiY29tbWVudCIsYjoiLy8vIixlOiIkIixyQjp0cnVlLGM6W3tjTjoieG1sRG9jVGFnIixiOiIvLy98PCEtLXwtLT4ifSx7Y046InhtbERvY1RhZyIsYjoiPC8/IixlOiI+In1dfSxhLkNMQ00sYS5DQkxDTE0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGs6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHJlZ2lvbiBlbmRyZWdpb24gcHJhZ21hIGNoZWNrc3VtIn0se2NOOiJzdHJpbmciLGI6J0AiJyxlOiciJyxjOlt7YjonIiInfV19LGEuQVNNLGEuUVNNLGEuQ05NXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnJ1Ynk9ZnVuY3Rpb24oZSl7dmFyIGE9IlthLXpBLVpfXVthLXpBLVowLTlfXSooXFwhfFxcPyk/Ijt2YXIgaj0iW2EtekEtWl9dXFx3KlshPz1dP3xbLSt+XVxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFwqXFwqfFstLyslXiYqfmB8XXxcXFtcXF09PyI7dmFyIGc9e2tleXdvcmQ6ImFuZCBmYWxzZSB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIGlmIEJFR0lOIHJldHJ5IGVuZCBmb3IgdHJ1ZSBzZWxmIHdoZW4gbmV4dCB1bnRpbCBkbyBiZWdpbiB1bmxlc3MgRU5EIHJlc2N1ZSBuaWwgZWxzZSBicmVhayB1bmRlZiBub3Qgc3VwZXIgY2xhc3MgY2FzZSByZXF1aXJlIHlpZWxkIGFsaWFzIHdoaWxlIGVuc3VyZSBlbHNpZiBvciBpbmNsdWRlIn07dmFyIGM9e2NOOiJ5YXJkb2N0YWciLGI6IkBbQS1aYS16XSsifTt2YXIgaz1be2NOOiJjb21tZW50IixiOiIjIixlOiIkIixjOltjXX0se2NOOiJjb21tZW50IixiOiJeXFw9YmVnaW4iLGU6Il5cXD1lbmQiLGM6W2NdLHI6MTB9LHtjTjoiY29tbWVudCIsYjoiXl9fRU5EX18iLGU6IlxcbiQifV07dmFyIGQ9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsbDphLGs6Z307dmFyIGk9W2UuQkUsZF07dmFyIGI9W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOmkscjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcKCIsZToiXFwpIixjOml9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXFsiLGU6IlxcXSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/eyIsZToifSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/PCIsZToiPiIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8vIixlOiIvIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPyUiLGU6IiUiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LSIsZToiLSIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXHwiLGU6IlxcfCIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOi9cQlw/KFxcXGR7MSwzfXxcXHhbQS1GYS1mMC05XXsxLDJ9fFxcdVtBLUZhLWYwLTldezR9fFxcP1xTKVxiL31dO3ZhciBoPXtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6IiB8JHw7IixrOiJkZWYiLGM6W3tjTjoidGl0bGUiLGI6aixsOmEsazpnfSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGw6YSxrOmd9XS5jb25jYXQoayl9O3ZhciBmPWsuY29uY2F0KGIuY29uY2F0KFt7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIkfDsiLGs6ImNsYXNzIG1vZHVsZSIsYzpbe2NOOiJ0aXRsZSIsYjoiW0EtWmEtel9dXFx3Kig6OlxcdyspKihcXD98XFwhKT8iLHI6MH0se2NOOiJpbmhlcml0YW5jZSIsYjoiPFxccyoiLGM6W3tjTjoicGFyZW50IixiOiIoIitlLklSKyI6Oik/IitlLklSfV19XS5jb25jYXQoayl9LGgse2NOOiJjb25zdGFudCIsYjoiKDo6KT8oXFxiW0EtWl1cXHcqKDo6KT8pKyIscjowfSx7Y046InN5bWJvbCIsYjoiOiIsYzpiLmNvbmNhdChbe2I6an1dKSxyOjB9LHtjTjoic3ltYm9sIixiOmErIjoiLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2NOOiJ2YXJpYWJsZSIsYjoiKFxcJFxcVyl8KChcXCR8XFxAXFxAPykoXFx3KykpIn0se2I6IigiK2UuUlNSKyIpXFxzKiIsYzprLmNvbmNhdChbe2NOOiJyZWdleHAiLGI6Ii8iLGU6Ii9bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyeyIsZToifVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXCgiLGU6IlxcKVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXIhIixlOiIhW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlclxcWyIsZToiXFxdW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19XSkscjowfV0pKTtkLmM9ZjtoLmNbMV0uYz1mO3JldHVybntsOmEsazpnLGM6Zn19KGhsanMpO2hsanMuTEFOR1VBR0VTLmRpZmY9ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiY2h1bmsiLGI6Il5cXEBcXEAgK1xcLVxcZCssXFxkKyArXFwrXFxkKyxcXGQrICtcXEBcXEAkIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwqXFwqXFwqICtcXGQrLFxcZCsgK1xcKlxcKlxcKlxcKiQiLHI6MTB9LHtjTjoiY2h1bmsiLGI6Il5cXC1cXC1cXC0gK1xcZCssXFxkKyArXFwtXFwtXFwtXFwtJCIscjoxMH0se2NOOiJoZWFkZXIiLGI6IkluZGV4OiAiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiPT09PT0iLGU6Ij09PT09JCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwtXFwtXFwtIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCp7M30gIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCtcXCtcXCsiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXFwqezV9IixlOiJcXCp7NX0kIn0se2NOOiJhZGRpdGlvbiIsYjoiXlxcKyIsZToiJCJ9LHtjTjoiZGVsZXRpb24iLGI6Il5cXC0iLGU6IiQifSx7Y046ImNoYW5nZSIsYjoiXlxcISIsZToiJCJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmFzY3JpcHQ9ZnVuY3Rpb24oYSl7cmV0dXJue2s6e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHdpdGggdGhyb3cgY2FzZSBkZWZhdWx0IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGxldCB5aWVsZCBjb25zdCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCBOYU4gSW5maW5pdHkifSxjOlthLkFTTSxhLlFTTSxhLkNMQ00sYS5DQkxDTE0sYS5DTk0se2I6IigiK2EuUlNSKyJ8XFxiKGNhc2V8cmV0dXJufHRocm93KVxcYilcXHMqIixrOiJyZXR1cm4gdGhyb3cgY2FzZSIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUkVHRVhQX01PREUse2I6LzwvLGU6Lz47LyxzTDoieG1sIn1dLHI6MH0se2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZTovey8sazoiZnVuY3Rpb24iLGM6W3tjTjoidGl0bGUiLGI6L1tBLVphLXokX11bMC05QS1aYS16JF9dKi99LHtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6W2EuQ0xDTSxhLkNCTENMTV0saTovWyInXChdL31dLGk6L1xbfCUvfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy54bWw9ZnVuY3Rpb24oYSl7dmFyIGM9IltBLVphLXowLTlcXC5fOi1dKyI7dmFyIGI9e2VXOnRydWUscjowLGM6W3tjTjoiYXR0cmlidXRlIixiOmMscjowfSx7YjonPSInLHJCOnRydWUsZTonIicsYzpbe2NOOiJ2YWx1ZSIsYjonIicsZVc6dHJ1ZX1dfSx7YjoiPSciLHJCOnRydWUsZToiJyIsYzpbe2NOOiJ2YWx1ZSIsYjoiJyIsZVc6dHJ1ZX1dfSx7YjoiPSIsYzpbe2NOOiJ2YWx1ZSIsYjoiW15cXHMvPl0rIn1dfV19O3JldHVybntjSTp0cnVlLGM6W3tjTjoicGkiLGI6IjxcXD8iLGU6IlxcPz4iLHI6MTB9LHtjTjoiZG9jdHlwZSIsYjoiPCFET0NUWVBFIixlOiI+IixyOjEwLGM6W3tiOiJcXFsiLGU6IlxcXSJ9XX0se2NOOiJjb21tZW50IixiOiI8IS0tIixlOiItLT4iLHI6MTB9LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiIscjoxMH0se2NOOiJ0YWciLGI6IjxzdHlsZSg/PVxcc3w+fCQpIixlOiI+IixrOnt0aXRsZToic3R5bGUifSxjOltiXSxzdGFydHM6e2U6Ijwvc3R5bGU+IixyRTp0cnVlLHNMOiJjc3MifX0se2NOOiJ0YWciLGI6IjxzY3JpcHQoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InNjcmlwdCJ9LGM6W2JdLHN0YXJ0czp7ZToiPFwvc2NyaXB0PiIsckU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9fSx7YjoiPCUiLGU6IiU+IixzTDoidmJzY3JpcHQifSx7Y046InRhZyIsYjoiPC8/IixlOiIvPz4iLHI6MCxjOlt7Y046InRpdGxlIixiOiJbXiAvPjxdKyJ9LGJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYXJrZG93bj1mdW5jdGlvbihhKXtyZXR1cm57Yzpbe2NOOiJoZWFkZXIiLGI6Il4jezEsM30iLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXi4rP1xcbls9LV17Mix9JCJ9LHtiOiI8IixlOiI+IixzTDoieG1sIixyOjB9LHtjTjoiYnVsbGV0IixiOiJeKFsqKy1dfChcXGQrXFwuKSlcXHMrIn0se2NOOiJzdHJvbmciLGI6IlsqX117Mn0uKz9bKl9dezJ9In0se2NOOiJlbXBoYXNpcyIsYjoiXFwqLis/XFwqIn0se2NOOiJlbXBoYXNpcyIsYjoiXy4rP18iLHI6MH0se2NOOiJibG9ja3F1b3RlIixiOiJePlxccysiLGU6IiQifSx7Y046ImNvZGUiLGI6ImAuKz9gIn0se2NOOiJjb2RlIixiOiJeICAgICIsZToiJCIscjowfSx7Y046Imhvcml6b250YWxfcnVsZSIsYjoiXi17Myx9IixlOiIkIn0se2I6IlxcWy4rP1xcXVxcKC4rP1xcKSIsckI6dHJ1ZSxjOlt7Y046ImxpbmtfbGFiZWwiLGI6IlxcWy4rXFxdIn0se2NOOiJsaW5rX3VybCIsYjoiXFwoIixlOiJcXCkiLGVCOnRydWUsZUU6dHJ1ZX1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jc3M9ZnVuY3Rpb24oYSl7dmFyIGI9IlthLXpBLVotXVthLXpBLVowLTlfLV0qIjt2YXIgYz17Y046ImZ1bmN0aW9uIixiOmIrIlxcKCIsZToiXFwpIixjOlsic2VsZiIsYS5OTSxhLkFTTSxhLlFTTV19O3JldHVybntjSTp0cnVlLGk6Ils9L3wnXSIsYzpbYS5DQkxDTE0se2NOOiJpZCIsYjoiXFwjW0EtWmEtejAtOV8tXSsifSx7Y046ImNsYXNzIixiOiJcXC5bQS1aYS16MC05Xy1dKyIscjowfSx7Y046ImF0dHJfc2VsZWN0b3IiLGI6IlxcWyIsZToiXFxdIixpOiIkIn0se2NOOiJwc2V1ZG8iLGI6IjooOik/W2EtekEtWjAtOVxcX1xcLVxcK1xcKFxcKVxcXCJcXCddKyJ9LHtjTjoiYXRfcnVsZSIsYjoiQChmb250LWZhY2V8cGFnZSkiLGw6IlthLXotXSsiLGs6ImZvbnQtZmFjZSBwYWdlIn0se2NOOiJhdF9ydWxlIixiOiJAIixlOiJbeztdIixjOlt7Y046ImtleXdvcmQiLGI6L1xTKy99LHtiOi9ccy8sZVc6dHJ1ZSxlRTp0cnVlLHI6MCxjOltjLGEuQVNNLGEuUVNNLGEuTk1dfV19LHtjTjoidGFnIixiOmIscjowfSx7Y046InJ1bGVzIixiOiJ7IixlOiJ9IixpOiJbXlxcc10iLHI6MCxjOlthLkNCTENMTSx7Y046InJ1bGUiLGI6IlteXFxzXSIsckI6dHJ1ZSxlOiI7IixlVzp0cnVlLGM6W3tjTjoiYXR0cmlidXRlIixiOiJbQS1aXFxfXFwuXFwtXSsiLGU6IjoiLGVFOnRydWUsaToiW15cXHNdIixzdGFydHM6e2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxlRTp0cnVlLGM6W2MsYS5OTSxhLlFTTSxhLkFTTSxhLkNCTENMTSx7Y046ImhleGNvbG9yIixiOiIjWzAtOUEtRmEtZl0rIn0se2NOOiJpbXBvcnRhbnQiLGI6IiFpbXBvcnRhbnQifV19fV19XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaHR0cD1mdW5jdGlvbihhKXtyZXR1cm57aToiXFxTIixjOlt7Y046InN0YXR1cyIsYjoiXkhUVFAvWzAtOVxcLl0rIixlOiIkIixjOlt7Y046Im51bWJlciIsYjoiXFxiXFxkezN9XFxiIn1dfSx7Y046InJlcXVlc3QiLGI6Il5bQS1aXSsgKC4qPykgSFRUUC9bMC05XFwuXSskIixyQjp0cnVlLGU6IiQiLGM6W3tjTjoic3RyaW5nIixiOiIgIixlOiIgIixlQjp0cnVlLGVFOnRydWV9XX0se2NOOiJhdHRyaWJ1dGUiLGI6Il5cXHciLGU6IjogIixlRTp0cnVlLGk6IlxcbnxcXHN8PSIsc3RhcnRzOntjTjoic3RyaW5nIixlOiIkIn19LHtiOiJcXG5cXG4iLHN0YXJ0czp7c0w6IiIsZVc6dHJ1ZX19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmE9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkIGVudW0gZWxzZSBicmVhayB0cmFuc2llbnQgbmV3IGNhdGNoIGluc3RhbmNlb2YgYnl0ZSBzdXBlciB2b2xhdGlsZSBjYXNlIGFzc2VydCBzaG9ydCBwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIixjOlt7Y046ImphdmFkb2MiLGI6Ii9cXCpcXCoiLGU6IlxcKi8iLGM6W3tjTjoiamF2YWRvY3RhZyIsYjoiKF58XFxzKUBbQS1aYS16XSsifV0scjoxMH0sYS5DTENNLGEuQ0JMQ0xNLGEuQVNNLGEuUVNNLHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIGludGVyZmFjZSIsZUU6dHJ1ZSxpOiI6IixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyBpbXBsZW1lbnRzIixyOjEwfSx7Y046InRpdGxlIixiOmEuVUlSfV19LGEuQ05NLHtjTjoiYW5ub3RhdGlvbiIsYjoiQFtBLVphLXpdKyJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnBocD1mdW5jdGlvbihhKXt2YXIgZT17Y046InZhcmlhYmxlIixiOiJcXCQrW2EtekEtWl9ceDdmLVx4ZmZdW2EtekEtWjAtOV9ceDdmLVx4ZmZdKiJ9O3ZhciBiPVthLmluaGVyaXQoYS5BU00se2k6bnVsbH0pLGEuaW5oZXJpdChhLlFTTSx7aTpudWxsfSkse2NOOiJzdHJpbmciLGI6J2IiJyxlOiciJyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6ImInIixlOiInIixjOlthLkJFXX1dO3ZhciBjPVthLkJOTSxhLkNOTV07dmFyIGQ9e2NOOiJ0aXRsZSIsYjphLlVJUn07cmV0dXJue2NJOnRydWUsbDphLlVJUixrOiJhbmQgaW5jbHVkZV9vbmNlIGxpc3QgYWJzdHJhY3QgZ2xvYmFsIHByaXZhdGUgZWNobyBpbnRlcmZhY2UgYXMgc3RhdGljIGVuZHN3aXRjaCBhcnJheSBudWxsIGlmIGVuZHdoaWxlIG9yIGNvbnN0IGZvciBlbmRmb3JlYWNoIHNlbGYgdmFyIHdoaWxlIGlzc2V0IHB1YmxpYyBwcm90ZWN0ZWQgZXhpdCBmb3JlYWNoIHRocm93IGVsc2VpZiBpbmNsdWRlIF9fRklMRV9fIGVtcHR5IHJlcXVpcmVfb25jZSBkbyB4b3IgcmV0dXJuIGltcGxlbWVudHMgcGFyZW50IGNsb25lIHVzZSBfX0NMQVNTX18gX19MSU5FX18gZWxzZSBicmVhayBwcmludCBldmFsIG5ldyBjYXRjaCBfX01FVEhPRF9fIGNhc2UgZXhjZXB0aW9uIGRlZmF1bHQgZGllIHJlcXVpcmUgX19GVU5DVElPTl9fIGVuZGRlY2xhcmUgZmluYWwgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIGVuZGZvciBlbmRpZiBkZWNsYXJlIHVuc2V0IHRydWUgZmFsc2UgbmFtZXNwYWNlIHRyYWl0IGdvdG8gaW5zdGFuY2VvZiBpbnN0ZWFkb2YgX19ESVJfXyBfX05BTUVTUEFDRV9fIHlpZWxkIGZpbmFsbHkiLGM6W2EuQ0xDTSxhLkhDTSx7Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8iLGM6W3tjTjoicGhwZG9jIixiOiJcXHNAW0EtWmEtel0rIn1dfSx7Y046ImNvbW1lbnQiLGI6Il9faGFsdF9jb21waWxlci4rPzsiLGVXOnRydWUsazoiX19oYWx0X2NvbXBpbGVyIixsOmEuVUlSfSx7Y046InN0cmluZyIsYjoiPDw8WydcIl0/XFx3K1snXCJdPyQiLGU6Il5cXHcrOyIsYzpbYS5CRV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiI8XFw/cGhwIixyOjEwfSx7Y046InByZXByb2Nlc3NvciIsYjoiXFw/PiJ9LGUse2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZToieyIsazoiZnVuY3Rpb24iLGk6IlxcJHxcXFt8JSIsYzpbZCx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6WyJzZWxmIixlLGEuQ0JMQ0xNXS5jb25jYXQoYikuY29uY2F0KGMpfV19LHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIixpOiJbOlxcKFxcJF0iLGM6W3tiV0s6dHJ1ZSxlVzp0cnVlLGs6ImV4dGVuZHMiLGM6W2RdfSxkXX0se2I6Ij0+In1dLmNvbmNhdChiKS5jb25jYXQoYyl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5weXRob249ZnVuY3Rpb24oYSl7dmFyIGY9e2NOOiJwcm9tcHQiLGI6L14oPj4+fFwuXC5cLikgL307dmFyIGM9W3tjTjoic3RyaW5nIixiOi8odXxiKT9yPycnJy8sZTovJycnLyxjOltmXSxyOjEwfSx7Y046InN0cmluZyIsYjovKHV8Yik/cj8iIiIvLGU6LyIiIi8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpJy8sZTovJy8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpIi8sZTovIi8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6LyhifGJyKScvLGU6LycvLGM6W2EuQkVdfSx7Y046InN0cmluZyIsYjovKGJ8YnIpIi8sZTovIi8sYzpbYS5CRV19XS5jb25jYXQoW2EuQVNNLGEuUVNNXSk7dmFyIGU9e2NOOiJ0aXRsZSIsYjphLlVJUn07dmFyIGQ9e2NOOiJwYXJhbXMiLGI6L1woLyxlOi9cKS8sYzpbInNlbGYiLGEuQ05NLGZdLmNvbmNhdChjKX07dmFyIGI9e2JXSzp0cnVlLGU6LzovLGk6L1skez07XG5dLyxjOltlLGRdLHI6MTB9O3JldHVybntrOntrZXl3b3JkOiJhbmQgZWxpZiBpcyBnbG9iYWwgYXMgaW4gaWYgZnJvbSByYWlzZSBmb3IgZXhjZXB0IGZpbmFsbHkgcHJpbnQgaW1wb3J0IHBhc3MgcmV0dXJuIGV4ZWMgZWxzZSBicmVhayBub3Qgd2l0aCBjbGFzcyBhc3NlcnQgeWllbGQgdHJ5IHdoaWxlIGNvbnRpbnVlIGRlbCBvciBkZWYgbGFtYmRhIG5vbmxvY2FsfDEwIE5vbmUgVHJ1ZSBGYWxzZSIsYnVpbHRfaW46IkVsbGlwc2lzIE5vdEltcGxlbWVudGVkIn0saTovKDxcL3wtPnxcPykvLGM6Yy5jb25jYXQoW2YsYS5IQ00sYS5pbmhlcml0KGIse2NOOiJmdW5jdGlvbiIsazoiZGVmIn0pLGEuaW5oZXJpdChiLHtjTjoiY2xhc3MiLGs6ImNsYXNzIn0pLGEuQ05NLHtjTjoiZGVjb3JhdG9yIixiOi9ALyxlOi8kL30se2I6L1xiKHByaW50fGV4ZWMpXCgvfV0pfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuc3FsPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGM6W3tjTjoib3BlcmF0b3IiLGI6IihiZWdpbnxlbmR8c3RhcnR8Y29tbWl0fHJvbGxiYWNrfHNhdmVwb2ludHxsb2NrfGFsdGVyfGNyZWF0ZXxkcm9wfHJlbmFtZXxjYWxsfGRlbGV0ZXxkb3xoYW5kbGVyfGluc2VydHxsb2FkfHJlcGxhY2V8c2VsZWN0fHRydW5jYXRlfHVwZGF0ZXxzZXR8c2hvd3xwcmFnbWF8Z3JhbnQpXFxiKD8hOikiLGU6IjsiLGVXOnRydWUsazp7a2V5d29yZDoiYWxsIHBhcnRpYWwgZ2xvYmFsIG1vbnRoIGN1cnJlbnRfdGltZXN0YW1wIHVzaW5nIGdvIHJldm9rZSBzbWFsbGludCBpbmRpY2F0b3IgZW5kLWV4ZWMgZGlzY29ubmVjdCB6b25lIHdpdGggY2hhcmFjdGVyIGFzc2VydGlvbiB0byBhZGQgY3VycmVudF91c2VyIHVzYWdlIGlucHV0IGxvY2FsIGFsdGVyIG1hdGNoIGNvbGxhdGUgcmVhbCB0aGVuIHJvbGxiYWNrIGdldCByZWFkIHRpbWVzdGFtcCBzZXNzaW9uX3VzZXIgbm90IGludGVnZXIgYml0IHVuaXF1ZSBkYXkgbWludXRlIGRlc2MgaW5zZXJ0IGV4ZWN1dGUgbGlrZSBpbGlrZXwyIGxldmVsIGRlY2ltYWwgZHJvcCBjb250aW51ZSBpc29sYXRpb24gZm91bmQgd2hlcmUgY29uc3RyYWludHMgZG9tYWluIHJpZ2h0IG5hdGlvbmFsIHNvbWUgbW9kdWxlIHRyYW5zYWN0aW9uIHJlbGF0aXZlIHNlY29uZCBjb25uZWN0IGVzY2FwZSBjbG9zZSBzeXN0ZW1fdXNlciBmb3IgZGVmZXJyZWQgc2VjdGlvbiBjYXN0IGN1cnJlbnQgc3Fsc3RhdGUgYWxsb2NhdGUgaW50ZXJzZWN0IGRlYWxsb2NhdGUgbnVtZXJpYyBwdWJsaWMgcHJlc2VydmUgZnVsbCBnb3RvIGluaXRpYWxseSBhc2Mgbm8ga2V5IG91dHB1dCBjb2xsYXRpb24gZ3JvdXAgYnkgdW5pb24gc2Vzc2lvbiBib3RoIGxhc3QgbGFuZ3VhZ2UgY29uc3RyYWludCBjb2x1bW4gb2Ygc3BhY2UgZm9yZWlnbiBkZWZlcnJhYmxlIHByaW9yIGNvbm5lY3Rpb24gdW5rbm93biBhY3Rpb24gY29tbWl0IHZpZXcgb3IgZmlyc3QgaW50byBmbG9hdCB5ZWFyIHByaW1hcnkgY2FzY2FkZWQgZXhjZXB0IHJlc3RyaWN0IHNldCByZWZlcmVuY2VzIG5hbWVzIHRhYmxlIG91dGVyIG9wZW4gc2VsZWN0IHNpemUgYXJlIHJvd3MgZnJvbSBwcmVwYXJlIGRpc3RpbmN0IGxlYWRpbmcgY3JlYXRlIG9ubHkgbmV4dCBpbm5lciBhdXRob3JpemF0aW9uIHNjaGVtYSBjb3JyZXNwb25kaW5nIG9wdGlvbiBkZWNsYXJlIHByZWNpc2lvbiBpbW1lZGlhdGUgZWxzZSB0aW1lem9uZV9taW51dGUgZXh0ZXJuYWwgdmFyeWluZyB0cmFuc2xhdGlvbiB0cnVlIGNhc2UgZXhjZXB0aW9uIGpvaW4gaG91ciBkZWZhdWx0IGRvdWJsZSBzY3JvbGwgdmFsdWUgY3Vyc29yIGRlc2NyaXB0b3IgdmFsdWVzIGRlYyBmZXRjaCBwcm9jZWR1cmUgZGVsZXRlIGFuZCBmYWxzZSBpbnQgaXMgZGVzY3JpYmUgY2hhciBhcyBhdCBpbiB2YXJjaGFyIG51bGwgdHJhaWxpbmcgYW55IGFic29sdXRlIGN1cnJlbnRfdGltZSBlbmQgZ3JhbnQgcHJpdmlsZWdlcyB3aGVuIGNyb3NzIGNoZWNrIHdyaXRlIGN1cnJlbnRfZGF0ZSBwYWQgYmVnaW4gdGVtcG9yYXJ5IGV4ZWMgdGltZSB1cGRhdGUgY2F0YWxvZyB1c2VyIHNxbCBkYXRlIG9uIGlkZW50aXR5IHRpbWV6b25lX2hvdXIgbmF0dXJhbCB3aGVuZXZlciBpbnRlcnZhbCB3b3JrIG9yZGVyIGNhc2NhZGUgZGlhZ25vc3RpY3MgbmNoYXIgaGF2aW5nIGxlZnQgY2FsbCBkbyBoYW5kbGVyIGxvYWQgcmVwbGFjZSB0cnVuY2F0ZSBzdGFydCBsb2NrIHNob3cgcHJhZ21hIGV4aXN0cyBudW1iZXIgdHJpZ2dlciBpZiBiZWZvcmUgYWZ0ZXIgZWFjaCByb3ciLGFnZ3JlZ2F0ZToiY291bnQgc3VtIG1pbiBtYXggYXZnIn0sYzpbe2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2EuQkUse2I6IicnIn1dLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2EuQkUse2I6JyIiJ31dLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6W2EuQkVdfSxhLkNOTV19LGEuQ0JMQ0xNLHtjTjoiY29tbWVudCIsYjoiLS0iLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5pbmk9ZnVuY3Rpb24oYSl7cmV0dXJue2NJOnRydWUsaToiW15cXHNdIixjOlt7Y046ImNvbW1lbnQiLGI6IjsiLGU6IiQifSx7Y046InRpdGxlIixiOiJeXFxbIixlOiJcXF0ifSx7Y046InNldHRpbmciLGI6Il5bYS16MC05XFxbXFxdXy1dK1sgXFx0XSo9WyBcXHRdKiIsZToiJCIsYzpbe2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxrOiJvbiBvZmYgdHJ1ZSBmYWxzZSB5ZXMgbm8iLGM6W2EuUVNNLGEuTk1dLHI6MH1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKGUpe3ZhciBhPSJnZXRwd2VudCBnZXRzZXJ2ZW50IHF1b3RlbWV0YSBtc2dyY3Ygc2NhbGFyIGtpbGwgZGJtY2xvc2UgdW5kZWYgbGMgbWEgc3lzd3JpdGUgdHIgc2VuZCB1bWFzayBzeXNvcGVuIHNobXdyaXRlIHZlYyBxeCB1dGltZSBsb2NhbCBvY3Qgc2VtY3RsIGxvY2FsdGltZSByZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXFmaWxlbm8gcXcgZW5kcHJvdG9lbnQgd2FpdCBzZXRob3N0ZW50IGJsZXNzIHN8MCBvcGVuZGlyIGNvbnRpbnVlIGVhY2ggc2xlZXAgZW5kZ3JlbnQgc2h1dGRvd24gZHVtcCBjaG9tcCBjb25uZWN0IGdldHNvY2tuYW1lIGRpZSBzb2NrZXRwYWlyIGNsb3NlIGZsb2NrIGV4aXN0cyBpbmRleCBzaG1nZXRzdWIgZm9yIGVuZHB3ZW50IHJlZG8gbHN0YXQgbXNnY3RsIHNldHBncnAgYWJzIGV4aXQgc2VsZWN0IHByaW50IHJlZiBnZXRob3N0YnlhZGRyIHVuc2hpZnQgZmNudGwgc3lzY2FsbCBnb3RvIGdldG5ldGJ5YWRkciBqb2luIGdtdGltZSBzeW1saW5rIHNlbWdldCBzcGxpY2UgeHwwIGdldHBlZXJuYW1lIHJlY3YgbG9nIHNldHNvY2tvcHQgY29zIGxhc3QgcmV2ZXJzZSBnZXRob3N0YnluYW1lIGdldGdybmFtIHN0dWR5IGZvcm1saW5lIGVuZGhvc3RlbnQgdGltZXMgY2hvcCBsZW5ndGggZ2V0aG9zdGVudCBnZXRuZXRlbnQgcGFjayBnZXRwcm90b2VudCBnZXRzZXJ2YnluYW1lIHJhbmQgbWtkaXIgcG9zIGNobW9kIHl8MCBzdWJzdHIgZW5kbmV0ZW50IHByaW50ZiBuZXh0IG9wZW4gbXNnc25kIHJlYWRkaXIgdXNlIHVubGluayBnZXRzb2Nrb3B0IGdldHByaW9yaXR5IHJpbmRleCB3YW50YXJyYXkgaGV4IHN5c3RlbSBnZXRzZXJ2Ynlwb3J0IGVuZHNlcnZlbnQgaW50IGNociB1bnRpZSBybWRpciBwcm90b3R5cGUgdGVsbCBsaXN0ZW4gZm9yayBzaG1yZWFkIHVjZmlyc3Qgc2V0cHJvdG9lbnQgZWxzZSBzeXNzZWVrIGxpbmsgZ2V0Z3JnaWQgc2htY3RsIHdhaXRwaWQgdW5wYWNrIGdldG5ldGJ5bmFtZSByZXNldCBjaGRpciBncmVwIHNwbGl0IHJlcXVpcmUgY2FsbGVyIGxjZmlyc3QgdW50aWwgd2FybiB3aGlsZSB2YWx1ZXMgc2hpZnQgdGVsbGRpciBnZXRwd3VpZCBteSBnZXRwcm90b2J5bnVtYmVyIGRlbGV0ZSBhbmQgc29ydCB1YyBkZWZpbmVkIHNyYW5kIGFjY2VwdCBwYWNrYWdlIHNlZWtkaXIgZ2V0cHJvdG9ieW5hbWUgc2Vtb3Agb3VyIHJlbmFtZSBzZWVrIGlmIHF8MCBjaHJvb3Qgc3lzcmVhZCBzZXRwd2VudCBubyBjcnlwdCBnZXRjIGNob3duIHNxcnQgd3JpdGUgc2V0bmV0ZW50IHNldHByaW9yaXR5IGZvcmVhY2ggdGllIHNpbiBtc2dnZXQgbWFwIHN0YXQgZ2V0bG9naW4gdW5sZXNzIGVsc2lmIHRydW5jYXRlIGV4ZWMga2V5cyBnbG9iIHRpZWQgY2xvc2VkaXJpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlIGF0YW4yIGdldGdyZW50IGV4cCB0aW1lIHB1c2ggc2V0Z3JlbnQgZ3QgbHQgb3IgbmUgbXwwIGJyZWFrIGdpdmVuIHNheSBzdGF0ZSB3aGVuIjt2YXIgZD17Y046InN1YnN0IixiOiJbJEBdXFx7IixlOiJcXH0iLGs6YSxyOjEwfTt2YXIgYj17Y046InZhcmlhYmxlIixiOiJcXCRcXGQifTt2YXIgaT17Y046InZhcmlhYmxlIixiOiJbXFwkXFwlXFxAXFwqXShcXF5cXHdcXGJ8I1xcdysoXFw6XFw6XFx3KykqfFteXFxzXFx3e118e1xcdyt9fFxcdysoXFw6XFw6XFx3KikqKSJ9O3ZhciBmPVtlLkJFLGQsYixpXTt2YXIgaD17YjoiLT4iLGM6W3tiOmUuSVJ9LHtiOiJ7IixlOiJ9In1dfTt2YXIgZz17Y046ImNvbW1lbnQiLGI6Il4oX19FTkRfX3xfX0RBVEFfXykiLGU6IlxcbiQiLHI6NX07dmFyIGM9W2IsaSxlLkhDTSxnLHtjTjoiY29tbWVudCIsYjoiXlxcPVxcdyIsZToiXFw9Y3V0IixlVzp0cnVlfSxoLHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXCgiLGU6IlxcKSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcWyIsZToiXFxdIixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXHwiLGU6IlxcfCIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcPCIsZToiXFw+IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicXdcXHMrcSIsZToicSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2UuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6ZixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFXX0se2NOOiJzdHJpbmciLGI6IntcXHcrfSIscjowfSx7Y046InN0cmluZyIsYjoiLT9cXHcrXFxzKlxcPVxcPiIscjowfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscjowfSx7YjoiKCIrZS5SU1IrInxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXGIpXFxzKiIsazoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscjowLGM6W2UuSENNLGcse2NOOiJyZWdleHAiLGI6IihzfHRyfHkpLyhcXFxcLnxbXi9dKSovKFxcXFwufFteL10pKi9bYS16XSoiLHI6MTB9LHtjTjoicmVnZXhwIixiOiIobXxxcik/LyIsZToiL1thLXpdKiIsYzpbZS5CRV0scjowfV19LHtjTjoic3ViIixiV0s6dHJ1ZSxlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsazoic3ViIixyOjV9LHtjTjoib3BlcmF0b3IiLGI6Ii1cXHdcXGIiLHI6MH1dO2QuYz1jO2guY1sxXS5jPWM7cmV0dXJue2s6YSxjOmN9fShobGpzKTtobGpzLkxBTkdVQUdFUy5vYmplY3RpdmVjPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNhdGNoIGV4cG9ydCBzaXplb2YgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgZm9yIHVuaW9uIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIG11dGFibGUgaWYgcHVibGljIGRvIHJldHVybiBnb3RvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiBhc20gY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSB0aHJvdyByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHdjaGFyX3QgaW5saW5lIHJlYWRvbmx5IGFzc2lnbiBwcm9wZXJ0eSBzZWxmIHN5bmNocm9uaXplZCBlbmQgc3ludGhlc2l6ZSBpZCBvcHRpb25hbCByZXF1aXJlZCBub25hdG9taWMgc3VwZXIgdW5pY2hhciBmaW5hbGx5IGR5bmFtaWMgSUJPdXRsZXQgSUJBY3Rpb24gc2VsZWN0b3Igc3Ryb25nIHdlYWsgcmVhZG9ubHkiLGxpdGVyYWw6ImZhbHNlIHRydWUgRkFMU0UgVFJVRSBuaWwgWUVTIE5PIE5VTEwiLGJ1aWx0X2luOiJOU1N0cmluZyBOU0RpY3Rpb25hcnkgQ0dSZWN0IENHUG9pbnQgVUlCdXR0b24gVUlMYWJlbCBVSVRleHRWaWV3IFVJV2ViVmlldyBNS01hcFZpZXcgVUlTZWdtZW50ZWRDb250cm9sIE5TT2JqZWN0IFVJVGFibGVWaWV3RGVsZWdhdGUgVUlUYWJsZVZpZXdEYXRhU291cmNlIE5TVGhyZWFkIFVJQWN0aXZpdHlJbmRpY2F0b3IgVUlUYWJiYXIgVUlUb29sQmFyIFVJQmFyQnV0dG9uSXRlbSBVSUltYWdlVmlldyBOU0F1dG9yZWxlYXNlUG9vbCBVSVRhYmxlVmlldyBCT09MIE5TSW50ZWdlciBDR0Zsb2F0IE5TRXhjZXB0aW9uIE5TTG9nIE5TTXV0YWJsZVN0cmluZyBOU011dGFibGVBcnJheSBOU011dGFibGVEaWN0aW9uYXJ5IE5TVVJMIE5TSW5kZXhQYXRoIENHU2l6ZSBVSVRhYmxlVmlld0NlbGwgVUlWaWV3IFVJVmlld0NvbnRyb2xsZXIgVUlOYXZpZ2F0aW9uQmFyIFVJTmF2aWdhdGlvbkNvbnRyb2xsZXIgVUlUYWJCYXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXIgVUlQb3BvdmVyQ29udHJvbGxlckRlbGVnYXRlIFVJSW1hZ2UgTlNOdW1iZXIgVUlTZWFyY2hCYXIgTlNGZXRjaGVkUmVzdWx0c0NvbnRyb2xsZXIgTlNGZXRjaGVkUmVzdWx0c0NoYW5nZVR5cGUgVUlTY3JvbGxWaWV3IFVJU2Nyb2xsVmlld0RlbGVnYXRlIFVJRWRnZUluc2V0cyBVSUNvbG9yIFVJRm9udCBVSUFwcGxpY2F0aW9uIE5TTm90Rm91bmQgTlNOb3RpZmljYXRpb25DZW50ZXIgTlNOb3RpZmljYXRpb24gVUlMb2NhbE5vdGlmaWNhdGlvbiBOU0J1bmRsZSBOU0ZpbGVNYW5hZ2VyIE5TVGltZUludGVydmFsIE5TRGF0ZSBOU0NhbGVuZGFyIE5TVXNlckRlZmF1bHRzIFVJV2luZG93IE5TUmFuZ2UgTlNBcnJheSBOU0Vycm9yIE5TVVJMUmVxdWVzdCBOU1VSTENvbm5lY3Rpb24gVUlJbnRlcmZhY2VPcmllbnRhdGlvbiBNUE1vdmllUGxheWVyQ29udHJvbGxlciBkaXNwYXRjaF9vbmNlX3QgZGlzcGF0Y2hfcXVldWVfdCBkaXNwYXRjaF9zeW5jIGRpc3BhdGNoX2FzeW5jIGRpc3BhdGNoX29uY2UifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5DTk0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixpOiJbXlxcXFxdW14nXSJ9LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjaW1wb3J0IixlOiIkIixjOlt7Y046InRpdGxlIixiOiciJyxlOiciJ30se2NOOiJ0aXRsZSIsYjoiPCIsZToiPiJ9XX0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQifSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIoe3wkKSIsazoiaW50ZXJmYWNlIGNsYXNzIHByb3RvY29sIGltcGxlbWVudGF0aW9uIixjOlt7Y046ImlkIixiOmEuVUlSfV19LHtjTjoidmFyaWFibGUiLGI6IlxcLiIrYS5VSVIscjowfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jb2ZmZWVzY3JpcHQ9ZnVuY3Rpb24oYyl7dmFyIGI9e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHRoZW4gdW5sZXNzIHVudGlsIGxvb3Agb2YgYnkgd2hlbiBhbmQgb3IgaXMgaXNudCBub3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgeWVzIG5vIG9uIG9mZiIscmVzZXJ2ZWQ6ImNhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgdm9pZCB3aXRoIGNvbnN0IGxldCBlbnVtIGV4cG9ydCBpbXBvcnQgbmF0aXZlIF9faGFzUHJvcCBfX2V4dGVuZHMgX19zbGljZSBfX2JpbmQgX19pbmRleE9mIixidWlsdF9pbjoibnBtIHJlcXVpcmUgY29uc29sZSBwcmludCBtb2R1bGUgZXhwb3J0cyBnbG9iYWwgd2luZG93IGRvY3VtZW50In07dmFyIGE9IltBLVphLXokX11bMC05QS1aYS16JF9dKiI7dmFyIGY9e2NOOiJ0aXRsZSIsYjphfTt2YXIgZT17Y046InN1YnN0IixiOiIjXFx7IixlOiJ9IixrOmIsfTt2YXIgZD1bYy5CTk0sYy5pbmhlcml0KGMuQ05NLHtzdGFydHM6e2U6IihcXHMqLyk/IixyOjB9fSkse2NOOiJzdHJpbmciLGI6IicnJyIsZToiJycnIixjOltjLkJFXX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2MuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyIiIicsZTonIiIiJyxjOltjLkJFLGVdfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbYy5CRSxlXSxyOjB9LHtjTjoicmVnZXhwIixiOiIvLy8iLGU6Ii8vLyIsYzpbYy5IQ01dfSx7Y046InJlZ2V4cCIsYjoiLy9bZ2ltXSoiLHI6MH0se2NOOiJyZWdleHAiLGI6Ii9cXFMoXFxcXC58W15cXG5dKSo/L1tnaW1dKig/PVxcc3xcXFd8JCkifSx7Y046InByb3BlcnR5IixiOiJAIithfSx7YjoiYCIsZToiYCIsZUI6dHJ1ZSxlRTp0cnVlLHNMOiJqYXZhc2NyaXB0In1dO2UuYz1kO3JldHVybntrOmIsYzpkLmNvbmNhdChbe2NOOiJjb21tZW50IixiOiIjIyMiLGU6IiMjIyJ9LGMuSENNLHtjTjoiZnVuY3Rpb24iLGI6IigiK2ErIlxccyo9XFxzKik/KFxcKC4qXFwpKT9cXHMqWy09XT4iLGU6IlstPV0+IixyQjp0cnVlLGM6W2Yse2NOOiJwYXJhbXMiLGI6IlxcKCIsckI6dHJ1ZSxjOlt7YjovXCgvLGU6L1wpLyxrOmIsYzpbInNlbGYiXS5jb25jYXQoZCl9XX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxrOiJjbGFzcyIsZToiJCIsaToiWzpcXFtcXF1dIixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyIsZVc6dHJ1ZSxpOiI6IixjOltmXX0sZl19LHtjTjoiYXR0cmlidXRlIixiOmErIjoiLGU6IjoiLHJCOnRydWUsZUU6dHJ1ZX1dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLm5naW54PWZ1bmN0aW9uKGIpe3ZhciBjPVt7Y046InZhcmlhYmxlIixiOiJcXCRcXGQrIn0se2NOOiJ2YXJpYWJsZSIsYjoiXFwkeyIsZToifSJ9LHtjTjoidmFyaWFibGUiLGI6IltcXCRcXEBdIitiLlVJUn1dO3ZhciBhPXtlVzp0cnVlLGw6IlthLXovX10rIixrOntidWlsdF9pbjoib24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgc2VsZWN0IGJyZWFrIGxhc3QgcGVybWFuZW50IHJlZGlyZWN0IGtxdWV1ZSBydHNpZyBlcG9sbCBwb2xsIC9kZXYvcG9sbCJ9LHI6MCxpOiI9PiIsYzpbYi5IQ00se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2IuQkVdLmNvbmNhdChjKSxyOjB9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InVybCIsYjoiKFthLXpdKyk6LyIsZToiXFxzIixlVzp0cnVlLGVFOnRydWV9LHtjTjoicmVnZXhwIixiOiJcXHNcXF4iLGU6Ilxcc3x7fDsiLHJFOnRydWUsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiflxcKj9cXHMrIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IlxcKihcXC5bYS16XFwtXSspKyIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiKFthLXpcXC1dK1xcLikrXFwqIixjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoibnVtYmVyIixiOiJcXGJcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSg6XFxkezEsNX0pP1xcYiJ9LHtjTjoibnVtYmVyIixiOiJcXGJcXGQrW2tLbU1nR2RzaGR3eV0qXFxiIixyOjB9XS5jb25jYXQoYyl9O3JldHVybntjOltiLkhDTSx7YjpiLlVJUisiXFxzIixlOiI7fHsiLHJCOnRydWUsYzpbe2NOOiJ0aXRsZSIsYjpiLlVJUixzdGFydHM6YX1dLHI6MH1dLGk6IlteXFxzXFx9XSJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5qc29uPWZ1bmN0aW9uKGEpe3ZhciBlPXtsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwifTt2YXIgZD1bYS5RU00sYS5DTk1dO3ZhciBjPXtjTjoidmFsdWUiLGU6IiwiLGVXOnRydWUsZUU6dHJ1ZSxjOmQsazplfTt2YXIgYj17YjoieyIsZToifSIsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6J1xccyoiJyxlOiciXFxzKjpcXHMqJyxlQjp0cnVlLGVFOnRydWUsYzpbYS5CRV0saToiXFxuIixzdGFydHM6Y31dLGk6IlxcUyJ9O3ZhciBmPXtiOiJcXFsiLGU6IlxcXSIsYzpbYS5pbmhlcml0KGMse2NOOm51bGx9KV0saToiXFxTIn07ZC5zcGxpY2UoZC5sZW5ndGgsMCxiLGYpO3JldHVybntjOmQsazplLGk6IlxcUyJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5hcGFjaGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJudW1iZXIiLGI6IltcXCQlXVxcZCsifTtyZXR1cm57Y0k6dHJ1ZSxjOlthLkhDTSx7Y046InRhZyIsYjoiPC8/IixlOiI+In0se2NOOiJrZXl3b3JkIixiOi9cdysvLHI6MCxrOntjb21tb246Im9yZGVyIGRlbnkgYWxsb3cgc2V0ZW52IHJld3JpdGVydWxlIHJld3JpdGVlbmdpbmUgcmV3cml0ZWNvbmQgZG9jdW1lbnRyb290IHNldGhhbmRsZXIgZXJyb3Jkb2N1bWVudCBsb2FkbW9kdWxlIG9wdGlvbnMgaGVhZGVyIGxpc3RlbiBzZXJ2ZXJyb290IHNlcnZlcm5hbWUifSxzdGFydHM6e2U6LyQvLHI6MCxrOntsaXRlcmFsOiJvbiBvZmYgYWxsIn0sYzpbe2NOOiJzcWJyYWNrZXQiLGI6Ilxcc1xcWyIsZToiXFxdJCJ9LHtjTjoiY2JyYWNrZXQiLGI6IltcXCQlXVxceyIsZToiXFx9IixjOlsic2VsZiIsYl19LGIsYS5RU01dfX1dLGk6L1xTL319KGhsanMpO2hsanMuTEFOR1VBR0VTLmNwcD1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiZmFsc2UgaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBzdHJ1Y3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSB1bnNpZ25lZCBsb25nIHRocm93IHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgZG8gcmV0dXJuIGdvdG8gYXV0byB2b2lkIGVudW0gZWxzZSBicmVhayBuZXcgZXh0ZXJuIHVzaW5nIHRydWUgY2xhc3MgYXNtIGNhc2UgdHlwZWlkIHNob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSBkZWxldGUgYWxpZ25vZiBjaGFyMTZfdCBjaGFyMzJfdCBjb25zdGV4cHIgZGVjbHR5cGUgbm9leGNlcHQgbnVsbHB0ciBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBfQm9vbCBjb21wbGV4IixidWlsdF9pbjoic3RkIHN0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RyaW5nc3RyZWFtIGlzdHJpbmdzdHJlYW0gb3N0cmluZ3N0cmVhbSBhdXRvX3B0ciBkZXF1ZSBsaXN0IHF1ZXVlIHN0YWNrIHZlY3RvciBtYXAgc2V0IGJpdHNldCBtdWx0aXNldCBtdWx0aW1hcCB1bm9yZGVyZWRfc2V0IHVub3JkZXJlZF9tYXAgdW5vcmRlcmVkX211bHRpc2V0IHVub3JkZXJlZF9tdWx0aW1hcCBhcnJheSBzaGFyZWRfcHRyIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUVNNLHtjTjoic3RyaW5nIixiOiInXFxcXD8uIixlOiInIixpOiIuIn0se2NOOiJudW1iZXIiLGI6IlxcYihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSh1fFV8bHxMfHVsfFVMfGZ8RikifSxhLkNOTSx7Y046InByZXByb2Nlc3NvciIsYjoiIyIsZToiJCIsYzpbe2I6IjwiLGU6Ij4iLGk6IlxcbiJ9LGEuQ0xDTV19LHtjTjoic3RsX2NvbnRhaW5lciIsYjoiXFxiKGRlcXVlfGxpc3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5KVxccyo8IixlOiI+IixrOmIscjoxMCxjOlsic2VsZiJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYWtlZmlsZT1mdW5jdGlvbihhKXt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfTtyZXR1cm57YzpbYS5IQ00se2I6L15cdytccypcVyo9LyxyQjp0cnVlLHI6MCxzdGFydHM6e2NOOiJjb25zdGFudCIsZTovXHMqXFcqPS8sZUU6dHJ1ZSxzdGFydHM6e2U6LyQvLHI6MCxjOltiXSx9fX0se2NOOiJ0aXRsZSIsYjovXltcd10rOlxzKiQvfSx7Y046InBob255IixiOi9eXC5QSE9OWTovLGU6LyQvLGs6Ii5QSE9OWSIsbDovW1wuXHddKy99LHtiOi9eXHQrLyxlOi8kLyxjOlthLlFTTSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuZ289ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImJyZWFrIGRlZmF1bHQgZnVuYyBpbnRlcmZhY2Ugc2VsZWN0IGNhc2UgbWFwIHN0cnVjdCBjaGFuIGVsc2UgZ290byBwYWNrYWdlIHN3aXRjaCBjb25zdCBmYWxsdGhyb3VnaCBpZiByYW5nZSB0eXBlIGNvbnRpbnVlIGZvciBpbXBvcnQgcmV0dXJuIHZhciBnbyBkZWZlciIsY29uc3RhbnQ6InRydWUgZmFsc2UgaW90YSBuaWwiLHR5cGVuYW1lOiJib29sIGJ5dGUgY29tcGxleDY0IGNvbXBsZXgxMjggZmxvYXQzMiBmbG9hdDY0IGludDggaW50MTYgaW50MzIgaW50NjQgc3RyaW5nIHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0IGludCB1aW50IHVpbnRwdHIgcnVuZSIsYnVpbHRfaW46ImFwcGVuZCBjYXAgY2xvc2UgY29tcGxleCBjb3B5IGltYWcgbGVuIG1ha2UgbmV3IHBhbmljIHByaW50IHByaW50bG4gcmVhbCByZWNvdmVyIGRlbGV0ZSJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJyIsZToiW15cXFxcXSciLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAifSx7Y046Im51bWJlciIsYjoiW15hLXpBLVpfMC05XShcXC18XFwrKT9cXGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHMpKFxcK3xcXC0pP1xcZCspPyIscjowfSxhLkNOTV19fShobGpzKTtQSwcIFVltTvZ1AAD2dQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAc3RhdGljXGxpYlxqcXVlcnkuZm9ybS5taW4uanMvKiEKICogalF1ZXJ5IEZvcm0gUGx1Z2luCiAqIHZlcnNpb246IDMuNDYuMC0yMDEzLjExLjIxCiAqIFJlcXVpcmVzIGpRdWVyeSB2MS41IG9yIGxhdGVyCiAqIENvcHlyaWdodCAoYykgMjAxMyBNLiBBbHN1cAogKiBFeGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBhdDogaHR0cDovL21hbHN1cC5jb20vanF1ZXJ5L2Zvcm0vCiAqIFByb2plY3QgcmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKiBodHRwczovL2dpdGh1Yi5jb20vbWFsc3VwL2Zvcm0jY29weXJpZ2h0LWFuZC1saWNlbnNlCiAqLwooZnVuY3Rpb24oYSl7aWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbImpxdWVyeSJdLGEpfWVsc2V7YSgodHlwZW9mKGpRdWVyeSkhPSJ1bmRlZmluZWQiKT9qUXVlcnk6d2luZG93LlplcHRvKX19KGZ1bmN0aW9uKGYpe3ZhciBjPXt9O2MuZmlsZWFwaT1mKCI8aW5wdXQgdHlwZT0nZmlsZScvPiIpLmdldCgwKS5maWxlcyE9PXVuZGVmaW5lZDtjLmZvcm1kYXRhPXdpbmRvdy5Gb3JtRGF0YSE9PXVuZGVmaW5lZDt2YXIgZT0hIWYuZm4ucHJvcDtmLmZuLmF0dHIyPWZ1bmN0aW9uKCl7aWYoIWUpe3JldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBnPXRoaXMucHJvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoKGcmJmcuanF1ZXJ5KXx8dHlwZW9mIGc9PT0ic3RyaW5nIil7cmV0dXJuIGd9cmV0dXJuIHRoaXMuYXR0ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2YuZm4uYWpheFN1Ym1pdD1mdW5jdGlvbihqKXtpZighdGhpcy5sZW5ndGgpe2QoImFqYXhTdWJtaXQ6IHNraXBwaW5nIHN1Ym1pdCBwcm9jZXNzIC0gbm8gZWxlbWVudCBzZWxlY3RlZCIpO3JldHVybiB0aGlzfXZhciBpLEMsbSxvPXRoaXM7aWYodHlwZW9mIGo9PSJmdW5jdGlvbiIpe2o9e3N1Y2Nlc3M6an19ZWxzZXtpZihqPT09dW5kZWZpbmVkKXtqPXt9fX1pPWoudHlwZXx8dGhpcy5hdHRyMigibWV0aG9kIik7Qz1qLnVybHx8dGhpcy5hdHRyMigiYWN0aW9uIik7bT0odHlwZW9mIEM9PT0ic3RyaW5nIik/Zi50cmltKEMpOiIiO209bXx8d2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiO2lmKG0pe209KG0ubWF0Y2goL14oW14jXSspLyl8fFtdKVsxXX1qPWYuZXh0ZW5kKHRydWUse3VybDptLHN1Y2Nlc3M6Zi5hamF4U2V0dGluZ3Muc3VjY2Vzcyx0eXBlOml8fGYuYWpheFNldHRpbmdzLnR5cGUsaWZyYW1lU3JjOi9eaHR0cHMvaS50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIik/ImphdmFzY3JpcHQ6ZmFsc2UiOiJhYm91dDpibGFuayJ9LGopO3ZhciB1PXt9O3RoaXMudHJpZ2dlcigiZm9ybS1wcmUtc2VyaWFsaXplIixbdGhpcyxqLHVdKTtpZih1LnZldG8pe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tcHJlLXNlcmlhbGl6ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9aWYoai5iZWZvcmVTZXJpYWxpemUmJmouYmVmb3JlU2VyaWFsaXplKHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVNlcmlhbGl6ZSBjYWxsYmFjayIpO3JldHVybiB0aGlzfXZhciBuPWoudHJhZGl0aW9uYWw7aWYobj09PXVuZGVmaW5lZCl7bj1mLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbH12YXIgcz1bXTt2YXIgRSxGPXRoaXMuZm9ybVRvQXJyYXkoai5zZW1hbnRpYyxzKTtpZihqLmRhdGEpe2ouZXh0cmFEYXRhPWouZGF0YTtFPWYucGFyYW0oai5kYXRhLG4pfWlmKGouYmVmb3JlU3VibWl0JiZqLmJlZm9yZVN1Ym1pdChGLHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVN1Ym1pdCBjYWxsYmFjayIpO3JldHVybiB0aGlzfXRoaXMudHJpZ2dlcigiZm9ybS1zdWJtaXQtdmFsaWRhdGUiLFtGLHRoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXN1Ym1pdC12YWxpZGF0ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9dmFyIHk9Zi5wYXJhbShGLG4pO2lmKEUpe3k9KHk/KHkrIiYiK0UpOkUpfWlmKGoudHlwZS50b1VwcGVyQ2FzZSgpPT0iR0VUIil7ai51cmwrPShqLnVybC5pbmRleE9mKCI/Iik+PTA/IiYiOiI/IikreTtqLmRhdGE9bnVsbH1lbHNle2ouZGF0YT15fXZhciBIPVtdO2lmKGoucmVzZXRGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLnJlc2V0Rm9ybSgpfSl9aWYoai5jbGVhckZvcm0pe0gucHVzaChmdW5jdGlvbigpe28uY2xlYXJGb3JtKGouaW5jbHVkZUhpZGRlbil9KX1pZighai5kYXRhVHlwZSYmai50YXJnZXQpe3ZhciBsPWouc3VjY2Vzc3x8ZnVuY3Rpb24oKXt9O0gucHVzaChmdW5jdGlvbihxKXt2YXIgaz1qLnJlcGxhY2VUYXJnZXQ/InJlcGxhY2VXaXRoIjoiaHRtbCI7ZihqLnRhcmdldClba10ocSkuZWFjaChsLGFyZ3VtZW50cyl9KX1lbHNle2lmKGouc3VjY2Vzcyl7SC5wdXNoKGouc3VjY2Vzcyl9fWouc3VjY2Vzcz1mdW5jdGlvbihLLHEsTCl7dmFyIEo9ai5jb250ZXh0fHx0aGlzO2Zvcih2YXIgST0wLGs9SC5sZW5ndGg7STxrO0krKyl7SFtJXS5hcHBseShKLFtLLHEsTHx8byxvXSl9fTtpZihqLmVycm9yKXt2YXIgej1qLmVycm9yO2ouZXJyb3I9ZnVuY3Rpb24oSixrLHEpe3ZhciBJPWouY29udGV4dHx8dGhpczt6LmFwcGx5KEksW0osayxxLG9dKX19aWYoai5jb21wbGV0ZSl7dmFyIGg9ai5jb21wbGV0ZTtqLmNvbXBsZXRlPWZ1bmN0aW9uKEksayl7dmFyIHE9ai5jb250ZXh0fHx0aGlzO2guYXBwbHkocSxbSSxrLG9dKX19dmFyIEQ9ZigiaW5wdXRbdHlwZT1maWxlXTplbmFibGVkIix0aGlzKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzKS52YWwoKSE9PSIifSk7dmFyIHA9RC5sZW5ndGg+MDt2YXIgQj0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7dmFyIHg9KG8uYXR0cigiZW5jdHlwZSIpPT1CfHxvLmF0dHIoImVuY29kaW5nIik9PUIpO3ZhciB3PWMuZmlsZWFwaSYmYy5mb3JtZGF0YTtkKCJmaWxlQVBJIDoiK3cpO3ZhciByPShwfHx4KSYmIXc7dmFyIHY7aWYoai5pZnJhbWUhPT1mYWxzZSYmKGouaWZyYW1lfHxyKSl7aWYoai5jbG9zZUtlZXBBbGl2ZSl7Zi5nZXQoai5jbG9zZUtlZXBBbGl2ZSxmdW5jdGlvbigpe3Y9RyhGKX0pfWVsc2V7dj1HKEYpfX1lbHNle2lmKChwfHx4KSYmdyl7dj10KEYpfWVsc2V7dj1mLmFqYXgoail9fW8ucmVtb3ZlRGF0YSgianF4aHIiKS5kYXRhKCJqcXhociIsdik7Zm9yKHZhciBBPTA7QTxzLmxlbmd0aDtBKyspe3NbQV09bnVsbH10aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LW5vdGlmeSIsW3RoaXMsal0pO3JldHVybiB0aGlzO2Z1bmN0aW9uIGcoSyl7dmFyIEw9Zi5wYXJhbShLLGoudHJhZGl0aW9uYWwpLnNwbGl0KCImIik7dmFyIHE9TC5sZW5ndGg7dmFyIGs9W107dmFyIEosSTtmb3IoSj0wO0o8cTtKKyspe0xbSl09TFtKXS5yZXBsYWNlKC9cKy9nLCIgIik7ST1MW0pdLnNwbGl0KCI9Iik7ay5wdXNoKFtkZWNvZGVVUklDb21wb25lbnQoSVswXSksZGVjb2RlVVJJQ29tcG9uZW50KElbMV0pXSl9cmV0dXJuIGt9ZnVuY3Rpb24gdChxKXt2YXIgaz1uZXcgRm9ybURhdGEoKTtmb3IodmFyIEk9MDtJPHEubGVuZ3RoO0krKyl7ay5hcHBlbmQocVtJXS5uYW1lLHFbSV0udmFsdWUpfWlmKGouZXh0cmFEYXRhKXt2YXIgTD1nKGouZXh0cmFEYXRhKTtmb3IoST0wO0k8TC5sZW5ndGg7SSsrKXtpZihMW0ldKXtrLmFwcGVuZChMW0ldWzBdLExbSV1bMV0pfX19ai5kYXRhPW51bGw7dmFyIEs9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqLHtjb250ZW50VHlwZTpmYWxzZSxwcm9jZXNzRGF0YTpmYWxzZSxjYWNoZTpmYWxzZSx0eXBlOml8fCJQT1NUIn0pO2lmKGoudXBsb2FkUHJvZ3Jlc3Mpe0sueGhyPWZ1bmN0aW9uKCl7dmFyIE09Zi5hamF4U2V0dGluZ3MueGhyKCk7aWYoTS51cGxvYWQpe00udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihRKXt2YXIgUD0wO3ZhciBOPVEubG9hZGVkfHxRLnBvc2l0aW9uO3ZhciBPPVEudG90YWw7aWYoUS5sZW5ndGhDb21wdXRhYmxlKXtQPU1hdGguY2VpbChOL08qMTAwKX1qLnVwbG9hZFByb2dyZXNzKFEsTixPLFApfSxmYWxzZSl9cmV0dXJuIE19fUsuZGF0YT1udWxsO3ZhciBKPUsuYmVmb3JlU2VuZDtLLmJlZm9yZVNlbmQ9ZnVuY3Rpb24oTixNKXtpZihqLmZvcm1EYXRhKXtNLmRhdGE9ai5mb3JtRGF0YX1lbHNle00uZGF0YT1rfWlmKEope0ouY2FsbCh0aGlzLE4sTSl9fTtyZXR1cm4gZi5hamF4KEspfWZ1bmN0aW9uIEcoYWYpe3ZhciBMPW9bMF0sSyxhYixWLGFkLFksTixRLE8sUCxaLGFjLFQ7dmFyIGFpPWYuRGVmZXJyZWQoKTthaS5hYm9ydD1mdW5jdGlvbihhail7Ty5hYm9ydChhail9O2lmKGFmKXtmb3IoYWI9MDthYjxzLmxlbmd0aDthYisrKXtLPWYoc1thYl0pO2lmKGUpe0sucHJvcCgiZGlzYWJsZWQiLGZhbHNlKX1lbHNle0sucmVtb3ZlQXR0cigiZGlzYWJsZWQiKX19fVY9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqKTtWLmNvbnRleHQ9Vi5jb250ZXh0fHxWO1k9ImpxRm9ybUlPIisobmV3IERhdGUoKS5nZXRUaW1lKCkpO2lmKFYuaWZyYW1lVGFyZ2V0KXtOPWYoVi5pZnJhbWVUYXJnZXQpO1o9Ti5hdHRyMigibmFtZSIpO2lmKCFaKXtOLmF0dHIyKCJuYW1lIixZKX1lbHNle1k9Wn19ZWxzZXtOPWYoJzxpZnJhbWUgbmFtZT0iJytZKyciIHNyYz0iJytWLmlmcmFtZVNyYysnIiAvPicpO04uY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiLTEwMDBweCIsbGVmdDoiLTEwMDBweCJ9KX1RPU5bMF07Tz17YWJvcnRlZDowLHJlc3BvbnNlVGV4dDpudWxsLHJlc3BvbnNlWE1MOm51bGwsc3RhdHVzOjAsc3RhdHVzVGV4dDoibi9hIixnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXt9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKCl7fSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKCl7fSxhYm9ydDpmdW5jdGlvbihhail7dmFyIGFrPShhaj09PSJ0aW1lb3V0Ij8idGltZW91dCI6ImFib3J0ZWQiKTtkKCJhYm9ydGluZyB1cGxvYWQuLi4gIithayk7dGhpcy5hYm9ydGVkPTE7dHJ5e2lmKFEuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCl7US5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kKCJTdG9wIil9fWNhdGNoKGFsKXt9Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKTtPLmVycm9yPWFrO2lmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhayxhail9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFrXSl9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFrKX19fTthZD1WLmdsb2JhbDtpZihhZCYmMD09PWYuYWN0aXZlKyspe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iil9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFNlbmQiLFtPLFZdKX1pZihWLmJlZm9yZVNlbmQmJlYuYmVmb3JlU2VuZC5jYWxsKFYuY29udGV4dCxPLFYpPT09ZmFsc2Upe2lmKFYuZ2xvYmFsKXtmLmFjdGl2ZS0tfWFpLnJlamVjdCgpO3JldHVybiBhaX1pZihPLmFib3J0ZWQpe2FpLnJlamVjdCgpO3JldHVybiBhaX1QPUwuY2xrO2lmKFApe1o9UC5uYW1lO2lmKFomJiFQLmRpc2FibGVkKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbWl09UC52YWx1ZTtpZihQLnR5cGU9PSJpbWFnZSIpe1YuZXh0cmFEYXRhW1orIi54Il09TC5jbGtfeDtWLmV4dHJhRGF0YVtaKyIueSJdPUwuY2xrX3l9fX12YXIgVT0xO3ZhciBSPTI7ZnVuY3Rpb24gUyhhbCl7dmFyIGFrPW51bGw7dHJ5e2lmKGFsLmNvbnRlbnRXaW5kb3cpe2FrPWFsLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnR9fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50V2luZG93IGRvY3VtZW50OiAiK2FqKX1pZihhayl7cmV0dXJuIGFrfXRyeXthaz1hbC5jb250ZW50RG9jdW1lbnQ/YWwuY29udGVudERvY3VtZW50OmFsLmRvY3VtZW50fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50RG9jdW1lbnQ6ICIrYWopO2FrPWFsLmRvY3VtZW50fXJldHVybiBha312YXIgSj1mKCJtZXRhW25hbWU9Y3NyZi10b2tlbl0iKS5hdHRyKCJjb250ZW50Iik7dmFyIEk9ZigibWV0YVtuYW1lPWNzcmYtcGFyYW1dIikuYXR0cigiY29udGVudCIpO2lmKEkmJkope1YuZXh0cmFEYXRhPVYuZXh0cmFEYXRhfHx7fTtWLmV4dHJhRGF0YVtJXT1KfWZ1bmN0aW9uIGFhKCl7dmFyIGFsPW8uYXR0cjIoInRhcmdldCIpLGFqPW8uYXR0cjIoImFjdGlvbiIpO0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLFkpO2lmKCFpfHwvcG9zdC9pLnRlc3QoaSkpe0wuc2V0QXR0cmlidXRlKCJtZXRob2QiLCJQT1NUIil9aWYoYWohPVYudXJsKXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixWLnVybCl9aWYoIVYuc2tpcEVuY29kaW5nT3ZlcnJpZGUmJighaXx8L3Bvc3QvaS50ZXN0KGkpKSl7by5hdHRyKHtlbmNvZGluZzoibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsZW5jdHlwZToibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9KX1pZihWLnRpbWVvdXQpe1Q9c2V0VGltZW91dChmdW5jdGlvbigpe2FjPXRydWU7WChVKX0sVi50aW1lb3V0KX1mdW5jdGlvbiBhbSgpe3RyeXt2YXIgYXE9UyhRKS5yZWFkeVN0YXRlO2QoInN0YXRlID0gIithcSk7aWYoYXEmJmFxLnRvTG93ZXJDYXNlKCk9PSJ1bmluaXRpYWxpemVkIil7c2V0VGltZW91dChhbSw1MCl9fWNhdGNoKGFyKXtkKCJTZXJ2ZXIgYWJvcnQ6ICIsYXIsIiAoIixhci5uYW1lLCIpIik7WChSKTtpZihUKXtjbGVhclRpbWVvdXQoVCl9VD11bmRlZmluZWR9fXZhciBhaz1bXTt0cnl7aWYoVi5leHRyYURhdGEpe2Zvcih2YXIgYXAgaW4gVi5leHRyYURhdGEpe2lmKFYuZXh0cmFEYXRhLmhhc093blByb3BlcnR5KGFwKSl7aWYoZi5pc1BsYWluT2JqZWN0KFYuZXh0cmFEYXRhW2FwXSkmJlYuZXh0cmFEYXRhW2FwXS5oYXNPd25Qcm9wZXJ0eSgibmFtZSIpJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoInZhbHVlIikpe2FrLnB1c2goZignPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJytWLmV4dHJhRGF0YVthcF0ubmFtZSsnIj4nKS52YWwoVi5leHRyYURhdGFbYXBdLnZhbHVlKS5hcHBlbmRUbyhMKVswXSl9ZWxzZXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrYXArJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXSkuYXBwZW5kVG8oTClbMF0pfX19fWlmKCFWLmlmcmFtZVRhcmdldCl7Ti5hcHBlbmRUbygiYm9keSIpfWlmKFEuYXR0YWNoRXZlbnQpe1EuYXR0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXNldFRpbWVvdXQoYW0sMTUpO3RyeXtMLnN1Ym1pdCgpfWNhdGNoKGFuKXt2YXIgYW89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLnN1Ym1pdDthby5hcHBseShMKX19ZmluYWxseXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixhaik7aWYoYWwpe0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLGFsKX1lbHNle28ucmVtb3ZlQXR0cigidGFyZ2V0Iil9ZihhaykucmVtb3ZlKCl9fWlmKFYuZm9yY2VTeW5jKXthYSgpfWVsc2V7c2V0VGltZW91dChhYSwxMCl9dmFyIGFnLGFoLGFlPTUwLE07ZnVuY3Rpb24gWChhcCl7aWYoTy5hYm9ydGVkfHxNKXtyZXR1cm59YWg9UyhRKTtpZighYWgpe2QoImNhbm5vdCBhY2Nlc3MgcmVzcG9uc2UgZG9jdW1lbnQiKTthcD1SfWlmKGFwPT09VSYmTyl7Ty5hYm9ydCgidGltZW91dCIpO2FpLnJlamVjdChPLCJ0aW1lb3V0Iik7cmV0dXJufWVsc2V7aWYoYXA9PVImJk8pe08uYWJvcnQoInNlcnZlciBhYm9ydCIpO2FpLnJlamVjdChPLCJlcnJvciIsInNlcnZlciBhYm9ydCIpO3JldHVybn19aWYoIWFofHxhaC5sb2NhdGlvbi5ocmVmPT1WLmlmcmFtZVNyYyl7aWYoIWFjKXtyZXR1cm59fWlmKFEuZGV0YWNoRXZlbnQpe1EuZGV0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXZhciBhbj0ic3VjY2VzcyIsYXI7dHJ5e2lmKGFjKXt0aHJvdyJ0aW1lb3V0In12YXIgYW09Vi5kYXRhVHlwZT09InhtbCJ8fGFoLlhNTERvY3VtZW50fHxmLmlzWE1MRG9jKGFoKTtkKCJpc1htbD0iK2FtKTtpZighYW0mJndpbmRvdy5vcGVyYSYmKGFoLmJvZHk9PT1udWxsfHwhYWguYm9keS5pbm5lckhUTUwpKXtpZigtLWFlKXtkKCJyZXF1ZWluZyBvbkxvYWQgY2FsbGJhY2ssIERPTSBub3QgYXZhaWxhYmxlIik7c2V0VGltZW91dChYLDI1MCk7cmV0dXJufX12YXIgYXQ9YWguYm9keT9haC5ib2R5OmFoLmRvY3VtZW50RWxlbWVudDtPLnJlc3BvbnNlVGV4dD1hdD9hdC5pbm5lckhUTUw6bnVsbDtPLnJlc3BvbnNlWE1MPWFoLlhNTERvY3VtZW50P2FoLlhNTERvY3VtZW50OmFoO2lmKGFtKXtWLmRhdGFUeXBlPSJ4bWwifU8uZ2V0UmVzcG9uc2VIZWFkZXI9ZnVuY3Rpb24oYXcpe3ZhciBhdj17ImNvbnRlbnQtdHlwZSI6Vi5kYXRhVHlwZX07cmV0dXJuIGF2W2F3LnRvTG93ZXJDYXNlKCldfTtpZihhdCl7Ty5zdGF0dXM9TnVtYmVyKGF0LmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YXQuZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH12YXIgYWo9KFYuZGF0YVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpO3ZhciBhcT0vKGpzb258c2NyaXB0fHRleHQpLy50ZXN0KGFqKTtpZihhcXx8Vi50ZXh0YXJlYSl7dmFyIGFvPWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZXh0YXJlYSIpWzBdO2lmKGFvKXtPLnJlc3BvbnNlVGV4dD1hby52YWx1ZTtPLnN0YXR1cz1OdW1iZXIoYW8uZ2V0QXR0cmlidXRlKCJzdGF0dXMiKSl8fE8uc3RhdHVzO08uc3RhdHVzVGV4dD1hby5nZXRBdHRyaWJ1dGUoInN0YXR1c1RleHQiKXx8Ty5zdGF0dXNUZXh0fWVsc2V7aWYoYXEpe3ZhciBhaz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIilbMF07dmFyIGF1PWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoYWspe08ucmVzcG9uc2VUZXh0PWFrLnRleHRDb250ZW50P2FrLnRleHRDb250ZW50OmFrLmlubmVyVGV4dH1lbHNle2lmKGF1KXtPLnJlc3BvbnNlVGV4dD1hdS50ZXh0Q29udGVudD9hdS50ZXh0Q29udGVudDphdS5pbm5lclRleHR9fX19fWVsc2V7aWYoYWo9PSJ4bWwiJiYhTy5yZXNwb25zZVhNTCYmTy5yZXNwb25zZVRleHQpe08ucmVzcG9uc2VYTUw9VyhPLnJlc3BvbnNlVGV4dCl9fXRyeXthZz1rKE8sYWosVil9Y2F0Y2goYWwpe2FuPSJwYXJzZXJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX19Y2F0Y2goYWwpe2QoImVycm9yIGNhdWdodDogIixhbCk7YW49ImVycm9yIjtPLmVycm9yPWFyPShhbHx8YW4pfWlmKE8uYWJvcnRlZCl7ZCgidXBsb2FkIGFib3J0ZWQiKTthbj1udWxsfWlmKE8uc3RhdHVzKXthbj0oTy5zdGF0dXM+PTIwMCYmTy5zdGF0dXM8MzAwfHxPLnN0YXR1cz09PTMwNCk/InN1Y2Nlc3MiOiJlcnJvciJ9aWYoYW49PT0ic3VjY2VzcyIpe2lmKFYuc3VjY2Vzcyl7Vi5zdWNjZXNzLmNhbGwoVi5jb250ZXh0LGFnLCJzdWNjZXNzIixPKX1haS5yZXNvbHZlKE8ucmVzcG9uc2VUZXh0LCJzdWNjZXNzIixPKTtpZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4U3VjY2VzcyIsW08sVl0pfX1lbHNle2lmKGFuKXtpZihhcj09PXVuZGVmaW5lZCl7YXI9Ty5zdGF0dXNUZXh0fWlmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhbixhcil9YWkucmVqZWN0KE8sImVycm9yIixhcik7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFyXSl9fX1pZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtPLFZdKX1pZihhZCYmIS0tZi5hY3RpdmUpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKX1pZihWLmNvbXBsZXRlKXtWLmNvbXBsZXRlLmNhbGwoVi5jb250ZXh0LE8sYW4pfU09dHJ1ZTtpZihWLnRpbWVvdXQpe2NsZWFyVGltZW91dChUKX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIVYuaWZyYW1lVGFyZ2V0KXtOLnJlbW92ZSgpfWVsc2V7Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKX1PLnJlc3BvbnNlWE1MPW51bGx9LDEwMCl9dmFyIFc9Zi5wYXJzZVhNTHx8ZnVuY3Rpb24oYWosYWspe2lmKHdpbmRvdy5BY3RpdmVYT2JqZWN0KXthaz1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpO2FrLmFzeW5jPSJmYWxzZSI7YWsubG9hZFhNTChhail9ZWxzZXthaz0obmV3IERPTVBhcnNlcigpKS5wYXJzZUZyb21TdHJpbmcoYWosInRleHQveG1sIil9cmV0dXJuKGFrJiZhay5kb2N1bWVudEVsZW1lbnQmJmFrLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSE9InBhcnNlcmVycm9yIik/YWs6bnVsbH07dmFyIHE9Zi5wYXJzZUpTT058fGZ1bmN0aW9uKGFqKXtyZXR1cm4gd2luZG93WyJldmFsIl0oIigiK2FqKyIpIil9O3ZhciBrPWZ1bmN0aW9uKGFvLGFtLGFsKXt2YXIgYWs9YW8uZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixhaj1hbT09PSJ4bWwifHwhYW0mJmFrLmluZGV4T2YoInhtbCIpPj0wLGFuPWFqP2FvLnJlc3BvbnNlWE1MOmFvLnJlc3BvbnNlVGV4dDtpZihhaiYmYW4uZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lPT09InBhcnNlcmVycm9yIil7aWYoZi5lcnJvcil7Zi5lcnJvcigicGFyc2VyZXJyb3IiKX19aWYoYWwmJmFsLmRhdGFGaWx0ZXIpe2FuPWFsLmRhdGFGaWx0ZXIoYW4sYW0pfWlmKHR5cGVvZiBhbj09PSJzdHJpbmciKXtpZihhbT09PSJqc29uInx8IWFtJiZhay5pbmRleE9mKCJqc29uIik+PTApe2FuPXEoYW4pfWVsc2V7aWYoYW09PT0ic2NyaXB0Inx8IWFtJiZhay5pbmRleE9mKCJqYXZhc2NyaXB0Iik+PTApe2YuZ2xvYmFsRXZhbChhbil9fX1yZXR1cm4gYW59O3JldHVybiBhaX19O2YuZm4uYWpheEZvcm09ZnVuY3Rpb24oZyl7Zz1nfHx7fTtnLmRlbGVnYXRpb249Zy5kZWxlZ2F0aW9uJiZmLmlzRnVuY3Rpb24oZi5mbi5vbik7aWYoIWcuZGVsZWdhdGlvbiYmdGhpcy5sZW5ndGg9PT0wKXt2YXIgaD17czp0aGlzLnNlbGVjdG9yLGM6dGhpcy5jb250ZXh0fTtpZighZi5pc1JlYWR5JiZoLnMpe2QoIkRPTSBub3QgcmVhZHksIHF1ZXVpbmcgYWpheEZvcm0iKTtmKGZ1bmN0aW9uKCl7ZihoLnMsaC5jKS5hamF4Rm9ybShnKX0pO3JldHVybiB0aGlzfWQoInRlcm1pbmF0aW5nOyB6ZXJvIGVsZW1lbnRzIGZvdW5kIGJ5IHNlbGVjdG9yIisoZi5pc1JlYWR5PyIiOiIgKERPTSBub3QgcmVhZHkpIikpO3JldHVybiB0aGlzfWlmKGcuZGVsZWdhdGlvbil7Zihkb2N1bWVudCkub2ZmKCJzdWJtaXQuZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYikub2ZmKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixhKS5vbigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYikub24oImNsaWNrLmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuYWpheEZvcm1VbmJpbmQoKS5iaW5kKCJzdWJtaXQuZm9ybS1wbHVnaW4iLGcsYikuYmluZCgiY2xpY2suZm9ybS1wbHVnaW4iLGcsYSl9O2Z1bmN0aW9uIGIoaCl7dmFyIGc9aC5kYXRhO2lmKCFoLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtoLnByZXZlbnREZWZhdWx0KCk7ZihoLnRhcmdldCkuYWpheFN1Ym1pdChnKX19ZnVuY3Rpb24gYShrKXt2YXIgaj1rLnRhcmdldDt2YXIgaD1mKGopO2lmKCEoaC5pcygiW3R5cGU9c3VibWl0XSxbdHlwZT1pbWFnZV0iKSkpe3ZhciBnPWguY2xvc2VzdCgiW3R5cGU9c3VibWl0XSIpO2lmKGcubGVuZ3RoPT09MCl7cmV0dXJufWo9Z1swXX12YXIgaT10aGlzO2kuY2xrPWo7aWYoai50eXBlPT0iaW1hZ2UiKXtpZihrLm9mZnNldFghPT11bmRlZmluZWQpe2kuY2xrX3g9ay5vZmZzZXRYO2kuY2xrX3k9ay5vZmZzZXRZfWVsc2V7aWYodHlwZW9mIGYuZm4ub2Zmc2V0PT0iZnVuY3Rpb24iKXt2YXIgbD1oLm9mZnNldCgpO2kuY2xrX3g9ay5wYWdlWC1sLmxlZnQ7aS5jbGtfeT1rLnBhZ2VZLWwudG9wfWVsc2V7aS5jbGtfeD1rLnBhZ2VYLWoub2Zmc2V0TGVmdDtpLmNsa195PWsucGFnZVktai5vZmZzZXRUb3B9fX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5jbGs9aS5jbGtfeD1pLmNsa195PW51bGx9LDEwMCl9Zi5mbi5hamF4Rm9ybVVuYmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIGNsaWNrLmZvcm0tcGx1Z2luIil9O2YuZm4uZm9ybVRvQXJyYXk9ZnVuY3Rpb24oeCxnKXt2YXIgdz1bXTtpZih0aGlzLmxlbmd0aD09PTApe3JldHVybiB3fXZhciBsPXRoaXNbMF07dmFyIHA9eD9sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6bC5lbGVtZW50cztpZighcCl7cmV0dXJuIHd9dmFyIHIscSxvLHksbSx0LGs7Zm9yKHI9MCx0PXAubGVuZ3RoO3I8dDtyKyspe209cFtyXTtvPW0ubmFtZTtpZighb3x8bS5kaXNhYmxlZCl7Y29udGludWV9aWYoeCYmbC5jbGsmJm0udHlwZT09ImltYWdlIil7aWYobC5jbGs9PW0pe3cucHVzaCh7bmFtZTpvLHZhbHVlOmYobSkudmFsKCksdHlwZTptLnR5cGV9KTt3LnB1c2goe25hbWU6bysiLngiLHZhbHVlOmwuY2xrX3h9LHtuYW1lOm8rIi55Iix2YWx1ZTpsLmNsa195fSl9Y29udGludWV9eT1mLmZpZWxkVmFsdWUobSx0cnVlKTtpZih5JiZ5LmNvbnN0cnVjdG9yPT1BcnJheSl7aWYoZyl7Zy5wdXNoKG0pfWZvcihxPTAsaz15Lmxlbmd0aDtxPGs7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTp5W3FdfSl9fWVsc2V7aWYoYy5maWxlYXBpJiZtLnR5cGU9PSJmaWxlIil7aWYoZyl7Zy5wdXNoKG0pfXZhciBoPW0uZmlsZXM7aWYoaC5sZW5ndGgpe2ZvcihxPTA7cTxoLmxlbmd0aDtxKyspe3cucHVzaCh7bmFtZTpvLHZhbHVlOmhbcV0sdHlwZTptLnR5cGV9KX19ZWxzZXt3LnB1c2goe25hbWU6byx2YWx1ZToiIix0eXBlOm0udHlwZX0pfX1lbHNle2lmKHkhPT1udWxsJiZ0eXBlb2YgeSE9InVuZGVmaW5lZCIpe2lmKGcpe2cucHVzaChtKX13LnB1c2goe25hbWU6byx2YWx1ZTp5LHR5cGU6bS50eXBlLHJlcXVpcmVkOm0ucmVxdWlyZWR9KX19fX1pZigheCYmbC5jbGspe3ZhciBzPWYobC5jbGspLHU9c1swXTtvPXUubmFtZTtpZihvJiYhdS5kaXNhYmxlZCYmdS50eXBlPT0iaW1hZ2UiKXt3LnB1c2goe25hbWU6byx2YWx1ZTpzLnZhbCgpfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfX1yZXR1cm4gd307Zi5mbi5mb3JtU2VyaWFsaXplPWZ1bmN0aW9uKGcpe3JldHVybiBmLnBhcmFtKHRoaXMuZm9ybVRvQXJyYXkoZykpfTtmLmZuLmZpZWxkU2VyaWFsaXplPWZ1bmN0aW9uKGgpe3ZhciBnPVtdO3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBtPXRoaXMubmFtZTtpZighbSl7cmV0dXJufXZhciBrPWYuZmllbGRWYWx1ZSh0aGlzLGgpO2lmKGsmJmsuY29uc3RydWN0b3I9PUFycmF5KXtmb3IodmFyIGw9MCxqPWsubGVuZ3RoO2w8ajtsKyspe2cucHVzaCh7bmFtZTptLHZhbHVlOmtbbF19KX19ZWxzZXtpZihrIT09bnVsbCYmdHlwZW9mIGshPSJ1bmRlZmluZWQiKXtnLnB1c2goe25hbWU6dGhpcy5uYW1lLHZhbHVlOmt9KX19fSk7cmV0dXJuIGYucGFyYW0oZyl9O2YuZm4uZmllbGRWYWx1ZT1mdW5jdGlvbihtKXtmb3IodmFyIGw9W10saj0wLGc9dGhpcy5sZW5ndGg7ajxnO2orKyl7dmFyIGs9dGhpc1tqXTt2YXIgaD1mLmZpZWxkVmFsdWUoayxtKTtpZihoPT09bnVsbHx8dHlwZW9mIGg9PSJ1bmRlZmluZWQifHwoaC5jb25zdHJ1Y3Rvcj09QXJyYXkmJiFoLmxlbmd0aCkpe2NvbnRpbnVlfWlmKGguY29uc3RydWN0b3I9PUFycmF5KXtmLm1lcmdlKGwsaCl9ZWxzZXtsLnB1c2goaCl9fXJldHVybiBsfTtmLmZpZWxkVmFsdWU9ZnVuY3Rpb24oZyxvKXt2YXIgaj1nLm5hbWUsdT1nLnR5cGUsdz1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihvPT09dW5kZWZpbmVkKXtvPXRydWV9aWYobyYmKCFqfHxnLmRpc2FibGVkfHx1PT0icmVzZXQifHx1PT0iYnV0dG9uInx8KHU9PSJjaGVja2JveCJ8fHU9PSJyYWRpbyIpJiYhZy5jaGVja2VkfHwodT09InN1Ym1pdCJ8fHU9PSJpbWFnZSIpJiZnLmZvcm0mJmcuZm9ybS5jbGshPWd8fHc9PSJzZWxlY3QiJiZnLnNlbGVjdGVkSW5kZXg9PS0xKSl7cmV0dXJuIG51bGx9aWYodz09InNlbGVjdCIpe3ZhciBwPWcuc2VsZWN0ZWRJbmRleDtpZihwPDApe3JldHVybiBudWxsfXZhciByPVtdLGg9Zy5vcHRpb25zO3ZhciBsPSh1PT0ic2VsZWN0LW9uZSIpO3ZhciBxPShsP3ArMTpoLmxlbmd0aCk7Zm9yKHZhciBrPShsP3A6MCk7azxxO2srKyl7dmFyIG09aFtrXTtpZihtLnNlbGVjdGVkKXt2YXIgcz1tLnZhbHVlO2lmKCFzKXtzPShtLmF0dHJpYnV0ZXMmJm0uYXR0cmlidXRlcy52YWx1ZSYmIShtLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkKSk/bS50ZXh0Om0udmFsdWV9aWYobCl7cmV0dXJuIHN9ci5wdXNoKHMpfX1yZXR1cm4gcn1yZXR1cm4gZihnKS52YWwoKX07Zi5mbi5jbGVhckZvcm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YoImlucHV0LHNlbGVjdCx0ZXh0YXJlYSIsdGhpcykuY2xlYXJGaWVsZHMoZyl9KX07Zi5mbi5jbGVhckZpZWxkcz1mLmZuLmNsZWFySW5wdXRzPWZ1bmN0aW9uKGcpe3ZhciBoPS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaj10aGlzLnR5cGUsaT10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihoLnRlc3Qoail8fGk9PSJ0ZXh0YXJlYSIpe3RoaXMudmFsdWU9IiJ9ZWxzZXtpZihqPT0iY2hlY2tib3gifHxqPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9ZmFsc2V9ZWxzZXtpZihpPT0ic2VsZWN0Iil7dGhpcy5zZWxlY3RlZEluZGV4PS0xfWVsc2V7aWYoaj09ImZpbGUiKXtpZigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7Zih0aGlzKS5yZXBsYWNlV2l0aChmKHRoaXMpLmNsb25lKHRydWUpKX1lbHNle2YodGhpcykudmFsKCIiKX19ZWxzZXtpZihnKXtpZigoZz09PXRydWUmJi9oaWRkZW4vLnRlc3QoaikpfHwodHlwZW9mIGc9PSJzdHJpbmciJiZmKHRoaXMpLmlzKGcpKSl7dGhpcy52YWx1ZT0iIn19fX19fX0pfTtmLmZuLnJlc2V0Rm9ybT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5yZXNldD09ImZ1bmN0aW9uInx8KHR5cGVvZiB0aGlzLnJlc2V0PT0ib2JqZWN0IiYmIXRoaXMucmVzZXQubm9kZVR5cGUpKXt0aGlzLnJlc2V0KCl9fSl9O2YuZm4uZW5hYmxlPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hZ30pfTtmLmZuLnNlbGVjdGVkPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9dGhpcy50eXBlO2lmKGg9PSJjaGVja2JveCJ8fGg9PSJyYWRpbyIpe3RoaXMuY2hlY2tlZD1nfWVsc2V7aWYodGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJvcHRpb24iKXt2YXIgaT1mKHRoaXMpLnBhcmVudCgic2VsZWN0Iik7aWYoZyYmaVswXSYmaVswXS50eXBlPT0ic2VsZWN0LW9uZSIpe2kuZmluZCgib3B0aW9uIikuc2VsZWN0ZWQoZmFsc2UpfXRoaXMuc2VsZWN0ZWQ9Z319fSl9O2YuZm4uYWpheFN1Ym1pdC5kZWJ1Zz1mYWxzZTtmdW5jdGlvbiBkKCl7aWYoIWYuZm4uYWpheFN1Ym1pdC5kZWJ1Zyl7cmV0dXJufXZhciBnPSJbanF1ZXJ5LmZvcm1dICIrQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsIiIpO2lmKHdpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cpe3dpbmRvdy5jb25zb2xlLmxvZyhnKX1lbHNle2lmKHdpbmRvdy5vcGVyYSYmd2luZG93Lm9wZXJhLnBvc3RFcnJvcil7d2luZG93Lm9wZXJhLnBvc3RFcnJvcihnKX19fX0pKTtQSwcIdhAQAaM+AACjPgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAc3RhdGljXGxpYlxtYXJrZWQubWluLmpzIWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz17fSx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLnJ1bGVzPWEubm9ybWFsLHRoaXMub3B0aW9ucy5nZm0mJih0aGlzLnJ1bGVzPXRoaXMub3B0aW9ucy50YWJsZXM/YS50YWJsZXM6YS5nZm0pfWZ1bmN0aW9uIHQoZSx0KXtpZih0aGlzLm9wdGlvbnM9dHx8aC5kZWZhdWx0cyx0aGlzLmxpbmtzPWUsdGhpcy5ydWxlcz11Lm5vcm1hbCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sIXRoaXMubGlua3MpdGhyb3cgbmV3IEVycm9yKCJUb2tlbnMgYXJyYXkgcmVxdWlyZXMgYSBgbGlua3NgIHByb3BlcnR5LiIpO3RoaXMub3B0aW9ucy5nZm0/dGhpcy5ydWxlcz10aGlzLm9wdGlvbnMuYnJlYWtzP3UuYnJlYWtzOnUuZ2ZtOnRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHRoaXMucnVsZXM9dS5wZWRhbnRpYyl9ZnVuY3Rpb24gbigpe31mdW5jdGlvbiByKGUpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW49bnVsbCx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgbix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcn1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0Py8mL2c6LyYoPyEjP1x3KzspL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjMzk7Iil9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlPWUuc291cmNlLHQ9dHx8IiIsZnVuY3Rpb24gbihyLHMpe3JldHVybiByPyhzPXMuc291cmNlfHxzLHM9cy5yZXBsYWNlKC8oXnxbXlxbXSlcXi9nLCIkMSIpLGU9ZS5yZXBsYWNlKHIscyksbik6bmV3IFJlZ0V4cChlLHQpfX1mdW5jdGlvbiBsKCl7fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0LG4scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Q9YXJndW1lbnRzW3JdO2ZvcihuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfXJldHVybiBlfWZ1bmN0aW9uIGgodCxuLGkpe2lmKGl8fCJmdW5jdGlvbiI9PXR5cGVvZiBuKXtpfHwoaT1uLG49bnVsbCksbj1vKHt9LGguZGVmYXVsdHMsbnx8e30pO3ZhciBsLGEsdT1uLmhpZ2hsaWdodCxwPTA7dHJ5e2w9ZS5sZXgodCxuKX1jYXRjaChjKXtyZXR1cm4gaShjKX1hPWwubGVuZ3RoO3ZhciBnPWZ1bmN0aW9uKCl7dmFyIGUsdDt0cnl7ZT1yLnBhcnNlKGwsbil9Y2F0Y2gocyl7dD1zfXJldHVybiBuLmhpZ2hsaWdodD11LHQ/aSh0KTppKG51bGwsZSl9O2lmKCF1fHx1Lmxlbmd0aDwzKXJldHVybiBnKCk7aWYoZGVsZXRlIG4uaGlnaGxpZ2h0LCFhKXJldHVybiBnKCk7Zm9yKDtwPGwubGVuZ3RoO3ArKykhZnVuY3Rpb24oZSl7cmV0dXJuImNvZGUiIT09ZS50eXBlPy0tYXx8ZygpOnUoZS50ZXh0LGUubGFuZyxmdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1ufHxuPT09ZS50ZXh0Py0tYXx8ZygpOihlLnRleHQ9bixlLmVzY2FwZWQ9ITAsLS1hfHxnKCksdm9pZCAwKX0pfShsW3BdKX1lbHNlIHRyeXtyZXR1cm4gbiYmKG49byh7fSxoLmRlZmF1bHRzLG4pKSxyLnBhcnNlKGUubGV4KHQsbiksbil9Y2F0Y2goYyl7aWYoYy5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL2NoamovbWFya2VkLiIsKG58fGguZGVmYXVsdHMpLnNpbGVudClyZXR1cm4iPHA+QW4gZXJyb3Igb2NjdXJlZDo8L3A+PHByZT4iK3MoYy5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+Ijt0aHJvdyBjfX12YXIgYT17bmV3bGluZTovXlxuKy8sY29kZTovXiggezR9W15cbl0rXG4qKSsvLGZlbmNlczpsLGhyOi9eKCAqWy0qX10pezMsfSAqKD86XG4rfCQpLyxoZWFkaW5nOi9eICooI3sxLDZ9KSAqKFteXG5dKz8pICojKiAqKD86XG4rfCQpLyxucHRhYmxlOmwsbGhlYWRpbmc6L14oW15cbl0rKVxuICooPXwtKXsyLH0gKig/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggKj5bXlxuXSsoXG5bXlxuXSspKlxuKikrLyxsaXN0Oi9eKCAqKShidWxsKSBbXHNcU10rPyg/OmhyfFxuezIsfSg/ISApKD8hXDFidWxsIClcbip8XHMqJCkvLGh0bWw6L14gKig/OmNvbW1lbnR8Y2xvc2VkfGNsb3NpbmcpICooPzpcbnsyLH18XHMqJCkvLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArWyIoXShbXlxuXSspWyIpXSk/ICooPzpcbit8JCkvLHRhYmxlOmwscGFyYWdyYXBoOi9eKCg/OlteXG5dK1xuPyg/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXx0YWd8ZGVmKSkrKVxuKi8sdGV4dDovXlteXG5dKy99O2EuYnVsbGV0PS8oPzpbKistXXxcZCtcLikvLGEuaXRlbT0vXiggKikoYnVsbCkgW15cbl0qKD86XG4oPyFcMWJ1bGwgKVteXG5dKikqLyxhLml0ZW09aShhLml0ZW0sImdtIikoL2J1bGwvZyxhLmJ1bGxldCkoKSxhLmxpc3Q9aShhLmxpc3QpKC9idWxsL2csYS5idWxsZXQpKCJociIsL1xuKyg/PSg/OiAqWy0qX10pezMsfSAqKD86XG4rfCQpKS8pKCksYS5fdGFnPSIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITovfEApXFxiIixhLmh0bWw9aShhLmh0bWwpKCJjb21tZW50IiwvPCEtLVtcc1xTXSo/LS0+LykoImNsb3NlZCIsLzwodGFnKVtcc1xTXSs/PFwvXDE+LykoImNsb3NpbmciLC88dGFnKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vKSgvdGFnL2csYS5fdGFnKSgpLGEucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCJociIsYS5ocikoImhlYWRpbmciLGEuaGVhZGluZykoImxoZWFkaW5nIixhLmxoZWFkaW5nKSgiYmxvY2txdW90ZSIsYS5ibG9ja3F1b3RlKSgidGFnIiwiPCIrYS5fdGFnKSgiZGVmIixhLmRlZikoKSxhLm5vcm1hbD1vKHt9LGEpLGEuZ2ZtPW8oe30sYS5ub3JtYWwse2ZlbmNlczovXiAqKGB7Myx9fH57Myx9KSAqKFxTKyk/ICpcbihbXHNcU10rPylccypcMSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6L14vfSksYS5nZm0ucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCIoPyEiLCIoPyEiK2EuZ2ZtLmZlbmNlcy5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwyIikrInwiK2EubGlzdC5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwzIikrInwiKSgpLGEudGFibGVzPW8oe30sYS5nZm0se25wdGFibGU6L14gKihcUy4qXHwuKilcbiAqKFstOl0rICpcfFstfCA6XSopXG4oKD86LipcfC4qKD86XG58JCkpKilcbiovLHRhYmxlOi9eICpcfCguKylcbiAqXHwoICpbLTpdK1stfCA6XSopXG4oKD86ICpcfC4qKD86XG58JCkpKilcbiovfSksZS5ydWxlcz1hLGUubGV4PWZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IGUobik7cmV0dXJuIHIubGV4KHQpfSxlLnByb3RvdHlwZS5sZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9cclxufFxyL2csIlxuIikucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL1x1MDBhMC9nLCIgIikucmVwbGFjZSgvXHUyNDI0L2csIlxuIiksdGhpcy50b2tlbihlLCEwKX0sZS5wcm90b3R5cGUudG9rZW49ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixzLGksbCxvLGgsdSxwLGU9ZS5yZXBsYWNlKC9eICskL2dtLCIiKTtlOylpZigocz10aGlzLnJ1bGVzLm5ld2xpbmUuZXhlYyhlKSkmJihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzWzBdLmxlbmd0aD4xJiZ0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJzcGFjZSJ9KSkscz10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzPXNbMF0ucmVwbGFjZSgvXiB7NH0vZ20sIiIpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3M6cy5yZXBsYWNlKC9cbiskLywiIil9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIixsYW5nOnNbMl0sdGV4dDpzWzNdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaGVhZGluZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmciLGRlcHRoOnNbMV0ubGVuZ3RoLHRleHQ6c1syXX0pO2Vsc2UgaWYodCYmKHM9dGhpcy5ydWxlcy5ucHRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC9cbiQvLCIiKS5zcGxpdCgiXG4iKX0sdT0wO3U8by5hbGlnbi5sZW5ndGg7dSsrKW8uYWxpZ25bdV09L14gKi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3Qoby5hbGlnblt1XSk/ImxlZnQiOm51bGw7Zm9yKHU9MDt1PG8uY2VsbHMubGVuZ3RoO3UrKylvLmNlbGxzW3VdPW8uY2VsbHNbdV0uc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZihzPXRoaXMucnVsZXMubGhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDoiPSI9PT1zWzJdPzE6Mix0ZXh0OnNbMV19KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5oci5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhyIn0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmJsb2NrcXVvdGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX3N0YXJ0In0pLHM9c1swXS5yZXBsYWNlKC9eICo+ID8vZ20sIiIpLHRoaXMudG9rZW4ocyx0KSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX2VuZCJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5saXN0LmV4ZWMoZSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxpPXNbMl0sdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9zdGFydCIsb3JkZXJlZDppLmxlbmd0aD4xfSkscz1zWzBdLm1hdGNoKHRoaXMucnVsZXMuaXRlbSksbj0hMSxwPXMubGVuZ3RoLHU9MDtwPnU7dSsrKW89c1t1XSxoPW8ubGVuZ3RoLG89by5yZXBsYWNlKC9eICooWyorLV18XGQrXC4pICsvLCIiKSx+by5pbmRleE9mKCJcbiAiKSYmKGgtPW8ubGVuZ3RoLG89dGhpcy5vcHRpb25zLnBlZGFudGljP28ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik6by5yZXBsYWNlKG5ldyBSZWdFeHAoIl4gezEsIitoKyJ9IiwiZ20iKSwiIikpLHRoaXMub3B0aW9ucy5zbWFydExpc3RzJiZ1IT09cC0xJiYobD1hLmJ1bGxldC5leGVjKHNbdSsxXSlbMF0saT09PWx8fGkubGVuZ3RoPjEmJmwubGVuZ3RoPjF8fChlPXMuc2xpY2UodSsxKS5qb2luKCJcbiIpK2UsdT1wLTEpKSxyPW58fC9cblxuKD8hXHMqJCkvLnRlc3QobyksdSE9PXAtMSYmKG49IlxuIj09PW8uY2hhckF0KG8ubGVuZ3RoLTEpLHJ8fChyPW4pKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnI/Imxvb3NlX2l0ZW1fc3RhcnQiOiJsaXN0X2l0ZW1fc3RhcnQifSksdGhpcy50b2tlbihvLCExKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW1fZW5kIn0pO3RoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3RfZW5kIn0pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmh0bWwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8icGFyYWdyYXBoIjoiaHRtbCIscHJlOiJwcmUiPT09c1sxXXx8InNjcmlwdCI9PT1zWzFdfHwic3R5bGUiPT09c1sxXSx0ZXh0OnNbMF19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMuZGVmLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLmxpbmtzW3NbMV0udG9Mb3dlckNhc2UoKV09e2hyZWY6c1syXSx0aXRsZTpzWzNdfTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMudGFibGUuZXhlYyhlKSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxvPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOnNbMV0ucmVwbGFjZSgvXiAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGFsaWduOnNbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxjZWxsczpzWzNdLnJlcGxhY2UoLyg/OiAqXHwgKik/XG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnJlcGxhY2UoL14gKlx8ICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyk7dGhpcy50b2tlbnMucHVzaChvKX1lbHNlIGlmKHQmJihzPXRoaXMucnVsZXMucGFyYWdyYXBoLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InBhcmFncmFwaCIsdGV4dDoiXG4iPT09c1sxXS5jaGFyQXQoc1sxXS5sZW5ndGgtMSk/c1sxXS5zbGljZSgwLC0xKTpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMudGV4dC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InRleHQiLHRleHQ6c1swXX0pO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiB0aGlzLnRva2Vuc307dmFyIHU9e2VzY2FwZTovXlxcKFtcXGAqe31cW1xdKCkjK1wtLiFfPl0pLyxhdXRvbGluazovXjwoW14gPl0rKEB8OlwvKVteID5dKyk+Lyx1cmw6bCx0YWc6L148IS0tW1xzXFNdKj8tLT58XjxcLz9cdysoPzoiW14iXSoifCdbXiddKid8W14nIj5dKSo/Pi8sbGluazovXiE/XFsoaW5zaWRlKVxdXChocmVmXCkvLHJlZmxpbms6L14hP1xbKGluc2lkZSlcXVxzKlxbKFteXF1dKilcXS8sbm9saW5rOi9eIT9cWygoPzpcW1teXF1dKlxdfFteXFtcXV0pKilcXS8sc3Ryb25nOi9eX18oW1xzXFNdKz8pX18oPyFfKXxeXCpcKihbXHNcU10rPylcKlwqKD8hXCopLyxlbTovXlxiXygoPzpfX3xbXHNcU10pKz8pX1xifF5cKigoPzpcKlwqfFtcc1xTXSkrPylcKig/IVwqKS8sY29kZTovXihgKylccyooW1xzXFNdKj9bXmBdKVxzKlwxKD8hYCkvLGJyOi9eIHsyLH1cbig/IVxzKiQpLyxkZWw6bCx0ZXh0Oi9eW1xzXFNdKz8oPz1bXFw8IVxbXypgXXwgezIsfVxufCQpL307dS5faW5zaWRlPS8oPzpcW1teXF1dKlxdfFteXFtcXV18XF0oPz1bXlxbXSpcXSkpKi8sdS5faHJlZj0vXHMqPD8oW1xzXFNdKj8pPj8oPzpccytbJyJdKFtcc1xTXSo/KVsnIl0pP1xzKi8sdS5saW5rPWkodS5saW5rKSgiaW5zaWRlIix1Ll9pbnNpZGUpKCJocmVmIix1Ll9ocmVmKSgpLHUucmVmbGluaz1pKHUucmVmbGluaykoImluc2lkZSIsdS5faW5zaWRlKSgpLHUubm9ybWFsPW8oe30sdSksdS5wZWRhbnRpYz1vKHt9LHUubm9ybWFsLHtzdHJvbmc6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbTovXl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXyl8XlwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKikvfSksdS5nZm09byh7fSx1Lm5vcm1hbCx7ZXNjYXBlOmkodS5lc2NhcGUpKCJdKSIsIn58XSkiKSgpLHVybDovXihodHRwcz86XC9cL1teXHM8XStbXjwuLDo7IicpXF1cc10pLyxkZWw6L15+fig/PVxTKShbXHNcU10qP1xTKX5+Lyx0ZXh0OmkodS50ZXh0KSgiXXwiLCJ+XXwiKSgifCIsInxodHRwcz86Ly98IikoKX0pLHUuYnJlYWtzPW8oe30sdS5nZm0se2JyOmkodS5icikoInsyLH0iLCIqIikoKSx0ZXh0OmkodS5nZm0udGV4dCkoInsyLH0iLCIqIikoKX0pLHQucnVsZXM9dSx0Lm91dHB1dD1mdW5jdGlvbihlLG4scil7dmFyIHM9bmV3IHQobixyKTtyZXR1cm4gcy5vdXRwdXQoZSl9LHQucHJvdG90eXBlLm91dHB1dD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGksbD0iIjtlOylpZihpPXRoaXMucnVsZXMuZXNjYXBlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9aVsxXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5hdXRvbGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLCJAIj09PWlbMl0/KG49IjoiPT09aVsxXS5jaGFyQXQoNik/dGhpcy5tYW5nbGUoaVsxXS5zdWJzdHJpbmcoNykpOnRoaXMubWFuZ2xlKGlbMV0pLHI9dGhpcy5tYW5nbGUoIm1haWx0bzoiKStuKToobj1zKGlbMV0pLHI9biksbCs9dGhpcy5yZW5kZXJlci5saW5rKHIsbnVsbCxuKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy51cmwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxuPXMoaVsxXSkscj1uLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudGFnLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vcHRpb25zLnNhbml0aXplP3MoaVswXSk6aVswXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5saW5rLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vdXRwdXRMaW5rKGkse2hyZWY6aVsyXSx0aXRsZTppWzNdfSk7ZWxzZSBpZigoaT10aGlzLnJ1bGVzLnJlZmxpbmsuZXhlYyhlKSl8fChpPXRoaXMucnVsZXMubm9saW5rLmV4ZWMoZSkpKXtpZihlPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx0PShpWzJdfHxpWzFdKS5yZXBsYWNlKC9ccysvZywiICIpLHQ9dGhpcy5saW5rc1t0LnRvTG93ZXJDYXNlKCldLCF0fHwhdC5ocmVmKXtsKz1pWzBdLmNoYXJBdCgwKSxlPWlbMF0uc3Vic3RyaW5nKDEpK2U7Y29udGludWV9bCs9dGhpcy5vdXRwdXRMaW5rKGksdCl9ZWxzZSBpZihpPXRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5zdHJvbmcodGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmVtLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5lbSh0aGlzLm91dHB1dChpWzJdfHxpWzFdKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuY29kZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuY29kZXNwYW4ocyhpWzJdLCEwKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuYnIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmJyKCk7ZWxzZSBpZihpPXRoaXMucnVsZXMuZGVsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoaVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz1zKHRoaXMuc21hcnR5cGFudHMoaVswXSkpO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiBsfSx0LnByb3RvdHlwZS5vdXRwdXRMaW5rPWZ1bmN0aW9uKGUsdCl7dmFyIG49cyh0LmhyZWYpLHI9dC50aXRsZT9zKHQudGl0bGUpOm51bGw7cmV0dXJuIiEiIT09ZVswXS5jaGFyQXQoMCk/dGhpcy5yZW5kZXJlci5saW5rKG4scix0aGlzLm91dHB1dChlWzFdKSk6dGhpcy5yZW5kZXJlci5pbWFnZShuLHIscyhlWzFdKSl9LHQucHJvdG90eXBlLnNtYXJ0eXBhbnRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/ZS5yZXBsYWNlKC8tLS9nLCLigJQiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQx4oCYIikucmVwbGFjZSgvJy9nLCLigJkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDHigJwiKS5yZXBsYWNlKC8iL2csIuKAnSIpLnJlcGxhY2UoL1wuezN9L2csIuKApiIpOmV9LHQucHJvdG90eXBlLm1hbmdsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixyPWUubGVuZ3RoLHM9MDtyPnM7cysrKXQ9ZS5jaGFyQ29kZUF0KHMpLE1hdGgucmFuZG9tKCk+LjUmJih0PSJ4Iit0LnRvU3RyaW5nKDE2KSksbis9IiYjIit0KyI7IjtyZXR1cm4gbn0sbi5wcm90b3R5cGUuY29kZT1mdW5jdGlvbihlLHQsbixyKXtpZihyPXJ8fHt9LHIuaGlnaGxpZ2h0KXt2YXIgaT1yLmhpZ2hsaWdodChlLHQpO251bGwhPWkmJmkhPT1lJiYobj0hMCxlPWkpfXJldHVybiB0Pyc8cHJlPjxjb2RlIGNsYXNzPSInK3IubGFuZ1ByZWZpeCt0KyciPicrKG4/ZTpzKGUpKSsiXG48L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKG4/ZTpzKGUsITApKSsiXG48L2NvZGU+PC9wcmU+In0sbi5wcm90b3R5cGUuYmxvY2txdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4iPGJsb2NrcXVvdGU+XG4iK2UrIjwvYmxvY2txdW90ZT5cbiJ9LG4ucHJvdG90eXBlLmh0bWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG4ucHJvdG90eXBlLmhlYWRpbmc9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIjxoIit0KycgaWQ9Iicrci5oZWFkZXJQcmVmaXgrbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teXHddKy9nLCItIikrJyI+JytlKyI8L2giK3QrIj5cbiJ9LG4ucHJvdG90eXBlLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIjxocj5cbiJ9LG4ucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj10PyJvbCI6InVsIjtyZXR1cm4iPCIrbisiPlxuIitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUubGlzdGl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxsaT4iK2UrIjwvbGk+XG4ifSxuLnByb3RvdHlwZS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7cmV0dXJuIjxwPiIrZSsiPC9wPlxuIn0sbi5wcm90b3R5cGUudGFibGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHRhYmxlPlxuPHRoZWFkPlxuIitlKyI8L3RoZWFkPlxuIisiPHRib2R5PlxuIit0KyI8L3Rib2R5PlxuIisiPC90YWJsZT5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlcm93PWZ1bmN0aW9uKGUpe3JldHVybiI8dHI+XG4iK2UrIjwvdHI+XG4ifSxuLnByb3RvdHlwZS50YWJsZWNlbGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmhlYWRlcj8idGgiOiJ0ZCIscj10LmFsaWduPyI8IituKycgc3R5bGU9InRleHQtYWxpZ246Jyt0LmFsaWduKyciPic6IjwiK24rIj4iO3JldHVybiByK2UrIjwvIituKyI+XG4ifSxuLnByb3RvdHlwZS5zdHJvbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIjxzdHJvbmc+IitlKyI8L3N0cm9uZz4ifSxuLnByb3RvdHlwZS5lbT1mdW5jdGlvbihlKXtyZXR1cm4iPGVtPiIrZSsiPC9lbT4ifSxuLnByb3RvdHlwZS5jb2Rlc3Bhbj1mdW5jdGlvbihlKXtyZXR1cm4iPGNvZGU+IitlKyI8L2NvZGU+In0sbi5wcm90b3R5cGUuYnI9ZnVuY3Rpb24oKXtyZXR1cm4iPGJyPiJ9LG4ucHJvdG90eXBlLmRlbD1mdW5jdGlvbihlKXtyZXR1cm4iPGRlbD4iK2UrIjwvZGVsPiJ9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8YSBocmVmPSInK2UrJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4iK24rIjwvYT4ifSxuLnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9JzxpbWcgc3JjPSInK2UrJyIgYWx0PSInK24rJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4ifSxyLnBhcnNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1uZXcgcih0LG4pO3JldHVybiBzLnBhcnNlKGUpfSxyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlKXt0aGlzLmlubGluZT1uZXcgdChlLmxpbmtzLHRoaXMub3B0aW9ucyx0aGlzLnJlbmRlcmVyKSx0aGlzLnRva2Vucz1lLnJldmVyc2UoKTtmb3IodmFyIG49IiI7dGhpcy5uZXh0KCk7KW4rPXRoaXMudG9rKCk7cmV0dXJuIG59LHIucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbj10aGlzLnRva2Vucy5wb3AoKX0sci5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGgtMV18fDB9LHIucHJvdG90eXBlLnBhcnNlVGV4dD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnRva2VuLnRleHQ7InRleHQiPT09dGhpcy5wZWVrKCkudHlwZTspZSs9IlxuIit0aGlzLm5leHQoKS50ZXh0O3JldHVybiB0aGlzLmlubGluZS5vdXRwdXQoZSl9LHIucHJvdG90eXBlLnRvaz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLnRva2VuLnR5cGUpe2Nhc2Uic3BhY2UiOnJldHVybiIiO2Nhc2UiaHIiOnJldHVybiB0aGlzLnJlbmRlcmVyLmhyKCk7Y2FzZSJoZWFkaW5nIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpLHRoaXMudG9rZW4uZGVwdGgsdGhpcy50b2tlbi50ZXh0LHRoaXMub3B0aW9ucyk7Y2FzZSJjb2RlIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5jb2RlKHRoaXMudG9rZW4udGV4dCx0aGlzLnRva2VuLmxhbmcsdGhpcy50b2tlbi5lc2NhcGVkLHRoaXMub3B0aW9ucyk7Y2FzZSJ0YWJsZSI6dmFyIGUsdCxuLHIscyxpPSIiLGw9IiI7Zm9yKG49IiIsZT0wO2U8dGhpcy50b2tlbi5oZWFkZXIubGVuZ3RoO2UrKylyPXtoZWFkZXI6ITAsYWxpZ246dGhpcy50b2tlbi5hbGlnbltlXX0sbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4uaGVhZGVyW2VdKSx7aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19KTtmb3IoaSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhuKSxlPTA7ZTx0aGlzLnRva2VuLmNlbGxzLmxlbmd0aDtlKyspe2Zvcih0PXRoaXMudG9rZW4uY2VsbHNbZV0sbj0iIixzPTA7czx0Lmxlbmd0aDtzKyspbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRbc10pLHtoZWFkZXI6ITEsYWxpZ246dGhpcy50b2tlbi5hbGlnbltzXX0pO2wrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobil9cmV0dXJuIHRoaXMucmVuZGVyZXIudGFibGUoaSxsKTtjYXNlImJsb2NrcXVvdGVfc3RhcnQiOmZvcih2YXIgbD0iIjsiYmxvY2txdW90ZV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGwpO2Nhc2UibGlzdF9zdGFydCI6Zm9yKHZhciBsPSIiLG89dGhpcy50b2tlbi5vcmRlcmVkOyJsaXN0X2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3QobCxvKTtjYXNlImxpc3RfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPSJ0ZXh0Ij09PXRoaXMudG9rZW4udHlwZT90aGlzLnBhcnNlVGV4dCgpOnRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJsb29zZV9pdGVtX3N0YXJ0Ijpmb3IodmFyIGw9IiI7Imxpc3RfaXRlbV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0aXRlbShsKTtjYXNlImh0bWwiOnZhciBoPXRoaXMudG9rZW4ucHJlfHx0aGlzLm9wdGlvbnMucGVkYW50aWM/dGhpcy50b2tlbi50ZXh0OnRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpO3JldHVybiB0aGlzLnJlbmRlcmVyLmh0bWwoaCk7Y2FzZSJwYXJhZ3JhcGgiOnJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZVRleHQoKSl9fSxsLmV4ZWM9bCxoLm9wdGlvbnM9aC5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBvKGguZGVmYXVsdHMsZSksaH0saC5kZWZhdWx0cz17Z2ZtOiEwLHRhYmxlczohMCxicmVha3M6ITEscGVkYW50aWM6ITEsc2FuaXRpemU6ITEsc21hcnRMaXN0czohMSxzaWxlbnQ6ITEsaGlnaGxpZ2h0Om51bGwsbGFuZ1ByZWZpeDoibGFuZy0iLHNtYXJ0eXBhbnRzOiExLGhlYWRlclByZWZpeDoiIixyZW5kZXJlcjpuZXcgbn0saC5QYXJzZXI9cixoLnBhcnNlcj1yLnBhcnNlLGguUmVuZGVyZXI9bixoLkxleGVyPWUsaC5sZXhlcj1lLmxleCxoLklubGluZUxleGVyPXQsaC5pbmxpbmVMZXhlcj10Lm91dHB1dCxoLnBhcnNlPWgsIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWg6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZnVuY3Rpb24oKXtyZXR1cm4gaH0pOnRoaXMubWFya2VkPWh9LmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpnbG9iYWwpfSgpKTtQSwcIQvpMalM5AABTOQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAc3RhdGljXGxpYlx2YWxpZGF0ZS5taW4uanMvKgogKiB2YWxpZGF0ZS5qcyAxLjMKICogQ29weXJpZ2h0IChjKSAyMDEzIFJpY2sgSGFycmlzb24sIGh0dHA6Ly9yaWNraGFycmlzb24ubWUKICogdmFsaWRhdGUuanMgaXMgb3BlbiBzb3VyY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KICogUG9ydGlvbnMgb2YgdmFsaWRhdGUuanMgYXJlIGluc3BpcmVkIGJ5IENvZGVJZ25pdGVyLgogKiBodHRwOi8vcmlja2hhcnJpc29uLmdpdGh1Yi5jb20vdmFsaWRhdGUuanMKICovCgooZnVuY3Rpb24ocSxyLG0pe3ZhciBzPXtyZXF1aXJlZDoiVGhlICVzIGZpZWxkIGlzIHJlcXVpcmVkLiIsbWF0Y2hlczoiVGhlICVzIGZpZWxkIGRvZXMgbm90IG1hdGNoIHRoZSAlcyBmaWVsZC4iLCJkZWZhdWx0IjoiVGhlICVzIGZpZWxkIGlzIHN0aWxsIHNldCB0byBkZWZhdWx0LCBwbGVhc2UgY2hhbmdlLiIsdmFsaWRfZW1haWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiIsdmFsaWRfZW1haWxzOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFsbCB2YWxpZCBlbWFpbCBhZGRyZXNzZXMuIixtaW5fbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBhdCBsZWFzdCAlcyBjaGFyYWN0ZXJzIGluIGxlbmd0aC4iLG1heF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IG5vdCBleGNlZWQgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixleGFjdF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IGJlIGV4YWN0bHkgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixncmVhdGVyX3RoYW46IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBudW1iZXIgZ3JlYXRlciB0aGFuICVzLiIsbGVzc190aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGxlc3MgdGhhbiAlcy4iLGFscGhhOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMuIixhbHBoYV9udW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzLiIsYWxwaGFfZGFzaDoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycywgdW5kZXJzY29yZXMsIGFuZCBkYXNoZXMuIixudW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgbnVtYmVycy4iLGludGVnZXI6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYW4gaW50ZWdlci4iLGRlY2ltYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBkZWNpbWFsIG51bWJlci4iLGlzX25hdHVyYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSBwb3NpdGl2ZSBudW1iZXJzLiIsaXNfbmF0dXJhbF9ub196ZXJvOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvLiIsdmFsaWRfaXA6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBJUC4iLHZhbGlkX2Jhc2U2NDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIGJhc2U2NCBzdHJpbmcuIix2YWxpZF9jcmVkaXRfY2FyZDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci4iLGlzX2ZpbGVfdHlwZToiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5ICVzIGZpbGVzLiIsdmFsaWRfdXJsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgVVJMLiJ9LHQ9ZnVuY3Rpb24oYSl7fSx1PS9eKC4rPylcWyguKylcXSQvLGg9L15bMC05XSskLyx2PS9eXC0/WzAtOV0rJC8saz0vXlwtP1swLTldKlwuP1swLTldKyQvLHA9L15bYS16QS1aMC05LiEjJCUmYW1wOycqK1wtXC89P1xeX2B7fH1+XC1dK0BbYS16QS1aMC05XC1dKyg/OlwuW2EtekEtWjAtOVwtXSspKiQvLHc9L15bYS16XSskL2kseD0vXlthLXowLTldKyQvaSx5PS9eW2EtejAtOV9cLV0rJC9pLHo9L15bMC05XSskL2ksQT0vXlsxLTldWzAtOV0qJC9pLEI9L14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pJC9pLEM9L1teYS16QS1aMC05XC9cKz1dL2ksRD0vXltcZFwtXHNdKyQvLEU9L14oKGh0dHB8aHR0cHMpOlwvXC8oXHcrOnswLDF9XHcqQCk/KFxTKyl8KSg6WzAtOV0rKT8oXC98XC8oW1x3IyE6Lj8rPSYlQCFcLVwvXSkpPyQvLGU9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY2FsbGJhY2s9Y3x8dDt0aGlzLmVycm9ycz1bXTt0aGlzLmZpZWxkcz17fTt0aGlzLmZvcm09dGhpcy5fZm9ybUJ5TmFtZU9yTm9kZShhKXx8e307dGhpcy5tZXNzYWdlcz17fTt0aGlzLmhhbmRsZXJzPXt9O2E9MDtmb3IoYz1iLmxlbmd0aDthPGM7YSsrKXt2YXIgZD1iW2FdO2lmKChkLm5hbWV8fGQubmFtZXMpJiZkLnJ1bGVzKWlmKGQubmFtZXMpZm9yKHZhciBsPTA7bDxkLm5hbWVzLmxlbmd0aDtsKyspdGhpcy5fYWRkRmllbGQoZCxkLm5hbWVzW2xdKTtlbHNlIHRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lKX12YXIgZz10aGlzLmZvcm0ub25zdWJtaXQ7dGhpcy5mb3JtLm9uc3VibWl0PWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXt0cnl7cmV0dXJuIGEuX3ZhbGlkYXRlRm9ybShiKSYmKGc9PT1tfHxnKCkpfWNhdGNoKGMpe319fSh0aGlzKX0sbj1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKDA8YS5sZW5ndGgmJigicmFkaW8iPT09YVswXS50eXBlfHwiY2hlY2tib3giPT09YVswXS50eXBlKSlmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXtpZihhW2NdLmNoZWNrZWQpcmV0dXJuIGFbY11bYl19ZWxzZSByZXR1cm4gYVtiXX07ZS5wcm90b3R5cGUuc2V0TWVzc2FnZT1mdW5jdGlvbihhLGIpe3RoaXMubWVzc2FnZXNbYV09YjtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUucmVnaXN0ZXJDYWxsYmFjaz1mdW5jdGlvbihhLGIpe2EmJigic3RyaW5nIj09PXR5cGVvZiBhJiZiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGIpJiYodGhpcy5oYW5kbGVyc1thXT1iKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuX2Zvcm1CeU5hbWVPck5vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgYT9hOnIuZm9ybXNbYV19O2UucHJvdG90eXBlLl9hZGRGaWVsZD1mdW5jdGlvbihhLGIpe3RoaXMuZmllbGRzW2JdPXtuYW1lOmIsZGlzcGxheTphLmRpc3BsYXl8fGIscnVsZXM6YS5ydWxlcyxpZDpudWxsLHR5cGU6bnVsbCx2YWx1ZTpudWxsLGNoZWNrZWQ6bnVsbH19O2UucHJvdG90eXBlLl92YWxpZGF0ZUZvcm09ZnVuY3Rpb24oYSl7dGhpcy5lcnJvcnM9W107Zm9yKHZhciBiIGluIHRoaXMuZmllbGRzKWlmKHRoaXMuZmllbGRzLmhhc093blByb3BlcnR5KGIpKXt2YXIgYz10aGlzLmZpZWxkc1tiXXx8e30sZD10aGlzLmZvcm1bYy5uYW1lXTtkJiZkIT09bSYmKGMuaWQ9bihkLCJpZCIpLGMudHlwZT0wPGQubGVuZ3RoP2RbMF0udHlwZTpkLnR5cGUsYy52YWx1ZT1uKGQsInZhbHVlIiksYy5jaGVja2VkPW4oZCwiY2hlY2tlZCIpLHRoaXMuX3ZhbGlkYXRlRmllbGQoYykpfSJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5jYWxsYmFjayYmdGhpcy5jYWxsYmFjayh0aGlzLmVycm9ycyxhKTswPHRoaXMuZXJyb3JzLmxlbmd0aCYmKGEmJmEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmV2ZW50JiYoZXZlbnQucmV0dXJuVmFsdWU9ITEpKTtyZXR1cm4hMH07ZS5wcm90b3R5cGUuX3ZhbGlkYXRlRmllbGQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEucnVsZXMuc3BsaXQoInwiKSxjPWEucnVsZXMuaW5kZXhPZigicmVxdWlyZWQiKSxkPSFhLnZhbHVlfHwiIj09PWEudmFsdWV8fGEudmFsdWU9PT1tLGw9MCxnPWIubGVuZ3RoO2w8ZztsKyspe3ZhciBmPWJbbF0sZT1udWxsLGg9ITEsaz11LmV4ZWMoZik7aWYoLTEhPT1jfHwtMSE9PWYuaW5kZXhPZigiIWNhbGxiYWNrXyIpfHwhZClpZihrJiYoZj1rWzFdLGU9a1syXSksIiEiPT09Zi5jaGFyQXQoMCkmJihmPWYuc3Vic3RyaW5nKDEsZi5sZW5ndGgpKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuX2hvb2tzW2ZdP3RoaXMuX2hvb2tzW2ZdLmFwcGx5KHRoaXMsW2EsZV0pfHwoaD0hMCk6ImNhbGxiYWNrXyI9PT1mLnN1YnN0cmluZygwLDkpJiYoZj1mLnN1YnN0cmluZyg5LGYubGVuZ3RoKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuaGFuZGxlcnNbZl0mJiExPT09dGhpcy5oYW5kbGVyc1tmXS5hcHBseSh0aGlzLFthLnZhbHVlLGVdKSYmKGg9ITApKSxoKXtiPXRoaXMubWVzc2FnZXNbZl18fHNbZl07Yz0iQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdpdGggdGhlICIrYS5kaXNwbGF5KyIgZmllbGQuIjtiJiYoYz1iLnJlcGxhY2UoIiVzIixhLmRpc3BsYXkpLGUmJihjPWMucmVwbGFjZSgiJXMiLHRoaXMuZmllbGRzW2VdP3RoaXMuZmllbGRzW2VdLmRpc3BsYXk6ZSkpKTt0aGlzLmVycm9ycy5wdXNoKHtpZDphLmlkLG5hbWU6YS5uYW1lLG1lc3NhZ2U6YyxydWxlOmZ9KTticmVha319fTtlLnByb3RvdHlwZS5faG9va3M9e3JlcXVpcmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWEudmFsdWU7cmV0dXJuImNoZWNrYm94Ij09PWEudHlwZXx8InJhZGlvIj09PWEudHlwZT8hMD09PWEuY2hlY2tlZDpudWxsIT09YiYmIiIhPT1ifSwiZGVmYXVsdCI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS52YWx1ZSE9PWJ9LG1hdGNoZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmZvcm1bYl07cmV0dXJuIGM/YS52YWx1ZT09PWMudmFsdWU6ITF9LHZhbGlkX2VtYWlsOmZ1bmN0aW9uKGEpe3JldHVybiBwLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2VtYWlsczpmdW5jdGlvbihhKXthPWEudmFsdWUuc3BsaXQoIiwiKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKylpZighcC50ZXN0KGFbYl0pKXJldHVybiExO3JldHVybiEwfSxtaW5fbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD49cGFyc2VJbnQoYiwxMCk6ITF9LG1heF9sZW5ndGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC50ZXN0KGIpP2EudmFsdWUubGVuZ3RoPD1wYXJzZUludChiLDEwKTohMX0sZXhhY3RfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD09PXBhcnNlSW50KGIsMTApOiExfSxncmVhdGVyX3RoYW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpP3BhcnNlRmxvYXQoYS52YWx1ZSk+cGFyc2VGbG9hdChiKTohMX0sbGVzc190aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPHBhcnNlRmxvYXQoYik6ITF9LGFscGhhOmZ1bmN0aW9uKGEpe3JldHVybiB3LnRlc3QoYS52YWx1ZSl9LGFscGhhX251bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIHgudGVzdChhLnZhbHVlKX0sYWxwaGFfZGFzaDpmdW5jdGlvbihhKXtyZXR1cm4geS50ZXN0KGEudmFsdWUpfSxudW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiBoLnRlc3QoYS52YWx1ZSl9LGludGVnZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHYudGVzdChhLnZhbHVlKX0sZGVjaW1hbDpmdW5jdGlvbihhKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsOmZ1bmN0aW9uKGEpe3JldHVybiB6LnRlc3QoYS52YWx1ZSl9LGlzX25hdHVyYWxfbm9femVybzpmdW5jdGlvbihhKXtyZXR1cm4gQS50ZXN0KGEudmFsdWUpfSx2YWxpZF9pcDpmdW5jdGlvbihhKXtyZXR1cm4gQi50ZXN0KGEudmFsdWUpfSx2YWxpZF9iYXNlNjQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEMudGVzdChhLnZhbHVlKX0sdmFsaWRfdXJsOmZ1bmN0aW9uKGEpe3JldHVybiBFLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2NyZWRpdF9jYXJkOmZ1bmN0aW9uKGEpe2lmKCFELnRlc3QoYS52YWx1ZSkpcmV0dXJuITE7dmFyIGI9MCxjPTAsZD0hMTthPWEudmFsdWUucmVwbGFjZSgvXEQvZywiIik7Zm9yKHZhciBlPWEubGVuZ3RoLTE7MDw9ZTtlLS0pYz1hLmNoYXJBdChlKSxjPXBhcnNlSW50KGMsMTApLGQmJjk8KGMqPTIpJiYoYy09OSksYis9YyxkPSFkO3JldHVybiAwPT09YiUxMH0saXNfZmlsZV90eXBlOmZ1bmN0aW9uKGEsYil7aWYoImZpbGUiIT09YS50eXBlKXJldHVybiEwO3ZhciBjPWEudmFsdWUuc3Vic3RyKGEudmFsdWUubGFzdEluZGV4T2YoIi4iKSsxKSxkPWIuc3BsaXQoIiwiKSxlPSExLGc9MCxmPWQubGVuZ3RoO2ZvcihnO2c8ZjtnKyspYz09ZFtnXSYmKGU9ITApO3JldHVybiBlfX07cS5Gb3JtVmFsaWRhdG9yPWV9KSh3aW5kb3csZG9jdW1lbnQpOwpQSwcIZowfxDMYAAAzGAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAdmlldy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAdmlld1xhZG1pbi9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxhcnRpY2xlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mt7vliqDmlofnq6A8L2E+DQogICAgPC9saT57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk5paH56ug5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9hcnRpY2xlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIlnRyEm4GAABuBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xhZG1pblxjbWQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcYWRtaW5cY21kXGJhY2t1cC5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciBjbGVhciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUgbGVmdCI+5aSH5Lu95pWw5o2uPC9oMT4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUgbGVmdCIgaWQ9ImJhY2t1cC1idG4iPuWkh+S7vTwvYnV0dG9uPg0KPC9oZWFkZXI+DQo8dWwgY2xhc3M9ImNtZC1saXN0IiBpZD0iYmFja3VwLWxpc3QiPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVUaW1lIC5Nb2RUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fSA8YSBjbGFzcz0ibGluayIgaHJlZj0iL2NtZC9iYWNrdXAvZmlsZT9maWxlPXt7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIiByZWw9Int7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZS1vIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNiYWNrdXAtYnRuJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICB0eXBlOiAicG9zdCIsDQogICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAkKCcuY21kLWxpc3QnKS5wcmVwZW5kKCc8bGkgY2xhc3M9ImJhY2t1cC1sb2FkaW5nIj7lpIfku73kuK0uLjwvbGk+Jyk7DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuaGlkZSgpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuYmFja3VwLWxvYWRpbmcnKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLXJlc3VsdCI+5Yia5Yia5aSH5Lu95YiwICcgKyBqc29uLmZpbGUgKyAnPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkKCcjYmFja3VwLWJ0bicpLnNob3coKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHVybDogIi9jbWQvYmFja3VwLz9maWxlPSIgKyAkKHRoaXMpLmF0dHIoInJlbCIpLA0KICAgICAgICAgICAgICAgIHR5cGU6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICQodGhhdCkucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCLeb5slHBwAARwcAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cY21kXGxvZy5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUiPumUmeivr+aXpeW/lzwvaDE+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJsb2ctbGlzdCI+e3tyYW5nZSAuTG9nc319DQogICAgPGxpIGNsYXNzPSJsb2cgcmVsYXRpdmUiPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSBpbmxpbmUtYmxvY2siPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxwcmUgY2xhc3M9InRleHQiPnt7LlRleHR9fTwvcHJlPg0KICAgICAgICA8YSBjbGFzcz0icmVtb3ZlIGFic29sdXRlIiBocmVmPSIvY21kL2xvZ3MvP2ZpbGU9e3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZW1vdmUnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi56Gu6K6k5Yig6Zmk6K6w5b2VIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgIHVybDokdGhpcy5hdHRyKCJocmVmIiksDQogICAgICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcI3rBgWBkEAAAZBAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAdmlld1xhZG1pblxjbWRcbWVzc2FnZS5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUiPua2iOaBr+iusOW9lTwvaDE+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJtZXNzYWdlLWxpc3QiPnt7cmFuZ2UgLk1lc3NhZ2VzfX0NCiAgICA8bGkgY2xhc3M9Im1lc3NhZ2UgcmVsYXRpdmUiPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhIj57e0h0bWwgLkRhdGF9fTwvZGl2Pg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD5QSwcIyZjInUYBAABGAQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxjb21tZW50cy5odG1sPGRpdiBpZD0iY29tbWVudC1saXN0IiBjbGFzcz0iYWRtaW4gY29udGFpbmVyOTYwIj57e3JhbmdlIC5Db21tZW50c319DQogICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciIgaWQ9ImNvbW1lbnQte3suSWR9fSI+DQogICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIGMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLXRpbWUiPjxpIGNsYXNzPSJmYSBmYS1jbG9jay1vIj48L2k+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWVtYWlsIj57ey5FbWFpbH19PC9zcGFuPnt7aWYgLkdldENvbnRlbnR9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNudCI+QHt7LkdldENvbnRlbnQuVGl0bGV9fTwvc3Bhbj57e2Vsc2V9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNudCI+QOaXoOaViDwvc3Bhbj57e2VuZH19e3tpZiBuZSAuU3RhdHVzICJhcHByb3ZlZCJ9fQ0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLWNoZWNrIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLlrqHmoLgiPjxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSI+PC9pPuWuoeaguOS4rTwvYT57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWbnuWkjSI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLWRlbCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Yig6ZmkIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj57e2VuZH19DQogICAgPHVsIGlkPSJhcnRpY2xlLXBhZ2VyIiBjbGFzcz0icGFnZXIgY29udGFpbmVyOTYwIj57e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgICAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQogICAgPC91bD4NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9jb21tZW50cy8iIGNsYXNzPSJmb3JtIGNsZWFyIGxlZnQiIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IGxlZnQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIiBpZD0iY29tbWVudC1zdWJtaXQiPuWbnuWkjeivhOiuujwvYnV0dG9uPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIiBpZD0iY29tbWVudC1jbG9zZSI+5YWz6Zet5Zue5aSNPC9idXR0b24+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBpZD0iY29tbWVudC1wYXJlbnQiIG5hbWU9InBpZCIvPg0KICAgIDwvZm9ybT4NCjwvZGl2Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtZGVsJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWIoOmZpOivhOiuuuWwhuS9v+ebuOWFs+WGheWuueaXoOaViCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgIHVybDogIi9hZG1pbi9jb21tZW50cy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NvbW1lbnQtJyArIGlkKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWIoOmZpOWksei0pSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5jLWNoZWNrJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWuoeaguOWQjuatpOS9nOiAheWwhuS4jeWGjeagh+iusOWuoeaguCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogInB1dCIsDQogICAgICAgICAgICAgICAgICAgIHVybDogIi9hZG1pbi9jb21tZW50cy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NvbW1lbnQtJyArIGlkKS5maW5kKCIuYy1jaGVjayIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5a6h5qC45aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtcmVwbHknKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtJytpZCkuYXBwZW5kKCQoJyNjb21tZW50LWZvcm0nKS5kZXRhY2goKS5zaG93KCkpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKGlkKTsNCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Llm57lpI0iKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vY29tbWVudHMvIjsNCiAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlm57lpI3lpLHotKUiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgICQoJyNjb21tZW50LWNsb3NlJykub24oImNsaWNrIixmdW5jdGlvbigpew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtZm9ybScpLmhpZGUoKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LWNvbnRlbnQnKS52YWwoIiIpOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCECYCO/tDwAA7Q8AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAHZpZXdcYWRtaW5cZWRpdF9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIiB2YWx1ZT0ie3suQXJ0aWNsZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5BcnRpY2xlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suQXJ0aWNsZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+IiB2YWx1ZT0ie3suQXJ0aWNsZS5UYWdTdHJpbmd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoInt7aWYgZXEgLkFydGljbGUuU3RhdHVzICJwdWJsaXNoIn19IHNlbGVjdGVke3tlbmR9fT7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCJ7e2lmIGVxIC5BcnRpY2xlLlN0YXR1cyAiZHJhZnQifX0gc2VsZWN0ZWR7e2VuZH19PuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuQXJ0aWNsZS5Jc0NvbW1lbnQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgi5bey5L+d5a2Y77yM5Y675p+l55yL77yf6L+Y5piv57un57ut57yW6L6RIikpIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2FydGljbGVzLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhLnOnxbQ0AAG0NAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGFkbWluXGVkaXRfcGFnZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9Iumhtemdouagh+mimCIgdmFsdWU9Int7LlBhZ2UuVGl0bGV9fSIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPnt7SHRtbCAuUGFnZS5UZXh0fX08L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumhtemdoueahOWUr+S4gOmTvuaOpSIgdmFsdWU9Int7LlBhZ2UuU2x1Z319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuUGFnZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLlBhZ2UuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPue9rumhtumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ibGluayIgaWQ9ImlzLWxpbmsiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNMaW5rZWQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vcGFnZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCLZ4MjLjDQAA4w0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5cZmlsZXMuaHRtbDx1bCBpZD0iZmlsZXMtbGlzdCIgY2xhc3M9ImFkbWluIGNvbnRhaW5lcjk2MCBwYWdlciI+DQogICAgPGxpIGNsYXNzPSJmaWxlIiBpZD0iZmlsZXMtYnRuLWxpIj4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICA8L2xpPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlLXt7LklkfX0iPg0KICAgICAgICA8c3BhbiBjbGFzcz0idXBsb2FkLXRpbWUiPnt7RGF0ZUludDY0IC5VcGxvYWRUaW1lICJNTS5ERCJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InNpemUiPnt7RmlsZVNpemUgLlNpemV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii97ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSIve3suVXJsfX0iPjxpIGNsYXNzPSJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZSI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBmYWRlLW91dCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Yig6Zmk6ZmE5Lu2Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KICAgIHt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vZmlsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICBpbml0VXBsb2FkKCIjYXR0YWNoLXNob3ciKTsNCiAgICAgICAgJCgiLmRlbCIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLliKDpmaTpmYTku7bnm7jlhbPpk77mjqXkvJrlpLHmlYghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiL2FkbWluL2ZpbGVzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZmlsZS0nK2lkKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCGLFm/rsBgAA7AYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHZpZXdcYWRtaW5caG9tZS5odG1sPGRpdiBjbGFzcz0iYWRtaW4gY29udGFpbmVyIGNsZWFyIiBpZD0iZGFzaGJvYXJkIj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtNSBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0id2VsY29tZSI+DQogICAgICAgICAgICA8aDQ+V2VsY29tZTwvaDQ+DQogICAgICAgICAgICA8cD7mrKLov47lm57mnaXvvIwgPHN0cm9uZz57ey5Vc2VyLk5pY2t9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InF1aWNrLWxpbmsiPg0KICAgICAgICAgICAgPGg0PuW/q+mAn+mTvuaOpTwvaDQ+DQogICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5pKw5YaZ5paH56ugPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wYWdlL3dyaXRlLyI+5re75Yqg6aG16Z2iPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iPuafpeeci+WSjOWuoeaguOivhOiuujwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vc2V0dGluZy8iPuS/ruaUuemFjee9rjwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vcHJvZmlsZS8iPuabtOaWsOS4quS6uui1hOaWmTwvYT48L2xpPg0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTIgbGVmdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5Ij4NCiAgICAgICAgICAgIDxoND7mnIDmlrDmtLvliqg8L2g0Pnt7cmFuZ2UgLk1lc3NhZ2VzfX0NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1zZyByZWxhdGl2ZSB7ey5UeXBlfX0iPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YSI+e3tIdG1sIC5EYXRhfX08L2Rpdj4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0icmVhZCBhYnNvbHV0ZSIgaHJlZj0iL2FkbWluL21lc3NhZ2UvcmVhZD9pZD17ey5JZH19IiByZWw9Int7LklkfX0iPjxpIGNsYXNzPSJmYSBmYS1jaGVjayI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pnt7ZW5kfX17e2lmIGx0IChsZW4gLk1lc3NhZ2VzKSAxfX0NCiAgICAgICAgICAgIDxwPuayoeacieaWsOeahOa0u+WKqOS/oeaBrzwvcD4NCiAgICAgICAgICAgIHt7ZW5kfX0NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTQgcmlnaHQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cyI+DQogICAgICAgICAgICA8aDQ+5pWw5o2u57uf6K6hPC9oND4NCiAgICAgICAgICAgIDxwPuW3sue7j+WPkeW4g+aWh+eroCA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5BcnRpY2xlc319PC9zcGFuPiDnr4fvvIwNCiAgICAgICAgICAgIOmhtemdoiA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5QYWdlc319PC9zcGFuPiDkuKrvvIwgPGJyLz4NCiAgICAgICAgICAgIOaUtuWIsOivhOiuuiA8c3BhbiBjbGFzcz0ibGJsIGxibC1ibHVlIj57ey5TdGF0aXMuQ29tbWVudHN9fTwvc3Bhbj4g5qyh77yMDQogICAgICAgICAgICDkuIrkvKAgPHNwYW4gY2xhc3M9ImxibCBsYmwtZ3JlZW4iPnt7LlN0YXRpcy5GaWxlc319PC9zcGFuPiDkuKrpmYTku7Y8L3A+DQogICAgICAgICAgICA8cD7lvZPliY3nqIvluo/niYjmnKzvvJo8c3Ryb25nPnt7LlN0YXRpcy5WZXJzaW9ufX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJvZmZpY2UiPg0KICAgICAgICAgICAgPGg0PuWumOaWuea2iOaBrzwvaDQ+DQogICAgICAgICAgICA8cD7ov5jmsqHmnInmtojmga88L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgICAgJCgiLnJlYWQiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICQucG9zdCgkdGhpcy5hdHRyKCJocmVmIiksZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICR0aGlzLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgIH0pOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgfSk7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcI9JTc5iAJAAAgCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxsb2dpbi5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPueZu+W9lSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPg0KICAgICAgICAjbG9naW4tZm9ybXsNCiAgICAgICAgICAgIHdpZHRoOiAyODBweDsNCiAgICAgICAgICAgIG1hcmdpbjogODBweCBhdXRvOw0KICAgICAgICB9DQogICAgICAgICNsb2dpbi1mb3JtIGgxew0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsNCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxmb3JtIGlkPSJsb2dpbi1mb3JtIiBjbGFzcz0iZm9ybSBmb3JtLXZlcnRpY2FsIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0ibG9naW4tZm9ybSI+DQogICAgPGgxPueZu+W9lSAtIEZ4aC5HbzwvaDE+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0idXNlciI+55So5oi35ZCNPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQiIGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InVzZXIiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVzZXItaW52YWxpZCI+55So5oi35ZCN5Li65a2X5q+NK+aVsOWtl++8jOmVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9InBhc3N3b3JkIj7nlKjmiLflr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJwYXNzd29yZCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0icGFzc3dvcmQtaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7nmbsg5b2VPC9idXR0b24+DQogICAgPHNwYW4gY2xhc3M9InRpcCI+6buY6K6k6K6w5L2P55m76ZmGM+WkqTwvc3Bhbj4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2Nkbi5zdGF0aWNmaWxlLm9yZy9qcXVlcnkuZm9ybS8zLjQ2L2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvdmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigibG9naW4tZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoidXNlciIsInJ1bGVzIjoiYWxwaGFfbnVtZXJpY3xtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJwYXNzd29yZCIsInJ1bGVzIjoicmVxdWlyZWR8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI2xvZ2luLWZvcm0nKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLnmbvlvZXplJnor6/vvIzor7fmo4Dmn6XnlKjmiLfmiJblr4bnoIEiKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcI1uB4YpAIAACQCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxwYWdlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+DQogICAgPC9saT57e3JhbmdlIC5QYWdlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vcGFnZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk6aG16Z2i5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9wYWdlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIa+TbIVwGAABcBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxwYXNzd29yZC5odG1sPGZvcm0gaWQ9InBhc3N3b3JkIiBjbGFzcz0iZm9ybSBmb3JtLWFsaWduIGNsZWFyIiBhY3Rpb249IiMiIG5hbWU9InBhc3N3b3JkLWZvcm0iIG1ldGhvZD0icG9zdCI+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ib2xkIj7ml6flr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im9sZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im9sZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPumqjOivgeaXp+WvhueggTwvc3Bhbj48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ib2xkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im5ldyI+5paw5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJuZXciIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJuZXciIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuZXctaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0iY29uZmlybSI+56Gu6K6k5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImNvbmZpcm0taW52YWxpZCI+56Gu6K6k5a+G56CB5LiN5Yy56YWNPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInBhc3N3b3JkLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6Im9sZCIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmV3IiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJjb25maXJtIiwicnVsZXMiOiJyZXF1aXJlZHxtYXRjaGVzW25ld10ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwYXNzd29yZCcpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIbnEngU8HAABPBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xhZG1pblxwbHVnaW4uaHRtbDx1bCBpZD0icGx1Z2luLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPnt7cmFuZ2UgLlBsdWdpbnN9fQ0KICAgIDxsaSBjbGFzcz0iY2xlYXIiPnt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQgbGJsIGFjdGl2ZSBsYmwtZ3JlZW4iPiZuYnNwOzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGxlZnQiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24gbGVmdCI+e3suVmVyc2lvbn19PC9zcGFuPnt7aWYgLkhhc1NldHRpbmd9fQ0KICAgICAgICA8YSBjbGFzcz0ic2V0dGluZyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy97ey5LZXl9fS8iPumAiemhuTwvYT57e2VuZH19e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8YSBjbGFzcz0iZGVhY3RpdmF0ZSBsYmwgbGJsLXJlZCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5bCB5Y2wPC9hPnt7ZWxzZX19DQogICAgICAgIDxhIGNsYXNzPSJhY3RpdmF0ZSBsYmwgbGJsLWJsdWUgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPua/gOa0uzwvYT57e2VuZH19DQogICAgICAgIDxwIGNsYXNzPSJkZXNjIGxlZnQiPnt7LkRlc2N9fTwvcD4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIuZGVhY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJkZWFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoea/gOa0uyIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlsIHljbDlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgiLmFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoeWwgeWNsCIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLmv4DmtLvlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCE9wWaFiBgAAYgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAHZpZXdcYWRtaW5ccGx1Z2luX3NldHRpbmcuaHRtbDxmb3JtIGlkPSJwbHVnaW4tc2V0dGluZy1mb3JtIiBjbGFzcz0iZm9ybSBjb250YWluZXI5NjAgYWRtaW4iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICB7e0h0bWwgLkZvcm19fQ0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICAgICAgICAkKCcjcGx1Z2luLXNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIjoi5L+d5a2Y5aSx6LSlIik7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwg0K3PVOAEAADgBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHByb2ZpbGUuaHRtbDxmb3JtIGlkPSJwcm9maWxlIiBjbGFzcz0iYWRtaW4gZm9ybSBjbGVhciBmb3JtLWFsaWduIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0icHJvZmlsZS1mb3JtIj4NCiAgICA8ZGl2IGNsYXNzPSJhdmF0YXIgZ3JpZC0xLTQgbGVmdCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7ey5Vc2VyLkF2YXRhcn19IiBhbHQ9Int7LlVzZXIuTmlja319IiBjbGFzcz0iZmllbGQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBmaWVsZCBpbmxpbmUtYmxvY2siPuWktOWDj+eUsSA8YSBocmVmPSJodHRwOi8vZ3JhdmF0YXIuY29tLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm8tZm9sbG93Ij5HcmF2YXRhcjwvYT4g5o+Q5L6bPC9zcGFuPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tcmVkIGlubGluZS1ibG9jayIgaHJlZj0iL2FkbWluL3Bhc3N3b3JkLyI+5L+u5pS55a+G56CBPC9hPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaW5mbyByaWdodCBncmlkLTMtNCI+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nmbvlvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiB2YWx1ZT0ie3suVXNlci5OYW1lfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+55m75b2V55qE55So5oi35ZCNPC9zcGFuPjxici8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ibmljayI+5pi156ewPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ibmljayIgdHlwZT0idGV4dCIgbmFtZT0ibmljayIgdmFsdWU9Int7LlVzZXIuTmlja319IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuaYvuekuuWcqOWJjeWPsOeahOensOWRvDwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5pY2staW52YWxpZCI+5pi156ew6ZW/5bqmMi0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZW1haWwiPumCrueusTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImVtYWlsIiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHZhbHVlPSJ7ey5Vc2VyLkVtYWlsfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6IGU57O76YKu566x77yM5Y2B5YiG6YeN6KaB77yBPC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iZW1haWwtaW52YWxpZCI+6YKu566x5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1cmwiPue9keWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVybCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHZhbHVlPSJ7ey5Vc2VyLlVybH19IiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1cmwtaW52YWxpZCI+572R5Z2A5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBiaW8iIG5hbWU9ImJpbyIgaWQ9ImJpbyI+e3suVXNlci5CaW99fTwvdGV4dGFyZWE+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwcm9maWxlLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmljayIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiZW1haWwiLCJydWxlcyI6InZhbGlkX2VtYWlsIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJ1cmwiLCJydWxlcyI6InZhbGlkX3VybCJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Byb2ZpbGUnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCB+PoV8CDAAAAgwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cc2V0dGluZy5odG1sPHVsIGlkPSJzZXR0aW5nLW5hdiIgY2xhc3M9ImNvbnRhaW5lcjk2MCB0ZXh0LWNlbnRlciI+DQogICAgPGxpPjxhIGhyZWY9IiNnZW5lcmFsIj7ln7rmnKw8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iI2N1c3RvbSI+6Ieq5a6a5LmJPC9hPjwvbGk+DQo8L3VsPg0KPGRpdiBpZD0ic2V0dGluZy1wYW5lbHMiIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybSBmb3JtLWFsaWduIHNldHRpbmctcGFuZWwiIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXVybCI+56uZ54K55Zyw5Z2APC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS11cmwiIGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0ic2l0ZV91cmwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV91cmxgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXRpdGxlIj7nq5nngrnkuLvmoIfpopg8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3RpdGxlIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXN1Yi10aXRsZSI+56uZ54K55Ymv5qCH6aKYPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1zdWItdGl0bGUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfc3ViX3RpdGxlIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfc3ViX3RpdGxlYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1rZXl3b3JkcyI+TWV0YeWFs+mUruWtlzwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUta2V5d29yZHMiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfa2V5d29yZHMiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLWRlc2MiPk1ldGHnq5nngrnku4vnu408L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLWRlc2MiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfZGVzY3JpcHRpb24iIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfZGVzY3JpcHRpb25gfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJhcnRpY2xlLXNpemUiPuWNlemhteaWh+eroOWIl+ihqOaVsDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImFydGljbGUtc2l6ZSIgY2xhc3M9ImlwdCIgdHlwZT0ibnVtYmVyIiBuYW1lPSJhcnRpY2xlX3NpemUiIHZhbHVlPSJ7e1NldHRpbmcgYGFydGljbGVfc2l6ZWB9fSIgbWF4PSIxMCIgbWluPSIzIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS10aGVtZSI+5Li76aKY55uu5b2V5ZCNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aGVtZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aGVtZSIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV90aGVtZWB9fSIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBibG9jayI+5Li76aKY5Y2z5oyH5ZCR55qE5qih5p2/55uu5b2V77yM5YW35L2T5YaF5a656K+35Y+C6ICDIGRlZmF1bHQg55uu5b2V77yI5Y2zIGRlZmF1bHQg5Li76aKY77yJPC9zcGFuPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2l0ZV90aGVtZV9kZWYiIHZhbHVlPSJkZWZhdWx0Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZ28tbWFya2Rvd24iPkdv5riy5p+TTWFya2Rvd248L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJnby1tYXJrZG93biIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duIiB2YWx1ZT0ie3tTZXR0aW5nIGBlbmFibGVfZ29fbWFya2Rvd25gfX0iLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPum7mOiupOWFs+mXre+8jOS9v+eUqOWJjeerr21hcmtlZC5qc+a4suafk++8jOWhq3RydWXml7blvIDlkK88L3NwYW4+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlbmFibGVfZ29fbWFya2Rvd25fZGVmIiB2YWx1ZT0iZmFsc2UiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZg8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZm9ybT4NCiAgICA8Zm9ybSBpZD0ic2V0dGluZy1jdXN0b20tZm9ybSIgY2xhc3M9InNldHRpbmctZm9ybSBmb3JtIGZvcm0tYWxpZ24gc2V0dGluZy1wYW5lbCIgYWN0aW9uPSIvYWRtaW4vc2V0dGluZy9jdXN0b20vIiBtZXRob2Q9InBvc3QiPnt7cmFuZ2UgJGssJHYgOj0gLkN1c3RvbX19DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IGtleSIgdHlwZT0idGV4dCIgbmFtZT0ia2V5IiB2YWx1ZT0ie3ska319Ii8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHZhbHVlPSJ7eyR2fX0iLz4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgPC9wPnt7ZW5kfX0NCiAgICAgICAgPHA+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmDwvYnV0dG9uPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtZ3JlZW4gYWRkIiBocmVmPSIjIj7mt7vliqDkuIDpobk8L2E+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kvb/nlKjlh73mlbDoh6rlrprkuYnphY3nva7vvIzpnIDopoHliqDliY3nvIAiY18i77yM5aaCR2V0U2V0dGluZygiY19rZXkiKTwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjdXN0b20taXRlbSI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSLlrZfmrrXlkI0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSLlrZfmrrXlgLwiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvc2NyaXB0Pg0KICAgIDwvZm9ybT4NCiAgICA8ZGl2IGNsYXNzPSJzZXR0aW5nLXBhbmVsIj4zMzM8L2Rpdj4NCjwvZGl2Pg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnl0b29scy8xLjIuNy9qcXVlcnkudG9vbHMubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNzZXR0aW5nLW5hdicpLnRhYnMoIi5zZXR0aW5nLXBhbmVsIik7DQogICAgICAgICQoJy5zZXR0aW5nLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIiA6IGpzb24ubXNnKTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5hZGQnKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnI3NldHRpbmctY3VzdG9tLWZvcm0nKS5wcmVwZW5kKCQoIiNjdXN0b20taXRlbSIpLmh0bWwoKSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuZGVsJykub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGlmKGNvbmZpcm0oIuimgeWIoOmZpOi/memhue+8nyIpKXsNCiAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcI9ZoiyucRAADnEQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xhZG1pblx3cml0ZV9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ5paH56ug5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5qCH562+PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJ0YWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InRhZyIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOagh+etviIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoIj7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCI+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgIDwvcD4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIvsp0fCEMAAAhDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblx3cml0ZV9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ6aG16Z2i5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL3BhZ2VzLyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCHJbVWl8DAAAfAwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHZpZXdcYWRtaW4ubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPnt7LlRpdGxlfX0gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvYWRtaW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgICA8aDMgY2xhc3M9ImxvZ28gbGVmdCI+RnhoLkdvIC0gPHNwYW4+e3suVGl0bGV9fTwvc3Bhbj48L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJuYXYgbGVmdCByZWxhdGl2ZSI+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGFzaGJvYXJkIGxlZnQiIGhyZWY9Ii9hZG1pbi8iPjxpIGNsYXNzPSJmYSBmYS1kYXNoYm9hcmQiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iYXJ0aWNsZSBsZWZ0IiBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvIiB0aXRsZT0i5paH56ugIj48aSBjbGFzcz0iZmEgZmEtY29weSI+PC9pPjwvYT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGFnZXMgbGVmdCIgaHJlZj0iL2FkbWluL3BhZ2VzLyIgdGl0bGU9IueLrOeri+mhtemdoiI+PGkgY2xhc3M9ImZhIGZhLXBhc3RlIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImNvbW1lbnRzIGxlZnQiIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iIHRpdGxlPSLor4TorroiPjxpIGNsYXNzPSJmYSBmYS1jb21tZW50cyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJmaWxlcyBsZWZ0IiBocmVmPSIvYWRtaW4vZmlsZXMvIiB0aXRsZT0i5aqS5L2T5paH5Lu2Ij48aSBjbGFzcz0iZmEgZmEtaW5ib3giPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGx1Z2lucyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy8iIHRpdGxlPSLmj5Lku7YiPjxpIGNsYXNzPSJmYSBmYS1nZWFycyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyIgdGl0bGU9Iuiuvue9riI+PGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPjwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxhIGNsYXNzPSJvdXQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii9sb2dvdXQvIiB0aXRsZT0i6YCA5Ye6Ij48aSBjbGFzcz0iZmEgZmEtcG93ZXItb2ZmIGZhLWxnIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0icHJvZmlsZSBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIiB0aXRsZT0i5oiRIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImZyb250IG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Iuafpeeci+e9keermSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+DQogICAgPC9kaXY+DQo8L2Rpdj4NCntAQ29udGVudH0NCjxkaXYgaWQ9ImZvb3RlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgIDxwIGNsYXNzPSJsaW5rcyB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgIDxhIGNsYXNzPSJzdGF0IiBocmVmPSIvY21kL21lc3NhZ2UvIj7mtojmga88L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJiYWNrdXAiIGhyZWY9Ii9jbWQvYmFja3VwLyI+5aSH5Lu9PC9hPg0KICAgICAgICAgICA8YSBjbGFzcz0iZXJyIiBocmVmPSIvY21kL2xvZ3MvIj7ml6Xlv5c8L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJzeXMiIGhyZWY9IiMiPuezu+e7nzwvYT4NCiAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJjcCB0ZXh0LWNlbnRlciI+UHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9wPg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCNn4qlTBCAAAwQgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAADwAAAHZpZXdcY21kLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT57ey5UaXRsZX19IC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NtZC5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5IGNsYXNzPSJjbWQiPg0Ke0BDb250ZW50fQ0KPHAgY2xhc3M9ImJhY2siPjxhIGhyZWY9ImphdmFzY3JpcHQ6aGlzdG9yeS5iYWNrKCkiPkJhY2s8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwgKfcgAzgEAAM4BAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAB2aWV3XGRlZmF1bHQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcZGVmYXVsdFxhcnRpY2xlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIge3suQXJ0aWNsZS5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj4NCiAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImF1dGhvciBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+e3suVXNlci5OaWNrfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj57e2lmIC5UYWdTdHJpbmd9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS10YWdzIj48L2k+e3suVGFnU3RyaW5nfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZpZXdzIGlubGluZS1ibG9jayByaWdodCI+6ZiF6K+7Jm5ic3A7Jm5ic3A7PHNwYW4+e3suSGl0c319PC9zcGFuPiZuYnNwOyZuYnNwO+asoTwvc3Bhbj4NCiAgICAgICAgPC9wPnt7ZW5kfX0NCiAgICA8L2FydGljbGU+DQogICAge3tIdG1sIC5Db21tZW50SHRtbH19DQo8L2Rpdj5QSwcIwLg0iLcDAAC3AwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xkZWZhdWx0XGNvbW1lbnQuaHRtbDxkaXYgaWQ9ImNvbW1lbnQiPg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiBsZWZ0Ij4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIGMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj57e2VuZH19e3tlbmR9fQ0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtc2hvdyIgY2xhc3M9InRleHQtY2VudGVyIj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gZW5hYmxlIj7lj5Hooajor4Torro8L2J1dHRvbj57e2Vsc2V9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXJlZCI+5pys5paH5YWz6Zet5LqG6K+E6K66PC9idXR0b24+e3tlbmR9fQ0KICAgIDwvZGl2Pnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBjbGFzcz0iaGlkZSBjbGVhciB0ZXh0LWNlbnRlciBmb3JtIiBhY3Rpb249Ii9jb21tZW50L3t7LkNvbnRlbnQuSWR9fS8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mbyBsZWZ0IHRleHQtcmlnaHQiPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0gYy1hdmF0YXItZmllbGQiPg0KICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIG51bGwiIHNyYz0iL3N0YXRpYy9pbWcvc2l0ZS5wbmciIGFsdD0iIiBpZD0iY29tbWVudC1hdmF0YXIiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibm90LW1lIGJsb2NrIiBocmVmPSIjIj7kuI3mmK/miJE/PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvLWZpZWxkcyBoaWRlIj4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuensOWRvCIgaWQ9ImNvbW1lbnQtYXV0aG9yIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpgq7nrrEiIGlkPSJjb21tZW50LWVtYWlsIi8+IDwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0idXJsIiBwbGFjZWhvbGRlcj0i572R5Z2AIiBpZD0iY29tbWVudC11cmwiLz48L3A+DQogICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjb21tZW50LXBhcmVudCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgbmFtZT0icGlkIi8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtY29udGVudCB0ZXh0LWxlZnQgcmlnaHQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGNhbmNlbC1yZXBseSIgdHlwZT0iYnV0dG9uIj7lj5bmtojlm57lpI08L2J1dHRvbj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9mb3JtPnt7ZW5kfX0NCiAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjb21tZW50LXRwbCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSIiIGFsdD0iIi8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSBjLWF1dGhvciIgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPk5vdzwvc3Bhbj4NCiAgICAg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a2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3Mvc3R5bGUuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRpdGxlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0gLSBSU1MgMi4wIiBocmVmPSIvcnNzLnhtbCIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGhlYWRlciBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7e1NldHRpbmcgYGNfaG9tZV9hdmF0YXJgfX0iIGFsdD0ic2l0ZSIgaWQ9ImhlYWRlci1pbWciLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCI+PGEgaHJlZj0iLyI+e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC9hPjwvaDE+DQogICAgICAgIDxoNCBpZD0iaGVhZGVyLXN1YiI+e3tTZXR0aW5nICJzaXRlX3N1Yl90aXRsZSJ9fTwvaDQ+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxuYXYgaWQ9Im5hdiIgY2xhc3M9ImNsZWFyIHRleHQtY2VudGVyIj4NCiAgICA8dWw+DQogICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvIj7mlofnq6A8L2E+PC9saT4NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii9hYm91dC1tZS5odG1sIj7lhbPkuo48L2E+PC9saT4NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii9mcmllbmRzLmh0bWwiPuWlveWPizwvYT48L2xpPg0KICAgIDwvdWw+DQo8L25hdj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxwPg0KICAgICAgICA8YSBjbGFzcz0id2VpYm8iIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfd2VpYm9gfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtd2VpYm8iPjwvaT5XZWlibzwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImdpdCIgaHJlZj0ie3tTZXR0aW5nIGBjX2Zvb3Rlcl9naXRodWJgfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZ2l0aHViIj48L2k+R2l0SHViPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZW1haWwiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZW1haWxgfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZW52ZWxvcGUiPjwvaT5FbWFpbDwvYT4NCiAgICAgICAgPGEgY2xhc3M9InJzcyIgaHJlZj0iL3Jzcy54bWwiIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtcnNzIj48L2k+UlNTPC9hPnt7U2V0dGluZyBgY19mb290ZXJfZ2FgIHwgSHRtbH19DQogICAgPC9wPg0KICAgIDxzcGFuPkdvIMKpIDIwMTQgQWxsIHJpZ2h0cyByZXNlcnZlZC4gUHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9zcGFuPg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIlQW0/JQJAACUCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xkZWZhdWx0XGluZGV4Lmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5JZH19Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBsZWZ0IHRleHQtY2VudGVyIj57e2lmIGd0IC5Db21tZW50TnVtIDB9fQ0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PHN0cm9uZz57ey5Db21tZW50TnVtfX0g4oSDPC9zdHJvbmc+PC9hPjwvcD57e2VuZH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyI+PGkgY2xhc3M9ImZhIGZhLWV5ZSI+PC9pPjxzdHJvbmc+e3suSGl0c319IOKEiTwvc3Ryb25nPjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyYXkgdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT48c3Ryb25nPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1haW4iPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuU3VtbWFyeX19PC9zZWN0aW9uPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0aG9yIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT57ey5Vc2VyLk5pY2t9fTwvc3Bhbj57e2VuZH19e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXRhZ3MiPjwvaT57ey5UYWdTdHJpbmd9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlubGluZS1ibG9jayByZWFkIHJpZ2h0IiBocmVmPSJ7ey5MaW5rfX0iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT7nu6fnu63pmIXor7s8L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvYXJ0aWNsZT57e2VuZH19DQogICAgPGRpdiBjbGFzcz0icGFnZXIgdGV4dC1jZW50ZXIiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxhIGhyZWY9Ii9wL3t7Ln19LyIgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFn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LklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9ImMtdGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NIOaciCBERCDml6UgSEgg5pe2IG1tIOWIhiJ9fTwvc3Bhbj48L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEgY2xlYXIiPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSBsYmwgcmlnaHQiIGhyZWY9IiMiIHJlbD0iIj7lm57lpI08L2E+DQogICAgICAgICAgICAgICAgICAgIDxwPjxhIGNsYXNzPSJjLWF1dGhvciAiIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj5Ob3c8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jaGVjayI+5a6h5qC45Lit77yM5Yi35paw5ZCO6ZqQ6JePPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+PC9zZWN0aW9uPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9zY3JpcHQ+DQo8L2Rpdj5QSwcIaaBHopUNAACVDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAdmlld1xsaW5nXGVycm9yL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGxpbmdcZXJyb3JcZXJyb3IuaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7plJnor6/mj5DnpLo8L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT5ib2R5e21hcmdpbjogNDBweCAxMDBweH08L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8aDI+5oKo6K6/6Zeu55qE6aG16Z2i5q2j5Zyo5omT556M552hPC9oMj48YnIvPg0KPHA+56iL5bqP5ZGY5q2j5Zyo5Yqq5Yqb5ZSk6YaS77yM6K+356iN5YCZ6K6/6ZeuLi4uPC9wPg0KPHA+PGEgaHJlZj0iLyI+6L+U5Zue6aaW6aG1PC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIE4RGUngBAAB4AQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xsaW5nXGVycm9yXG5vdGZvdW5kLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouemu+WutuWHuui1sDwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWbm+WkhOWvu+aJvu+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCJD51MB1AQAAdQEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcbGluZ1xob21lLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvbGluZy5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIgY2xhc3M9ImxlZnQiLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCIgY2xhc3M9ImxlZnQiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiIGNsYXNzPSJsZWZ0Ij57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4NCiAgICAgICAgPG5hdiBpZD0ibmF2IiBjbGFzcz0icmlnaHQiPg0KICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvIj7mlofnq6A8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iL2Fib3V0LW1lLmh0bWwiPuWFs+S6jjwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvZnJpZW5kcy5odG1sIj7lpb3lj4s8L2E+PC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvbmF2Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgY2xlYXIiPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCI+R28gwqkgMjAxNCBBbGwgcmlnaHRzIHJlc2VydmVkLjwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InJpZ2h0Ij5Qcm91ZGx5IHB1Ymxpc2hlZCB3aXRoIEZ4aC5Hby48L3NwYW4+DQogICAgPC9kaXY+DQogICAgPGEgaWQ9ImdvLXRvcCIgaHJlZj0iIyIgY2xhc3M9ImxibCBoaWRlIGxibC1ibHVlIiB0aXRsZT0i5Zue5Yiw6aG26YOoIj48aSBjbGFzcz0iZmEgZmEtYXJyb3ctdXAgZmEtbGciPjwvaT48L2E+DQogICAge3tTZXR0aW5nIGBjX2Zvb3Rlcl9nYWAgfCBIdG1sfX0NCjwvZm9vdGVyPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvaG9tZS5qcyI+PC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+DQp7e0h0bWwgIjwhLS0gdGhhbmtzIGZvciB0aGVtZSBMaW5nb25iZXJyeShodHRwOi8vd3d3LmFuZGVyc25vcmVuLnNlLykgZm9yIFdvcmRQcmVzcy0tPiJ9fVBLBwhDfb362QgAANkIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAAB2aWV3XGxpbmdcaW5kZXguaHRtbDxkaXYgaWQ9ImFydGljbGUtY29udGFpbmVyIiBjbGFzcz0iY2xlYXIiPnt7cmFuZ2UgLkFydGljbGVzfX0NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIge3suU3RhdHVzfX0iIGlkPSJhcnRpY2xlLXt7LklkfX0iPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGxlZnQgdGV4dC1jZW50ZXIgcmVsYXRpdmUiPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+e3suQ29tbWVudE51bX19PC9hPjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIGFic29sdXRlIj57ey5IaXRzfX08L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIHJlbGF0aXZlIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJ0aW1lLWluZm8iPnt7aWYgLlVzZXJ9fTxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDt7e2VuZH195Y+R6KGo5LqOJm5ic3A7Jm5ic3A7Jm5ic3A7e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIllZWVkg5bm0IE1NIOaciCBERCDml6UifX08L3A+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5TdW1tYXJ5fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPuagh+etvu+8mnt7LlRhZ1N0cmluZ319PC9zcGFuPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJpbmxpbmUtYmxvY2sgcmVhZCByaWdodCIgaHJlZj0ie3suTGlua319Ij7nu6fnu63pmIXor7s8L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvYXJ0aWNsZT57e2VuZH19DQogICAgPGRpdiBjbGFzcz0icGFnZXIgdGV4dC1jZW50ZXIiIGlkPSJhcnRpY2xlLXBhZ2VyIj4NCiAgICAgICAge3tpZiAuUGFnZXIuSXNOZXh0fX08YSBocmVmPSIvcC97ey5QYWdlci5OZXh0fX0vIiBjbGFzcz0iaXRlbSBsZWZ0Ij7ovoPml6fnmoTmlofnq6A8L2E+e3tlbmR9fQ0KICAgICAgICB7e2lmIC5QYWdlci5Jc1ByZXZ9fTxhIGhyZWY9Ii9wL3t7LlBhZ2VyLlByZXZ9fS8iIGNsYXNzPSJpdGVtIHJpZ2h0Ij7ovoPmlrDnmoTmlofnq6A8L2E+e3tlbmR9fQ0KICAgIDwvZGl2Pg0KPC9kaXY+UEsHCItMCDEGBQAABgUAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHZpZXdcbGluZ1xwYWdlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIgYXJ0aWNsZS1zaW5nbGUgcmVsYXRpdmUiIGlkPSJhcnRpY2xlLXt7LlBhZ2UuSWR9fSI+e3t3aXRoIC5QYWdlfX0NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBhYnNvbHV0ZSB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyBhYnNvbHV0ZSI+e3suSGl0c319PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+DQogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgICAgICA8cCBjbGFzcz0idGltZS1pbmZvIj57e2lmIC5Vc2VyfX08c3Ryb25nPnt7LlVzZXIuTmlja319PC9zdHJvbmc+Jm5ic3A7Jm5ic3A7Jm5ic3A7e3tlbmR9feWPkeihqOS6jiZuYnNwOyZuYnNwOyZuYnNwO3t7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJZWVlZIOW5tCBNTSDmnIggREQg5pelIn19PC9wPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPg0KICAgICAgICA8L2Rpdj57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KPC9kaXY+UEsHCIe1zj6zAgAAswIAAFBLAQIUABQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAABzdGF0aWMvUEsBAhQAFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAAANQAAAHN0YXRpY1xjc3MvUEsBAhQAFAAIAAAAAAAAAM96VieWMAAAljAAABQAAAAAAAAAAAAAAAAAbgAAAHN0YXRpY1xjc3NcYWRtaW4uY3NzUEsBAhQAFAAIAAAAAAAAANI3xBsvGgAALxoAABIAAAAAAAAAAAAAAAAARjEAAHN0YXRpY1xjc3NcY21kLmNzc1BLAQIUABQACAAAAAAAAAAjAzWCTiAAAE4gAAAZAAAAAAAAAAAAAAAAALVLAABzdGF0aWNcY3NzXGNvZGVtaXJyb3IuY3NzUEsBAhQAFAAIAAAAAAAAAHu8/YwmFAAAJhQAABUAAAAAAAAAAAAAAAAASmwAAHN0YXRpY1xjc3NcY29tbW9uLmNzc1BLAQIUABQACAAAAAAAAADDaOPeXQkAAF0JAAAYAAAAAAAAAAAAAAAAALOAAABzdGF0aWNcY3NzXGhpZ2hsaWdodC5jc3NQSwECFAAUAAgAAAAAAAAAz8Pq1pwqAACcKgAAEwAAAAAAAAAAAAAAAABWigAAc3RhdGljXGNzc1xsaW5nLmNzc1BLAQIUABQACAAAAAAAAACqeuwujSgAAI0oAAAUAAAAAAAAAAAAAAAAADO1AABzdGF0aWNcY3NzXHN0eWxlLmNzc1BLAQIUABQACAAAAAAAAACpcxPwvhAAAL4QAAASAAAAAAAAAAAAAAAAAALeAABzdGF0aWNcZmF2aWNvbi5pY29QSwECFAAUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAA7wAAc3RhdGljXGltZy9QSwECFAAUAAgAAAAAAAAAm6PU7/MrAADzKwAAEQAAAAAAAAAAAAAAAAA57wAAc3RhdGljXGltZ1xiZy5wbmdQSwECFAAUAAgAAAAAAAAAQETjPPQQAAD0EAAAFQAAAAAAAAAAAAAAAABrGwEAc3RhdGljXGltZ1xoZWFkZXIuZ2lmUEsBAhQAFAAIAAAAAAAAAB8jjze7FwAAuxcAABMAAAAAAAAAAAAAAAAAoiwBAHN0YXRpY1xpbWdcc2l0ZS5wbmdQSwECFAAUAAgAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAACeRAEAc3RhdGljXGpzL1BLAQIUABQACAAAAAAAAAAe4R5ydRIAAHUSAAARAAAAAAAAAAAAAAAAANZEAQBzdGF0aWNcanNcaG9tZS5qc1BLAQIUABQACAAAAAAAAACIiRf79gQAAPYEAAATAAAAAAAAAAAAAAAAAIpXAQBzdGF0aWNcanNcdXBsb2FkLmpzUEsBAhQAFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAAAwVwBAHN0YXRpY1xsaWIvUEsBAhQAFAAIAAAAAAAAAJPWD12IMgAAiDIAACEAAAAAAAAAAAAAAAAA+lwBAHN0YXRpY1xsaWJcY29kZW1pcnJvci1tb2RlLm1pbi5qc1BLAQIUABQACAAAAAAAAADGXJGwv68BAL+vAQAcAAAAAAAAAAAAAAAAANGPAQBzdGF0aWNcbGliXGNvZGVtaXJyb3IubWluLmpzUEsBAhQAFAAIAAAAAAAAABVZbU72dQAA9nUAABsAAAAAAAAAAAAAAAAA2j8DAHN0YXRpY1xsaWJcaGlnaGxpZ2h0Lm1pbi5qc1BLAQIUABQACAAAAAAAAAB2EBABoz4AAKM+AAAdAAAAAAAAAAAAAAAAABm2AwBzdGF0aWNcbGliXGpxdWVyeS5mb3JtLm1pbi5qc1BLAQIUABQACAAAAAAAAABC+kxqUzkAAFM5AAAYAAAAAAAAAAAAAAAAAAf1AwBzdGF0aWNcbGliXG1hcmtlZC5taW4uanNQSwECFAAUAAgAAAAAAAAAZowfxDMYAAAzGAAAGgAAAAAAAAAAAAAAAACgLgQAc3RhdGljXGxpYlx2YWxpZGF0ZS5taW4uanNQSwECFAAUAAgAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAbRwQAdmlldy9QSwECFAAUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAABORwQAdmlld1xhZG1pbi9QSwECFAAUAAgAAAAAAAAAlnRyEm4GAABuBgAAGAAAAAAAAAAAAAAAAACHRwQAdmlld1xhZG1pblxhcnRpY2xlcy5odG1sUEsBAhQAFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAO04EAHZpZXdcYWRtaW5cY21kL1BLAQIUABQACAAAAAAAAAC3m+bJRwcAAEcHAAAaAAAAAAAAAAAAAAAAAHhOBAB2aWV3XGFkbWluXGNtZFxiYWNrdXAuaHRtbFBLAQIUABQACAAAAAAAAADesGBYGQQAABkEAAAXAAAAAAAAAAAAAAAAAAdWBAB2aWV3XGFkbWluXGNtZFxsb2cuaHRtbFBLAQIUABQACAAAAAAAAADJmMidRgEAAEYBAAAbAAAAAAAAAAAAAAAAAGVaBAB2aWV3XGFkbWluXGNtZFxtZXNzYWdlLmh0bWxQSwECFAAUAAgAAAAAAAAAQJgI7+0PAADtDwAAGAAAAAAAAAAAAAAAAAD0WwQAdmlld1xhZG1pblxjb21tZW50cy5odG1sUEsBAhQAFAAIAAAAAAAAAEuc6fFtDQAAbQ0AABwAAAAAAAAAAAAAAAAAJ2wEAHZpZXdcYWRtaW5cZWRpdF9hcnRpY2xlLmh0bWxQSwECFAAUAAgAAAAAAAAAtngyMuMNAADjDQAAGQAAAAAAAAAAAAAAAADeeQQAdmlld1xhZG1pblxlZGl0X3BhZ2UuaHRtbFBLAQIUABQACAAAAAAAAABixZv67AYAAOwGAAAVAAAAAAAAAAAAAAAAAAiIBAB2aWV3XGFkbWluXGZpbGVzLmh0bWxQSwECFAAUAAgAAAAAAAAA9JTc5iAJAAAgCQAAFAAAAAAAAAAAAAAAAAA3jwQAdmlld1xhZG1pblxob21lLmh0bWxQSwECFAAUAAgAAAAAAAAA1uB4YpAIAACQCAAAFQAAAAAAAAAAAAAAAACZmAQAdmlld1xhZG1pblxsb2dpbi5odG1sUEsBAhQAFAAIAAAAAAAAAGvk2yFcBgAAXAYAABUAAAAAAAAAAAAAAAAAbKEEAHZpZXdcYWRtaW5ccGFnZXMuaHRtbFBLAQIUABQACAAAAAAAAABucSeBTwcAAE8HAAAYAAAAAAAAAAAAAAAAAAuoBAB2aWV3XGFkbWluXHBhc3N3b3JkLmh0bWxQSwECFAAUAAgAAAAAAAAAT3BZoWIGAABiBgAAFgAAAAAAAAAAAAAAAACgrwQAdmlld1xhZG1pblxwbHVnaW4uaHRtbFBLAQIUABQACAAAAAAAAAA0K3PVOAEAADgBAAAeAAAAAAAAAAAAAAAAAEa2BAB2aWV3XGFkbWluXHBsdWdpbl9zZXR0aW5nLmh0bWxQSwECFAAUAAgAAAAAAAAAH4+hXwIMAAACDAAAFwAAAAAAAAAAAAAAAADKtwQAdmlld1xhZG1pblxwcm9maWxlLmh0bWxQSwECFAAUAAgAAAAAAAAA9ZoiyucRAADnEQAAFwAAAAAAAAAAAAAAAAARxAQAdmlld1xhZG1pblxzZXR0aW5nLmh0bWxQSwECFAAUAAgAAAAAAAAAvsp0fCEMAAAhDAAAHQAAAAAAAAAAAAAAAAA91gQAdmlld1xhZG1pblx3cml0ZV9hcnRpY2xlLmh0bWxQSwECFAAUAAgAAAAAAAAAcltVaXwMAAB8DAAAGgAAAAAAAAAAAAAAAACp4gQAdmlld1xhZG1pblx3cml0ZV9wYWdlLmh0bWxQSwECFAAUAAgAAAAAAAAA2fiqVMEIAADBCAAAEQAAAAAAAAAAAAAAAABt7wQAdmlld1xhZG1pbi5sYXlvdXRQSwECFAAUAAgAAAAAAAAACn3IAM4BAADOAQAADwAAAAAAAAAAAAAAAABt+AQAdmlld1xjbWQubGF5b3V0UEsBAhQAFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAePoEAHZpZXdcZGVmYXVsdC9QSwECFAAUAAgAAAAAAAAAwLg0iLcDAAC3AwAAGQAAAAAAAAAAAAAAAACz+gQAdmlld1xkZWZhdWx0XGFydGljbGUuaHRtbFBLAQIUABQACAAAAAAAAABvrm9U4gwAAOIMAAAZAAAAAAAAAAAAAAAAALH+BAB2aWV3XGRlZmF1bHRcY29tbWVudC5odG1sUEsBAhQAFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAAAAAAA2gsFAHZpZXdcZGVmYXVsdFxlcnJvci9QSwECFAAUAAgAAAAAAAAAE4RGUngBAAB4AQAAHQAAAAAAAAAAAAAAAAAbDAUAdmlld1xkZWZhdWx0XGVycm9yXGVycm9yLmh0bWxQSwECFAAUAAgAAAAAAAAAkPnUwHUBAAB1AQAAIAAAAAAAAAAAAAAAAADeDQUAdmlld1xkZWZhdWx0XGVycm9yXG5vdGZvdW5kLmh0bWxQSwECFAAUAAgAAAAAAAAAlQW0/JQJAACUCQAAGAAAAAAAAAAAAAAAAAChDwUAdmlld1xkZWZhdWx0XGhvbWUubGF5b3V0UEsBAhQAFAAIAAAAAAAAAKkugGjnBQAA5wUAABcAAAAAAAAAAAAAAAAAexkFAHZpZXdcZGVmYXVsdFxpbmRleC5odG1sUEsBAhQAFAAIAAAAAAAAAFwAzt0EAwAABAMAABYAAAAAAAAAAAAAAAAApx8FAHZpZXdcZGVmYXVsdFxwYWdlLmh0bWxQSwECFAAUAAgAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAADvIgUAdmlld1xsaW5nL1BLAQIUABQACAAAAAAAAAAawp19bQMAAG0DAAAWAAAAAAAAAAAAAAAAACcjBQB2aWV3XGxpbmdcYXJ0aWNsZS5odG1sUEsBAhQAFAAIAAAAAAAAAGmgR6KVDQAAlQ0AABYAAAAAAAAAAAAAAAAA2CYFAHZpZXdcbGluZ1xjb21tZW50Lmh0bWxQSwECFAAUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAACxNAUAdmlld1xsaW5nXGVycm9yL1BLAQIUABQACAAAAAAAAAAThEZSeAEAAHgBAAAaAAAAAAAAAAAAAAAAAO80BQB2aWV3XGxpbmdcZXJyb3JcZXJyb3IuaHRtbFBLAQIUABQACAAAAAAAAACQ+dTAdQEAAHUBAAAdAAAAAAAAAAAAAAAAAK82BQB2aWV3XGxpbmdcZXJyb3Jcbm90Zm91bmQuaHRtbFBLAQIUABQACAAAAAAAAABDfb362QgAANkIAAAVAAAAAAAAAAAAAAAAAG84BQB2aWV3XGxpbmdcaG9tZS5sYXlvdXRQSwECFAAUAAgAAAAAAAAAi0wIMQYFAAAGBQAAFAAAAAAAAAAAAAAAAACLQQUAdmlld1xsaW5nXGluZGV4Lmh0bWxQSwECFAAUAAgAAAAAAAAAh7XOPrMCAACzAgAAEwAAAAAAAAAAAAAAAADTRgUAdmlld1xsaW5nXHBhZ2UuaHRtbFBLBQYAAAAAQQBBAAoRAADHSQUAAAA=" \ No newline at end of file +const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnttYXJnaW4tdG9wOjI0cHg7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3NldHRpbmctbmF2IGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDEycHh9I3NldHRpbmctbmF2IGxpIGF7cGFkZGluZzozcHggMTBweH0KI3NldHRpbmctbmF2IGxpIGE6aG92ZXIsI3NldHRpbmctbmF2IGxpIGEuY3VycmVudHtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMDA1YjlifQouc2V0dGluZy1wYW5lbHtkaXNwbGF5Om5vbmV9Ci5zZXR0aW5nLWZvcm17d2lkdGg6ODIwcHg7bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99LnNldHRpbmctZm9ybSAuaXB0e3dpZHRoOjQ4MHB4fQouc2V0dGluZy1mb3JtIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9Ci5zZXR0aW5nLWZvcm0gbGFiZWx7bWluLXdpZHRoOjEwZW19Ci5zZXR0aW5nLWZvcm0gLnRpcC5ibG9ja3ttYXJnaW4tbGVmdDoxMmVtfQojc2V0dGluZy1jdXN0b20tZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQua2V5e3dpZHRoOjI1MHB4fQojc2V0dGluZy1jdXN0b20tZm9ybSBpbnB1dC52YWx1ZXt3aWR0aDo2NTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojc2V0dGluZy1jdXN0b20tZm9ybSAudGlwe21hcmdpbi1sZWZ0OjB9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNudCwjY29tbWVudC1saXN0IC5jLWVtYWlse2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHh9CiNjb21tZW50LWxpc3QgLmMtcmVwbHl7Y29sb3I6Izk5OX0jY29tbWVudC1saXN0IC5jLXJlcGx5OmhvdmVye2NvbG9yOiMzMzN9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxM3B4fQojY29tbWVudC1saXN0IC5jLWF1dGhvci5hZG1pbntiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KI2NvbW1lbnQtbGlzdCAuYy1wLW1ke21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjaywjY29tbWVudC1saXN0IC5jLWRlbHtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhLCNjb21tZW50LWxpc3QgLmMtZGVsIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNoZWNrOmhvdmVyLCNjb21tZW50LWxpc3QgLmMtZGVsOmhvdmVye2NvbG9yOiNhYTM5M2N9CiNjb21tZW50LWZvcm17cGFkZGluZy10b3A6MTJweDtkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6NzJweH0jY29tbWVudC1mb3JtIC5idG57bWFyZ2luLXJpZ2h0OjI0cHh9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6NTAwcHg7aGVpZ2h0OjgwcHg7bWFyZ2luLXJpZ2h0OjI0cHh9CiNmaWxlcy1saXN0IGxpLmZpbGV7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNmaWxlcy1saXN0IGxpLmZpbGU+KnttYXJnaW4tcmlnaHQ6MTZweH0KI2ZpbGVzLWxpc3QgbGkuZmlsZTpob3ZlciAuZGVse29wYWNpdHk6MSAhaW1wb3J0YW50fQojZmlsZXMtbGlzdCAudXBsb2FkLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZmlsZXMtbGlzdCAuZGVse2NvbG9yOiNlNjQzNDZ9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2ZpbGVzLWxpc3QgLmZpbGUtcHJvZ3Jlc3MuZXJye2JhY2tncm91bmQ6cmdiYSgyNTUsNjgsNzEsMC4yKTtjb2xvcjojYWEzOTNjfQojZmlsZXMtbGlzdCAuc2l6ZXt3aWR0aDo0ZW07ZGlzcGxheTppbmxpbmUtYmxvY2t9CiNwbHVnaW4tbGlzdCBsaXttYXJnaW4tYm90dG9tOjE2cHg7cGFkZGluZy1ib3R0b206MTZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jcGx1Z2luLWxpc3QgbGkgLmRlc2N7bWFyZ2luLWJvdHRvbTowO3dpZHRoOjk5JTtjb2xvcjojOTk5fQojcGx1Z2luLWxpc3QgbGkgYS5sYmx7cGFkZGluZzowIDhweDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLnZlcnNpb257Y29sb3I6IzUwNzY1MDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLm5hbWV7Zm9udC1zaXplOjE2cHh9CiNwbHVnaW4tbGlzdCBsaSAuYWN0aXZle3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7bWFyZ2luLXJpZ2h0OjE2cHg7cGFkZGluZzowO21hcmdpbi10b3A6MTBweH0KI3BsdWdpbi1saXN0IGxpIC5zZXR0aW5ne21hcmdpbi1sZWZ0OjE2cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIHAuaXRlbXtjbGVhcjpib3RofQojcGx1Z2luLXNldHRpbmctZm9ybSBsYWJlbHtmbG9hdDpsZWZ0O21pbi13aWR0aDo2ZW07dGV4dC1hbGlnbjpyaWdodDttYXJnaW4tcmlnaHQ6MmVtfQojcGx1Z2luLXNldHRpbmctZm9ybSAudGl0bGV7cGFkZGluZy10b3A6MDttYXJnaW4tYm90dG9tOjE4cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIGlucHV0LmlwdHt3aWR0aDo2MDBweH0KI2Rhc2hib2FyZCAuZ3JpZC0xLTV7bWFyZ2luLXJpZ2h0OjIlfQojZGFzaGJvYXJkIC5xdWljay1saW5rIGxpe2xpc3Qtc3R5bGU6aW5zaWRlIGRpc2M7bWFyZ2luLWJvdHRvbTo2cHg7cGFkZGluZy1ib3R0b206NnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojZGFzaGJvYXJkIC5zdGF0cyAubGJse3BhZGRpbmc6MXB4IDVweDttYXJnaW46MCAzcHh9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2d7cGFkZGluZzo4cHggMTJweDttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGQ7bGluZS1oZWlnaHQ6MjRweDtmb250LXNpemU6MTJweH0jZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLmRhdGF7Y29sb3I6IzY2NjttYXJnaW4tbGVmdDoxLjJlbX0jZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5kYXRhIHB7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjI0cHh9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLnJlYWR7dG9wOjA7cmlnaHQ6MTJweDtvcGFjaXR5OjB9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAucmVhZDpob3Zlcntjb2xvcjojZTY0MzQ2fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4wNil9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZzpob3ZlciAucmVhZHtvcGFjaXR5OjF9ClBLBwjPelYnljAAAJYwAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcY3NzXGNtZC5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfQpoZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9CmF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja30KdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9CmZpZWxkc2V0LGltZ3tib3JkZXI6MH0KYWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH0Kb2wsdWx7bGlzdC1zdHlsZTpub25lfQpjYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH0KaDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfQpxOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9CmFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfQpzdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9CnN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH0KbGVnZW5ke2NvbG9yOiMwMDB9Cmh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifQphe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifQpwe21hcmdpbi1ib3R0b206MThweH0KaDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9Cmgxe2ZvbnQtc2l6ZToyOHB4fQpoMntmb250LXNpemU6MjRweH0KaDN7Zm9udC1zaXplOjIxcHh9Cmg0e2ZvbnQtc2l6ZToxOXB4fQpoNXtmb250LXNpemU6MTZweH0KaDZ7Zm9udC1zaXplOjE0cHh9Ci50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fQoudGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fQoudGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9Ci5sZWZ0e2Zsb2F0OmxlZnR9Ci5yaWdodHtmbG9hdDpyaWdodH0KLmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfQoucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9Ci5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9Ci52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfQouaW5saW5le2Rpc3BsYXk6aW5saW5lfQouaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfQouYmxvY2t7ZGlzcGxheTpibG9ja30KLmZhZGUtb3V0e29wYWNpdHk6MH0KLmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9Ci5jb250YWluZXJ7bWF4LXdpZHRoOjEyMDBweDttYXJnaW46YXV0b30KLmNvbnRhaW5lcjk2MHttYXgtd2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99Ci5ncmlkLTEtMnt3aWR0aDo1MCV9Ci5ncmlkLTEtM3t3aWR0aDozMy4zMzMzJX0KLmdyaWQtMS00e3dpZHRoOjI1JX0KLmdyaWQtMS01e3dpZHRoOjIwJX0KLmdyaWQtMS02e3dpZHRoOjE2LjY2NjYlfQouZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9Ci5ncmlkLTMtNHt3aWR0aDo3NSV9Ci5ncmlkLTMtNXt3aWR0aDo2MCV9Ci5ncmlkLTQtNXt3aWR0aDo4MCV9Ci5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0LGJ1dHRvbntmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZn0KLmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0KLmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC5pcHR7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTttaW4td2lkdGg6MTgwcHh9LmZvcm0gLmlwdDpmb2N1c3tib3JkZXItY29sb3I6IzAwNzliY30KLmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfQouZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fQouZm9ybSAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9Ci5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9Ci5mb3JtLXZlcnRpY2FsIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3h9Ci5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fQouZm9ybS1hbGlnbiAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn0KYS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfQouYnRuLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0uYnRuLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2F9Ci5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifQouYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfQoubGJse3BhZGRpbmc6NHB4IDEycHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fQoubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KYS5sYmx7bGluZS1oZWlnaHQ6MjZweH0KYS5sYmwtcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYTtjb2xvcjojZmJmYmZifQoubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CmEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9CmEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifQoucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30KLnBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5pdGVtOmhvdmVyIGF7Y29sb3I6I2ZmZn0KLnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifQoucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgyLC5tYXJrZG93biBoMywubWFya2Rvd24gaDQsLm1hcmtkb3duIGg1LC5tYXJrZG93biBoNntwYWRkaW5nOjE4cHggMCA5cHggMDtmb250LXdlaWdodDpib2xkfQoubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHh9Ci5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMnttYXJnaW4tYm90dG9tOjEwcHg7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KLm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fQoubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Ci5tYXJrZG93biBoNXtmb250LXNpemU6MTZweH0KLm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fQoubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Ci5tYXJrZG93biB1bHtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlfQoubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0KLm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0KLm1hcmtkb3duIHAgY29kZXtjb2xvcjojYzczODNhfQoubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0KLm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Ci5tYXJrZG93biBvbCwubWFya2Rvd24gdWx7bWFyZ2luOjEycHggMjRweH0KLm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfQoubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0KLm1hcmtkb3duIHRhYmxlIHRoZWFke2JhY2tncm91bmQ6I2Y2ZjZmNn0KLmNtZHttYXJnaW46MjRweCA0OHB4fQouY21kLWhlYWRlcnttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1idG57bWFyZ2luOjEwcHggMCAwIDMwcHh9Ci5jbWQtbGlzdCBsaXttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1saXN0IGxpe2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGU7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jYmFja3VwLWxpc3QgbGk+c3BhbiwjYmFja3VwLWxpc3QgbGk+YXttYXJnaW4tcmlnaHQ6MTZweH0KI2JhY2t1cC1saXN0IGxpIC5kZWx7Y29sb3I6I2U2NDM0NjtvcGFjaXR5OjB9CiNiYWNrdXAtbGlzdCBsaSAubGlua3ttYXJnaW4tbGVmdDoxMnB4fQojYmFja3VwLWxpc3QgbGk6aG92ZXIgLmRlbHtvcGFjaXR5OjF9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2V7cGFkZGluZzo4cHggMTJweDttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGQ7bGluZS1oZWlnaHQ6MjRweDtmb250LXNpemU6MTJweH0jbWVzc2FnZS1saXN0IC5tZXNzYWdlIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLmRhdGF7Y29sb3I6IzY2NjttYXJnaW4tbGVmdDoxLjJlbX0jbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5kYXRhIHB7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjI0cHh9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLnJlYWR7dG9wOjA7cmlnaHQ6MTJweDtvcGFjaXR5OjB9I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAucmVhZDpob3Zlcntjb2xvcjojZTY0MzQ2fQojbWVzc2FnZS1saXN0IC5tZXNzYWdlOmhvdmVyIC5yZWFke29wYWNpdHk6MX0KI2xvZy1saXN0IC5sb2d7Zm9udC1zaXplOjEycHh9CiNsb2ctbGlzdCAubmFtZXttYXJnaW4tcmlnaHQ6MS41ZW07Zm9udC13ZWlnaHQ6Ym9sZH0KI2xvZy1saXN0IC50aW1lLCNsb2ctbGlzdCAubmFtZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojbG9nLWxpc3QgLnRleHR7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsO2NvbG9yOiM2NjY7cGFkZGluZzo4cHggMTJweDtiYWNrZ3JvdW5kOiNmM2YzZjN9CiNsb2ctbGlzdCAucmVtb3Zle3RvcDowO3JpZ2h0OjEycHg7Y29sb3I6I2U2NDM0Nn0KUEsHCNI3xBsvGgAALxoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHN0YXRpY1xjc3NcY29kZW1pcnJvci5jc3MvKiBCQVNJQ1MgKi8KCi5Db2RlTWlycm9yIHsKICAgIC8qIFNldCBoZWlnaHQsIHdpZHRoLCBib3JkZXJzLCBhbmQgZ2xvYmFsIGZvbnQgcHJvcGVydGllcyBoZXJlICovCiAgICBmb250LWZhbWlseTogQ29uc29sYXMsICJNaWNyb3NvZnQgWWFIZWkiLCAiQ291cmllciBOZXciLCBBcmlhbDsKICAgIGhlaWdodDogNjYwcHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBib3JkZXI6MXB4IHNvbGlkICM5OTk7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiBTZXQgc2Nyb2xsaW5nIGJlaGF2aW91ciBoZXJlICovCiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLyogUEFERElORyAqLwoKLkNvZGVNaXJyb3ItbGluZXMgewogICAgcGFkZGluZzogNHB4IDA7IC8qIFZlcnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAqLwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyAvKiBUaGUgbGl0dGxlIHNxdWFyZSBiZXR3ZWVuIEggYW5kIFYgc2Nyb2xsYmFycyAqLwp9CgovKiBHVVRURVIgKi8KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVycyB7Cn0KCi5Db2RlTWlycm9yLWxpbmVudW1iZXIgewogICAgcGFkZGluZzogMCAzcHggMCA1cHg7CiAgICBtaW4td2lkdGg6IDIwcHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIGNvbG9yOiAjNTU1OwogICAgbGluZS1oZWlnaHQ6IDIwcHg7Cn0KCi8qIENVUlNPUiAqLwoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7CiAgICB6LWluZGV4OiAzOwp9CgovKiBTaG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0ICovCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHNpbHZlcjsKfQoKLkNvZGVNaXJyb3IuY20ta2V5bWFwLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHdpZHRoOiBhdXRvOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogIzdlNzsKICAgIHotaW5kZXg6IDE7Cn0KCi8qIENhbiBzdHlsZSBjdXJzb3IgZGlmZmVyZW50IGluIG92ZXJ3cml0ZSAobm9uLWluc2VydCkgbW9kZSAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IuQ29kZU1pcnJvci1vdmVyd3JpdGUgewp9CgouY20tdGFiIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLyogREVGQVVMVCBUSEVNRSAqLwoKLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7CiAgICBjb2xvcjogIzcwODsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7CiAgICBjb2xvcjogIzIxOTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHsKICAgIGNvbG9yOiAjMTY0Owp9CgouY20tcy1kZWZhdWx0IC5jbS1kZWYgewogICAgY29sb3I6ICMwMGY7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzA1YTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMyB7CiAgICBjb2xvcjogIzA4NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcHJvcGVydHkgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICNhNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZyB7CiAgICBjb2xvcjogI2ExMTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nLTIgewogICAgY29sb3I6ICNmNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW1ldGEgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1YWxpZmllciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnVpbHRpbiB7CiAgICBjb2xvcjogIzMwYTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnJhY2tldCB7CiAgICBjb2xvcjogIzk5NzsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdGFnIHsKICAgIGNvbG9yOiAjMTcwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICMwMGM7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhlYWRlciB7CiAgICBjb2xvcjogYmx1ZTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUgewogICAgY29sb3I6ICMwOTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhyIHsKICAgIGNvbG9yOiAjOTk5Owp9CgouY20tcy1kZWZhdWx0IC5jbS1saW5rIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tbmVnYXRpdmUgewogICAgY29sb3I6ICNkNDQ7Cn0KCi5jbS1wb3NpdGl2ZSB7CiAgICBjb2xvcjogIzI5MjsKfQoKLmNtLWhlYWRlciwgLmNtLXN0cm9uZyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLWVtIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmNtLWxpbmsgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWVycm9yIHsKICAgIGNvbG9yOiAjZjAwOwp9CgouY20taW52YWxpZGNoYXIgewogICAgY29sb3I6ICNmMDA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICMwZjA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICNmMjI7Cn0KCi5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjZThmMmZmOwp9CgovKiBTVE9QICovCgovKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgY29udGFpbnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZgogICB0aGUgZWRpdG9yLiBZb3UgcHJvYmFibHkgc2hvdWxkbid0IHRvdWNoIHRoZW0uICovCgouQ29kZU1pcnJvciB7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIGNvbG9yOiBibGFjazsKfQoKLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIC8qIDMwcHggaXMgdGhlIG1hZ2ljIG1hcmdpbiB1c2VkIHRvIGhpZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJhcnMgKi8KICAgIC8qIFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAgICBtYXJnaW4tYm90dG9tOiAtMzBweDsKICAgIG1hcmdpbi1yaWdodDogLTMwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdXRsaW5lOiBub25lOyAvKiBQcmV2ZW50IGRyYWdnaW5nIGZyb20gaGlnaGxpZ2h0aW5nIHRoZSBlbGVtZW50ICovCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KCi5Db2RlTWlycm9yLXNpemVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLyogVGhlIGZha2UsIHZpc2libGUgc2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSByZWRyYXcgZHVyaW5nIHNjcm9sbGluZwogICBiZWZvcmUgYWN0dWFsbCBzY3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNoYWtpbmcgYW5kCiAgIGZsaWNrZXJpbmcgYXJ0aWZhY3RzLiAqLwouQ29kZU1pcnJvci12c2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHotaW5kZXg6IDY7CiAgICBkaXNwbGF5OiBub25lOwp9CgouQ29kZU1pcnJvci12c2Nyb2xsYmFyIHsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcmZsb3cteTogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1oc2Nyb2xsYmFyIHsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBvdmVyZmxvdy14OiBzY3JvbGw7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIgewogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIgewogICAgbGVmdDogMDsKICAgIGJvdHRvbTogMDsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVycyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgdG9wOiAwOwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICB6LWluZGV4OiAzOwp9CgouQ29kZU1pcnJvci1ndXR0ZXIgewogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGhlaWdodDogMTAwJTsKICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgbWFyZ2luLWJvdHRvbTogLTMycHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAvKiBIYWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqLwogICAgKnpvb206IDE7CiAgICAqZGlzcGxheTogaW5saW5lOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZWx0IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIHotaW5kZXg6IDQ7Cn0KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIGN1cnNvcjogdGV4dDsKfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIC8qIFJlc2V0IHNvbWUgc3R5bGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgbWlnaHQgaGF2ZSBzZXQgKi8KICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItd2lkdGg6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgbWFyZ2luOiAwOwogICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIHotaW5kZXg6IDI7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKfQoKLkNvZGVNaXJyb3Itd3JhcCBwcmUgewogICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC1icmVhazogbm9ybWFsOwp9CgouQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICB3aWR0aDogLXdlYmtpdC1maXQtY29udGVudDsKICAgIHdpZHRoOiAtbW96LWZpdC1jb250ZW50OwogICAgd2lkdGg6IGZpdC1jb250ZW50Owp9CgouQ29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLWNvZGUgcHJlIHsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiBhdXRvOwp9CgouQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB6LWluZGV4OiAwOwp9CgouQ29kZU1pcnJvci1saW5ld2lkZ2V0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLkNvZGVNaXJyb3Itd2lkZ2V0IHsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwgewogICAgb3ZlcmZsb3cteDogaGlkZGVuOwp9CgouQ29kZU1pcnJvci1tZWFzdXJlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUgewogICAgcG9zaXRpb246IHN0YXRpYzsKfQoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiAwOwp9CgouQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgouQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDlkOWQ5Owp9CgouQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICNkN2Q0ZjA7Cn0KCi5jbS1zZWFyY2hpbmcgewogICAgYmFja2dyb3VuZDogI2ZmYTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDAsIC40KTsKfQoKLyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVybmluZyBmdW5ueSBvZmZzZXRUb3BzIG9uIHRoZSBzcGFucyAqLwouQ29kZU1pcnJvciBzcGFuIHsKICAgICp2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207Cn0KCkBtZWRpYSBwcmludCB7CiAgICAvKiBIaWRlIHRoZSBjdXJzb3Igd2hlbiBwcmludGluZyAqLwogICAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9Cn0KCi5jbS1zLWJhc2UxNi1kYXJrLkNvZGVNaXJyb3IgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGNvbG9yOiAjZTBlMGUwOwp9CgouY20tcy1iYXNlMTYtZGFyayBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjMjAyMDIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGJvcmRlci1yaWdodDogMHB4Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1jdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYjBiMGIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tY29tbWVudCB7CiAgICBjb2xvcjogIzhmNTUzNjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdG9tIHsKICAgIGNvbG9yOiAjYWE3NTlmOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLW51bWJlciB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1wcm9wZXJ0eSwgLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20ta2V5d29yZCB7CiAgICBjb2xvcjogI2FjNDE0MjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1zdHJpbmcgewogICAgY29sb3I6ICNmNGJmNzU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzZhOWZiNTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1kZWYgewogICAgY29sb3I6ICNkMjg0NDU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYnJhY2tldCB7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS10YWcgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tbGluayB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1lcnJvciB7CiAgICBiYWNrZ3JvdW5kOiAjYWM0MTQyOwogICAgY29sb3I6ICNiMGIwYjA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjMkYyRjJGICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9ClBLBwgjAzWCTiAAAE4gAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAABzdGF0aWNcY3NzXGNvbW1vbi5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfWhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9dGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9ZmllbGRzZXQsaW1ne2JvcmRlcjowfWFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9b2wsdWx7bGlzdC1zdHlsZTpub25lfWNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH1xOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9YWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9c3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfXN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWxlZ2VuZHtjb2xvcjojMDAwfWh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifWF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9cHttYXJnaW4tYm90dG9tOjE4cHh9aDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9aDF7Zm9udC1zaXplOjI4cHh9aDJ7Zm9udC1zaXplOjI0cHh9aDN7Zm9udC1zaXplOjIxcHh9aDR7Zm9udC1zaXplOjE5cHh9aDV7Zm9udC1zaXplOjE2cHh9aDZ7Zm9udC1zaXplOjE0cHh9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmxlZnR7ZmxvYXQ6bGVmdH0ucmlnaHR7ZmxvYXQ6cmlnaHR9LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfS52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uYmxvY2t7ZGlzcGxheTpibG9ja30uZmFkZS1vdXR7b3BhY2l0eTowfS5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5jb250YWluZXJ7d2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7d2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99LmdyaWQtMS0ye3dpZHRoOjUwJX0uZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9LmdyaWQtMS00e3dpZHRoOjI1JX0uZ3JpZC0xLTV7d2lkdGg6MjAlfS5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0uZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9LmdyaWQtMy00e3dpZHRoOjc1JX0uZ3JpZC0zLTV7d2lkdGg6NjAlfS5ncmlkLTQtNXt3aWR0aDo4MCV9LmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfWlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9LmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0uZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9LmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfS5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9LmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9LmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0uZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9LmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn1hLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9LmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfS5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifS5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9LmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn1hLmxibHtsaW5lLWhlaWdodDoyNnB4fWEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0ubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9YS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0ubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifWEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifS5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfS5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9LnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifS5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Lm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0ubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHg7cGFkZGluZy1ib3R0b206MTJweH0ubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Lm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fS5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0ubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Lm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fS5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0ubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0ubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0ubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfS5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0ubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0ubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0ubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Lm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfS5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fS5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9UEsHCHu8/YwmFAAAJhQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xjc3NcaGlnaGxpZ2h0LmNzcy8qDQoNClN1bmJ1cnN0LWxpa2Ugc3R5bGUgKGMpIFZhc2lseSBQb2xvdm55b3YgPHZhc3RAd2hpdGVhbnRzLm5ldD4NCg0KKi8NCg0KcHJlIGNvZGUgew0KICAgIGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAwLjVlbTsNCiAgICBiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2Y4ZjhmODsNCn0NCg0KcHJlIC5jb21tZW50LA0KcHJlIC50ZW1wbGF0ZV9jb21tZW50LA0KcHJlIC5qYXZhZG9jIHsNCiAgICBjb2xvcjogI2FlYWVhZTsNCiAgICBmb250LXN0eWxlOiBpdGFsaWM7DQp9DQoNCnByZSAua2V5d29yZCwNCnByZSAucnVieSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnJlcXVlc3QsDQpwcmUgLnN0YXR1cywNCnByZSAubmdpbnggLnRpdGxlIHsNCiAgICBjb2xvcjogI0UyODk2NDsNCn0NCg0KcHJlIC5mdW5jdGlvbiAua2V5d29yZCwNCnByZSAuc3ViIC5rZXl3b3JkLA0KcHJlIC5tZXRob2QsDQpwcmUgLmxpc3QgLnRpdGxlIHsNCiAgICBjb2xvcjogIzk5Q0Y1MDsNCn0NCg0KcHJlIC5zdHJpbmcsDQpwcmUgLnRhZyAudmFsdWUsDQpwcmUgLmNkYXRhLA0KcHJlIC5maWx0ZXIgLmFyZ3VtZW50LA0KcHJlIC5hdHRyX3NlbGVjdG9yLA0KcHJlIC5hcGFjaGUgLmNicmFja2V0LA0KcHJlIC5kYXRlLA0KcHJlIC50ZXggLmNvbW1hbmQsDQpwcmUgLmNvZmZlZXNjcmlwdCAuYXR0cmlidXRlIHsNCiAgICBjb2xvcjogIzY1QjA0MjsNCn0NCg0KcHJlIC5zdWJzdCB7DQogICAgY29sb3I6ICNEQUVGQTM7DQp9DQoNCnByZSAucmVnZXhwIHsNCiAgICBjb2xvcjogI0U5QzA2MjsNCn0NCg0KcHJlIC50aXRsZSwNCnByZSAuc3ViIC5pZGVudGlmaWVyLA0KcHJlIC5waSwNCnByZSAudGFnLA0KcHJlIC50YWcgLmtleXdvcmQsDQpwcmUgLmRlY29yYXRvciwNCnByZSAuc2hlYmFuZywNCnByZSAucHJvbXB0IHsNCiAgICBjb2xvcjogIzg5QkRGRjsNCn0NCg0KcHJlIC5jbGFzcyAudGl0bGUsDQpwcmUgLmhhc2tlbGwgLnR5cGUsDQpwcmUgLnNtYWxsdGFsayAuY2xhc3MsDQpwcmUgLmphdmFkb2N0YWcsDQpwcmUgLnlhcmRvY3RhZywNCnByZSAucGhwZG9jIHsNCiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCg0KcHJlIC5zeW1ib2wsDQpwcmUgLnJ1YnkgLnN5bWJvbCAuc3RyaW5nLA0KcHJlIC5udW1iZXIgew0KICAgIGNvbG9yOiAjMzM4N0NDOw0KfQ0KDQpwcmUgLnBhcmFtcywNCnByZSAudmFyaWFibGUsDQpwcmUgLmNsb2p1cmUgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICMzRTg3RTM7DQp9DQoNCnByZSAuY3NzIC50YWcsDQpwcmUgLnJ1bGVzIC5wcm9wZXJ0eSwNCnByZSAucHNldWRvLA0KcHJlIC50ZXggLnNwZWNpYWwgew0KICAgIGNvbG9yOiAjQ0RBODY5Ow0KfQ0KDQpwcmUgLmNzcyAuY2xhc3Mgew0KICAgIGNvbG9yOiAjOUI3MDNGOw0KfQ0KDQpwcmUgLnJ1bGVzIC5rZXl3b3JkIHsNCiAgICBjb2xvcjogI0M1QUY3NTsNCn0NCg0KcHJlIC5ydWxlcyAudmFsdWUgew0KICAgIGNvbG9yOiAjQ0Y2QTRDOw0KfQ0KDQpwcmUgLmNzcyAuaWQgew0KICAgIGNvbG9yOiAjOEI5OEFCOw0KfQ0KDQpwcmUgLmFubm90YXRpb24sDQpwcmUgLmFwYWNoZSAuc3FicmFja2V0LA0KcHJlIC5uZ2lueCAuYnVpbHRfaW4gew0KICAgIGNvbG9yOiAjOUI4NTlEOw0KfQ0KDQpwcmUgLnByZXByb2Nlc3NvciwNCnByZSAucHJhZ21hIHsNCiAgICBjb2xvcjogIzg5OTZBODsNCn0NCg0KcHJlIC5oZXhjb2xvciwNCnByZSAuY3NzIC52YWx1ZSAubnVtYmVyIHsNCiAgICBjb2xvcjogI0REN0IzQjsNCn0NCg0KcHJlIC5jc3MgLmZ1bmN0aW9uIHsNCiAgICBjb2xvcjogI0RBRDA4NTsNCn0NCg0KcHJlIC5kaWZmIC5oZWFkZXIsDQpwcmUgLmNodW5rLA0KcHJlIC50ZXggLmZvcm11bGEgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwRTIyMzE7DQogICAgY29sb3I6ICNGOEY4Rjg7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmRpZmYgLmNoYW5nZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzRBNDEwRDsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5hZGRpdGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI1M0IyMjsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5kZWxldGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzQyMEUwOTsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5jb2ZmZWVzY3JpcHQgLmphdmFzY3JpcHQsDQpwcmUgLmphdmFzY3JpcHQgLnhtbCwNCnByZSAudGV4IC5mb3JtdWxhLA0KcHJlIC54bWwgLmphdmFzY3JpcHQsDQpwcmUgLnhtbCAudmJzY3JpcHQsDQpwcmUgLnhtbCAuY3NzLA0KcHJlIC54bWwgLmNkYXRhIHsNCiAgICBvcGFjaXR5OiAwLjU7DQp9DQoNCnByZSAuZ28gLnR5cGVuYW1lew0KICAgIGNvbG9yOiAjZmZiYzU0Ow0KfVBLBwjDaOPeXQkAAF0JAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcY3NzXGxpbmcuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOiNmM2YzZjN9CiNoZWFkZXJ7YmFja2dyb3VuZDojMDA5M2M0O21pbi13aWR0aDoxMjBweDtwYWRkaW5nOjQwcHggMCA0OHB4IDA7Y29sb3I6I2ZiZmJmYn0jaGVhZGVyIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7Ym9yZGVyLXJhZGl1czo1MHB4Oy1tb3otYm9yZGVyLXJhZGl1czo1MHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo1MHB4fQojaGVhZGVyLWh7bGluZS1oZWlnaHQ6OTRweDtjb2xvcjojZmJmYmZiO3BhZGRpbmc6MDttYXJnaW4tbGVmdDoyNHB4fSNoZWFkZXItaCBhe2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItc3Vie2NvbG9yOiNmM2YzZjM7bWFyZ2luLWxlZnQ6MS4yZW07Zm9udC1zaXplOjE2cHh9CiNuYXZ7bGluZS1oZWlnaHQ6OTBweH0jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7bWFyZ2luLWxlZnQ6NDRweH0jbmF2IGxpIGF7Zm9udC1zaXplOjE4cHg7Y29sb3I6I2YzZjNmMztkaXNwbGF5OmJsb2NrfSNuYXYgbGkgYTpob3Zlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgMCAzcHggIzMzMzstbW96LXRleHQtc2hhZG93OjAgMCAzcHggIzMzMzstd2Via2l0LXRleHQtc2hhZG93OjAgMCAzcHggIzMzM30KI2Zvb3RlcntwYWRkaW5nOjMwcHggNDBweDtjb2xvcjojOTk5fQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0jYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAudmlld3N7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIC5jb21tZW50c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjQwcHg7bWFyZ2luLWxlZnQ6OHB4O2JvcmRlcjo2cHggc29saWQgI2ZmZjtib3gtc2hhZG93OjAgMCAycHggIzk5OTstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICM5OTl9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cyBhe2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHM6aG92ZXJ7Ym94LXNoYWRvdzowIDAgNHB4ICM2NjY7LW1vei1ib3gtc2hhZG93OjAgMCA0cHggIzY2Njstd2Via2l0LWJveC1zaGFkb3c6MCAwIDRweCAjNjY2fQojYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze3RvcDoxNHB4O2xlZnQ6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czozMHB4Oy1tb3otYm9yZGVyLXJhZGl1czozMHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozMHB4O3BhZGRpbmc6MDtib3JkZXI6NHB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tYWluOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7Ym9yZGVyOjExcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjYzcHg7bGVmdDotMjJweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aXRsZXtmb250LXNpemU6MjhweDtwYWRkaW5nLWJvdHRvbToyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW4gLnRpbWUtaW5mb3tjb2xvcjojOTk5O21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO3RleHQtaW5kZW50OjFlbTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjUwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1haW57bWFyZ2luLWxlZnQ6MH0jYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWluOmJlZm9yZXtkaXNwbGF5Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1ldGF7cmlnaHQ6NDRweDt0b3A6LTM2cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLnZpZXdze3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czozNnB4Oy1tb3otYm9yZGVyLXJhZGl1czozNnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozNnB4O2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1zaXplOjI0cHg7cGFkZGluZzowO2JvcmRlcjo2cHggc29saWQgI2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC50YWd7Y29sb3I6Izk5OX0KI2FydGljbGUtcGFnZXJ7bWFyZ2luLWxlZnQ6MTE2cHh9I2FydGljbGUtcGFnZXIgLml0ZW17bWFyZ2luOjA7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM5OTk7cGFkZGluZzoxMnB4IDE4cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQ6IzAwNzliY30KI2NvbW1lbnR7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2NvbW1lbnQgLm1ldGF7cmlnaHQ6LTI0cHg7dG9wOi0zMHB4fSNjb21tZW50IC5tZXRhIC5jb21tZW50c3ttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye21hcmdpbi1yaWdodDoxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDttYXJnaW4tdG9wOjZweH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIHB7bWFyZ2luLWJvdHRvbTowfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3J7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmJsb2NrfSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3I6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZGRkO3BhZGRpbmc6M3B4IDEwcHh9I2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KI2NvbW1lbnQtbGlzdCAuYy1jb250ZW50e3BhZGRpbmctdG9wOjRweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2O21hcmdpbi1sZWZ0OjEycHh9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1zaG93e21hcmdpbi1ib3R0b206MzJweH0KI2NvbW1lbnQtdGl0bGV7bWFyZ2luLWJvdHRvbToyMHB4O3BhZGRpbmctYm90dG9tOjIwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvO21hcmdpbi1ib3R0b206MzBweH0jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcntib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHg7d2lkdGg6NTBweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXtkaXNwbGF5Om5vbmV9ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH0gI25hdiwjaGVhZGVyLWh7bGluZS1oZWlnaHQ6NTBweH0gI2Zvb3RlciBzcGFue2Zsb2F0Om5vbmU7dGV4dC1hbGlnbjpjZW50ZXJ9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1oe21hcmdpbi1sZWZ0OjB9ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfSAjbmF2e2Zsb2F0OmxlZnR9I25hdiBsaXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo0NHB4fX0KUEsHCM/D6tacKgAAnCoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHN0YXRpY1xjc3Ncc3R5bGUuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2JnLnBuZyIpIHJlcGVhdH0KI2hlYWRlcntiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2hlYWRlci5naWYiKSByZXBlYXQgIzRjNzI5ODttaW4td2lkdGg6MTIwcHg7cGFkZGluZzozMHB4IDA7Y29sb3I6I2ZiZmJmYn0KI2hlYWRlci1pbWd7d2lkdGg6OTZweDtoZWlnaHQ6OTZweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe3BhZGRpbmctdG9wOjI0cHg7Zm9udC1zaXplOjMycHh9I2hlYWRlci1oIGF7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfQojbmF2e2hlaWdodDo1NHB4O2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3gtc2hhZG93OjAgMCAycHggI2JiYjstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICNiYmI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY30jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7cGFkZGluZzowIDE4cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7cGFkZGluZzowIDMycHg7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzAwNzliY30KI25hdi5maXhlZHtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO3RvcDowfQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZm9vdGVye2NvbG9yOiNjY2M7YmFja2dyb3VuZC1jb2xvcjojMWMyNDI5O3BhZGRpbmc6MjRweCAwfSNmb290ZXIgcHttYXJnaW4tYm90dG9tOjlweDtmb250LXdlaWdodDpib2xkO2xldHRlci1zcGFjaW5nOjFweH0jZm9vdGVyIHAgYXtjb2xvcjojY2NjO21hcmdpbjowIDE2cHh9I2Zvb3RlciBwIGE6aG92ZXJ7Y29sb3I6I2ZiZmJmYn0KI2Zvb3RlciBwIGEgLmZhe21hcmdpbi1yaWdodDo4cHh9CiNnby10b3B7Ym90dG9tOjUwcHg7cmlnaHQ6NDBweDtwb3NpdGlvbjpmaXhlZDtjb2xvcjojZmZmO3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo4cHg7b3BhY2l0eTouNH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhe3dpZHRoOjEwOHB4O2xpbmUtaGVpZ2h0OjI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudmlld3MsI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYXtjb2xvcjojZmZmfSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDoxNDBweH0KI2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxle3BhZGRpbmc6OHB4IDE2cHg7YmFja2dyb3VuZC1jb2xvcjojNGM3Mjk4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjJweH0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYXtjb2xvcjojZWVlfSNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtwYWRkaW5nOjE4cHggMjRweCAyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm97bWFyZ2luLWJvdHRvbTowO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcDpub25lO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjJweDtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5zaGFyZSAuZmF7bWFyZ2luLXJpZ2h0OjB9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz4qe3BhZGRpbmc6NnB4IDE4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz5zcGFue2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZX0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFke2NvbG9yOiM5OTl9I2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLnRpbWUsI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC52aWV3cyBzcGFue2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciBhcnRpY2xle21hcmdpbi1ib3R0b206NDhweH0KI2NvbW1lbnR7bWFyZ2luLXRvcDotMjRweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmZmZ9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvfSNjb21tZW50LWZvcm0gLmMtaW5mb3t3aWR0aDoyNiV9I2NvbW1lbnQtZm9ybSAuYy1pbmZvIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjB9CiNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDo3MCV9CiNjb21tZW50LWZvcm0gLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjE4cHg7cGFkZGluZy1ib3R0b206MThweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1saXN0IC5jLXNlY3Rpb257bWF4LXdpZHRoOjgzMHB4fQojY29tbWVudC1saXN0IC5jLWNoZWNre2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNlNjQzNDZ9I2NvbW1lbnQtbGlzdCAuYy1jaGVjayAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MH0gI2FydGljbGUtY29udGFpbmVyIC5tZXRhLmxlZnR7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MDt3aWR0aDphdXRvfSAjbmF2IGxpe3BhZGRpbmc6MCAxMHB4fSAjaGVhZGVyLWltZ3tmbG9hdDpsZWZ0O3dpZHRoOjY0cHg7aGVpZ2h0OjY0cHh9ICNoZWFkZXItaHtwYWRkaW5nOjE3cHggMDtmb250LXNpemU6MjRweH0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLnRhZywjYXJ0aWNsZS1jb250YWluZXIgLnRpbWV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3Jte3dpZHRoOjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1pbWd7ZGlzcGxheTpub25lfSAjaGVhZGVyLXN1YntkaXNwbGF5Om5vbmV9ICNjb21tZW50LWxpc3QgLmMtYXZhdGFye2Rpc3BsYXk6bm9uZX19ClBLBwiqeuwujSgAAI0oAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcZmF2aWNvbi5pY28AAAEAAQAgIAAAAQAgAKgQAAAWAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAEAAAEgsAABILAAAAAAAAAAAAALN+B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs34H27N+B9uzfgfbs34H27N+B9uzfgfbs30H27N+B9uzfgfbs30H27N+B9uzfgfbs34H27N+B9uyfAfWr3oHx61+GK21k0qQuoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoMN/7qGF/+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7qBCP+5gQj/uYII/7qBCP+6ggj/uoII/7mBCP+5gQj/uYII/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoII/7mBCP+5gQj/uoEI/7qBCP+6ggj/uoII/7qBCP+6ggj/uoEI/7qCCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6gQj/uYEI/7mBCP+5ggf/uYIH/7mCB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+8hAX/vIQF/7uDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yDBf+8hAX/vIQF/7yDBf+8hAb/vIQG/8CHA//AhgP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhwT/wIcE/8CGA//AhgL/xYkC/8WJAf/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYoC/8WJAf/FigP/x48O/8yaJ//JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/Jkxf/1q9T/+HAdf/p0p//8+fN/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y40A/8ugPf/y693+/v36/v/////////+yo4A/sqNAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgH/y44A/8uOAP/LjQD/yo4A/8uOAP/LjgD/y44B/8uOAf/LjgD/y44A/8uOAP/LjgD/y44B/8qNAP/Ljwb/2Llz//r59f7+///+/v7+//7+/v7KjgD+yo0A/8uOAP/LjgD/yo4A/8qOAP/KjgD/yo4A/8uOAP/LjgD/yo4A/8uOAP/LjgD/yo0A/8uNAP/LjgH/yY0B/8eNCP/KjgP/yo0A/8uNAP/KjQD/yo0A/8qNAP/LjwL/0Job/9++cf/17+D//v7+/v////7+/v7//v7+/suOAfrLjgD/yo0A/8uOAP/LjgH/yo4A/8qOAP/KjgD/y44A/8qOAP/KjgD/y44A/8uOAf/KjgD/yo0A/8mMAP/HmjT/wat5/6iLSP/Npk7/xZgw/8+fMf/Wpjn/2rBP/+LCd//w37n/+/jy//7+///+/v7////////////+/v7/vJIyvruKGf/Mkgz/yo4A/8qNAP/KjQD/yo0A/8qOAP/KjgD/yo4A/8qNAP/KjQD/yo0A/8uOAf/QmRj/yaNN/9DGrf/l5eb/pqWj/+nm3//EvrH/4drJ/vnz4/779uz//fz5//////7////+/v7+//7+/v////////////7+/v+Vk42UmY95/+bOmf/gvWr/2a1I/9SjMv/Rmx//z5YT/8+VEf/PlRH/z5cX/9OfKP/Zq0P/4b9x/+3bs//QzMT/w8PD/urq6v62trb+6Ojo/rS0tf7a29v+/f39/v7///7+/v7//////v////7+/v7//v7+//////7////+/////peWlpWSkpP/9vb1//379//59Of/9u3X//Lkxf/w37j/7tyy/+/cs//x4bv/9enO//nz5P/39fL/ycnK/6+vr/+lpKT/vb29/5SUlP+5ubn/p6en/7Gxsf/R0dH//Pz8///////+/v7//v7+//7+/v/+/v7////////////+/v7/qampmJGRkf/y8vL////+//7+/v/////////////////+/v7//v7+//7+///+/////////+Hh4P+6ubn/7+/v/+zs7P/X19f/xsbG/97e3v/19fX/6urr/7i4uP/x8fH///////7+/v7//////v7+//7+/v////////////7+/v+bm5tng4OD8O3t7f///////////v///v7+/v7//v7+/v/+/v7+/v7++fn5/vb29v76+vr+5+fo/7e3t//t7e3/+Pj4/t3d3f7Y2Nj+8vLy/v7+/v7Y2Nj+vr6+/vj4+P7//////////v////7+/v7//v7+//////7////+/////jU1NSNxcXHY5ubm//////7////+//////7+/v//////7+/v/tDQ0P++vr7+urq6/r6+vv/R0dH+z8/P/qysrP9nZ2f+Kysr/yMjI/9bW1v/q6ur/729vf7k5OT+5eXl/9ra2v/f39/+8PDw/v39/f/////+/v7+/v/////////+jY2NJ3V1ddrb29v//////v////7//////v7+/+Hh4f+1tbX+ysrK/+Pj4/7n5+f+4+Pj/8nJyf6+vr7+t7e3/ywsLP4AAAD/AAAA/wYGBv+Ghob/19fX/r6+vv68vLz/wcHB/76+vv65ubn+x8fH//Hx8f7////+//////////7g4OAkhISE2cXFxf///////////v/////n5+f/tbW1/+Tk5P///////////v/////////+/v7+/uDg4P+2trb/rq6u/25ubv9ZWVn/g4OD/7u7u/++vr7/5OTk/vr6+v/9/f3//Pz8/vDw8P/Kysr/t7e3//Dw8P///////////4eHh4BdXV3xo6Oj///////////++/v7/8HBwf/BwcH/ra2t/8bGxv/6+vr///////7+/v/+/v7+/////9bW1v/ExMT/9vb2//b29v/d3d3/vr6+/+Tk5P/x8fH//v7+//7+/v/+/v7+//////39/f/Nzc3/w8PD//v7+///////hoaG+JaWlv+Li4v/9/f3///////u7u7/q6ur/1JSUv8TExP/Z2dn/9HR0f/9/f3//v7+////////////8vLy/7i4uP/v7+//+vr6/8DAwP+cnJz/VFRU/25ubv/c3Nz//v7+//////7+/v7///////T09P+3t7f/6+vr///////v7+//7Ozs/3x8fP/Y2Nj+/////ufn5/+Tk5P/FhYW/wUFBf83Nzf/mZmZ//v7+//+/v7//////v/////6+vr/w8PD/+fn5//z8/P/rKys/zk5Of8AAAD/RUVF/piYmP/19fX//////v7+/v///////f39/8TExP/e3t7////////////R0dH/MzMz/5eXl///////5+fn/7Ozs/9oaGj/FxcX/zo6Ov/IyMj//v7+//7+/v////////////j4+P+9vb3/6+vr//Dw8P+zs7P/TExM/wAAAP8ODg7+goKC//r6+v/////+/v7+///////+/v7/x8fH/9zc3P///////////7i4uP8ZGRn/Pz8//t/f3/729vb+vb29/9vb2/7ExMT+29vb//39/f7+/v7+/////v////7////+5eXl/rm5uf729vb/8/Pz/76+vv/BwcH+cnJy/n5+fv7g4OD///////7+/v7+/v7+//////j4+P68vLz+5ubm//////7////+8fHx/7Kysv+FhYX+i4uL/vT09P/U1NT/vb29//n5+f7//////v7+/v////7//////////vb29v69vb3/1tbW///////9/f3/x8fH/87Ozv/5+fn+/Pz8/v///////////////v////7/////39/f/rm5uf74+Pj/7u7u/snJyf/4+Pj+//////Ly8v6IiIj+m5ub//T09P/IyMj/vb29/ufn5//6+vr+/Pz8/vr6+v/n5+f+vb29/snJyf/6+vr////////////w8PD/t7e3/9jY2P79/f3+///////////////+/////unp6f+3t7f+4uLi//Hx8f+Ojo7+c3Nz5ZCQkP6jo6P/oKCg/n5+fvpOTk7hnJyc++Hh4f/W1tb+vb29/8DAwP/BwcH/vr6+/7m5uf7W1tb++vr6///////////////////////p6en/ubm5/sPDw/7f39//6Ojo/+Tk5P7MzMz/tra2/93d3f7q6ur/g4OD/3BwcP+rq6s/cHBwZkVFRWlKSkpnhYWFX4yMjDhtbW2bd3d3662trf/Y2Nj/5OTk/uXl5f/p6en/9vb2/v////////////////7+/v/////////////////19fX/1tbW/8LCwv+9vb3/wcHB/9HR0f/k5OT/xsbG/319ffNjY2POa2tr0hEREQD///8A////ALy8vAAAAAAAAAAAAM7Ozgt2dnZFbW1to3t7e+uZmZn/t7e3/9fX1//o6Oj/8PDw//b29v/6+vr//f39////////////////////////////9/f3/+rq6v/d3d3+t7e3/46Ojv58fHzgh4eHcry8vBdwcHAdw8PDAICAgAAgICAAPz8/AJiYmADGxsYAl5eXAf///wDKysoNqampU319fY5wcHDFe3t793d3d/WBgYH5kZGR/KOjo/uzs7P7v7+/+8XFxfvGxsb7wMDA+7Ozs/ucnJz8gYGB+nh4ePpxcXHMiYmJi76+vjz///8FqqqqAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAAAAAAAFBLBwipcxPwvhAAAL4QAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcaW1nL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABEAAABzdGF0aWNcaW1nXGJnLnBuZ4lQTkcNChoKAAAADUlIRFIAAACWAAAAlggCAAAAs2PmtQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANmaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDk3MEYzQ0VCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDk3MEYzQ0RCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQUFCQkVBMThGQjVFMjExQkJFM0FC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bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFDMTUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCMDE1QUFDMjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkIwMTVBQUJGNTI0NDExRTI4RjEzQTA0OUM5QUZBOTdDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkIwMTVBQUMwNTI0NDExRTI4RjEzQTA0OUM5QUZBOTdDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAAGQAZAAABP8wmZQQQWZKvDnFSIWEIykZJaodmHGdBHVM7HdQH3qHKJWNhAsoc7LwRIGWj4jyYAiZYPR3cWV+zSchMIly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bigpIHsNCiAgICB2YXIgdG9wID0gJCgnI25hdicpLm9mZnNldCgpLnRvcDsNCiAgICB2YXIgJHRvcCA9ICQoJyNnby10b3AnKTsNCiAgICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKHRvcCA8ICQodGhpcykuc2Nyb2xsVG9wKCkpIHsNCiAgICAgICAgICAgICR0b3AucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR0b3AuYWRkQ2xhc3MoJ2hpZGUnKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgICR0b3Aub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IDB9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSkNCn0NCg0KZnVuY3Rpb24gcmVuZGVyTWFya2Rvd24oKSB7DQogICAgdmFyICRtZCA9ICQoJy5tYXJrZG93bicpOw0KICAgICRtZC5lYWNoKGZ1bmN0aW9uIChpLCBpdGVtKSB7DQogICAgICAgICQoaXRlbSkuaHRtbChtYXJrZWQoJChpdGVtKS5odG1sKCkucmVwbGFjZSgvJmd0Oy9nLCAnPicpKSk7DQogICAgfSk7DQogICAgdmFyIGNvZGUgPSAkbWQuZmluZCgncHJlIGNvZGUnKTsNCiAgICBpZiAoY29kZS5sZW5ndGgpIHsNCiAgICAgICAgJCgiPGxpbms+IikuYXR0cih7IHJlbDogInN0eWxlc2hlZXQiLCB0eXBlOiAidGV4dC9jc3MiLCBocmVmOiAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyJ9KS5hcHBlbmRUbygiaGVhZCIpOw0KICAgICAgICAkLmdldFNjcmlwdCgiL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGNvZGUuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soaXRlbSkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGluaXRDb21tZW50KCkgew0KICAgIHZhciAkbGlzdCA9ICQoJyNjb21tZW50LWxpc3QnKTsNCiAgICBpZiAoISRsaXN0Lmxlbmd0aCkgew0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1hdXRob3IiKSkgew0KICAgICAgICAkKCcjY29tbWVudC1hdXRob3InKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpOw0KICAgICAgICAkKCcjY29tbWVudC1lbWFpbCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1lbWFpbCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtdXJsJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LXVybCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXZhdGFyJykuYXR0cigic3JjIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXZhdGFyIikpOw0KICAgICAgICAkKCcuYy1hdmF0YXInKS5yZW1vdmVDbGFzcygibnVsbCIpOw0KICAgIH0NCiAgICAkKCcjY29tbWVudC1jb250ZW50Jykub24oImZvY3VzIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoJCgnLmMtYXZhdGFyJykuaGFzQ2xhc3MoIm51bGwiKSkgew0KICAgICAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICAgICAkKCcuYy1pbmZvLWZpZWxkcycpLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkKCcubm90LW1lJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1hdmF0YXItZmllbGQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnI2NvbW1lbnQtc2hvdycpLm9uKCJjbGljayIsICIuZW5hYmxlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIjY29tbWVudC1zaG93IikucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWF1dGhvciIsICQoJyNjb21tZW50LWF1dGhvcicpLnZhbCgpKTsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWVtYWlsIiwgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC11cmwiLCAkKCcjY29tbWVudC11cmwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdmF0YXIiLCBqc29uLmNvbW1lbnQuYXZhdGFyKTsNCiAgICAgICAgICAgIHZhciB0cGwgPSAkKCQoJyNjb21tZW50LXRwbCcpLmh0bWwoKSk7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXZhdGFyIikuYXR0cigic3JjIiwganNvbi5jb21tZW50LmF2YXRhcikuYXR0cigiYWx0IiwganNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXV0aG9yIikuYXR0cigiaHJlZiIsIGpzb24uY29tbWVudC51cmwpLnRleHQoanNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtcmVwbHkiKS5hdHRyKCJyZWwiLCBqc29uLmNvbW1lbnQuaWQpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKGpzb24uY29tbWVudC5jb250ZW50KTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQucGFyZW50X21kKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXAtbWQiKS5odG1sKG1hcmtlZChqc29uLmNvbW1lbnQucGFyZW50X21kKSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0cGwuYXR0cigiaWQiLCAiY29tbWVudC0iICsganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQuc3RhdHVzID09ICJhcHByb3ZlZCIpIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtY2hlY2siKS5yZW1vdmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRsaXN0LmFwcGVuZCh0cGwpOw0KICAgICAgICAgICAgJCgnLmNhbmNlbC1yZXBseScpLnRyaWdnZXIoImNsaWNrIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykudmFsKCIiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGFsZXJ0KCLmj5DkuqTlpLHotKUhIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkbGlzdC5vbigiY2xpY2siLCAiLmMtcmVwbHkiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZXBseS1tZCcpLnJlbW92ZSgpOw0KICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICB2YXIgcGMgPSAkKCcjY29tbWVudC0nICsgaWQpOw0KICAgICAgICB2YXIgbWQgPSAiPiBAIiArIHBjLmZpbmQoIi5jLWF1dGhvciIpLnRleHQoKSArICJcblxuIjsNCiAgICAgICAgbWQgKz0gIj4gIiArIHBjLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKCkgKyAiXG4iOw0KICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykuYmVmb3JlKCc8ZGl2IGNsYXNzPSJyZXBseS1tZCBtYXJrZG93biI+JyArIG1hcmtlZChtZCkgKyAnPC9kaXY+Jyk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbChpZCk7DQogICAgICAgIGlmICgkKCcjY29tbWVudC1zaG93JykubGVuZ3RoKSB7DQogICAgICAgICAgICAkKCcjY29tbWVudC1zaG93IC5lbmFibGUnKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICB9DQogICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS5zaG93KCk7DQogICAgICAgIHZhciB0b3AgPSAkKCcjY29tbWVudC1mb3JtJykub2Zmc2V0KCkudG9wOw0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IHRvcH0sIDUwMCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCiAgICAkKCcuY2FuY2VsLXJlcGx5Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAkKHRoaXMpLmhpZGUoKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KfQ0KUEsHCB7hHnJ1EgAAdRIAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHN0YXRpY1xqc1x1cGxvYWQuanNmdW5jdGlvbiBpbml0VXBsb2FkKHApIHsNCiAgICAkKCcjYXR0YWNoLXNob3cnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICB9KTsNCiAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmIChjb25maXJtKCLnq4vljbPkuIrkvKA/IikpIHsNCiAgICAgICAgICAgIHZhciBiYXIgPSAkKCc8cCBjbGFzcz0iZmlsZS1wcm9ncmVzcyBpbmxpbmUtYmxvY2siPjAlPC9wPicpOw0KICAgICAgICAgICAgJCgnI2F0dGFjaC1mb3JtJykuYWpheFN1Ym1pdCh7DQogICAgICAgICAgICAgICAgImJlZm9yZVN1Ym1pdCI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgJChwKS5iZWZvcmUoYmFyKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJ1cGxvYWRQcm9ncmVzcyI6IGZ1bmN0aW9uIChldmVudCwgcG9zaXRpb24sIHRvdGFsLCBwZXJjZW50Q29tcGxldGUpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRWYWwgPSBwZXJjZW50Q29tcGxldGUgKyAnJSc7DQogICAgICAgICAgICAgICAgICAgIGJhci5jc3MoIndpZHRoIiwgcGVyY2VudFZhbCkuaHRtbChwZXJjZW50VmFsKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoanNvbi5tc2cpLmFkZENsYXNzKCJlcnIiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhci5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMDApOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoIi8iICsganNvbi5maWxlLlVybCArICImbmJzcDsmbmJzcDsmbmJzcDsoQCIgKyBqc29uLmZpbGUuTmFtZSArICIpIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJCgnI2F0dGFjaC11cGxvYWQnKS52YWwoIiIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJCh0aGlzKS52YWwoIiIpOw0KICAgICAgICB9DQogICAgfSk7DQp9UEsHCIiJF/v2BAAA9gQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHN0YXRpY1xsaWIvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAHN0YXRpY1xsaWJcY29kZW1pcnJvci1tb2RlLm1pbi5qcyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0vXihccyopKFsqKy1dfChcZCspXC4pKFxzKikvLGU9IiorLSI7Q29kZU1pcnJvci5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT1yLmdldEN1cnNvcigpLG89ci5nZXRTdGF0ZUFmdGVyKGkubGluZSkubGlzdCE9PSExO2lmKCFvfHwhKG49ci5nZXRMaW5lKGkubGluZSkubWF0Y2godCkpKXJldHVybiByLmV4ZWNDb21tYW5kKCJuZXdsaW5lQW5kSW5kZW50Iiksdm9pZCAwO3ZhciBsPW5bMV0sYT1uWzRdLHM9ZS5pbmRleE9mKG5bMl0pPj0wP25bMl06cGFyc2VJbnQoblszXSwxMCkrMSsiLiI7ci5yZXBsYWNlU2VsZWN0aW9uKCJcbiIrbCtzK2EsImVuZCIpfX0oKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoIm1hcmtkb3duIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlLHIpe3JldHVybiBlLmY9ZS5pbmxpbmU9cixyKHQsZSl9ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIGUuZj1lLmJsb2NrPXIscih0LGUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubGlua1RpdGxlPSExLHQuZW09ITEsdC5zdHJvbmc9ITEsdC5xdW90ZT0wLGd8fHQuZiE9bHx8KHQuZj1jLHQuYmxvY2s9byksdC50cmFpbGluZ1NwYWNlPTAsdC50cmFpbGluZ1NwYWNlTmV3TGluZT0hMSx0LnRoaXNMaW5lSGFzQ29udGVudD0hMSxudWxsfWZ1bmN0aW9uIG8odCxpKXt2YXIgbz1pLmxpc3QhPT0hMTtpLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbkRpZmY+PTA/KGkuaW5kZW50YXRpb25EaWZmPDQmJihpLmluZGVudGF0aW9uLT1pLmluZGVudGF0aW9uRGlmZiksaS5saXN0PW51bGwpOmkubGlzdCE9PSExJiZpLmluZGVudGF0aW9uPjA/KGkubGlzdD1udWxsLGkubGlzdERlcHRoPU1hdGguZmxvb3IoaS5pbmRlbnRhdGlvbi80KSk6aS5saXN0IT09ITEmJihpLmxpc3Q9ITEsaS5saXN0RGVwdGg9MCk7dmFyIGw9bnVsbDtpZihpLmluZGVudGF0aW9uRGlmZj49NClyZXR1cm4gaS5pbmRlbnRhdGlvbi09NCx0LnNraXBUb0VuZCgpLGs7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO2lmKGw9dC5tYXRjaChSKSlpLmhlYWRlcj1sWzBdLmxlbmd0aDw9Nj9sWzBdLmxlbmd0aDo2O2Vsc2UgaWYoaS5wcmV2TGluZUhhc0NvbnRlbnQmJihsPXQubWF0Y2goRykpKWkuaGVhZGVyPSI9Ij09bFswXS5jaGFyQXQoMCk/MToyO2Vsc2UgaWYodC5lYXQoIj4iKSlmb3IoaS5pbmRlbnRhdGlvbisrLGkucXVvdGU9MSx0LmVhdFNwYWNlKCk7dC5lYXQoIj4iKTspdC5lYXRTcGFjZSgpLGkucXVvdGUrKztlbHNle2lmKCJbIj09PXQucGVlaygpKXJldHVybiByKHQsaSxoKTtpZih0Lm1hdGNoKEksITApKXJldHVybiBBO2lmKGkucHJldkxpbmVIYXNDb250ZW50JiYhb3x8IXQubWF0Y2goUCwhMCkmJiF0Lm1hdGNoKEYsITApKXtpZihlLmZlbmNlZENvZGVCbG9ja3MmJnQubWF0Y2goL15gYGAoW1x3KyNdKikvLCEwKSlyZXR1cm4gaS5sb2NhbE1vZGU9eChSZWdFeHAuJDEpLGkubG9jYWxNb2RlJiYoaS5sb2NhbFN0YXRlPWkubG9jYWxNb2RlLnN0YXJ0U3RhdGUoKSksbih0LGksYSksa31lbHNlIGkuaW5kZW50YXRpb24rPTQsaS5saXN0PSEwLGkubGlzdERlcHRoKyssZS50YXNrTGlzdHMmJnQubWF0Y2goQiwhMSkmJihpLnRhc2tMaXN0PSEwKX1yZXR1cm4gcih0LGksaS5pbmxpbmUpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj12LnRva2VuKHQsZS5odG1sU3RhdGUpO3JldHVybiBnJiYidGFnIj09PXImJiJvcGVuVGFnIiE9PWUuaHRtbFN0YXRlLnR5cGUmJiFlLmh0bWxTdGF0ZS5jb250ZXh0JiYoZS5mPWMsZS5ibG9jaz1vKSxlLm1kX2luc2lkZSYmLTEhPXQuY3VycmVudCgpLmluZGV4T2YoIj4iKSYmKGUuZj1jLGUuYmxvY2s9byxlLmh0bWxTdGF0ZS5jb250ZXh0PXZvaWQgMCkscn1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQuc29sKCkmJnQubWF0Y2goL15gYGAvLCEwKT8oZS5sb2NhbE1vZGU9ZS5sb2NhbFN0YXRlPW51bGwsZS5mPWMsZS5ibG9jaz1vLGspOmUubG9jYWxNb2RlP2UubG9jYWxNb2RlLnRva2VuKHQsZS5sb2NhbFN0YXRlKToodC5za2lwVG9FbmQoKSxrKX1mdW5jdGlvbiBzKHQpe3ZhciBlPVtdO2lmKHQudGFza09wZW4pcmV0dXJuIm1ldGEiO2lmKHQudGFza0Nsb3NlZClyZXR1cm4icHJvcGVydHkiO2lmKHQuc3Ryb25nJiZlLnB1c2goeiksdC5lbSYmZS5wdXNoKEUpLHQubGlua1RleHQmJmUucHVzaChPKSx0LmNvZGUmJmUucHVzaChrKSx0LmhlYWRlciYmKGUucHVzaChDKSxlLnB1c2goQyt0LmhlYWRlcikpLHQucXVvdGUmJmUucHVzaCh0LnF1b3RlJTI/dzpMKSx0Lmxpc3QhPT0hMSl7dmFyIHI9KHQubGlzdERlcHRoLTEpJTM7cj8xPT09cj9lLnB1c2goTSk6ZS5wdXNoKFQpOmUucHVzaChTKX1yZXR1cm4gdC50cmFpbGluZ1NwYWNlTmV3TGluZT9lLnB1c2goInRyYWlsaW5nLXNwYWNlLW5ldy1saW5lIik6dC50cmFpbGluZ1NwYWNlJiZlLnB1c2goInRyYWlsaW5nLXNwYWNlLSIrKHQudHJhaWxpbmdTcGFjZSUyPyJhIjoiYiIpKSxlLmxlbmd0aD9lLmpvaW4oIiAiKTpudWxsfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdC5tYXRjaChfLCEwKT9zKGUpOnZvaWQgMH1mdW5jdGlvbiBjKHQsaSl7dmFyIG89aS50ZXh0KHQsaSk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBvKXJldHVybiBvO2lmKGkubGlzdClyZXR1cm4gaS5saXN0PW51bGwscyhpKTtpZihpLnRhc2tMaXN0KXt2YXIgYT0ieCIhPT10Lm1hdGNoKEIsITApWzFdO3JldHVybiBhP2kudGFza09wZW49ITA6aS50YXNrQ2xvc2VkPSEwLGkudGFza0xpc3Q9ITEscyhpKX1pLnRhc2tPcGVuPSExLGkudGFza0Nsb3NlZD0hMTt2YXIgdT10LnNvbCgpLGM9dC5uZXh0KCk7aWYoIlxcIj09PWMpcmV0dXJuIHQubmV4dCgpLHMoaSk7aWYoaS5saW5rVGl0bGUpe2kubGlua1RpdGxlPSExO3ZhciBoPWM7IigiPT09YyYmKGg9IikiKSxoPShoKyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpO3ZhciBkPSJeXFxzKig/OlteIitoKyJcXFxcXSt8XFxcXFxcXFx8XFxcXC4pIitoO2lmKHQubWF0Y2gobmV3IFJlZ0V4cChkKSwhMCkpcmV0dXJuIFd9aWYoImAiPT09Yyl7dmFyIHA9cyhpKSxnPXQucG9zO3QuZWF0V2hpbGUoImAiKTt2YXIgdj0xK3QucG9zLWc7cmV0dXJuIGkuY29kZT92PT09Yj8oaS5jb2RlPSExLHApOnMoaSk6KGI9dixpLmNvZGU9ITAscyhpKSl9aWYoaS5jb2RlKXJldHVybiBzKGkpO2lmKCIhIj09PWMmJnQubWF0Y2goL1xbW15cXV0qXF0gPyg/OlwofFxbKS8sITEpKXJldHVybiB0Lm1hdGNoKC9cW1teXF1dKlxdLyksaS5pbmxpbmU9aS5mPWYsTjtpZigiWyI9PT1jJiZ0Lm1hdGNoKC8uKlxdKFwofCA/XFspLywhMSkpcmV0dXJuIGkubGlua1RleHQ9ITAscyhpKTtpZigiXSI9PT1jJiZpLmxpbmtUZXh0KXt2YXIgeT1zKGkpO3JldHVybiBpLmxpbmtUZXh0PSExLGkuaW5saW5lPWkuZj1mLHl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXihodHRwcz98ZnRwcz8pOlwvXC8oPzpbXlxcPl18XFwuKSs+LywhMSkpcmV0dXJuIHIodCxpLG0oSCwiPiIpKTtpZigiPCI9PT1jJiZ0Lm1hdGNoKC9eW14+IFxcXStAKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEQsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXlx3LywhMSkpe2lmKC0xIT10LnN0cmluZy5pbmRleE9mKCI+Iikpe3ZhciB4PXQuc3RyaW5nLnN1YnN0cmluZygxLHQuc3RyaW5nLmluZGV4T2YoIj4iKSk7L21hcmtkb3duXHMqPVxzKignfCIpezAsMX0xKCd8Iil7MCwxfS8udGVzdCh4KSYmKGkubWRfaW5zaWRlPSEwKX1yZXR1cm4gdC5iYWNrVXAoMSksbih0LGksbCl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXlwvXHcqPz4vKSlyZXR1cm4gaS5tZF9pbnNpZGU9ITEsInRhZyI7dmFyIEM9ITE7aWYoIWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYiXyI9PT1jJiYiXyIhPT10LnBlZWsoKSYmdC5tYXRjaCgvKFx3KS8sITEpKXt2YXIgaz10LnBvcy0yO2lmKGs+PTApe3ZhciB3PXQuc3RyaW5nLmNoYXJBdChrKTsiXyIhPT13JiZ3Lm1hdGNoKC8oXHcpLywhMSkmJihDPSEwKX19dmFyIHA9cyhpKTtpZigiKiI9PT1jfHwiXyI9PT1jJiYhQylpZih1JiYiICI9PT10LnBlZWsoKSk7ZWxzZXtpZihpLnN0cm9uZz09PWMmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz0hMSxwO2lmKCFpLnN0cm9uZyYmdC5lYXQoYykpcmV0dXJuIGkuc3Ryb25nPWMscyhpKTtpZihpLmVtPT09YylyZXR1cm4gaS5lbT0hMSxwO2lmKCFpLmVtKXJldHVybiBpLmVtPWMscyhpKX1lbHNlIGlmKCIgIj09PWMmJih0LmVhdCgiKiIpfHx0LmVhdCgiXyIpKSl7aWYoIiAiPT09dC5wZWVrKCkpcmV0dXJuIHMoaSk7dC5iYWNrVXAoMSl9cmV0dXJuIiAiPT09YyYmKHQubWF0Y2goLyArJC8sITEpP2kudHJhaWxpbmdTcGFjZSsrOmkudHJhaWxpbmdTcGFjZSYmKGkudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITApKSxzKGkpfWZ1bmN0aW9uIGYodCxlKXtpZih0LmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7dmFyIG49dC5uZXh0KCk7cmV0dXJuIigiPT09bnx8IlsiPT09bj9yKHQsZSxtKFcsIigiPT09bj8iKSI6Il0iKSk6ImVycm9yIn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQubWF0Y2goL15bXlxdXSpcXTovLCEwKT8oZS5mPWQsTyk6cih0LGUsYyl9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0LmVhdFNwYWNlKCk/bnVsbDoodC5tYXRjaCgvXlteXHNdKy8sITApLHZvaWQgMD09PXQucGVlaygpP2UubGlua1RpdGxlPSEwOnQubWF0Y2goL14oPzpccysoPzoiKD86W14iXFxdfFxcXFx8XFwuKSsifCcoPzpbXidcXF18XFxcXHxcXC4pKyd8XCgoPzpbXilcXF18XFxcXHxcXC4pK1wpKSk/LywhMCksZS5mPWUuaW5saW5lPWMsVyl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gVlt0XXx8KHQ9KHQrIiIpLnJlcGxhY2UoLyhbLj8qK14kW1xdXFwoKXt9fC1dKS9nLCJcXCQxIiksVlt0XT1uZXcgUmVnRXhwKCJeKD86W15cXFxcXXxcXFxcLikqPygiK3QrIikiKSksVlt0XX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gcj1yfHxjLGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4ubWF0Y2gocChlKSksaS5pbmxpbmU9aS5mPXIsdH19dmFyIGc9Q29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eSgieG1sIiksdj1Db2RlTWlycm9yLmdldE1vZGUodCxnP3tuYW1lOiJ4bWwiLGh0bWxNb2RlOiEwfToidGV4dC9wbGFpbiIpLHk9e2h0bWw6Imh0bWxtaXhlZCIsanM6ImphdmFzY3JpcHQiLGpzb246ImFwcGxpY2F0aW9uL2pzb24iLGM6InRleHQveC1jc3JjIiwiYysrIjoidGV4dC94LWMrK3NyYyIsamF2YToidGV4dC94LWphdmEiLGNzaGFycDoidGV4dC94LWNzaGFycCIsImMjIjoidGV4dC94LWNzaGFycCIsc2NhbGE6InRleHQveC1zY2FsYSJ9LHg9ZnVuY3Rpb24oKXt2YXIgZSxyLG49e30saT17fSxvPVtdO2Zvcih2YXIgbCBpbiBDb2RlTWlycm9yLm1vZGVzKUNvZGVNaXJyb3IubW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJm8ucHVzaChsKTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKW5bb1tlXV09b1tlXTt2YXIgYT1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5taW1lTW9kZXMpQ29kZU1pcnJvci5taW1lTW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJmEucHVzaCh7bWltZTpsLG1vZGU6Q29kZU1pcnJvci5taW1lTW9kZXNbbF19KTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXI9YVtlXS5taW1lLGlbcl09YVtlXS5taW1lO2Zvcih2YXIgcyBpbiB5KSh5W3NdaW4gbnx8eVtzXWluIGkpJiYobltzXT15W3NdKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV0/Q29kZU1pcnJvci5nZXRNb2RlKHQsbltlXSk6bnVsbH19KCk7dm9pZCAwPT09ZS51bmRlcnNjb3Jlc0JyZWFrV29yZHMmJihlLnVuZGVyc2NvcmVzQnJlYWtXb3Jkcz0hMCksdm9pZCAwPT09ZS5mZW5jZWRDb2RlQmxvY2tzJiYoZS5mZW5jZWRDb2RlQmxvY2tzPSExKSx2b2lkIDA9PT1lLnRhc2tMaXN0cyYmKGUudGFza0xpc3RzPSExKTt2YXIgYj0wLEM9ImhlYWRlciIsaz0iY29tbWVudCIsdz0iYXRvbSIsTD0ibnVtYmVyIixTPSJ2YXJpYWJsZS0yIixNPSJ2YXJpYWJsZS0zIixUPSJrZXl3b3JkIixBPSJociIsTj0idGFnIixIPSJsaW5rIixEPSJsaW5rIixPPSJsaW5rIixXPSJzdHJpbmciLEU9ImVtIix6PSJzdHJvbmciLEk9L14oWypcLT1fXSkoPzpccypcMSl7Mix9XHMqJC8sUD0vXlsqXC0rXVxzKy8sRj0vXlswLTldK1wuXHMrLyxCPS9eXFsoeHwgKVxdKD89XHMpLyxSPS9eIysvLEc9L14oPzpcPXsxLH18LXsxLH0pJC8sXz0vXlteIVxbXF0qX1xcPD5gICInKF0rLyxWPVtdO3JldHVybntzdGFydFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue2Y6byxwcmV2TGluZUhhc0NvbnRlbnQ6ITEsdGhpc0xpbmVIYXNDb250ZW50OiExLGJsb2NrOm8saHRtbFN0YXRlOkNvZGVNaXJyb3Iuc3RhcnRTdGF0ZSh2KSxpbmRlbnRhdGlvbjowLGlubGluZTpjLHRleHQ6dSxsaW5rVGV4dDohMSxsaW5rVGl0bGU6ITEsZW06ITEsc3Ryb25nOiExLGhlYWRlcjowLHRhc2tMaXN0OiExLGxpc3Q6ITEsbGlzdERlcHRoOjAscXVvdGU6MCx0cmFpbGluZ1NwYWNlOjAsdHJhaWxpbmdTcGFjZU5ld0xpbmU6ITF9fSxjb3B5U3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJue2Y6dC5mLHByZXZMaW5lSGFzQ29udGVudDp0LnByZXZMaW5lSGFzQ29udGVudCx0aGlzTGluZUhhc0NvbnRlbnQ6dC50aGlzTGluZUhhc0NvbnRlbnQsYmxvY2s6dC5ibG9jayxodG1sU3RhdGU6Q29kZU1pcnJvci5jb3B5U3RhdGUodix0Lmh0bWxTdGF0ZSksaW5kZW50YXRpb246dC5pbmRlbnRhdGlvbixsb2NhbE1vZGU6dC5sb2NhbE1vZGUsbG9jYWxTdGF0ZTp0LmxvY2FsTW9kZT9Db2RlTWlycm9yLmNvcHlTdGF0ZSh0LmxvY2FsTW9kZSx0LmxvY2FsU3RhdGUpOm51bGwsaW5saW5lOnQuaW5saW5lLHRleHQ6dC50ZXh0LGxpbmtUaXRsZTp0LmxpbmtUaXRsZSxlbTp0LmVtLHN0cm9uZzp0LnN0cm9uZyxoZWFkZXI6dC5oZWFkZXIsdGFza0xpc3Q6dC50YXNrTGlzdCxsaXN0OnQubGlzdCxsaXN0RGVwdGg6dC5saXN0RGVwdGgscXVvdGU6dC5xdW90ZSx0cmFpbGluZ1NwYWNlOnQudHJhaWxpbmdTcGFjZSx0cmFpbGluZ1NwYWNlTmV3TGluZTp0LnRyYWlsaW5nU3BhY2VOZXdMaW5lLG1kX2luc2lkZTp0Lm1kX2luc2lkZX19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYodC5zb2woKSl7aWYodC5tYXRjaCgvXlxzKiQvLCEwKSlyZXR1cm4gZS5wcmV2TGluZUhhc0NvbnRlbnQ9ITEsaShlKTtlLnByZXZMaW5lSGFzQ29udGVudD1lLnRoaXNMaW5lSGFzQ29udGVudCxlLnRoaXNMaW5lSGFzQ29udGVudD0hMCxlLmhlYWRlcj0wLGUudGFza0xpc3Q9ITEsZS5jb2RlPSExLGUudHJhaWxpbmdTcGFjZT0wLGUudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsZS5mPWUuYmxvY2s7dmFyIHI9dC5tYXRjaCgvXlxzKi8sITApWzBdLnJlcGxhY2UoL1x0L2csIiAgICAiKS5sZW5ndGgsbj00Kk1hdGguZmxvb3IoKHItZS5pbmRlbnRhdGlvbikvNCk7bj40JiYobj00KTt2YXIgbz1lLmluZGVudGF0aW9uK247aWYoZS5pbmRlbnRhdGlvbkRpZmY9by1lLmluZGVudGF0aW9uLGUuaW5kZW50YXRpb249byxyPjApcmV0dXJuIG51bGx9cmV0dXJuIGUuZih0LGUpfSxibGFua0xpbmU6aSxnZXRUeXBlOnN9fSwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbWFya2Rvd24iLCJtYXJrZG93biIpLENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiByKHIpe3JldHVybiBlLnRva2VuaXplPXIscih0LGUpfXZhciBpPXQubmV4dCgpO2lmKCI8Ij09aSl7aWYodC5lYXQoIiEiKSlyZXR1cm4gdC5lYXQoIlsiKT90Lm1hdGNoKCJDREFUQVsiKT9yKG8oImF0b20iLCJdXT4iKSk6bnVsbDp0Lm1hdGNoKCItLSIpP3IobygiY29tbWVudCIsIi0tPiIpKTp0Lm1hdGNoKCJET0NUWVBFIiwhMCwhMCk/KHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLHIobCgxKSkpOm51bGw7aWYodC5lYXQoIj8iKSlyZXR1cm4gdC5lYXRXaGlsZSgvW1x3XC5fXC1dLyksZS50b2tlbml6ZT1vKCJtZXRhIiwiPz4iKSwibWV0YSI7dmFyIGE9dC5lYXQoIi8iKTt4PSIiO2Zvcih2YXIgcztzPXQuZWF0KC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKTspeCs9cztyZXR1cm4geD8oYj1hPyJjbG9zZVRhZyI6Im9wZW5UYWciLGUudG9rZW5pemU9biwidGFnIik6InRhZyBlcnJvciJ9aWYoIiYiPT1pKXt2YXIgdTtyZXR1cm4gdT10LmVhdCgiIyIpP3QuZWF0KCJ4Iik/dC5lYXRXaGlsZSgvW2EtZkEtRlxkXS8pJiZ0LmVhdCgiOyIpOnQuZWF0V2hpbGUoL1tcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXHdcLlwtOl0vKSYmdC5lYXQoIjsiKSx1PyJhdG9tIjoiZXJyb3IifXJldHVybiB0LmVhdFdoaWxlKC9bXiY8XS8pLG51bGx9ZnVuY3Rpb24gbih0LGUpe3ZhciBuPXQubmV4dCgpO2lmKCI+Ij09bnx8Ii8iPT1uJiZ0LmVhdCgiPiIpKXJldHVybiBlLnRva2VuaXplPXIsYj0iPiI9PW4/ImVuZFRhZyI6InNlbGZjbG9zZVRhZyIsInRhZyI7aWYoIj0iPT1uKXJldHVybiBiPSJlcXVhbHMiLG51bGw7aWYoIjwiPT1uKXtlLnRva2VuaXplPXI7dmFyIG89ZS50b2tlbml6ZSh0LGUpO3JldHVybiBvP28rIiBlcnJvciI6ImVycm9yIn1yZXR1cm4vW1wnXCJdLy50ZXN0KG4pPyhlLnRva2VuaXplPWkobiksZS5zdHJpbmdTdGFydENvbD10LmNvbHVtbigpLGUudG9rZW5pemUodCxlKSk6KHQuZWF0V2hpbGUoL1teXHNcdTAwYTA9PD5cIlwnXS8pLCJ3b3JkIil9ZnVuY3Rpb24gaSh0KXt2YXIgZT1mdW5jdGlvbihlLHIpe2Zvcig7IWUuZW9sKCk7KWlmKGUubmV4dCgpPT10KXtyLnRva2VuaXplPW47YnJlYWt9cmV0dXJuInN0cmluZyJ9O3JldHVybiBlLmlzSW5BdHRyaWJ1dGU9ITAsZX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7Zm9yKDshbi5lb2woKTspe2lmKG4ubWF0Y2goZSkpe2kudG9rZW5pemU9cjticmVha31uLm5leHQoKX1yZXR1cm4gdH19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk7bnVsbCE9KGk9ZS5uZXh0KCkpOyl7aWYoIjwiPT1pKXJldHVybiBuLnRva2VuaXplPWwodCsxKSxuLnRva2VuaXplKGUsbik7aWYoIj4iPT1pKXtpZigxPT10KXtuLnRva2VuaXplPXI7YnJlYWt9cmV0dXJuIG4udG9rZW5pemU9bCh0LTEpLG4udG9rZW5pemUoZSxuKX19cmV0dXJuIm1ldGEifX1mdW5jdGlvbiBhKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMTt0Pj0wO3QtLSlDLmNjLnB1c2goYXJndW1lbnRzW3RdKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGEuYXBwbHkobnVsbCxhcmd1bWVudHMpLCEwfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1ULmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHQpfHxDLmNvbnRleHQmJkMuY29udGV4dC5ub0luZGVudDtDLmNvbnRleHQ9e3ByZXY6Qy5jb250ZXh0LHRhZ05hbWU6dCxpbmRlbnQ6Qy5pbmRlbnRlZCxzdGFydE9mTGluZTplLG5vSW5kZW50OnJ9fWZ1bmN0aW9uIGMoKXtDLmNvbnRleHQmJihDLmNvbnRleHQ9Qy5jb250ZXh0LnByZXYpfWZ1bmN0aW9uIGYodCl7aWYoIm9wZW5UYWciPT10KXJldHVybiBDLnRhZ05hbWU9eCxDLnRhZ1N0YXJ0PWsuY29sdW1uKCkscyhtLGgoQy5zdGFydE9mTGluZSkpO2lmKCJjbG9zZVRhZyI9PXQpe3ZhciBlPSExO3JldHVybiBDLmNvbnRleHQ/Qy5jb250ZXh0LnRhZ05hbWUhPXgmJihULmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoQy5jb250ZXh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkmJmMoKSxlPSFDLmNvbnRleHR8fEMuY29udGV4dC50YWdOYW1lIT14KTplPSEwLGUmJih3PSJlcnJvciIpLHMoZChlKSl9cmV0dXJuIHMoKX1mdW5jdGlvbiBoKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1DLnRhZ05hbWU7cmV0dXJuIEMudGFnTmFtZT1DLnRhZ1N0YXJ0PW51bGwsInNlbGZjbG9zZVRhZyI9PWV8fCJlbmRUYWciPT1lJiZULmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShyLnRvTG93ZXJDYXNlKCkpPyhwKHIudG9Mb3dlckNhc2UoKSkscygpKToiZW5kVGFnIj09ZT8ocChyLnRvTG93ZXJDYXNlKCkpLHUocix0KSxzKCkpOnMoKX19ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJih3PSJlcnJvciIpLCJlbmRUYWciPT1lPyhjKCkscygpKToodz0iZXJyb3IiLHMoYXJndW1lbnRzLmNhbGxlZSkpfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZTs7KXtpZighQy5jb250ZXh0KXJldHVybjtpZihlPUMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIVQuY29udGV4dEdyYWJiZXJzLmhhc093blByb3BlcnR5KGUpfHwhVC5jb250ZXh0R3JhYmJlcnNbZV0uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2MoKX19ZnVuY3Rpb24gbSh0KXtyZXR1cm4id29yZCI9PXQ/KHc9ImF0dHJpYnV0ZSIscyhnLG0pKToiZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOih3PSJlcnJvciIscyhtKSl9ZnVuY3Rpb24gZyh0KXtpZigiZXF1YWxzIj09dClyZXR1cm4gcyh2LG0pO2lmKFQuYWxsb3dNaXNzaW5nKXtpZigid29yZCI9PXQpcmV0dXJuIHc9ImF0dHJpYnV0ZSIscyhnLG0pfWVsc2Ugdz0iZXJyb3IiO3JldHVybiJlbmRUYWciPT10fHwic2VsZmNsb3NlVGFnIj09dD9hKCk6cygpfWZ1bmN0aW9uIHYodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KToid29yZCI9PXQmJlQuYWxsb3dVbnF1b3RlZD8odz0ic3RyaW5nIixzKCkpOih3PSJlcnJvciIsImVuZFRhZyI9PXR8fCJzZWxmQ2xvc2VUYWciPT10P2EoKTpzKCkpfWZ1bmN0aW9uIHkodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KTphKCl9dmFyIHgsYixDLGssdyxMPXQuaW5kZW50VW5pdCxTPWUubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yfHwxLE09ZS5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnfHwhMCxUPWUuaHRtbE1vZGU/e2F1dG9TZWxmQ2xvc2Vyczp7YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxjb21tYW5kOiEwLGVtYmVkOiEwLGZyYW1lOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LGltcGxpY2l0bHlDbG9zZWQ6e2RkOiEwLGxpOiEwLG9wdGdyb3VwOiEwLG9wdGlvbjohMCxwOiEwLHJwOiEwLHJ0OiEwLHRib2R5OiEwLHRkOiEwLHRmb290OiEwLHRoOiEwLHRyOiEwfSxjb250ZXh0R3JhYmJlcnM6e2RkOntkZDohMCxkdDohMH0sZHQ6e2RkOiEwLGR0OiEwfSxsaTp7bGk6ITB9LG9wdGlvbjp7b3B0aW9uOiEwLG9wdGdyb3VwOiEwfSxvcHRncm91cDp7b3B0Z3JvdXA6ITB9LHA6e2FkZHJlc3M6ITAsYXJ0aWNsZTohMCxhc2lkZTohMCxibG9ja3F1b3RlOiEwLGRpcjohMCxkaXY6ITAsZGw6ITAsZmllbGRzZXQ6ITAsZm9vdGVyOiEwLGZvcm06ITAsaDE6ITAsaDI6ITAsaDM6ITAsaDQ6ITAsaDU6ITAsaDY6ITAsaGVhZGVyOiEwLGhncm91cDohMCxocjohMCxtZW51OiEwLG5hdjohMCxvbDohMCxwOiEwLHByZTohMCxzZWN0aW9uOiEwLHRhYmxlOiEwLHVsOiEwfSxycDp7cnA6ITAscnQ6ITB9LHJ0OntycDohMCxydDohMH0sdGJvZHk6e3Rib2R5OiEwLHRmb290OiEwfSx0ZDp7dGQ6ITAsdGg6ITB9LHRmb290Ont0Ym9keTohMH0sdGg6e3RkOiEwLHRoOiEwfSx0aGVhZDp7dGJvZHk6ITAsdGZvb3Q6ITB9LHRyOnt0cjohMH19LGRvTm90SW5kZW50OntwcmU6ITB9LGFsbG93VW5xdW90ZWQ6ITAsYWxsb3dNaXNzaW5nOiEwfTp7YXV0b1NlbGZDbG9zZXJzOnt9LGltcGxpY2l0bHlDbG9zZWQ6e30sY29udGV4dEdyYWJiZXJzOnt9LGRvTm90SW5kZW50Ont9LGFsbG93VW5xdW90ZWQ6ITEsYWxsb3dNaXNzaW5nOiExfSxBPWUuYWxpZ25DREFUQTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybnt0b2tlbml6ZTpyLGNjOltdLGluZGVudGVkOjAsc3RhcnRPZkxpbmU6ITAsdGFnTmFtZTpudWxsLHRhZ1N0YXJ0Om51bGwsY29udGV4dDpudWxsfX0sdG9rZW46ZnVuY3Rpb24odCxlKXtpZighZS50YWdOYW1lJiZ0LnNvbCgpJiYoZS5zdGFydE9mTGluZT0hMCxlLmluZGVudGVkPXQuaW5kZW50YXRpb24oKSksdC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3c9Yj14PW51bGw7dmFyIHI9ZS50b2tlbml6ZSh0LGUpO2lmKGUudHlwZT1iLChyfHxiKSYmImNvbW1lbnQiIT1yKWZvcihDPWUsaz10Ozspe3ZhciBuPWUuY2MucG9wKCl8fGY7aWYobihifHxyKSlicmVha31yZXR1cm4gZS5zdGFydE9mTGluZT0hMSx3JiYocj0iZXJyb3IiPT13P3IrIiBlcnJvciI6dykscn0saW5kZW50OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10LmNvbnRleHQ7aWYodC50b2tlbml6ZS5pc0luQXR0cmlidXRlKXJldHVybiB0LnN0cmluZ1N0YXJ0Q29sKzE7aWYodC50b2tlbml6ZSE9biYmdC50b2tlbml6ZSE9cnx8byYmby5ub0luZGVudClyZXR1cm4gaT9pLm1hdGNoKC9eKFxzKikvKVswXS5sZW5ndGg6MDtpZih0LnRhZ05hbWUpcmV0dXJuIE0/dC50YWdTdGFydCt0LnRhZ05hbWUubGVuZ3RoKzI6dC50YWdTdGFydCtMKlM7aWYoQSYmLzwhXFtDREFUQVxbLy50ZXN0KGUpKXJldHVybiAwO2ZvcihvJiYvXjxcLy8udGVzdChlKSYmKG89by5wcmV2KTtvJiYhby5zdGFydE9mTGluZTspbz1vLnByZXY7cmV0dXJuIG8/by5pbmRlbnQrTDowfSxlbGVjdHJpY0NoYXJzOiIvIixibG9ja0NvbW1lbnRTdGFydDoiPCEtLSIsYmxvY2tDb21tZW50RW5kOiItLT4iLGNvbmZpZ3VyYXRpb246ZS5odG1sTW9kZT8iaHRtbCI6InhtbCIsaGVscGVyVHlwZTplLmh0bWxNb2RlPyJodG1sIjoieG1sIn19KSxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveG1sIiwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCJ4bWwiKSxDb2RlTWlycm9yLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIil8fENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIix7bmFtZToieG1sIixodG1sTW9kZTohMH0pO1BLBwiT1g9diDIAAIgyAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABwAAABzdGF0aWNcbGliXGNvZGVtaXJyb3IubWluLmpzd2luZG93LkNvZGVNaXJyb3I9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChyLG4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChyLG4pO3RoaXMub3B0aW9ucz1uPW58fHt9O2Zvcih2YXIgaSBpbiBhbykhbi5oYXNPd25Qcm9wZXJ0eShpKSYmYW8uaGFzT3duUHJvcGVydHkoaSkmJihuW2ldPWFvW2ldKTtoKG4pO3ZhciBvPSJzdHJpbmciPT10eXBlb2Ygbi52YWx1ZT8wOm4udmFsdWUuZmlyc3QsbD10aGlzLmRpc3BsYXk9ZShyLG8pO2wud3JhcHBlci5Db2RlTWlycm9yPXRoaXMsdSh0aGlzKSxuLmF1dG9mb2N1cyYmIVZpJiZwZSh0aGlzKSx0aGlzLnN0YXRlPXtrZXlNYXBzOltdLG92ZXJsYXlzOltdLG1vZGVHZW46MCxvdmVyd3JpdGU6ITEsZm9jdXNlZDohMSxzdXBwcmVzc0VkaXRzOiExLHBhc3RlSW5jb21pbmc6ITEsZHJhZ2dpbmdUZXh0OiExLGhpZ2hsaWdodDpuZXcgJG59LHModGhpcyksbi5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIik7dmFyIGE9bi52YWx1ZTsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyB3byhuLnZhbHVlLG4ubW9kZSkpLGxlKHRoaXMscG4pKHRoaXMsYSksQWkmJnNldFRpbWVvdXQoaWkoZGUsdGhpcywhMCksMjApLG1lKHRoaXMpO3ZhciBjO3RyeXtjPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXR9Y2F0Y2goZil7fWN8fG4uYXV0b2ZvY3VzJiYhVmk/c2V0VGltZW91dChpaShFZSx0aGlzKSwyMCk6emUodGhpcyksbGUodGhpcyxmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzbylzby5wcm9wZXJ0eUlzRW51bWVyYWJsZSh0KSYmc29bdF0odGhpcyxuW3RdLHVvKTtmb3IodmFyIGU9MDtlPHBvLmxlbmd0aDsrK2UpcG9bZV0odGhpcyl9KSgpfWZ1bmN0aW9uIGUodCxlKXt2YXIgcj17fSxuPXIuaW5wdXQ9c2koInRleHRhcmVhIixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmU7IGZvbnQtc2l6ZTogNHB4OyIpO3JldHVybiBXaT9uLnN0eWxlLndpZHRoPSIxMDAwcHgiOm4uc2V0QXR0cmlidXRlKCJ3cmFwIiwib2ZmIiksR2kmJihuLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkIGJsYWNrIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0Iiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCJmYWxzZSIpLHIuaW5wdXREaXY9c2koImRpdiIsW25dLG51bGwsIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iiksci5zY3JvbGxiYXJIPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsImhlaWdodDogMXB4IildLCJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKSxyLnNjcm9sbGJhclY9c2koImRpdiIsW3NpKCJkaXYiLG51bGwsbnVsbCwid2lkdGg6IDFweCIpXSwiQ29kZU1pcnJvci12c2Nyb2xsYmFyIiksci5zY3JvbGxiYXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIiksci5ndXR0ZXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIiksci5saW5lRGl2PXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY29kZSIpLHIuc2VsZWN0aW9uRGl2PXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxIiksci5jdXJzb3I9c2koImRpdiIsIsKgIiwiQ29kZU1pcnJvci1jdXJzb3IiKSxyLm90aGVyQ3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIiksci5tZWFzdXJlPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItbWVhc3VyZSIpLHIubGluZVNwYWNlPXNpKCJkaXYiLFtyLm1lYXN1cmUsci5zZWxlY3Rpb25EaXYsci5saW5lRGl2LHIuY3Vyc29yLHIub3RoZXJDdXJzb3JdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpLHIubW92ZXI9c2koImRpdiIsW3NpKCJkaXYiLFtyLmxpbmVTcGFjZV0sIkNvZGVNaXJyb3ItbGluZXMiKV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIiksci5zaXplcj1zaSgiZGl2Iixbci5tb3Zlcl0sIkNvZGVNaXJyb3Itc2l6ZXIiKSxyLmhlaWdodEZvcmNlcj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAiK1RvKyJweDsgd2lkdGg6IDFweDsiKSxyLmd1dHRlcnM9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXJzIiksci5saW5lR3V0dGVyPW51bGwsci5zY3JvbGxlcj1zaSgiZGl2Iixbci5zaXplcixyLmhlaWdodEZvcmNlcixyLmd1dHRlcnNdLCJDb2RlTWlycm9yLXNjcm9sbCIpLHIuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIi0xIiksci53cmFwcGVyPXNpKCJkaXYiLFtyLmlucHV0RGl2LHIuc2Nyb2xsYmFySCxyLnNjcm9sbGJhclYsci5zY3JvbGxiYXJGaWxsZXIsci5ndXR0ZXJGaWxsZXIsci5zY3JvbGxlcl0sIkNvZGVNaXJyb3IiKSxIaSYmKHIuZ3V0dGVycy5zdHlsZS56SW5kZXg9LTEsci5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQ9MCksdC5hcHBlbmRDaGlsZD90LmFwcGVuZENoaWxkKHIud3JhcHBlcik6dChyLndyYXBwZXIpLEdpJiYobi5zdHlsZS53aWR0aD0iMHB4IiksV2l8fChyLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCksRmk/KHIuaW5wdXREaXYuc3R5bGUuaGVpZ2h0PSIxcHgiLHIuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIik6SGkmJihyLnNjcm9sbGJhckguc3R5bGUubWluV2lkdGg9ci5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPSIxOHB4Iiksci52aWV3T2Zmc2V0PXIubGFzdFNpemVDPTAsci5zaG93aW5nRnJvbT1yLnNob3dpbmdUbz1lLHIubGluZU51bVdpZHRoPXIubGluZU51bUlubmVyV2lkdGg9ci5saW5lTnVtQ2hhcnM9bnVsbCxyLnByZXZJbnB1dD0iIixyLmFsaWduV2lkZ2V0cz0hMSxyLnBvbGxpbmdGYXN0PSExLHIucG9sbD1uZXcgJG4sci5jYWNoZWRDaGFyV2lkdGg9ci5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsci5tZWFzdXJlTGluZUNhY2hlPVtdLHIubWVhc3VyZUxpbmVDYWNoZVBvcz0wLHIuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxyLm1heExpbmU9bnVsbCxyLm1heExpbmVMZW5ndGg9MCxyLm1heExpbmVDaGFuZ2VkPSExLHIud2hlZWxEWD1yLndoZWVsRFk9ci53aGVlbFN0YXJ0WD1yLndoZWVsU3RhcnRZPW51bGwscn1mdW5jdGlvbiByKGUpe2UuZG9jLm1vZGU9dC5nZXRNb2RlKGUub3B0aW9ucyxlLmRvYy5tb2RlT3B0aW9uKSxlLmRvYy5pdGVyKGZ1bmN0aW9uKHQpe3Quc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpfSksZS5kb2MuZnJvbnRpZXI9ZS5kb2MuZmlyc3QsVyhlLDEwMCksZS5zdGF0ZS5tb2RlR2VuKyssZS5jdXJPcCYmdWUoZSl9ZnVuY3Rpb24gbih0KXt0Lm9wdGlvbnMubGluZVdyYXBwaW5nPyh0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIix0LmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGg9IiIpOih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCIiKSxmKHQpKSxvKHQpLHVlKHQpLF8odCksc2V0VGltZW91dChmdW5jdGlvbigpe2QodCl9LDEwMCl9ZnVuY3Rpb24gaSh0KXt2YXIgZT1yZSh0LmRpc3BsYXkpLHI9dC5vcHRpb25zLmxpbmVXcmFwcGluZyxuPXImJk1hdGgubWF4KDUsdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoL25lKHQuZGlzcGxheSktMyk7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBWcih0LmRvYyxpKT8wOnI/KE1hdGguY2VpbChpLnRleHQubGVuZ3RoL24pfHwxKSplOmV9fWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5kb2Mscj1pKHQpO2UuaXRlcihmdW5jdGlvbih0KXt2YXIgZT1yKHQpO2UhPXQuaGVpZ2h0JiZ5bih0LGUpfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT12b1t0Lm9wdGlvbnMua2V5TWFwXSxyPWUuc3R5bGU7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1rZXltYXAtXFMrL2csIiIpKyhyPyIgY20ta2V5bWFwLSIrcjoiIiksdC5zdGF0ZS5kaXNhYmxlSW5wdXQ9ZS5kaXNhYmxlSW5wdXR9ZnVuY3Rpb24gcyh0KXt0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLXMtXFMrL2csIiIpK3Qub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywiIGNtLXMtIiksXyh0KX1mdW5jdGlvbiBhKHQpe3UodCksdWUodCksc2V0VGltZW91dChmdW5jdGlvbigpe2codCl9LDIwKX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQuZGlzcGxheS5ndXR0ZXJzLHI9dC5vcHRpb25zLmd1dHRlcnM7YWkoZSk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl0sbz1lLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyICIraSkpOyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIj09aSYmKHQuZGlzcGxheS5saW5lR3V0dGVyPW8sby5zdHlsZS53aWR0aD0odC5kaXNwbGF5LmxpbmVOdW1XaWR0aHx8MSkrInB4Iil9ZS5zdHlsZS5kaXNwbGF5PW4/IiI6Im5vbmUifWZ1bmN0aW9uIGModCxlKXtpZigwPT1lLmhlaWdodClyZXR1cm4gMDtmb3IodmFyIHIsbj1lLnRleHQubGVuZ3RoLGk9ZTtyPVJyKGkpOyl7dmFyIG89ci5maW5kKCk7aT1nbih0LG8uZnJvbS5saW5lKSxuKz1vLmZyb20uY2gtby50by5jaH1mb3IoaT1lO3I9QnIoaSk7KXt2YXIgbz1yLmZpbmQoKTtuLT1pLnRleHQubGVuZ3RoLW8uZnJvbS5jaCxpPWduKHQsby50by5saW5lKSxuKz1pLnRleHQubGVuZ3RoLW8udG8uY2h9cmV0dXJuIG59ZnVuY3Rpb24gZih0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYztlLm1heExpbmU9Z24ocixyLmZpcnN0KSxlLm1heExpbmVMZW5ndGg9YyhyLGUubWF4TGluZSksZS5tYXhMaW5lQ2hhbmdlZD0hMCxyLml0ZXIoZnVuY3Rpb24odCl7dmFyIG49YyhyLHQpO24+ZS5tYXhMaW5lTGVuZ3RoJiYoZS5tYXhMaW5lTGVuZ3RoPW4sZS5tYXhMaW5lPXQpfSl9ZnVuY3Rpb24gaCh0KXt2YXIgZT10aSh0Lmd1dHRlcnMsIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiKTstMT09ZSYmdC5saW5lTnVtYmVycz90Lmd1dHRlcnM9dC5ndXR0ZXJzLmNvbmNhdChbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSk6ZT4tMSYmIXQubGluZU51bWJlcnMmJih0Lmd1dHRlcnM9dC5ndXR0ZXJzLnNsaWNlKDApLHQuZ3V0dGVycy5zcGxpY2UoZSwxKSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYy5oZWlnaHQsbj1yK0YoZSk7ZS5zaXplci5zdHlsZS5taW5IZWlnaHQ9ZS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wPW4rInB4IixlLmd1dHRlcnMuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KG4sZS5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8pKyJweCI7dmFyIGk9TWF0aC5tYXgobixlLnNjcm9sbGVyLnNjcm9sbEhlaWdodCksbz1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoPmUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrMSxsPWk+ZS5zY3JvbGxlci5jbGllbnRIZWlnaHQrMTtsPyhlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFyVi5zdHlsZS5ib3R0b209bz9kaShlLm1lYXN1cmUpKyJweCI6IjAiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1pLWUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0K2Uuc2Nyb2xsYmFyVi5jbGllbnRIZWlnaHQrInB4Iik6KGUuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5PSIiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD0iMCIpLG8/KGUuc2Nyb2xsYmFySC5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJILnN0eWxlLnJpZ2h0PWw/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoLWUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrZS5zY3JvbGxiYXJILmNsaWVudFdpZHRoKyJweCIpOihlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iMCIpLG8mJmw/KGUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQ9ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGg9ZGkoZS5tZWFzdXJlKSsicHgiKTplLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSIiLG8mJnQub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciYmdC5vcHRpb25zLmZpeGVkR3V0dGVyPyhlLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWRpKGUubWVhc3VyZSkrInB4IixlLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aD1lLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4Iik6ZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixQaSYmMD09PWRpKGUubWVhc3VyZSkmJihlLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGg9ZS5zY3JvbGxiYXJILnN0eWxlLm1pbkhlaWdodD1SaT8iMThweCI6IjEycHgiLGUuc2Nyb2xsYmFyVi5zdHlsZS5wb2ludGVyRXZlbnRzPWUuc2Nyb2xsYmFySC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIil9ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49dC5zY3JvbGxlci5zY3JvbGxUb3AsaT10LndyYXBwZXIuY2xpZW50SGVpZ2h0OyJudW1iZXIiPT10eXBlb2Ygcj9uPXI6ciYmKG49ci50b3AsaT1yLmJvdHRvbS1yLnRvcCksbj1NYXRoLmZsb29yKG4tSSh0KSk7dmFyIG89TWF0aC5jZWlsKG4raSk7cmV0dXJue2Zyb206eG4oZSxuKSx0bzp4bihlLG8pfX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuZGlzcGxheTtpZihlLmFsaWduV2lkZ2V0c3x8ZS5ndXR0ZXJzLmZpcnN0Q2hpbGQmJnQub3B0aW9ucy5maXhlZEd1dHRlcil7Zm9yKHZhciByPXkoZSktZS5zY3JvbGxlci5zY3JvbGxMZWZ0K3QuZG9jLnNjcm9sbExlZnQsbj1lLmd1dHRlcnMub2Zmc2V0V2lkdGgsaT1yKyJweCIsbz1lLmxpbmVEaXYuZmlyc3RDaGlsZDtvO289by5uZXh0U2libGluZylpZihvLmFsaWduYWJsZSlmb3IodmFyIGw9MCxzPW8uYWxpZ25hYmxlO2w8cy5sZW5ndGg7KytsKXNbbF0uc3R5bGUubGVmdD1pO3Qub3B0aW9ucy5maXhlZEd1dHRlciYmKGUuZ3V0dGVycy5zdHlsZS5sZWZ0PXIrbisicHgiKX19ZnVuY3Rpb24gbSh0KXtpZighdC5vcHRpb25zLmxpbmVOdW1iZXJzKXJldHVybiExO3ZhciBlPXQuZG9jLHI9dih0Lm9wdGlvbnMsZS5maXJzdCtlLnNpemUtMSksbj10LmRpc3BsYXk7aWYoci5sZW5ndGghPW4ubGluZU51bUNoYXJzKXt2YXIgaT1uLm1lYXN1cmUuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3NpKCJkaXYiLHIpXSwiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIpKSxvPWkuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCxsPWkub2Zmc2V0V2lkdGgtbztyZXR1cm4gbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPSIiLG4ubGluZU51bUlubmVyV2lkdGg9TWF0aC5tYXgobyxuLmxpbmVHdXR0ZXIub2Zmc2V0V2lkdGgtbCksbi5saW5lTnVtV2lkdGg9bi5saW5lTnVtSW5uZXJXaWR0aCtsLG4ubGluZU51bUNoYXJzPW4ubGluZU51bUlubmVyV2lkdGg/ci5sZW5ndGg6LTEsbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPW4ubGluZU51bVdpZHRoKyJweCIsITB9cmV0dXJuITF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiBTdHJpbmcodC5saW5lTnVtYmVyRm9ybWF0dGVyKGUrdC5maXJzdExpbmVOdW1iZXIpKX1mdW5jdGlvbiB5KHQpe3JldHVybiBmaSh0LnNjcm9sbGVyKS5sZWZ0LWZpKHQuc2l6ZXIpLmxlZnR9ZnVuY3Rpb24gYih0LGUscixuKXtmb3IodmFyIGksbz10LmRpc3BsYXkuc2hvd2luZ0Zyb20sbD10LmRpc3BsYXkuc2hvd2luZ1RvLHM9cCh0LmRpc3BsYXksdC5kb2MsciksYT0hMDs7YT0hMSl7dmFyIHU9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoO2lmKCF4KHQsZSxzLG4pKWJyZWFrO2lmKGk9ITAsZT1bXSxBKHQpLGQodCksYSYmdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmdSE9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKW49ITA7ZWxzZSBpZihuPSExLHImJihyPU1hdGgubWluKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwibnVtYmVyIj09dHlwZW9mIHI/cjpyLnRvcCkpLHM9cCh0LmRpc3BsYXksdC5kb2Mscikscy5mcm9tPj10LmRpc3BsYXkuc2hvd2luZ0Zyb20mJnMudG88PXQuZGlzcGxheS5zaG93aW5nVG8pYnJlYWt9cmV0dXJuIGkmJihVbih0LCJ1cGRhdGUiLHQpLCh0LmRpc3BsYXkuc2hvd2luZ0Zyb20hPW98fHQuZGlzcGxheS5zaG93aW5nVG8hPWwpJiZVbih0LCJ2aWV3cG9ydENoYW5nZSIsdCx0LmRpc3BsYXkuc2hvd2luZ0Zyb20sdC5kaXNwbGF5LnNob3dpbmdUbykpLGl9ZnVuY3Rpb24geCh0LGUscixuKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYztpZighaS53cmFwcGVyLmNsaWVudFdpZHRoKXJldHVybiBpLnNob3dpbmdGcm9tPWkuc2hvd2luZ1RvPW8uZmlyc3QsaS52aWV3T2Zmc2V0PTAsdm9pZCAwO2lmKCEoIW4mJjA9PWUubGVuZ3RoJiZyLmZyb20+aS5zaG93aW5nRnJvbSYmci50bzxpLnNob3dpbmdUbykpe20odCkmJihlPVt7ZnJvbTpvLmZpcnN0LHRvOm8uZmlyc3Qrby5zaXplfV0pO3ZhciBsPWkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdD1pLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4IjtpLnNjcm9sbGJhckguc3R5bGUubGVmdD10Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bDoiMCI7dmFyIHM9MS8wO2lmKHQub3B0aW9ucy5saW5lTnVtYmVycylmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSllW2FdLmRpZmYmJmVbYV0uZnJvbTxzJiYocz1lW2FdLmZyb20pO3ZhciB1PW8uZmlyc3Qrby5zaXplLGM9TWF0aC5tYXgoci5mcm9tLXQub3B0aW9ucy52aWV3cG9ydE1hcmdpbixvLmZpcnN0KSxmPU1hdGgubWluKHUsci50byt0Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4pO2lmKGkuc2hvd2luZ0Zyb208YyYmYy1pLnNob3dpbmdGcm9tPDIwJiYoYz1NYXRoLm1heChvLmZpcnN0LGkuc2hvd2luZ0Zyb20pKSxpLnNob3dpbmdUbz5mJiZpLnNob3dpbmdUby1mPDIwJiYoZj1NYXRoLm1pbih1LGkuc2hvd2luZ1RvKSksUWkpZm9yKGM9Ym4oR3IobyxnbihvLGMpKSk7dT5mJiZWcihvLGduKG8sZikpOykrK2Y7dmFyIGg9W3tmcm9tOk1hdGgubWF4KGkuc2hvd2luZ0Zyb20sby5maXJzdCksdG86TWF0aC5taW4oaS5zaG93aW5nVG8sdSl9XTtpZihoPWhbMF0uZnJvbT49aFswXS50bz9bXTpMKGgsZSksUWkpZm9yKHZhciBhPTA7YTxoLmxlbmd0aDsrK2EpZm9yKHZhciBkLHA9aFthXTtkPUJyKGduKG8scC50by0xKSk7KXt2YXIgZz1kLmZpbmQoKS5mcm9tLmxpbmU7aWYoIShnPnAuZnJvbSkpe2guc3BsaWNlKGEtLSwxKTticmVha31wLnRvPWd9Zm9yKHZhciB2PTAsYT0wO2E8aC5sZW5ndGg7KythKXt2YXIgcD1oW2FdO3AuZnJvbTxjJiYocC5mcm9tPWMpLHAudG8+ZiYmKHAudG89ZikscC5mcm9tPj1wLnRvP2guc3BsaWNlKGEtLSwxKTp2Kz1wLnRvLXAuZnJvbX1pZighbiYmdj09Zi1jJiZjPT1pLnNob3dpbmdGcm9tJiZmPT1pLnNob3dpbmdUbylyZXR1cm4gdyh0KSx2b2lkIDA7aC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZnJvbS1lLmZyb219KTt0cnl7dmFyIHk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudH1jYXRjaChiKXt9LjcqKGYtYyk+diYmKGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSJub25lIiksUyh0LGMsZixoLHMpLGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSIiLHkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPXkmJnkub2Zmc2V0SGVpZ2h0JiZ5LmZvY3VzKCk7dmFyIHg9YyE9aS5zaG93aW5nRnJvbXx8ZiE9aS5zaG93aW5nVG98fGkubGFzdFNpemVDIT1pLndyYXBwZXIuY2xpZW50SGVpZ2h0O3JldHVybiB4JiYoaS5sYXN0U2l6ZUM9aS53cmFwcGVyLmNsaWVudEhlaWdodCxXKHQsNDAwKSksaS5zaG93aW5nRnJvbT1jLGkuc2hvd2luZ1RvPWYsQyh0KSx3KHQpLCEwfX1mdW5jdGlvbiBDKHQpe2Zvcih2YXIgZSxyPXQuZGlzcGxheSxuPXIubGluZURpdi5vZmZzZXRUb3AsaT1yLmxpbmVEaXYuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylpZihpLmxpbmVPYmope2lmKEhpKXt2YXIgbz1pLm9mZnNldFRvcCtpLm9mZnNldEhlaWdodDtlPW8tbixuPW99ZWxzZXt2YXIgbD1maShpKTtlPWwuYm90dG9tLWwudG9wfXZhciBzPWkubGluZU9iai5oZWlnaHQtZTtpZigyPmUmJihlPXJlKHIpKSxzPi4wMDF8fC0uMDAxPnMpe3luKGkubGluZU9iaixlKTt2YXIgYT1pLmxpbmVPYmoud2lkZ2V0cztpZihhKWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7Kyt1KWFbdV0uaGVpZ2h0PWFbdV0ubm9kZS5vZmZzZXRIZWlnaHR9fX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQuZGlzcGxheS52aWV3T2Zmc2V0PUNuKHQsZ24odC5kb2MsdC5kaXNwbGF5LnNob3dpbmdGcm9tKSk7dC5kaXNwbGF5Lm1vdmVyLnN0eWxlLnRvcD1lKyJweCJ9ZnVuY3Rpb24gTCh0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGh8fDA7bj5yOysrcil7Zm9yKHZhciBpPWVbcl0sbz1bXSxsPWkuZGlmZnx8MCxzPTAsYT10Lmxlbmd0aDthPnM7KytzKXt2YXIgdT10W3NdO2kudG88PXUuZnJvbSYmaS5kaWZmP28ucHVzaCh7ZnJvbTp1LmZyb20rbCx0bzp1LnRvK2x9KTppLnRvPD11LmZyb218fGkuZnJvbT49dS50bz9vLnB1c2godSk6KGkuZnJvbT51LmZyb20mJm8ucHVzaCh7ZnJvbTp1LmZyb20sdG86aS5mcm9tfSksaS50bzx1LnRvJiZvLnB1c2goe2Zyb206aS50bytsLHRvOnUudG8rbH0pKX10PW99cmV0dXJuIHR9ZnVuY3Rpb24gayh0KXtmb3IodmFyIGU9dC5kaXNwbGF5LHI9e30sbj17fSxpPWUuZ3V0dGVycy5maXJzdENoaWxkLG89MDtpO2k9aS5uZXh0U2libGluZywrK28pclt0Lm9wdGlvbnMuZ3V0dGVyc1tvXV09aS5vZmZzZXRMZWZ0LG5bdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0V2lkdGg7cmV0dXJue2ZpeGVkUG9zOnkoZSksZ3V0dGVyVG90YWxXaWR0aDplLmd1dHRlcnMub2Zmc2V0V2lkdGgsZ3V0dGVyTGVmdDpyLGd1dHRlcldpZHRoOm4sd3JhcHBlcldpZHRoOmUud3JhcHBlci5jbGllbnRXaWR0aH19ZnVuY3Rpb24gUyh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSl7dmFyIHI9ZS5uZXh0U2libGluZztyZXR1cm4gV2kmJktpJiZ0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PT1lPyhlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGUubGluZU9iaj1udWxsKTplLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSkscn12YXIgbD1rKHQpLHM9dC5kaXNwbGF5LGE9dC5vcHRpb25zLmxpbmVOdW1iZXJzO24ubGVuZ3RofHxXaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldHx8YWkocy5saW5lRGl2KTt2YXIgdT1zLmxpbmVEaXYsYz11LmZpcnN0Q2hpbGQsZj1uLnNoaWZ0KCksaD1lO2Zvcih0LmRvYy5pdGVyKGUscixmdW5jdGlvbihlKXtpZihmJiZmLnRvPT1oJiYoZj1uLnNoaWZ0KCkpLFZyKHQuZG9jLGUpKXtpZigwIT1lLmhlaWdodCYmeW4oZSwwKSxlLndpZGdldHMmJmMmJmMucHJldmlvdXNTaWJsaW5nKWZvcih2YXIgcj0wO3I8ZS53aWRnZXRzLmxlbmd0aDsrK3Ipe3ZhciBzPWUud2lkZ2V0c1tyXTtpZihzLnNob3dJZkhpZGRlbil7dmFyIGQ9Yy5wcmV2aW91c1NpYmxpbmc7aWYoL3ByZS9pLnRlc3QoZC5ub2RlTmFtZSkpe3ZhciBwPXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIik7ZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwLGQpLHAuYXBwZW5kQ2hpbGQoZCksZD1wfXZhciBnPWQuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3Mubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTtzLmhhbmRsZU1vdXNlRXZlbnRzfHwoZy5pZ25vcmVFdmVudHM9ITApLFQocyxnLGQsbCl9fX1lbHNlIGlmKGYmJmYuZnJvbTw9aCYmZi50bz5oKXtmb3IoO2MubGluZU9iaiE9ZTspYz1vKGMpO2EmJmg+PWkmJmMubGluZU51bWJlciYmY2koYy5saW5lTnVtYmVyLHYodC5vcHRpb25zLGgpKSxjPWMubmV4dFNpYmxpbmd9ZWxzZXtpZihlLndpZGdldHMpZm9yKHZhciBtLHk9MCxiPWM7YiYmMjA+eTsrK3ksYj1iLm5leHRTaWJsaW5nKWlmKGIubGluZU9iaj09ZSYmL2Rpdi9pLnRlc3QoYi5ub2RlTmFtZSkpe209YjticmVha312YXIgeD1NKHQsZSxoLGwsbSk7aWYoeCE9bSl1Lmluc2VydEJlZm9yZSh4LGMpO2Vsc2V7Zm9yKDtjIT1tOyljPW8oYyk7Yz1jLm5leHRTaWJsaW5nfXgubGluZU9iaj1lfSsraH0pO2M7KWM9byhjKX1mdW5jdGlvbiBNKHQsZSxyLG4saSl7dmFyIG8sbD1ybih0LGUpLHM9bC5wcmUsYT1lLmd1dHRlck1hcmtlcnMsdT10LmRpc3BsYXksYz1sLmJnQ2xhc3M/bC5iZ0NsYXNzKyIgIisoZS5iZ0NsYXNzfHwiIik6ZS5iZ0NsYXNzO2lmKCEodC5vcHRpb25zLmxpbmVOdW1iZXJzfHxhfHxjfHxlLndyYXBDbGFzc3x8ZS53aWRnZXRzKSlyZXR1cm4gcztpZihpKXtpLmFsaWduYWJsZT1udWxsO2Zvcih2YXIgZixoPSEwLGQ9MCxwPW51bGwsZz1pLmZpcnN0Q2hpbGQ7ZztnPWYpaWYoZj1nLm5leHRTaWJsaW5nLC9cYkNvZGVNaXJyb3ItbGluZXdpZGdldFxiLy50ZXN0KGcuY2xhc3NOYW1lKSl7Zm9yKHZhciBtPTA7bTxlLndpZGdldHMubGVuZ3RoOysrbSl7dmFyIHk9ZS53aWRnZXRzW21dO2lmKHkubm9kZT09Zy5maXJzdENoaWxkKXt5LmFib3ZlfHxwfHwocD1nKSxUKHksZyxpLG4pLCsrZDticmVha319aWYobT09ZS53aWRnZXRzLmxlbmd0aCl7aD0hMTticmVha319ZWxzZSBpLnJlbW92ZUNoaWxkKGcpO2kuaW5zZXJ0QmVmb3JlKHMscCksaCYmZD09ZS53aWRnZXRzLmxlbmd0aCYmKG89aSxpLmNsYXNzTmFtZT1lLndyYXBDbGFzc3x8IiIpfWlmKG98fChvPXNpKCJkaXYiLG51bGwsZS53cmFwQ2xhc3MsInBvc2l0aW9uOiByZWxhdGl2ZSIpLG8uYXBwZW5kQ2hpbGQocykpLGMmJm8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsYysiIENvZGVNaXJyb3ItbGluZWJhY2tncm91bmQiKSxvLmZpcnN0Q2hpbGQpLHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSl7dmFyIGI9by5pbnNlcnRCZWZvcmUoc2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrKHQub3B0aW9ucy5maXhlZEd1dHRlcj9uLmZpeGVkUG9zOi1uLmd1dHRlclRvdGFsV2lkdGgpKyJweCIpLG8uZmlyc3RDaGlsZCk7aWYodC5vcHRpb25zLmZpeGVkR3V0dGVyJiYoby5hbGlnbmFibGV8fChvLmFsaWduYWJsZT1bXSkpLnB1c2goYiksIXQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSYmYVsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdfHwoby5saW5lTnVtYmVyPWIuYXBwZW5kQ2hpbGQoc2koImRpdiIsdih0Lm9wdGlvbnMsciksIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKyJweDsgd2lkdGg6ICIrdS5saW5lTnVtSW5uZXJXaWR0aCsicHgiKSkpLGEpZm9yKHZhciB4PTA7eDx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt4KXt2YXIgQz10Lm9wdGlvbnMuZ3V0dGVyc1t4XSx3PWEuaGFzT3duUHJvcGVydHkoQykmJmFbQ107dyYmYi5hcHBlbmRDaGlsZChzaSgiZGl2Iixbd10sIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsImxlZnQ6ICIrbi5ndXR0ZXJMZWZ0W0NdKyJweDsgd2lkdGg6ICIrbi5ndXR0ZXJXaWR0aFtDXSsicHgiKSl9fWlmKEhpJiYoby5zdHlsZS56SW5kZXg9MiksZS53aWRnZXRzJiZvIT1pKWZvcih2YXIgbT0wLEw9ZS53aWRnZXRzO208TC5sZW5ndGg7KyttKXt2YXIgeT1MW21dLGs9c2koImRpdiIsW3kubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpO3kuaGFuZGxlTW91c2VFdmVudHN8fChrLmlnbm9yZUV2ZW50cz0hMCksVCh5LGssbyxuKSx5LmFib3ZlP28uaW5zZXJ0QmVmb3JlKGssdC5vcHRpb25zLmxpbmVOdW1iZXJzJiYwIT1lLmhlaWdodD9iOnMpOm8uYXBwZW5kQ2hpbGQoayksVW4oeSwicmVkcmF3Iil9cmV0dXJuIG99ZnVuY3Rpb24gVCh0LGUscixuKXtpZih0Lm5vSFNjcm9sbCl7KHIuYWxpZ25hYmxlfHwoci5hbGlnbmFibGU9W10pKS5wdXNoKGUpO3ZhciBpPW4ud3JhcHBlcldpZHRoO2Uuc3R5bGUubGVmdD1uLmZpeGVkUG9zKyJweCIsdC5jb3Zlckd1dHRlcnx8KGktPW4uZ3V0dGVyVG90YWxXaWR0aCxlLnN0eWxlLnBhZGRpbmdMZWZ0PW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSxlLnN0eWxlLndpZHRoPWkrInB4In10LmNvdmVyR3V0dGVyJiYoZS5zdHlsZS56SW5kZXg9NSxlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdC5ub0hTY3JvbGx8fChlLnN0eWxlLm1hcmdpbkxlZnQ9LW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LmRpc3BsYXkscj1qZSh0LmRvYy5zZWwuZnJvbSx0LmRvYy5zZWwudG8pO2lmKHJ8fHQub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZz9IKHQpOmUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIixyP2Uuc2VsZWN0aW9uRGl2LnN0eWxlLmRpc3BsYXk9Im5vbmUiOk4odCksdC5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3Ipe3ZhciBuPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2IiksaT1maShlLndyYXBwZXIpLG89ZmkoZS5saW5lRGl2KTtlLmlucHV0RGl2LnN0eWxlLnRvcD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRIZWlnaHQtMTAsbi50b3Arby50b3AtaS50b3ApKSsicHgiLGUuaW5wdXREaXYuc3R5bGUubGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRXaWR0aC0xMCxuLmxlZnQrby5sZWZ0LWkubGVmdCkpKyJweCJ9fWZ1bmN0aW9uIEgodCl7dmFyIGU9dC5kaXNwbGF5LHI9USh0LHQuZG9jLnNlbC5oZWFkLCJkaXYiKTtlLmN1cnNvci5zdHlsZS5sZWZ0PXIubGVmdCsicHgiLGUuY3Vyc29yLnN0eWxlLnRvcD1yLnRvcCsicHgiLGUuY3Vyc29yLnN0eWxlLmhlaWdodD1NYXRoLm1heCgwLHIuYm90dG9tLXIudG9wKSp0Lm9wdGlvbnMuY3Vyc29ySGVpZ2h0KyJweCIsZS5jdXJzb3Iuc3R5bGUuZGlzcGxheT0iIixyLm90aGVyPyhlLm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsZS5vdGhlckN1cnNvci5zdHlsZS5sZWZ0PXIub3RoZXIubGVmdCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUudG9wPXIub3RoZXIudG9wKyJweCIsZS5vdGhlckN1cnNvci5zdHlsZS5oZWlnaHQ9Ljg1KihyLm90aGVyLmJvdHRvbS1yLm90aGVyLnRvcCkrInB4Iik6ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIn1mdW5jdGlvbiBOKHQpe2Z1bmN0aW9uIGUodCxlLHIsbil7MD5lJiYoZT0wKSxsLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrdCsicHg7IHRvcDogIitlKyJweDsgd2lkdGg6ICIrKG51bGw9PXI/cy10OnIpKyJweDsgaGVpZ2h0OiAiKyhuLWUpKyJweCIpKX1mdW5jdGlvbiByKHIsbixvKXtmdW5jdGlvbiBsKGUsbil7cmV0dXJuIHEodCxZZShyLGUpLCJkaXYiLGYsbil9dmFyIHUsYyxmPWduKGksciksaD1mLnRleHQubGVuZ3RoO3JldHVybiBnaSh3bihmKSxufHwwLG51bGw9PW8/aDpvLGZ1bmN0aW9uKHQscixpKXt2YXIgZixkLHAsZz1sKHQsImxlZnQiKTtpZih0PT1yKWY9ZyxkPXA9Zy5sZWZ0O2Vsc2V7aWYoZj1sKHItMSwicmlnaHQiKSwicnRsIj09aSl7dmFyIG09ZztnPWYsZj1tfWQ9Zy5sZWZ0LHA9Zi5yaWdodH1udWxsPT1uJiYwPT10JiYoZD1hKSxmLnRvcC1nLnRvcD4zJiYoZShkLGcudG9wLG51bGwsZy5ib3R0b20pLGQ9YSxnLmJvdHRvbTxmLnRvcCYmZShkLGcuYm90dG9tLG51bGwsZi50b3ApKSxudWxsPT1vJiZyPT1oJiYocD1zKSwoIXV8fGcudG9wPHUudG9wfHxnLnRvcD09dS50b3AmJmcubGVmdDx1LmxlZnQpJiYodT1nKSwoIWN8fGYuYm90dG9tPmMuYm90dG9tfHxmLmJvdHRvbT09Yy5ib3R0b20mJmYucmlnaHQ+Yy5yaWdodCkmJihjPWYpLGErMT5kJiYoZD1hKSxlKGQsZi50b3AscC1kLGYuYm90dG9tKX0pLHtzdGFydDp1LGVuZDpjfX12YXIgbj10LmRpc3BsYXksaT10LmRvYyxvPXQuZG9jLnNlbCxsPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxzPW4ubGluZVNwYWNlLm9mZnNldFdpZHRoLGE9UCh0LmRpc3BsYXkpO2lmKG8uZnJvbS5saW5lPT1vLnRvLmxpbmUpcihvLmZyb20ubGluZSxvLmZyb20uY2gsby50by5jaCk7ZWxzZXt2YXIgdT1nbihpLG8uZnJvbS5saW5lKSxjPWduKGksby50by5saW5lKSxmPUdyKGksdSk9PUdyKGksYyksaD1yKG8uZnJvbS5saW5lLG8uZnJvbS5jaCxmP3UudGV4dC5sZW5ndGg6bnVsbCkuZW5kLGQ9cihvLnRvLmxpbmUsZj8wOm51bGwsby50by5jaCkuc3RhcnQ7ZiYmKGgudG9wPGQudG9wLTI/KGUoaC5yaWdodCxoLnRvcCxudWxsLGguYm90dG9tKSxlKGEsZC50b3AsZC5sZWZ0LGQuYm90dG9tKSk6ZShoLnJpZ2h0LGgudG9wLGQubGVmdC1oLnJpZ2h0LGguYm90dG9tKSksaC5ib3R0b208ZC50b3AmJmUoYSxoLmJvdHRvbSxudWxsLGQudG9wKX11aShuLnNlbGVjdGlvbkRpdixsKSxuLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSIifWZ1bmN0aW9uIEQodCl7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgZT10LmRpc3BsYXk7Y2xlYXJJbnRlcnZhbChlLmJsaW5rZXIpO3ZhciByPSEwO2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PSIiLHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU+MCYmKGUuYmxpbmtlcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PShyPSFyKT8iIjoiaGlkZGVuIn0sdC5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSkpfX1mdW5jdGlvbiBXKHQsZSl7dC5kb2MubW9kZS5zdGFydFN0YXRlJiZ0LmRvYy5mcm9udGllcjx0LmRpc3BsYXkuc2hvd2luZ1RvJiZ0LnN0YXRlLmhpZ2hsaWdodC5zZXQoZSxpaShPLHQpKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuZG9jO2lmKGUuZnJvbnRpZXI8ZS5maXJzdCYmKGUuZnJvbnRpZXI9ZS5maXJzdCksIShlLmZyb250aWVyPj10LmRpc3BsYXkuc2hvd2luZ1RvKSl7dmFyIHIsbj0rbmV3IERhdGUrdC5vcHRpb25zLndvcmtUaW1lLGk9YnIoZS5tb2RlLHoodCxlLmZyb250aWVyKSksbz1bXTtlLml0ZXIoZS5mcm9udGllcixNYXRoLm1pbihlLmZpcnN0K2Uuc2l6ZSx0LmRpc3BsYXkuc2hvd2luZ1RvKzUwMCksZnVuY3Rpb24obCl7aWYoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdGcm9tKXt2YXIgcz1sLnN0eWxlcztsLnN0eWxlcz1Rcih0LGwsaSwhMCk7Zm9yKHZhciBhPSFzfHxzLmxlbmd0aCE9bC5zdHlsZXMubGVuZ3RoLHU9MDshYSYmdTxzLmxlbmd0aDsrK3UpYT1zW3VdIT1sLnN0eWxlc1t1XTthJiYociYmci5lbmQ9PWUuZnJvbnRpZXI/ci5lbmQrKzpvLnB1c2gocj17c3RhcnQ6ZS5mcm9udGllcixlbmQ6ZS5mcm9udGllcisxfSkpLGwuc3RhdGVBZnRlcj1icihlLm1vZGUsaSl9ZWxzZSB0bih0LGwudGV4dCxpKSxsLnN0YXRlQWZ0ZXI9MD09ZS5mcm9udGllciU1P2JyKGUubW9kZSxpKTpudWxsO3JldHVybisrZS5mcm9udGllciwrbmV3IERhdGU+bj8oVyh0LHQub3B0aW9ucy53b3JrRGVsYXkpLCEwKTp2b2lkIDB9KSxvLmxlbmd0aCYmbGUodCxmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8by5sZW5ndGg7Kyt0KXVlKHRoaXMsb1t0XS5zdGFydCxvW3RdLmVuZCl9KSgpfX1mdW5jdGlvbiBFKHQsZSxyKXtmb3IodmFyIG4saSxvPXQuZG9jLGw9cj8tMTplLSh0LmRvYy5tb2RlLmlubmVyTW9kZT8xZTM6MTAwKSxzPWU7cz5sOy0tcyl7aWYoczw9by5maXJzdClyZXR1cm4gby5maXJzdDt2YXIgYT1nbihvLHMtMSk7aWYoYS5zdGF0ZUFmdGVyJiYoIXJ8fHM8PW8uZnJvbnRpZXIpKXJldHVybiBzO3ZhciB1PVpuKGEudGV4dCxudWxsLHQub3B0aW9ucy50YWJTaXplKTsobnVsbD09aXx8bj51KSYmKGk9cy0xLG49dSl9cmV0dXJuIGl9ZnVuY3Rpb24geih0LGUscil7dmFyIG49dC5kb2MsaT10LmRpc3BsYXk7aWYoIW4ubW9kZS5zdGFydFN0YXRlKXJldHVybiEwO3ZhciBvPUUodCxlLHIpLGw9bz5uLmZpcnN0JiZnbihuLG8tMSkuc3RhdGVBZnRlcjtyZXR1cm4gbD1sP2JyKG4ubW9kZSxsKTp4cihuLm1vZGUpLG4uaXRlcihvLGUsZnVuY3Rpb24ocil7dG4odCxyLnRleHQsbCk7dmFyIHM9bz09ZS0xfHwwPT1vJTV8fG8+PWkuc2hvd2luZ0Zyb20mJm88aS5zaG93aW5nVG87ci5zdGF0ZUFmdGVyPXM/YnIobi5tb2RlLGwpOm51bGwsKytvfSksciYmKG4uZnJvbnRpZXI9byksbH1mdW5jdGlvbiBJKHQpe3JldHVybiB0LmxpbmVTcGFjZS5vZmZzZXRUb3B9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5tb3Zlci5vZmZzZXRIZWlnaHQtdC5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIFAodCl7dmFyIGU9dWkodC5tZWFzdXJlLHNpKCJwcmUiLG51bGwsbnVsbCwidGV4dC1hbGlnbjogbGVmdCIpKS5hcHBlbmRDaGlsZChzaSgic3BhbiIsIngiKSk7cmV0dXJuIGUub2Zmc2V0TGVmdH1mdW5jdGlvbiBSKHQsZSxyLG4saSl7dmFyIG89LTE7aWYobj1ufHxWKHQsZSksbi5jcnVkZSl7dmFyIGw9bi5sZWZ0K3Iqbi53aWR0aDtyZXR1cm57bGVmdDpsLHJpZ2h0Omwrbi53aWR0aCx0b3A6bi50b3AsYm90dG9tOm4uYm90dG9tfX1mb3IodmFyIHM9cjs7cys9byl7dmFyIGE9bltzXTtpZihhKWJyZWFrOzA+byYmMD09cyYmKG89MSl9cmV0dXJuIGk9cz5yPyJsZWZ0IjpyPnM/InJpZ2h0IjppLCJsZWZ0Ij09aSYmYS5sZWZ0U2lkZT9hPWEubGVmdFNpZGU6InJpZ2h0Ij09aSYmYS5yaWdodFNpZGUmJihhPWEucmlnaHRTaWRlKSx7bGVmdDpyPnM/YS5yaWdodDphLmxlZnQscmlnaHQ6cz5yP2EubGVmdDphLnJpZ2h0LHRvcDphLnRvcCxib3R0b206YS5ib3R0b219fWZ1bmN0aW9uIEIodCxlKXtmb3IodmFyIHI9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO2lmKGkudGV4dD09ZS50ZXh0JiZpLm1hcmtlZFNwYW5zPT1lLm1hcmtlZFNwYW5zJiZ0LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg9PWkud2lkdGgmJmkuY2xhc3Nlcz09ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzKXJldHVybiBpfX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI9Qih0LGUpO3ImJihyLnRleHQ9ci5tZWFzdXJlPXIubWFya2VkU3BhbnM9bnVsbCl9ZnVuY3Rpb24gVih0LGUpe3ZhciByPUIodCxlKTtpZihyKXJldHVybiByLm1lYXN1cmU7dmFyIG49Syh0LGUpLGk9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbz17dGV4dDplLnRleHQsd2lkdGg6dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLG1hcmtlZFNwYW5zOmUubWFya2VkU3BhbnMsbWVhc3VyZTpuLGNsYXNzZXM6ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzfTtyZXR1cm4gMTY9PWkubGVuZ3RoP2lbKyt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyUxNl09bzppLnB1c2gobyksbn1mdW5jdGlvbiBLKHQsZSl7ZnVuY3Rpb24gcih0KXt2YXIgZT10LnRvcC1wLnRvcCxyPXQuYm90dG9tLXAudG9wO3I+diYmKHI9diksMD5lJiYoZT0wKTtmb3IodmFyIG49Zy5sZW5ndGgtMjtuPj0wO24tPTIpe3ZhciBpPWdbbl0sbz1nW24rMV07aWYoIShpPnJ8fGU+bykmJihlPj1pJiZvPj1yfHxpPj1lJiZyPj1vfHxNYXRoLm1pbihyLG8pLU1hdGgubWF4KGUsaSk+PXItZT4+MSkpe2dbbl09TWF0aC5taW4oZSxpKSxnW24rMV09TWF0aC5tYXgocixvKTticmVha319cmV0dXJuIDA+biYmKG49Zy5sZW5ndGgsZy5wdXNoKGUscikpLHtsZWZ0OnQubGVmdC1wLmxlZnQscmlnaHQ6dC5yaWdodC1wLmxlZnQsdG9wOm4sYm90dG9tOm51bGx9fWZ1bmN0aW9uIG4odCl7dC5ib3R0b209Z1t0LnRvcCsxXSx0LnRvcD1nW3QudG9wXX1pZighdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gVSh0LGUpO3ZhciBpPXQuZGlzcGxheSxvPW5pKGUudGV4dC5sZW5ndGgpLGw9cm4odCxlLG8sITApLnByZTtpZihBaSYmIUhpJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbC5jaGlsZE5vZGVzLmxlbmd0aD4xMDApe2Zvcih2YXIgcz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYT0xMCx1PWwuY2hpbGROb2Rlcy5sZW5ndGgsYz0wLGY9TWF0aC5jZWlsKHUvYSk7Zj5jOysrYyl7Zm9yKHZhciBoPXNpKCJkaXYiLG51bGwsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrIiksZD0wO2E+ZCYmdTsrK2QpaC5hcHBlbmRDaGlsZChsLmZpcnN0Q2hpbGQpLC0tdTtzLmFwcGVuZENoaWxkKGgpfWwuYXBwZW5kQ2hpbGQocyl9dWkoaS5tZWFzdXJlLGwpO3ZhciBwPWZpKGkubGluZURpdiksZz1bXSxtPW5pKGUudGV4dC5sZW5ndGgpLHY9bC5vZmZzZXRIZWlnaHQ7TmkmJmkubWVhc3VyZS5maXJzdCE9bCYmdWkoaS5tZWFzdXJlLGwpO2Zvcih2YXIgeSxjPTA7YzxvLmxlbmd0aDsrK2MpaWYoeT1vW2NdKXt2YXIgYj15LHg9bnVsbDtpZigvXGJDb2RlTWlycm9yLXdpZGdldFxiLy50ZXN0KHkuY2xhc3NOYW1lKSYmeS5nZXRDbGllbnRSZWN0cyl7MT09eS5maXJzdENoaWxkLm5vZGVUeXBlJiYoYj15LmZpcnN0Q2hpbGQpO3ZhciBDPWIuZ2V0Q2xpZW50UmVjdHMoKTtDLmxlbmd0aD4xJiYoeD1tW2NdPXIoQ1swXSkseC5yaWdodFNpZGU9cihDW0MubGVuZ3RoLTFdKSl9eHx8KHg9bVtjXT1yKGZpKGIpKSkseS5tZWFzdXJlUmlnaHQmJih4LnJpZ2h0PWZpKHkubWVhc3VyZVJpZ2h0KS5sZWZ0KSx5LmxlZnRTaWRlJiYoeC5sZWZ0U2lkZT1yKGZpKHkubGVmdFNpZGUpKSl9YWkodC5kaXNwbGF5Lm1lYXN1cmUpO2Zvcih2YXIgeSxjPTA7YzxtLmxlbmd0aDsrK2MpKHk9bVtjXSkmJihuKHkpLHkubGVmdFNpZGUmJm4oeS5sZWZ0U2lkZSkseS5yaWdodFNpZGUmJm4oeS5yaWdodFNpZGUpKTtyZXR1cm4gbX1mdW5jdGlvbiBVKHQsZSl7dmFyIHI9bmV3IGJvKGUudGV4dC5zbGljZSgwLDEwMCksbnVsbCk7ZS50ZXh0Q2xhc3MmJihyLnRleHRDbGFzcz1lLnRleHRDbGFzcyk7dmFyIG49Syh0LHIpLGk9Uih0LHIsMCxuLCJsZWZ0Iiksbz1SKHQsciw5OSxuLCJyaWdodCIpO3JldHVybntjcnVkZTohMCx0b3A6aS50b3AsbGVmdDppLmxlZnQsYm90dG9tOmkuYm90dG9tLHdpZHRoOihvLnJpZ2h0LWkubGVmdCkvMTAwfX1mdW5jdGlvbiBYKHQsZSl7dmFyIHI9ITE7aWYoZS5tYXJrZWRTcGFucylmb3IodmFyIG49MDtuPGUubWFya2VkU3BhbnM7KytuKXt2YXIgaT1lLm1hcmtlZFNwYW5zW25dOyFpLmNvbGxhcHNlZHx8bnVsbCE9aS50byYmaS50byE9ZS50ZXh0Lmxlbmd0aHx8KHI9ITApfXZhciBvPSFyJiZCKHQsZSk7aWYob3x8ZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gUih0LGUsZS50ZXh0Lmxlbmd0aCxvJiZvLm1lYXN1cmUsInJpZ2h0IikucmlnaHQ7dmFyIGw9cm4odCxlLG51bGwsITApLnByZSxzPWwuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKTtyZXR1cm4gdWkodC5kaXNwbGF5Lm1lYXN1cmUsbCksZmkocykucmlnaHQtZmkodC5kaXNwbGF5LmxpbmVEaXYpLmxlZnR9ZnVuY3Rpb24gXyh0KXt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCx0LmRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoPXQuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCksdC5kaXNwbGF5LmxpbmVOdW1DaGFycz1udWxsfWZ1bmN0aW9uIFkoKXtyZXR1cm4gd2luZG93LnBhZ2VYT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGooKXtyZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3B9ZnVuY3Rpb24gJCh0LGUscixuKXtpZihlLndpZGdldHMpZm9yKHZhciBpPTA7aTxlLndpZGdldHMubGVuZ3RoOysraSlpZihlLndpZGdldHNbaV0uYWJvdmUpe3ZhciBvPVlyKGUud2lkZ2V0c1tpXSk7ci50b3ArPW8sci5ib3R0b20rPW99aWYoImxpbmUiPT1uKXJldHVybiByO258fChuPSJsb2NhbCIpO3ZhciBsPUNuKHQsZSk7aWYoImxvY2FsIj09bj9sKz1JKHQuZGlzcGxheSk6bC09dC5kaXNwbGF5LnZpZXdPZmZzZXQsInBhZ2UiPT1ufHwid2luZG93Ij09bil7dmFyIHM9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7bCs9cy50b3ArKCJ3aW5kb3ciPT1uPzA6aigpKTt2YXIgYT1zLmxlZnQrKCJ3aW5kb3ciPT1uPzA6WSgpKTtyLmxlZnQrPWEsci5yaWdodCs9YX1yZXR1cm4gci50b3ArPWwsci5ib3R0b20rPWwscn1mdW5jdGlvbiBaKHQsZSxyKXtpZigiZGl2Ij09cilyZXR1cm4gZTt2YXIgbj1lLmxlZnQsaT1lLnRvcDtpZigicGFnZSI9PXIpbi09WSgpLGktPWooKTtlbHNlIGlmKCJsb2NhbCI9PXJ8fCFyKXt2YXIgbz1maSh0LmRpc3BsYXkuc2l6ZXIpO24rPW8ubGVmdCxpKz1vLnRvcH12YXIgbD1maSh0LmRpc3BsYXkubGluZVNwYWNlKTtyZXR1cm57bGVmdDpuLWwubGVmdCx0b3A6aS1sLnRvcH19ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBufHwobj1nbih0LmRvYyxlLmxpbmUpKSwkKHQsbixSKHQsbixlLmNoLG51bGwsaSkscil9ZnVuY3Rpb24gUSh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSxvKXt2YXIgbD1SKHQsbixlLGksbz8icmlnaHQiOiJsZWZ0Iik7cmV0dXJuIG8/bC5sZWZ0PWwucmlnaHQ6bC5yaWdodD1sLmxlZnQsJCh0LG4sbCxyKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9c1tlXSxuPXIubGV2ZWwlMjtyZXR1cm4gdD09bWkocikmJmUmJnIubGV2ZWw8c1tlLTFdLmxldmVsPyhyPXNbLS1lXSx0PXZpKHIpLShyLmxldmVsJTI/MDoxKSxuPSEwKTp0PT12aShyKSYmZTxzLmxlbmd0aC0xJiZyLmxldmVsPHNbZSsxXS5sZXZlbCYmKHI9c1srK2VdLHQ9bWkociktci5sZXZlbCUyLG49ITEpLG4mJnQ9PXIudG8mJnQ+ci5mcm9tP28odC0xKTpvKHQsbil9bj1ufHxnbih0LmRvYyxlLmxpbmUpLGl8fChpPVYodCxuKSk7dmFyIHM9d24obiksYT1lLmNoO2lmKCFzKXJldHVybiBvKGEpO3ZhciB1PUxpKHMsYSksYz1sKGEsdSk7cmV0dXJuIG51bGwhPVJvJiYoYy5vdGhlcj1sKGEsUm8pKSxjfWZ1bmN0aW9uIEoodCxlLHIsbil7dmFyIGk9bmV3IFllKHQsZSk7cmV0dXJuIGkueFJlbD1uLHImJihpLm91dHNpZGU9ITApLGl9ZnVuY3Rpb24gdGUodCxlLHIpe3ZhciBuPXQuZG9jO2lmKHIrPXQuZGlzcGxheS52aWV3T2Zmc2V0LDA+cilyZXR1cm4gSihuLmZpcnN0LDAsITAsLTEpO3ZhciBpPXhuKG4sciksbz1uLmZpcnN0K24uc2l6ZS0xO2lmKGk+bylyZXR1cm4gSihuLmZpcnN0K24uc2l6ZS0xLGduKG4sbykudGV4dC5sZW5ndGgsITAsMSk7Zm9yKDA+ZSYmKGU9MCk7Oyl7dmFyIGw9Z24obixpKSxzPWVlKHQsbCxpLGUsciksYT1CcihsKSx1PWEmJmEuZmluZCgpO2lmKCFhfHwhKHMuY2g+dS5mcm9tLmNofHxzLmNoPT11LmZyb20uY2gmJnMueFJlbD4wKSlyZXR1cm4gcztpPXUudG8ubGluZX19ZnVuY3Rpb24gZWUodCxlLHIsbixpKXtmdW5jdGlvbiBvKG4pe3ZhciBpPVEodCxZZShyLG4pLCJsaW5lIixlLHUpO3JldHVybiBzPSEwLGw+aS5ib3R0b20/aS5sZWZ0LWE6bDxpLnRvcD9pLmxlZnQrYToocz0hMSxpLmxlZnQpfXZhciBsPWktQ24odCxlKSxzPSExLGE9Mip0LmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCx1PVYodCxlKSxjPXduKGUpLGY9ZS50ZXh0Lmxlbmd0aCxoPXlpKGUpLGQ9YmkoZSkscD1vKGgpLGc9cyxtPW8oZCksdj1zO2lmKG4+bSlyZXR1cm4gSihyLGQsdiwxKTtmb3IoOzspe2lmKGM/ZD09aHx8ZD09U2koZSxoLDEpOjE+PWQtaCl7Zm9yKHZhciB5PXA+bnx8bS1uPj1uLXA/aDpkLGI9bi0oeT09aD9wOm0pO0RvLnRlc3QoZS50ZXh0LmNoYXJBdCh5KSk7KSsreTt2YXIgeD1KKHIseSx5PT1oP2c6diwwPmI/LTE6Yj8xOjApO3JldHVybiB4fXZhciBDPU1hdGguY2VpbChmLzIpLHc9aCtDO2lmKGMpe3c9aDtmb3IodmFyIEw9MDtDPkw7KytMKXc9U2koZSx3LDEpfXZhciBrPW8odyk7az5uPyhkPXcsbT1rLCh2PXMpJiYobSs9MWUzKSxmPUMpOihoPXcscD1rLGc9cyxmLT1DKX19ZnVuY3Rpb24gcmUodCl7aWYobnVsbCE9dC5jYWNoZWRUZXh0SGVpZ2h0KXJldHVybiB0LmNhY2hlZFRleHRIZWlnaHQ7aWYobnVsbD09X2kpe19pPXNpKCJwcmUiKTtmb3IodmFyIGU9MDs0OT5lOysrZSlfaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKSxfaS5hcHBlbmRDaGlsZChzaSgiYnIiKSk7X2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSl9dWkodC5tZWFzdXJlLF9pKTt2YXIgcj1faS5vZmZzZXRIZWlnaHQvNTA7cmV0dXJuIHI+MyYmKHQuY2FjaGVkVGV4dEhlaWdodD1yKSxhaSh0Lm1lYXN1cmUpLHJ8fDF9ZnVuY3Rpb24gbmUodCl7aWYobnVsbCE9dC5jYWNoZWRDaGFyV2lkdGgpcmV0dXJuIHQuY2FjaGVkQ2hhcldpZHRoO3ZhciBlPXNpKCJzcGFuIiwieCIpLHI9c2koInByZSIsW2VdKTt1aSh0Lm1lYXN1cmUscik7dmFyIG49ZS5vZmZzZXRXaWR0aDtyZXR1cm4gbj4yJiYodC5jYWNoZWRDaGFyV2lkdGg9biksbnx8MTB9ZnVuY3Rpb24gaWUodCl7dC5jdXJPcD17Y2hhbmdlczpbXSxmb3JjZVVwZGF0ZTohMSx1cGRhdGVJbnB1dDpudWxsLHVzZXJTZWxDaGFuZ2U6bnVsbCx0ZXh0Q2hhbmdlZDpudWxsLHNlbGVjdGlvbkNoYW5nZWQ6ITEsY3Vyc29yQWN0aXZpdHk6ITEsdXBkYXRlTWF4TGluZTohMSx1cGRhdGVTY3JvbGxQb3M6ITEsaWQ6KytKaX0sTW8rK3x8KFNvPVtdKX1mdW5jdGlvbiBvZSh0KXt2YXIgZT10LmN1ck9wLHI9dC5kb2Msbj10LmRpc3BsYXk7aWYodC5jdXJPcD1udWxsLGUudXBkYXRlTWF4TGluZSYmZih0KSxuLm1heExpbmVDaGFuZ2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbi5tYXhMaW5lKXt2YXIgaT1YKHQsbi5tYXhMaW5lKTtuLnNpemVyLnN0eWxlLm1pbldpZHRoPU1hdGgubWF4KDAsaSszK1RvKSsicHgiLG4ubWF4TGluZUNoYW5nZWQ9ITE7dmFyIG89TWF0aC5tYXgoMCxuLnNpemVyLm9mZnNldExlZnQrbi5zaXplci5vZmZzZXRXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoKTtvPHIuc2Nyb2xsTGVmdCYmIWUudXBkYXRlU2Nyb2xsUG9zJiZNZSh0LE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsTGVmdCxvKSwhMCl9dmFyIGwscztpZihlLnVwZGF0ZVNjcm9sbFBvcylsPWUudXBkYXRlU2Nyb2xsUG9zO2Vsc2UgaWYoZS5zZWxlY3Rpb25DaGFuZ2VkJiZuLnNjcm9sbGVyLmNsaWVudEhlaWdodCl7dmFyIGE9USh0LHIuc2VsLmhlYWQpO2w9dXIodCxhLmxlZnQsYS50b3AsYS5sZWZ0LGEuYm90dG9tKX1pZigoZS5jaGFuZ2VzLmxlbmd0aHx8ZS5mb3JjZVVwZGF0ZXx8bCYmbnVsbCE9bC5zY3JvbGxUb3ApJiYocz1iKHQsZS5jaGFuZ2VzLGwmJmwuc2Nyb2xsVG9wLGUuZm9yY2VVcGRhdGUpLHQuZGlzcGxheS5zY3JvbGxlci5vZmZzZXRIZWlnaHQmJih0LmRvYy5zY3JvbGxUb3A9dC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCkpLCFzJiZlLnNlbGVjdGlvbkNoYW5nZWQmJkEodCksZS51cGRhdGVTY3JvbGxQb3Mpe3ZhciB1PU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxIZWlnaHQtbi5zY3JvbGxlci5jbGllbnRIZWlnaHQsbC5zY3JvbGxUb3ApKSxjPU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoLGwuc2Nyb2xsTGVmdCkpO24uc2Nyb2xsZXIuc2Nyb2xsVG9wPW4uc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ci5zY3JvbGxUb3A9dSxuLnNjcm9sbGVyLnNjcm9sbExlZnQ9bi5zY3JvbGxiYXJILnNjcm9sbExlZnQ9ci5zY3JvbGxMZWZ0PWMsZyh0KSxlLnNjcm9sbFRvUG9zJiZzcih0LFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MuZnJvbSksUWUodC5kb2MsZS5zY3JvbGxUb1Bvcy50byksZS5zY3JvbGxUb1Bvcy5tYXJnaW4pfWVsc2UgbCYmbHIodCk7ZS5zZWxlY3Rpb25DaGFuZ2VkJiZEKHQpLHQuc3RhdGUuZm9jdXNlZCYmZS51cGRhdGVJbnB1dCYmZGUodCxlLnVzZXJTZWxDaGFuZ2UpO3ZhciBoPWUubWF5YmVIaWRkZW5NYXJrZXJzLGQ9ZS5tYXliZVVuaGlkZGVuTWFya2VycztpZihoKWZvcih2YXIgcD0wO3A8aC5sZW5ndGg7KytwKWhbcF0ubGluZXMubGVuZ3RofHxLbihoW3BdLCJoaWRlIik7aWYoZClmb3IodmFyIHA9MDtwPGQubGVuZ3RoOysrcClkW3BdLmxpbmVzLmxlbmd0aCYmS24oZFtwXSwidW5oaWRlIik7dmFyIG07aWYoLS1Nb3x8KG09U28sU289bnVsbCksZS50ZXh0Q2hhbmdlZCYmS24odCwiY2hhbmdlIix0LGUudGV4dENoYW5nZWQpLGUuY3Vyc29yQWN0aXZpdHkmJktuKHQsImN1cnNvckFjdGl2aXR5Iix0KSxtKWZvcih2YXIgcD0wO3A8bS5sZW5ndGg7KytwKW1bcF0oKX1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXR8fHRoaXMsbj0hci5jdXJPcDtuJiZpZShyKTt0cnl7dmFyIGk9ZS5hcHBseShyLGFyZ3VtZW50cyl9ZmluYWxseXtuJiZvZShyKX1yZXR1cm4gaX19ZnVuY3Rpb24gc2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmNtJiYhdGhpcy5jbS5jdXJPcDtyJiZpZSh0aGlzLmNtKTt0cnl7ZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3ImJm9lKHRoaXMuY20pfXJldHVybiBlfX1mdW5jdGlvbiBhZSh0LGUpe3ZhciByLG49IXQuY3VyT3A7biYmaWUodCk7dHJ5e3I9ZSgpfWZpbmFsbHl7biYmb2UodCl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWUodCxlLHIsbil7bnVsbD09ZSYmKGU9dC5kb2MuZmlyc3QpLG51bGw9PXImJihyPXQuZG9jLmZpcnN0K3QuZG9jLnNpemUpLHQuY3VyT3AuY2hhbmdlcy5wdXNoKHtmcm9tOmUsdG86cixkaWZmOm59KX1mdW5jdGlvbiBjZSh0KXt0LmRpc3BsYXkucG9sbGluZ0Zhc3R8fHQuZGlzcGxheS5wb2xsLnNldCh0Lm9wdGlvbnMucG9sbEludGVydmFsLGZ1bmN0aW9uKCl7aGUodCksdC5zdGF0ZS5mb2N1c2VkJiZjZSh0KX0pfWZ1bmN0aW9uIGZlKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj1oZSh0KTtufHxyPyh0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEsY2UodCkpOihyPSEwLHQuZGlzcGxheS5wb2xsLnNldCg2MCxlKSl9dmFyIHI9ITE7dC5kaXNwbGF5LnBvbGxpbmdGYXN0PSEwLHQuZGlzcGxheS5wb2xsLnNldCgyMCxlKX1mdW5jdGlvbiBoZSh0KXt2YXIgZT10LmRpc3BsYXkuaW5wdXQscj10LmRpc3BsYXkucHJldklucHV0LG49dC5kb2MsaT1uLnNlbDtpZighdC5zdGF0ZS5mb2N1c2VkfHxJbyhlKXx8Z2UodCl8fHQuc3RhdGUuZGlzYWJsZUlucHV0KXJldHVybiExO3Quc3RhdGUucGFzdGVJbmNvbWluZyYmdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYoZS52YWx1ZT1lLnZhbHVlLnN1YnN0cmluZygwLGUudmFsdWUubGVuZ3RoLTEpLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMSk7dmFyIG89ZS52YWx1ZTtpZihvPT1yJiZqZShpLmZyb20saS50bykpcmV0dXJuITE7aWYoQWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPT09bylyZXR1cm4gZGUodCwhMCksITE7dmFyIGw9IXQuY3VyT3A7bCYmaWUodCksaS5zaGlmdD0hMTtmb3IodmFyIHM9MCxhPU1hdGgubWluKHIubGVuZ3RoLG8ubGVuZ3RoKTthPnMmJnIuY2hhckNvZGVBdChzKT09by5jaGFyQ29kZUF0KHMpOykrK3M7dmFyIHU9aS5mcm9tLGM9aS50bztzPHIubGVuZ3RoP3U9WWUodS5saW5lLHUuY2gtKHIubGVuZ3RoLXMpKTp0LnN0YXRlLm92ZXJ3cml0ZSYmamUodSxjKSYmIXQuc3RhdGUucGFzdGVJbmNvbWluZyYmKGM9WWUoYy5saW5lLE1hdGgubWluKGduKG4sYy5saW5lKS50ZXh0Lmxlbmd0aCxjLmNoKyhvLmxlbmd0aC1zKSkpKTt2YXIgZj10LmN1ck9wLnVwZGF0ZUlucHV0LGg9e2Zyb206dSx0bzpjLHRleHQ6em8oby5zbGljZShzKSksb3JpZ2luOnQuc3RhdGUucGFzdGVJbmNvbWluZz8icGFzdGUiOiIraW5wdXQifTtyZXR1cm4gQmUodC5kb2MsaCwiZW5kIiksdC5jdXJPcC51cGRhdGVJbnB1dD1mLFVuKHQsImlucHV0UmVhZCIsdCxoKSxvLmxlbmd0aD4xZTN8fG8uaW5kZXhPZigiXG4iKT4tMT9lLnZhbHVlPXQuZGlzcGxheS5wcmV2SW5wdXQ9IiI6dC5kaXNwbGF5LnByZXZJbnB1dD1vLGwmJm9lKHQpLHQuc3RhdGUucGFzdGVJbmNvbWluZz0hMSwhMH1mdW5jdGlvbiBkZSh0LGUpe3ZhciByLG4saT10LmRvYztpZihqZShpLnNlbC5mcm9tLGkuc2VsLnRvKSllJiYodC5kaXNwbGF5LnByZXZJbnB1dD10LmRpc3BsYXkuaW5wdXQudmFsdWU9IiIsQWkmJiFOaSYmKHQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSk7ZWxzZXt0LmRpc3BsYXkucHJldklucHV0PSIiLHI9Rm8mJihpLnNlbC50by5saW5lLWkuc2VsLmZyb20ubGluZT4xMDB8fChuPXQuZ2V0U2VsZWN0aW9uKCkpLmxlbmd0aD4xZTMpO3ZhciBvPXI/Ii0iOm58fHQuZ2V0U2VsZWN0aW9uKCk7dC5kaXNwbGF5LmlucHV0LnZhbHVlPW8sdC5zdGF0ZS5mb2N1c2VkJiZKbih0LmRpc3BsYXkuaW5wdXQpLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249byl9dC5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb249cn1mdW5jdGlvbiBwZSh0KXsibm9jdXJzb3IiPT10Lm9wdGlvbnMucmVhZE9ubHl8fFZpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT10LmRpc3BsYXkuaW5wdXR8fHQuZGlzcGxheS5pbnB1dC5mb2N1cygpfWZ1bmN0aW9uIGdlKHQpe3JldHVybiB0Lm9wdGlvbnMucmVhZE9ubHl8fHQuZG9jLmNhbnRFZGl0fWZ1bmN0aW9uIG1lKHQpe2Z1bmN0aW9uIGUoKXt0LnN0YXRlLmZvY3VzZWQmJnNldFRpbWVvdXQoaWkocGUsdCksMCl9ZnVuY3Rpb24gcigpe251bGw9PXMmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGwsbC5jYWNoZWRDaGFyV2lkdGg9bC5jYWNoZWRUZXh0SGVpZ2h0PU9vPW51bGwsXyh0KSxhZSh0LGlpKHVlLHQpKX0sMTAwKSl9ZnVuY3Rpb24gbigpe2Zvcih2YXIgdD1sLndyYXBwZXIucGFyZW50Tm9kZTt0JiZ0IT1kb2N1bWVudC5ib2R5O3Q9dC5wYXJlbnROb2RlKTt0P3NldFRpbWVvdXQobiw1ZTMpOlZuKHdpbmRvdywicmVzaXplIixyKX1mdW5jdGlvbiBpKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbkRyYWdFdmVudCYmdC5vcHRpb25zLm9uRHJhZ0V2ZW50KHQsRW4oZSkpfHxQbihlKX1mdW5jdGlvbiBvKCl7bC5pbmFjY3VyYXRlU2VsZWN0aW9uJiYobC5wcmV2SW5wdXQ9IiIsbC5pbmFjY3VyYXRlU2VsZWN0aW9uPSExLGwuaW5wdXQudmFsdWU9dC5nZXRTZWxlY3Rpb24oKSxKbihsLmlucHV0KSl9dmFyIGw9dC5kaXNwbGF5O0duKGwuc2Nyb2xsZXIsIm1vdXNlZG93biIsbGUodCxiZSkpLEFpP0duKGwuc2Nyb2xsZXIsImRibGNsaWNrIixsZSh0LGZ1bmN0aW9uKGUpe2lmKCFYbih0LGUpKXt2YXIgcj15ZSh0LGUpO2lmKHImJiF3ZSh0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt6bihlKTt2YXIgbj1tcihnbih0LmRvYyxyLmxpbmUpLnRleHQscik7ZXIodC5kb2Msbi5mcm9tLG4udG8pfX19KSk6R24obC5zY3JvbGxlciwiZGJsY2xpY2siLGZ1bmN0aW9uKGUpe1huKHQsZSl8fHpuKGUpfSksR24obC5saW5lU3BhY2UsInNlbGVjdHN0YXJ0IixmdW5jdGlvbih0KXt2ZShsLHQpfHx6bih0KX0pLFppfHxHbihsLnNjcm9sbGVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZSl7SWUodCxlKX0pLEduKGwuc2Nyb2xsZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmKFNlKHQsbC5zY3JvbGxlci5zY3JvbGxUb3ApLE1lKHQsbC5zY3JvbGxlci5zY3JvbGxMZWZ0LCEwKSxLbih0LCJzY3JvbGwiLHQpKX0pLEduKGwuc2Nyb2xsYmFyViwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZTZSh0LGwuc2Nyb2xsYmFyVi5zY3JvbGxUb3ApfSksR24obC5zY3JvbGxiYXJILCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJk1lKHQsbC5zY3JvbGxiYXJILnNjcm9sbExlZnQpfSksR24obC5zY3JvbGxlciwibW91c2V3aGVlbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsZXIsIkRPTU1vdXNlU2Nyb2xsIixmdW5jdGlvbihlKXtUZSh0LGUpfSksR24obC5zY3JvbGxiYXJILCJtb3VzZWRvd24iLGUpLEduKGwuc2Nyb2xsYmFyViwibW91c2Vkb3duIixlKSxHbihsLndyYXBwZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLndyYXBwZXIuc2Nyb2xsVG9wPWwud3JhcHBlci5zY3JvbGxMZWZ0PTB9KTt2YXIgcztHbih3aW5kb3csInJlc2l6ZSIsciksc2V0VGltZW91dChuLDVlMyksR24obC5pbnB1dCwia2V5dXAiLGxlKHQsZnVuY3Rpb24oZSl7WG4odCxlKXx8dC5vcHRpb25zLm9uS2V5RXZlbnQmJnQub3B0aW9ucy5vbktleUV2ZW50KHQsRW4oZSkpfHwxNj09ZS5rZXlDb2RlJiYodC5kb2Muc2VsLnNoaWZ0PSExKX0pKSxHbihsLmlucHV0LCJpbnB1dCIsZnVuY3Rpb24oKXtBaSYmIU5pJiZ0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24mJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUodCl9KSxHbihsLmlucHV0LCJrZXlkb3duIixsZSh0LFdlKSksR24obC5pbnB1dCwia2V5cHJlc3MiLGxlKHQsT2UpKSxHbihsLmlucHV0LCJmb2N1cyIsaWkoRWUsdCkpLEduKGwuaW5wdXQsImJsdXIiLGlpKHplLHQpKSx0Lm9wdGlvbnMuZHJhZ0Ryb3AmJihHbihsLnNjcm9sbGVyLCJkcmFnc3RhcnQiLGZ1bmN0aW9uKGUpe2tlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJkcmFnZW50ZXIiLGkpLEduKGwuc2Nyb2xsZXIsImRyYWdvdmVyIixpKSxHbihsLnNjcm9sbGVyLCJkcm9wIixsZSh0LExlKSkpLEduKGwuc2Nyb2xsZXIsInBhc3RlIixmdW5jdGlvbihlKXt2ZShsLGUpfHwocGUodCksZmUodCkpfSksR24obC5pbnB1dCwicGFzdGUiLGZ1bmN0aW9uKCl7aWYoV2kmJiF0LnN0YXRlLmZha2VkTGFzdENoYXImJiEobmV3IERhdGUtdC5zdGF0ZS5sYXN0TWlkZGxlRG93bjwyMDApKXt2YXIgZT1sLmlucHV0LnNlbGVjdGlvblN0YXJ0LHI9bC5pbnB1dC5zZWxlY3Rpb25FbmQ7bC5pbnB1dC52YWx1ZSs9IiQiLGwuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9ZSxsLmlucHV0LnNlbGVjdGlvbkVuZD1yLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMH10LnN0YXRlLnBhc3RlSW5jb21pbmc9ITAsZmUodCl9KSxHbihsLmlucHV0LCJjdXQiLG8pLEduKGwuaW5wdXQsImNvcHkiLG8pLEZpJiZHbihsLnNpemVyLCJtb3VzZXVwIixmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXQmJmwuaW5wdXQuYmx1cigpLHBlKHQpfSl9ZnVuY3Rpb24gdmUodCxlKXtmb3IodmFyIHI9Um4oZSk7ciE9dC53cmFwcGVyO3I9ci5wYXJlbnROb2RlKWlmKCFyfHxyLmlnbm9yZUV2ZW50c3x8ci5wYXJlbnROb2RlPT10LnNpemVyJiZyIT10Lm1vdmVyKXJldHVybiEwfWZ1bmN0aW9uIHllKHQsZSxyKXt2YXIgbj10LmRpc3BsYXk7aWYoIXIpe3ZhciBpPVJuKGUpO2lmKGk9PW4uc2Nyb2xsYmFySHx8aT09bi5zY3JvbGxiYXJILmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyVnx8aT09bi5zY3JvbGxiYXJWLmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyRmlsbGVyfHxpPT1uLmd1dHRlckZpbGxlcilyZXR1cm4gbnVsbH12YXIgbyxsLHM9Zmkobi5saW5lU3BhY2UpO3RyeXtvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGUodCxvLXMubGVmdCxsLXMudG9wKX1mdW5jdGlvbiBiZSh0KXtmdW5jdGlvbiBlKHQpe2lmKCFqZSh2LHQpKXtpZih2PXQsInNpbmdsZSI9PWMpcmV0dXJuIGVyKGkuZG9jLFFlKGwsYSksdCksdm9pZCAwOwppZihnPVFlKGwsZyksbT1RZShsLG0pLCJkb3VibGUiPT1jKXt2YXIgZT1tcihnbihsLHQubGluZSkudGV4dCx0KTskZSh0LGcpP2VyKGkuZG9jLGUuZnJvbSxtKTplcihpLmRvYyxnLGUudG8pfWVsc2UidHJpcGxlIj09YyYmKCRlKHQsZyk/ZXIoaS5kb2MsbSxRZShsLFllKHQubGluZSwwKSkpOmVyKGkuZG9jLGcsUWUobCxZZSh0LmxpbmUrMSwwKSkpKX19ZnVuY3Rpb24gcih0KXt2YXIgbj0rK2Iscz15ZShpLHQsITApO2lmKHMpaWYoamUocyxoKSl7dmFyIGE9dC5jbGllbnRZPHkudG9wPy0yMDp0LmNsaWVudFk+eS5ib3R0b20/MjA6MDthJiZzZXRUaW1lb3V0KGxlKGksZnVuY3Rpb24oKXtiPT1uJiYoby5zY3JvbGxlci5zY3JvbGxUb3ArPWEscih0KSl9KSw1MCl9ZWxzZXtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpLGg9cyxlKHMpO3ZhciB1PXAobyxsKTsocy5saW5lPj11LnRvfHxzLmxpbmU8dS5mcm9tKSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmcih0KX0pLDE1MCl9fWZ1bmN0aW9uIG4odCl7Yj0xLzAsem4odCkscGUoaSksVm4oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksVm4oZG9jdW1lbnQsIm1vdXNldXAiLEMpfWlmKCFYbih0aGlzLHQpKXt2YXIgaT10aGlzLG89aS5kaXNwbGF5LGw9aS5kb2Mscz1sLnNlbDtpZihzLnNoaWZ0PXQuc2hpZnRLZXksdmUobyx0KSlyZXR1cm4gV2l8fChvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5zY3JvbGxlci5kcmFnZ2FibGU9ITB9LDEwMCkpLHZvaWQgMDtpZighd2UoaSx0KSl7dmFyIGE9eWUoaSx0KTtzd2l0Y2goQm4odCkpe2Nhc2UgMzpyZXR1cm4gWmkmJkllLmNhbGwoaSxpLHQpLHZvaWQgMDtjYXNlIDI6cmV0dXJuIFdpJiYoaS5zdGF0ZS5sYXN0TWlkZGxlRG93bj0rbmV3IERhdGUpLGEmJmVyKGkuZG9jLGEpLHNldFRpbWVvdXQoaWkocGUsaSksMjApLHpuKHQpLHZvaWQgMH1pZighYSlyZXR1cm4gUm4odCk9PW8uc2Nyb2xsZXImJnpuKHQpLHZvaWQgMDtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpO3ZhciB1PStuZXcgRGF0ZSxjPSJzaW5nbGUiO2lmKGppJiZqaS50aW1lPnUtNDAwJiZqZShqaS5wb3MsYSkpYz0idHJpcGxlIix6bih0KSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx2cihpLGEubGluZSk7ZWxzZSBpZihZaSYmWWkudGltZT51LTQwMCYmamUoWWkucG9zLGEpKXtjPSJkb3VibGUiLGppPXt0aW1lOnUscG9zOmF9LHpuKHQpO3ZhciBmPW1yKGduKGwsYS5saW5lKS50ZXh0LGEpO2VyKGkuZG9jLGYuZnJvbSxmLnRvKX1lbHNlIFlpPXt0aW1lOnUscG9zOmF9O3ZhciBoPWE7aWYoaS5vcHRpb25zLmRyYWdEcm9wJiZXbyYmIWdlKGkpJiYhamUocy5mcm9tLHMudG8pJiYhJGUoYSxzLmZyb20pJiYhJGUocy50byxhKSYmInNpbmdsZSI9PWMpe3ZhciBkPWxlKGksZnVuY3Rpb24oZSl7V2kmJihvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSksaS5zdGF0ZS5kcmFnZ2luZ1RleHQ9ITEsVm4oZG9jdW1lbnQsIm1vdXNldXAiLGQpLFZuKG8uc2Nyb2xsZXIsImRyb3AiLGQpLE1hdGguYWJzKHQuY2xpZW50WC1lLmNsaWVudFgpK01hdGguYWJzKHQuY2xpZW50WS1lLmNsaWVudFkpPDEwJiYoem4oZSksZXIoaS5kb2MsYSkscGUoaSkpfSk7cmV0dXJuIFdpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITApLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PWQsby5zY3JvbGxlci5kcmFnRHJvcCYmby5zY3JvbGxlci5kcmFnRHJvcCgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixkKSxHbihvLnNjcm9sbGVyLCJkcm9wIixkKSx2b2lkIDB9em4odCksInNpbmdsZSI9PWMmJmVyKGkuZG9jLFFlKGwsYSkpO3ZhciBnPXMuZnJvbSxtPXMudG8sdj1hLHk9Zmkoby53cmFwcGVyKSxiPTAseD1sZShpLGZ1bmN0aW9uKHQpe0FpfHxCbih0KT9yKHQpOm4odCl9KSxDPWxlKGksbik7R24oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksR24oZG9jdW1lbnQsIm1vdXNldXAiLEMpfX19ZnVuY3Rpb24geGUodCxlLHIsbixpKXt0cnl7dmFyIG89ZS5jbGllbnRYLGw9ZS5jbGllbnRZfWNhdGNoKGUpe3JldHVybiExfWlmKG8+PU1hdGguZmxvb3IoZmkodC5kaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSlyZXR1cm4hMTtuJiZ6bihlKTt2YXIgcz10LmRpc3BsYXksYT1maShzLmxpbmVEaXYpO2lmKGw+YS5ib3R0b218fCFZbih0LHIpKXJldHVybiBGbihlKTtsLT1hLnRvcC1zLnZpZXdPZmZzZXQ7Zm9yKHZhciB1PTA7dTx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt1KXt2YXIgYz1zLmd1dHRlcnMuY2hpbGROb2Rlc1t1XTtpZihjJiZmaShjKS5yaWdodD49byl7dmFyIGY9eG4odC5kb2MsbCksaD10Lm9wdGlvbnMuZ3V0dGVyc1t1XTtyZXR1cm4gaSh0LHIsdCxmLGgsZSksRm4oZSl9fX1mdW5jdGlvbiBDZSh0LGUpe3JldHVybiBZbih0LCJndXR0ZXJDb250ZXh0TWVudSIpP3hlKHQsZSwiZ3V0dGVyQ29udGV4dE1lbnUiLCExLEtuKTohMX1mdW5jdGlvbiB3ZSh0LGUpe3JldHVybiB4ZSh0LGUsImd1dHRlckNsaWNrIiwhMCxVbil9ZnVuY3Rpb24gTGUodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fHZlKGUuZGlzcGxheSx0KXx8ZS5vcHRpb25zLm9uRHJhZ0V2ZW50JiZlLm9wdGlvbnMub25EcmFnRXZlbnQoZSxFbih0KSkpKXt6bih0KSxBaSYmKHRvPStuZXcgRGF0ZSk7dmFyIHI9eWUoZSx0LCEwKSxuPXQuZGF0YVRyYW5zZmVyLmZpbGVzO2lmKHImJiFnZShlKSlpZihuJiZuLmxlbmd0aCYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlKWZvcih2YXIgaT1uLmxlbmd0aCxvPUFycmF5KGkpLGw9MCxzPWZ1bmN0aW9uKHQsbil7dmFyIHM9bmV3IEZpbGVSZWFkZXI7cy5vbmxvYWQ9ZnVuY3Rpb24oKXtvW25dPXMucmVzdWx0LCsrbD09aSYmKHI9UWUoZS5kb2MsciksQmUoZS5kb2Mse2Zyb206cix0bzpyLHRleHQ6em8oby5qb2luKCJcbiIpKSxvcmlnaW46InBhc3RlIn0sImFyb3VuZCIpKX0scy5yZWFkQXNUZXh0KHQpfSxhPTA7aT5hOysrYSlzKG5bYV0sYSk7ZWxzZXtpZihlLnN0YXRlLmRyYWdnaW5nVGV4dCYmISRlKHIsZS5kb2Muc2VsLmZyb20pJiYhJGUoZS5kb2Muc2VsLnRvLHIpKXJldHVybiBlLnN0YXRlLmRyYWdnaW5nVGV4dCh0KSxzZXRUaW1lb3V0KGlpKHBlLGUpLDIwKSx2b2lkIDA7dHJ5e3ZhciBvPXQuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTtpZihvKXt2YXIgdT1lLmRvYy5zZWwuZnJvbSxjPWUuZG9jLnNlbC50bztucihlLmRvYyxyLHIpLGUuc3RhdGUuZHJhZ2dpbmdUZXh0JiZfZShlLmRvYywiIix1LGMsInBhc3RlIiksZS5yZXBsYWNlU2VsZWN0aW9uKG8sbnVsbCwicGFzdGUiKSxwZShlKX19Y2F0Y2godCl7fX19fWZ1bmN0aW9uIGtlKHQsZSl7aWYoQWkmJighdC5zdGF0ZS5kcmFnZ2luZ1RleHR8fCtuZXcgRGF0ZS10bzwxMDApKXJldHVybiBQbihlKSx2b2lkIDA7aWYoIVhuKHQsZSkmJiF2ZSh0LmRpc3BsYXksZSkpe3ZhciByPXQuZ2V0U2VsZWN0aW9uKCk7aWYoZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsciksZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlJiYhSWkpe3ZhciBuPXNpKCJpbWciLG51bGwsbnVsbCwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7bi5zcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09Iix6aSYmKG4ud2lkdGg9bi5oZWlnaHQ9MSx0LmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChuKSxuLl90b3A9bi5vZmZzZXRUb3ApLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLDAsMCksemkmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX19fWZ1bmN0aW9uIFNlKHQsZSl7TWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWUpPDJ8fCh0LmRvYy5zY3JvbGxUb3A9ZSxUaXx8Yih0LFtdLGUpLHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wPWUpLHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1lKSxUaSYmYih0LFtdKSxXKHQsMTAwKSl9ZnVuY3Rpb24gTWUodCxlLHIpeyhyP2U9PXQuZG9jLnNjcm9sbExlZnQ6TWF0aC5hYnModC5kb2Muc2Nyb2xsTGVmdC1lKTwyKXx8KGU9TWF0aC5taW4oZSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKSx0LmRvYy5zY3JvbGxMZWZ0PWUsZyh0KSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0PWUpLHQuZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PWUpKX1mdW5jdGlvbiBUZSh0LGUpe3ZhciByPWUud2hlZWxEZWx0YVgsbj1lLndoZWVsRGVsdGFZO251bGw9PXImJmUuZGV0YWlsJiZlLmF4aXM9PWUuSE9SSVpPTlRBTF9BWElTJiYocj1lLmRldGFpbCksbnVsbD09biYmZS5kZXRhaWwmJmUuYXhpcz09ZS5WRVJUSUNBTF9BWElTP249ZS5kZXRhaWw6bnVsbD09biYmKG49ZS53aGVlbERlbHRhKTt2YXIgaT10LmRpc3BsYXksbz1pLnNjcm9sbGVyO2lmKHImJm8uc2Nyb2xsV2lkdGg+by5jbGllbnRXaWR0aHx8biYmby5zY3JvbGxIZWlnaHQ+by5jbGllbnRIZWlnaHQpe2lmKG4mJktpJiZXaSlmb3IodmFyIGw9ZS50YXJnZXQ7bCE9bztsPWwucGFyZW50Tm9kZSlpZihsLmxpbmVPYmope3QuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQ9bDticmVha31pZihyJiYhVGkmJiF6aSYmbnVsbCE9cm8pcmV0dXJuIG4mJlNlKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbFRvcCtuKnJvLG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0KSkpLE1lKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbExlZnQrcipybyxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgpKSksem4oZSksaS53aGVlbFN0YXJ0WD1udWxsLHZvaWQgMDtpZihuJiZudWxsIT1ybyl7dmFyIHM9bipybyxhPXQuZG9jLnNjcm9sbFRvcCx1PWEraS53cmFwcGVyLmNsaWVudEhlaWdodDswPnM/YT1NYXRoLm1heCgwLGErcy01MCk6dT1NYXRoLm1pbih0LmRvYy5oZWlnaHQsdStzKzUwKSxiKHQsW10se3RvcDphLGJvdHRvbTp1fSl9MjA+ZW8mJihudWxsPT1pLndoZWVsU3RhcnRYPyhpLndoZWVsU3RhcnRYPW8uc2Nyb2xsTGVmdCxpLndoZWVsU3RhcnRZPW8uc2Nyb2xsVG9wLGkud2hlZWxEWD1yLGkud2hlZWxEWT1uLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihudWxsIT1pLndoZWVsU3RhcnRYKXt2YXIgdD1vLnNjcm9sbExlZnQtaS53aGVlbFN0YXJ0WCxlPW8uc2Nyb2xsVG9wLWkud2hlZWxTdGFydFkscj1lJiZpLndoZWVsRFkmJmUvaS53aGVlbERZfHx0JiZpLndoZWVsRFgmJnQvaS53aGVlbERYO2kud2hlZWxTdGFydFg9aS53aGVlbFN0YXJ0WT1udWxsLHImJihybz0ocm8qZW8rcikvKGVvKzEpLCsrZW8pfX0sMjAwKSk6KGkud2hlZWxEWCs9cixpLndoZWVsRFkrPW4pKX19ZnVuY3Rpb24gQWUodCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9bW9bZV0sIWUpKXJldHVybiExO3QuZGlzcGxheS5wb2xsaW5nRmFzdCYmaGUodCkmJih0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEpO3ZhciBuPXQuZG9jLGk9bi5zZWwuc2hpZnQsbz0hMTt0cnl7Z2UodCkmJih0LnN0YXRlLnN1cHByZXNzRWRpdHM9ITApLHImJihuLnNlbC5zaGlmdD0hMSksbz1lKHQpIT1Bb31maW5hbGx5e24uc2VsLnNoaWZ0PWksdC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSExfXJldHVybiBvfWZ1bmN0aW9uIEhlKHQpe3ZhciBlPXQuc3RhdGUua2V5TWFwcy5zbGljZSgwKTtyZXR1cm4gdC5vcHRpb25zLmV4dHJhS2V5cyYmZS5wdXNoKHQub3B0aW9ucy5leHRyYUtleXMpLGUucHVzaCh0Lm9wdGlvbnMua2V5TWFwKSxlfWZ1bmN0aW9uIE5lKHQsZSl7dmFyIHI9Q3IodC5vcHRpb25zLmtleU1hcCksbj1yLmF1dG87Y2xlYXJUaW1lb3V0KG5vKSxuJiYhTHIoZSkmJihubz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Q3IodC5vcHRpb25zLmtleU1hcCk9PXImJih0Lm9wdGlvbnMua2V5TWFwPW4uY2FsbD9uLmNhbGwobnVsbCx0KTpuLGwodCkpfSw1MCkpO3ZhciBpPWtyKGUsITApLG89ITE7aWYoIWkpcmV0dXJuITE7dmFyIHM9SGUodCk7cmV0dXJuIG89ZS5zaGlmdEtleT93cigiU2hpZnQtIitpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KXx8d3IoaSxzLGZ1bmN0aW9uKGUpe3JldHVybigic3RyaW5nIj09dHlwZW9mIGU/L15nb1tBLVpdLy50ZXN0KGUpOmUubW90aW9uKT9BZSh0LGUpOnZvaWQgMH0pOndyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4gQWUodCxlKX0pLG8mJih6bihlKSxEKHQpLE5pJiYoZS5vbGRLZXlDb2RlPWUua2V5Q29kZSxlLmtleUNvZGU9MCksVW4odCwia2V5SGFuZGxlZCIsdCxpLGUpKSxvfWZ1bmN0aW9uIERlKHQsZSxyKXt2YXIgbj13cigiJyIrcisiJyIsSGUodCksZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KTtyZXR1cm4gbiYmKHpuKGUpLEQodCksVW4odCwia2V5SGFuZGxlZCIsdCwiJyIrcisiJyIsZSkpLG59ZnVuY3Rpb24gV2UodCl7dmFyIGU9dGhpcztpZihlLnN0YXRlLmZvY3VzZWR8fEVlKGUpLCEoWG4oZSx0KXx8ZS5vcHRpb25zLm9uS2V5RXZlbnQmJmUub3B0aW9ucy5vbktleUV2ZW50KGUsRW4odCkpKSl7QWkmJjI3PT10LmtleUNvZGUmJih0LnJldHVyblZhbHVlPSExKTt2YXIgcj10LmtleUNvZGU7ZS5kb2Muc2VsLnNoaWZ0PTE2PT1yfHx0LnNoaWZ0S2V5O3ZhciBuPU5lKGUsdCk7emkmJihvbz1uP3I6bnVsbCwhbiYmODg9PXImJiFGbyYmKEtpP3QubWV0YUtleTp0LmN0cmxLZXkpJiZlLnJlcGxhY2VTZWxlY3Rpb24oIiIpKX19ZnVuY3Rpb24gT2UodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe3ZhciByPXQua2V5Q29kZSxuPXQuY2hhckNvZGU7aWYoemkmJnI9PW9vKXJldHVybiBvbz1udWxsLHpuKHQpLHZvaWQgMDtpZighKHppJiYoIXQud2hpY2h8fHQud2hpY2g8MTApfHxGaSl8fCFOZShlLHQpKXt2YXIgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PW4/cjpuKTt0aGlzLm9wdGlvbnMuZWxlY3RyaWNDaGFycyYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzJiZ0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQmJiFnZSh0aGlzKSYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzLmluZGV4T2YoaSk+LTEmJnNldFRpbWVvdXQobGUoZSxmdW5jdGlvbigpe2hyKGUsZS5kb2Muc2VsLnRvLmxpbmUsInNtYXJ0Iil9KSw3NSksRGUoZSx0LGkpfHwoQWkmJiFOaSYmKGUuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSxmZShlKSl9fX1mdW5jdGlvbiBFZSh0KXsibm9jdXJzb3IiIT10Lm9wdGlvbnMucmVhZE9ubHkmJih0LnN0YXRlLmZvY3VzZWR8fChLbih0LCJmb2N1cyIsdCksdC5zdGF0ZS5mb2N1c2VkPSEwLC0xPT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNvZGVNaXJyb3ItZm9jdXNlZFxiLykmJih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci1mb2N1c2VkIiksdC5jdXJPcHx8KGRlKHQsITApLFdpJiZzZXRUaW1lb3V0KGlpKGRlLHQsITApLDApKSksY2UodCksRCh0KSl9ZnVuY3Rpb24gemUodCl7dC5zdGF0ZS5mb2N1c2VkJiYoS24odCwiYmx1ciIsdCksdC5zdGF0ZS5mb2N1c2VkPSExLHQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3ItZm9jdXNlZCIsIiIpKSxjbGVhckludGVydmFsKHQuZGlzcGxheS5ibGlua2VyKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zdGF0ZS5mb2N1c2VkfHwodC5kb2Muc2VsLnNoaWZ0PSExKX0sMTUwKX1mdW5jdGlvbiBJZSh0LGUpe2Z1bmN0aW9uIHIoKXtpZihudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXt2YXIgdD1pLmlucHV0LnZhbHVlPSLigIsiKyhqZShvLmZyb20sby50byk/IiI6aS5pbnB1dC52YWx1ZSk7aS5wcmV2SW5wdXQ9IuKAiyIsaS5pbnB1dC5zZWxlY3Rpb25TdGFydD0xLGkuaW5wdXQuc2VsZWN0aW9uRW5kPXQubGVuZ3RofX1mdW5jdGlvbiBuKCl7aWYoaS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGkuaW5wdXQuc3R5bGUuY3NzVGV4dD11LE5pJiYoaS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1pLnNjcm9sbGVyLnNjcm9sbFRvcD1zKSxjZSh0KSxudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXsoIUFpfHxOaSkmJnIoKSxjbGVhclRpbWVvdXQoaW8pO3ZhciBlPTAsbj1mdW5jdGlvbigpeyIgIj09aS5wcmV2SW5wdXQmJjA9PWkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ/bGUodCxtby5zZWxlY3RBbGwpKHQpOmUrKzwxMD9pbz1zZXRUaW1lb3V0KG4sNTAwKTpkZSh0KX07aW89c2V0VGltZW91dChuLDIwMCl9fWlmKCFYbih0LGUsImNvbnRleHRtZW51Iikpe3ZhciBpPXQuZGlzcGxheSxvPXQuZG9jLnNlbDtpZighdmUoaSxlKSYmIUNlKHQsZSkpe3ZhciBsPXllKHQsZSkscz1pLnNjcm9sbGVyLnNjcm9sbFRvcDtpZihsJiYhemkpe3ZhciBhPXQub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnU7YSYmKGplKG8uZnJvbSxvLnRvKXx8JGUobCxvLmZyb20pfHwhJGUobCxvLnRvKSkmJmxlKHQsbnIpKHQuZG9jLGwsbCk7dmFyIHU9aS5pbnB1dC5zdHlsZS5jc3NUZXh0O2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9wOiAiKyhlLmNsaWVudFktNSkrInB4OyBsZWZ0OiAiKyhlLmNsaWVudFgtNSkrInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgb3V0bGluZTogbm9uZTsiKyJib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgLW1zLW9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyIscGUodCksZGUodCwhMCksamUoby5mcm9tLG8udG8pJiYoaS5pbnB1dC52YWx1ZT1pLnByZXZJbnB1dD0iICIpLEFpJiYhTmkmJnIoKSxaaSl7UG4oZSk7dmFyIGM9ZnVuY3Rpb24oKXtWbih3aW5kb3csIm1vdXNldXAiLGMpLHNldFRpbWVvdXQobiwyMCl9O0duKHdpbmRvdywibW91c2V1cCIsYyl9ZWxzZSBzZXRUaW1lb3V0KG4sNTApfX19fWZ1bmN0aW9uIEZlKHQsZSxyKXtpZighJGUoZS5mcm9tLHIpKXJldHVybiBRZSh0LHIpO3ZhciBuPWUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKTtpZihyLmxpbmU+ZS50by5saW5lK24pe3ZhciBpPXIubGluZS1uLG89dC5maXJzdCt0LnNpemUtMTtyZXR1cm4gaT5vP1llKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCk6SmUocixnbih0LGkpLnRleHQubGVuZ3RoKX1pZihyLmxpbmU9PWUudG8ubGluZStuKXJldHVybiBKZShyLFFuKGUudGV4dCkubGVuZ3RoKygxPT1lLnRleHQubGVuZ3RoP2UuZnJvbS5jaDowKStnbih0LGUudG8ubGluZSkudGV4dC5sZW5ndGgtZS50by5jaCk7dmFyIGw9ci5saW5lLWUuZnJvbS5saW5lO3JldHVybiBKZShyLGUudGV4dFtsXS5sZW5ndGgrKGw/MDplLmZyb20uY2gpKX1mdW5jdGlvbiBQZSh0LGUscil7aWYociYmIm9iamVjdCI9PXR5cGVvZiByKXJldHVybnthbmNob3I6RmUodCxlLHIuYW5jaG9yKSxoZWFkOkZlKHQsZSxyLmhlYWQpfTtpZigic3RhcnQiPT1yKXJldHVybnthbmNob3I6ZS5mcm9tLGhlYWQ6ZS5mcm9tfTt2YXIgbj1sbyhlKTtpZigiYXJvdW5kIj09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOm59O2lmKCJlbmQiPT1yKXJldHVybnthbmNob3I6bixoZWFkOm59O3ZhciBpPWZ1bmN0aW9uKHQpe2lmKCRlKHQsZS5mcm9tKSlyZXR1cm4gdDtpZighJGUoZS50byx0KSlyZXR1cm4gbjt2YXIgcj10LmxpbmUrZS50ZXh0Lmxlbmd0aC0oZS50by5saW5lLWUuZnJvbS5saW5lKS0xLGk9dC5jaDtyZXR1cm4gdC5saW5lPT1lLnRvLmxpbmUmJihpKz1uLmNoLWUudG8uY2gpLFllKHIsaSl9O3JldHVybnthbmNob3I6aSh0LnNlbC5hbmNob3IpLGhlYWQ6aSh0LnNlbC5oZWFkKX19ZnVuY3Rpb24gUmUodCxlLHIpe3ZhciBuPXtjYW5jZWxlZDohMSxmcm9tOmUuZnJvbSx0bzplLnRvLHRleHQ6ZS50ZXh0LG9yaWdpbjplLm9yaWdpbixjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGVkPSEwfX07cmV0dXJuIHImJihuLnVwZGF0ZT1mdW5jdGlvbihlLHIsbixpKXtlJiYodGhpcy5mcm9tPVFlKHQsZSkpLHImJih0aGlzLnRvPVFlKHQscikpLG4mJih0aGlzLnRleHQ9biksdm9pZCAwIT09aSYmKHRoaXMub3JpZ2luPWkpfSksS24odCwiYmVmb3JlQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZUNoYW5nZSIsdC5jbSxuKSxuLmNhbmNlbGVkP251bGw6e2Zyb206bi5mcm9tLHRvOm4udG8sdGV4dDpuLnRleHQsb3JpZ2luOm4ub3JpZ2lufX1mdW5jdGlvbiBCZSh0LGUscixuKXtpZih0LmNtKXtpZighdC5jbS5jdXJPcClyZXR1cm4gbGUodC5jbSxCZSkodCxlLHIsbik7aWYodC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXJldHVybn1pZighKFluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSl8fChlPVJlKHQsZSwhMCkpKXt2YXIgaT1xaSYmIW4mJkZyKHQsZS5mcm9tLGUudG8pO2lmKGkpe2Zvcih2YXIgbz1pLmxlbmd0aC0xO28+PTE7LS1vKUdlKHQse2Zyb206aVtvXS5mcm9tLHRvOmlbb10udG8sdGV4dDpbIiJdfSk7aS5sZW5ndGgmJkdlKHQse2Zyb206aVswXS5mcm9tLHRvOmlbMF0udG8sdGV4dDplLnRleHR9LHIpfWVsc2UgR2UodCxlLHIpfX1mdW5jdGlvbiBHZSh0LGUscil7aWYoMSE9ZS50ZXh0Lmxlbmd0aHx8IiIhPWUudGV4dFswXXx8IWplKGUuZnJvbSxlLnRvKSl7dmFyIG49UGUodCxlLHIpO01uKHQsZSxuLHQuY20/dC5jbS5jdXJPcC5pZDowLzApLFVlKHQsZSxuLHpyKHQsZSkpO3ZhciBpPVtdO2RuKHQsZnVuY3Rpb24odCxyKXtyfHwtMSE9dGkoaSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LGUpLGkucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LGUsbnVsbCx6cih0LGUpKX0pfX1mdW5jdGlvbiBWZSh0LGUpe2lmKCF0LmNtfHwhdC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXt2YXIgcj10Lmhpc3Rvcnksbj0oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkucG9wKCk7aWYobil7dmFyIGk9e2NoYW5nZXM6W10sYW5jaG9yQmVmb3JlOm4uYW5jaG9yQWZ0ZXIsaGVhZEJlZm9yZTpuLmhlYWRBZnRlcixhbmNob3JBZnRlcjpuLmFuY2hvckJlZm9yZSxoZWFkQWZ0ZXI6bi5oZWFkQmVmb3JlLGdlbmVyYXRpb246ci5nZW5lcmF0aW9ufTsoInVuZG8iPT1lP3IudW5kb25lOnIuZG9uZSkucHVzaChpKSxyLmdlbmVyYXRpb249bi5nZW5lcmF0aW9ufHwrK3IubWF4R2VuZXJhdGlvbjtmb3IodmFyIG89WW4odCwiYmVmb3JlQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZUNoYW5nZSIpLGw9bi5jaGFuZ2VzLmxlbmd0aC0xO2w+PTA7LS1sKXt2YXIgcz1uLmNoYW5nZXNbbF07aWYocy5vcmlnaW49ZSxvJiYhUmUodCxzLCExKSlyZXR1cm4oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkubGVuZ3RoPTAsdm9pZCAwO2kuY2hhbmdlcy5wdXNoKFNuKHQscykpO3ZhciBhPWw/UGUodCxzLG51bGwpOnthbmNob3I6bi5hbmNob3JCZWZvcmUsaGVhZDpuLmhlYWRCZWZvcmV9O1VlKHQscyxhLElyKHQscykpO3ZhciB1PVtdO2RuKHQsZnVuY3Rpb24odCxlKXtlfHwtMSE9dGkodSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LHMpLHUucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LHMsbnVsbCxJcih0LHMpKX0pfX19fWZ1bmN0aW9uIEtlKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gWWUodC5saW5lK2UsdC5jaCl9dC5maXJzdCs9ZSx0LmNtJiZ1ZSh0LmNtLHQuZmlyc3QsdC5maXJzdCxlKSx0LnNlbC5oZWFkPXIodC5zZWwuaGVhZCksdC5zZWwuYW5jaG9yPXIodC5zZWwuYW5jaG9yKSx0LnNlbC5mcm9tPXIodC5zZWwuZnJvbSksdC5zZWwudG89cih0LnNlbC50byl9ZnVuY3Rpb24gVWUodCxlLHIsbil7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVWUpKHQsZSxyLG4pO2lmKGUudG8ubGluZTx0LmZpcnN0KXJldHVybiBLZSh0LGUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKSksdm9pZCAwO2lmKCEoZS5mcm9tLmxpbmU+dC5sYXN0TGluZSgpKSl7aWYoZS5mcm9tLmxpbmU8dC5maXJzdCl7dmFyIGk9ZS50ZXh0Lmxlbmd0aC0xLSh0LmZpcnN0LWUuZnJvbS5saW5lKTtLZSh0LGkpLGU9e2Zyb206WWUodC5maXJzdCwwKSx0bzpZZShlLnRvLmxpbmUraSxlLnRvLmNoKSx0ZXh0OltRbihlLnRleHQpXSxvcmlnaW46ZS5vcmlnaW59fXZhciBvPXQubGFzdExpbmUoKTtlLnRvLmxpbmU+byYmKGU9e2Zyb206ZS5mcm9tLHRvOlllKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCksdGV4dDpbZS50ZXh0WzBdXSxvcmlnaW46ZS5vcmlnaW59KSxlLnJlbW92ZWQ9bW4odCxlLmZyb20sZS50bykscnx8KHI9UGUodCxlLG51bGwpKSx0LmNtP1hlKHQuY20sZSxuLHIpOmNuKHQsZSxuLHIpfX1mdW5jdGlvbiBYZSh0LGUscixuKXt2YXIgbz10LmRvYyxsPXQuZGlzcGxheSxzPWUuZnJvbSxhPWUudG8sdT0hMSxmPXMubGluZTt0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoZj1ibihHcihvLGduKG8scy5saW5lKSkpLG8uaXRlcihmLGEubGluZSsxLGZ1bmN0aW9uKHQpe3JldHVybiB0PT1sLm1heExpbmU/KHU9ITAsITApOnZvaWQgMH0pKSwkZShvLnNlbC5oZWFkLGUuZnJvbSl8fCRlKGUudG8sby5zZWwuaGVhZCl8fCh0LmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxjbihvLGUscixuLGkodCkpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fChvLml0ZXIoZixzLmxpbmUrZS50ZXh0Lmxlbmd0aCxmdW5jdGlvbih0KXt2YXIgZT1jKG8sdCk7ZT5sLm1heExpbmVMZW5ndGgmJihsLm1heExpbmU9dCxsLm1heExpbmVMZW5ndGg9ZSxsLm1heExpbmVDaGFuZ2VkPSEwLHU9ITEpfSksdSYmKHQuY3VyT3AudXBkYXRlTWF4TGluZT0hMCkpLG8uZnJvbnRpZXI9TWF0aC5taW4oby5mcm9udGllcixzLmxpbmUpLFcodCw0MDApO3ZhciBoPWUudGV4dC5sZW5ndGgtKGEubGluZS1zLmxpbmUpLTE7aWYodWUodCxzLmxpbmUsYS5saW5lKzEsaCksWW4odCwiY2hhbmdlIikpe3ZhciBkPXtmcm9tOnMsdG86YSx0ZXh0OmUudGV4dCxyZW1vdmVkOmUucmVtb3ZlZCxvcmlnaW46ZS5vcmlnaW59O2lmKHQuY3VyT3AudGV4dENoYW5nZWQpe2Zvcih2YXIgcD10LmN1ck9wLnRleHRDaGFuZ2VkO3AubmV4dDtwPXAubmV4dCk7cC5uZXh0PWR9ZWxzZSB0LmN1ck9wLnRleHRDaGFuZ2VkPWR9fWZ1bmN0aW9uIF9lKHQsZSxyLG4saSl7aWYobnx8KG49ciksJGUobixyKSl7dmFyIG89bjtuPXIscj1vfSJzdHJpbmciPT10eXBlb2YgZSYmKGU9em8oZSkpLEJlKHQse2Zyb206cix0bzpuLHRleHQ6ZSxvcmlnaW46aX0sbnVsbCl9ZnVuY3Rpb24gWWUodCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFllPyh0aGlzLmxpbmU9dCx0aGlzLmNoPWUsdm9pZCAwKTpuZXcgWWUodCxlKX1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiB0LmxpbmU9PWUubGluZSYmdC5jaD09ZS5jaH1mdW5jdGlvbiAkZSh0LGUpe3JldHVybiB0LmxpbmU8ZS5saW5lfHx0LmxpbmU9PWUubGluZSYmdC5jaDxlLmNofWZ1bmN0aW9uIFplKHQpe3JldHVybiBZZSh0LmxpbmUsdC5jaCl9ZnVuY3Rpb24gcWUodCxlKXtyZXR1cm4gTWF0aC5tYXgodC5maXJzdCxNYXRoLm1pbihlLHQuZmlyc3QrdC5zaXplLTEpKX1mdW5jdGlvbiBRZSh0LGUpe2lmKGUubGluZTx0LmZpcnN0KXJldHVybiBZZSh0LmZpcnN0LDApO3ZhciByPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGUubGluZT5yP1llKHIsZ24odCxyKS50ZXh0Lmxlbmd0aCk6SmUoZSxnbih0LGUubGluZSkudGV4dC5sZW5ndGgpfWZ1bmN0aW9uIEplKHQsZSl7dmFyIHI9dC5jaDtyZXR1cm4gbnVsbD09cnx8cj5lP1llKHQubGluZSxlKTowPnI/WWUodC5saW5lLDApOnR9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gZT49dC5maXJzdCYmZTx0LmZpcnN0K3Quc2l6ZX1mdW5jdGlvbiBlcih0LGUscixuKXtpZih0LnNlbC5zaGlmdHx8dC5zZWwuZXh0ZW5kKXt2YXIgaT10LnNlbC5hbmNob3I7aWYocil7dmFyIG89JGUoZSxpKTtvIT0kZShyLGkpPyhpPWUsZT1yKTpvIT0kZShlLHIpJiYoZT1yKX1ucih0LGksZSxuKX1lbHNlIG5yKHQsZSxyfHxlLG4pO3QuY20mJih0LmNtLmN1ck9wLnVzZXJTZWxDaGFuZ2U9ITApfWZ1bmN0aW9uIHJyKHQsZSxyKXt2YXIgbj17YW5jaG9yOmUsaGVhZDpyfTtyZXR1cm4gS24odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdC5jbSxuKSxuLmFuY2hvcj1RZSh0LG4uYW5jaG9yKSxuLmhlYWQ9UWUodCxuLmhlYWQpLG59ZnVuY3Rpb24gbnIodCxlLHIsbixpKXtpZighaSYmWW4odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpKXt2YXIgbz1ycih0LGUscik7cj1vLmhlYWQsZT1vLmFuY2hvcn12YXIgbD10LnNlbDtpZihsLmdvYWxDb2x1bW49bnVsbCxudWxsPT1uJiYobj0kZShyLGwuaGVhZCk/LTE6MSksKGl8fCFqZShlLGwuYW5jaG9yKSkmJihlPW9yKHQsZSxuLCJwdXNoIiE9aSkpLChpfHwhamUocixsLmhlYWQpKSYmKHI9b3IodCxyLG4sInB1c2giIT1pKSksIWplKGwuYW5jaG9yLGUpfHwhamUobC5oZWFkLHIpKXtsLmFuY2hvcj1lLGwuaGVhZD1yO3ZhciBzPSRlKHIsZSk7bC5mcm9tPXM/cjplLGwudG89cz9lOnIsdC5jbSYmKHQuY20uY3VyT3AudXBkYXRlSW5wdXQ9dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPXQuY20uY3VyT3AuY3Vyc29yQWN0aXZpdHk9ITApLFVuKHQsImN1cnNvckFjdGl2aXR5Iix0KX19ZnVuY3Rpb24gaXIodCl7bnIodC5kb2MsdC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvLG51bGwsInB1c2giKX1mdW5jdGlvbiBvcih0LGUscixuKXt2YXIgaT0hMSxvPWUsbD1yfHwxO3QuY2FudEVkaXQ9ITE7dDpmb3IoOzspe3ZhciBzPWduKHQsby5saW5lKTtpZihzLm1hcmtlZFNwYW5zKWZvcih2YXIgYT0wO2E8cy5tYXJrZWRTcGFucy5sZW5ndGg7KythKXt2YXIgdT1zLm1hcmtlZFNwYW5zW2FdLGM9dS5tYXJrZXI7aWYoKG51bGw9PXUuZnJvbXx8KGMuaW5jbHVzaXZlTGVmdD91LmZyb208PW8uY2g6dS5mcm9tPG8uY2gpKSYmKG51bGw9PXUudG98fChjLmluY2x1c2l2ZVJpZ2h0P3UudG8+PW8uY2g6dS50bz5vLmNoKSkpe2lmKG4mJihLbihjLCJiZWZvcmVDdXJzb3JFbnRlciIpLGMuZXhwbGljaXRseUNsZWFyZWQpKXtpZihzLm1hcmtlZFNwYW5zKXstLWE7Y29udGludWV9YnJlYWt9aWYoIWMuYXRvbWljKWNvbnRpbnVlO3ZhciBmPWMuZmluZCgpWzA+bD8iZnJvbSI6InRvIl07aWYoamUoZixvKSYmKGYuY2grPWwsZi5jaDwwP2Y9Zi5saW5lPnQuZmlyc3Q/UWUodCxZZShmLmxpbmUtMSkpOm51bGw6Zi5jaD5zLnRleHQubGVuZ3RoJiYoZj1mLmxpbmU8dC5maXJzdCt0LnNpemUtMT9ZZShmLmxpbmUrMSwwKTpudWxsKSwhZikpe2lmKGkpcmV0dXJuIG4/KHQuY2FudEVkaXQ9ITAsWWUodC5maXJzdCwwKSk6b3IodCxlLHIsITApO2k9ITAsZj1lLGw9LWx9bz1mO2NvbnRpbnVlIHR9fXJldHVybiBvfX1mdW5jdGlvbiBscih0KXt2YXIgZT1zcih0LHQuZG9jLnNlbC5oZWFkLG51bGwsdC5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbik7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgcj10LmRpc3BsYXksbj1maShyLnNpemVyKSxpPW51bGw7aWYoZS50b3Arbi50b3A8MD9pPSEwOmUuYm90dG9tK24udG9wPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoaT0hMSksbnVsbCE9aSYmIUJpKXt2YXIgbz0ibm9uZSI9PXIuY3Vyc29yLnN0eWxlLmRpc3BsYXk7byYmKHIuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5jdXJzb3Iuc3R5bGUubGVmdD1lLmxlZnQrInB4IixyLmN1cnNvci5zdHlsZS50b3A9ZS50b3Atci52aWV3T2Zmc2V0KyJweCIpLHIuY3Vyc29yLnNjcm9sbEludG9WaWV3KGkpLG8mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIil9fX1mdW5jdGlvbiBzcih0LGUscixuKXtmb3IobnVsbD09biYmKG49MCk7Oyl7dmFyIGk9ITEsbz1RKHQsZSksbD1yJiZyIT1lP1EodCxyKTpvLHM9dXIodCxNYXRoLm1pbihvLmxlZnQsbC5sZWZ0KSxNYXRoLm1pbihvLnRvcCxsLnRvcCktbixNYXRoLm1heChvLmxlZnQsbC5sZWZ0KSxNYXRoLm1heChvLmJvdHRvbSxsLmJvdHRvbSkrbiksYT10LmRvYy5zY3JvbGxUb3AsdT10LmRvYy5zY3JvbGxMZWZ0O2lmKG51bGwhPXMuc2Nyb2xsVG9wJiYoU2UodCxzLnNjcm9sbFRvcCksTWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWEpPjEmJihpPSEwKSksbnVsbCE9cy5zY3JvbGxMZWZ0JiYoTWUodCxzLnNjcm9sbExlZnQpLE1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtdSk+MSYmKGk9ITApKSwhaSlyZXR1cm4gb319ZnVuY3Rpb24gYXIodCxlLHIsbixpKXt2YXIgbz11cih0LGUscixuLGkpO251bGwhPW8uc2Nyb2xsVG9wJiZTZSh0LG8uc2Nyb2xsVG9wKSxudWxsIT1vLnNjcm9sbExlZnQmJk1lKHQsby5zY3JvbGxMZWZ0KX1mdW5jdGlvbiB1cih0LGUscixuLGkpe3ZhciBvPXQuZGlzcGxheSxsPXJlKHQuZGlzcGxheSk7MD5yJiYocj0wKTt2YXIgcz1vLnNjcm9sbGVyLmNsaWVudEhlaWdodC1UbyxhPW8uc2Nyb2xsZXIuc2Nyb2xsVG9wLHU9e30sYz10LmRvYy5oZWlnaHQrRihvKSxmPWw+cixoPWk+Yy1sO2lmKGE+cil1LnNjcm9sbFRvcD1mPzA6cjtlbHNlIGlmKGk+YStzKXt2YXIgZD1NYXRoLm1pbihyLChoP2M6aSktcyk7ZCE9YSYmKHUuc2Nyb2xsVG9wPWQpfXZhciBwPW8uc2Nyb2xsZXIuY2xpZW50V2lkdGgtVG8sZz1vLnNjcm9sbGVyLnNjcm9sbExlZnQ7ZSs9by5ndXR0ZXJzLm9mZnNldFdpZHRoLG4rPW8uZ3V0dGVycy5vZmZzZXRXaWR0aDt2YXIgbT1vLmd1dHRlcnMub2Zmc2V0V2lkdGgsdj1tKzEwPmU7cmV0dXJuIGcrbT5lfHx2Pyh2JiYoZT0wKSx1LnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxlLTEwLW0pKTpuPnArZy0zJiYodS5zY3JvbGxMZWZ0PW4rMTAtcCksdX1mdW5jdGlvbiBjcih0LGUscil7dC5jdXJPcC51cGRhdGVTY3JvbGxQb3M9e3Njcm9sbExlZnQ6bnVsbD09ZT90LmRvYy5zY3JvbGxMZWZ0OmUsc2Nyb2xsVG9wOm51bGw9PXI/dC5kb2Muc2Nyb2xsVG9wOnJ9fWZ1bmN0aW9uIGZyKHQsZSxyKXt2YXIgbj10LmN1ck9wLnVwZGF0ZVNjcm9sbFBvc3x8KHQuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0OnQuZG9jLnNjcm9sbExlZnQsc2Nyb2xsVG9wOnQuZG9jLnNjcm9sbFRvcH0pLGk9dC5kaXNwbGF5LnNjcm9sbGVyO24uc2Nyb2xsVG9wPU1hdGgubWF4KDAsTWF0aC5taW4oaS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQsbi5zY3JvbGxUb3ArcikpLG4uc2Nyb2xsTGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aCxuLnNjcm9sbExlZnQrZSkpfWZ1bmN0aW9uIGhyKHQsZSxyLG4pe3ZhciBpPXQuZG9jO2lmKG51bGw9PXImJihyPSJhZGQiKSwic21hcnQiPT1yKWlmKHQuZG9jLm1vZGUuaW5kZW50KXZhciBvPXoodCxlKTtlbHNlIHI9InByZXYiO3ZhciBsLHM9dC5vcHRpb25zLnRhYlNpemUsYT1nbihpLGUpLHU9Wm4oYS50ZXh0LG51bGwscyksYz1hLnRleHQubWF0Y2goL15ccyovKVswXTtpZigic21hcnQiPT1yJiYobD10LmRvYy5tb2RlLmluZGVudChvLGEudGV4dC5zbGljZShjLmxlbmd0aCksYS50ZXh0KSxsPT1Bbykpe2lmKCFuKXJldHVybjtyPSJwcmV2In0icHJldiI9PXI/bD1lPmkuZmlyc3Q/Wm4oZ24oaSxlLTEpLnRleHQsbnVsbCxzKTowOiJhZGQiPT1yP2w9dSt0Lm9wdGlvbnMuaW5kZW50VW5pdDoic3VidHJhY3QiPT1yP2w9dS10Lm9wdGlvbnMuaW5kZW50VW5pdDoibnVtYmVyIj09dHlwZW9mIHImJihsPXUrciksbD1NYXRoLm1heCgwLGwpO3ZhciBmPSIiLGg9MDtpZih0Lm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpZm9yKHZhciBkPU1hdGguZmxvb3IobC9zKTtkOy0tZCloKz1zLGYrPSIJIjtsPmgmJihmKz1xbihsLWgpKSxmIT1jP19lKHQuZG9jLGYsWWUoZSwwKSxZZShlLGMubGVuZ3RoKSwiK2lucHV0Iik6aS5zZWwuaGVhZC5saW5lPT1lJiZpLnNlbC5oZWFkLmNoPGMubGVuZ3RoJiZucihpLFllKGUsYy5sZW5ndGgpLFllKGUsYy5sZW5ndGgpLDEpLGEuc3RhdGVBZnRlcj1udWxsfWZ1bmN0aW9uIGRyKHQsZSxyKXt2YXIgbj1lLGk9ZSxvPXQuZG9jO3JldHVybiJudW1iZXIiPT10eXBlb2YgZT9pPWduKG8scWUobyxlKSk6bj1ibihlKSxudWxsPT1uP251bGw6cihpLG4pPyh1ZSh0LG4sbisxKSxpKTpudWxsfWZ1bmN0aW9uIHByKHQsZSxyLG4saSl7ZnVuY3Rpb24gbygpe3ZhciBlPXMrcjtyZXR1cm4gZTx0LmZpcnN0fHxlPj10LmZpcnN0K3Quc2l6ZT9mPSExOihzPWUsYz1nbih0LGUpKX1mdW5jdGlvbiBsKHQpe3ZhciBlPShpP1NpOk1pKShjLGEsciwhMCk7aWYobnVsbD09ZSl7aWYodHx8IW8oKSlyZXR1cm4gZj0hMTthPWk/KDA+cj9iaTp5aSkoYyk6MD5yP2MudGV4dC5sZW5ndGg6MH1lbHNlIGE9ZTtyZXR1cm4hMH12YXIgcz1lLmxpbmUsYT1lLmNoLHU9cixjPWduKHQscyksZj0hMDtpZigiY2hhciI9PW4pbCgpO2Vsc2UgaWYoImNvbHVtbiI9PW4pbCghMCk7ZWxzZSBpZigid29yZCI9PW58fCJncm91cCI9PW4pZm9yKHZhciBoPW51bGwsZD0iZ3JvdXAiPT1uLHA9ITA7ISgwPnIpfHxsKCFwKTtwPSExKXt2YXIgZz1jLnRleHQuY2hhckF0KGEpfHwiXG4iLG09b2koZyk/InciOmQ/L1xzLy50ZXN0KGcpP251bGw6InAiOm51bGw7aWYoaCYmaCE9bSl7MD5yJiYocj0xLGwoKSk7YnJlYWt9aWYobSYmKGg9bSkscj4wJiYhbCghcCkpYnJlYWt9dmFyIHY9b3IodCxZZShzLGEpLHUsITApO3JldHVybiBmfHwodi5oaXRTaWRlPSEwKSx2fWZ1bmN0aW9uIGdyKHQsZSxyLG4pe3ZhciBpLG89dC5kb2MsbD1lLmxlZnQ7aWYoInBhZ2UiPT1uKXt2YXIgcz1NYXRoLm1pbih0LmRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsd2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTtpPWUudG9wK3IqKHMtKDA+cj8xLjU6LjUpKnJlKHQuZGlzcGxheSkpfWVsc2UibGluZSI9PW4mJihpPXI+MD9lLmJvdHRvbSszOmUudG9wLTMpO2Zvcig7Oyl7dmFyIGE9dGUodCxsLGkpO2lmKCFhLm91dHNpZGUpYnJlYWs7aWYoMD5yPzA+PWk6aT49by5oZWlnaHQpe2EuaGl0U2lkZT0hMDticmVha31pKz01KnJ9cmV0dXJuIGF9ZnVuY3Rpb24gbXIodCxlKXt2YXIgcj1lLmNoLG49ZS5jaDtpZih0KXsoZS54UmVsPDB8fG49PXQubGVuZ3RoKSYmcj8tLXI6KytuO2Zvcih2YXIgaT10LmNoYXJBdChyKSxvPW9pKGkpP29pOi9ccy8udGVzdChpKT9mdW5jdGlvbih0KXtyZXR1cm4vXHMvLnRlc3QodCl9OmZ1bmN0aW9uKHQpe3JldHVybiEvXHMvLnRlc3QodCkmJiFvaSh0KX07cj4wJiZvKHQuY2hhckF0KHItMSkpOyktLXI7Zm9yKDtuPHQubGVuZ3RoJiZvKHQuY2hhckF0KG4pKTspKytufXJldHVybntmcm9tOlllKGUubGluZSxyKSx0bzpZZShlLmxpbmUsbil9fWZ1bmN0aW9uIHZyKHQsZSl7ZXIodC5kb2MsWWUoZSwwKSxRZSh0LmRvYyxZZShlKzEsMCkpKX1mdW5jdGlvbiB5cihlLHIsbixpKXt0LmRlZmF1bHRzW2VdPXIsbiYmKHNvW2VdPWk/ZnVuY3Rpb24odCxlLHIpe3IhPXVvJiZuKHQsZSxyKX06bil9ZnVuY3Rpb24gYnIodCxlKXtpZihlPT09ITApcmV0dXJuIGU7aWYodC5jb3B5U3RhdGUpcmV0dXJuIHQuY29weVN0YXRlKGUpO3ZhciByPXt9O2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dO2kgaW5zdGFuY2VvZiBBcnJheSYmKGk9aS5jb25jYXQoW10pKSxyW25dPWl9cmV0dXJuIHJ9ZnVuY3Rpb24geHIodCxlLHIpe3JldHVybiB0LnN0YXJ0U3RhdGU/dC5zdGFydFN0YXRlKGUscik6ITB9ZnVuY3Rpb24gQ3IodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3ZvW3RdOnR9ZnVuY3Rpb24gd3IodCxlLHIpe2Z1bmN0aW9uIG4oZSl7ZT1DcihlKTt2YXIgaT1lW3RdO2lmKGk9PT0hMSlyZXR1cm4ic3RvcCI7aWYobnVsbCE9aSYmcihpKSlyZXR1cm4hMDtpZihlLm5vZmFsbHRocm91Z2gpcmV0dXJuInN0b3AiO3ZhciBvPWUuZmFsbHRocm91Z2g7aWYobnVsbD09bylyZXR1cm4hMTtpZigiW29iamVjdCBBcnJheV0iIT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpcmV0dXJuIG4obyk7Zm9yKHZhciBsPTAscz1vLmxlbmd0aDtzPmw7KytsKXt2YXIgYT1uKG9bbF0pO2lmKGEpcmV0dXJuIGF9cmV0dXJuITF9Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBvPW4oZVtpXSk7aWYobylyZXR1cm4ic3RvcCIhPW99fWZ1bmN0aW9uIExyKHQpe3ZhciBlPVBvW3Qua2V5Q29kZV07cmV0dXJuIkN0cmwiPT1lfHwiQWx0Ij09ZXx8IlNoaWZ0Ij09ZXx8Ik1vZCI9PWV9ZnVuY3Rpb24ga3IodCxlKXtpZih6aSYmMzQ9PXQua2V5Q29kZSYmdFsiY2hhciJdKXJldHVybiExO3ZhciByPVBvW3Qua2V5Q29kZV07cmV0dXJuIG51bGw9PXJ8fHQuYWx0R3JhcGhLZXk/ITE6KHQuYWx0S2V5JiYocj0iQWx0LSIrciksKCRpP3QubWV0YUtleTp0LmN0cmxLZXkpJiYocj0iQ3RybC0iK3IpLCgkaT90LmN0cmxLZXk6dC5tZXRhS2V5KSYmKHI9IkNtZC0iK3IpLCFlJiZ0LnNoaWZ0S2V5JiYocj0iU2hpZnQtIityKSxyKX1mdW5jdGlvbiBTcih0LGUpe3RoaXMucG9zPXRoaXMuc3RhcnQ9MCx0aGlzLnN0cmluZz10LHRoaXMudGFiU2l6ZT1lfHw4LHRoaXMubGFzdENvbHVtblBvcz10aGlzLmxhc3RDb2x1bW5WYWx1ZT0wfWZ1bmN0aW9uIE1yKHQsZSl7dGhpcy5saW5lcz1bXSx0aGlzLnR5cGU9ZSx0aGlzLmRvYz10fWZ1bmN0aW9uIFRyKHQsZSxyLG4saSl7aWYobiYmbi5zaGFyZWQpcmV0dXJuIEhyKHQsZSxyLG4saSk7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVHIpKHQsZSxyLG4saSk7dmFyIG89bmV3IE1yKHQsaSk7aWYoJGUocixlKXx8amUoZSxyKSYmInJhbmdlIj09aSYmKCFuLmluY2x1c2l2ZUxlZnR8fCFuLmluY2x1c2l2ZVJpZ2h0KSlyZXR1cm4gbztuJiZyaShuLG8pLG8ucmVwbGFjZWRXaXRoJiYoby5jb2xsYXBzZWQ9ITAsby5yZXBsYWNlZFdpdGg9c2koInNwYW4iLFtvLnJlcGxhY2VkV2l0aF0sIkNvZGVNaXJyb3Itd2lkZ2V0Iiksbi5oYW5kbGVNb3VzZUV2ZW50c3x8KG8ucmVwbGFjZWRXaXRoLmlnbm9yZUV2ZW50cz0hMCkpLG8uY29sbGFwc2VkJiYoUWk9ITApLG8uYWRkVG9IaXN0b3J5JiZNbih0LHtmcm9tOmUsdG86cixvcmlnaW46Im1hcmtUZXh0In0se2hlYWQ6dC5zZWwuaGVhZCxhbmNob3I6dC5zZWwuYW5jaG9yfSwwLzApO3ZhciBsLHMsYSx1PWUubGluZSxjPTAsZj10LmNtO2lmKHQuaXRlcih1LHIubGluZSsxLGZ1bmN0aW9uKG4pe2YmJm8uY29sbGFwc2VkJiYhZi5vcHRpb25zLmxpbmVXcmFwcGluZyYmR3IodCxuKT09Zi5kaXNwbGF5Lm1heExpbmUmJihhPSEwKTt2YXIgaT17ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOm99O2MrPW4udGV4dC5sZW5ndGgsdT09ZS5saW5lJiYoaS5mcm9tPWUuY2gsYy09ZS5jaCksdT09ci5saW5lJiYoaS50bz1yLmNoLGMtPW4udGV4dC5sZW5ndGgtci5jaCksby5jb2xsYXBzZWQmJih1PT1yLmxpbmUmJihzPVByKG4sci5jaCkpLHU9PWUubGluZT9sPVByKG4sZS5jaCk6eW4obiwwKSksV3IobixpKSwrK3V9KSxvLmNvbGxhcHNlZCYmdC5pdGVyKGUubGluZSxyLmxpbmUrMSxmdW5jdGlvbihlKXtWcih0LGUpJiZ5bihlLDApfSksby5jbGVhck9uRW50ZXImJkduKG8sImJlZm9yZUN1cnNvckVudGVyIixmdW5jdGlvbigpe28uY2xlYXIoKX0pLG8ucmVhZE9ubHkmJihxaT0hMCwodC5oaXN0b3J5LmRvbmUubGVuZ3RofHx0Lmhpc3RvcnkudW5kb25lLmxlbmd0aCkmJnQuY2xlYXJIaXN0b3J5KCkpLG8uY29sbGFwc2VkKXtpZihsIT1zKXRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7by5zaXplPWMsby5hdG9taWM9ITB9cmV0dXJuIGYmJihhJiYoZi5jdXJPcC51cGRhdGVNYXhMaW5lPSEwKSwoby5jbGFzc05hbWV8fG8udGl0bGV8fG8uc3RhcnRTdHlsZXx8by5lbmRTdHlsZXx8by5jb2xsYXBzZWQpJiZ1ZShmLGUubGluZSxyLmxpbmUrMSksby5hdG9taWMmJmlyKGYpKSxvfWZ1bmN0aW9uIEFyKHQsZSl7dGhpcy5tYXJrZXJzPXQsdGhpcy5wcmltYXJ5PWU7Zm9yKHZhciByPTAsbj10aGlzO3I8dC5sZW5ndGg7KytyKXRbcl0ucGFyZW50PXRoaXMsR24odFtyXSwiY2xlYXIiLGZ1bmN0aW9uKCl7bi5jbGVhcigpfSl9ZnVuY3Rpb24gSHIodCxlLHIsbixpKXtuPXJpKG4pLG4uc2hhcmVkPSExO3ZhciBvPVtUcih0LGUscixuLGkpXSxsPW9bMF0scz1uLnJlcGxhY2VkV2l0aDtyZXR1cm4gZG4odCxmdW5jdGlvbih0KXtzJiYobi5yZXBsYWNlZFdpdGg9cy5jbG9uZU5vZGUoITApKSxvLnB1c2goVHIodCxRZSh0LGUpLFFlKHQsciksbixpKSk7Zm9yKHZhciBhPTA7YTx0LmxpbmtlZC5sZW5ndGg7KythKWlmKHQubGlua2VkW2FdLmlzUGFyZW50KXJldHVybjtsPVFuKG8pfSksbmV3IEFyKG8sbCl9ZnVuY3Rpb24gTnIodCxlKXtpZih0KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2lmKG4ubWFya2VyPT1lKXJldHVybiBufX1mdW5jdGlvbiBEcih0LGUpe2Zvcih2YXIgcixuPTA7bjx0Lmxlbmd0aDsrK24pdFtuXSE9ZSYmKHJ8fChyPVtdKSkucHVzaCh0W25dKTtyZXR1cm4gcn1mdW5jdGlvbiBXcih0LGUpe3QubWFya2VkU3BhbnM9dC5tYXJrZWRTcGFucz90Lm1hcmtlZFNwYW5zLmNvbmNhdChbZV0pOltlXSxlLm1hcmtlci5hdHRhY2hMaW5lKHQpfWZ1bmN0aW9uIE9yKHQsZSxyKXtpZih0KWZvcih2YXIgbixpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBvPXRbaV0sbD1vLm1hcmtlcixzPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpO2lmKHN8fChsLmluY2x1c2l2ZUxlZnQmJmwuaW5jbHVzaXZlUmlnaHR8fCJib29rbWFyayI9PWwudHlwZSkmJm8uZnJvbT09ZSYmKCFyfHwhby5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8udG98fChsLmluY2x1c2l2ZVJpZ2h0P28udG8+PWU6by50bz5lKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOm8uZnJvbSx0bzphP251bGw6by50byxtYXJrZXI6bH0pfX1yZXR1cm4gbn1mdW5jdGlvbiBFcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7aWYoc3x8ImJvb2ttYXJrIj09bC50eXBlJiZvLmZyb209PWUmJighcnx8by5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpOyhufHwobj1bXSkpLnB1c2goe2Zyb206YT9udWxsOm8uZnJvbS1lLHRvOm51bGw9PW8udG8/bnVsbDpvLnRvLWUsbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24genIodCxlKXt2YXIgcj10cih0LGUuZnJvbS5saW5lKSYmZ24odCxlLmZyb20ubGluZSkubWFya2VkU3BhbnMsbj10cih0LGUudG8ubGluZSkmJmduKHQsZS50by5saW5lKS5tYXJrZWRTcGFucztpZighciYmIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5mcm9tLmNoLG89ZS50by5jaCxsPWplKGUuZnJvbSxlLnRvKSxzPU9yKHIsaSxsKSxhPUVyKG4sbyxsKSx1PTE9PWUudGV4dC5sZW5ndGgsYz1RbihlLnRleHQpLmxlbmd0aCsodT9pOjApO2lmKHMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2Ype3ZhciBoPXNbZl07aWYobnVsbD09aC50byl7dmFyIGQ9TnIoYSxoLm1hcmtlcik7ZD91JiYoaC50bz1udWxsPT1kLnRvP251bGw6ZC50bytjKTpoLnRvPWl9fWlmKGEpZm9yKHZhciBmPTA7ZjxhLmxlbmd0aDsrK2Ype3ZhciBoPWFbZl07aWYobnVsbCE9aC50byYmKGgudG8rPWMpLG51bGw9PWguZnJvbSl7dmFyIGQ9TnIocyxoLm1hcmtlcik7ZHx8KGguZnJvbT1jLHUmJihzfHwocz1bXSkpLnB1c2goaCkpfWVsc2UgaC5mcm9tKz1jLHUmJihzfHwocz1bXSkpLnB1c2goaCl9aWYodSYmcyl7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbCE9c1tmXS5mcm9tJiZzW2ZdLmZyb209PXNbZl0udG8mJiJib29rbWFyayIhPXNbZl0ubWFya2VyLnR5cGUmJnMuc3BsaWNlKGYtLSwxKTtzLmxlbmd0aHx8KHM9bnVsbCl9dmFyIHA9W3NdO2lmKCF1KXt2YXIgZyxtPWUudGV4dC5sZW5ndGgtMjtpZihtPjAmJnMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbD09c1tmXS50byYmKGd8fChnPVtdKSkucHVzaCh7ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOnNbZl0ubWFya2VyfSk7Zm9yKHZhciBmPTA7bT5mOysrZilwLnB1c2goZyk7cC5wdXNoKGEpfXJldHVybiBwfWZ1bmN0aW9uIElyKHQsZSl7dmFyIHI9QW4odCxlKSxuPXpyKHQsZSk7aWYoIXIpcmV0dXJuIG47aWYoIW4pcmV0dXJuIHI7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBvPXJbaV0sbD1uW2ldO2lmKG8mJmwpdDpmb3IodmFyIHM9MDtzPGwubGVuZ3RoOysrcyl7Zm9yKHZhciBhPWxbc10sdT0wO3U8by5sZW5ndGg7Kyt1KWlmKG9bdV0ubWFya2VyPT1hLm1hcmtlciljb250aW51ZSB0O28ucHVzaChhKX1lbHNlIGwmJihyW2ldPWwpfXJldHVybiByfWZ1bmN0aW9uIEZyKHQsZSxyKXt2YXIgbj1udWxsO2lmKHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7aWYodC5tYXJrZWRTcGFucylmb3IodmFyIGU9MDtlPHQubWFya2VkU3BhbnMubGVuZ3RoOysrZSl7dmFyIHI9dC5tYXJrZWRTcGFuc1tlXS5tYXJrZXI7IXIucmVhZE9ubHl8fG4mJi0xIT10aShuLHIpfHwobnx8KG49W10pKS5wdXNoKHIpfX0pLCFuKXJldHVybiBudWxsO2Zvcih2YXIgaT1be2Zyb206ZSx0bzpyfV0sbz0wO288bi5sZW5ndGg7KytvKWZvcih2YXIgbD1uW29dLHM9bC5maW5kKCksYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgdT1pW2FdO2lmKCEkZSh1LnRvLHMuZnJvbSkmJiEkZShzLnRvLHUuZnJvbSkpe3ZhciBjPVthLDFdOygkZSh1LmZyb20scy5mcm9tKXx8IWwuaW5jbHVzaXZlTGVmdCYmamUodS5mcm9tLHMuZnJvbSkpJiZjLnB1c2goe2Zyb206dS5mcm9tLHRvOnMuZnJvbX0pLCgkZShzLnRvLHUudG8pfHwhbC5pbmNsdXNpdmVSaWdodCYmamUodS50byxzLnRvKSkmJmMucHVzaCh7ZnJvbTpzLnRvLHRvOnUudG99KSxpLnNwbGljZS5hcHBseShpLGMpLGErPWMubGVuZ3RoLTF9fXJldHVybiBpfWZ1bmN0aW9uIFByKHQsZSl7dmFyIHIsbj1RaSYmdC5tYXJrZWRTcGFucztpZihuKWZvcih2YXIgaSxvPTA7bzxuLmxlbmd0aDsrK28paT1uW29dLGkubWFya2VyLmNvbGxhcHNlZCYmKG51bGw9PWkuZnJvbXx8aS5mcm9tPGUpJiYobnVsbD09aS50b3x8aS50bz5lKSYmKCFyfHxyLndpZHRoPGkubWFya2VyLndpZHRoKSYmKHI9aS5tYXJrZXIpO3JldHVybiByfWZ1bmN0aW9uIFJyKHQpe3JldHVybiBQcih0LC0xKX1mdW5jdGlvbiBCcih0KXtyZXR1cm4gUHIodCx0LnRleHQubGVuZ3RoKzEpfWZ1bmN0aW9uIEdyKHQsZSl7Zm9yKHZhciByO3I9UnIoZSk7KWU9Z24odCxyLmZpbmQoKS5mcm9tLmxpbmUpO3JldHVybiBlfWZ1bmN0aW9uIFZyKHQsZSl7dmFyIHI9UWkmJmUubWFya2VkU3BhbnM7aWYocilmb3IodmFyIG4saT0wO2k8ci5sZW5ndGg7KytpKWlmKG49cltpXSxuLm1hcmtlci5jb2xsYXBzZWQpe2lmKG51bGw9PW4uZnJvbSlyZXR1cm4hMDtpZighbi5tYXJrZXIucmVwbGFjZWRXaXRoJiYwPT1uLmZyb20mJm4ubWFya2VyLmluY2x1c2l2ZUxlZnQmJktyKHQsZSxuKSlyZXR1cm4hMH19ZnVuY3Rpb24gS3IodCxlLHIpe2lmKG51bGw9PXIudG8pe3ZhciBuPXIubWFya2VyLmZpbmQoKS50byxpPWduKHQsbi5saW5lKTtyZXR1cm4gS3IodCxpLE5yKGkubWFya2VkU3BhbnMsci5tYXJrZXIpKX1pZihyLm1hcmtlci5pbmNsdXNpdmVSaWdodCYmci50bz09ZS50ZXh0Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG8sbD0wO2w8ZS5tYXJrZWRTcGFucy5sZW5ndGg7KytsKWlmKG89ZS5tYXJrZWRTcGFuc1tsXSxvLm1hcmtlci5jb2xsYXBzZWQmJiFvLm1hcmtlci5yZXBsYWNlZFdpdGgmJm8uZnJvbT09ci50byYmKG8ubWFya2VyLmluY2x1c2l2ZUxlZnR8fHIubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSYmS3IodCxlLG8pKXJldHVybiEwfWZ1bmN0aW9uIFVyKHQpe3ZhciBlPXQubWFya2VkU3BhbnM7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuZGV0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPW51bGx9fWZ1bmN0aW9uIFhyKHQsZSl7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuYXR0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPWV9fWZ1bmN0aW9uIF9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPSF0aGlzLmNtLmN1ck9wO2UmJmllKHRoaXMuY20pO3RyeXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2UmJm9lKHRoaXMuY20pfXJldHVybiByfX1mdW5jdGlvbiBZcih0KXtyZXR1cm4gbnVsbCE9dC5oZWlnaHQ/dC5oZWlnaHQ6KHQubm9kZS5wYXJlbnROb2RlJiYxPT10Lm5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZXx8dWkodC5jbS5kaXNwbGF5Lm1lYXN1cmUsc2koImRpdiIsW3Qubm9kZV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIikpLHQuaGVpZ2h0PXQubm9kZS5vZmZzZXRIZWlnaHQpfWZ1bmN0aW9uIGpyKHQsZSxyLG4pe3ZhciBpPW5ldyB5byh0LHIsbik7cmV0dXJuIGkubm9IU2Nyb2xsJiYodC5kaXNwbGF5LmFsaWduV2lkZ2V0cz0hMCksZHIodCxlLGZ1bmN0aW9uKGUpe3ZhciByPWUud2lkZ2V0c3x8KGUud2lkZ2V0cz1bXSk7aWYobnVsbD09aS5pbnNlcnRBdD9yLnB1c2goaSk6ci5zcGxpY2UoTWF0aC5taW4oci5sZW5ndGgtMSxNYXRoLm1heCgwLGkuaW5zZXJ0QXQpKSwwLGkpLGkubGluZT1lLCFWcih0LmRvYyxlKXx8aS5zaG93SWZIaWRkZW4pe3ZhciBuPUNuKHQsZSk8dC5kb2Muc2Nyb2xsVG9wO3luKGUsZS5oZWlnaHQrWXIoaSkpLG4mJmZyKHQsMCxpLmhlaWdodCl9cmV0dXJuITB9KSxpfWZ1bmN0aW9uICRyKHQsZSxyLG4pe3QudGV4dD1lLHQuc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpLG51bGwhPXQub3JkZXImJih0Lm9yZGVyPW51bGwpLFVyKHQpLFhyKHQscik7dmFyIGk9bj9uKHQpOjE7aSE9dC5oZWlnaHQmJnluKHQsaSl9ZnVuY3Rpb24gWnIodCl7dC5wYXJlbnQ9bnVsbCxVcih0KX1mdW5jdGlvbiBxcih0LGUscixuLGksbyl7dmFyIGw9ci5mbGF0dGVuU3BhbnM7bnVsbD09bCYmKGw9dC5vcHRpb25zLmZsYXR0ZW5TcGFucyk7dmFyIHMsYT0wLHU9bnVsbCxjPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3IoIiI9PWUmJnIuYmxhbmtMaW5lJiZyLmJsYW5rTGluZShuKTshYy5lb2woKTspYy5wb3M+dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aD8obD0hMSxvJiZ0bih0LGUsbixjLnBvcyksYy5wb3M9ZS5sZW5ndGgscz1udWxsKTpzPXIudG9rZW4oYyxuKSxsJiZ1PT1zfHwoYTxjLnN0YXJ0JiZpKGMuc3RhcnQsdSksYT1jLnN0YXJ0LHU9cyksYy5zdGFydD1jLnBvcztmb3IoO2E8Yy5wb3M7KXt2YXIgZj1NYXRoLm1pbihjLnBvcyxhKzVlNCk7aShmLHUpLGE9Zn19ZnVuY3Rpb24gUXIodCxlLHIsbil7dmFyIGk9W3Quc3RhdGUubW9kZUdlbl07cXIodCxlLnRleHQsdC5kb2MubW9kZSxyLGZ1bmN0aW9uKHQsZSl7aS5wdXNoKHQsZSl9LG4pO2Zvcih2YXIgbz0wO288dC5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7KytvKXt2YXIgbD10LnN0YXRlLm92ZXJsYXlzW29dLHM9MSxhPTA7cXIodCxlLnRleHQsbC5tb2RlLCEwLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXM7dD5hOyl7dmFyIG49aVtzXTtuPnQmJmkuc3BsaWNlKHMsMSx0LGlbcysxXSxuKSxzKz0yLGE9TWF0aC5taW4odCxuKX1pZihlKWlmKGwub3BhcXVlKWkuc3BsaWNlKHIscy1yLHQsZSkscz1yKzI7ZWxzZSBmb3IoO3M+cjtyKz0yKXt2YXIgbz1pW3IrMV07aVtyKzFdPW8/bysiICIrZTplfX0pfXJldHVybiBpfWZ1bmN0aW9uIEpyKHQsZSl7cmV0dXJuIGUuc3R5bGVzJiZlLnN0eWxlc1swXT09dC5zdGF0ZS5tb2RlR2VufHwoZS5zdHlsZXM9UXIodCxlLGUuc3RhdGVBZnRlcj16KHQsYm4oZSkpKSksZS5zdHlsZXN9ZnVuY3Rpb24gdG4odCxlLHIsbil7dmFyIGk9dC5kb2MubW9kZSxvPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3Ioby5zdGFydD1vLnBvcz1ufHwwLCIiPT1lJiZpLmJsYW5rTGluZSYmaS5ibGFua0xpbmUocik7IW8uZW9sKCkmJm8ucG9zPD10Lm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoOylpLnRva2VuKG8sciksby5zdGFydD1vLnBvc31mdW5jdGlvbiBlbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2Zvcig7Oyl7dmFyIHI9dC5tYXRjaCgvKD86XnxccylsaW5lLShiYWNrZ3JvdW5kLSk/KFxTKykvKTtpZighcilicmVhazt0PXQuc2xpY2UoMCxyLmluZGV4KSt0LnNsaWNlKHIuaW5kZXgrclswXS5sZW5ndGgpO3ZhciBuPXJbMV0/ImJnQ2xhc3MiOiJ0ZXh0Q2xhc3MiO251bGw9PWVbbl0/ZVtuXT1yWzJdOm5ldyBSZWdFeHAoIig/Ol58cykiK3JbMl0rIig/OiR8cykiKS50ZXN0KGVbbl0pfHwoZVtuXSs9IiAiK3JbMl0pfXJldHVybiB4b1t0XXx8KHhvW3RdPSJjbS0iK3QucmVwbGFjZSgvICsvZywiIGNtLSIpKX1mdW5jdGlvbiBybih0LGUscixuKXtmb3IodmFyIGksbz1lLGw9ITA7aT1ScihvKTspbz1nbih0LmRvYyxpLmZpbmQoKS5mcm9tLmxpbmUpO3ZhciBzPXtwcmU6c2koInByZSIpLGNvbDowLHBvczowLG1lYXN1cmU6bnVsbCxtZWFzdXJlZFNvbWV0aGluZzohMSxjbTp0LGNvcHlXaWRnZXRzOm59O2Rve28udGV4dCYmKGw9ITEpLHMubWVhc3VyZT1vPT1lJiZyLHMucG9zPTAscy5hZGRUb2tlbj1zLm1lYXN1cmU/bG46b24sKEFpfHxXaSkmJnQuZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSYmKHMuYWRkVG9rZW49c24ocy5hZGRUb2tlbikpO3ZhciBhPXVuKG8scyxKcih0LG8pKTtyJiZvPT1lJiYhcy5tZWFzdXJlZFNvbWV0aGluZyYmKHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKSxzLm1lYXN1cmVkU29tZXRoaW5nPSEwKSxhJiYobz1nbih0LmRvYyxhLnRvLmxpbmUpKX13aGlsZShhKTshcnx8cy5tZWFzdXJlZFNvbWV0aGluZ3x8clswXXx8KHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQobD9zaSgic3BhbiIsIsKgIik6cGkodC5kaXNwbGF5Lm1lYXN1cmUpKSkscy5wcmUuZmlyc3RDaGlsZHx8VnIodC5kb2MsZSl8fHMucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCLCoCIpKTt2YXIgdTtpZihyJiYoQWl8fERpKSYmKHU9d24obykpKXt2YXIgYz11Lmxlbmd0aC0xO3VbY10uZnJvbT09dVtjXS50byYmLS1jO3ZhciBmPXVbY10saD11W2MtMV07aWYoZi5mcm9tKzE9PWYudG8mJmgmJmYubGV2ZWw8aC5sZXZlbCl7dmFyIGQ9cltzLnBvcy0xXTtkJiZkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGQubWVhc3VyZVJpZ2h0PXBpKHQuZGlzcGxheS5tZWFzdXJlKSxkLm5leHRTaWJsaW5nKX19dmFyIHA9cy50ZXh0Q2xhc3M/cy50ZXh0Q2xhc3MrIiAiKyhlLnRleHRDbGFzc3x8IiIpOmUudGV4dENsYXNzO3JldHVybiBwJiYocy5wcmUuY2xhc3NOYW1lPXApLEtuKHQsInJlbmRlckxpbmUiLHQsZSxzLnByZSksc31mdW5jdGlvbiBubih0KXt2YXIgZT1zaSgic3BhbiIsIuKAoiIsImNtLWludmFsaWRjaGFyIik7cmV0dXJuIGUudGl0bGU9IlxcdSIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSxlfWZ1bmN0aW9uIG9uKHQsZSxyLG4saSxvKXtpZihlKXt2YXIgbD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJzO2lmKGwudGVzdChlKSlmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MDs7KXtsLmxhc3RJbmRleD1hO3ZhciB1PWwuZXhlYyhlKSxjPXU/dS5pbmRleC1hOmUubGVuZ3RoLWE7aWYoYyYmKHMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZS5zbGljZShhLGErYykpKSx0LmNvbCs9YyksIXUpYnJlYWs7aWYoYSs9YysxLCIJIj09dVswXSl7dmFyIGY9dC5jbS5vcHRpb25zLnRhYlNpemUsaD1mLXQuY29sJWY7cy5hcHBlbmRDaGlsZChzaSgic3BhbiIscW4oaCksImNtLXRhYiIpKSx0LmNvbCs9aH1lbHNle3ZhciBkPXQuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKHVbMF0pO3MuYXBwZW5kQ2hpbGQoZCksdC5jb2wrPTF9fWVsc2V7dC5jb2wrPWUubGVuZ3RoO3ZhciBzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpfWlmKHJ8fG58fGl8fHQubWVhc3VyZSl7dmFyIHA9cnx8IiI7biYmKHArPW4pLGkmJihwKz1pKTt2YXIgZD1zaSgic3BhbiIsW3NdLHApO3JldHVybiBvJiYoZC50aXRsZT1vKSx0LnByZS5hcHBlbmRDaGlsZChkKX10LnByZS5hcHBlbmRDaGlsZChzKX19ZnVuY3Rpb24gbG4odCxlLHIsbixpKXtmb3IodmFyIG89dC5jbS5vcHRpb25zLmxpbmVXcmFwcGluZyxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBzPWUuY2hhckF0KGwpLGE9MD09bDtzPj0i7aCAIiYmIu2vvyI+cyYmbDxlLmxlbmd0aC0xPyhzPWUuc2xpY2UobCxsKzIpLCsrbCk6bCYmbyYmaGkoZSxsKSYmdC5wcmUuYXBwZW5kQ2hpbGQoc2koIndiciIpKTt2YXIgdT10Lm1lYXN1cmVbdC5wb3NdLGM9dC5tZWFzdXJlW3QucG9zXT1vbih0LHMscixhJiZuLGw9PWUubGVuZ3RoLTEmJmkpO3UmJihjLmxlZnRTaWRlPXUubGVmdFNpZGV8fHUpLEFpJiZvJiYiICI9PXMmJmwmJiEvXHMvLnRlc3QoZS5jaGFyQXQobC0xKSkmJmw8ZS5sZW5ndGgtMSYmIS9ccy8udGVzdChlLmNoYXJBdChsKzEpKSYmKGMuc3R5bGUud2hpdGVTcGFjZT0ibm9ybWFsIiksdC5wb3MrPXMubGVuZ3RofWUubGVuZ3RoJiYodC5tZWFzdXJlZFNvbWV0aGluZz0hMCl9ZnVuY3Rpb24gc24odCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9IiAiLHI9MDtyPHQubGVuZ3RoLTI7KytyKWUrPXIlMj8iICI6IsKgIjtyZXR1cm4gZSs9IiAifXJldHVybiBmdW5jdGlvbihyLG4saSxvLGwscyl7cmV0dXJuIHQocixuLnJlcGxhY2UoLyB7Myx9L2csZSksaSxvLGwscyl9fWZ1bmN0aW9uIGFuKHQsZSxyLG4pe3ZhciBpPSFuJiZyLnJlcGxhY2VkV2l0aDtpZihpJiYodC5jb3B5V2lkZ2V0cyYmKGk9aS5jbG9uZU5vZGUoITApKSx0LnByZS5hcHBlbmRDaGlsZChpKSx0Lm1lYXN1cmUpKXtpZihlKXQubWVhc3VyZVt0LnBvc109aTtlbHNle3ZhciBvPXBpKHQuY20uZGlzcGxheS5tZWFzdXJlKTtpZigiYm9va21hcmsiIT1yLnR5cGV8fHIuaW5zZXJ0TGVmdCl7aWYodC5tZWFzdXJlW3QucG9zXSlyZXR1cm47dC5tZWFzdXJlW3QucG9zXT10LnByZS5pbnNlcnRCZWZvcmUobyxpKX1lbHNlIHQubWVhc3VyZVt0LnBvc109dC5wcmUuYXBwZW5kQ2hpbGQobyl9dC5tZWFzdXJlZFNvbWV0aGluZz0hMH10LnBvcys9ZX1mdW5jdGlvbiB1bih0LGUscil7dmFyIG49dC5tYXJrZWRTcGFucyxpPXQudGV4dCxvPTA7aWYobilmb3IodmFyIGwscyxhLHUsYyxmLGg9aS5sZW5ndGgsZD0wLHA9MSxnPSIiLG09MDs7KXtpZihtPT1kKXtzPWE9dT1jPSIiLGY9bnVsbCxtPTEvMDtmb3IodmFyIHY9W10seT0wO3k8bi5sZW5ndGg7Kyt5KXt2YXIgYj1uW3ldLHg9Yi5tYXJrZXI7Yi5mcm9tPD1kJiYobnVsbD09Yi50b3x8Yi50bz5kKT8obnVsbCE9Yi50byYmbT5iLnRvJiYobT1iLnRvLGE9IiIpLHguY2xhc3NOYW1lJiYocys9IiAiK3guY2xhc3NOYW1lKSx4LnN0YXJ0U3R5bGUmJmIuZnJvbT09ZCYmKHUrPSIgIit4LnN0YXJ0U3R5bGUpLHguZW5kU3R5bGUmJmIudG89PW0mJihhKz0iICIreC5lbmRTdHlsZSkseC50aXRsZSYmIWMmJihjPXgudGl0bGUpLHguY29sbGFwc2VkJiYoIWZ8fGYubWFya2VyLnNpemU8eC5zaXplKSYmKGY9YikpOmIuZnJvbT5kJiZtPmIuZnJvbSYmKG09Yi5mcm9tKSwiYm9va21hcmsiPT14LnR5cGUmJmIuZnJvbT09ZCYmeC5yZXBsYWNlZFdpdGgmJnYucHVzaCh4KQp9aWYoZiYmKGYuZnJvbXx8MCk9PWQmJihhbihlLChudWxsPT1mLnRvP2g6Zi50byktZCxmLm1hcmtlcixudWxsPT1mLmZyb20pLG51bGw9PWYudG8pKXJldHVybiBmLm1hcmtlci5maW5kKCk7aWYoIWYmJnYubGVuZ3RoKWZvcih2YXIgeT0wO3k8di5sZW5ndGg7Kyt5KWFuKGUsMCx2W3ldKX1pZihkPj1oKWJyZWFrO2Zvcih2YXIgQz1NYXRoLm1pbihoLG0pOzspe2lmKGcpe3ZhciB3PWQrZy5sZW5ndGg7aWYoIWYpe3ZhciBMPXc+Qz9nLnNsaWNlKDAsQy1kKTpnO2UuYWRkVG9rZW4oZSxMLGw/bCtzOnMsdSxkK0wubGVuZ3RoPT1tP2E6IiIsYyl9aWYodz49Qyl7Zz1nLnNsaWNlKEMtZCksZD1DO2JyZWFrfWQ9dyx1PSIifWc9aS5zbGljZShvLG89cltwKytdKSxsPWVuKHJbcCsrXSxlKX19ZWxzZSBmb3IodmFyIHA9MTtwPHIubGVuZ3RoO3ArPTIpZS5hZGRUb2tlbihlLGkuc2xpY2UobyxvPXJbcF0pLGVuKHJbcCsxXSxlKSl9ZnVuY3Rpb24gY24odCxlLHIsbixpKXtmdW5jdGlvbiBvKHQpe3JldHVybiByP3JbdF06bnVsbH1mdW5jdGlvbiBsKHQscixuKXskcih0LHIsbixpKSxVbih0LCJjaGFuZ2UiLHQsZSl9dmFyIHM9ZS5mcm9tLGE9ZS50byx1PWUudGV4dCxjPWduKHQscy5saW5lKSxmPWduKHQsYS5saW5lKSxoPVFuKHUpLGQ9byh1Lmxlbmd0aC0xKSxwPWEubGluZS1zLmxpbmU7aWYoMCE9cy5jaHx8MCE9YS5jaHx8IiIhPWh8fHQuY20mJiF0LmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKWlmKGM9PWYpaWYoMT09dS5sZW5ndGgpbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK2grYy50ZXh0LnNsaWNlKGEuY2gpLGQpO2Vsc2V7Zm9yKHZhciBnPVtdLG09MSx2PXUubGVuZ3RoLTE7dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7Zy5wdXNoKG5ldyBibyhoK2MudGV4dC5zbGljZShhLmNoKSxkLGkpKSxsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSx0Lmluc2VydChzLmxpbmUrMSxnKX1lbHNlIGlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdK2YudGV4dC5zbGljZShhLmNoKSxvKDApKSx0LnJlbW92ZShzLmxpbmUrMSxwKTtlbHNle2woYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdLG8oMCkpLGwoZixoK2YudGV4dC5zbGljZShhLmNoKSxkKTtmb3IodmFyIG09MSx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtwPjEmJnQucmVtb3ZlKHMubGluZSsxLHAtMSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZXtmb3IodmFyIG09MCx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtsKGYsZi50ZXh0LGQpLHAmJnQucmVtb3ZlKHMubGluZSxwKSxnLmxlbmd0aCYmdC5pbnNlcnQocy5saW5lLGcpfVVuKHQsImNoYW5nZSIsdCxlKSxucih0LG4uYW5jaG9yLG4uaGVhZCxudWxsLCEwKX1mdW5jdGlvbiBmbih0KXt0aGlzLmxpbmVzPXQsdGhpcy5wYXJlbnQ9bnVsbDtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49MDtyPmU7KytlKXRbZV0ucGFyZW50PXRoaXMsbis9dFtlXS5oZWlnaHQ7dGhpcy5oZWlnaHQ9bn1mdW5jdGlvbiBobih0KXt0aGlzLmNoaWxkcmVuPXQ7Zm9yKHZhciBlPTAscj0wLG49MCxpPXQubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRbbl07ZSs9by5jaHVua1NpemUoKSxyKz1vLmhlaWdodCxvLnBhcmVudD10aGlzfXRoaXMuc2l6ZT1lLHRoaXMuaGVpZ2h0PXIsdGhpcy5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBkbih0LGUscil7ZnVuY3Rpb24gbih0LGksbyl7aWYodC5saW5rZWQpZm9yKHZhciBsPTA7bDx0LmxpbmtlZC5sZW5ndGg7KytsKXt2YXIgcz10LmxpbmtlZFtsXTtpZihzLmRvYyE9aSl7dmFyIGE9byYmcy5zaGFyZWRIaXN0Oyghcnx8YSkmJihlKHMuZG9jLGEpLG4ocy5kb2MsdCxhKSl9fX1uKHQsbnVsbCwhMCl9ZnVuY3Rpb24gcG4odCxlKXtpZihlLmNtKXRocm93IG5ldyBFcnJvcigiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS4iKTt0LmRvYz1lLGUuY209dCxvKHQpLHIodCksdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8Zih0KSx0Lm9wdGlvbnMubW9kZT1lLm1vZGVPcHRpb24sdWUodCl9ZnVuY3Rpb24gZ24odCxlKXtmb3IoZS09dC5maXJzdDshdC5saW5lczspZm9yKHZhciByPTA7Oysrcil7dmFyIG49dC5jaGlsZHJlbltyXSxpPW4uY2h1bmtTaXplKCk7aWYoaT5lKXt0PW47YnJlYWt9ZS09aX1yZXR1cm4gdC5saW5lc1tlXX1mdW5jdGlvbiBtbih0LGUscil7dmFyIG49W10saT1lLmxpbmU7cmV0dXJuIHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7dmFyIG89dC50ZXh0O2k9PXIubGluZSYmKG89by5zbGljZSgwLHIuY2gpKSxpPT1lLmxpbmUmJihvPW8uc2xpY2UoZS5jaCkpLG4ucHVzaChvKSwrK2l9KSxufWZ1bmN0aW9uIHZuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5pdGVyKGUscixmdW5jdGlvbih0KXtuLnB1c2godC50ZXh0KX0pLG59ZnVuY3Rpb24geW4odCxlKXtmb3IodmFyIHI9ZS10LmhlaWdodCxuPXQ7bjtuPW4ucGFyZW50KW4uaGVpZ2h0Kz1yfWZ1bmN0aW9uIGJuKHQpe2lmKG51bGw9PXQucGFyZW50KXJldHVybiBudWxsO2Zvcih2YXIgZT10LnBhcmVudCxyPXRpKGUubGluZXMsdCksbj1lLnBhcmVudDtuO2U9bixuPW4ucGFyZW50KWZvcih2YXIgaT0wO24uY2hpbGRyZW5baV0hPWU7KytpKXIrPW4uY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7cmV0dXJuIHIrZS5maXJzdH1mdW5jdGlvbiB4bih0LGUpe3ZhciByPXQuZmlyc3Q7dDpkb3tmb3IodmFyIG49MCxpPXQuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXQuY2hpbGRyZW5bbl0sbD1vLmhlaWdodDtpZihsPmUpe3Q9bztjb250aW51ZSB0fWUtPWwscis9by5jaHVua1NpemUoKX1yZXR1cm4gcn13aGlsZSghdC5saW5lcyk7Zm9yKHZhciBuPTAsaT10LmxpbmVzLmxlbmd0aDtpPm47KytuKXt2YXIgcz10LmxpbmVzW25dLGE9cy5oZWlnaHQ7aWYoYT5lKWJyZWFrO2UtPWF9cmV0dXJuIHIrbn1mdW5jdGlvbiBDbih0LGUpe2U9R3IodC5kb2MsZSk7Zm9yKHZhciByPTAsbj1lLnBhcmVudCxpPTA7aTxuLmxpbmVzLmxlbmd0aDsrK2kpe3ZhciBvPW4ubGluZXNbaV07aWYobz09ZSlicmVhaztyKz1vLmhlaWdodH1mb3IodmFyIGw9bi5wYXJlbnQ7bDtuPWwsbD1uLnBhcmVudClmb3IodmFyIGk9MDtpPGwuY2hpbGRyZW4ubGVuZ3RoOysraSl7dmFyIHM9bC5jaGlsZHJlbltpXTtpZihzPT1uKWJyZWFrO3IrPXMuaGVpZ2h0fXJldHVybiByfWZ1bmN0aW9uIHduKHQpe3ZhciBlPXQub3JkZXI7cmV0dXJuIG51bGw9PWUmJihlPXQub3JkZXI9Qm8odC50ZXh0KSksZX1mdW5jdGlvbiBMbih0KXtyZXR1cm57ZG9uZTpbXSx1bmRvbmU6W10sdW5kb0RlcHRoOjEvMCxsYXN0VGltZTowLGxhc3RPcDpudWxsLGxhc3RPcmlnaW46bnVsbCxnZW5lcmF0aW9uOnR8fDEsbWF4R2VuZXJhdGlvbjp0fHwxfX1mdW5jdGlvbiBrbih0LGUscixuKXt2YXIgaT1lWyJzcGFuc18iK3QuaWRdLG89MDt0Lml0ZXIoTWF0aC5tYXgodC5maXJzdCxyKSxNYXRoLm1pbih0LmZpcnN0K3Quc2l6ZSxuKSxmdW5jdGlvbihyKXtyLm1hcmtlZFNwYW5zJiYoKGl8fChpPWVbInNwYW5zXyIrdC5pZF09e30pKVtvXT1yLm1hcmtlZFNwYW5zKSwrK299KX1mdW5jdGlvbiBTbih0LGUpe3ZhciByPXtsaW5lOmUuZnJvbS5saW5lLGNoOmUuZnJvbS5jaH0sbj17ZnJvbTpyLHRvOmxvKGUpLHRleHQ6bW4odCxlLmZyb20sZS50byl9O3JldHVybiBrbih0LG4sZS5mcm9tLmxpbmUsZS50by5saW5lKzEpLGRuKHQsZnVuY3Rpb24odCl7a24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKX0sITApLG59ZnVuY3Rpb24gTW4odCxlLHIsbil7dmFyIGk9dC5oaXN0b3J5O2kudW5kb25lLmxlbmd0aD0wO3ZhciBvPStuZXcgRGF0ZSxsPVFuKGkuZG9uZSk7aWYobCYmKGkubGFzdE9wPT1ufHxpLmxhc3RPcmlnaW49PWUub3JpZ2luJiZlLm9yaWdpbiYmKCIrIj09ZS5vcmlnaW4uY2hhckF0KDApJiZ0LmNtJiZpLmxhc3RUaW1lPm8tdC5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5fHwiKiI9PWUub3JpZ2luLmNoYXJBdCgwKSkpKXt2YXIgcz1RbihsLmNoYW5nZXMpO2plKGUuZnJvbSxlLnRvKSYmamUoZS5mcm9tLHMudG8pP3MudG89bG8oZSk6bC5jaGFuZ2VzLnB1c2goU24odCxlKSksbC5hbmNob3JBZnRlcj1yLmFuY2hvcixsLmhlYWRBZnRlcj1yLmhlYWR9ZWxzZSBmb3IobD17Y2hhbmdlczpbU24odCxlKV0sZ2VuZXJhdGlvbjppLmdlbmVyYXRpb24sYW5jaG9yQmVmb3JlOnQuc2VsLmFuY2hvcixoZWFkQmVmb3JlOnQuc2VsLmhlYWQsYW5jaG9yQWZ0ZXI6ci5hbmNob3IsaGVhZEFmdGVyOnIuaGVhZH0saS5kb25lLnB1c2gobCksaS5nZW5lcmF0aW9uPSsraS5tYXhHZW5lcmF0aW9uO2kuZG9uZS5sZW5ndGg+aS51bmRvRGVwdGg7KWkuZG9uZS5zaGlmdCgpO2kubGFzdFRpbWU9byxpLmxhc3RPcD1uLGkubGFzdE9yaWdpbj1lLm9yaWdpbn1mdW5jdGlvbiBUbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGUscj0wO3I8dC5sZW5ndGg7KytyKXRbcl0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkP2V8fChlPXQuc2xpY2UoMCxyKSk6ZSYmZS5wdXNoKHRbcl0pO3JldHVybiBlP2UubGVuZ3RoP2U6bnVsbDp0fWZ1bmN0aW9uIEFuKHQsZSl7dmFyIHI9ZVsic3BhbnNfIit0LmlkXTtpZighcilyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxpPVtdO248ZS50ZXh0Lmxlbmd0aDsrK24paS5wdXNoKFRuKHJbbl0pKTtyZXR1cm4gaX1mdW5jdGlvbiBIbih0LGUpe2Zvcih2YXIgcj0wLG49W107cjx0Lmxlbmd0aDsrK3Ipe3ZhciBpPXRbcl0sbz1pLmNoYW5nZXMsbD1bXTtuLnB1c2goe2NoYW5nZXM6bCxhbmNob3JCZWZvcmU6aS5hbmNob3JCZWZvcmUsaGVhZEJlZm9yZTppLmhlYWRCZWZvcmUsYW5jaG9yQWZ0ZXI6aS5hbmNob3JBZnRlcixoZWFkQWZ0ZXI6aS5oZWFkQWZ0ZXJ9KTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoOysrcyl7dmFyIGEsdT1vW3NdO2lmKGwucHVzaCh7ZnJvbTp1LmZyb20sdG86dS50byx0ZXh0OnUudGV4dH0pLGUpZm9yKHZhciBjIGluIHUpKGE9Yy5tYXRjaCgvXnNwYW5zXyhcZCspJC8pKSYmdGkoZSxOdW1iZXIoYVsxXSkpPi0xJiYoUW4obClbY109dVtjXSxkZWxldGUgdVtjXSl9fXJldHVybiBufWZ1bmN0aW9uIE5uKHQsZSxyLG4pe3I8dC5saW5lP3QubGluZSs9bjplPHQubGluZSYmKHQubGluZT1lLHQuY2g9MCl9ZnVuY3Rpb24gRG4odCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe2Zvcih2YXIgbz10W2ldLGw9ITAscz0wO3M8by5jaGFuZ2VzLmxlbmd0aDsrK3Mpe3ZhciBhPW8uY2hhbmdlc1tzXTtpZihvLmNvcGllZHx8KGEuZnJvbT1aZShhLmZyb20pLGEudG89WmUoYS50bykpLHI8YS5mcm9tLmxpbmUpYS5mcm9tLmxpbmUrPW4sYS50by5saW5lKz1uO2Vsc2UgaWYoZTw9YS50by5saW5lKXtsPSExO2JyZWFrfX1vLmNvcGllZHx8KG8uYW5jaG9yQmVmb3JlPVplKG8uYW5jaG9yQmVmb3JlKSxvLmhlYWRCZWZvcmU9WmUoby5oZWFkQmVmb3JlKSxvLmFuY2hvckFmdGVyPVplKG8uYW5jaG9yQWZ0ZXIpLG8ucmVhZEFmdGVyPVplKG8uaGVhZEFmdGVyKSxvLmNvcGllZD0hMCksbD8oTm4oby5hbmNob3JCZWZvcmUpLE5uKG8uaGVhZEJlZm9yZSksTm4oby5hbmNob3JBZnRlciksTm4oby5oZWFkQWZ0ZXIpKToodC5zcGxpY2UoMCxpKzEpLGk9MCl9fWZ1bmN0aW9uIFduKHQsZSl7dmFyIHI9ZS5mcm9tLmxpbmUsbj1lLnRvLmxpbmUsaT1lLnRleHQubGVuZ3RoLShuLXIpLTE7RG4odC5kb25lLHIsbixpKSxEbih0LnVuZG9uZSxyLG4saSl9ZnVuY3Rpb24gT24oKXtQbih0aGlzKX1mdW5jdGlvbiBFbih0KXtyZXR1cm4gdC5zdG9wfHwodC5zdG9wPU9uKSx0fWZ1bmN0aW9uIHpuKHQpe3QucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITF9ZnVuY3Rpb24gSW4odCl7dC5zdG9wUHJvcGFnYXRpb24/dC5zdG9wUHJvcGFnYXRpb24oKTp0LmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBGbih0KXtyZXR1cm4gbnVsbCE9dC5kZWZhdWx0UHJldmVudGVkP3QuZGVmYXVsdFByZXZlbnRlZDowPT10LnJldHVyblZhbHVlfWZ1bmN0aW9uIFBuKHQpe3puKHQpLEluKHQpfWZ1bmN0aW9uIFJuKHQpe3JldHVybiB0LnRhcmdldHx8dC5zcmNFbGVtZW50fWZ1bmN0aW9uIEJuKHQpe3ZhciBlPXQud2hpY2g7cmV0dXJuIG51bGw9PWUmJigxJnQuYnV0dG9uP2U9MToyJnQuYnV0dG9uP2U9Mzo0JnQuYnV0dG9uJiYoZT0yKSksS2kmJnQuY3RybEtleSYmMT09ZSYmKGU9MyksZX1mdW5jdGlvbiBHbih0LGUscil7aWYodC5hZGRFdmVudExpc3RlbmVyKXQuYWRkRXZlbnRMaXN0ZW5lcihlLHIsITEpO2Vsc2UgaWYodC5hdHRhY2hFdmVudCl0LmF0dGFjaEV2ZW50KCJvbiIrZSxyKTtlbHNle3ZhciBuPXQuX2hhbmRsZXJzfHwodC5faGFuZGxlcnM9e30pLGk9bltlXXx8KG5bZV09W10pO2kucHVzaChyKX19ZnVuY3Rpb24gVm4odCxlLHIpe2lmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcil0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuZGV0YWNoRXZlbnQpdC5kZXRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYoIW4pcmV0dXJuO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7KytpKWlmKG5baV09PXIpe24uc3BsaWNlKGksMSk7YnJlYWt9fX1mdW5jdGlvbiBLbih0LGUpe3ZhciByPXQuX2hhbmRsZXJzJiZ0Ll9oYW5kbGVyc1tlXTtpZihyKWZvcih2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMiksaT0wO2k8ci5sZW5ndGg7KytpKXJbaV0uYXBwbHkobnVsbCxuKX1mdW5jdGlvbiBVbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dC5hcHBseShudWxsLGkpfX12YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYobil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO1NvfHwoKytNbyxTbz1bXSxzZXRUaW1lb3V0KF9uLDApKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbylTby5wdXNoKHIobltvXSkpfX1mdW5jdGlvbiBYbih0LGUscil7cmV0dXJuIEtuKHQscnx8ZS50eXBlLHQsZSksRm4oZSl8fGUuY29kZW1pcnJvcklnbm9yZX1mdW5jdGlvbiBfbigpey0tTW87dmFyIHQ9U287U289bnVsbDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdKCl9ZnVuY3Rpb24gWW4odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07cmV0dXJuIHImJnIubGVuZ3RoPjB9ZnVuY3Rpb24gam4odCl7dC5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXtHbih0aGlzLHQsZSl9LHQucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe1ZuKHRoaXMsdCxlKX19ZnVuY3Rpb24gJG4oKXt0aGlzLmlkPW51bGx9ZnVuY3Rpb24gWm4odCxlLHIsbixpKXtudWxsPT1lJiYoZT10LnNlYXJjaCgvW15cc1x1MDBhMF0vKSwtMT09ZSYmKGU9dC5sZW5ndGgpKTtmb3IodmFyIG89bnx8MCxsPWl8fDA7ZT5vOysrbykiCSI9PXQuY2hhckF0KG8pP2wrPXItbCVyOisrbDtyZXR1cm4gbH1mdW5jdGlvbiBxbih0KXtmb3IoO0hvLmxlbmd0aDw9dDspSG8ucHVzaChRbihIbykrIiAiKTtyZXR1cm4gSG9bdF19ZnVuY3Rpb24gUW4odCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gSm4odCl7aWYoR2kpdC5zZWxlY3Rpb25TdGFydD0wLHQuc2VsZWN0aW9uRW5kPXQudmFsdWUubGVuZ3RoO2Vsc2UgdHJ5e3Quc2VsZWN0KCl9Y2F0Y2goZSl7fX1mdW5jdGlvbiB0aSh0LGUpe2lmKHQuaW5kZXhPZilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7bj5yOysrcilpZih0W3JdPT1lKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGVpKHQsZSl7ZnVuY3Rpb24gcigpe31yLnByb3RvdHlwZT10O3ZhciBuPW5ldyByO3JldHVybiBlJiZyaShlLG4pLG59ZnVuY3Rpb24gcmkodCxlKXtlfHwoZT17fSk7Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmkodCl7Zm9yKHZhciBlPVtdLHI9MDt0PnI7KytyKWUucHVzaCh2b2lkIDApO3JldHVybiBlfWZ1bmN0aW9uIGlpKHQpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShudWxsLGUpfX1mdW5jdGlvbiBvaSh0KXtyZXR1cm4vXHcvLnRlc3QodCl8fHQ+IsKAIiYmKHQudG9VcHBlckNhc2UoKSE9dC50b0xvd2VyQ2FzZSgpfHxOby50ZXN0KHQpKX1mdW5jdGlvbiBsaSh0KXtmb3IodmFyIGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpJiZ0W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7aWYociYmKGkuY2xhc3NOYW1lPXIpLG4mJihpLnN0eWxlLmNzc1RleHQ9biksInN0cmluZyI9PXR5cGVvZiBlKWNpKGksZSk7ZWxzZSBpZihlKWZvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKWkuYXBwZW5kQ2hpbGQoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gYWkodCl7Zm9yKHZhciBlPXQuY2hpbGROb2Rlcy5sZW5ndGg7ZT4wOy0tZSl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCk7cmV0dXJuIHR9ZnVuY3Rpb24gdWkodCxlKXtyZXR1cm4gYWkodCkuYXBwZW5kQ2hpbGQoZSl9ZnVuY3Rpb24gY2kodCxlKXtOaT8odC5pbm5lckhUTUw9IiIsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSkpOnQudGV4dENvbnRlbnQ9ZX1mdW5jdGlvbiBmaSh0KXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1mdW5jdGlvbiBoaSgpe3JldHVybiExfWZ1bmN0aW9uIGRpKHQpe2lmKG51bGwhPU9vKXJldHVybiBPbzt2YXIgZT1zaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7IG92ZXJmbG93LXg6IHNjcm9sbCIpO3JldHVybiB1aSh0LGUpLGUub2Zmc2V0V2lkdGgmJihPbz1lLm9mZnNldEhlaWdodC1lLmNsaWVudEhlaWdodCksT298fDB9ZnVuY3Rpb24gcGkodCl7aWYobnVsbD09RW8pe3ZhciBlPXNpKCJzcGFuIiwi4oCLIik7dWkodCxzaSgic3BhbiIsW2UsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKV0pKSwwIT10LmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0JiYoRW89ZS5vZmZzZXRXaWR0aDw9MSYmZS5vZmZzZXRIZWlnaHQ+MiYmIUhpKX1yZXR1cm4gRW8/c2koInNwYW4iLCLigIsiKTpzaSgic3BhbiIsIsKgIixudWxsLCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpfWZ1bmN0aW9uIGdpKHQsZSxyLG4pe2lmKCF0KXJldHVybiBuKGUsciwibHRyIik7Zm9yKHZhciBpPSExLG89MDtvPHQubGVuZ3RoOysrbyl7dmFyIGw9dFtvXTsobC5mcm9tPHImJmwudG8+ZXx8ZT09ciYmbC50bz09ZSkmJihuKE1hdGgubWF4KGwuZnJvbSxlKSxNYXRoLm1pbihsLnRvLHIpLDE9PWwubGV2ZWw/InJ0bCI6Imx0ciIpLGk9ITApfWl8fG4oZSxyLCJsdHIiKX1mdW5jdGlvbiBtaSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QudG86dC5mcm9tfWZ1bmN0aW9uIHZpKHQpe3JldHVybiB0LmxldmVsJTI/dC5mcm9tOnQudG99ZnVuY3Rpb24geWkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/bWkoZVswXSk6MH1mdW5jdGlvbiBiaSh0KXt2YXIgZT13bih0KTtyZXR1cm4gZT92aShRbihlKSk6dC50ZXh0Lmxlbmd0aH1mdW5jdGlvbiB4aSh0LGUpe3ZhciByPWduKHQuZG9jLGUpLG49R3IodC5kb2Mscik7biE9ciYmKGU9Ym4obikpO3ZhciBpPXduKG4pLG89aT9pWzBdLmxldmVsJTI/Ymkobik6eWkobik6MDtyZXR1cm4gWWUoZSxvKX1mdW5jdGlvbiBDaSh0LGUpe2Zvcih2YXIgcixuO3I9QnIobj1nbih0LmRvYyxlKSk7KWU9ci5maW5kKCkudG8ubGluZTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP3lpKG4pOmJpKG4pOm4udGV4dC5sZW5ndGg7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gd2kodCxlLHIpe3ZhciBuPXRbMF0ubGV2ZWw7cmV0dXJuIGU9PW4/ITA6cj09bj8hMTpyPmV9ZnVuY3Rpb24gTGkodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXt2YXIgaT10W25dO2lmKGkuZnJvbTxlJiZpLnRvPmUpcmV0dXJuIFJvPW51bGwsbjtpZihpLmZyb209PWV8fGkudG89PWUpe2lmKG51bGwhPXIpcmV0dXJuIHdpKHQsaS5sZXZlbCx0W3JdLmxldmVsKT8oUm89cixuKTooUm89bixyKTtyPW59fXJldHVybiBSbz1udWxsLHJ9ZnVuY3Rpb24ga2kodCxlLHIsbil7aWYoIW4pcmV0dXJuIGUrcjtkbyBlKz1yO3doaWxlKGU+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGUpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gU2kodCxlLHIsbil7dmFyIGk9d24odCk7aWYoIWkpcmV0dXJuIE1pKHQsZSxyLG4pO2Zvcih2YXIgbz1MaShpLGUpLGw9aVtvXSxzPWtpKHQsZSxsLmxldmVsJTI/LXI6cixuKTs7KXtpZihzPmwuZnJvbSYmczxsLnRvKXJldHVybiBzO2lmKHM9PWwuZnJvbXx8cz09bC50bylyZXR1cm4gTGkoaSxzKT09bz9zOihsPWlbbys9cl0scj4wPT1sLmxldmVsJTI/bC50bzpsLmZyb20pO2lmKGw9aVtvKz1yXSwhbClyZXR1cm4gbnVsbDtzPXI+MD09bC5sZXZlbCUyP2tpKHQsbC50bywtMSxuKTpraSh0LGwuZnJvbSwxLG4pfX1mdW5jdGlvbiBNaSh0LGUscixuKXt2YXIgaT1lK3I7aWYobilmb3IoO2k+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGkpKTspaSs9cjtyZXR1cm4gMD5pfHxpPnQudGV4dC5sZW5ndGg/bnVsbDppfXZhciBUaT0vZ2Vja29cL1xkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxBaT0vTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxIaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDgpLE5pPUFpJiYobnVsbD09ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU8OSksRGk9L1RyaWRlbnRcLyhbNy05XXxcZHsyLH0pXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksV2k9L1dlYktpdFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLE9pPVdpJiYvUXRcL1xkK1wuXGQrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEVpPS9DaHJvbWVcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx6aT0vT3BlcmFcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxJaT0vQXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvciksRmk9L0tIVE1MXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUGk9L01hYyBPUyBYIDFcZFxEKFs3LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUmk9L01hYyBPUyBYIDFcZFxEKFs4LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQmk9L1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxHaT0vQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJi9Nb2JpbGVcL1x3Ky8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxWaT1HaXx8L0FuZHJvaWR8d2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEtpPUdpfHwvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksVWk9L3dpbi9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxYaT16aSYmbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwvKFxkKlwuXGQqKS8pO1hpJiYoWGk9TnVtYmVyKFhpWzFdKSksWGkmJlhpPj0xNSYmKHppPSExLFdpPSEwKTt2YXIgX2ksWWksamksJGk9S2kmJihPaXx8emkmJihudWxsPT1YaXx8MTIuMTE+WGkpKSxaaT1UaXx8QWkmJiFOaSxxaT0hMSxRaT0hMSxKaT0wLHRvPTAsZW89MCxybz1udWxsO0FpP3JvPS0uNTM6VGk/cm89MTU6RWk/cm89LS43OklpJiYocm89LTEvMyk7dmFyIG5vLGlvLG9vPW51bGwsbG89dC5jaGFuZ2VFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dD9ZZSh0LmZyb20ubGluZSt0LnRleHQubGVuZ3RoLTEsUW4odC50ZXh0KS5sZW5ndGgrKDE9PXQudGV4dC5sZW5ndGg/dC5mcm9tLmNoOjApKTp0LnRvfTt0LlBvcz1ZZSx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxmb2N1czpmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpLHBlKHRoaXMpLGZlKHRoaXMpfSxzZXRPcHRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLm9wdGlvbnMsbj1yW3RdOyhyW3RdIT1lfHwibW9kZSI9PXQpJiYoclt0XT1lLHNvLmhhc093blByb3BlcnR5KHQpJiZsZSh0aGlzLHNvW3RdKSh0aGlzLGUsbikpfSxnZXRPcHRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9uc1t0XX0sZ2V0RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jfSxhZGRLZXlNYXA6ZnVuY3Rpb24odCxlKXt0aGlzLnN0YXRlLmtleU1hcHNbZT8icHVzaCI6InVuc2hpZnQiXSh0KX0scmVtb3ZlS2V5TWFwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLmtleU1hcHMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PXR8fCJzdHJpbmciIT10eXBlb2YgZVtyXSYmZVtyXS5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLCEwfSxhZGRPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnRva2VuP2U6dC5nZXRNb2RlKHRoaXMub3B0aW9ucyxlKTtpZihuLnN0YXJ0U3RhdGUpdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLiIpO3RoaXMuc3RhdGUub3ZlcmxheXMucHVzaCh7bW9kZTpuLG1vZGVTcGVjOmUsb3BhcXVlOnImJnIub3BhcXVlfSksdGhpcy5zdGF0ZS5tb2RlR2VuKyssdWUodGhpcyl9KSxyZW1vdmVPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuc3RhdGUub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLm1vZGVTcGVjO2lmKG49PXR8fCJzdHJpbmciPT10eXBlb2YgdCYmbi5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpLHZvaWQgMH19KSxpbmRlbnRMaW5lOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpeyJzdHJpbmciIT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlJiYoZT1udWxsPT1lP3RoaXMub3B0aW9ucy5zbWFydEluZGVudD8ic21hcnQiOiJwcmV2IjplPyJhZGQiOiJzdWJ0cmFjdCIpLHRyKHRoaXMuZG9jLHQpJiZocih0aGlzLHQsZSxyKX0pLGluZGVudFNlbGVjdGlvbjpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jLnNlbDtpZihqZShlLmZyb20sZS50bykpcmV0dXJuIGhyKHRoaXMsZS5mcm9tLmxpbmUsdCk7Zm9yKHZhciByPWUudG8ubGluZS0oZS50by5jaD8wOjEpLG49ZS5mcm9tLmxpbmU7cj49bjsrK24paHIodGhpcyxuLHQpfSksZ2V0VG9rZW5BdDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3Q9UWUocix0KTtmb3IodmFyIG49eih0aGlzLHQubGluZSxlKSxpPXRoaXMuZG9jLm1vZGUsbz1nbihyLHQubGluZSksbD1uZXcgU3Ioby50ZXh0LHRoaXMub3B0aW9ucy50YWJTaXplKTtsLnBvczx0LmNoJiYhbC5lb2woKTspe2wuc3RhcnQ9bC5wb3M7dmFyIHM9aS50b2tlbihsLG4pfXJldHVybntzdGFydDpsLnN0YXJ0LGVuZDpsLnBvcyxzdHJpbmc6bC5jdXJyZW50KCksY2xhc3NOYW1lOnN8fG51bGwsdHlwZTpzfHxudWxsLHN0YXRlOm59fSxnZXRUb2tlblR5cGVBdDpmdW5jdGlvbih0KXt0PVFlKHRoaXMuZG9jLHQpO3ZhciBlPUpyKHRoaXMsZ24odGhpcy5kb2MsdC5saW5lKSkscj0wLG49KGUubGVuZ3RoLTEpLzIsaT10LmNoO2lmKDA9PWkpcmV0dXJuIGVbMl07Zm9yKDs7KXt2YXIgbz1yK24+PjE7aWYoKG8/ZVsyKm8tMV06MCk+PWkpbj1vO2Vsc2V7aWYoIShlWzIqbysxXTxpKSlyZXR1cm4gZVsyKm8rMl07cj1vKzF9fX0sZ2V0TW9kZUF0OmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZG9jLm1vZGU7cmV0dXJuIHIuaW5uZXJNb2RlP3QuaW5uZXJNb2RlKHIsdGhpcy5nZXRUb2tlbkF0KGUpLnN0YXRlKS5tb2RlOnJ9LGdldEhlbHBlcjpmdW5jdGlvbih0LGUpe2lmKGdvLmhhc093blByb3BlcnR5KGUpKXt2YXIgcj1nb1tlXSxuPXRoaXMuZ2V0TW9kZUF0KHQpO3JldHVybiBuW2VdJiZyW25bZV1dfHxuLmhlbHBlclR5cGUmJnJbbi5oZWxwZXJUeXBlXXx8cltuLm5hbWVdfX0sZ2V0U3RhdGVBZnRlcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3JldHVybiB0PXFlKHIsbnVsbD09dD9yLmZpcnN0K3Iuc2l6ZS0xOnQpLHoodGhpcyx0KzEsZSl9LGN1cnNvckNvb3JkczpmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3JldHVybiByPW51bGw9PXQ/bi5oZWFkOiJvYmplY3QiPT10eXBlb2YgdD9RZSh0aGlzLmRvYyx0KTp0P24uZnJvbTpuLnRvLFEodGhpcyxyLGV8fCJwYWdlIil9LGNoYXJDb29yZHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcSh0aGlzLFFlKHRoaXMuZG9jLHQpLGV8fCJwYWdlIil9LGNvb3Jkc0NoYXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1aKHRoaXMsdCxlfHwicGFnZSIpLHRlKHRoaXMsdC5sZWZ0LHQudG9wKX0sbGluZUF0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHt0b3A6dCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wLHhuKHRoaXMuZG9jLHQrdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpfSxoZWlnaHRBdExpbmU6ZnVuY3Rpb24odCxlKXt2YXIgcj0hMSxuPXRoaXMuZG9jLmZpcnN0K3RoaXMuZG9jLnNpemUtMTt0PHRoaXMuZG9jLmZpcnN0P3Q9dGhpcy5kb2MuZmlyc3Q6dD5uJiYodD1uLHI9ITApO3ZhciBpPWduKHRoaXMuZG9jLHQpO3JldHVybiAkKHRoaXMsZ24odGhpcy5kb2MsdCkse3RvcDowLGxlZnQ6MH0sZXx8InBhZ2UiKS50b3ArKHI/aS5oZWlnaHQ6MCl9LGRlZmF1bHRUZXh0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHJlKHRoaXMuZGlzcGxheSl9LGRlZmF1bHRDaGFyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gbmUodGhpcy5kaXNwbGF5KX0sc2V0R3V0dGVyTWFya2VyOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49dC5ndXR0ZXJNYXJrZXJzfHwodC5ndXR0ZXJNYXJrZXJzPXt9KTtyZXR1cm4gbltlXT1yLCFyJiZsaShuKSYmKHQuZ3V0dGVyTWFya2Vycz1udWxsKSwhMH0pfSksY2xlYXJHdXR0ZXI6bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kb2Msbj1yLmZpcnN0O3IuaXRlcihmdW5jdGlvbihyKXtyLmd1dHRlck1hcmtlcnMmJnIuZ3V0dGVyTWFya2Vyc1t0XSYmKHIuZ3V0dGVyTWFya2Vyc1t0XT1udWxsLHVlKGUsbixuKzEpLGxpKHIuZ3V0dGVyTWFya2VycykmJihyLmd1dHRlck1hcmtlcnM9bnVsbCkpLCsrbn0pfSksYWRkTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyI7aWYodFtuXSl7aWYobmV3IFJlZ0V4cCgiKD86XnxcXHMpIityKyIoPzokfFxccykiKS50ZXN0KHRbbl0pKXJldHVybiExO3Rbbl0rPSIgIityfWVsc2UgdFtuXT1yO3JldHVybiEwfSl9KSxyZW1vdmVMaW5lQ2xhc3M6bGUobnVsbCxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRyKHRoaXMsdCxmdW5jdGlvbih0KXt2YXIgbj0idGV4dCI9PWU/InRleHRDbGFzcyI6ImJhY2tncm91bmQiPT1lPyJiZ0NsYXNzIjoid3JhcENsYXNzIixpPXRbbl07aWYoIWkpcmV0dXJuITE7aWYobnVsbD09cil0W25dPW51bGw7ZWxzZXt2YXIgbz1pLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3IrIig/OiR8XFxzKykiKSk7aWYoIW8pcmV0dXJuITE7dmFyIGw9by5pbmRleCtvWzBdLmxlbmd0aDt0W25dPWkuc2xpY2UoMCxvLmluZGV4KSsoby5pbmRleCYmbCE9aS5sZW5ndGg/IiAiOiIiKStpLnNsaWNlKGwpfHxudWxsfXJldHVybiEwfSl9KSxhZGRMaW5lV2lkZ2V0OmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBqcih0aGlzLHQsZSxyKX0pLHJlbW92ZUxpbmVXaWRnZXQ6ZnVuY3Rpb24odCl7dC5jbGVhcigpfSxsaW5lSW5mbzpmdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCF0cih0aGlzLmRvYyx0KSlyZXR1cm4gbnVsbDt2YXIgZT10O2lmKHQ9Z24odGhpcy5kb2MsdCksIXQpcmV0dXJuIG51bGx9ZWxzZXt2YXIgZT1ibih0KTtpZihudWxsPT1lKXJldHVybiBudWxsfXJldHVybntsaW5lOmUsaGFuZGxlOnQsdGV4dDp0LnRleHQsZ3V0dGVyTWFya2Vyczp0Lmd1dHRlck1hcmtlcnMsdGV4dENsYXNzOnQudGV4dENsYXNzLGJnQ2xhc3M6dC5iZ0NsYXNzLHdyYXBDbGFzczp0LndyYXBDbGFzcyx3aWRnZXRzOnQud2lkZ2V0c319LGdldFZpZXdwb3J0OmZ1bmN0aW9uKCl7cmV0dXJue2Zyb206dGhpcy5kaXNwbGF5LnNob3dpbmdGcm9tLHRvOnRoaXMuZGlzcGxheS5zaG93aW5nVG99fSxhZGRXaWRnZXQ6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz10aGlzLmRpc3BsYXk7dD1RKHRoaXMsUWUodGhpcy5kb2MsdCkpO3ZhciBsPXQuYm90dG9tLHM9dC5sZWZ0O2lmKGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnNpemVyLmFwcGVuZENoaWxkKGUpLCJvdmVyIj09bilsPXQudG9wO2Vsc2UgaWYoImFib3ZlIj09bnx8Im5lYXIiPT1uKXt2YXIgYT1NYXRoLm1heChvLndyYXBwZXIuY2xpZW50SGVpZ2h0LHRoaXMuZG9jLmhlaWdodCksdT1NYXRoLm1heChvLnNpemVyLmNsaWVudFdpZHRoLG8ubGluZVNwYWNlLmNsaWVudFdpZHRoKTsoImFib3ZlIj09bnx8dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ+YSkmJnQudG9wPmUub2Zmc2V0SGVpZ2h0P2w9dC50b3AtZS5vZmZzZXRIZWlnaHQ6dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ8PWEmJihsPXQuYm90dG9tKSxzK2Uub2Zmc2V0V2lkdGg+dSYmKHM9dS1lLm9mZnNldFdpZHRoKX1lLnN0eWxlLnRvcD1sKyJweCIsZS5zdHlsZS5sZWZ0PWUuc3R5bGUucmlnaHQ9IiIsInJpZ2h0Ij09aT8ocz1vLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgsZS5zdHlsZS5yaWdodD0iMHB4Iik6KCJsZWZ0Ij09aT9zPTA6Im1pZGRsZSI9PWkmJihzPShvLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgpLzIpLGUuc3R5bGUubGVmdD1zKyJweCIpLHImJmFyKHRoaXMscyxsLHMrZS5vZmZzZXRXaWR0aCxsK2Uub2Zmc2V0SGVpZ2h0KX0sdHJpZ2dlck9uS2V5RG93bjpsZShudWxsLFdlKSxleGVjQ29tbWFuZDpmdW5jdGlvbih0KXtyZXR1cm4gbW9bdF0odGhpcyl9LGZpbmRQb3NIOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTE7MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIG89MCxsPVFlKHRoaXMuZG9jLHQpO2U+byYmKGw9cHIodGhpcy5kb2MsbCxpLHIsbiksIWwuaGl0U2lkZSk7KytvKTtyZXR1cm4gbH0sbW92ZUg6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3I9bi5zaGlmdHx8bi5leHRlbmR8fGplKG4uZnJvbSxuLnRvKT9wcih0aGlzLmRvYyxuLmhlYWQsdCxlLHRoaXMub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkpOjA+dD9uLmZyb206bi50byxlcih0aGlzLmRvYyxyLHIsdCl9KSxkZWxldGVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYy5zZWw7amUoci5mcm9tLHIudG8pP19lKHRoaXMuZG9jLCIiLHIuZnJvbSxwcih0aGlzLmRvYyxyLmhlYWQsdCxlLCExKSwiK2RlbGV0ZSIpOl9lKHRoaXMuZG9jLCIiLHIuZnJvbSxyLnRvLCIrZGVsZXRlIiksdGhpcy5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwfSksZmluZFBvc1Y6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MSxvPW47MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIGw9MCxzPVFlKHRoaXMuZG9jLHQpO2U+bDsrK2wpe3ZhciBhPVEodGhpcyxzLCJkaXYiKTtpZihudWxsPT1vP289YS5sZWZ0OmEubGVmdD1vLHM9Z3IodGhpcyxhLGkscikscy5oaXRTaWRlKWJyZWFrfXJldHVybiBzfSxtb3ZlVjpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsLG49USh0aGlzLHIuaGVhZCwiZGl2Iik7bnVsbCE9ci5nb2FsQ29sdW1uJiYobi5sZWZ0PXIuZ29hbENvbHVtbik7dmFyIGk9Z3IodGhpcyxuLHQsZSk7InBhZ2UiPT1lJiZmcih0aGlzLDAscSh0aGlzLGksImRpdiIpLnRvcC1uLnRvcCksZXIodGhpcy5kb2MsaSxpLHQpLHIuZ29hbENvbHVtbj1uLmxlZnR9KSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7KG51bGw9PXR8fHQhPXRoaXMuc3RhdGUub3ZlcndyaXRlKSYmKCh0aGlzLnN0YXRlLm92ZXJ3cml0ZT0hdGhpcy5zdGF0ZS5vdmVyd3JpdGUpP3RoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itb3ZlcndyaXRlIjp0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZT10aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1vdmVyd3JpdGUiLCIiKSl9LGhhc0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuZm9jdXNlZH0sc2Nyb2xsVG86bGUobnVsbCxmdW5jdGlvbih0LGUpe2NyKHRoaXMsdCxlKX0pLGdldFNjcm9sbEluZm86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRpc3BsYXkuc2Nyb2xsZXIsZT1UbztyZXR1cm57bGVmdDp0LnNjcm9sbExlZnQsdG9wOnQuc2Nyb2xsVG9wLGhlaWdodDp0LnNjcm9sbEhlaWdodC1lLHdpZHRoOnQuc2Nyb2xsV2lkdGgtZSxjbGllbnRIZWlnaHQ6dC5jbGllbnRIZWlnaHQtZSxjbGllbnRXaWR0aDp0LmNsaWVudFdpZHRoLWV9fSxzY3JvbGxJbnRvVmlldzpsZShudWxsLGZ1bmN0aW9uKHQsZSl7bnVsbD09dD90PXtmcm9tOnRoaXMuZG9jLnNlbC5oZWFkLHRvOm51bGx9OiJudW1iZXIiPT10eXBlb2YgdD90PXtmcm9tOlllKHQsMCksdG86bnVsbH06bnVsbD09dC5mcm9tJiYodD17ZnJvbTp0LHRvOm51bGx9KSx0LnRvfHwodC50bz10LmZyb20pLGV8fChlPTApO3ZhciByPXQ7bnVsbCE9dC5mcm9tLmxpbmUmJih0aGlzLmN1ck9wLnNjcm9sbFRvUG9zPXtmcm9tOnQuZnJvbSx0bzp0LnRvLG1hcmdpbjplfSxyPXtmcm9tOlEodGhpcyx0LmZyb20pLHRvOlEodGhpcyx0LnRvKX0pO3ZhciBuPXVyKHRoaXMsTWF0aC5taW4oci5mcm9tLmxlZnQsci50by5sZWZ0KSxNYXRoLm1pbihyLmZyb20udG9wLHIudG8udG9wKS1lLE1hdGgubWF4KHIuZnJvbS5yaWdodCxyLnRvLnJpZ2h0KSxNYXRoLm1heChyLmZyb20uYm90dG9tLHIudG8uYm90dG9tKStlKTtjcih0aGlzLG4uc2Nyb2xsTGVmdCxuLnNjcm9sbFRvcCl9KSxzZXRTaXplOmxlKG51bGwsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8L15cZCskLy50ZXN0KFN0cmluZyh0KSk/dCsicHgiOnR9bnVsbCE9dCYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoPXIodCkpLG51bGwhPWUmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQ9cihlKSksdGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZyYmKHRoaXMuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aD10aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcz0wKSx0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwfSksb3BlcmF0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBhZSh0aGlzLHQpfSxyZWZyZXNoOmxlKG51bGwsZnVuY3Rpb24oKXt2YXIgdD1udWxsPT10aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDtfKHRoaXMpLGNyKHRoaXMsdGhpcy5kb2Muc2Nyb2xsTGVmdCx0aGlzLmRvYy5zY3JvbGxUb3ApLHVlKHRoaXMpLHQmJm8odGhpcyl9KSxzd2FwRG9jOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kb2M7cmV0dXJuIGUuY209bnVsbCxwbih0aGlzLHQpLF8odGhpcyksZGUodGhpcywhMCksY3IodGhpcyx0LnNjcm9sbExlZnQsdC5zY3JvbGxUb3ApLFVuKHRoaXMsInN3YXBEb2MiLHRoaXMsZSksZX0pLGdldElucHV0RmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0fSxnZXRXcmFwcGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcn0sZ2V0U2Nyb2xsZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcn0sZ2V0R3V0dGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyc319LGpuKHQpO3ZhciBzbz10Lm9wdGlvbkhhbmRsZXJzPXt9LGFvPXQuZGVmYXVsdHM9e30sdW89dC5Jbml0PXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLkluaXQifX07eXIoInZhbHVlIiwiIixmdW5jdGlvbih0LGUpe3Quc2V0VmFsdWUoZSl9LCEwKSx5cigibW9kZSIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZG9jLm1vZGVPcHRpb249ZSxyKHQpfSwhMCkseXIoImluZGVudFVuaXQiLDIsciwhMCkseXIoImluZGVudFdpdGhUYWJzIiwhMSkseXIoInNtYXJ0SW5kZW50IiwhMCkseXIoInRhYlNpemUiLDQsZnVuY3Rpb24odCl7cih0KSxfKHQpLHVlKHQpfSwhMCkseXIoInNwZWNpYWxDaGFycyIsL1tcdFx1MDAwMC1cdTAwMTlcdTAwYWRcdTIwMGJcdTIwMjhcdTIwMjlcdWZlZmZdL2csZnVuY3Rpb24odCxlKXt0Lm9wdGlvbnMuc3BlY2lhbENoYXJzPW5ldyBSZWdFeHAoZS5zb3VyY2UrKGUudGVzdCgiCSIpPyIiOiJ8CSIpLCJnIiksdC5yZWZyZXNoKCl9LCEwKSx5cigic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsbm4sZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigiZWxlY3RyaWNDaGFycyIsITApLHlyKCJydGxNb3ZlVmlzdWFsbHkiLCFVaSkseXIoIndob2xlTGluZVVwZGF0ZUJlZm9yZSIsITApLHlyKCJ0aGVtZSIsImRlZmF1bHQiLGZ1bmN0aW9uKHQpe3ModCksYSh0KX0sITApLHlyKCJrZXlNYXAiLCJkZWZhdWx0IixsKSx5cigiZXh0cmFLZXlzIixudWxsKSx5cigib25LZXlFdmVudCIsbnVsbCkseXIoIm9uRHJhZ0V2ZW50IixudWxsKSx5cigibGluZVdyYXBwaW5nIiwhMSxuLCEwKSx5cigiZ3V0dGVycyIsW10sZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZml4ZWRHdXR0ZXIiLCEwLGZ1bmN0aW9uKHQsZSl7dC5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdD1lP3kodC5kaXNwbGF5KSsicHgiOiIwIix0LnJlZnJlc2goKX0sITApLHlyKCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciIsITEsZCwhMCkseXIoImxpbmVOdW1iZXJzIiwhMSxmdW5jdGlvbih0KXtoKHQub3B0aW9ucyksYSh0KX0sITApLHlyKCJmaXJzdExpbmVOdW1iZXIiLDEsYSwhMCkseXIoImxpbmVOdW1iZXJGb3JtYXR0ZXIiLGZ1bmN0aW9uKHQpe3JldHVybiB0fSxhLCEwKSx5cigic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCExLEEsITApLHlyKCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUiLCEwKSx5cigicmVhZE9ubHkiLCExLGZ1bmN0aW9uKHQsZSl7Im5vY3Vyc29yIj09ZT8oemUodCksdC5kaXNwbGF5LmlucHV0LmJsdXIoKSx0LmRpc3BsYXkuZGlzYWJsZWQ9ITApOih0LmRpc3BsYXkuZGlzYWJsZWQ9ITEsZXx8ZGUodCwhMCkpfSkseXIoImRyYWdEcm9wIiwhMCkseXIoImN1cnNvckJsaW5rUmF0ZSIsNTMwKSx5cigiY3Vyc29yU2Nyb2xsTWFyZ2luIiwwKSx5cigiY3Vyc29ySGVpZ2h0IiwxKSx5cigid29ya1RpbWUiLDEwMCkseXIoIndvcmtEZWxheSIsMTAwKSx5cigiZmxhdHRlblNwYW5zIiwhMCkseXIoInBvbGxJbnRlcnZhbCIsMTAwKSx5cigidW5kb0RlcHRoIiw0MCxmdW5jdGlvbih0LGUpe3QuZG9jLmhpc3RvcnkudW5kb0RlcHRoPWV9KSx5cigiaGlzdG9yeUV2ZW50RGVsYXkiLDUwMCkseXIoInZpZXdwb3J0TWFyZ2luIiwxMCxmdW5jdGlvbih0KXt0LnJlZnJlc2goKX0sITApLHlyKCJtYXhIaWdobGlnaHRMZW5ndGgiLDFlNCxmdW5jdGlvbih0KXtyKHQpLHQucmVmcmVzaCgpfSwhMCkseXIoImNydWRlTWVhc3VyaW5nRnJvbSIsMWU0KSx5cigibW92ZUlucHV0V2l0aEN1cnNvciIsITAsZnVuY3Rpb24odCxlKXtlfHwodC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcD10LmRpc3BsYXkuaW5wdXREaXYuc3R5bGUubGVmdD0wKX0pLHlyKCJ0YWJpbmRleCIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5pbnB1dC50YWJJbmRleD1lfHwiIn0pLHlyKCJhdXRvZm9jdXMiLG51bGwpO3ZhciBjbz10Lm1vZGVzPXt9LGZvPXQubWltZU1vZGVzPXt9O3QuZGVmaW5lTW9kZT1mdW5jdGlvbihlLHIpe2lmKHQuZGVmYXVsdHMubW9kZXx8Im51bGwiPT1lfHwodC5kZWZhdWx0cy5tb2RlPWUpLGFyZ3VtZW50cy5sZW5ndGg+Mil7ci5kZXBlbmRlbmNpZXM9W107Zm9yKHZhciBuPTI7bjxhcmd1bWVudHMubGVuZ3RoOysrbilyLmRlcGVuZGVuY2llcy5wdXNoKGFyZ3VtZW50c1tuXSl9Y29bZV09cn0sdC5kZWZpbmVNSU1FPWZ1bmN0aW9uKHQsZSl7Zm9bdF09ZX0sdC5yZXNvbHZlTW9kZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJmZvLmhhc093blByb3BlcnR5KGUpKWU9Zm9bZV07ZWxzZSBpZihlJiYic3RyaW5nIj09dHlwZW9mIGUubmFtZSYmZm8uaGFzT3duUHJvcGVydHkoZS5uYW1lKSl7dmFyIHI9Zm9bZS5uYW1lXTtlPWVpKHIsZSksZS5uYW1lPXIubmFtZX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSYmL15bXHdcLV0rXC9bXHdcLV0rXCt4bWwkLy50ZXN0KGUpKXJldHVybiB0LnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/e25hbWU6ZX06ZXx8e25hbWU6Im51bGwifX0sdC5nZXRNb2RlPWZ1bmN0aW9uKGUscil7dmFyIHI9dC5yZXNvbHZlTW9kZShyKSxuPWNvW3IubmFtZV07aWYoIW4pcmV0dXJuIHQuZ2V0TW9kZShlLCJ0ZXh0L3BsYWluIik7dmFyIGk9bihlLHIpO2lmKGhvLmhhc093blByb3BlcnR5KHIubmFtZSkpe3ZhciBvPWhvW3IubmFtZV07Zm9yKHZhciBsIGluIG8pby5oYXNPd25Qcm9wZXJ0eShsKSYmKGkuaGFzT3duUHJvcGVydHkobCkmJihpWyJfIitsXT1pW2xdKSxpW2xdPW9bbF0pfXJldHVybiBpLm5hbWU9ci5uYW1lLGl9LHQuZGVmaW5lTW9kZSgibnVsbCIsZnVuY3Rpb24oKXtyZXR1cm57dG9rZW46ZnVuY3Rpb24odCl7dC5za2lwVG9FbmQoKX19fSksdC5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwibnVsbCIpO3ZhciBobz10Lm1vZGVFeHRlbnNpb25zPXt9O3QuZXh0ZW5kTW9kZT1mdW5jdGlvbih0LGUpe3ZhciByPWhvLmhhc093blByb3BlcnR5KHQpP2hvW3RdOmhvW3RdPXt9O3JpKGUscil9LHQuZGVmaW5lRXh0ZW5zaW9uPWZ1bmN0aW9uKGUscil7dC5wcm90b3R5cGVbZV09cn0sdC5kZWZpbmVEb2NFeHRlbnNpb249ZnVuY3Rpb24odCxlKXt3by5wcm90b3R5cGVbdF09ZX0sdC5kZWZpbmVPcHRpb249eXI7dmFyIHBvPVtdO3QuZGVmaW5lSW5pdEhvb2s9ZnVuY3Rpb24odCl7cG8ucHVzaCh0KX07dmFyIGdvPXQuaGVscGVycz17fTt0LnJlZ2lzdGVySGVscGVyPWZ1bmN0aW9uKGUscixuKXtnby5oYXNPd25Qcm9wZXJ0eShlKXx8KGdvW2VdPXRbZV09e30pLGdvW2VdW3JdPW59LHQuaXNXb3JkQ2hhcj1vaSx0LmNvcHlTdGF0ZT1icix0LnN0YXJ0U3RhdGU9eHIsdC5pbm5lck1vZGU9ZnVuY3Rpb24odCxlKXtmb3IoO3QuaW5uZXJNb2RlOyl7dmFyIHI9dC5pbm5lck1vZGUoZSk7aWYoIXJ8fHIubW9kZT09dClicmVhaztlPXIuc3RhdGUsdD1yLm1vZGV9cmV0dXJuIHJ8fHttb2RlOnQsc3RhdGU6ZX19O3ZhciBtbz10LmNvbW1hbmRzPXtzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dC5zZXRTZWxlY3Rpb24oWWUodC5maXJzdExpbmUoKSwwKSxZZSh0Lmxhc3RMaW5lKCkpKX0sa2lsbExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoITApLHI9dC5nZXRDdXJzb3IoITEpLG49IWplKGUscik7bnx8dC5nZXRMaW5lKGUubGluZSkubGVuZ3RoIT1lLmNoP3QucmVwbGFjZVJhbmdlKCIiLGUsbj9yOlllKGUubGluZSksIitkZWxldGUiKTp0LnJlcGxhY2VSYW5nZSgiIixlLFllKGUubGluZSsxLDApLCIrZGVsZXRlIil9LGRlbGV0ZUxpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKS5saW5lO3QucmVwbGFjZVJhbmdlKCIiLFllKGUsMCksWWUoZSksIitkZWxldGUiKX0sZGVsTGluZUxlZnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLmxpbmUsMCksZSwiK2RlbGV0ZSIpfSx1bmRvOmZ1bmN0aW9uKHQpe3QudW5kbygpfSxyZWRvOmZ1bmN0aW9uKHQpe3QucmVkbygpfSxnb0RvY1N0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCkpfSxnb0RvY0VuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0Lmxhc3RMaW5lKCkpKX0sZ29MaW5lU3RhcnQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oeGkodCx0LmdldEN1cnNvcigpLmxpbmUpKX0sZ29MaW5lU3RhcnRTbWFydDpmdW5jdGlvbih0KXt2YXIgZT10LmdldEN1cnNvcigpLHI9eGkodCxlLmxpbmUpLG49dC5nZXRMaW5lSGFuZGxlKHIubGluZSksaT13bihuKTtpZihpJiYwIT1pWzBdLmxldmVsKXQuZXh0ZW5kU2VsZWN0aW9uKHIpO2Vsc2V7dmFyIG89TWF0aC5tYXgoMCxuLnRleHQuc2VhcmNoKC9cUy8pKSxsPWUubGluZT09ci5saW5lJiZlLmNoPD1vJiZlLmNoO3QuZXh0ZW5kU2VsZWN0aW9uKFllKHIubGluZSxsPzA6bykpfX0sZ29MaW5lRW5kOmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKENpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVJpZ2h0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6dC5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGgrMTAwLHRvcDplfSwiZGl2IikpfSxnb0xpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwibGluZSIpfSxnb0xpbmVEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwibGluZSIpfSxnb1BhZ2VVcDpmdW5jdGlvbih0KXt0Lm1vdmVWKC0xLCJwYWdlIil9LGdvUGFnZURvd246ZnVuY3Rpb24odCl7dC5tb3ZlVigxLCJwYWdlIil9LGdvQ2hhckxlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiY2hhciIpfSxnb0NoYXJSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNoYXIiKX0sZ29Db2x1bW5MZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNvbHVtbiIpfSxnb0NvbHVtblJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiY29sdW1uIil9LGdvV29yZExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwid29yZCIpfSxnb0dyb3VwUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJncm91cCIpfSxnb0dyb3VwTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJncm91cCIpfSxnb1dvcmRSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsIndvcmQiKX0sZGVsQ2hhckJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImNoYXIiKX0sZGVsQ2hhckFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJjaGFyIil9LGRlbFdvcmRCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJ3b3JkIil9LGRlbFdvcmRBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwid29yZCIpfSxkZWxHcm91cEJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImdyb3VwIil9LGRlbEdyb3VwQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsImdyb3VwIil9LGluZGVudEF1dG86ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iil9LGluZGVudE1vcmU6ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oImFkZCIpfSxpbmRlbnRMZXNzOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpfSxpbnNlcnRUYWI6ZnVuY3Rpb24odCl7dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LGRlZmF1bHRUYWI6ZnVuY3Rpb24odCl7dC5zb21ldGhpbmdTZWxlY3RlZCgpP3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKTp0LnJlcGxhY2VTZWxlY3Rpb24oIgkiLCJlbmQiLCIraW5wdXQiKX0sdHJhbnNwb3NlQ2hhcnM6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXQuZ2V0TGluZShlLmxpbmUpO2UuY2g+MCYmZS5jaDxyLmxlbmd0aC0xJiZ0LnJlcGxhY2VSYW5nZShyLmNoYXJBdChlLmNoKStyLmNoYXJBdChlLmNoLTEpLFllKGUubGluZSxlLmNoLTEpLFllKGUubGluZSxlLmNoKzEpKX0sbmV3bGluZUFuZEluZGVudDpmdW5jdGlvbih0KXtsZSh0LGZ1bmN0aW9uKCl7dC5yZXBsYWNlU2VsZWN0aW9uKCJcbiIsImVuZCIsIitpbnB1dCIpLHQuaW5kZW50TGluZSh0LmdldEN1cnNvcigpLmxpbmUsbnVsbCwhMCl9KSgpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7dC50b2dnbGVPdmVyd3JpdGUoKX19LHZvPXQua2V5TWFwPXt9O3ZvLmJhc2ljPXtMZWZ0OiJnb0NoYXJMZWZ0IixSaWdodDoiZ29DaGFyUmlnaHQiLFVwOiJnb0xpbmVVcCIsRG93bjoiZ29MaW5lRG93biIsRW5kOiJnb0xpbmVFbmQiLEhvbWU6ImdvTGluZVN0YXJ0U21hcnQiLFBhZ2VVcDoiZ29QYWdlVXAiLFBhZ2VEb3duOiJnb1BhZ2VEb3duIixEZWxldGU6ImRlbENoYXJBZnRlciIsQmFja3NwYWNlOiJkZWxDaGFyQmVmb3JlIiwiU2hpZnQtQmFja3NwYWNlIjoiZGVsQ2hhckJlZm9yZSIsVGFiOiJkZWZhdWx0VGFiIiwiU2hpZnQtVGFiIjoiaW5kZW50QXV0byIsRW50ZXI6Im5ld2xpbmVBbmRJbmRlbnQiLEluc2VydDoidG9nZ2xlT3ZlcndyaXRlIn0sdm8ucGNEZWZhdWx0PXsiQ3RybC1BIjoic2VsZWN0QWxsIiwiQ3RybC1EIjoiZGVsZXRlTGluZSIsIkN0cmwtWiI6InVuZG8iLCJTaGlmdC1DdHJsLVoiOiJyZWRvIiwiQ3RybC1ZIjoicmVkbyIsIkN0cmwtSG9tZSI6ImdvRG9jU3RhcnQiLCJBbHQtVXAiOiJnb0RvY1N0YXJ0IiwiQ3RybC1FbmQiOiJnb0RvY0VuZCIsIkN0cmwtRG93biI6ImdvRG9jRW5kIiwiQ3RybC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJDdHJsLVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQWx0LUxlZnQiOiJnb0xpbmVTdGFydCIsIkFsdC1SaWdodCI6ImdvTGluZUVuZCIsIkN0cmwtQmFja3NwYWNlIjoiZGVsR3JvdXBCZWZvcmUiLCJDdHJsLURlbGV0ZSI6ImRlbEdyb3VwQWZ0ZXIiLCJDdHJsLVMiOiJzYXZlIiwiQ3RybC1GIjoiZmluZCIsIkN0cmwtRyI6ImZpbmROZXh0IiwiU2hpZnQtQ3RybC1HIjoiZmluZFByZXYiLCJTaGlmdC1DdHJsLUYiOiJyZXBsYWNlIiwiU2hpZnQtQ3RybC1SIjoicmVwbGFjZUFsbCIsIkN0cmwtWyI6ImluZGVudExlc3MiLCJDdHJsLV0iOiJpbmRlbnRNb3JlIixmYWxsdGhyb3VnaDoiYmFzaWMifSx2by5tYWNEZWZhdWx0PXsiQ21kLUEiOiJzZWxlY3RBbGwiLCJDbWQtRCI6ImRlbGV0ZUxpbmUiLCJDbWQtWiI6InVuZG8iLCJTaGlmdC1DbWQtWiI6InJlZG8iLCJDbWQtWSI6InJlZG8iLCJDbWQtVXAiOiJnb0RvY1N0YXJ0IiwiQ21kLUVuZCI6ImdvRG9jRW5kIiwiQ21kLURvd24iOiJnb0RvY0VuZCIsIkFsdC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJBbHQtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJDbWQtTGVmdCI6ImdvTGluZVN0YXJ0IiwiQ21kLVJpZ2h0IjoiZ29MaW5lRW5kIiwiQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1BbHQtQmFja3NwYWNlIjoiZGVsR3JvdXBBZnRlciIsIkFsdC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ21kLVMiOiJzYXZlIiwiQ21kLUYiOiJmaW5kIiwiQ21kLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUNtZC1HIjoiZmluZFByZXYiLCJDbWQtQWx0LUYiOiJyZXBsYWNlIiwiU2hpZnQtQ21kLUFsdC1GIjoicmVwbGFjZUFsbCIsIkNtZC1bIjoiaW5kZW50TGVzcyIsIkNtZC1dIjoiaW5kZW50TW9yZSIsIkNtZC1CYWNrc3BhY2UiOiJkZWxMaW5lTGVmdCIsZmFsbHRocm91Z2g6WyJiYXNpYyIsImVtYWNzeSJdfSx2b1siZGVmYXVsdCJdPUtpP3ZvLm1hY0RlZmF1bHQ6dm8ucGNEZWZhdWx0LHZvLmVtYWNzeT17IkN0cmwtRiI6ImdvQ2hhclJpZ2h0IiwiQ3RybC1CIjoiZ29DaGFyTGVmdCIsIkN0cmwtUCI6ImdvTGluZVVwIiwiQ3RybC1OIjoiZ29MaW5lRG93biIsIkFsdC1GIjoiZ29Xb3JkUmlnaHQiLCJBbHQtQiI6ImdvV29yZExlZnQiLCJDdHJsLUEiOiJnb0xpbmVTdGFydCIsIkN0cmwtRSI6ImdvTGluZUVuZCIsIkN0cmwtViI6ImdvUGFnZURvd24iLCJTaGlmdC1DdHJsLVYiOiJnb1BhZ2VVcCIsIkN0cmwtRCI6ImRlbENoYXJBZnRlciIsIkN0cmwtSCI6ImRlbENoYXJCZWZvcmUiLCJBbHQtRCI6ImRlbFdvcmRBZnRlciIsIkFsdC1CYWNrc3BhY2UiOiJkZWxXb3JkQmVmb3JlIiwiQ3RybC1LIjoia2lsbExpbmUiLCJDdHJsLVQiOiJ0cmFuc3Bvc2VDaGFycyJ9LHQubG9va3VwS2V5PXdyLHQuaXNNb2RpZmllcktleT1Mcix0LmtleU5hbWU9a3IsdC5mcm9tVGV4dEFyZWE9ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7ZS52YWx1ZT11LmdldFZhbHVlKCl9aWYocnx8KHI9e30pLHIudmFsdWU9ZS52YWx1ZSwhci50YWJpbmRleCYmZS50YWJpbmRleCYmKHIudGFiaW5kZXg9ZS50YWJpbmRleCksIXIucGxhY2Vob2xkZXImJmUucGxhY2Vob2xkZXImJihyLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIpLG51bGw9PXIuYXV0b2ZvY3VzKXt2YXIgaT1kb2N1bWVudC5ib2R5O3RyeXtpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2gobyl7fXIuYXV0b2ZvY3VzPWk9PWV8fG51bGwhPWUuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSYmaT09ZG9jdW1lbnQuYm9keX1pZihlLmZvcm0mJihHbihlLmZvcm0sInN1Ym1pdCIsbiksIXIubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkpe3ZhciBsPWUuZm9ybSxzPWwuc3VibWl0O3RyeXt2YXIgYT1sLnN1Ym1pdD1mdW5jdGlvbigpe24oKSxsLnN1Ym1pdD1zLGwuc3VibWl0KCksbC5zdWJtaXQ9YX19Y2F0Y2gobyl7fX1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciB1PXQoZnVuY3Rpb24odCl7ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGUubmV4dFNpYmxpbmcpfSxyKTtyZXR1cm4gdS5zYXZlPW4sdS5nZXRUZXh0QXJlYT1mdW5jdGlvbigpe3JldHVybiBlfSx1LnRvVGV4dEFyZWE9ZnVuY3Rpb24oKXtuKCksZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUuZ2V0V3JhcHBlckVsZW1lbnQoKSksZS5zdHlsZS5kaXNwbGF5PSIiLGUuZm9ybSYmKFZuKGUuZm9ybSwic3VibWl0IixuKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JtLnN1Ym1pdCYmKGUuZm9ybS5zdWJtaXQ9cykpfSx1fSxTci5wcm90b3R5cGU9e2VvbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcz49dGhpcy5zdHJpbmcubGVuZ3RofSxzb2w6ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy5wb3N9LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKXx8dm9pZCAwfSxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPHRoaXMuc3RyaW5nLmxlbmd0aD90aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyk6dm9pZCAwfSxlYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTtpZigic3RyaW5nIj09dHlwZW9mIHQpdmFyIHI9ZT09dDtlbHNlIHZhciByPWUmJih0LnRlc3Q/dC50ZXN0KGUpOnQoZSkpO3JldHVybiByPygrK3RoaXMucG9zLGUpOnZvaWQgMH0sZWF0V2hpbGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucG9zO3RoaXMuZWF0KHQpOyk7cmV0dXJuIHRoaXMucG9zPmV9LGVhdFNwYWNlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucG9zOy9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpOykrK3RoaXMucG9zO3JldHVybiB0aGlzLnBvcz50fSxza2lwVG9FbmQ6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0cmluZy5sZW5ndGh9LHNraXBUbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN0cmluZy5pbmRleE9mKHQsdGhpcy5wb3MpO3JldHVybiBlPi0xPyh0aGlzLnBvcz1lLCEwKTp2b2lkIDB9LGJhY2tVcDpmdW5jdGlvbih0KXt0aGlzLnBvcy09dH0sY29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENvbHVtblBvczx0aGlzLnN0YXJ0JiYodGhpcy5sYXN0Q29sdW1uVmFsdWU9Wm4odGhpcy5zdHJpbmcsdGhpcy5zdGFydCx0aGlzLnRhYlNpemUsdGhpcy5sYXN0Q29sdW1uUG9zLHRoaXMubGFzdENvbHVtblZhbHVlKSx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5zdGFydCksdGhpcy5sYXN0Q29sdW1uVmFsdWV9LGluZGVudGF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFpuKHRoaXMuc3RyaW5nLG51bGwsdGhpcy50YWJTaXplKX0sbWF0Y2g6ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIG49dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHQpO3JldHVybiBuJiZuLmluZGV4PjA/bnVsbDoobiYmZSE9PSExJiYodGhpcy5wb3MrPW5bMF0ubGVuZ3RoKSxuKX12YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gcj90LnRvTG93ZXJDYXNlKCk6dH0sbz10aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsdC5sZW5ndGgpO3JldHVybiBpKG8pPT1pKHQpPyhlIT09ITEmJih0aGlzLnBvcys9dC5sZW5ndGgpLCEwKTp2b2lkIDB9LGN1cnJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCx0aGlzLnBvcyl9fSx0LlN0cmluZ1N0cmVhbT1Tcix0LlRleHRNYXJrZXI9TXIsam4oTXIpLE1yLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKXt2YXIgdD10aGlzLmRvYy5jbSxlPXQmJiF0LmN1ck9wO2lmKGUmJmllKHQpLFluKHRoaXMsImNsZWFyIikpe3ZhciByPXRoaXMuZmluZCgpO3ImJlVuKHRoaXMsImNsZWFyIixyLmZyb20sci50byl9Zm9yKHZhciBuPW51bGwsaT1udWxsLG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGw9dGhpcy5saW5lc1tvXSxzPU5yKGwubWFya2VkU3BhbnMsdGhpcyk7bnVsbCE9cy50byYmKGk9Ym4obCkpLGwubWFya2VkU3BhbnM9RHIobC5tYXJrZWRTcGFucyxzKSxudWxsIT1zLmZyb20/bj1ibihsKTp0aGlzLmNvbGxhcHNlZCYmIVZyKHRoaXMuZG9jLGwpJiZ0JiZ5bihsLHJlKHQuZGlzcGxheSkpfWlmKHQmJnRoaXMuY29sbGFwc2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZylmb3IodmFyIG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGE9R3IodC5kb2MsdGhpcy5saW5lc1tvXSksdT1jKHQuZG9jLGEpO3U+dC5kaXNwbGF5Lm1heExpbmVMZW5ndGgmJih0LmRpc3BsYXkubWF4TGluZT1hLHQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoPXUsdC5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKX1udWxsIT1uJiZ0JiZ1ZSh0LG4saSsxKSx0aGlzLmxpbmVzLmxlbmd0aD0wLHRoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITAsdGhpcy5hdG9taWMmJnRoaXMuZG9jLmNhbnRFZGl0JiYodGhpcy5kb2MuY2FudEVkaXQ9ITEsdCYmaXIodCkpLGUmJm9lKHQpfX0sTXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyPTA7cjx0aGlzLmxpbmVzLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGluZXNbcl0saT1OcihuLm1hcmtlZFNwYW5zLHRoaXMpO2lmKG51bGwhPWkuZnJvbXx8bnVsbCE9aS50byl7dmFyIG89Ym4obik7bnVsbCE9aS5mcm9tJiYodD1ZZShvLGkuZnJvbSkpLG51bGwhPWkudG8mJihlPVllKG8saS50bykpfX1yZXR1cm4iYm9va21hcmsiPT10aGlzLnR5cGU/dDp0JiZ7ZnJvbTp0LHRvOmV9fSxNci5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZmluZCgpLGU9dGhpcy5kb2MuY207aWYodCYmZSl7ImJvb2ttYXJrIiE9dGhpcy50eXBlJiYodD10LmZyb20pO3ZhciByPWduKHRoaXMuZG9jLHQubGluZSk7aWYoRyhlLHIpLHQubGluZT49ZS5kaXNwbGF5LnNob3dpbmdGcm9tJiZ0LmxpbmU8ZS5kaXNwbGF5LnNob3dpbmdUbyl7Zm9yKHZhciBuPWUuZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpaWYobi5saW5lT2JqPT1yKXtuLm9mZnNldEhlaWdodCE9ci5oZWlnaHQmJnluKHIsbi5vZmZzZXRIZWlnaHQpOwpicmVha31hZShlLGZ1bmN0aW9uKCl7ZS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPWUuY3VyT3AuZm9yY2VVcGRhdGU9ZS5jdXJPcC51cGRhdGVNYXhMaW5lPSEwfSl9fX0sTXIucHJvdG90eXBlLmF0dGFjaExpbmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7ZS5tYXliZUhpZGRlbk1hcmtlcnMmJi0xIT10aShlLm1heWJlSGlkZGVuTWFya2Vycyx0aGlzKXx8KGUubWF5YmVVbmhpZGRlbk1hcmtlcnN8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX10aGlzLmxpbmVzLnB1c2godCl9LE1yLnByb3RvdHlwZS5kZXRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGluZXMuc3BsaWNlKHRpKHRoaXMubGluZXMsdCksMSksIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7KGUubWF5YmVIaWRkZW5NYXJrZXJzfHwoZS5tYXliZUhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfX0sdC5TaGFyZWRUZXh0TWFya2VyPUFyLGpuKEFyKSxBci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMDtmb3IodmFyIHQ9MDt0PHRoaXMubWFya2Vycy5sZW5ndGg7Kyt0KXRoaXMubWFya2Vyc1t0XS5jbGVhcigpO1VuKHRoaXMsImNsZWFyIil9fSxBci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaW1hcnkuZmluZCgpfTt2YXIgeW89dC5MaW5lV2lkZ2V0PWZ1bmN0aW9uKHQsZSxyKXtpZihyKWZvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0aGlzW25dPXJbbl0pO3RoaXMuY209dCx0aGlzLm5vZGU9ZX07am4oeW8pLHlvLnByb3RvdHlwZS5jbGVhcj1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMubGluZS53aWRnZXRzLGU9Ym4odGhpcy5saW5lKTtpZihudWxsIT1lJiZ0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdPT10aGlzJiZ0LnNwbGljZShyLS0sMSk7dC5sZW5ndGh8fCh0aGlzLmxpbmUud2lkZ2V0cz1udWxsKTt2YXIgbj1Dbih0aGlzLmNtLHRoaXMubGluZSk8dGhpcy5jbS5kb2Muc2Nyb2xsVG9wO3luKHRoaXMubGluZSxNYXRoLm1heCgwLHRoaXMubGluZS5oZWlnaHQtWXIodGhpcykpKSxuJiZmcih0aGlzLmNtLDAsLXRoaXMuaGVpZ2h0KSx1ZSh0aGlzLmNtLGUsZSsxKX19KSx5by5wcm90b3R5cGUuY2hhbmdlZD1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVpZ2h0O3RoaXMuaGVpZ2h0PW51bGw7dmFyIGU9WXIodGhpcyktdDtpZihlKXt5bih0aGlzLmxpbmUsdGhpcy5saW5lLmhlaWdodCtlKTt2YXIgcj1ibih0aGlzLmxpbmUpO3VlKHRoaXMuY20scixyKzEpfX0pO3ZhciBibz10LkxpbmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LFhyKHRoaXMsZSksdGhpcy5oZWlnaHQ9cj9yKHRoaXMpOjF9O2puKGJvKSxiby5wcm90b3R5cGUubGluZU5vPWZ1bmN0aW9uKCl7cmV0dXJuIGJuKHRoaXMpfTt2YXIgeG89e307Zm4ucHJvdG90eXBlPXtjaHVua1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saW5lcy5sZW5ndGh9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQsbj10K2U7bj5yOysrcil7dmFyIGk9dGhpcy5saW5lc1tyXTt0aGlzLmhlaWdodC09aS5oZWlnaHQsWnIoaSksVW4oaSwiZGVsZXRlIil9dGhpcy5saW5lcy5zcGxpY2UodCxlKX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7dC5zcGxpY2UuYXBwbHkodCxbdC5sZW5ndGgsMF0uY29uY2F0KHRoaXMubGluZXMpKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGVpZ2h0Kz1yLHRoaXMubGluZXM9dGhpcy5saW5lcy5zbGljZSgwLHQpLmNvbmNhdChlKS5jb25jYXQodGhpcy5saW5lcy5zbGljZSh0KSk7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtpPm47KytuKWVbbl0ucGFyZW50PXRoaXN9LGl0ZXJOOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dCtlO24+dDsrK3QpaWYocih0aGlzLmxpbmVzW3RdKSlyZXR1cm4hMH19LGhuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24odCxlKXt0aGlzLnNpemUtPWU7Zm9yKHZhciByPTA7cjx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+dCl7dmFyIG89TWF0aC5taW4oZSxpLXQpLGw9bi5oZWlnaHQ7aWYobi5yZW1vdmVJbm5lcih0LG8pLHRoaXMuaGVpZ2h0LT1sLW4uaGVpZ2h0LGk9PW8mJih0aGlzLmNoaWxkcmVuLnNwbGljZShyLS0sMSksbi5wYXJlbnQ9bnVsbCksMD09KGUtPW8pKWJyZWFrO3Q9MH1lbHNlIHQtPWl9aWYodGhpcy5zaXplLWU8MjUpe3ZhciBzPVtdO3RoaXMuY29sbGFwc2UocyksdGhpcy5jaGlsZHJlbj1bbmV3IGZuKHMpXSx0aGlzLmNoaWxkcmVuWzBdLnBhcmVudD10aGlzfX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmNoaWxkcmVuLmxlbmd0aDtyPmU7KytlKXRoaXMuY2hpbGRyZW5bZV0uY29sbGFwc2UodCl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpemUrPWUubGVuZ3RoLHRoaXMuaGVpZ2h0Kz1yO2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD49dCl7aWYoby5pbnNlcnRJbm5lcih0LGUsciksby5saW5lcyYmby5saW5lcy5sZW5ndGg+NTApe2Zvcig7by5saW5lcy5sZW5ndGg+NTA7KXt2YXIgcz1vLmxpbmVzLnNwbGljZShvLmxpbmVzLmxlbmd0aC0yNSwyNSksYT1uZXcgZm4ocyk7by5oZWlnaHQtPWEuaGVpZ2h0LHRoaXMuY2hpbGRyZW4uc3BsaWNlKG4rMSwwLGEpLGEucGFyZW50PXRoaXN9dGhpcy5tYXliZVNwaWxsKCl9YnJlYWt9dC09bH19LG1heWJlU3BpbGw6ZnVuY3Rpb24oKXtpZighKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPD0xMCkpe3ZhciB0PXRoaXM7ZG97dmFyIGU9dC5jaGlsZHJlbi5zcGxpY2UodC5jaGlsZHJlbi5sZW5ndGgtNSw1KSxyPW5ldyBobihlKTtpZih0LnBhcmVudCl7dC5zaXplLT1yLnNpemUsdC5oZWlnaHQtPXIuaGVpZ2h0O3ZhciBuPXRpKHQucGFyZW50LmNoaWxkcmVuLHQpO3QucGFyZW50LmNoaWxkcmVuLnNwbGljZShuKzEsMCxyKX1lbHNle3ZhciBpPW5ldyBobih0LmNoaWxkcmVuKTtpLnBhcmVudD10LHQuY2hpbGRyZW49W2kscl0sdD1pfXIucGFyZW50PXQucGFyZW50fXdoaWxlKHQuY2hpbGRyZW4ubGVuZ3RoPjEwKTt0LnBhcmVudC5tYXliZVNwaWxsKCl9fSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10aGlzLmNoaWxkcmVuW25dLGw9by5jaHVua1NpemUoKTtpZihsPnQpe3ZhciBzPU1hdGgubWluKGUsbC10KTtpZihvLml0ZXJOKHQscyxyKSlyZXR1cm4hMDtpZigwPT0oZS09cykpYnJlYWs7dD0wfWVsc2UgdC09bH19fTt2YXIgQ289MCx3bz10LkRvYz1mdW5jdGlvbih0LGUscil7aWYoISh0aGlzIGluc3RhbmNlb2Ygd28pKXJldHVybiBuZXcgd28odCxlLHIpO251bGw9PXImJihyPTApLGhuLmNhbGwodGhpcyxbbmV3IGZuKFtuZXcgYm8oIiIsbnVsbCldKV0pLHRoaXMuZmlyc3Q9cix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbExlZnQ9MCx0aGlzLmNhbnRFZGl0PSExLHRoaXMuaGlzdG9yeT1MbigpLHRoaXMuY2xlYW5HZW5lcmF0aW9uPTEsdGhpcy5mcm9udGllcj1yO3ZhciBuPVllKHIsMCk7dGhpcy5zZWw9e2Zyb206bix0bzpuLGhlYWQ6bixhbmNob3I6bixzaGlmdDohMSxleHRlbmQ6ITEsZ29hbENvbHVtbjpudWxsfSx0aGlzLmlkPSsrQ28sdGhpcy5tb2RlT3B0aW9uPWUsInN0cmluZyI9PXR5cGVvZiB0JiYodD16byh0KSksY24odGhpcyx7ZnJvbTpuLHRvOm4sdGV4dDp0fSxudWxsLHtoZWFkOm4sYW5jaG9yOm59KX07d28ucHJvdG90eXBlPWVpKGhuLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6d28saXRlcjpmdW5jdGlvbih0LGUscil7cj90aGlzLml0ZXJOKHQtdGhpcy5maXJzdCxlLXQscik6dGhpcy5pdGVyTih0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplLHQpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lLmxlbmd0aDtpPm47KytuKXIrPWVbbl0uaGVpZ2h0O3RoaXMuaW5zZXJ0SW5uZXIodC10aGlzLmZpcnN0LGUscil9LHJlbW92ZTpmdW5jdGlvbih0LGUpe3RoaXMucmVtb3ZlSW5uZXIodC10aGlzLmZpcnN0LGUpfSxnZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT12bih0aGlzLHRoaXMuZmlyc3QsdGhpcy5maXJzdCt0aGlzLnNpemUpO3JldHVybiB0PT09ITE/ZTplLmpvaW4odHx8IlxuIil9LHNldFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVllKHRoaXMuZmlyc3QsMCkscj10aGlzLmZpcnN0K3RoaXMuc2l6ZS0xO0JlKHRoaXMse2Zyb206ZSx0bzpZZShyLGduKHRoaXMscikudGV4dC5sZW5ndGgpLHRleHQ6em8odCksb3JpZ2luOiJzZXRWYWx1ZSJ9LHtoZWFkOmUsYW5jaG9yOmV9LCEwKX0scmVwbGFjZVJhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe2U9UWUodGhpcyxlKSxyPXI/UWUodGhpcyxyKTplLF9lKHRoaXMsdCxlLHIsbil9LGdldFJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1tbih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSk7cmV0dXJuIHI9PT0hMT9uOm4uam9pbihyfHwiXG4iKX0sZ2V0TGluZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldExpbmVIYW5kbGUodCk7cmV0dXJuIGUmJmUudGV4dH0sc2V0TGluZTpmdW5jdGlvbih0LGUpe3RyKHRoaXMsdCkmJl9lKHRoaXMsZSxZZSh0LDApLFFlKHRoaXMsWWUodCkpKX0scmVtb3ZlTGluZTpmdW5jdGlvbih0KXt0P19lKHRoaXMsIiIsUWUodGhpcyxZZSh0LTEpKSxRZSh0aGlzLFllKHQpKSk6X2UodGhpcywiIixZZSgwLDApLFFlKHRoaXMsWWUoMSwwKSkpfSxnZXRMaW5lSGFuZGxlOmZ1bmN0aW9uKHQpe3JldHVybiB0cih0aGlzLHQpP2duKHRoaXMsdCk6dm9pZCAwfSxnZXRMaW5lTnVtYmVyOmZ1bmN0aW9uKHQpe3JldHVybiBibih0KX0sZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ9Z24odGhpcyx0KSksR3IodGhpcyx0KX0sbGluZUNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0sZmlyc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3R9LGxhc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3QrdGhpcy5zaXplLTF9LGNsaXBQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIFFlKHRoaXMsdCl9LGdldEN1cnNvcjpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuc2VsO3JldHVybiBlPW51bGw9PXR8fCJoZWFkIj09dD9yLmhlYWQ6ImFuY2hvciI9PXQ/ci5hbmNob3I6ImVuZCI9PXR8fHQ9PT0hMT9yLnRvOnIuZnJvbSxaZShlKX0sc29tZXRoaW5nU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hamUodGhpcy5zZWwuaGVhZCx0aGlzLnNlbC5hbmNob3IpfSxzZXRDdXJzb3I6c2UoZnVuY3Rpb24odCxlLHIpe3ZhciBuPVFlKHRoaXMsIm51bWJlciI9PXR5cGVvZiB0P1llKHQsZXx8MCk6dCk7cj9lcih0aGlzLG4pOm5yKHRoaXMsbixuKX0pLHNldFNlbGVjdGlvbjpzZShmdW5jdGlvbih0LGUscil7bnIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZXx8dCkscil9KSxleHRlbmRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe2VyKHRoaXMsUWUodGhpcyx0KSxlJiZRZSh0aGlzLGUpLHIpfSksZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFJhbmdlKHRoaXMuc2VsLmZyb20sdGhpcy5zZWwudG8sdCl9LHJlcGxhY2VTZWxlY3Rpb246ZnVuY3Rpb24odCxlLHIpe0JlKHRoaXMse2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byx0ZXh0OnpvKHQpLG9yaWdpbjpyfSxlfHwiYXJvdW5kIil9LHVuZG86c2UoZnVuY3Rpb24oKXtWZSh0aGlzLCJ1bmRvIil9KSxyZWRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywicmVkbyIpfSksc2V0RXh0ZW5kaW5nOmZ1bmN0aW9uKHQpe3RoaXMuc2VsLmV4dGVuZD10fSxoaXN0b3J5U2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGlzdG9yeTtyZXR1cm57dW5kbzp0LmRvbmUubGVuZ3RoLHJlZG86dC51bmRvbmUubGVuZ3RofX0sY2xlYXJIaXN0b3J5OmZ1bmN0aW9uKCl7dGhpcy5oaXN0b3J5PUxuKHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKX0sbWFya0NsZWFuOmZ1bmN0aW9uKCl7dGhpcy5jbGVhbkdlbmVyYXRpb249dGhpcy5jaGFuZ2VHZW5lcmF0aW9uKCl9LGNoYW5nZUdlbmVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaXN0b3J5Lmxhc3RPcD10aGlzLmhpc3RvcnkubGFzdE9yaWdpbj1udWxsLHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9ufSxpc0NsZWFuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbj09KHR8fHRoaXMuY2xlYW5HZW5lcmF0aW9uKX0sZ2V0SGlzdG9yeTpmdW5jdGlvbigpe3JldHVybntkb25lOkhuKHRoaXMuaGlzdG9yeS5kb25lKSx1bmRvbmU6SG4odGhpcy5oaXN0b3J5LnVuZG9uZSl9fSxzZXRIaXN0b3J5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7ZS5kb25lPXQuZG9uZS5zbGljZSgwKSxlLnVuZG9uZT10LnVuZG9uZS5zbGljZSgwKX0sbWFya1RleHQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUcih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSxyLCJyYW5nZSIpfSxzZXRCb29rbWFyazpmdW5jdGlvbih0LGUpe3ZhciByPXtyZXBsYWNlZFdpdGg6ZSYmKG51bGw9PWUubm9kZVR5cGU/ZS53aWRnZXQ6ZSksaW5zZXJ0TGVmdDplJiZlLmluc2VydExlZnR9O3JldHVybiB0PVFlKHRoaXMsdCksVHIodGhpcyx0LHQsciwiYm9va21hcmsiKX0sZmluZE1hcmtzQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLHQpO3ZhciBlPVtdLHI9Z24odGhpcyx0LmxpbmUpLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07KG51bGw9PWkuZnJvbXx8aS5mcm9tPD10LmNoKSYmKG51bGw9PWkudG98fGkudG8+PXQuY2gpJiZlLnB1c2goaS5tYXJrZXIucGFyZW50fHxpLm1hcmtlcil9cmV0dXJuIGV9LGdldEFsbE1hcmtzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihlKXt2YXIgcj1lLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pbnVsbCE9cltuXS5mcm9tJiZ0LnB1c2gocltuXS5tYXJrZXIpfSksdH0scG9zRnJvbUluZGV4OmZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKG4pe3ZhciBpPW4udGV4dC5sZW5ndGgrMTtyZXR1cm4gaT50PyhlPXQsITApOih0LT1pLCsrcix2b2lkIDApfSksUWUodGhpcyxZZShyLGUpKX0saW5kZXhGcm9tUG9zOmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT10LmNoO3JldHVybiB0LmxpbmU8dGhpcy5maXJzdHx8dC5jaDwwPzA6KHRoaXMuaXRlcih0aGlzLmZpcnN0LHQubGluZSxmdW5jdGlvbih0KXtlKz10LnRleHQubGVuZ3RoKzF9KSxlKX0sY29weTpmdW5jdGlvbih0KXt2YXIgZT1uZXcgd28odm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKSx0aGlzLm1vZGVPcHRpb24sdGhpcy5maXJzdCk7cmV0dXJuIGUuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLGUuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbExlZnQsZS5zZWw9e2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byxoZWFkOnRoaXMuc2VsLmhlYWQsYW5jaG9yOnRoaXMuc2VsLmFuY2hvcixzaGlmdDp0aGlzLnNlbC5zaGlmdCxleHRlbmQ6ITEsZ29hbENvbHVtbjp0aGlzLnNlbC5nb2FsQ29sdW1ufSx0JiYoZS5oaXN0b3J5LnVuZG9EZXB0aD10aGlzLmhpc3RvcnkudW5kb0RlcHRoLGUuc2V0SGlzdG9yeSh0aGlzLmdldEhpc3RvcnkoKSkpLGV9LGxpbmtlZERvYzpmdW5jdGlvbih0KXt0fHwodD17fSk7dmFyIGU9dGhpcy5maXJzdCxyPXRoaXMuZmlyc3QrdGhpcy5zaXplO251bGwhPXQuZnJvbSYmdC5mcm9tPmUmJihlPXQuZnJvbSksbnVsbCE9dC50byYmdC50bzxyJiYocj10LnRvKTt2YXIgbj1uZXcgd28odm4odGhpcyxlLHIpLHQubW9kZXx8dGhpcy5tb2RlT3B0aW9uLGUpO3JldHVybiB0LnNoYXJlZEhpc3QmJihuLmhpc3Rvcnk9dGhpcy5oaXN0b3J5KSwodGhpcy5saW5rZWR8fCh0aGlzLmxpbmtlZD1bXSkpLnB1c2goe2RvYzpuLHNoYXJlZEhpc3Q6dC5zaGFyZWRIaXN0fSksbi5saW5rZWQ9W3tkb2M6dGhpcyxpc1BhcmVudDohMCxzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH1dLG59LHVubGlua0RvYzpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdCYmKGU9ZS5kb2MpLHRoaXMubGlua2VkKWZvcih2YXIgcj0wO3I8dGhpcy5saW5rZWQubGVuZ3RoOysrcil7dmFyIG49dGhpcy5saW5rZWRbcl07aWYobi5kb2M9PWUpe3RoaXMubGlua2VkLnNwbGljZShyLDEpLGUudW5saW5rRG9jKHRoaXMpO2JyZWFrfX1pZihlLmhpc3Rvcnk9PXRoaXMuaGlzdG9yeSl7dmFyIGk9W2UuaWRdO2RuKGUsZnVuY3Rpb24odCl7aS5wdXNoKHQuaWQpfSwhMCksZS5oaXN0b3J5PUxuKCksZS5oaXN0b3J5LmRvbmU9SG4odGhpcy5oaXN0b3J5LmRvbmUsaSksZS5oaXN0b3J5LnVuZG9uZT1Ibih0aGlzLmhpc3RvcnkudW5kb25lLGkpfX0saXRlckxpbmtlZERvY3M6ZnVuY3Rpb24odCl7ZG4odGhpcyx0KX0sZ2V0TW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtfX0pLHdvLnByb3RvdHlwZS5lYWNoTGluZT13by5wcm90b3R5cGUuaXRlcjt2YXIgTG89Iml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciIuc3BsaXQoIiAiKTtmb3IodmFyIGtvIGluIHdvLnByb3RvdHlwZSl3by5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa28pJiZ0aShMbyxrbyk8MCYmKHQucHJvdG90eXBlW2tvXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLmRvYyxhcmd1bWVudHMpfX0od28ucHJvdG90eXBlW2tvXSkpO2puKHdvKSx0LmVfc3RvcD1Qbix0LmVfcHJldmVudERlZmF1bHQ9em4sdC5lX3N0b3BQcm9wYWdhdGlvbj1Jbjt2YXIgU28sTW89MDt0Lm9uPUduLHQub2ZmPVZuLHQuc2lnbmFsPUtuO3ZhciBUbz0zMCxBbz10LlBhc3M9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNvZGVNaXJyb3IuUGFzcyJ9fTskbi5wcm90b3R5cGU9e3NldDpmdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0aGlzLmlkKSx0aGlzLmlkPXNldFRpbWVvdXQoZSx0KX19LHQuY291bnRDb2x1bW49Wm47dmFyIEhvPVsiIl0sTm89L1tcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vLERvPS9bXHUwMzAwLVx1MDM2Rlx1MDQ4My1cdTA0ODdcdTA0ODgtXHUwNDg5XHUwNTkxLVx1MDVCRFx1MDVCRlx1MDVDMS1cdTA1QzJcdTA1QzQtXHUwNUM1XHUwNUM3XHUwNjEwLVx1MDYxQVx1MDY0Qi1cdTA2NUZcdTA2NzBcdTA2RDYtXHUwNkRDXHUwNkRGLVx1MDZFNFx1MDZFNy1cdTA2RThcdTA2RUEtXHUwNkVEXHVBNjZGXHUxREMw4oCTXHUxREZGXHUyMEQw4oCTXHUyMEZGXHVBNjcwLVx1QTY3Mlx1QTY3NC1cdUE2N0RcdUE2OUZcdWRjMDAtXHVkZmZmXHVGRTIw4oCTXHVGRTJGXS87dC5yZXBsYWNlR2V0UmVjdD1mdW5jdGlvbih0KXtmaT10fTt2YXIgV289ZnVuY3Rpb24oKXtpZihOaSlyZXR1cm4hMTt2YXIgdD1zaSgiZGl2Iik7cmV0dXJuImRyYWdnYWJsZSJpbiB0fHwiZHJhZ0Ryb3AiaW4gdH0oKTtUaT9oaT1mdW5jdGlvbih0LGUpe3JldHVybiAzNj09dC5jaGFyQ29kZUF0KGUtMSkmJjM5PT10LmNoYXJDb2RlQXQoZSl9OklpJiYhL1ZlcnNpb25cLyhbNi05XXxcZFxkKVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpP2hpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuL1wtW14gXC0/XXxcP1teICFcJ1wiXCksLlwtXC86O1w/XF1cfV0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9OldpJiYvQ2hyb21lXC8oPzoyOXxbMy05XVxkfFxkXGRcZClcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2hhckNvZGVBdChlLTEpO3JldHVybiByPj04MjA4JiY4MjEyPj1yfTpXaSYmKGhpPWZ1bmN0aW9uKHQsZSl7aWYoZT4xJiY0NT09dC5jaGFyQ29kZUF0KGUtMSkpe2lmKC9cdy8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1teXC0/XC5dLy50ZXN0KHQuY2hhckF0KGUpKSlyZXR1cm4hMDtpZihlPjImJi9bXGRcLixdLy50ZXN0KHQuY2hhckF0KGUtMikpJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITF9cmV0dXJuL1t+ISMlJiopPSt9XF1cXHxcIlwuPiw6O11bKHtbPF18LVteXC0/XC5cdTIwMTAtXHUyMDFmXHUyMDI2XXxcP1tcd35gQCMkJVxeJiooXz0re1t8PjxdfOKApltcd35gQCMkJVxeJiooXz0re1s+PF0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9KTt2YXIgT28sRW8sem89MyE9IlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1bXSxuPXQubGVuZ3RoO24+PWU7KXt2YXIgaT10LmluZGV4T2YoIlxuIixlKTstMT09aSYmKGk9dC5sZW5ndGgpO3ZhciBvPXQuc2xpY2UoZSwiXHIiPT10LmNoYXJBdChpLTEpP2ktMTppKSxsPW8uaW5kZXhPZigiXHIiKTstMSE9bD8oci5wdXNoKG8uc2xpY2UoMCxsKSksZSs9bCsxKTooci5wdXNoKG8pLGU9aSsxKX1yZXR1cm4gcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoL1xyXG4/fFxuLyl9O3Quc3BsaXRMaW5lcz16bzt2YXIgSW89d2luZG93LmdldFNlbGVjdGlvbj9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuc2VsZWN0aW9uU3RhcnQhPXQuc2VsZWN0aW9uRW5kfWNhdGNoKGUpe3JldHVybiExfX06ZnVuY3Rpb24odCl7dHJ5e3ZhciBlPXQub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX1jYXRjaChyKXt9cmV0dXJuIGUmJmUucGFyZW50RWxlbWVudCgpPT10PzAhPWUuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsZSk6ITF9LEZvPWZ1bmN0aW9uKCl7dmFyIHQ9c2koImRpdiIpO3JldHVybiJvbmNvcHkiaW4gdD8hMDoodC5zZXRBdHRyaWJ1dGUoIm9uY29weSIsInJldHVybjsiKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5vbmNvcHkpfSgpLFBvPXszOiJFbnRlciIsODoiQmFja3NwYWNlIiw5OiJUYWIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ3RybCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2MiLDMyOiJTcGFjZSIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkxlZnQiLDM4OiJVcCIsMzk6IlJpZ2h0Iiw0MDoiRG93biIsNDQ6IlByaW50U2NybiIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsNTk6IjsiLDkxOiJNb2QiLDkyOiJNb2QiLDkzOiJNb2QiLDEwOToiLSIsMTA3OiI9IiwxMjc6IkRlbGV0ZSIsMTg2OiI7IiwxODc6Ij0iLDE4ODoiLCIsMTg5OiItIiwxOTA6Ii4iLDE5MToiLyIsMTkyOiJgIiwyMTk6IlsiLDIyMDoiXFwiLDIyMToiXSIsMjIyOiInIiw2MzI3NjoiUGFnZVVwIiw2MzI3NzoiUGFnZURvd24iLDYzMjc1OiJFbmQiLDYzMjczOiJIb21lIiw2MzIzNDoiTGVmdCIsNjMyMzI6IlVwIiw2MzIzNToiUmlnaHQiLDYzMjMzOiJEb3duIiw2MzMwMjoiSW5zZXJ0Iiw2MzI3MjoiRGVsZXRlIn07dC5rZXlOYW1lcz1QbyxmdW5jdGlvbigpe2Zvcih2YXIgdD0wOzEwPnQ7dCsrKVBvW3QrNDhdPVN0cmluZyh0KTtmb3IodmFyIHQ9NjU7OTA+PXQ7dCsrKVBvW3RdPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7Zm9yKHZhciB0PTE7MTI+PXQ7dCsrKVBvW3QrMTExXT1Qb1t0KzYzMjM1XT0iRiIrdH0oKTt2YXIgUm8sQm89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiAyNTU+PXQ/ZS5jaGFyQXQodCk6dD49MTQyNCYmMTUyND49dD8iUiI6dD49MTUzNiYmMTc5MT49dD9yLmNoYXJBdCh0LTE1MzYpOnQ+PTE3OTImJjIyMjA+PXQ/InIiOiJMIn12YXIgZT0iYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTCIscj0icnJycnJycnJycnJyLHJOTm1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1ycnJycnJybm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1ObW1tbXJycnJycnJycnJycnJycnJyciIsbj0vW1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUwNzAwLVx1MDhhY10vLGk9L1tzdHdOXS8sbz0vW0xScl0vLGw9L1tMYjFuXS8scz0vWzFuXS8sYT0iTCI7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFuLnRlc3QoZSkpcmV0dXJuITE7Zm9yKHZhciByLHU9ZS5sZW5ndGgsYz1bXSxmPTA7dT5mOysrZiljLnB1c2gocj10KGUuY2hhckNvZGVBdChmKSkpO2Zvcih2YXIgZj0wLGg9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyJtIj09cj9jW2ZdPWg6aD1yfWZvcih2YXIgZj0wLGQ9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyIxIj09ciYmInIiPT1kP2NbZl09Im4iOm8udGVzdChyKSYmKGQ9ciwiciI9PXImJihjW2ZdPSJSIikpfWZvcih2YXIgZj0xLGg9Y1swXTt1LTE+ZjsrK2Ype3ZhciByPWNbZl07IisiPT1yJiYiMSI9PWgmJiIxIj09Y1tmKzFdP2NbZl09IjEiOiIsIiE9cnx8aCE9Y1tmKzFdfHwiMSIhPWgmJiJuIiE9aHx8KGNbZl09aCksaD1yfWZvcih2YXIgZj0wO3U+ZjsrK2Ype3ZhciByPWNbZl07aWYoIiwiPT1yKWNbZl09Ik4iO2Vsc2UgaWYoIiUiPT1yKXtmb3IodmFyIHA9ZisxO3U+cCYmIiUiPT1jW3BdOysrcCk7Zm9yKHZhciBnPWYmJiIhIj09Y1tmLTFdfHx1LTE+cCYmIjEiPT1jW3BdPyIxIjoiTiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfX1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiTCI9PWQmJiIxIj09cj9jW2ZdPSJMIjpvLnRlc3QocikmJihkPXIpfWZvcih2YXIgZj0wO3U+ZjsrK2YpaWYoaS50ZXN0KGNbZl0pKXtmb3IodmFyIHA9ZisxO3U+cCYmaS50ZXN0KGNbcF0pOysrcCk7Zm9yKHZhciB2PSJMIj09KGY/Y1tmLTFdOmEpLHk9IkwiPT0odS0xPnA/Y1twXTphKSxnPXZ8fHk/IkwiOiJSIixtPWY7cD5tOysrbSljW21dPWc7Zj1wLTF9Zm9yKHZhciBiLHg9W10sZj0wO3U+ZjspaWYobC50ZXN0KGNbZl0pKXt2YXIgQz1mO2ZvcigrK2Y7dT5mJiZsLnRlc3QoY1tmXSk7KytmKTt4LnB1c2goe2Zyb206Qyx0bzpmLGxldmVsOjB9KX1lbHNle3ZhciB3PWYsTD14Lmxlbmd0aDtmb3IoKytmO3U+ZiYmIkwiIT1jW2ZdOysrZik7Zm9yKHZhciBtPXc7Zj5tOylpZihzLnRlc3QoY1ttXSkpe20+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86bSxsZXZlbDoxfSk7dmFyIGs9bTtmb3IoKyttO2Y+bSYmcy50ZXN0KGNbbV0pOysrbSk7eC5zcGxpY2UoTCwwLHtmcm9tOmssdG86bSxsZXZlbDoyfSksdz1tfWVsc2UrK207Zj53JiZ4LnNwbGljZShMLDAse2Zyb206dyx0bzpmLGxldmVsOjF9KX1yZXR1cm4gMT09eFswXS5sZXZlbCYmKGI9ZS5tYXRjaCgvXlxzKy8pKSYmKHhbMF0uZnJvbT1iWzBdLmxlbmd0aCx4LnVuc2hpZnQoe2Zyb206MCx0bzpiWzBdLmxlbmd0aCxsZXZlbDowfSkpLDE9PVFuKHgpLmxldmVsJiYoYj1lLm1hdGNoKC9ccyskLykpJiYoUW4oeCkudG8tPWJbMF0ubGVuZ3RoLHgucHVzaCh7ZnJvbTp1LWJbMF0ubGVuZ3RoLHRvOnUsbGV2ZWw6MH0pKSx4WzBdLmxldmVsIT1Rbih4KS5sZXZlbCYmeC5wdXNoKHtmcm9tOnUsdG86dSxsZXZlbDp4WzBdLmxldmVsfSkseH19KCk7cmV0dXJuIHQudmVyc2lvbj0iMy4yMC4wIix0fSgpO1BLBwjGXJGwv68BAL+vAQBQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAABzdGF0aWNcbGliXGhpZ2hsaWdodC5taW4uanN2YXIgaGxqcz1uZXcgZnVuY3Rpb24oKXtmdW5jdGlvbiBsKG8pe3JldHVybiBvLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvPC9nbSwiJmx0OyIpLnJlcGxhY2UoLz4vZ20sIiZndDsiKX1mdW5jdGlvbiBiKHApe2Zvcih2YXIgbz1wLmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpe2lmKG8ubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkNPREUiKXtyZXR1cm4gb31pZighKG8ubm9kZVR5cGU9PTMmJm8ubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe2JyZWFrfX19ZnVuY3Rpb24gaChwLG8pe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwocC5jaGlsZE5vZGVzLGZ1bmN0aW9uKHEpe2lmKHEubm9kZVR5cGU9PTMpe3JldHVybiBvP3Eubm9kZVZhbHVlLnJlcGxhY2UoL1xuL2csIiIpOnEubm9kZVZhbHVlfWlmKHEubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cmV0dXJuIlxuIn1yZXR1cm4gaChxLG8pfSkuam9pbigiIil9ZnVuY3Rpb24gYShxKXt2YXIgcD0ocS5jbGFzc05hbWUrIiAiKyhxLnBhcmVudE5vZGU/cS5wYXJlbnROb2RlLmNsYXNzTmFtZToiIikpLnNwbGl0KC9ccysvKTtwPXAubWFwKGZ1bmN0aW9uKHIpe3JldHVybiByLnJlcGxhY2UoL15sYW5ndWFnZS0vLCIiKX0pO2Zvcih2YXIgbz0wO288cC5sZW5ndGg7bysrKXtpZihlW3Bbb11dfHxwW29dPT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJuIHBbb119fX1mdW5jdGlvbiBjKHEpe3ZhciBvPVtdOyhmdW5jdGlvbiBwKHIscyl7Zm9yKHZhciB0PXIuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZyl7aWYodC5ub2RlVHlwZT09Myl7cys9dC5ub2RlVmFsdWUubGVuZ3RofWVsc2V7aWYodC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT0iQlIiKXtzKz0xfWVsc2V7aWYodC5ub2RlVHlwZT09MSl7by5wdXNoKHtldmVudDoic3RhcnQiLG9mZnNldDpzLG5vZGU6dH0pO3M9cCh0LHMpO28ucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDpzLG5vZGU6dH0pfX19fXJldHVybiBzfSkocSwwKTtyZXR1cm4gb31mdW5jdGlvbiBqKHAscix2KXt2YXIgcT0wO3ZhciB5PSIiO3ZhciBzPVtdO2Z1bmN0aW9uIHUoKXtpZighcC5sZW5ndGh8fCFyLmxlbmd0aCl7cmV0dXJuIHAubGVuZ3RoP3A6cn1pZihwWzBdLm9mZnNldCE9clswXS5vZmZzZXQpe3JldHVybihwWzBdLm9mZnNldDxyWzBdLm9mZnNldCk/cDpyfXJldHVybiByWzBdLmV2ZW50PT0ic3RhcnQiP3A6cn1mdW5jdGlvbiB0KEEpe2Z1bmN0aW9uIHooQil7cmV0dXJuIiAiK0Iubm9kZU5hbWUrJz0iJytsKEIudmFsdWUpKyciJ315Kz0iPCIrQS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChBLmF0dHJpYnV0ZXMseikuam9pbigiIikrIj4ifWZ1bmN0aW9uIHgoeil7eSs9IjwvIit6Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4ifWZ1bmN0aW9uIG8oeil7KHouZXZlbnQ9PSJzdGFydCI/dDp4KSh6Lm5vZGUpfXdoaWxlKHAubGVuZ3RofHxyLmxlbmd0aCl7dmFyIHc9dSgpO3krPWwodi5zdWJzdHIocSx3WzBdLm9mZnNldC1xKSk7cT13WzBdLm9mZnNldDtpZih3PT1wKXtzLnJldmVyc2UoKS5mb3JFYWNoKHgpO2Rve28ody5zcGxpY2UoMCwxKVswXSk7dz11KCl9d2hpbGUodz09cCYmdy5sZW5ndGgmJndbMF0ub2Zmc2V0PT1xKTtzLnJldmVyc2UoKS5mb3JFYWNoKHQpfWVsc2V7aWYod1swXS5ldmVudD09InN0YXJ0Iil7cy5wdXNoKHdbMF0ubm9kZSl9ZWxzZXtzLnBvcCgpfW8ody5zcGxpY2UoMCwxKVswXSl9fXJldHVybiB5K2wodi5zdWJzdHIocSkpfWZ1bmN0aW9uIGYocil7ZnVuY3Rpb24gbyhzKXtyZXR1cm4ocyYmcy5zb3VyY2UpfHxzfWZ1bmN0aW9uIHAodCxzKXtyZXR1cm4gUmVnRXhwKG8odCksIm0iKyhyLmNJPyJpIjoiIikrKHM/ImciOiIiKSl9ZnVuY3Rpb24gcSh6LHgpe2lmKHouY29tcGlsZWQpe3JldHVybn16LmNvbXBpbGVkPXRydWU7dmFyIHU9W107aWYoei5rKXt2YXIgcz17fTtmdW5jdGlvbiBBKEIsdCl7aWYoci5jSSl7dD10LnRvTG93ZXJDYXNlKCl9dC5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oQyl7dmFyIEQ9Qy5zcGxpdCgifCIpO3NbRFswXV09W0IsRFsxXT9OdW1iZXIoRFsxXSk6MV07dS5wdXNoKERbMF0pfSl9ei5sUj1wKHoubHx8IlxcYiIraGxqcy5JUisiXFxiKD8hXFwuKSIsdHJ1ZSk7aWYodHlwZW9mIHouaz09InN0cmluZyIpe0EoImtleXdvcmQiLHouayl9ZWxzZXtmb3IodmFyIHkgaW4gei5rKXtpZighei5rLmhhc093blByb3BlcnR5KHkpKXtjb250aW51ZX1BKHksei5rW3ldKX19ei5rPXN9aWYoeCl7aWYoei5iV0spe3ouYj0iXFxiKCIrdS5qb2luKCJ8IikrIilcXGIoPyFcXC4pXFxzKiJ9ei5iUj1wKHouYj96LmI6IlxcQnxcXGIiKTtpZighei5lJiYhei5lVyl7ei5lPSJcXEJ8XFxiIn1pZih6LmUpe3ouZVI9cCh6LmUpfXoudEU9byh6LmUpfHwiIjtpZih6LmVXJiZ4LnRFKXt6LnRFKz0oei5lPyJ8IjoiIikreC50RX19aWYoei5pKXt6LmlSPXAoei5pKX1pZih6LnI9PT11bmRlZmluZWQpe3oucj0xfWlmKCF6LmMpe3ouYz1bXX1mb3IodmFyIHc9MDt3PHouYy5sZW5ndGg7dysrKXtpZih6LmNbd109PSJzZWxmIil7ei5jW3ddPXp9cSh6LmNbd10seil9aWYoei5zdGFydHMpe3Eoei5zdGFydHMseCl9dmFyIHY9W107Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7di5wdXNoKG8oei5jW3ddLmIpKX1pZih6LnRFKXt2LnB1c2gobyh6LnRFKSl9aWYoei5pKXt2LnB1c2gobyh6LmkpKX16LnQ9di5sZW5ndGg/cCh2LmpvaW4oInwiKSx0cnVlKTp7ZXhlYzpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH19fXEocil9ZnVuY3Rpb24gZChFLEcsQyxNKXtmdW5jdGlvbiBvKHIsUCl7Zm9yKHZhciBPPTA7TzxQLmMubGVuZ3RoO08rKyl7dmFyIE49UC5jW09dLmJSLmV4ZWMocik7aWYoTiYmTi5pbmRleD09MCl7cmV0dXJuIFAuY1tPXX19fWZ1bmN0aW9uIHMoTixyKXtpZihOLmUmJk4uZVIudGVzdChyKSl7cmV0dXJuIE59aWYoTi5lVyl7cmV0dXJuIHMoTi5wYXJlbnQscil9fWZ1bmN0aW9uIHQocixOKXtyZXR1cm4gIUMmJk4uaSYmTi5pUi50ZXN0KHIpfWZ1bmN0aW9uIHkoTyxyKXt2YXIgTj1ILmNJP3JbMF0udG9Mb3dlckNhc2UoKTpyWzBdO3JldHVybiBPLmsuaGFzT3duUHJvcGVydHkoTikmJk8ua1tOXX1mdW5jdGlvbiBJKCl7dmFyIE49bCh3KTtpZighQi5rKXtyZXR1cm4gTn12YXIgcj0iIjt2YXIgUT0wO0IubFIubGFzdEluZGV4PTA7dmFyIE89Qi5sUi5leGVjKE4pO3doaWxlKE8pe3IrPU4uc3Vic3RyKFEsTy5pbmRleC1RKTt2YXIgUD15KEIsTyk7aWYoUCl7dis9UFsxXTtyKz0nPHNwYW4gY2xhc3M9IicrUFswXSsnIj4nK09bMF0rIjwvc3Bhbj4ifWVsc2V7cis9T1swXX1RPUIubFIubGFzdEluZGV4O089Qi5sUi5leGVjKE4pfXJldHVybiByK04uc3Vic3RyKFEpfWZ1bmN0aW9uIHooKXtpZihCLnNMJiYhZVtCLnNMXSl7cmV0dXJuIGwodyl9dmFyIE49Qi5zdWJMYW5ndWFnZU1vZGU9PSJjb250aW51b3VzIj9CLnRvcDp1bmRlZmluZWQ7dmFyIHI9Qi5zTD9kKEIuc0wsdyx0cnVlLE4pOmcodyk7aWYoQi5yPjApe3YrPXIua2V5d29yZF9jb3VudDtBKz1yLnJ9Qi50b3A9ci50b3A7cmV0dXJuJzxzcGFuIGNsYXNzPSInK3IubGFuZ3VhZ2UrJyI+JytyLnZhbHVlKyI8L3NwYW4+In1mdW5jdGlvbiBMKCl7cmV0dXJuIEIuc0whPT11bmRlZmluZWQ/eigpOkkoKX1mdW5jdGlvbiBLKE8scil7dmFyIE49Ty5jTj8nPHNwYW4gY2xhc3M9IicrTy5jTisnIj4nOiIiO2lmKE8uckIpe3grPU47dz0iIn1lbHNle2lmKE8uZUIpe3grPWwocikrTjt3PSIifWVsc2V7eCs9Tjt3PXJ9fUI9T2JqZWN0LmNyZWF0ZShPLHtwYXJlbnQ6e3ZhbHVlOkJ9fSl9ZnVuY3Rpb24gRChOLHIpe3crPU47aWYocj09PXVuZGVmaW5lZCl7eCs9TCgpO3JldHVybiAwfXZhciBQPW8ocixCKTtpZihQKXt4Kz1MKCk7SyhQLHIpO3JldHVybiBQLnJCPzA6ci5sZW5ndGh9dmFyIFE9cyhCLHIpO2lmKFEpe3ZhciBPPUI7aWYoIShPLnJFfHxPLmVFKSl7dys9cn14Kz1MKCk7ZG97aWYoQi5jTil7eCs9Ijwvc3Bhbj4ifUErPUIucjtCPUIucGFyZW50fXdoaWxlKEIhPVEucGFyZW50KTtpZihPLmVFKXt4Kz1sKHIpfXc9IiI7aWYoUS5zdGFydHMpe0soUS5zdGFydHMsIiIpfXJldHVybiBPLnJFPzA6ci5sZW5ndGh9aWYodChyLEIpKXt0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgbGV4ZW0gIicrcisnIiBmb3IgbW9kZSAiJysoQi5jTnx8Ijx1bm5hbWVkPiIpKyciJyl9dys9cjtyZXR1cm4gci5sZW5ndGh8fDF9dmFyIEg9ZVtFXTtpZighSCl7dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJytFKyciJyl9ZihIKTt2YXIgQj1NfHxIO3ZhciB4PSIiO2Zvcih2YXIgRj1CO0YhPUg7Rj1GLnBhcmVudCl7aWYoRi5jTil7eD0nPHNwYW4gY2xhc3M9IicrRi5jTisnIj4nK3h9fXZhciB3PSIiO3ZhciBBPTA7dmFyIHY9MDt0cnl7dmFyIHUscSxwPTA7d2hpbGUodHJ1ZSl7Qi50Lmxhc3RJbmRleD1wO3U9Qi50LmV4ZWMoRyk7aWYoIXUpe2JyZWFrfXE9RChHLnN1YnN0cihwLHUuaW5kZXgtcCksdVswXSk7cD11LmluZGV4K3F9RChHLnN1YnN0cihwKSk7Zm9yKHZhciBGPUI7Ri5wYXJlbnQ7Rj1GLnBhcmVudCl7aWYoRi5jTil7eCs9Ijwvc3Bhbj4ifX1yZXR1cm57cjpBLGtleXdvcmRfY291bnQ6dix2YWx1ZTp4LGxhbmd1YWdlOkUsdG9wOkJ9fWNhdGNoKEope2lmKEoubWVzc2FnZS5pbmRleE9mKCJJbGxlZ2FsIikhPS0xKXtyZXR1cm57cjowLGtleXdvcmRfY291bnQ6MCx2YWx1ZTpsKEcpfX1lbHNle3Rocm93IEp9fX1mdW5jdGlvbiBnKHMpe3ZhciBvPXtrZXl3b3JkX2NvdW50OjAscjowLHZhbHVlOmwocyl9O3ZhciBxPW87Zm9yKHZhciBwIGluIGUpe2lmKCFlLmhhc093blByb3BlcnR5KHApKXtjb250aW51ZX12YXIgcj1kKHAscyxmYWxzZSk7ci5sYW5ndWFnZT1wO2lmKHIua2V5d29yZF9jb3VudCtyLnI+cS5rZXl3b3JkX2NvdW50K3Eucil7cT1yfWlmKHIua2V5d29yZF9jb3VudCtyLnI+by5rZXl3b3JkX2NvdW50K28ucil7cT1vO289cn19aWYocS5sYW5ndWFnZSl7by5zZWNvbmRfYmVzdD1xfXJldHVybiBvfWZ1bmN0aW9uIGkocSxwLG8pe2lmKHApe3E9cS5yZXBsYWNlKC9eKCg8W14+XSs+fFx0KSspL2dtLGZ1bmN0aW9uKHIsdix1LHQpe3JldHVybiB2LnJlcGxhY2UoL1x0L2cscCl9KX1pZihvKXtxPXEucmVwbGFjZSgvXG4vZywiPGJyPiIpfXJldHVybiBxfWZ1bmN0aW9uIG0ocix1LHApe3ZhciB2PWgocixwKTt2YXIgdD1hKHIpO2lmKHQ9PSJuby1oaWdobGlnaHQiKXtyZXR1cm59dmFyIHc9dD9kKHQsdix0cnVlKTpnKHYpO3Q9dy5sYW5ndWFnZTt2YXIgbz1jKHIpO2lmKG8ubGVuZ3RoKXt2YXIgcT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKTtxLmlubmVySFRNTD13LnZhbHVlO3cudmFsdWU9aihvLGMocSksdil9dy52YWx1ZT1pKHcudmFsdWUsdSxwKTt2YXIgcz1yLmNsYXNzTmFtZTtpZighcy5tYXRjaCgiKFxcc3xeKShsYW5ndWFnZS0pPyIrdCsiKFxcc3wkKSIpKXtzPXM/KHMrIiAiK3QpOnR9ci5pbm5lckhUTUw9dy52YWx1ZTtyLmNsYXNzTmFtZT1zO3IucmVzdWx0PXtsYW5ndWFnZTp0LGt3Oncua2V5d29yZF9jb3VudCxyZTp3LnJ9O2lmKHcuc2Vjb25kX2Jlc3Qpe3Iuc2Vjb25kX2Jlc3Q9e2xhbmd1YWdlOncuc2Vjb25kX2Jlc3QubGFuZ3VhZ2Usa3c6dy5zZWNvbmRfYmVzdC5rZXl3b3JkX2NvdW50LHJlOncuc2Vjb25kX2Jlc3Qucn19fWZ1bmN0aW9uIG4oKXtpZihuLmNhbGxlZCl7cmV0dXJufW4uY2FsbGVkPXRydWU7QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKSxiKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbihvKXttKG8saGxqcy50YWJSZXBsYWNlKX0pfWZ1bmN0aW9uIGsoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsbixmYWxzZSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLG4sZmFsc2UpfXZhciBlPXt9O3RoaXMuTEFOR1VBR0VTPWU7dGhpcy5oaWdobGlnaHQ9ZDt0aGlzLmhpZ2hsaWdodEF1dG89Zzt0aGlzLmZpeE1hcmt1cD1pO3RoaXMuaGlnaGxpZ2h0QmxvY2s9bTt0aGlzLmluaXRIaWdobGlnaHRpbmc9bjt0aGlzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9azt0aGlzLklSPSJbYS16QS1aXVthLXpBLVowLTlfXSoiO3RoaXMuVUlSPSJbYS16QS1aX11bYS16QS1aMC05X10qIjt0aGlzLk5SPSJcXGJcXGQrKFxcLlxcZCspPyI7dGhpcy5DTlI9IihcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSI7dGhpcy5CTlI9IlxcYigwYlswMV0rKSI7dGhpcy5SU1I9IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfFxcLnwtfC09fC98Lz18Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+Pnw+Pnw+fFxcP3xcXFt8XFx7fFxcKHxcXF58XFxePXxcXHx8XFx8PXxcXHxcXHx8fiI7dGhpcy5CRT17YjoiXFxcXFtcXHNcXFNdIixyOjB9O3RoaXMuQVNNPXtjTjoic3RyaW5nIixiOiInIixlOiInIixpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5RU009e2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGk6IlxcbiIsYzpbdGhpcy5CRV0scjowfTt0aGlzLkNMQ009e2NOOiJjb21tZW50IixiOiIvLyIsZToiJCJ9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xcKiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9O3RoaXMuTk09e2NOOiJudW1iZXIiLGI6dGhpcy5OUixyOjB9O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLHI6MH07dGhpcy5CTk09e2NOOiJudW1iZXIiLGI6dGhpcy5CTlIscjowfTt0aGlzLlJFR0VYUF9NT0RFPXtjTjoicmVnZXhwIixiOi9cLy8sZTovXC9bZ2ltXSovLGk6L1xuLyxjOlt0aGlzLkJFLHtiOi9cWy8sZTovXF0vLHI6MCxjOlt0aGlzLkJFXX1dfTt0aGlzLmluaGVyaXQ9ZnVuY3Rpb24ocSxyKXt2YXIgbz17fTtmb3IodmFyIHAgaW4gcSl7b1twXT1xW3BdfWlmKHIpe2Zvcih2YXIgcCBpbiByKXtvW3BdPXJbcF19fXJldHVybiBvfX0oKTtobGpzLkxBTkdVQUdFUy5iYXNoPWZ1bmN0aW9uKGEpe3ZhciBjPXtjTjoidmFyaWFibGUiLGI6L1wkW1x3XGQjQF1bXHdcZF9dKi99O3ZhciBiPXtjTjoidmFyaWFibGUiLGI6L1wkXHsoLio/KVx9L307dmFyIGU9e2NOOiJzdHJpbmciLGI6LyIvLGU6LyIvLGM6W2EuQkUsYyxiLHtjTjoidmFyaWFibGUiLGI6L1wkXCgvLGU6L1wpLyxjOmEuQkV9XSxyOjB9O3ZhciBkPXtjTjoic3RyaW5nIixiOi8nLyxlOi8nLyxyOjB9O3JldHVybntsOi8tP1thLXpdKy8sazp7a2V5d29yZDoiaWYgdGhlbiBlbHNlIGVsaWYgZmkgZm9yIGJyZWFrIGNvbnRpbnVlIHdoaWxlIGluIGRvIGRvbmUgZXhpdCByZXR1cm4gc2V0IGRlY2xhcmUgY2FzZSBlc2FjIGV4cG9ydCBleGVjIixsaXRlcmFsOiJ0cnVlIGZhbHNlIixidWlsdF9pbjoicHJpbnRmIGVjaG8gcmVhZCBjZCBwd2QgcHVzaGQgcG9wZCBkaXJzIGxldCBldmFsIHVuc2V0IHR5cGVzZXQgcmVhZG9ubHkgZ2V0b3B0cyBzb3VyY2Ugc2hvcHQgY2FsbGVyIHR5cGUgaGFzaCBiaW5kIGhlbHAgc3VkbyIsb3BlcmF0b3I6Ii1uZSAtZXEgLWx0IC1ndCAtZiAtZCAtZSAtcyAtbCAtYSJ9LGM6W3tjTjoic2hlYmFuZyIsYjovXiMhW15cbl0rc2hccyokLyxyOjEwfSx7Y046ImZ1bmN0aW9uIixiOi9cd1tcd1xkX10qXHMqXChccypcKVxzKlx7LyxyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6L1x3W1x3XGRfXSovfV0scjowfSxhLkhDTSxhLk5NLGUsZCxjLGJdfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3M9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImFic3RyYWN0IGFzIGJhc2UgYm9vbCBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjaGVja2VkIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlY2ltYWwgZGVmYXVsdCBkZWxlZ2F0ZSBkbyBkb3VibGUgZWxzZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmYWxzZSBmaW5hbGx5IGZpeGVkIGZsb2F0IGZvciBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbmFtZXNwYWNlIG5ldyBudWxsIG9iamVjdCBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNieXRlIHNlYWxlZCBzaG9ydCBzaXplb2Ygc3RhY2thbGxvYyBzdGF0aWMgc3RyaW5nIHN0cnVjdCBzd2l0Y2ggdGhpcyB0aHJvdyB0cnVlIHRyeSB0eXBlb2YgdWludCB1bG9uZyB1bmNoZWNrZWQgdW5zYWZlIHVzaG9ydCB1c2luZyB2aXJ0dWFsIHZvbGF0aWxlIHZvaWQgd2hpbGUgYXN5bmMgYXdhaXQgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZnJvbSBnZXQgZ3JvdXAgaW50byBqb2luIGxldCBvcmRlcmJ5IHBhcnRpYWwgc2VsZWN0IHNldCB2YWx1ZSB2YXIgd2hlcmUgeWllbGQiLGM6W3tjTjoiY29tbWVudCIsYjoiLy8vIixlOiIkIixyQjp0cnVlLGM6W3tjTjoieG1sRG9jVGFnIixiOiIvLy98PCEtLXwtLT4ifSx7Y046InhtbERvY1RhZyIsYjoiPC8/IixlOiI+In1dfSxhLkNMQ00sYS5DQkxDTE0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGs6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHJlZ2lvbiBlbmRyZWdpb24gcHJhZ21hIGNoZWNrc3VtIn0se2NOOiJzdHJpbmciLGI6J0AiJyxlOiciJyxjOlt7YjonIiInfV19LGEuQVNNLGEuUVNNLGEuQ05NXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnJ1Ynk9ZnVuY3Rpb24oZSl7dmFyIGE9IlthLXpBLVpfXVthLXpBLVowLTlfXSooXFwhfFxcPyk/Ijt2YXIgaj0iW2EtekEtWl9dXFx3KlshPz1dP3xbLSt+XVxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFwqXFwqfFstLyslXiYqfmB8XXxcXFtcXF09PyI7dmFyIGc9e2tleXdvcmQ6ImFuZCBmYWxzZSB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIGlmIEJFR0lOIHJldHJ5IGVuZCBmb3IgdHJ1ZSBzZWxmIHdoZW4gbmV4dCB1bnRpbCBkbyBiZWdpbiB1bmxlc3MgRU5EIHJlc2N1ZSBuaWwgZWxzZSBicmVhayB1bmRlZiBub3Qgc3VwZXIgY2xhc3MgY2FzZSByZXF1aXJlIHlpZWxkIGFsaWFzIHdoaWxlIGVuc3VyZSBlbHNpZiBvciBpbmNsdWRlIn07dmFyIGM9e2NOOiJ5YXJkb2N0YWciLGI6IkBbQS1aYS16XSsifTt2YXIgaz1be2NOOiJjb21tZW50IixiOiIjIixlOiIkIixjOltjXX0se2NOOiJjb21tZW50IixiOiJeXFw9YmVnaW4iLGU6Il5cXD1lbmQiLGM6W2NdLHI6MTB9LHtjTjoiY29tbWVudCIsYjoiXl9fRU5EX18iLGU6IlxcbiQifV07dmFyIGQ9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsbDphLGs6Z307dmFyIGk9W2UuQkUsZF07dmFyIGI9W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOmkscjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcKCIsZToiXFwpIixjOml9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXFsiLGU6IlxcXSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/eyIsZToifSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/PCIsZToiPiIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8vIixlOiIvIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPyUiLGU6IiUiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LSIsZToiLSIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXHwiLGU6IlxcfCIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOi9cQlw/KFxcXGR7MSwzfXxcXHhbQS1GYS1mMC05XXsxLDJ9fFxcdVtBLUZhLWYwLTldezR9fFxcP1xTKVxiL31dO3ZhciBoPXtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6IiB8JHw7IixrOiJkZWYiLGM6W3tjTjoidGl0bGUiLGI6aixsOmEsazpnfSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGw6YSxrOmd9XS5jb25jYXQoayl9O3ZhciBmPWsuY29uY2F0KGIuY29uY2F0KFt7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIkfDsiLGs6ImNsYXNzIG1vZHVsZSIsYzpbe2NOOiJ0aXRsZSIsYjoiW0EtWmEtel9dXFx3Kig6OlxcdyspKihcXD98XFwhKT8iLHI6MH0se2NOOiJpbmhlcml0YW5jZSIsYjoiPFxccyoiLGM6W3tjTjoicGFyZW50IixiOiIoIitlLklSKyI6Oik/IitlLklSfV19XS5jb25jYXQoayl9LGgse2NOOiJjb25zdGFudCIsYjoiKDo6KT8oXFxiW0EtWl1cXHcqKDo6KT8pKyIscjowfSx7Y046InN5bWJvbCIsYjoiOiIsYzpiLmNvbmNhdChbe2I6an1dKSxyOjB9LHtjTjoic3ltYm9sIixiOmErIjoiLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2NOOiJ2YXJpYWJsZSIsYjoiKFxcJFxcVyl8KChcXCR8XFxAXFxAPykoXFx3KykpIn0se2I6IigiK2UuUlNSKyIpXFxzKiIsYzprLmNvbmNhdChbe2NOOiJyZWdleHAiLGI6Ii8iLGU6Ii9bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyeyIsZToifVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXCgiLGU6IlxcKVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXIhIixlOiIhW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlclxcWyIsZToiXFxdW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19XSkscjowfV0pKTtkLmM9ZjtoLmNbMV0uYz1mO3JldHVybntsOmEsazpnLGM6Zn19KGhsanMpO2hsanMuTEFOR1VBR0VTLmRpZmY9ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiY2h1bmsiLGI6Il5cXEBcXEAgK1xcLVxcZCssXFxkKyArXFwrXFxkKyxcXGQrICtcXEBcXEAkIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwqXFwqXFwqICtcXGQrLFxcZCsgK1xcKlxcKlxcKlxcKiQiLHI6MTB9LHtjTjoiY2h1bmsiLGI6Il5cXC1cXC1cXC0gK1xcZCssXFxkKyArXFwtXFwtXFwtXFwtJCIscjoxMH0se2NOOiJoZWFkZXIiLGI6IkluZGV4OiAiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiPT09PT0iLGU6Ij09PT09JCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwtXFwtXFwtIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCp7M30gIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCtcXCtcXCsiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXFwqezV9IixlOiJcXCp7NX0kIn0se2NOOiJhZGRpdGlvbiIsYjoiXlxcKyIsZToiJCJ9LHtjTjoiZGVsZXRpb24iLGI6Il5cXC0iLGU6IiQifSx7Y046ImNoYW5nZSIsYjoiXlxcISIsZToiJCJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmFzY3JpcHQ9ZnVuY3Rpb24oYSl7cmV0dXJue2s6e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHdpdGggdGhyb3cgY2FzZSBkZWZhdWx0IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGxldCB5aWVsZCBjb25zdCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCBOYU4gSW5maW5pdHkifSxjOlthLkFTTSxhLlFTTSxhLkNMQ00sYS5DQkxDTE0sYS5DTk0se2I6IigiK2EuUlNSKyJ8XFxiKGNhc2V8cmV0dXJufHRocm93KVxcYilcXHMqIixrOiJyZXR1cm4gdGhyb3cgY2FzZSIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUkVHRVhQX01PREUse2I6LzwvLGU6Lz47LyxzTDoieG1sIn1dLHI6MH0se2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZTovey8sazoiZnVuY3Rpb24iLGM6W3tjTjoidGl0bGUiLGI6L1tBLVphLXokX11bMC05QS1aYS16JF9dKi99LHtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6W2EuQ0xDTSxhLkNCTENMTV0saTovWyInXChdL31dLGk6L1xbfCUvfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy54bWw9ZnVuY3Rpb24oYSl7dmFyIGM9IltBLVphLXowLTlcXC5fOi1dKyI7dmFyIGI9e2VXOnRydWUscjowLGM6W3tjTjoiYXR0cmlidXRlIixiOmMscjowfSx7YjonPSInLHJCOnRydWUsZTonIicsYzpbe2NOOiJ2YWx1ZSIsYjonIicsZVc6dHJ1ZX1dfSx7YjoiPSciLHJCOnRydWUsZToiJyIsYzpbe2NOOiJ2YWx1ZSIsYjoiJyIsZVc6dHJ1ZX1dfSx7YjoiPSIsYzpbe2NOOiJ2YWx1ZSIsYjoiW15cXHMvPl0rIn1dfV19O3JldHVybntjSTp0cnVlLGM6W3tjTjoicGkiLGI6IjxcXD8iLGU6IlxcPz4iLHI6MTB9LHtjTjoiZG9jdHlwZSIsYjoiPCFET0NUWVBFIixlOiI+IixyOjEwLGM6W3tiOiJcXFsiLGU6IlxcXSJ9XX0se2NOOiJjb21tZW50IixiOiI8IS0tIixlOiItLT4iLHI6MTB9LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiIscjoxMH0se2NOOiJ0YWciLGI6IjxzdHlsZSg/PVxcc3w+fCQpIixlOiI+IixrOnt0aXRsZToic3R5bGUifSxjOltiXSxzdGFydHM6e2U6Ijwvc3R5bGU+IixyRTp0cnVlLHNMOiJjc3MifX0se2NOOiJ0YWciLGI6IjxzY3JpcHQoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InNjcmlwdCJ9LGM6W2JdLHN0YXJ0czp7ZToiPFwvc2NyaXB0PiIsckU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9fSx7YjoiPCUiLGU6IiU+IixzTDoidmJzY3JpcHQifSx7Y046InRhZyIsYjoiPC8/IixlOiIvPz4iLHI6MCxjOlt7Y046InRpdGxlIixiOiJbXiAvPjxdKyJ9LGJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYXJrZG93bj1mdW5jdGlvbihhKXtyZXR1cm57Yzpbe2NOOiJoZWFkZXIiLGI6Il4jezEsM30iLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXi4rP1xcbls9LV17Mix9JCJ9LHtiOiI8IixlOiI+IixzTDoieG1sIixyOjB9LHtjTjoiYnVsbGV0IixiOiJeKFsqKy1dfChcXGQrXFwuKSlcXHMrIn0se2NOOiJzdHJvbmciLGI6IlsqX117Mn0uKz9bKl9dezJ9In0se2NOOiJlbXBoYXNpcyIsYjoiXFwqLis/XFwqIn0se2NOOiJlbXBoYXNpcyIsYjoiXy4rP18iLHI6MH0se2NOOiJibG9ja3F1b3RlIixiOiJePlxccysiLGU6IiQifSx7Y046ImNvZGUiLGI6ImAuKz9gIn0se2NOOiJjb2RlIixiOiJeICAgICIsZToiJCIscjowfSx7Y046Imhvcml6b250YWxfcnVsZSIsYjoiXi17Myx9IixlOiIkIn0se2I6IlxcWy4rP1xcXVxcKC4rP1xcKSIsckI6dHJ1ZSxjOlt7Y046ImxpbmtfbGFiZWwiLGI6IlxcWy4rXFxdIn0se2NOOiJsaW5rX3VybCIsYjoiXFwoIixlOiJcXCkiLGVCOnRydWUsZUU6dHJ1ZX1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jc3M9ZnVuY3Rpb24oYSl7dmFyIGI9IlthLXpBLVotXVthLXpBLVowLTlfLV0qIjt2YXIgYz17Y046ImZ1bmN0aW9uIixiOmIrIlxcKCIsZToiXFwpIixjOlsic2VsZiIsYS5OTSxhLkFTTSxhLlFTTV19O3JldHVybntjSTp0cnVlLGk6Ils9L3wnXSIsYzpbYS5DQkxDTE0se2NOOiJpZCIsYjoiXFwjW0EtWmEtejAtOV8tXSsifSx7Y046ImNsYXNzIixiOiJcXC5bQS1aYS16MC05Xy1dKyIscjowfSx7Y046ImF0dHJfc2VsZWN0b3IiLGI6IlxcWyIsZToiXFxdIixpOiIkIn0se2NOOiJwc2V1ZG8iLGI6IjooOik/W2EtekEtWjAtOVxcX1xcLVxcK1xcKFxcKVxcXCJcXCddKyJ9LHtjTjoiYXRfcnVsZSIsYjoiQChmb250LWZhY2V8cGFnZSkiLGw6IlthLXotXSsiLGs6ImZvbnQtZmFjZSBwYWdlIn0se2NOOiJhdF9ydWxlIixiOiJAIixlOiJbeztdIixjOlt7Y046ImtleXdvcmQiLGI6L1xTKy99LHtiOi9ccy8sZVc6dHJ1ZSxlRTp0cnVlLHI6MCxjOltjLGEuQVNNLGEuUVNNLGEuTk1dfV19LHtjTjoidGFnIixiOmIscjowfSx7Y046InJ1bGVzIixiOiJ7IixlOiJ9IixpOiJbXlxcc10iLHI6MCxjOlthLkNCTENMTSx7Y046InJ1bGUiLGI6IlteXFxzXSIsckI6dHJ1ZSxlOiI7IixlVzp0cnVlLGM6W3tjTjoiYXR0cmlidXRlIixiOiJbQS1aXFxfXFwuXFwtXSsiLGU6IjoiLGVFOnRydWUsaToiW15cXHNdIixzdGFydHM6e2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxlRTp0cnVlLGM6W2MsYS5OTSxhLlFTTSxhLkFTTSxhLkNCTENMTSx7Y046ImhleGNvbG9yIixiOiIjWzAtOUEtRmEtZl0rIn0se2NOOiJpbXBvcnRhbnQiLGI6IiFpbXBvcnRhbnQifV19fV19XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaHR0cD1mdW5jdGlvbihhKXtyZXR1cm57aToiXFxTIixjOlt7Y046InN0YXR1cyIsYjoiXkhUVFAvWzAtOVxcLl0rIixlOiIkIixjOlt7Y046Im51bWJlciIsYjoiXFxiXFxkezN9XFxiIn1dfSx7Y046InJlcXVlc3QiLGI6Il5bQS1aXSsgKC4qPykgSFRUUC9bMC05XFwuXSskIixyQjp0cnVlLGU6IiQiLGM6W3tjTjoic3RyaW5nIixiOiIgIixlOiIgIixlQjp0cnVlLGVFOnRydWV9XX0se2NOOiJhdHRyaWJ1dGUiLGI6Il5cXHciLGU6IjogIixlRTp0cnVlLGk6IlxcbnxcXHN8PSIsc3RhcnRzOntjTjoic3RyaW5nIixlOiIkIn19LHtiOiJcXG5cXG4iLHN0YXJ0czp7c0w6IiIsZVc6dHJ1ZX19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmE9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkIGVudW0gZWxzZSBicmVhayB0cmFuc2llbnQgbmV3IGNhdGNoIGluc3RhbmNlb2YgYnl0ZSBzdXBlciB2b2xhdGlsZSBjYXNlIGFzc2VydCBzaG9ydCBwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIixjOlt7Y046ImphdmFkb2MiLGI6Ii9cXCpcXCoiLGU6IlxcKi8iLGM6W3tjTjoiamF2YWRvY3RhZyIsYjoiKF58XFxzKUBbQS1aYS16XSsifV0scjoxMH0sYS5DTENNLGEuQ0JMQ0xNLGEuQVNNLGEuUVNNLHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIGludGVyZmFjZSIsZUU6dHJ1ZSxpOiI6IixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyBpbXBsZW1lbnRzIixyOjEwfSx7Y046InRpdGxlIixiOmEuVUlSfV19LGEuQ05NLHtjTjoiYW5ub3RhdGlvbiIsYjoiQFtBLVphLXpdKyJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnBocD1mdW5jdGlvbihhKXt2YXIgZT17Y046InZhcmlhYmxlIixiOiJcXCQrW2EtekEtWl9ceDdmLVx4ZmZdW2EtekEtWjAtOV9ceDdmLVx4ZmZdKiJ9O3ZhciBiPVthLmluaGVyaXQoYS5BU00se2k6bnVsbH0pLGEuaW5oZXJpdChhLlFTTSx7aTpudWxsfSkse2NOOiJzdHJpbmciLGI6J2IiJyxlOiciJyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6ImInIixlOiInIixjOlthLkJFXX1dO3ZhciBjPVthLkJOTSxhLkNOTV07dmFyIGQ9e2NOOiJ0aXRsZSIsYjphLlVJUn07cmV0dXJue2NJOnRydWUsbDphLlVJUixrOiJhbmQgaW5jbHVkZV9vbmNlIGxpc3QgYWJzdHJhY3QgZ2xvYmFsIHByaXZhdGUgZWNobyBpbnRlcmZhY2UgYXMgc3RhdGljIGVuZHN3aXRjaCBhcnJheSBudWxsIGlmIGVuZHdoaWxlIG9yIGNvbnN0IGZvciBlbmRmb3JlYWNoIHNlbGYgdmFyIHdoaWxlIGlzc2V0IHB1YmxpYyBwcm90ZWN0ZWQgZXhpdCBmb3JlYWNoIHRocm93IGVsc2VpZiBpbmNsdWRlIF9fRklMRV9fIGVtcHR5IHJlcXVpcmVfb25jZSBkbyB4b3IgcmV0dXJuIGltcGxlbWVudHMgcGFyZW50IGNsb25lIHVzZSBfX0NMQVNTX18gX19MSU5FX18gZWxzZSBicmVhayBwcmludCBldmFsIG5ldyBjYXRjaCBfX01FVEhPRF9fIGNhc2UgZXhjZXB0aW9uIGRlZmF1bHQgZGllIHJlcXVpcmUgX19GVU5DVElPTl9fIGVuZGRlY2xhcmUgZmluYWwgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIGVuZGZvciBlbmRpZiBkZWNsYXJlIHVuc2V0IHRydWUgZmFsc2UgbmFtZXNwYWNlIHRyYWl0IGdvdG8gaW5zdGFuY2VvZiBpbnN0ZWFkb2YgX19ESVJfXyBfX05BTUVTUEFDRV9fIHlpZWxkIGZpbmFsbHkiLGM6W2EuQ0xDTSxhLkhDTSx7Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8iLGM6W3tjTjoicGhwZG9jIixiOiJcXHNAW0EtWmEtel0rIn1dfSx7Y046ImNvbW1lbnQiLGI6Il9faGFsdF9jb21waWxlci4rPzsiLGVXOnRydWUsazoiX19oYWx0X2NvbXBpbGVyIixsOmEuVUlSfSx7Y046InN0cmluZyIsYjoiPDw8WydcIl0/XFx3K1snXCJdPyQiLGU6Il5cXHcrOyIsYzpbYS5CRV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiI8XFw/cGhwIixyOjEwfSx7Y046InByZXByb2Nlc3NvciIsYjoiXFw/PiJ9LGUse2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZToieyIsazoiZnVuY3Rpb24iLGk6IlxcJHxcXFt8JSIsYzpbZCx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6WyJzZWxmIixlLGEuQ0JMQ0xNXS5jb25jYXQoYikuY29uY2F0KGMpfV19LHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIixpOiJbOlxcKFxcJF0iLGM6W3tiV0s6dHJ1ZSxlVzp0cnVlLGs6ImV4dGVuZHMiLGM6W2RdfSxkXX0se2I6Ij0+In1dLmNvbmNhdChiKS5jb25jYXQoYyl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5weXRob249ZnVuY3Rpb24oYSl7dmFyIGY9e2NOOiJwcm9tcHQiLGI6L14oPj4+fFwuXC5cLikgL307dmFyIGM9W3tjTjoic3RyaW5nIixiOi8odXxiKT9yPycnJy8sZTovJycnLyxjOltmXSxyOjEwfSx7Y046InN0cmluZyIsYjovKHV8Yik/cj8iIiIvLGU6LyIiIi8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpJy8sZTovJy8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpIi8sZTovIi8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6LyhifGJyKScvLGU6LycvLGM6W2EuQkVdfSx7Y046InN0cmluZyIsYjovKGJ8YnIpIi8sZTovIi8sYzpbYS5CRV19XS5jb25jYXQoW2EuQVNNLGEuUVNNXSk7dmFyIGU9e2NOOiJ0aXRsZSIsYjphLlVJUn07dmFyIGQ9e2NOOiJwYXJhbXMiLGI6L1woLyxlOi9cKS8sYzpbInNlbGYiLGEuQ05NLGZdLmNvbmNhdChjKX07dmFyIGI9e2JXSzp0cnVlLGU6LzovLGk6L1skez07XG5dLyxjOltlLGRdLHI6MTB9O3JldHVybntrOntrZXl3b3JkOiJhbmQgZWxpZiBpcyBnbG9iYWwgYXMgaW4gaWYgZnJvbSByYWlzZSBmb3IgZXhjZXB0IGZpbmFsbHkgcHJpbnQgaW1wb3J0IHBhc3MgcmV0dXJuIGV4ZWMgZWxzZSBicmVhayBub3Qgd2l0aCBjbGFzcyBhc3NlcnQgeWllbGQgdHJ5IHdoaWxlIGNvbnRpbnVlIGRlbCBvciBkZWYgbGFtYmRhIG5vbmxvY2FsfDEwIE5vbmUgVHJ1ZSBGYWxzZSIsYnVpbHRfaW46IkVsbGlwc2lzIE5vdEltcGxlbWVudGVkIn0saTovKDxcL3wtPnxcPykvLGM6Yy5jb25jYXQoW2YsYS5IQ00sYS5pbmhlcml0KGIse2NOOiJmdW5jdGlvbiIsazoiZGVmIn0pLGEuaW5oZXJpdChiLHtjTjoiY2xhc3MiLGs6ImNsYXNzIn0pLGEuQ05NLHtjTjoiZGVjb3JhdG9yIixiOi9ALyxlOi8kL30se2I6L1xiKHByaW50fGV4ZWMpXCgvfV0pfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuc3FsPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGM6W3tjTjoib3BlcmF0b3IiLGI6IihiZWdpbnxlbmR8c3RhcnR8Y29tbWl0fHJvbGxiYWNrfHNhdmVwb2ludHxsb2NrfGFsdGVyfGNyZWF0ZXxkcm9wfHJlbmFtZXxjYWxsfGRlbGV0ZXxkb3xoYW5kbGVyfGluc2VydHxsb2FkfHJlcGxhY2V8c2VsZWN0fHRydW5jYXRlfHVwZGF0ZXxzZXR8c2hvd3xwcmFnbWF8Z3JhbnQpXFxiKD8hOikiLGU6IjsiLGVXOnRydWUsazp7a2V5d29yZDoiYWxsIHBhcnRpYWwgZ2xvYmFsIG1vbnRoIGN1cnJlbnRfdGltZXN0YW1wIHVzaW5nIGdvIHJldm9rZSBzbWFsbGludCBpbmRpY2F0b3IgZW5kLWV4ZWMgZGlzY29ubmVjdCB6b25lIHdpdGggY2hhcmFjdGVyIGFzc2VydGlvbiB0byBhZGQgY3VycmVudF91c2VyIHVzYWdlIGlucHV0IGxvY2FsIGFsdGVyIG1hdGNoIGNvbGxhdGUgcmVhbCB0aGVuIHJvbGxiYWNrIGdldCByZWFkIHRpbWVzdGFtcCBzZXNzaW9uX3VzZXIgbm90IGludGVnZXIgYml0IHVuaXF1ZSBkYXkgbWludXRlIGRlc2MgaW5zZXJ0IGV4ZWN1dGUgbGlrZSBpbGlrZXwyIGxldmVsIGRlY2ltYWwgZHJvcCBjb250aW51ZSBpc29sYXRpb24gZm91bmQgd2hlcmUgY29uc3RyYWludHMgZG9tYWluIHJpZ2h0IG5hdGlvbmFsIHNvbWUgbW9kdWxlIHRyYW5zYWN0aW9uIHJlbGF0aXZlIHNlY29uZCBjb25uZWN0IGVzY2FwZSBjbG9zZSBzeXN0ZW1fdXNlciBmb3IgZGVmZXJyZWQgc2VjdGlvbiBjYXN0IGN1cnJlbnQgc3Fsc3RhdGUgYWxsb2NhdGUgaW50ZXJzZWN0IGRlYWxsb2NhdGUgbnVtZXJpYyBwdWJsaWMgcHJlc2VydmUgZnVsbCBnb3RvIGluaXRpYWxseSBhc2Mgbm8ga2V5IG91dHB1dCBjb2xsYXRpb24gZ3JvdXAgYnkgdW5pb24gc2Vzc2lvbiBib3RoIGxhc3QgbGFuZ3VhZ2UgY29uc3RyYWludCBjb2x1bW4gb2Ygc3BhY2UgZm9yZWlnbiBkZWZlcnJhYmxlIHByaW9yIGNvbm5lY3Rpb24gdW5rbm93biBhY3Rpb24gY29tbWl0IHZpZXcgb3IgZmlyc3QgaW50byBmbG9hdCB5ZWFyIHByaW1hcnkgY2FzY2FkZWQgZXhjZXB0IHJlc3RyaWN0IHNldCByZWZlcmVuY2VzIG5hbWVzIHRhYmxlIG91dGVyIG9wZW4gc2VsZWN0IHNpemUgYXJlIHJvd3MgZnJvbSBwcmVwYXJlIGRpc3RpbmN0IGxlYWRpbmcgY3JlYXRlIG9ubHkgbmV4dCBpbm5lciBhdXRob3JpemF0aW9uIHNjaGVtYSBjb3JyZXNwb25kaW5nIG9wdGlvbiBkZWNsYXJlIHByZWNpc2lvbiBpbW1lZGlhdGUgZWxzZSB0aW1lem9uZV9taW51dGUgZXh0ZXJuYWwgdmFyeWluZyB0cmFuc2xhdGlvbiB0cnVlIGNhc2UgZXhjZXB0aW9uIGpvaW4gaG91ciBkZWZhdWx0IGRvdWJsZSBzY3JvbGwgdmFsdWUgY3Vyc29yIGRlc2NyaXB0b3IgdmFsdWVzIGRlYyBmZXRjaCBwcm9jZWR1cmUgZGVsZXRlIGFuZCBmYWxzZSBpbnQgaXMgZGVzY3JpYmUgY2hhciBhcyBhdCBpbiB2YXJjaGFyIG51bGwgdHJhaWxpbmcgYW55IGFic29sdXRlIGN1cnJlbnRfdGltZSBlbmQgZ3JhbnQgcHJpdmlsZWdlcyB3aGVuIGNyb3NzIGNoZWNrIHdyaXRlIGN1cnJlbnRfZGF0ZSBwYWQgYmVnaW4gdGVtcG9yYXJ5IGV4ZWMgdGltZSB1cGRhdGUgY2F0YWxvZyB1c2VyIHNxbCBkYXRlIG9uIGlkZW50aXR5IHRpbWV6b25lX2hvdXIgbmF0dXJhbCB3aGVuZXZlciBpbnRlcnZhbCB3b3JrIG9yZGVyIGNhc2NhZGUgZGlhZ25vc3RpY3MgbmNoYXIgaGF2aW5nIGxlZnQgY2FsbCBkbyBoYW5kbGVyIGxvYWQgcmVwbGFjZSB0cnVuY2F0ZSBzdGFydCBsb2NrIHNob3cgcHJhZ21hIGV4aXN0cyBudW1iZXIgdHJpZ2dlciBpZiBiZWZvcmUgYWZ0ZXIgZWFjaCByb3ciLGFnZ3JlZ2F0ZToiY291bnQgc3VtIG1pbiBtYXggYXZnIn0sYzpbe2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2EuQkUse2I6IicnIn1dLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2EuQkUse2I6JyIiJ31dLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6W2EuQkVdfSxhLkNOTV19LGEuQ0JMQ0xNLHtjTjoiY29tbWVudCIsYjoiLS0iLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5pbmk9ZnVuY3Rpb24oYSl7cmV0dXJue2NJOnRydWUsaToiW15cXHNdIixjOlt7Y046ImNvbW1lbnQiLGI6IjsiLGU6IiQifSx7Y046InRpdGxlIixiOiJeXFxbIixlOiJcXF0ifSx7Y046InNldHRpbmciLGI6Il5bYS16MC05XFxbXFxdXy1dK1sgXFx0XSo9WyBcXHRdKiIsZToiJCIsYzpbe2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxrOiJvbiBvZmYgdHJ1ZSBmYWxzZSB5ZXMgbm8iLGM6W2EuUVNNLGEuTk1dLHI6MH1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKGUpe3ZhciBhPSJnZXRwd2VudCBnZXRzZXJ2ZW50IHF1b3RlbWV0YSBtc2dyY3Ygc2NhbGFyIGtpbGwgZGJtY2xvc2UgdW5kZWYgbGMgbWEgc3lzd3JpdGUgdHIgc2VuZCB1bWFzayBzeXNvcGVuIHNobXdyaXRlIHZlYyBxeCB1dGltZSBsb2NhbCBvY3Qgc2VtY3RsIGxvY2FsdGltZSByZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXFmaWxlbm8gcXcgZW5kcHJvdG9lbnQgd2FpdCBzZXRob3N0ZW50IGJsZXNzIHN8MCBvcGVuZGlyIGNvbnRpbnVlIGVhY2ggc2xlZXAgZW5kZ3JlbnQgc2h1dGRvd24gZHVtcCBjaG9tcCBjb25uZWN0IGdldHNvY2tuYW1lIGRpZSBzb2NrZXRwYWlyIGNsb3NlIGZsb2NrIGV4aXN0cyBpbmRleCBzaG1nZXRzdWIgZm9yIGVuZHB3ZW50IHJlZG8gbHN0YXQgbXNnY3RsIHNldHBncnAgYWJzIGV4aXQgc2VsZWN0IHByaW50IHJlZiBnZXRob3N0YnlhZGRyIHVuc2hpZnQgZmNudGwgc3lzY2FsbCBnb3RvIGdldG5ldGJ5YWRkciBqb2luIGdtdGltZSBzeW1saW5rIHNlbWdldCBzcGxpY2UgeHwwIGdldHBlZXJuYW1lIHJlY3YgbG9nIHNldHNvY2tvcHQgY29zIGxhc3QgcmV2ZXJzZSBnZXRob3N0YnluYW1lIGdldGdybmFtIHN0dWR5IGZvcm1saW5lIGVuZGhvc3RlbnQgdGltZXMgY2hvcCBsZW5ndGggZ2V0aG9zdGVudCBnZXRuZXRlbnQgcGFjayBnZXRwcm90b2VudCBnZXRzZXJ2YnluYW1lIHJhbmQgbWtkaXIgcG9zIGNobW9kIHl8MCBzdWJzdHIgZW5kbmV0ZW50IHByaW50ZiBuZXh0IG9wZW4gbXNnc25kIHJlYWRkaXIgdXNlIHVubGluayBnZXRzb2Nrb3B0IGdldHByaW9yaXR5IHJpbmRleCB3YW50YXJyYXkgaGV4IHN5c3RlbSBnZXRzZXJ2Ynlwb3J0IGVuZHNlcnZlbnQgaW50IGNociB1bnRpZSBybWRpciBwcm90b3R5cGUgdGVsbCBsaXN0ZW4gZm9yayBzaG1yZWFkIHVjZmlyc3Qgc2V0cHJvdG9lbnQgZWxzZSBzeXNzZWVrIGxpbmsgZ2V0Z3JnaWQgc2htY3RsIHdhaXRwaWQgdW5wYWNrIGdldG5ldGJ5bmFtZSByZXNldCBjaGRpciBncmVwIHNwbGl0IHJlcXVpcmUgY2FsbGVyIGxjZmlyc3QgdW50aWwgd2FybiB3aGlsZSB2YWx1ZXMgc2hpZnQgdGVsbGRpciBnZXRwd3VpZCBteSBnZXRwcm90b2J5bnVtYmVyIGRlbGV0ZSBhbmQgc29ydCB1YyBkZWZpbmVkIHNyYW5kIGFjY2VwdCBwYWNrYWdlIHNlZWtkaXIgZ2V0cHJvdG9ieW5hbWUgc2Vtb3Agb3VyIHJlbmFtZSBzZWVrIGlmIHF8MCBjaHJvb3Qgc3lzcmVhZCBzZXRwd2VudCBubyBjcnlwdCBnZXRjIGNob3duIHNxcnQgd3JpdGUgc2V0bmV0ZW50IHNldHByaW9yaXR5IGZvcmVhY2ggdGllIHNpbiBtc2dnZXQgbWFwIHN0YXQgZ2V0bG9naW4gdW5sZXNzIGVsc2lmIHRydW5jYXRlIGV4ZWMga2V5cyBnbG9iIHRpZWQgY2xvc2VkaXJpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlIGF0YW4yIGdldGdyZW50IGV4cCB0aW1lIHB1c2ggc2V0Z3JlbnQgZ3QgbHQgb3IgbmUgbXwwIGJyZWFrIGdpdmVuIHNheSBzdGF0ZSB3aGVuIjt2YXIgZD17Y046InN1YnN0IixiOiJbJEBdXFx7IixlOiJcXH0iLGs6YSxyOjEwfTt2YXIgYj17Y046InZhcmlhYmxlIixiOiJcXCRcXGQifTt2YXIgaT17Y046InZhcmlhYmxlIixiOiJbXFwkXFwlXFxAXFwqXShcXF5cXHdcXGJ8I1xcdysoXFw6XFw6XFx3KykqfFteXFxzXFx3e118e1xcdyt9fFxcdysoXFw6XFw6XFx3KikqKSJ9O3ZhciBmPVtlLkJFLGQsYixpXTt2YXIgaD17YjoiLT4iLGM6W3tiOmUuSVJ9LHtiOiJ7IixlOiJ9In1dfTt2YXIgZz17Y046ImNvbW1lbnQiLGI6Il4oX19FTkRfX3xfX0RBVEFfXykiLGU6IlxcbiQiLHI6NX07dmFyIGM9W2IsaSxlLkhDTSxnLHtjTjoiY29tbWVudCIsYjoiXlxcPVxcdyIsZToiXFw9Y3V0IixlVzp0cnVlfSxoLHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXCgiLGU6IlxcKSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcWyIsZToiXFxdIixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXHwiLGU6IlxcfCIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcPCIsZToiXFw+IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicXdcXHMrcSIsZToicSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2UuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6ZixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFXX0se2NOOiJzdHJpbmciLGI6IntcXHcrfSIscjowfSx7Y046InN0cmluZyIsYjoiLT9cXHcrXFxzKlxcPVxcPiIscjowfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscjowfSx7YjoiKCIrZS5SU1IrInxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXGIpXFxzKiIsazoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscjowLGM6W2UuSENNLGcse2NOOiJyZWdleHAiLGI6IihzfHRyfHkpLyhcXFxcLnxbXi9dKSovKFxcXFwufFteL10pKi9bYS16XSoiLHI6MTB9LHtjTjoicmVnZXhwIixiOiIobXxxcik/LyIsZToiL1thLXpdKiIsYzpbZS5CRV0scjowfV19LHtjTjoic3ViIixiV0s6dHJ1ZSxlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsazoic3ViIixyOjV9LHtjTjoib3BlcmF0b3IiLGI6Ii1cXHdcXGIiLHI6MH1dO2QuYz1jO2guY1sxXS5jPWM7cmV0dXJue2s6YSxjOmN9fShobGpzKTtobGpzLkxBTkdVQUdFUy5vYmplY3RpdmVjPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNhdGNoIGV4cG9ydCBzaXplb2YgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgZm9yIHVuaW9uIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIG11dGFibGUgaWYgcHVibGljIGRvIHJldHVybiBnb3RvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiBhc20gY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSB0aHJvdyByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHdjaGFyX3QgaW5saW5lIHJlYWRvbmx5IGFzc2lnbiBwcm9wZXJ0eSBzZWxmIHN5bmNocm9uaXplZCBlbmQgc3ludGhlc2l6ZSBpZCBvcHRpb25hbCByZXF1aXJlZCBub25hdG9taWMgc3VwZXIgdW5pY2hhciBmaW5hbGx5IGR5bmFtaWMgSUJPdXRsZXQgSUJBY3Rpb24gc2VsZWN0b3Igc3Ryb25nIHdlYWsgcmVhZG9ubHkiLGxpdGVyYWw6ImZhbHNlIHRydWUgRkFMU0UgVFJVRSBuaWwgWUVTIE5PIE5VTEwiLGJ1aWx0X2luOiJOU1N0cmluZyBOU0RpY3Rpb25hcnkgQ0dSZWN0IENHUG9pbnQgVUlCdXR0b24gVUlMYWJlbCBVSVRleHRWaWV3IFVJV2ViVmlldyBNS01hcFZpZXcgVUlTZWdtZW50ZWRDb250cm9sIE5TT2JqZWN0IFVJVGFibGVWaWV3RGVsZWdhdGUgVUlUYWJsZVZpZXdEYXRhU291cmNlIE5TVGhyZWFkIFVJQWN0aXZpdHlJbmRpY2F0b3IgVUlUYWJiYXIgVUlUb29sQmFyIFVJQmFyQnV0dG9uSXRlbSBVSUltYWdlVmlldyBOU0F1dG9yZWxlYXNlUG9vbCBVSVRhYmxlVmlldyBCT09MIE5TSW50ZWdlciBDR0Zsb2F0IE5TRXhjZXB0aW9uIE5TTG9nIE5TTXV0YWJsZVN0cmluZyBOU011dGFibGVBcnJheSBOU011dGFibGVEaWN0aW9uYXJ5IE5TVVJMIE5TSW5kZXhQYXRoIENHU2l6ZSBVSVRhYmxlVmlld0NlbGwgVUlWaWV3IFVJVmlld0NvbnRyb2xsZXIgVUlOYXZpZ2F0aW9uQmFyIFVJTmF2aWdhdGlvbkNvbnRyb2xsZXIgVUlUYWJCYXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXIgVUlQb3BvdmVyQ29udHJvbGxlckRlbGVnYXRlIFVJSW1hZ2UgTlNOdW1iZXIgVUlTZWFyY2hCYXIgTlNGZXRjaGVkUmVzdWx0c0NvbnRyb2xsZXIgTlNGZXRjaGVkUmVzdWx0c0NoYW5nZVR5cGUgVUlTY3JvbGxWaWV3IFVJU2Nyb2xsVmlld0RlbGVnYXRlIFVJRWRnZUluc2V0cyBVSUNvbG9yIFVJRm9udCBVSUFwcGxpY2F0aW9uIE5TTm90Rm91bmQgTlNOb3RpZmljYXRpb25DZW50ZXIgTlNOb3RpZmljYXRpb24gVUlMb2NhbE5vdGlmaWNhdGlvbiBOU0J1bmRsZSBOU0ZpbGVNYW5hZ2VyIE5TVGltZUludGVydmFsIE5TRGF0ZSBOU0NhbGVuZGFyIE5TVXNlckRlZmF1bHRzIFVJV2luZG93IE5TUmFuZ2UgTlNBcnJheSBOU0Vycm9yIE5TVVJMUmVxdWVzdCBOU1VSTENvbm5lY3Rpb24gVUlJbnRlcmZhY2VPcmllbnRhdGlvbiBNUE1vdmllUGxheWVyQ29udHJvbGxlciBkaXNwYXRjaF9vbmNlX3QgZGlzcGF0Y2hfcXVldWVfdCBkaXNwYXRjaF9zeW5jIGRpc3BhdGNoX2FzeW5jIGRpc3BhdGNoX29uY2UifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5DTk0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixpOiJbXlxcXFxdW14nXSJ9LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjaW1wb3J0IixlOiIkIixjOlt7Y046InRpdGxlIixiOiciJyxlOiciJ30se2NOOiJ0aXRsZSIsYjoiPCIsZToiPiJ9XX0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQifSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIoe3wkKSIsazoiaW50ZXJmYWNlIGNsYXNzIHByb3RvY29sIGltcGxlbWVudGF0aW9uIixjOlt7Y046ImlkIixiOmEuVUlSfV19LHtjTjoidmFyaWFibGUiLGI6IlxcLiIrYS5VSVIscjowfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jb2ZmZWVzY3JpcHQ9ZnVuY3Rpb24oYyl7dmFyIGI9e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHRoZW4gdW5sZXNzIHVudGlsIGxvb3Agb2YgYnkgd2hlbiBhbmQgb3IgaXMgaXNudCBub3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgeWVzIG5vIG9uIG9mZiIscmVzZXJ2ZWQ6ImNhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgdm9pZCB3aXRoIGNvbnN0IGxldCBlbnVtIGV4cG9ydCBpbXBvcnQgbmF0aXZlIF9faGFzUHJvcCBfX2V4dGVuZHMgX19zbGljZSBfX2JpbmQgX19pbmRleE9mIixidWlsdF9pbjoibnBtIHJlcXVpcmUgY29uc29sZSBwcmludCBtb2R1bGUgZXhwb3J0cyBnbG9iYWwgd2luZG93IGRvY3VtZW50In07dmFyIGE9IltBLVphLXokX11bMC05QS1aYS16JF9dKiI7dmFyIGY9e2NOOiJ0aXRsZSIsYjphfTt2YXIgZT17Y046InN1YnN0IixiOiIjXFx7IixlOiJ9IixrOmIsfTt2YXIgZD1bYy5CTk0sYy5pbmhlcml0KGMuQ05NLHtzdGFydHM6e2U6IihcXHMqLyk/IixyOjB9fSkse2NOOiJzdHJpbmciLGI6IicnJyIsZToiJycnIixjOltjLkJFXX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2MuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyIiIicsZTonIiIiJyxjOltjLkJFLGVdfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbYy5CRSxlXSxyOjB9LHtjTjoicmVnZXhwIixiOiIvLy8iLGU6Ii8vLyIsYzpbYy5IQ01dfSx7Y046InJlZ2V4cCIsYjoiLy9bZ2ltXSoiLHI6MH0se2NOOiJyZWdleHAiLGI6Ii9cXFMoXFxcXC58W15cXG5dKSo/L1tnaW1dKig/PVxcc3xcXFd8JCkifSx7Y046InByb3BlcnR5IixiOiJAIithfSx7YjoiYCIsZToiYCIsZUI6dHJ1ZSxlRTp0cnVlLHNMOiJqYXZhc2NyaXB0In1dO2UuYz1kO3JldHVybntrOmIsYzpkLmNvbmNhdChbe2NOOiJjb21tZW50IixiOiIjIyMiLGU6IiMjIyJ9LGMuSENNLHtjTjoiZnVuY3Rpb24iLGI6IigiK2ErIlxccyo9XFxzKik/KFxcKC4qXFwpKT9cXHMqWy09XT4iLGU6IlstPV0+IixyQjp0cnVlLGM6W2Yse2NOOiJwYXJhbXMiLGI6IlxcKCIsckI6dHJ1ZSxjOlt7YjovXCgvLGU6L1wpLyxrOmIsYzpbInNlbGYiXS5jb25jYXQoZCl9XX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxrOiJjbGFzcyIsZToiJCIsaToiWzpcXFtcXF1dIixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyIsZVc6dHJ1ZSxpOiI6IixjOltmXX0sZl19LHtjTjoiYXR0cmlidXRlIixiOmErIjoiLGU6IjoiLHJCOnRydWUsZUU6dHJ1ZX1dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLm5naW54PWZ1bmN0aW9uKGIpe3ZhciBjPVt7Y046InZhcmlhYmxlIixiOiJcXCRcXGQrIn0se2NOOiJ2YXJpYWJsZSIsYjoiXFwkeyIsZToifSJ9LHtjTjoidmFyaWFibGUiLGI6IltcXCRcXEBdIitiLlVJUn1dO3ZhciBhPXtlVzp0cnVlLGw6IlthLXovX10rIixrOntidWlsdF9pbjoib24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgc2VsZWN0IGJyZWFrIGxhc3QgcGVybWFuZW50IHJlZGlyZWN0IGtxdWV1ZSBydHNpZyBlcG9sbCBwb2xsIC9kZXYvcG9sbCJ9LHI6MCxpOiI9PiIsYzpbYi5IQ00se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2IuQkVdLmNvbmNhdChjKSxyOjB9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InVybCIsYjoiKFthLXpdKyk6LyIsZToiXFxzIixlVzp0cnVlLGVFOnRydWV9LHtjTjoicmVnZXhwIixiOiJcXHNcXF4iLGU6Ilxcc3x7fDsiLHJFOnRydWUsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiflxcKj9cXHMrIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IlxcKihcXC5bYS16XFwtXSspKyIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiKFthLXpcXC1dK1xcLikrXFwqIixjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoibnVtYmVyIixiOiJcXGJcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSg6XFxkezEsNX0pP1xcYiJ9LHtjTjoibnVtYmVyIixiOiJcXGJcXGQrW2tLbU1nR2RzaGR3eV0qXFxiIixyOjB9XS5jb25jYXQoYyl9O3JldHVybntjOltiLkhDTSx7YjpiLlVJUisiXFxzIixlOiI7fHsiLHJCOnRydWUsYzpbe2NOOiJ0aXRsZSIsYjpiLlVJUixzdGFydHM6YX1dLHI6MH1dLGk6IlteXFxzXFx9XSJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5qc29uPWZ1bmN0aW9uKGEpe3ZhciBlPXtsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwifTt2YXIgZD1bYS5RU00sYS5DTk1dO3ZhciBjPXtjTjoidmFsdWUiLGU6IiwiLGVXOnRydWUsZUU6dHJ1ZSxjOmQsazplfTt2YXIgYj17YjoieyIsZToifSIsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6J1xccyoiJyxlOiciXFxzKjpcXHMqJyxlQjp0cnVlLGVFOnRydWUsYzpbYS5CRV0saToiXFxuIixzdGFydHM6Y31dLGk6IlxcUyJ9O3ZhciBmPXtiOiJcXFsiLGU6IlxcXSIsYzpbYS5pbmhlcml0KGMse2NOOm51bGx9KV0saToiXFxTIn07ZC5zcGxpY2UoZC5sZW5ndGgsMCxiLGYpO3JldHVybntjOmQsazplLGk6IlxcUyJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5hcGFjaGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJudW1iZXIiLGI6IltcXCQlXVxcZCsifTtyZXR1cm57Y0k6dHJ1ZSxjOlthLkhDTSx7Y046InRhZyIsYjoiPC8/IixlOiI+In0se2NOOiJrZXl3b3JkIixiOi9cdysvLHI6MCxrOntjb21tb246Im9yZGVyIGRlbnkgYWxsb3cgc2V0ZW52IHJld3JpdGVydWxlIHJld3JpdGVlbmdpbmUgcmV3cml0ZWNvbmQgZG9jdW1lbnRyb290IHNldGhhbmRsZXIgZXJyb3Jkb2N1bWVudCBsb2FkbW9kdWxlIG9wdGlvbnMgaGVhZGVyIGxpc3RlbiBzZXJ2ZXJyb290IHNlcnZlcm5hbWUifSxzdGFydHM6e2U6LyQvLHI6MCxrOntsaXRlcmFsOiJvbiBvZmYgYWxsIn0sYzpbe2NOOiJzcWJyYWNrZXQiLGI6Ilxcc1xcWyIsZToiXFxdJCJ9LHtjTjoiY2JyYWNrZXQiLGI6IltcXCQlXVxceyIsZToiXFx9IixjOlsic2VsZiIsYl19LGIsYS5RU01dfX1dLGk6L1xTL319KGhsanMpO2hsanMuTEFOR1VBR0VTLmNwcD1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiZmFsc2UgaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBzdHJ1Y3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSB1bnNpZ25lZCBsb25nIHRocm93IHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgZG8gcmV0dXJuIGdvdG8gYXV0byB2b2lkIGVudW0gZWxzZSBicmVhayBuZXcgZXh0ZXJuIHVzaW5nIHRydWUgY2xhc3MgYXNtIGNhc2UgdHlwZWlkIHNob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSBkZWxldGUgYWxpZ25vZiBjaGFyMTZfdCBjaGFyMzJfdCBjb25zdGV4cHIgZGVjbHR5cGUgbm9leGNlcHQgbnVsbHB0ciBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBfQm9vbCBjb21wbGV4IixidWlsdF9pbjoic3RkIHN0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RyaW5nc3RyZWFtIGlzdHJpbmdzdHJlYW0gb3N0cmluZ3N0cmVhbSBhdXRvX3B0ciBkZXF1ZSBsaXN0IHF1ZXVlIHN0YWNrIHZlY3RvciBtYXAgc2V0IGJpdHNldCBtdWx0aXNldCBtdWx0aW1hcCB1bm9yZGVyZWRfc2V0IHVub3JkZXJlZF9tYXAgdW5vcmRlcmVkX211bHRpc2V0IHVub3JkZXJlZF9tdWx0aW1hcCBhcnJheSBzaGFyZWRfcHRyIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUVNNLHtjTjoic3RyaW5nIixiOiInXFxcXD8uIixlOiInIixpOiIuIn0se2NOOiJudW1iZXIiLGI6IlxcYihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSh1fFV8bHxMfHVsfFVMfGZ8RikifSxhLkNOTSx7Y046InByZXByb2Nlc3NvciIsYjoiIyIsZToiJCIsYzpbe2I6IjwiLGU6Ij4iLGk6IlxcbiJ9LGEuQ0xDTV19LHtjTjoic3RsX2NvbnRhaW5lciIsYjoiXFxiKGRlcXVlfGxpc3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5KVxccyo8IixlOiI+IixrOmIscjoxMCxjOlsic2VsZiJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYWtlZmlsZT1mdW5jdGlvbihhKXt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfTtyZXR1cm57YzpbYS5IQ00se2I6L15cdytccypcVyo9LyxyQjp0cnVlLHI6MCxzdGFydHM6e2NOOiJjb25zdGFudCIsZTovXHMqXFcqPS8sZUU6dHJ1ZSxzdGFydHM6e2U6LyQvLHI6MCxjOltiXSx9fX0se2NOOiJ0aXRsZSIsYjovXltcd10rOlxzKiQvfSx7Y046InBob255IixiOi9eXC5QSE9OWTovLGU6LyQvLGs6Ii5QSE9OWSIsbDovW1wuXHddKy99LHtiOi9eXHQrLyxlOi8kLyxjOlthLlFTTSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuZ289ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImJyZWFrIGRlZmF1bHQgZnVuYyBpbnRlcmZhY2Ugc2VsZWN0IGNhc2UgbWFwIHN0cnVjdCBjaGFuIGVsc2UgZ290byBwYWNrYWdlIHN3aXRjaCBjb25zdCBmYWxsdGhyb3VnaCBpZiByYW5nZSB0eXBlIGNvbnRpbnVlIGZvciBpbXBvcnQgcmV0dXJuIHZhciBnbyBkZWZlciIsY29uc3RhbnQ6InRydWUgZmFsc2UgaW90YSBuaWwiLHR5cGVuYW1lOiJib29sIGJ5dGUgY29tcGxleDY0IGNvbXBsZXgxMjggZmxvYXQzMiBmbG9hdDY0IGludDggaW50MTYgaW50MzIgaW50NjQgc3RyaW5nIHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0IGludCB1aW50IHVpbnRwdHIgcnVuZSIsYnVpbHRfaW46ImFwcGVuZCBjYXAgY2xvc2UgY29tcGxleCBjb3B5IGltYWcgbGVuIG1ha2UgbmV3IHBhbmljIHByaW50IHByaW50bG4gcmVhbCByZWNvdmVyIGRlbGV0ZSJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJyIsZToiW15cXFxcXSciLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAifSx7Y046Im51bWJlciIsYjoiW15hLXpBLVpfMC05XShcXC18XFwrKT9cXGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHMpKFxcK3xcXC0pP1xcZCspPyIscjowfSxhLkNOTV19fShobGpzKTtQSwcIFVltTvZ1AAD2dQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAc3RhdGljXGxpYlxqcXVlcnkuZm9ybS5taW4uanMvKiEKICogalF1ZXJ5IEZvcm0gUGx1Z2luCiAqIHZlcnNpb246IDMuNDYuMC0yMDEzLjExLjIxCiAqIFJlcXVpcmVzIGpRdWVyeSB2MS41IG9yIGxhdGVyCiAqIENvcHlyaWdodCAoYykgMjAxMyBNLiBBbHN1cAogKiBFeGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBhdDogaHR0cDovL21hbHN1cC5jb20vanF1ZXJ5L2Zvcm0vCiAqIFByb2plY3QgcmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKiBodHRwczovL2dpdGh1Yi5jb20vbWFsc3VwL2Zvcm0jY29weXJpZ2h0LWFuZC1saWNlbnNlCiAqLwooZnVuY3Rpb24oYSl7aWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbImpxdWVyeSJdLGEpfWVsc2V7YSgodHlwZW9mKGpRdWVyeSkhPSJ1bmRlZmluZWQiKT9qUXVlcnk6d2luZG93LlplcHRvKX19KGZ1bmN0aW9uKGYpe3ZhciBjPXt9O2MuZmlsZWFwaT1mKCI8aW5wdXQgdHlwZT0nZmlsZScvPiIpLmdldCgwKS5maWxlcyE9PXVuZGVmaW5lZDtjLmZvcm1kYXRhPXdpbmRvdy5Gb3JtRGF0YSE9PXVuZGVmaW5lZDt2YXIgZT0hIWYuZm4ucHJvcDtmLmZuLmF0dHIyPWZ1bmN0aW9uKCl7aWYoIWUpe3JldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBnPXRoaXMucHJvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoKGcmJmcuanF1ZXJ5KXx8dHlwZW9mIGc9PT0ic3RyaW5nIil7cmV0dXJuIGd9cmV0dXJuIHRoaXMuYXR0ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2YuZm4uYWpheFN1Ym1pdD1mdW5jdGlvbihqKXtpZighdGhpcy5sZW5ndGgpe2QoImFqYXhTdWJtaXQ6IHNraXBwaW5nIHN1Ym1pdCBwcm9jZXNzIC0gbm8gZWxlbWVudCBzZWxlY3RlZCIpO3JldHVybiB0aGlzfXZhciBpLEMsbSxvPXRoaXM7aWYodHlwZW9mIGo9PSJmdW5jdGlvbiIpe2o9e3N1Y2Nlc3M6an19ZWxzZXtpZihqPT09dW5kZWZpbmVkKXtqPXt9fX1pPWoudHlwZXx8dGhpcy5hdHRyMigibWV0aG9kIik7Qz1qLnVybHx8dGhpcy5hdHRyMigiYWN0aW9uIik7bT0odHlwZW9mIEM9PT0ic3RyaW5nIik/Zi50cmltKEMpOiIiO209bXx8d2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiO2lmKG0pe209KG0ubWF0Y2goL14oW14jXSspLyl8fFtdKVsxXX1qPWYuZXh0ZW5kKHRydWUse3VybDptLHN1Y2Nlc3M6Zi5hamF4U2V0dGluZ3Muc3VjY2Vzcyx0eXBlOml8fGYuYWpheFNldHRpbmdzLnR5cGUsaWZyYW1lU3JjOi9eaHR0cHMvaS50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIik/ImphdmFzY3JpcHQ6ZmFsc2UiOiJhYm91dDpibGFuayJ9LGopO3ZhciB1PXt9O3RoaXMudHJpZ2dlcigiZm9ybS1wcmUtc2VyaWFsaXplIixbdGhpcyxqLHVdKTtpZih1LnZldG8pe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tcHJlLXNlcmlhbGl6ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9aWYoai5iZWZvcmVTZXJpYWxpemUmJmouYmVmb3JlU2VyaWFsaXplKHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVNlcmlhbGl6ZSBjYWxsYmFjayIpO3JldHVybiB0aGlzfXZhciBuPWoudHJhZGl0aW9uYWw7aWYobj09PXVuZGVmaW5lZCl7bj1mLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbH12YXIgcz1bXTt2YXIgRSxGPXRoaXMuZm9ybVRvQXJyYXkoai5zZW1hbnRpYyxzKTtpZihqLmRhdGEpe2ouZXh0cmFEYXRhPWouZGF0YTtFPWYucGFyYW0oai5kYXRhLG4pfWlmKGouYmVmb3JlU3VibWl0JiZqLmJlZm9yZVN1Ym1pdChGLHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVN1Ym1pdCBjYWxsYmFjayIpO3JldHVybiB0aGlzfXRoaXMudHJpZ2dlcigiZm9ybS1zdWJtaXQtdmFsaWRhdGUiLFtGLHRoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXN1Ym1pdC12YWxpZGF0ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9dmFyIHk9Zi5wYXJhbShGLG4pO2lmKEUpe3k9KHk/KHkrIiYiK0UpOkUpfWlmKGoudHlwZS50b1VwcGVyQ2FzZSgpPT0iR0VUIil7ai51cmwrPShqLnVybC5pbmRleE9mKCI/Iik+PTA/IiYiOiI/IikreTtqLmRhdGE9bnVsbH1lbHNle2ouZGF0YT15fXZhciBIPVtdO2lmKGoucmVzZXRGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLnJlc2V0Rm9ybSgpfSl9aWYoai5jbGVhckZvcm0pe0gucHVzaChmdW5jdGlvbigpe28uY2xlYXJGb3JtKGouaW5jbHVkZUhpZGRlbil9KX1pZighai5kYXRhVHlwZSYmai50YXJnZXQpe3ZhciBsPWouc3VjY2Vzc3x8ZnVuY3Rpb24oKXt9O0gucHVzaChmdW5jdGlvbihxKXt2YXIgaz1qLnJlcGxhY2VUYXJnZXQ/InJlcGxhY2VXaXRoIjoiaHRtbCI7ZihqLnRhcmdldClba10ocSkuZWFjaChsLGFyZ3VtZW50cyl9KX1lbHNle2lmKGouc3VjY2Vzcyl7SC5wdXNoKGouc3VjY2Vzcyl9fWouc3VjY2Vzcz1mdW5jdGlvbihLLHEsTCl7dmFyIEo9ai5jb250ZXh0fHx0aGlzO2Zvcih2YXIgST0wLGs9SC5sZW5ndGg7STxrO0krKyl7SFtJXS5hcHBseShKLFtLLHEsTHx8byxvXSl9fTtpZihqLmVycm9yKXt2YXIgej1qLmVycm9yO2ouZXJyb3I9ZnVuY3Rpb24oSixrLHEpe3ZhciBJPWouY29udGV4dHx8dGhpczt6LmFwcGx5KEksW0osayxxLG9dKX19aWYoai5jb21wbGV0ZSl7dmFyIGg9ai5jb21wbGV0ZTtqLmNvbXBsZXRlPWZ1bmN0aW9uKEksayl7dmFyIHE9ai5jb250ZXh0fHx0aGlzO2guYXBwbHkocSxbSSxrLG9dKX19dmFyIEQ9ZigiaW5wdXRbdHlwZT1maWxlXTplbmFibGVkIix0aGlzKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzKS52YWwoKSE9PSIifSk7dmFyIHA9RC5sZW5ndGg+MDt2YXIgQj0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7dmFyIHg9KG8uYXR0cigiZW5jdHlwZSIpPT1CfHxvLmF0dHIoImVuY29kaW5nIik9PUIpO3ZhciB3PWMuZmlsZWFwaSYmYy5mb3JtZGF0YTtkKCJmaWxlQVBJIDoiK3cpO3ZhciByPShwfHx4KSYmIXc7dmFyIHY7aWYoai5pZnJhbWUhPT1mYWxzZSYmKGouaWZyYW1lfHxyKSl7aWYoai5jbG9zZUtlZXBBbGl2ZSl7Zi5nZXQoai5jbG9zZUtlZXBBbGl2ZSxmdW5jdGlvbigpe3Y9RyhGKX0pfWVsc2V7dj1HKEYpfX1lbHNle2lmKChwfHx4KSYmdyl7dj10KEYpfWVsc2V7dj1mLmFqYXgoail9fW8ucmVtb3ZlRGF0YSgianF4aHIiKS5kYXRhKCJqcXhociIsdik7Zm9yKHZhciBBPTA7QTxzLmxlbmd0aDtBKyspe3NbQV09bnVsbH10aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LW5vdGlmeSIsW3RoaXMsal0pO3JldHVybiB0aGlzO2Z1bmN0aW9uIGcoSyl7dmFyIEw9Zi5wYXJhbShLLGoudHJhZGl0aW9uYWwpLnNwbGl0KCImIik7dmFyIHE9TC5sZW5ndGg7dmFyIGs9W107dmFyIEosSTtmb3IoSj0wO0o8cTtKKyspe0xbSl09TFtKXS5yZXBsYWNlKC9cKy9nLCIgIik7ST1MW0pdLnNwbGl0KCI9Iik7ay5wdXNoKFtkZWNvZGVVUklDb21wb25lbnQoSVswXSksZGVjb2RlVVJJQ29tcG9uZW50KElbMV0pXSl9cmV0dXJuIGt9ZnVuY3Rpb24gdChxKXt2YXIgaz1uZXcgRm9ybURhdGEoKTtmb3IodmFyIEk9MDtJPHEubGVuZ3RoO0krKyl7ay5hcHBlbmQocVtJXS5uYW1lLHFbSV0udmFsdWUpfWlmKGouZXh0cmFEYXRhKXt2YXIgTD1nKGouZXh0cmFEYXRhKTtmb3IoST0wO0k8TC5sZW5ndGg7SSsrKXtpZihMW0ldKXtrLmFwcGVuZChMW0ldWzBdLExbSV1bMV0pfX19ai5kYXRhPW51bGw7dmFyIEs9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqLHtjb250ZW50VHlwZTpmYWxzZSxwcm9jZXNzRGF0YTpmYWxzZSxjYWNoZTpmYWxzZSx0eXBlOml8fCJQT1NUIn0pO2lmKGoudXBsb2FkUHJvZ3Jlc3Mpe0sueGhyPWZ1bmN0aW9uKCl7dmFyIE09Zi5hamF4U2V0dGluZ3MueGhyKCk7aWYoTS51cGxvYWQpe00udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihRKXt2YXIgUD0wO3ZhciBOPVEubG9hZGVkfHxRLnBvc2l0aW9uO3ZhciBPPVEudG90YWw7aWYoUS5sZW5ndGhDb21wdXRhYmxlKXtQPU1hdGguY2VpbChOL08qMTAwKX1qLnVwbG9hZFByb2dyZXNzKFEsTixPLFApfSxmYWxzZSl9cmV0dXJuIE19fUsuZGF0YT1udWxsO3ZhciBKPUsuYmVmb3JlU2VuZDtLLmJlZm9yZVNlbmQ9ZnVuY3Rpb24oTixNKXtpZihqLmZvcm1EYXRhKXtNLmRhdGE9ai5mb3JtRGF0YX1lbHNle00uZGF0YT1rfWlmKEope0ouY2FsbCh0aGlzLE4sTSl9fTtyZXR1cm4gZi5hamF4KEspfWZ1bmN0aW9uIEcoYWYpe3ZhciBMPW9bMF0sSyxhYixWLGFkLFksTixRLE8sUCxaLGFjLFQ7dmFyIGFpPWYuRGVmZXJyZWQoKTthaS5hYm9ydD1mdW5jdGlvbihhail7Ty5hYm9ydChhail9O2lmKGFmKXtmb3IoYWI9MDthYjxzLmxlbmd0aDthYisrKXtLPWYoc1thYl0pO2lmKGUpe0sucHJvcCgiZGlzYWJsZWQiLGZhbHNlKX1lbHNle0sucmVtb3ZlQXR0cigiZGlzYWJsZWQiKX19fVY9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqKTtWLmNvbnRleHQ9Vi5jb250ZXh0fHxWO1k9ImpxRm9ybUlPIisobmV3IERhdGUoKS5nZXRUaW1lKCkpO2lmKFYuaWZyYW1lVGFyZ2V0KXtOPWYoVi5pZnJhbWVUYXJnZXQpO1o9Ti5hdHRyMigibmFtZSIpO2lmKCFaKXtOLmF0dHIyKCJuYW1lIixZKX1lbHNle1k9Wn19ZWxzZXtOPWYoJzxpZnJhbWUgbmFtZT0iJytZKyciIHNyYz0iJytWLmlmcmFtZVNyYysnIiAvPicpO04uY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiLTEwMDBweCIsbGVmdDoiLTEwMDBweCJ9KX1RPU5bMF07Tz17YWJvcnRlZDowLHJlc3BvbnNlVGV4dDpudWxsLHJlc3BvbnNlWE1MOm51bGwsc3RhdHVzOjAsc3RhdHVzVGV4dDoibi9hIixnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXt9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKCl7fSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKCl7fSxhYm9ydDpmdW5jdGlvbihhail7dmFyIGFrPShhaj09PSJ0aW1lb3V0Ij8idGltZW91dCI6ImFib3J0ZWQiKTtkKCJhYm9ydGluZyB1cGxvYWQuLi4gIithayk7dGhpcy5hYm9ydGVkPTE7dHJ5e2lmKFEuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCl7US5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kKCJTdG9wIil9fWNhdGNoKGFsKXt9Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKTtPLmVycm9yPWFrO2lmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhayxhail9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFrXSl9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFrKX19fTthZD1WLmdsb2JhbDtpZihhZCYmMD09PWYuYWN0aXZlKyspe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iil9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFNlbmQiLFtPLFZdKX1pZihWLmJlZm9yZVNlbmQmJlYuYmVmb3JlU2VuZC5jYWxsKFYuY29udGV4dCxPLFYpPT09ZmFsc2Upe2lmKFYuZ2xvYmFsKXtmLmFjdGl2ZS0tfWFpLnJlamVjdCgpO3JldHVybiBhaX1pZihPLmFib3J0ZWQpe2FpLnJlamVjdCgpO3JldHVybiBhaX1QPUwuY2xrO2lmKFApe1o9UC5uYW1lO2lmKFomJiFQLmRpc2FibGVkKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbWl09UC52YWx1ZTtpZihQLnR5cGU9PSJpbWFnZSIpe1YuZXh0cmFEYXRhW1orIi54Il09TC5jbGtfeDtWLmV4dHJhRGF0YVtaKyIueSJdPUwuY2xrX3l9fX12YXIgVT0xO3ZhciBSPTI7ZnVuY3Rpb24gUyhhbCl7dmFyIGFrPW51bGw7dHJ5e2lmKGFsLmNvbnRlbnRXaW5kb3cpe2FrPWFsLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnR9fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50V2luZG93IGRvY3VtZW50OiAiK2FqKX1pZihhayl7cmV0dXJuIGFrfXRyeXthaz1hbC5jb250ZW50RG9jdW1lbnQ/YWwuY29udGVudERvY3VtZW50OmFsLmRvY3VtZW50fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50RG9jdW1lbnQ6ICIrYWopO2FrPWFsLmRvY3VtZW50fXJldHVybiBha312YXIgSj1mKCJtZXRhW25hbWU9Y3NyZi10b2tlbl0iKS5hdHRyKCJjb250ZW50Iik7dmFyIEk9ZigibWV0YVtuYW1lPWNzcmYtcGFyYW1dIikuYXR0cigiY29udGVudCIpO2lmKEkmJkope1YuZXh0cmFEYXRhPVYuZXh0cmFEYXRhfHx7fTtWLmV4dHJhRGF0YVtJXT1KfWZ1bmN0aW9uIGFhKCl7dmFyIGFsPW8uYXR0cjIoInRhcmdldCIpLGFqPW8uYXR0cjIoImFjdGlvbiIpO0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLFkpO2lmKCFpfHwvcG9zdC9pLnRlc3QoaSkpe0wuc2V0QXR0cmlidXRlKCJtZXRob2QiLCJQT1NUIil9aWYoYWohPVYudXJsKXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixWLnVybCl9aWYoIVYuc2tpcEVuY29kaW5nT3ZlcnJpZGUmJighaXx8L3Bvc3QvaS50ZXN0KGkpKSl7by5hdHRyKHtlbmNvZGluZzoibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsZW5jdHlwZToibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9KX1pZihWLnRpbWVvdXQpe1Q9c2V0VGltZW91dChmdW5jdGlvbigpe2FjPXRydWU7WChVKX0sVi50aW1lb3V0KX1mdW5jdGlvbiBhbSgpe3RyeXt2YXIgYXE9UyhRKS5yZWFkeVN0YXRlO2QoInN0YXRlID0gIithcSk7aWYoYXEmJmFxLnRvTG93ZXJDYXNlKCk9PSJ1bmluaXRpYWxpemVkIil7c2V0VGltZW91dChhbSw1MCl9fWNhdGNoKGFyKXtkKCJTZXJ2ZXIgYWJvcnQ6ICIsYXIsIiAoIixhci5uYW1lLCIpIik7WChSKTtpZihUKXtjbGVhclRpbWVvdXQoVCl9VD11bmRlZmluZWR9fXZhciBhaz1bXTt0cnl7aWYoVi5leHRyYURhdGEpe2Zvcih2YXIgYXAgaW4gVi5leHRyYURhdGEpe2lmKFYuZXh0cmFEYXRhLmhhc093blByb3BlcnR5KGFwKSl7aWYoZi5pc1BsYWluT2JqZWN0KFYuZXh0cmFEYXRhW2FwXSkmJlYuZXh0cmFEYXRhW2FwXS5oYXNPd25Qcm9wZXJ0eSgibmFtZSIpJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoInZhbHVlIikpe2FrLnB1c2goZignPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJytWLmV4dHJhRGF0YVthcF0ubmFtZSsnIj4nKS52YWwoVi5leHRyYURhdGFbYXBdLnZhbHVlKS5hcHBlbmRUbyhMKVswXSl9ZWxzZXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrYXArJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXSkuYXBwZW5kVG8oTClbMF0pfX19fWlmKCFWLmlmcmFtZVRhcmdldCl7Ti5hcHBlbmRUbygiYm9keSIpfWlmKFEuYXR0YWNoRXZlbnQpe1EuYXR0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXNldFRpbWVvdXQoYW0sMTUpO3RyeXtMLnN1Ym1pdCgpfWNhdGNoKGFuKXt2YXIgYW89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLnN1Ym1pdDthby5hcHBseShMKX19ZmluYWxseXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixhaik7aWYoYWwpe0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLGFsKX1lbHNle28ucmVtb3ZlQXR0cigidGFyZ2V0Iil9ZihhaykucmVtb3ZlKCl9fWlmKFYuZm9yY2VTeW5jKXthYSgpfWVsc2V7c2V0VGltZW91dChhYSwxMCl9dmFyIGFnLGFoLGFlPTUwLE07ZnVuY3Rpb24gWChhcCl7aWYoTy5hYm9ydGVkfHxNKXtyZXR1cm59YWg9UyhRKTtpZighYWgpe2QoImNhbm5vdCBhY2Nlc3MgcmVzcG9uc2UgZG9jdW1lbnQiKTthcD1SfWlmKGFwPT09VSYmTyl7Ty5hYm9ydCgidGltZW91dCIpO2FpLnJlamVjdChPLCJ0aW1lb3V0Iik7cmV0dXJufWVsc2V7aWYoYXA9PVImJk8pe08uYWJvcnQoInNlcnZlciBhYm9ydCIpO2FpLnJlamVjdChPLCJlcnJvciIsInNlcnZlciBhYm9ydCIpO3JldHVybn19aWYoIWFofHxhaC5sb2NhdGlvbi5ocmVmPT1WLmlmcmFtZVNyYyl7aWYoIWFjKXtyZXR1cm59fWlmKFEuZGV0YWNoRXZlbnQpe1EuZGV0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXZhciBhbj0ic3VjY2VzcyIsYXI7dHJ5e2lmKGFjKXt0aHJvdyJ0aW1lb3V0In12YXIgYW09Vi5kYXRhVHlwZT09InhtbCJ8fGFoLlhNTERvY3VtZW50fHxmLmlzWE1MRG9jKGFoKTtkKCJpc1htbD0iK2FtKTtpZighYW0mJndpbmRvdy5vcGVyYSYmKGFoLmJvZHk9PT1udWxsfHwhYWguYm9keS5pbm5lckhUTUwpKXtpZigtLWFlKXtkKCJyZXF1ZWluZyBvbkxvYWQgY2FsbGJhY2ssIERPTSBub3QgYXZhaWxhYmxlIik7c2V0VGltZW91dChYLDI1MCk7cmV0dXJufX12YXIgYXQ9YWguYm9keT9haC5ib2R5OmFoLmRvY3VtZW50RWxlbWVudDtPLnJlc3BvbnNlVGV4dD1hdD9hdC5pbm5lckhUTUw6bnVsbDtPLnJlc3BvbnNlWE1MPWFoLlhNTERvY3VtZW50P2FoLlhNTERvY3VtZW50OmFoO2lmKGFtKXtWLmRhdGFUeXBlPSJ4bWwifU8uZ2V0UmVzcG9uc2VIZWFkZXI9ZnVuY3Rpb24oYXcpe3ZhciBhdj17ImNvbnRlbnQtdHlwZSI6Vi5kYXRhVHlwZX07cmV0dXJuIGF2W2F3LnRvTG93ZXJDYXNlKCldfTtpZihhdCl7Ty5zdGF0dXM9TnVtYmVyKGF0LmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YXQuZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH12YXIgYWo9KFYuZGF0YVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpO3ZhciBhcT0vKGpzb258c2NyaXB0fHRleHQpLy50ZXN0KGFqKTtpZihhcXx8Vi50ZXh0YXJlYSl7dmFyIGFvPWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZXh0YXJlYSIpWzBdO2lmKGFvKXtPLnJlc3BvbnNlVGV4dD1hby52YWx1ZTtPLnN0YXR1cz1OdW1iZXIoYW8uZ2V0QXR0cmlidXRlKCJzdGF0dXMiKSl8fE8uc3RhdHVzO08uc3RhdHVzVGV4dD1hby5nZXRBdHRyaWJ1dGUoInN0YXR1c1RleHQiKXx8Ty5zdGF0dXNUZXh0fWVsc2V7aWYoYXEpe3ZhciBhaz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIilbMF07dmFyIGF1PWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoYWspe08ucmVzcG9uc2VUZXh0PWFrLnRleHRDb250ZW50P2FrLnRleHRDb250ZW50OmFrLmlubmVyVGV4dH1lbHNle2lmKGF1KXtPLnJlc3BvbnNlVGV4dD1hdS50ZXh0Q29udGVudD9hdS50ZXh0Q29udGVudDphdS5pbm5lclRleHR9fX19fWVsc2V7aWYoYWo9PSJ4bWwiJiYhTy5yZXNwb25zZVhNTCYmTy5yZXNwb25zZVRleHQpe08ucmVzcG9uc2VYTUw9VyhPLnJlc3BvbnNlVGV4dCl9fXRyeXthZz1rKE8sYWosVil9Y2F0Y2goYWwpe2FuPSJwYXJzZXJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX19Y2F0Y2goYWwpe2QoImVycm9yIGNhdWdodDogIixhbCk7YW49ImVycm9yIjtPLmVycm9yPWFyPShhbHx8YW4pfWlmKE8uYWJvcnRlZCl7ZCgidXBsb2FkIGFib3J0ZWQiKTthbj1udWxsfWlmKE8uc3RhdHVzKXthbj0oTy5zdGF0dXM+PTIwMCYmTy5zdGF0dXM8MzAwfHxPLnN0YXR1cz09PTMwNCk/InN1Y2Nlc3MiOiJlcnJvciJ9aWYoYW49PT0ic3VjY2VzcyIpe2lmKFYuc3VjY2Vzcyl7Vi5zdWNjZXNzLmNhbGwoVi5jb250ZXh0LGFnLCJzdWNjZXNzIixPKX1haS5yZXNvbHZlKE8ucmVzcG9uc2VUZXh0LCJzdWNjZXNzIixPKTtpZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4U3VjY2VzcyIsW08sVl0pfX1lbHNle2lmKGFuKXtpZihhcj09PXVuZGVmaW5lZCl7YXI9Ty5zdGF0dXNUZXh0fWlmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhbixhcil9YWkucmVqZWN0KE8sImVycm9yIixhcik7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFyXSl9fX1pZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtPLFZdKX1pZihhZCYmIS0tZi5hY3RpdmUpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKX1pZihWLmNvbXBsZXRlKXtWLmNvbXBsZXRlLmNhbGwoVi5jb250ZXh0LE8sYW4pfU09dHJ1ZTtpZihWLnRpbWVvdXQpe2NsZWFyVGltZW91dChUKX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIVYuaWZyYW1lVGFyZ2V0KXtOLnJlbW92ZSgpfWVsc2V7Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKX1PLnJlc3BvbnNlWE1MPW51bGx9LDEwMCl9dmFyIFc9Zi5wYXJzZVhNTHx8ZnVuY3Rpb24oYWosYWspe2lmKHdpbmRvdy5BY3RpdmVYT2JqZWN0KXthaz1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpO2FrLmFzeW5jPSJmYWxzZSI7YWsubG9hZFhNTChhail9ZWxzZXthaz0obmV3IERPTVBhcnNlcigpKS5wYXJzZUZyb21TdHJpbmcoYWosInRleHQveG1sIil9cmV0dXJuKGFrJiZhay5kb2N1bWVudEVsZW1lbnQmJmFrLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSE9InBhcnNlcmVycm9yIik/YWs6bnVsbH07dmFyIHE9Zi5wYXJzZUpTT058fGZ1bmN0aW9uKGFqKXtyZXR1cm4gd2luZG93WyJldmFsIl0oIigiK2FqKyIpIil9O3ZhciBrPWZ1bmN0aW9uKGFvLGFtLGFsKXt2YXIgYWs9YW8uZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixhaj1hbT09PSJ4bWwifHwhYW0mJmFrLmluZGV4T2YoInhtbCIpPj0wLGFuPWFqP2FvLnJlc3BvbnNlWE1MOmFvLnJlc3BvbnNlVGV4dDtpZihhaiYmYW4uZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lPT09InBhcnNlcmVycm9yIil7aWYoZi5lcnJvcil7Zi5lcnJvcigicGFyc2VyZXJyb3IiKX19aWYoYWwmJmFsLmRhdGFGaWx0ZXIpe2FuPWFsLmRhdGFGaWx0ZXIoYW4sYW0pfWlmKHR5cGVvZiBhbj09PSJzdHJpbmciKXtpZihhbT09PSJqc29uInx8IWFtJiZhay5pbmRleE9mKCJqc29uIik+PTApe2FuPXEoYW4pfWVsc2V7aWYoYW09PT0ic2NyaXB0Inx8IWFtJiZhay5pbmRleE9mKCJqYXZhc2NyaXB0Iik+PTApe2YuZ2xvYmFsRXZhbChhbil9fX1yZXR1cm4gYW59O3JldHVybiBhaX19O2YuZm4uYWpheEZvcm09ZnVuY3Rpb24oZyl7Zz1nfHx7fTtnLmRlbGVnYXRpb249Zy5kZWxlZ2F0aW9uJiZmLmlzRnVuY3Rpb24oZi5mbi5vbik7aWYoIWcuZGVsZWdhdGlvbiYmdGhpcy5sZW5ndGg9PT0wKXt2YXIgaD17czp0aGlzLnNlbGVjdG9yLGM6dGhpcy5jb250ZXh0fTtpZighZi5pc1JlYWR5JiZoLnMpe2QoIkRPTSBub3QgcmVhZHksIHF1ZXVpbmcgYWpheEZvcm0iKTtmKGZ1bmN0aW9uKCl7ZihoLnMsaC5jKS5hamF4Rm9ybShnKX0pO3JldHVybiB0aGlzfWQoInRlcm1pbmF0aW5nOyB6ZXJvIGVsZW1lbnRzIGZvdW5kIGJ5IHNlbGVjdG9yIisoZi5pc1JlYWR5PyIiOiIgKERPTSBub3QgcmVhZHkpIikpO3JldHVybiB0aGlzfWlmKGcuZGVsZWdhdGlvbil7Zihkb2N1bWVudCkub2ZmKCJzdWJtaXQuZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYikub2ZmKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixhKS5vbigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYikub24oImNsaWNrLmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuYWpheEZvcm1VbmJpbmQoKS5iaW5kKCJzdWJtaXQuZm9ybS1wbHVnaW4iLGcsYikuYmluZCgiY2xpY2suZm9ybS1wbHVnaW4iLGcsYSl9O2Z1bmN0aW9uIGIoaCl7dmFyIGc9aC5kYXRhO2lmKCFoLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtoLnByZXZlbnREZWZhdWx0KCk7ZihoLnRhcmdldCkuYWpheFN1Ym1pdChnKX19ZnVuY3Rpb24gYShrKXt2YXIgaj1rLnRhcmdldDt2YXIgaD1mKGopO2lmKCEoaC5pcygiW3R5cGU9c3VibWl0XSxbdHlwZT1pbWFnZV0iKSkpe3ZhciBnPWguY2xvc2VzdCgiW3R5cGU9c3VibWl0XSIpO2lmKGcubGVuZ3RoPT09MCl7cmV0dXJufWo9Z1swXX12YXIgaT10aGlzO2kuY2xrPWo7aWYoai50eXBlPT0iaW1hZ2UiKXtpZihrLm9mZnNldFghPT11bmRlZmluZWQpe2kuY2xrX3g9ay5vZmZzZXRYO2kuY2xrX3k9ay5vZmZzZXRZfWVsc2V7aWYodHlwZW9mIGYuZm4ub2Zmc2V0PT0iZnVuY3Rpb24iKXt2YXIgbD1oLm9mZnNldCgpO2kuY2xrX3g9ay5wYWdlWC1sLmxlZnQ7aS5jbGtfeT1rLnBhZ2VZLWwudG9wfWVsc2V7aS5jbGtfeD1rLnBhZ2VYLWoub2Zmc2V0TGVmdDtpLmNsa195PWsucGFnZVktai5vZmZzZXRUb3B9fX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5jbGs9aS5jbGtfeD1pLmNsa195PW51bGx9LDEwMCl9Zi5mbi5hamF4Rm9ybVVuYmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIGNsaWNrLmZvcm0tcGx1Z2luIil9O2YuZm4uZm9ybVRvQXJyYXk9ZnVuY3Rpb24oeCxnKXt2YXIgdz1bXTtpZih0aGlzLmxlbmd0aD09PTApe3JldHVybiB3fXZhciBsPXRoaXNbMF07dmFyIHA9eD9sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6bC5lbGVtZW50cztpZighcCl7cmV0dXJuIHd9dmFyIHIscSxvLHksbSx0LGs7Zm9yKHI9MCx0PXAubGVuZ3RoO3I8dDtyKyspe209cFtyXTtvPW0ubmFtZTtpZighb3x8bS5kaXNhYmxlZCl7Y29udGludWV9aWYoeCYmbC5jbGsmJm0udHlwZT09ImltYWdlIil7aWYobC5jbGs9PW0pe3cucHVzaCh7bmFtZTpvLHZhbHVlOmYobSkudmFsKCksdHlwZTptLnR5cGV9KTt3LnB1c2goe25hbWU6bysiLngiLHZhbHVlOmwuY2xrX3h9LHtuYW1lOm8rIi55Iix2YWx1ZTpsLmNsa195fSl9Y29udGludWV9eT1mLmZpZWxkVmFsdWUobSx0cnVlKTtpZih5JiZ5LmNvbnN0cnVjdG9yPT1BcnJheSl7aWYoZyl7Zy5wdXNoKG0pfWZvcihxPTAsaz15Lmxlbmd0aDtxPGs7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTp5W3FdfSl9fWVsc2V7aWYoYy5maWxlYXBpJiZtLnR5cGU9PSJmaWxlIil7aWYoZyl7Zy5wdXNoKG0pfXZhciBoPW0uZmlsZXM7aWYoaC5sZW5ndGgpe2ZvcihxPTA7cTxoLmxlbmd0aDtxKyspe3cucHVzaCh7bmFtZTpvLHZhbHVlOmhbcV0sdHlwZTptLnR5cGV9KX19ZWxzZXt3LnB1c2goe25hbWU6byx2YWx1ZToiIix0eXBlOm0udHlwZX0pfX1lbHNle2lmKHkhPT1udWxsJiZ0eXBlb2YgeSE9InVuZGVmaW5lZCIpe2lmKGcpe2cucHVzaChtKX13LnB1c2goe25hbWU6byx2YWx1ZTp5LHR5cGU6bS50eXBlLHJlcXVpcmVkOm0ucmVxdWlyZWR9KX19fX1pZigheCYmbC5jbGspe3ZhciBzPWYobC5jbGspLHU9c1swXTtvPXUubmFtZTtpZihvJiYhdS5kaXNhYmxlZCYmdS50eXBlPT0iaW1hZ2UiKXt3LnB1c2goe25hbWU6byx2YWx1ZTpzLnZhbCgpfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfX1yZXR1cm4gd307Zi5mbi5mb3JtU2VyaWFsaXplPWZ1bmN0aW9uKGcpe3JldHVybiBmLnBhcmFtKHRoaXMuZm9ybVRvQXJyYXkoZykpfTtmLmZuLmZpZWxkU2VyaWFsaXplPWZ1bmN0aW9uKGgpe3ZhciBnPVtdO3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBtPXRoaXMubmFtZTtpZighbSl7cmV0dXJufXZhciBrPWYuZmllbGRWYWx1ZSh0aGlzLGgpO2lmKGsmJmsuY29uc3RydWN0b3I9PUFycmF5KXtmb3IodmFyIGw9MCxqPWsubGVuZ3RoO2w8ajtsKyspe2cucHVzaCh7bmFtZTptLHZhbHVlOmtbbF19KX19ZWxzZXtpZihrIT09bnVsbCYmdHlwZW9mIGshPSJ1bmRlZmluZWQiKXtnLnB1c2goe25hbWU6dGhpcy5uYW1lLHZhbHVlOmt9KX19fSk7cmV0dXJuIGYucGFyYW0oZyl9O2YuZm4uZmllbGRWYWx1ZT1mdW5jdGlvbihtKXtmb3IodmFyIGw9W10saj0wLGc9dGhpcy5sZW5ndGg7ajxnO2orKyl7dmFyIGs9dGhpc1tqXTt2YXIgaD1mLmZpZWxkVmFsdWUoayxtKTtpZihoPT09bnVsbHx8dHlwZW9mIGg9PSJ1bmRlZmluZWQifHwoaC5jb25zdHJ1Y3Rvcj09QXJyYXkmJiFoLmxlbmd0aCkpe2NvbnRpbnVlfWlmKGguY29uc3RydWN0b3I9PUFycmF5KXtmLm1lcmdlKGwsaCl9ZWxzZXtsLnB1c2goaCl9fXJldHVybiBsfTtmLmZpZWxkVmFsdWU9ZnVuY3Rpb24oZyxvKXt2YXIgaj1nLm5hbWUsdT1nLnR5cGUsdz1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihvPT09dW5kZWZpbmVkKXtvPXRydWV9aWYobyYmKCFqfHxnLmRpc2FibGVkfHx1PT0icmVzZXQifHx1PT0iYnV0dG9uInx8KHU9PSJjaGVja2JveCJ8fHU9PSJyYWRpbyIpJiYhZy5jaGVja2VkfHwodT09InN1Ym1pdCJ8fHU9PSJpbWFnZSIpJiZnLmZvcm0mJmcuZm9ybS5jbGshPWd8fHc9PSJzZWxlY3QiJiZnLnNlbGVjdGVkSW5kZXg9PS0xKSl7cmV0dXJuIG51bGx9aWYodz09InNlbGVjdCIpe3ZhciBwPWcuc2VsZWN0ZWRJbmRleDtpZihwPDApe3JldHVybiBudWxsfXZhciByPVtdLGg9Zy5vcHRpb25zO3ZhciBsPSh1PT0ic2VsZWN0LW9uZSIpO3ZhciBxPShsP3ArMTpoLmxlbmd0aCk7Zm9yKHZhciBrPShsP3A6MCk7azxxO2srKyl7dmFyIG09aFtrXTtpZihtLnNlbGVjdGVkKXt2YXIgcz1tLnZhbHVlO2lmKCFzKXtzPShtLmF0dHJpYnV0ZXMmJm0uYXR0cmlidXRlcy52YWx1ZSYmIShtLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkKSk/bS50ZXh0Om0udmFsdWV9aWYobCl7cmV0dXJuIHN9ci5wdXNoKHMpfX1yZXR1cm4gcn1yZXR1cm4gZihnKS52YWwoKX07Zi5mbi5jbGVhckZvcm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YoImlucHV0LHNlbGVjdCx0ZXh0YXJlYSIsdGhpcykuY2xlYXJGaWVsZHMoZyl9KX07Zi5mbi5jbGVhckZpZWxkcz1mLmZuLmNsZWFySW5wdXRzPWZ1bmN0aW9uKGcpe3ZhciBoPS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaj10aGlzLnR5cGUsaT10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihoLnRlc3Qoail8fGk9PSJ0ZXh0YXJlYSIpe3RoaXMudmFsdWU9IiJ9ZWxzZXtpZihqPT0iY2hlY2tib3gifHxqPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9ZmFsc2V9ZWxzZXtpZihpPT0ic2VsZWN0Iil7dGhpcy5zZWxlY3RlZEluZGV4PS0xfWVsc2V7aWYoaj09ImZpbGUiKXtpZigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7Zih0aGlzKS5yZXBsYWNlV2l0aChmKHRoaXMpLmNsb25lKHRydWUpKX1lbHNle2YodGhpcykudmFsKCIiKX19ZWxzZXtpZihnKXtpZigoZz09PXRydWUmJi9oaWRkZW4vLnRlc3QoaikpfHwodHlwZW9mIGc9PSJzdHJpbmciJiZmKHRoaXMpLmlzKGcpKSl7dGhpcy52YWx1ZT0iIn19fX19fX0pfTtmLmZuLnJlc2V0Rm9ybT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5yZXNldD09ImZ1bmN0aW9uInx8KHR5cGVvZiB0aGlzLnJlc2V0PT0ib2JqZWN0IiYmIXRoaXMucmVzZXQubm9kZVR5cGUpKXt0aGlzLnJlc2V0KCl9fSl9O2YuZm4uZW5hYmxlPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hZ30pfTtmLmZuLnNlbGVjdGVkPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9dGhpcy50eXBlO2lmKGg9PSJjaGVja2JveCJ8fGg9PSJyYWRpbyIpe3RoaXMuY2hlY2tlZD1nfWVsc2V7aWYodGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJvcHRpb24iKXt2YXIgaT1mKHRoaXMpLnBhcmVudCgic2VsZWN0Iik7aWYoZyYmaVswXSYmaVswXS50eXBlPT0ic2VsZWN0LW9uZSIpe2kuZmluZCgib3B0aW9uIikuc2VsZWN0ZWQoZmFsc2UpfXRoaXMuc2VsZWN0ZWQ9Z319fSl9O2YuZm4uYWpheFN1Ym1pdC5kZWJ1Zz1mYWxzZTtmdW5jdGlvbiBkKCl7aWYoIWYuZm4uYWpheFN1Ym1pdC5kZWJ1Zyl7cmV0dXJufXZhciBnPSJbanF1ZXJ5LmZvcm1dICIrQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsIiIpO2lmKHdpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cpe3dpbmRvdy5jb25zb2xlLmxvZyhnKX1lbHNle2lmKHdpbmRvdy5vcGVyYSYmd2luZG93Lm9wZXJhLnBvc3RFcnJvcil7d2luZG93Lm9wZXJhLnBvc3RFcnJvcihnKX19fX0pKTtQSwcIdhAQAaM+AACjPgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAc3RhdGljXGxpYlxtYXJrZWQubWluLmpzIWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz17fSx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLnJ1bGVzPWEubm9ybWFsLHRoaXMub3B0aW9ucy5nZm0mJih0aGlzLnJ1bGVzPXRoaXMub3B0aW9ucy50YWJsZXM/YS50YWJsZXM6YS5nZm0pfWZ1bmN0aW9uIHQoZSx0KXtpZih0aGlzLm9wdGlvbnM9dHx8aC5kZWZhdWx0cyx0aGlzLmxpbmtzPWUsdGhpcy5ydWxlcz11Lm5vcm1hbCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sIXRoaXMubGlua3MpdGhyb3cgbmV3IEVycm9yKCJUb2tlbnMgYXJyYXkgcmVxdWlyZXMgYSBgbGlua3NgIHByb3BlcnR5LiIpO3RoaXMub3B0aW9ucy5nZm0/dGhpcy5ydWxlcz10aGlzLm9wdGlvbnMuYnJlYWtzP3UuYnJlYWtzOnUuZ2ZtOnRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHRoaXMucnVsZXM9dS5wZWRhbnRpYyl9ZnVuY3Rpb24gbigpe31mdW5jdGlvbiByKGUpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW49bnVsbCx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgbix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcn1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0Py8mL2c6LyYoPyEjP1x3KzspL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjMzk7Iil9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlPWUuc291cmNlLHQ9dHx8IiIsZnVuY3Rpb24gbihyLHMpe3JldHVybiByPyhzPXMuc291cmNlfHxzLHM9cy5yZXBsYWNlKC8oXnxbXlxbXSlcXi9nLCIkMSIpLGU9ZS5yZXBsYWNlKHIscyksbik6bmV3IFJlZ0V4cChlLHQpfX1mdW5jdGlvbiBsKCl7fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0LG4scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Q9YXJndW1lbnRzW3JdO2ZvcihuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfXJldHVybiBlfWZ1bmN0aW9uIGgodCxuLGkpe2lmKGl8fCJmdW5jdGlvbiI9PXR5cGVvZiBuKXtpfHwoaT1uLG49bnVsbCksbj1vKHt9LGguZGVmYXVsdHMsbnx8e30pO3ZhciBsLGEsdT1uLmhpZ2hsaWdodCxwPTA7dHJ5e2w9ZS5sZXgodCxuKX1jYXRjaChjKXtyZXR1cm4gaShjKX1hPWwubGVuZ3RoO3ZhciBnPWZ1bmN0aW9uKCl7dmFyIGUsdDt0cnl7ZT1yLnBhcnNlKGwsbil9Y2F0Y2gocyl7dD1zfXJldHVybiBuLmhpZ2hsaWdodD11LHQ/aSh0KTppKG51bGwsZSl9O2lmKCF1fHx1Lmxlbmd0aDwzKXJldHVybiBnKCk7aWYoZGVsZXRlIG4uaGlnaGxpZ2h0LCFhKXJldHVybiBnKCk7Zm9yKDtwPGwubGVuZ3RoO3ArKykhZnVuY3Rpb24oZSl7cmV0dXJuImNvZGUiIT09ZS50eXBlPy0tYXx8ZygpOnUoZS50ZXh0LGUubGFuZyxmdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1ufHxuPT09ZS50ZXh0Py0tYXx8ZygpOihlLnRleHQ9bixlLmVzY2FwZWQ9ITAsLS1hfHxnKCksdm9pZCAwKX0pfShsW3BdKX1lbHNlIHRyeXtyZXR1cm4gbiYmKG49byh7fSxoLmRlZmF1bHRzLG4pKSxyLnBhcnNlKGUubGV4KHQsbiksbil9Y2F0Y2goYyl7aWYoYy5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL2NoamovbWFya2VkLiIsKG58fGguZGVmYXVsdHMpLnNpbGVudClyZXR1cm4iPHA+QW4gZXJyb3Igb2NjdXJlZDo8L3A+PHByZT4iK3MoYy5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+Ijt0aHJvdyBjfX12YXIgYT17bmV3bGluZTovXlxuKy8sY29kZTovXiggezR9W15cbl0rXG4qKSsvLGZlbmNlczpsLGhyOi9eKCAqWy0qX10pezMsfSAqKD86XG4rfCQpLyxoZWFkaW5nOi9eICooI3sxLDZ9KSAqKFteXG5dKz8pICojKiAqKD86XG4rfCQpLyxucHRhYmxlOmwsbGhlYWRpbmc6L14oW15cbl0rKVxuICooPXwtKXsyLH0gKig/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggKj5bXlxuXSsoXG5bXlxuXSspKlxuKikrLyxsaXN0Oi9eKCAqKShidWxsKSBbXHNcU10rPyg/OmhyfFxuezIsfSg/ISApKD8hXDFidWxsIClcbip8XHMqJCkvLGh0bWw6L14gKig/OmNvbW1lbnR8Y2xvc2VkfGNsb3NpbmcpICooPzpcbnsyLH18XHMqJCkvLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArWyIoXShbXlxuXSspWyIpXSk/ICooPzpcbit8JCkvLHRhYmxlOmwscGFyYWdyYXBoOi9eKCg/OlteXG5dK1xuPyg/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXx0YWd8ZGVmKSkrKVxuKi8sdGV4dDovXlteXG5dKy99O2EuYnVsbGV0PS8oPzpbKistXXxcZCtcLikvLGEuaXRlbT0vXiggKikoYnVsbCkgW15cbl0qKD86XG4oPyFcMWJ1bGwgKVteXG5dKikqLyxhLml0ZW09aShhLml0ZW0sImdtIikoL2J1bGwvZyxhLmJ1bGxldCkoKSxhLmxpc3Q9aShhLmxpc3QpKC9idWxsL2csYS5idWxsZXQpKCJociIsL1xuKyg/PSg/OiAqWy0qX10pezMsfSAqKD86XG4rfCQpKS8pKCksYS5fdGFnPSIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITovfEApXFxiIixhLmh0bWw9aShhLmh0bWwpKCJjb21tZW50IiwvPCEtLVtcc1xTXSo/LS0+LykoImNsb3NlZCIsLzwodGFnKVtcc1xTXSs/PFwvXDE+LykoImNsb3NpbmciLC88dGFnKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vKSgvdGFnL2csYS5fdGFnKSgpLGEucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCJociIsYS5ocikoImhlYWRpbmciLGEuaGVhZGluZykoImxoZWFkaW5nIixhLmxoZWFkaW5nKSgiYmxvY2txdW90ZSIsYS5ibG9ja3F1b3RlKSgidGFnIiwiPCIrYS5fdGFnKSgiZGVmIixhLmRlZikoKSxhLm5vcm1hbD1vKHt9LGEpLGEuZ2ZtPW8oe30sYS5ub3JtYWwse2ZlbmNlczovXiAqKGB7Myx9fH57Myx9KSAqKFxTKyk/ICpcbihbXHNcU10rPylccypcMSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6L14vfSksYS5nZm0ucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCIoPyEiLCIoPyEiK2EuZ2ZtLmZlbmNlcy5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwyIikrInwiK2EubGlzdC5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwzIikrInwiKSgpLGEudGFibGVzPW8oe30sYS5nZm0se25wdGFibGU6L14gKihcUy4qXHwuKilcbiAqKFstOl0rICpcfFstfCA6XSopXG4oKD86LipcfC4qKD86XG58JCkpKilcbiovLHRhYmxlOi9eICpcfCguKylcbiAqXHwoICpbLTpdK1stfCA6XSopXG4oKD86ICpcfC4qKD86XG58JCkpKilcbiovfSksZS5ydWxlcz1hLGUubGV4PWZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IGUobik7cmV0dXJuIHIubGV4KHQpfSxlLnByb3RvdHlwZS5sZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9cclxufFxyL2csIlxuIikucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL1x1MDBhMC9nLCIgIikucmVwbGFjZSgvXHUyNDI0L2csIlxuIiksdGhpcy50b2tlbihlLCEwKX0sZS5wcm90b3R5cGUudG9rZW49ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixzLGksbCxvLGgsdSxwLGU9ZS5yZXBsYWNlKC9eICskL2dtLCIiKTtlOylpZigocz10aGlzLnJ1bGVzLm5ld2xpbmUuZXhlYyhlKSkmJihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzWzBdLmxlbmd0aD4xJiZ0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJzcGFjZSJ9KSkscz10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzPXNbMF0ucmVwbGFjZSgvXiB7NH0vZ20sIiIpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3M6cy5yZXBsYWNlKC9cbiskLywiIil9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIixsYW5nOnNbMl0sdGV4dDpzWzNdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaGVhZGluZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmciLGRlcHRoOnNbMV0ubGVuZ3RoLHRleHQ6c1syXX0pO2Vsc2UgaWYodCYmKHM9dGhpcy5ydWxlcy5ucHRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC9cbiQvLCIiKS5zcGxpdCgiXG4iKX0sdT0wO3U8by5hbGlnbi5sZW5ndGg7dSsrKW8uYWxpZ25bdV09L14gKi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3Qoby5hbGlnblt1XSk/ImxlZnQiOm51bGw7Zm9yKHU9MDt1PG8uY2VsbHMubGVuZ3RoO3UrKylvLmNlbGxzW3VdPW8uY2VsbHNbdV0uc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZihzPXRoaXMucnVsZXMubGhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDoiPSI9PT1zWzJdPzE6Mix0ZXh0OnNbMV19KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5oci5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhyIn0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmJsb2NrcXVvdGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX3N0YXJ0In0pLHM9c1swXS5yZXBsYWNlKC9eICo+ID8vZ20sIiIpLHRoaXMudG9rZW4ocyx0KSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX2VuZCJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5saXN0LmV4ZWMoZSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxpPXNbMl0sdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9zdGFydCIsb3JkZXJlZDppLmxlbmd0aD4xfSkscz1zWzBdLm1hdGNoKHRoaXMucnVsZXMuaXRlbSksbj0hMSxwPXMubGVuZ3RoLHU9MDtwPnU7dSsrKW89c1t1XSxoPW8ubGVuZ3RoLG89by5yZXBsYWNlKC9eICooWyorLV18XGQrXC4pICsvLCIiKSx+by5pbmRleE9mKCJcbiAiKSYmKGgtPW8ubGVuZ3RoLG89dGhpcy5vcHRpb25zLnBlZGFudGljP28ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik6by5yZXBsYWNlKG5ldyBSZWdFeHAoIl4gezEsIitoKyJ9IiwiZ20iKSwiIikpLHRoaXMub3B0aW9ucy5zbWFydExpc3RzJiZ1IT09cC0xJiYobD1hLmJ1bGxldC5leGVjKHNbdSsxXSlbMF0saT09PWx8fGkubGVuZ3RoPjEmJmwubGVuZ3RoPjF8fChlPXMuc2xpY2UodSsxKS5qb2luKCJcbiIpK2UsdT1wLTEpKSxyPW58fC9cblxuKD8hXHMqJCkvLnRlc3QobyksdSE9PXAtMSYmKG49IlxuIj09PW8uY2hhckF0KG8ubGVuZ3RoLTEpLHJ8fChyPW4pKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnI/Imxvb3NlX2l0ZW1fc3RhcnQiOiJsaXN0X2l0ZW1fc3RhcnQifSksdGhpcy50b2tlbihvLCExKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW1fZW5kIn0pO3RoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3RfZW5kIn0pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmh0bWwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8icGFyYWdyYXBoIjoiaHRtbCIscHJlOiJwcmUiPT09c1sxXXx8InNjcmlwdCI9PT1zWzFdfHwic3R5bGUiPT09c1sxXSx0ZXh0OnNbMF19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMuZGVmLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLmxpbmtzW3NbMV0udG9Mb3dlckNhc2UoKV09e2hyZWY6c1syXSx0aXRsZTpzWzNdfTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMudGFibGUuZXhlYyhlKSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxvPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOnNbMV0ucmVwbGFjZSgvXiAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGFsaWduOnNbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxjZWxsczpzWzNdLnJlcGxhY2UoLyg/OiAqXHwgKik/XG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnJlcGxhY2UoL14gKlx8ICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyk7dGhpcy50b2tlbnMucHVzaChvKX1lbHNlIGlmKHQmJihzPXRoaXMucnVsZXMucGFyYWdyYXBoLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InBhcmFncmFwaCIsdGV4dDoiXG4iPT09c1sxXS5jaGFyQXQoc1sxXS5sZW5ndGgtMSk/c1sxXS5zbGljZSgwLC0xKTpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMudGV4dC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InRleHQiLHRleHQ6c1swXX0pO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiB0aGlzLnRva2Vuc307dmFyIHU9e2VzY2FwZTovXlxcKFtcXGAqe31cW1xdKCkjK1wtLiFfPl0pLyxhdXRvbGluazovXjwoW14gPl0rKEB8OlwvKVteID5dKyk+Lyx1cmw6bCx0YWc6L148IS0tW1xzXFNdKj8tLT58XjxcLz9cdysoPzoiW14iXSoifCdbXiddKid8W14nIj5dKSo/Pi8sbGluazovXiE/XFsoaW5zaWRlKVxdXChocmVmXCkvLHJlZmxpbms6L14hP1xbKGluc2lkZSlcXVxzKlxbKFteXF1dKilcXS8sbm9saW5rOi9eIT9cWygoPzpcW1teXF1dKlxdfFteXFtcXV0pKilcXS8sc3Ryb25nOi9eX18oW1xzXFNdKz8pX18oPyFfKXxeXCpcKihbXHNcU10rPylcKlwqKD8hXCopLyxlbTovXlxiXygoPzpfX3xbXHNcU10pKz8pX1xifF5cKigoPzpcKlwqfFtcc1xTXSkrPylcKig/IVwqKS8sY29kZTovXihgKylccyooW1xzXFNdKj9bXmBdKVxzKlwxKD8hYCkvLGJyOi9eIHsyLH1cbig/IVxzKiQpLyxkZWw6bCx0ZXh0Oi9eW1xzXFNdKz8oPz1bXFw8IVxbXypgXXwgezIsfVxufCQpL307dS5faW5zaWRlPS8oPzpcW1teXF1dKlxdfFteXFtcXV18XF0oPz1bXlxbXSpcXSkpKi8sdS5faHJlZj0vXHMqPD8oW1xzXFNdKj8pPj8oPzpccytbJyJdKFtcc1xTXSo/KVsnIl0pP1xzKi8sdS5saW5rPWkodS5saW5rKSgiaW5zaWRlIix1Ll9pbnNpZGUpKCJocmVmIix1Ll9ocmVmKSgpLHUucmVmbGluaz1pKHUucmVmbGluaykoImluc2lkZSIsdS5faW5zaWRlKSgpLHUubm9ybWFsPW8oe30sdSksdS5wZWRhbnRpYz1vKHt9LHUubm9ybWFsLHtzdHJvbmc6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbTovXl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXyl8XlwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKikvfSksdS5nZm09byh7fSx1Lm5vcm1hbCx7ZXNjYXBlOmkodS5lc2NhcGUpKCJdKSIsIn58XSkiKSgpLHVybDovXihodHRwcz86XC9cL1teXHM8XStbXjwuLDo7IicpXF1cc10pLyxkZWw6L15+fig/PVxTKShbXHNcU10qP1xTKX5+Lyx0ZXh0OmkodS50ZXh0KSgiXXwiLCJ+XXwiKSgifCIsInxodHRwcz86Ly98IikoKX0pLHUuYnJlYWtzPW8oe30sdS5nZm0se2JyOmkodS5icikoInsyLH0iLCIqIikoKSx0ZXh0OmkodS5nZm0udGV4dCkoInsyLH0iLCIqIikoKX0pLHQucnVsZXM9dSx0Lm91dHB1dD1mdW5jdGlvbihlLG4scil7dmFyIHM9bmV3IHQobixyKTtyZXR1cm4gcy5vdXRwdXQoZSl9LHQucHJvdG90eXBlLm91dHB1dD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGksbD0iIjtlOylpZihpPXRoaXMucnVsZXMuZXNjYXBlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9aVsxXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5hdXRvbGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLCJAIj09PWlbMl0/KG49IjoiPT09aVsxXS5jaGFyQXQoNik/dGhpcy5tYW5nbGUoaVsxXS5zdWJzdHJpbmcoNykpOnRoaXMubWFuZ2xlKGlbMV0pLHI9dGhpcy5tYW5nbGUoIm1haWx0bzoiKStuKToobj1zKGlbMV0pLHI9biksbCs9dGhpcy5yZW5kZXJlci5saW5rKHIsbnVsbCxuKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy51cmwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxuPXMoaVsxXSkscj1uLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudGFnLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vcHRpb25zLnNhbml0aXplP3MoaVswXSk6aVswXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5saW5rLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vdXRwdXRMaW5rKGkse2hyZWY6aVsyXSx0aXRsZTppWzNdfSk7ZWxzZSBpZigoaT10aGlzLnJ1bGVzLnJlZmxpbmsuZXhlYyhlKSl8fChpPXRoaXMucnVsZXMubm9saW5rLmV4ZWMoZSkpKXtpZihlPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx0PShpWzJdfHxpWzFdKS5yZXBsYWNlKC9ccysvZywiICIpLHQ9dGhpcy5saW5rc1t0LnRvTG93ZXJDYXNlKCldLCF0fHwhdC5ocmVmKXtsKz1pWzBdLmNoYXJBdCgwKSxlPWlbMF0uc3Vic3RyaW5nKDEpK2U7Y29udGludWV9bCs9dGhpcy5vdXRwdXRMaW5rKGksdCl9ZWxzZSBpZihpPXRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5zdHJvbmcodGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmVtLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5lbSh0aGlzLm91dHB1dChpWzJdfHxpWzFdKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuY29kZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuY29kZXNwYW4ocyhpWzJdLCEwKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuYnIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmJyKCk7ZWxzZSBpZihpPXRoaXMucnVsZXMuZGVsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoaVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz1zKHRoaXMuc21hcnR5cGFudHMoaVswXSkpO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiBsfSx0LnByb3RvdHlwZS5vdXRwdXRMaW5rPWZ1bmN0aW9uKGUsdCl7dmFyIG49cyh0LmhyZWYpLHI9dC50aXRsZT9zKHQudGl0bGUpOm51bGw7cmV0dXJuIiEiIT09ZVswXS5jaGFyQXQoMCk/dGhpcy5yZW5kZXJlci5saW5rKG4scix0aGlzLm91dHB1dChlWzFdKSk6dGhpcy5yZW5kZXJlci5pbWFnZShuLHIscyhlWzFdKSl9LHQucHJvdG90eXBlLnNtYXJ0eXBhbnRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/ZS5yZXBsYWNlKC8tLS9nLCLigJQiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQx4oCYIikucmVwbGFjZSgvJy9nLCLigJkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDHigJwiKS5yZXBsYWNlKC8iL2csIuKAnSIpLnJlcGxhY2UoL1wuezN9L2csIuKApiIpOmV9LHQucHJvdG90eXBlLm1hbmdsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixyPWUubGVuZ3RoLHM9MDtyPnM7cysrKXQ9ZS5jaGFyQ29kZUF0KHMpLE1hdGgucmFuZG9tKCk+LjUmJih0PSJ4Iit0LnRvU3RyaW5nKDE2KSksbis9IiYjIit0KyI7IjtyZXR1cm4gbn0sbi5wcm90b3R5cGUuY29kZT1mdW5jdGlvbihlLHQsbixyKXtpZihyPXJ8fHt9LHIuaGlnaGxpZ2h0KXt2YXIgaT1yLmhpZ2hsaWdodChlLHQpO251bGwhPWkmJmkhPT1lJiYobj0hMCxlPWkpfXJldHVybiB0Pyc8cHJlPjxjb2RlIGNsYXNzPSInK3IubGFuZ1ByZWZpeCt0KyciPicrKG4/ZTpzKGUpKSsiXG48L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKG4/ZTpzKGUsITApKSsiXG48L2NvZGU+PC9wcmU+In0sbi5wcm90b3R5cGUuYmxvY2txdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4iPGJsb2NrcXVvdGU+XG4iK2UrIjwvYmxvY2txdW90ZT5cbiJ9LG4ucHJvdG90eXBlLmh0bWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG4ucHJvdG90eXBlLmhlYWRpbmc9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIjxoIit0KycgaWQ9Iicrci5oZWFkZXJQcmVmaXgrbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teXHddKy9nLCItIikrJyI+JytlKyI8L2giK3QrIj5cbiJ9LG4ucHJvdG90eXBlLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIjxocj5cbiJ9LG4ucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj10PyJvbCI6InVsIjtyZXR1cm4iPCIrbisiPlxuIitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUubGlzdGl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxsaT4iK2UrIjwvbGk+XG4ifSxuLnByb3RvdHlwZS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7cmV0dXJuIjxwPiIrZSsiPC9wPlxuIn0sbi5wcm90b3R5cGUudGFibGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHRhYmxlPlxuPHRoZWFkPlxuIitlKyI8L3RoZWFkPlxuIisiPHRib2R5PlxuIit0KyI8L3Rib2R5PlxuIisiPC90YWJsZT5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlcm93PWZ1bmN0aW9uKGUpe3JldHVybiI8dHI+XG4iK2UrIjwvdHI+XG4ifSxuLnByb3RvdHlwZS50YWJsZWNlbGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmhlYWRlcj8idGgiOiJ0ZCIscj10LmFsaWduPyI8IituKycgc3R5bGU9InRleHQtYWxpZ246Jyt0LmFsaWduKyciPic6IjwiK24rIj4iO3JldHVybiByK2UrIjwvIituKyI+XG4ifSxuLnByb3RvdHlwZS5zdHJvbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIjxzdHJvbmc+IitlKyI8L3N0cm9uZz4ifSxuLnByb3RvdHlwZS5lbT1mdW5jdGlvbihlKXtyZXR1cm4iPGVtPiIrZSsiPC9lbT4ifSxuLnByb3RvdHlwZS5jb2Rlc3Bhbj1mdW5jdGlvbihlKXtyZXR1cm4iPGNvZGU+IitlKyI8L2NvZGU+In0sbi5wcm90b3R5cGUuYnI9ZnVuY3Rpb24oKXtyZXR1cm4iPGJyPiJ9LG4ucHJvdG90eXBlLmRlbD1mdW5jdGlvbihlKXtyZXR1cm4iPGRlbD4iK2UrIjwvZGVsPiJ9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8YSBocmVmPSInK2UrJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4iK24rIjwvYT4ifSxuLnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9JzxpbWcgc3JjPSInK2UrJyIgYWx0PSInK24rJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4ifSxyLnBhcnNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1uZXcgcih0LG4pO3JldHVybiBzLnBhcnNlKGUpfSxyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlKXt0aGlzLmlubGluZT1uZXcgdChlLmxpbmtzLHRoaXMub3B0aW9ucyx0aGlzLnJlbmRlcmVyKSx0aGlzLnRva2Vucz1lLnJldmVyc2UoKTtmb3IodmFyIG49IiI7dGhpcy5uZXh0KCk7KW4rPXRoaXMudG9rKCk7cmV0dXJuIG59LHIucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbj10aGlzLnRva2Vucy5wb3AoKX0sci5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGgtMV18fDB9LHIucHJvdG90eXBlLnBhcnNlVGV4dD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnRva2VuLnRleHQ7InRleHQiPT09dGhpcy5wZWVrKCkudHlwZTspZSs9IlxuIit0aGlzLm5leHQoKS50ZXh0O3JldHVybiB0aGlzLmlubGluZS5vdXRwdXQoZSl9LHIucHJvdG90eXBlLnRvaz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLnRva2VuLnR5cGUpe2Nhc2Uic3BhY2UiOnJldHVybiIiO2Nhc2UiaHIiOnJldHVybiB0aGlzLnJlbmRlcmVyLmhyKCk7Y2FzZSJoZWFkaW5nIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpLHRoaXMudG9rZW4uZGVwdGgsdGhpcy50b2tlbi50ZXh0LHRoaXMub3B0aW9ucyk7Y2FzZSJjb2RlIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5jb2RlKHRoaXMudG9rZW4udGV4dCx0aGlzLnRva2VuLmxhbmcsdGhpcy50b2tlbi5lc2NhcGVkLHRoaXMub3B0aW9ucyk7Y2FzZSJ0YWJsZSI6dmFyIGUsdCxuLHIscyxpPSIiLGw9IiI7Zm9yKG49IiIsZT0wO2U8dGhpcy50b2tlbi5oZWFkZXIubGVuZ3RoO2UrKylyPXtoZWFkZXI6ITAsYWxpZ246dGhpcy50b2tlbi5hbGlnbltlXX0sbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4uaGVhZGVyW2VdKSx7aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19KTtmb3IoaSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhuKSxlPTA7ZTx0aGlzLnRva2VuLmNlbGxzLmxlbmd0aDtlKyspe2Zvcih0PXRoaXMudG9rZW4uY2VsbHNbZV0sbj0iIixzPTA7czx0Lmxlbmd0aDtzKyspbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRbc10pLHtoZWFkZXI6ITEsYWxpZ246dGhpcy50b2tlbi5hbGlnbltzXX0pO2wrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobil9cmV0dXJuIHRoaXMucmVuZGVyZXIudGFibGUoaSxsKTtjYXNlImJsb2NrcXVvdGVfc3RhcnQiOmZvcih2YXIgbD0iIjsiYmxvY2txdW90ZV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGwpO2Nhc2UibGlzdF9zdGFydCI6Zm9yKHZhciBsPSIiLG89dGhpcy50b2tlbi5vcmRlcmVkOyJsaXN0X2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3QobCxvKTtjYXNlImxpc3RfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPSJ0ZXh0Ij09PXRoaXMudG9rZW4udHlwZT90aGlzLnBhcnNlVGV4dCgpOnRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJsb29zZV9pdGVtX3N0YXJ0Ijpmb3IodmFyIGw9IiI7Imxpc3RfaXRlbV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0aXRlbShsKTtjYXNlImh0bWwiOnZhciBoPXRoaXMudG9rZW4ucHJlfHx0aGlzLm9wdGlvbnMucGVkYW50aWM/dGhpcy50b2tlbi50ZXh0OnRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpO3JldHVybiB0aGlzLnJlbmRlcmVyLmh0bWwoaCk7Y2FzZSJwYXJhZ3JhcGgiOnJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZVRleHQoKSl9fSxsLmV4ZWM9bCxoLm9wdGlvbnM9aC5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBvKGguZGVmYXVsdHMsZSksaH0saC5kZWZhdWx0cz17Z2ZtOiEwLHRhYmxlczohMCxicmVha3M6ITEscGVkYW50aWM6ITEsc2FuaXRpemU6ITEsc21hcnRMaXN0czohMSxzaWxlbnQ6ITEsaGlnaGxpZ2h0Om51bGwsbGFuZ1ByZWZpeDoibGFuZy0iLHNtYXJ0eXBhbnRzOiExLGhlYWRlclByZWZpeDoiIixyZW5kZXJlcjpuZXcgbn0saC5QYXJzZXI9cixoLnBhcnNlcj1yLnBhcnNlLGguUmVuZGVyZXI9bixoLkxleGVyPWUsaC5sZXhlcj1lLmxleCxoLklubGluZUxleGVyPXQsaC5pbmxpbmVMZXhlcj10Lm91dHB1dCxoLnBhcnNlPWgsIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWg6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZnVuY3Rpb24oKXtyZXR1cm4gaH0pOnRoaXMubWFya2VkPWh9LmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpnbG9iYWwpfSgpKTtQSwcIQvpMalM5AABTOQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAc3RhdGljXGxpYlx2YWxpZGF0ZS5taW4uanMvKgogKiB2YWxpZGF0ZS5qcyAxLjMKICogQ29weXJpZ2h0IChjKSAyMDEzIFJpY2sgSGFycmlzb24sIGh0dHA6Ly9yaWNraGFycmlzb24ubWUKICogdmFsaWRhdGUuanMgaXMgb3BlbiBzb3VyY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KICogUG9ydGlvbnMgb2YgdmFsaWRhdGUuanMgYXJlIGluc3BpcmVkIGJ5IENvZGVJZ25pdGVyLgogKiBodHRwOi8vcmlja2hhcnJpc29uLmdpdGh1Yi5jb20vdmFsaWRhdGUuanMKICovCgooZnVuY3Rpb24ocSxyLG0pe3ZhciBzPXtyZXF1aXJlZDoiVGhlICVzIGZpZWxkIGlzIHJlcXVpcmVkLiIsbWF0Y2hlczoiVGhlICVzIGZpZWxkIGRvZXMgbm90IG1hdGNoIHRoZSAlcyBmaWVsZC4iLCJkZWZhdWx0IjoiVGhlICVzIGZpZWxkIGlzIHN0aWxsIHNldCB0byBkZWZhdWx0LCBwbGVhc2UgY2hhbmdlLiIsdmFsaWRfZW1haWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiIsdmFsaWRfZW1haWxzOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFsbCB2YWxpZCBlbWFpbCBhZGRyZXNzZXMuIixtaW5fbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBhdCBsZWFzdCAlcyBjaGFyYWN0ZXJzIGluIGxlbmd0aC4iLG1heF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IG5vdCBleGNlZWQgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixleGFjdF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IGJlIGV4YWN0bHkgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixncmVhdGVyX3RoYW46IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBudW1iZXIgZ3JlYXRlciB0aGFuICVzLiIsbGVzc190aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGxlc3MgdGhhbiAlcy4iLGFscGhhOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMuIixhbHBoYV9udW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzLiIsYWxwaGFfZGFzaDoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycywgdW5kZXJzY29yZXMsIGFuZCBkYXNoZXMuIixudW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgbnVtYmVycy4iLGludGVnZXI6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYW4gaW50ZWdlci4iLGRlY2ltYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBkZWNpbWFsIG51bWJlci4iLGlzX25hdHVyYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSBwb3NpdGl2ZSBudW1iZXJzLiIsaXNfbmF0dXJhbF9ub196ZXJvOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvLiIsdmFsaWRfaXA6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBJUC4iLHZhbGlkX2Jhc2U2NDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIGJhc2U2NCBzdHJpbmcuIix2YWxpZF9jcmVkaXRfY2FyZDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci4iLGlzX2ZpbGVfdHlwZToiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5ICVzIGZpbGVzLiIsdmFsaWRfdXJsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgVVJMLiJ9LHQ9ZnVuY3Rpb24oYSl7fSx1PS9eKC4rPylcWyguKylcXSQvLGg9L15bMC05XSskLyx2PS9eXC0/WzAtOV0rJC8saz0vXlwtP1swLTldKlwuP1swLTldKyQvLHA9L15bYS16QS1aMC05LiEjJCUmYW1wOycqK1wtXC89P1xeX2B7fH1+XC1dK0BbYS16QS1aMC05XC1dKyg/OlwuW2EtekEtWjAtOVwtXSspKiQvLHc9L15bYS16XSskL2kseD0vXlthLXowLTldKyQvaSx5PS9eW2EtejAtOV9cLV0rJC9pLHo9L15bMC05XSskL2ksQT0vXlsxLTldWzAtOV0qJC9pLEI9L14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pJC9pLEM9L1teYS16QS1aMC05XC9cKz1dL2ksRD0vXltcZFwtXHNdKyQvLEU9L14oKGh0dHB8aHR0cHMpOlwvXC8oXHcrOnswLDF9XHcqQCk/KFxTKyl8KSg6WzAtOV0rKT8oXC98XC8oW1x3IyE6Lj8rPSYlQCFcLVwvXSkpPyQvLGU9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY2FsbGJhY2s9Y3x8dDt0aGlzLmVycm9ycz1bXTt0aGlzLmZpZWxkcz17fTt0aGlzLmZvcm09dGhpcy5fZm9ybUJ5TmFtZU9yTm9kZShhKXx8e307dGhpcy5tZXNzYWdlcz17fTt0aGlzLmhhbmRsZXJzPXt9O2E9MDtmb3IoYz1iLmxlbmd0aDthPGM7YSsrKXt2YXIgZD1iW2FdO2lmKChkLm5hbWV8fGQubmFtZXMpJiZkLnJ1bGVzKWlmKGQubmFtZXMpZm9yKHZhciBsPTA7bDxkLm5hbWVzLmxlbmd0aDtsKyspdGhpcy5fYWRkRmllbGQoZCxkLm5hbWVzW2xdKTtlbHNlIHRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lKX12YXIgZz10aGlzLmZvcm0ub25zdWJtaXQ7dGhpcy5mb3JtLm9uc3VibWl0PWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXt0cnl7cmV0dXJuIGEuX3ZhbGlkYXRlRm9ybShiKSYmKGc9PT1tfHxnKCkpfWNhdGNoKGMpe319fSh0aGlzKX0sbj1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKDA8YS5sZW5ndGgmJigicmFkaW8iPT09YVswXS50eXBlfHwiY2hlY2tib3giPT09YVswXS50eXBlKSlmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXtpZihhW2NdLmNoZWNrZWQpcmV0dXJuIGFbY11bYl19ZWxzZSByZXR1cm4gYVtiXX07ZS5wcm90b3R5cGUuc2V0TWVzc2FnZT1mdW5jdGlvbihhLGIpe3RoaXMubWVzc2FnZXNbYV09YjtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUucmVnaXN0ZXJDYWxsYmFjaz1mdW5jdGlvbihhLGIpe2EmJigic3RyaW5nIj09PXR5cGVvZiBhJiZiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGIpJiYodGhpcy5oYW5kbGVyc1thXT1iKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuX2Zvcm1CeU5hbWVPck5vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgYT9hOnIuZm9ybXNbYV19O2UucHJvdG90eXBlLl9hZGRGaWVsZD1mdW5jdGlvbihhLGIpe3RoaXMuZmllbGRzW2JdPXtuYW1lOmIsZGlzcGxheTphLmRpc3BsYXl8fGIscnVsZXM6YS5ydWxlcyxpZDpudWxsLHR5cGU6bnVsbCx2YWx1ZTpudWxsLGNoZWNrZWQ6bnVsbH19O2UucHJvdG90eXBlLl92YWxpZGF0ZUZvcm09ZnVuY3Rpb24oYSl7dGhpcy5lcnJvcnM9W107Zm9yKHZhciBiIGluIHRoaXMuZmllbGRzKWlmKHRoaXMuZmllbGRzLmhhc093blByb3BlcnR5KGIpKXt2YXIgYz10aGlzLmZpZWxkc1tiXXx8e30sZD10aGlzLmZvcm1bYy5uYW1lXTtkJiZkIT09bSYmKGMuaWQ9bihkLCJpZCIpLGMudHlwZT0wPGQubGVuZ3RoP2RbMF0udHlwZTpkLnR5cGUsYy52YWx1ZT1uKGQsInZhbHVlIiksYy5jaGVja2VkPW4oZCwiY2hlY2tlZCIpLHRoaXMuX3ZhbGlkYXRlRmllbGQoYykpfSJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5jYWxsYmFjayYmdGhpcy5jYWxsYmFjayh0aGlzLmVycm9ycyxhKTswPHRoaXMuZXJyb3JzLmxlbmd0aCYmKGEmJmEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmV2ZW50JiYoZXZlbnQucmV0dXJuVmFsdWU9ITEpKTtyZXR1cm4hMH07ZS5wcm90b3R5cGUuX3ZhbGlkYXRlRmllbGQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEucnVsZXMuc3BsaXQoInwiKSxjPWEucnVsZXMuaW5kZXhPZigicmVxdWlyZWQiKSxkPSFhLnZhbHVlfHwiIj09PWEudmFsdWV8fGEudmFsdWU9PT1tLGw9MCxnPWIubGVuZ3RoO2w8ZztsKyspe3ZhciBmPWJbbF0sZT1udWxsLGg9ITEsaz11LmV4ZWMoZik7aWYoLTEhPT1jfHwtMSE9PWYuaW5kZXhPZigiIWNhbGxiYWNrXyIpfHwhZClpZihrJiYoZj1rWzFdLGU9a1syXSksIiEiPT09Zi5jaGFyQXQoMCkmJihmPWYuc3Vic3RyaW5nKDEsZi5sZW5ndGgpKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuX2hvb2tzW2ZdP3RoaXMuX2hvb2tzW2ZdLmFwcGx5KHRoaXMsW2EsZV0pfHwoaD0hMCk6ImNhbGxiYWNrXyI9PT1mLnN1YnN0cmluZygwLDkpJiYoZj1mLnN1YnN0cmluZyg5LGYubGVuZ3RoKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuaGFuZGxlcnNbZl0mJiExPT09dGhpcy5oYW5kbGVyc1tmXS5hcHBseSh0aGlzLFthLnZhbHVlLGVdKSYmKGg9ITApKSxoKXtiPXRoaXMubWVzc2FnZXNbZl18fHNbZl07Yz0iQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdpdGggdGhlICIrYS5kaXNwbGF5KyIgZmllbGQuIjtiJiYoYz1iLnJlcGxhY2UoIiVzIixhLmRpc3BsYXkpLGUmJihjPWMucmVwbGFjZSgiJXMiLHRoaXMuZmllbGRzW2VdP3RoaXMuZmllbGRzW2VdLmRpc3BsYXk6ZSkpKTt0aGlzLmVycm9ycy5wdXNoKHtpZDphLmlkLG5hbWU6YS5uYW1lLG1lc3NhZ2U6YyxydWxlOmZ9KTticmVha319fTtlLnByb3RvdHlwZS5faG9va3M9e3JlcXVpcmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWEudmFsdWU7cmV0dXJuImNoZWNrYm94Ij09PWEudHlwZXx8InJhZGlvIj09PWEudHlwZT8hMD09PWEuY2hlY2tlZDpudWxsIT09YiYmIiIhPT1ifSwiZGVmYXVsdCI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS52YWx1ZSE9PWJ9LG1hdGNoZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmZvcm1bYl07cmV0dXJuIGM/YS52YWx1ZT09PWMudmFsdWU6ITF9LHZhbGlkX2VtYWlsOmZ1bmN0aW9uKGEpe3JldHVybiBwLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2VtYWlsczpmdW5jdGlvbihhKXthPWEudmFsdWUuc3BsaXQoIiwiKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKylpZighcC50ZXN0KGFbYl0pKXJldHVybiExO3JldHVybiEwfSxtaW5fbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD49cGFyc2VJbnQoYiwxMCk6ITF9LG1heF9sZW5ndGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC50ZXN0KGIpP2EudmFsdWUubGVuZ3RoPD1wYXJzZUludChiLDEwKTohMX0sZXhhY3RfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD09PXBhcnNlSW50KGIsMTApOiExfSxncmVhdGVyX3RoYW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpP3BhcnNlRmxvYXQoYS52YWx1ZSk+cGFyc2VGbG9hdChiKTohMX0sbGVzc190aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPHBhcnNlRmxvYXQoYik6ITF9LGFscGhhOmZ1bmN0aW9uKGEpe3JldHVybiB3LnRlc3QoYS52YWx1ZSl9LGFscGhhX251bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIHgudGVzdChhLnZhbHVlKX0sYWxwaGFfZGFzaDpmdW5jdGlvbihhKXtyZXR1cm4geS50ZXN0KGEudmFsdWUpfSxudW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiBoLnRlc3QoYS52YWx1ZSl9LGludGVnZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHYudGVzdChhLnZhbHVlKX0sZGVjaW1hbDpmdW5jdGlvbihhKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsOmZ1bmN0aW9uKGEpe3JldHVybiB6LnRlc3QoYS52YWx1ZSl9LGlzX25hdHVyYWxfbm9femVybzpmdW5jdGlvbihhKXtyZXR1cm4gQS50ZXN0KGEudmFsdWUpfSx2YWxpZF9pcDpmdW5jdGlvbihhKXtyZXR1cm4gQi50ZXN0KGEudmFsdWUpfSx2YWxpZF9iYXNlNjQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEMudGVzdChhLnZhbHVlKX0sdmFsaWRfdXJsOmZ1bmN0aW9uKGEpe3JldHVybiBFLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2NyZWRpdF9jYXJkOmZ1bmN0aW9uKGEpe2lmKCFELnRlc3QoYS52YWx1ZSkpcmV0dXJuITE7dmFyIGI9MCxjPTAsZD0hMTthPWEudmFsdWUucmVwbGFjZSgvXEQvZywiIik7Zm9yKHZhciBlPWEubGVuZ3RoLTE7MDw9ZTtlLS0pYz1hLmNoYXJBdChlKSxjPXBhcnNlSW50KGMsMTApLGQmJjk8KGMqPTIpJiYoYy09OSksYis9YyxkPSFkO3JldHVybiAwPT09YiUxMH0saXNfZmlsZV90eXBlOmZ1bmN0aW9uKGEsYil7aWYoImZpbGUiIT09YS50eXBlKXJldHVybiEwO3ZhciBjPWEudmFsdWUuc3Vic3RyKGEudmFsdWUubGFzdEluZGV4T2YoIi4iKSsxKSxkPWIuc3BsaXQoIiwiKSxlPSExLGc9MCxmPWQubGVuZ3RoO2ZvcihnO2c8ZjtnKyspYz09ZFtnXSYmKGU9ITApO3JldHVybiBlfX07cS5Gb3JtVmFsaWRhdG9yPWV9KSh3aW5kb3csZG9jdW1lbnQpOwpQSwcIZowfxDMYAAAzGAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAdmlldy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAdmlld1xhZG1pbi9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxhcnRpY2xlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mt7vliqDmlofnq6A8L2E+DQogICAgPC9saT57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk5paH56ug5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9hcnRpY2xlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIlnRyEm4GAABuBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xhZG1pblxjbWQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcYWRtaW5cY21kXGJhY2t1cC5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciBjbGVhciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUgbGVmdCI+5aSH5Lu95pWw5o2uPC9oMT4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUgbGVmdCIgaWQ9ImJhY2t1cC1idG4iPuWkh+S7vTwvYnV0dG9uPg0KPC9oZWFkZXI+DQo8dWwgY2xhc3M9ImNtZC1saXN0IiBpZD0iYmFja3VwLWxpc3QiPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVUaW1lIC5Nb2RUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fSA8YSBjbGFzcz0ibGluayIgaHJlZj0iL2NtZC9iYWNrdXAvZmlsZT9maWxlPXt7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIiByZWw9Int7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZS1vIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNiYWNrdXAtYnRuJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICB0eXBlOiAicG9zdCIsDQogICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAkKCcuY21kLWxpc3QnKS5wcmVwZW5kKCc8bGkgY2xhc3M9ImJhY2t1cC1sb2FkaW5nIj7lpIfku73kuK0uLjwvbGk+Jyk7DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuaGlkZSgpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuYmFja3VwLWxvYWRpbmcnKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLXJlc3VsdCI+5Yia5Yia5aSH5Lu95YiwICcgKyBqc29uLmZpbGUgKyAnPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkKCcjYmFja3VwLWJ0bicpLnNob3coKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHVybDogIi9jbWQvYmFja3VwLz9maWxlPSIgKyAkKHRoaXMpLmF0dHIoInJlbCIpLA0KICAgICAgICAgICAgICAgIHR5cGU6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICQodGhhdCkucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCLeb5slHBwAARwcAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cY21kXGxvZy5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUiPumUmeivr+aXpeW/lzwvaDE+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJsb2ctbGlzdCI+e3tyYW5nZSAuTG9nc319DQogICAgPGxpIGNsYXNzPSJsb2cgcmVsYXRpdmUiPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSBpbmxpbmUtYmxvY2siPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxwcmUgY2xhc3M9InRleHQiPnt7LlRleHR9fTwvcHJlPg0KICAgICAgICA8YSBjbGFzcz0icmVtb3ZlIGFic29sdXRlIiBocmVmPSIvY21kL2xvZ3MvP2ZpbGU9e3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZW1vdmUnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi56Gu6K6k5Yig6Zmk6K6w5b2VIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgIHVybDokdGhpcy5hdHRyKCJocmVmIiksDQogICAgICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcI3rBgWBkEAAAZBAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAdmlld1xhZG1pblxjbWRcbWVzc2FnZS5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUiPua2iOaBr+iusOW9lTwvaDE+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJtZXNzYWdlLWxpc3QiPnt7cmFuZ2UgLk1lc3NhZ2VzfX0NCiAgICA8bGkgY2xhc3M9Im1lc3NhZ2UgcmVsYXRpdmUiPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhIj57e0h0bWwgLkRhdGF9fTwvZGl2Pg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD5QSwcIyZjInUYBAABGAQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxjb21tZW50cy5odG1sPGRpdiBpZD0iY29tbWVudC1saXN0IiBjbGFzcz0iYWRtaW4gY29udGFpbmVyOTYwIj57e3JhbmdlIC5Db21tZW50c319DQogICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciIgaWQ9ImNvbW1lbnQte3suSWR9fSI+DQogICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIGMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLXRpbWUiPjxpIGNsYXNzPSJmYSBmYS1jbG9jay1vIj48L2k+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWVtYWlsIj57ey5FbWFpbH19PC9zcGFuPnt7aWYgLkdldENvbnRlbnR9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNudCI+QHt7LkdldENvbnRlbnQuVGl0bGV9fTwvc3Bhbj57e2Vsc2V9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNudCI+QOaXoOaViDwvc3Bhbj57e2VuZH19e3tpZiBuZSAuU3RhdHVzICJhcHByb3ZlZCJ9fQ0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLWNoZWNrIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLlrqHmoLgiPjxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSI+PC9pPuWuoeaguOS4rTwvYT57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWbnuWkjSI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLWRlbCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Yig6ZmkIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj57e2VuZH19DQogICAgPHVsIGlkPSJhcnRpY2xlLXBhZ2VyIiBjbGFzcz0icGFnZXIgY29udGFpbmVyOTYwIj57e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgICAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQogICAgPC91bD4NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9jb21tZW50cy8iIGNsYXNzPSJmb3JtIGNsZWFyIGxlZnQiIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IGxlZnQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIiBpZD0iY29tbWVudC1zdWJtaXQiPuWbnuWkjeivhOiuujwvYnV0dG9uPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIiBpZD0iY29tbWVudC1jbG9zZSI+5YWz6Zet5Zue5aSNPC9idXR0b24+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBpZD0iY29tbWVudC1wYXJlbnQiIG5hbWU9InBpZCIvPg0KICAgIDwvZm9ybT4NCjwvZGl2Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtZGVsJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWIoOmZpOivhOiuuuWwhuS9v+ebuOWFs+WGheWuueaXoOaViCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgIHVybDogIi9hZG1pbi9jb21tZW50cy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NvbW1lbnQtJyArIGlkKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWIoOmZpOWksei0pSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5jLWNoZWNrJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWuoeaguOWQjuatpOS9nOiAheWwhuS4jeWGjeagh+iusOWuoeaguCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogInB1dCIsDQogICAgICAgICAgICAgICAgICAgIHVybDogIi9hZG1pbi9jb21tZW50cy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NvbW1lbnQtJyArIGlkKS5maW5kKCIuYy1jaGVjayIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5a6h5qC45aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtcmVwbHknKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtJytpZCkuYXBwZW5kKCQoJyNjb21tZW50LWZvcm0nKS5kZXRhY2goKS5zaG93KCkpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKGlkKTsNCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Llm57lpI0iKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vY29tbWVudHMvIjsNCiAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlm57lpI3lpLHotKUiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgICQoJyNjb21tZW50LWNsb3NlJykub24oImNsaWNrIixmdW5jdGlvbigpew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtZm9ybScpLmhpZGUoKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LWNvbnRlbnQnKS52YWwoIiIpOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCECYCO/tDwAA7Q8AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAHZpZXdcYWRtaW5cZWRpdF9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIiB2YWx1ZT0ie3suQXJ0aWNsZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5BcnRpY2xlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suQXJ0aWNsZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+IiB2YWx1ZT0ie3suQXJ0aWNsZS5UYWdTdHJpbmd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoInt7aWYgZXEgLkFydGljbGUuU3RhdHVzICJwdWJsaXNoIn19IHNlbGVjdGVke3tlbmR9fT7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCJ7e2lmIGVxIC5BcnRpY2xlLlN0YXR1cyAiZHJhZnQifX0gc2VsZWN0ZWR7e2VuZH19PuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuQXJ0aWNsZS5Jc0NvbW1lbnQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgi5bey5L+d5a2Y77yM5Y675p+l55yL77yf6L+Y5piv57un57ut57yW6L6RIikpIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2FydGljbGVzLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhLnOnxbQ0AAG0NAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGFkbWluXGVkaXRfcGFnZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9Iumhtemdouagh+mimCIgdmFsdWU9Int7LlBhZ2UuVGl0bGV9fSIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPnt7SHRtbCAuUGFnZS5UZXh0fX08L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumhtemdoueahOWUr+S4gOmTvuaOpSIgdmFsdWU9Int7LlBhZ2UuU2x1Z319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuUGFnZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLlBhZ2UuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPue9rumhtumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ibGluayIgaWQ9ImlzLWxpbmsiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNMaW5rZWQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vcGFnZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCLZ4MjLjDQAA4w0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5cZmlsZXMuaHRtbDx1bCBpZD0iZmlsZXMtbGlzdCIgY2xhc3M9ImFkbWluIGNvbnRhaW5lcjk2MCBwYWdlciI+DQogICAgPGxpIGNsYXNzPSJmaWxlIiBpZD0iZmlsZXMtYnRuLWxpIj4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICA8L2xpPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlLXt7LklkfX0iPg0KICAgICAgICA8c3BhbiBjbGFzcz0idXBsb2FkLXRpbWUiPnt7RGF0ZUludDY0IC5VcGxvYWRUaW1lICJNTS5ERCJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InNpemUiPnt7RmlsZVNpemUgLlNpemV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii97ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSIve3suVXJsfX0iPjxpIGNsYXNzPSJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZSI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBmYWRlLW91dCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Yig6Zmk6ZmE5Lu2Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KICAgIHt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vZmlsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICBpbml0VXBsb2FkKCIjYXR0YWNoLXNob3ciKTsNCiAgICAgICAgJCgiLmRlbCIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLliKDpmaTpmYTku7bnm7jlhbPpk77mjqXkvJrlpLHmlYghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiL2FkbWluL2ZpbGVzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZmlsZS0nK2lkKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCGLFm/rsBgAA7AYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHZpZXdcYWRtaW5caG9tZS5odG1sPGRpdiBjbGFzcz0iYWRtaW4gY29udGFpbmVyIGNsZWFyIiBpZD0iZGFzaGJvYXJkIj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtNSBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0id2VsY29tZSI+DQogICAgICAgICAgICA8aDQ+V2VsY29tZTwvaDQ+DQogICAgICAgICAgICA8cD7mrKLov47lm57mnaXvvIwgPHN0cm9uZz57ey5Vc2VyLk5pY2t9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InF1aWNrLWxpbmsiPg0KICAgICAgICAgICAgPGg0PuW/q+mAn+mTvuaOpTwvaDQ+DQogICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5pKw5YaZ5paH56ugPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wYWdlL3dyaXRlLyI+5re75Yqg6aG16Z2iPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iPuafpeeci+WSjOWuoeaguOivhOiuujwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vc2V0dGluZy8iPuS/ruaUuemFjee9rjwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vcHJvZmlsZS8iPuabtOaWsOS4quS6uui1hOaWmTwvYT48L2xpPg0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTIgbGVmdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5Ij4NCiAgICAgICAgICAgIDxoND7mnIDmlrDmtLvliqg8L2g0Pnt7cmFuZ2UgLk1lc3NhZ2VzfX0NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1zZyByZWxhdGl2ZSB7ey5UeXBlfX0iPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YSI+e3tIdG1sIC5EYXRhfX08L2Rpdj4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0icmVhZCBhYnNvbHV0ZSIgaHJlZj0iL2FkbWluL21lc3NhZ2UvcmVhZD9pZD17ey5JZH19IiByZWw9Int7LklkfX0iPjxpIGNsYXNzPSJmYSBmYS1jaGVjayI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pnt7ZW5kfX17e2lmIGx0IChsZW4gLk1lc3NhZ2VzKSAxfX0NCiAgICAgICAgICAgIDxwPuayoeacieaWsOeahOa0u+WKqOS/oeaBrzwvcD4NCiAgICAgICAgICAgIHt7ZW5kfX0NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTQgcmlnaHQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cyI+DQogICAgICAgICAgICA8aDQ+5pWw5o2u57uf6K6hPC9oND4NCiAgICAgICAgICAgIDxwPuW3sue7j+WPkeW4g+aWh+eroCA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5BcnRpY2xlc319PC9zcGFuPiDnr4fvvIwNCiAgICAgICAgICAgIOmhtemdoiA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5QYWdlc319PC9zcGFuPiDkuKrvvIwgPGJyLz4NCiAgICAgICAgICAgIOaUtuWIsOivhOiuuiA8c3BhbiBjbGFzcz0ibGJsIGxibC1ibHVlIj57ey5TdGF0aXMuQ29tbWVudHN9fTwvc3Bhbj4g5qyh77yMDQogICAgICAgICAgICDkuIrkvKAgPHNwYW4gY2xhc3M9ImxibCBsYmwtZ3JlZW4iPnt7LlN0YXRpcy5GaWxlc319PC9zcGFuPiDkuKrpmYTku7Y8L3A+DQogICAgICAgICAgICA8cD7lvZPliY3nqIvluo/niYjmnKzvvJo8c3Ryb25nPnt7LlN0YXRpcy5WZXJzaW9ufX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJvZmZpY2UiPg0KICAgICAgICAgICAgPGg0PuWumOaWuea2iOaBrzwvaDQ+DQogICAgICAgICAgICA8cD7ov5jmsqHmnInmtojmga88L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgICAgJCgiLnJlYWQiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICQucG9zdCgkdGhpcy5hdHRyKCJocmVmIiksZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICR0aGlzLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgIH0pOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgfSk7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcI9JTc5iAJAAAgCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxsb2dpbi5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPueZu+W9lSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPg0KICAgICAgICAjbG9naW4tZm9ybXsNCiAgICAgICAgICAgIHdpZHRoOiAyODBweDsNCiAgICAgICAgICAgIG1hcmdpbjogODBweCBhdXRvOw0KICAgICAgICB9DQogICAgICAgICNsb2dpbi1mb3JtIGgxew0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsNCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxmb3JtIGlkPSJsb2dpbi1mb3JtIiBjbGFzcz0iZm9ybSBmb3JtLXZlcnRpY2FsIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0ibG9naW4tZm9ybSI+DQogICAgPGgxPueZu+W9lSAtIEZ4aC5HbzwvaDE+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0idXNlciI+55So5oi35ZCNPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQiIGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InVzZXIiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVzZXItaW52YWxpZCI+55So5oi35ZCN5Li65a2X5q+NK+aVsOWtl++8jOmVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9InBhc3N3b3JkIj7nlKjmiLflr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJwYXNzd29yZCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0icGFzc3dvcmQtaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7nmbsg5b2VPC9idXR0b24+DQogICAgPHNwYW4gY2xhc3M9InRpcCI+6buY6K6k6K6w5L2P55m76ZmGM+WkqTwvc3Bhbj4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2Nkbi5zdGF0aWNmaWxlLm9yZy9qcXVlcnkuZm9ybS8zLjQ2L2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvdmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigibG9naW4tZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoidXNlciIsInJ1bGVzIjoiYWxwaGFfbnVtZXJpY3xtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJwYXNzd29yZCIsInJ1bGVzIjoicmVxdWlyZWR8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI2xvZ2luLWZvcm0nKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLnmbvlvZXplJnor6/vvIzor7fmo4Dmn6XnlKjmiLfmiJblr4bnoIEiKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcI1uB4YpAIAACQCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxwYWdlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+DQogICAgPC9saT57e3JhbmdlIC5QYWdlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vcGFnZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk6aG16Z2i5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9wYWdlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIa+TbIVwGAABcBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxwYXNzd29yZC5odG1sPGZvcm0gaWQ9InBhc3N3b3JkIiBjbGFzcz0iZm9ybSBmb3JtLWFsaWduIGNsZWFyIiBhY3Rpb249IiMiIG5hbWU9InBhc3N3b3JkLWZvcm0iIG1ldGhvZD0icG9zdCI+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ib2xkIj7ml6flr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im9sZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im9sZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPumqjOivgeaXp+WvhueggTwvc3Bhbj48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ib2xkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im5ldyI+5paw5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJuZXciIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJuZXciIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuZXctaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0iY29uZmlybSI+56Gu6K6k5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImNvbmZpcm0taW52YWxpZCI+56Gu6K6k5a+G56CB5LiN5Yy56YWNPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInBhc3N3b3JkLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6Im9sZCIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmV3IiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJjb25maXJtIiwicnVsZXMiOiJyZXF1aXJlZHxtYXRjaGVzW25ld10ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwYXNzd29yZCcpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIbnEngU8HAABPBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xhZG1pblxwbHVnaW4uaHRtbDx1bCBpZD0icGx1Z2luLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPnt7cmFuZ2UgLlBsdWdpbnN9fQ0KICAgIDxsaSBjbGFzcz0iY2xlYXIiPnt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQgbGJsIGFjdGl2ZSBsYmwtZ3JlZW4iPiZuYnNwOzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGxlZnQiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24gbGVmdCI+e3suVmVyc2lvbn19PC9zcGFuPnt7aWYgLkhhc1NldHRpbmd9fQ0KICAgICAgICA8YSBjbGFzcz0ic2V0dGluZyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy97ey5LZXl9fS8iPumAiemhuTwvYT57e2VuZH19e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8YSBjbGFzcz0iZGVhY3RpdmF0ZSBsYmwgbGJsLXJlZCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5bCB5Y2wPC9hPnt7ZWxzZX19DQogICAgICAgIDxhIGNsYXNzPSJhY3RpdmF0ZSBsYmwgbGJsLWJsdWUgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPua/gOa0uzwvYT57e2VuZH19DQogICAgICAgIDxwIGNsYXNzPSJkZXNjIGxlZnQiPnt7LkRlc2N9fTwvcD4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIuZGVhY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJkZWFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoea/gOa0uyIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlsIHljbDlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgiLmFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoeWwgeWNsCIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLmv4DmtLvlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCE9wWaFiBgAAYgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAHZpZXdcYWRtaW5ccGx1Z2luX3NldHRpbmcuaHRtbDxmb3JtIGlkPSJwbHVnaW4tc2V0dGluZy1mb3JtIiBjbGFzcz0iZm9ybSBjb250YWluZXI5NjAgYWRtaW4iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICB7e0h0bWwgLkZvcm19fQ0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICAgICAgICAkKCcjcGx1Z2luLXNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIjoi5L+d5a2Y5aSx6LSlIik7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwg0K3PVOAEAADgBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHByb2ZpbGUuaHRtbDxmb3JtIGlkPSJwcm9maWxlIiBjbGFzcz0iYWRtaW4gZm9ybSBjbGVhciBmb3JtLWFsaWduIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0icHJvZmlsZS1mb3JtIj4NCiAgICA8ZGl2IGNsYXNzPSJhdmF0YXIgZ3JpZC0xLTQgbGVmdCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7ey5Vc2VyLkF2YXRhcn19IiBhbHQ9Int7LlVzZXIuTmlja319IiBjbGFzcz0iZmllbGQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBmaWVsZCBpbmxpbmUtYmxvY2siPuWktOWDj+eUsSA8YSBocmVmPSJodHRwOi8vZ3JhdmF0YXIuY29tLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm8tZm9sbG93Ij5HcmF2YXRhcjwvYT4g5o+Q5L6bPC9zcGFuPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tcmVkIGlubGluZS1ibG9jayIgaHJlZj0iL2FkbWluL3Bhc3N3b3JkLyI+5L+u5pS55a+G56CBPC9hPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaW5mbyByaWdodCBncmlkLTMtNCI+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nmbvlvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiB2YWx1ZT0ie3suVXNlci5OYW1lfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+55m75b2V55qE55So5oi35ZCNPC9zcGFuPjxici8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ibmljayI+5pi156ewPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ibmljayIgdHlwZT0idGV4dCIgbmFtZT0ibmljayIgdmFsdWU9Int7LlVzZXIuTmlja319IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuaYvuekuuWcqOWJjeWPsOeahOensOWRvDwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5pY2staW52YWxpZCI+5pi156ew6ZW/5bqmMi0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZW1haWwiPumCrueusTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImVtYWlsIiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHZhbHVlPSJ7ey5Vc2VyLkVtYWlsfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6IGU57O76YKu566x77yM5Y2B5YiG6YeN6KaB77yBPC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iZW1haWwtaW52YWxpZCI+6YKu566x5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1cmwiPue9keWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVybCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHZhbHVlPSJ7ey5Vc2VyLlVybH19IiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1cmwtaW52YWxpZCI+572R5Z2A5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBiaW8iIG5hbWU9ImJpbyIgaWQ9ImJpbyI+e3suVXNlci5CaW99fTwvdGV4dGFyZWE+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwcm9maWxlLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmljayIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiZW1haWwiLCJydWxlcyI6InZhbGlkX2VtYWlsIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJ1cmwiLCJydWxlcyI6InZhbGlkX3VybCJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Byb2ZpbGUnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCB+PoV8CDAAAAgwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cc2V0dGluZy5odG1sPHVsIGlkPSJzZXR0aW5nLW5hdiIgY2xhc3M9ImNvbnRhaW5lcjk2MCB0ZXh0LWNlbnRlciI+DQogICAgPGxpPjxhIGhyZWY9IiNnZW5lcmFsIj7ln7rmnKw8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iI25hdiI+5a+86IiqPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9IiNjdXN0b20iPuiHquWumuS5iTwvYT48L2xpPg0KPC91bD4NCjxkaXYgaWQ9InNldHRpbmctcGFuZWxzIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICA8Zm9ybSBpZD0ic2V0dGluZy1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nLyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS11cmwiPuermeeCueWcsOWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdXJsIiBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InNpdGVfdXJsIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdXJsYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS10aXRsZSI+56uZ54K55Li75qCH6aKYPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aXRsZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1zdWItdGl0bGUiPuermeeCueWJr+agh+mimDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtc3ViLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3N1Yl90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3N1Yl90aXRsZWB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUta2V5d29yZHMiPk1ldGHlhbPplK7lrZc8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLWtleXdvcmRzIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2tleXdvcmRzIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1kZXNjIj5NZXRh56uZ54K55LuL57uNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1kZXNjIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2Rlc2NyaXB0aW9uIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iYXJ0aWNsZS1zaXplIj7ljZXpobXmlofnq6DliJfooajmlbA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJhcnRpY2xlLXNpemUiIGNsYXNzPSJpcHQiIHR5cGU9Im51bWJlciIgbmFtZT0iYXJ0aWNsZV9zaXplIiB2YWx1ZT0ie3tTZXR0aW5nIGBhcnRpY2xlX3NpemVgfX0iIG1heD0iMTAiIG1pbj0iMyIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGhlbWUiPuS4u+mimOebruW9leWQjTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdGhlbWUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfdGhlbWUiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdGhlbWVgfX0iLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS4u+mimOWNs+aMh+WQkeeahOaooeadv+ebruW9le+8jOWFt+S9k+WGheWuueivt+WPguiAgyBkZWZhdWx0IOebruW9le+8iOWNsyBkZWZhdWx0IOS4u+mimO+8iTwvc3Bhbj4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNpdGVfdGhlbWVfZGVmIiB2YWx1ZT0iZGVmYXVsdCIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImdvLW1hcmtkb3duIj5Hb+a4suafk01hcmtkb3duPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iZ28tbWFya2Rvd24iIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9ImVuYWJsZV9nb19tYXJrZG93biIgdmFsdWU9Int7U2V0dGluZyBgZW5hYmxlX2dvX21hcmtkb3duYH19Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7pu5jorqTlhbPpl63vvIzkvb/nlKjliY3nq69tYXJrZWQuanPmuLLmn5PvvIzloat0cnVl5pe25byA5ZCvPC9zcGFuPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duX2RlZiIgdmFsdWU9ImZhbHNlIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHA+DQogICAgICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Zvcm0+DQogICAgPGZvcm0gaWQ9InNldHRpbmctbmF2LWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nL25hdiIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgbmF2DQogICAgPC9mb3JtPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWN1c3RvbS1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nL2N1c3RvbS8iIG1ldGhvZD0icG9zdCI+e3tyYW5nZSAkaywkdiA6PSAuQ3VzdG9tfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHZhbHVlPSJ7eyRrfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7JHZ9fSIvPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiPua3u+WKoOS4gOmhuTwvYT4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS9v+eUqOWHveaVsOiHquWumuS5iemFjee9ru+8jOmcgOimgeWKoOWJjee8gCJjXyLvvIzlpoJHZXRTZXR0aW5nKCJjX2tleSIpPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImN1c3RvbS1pdGVtIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgcGxhY2Vob2xkZXI9IuWtl+auteWQjSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IuWtl+auteWAvCIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9zY3JpcHQ+DQogICAgPC9mb3JtPg0KICAgIDxkaXYgY2xhc3M9InNldHRpbmctcGFuZWwiPjMzMzwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeXRvb2xzLzEuMi43L2pxdWVyeS50b29scy5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI3NldHRpbmctbmF2JykudGFicygiLnNldHRpbmctcGFuZWwiKTsNCiAgICAgICAgJCgnLnNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiIDoganNvbi5tc2cpOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmFkZCcpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcjc2V0dGluZy1jdXN0b20tZm9ybScpLnByZXBlbmQoJCgiI2N1c3RvbS1pdGVtIikuaHRtbCgpKTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgaWYoY29uZmlybSgi6KaB5Yig6Zmk6L+Z6aG577yfIikpew0KICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwgg178woxIAAKMSAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAB2aWV3XGFkbWluXHdyaXRlX2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnmlofnq6DlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCiAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgPC9wPg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9hcnRpY2xlcy8iOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwi+ynR8IQwAACEMAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGFkbWluXHdyaXRlX3BhZ2UuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLpobXpnaLmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnpobXpnaLlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpobXpnaLnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCI+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQiPuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7nva7pobbpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImxpbmsiIGlkPSJpcy1saW5rIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vcGFnZXMvIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIcltVaXwMAAB8DAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAdmlld1xhZG1pbi5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+e3suVGl0bGV9fSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9hZG1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvdmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhciI+DQogICAgICAgIDxoMyBjbGFzcz0ibG9nbyBsZWZ0Ij5GeGguR28gLSA8c3Bhbj57ey5UaXRsZX19PC9zcGFuPjwvaDM+DQogICAgICAgIDxkaXYgY2xhc3M9Im5hdiBsZWZ0IHJlbGF0aXZlIj4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJkYXNoYm9hcmQgbGVmdCIgaHJlZj0iL2FkbWluLyI+PGkgY2xhc3M9ImZhIGZhLWRhc2hib2FyZCI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJhcnRpY2xlIGxlZnQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlcy8iIHRpdGxlPSLmlofnq6AiPjxpIGNsYXNzPSJmYSBmYS1jb3B5Ij48L2k+PC9hPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJwYWdlcyBsZWZ0IiBocmVmPSIvYWRtaW4vcGFnZXMvIiB0aXRsZT0i54us56uL6aG16Z2iIj48aSBjbGFzcz0iZmEgZmEtcGFzdGUiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iY29tbWVudHMgbGVmdCIgaHJlZj0iL2FkbWluL2NvbW1lbnRzLyIgdGl0bGU9IuivhOiuuiI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImZpbGVzIGxlZnQiIGhyZWY9Ii9hZG1pbi9maWxlcy8iIHRpdGxlPSLlqpLkvZPmlofku7YiPjxpIGNsYXNzPSJmYSBmYS1pbmJveCI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJwbHVnaW5zIGxlZnQiIGhyZWY9Ii9hZG1pbi9wbHVnaW5zLyIgdGl0bGU9IuaPkuS7tiI+PGkgY2xhc3M9ImZhIGZhLWdlYXJzIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9InNldHRpbmcgbGVmdCIgaHJlZj0iL2FkbWluL3NldHRpbmcvIiB0aXRsZT0i6K6+572uIj48aSBjbGFzcz0iZmEgZmEtY29nIj48L2k+PC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGEgY2xhc3M9Im91dCBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2xvZ291dC8iIHRpdGxlPSLpgIDlh7oiPjxpIGNsYXNzPSJmYSBmYS1wb3dlci1vZmYgZmEtbGciPjwvaT48L2E+DQogICAgICAgIDxhIGNsYXNzPSJwcm9maWxlIG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvYWRtaW4vcHJvZmlsZS8iIHRpdGxlPSLmiJEiPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0iZnJvbnQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii8iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0i5p+l55yL572R56uZIj48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluayI+PC9pPjwvYT4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0Ke0BDb250ZW50fQ0KPGRpdiBpZD0iZm9vdGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhciI+DQogICAgICAgPHAgY2xhc3M9ImxpbmtzIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgPGEgY2xhc3M9InN0YXQiIGhyZWY9Ii9jbWQvbWVzc2FnZS8iPua2iOaBrzwvYT4NCiAgICAgICAgICAgPGEgY2xhc3M9ImJhY2t1cCIgaHJlZj0iL2NtZC9iYWNrdXAvIj7lpIfku708L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJlcnIiIGhyZWY9Ii9jbWQvbG9ncy8iPuaXpeW/lzwvYT4NCiAgICAgICAgICAgPGEgY2xhc3M9InN5cyIgaHJlZj0iIyI+57O757ufPC9hPg0KICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImNwIHRleHQtY2VudGVyIj5Qcm91ZGx5IHB1Ymxpc2hlZCB3aXRoIEZ4aC5Hby48L3A+DQogICAgPC9kaXY+DQo8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD5QSwcI2fiqVMEIAADBCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xjbWQubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPnt7LlRpdGxlfX0gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY21kLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHkgY2xhc3M9ImNtZCI+DQp7QENvbnRlbnR9DQo8cCBjbGFzcz0iYmFjayI+PGEgaHJlZj0iamF2YXNjcmlwdDpoaXN0b3J5LmJhY2soKSI+QmFjazwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCAp9yADOAQAAzgEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAADQAAAHZpZXdcZGVmYXVsdC9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xkZWZhdWx0XGFydGljbGUuaHRtbDxkaXYgaWQ9ImFydGljbGUtY29udGFpbmVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxhcnRpY2xlIGNsYXNzPSJjbGVhciB7ey5BcnRpY2xlLlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5BcnRpY2xlLklkfX0iPnt7d2l0aCAuQXJ0aWNsZX19DQogICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPg0KICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hhcmUgd2VpYm8gaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtd2VpYm8gZmEtbGciPjwvaT48L3NwYW4+e3tpZiAuVXNlcn19DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0aG9yIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT57ey5Vc2VyLk5pY2t9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZSBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS1jbG9jay1vIj48L2k+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPnt7aWYgLlRhZ1N0cmluZ319DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXRhZ3MiPjwvaT57ey5UYWdTdHJpbmd9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idmlld3MgaW5saW5lLWJsb2NrIHJpZ2h0Ij7pmIXor7smbmJzcDsmbmJzcDs8c3Bhbj57ey5IaXRzfX08L3NwYW4+Jm5ic3A7Jm5ic3A75qyhPC9zcGFuPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgIDwvYXJ0aWNsZT4NCiAgICB7e0h0bWwgLkNvbW1lbnRIdG1sfX0NCjwvZGl2PlBLBwjAuDSItwMAALcDAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGRlZmF1bHRcY29tbWVudC5odG1sPGRpdiBpZD0iY29tbWVudCI+DQogICAgPGRpdiBpZD0iY29tbWVudC1saXN0Ij57e3JhbmdlIC5Db21tZW50c319e3tpZiAuSXNWYWxpZH19DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiIGlkPSJjb21tZW50LXt7LklkfX0iPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSJ7ey5BdXRob3J9fSIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+DQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLXRpbWUiPjxpIGNsYXNzPSJmYSBmYS1jbG9jay1vIj48L2k+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19Ij48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9IiIgYWx0PSIiLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiBsZWZ0Ij4NCiAgICAgICAgICAgICAgICA8ZGl2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aW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vIi8+DQogICAgPHRpdGxlPnt7aWYgLlRpdGxlfX17ey5UaXRsZX19IC0ge3tlbmR9fXt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvdGl0bGU+DQogICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9rZXl3b3Jkc2B9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfZGVzY3JpcHRpb25gfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkZ4aEdvIEJsb2ciIC8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9zdHlsZS5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIHRleHQtY2VudGVyIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIvPg0KICAgICAgICA8aDEgaWQ9ImhlYWRlci1oIj48YSBocmVmPSIvIj57e1NldHRpbmcgInNpdGVfdGl0bGUifX08L2E+PC9oMT4NCiAgICAgICAgPGg0IGlkPSJoZWFkZXItc3ViIj57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4NCiAgICA8L2Rpdj4NCjwvaGVhZGVyPg0KPG5hdiBpZD0ibmF2IiBjbGFzcz0iY2xlYXIgdGV4dC1jZW50ZXIiPg0KICAgIDx1bD4NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii8iPuaWh+eroDwvYT48L2xpPg0KICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iL2Fib3V0LW1lLmh0bWwiPuWFs+S6jjwvYT48L2xpPg0KICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iL2ZyaWVuZHMuaHRtbCI+5aW95Y+LPC9hPjwvbGk+DQogICAgPC91bD4NCjwvbmF2Pg0KPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbnRhaW5lcjk2MCI+DQogICAge0BDb250ZW50fQ0KPC9kaXY+DQo8Zm9vdGVyIGlkPSJmb290ZXIiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+DQogICAgPHA+DQogICAgICAgIDxhIGNsYXNzPSJ3ZWlibyIgaHJlZj0ie3tTZXR0aW5nIGBjX2Zvb3Rlcl93ZWlib2B9fSIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS13ZWlibyI+PC9pPldlaWJvPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZ2l0IiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX2dpdGh1YmB9fSIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1naXRodWIiPjwvaT5HaXRIdWI8L2E+DQogICAgICAgIDxhIGNsYXNzPSJlbWFpbCIgaHJlZj0ie3tTZXR0aW5nIGBjX2Zvb3Rlcl9lbWFpbGB9fSIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1lbnZlbG9wZSI+PC9pPkVtYWlsPC9hPg0KICAgICAgICA8YSBjbGFzcz0icnNzIiBocmVmPSIvcnNzLnhtbCIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1yc3MiPjwvaT5SU1M8L2E+e3tTZXR0aW5nIGBjX2Zvb3Rlcl9nYWAgfCBIdG1sfX0NCiAgICA8L3A+DQogICAgPHNwYW4+R28gwqkgMjAxNCBBbGwgcmlnaHRzIHJlc2VydmVkLiBQcm91ZGx5IHB1Ymxpc2hlZCB3aXRoIEZ4aC5Hby48L3NwYW4+DQogICAgPGEgaWQ9ImdvLXRvcCIgaHJlZj0iIyIgY2xhc3M9ImxibCBoaWRlIGxibC1ibHVlIiB0aXRsZT0i5Zue5Yiw6aG26YOoIj48aSBjbGFzcz0iZmEgZmEtYXJyb3ctdXAgZmEtbGciPjwvaT48L2E+DQo8L2Zvb3Rlcj4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL2hvbWUuanMiPjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwiVBbT8lAkAAJQJAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGRlZmF1bHRcaW5kZXguaHRtbDxkaXYgaWQ9ImFydGljbGUtY29udGFpbmVyIiBjbGFzcz0iY2xlYXIiPnt7cmFuZ2UgLkFydGljbGVzfX0NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIge3suU3RhdHVzfX0iIGlkPSJhcnRpY2xlLXt7LklkfX0iPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGxlZnQgdGV4dC1jZW50ZXIiPnt7aWYgZ3QgLkNvbW1lbnROdW0gMH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1yZWQgY29tbWVudHMiPjxhIGhyZWY9Int7Lkxpbmt9fSNjb21tZW50Ij48aSBjbGFzcz0iZmEgZmEtY29tbWVudHMiPjwvaT48c3Ryb25nPnt7LkNvbW1lbnROdW19fSDihIM8L3N0cm9uZz48L2E+PC9wPnt7ZW5kfX0NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIj48aSBjbGFzcz0iZmEgZmEtZXllIj48L2k+PHN0cm9uZz57ey5IaXRzfX0g4oSJPC9zdHJvbmc+PC9wPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtZ3JheSB0aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPjxzdHJvbmc+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+DQogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5TdW1tYXJ5fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX17e2lmIC5UYWdTdHJpbmd9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWcgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdGFncyI+PC9pPnt7LlRhZ1N0cmluZ319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iaW5saW5lLWJsb2NrIHJlYWQgcmlnaHQiIGhyZWY9Int7Lkxpbmt9fSI+PGkgY2xhc3M9ImZhIGZhLXNlYXJjaCI+PC9pPue7p+e7remYheivuzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9hcnRpY2xlPnt7ZW5kfX0NCiAgICA8ZGl2IGNsYXNzPSJwYWdlciB0ZXh0LWNlbnRlciI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICAgICAgPGEgaHJlZj0iL3Ave3sufX0vIiBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+e3sufX08L2E+e3tlbmR9fQ0KICAgIDwvZGl2Pg0KPC9kaXY+UEsHCKkugGjnBQAA5wUAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcZGVmYXVsdFxwYWdlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIiIGlkPSJhcnRpY2xlLUlkIj57e3dpdGggLlBhZ2V9fQ0KICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj4NCiAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImF1dGhvciBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+e3suVXNlci5OaWNrfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2aWV3cyBpbmxpbmUtYmxvY2sgcmlnaHQiPumYheivuyZuYnNwOyZuYnNwOzxzcGFuPnt7LkhpdHN9fTwvc3Bhbj4mbmJzcDsmbmJzcDvmrKE8L3NwYW4+DQogICAgICAgIDwvcD57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KPC9kaXY+UEsHCFwAzt0EAwAABAMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACgAAAHZpZXdcbGluZy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xsaW5nXGFydGljbGUuaHRtbDxkaXYgaWQ9ImFydGljbGUtY29udGFpbmVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxhcnRpY2xlIGNsYXNzPSJjbGVhciBhcnRpY2xlLXNpbmdsZSByZWxhdGl2ZSB7ey5BcnRpY2xlLlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5BcnRpY2xlLklkfX0iPnt7d2l0aCAuQXJ0aWNsZX19DQogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEgYWJzb2x1dGUgdGV4dC1jZW50ZXIiPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtZ3JlZW4gdmlld3MgYWJzb2x1dGUiPnt7LkhpdHN9fTwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1haW4iPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICAgICAgPHAgY2xhc3M9InRpbWUtaW5mbyI+e3tpZiAuVXNlcn19PHN0cm9uZz57ey5Vc2VyLk5pY2t9fTwvc3Ryb25nPiZuYnNwOyZuYnNwOyZuYnNwO3t7ZW5kfX3lj5Hooajkuo4mbmJzcDsmbmJzcDsmbmJzcDt7e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiWVlZWSDlubQgTU0g5pyIIEREIOaXpSJ9fTwvcD4NCiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+5qCH562+77yae3suVGFnU3RyaW5nfX08L3NwYW4+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX0NCiAgICA8L2FydGljbGU+DQogICAge3tIdG1sIC5Db21tZW50SHRtbH19DQo8L2Rpdj5QSwcIGsKdfW0DAABtAwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xsaW5nXGNvbW1lbnQuaHRtbDxkaXYgaWQ9ImNvbW1lbnQiIGNsYXNzPSJyZWxhdGl2ZSI+DQogICAgPGg0IGlkPSJjb21tZW50LXRpdGxlIj7mlofnq6Dor4Torro8L2g0Pg0KICAgIDxkaXYgY2xhc3M9Im1ldGEgYWJzb2x1dGUgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1yZWQgY29tbWVudHMiPjxhIGhyZWY9Int7Lkxpbmt9fSNjb21tZW50Ij57ey5Db250ZW50LkNvbW1lbnROdW19fTwvYT48L3A+DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1saXN0Ij57e3JhbmdlIC5Db21tZW50c319e3tpZiAuSXNWYWxpZH19DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiIGlkPSJjb21tZW50LXt7LklkfX0iPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSJ7ey5BdXRob3J9fSIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEgY2xlYXIiPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSBsYmwgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSI+5Zue5aSNPC9hPg0KICAgICAgICAgICAgICAgICAgICA8cD48YSBjbGFzcz0iYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+PC9wPg0KICAgICAgICAgICAgICAgICAgICA8cD48c3BhbiBjbGFzcz0iYy10aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0g5pyIIEREIOaXpSBISCDml7YgbW0g5YiGIn19PC9zcGFuPjwvcD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+e3tlbmR9fXt7ZW5kfX0NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LXNob3ciIGNsYXNzPSJ0ZXh0LWNlbnRlciI+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGVuYWJsZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+e3tlbHNlfX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1yZWQiPuacrOaWh+WFs+mXreS6huivhOiuujwvYnV0dG9uPnt7ZW5kfX0NCiAgICA8L2Rpdj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgY2xhc3M9ImhpZGUgY2xlYXIgdGV4dC1jZW50ZXIgZm9ybSIgYWN0aW9uPSIvY29tbWVudC97ey5Db250ZW50LklkfX0vIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8gbGVmdCB0ZXh0LXJpZ2h0Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIGMtYXZhdGFyLWZpZWxkIj4NCiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBudWxsIiBzcmM9Ii9zdGF0aWMvaW1nL3NpdGUucG5nIiBhbHQ9IiIgaWQ9ImNvbW1lbnQtYXZhdGFyIi8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5vdC1tZSBibG9jayIgaHJlZj0iIyI+5LiN5piv5oiRPzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mby1maWVsZHMgaGlkZSI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLnp7DlkbwiIGlkPSJjb21tZW50LWF1dGhvciIvPjwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6YKu566xIiBpZD0iY29tbWVudC1lbWFpbCIvPiA8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgcGxhY2Vob2xkZXI9Iue9keWdgCIgaWQ9ImNvbW1lbnQtdXJsIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY29tbWVudC1wYXJlbnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIG5hbWU9InBpZCIvPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWNvbnRlbnQgdGV4dC1sZWZ0IHJpZ2h0Ij4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuWPkeihqOivhOiuujwvYnV0dG9uPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGJsIGxibC1ncmVlbiBjYW5jZWwtcmVwbHkiIHR5cGU9ImJ1dHRvbiI+5Y+W5raI5Zue5aSNPC9idXR0b24+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZm9ybT57e2VuZH19DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY29tbWVudC10cGwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0iIi8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24iPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSBjbGVhciI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IGxibCByaWdodCIgaHJlZj0iIyIgcmVsPSIiPuWbnuWkjTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHA+PGEgY2xhc3M9ImMtYXV0aG9yICIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj48L2E+PC9wPg0KICAgICAgICAgICAgICAgICAgICA8cD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLXRpbWUiPk5vdzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNoZWNrIj7lrqHmoLjkuK3v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cmVmPSIvc3RhdGljL2Nzcy9saW5nLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19IC0gUlNTIDIuMCIgaHJlZj0iL3Jzcy54bWwiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIiBjbGFzcz0ibGVmdCIvPg0KICAgICAgICA8aDEgaWQ9ImhlYWRlci1oIiBjbGFzcz0ibGVmdCI+PGEgaHJlZj0iLyI+e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC9hPjwvaDE+DQogICAgICAgIDxoNCBpZD0iaGVhZGVyLXN1YiIgY2xhc3M9ImxlZnQiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgICAgICA8bmF2IGlkPSJuYXYiIGNsYXNzPSJyaWdodCI+DQogICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii8iPuaWh+eroDwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvYWJvdXQtbWUuaHRtbCI+5YWz5LqOPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii9mcmllbmRzLmh0bWwiPuWlveWPizwvYT48L2xpPg0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9uYXY+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCBjbGVhciI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0Ij5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0icmlnaHQiPlByb3VkbHkgcHVibGlzaGVkIHdpdGggRnhoLkdvLjwvc3Bhbj4NCiAgICA8L2Rpdj4NCiAgICA8YSBpZD0iZ28tdG9wIiBocmVmPSIjIiBjbGFzcz0ibGJsIGhpZGUgbGJsLWJsdWUiIHRpdGxlPSLlm57liLDpobbpg6giPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy11cCBmYS1sZyI+PC9pPjwvYT4NCiAgICB7e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCnt7SHRtbCAiPCEtLSB0aGFua3MgZm9yIHRoZW1lIExpbmdvbmJlcnJ5KGh0dHA6Ly93d3cuYW5kZXJzbm9yZW4uc2UvKSBmb3IgV29yZFByZXNzLS0+In19UEsHCEN9vfrZCAAA2QgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHZpZXdcbGluZ1xpbmRleC5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxhcnRpY2xlIGNsYXNzPSJjbGVhciB7ey5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suSWR9fSI+DQogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEgbGVmdCB0ZXh0LWNlbnRlciByZWxhdGl2ZSI+DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1yZWQgY29tbWVudHMiPjxhIGhyZWY9Int7Lkxpbmt9fSNjb21tZW50Ij57ey5Db21tZW50TnVtfX08L2E+PC9wPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtZ3JlZW4gdmlld3MgYWJzb2x1dGUiPnt7LkhpdHN9fTwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1haW4gcmVsYXRpdmUiPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICAgICAgPHAgY2xhc3M9InRpbWUtaW5mbyI+e3tpZiAuVXNlcn19PHN0cm9uZz57ey5Vc2VyLk5pY2t9fTwvc3Ryb25nPiZuYnNwOyZuYnNwOyZuYnNwO3t7ZW5kfX3lj5Hooajkuo4mbmJzcDsmbmJzcDsmbmJzcDt7e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiWVlZWSDlubQgTU0g5pyIIEREIOaXpSJ9fTwvcD4NCiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLlN1bW1hcnl9fTwvc2VjdGlvbj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+5qCH562+77yae3suVGFnU3RyaW5nfX08L3NwYW4+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlubGluZS1ibG9jayByZWFk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" \ No newline at end of file diff --git a/app/model/storage.go b/app/model/storage.go index d97bade..b04e189 100644 --- a/app/model/storage.go +++ b/app/model/storage.go @@ -191,6 +191,9 @@ func writeDefaultData() { // write files Storage.Set("files", []*File{}) + + // write message + Storage.Set("messages",[]*Message{}) } func loadAllData() { diff --git a/view/admin/setting.html b/view/admin/setting.html index c280cf6..5061e5c 100644 --- a/view/admin/setting.html +++ b/view/admin/setting.html @@ -1,5 +1,6 @@
    @@ -45,6 +46,9 @@

    +
    + nav +
    {{range $k,$v := .Custom}}

         From d3f127ca38af9413173384500a2f67733e6738cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Thu, 6 Feb 2014 22:50:06 +0800 Subject: [PATCH 22/82] add navigation settings and usage --- app/app.go | 2 ++ app/cmd/zip.go | 2 +- app/handler/admin.go | 16 +++++++++-- app/model/message.go | 4 +-- app/model/setting.go | 57 ++++++++++++++++++++++++++++++++++++++-- app/model/storage.go | 24 +++++++++++++++-- static/css/admin.css | 9 ++++++- static/less/admin.less | 30 +++++++++++++++++++++ view/admin/articles.html | 1 + view/admin/pages.html | 1 + view/admin/setting.html | 38 +++++++++++++++++++-------- view/default/home.layout | 6 ++--- view/ling/home.layout | 6 ++--- 13 files changed, 167 insertions(+), 29 deletions(-) diff --git a/app/app.go b/app/app.go index de06b38..e5a5f24 100644 --- a/app/app.go +++ b/app/app.go @@ -156,6 +156,7 @@ func Init() { App.View().FuncMap["Html2str"] = utils.Html2str App.View().FuncMap["FileSize"] = utils.FileSize App.View().FuncMap["Setting"] = model.GetSetting + App.View().FuncMap["Navigator"] = model.GetNavigators App.View().FuncMap["Md2html"] = utils.Markdown2HtmlTemplate println("app version @ " + strconv.Itoa(model.GetVersion().Version)) @@ -181,6 +182,7 @@ func registerAdminHandler() { App.Route("GET,POST", "/admin/setting/", handler.Auth, handler.AdminSetting) App.Post("/admin/setting/custom/", handler.Auth, handler.CustomSetting) + App.Post("/admin/setting/nav/", handler.Auth, handler.NavigatorSetting) App.Route("GET,DELETE", "/admin/files/", handler.Auth, handler.AdminFiles) App.Post("/admin/files/upload/", handler.Auth, handler.FileUpload) diff --git a/app/cmd/zip.go b/app/cmd/zip.go index 07b2330..3f94738 100644 --- a/app/cmd/zip.go +++ b/app/cmd/zip.go @@ -1,2 +1,2 @@ package cmd -const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnttYXJnaW4tdG9wOjI0cHg7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3NldHRpbmctbmF2IGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDEycHh9I3NldHRpbmctbmF2IGxpIGF7cGFkZGluZzozcHggMTBweH0KI3NldHRpbmctbmF2IGxpIGE6aG92ZXIsI3NldHRpbmctbmF2IGxpIGEuY3VycmVudHtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMDA1YjlifQouc2V0dGluZy1wYW5lbHtkaXNwbGF5Om5vbmV9Ci5zZXR0aW5nLWZvcm17d2lkdGg6ODIwcHg7bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99LnNldHRpbmctZm9ybSAuaXB0e3dpZHRoOjQ4MHB4fQouc2V0dGluZy1mb3JtIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9Ci5zZXR0aW5nLWZvcm0gbGFiZWx7bWluLXdpZHRoOjEwZW19Ci5zZXR0aW5nLWZvcm0gLnRpcC5ibG9ja3ttYXJnaW4tbGVmdDoxMmVtfQojc2V0dGluZy1jdXN0b20tZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQua2V5e3dpZHRoOjI1MHB4fQojc2V0dGluZy1jdXN0b20tZm9ybSBpbnB1dC52YWx1ZXt3aWR0aDo2NTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojc2V0dGluZy1jdXN0b20tZm9ybSAudGlwe21hcmdpbi1sZWZ0OjB9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNudCwjY29tbWVudC1saXN0IC5jLWVtYWlse2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHh9CiNjb21tZW50LWxpc3QgLmMtcmVwbHl7Y29sb3I6Izk5OX0jY29tbWVudC1saXN0IC5jLXJlcGx5OmhvdmVye2NvbG9yOiMzMzN9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxM3B4fQojY29tbWVudC1saXN0IC5jLWF1dGhvci5hZG1pbntiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KI2NvbW1lbnQtbGlzdCAuYy1wLW1ke21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjaywjY29tbWVudC1saXN0IC5jLWRlbHtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhLCNjb21tZW50LWxpc3QgLmMtZGVsIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLWNoZWNrOmhvdmVyLCNjb21tZW50LWxpc3QgLmMtZGVsOmhvdmVye2NvbG9yOiNhYTM5M2N9CiNjb21tZW50LWZvcm17cGFkZGluZy10b3A6MTJweDtkaXNwbGF5Om5vbmU7bWFyZ2luLWxlZnQ6NzJweH0jY29tbWVudC1mb3JtIC5idG57bWFyZ2luLXJpZ2h0OjI0cHh9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6NTAwcHg7aGVpZ2h0OjgwcHg7bWFyZ2luLXJpZ2h0OjI0cHh9CiNmaWxlcy1saXN0IGxpLmZpbGV7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNmaWxlcy1saXN0IGxpLmZpbGU+KnttYXJnaW4tcmlnaHQ6MTZweH0KI2ZpbGVzLWxpc3QgbGkuZmlsZTpob3ZlciAuZGVse29wYWNpdHk6MSAhaW1wb3J0YW50fQojZmlsZXMtbGlzdCAudXBsb2FkLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZmlsZXMtbGlzdCAuZGVse2NvbG9yOiNlNjQzNDZ9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2ZpbGVzLWxpc3QgLmZpbGUtcHJvZ3Jlc3MuZXJye2JhY2tncm91bmQ6cmdiYSgyNTUsNjgsNzEsMC4yKTtjb2xvcjojYWEzOTNjfQojZmlsZXMtbGlzdCAuc2l6ZXt3aWR0aDo0ZW07ZGlzcGxheTppbmxpbmUtYmxvY2t9CiNwbHVnaW4tbGlzdCBsaXttYXJnaW4tYm90dG9tOjE2cHg7cGFkZGluZy1ib3R0b206MTZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jcGx1Z2luLWxpc3QgbGkgLmRlc2N7bWFyZ2luLWJvdHRvbTowO3dpZHRoOjk5JTtjb2xvcjojOTk5fQojcGx1Z2luLWxpc3QgbGkgYS5sYmx7cGFkZGluZzowIDhweDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLnZlcnNpb257Y29sb3I6IzUwNzY1MDttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLWxpc3QgbGkgLm5hbWV7Zm9udC1zaXplOjE2cHh9CiNwbHVnaW4tbGlzdCBsaSAuYWN0aXZle3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7bWFyZ2luLXJpZ2h0OjE2cHg7cGFkZGluZzowO21hcmdpbi10b3A6MTBweH0KI3BsdWdpbi1saXN0IGxpIC5zZXR0aW5ne21hcmdpbi1sZWZ0OjE2cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIHAuaXRlbXtjbGVhcjpib3RofQojcGx1Z2luLXNldHRpbmctZm9ybSBsYWJlbHtmbG9hdDpsZWZ0O21pbi13aWR0aDo2ZW07dGV4dC1hbGlnbjpyaWdodDttYXJnaW4tcmlnaHQ6MmVtfQojcGx1Z2luLXNldHRpbmctZm9ybSAudGl0bGV7cGFkZGluZy10b3A6MDttYXJnaW4tYm90dG9tOjE4cHh9CiNwbHVnaW4tc2V0dGluZy1mb3JtIGlucHV0LmlwdHt3aWR0aDo2MDBweH0KI2Rhc2hib2FyZCAuZ3JpZC0xLTV7bWFyZ2luLXJpZ2h0OjIlfQojZGFzaGJvYXJkIC5xdWljay1saW5rIGxpe2xpc3Qtc3R5bGU6aW5zaWRlIGRpc2M7bWFyZ2luLWJvdHRvbTo2cHg7cGFkZGluZy1ib3R0b206NnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojZGFzaGJvYXJkIC5zdGF0cyAubGJse3BhZGRpbmc6MXB4IDVweDttYXJnaW46MCAzcHh9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2d7cGFkZGluZzo4cHggMTJweDttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGQ7bGluZS1oZWlnaHQ6MjRweDtmb250LXNpemU6MTJweH0jZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLmRhdGF7Y29sb3I6IzY2NjttYXJnaW4tbGVmdDoxLjJlbX0jZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5kYXRhIHB7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjI0cHh9CiNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLnJlYWR7dG9wOjA7cmlnaHQ6MTJweDtvcGFjaXR5OjB9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAucmVhZDpob3Zlcntjb2xvcjojZTY0MzQ2fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4wNil9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZzpob3ZlciAucmVhZHtvcGFjaXR5OjF9ClBLBwjPelYnljAAAJYwAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcY3NzXGNtZC5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfQpoZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9CmF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja30KdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9CmZpZWxkc2V0LGltZ3tib3JkZXI6MH0KYWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sdGgsdmFye2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbH0Kb2wsdWx7bGlzdC1zdHlsZTpub25lfQpjYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH0KaDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6bm9ybWFsfQpxOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9CmFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfQpzdXB7dmVydGljYWwtYWxpZ246dGV4dC10b3B9CnN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH0KbGVnZW5ke2NvbG9yOiMwMDB9Cmh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifQphe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifQpwe21hcmdpbi1ib3R0b206MThweH0KaDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9Cmgxe2ZvbnQtc2l6ZToyOHB4fQpoMntmb250LXNpemU6MjRweH0KaDN7Zm9udC1zaXplOjIxcHh9Cmg0e2ZvbnQtc2l6ZToxOXB4fQpoNXtmb250LXNpemU6MTZweH0KaDZ7Zm9udC1zaXplOjE0cHh9Ci50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fQoudGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fQoudGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9Ci5sZWZ0e2Zsb2F0OmxlZnR9Ci5yaWdodHtmbG9hdDpyaWdodH0KLmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfQoucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9Ci5jbGVhcjphZnRlcnt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2NvbnRlbnQ6IiAiO2NsZWFyOmJvdGg7aGVpZ2h0OjB9Ci52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfQouaW5saW5le2Rpc3BsYXk6aW5saW5lfQouaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfQouYmxvY2t7ZGlzcGxheTpibG9ja30KLmZhZGUtb3V0e29wYWNpdHk6MH0KLmhpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9Ci5jb250YWluZXJ7bWF4LXdpZHRoOjEyMDBweDttYXJnaW46YXV0b30KLmNvbnRhaW5lcjk2MHttYXgtd2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99Ci5ncmlkLTEtMnt3aWR0aDo1MCV9Ci5ncmlkLTEtM3t3aWR0aDozMy4zMzMzJX0KLmdyaWQtMS00e3dpZHRoOjI1JX0KLmdyaWQtMS01e3dpZHRoOjIwJX0KLmdyaWQtMS02e3dpZHRoOjE2LjY2NjYlfQouZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9Ci5ncmlkLTMtNHt3aWR0aDo3NSV9Ci5ncmlkLTMtNXt3aWR0aDo2MCV9Ci5ncmlkLTQtNXt3aWR0aDo4MCV9Ci5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0LGJ1dHRvbntmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZn0KLmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0KLmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC5pcHR7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTttaW4td2lkdGg6MTgwcHh9LmZvcm0gLmlwdDpmb2N1c3tib3JkZXItY29sb3I6IzAwNzliY30KLmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfQouZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fQouZm9ybSAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9Ci5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9Ci5mb3JtLXZlcnRpY2FsIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3h9Ci5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fQouZm9ybS1hbGlnbiAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn0KYS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfQouYnRuLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0uYnRuLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2F9Ci5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifQouYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfQoubGJse3BhZGRpbmc6NHB4IDEycHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fQoubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn0KYS5sYmx7bGluZS1oZWlnaHQ6MjZweH0KYS5sYmwtcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYTtjb2xvcjojZmJmYmZifQoubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CmEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9CmEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifQoucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30KLnBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5pdGVtOmhvdmVyIGF7Y29sb3I6I2ZmZn0KLnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifQoucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgyLC5tYXJrZG93biBoMywubWFya2Rvd24gaDQsLm1hcmtkb3duIGg1LC5tYXJrZG93biBoNntwYWRkaW5nOjE4cHggMCA5cHggMDtmb250LXdlaWdodDpib2xkfQoubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHh9Ci5tYXJrZG93biBoMntmb250LXNpemU6MjFweH0KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMnttYXJnaW4tYm90dG9tOjEwcHg7cGFkZGluZy1ib3R0b206MTBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KLm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fQoubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Ci5tYXJrZG93biBoNXtmb250LXNpemU6MTZweH0KLm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fQoubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Ci5tYXJrZG93biB1bHtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlfQoubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0KLm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0KLm1hcmtkb3duIHAgY29kZXtjb2xvcjojYzczODNhfQoubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0KLm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Ci5tYXJrZG93biBvbCwubWFya2Rvd24gdWx7bWFyZ2luOjEycHggMjRweH0KLm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfQoubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0KLm1hcmtkb3duIHRhYmxlIHRoZWFke2JhY2tncm91bmQ6I2Y2ZjZmNn0KLmNtZHttYXJnaW46MjRweCA0OHB4fQouY21kLWhlYWRlcnttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1idG57bWFyZ2luOjEwcHggMCAwIDMwcHh9Ci5jbWQtbGlzdCBsaXttYXJnaW4tYm90dG9tOjEycHg7cGFkZGluZy1ib3R0b206MTJweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2JhY2t1cC1saXN0IGxpe2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGU7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0jYmFja3VwLWxpc3QgbGk+c3BhbiwjYmFja3VwLWxpc3QgbGk+YXttYXJnaW4tcmlnaHQ6MTZweH0KI2JhY2t1cC1saXN0IGxpIC5kZWx7Y29sb3I6I2U2NDM0NjtvcGFjaXR5OjB9CiNiYWNrdXAtbGlzdCBsaSAubGlua3ttYXJnaW4tbGVmdDoxMnB4fQojYmFja3VwLWxpc3QgbGk6aG92ZXIgLmRlbHtvcGFjaXR5OjF9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2V7cGFkZGluZzo4cHggMTJweDttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGQ7bGluZS1oZWlnaHQ6MjRweDtmb250LXNpemU6MTJweH0jbWVzc2FnZS1saXN0IC5tZXNzYWdlIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLmRhdGF7Y29sb3I6IzY2NjttYXJnaW4tbGVmdDoxLjJlbX0jbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5kYXRhIHB7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjI0cHh9CiNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLnJlYWR7dG9wOjA7cmlnaHQ6MTJweDtvcGFjaXR5OjB9I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAucmVhZDpob3Zlcntjb2xvcjojZTY0MzQ2fQojbWVzc2FnZS1saXN0IC5tZXNzYWdlOmhvdmVyIC5yZWFke29wYWNpdHk6MX0KI2xvZy1saXN0IC5sb2d7Zm9udC1zaXplOjEycHh9CiNsb2ctbGlzdCAubmFtZXttYXJnaW4tcmlnaHQ6MS41ZW07Zm9udC13ZWlnaHQ6Ym9sZH0KI2xvZy1saXN0IC50aW1lLCNsb2ctbGlzdCAubmFtZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojbG9nLWxpc3QgLnRleHR7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsO2NvbG9yOiM2NjY7cGFkZGluZzo4cHggMTJweDtiYWNrZ3JvdW5kOiNmM2YzZjN9CiNsb2ctbGlzdCAucmVtb3Zle3RvcDowO3JpZ2h0OjEycHg7Y29sb3I6I2U2NDM0Nn0KUEsHCNI3xBsvGgAALxoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHN0YXRpY1xjc3NcY29kZW1pcnJvci5jc3MvKiBCQVNJQ1MgKi8KCi5Db2RlTWlycm9yIHsKICAgIC8qIFNldCBoZWlnaHQsIHdpZHRoLCBib3JkZXJzLCBhbmQgZ2xvYmFsIGZvbnQgcHJvcGVydGllcyBoZXJlICovCiAgICBmb250LWZhbWlseTogQ29uc29sYXMsICJNaWNyb3NvZnQgWWFIZWkiLCAiQ291cmllciBOZXciLCBBcmlhbDsKICAgIGhlaWdodDogNjYwcHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBib3JkZXI6MXB4IHNvbGlkICM5OTk7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiBTZXQgc2Nyb2xsaW5nIGJlaGF2aW91ciBoZXJlICovCiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLyogUEFERElORyAqLwoKLkNvZGVNaXJyb3ItbGluZXMgewogICAgcGFkZGluZzogNHB4IDA7IC8qIFZlcnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIHBhZGRpbmc6IDAgNHB4OyAvKiBIb3Jpem9udGFsIHBhZGRpbmcgb2YgY29udGVudCAqLwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyAvKiBUaGUgbGl0dGxlIHNxdWFyZSBiZXR3ZWVuIEggYW5kIFYgc2Nyb2xsYmFycyAqLwp9CgovKiBHVVRURVIgKi8KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVycyB7Cn0KCi5Db2RlTWlycm9yLWxpbmVudW1iZXIgewogICAgcGFkZGluZzogMCAzcHggMCA1cHg7CiAgICBtaW4td2lkdGg6IDIwcHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIGNvbG9yOiAjNTU1OwogICAgbGluZS1oZWlnaHQ6IDIwcHg7Cn0KCi8qIENVUlNPUiAqLwoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7CiAgICB6LWluZGV4OiAzOwp9CgovKiBTaG93biB3aGVuIG1vdmluZyBpbiBiaS1kaXJlY3Rpb25hbCB0ZXh0ICovCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHNpbHZlcjsKfQoKLkNvZGVNaXJyb3IuY20ta2V5bWFwLWZhdC1jdXJzb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHdpZHRoOiBhdXRvOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogIzdlNzsKICAgIHotaW5kZXg6IDE7Cn0KCi8qIENhbiBzdHlsZSBjdXJzb3IgZGlmZmVyZW50IGluIG92ZXJ3cml0ZSAobm9uLWluc2VydCkgbW9kZSAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IuQ29kZU1pcnJvci1vdmVyd3JpdGUgewp9CgouY20tdGFiIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLyogREVGQVVMVCBUSEVNRSAqLwoKLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7CiAgICBjb2xvcjogIzcwODsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7CiAgICBjb2xvcjogIzIxOTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHsKICAgIGNvbG9yOiAjMTY0Owp9CgouY20tcy1kZWZhdWx0IC5jbS1kZWYgewogICAgY29sb3I6ICMwMGY7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzA1YTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdmFyaWFibGUtMyB7CiAgICBjb2xvcjogIzA4NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcHJvcGVydHkgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1vcGVyYXRvciB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICNhNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZyB7CiAgICBjb2xvcjogI2ExMTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tc3RyaW5nLTIgewogICAgY29sb3I6ICNmNTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW1ldGEgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1YWxpZmllciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnVpbHRpbiB7CiAgICBjb2xvcjogIzMwYTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYnJhY2tldCB7CiAgICBjb2xvcjogIzk5NzsKfQoKLmNtLXMtZGVmYXVsdCAuY20tdGFnIHsKICAgIGNvbG9yOiAjMTcwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICMwMGM7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhlYWRlciB7CiAgICBjb2xvcjogYmx1ZTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUgewogICAgY29sb3I6ICMwOTA7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWhyIHsKICAgIGNvbG9yOiAjOTk5Owp9CgouY20tcy1kZWZhdWx0IC5jbS1saW5rIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tbmVnYXRpdmUgewogICAgY29sb3I6ICNkNDQ7Cn0KCi5jbS1wb3NpdGl2ZSB7CiAgICBjb2xvcjogIzI5MjsKfQoKLmNtLWhlYWRlciwgLmNtLXN0cm9uZyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLWVtIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmNtLWxpbmsgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWVycm9yIHsKICAgIGNvbG9yOiAjZjAwOwp9CgouY20taW52YWxpZGNoYXIgewogICAgY29sb3I6ICNmMDA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICMwZjA7Cn0KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQgewogICAgY29sb3I6ICNmMjI7Cn0KCi5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjZThmMmZmOwp9CgovKiBTVE9QICovCgovKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgY29udGFpbnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZgogICB0aGUgZWRpdG9yLiBZb3UgcHJvYmFibHkgc2hvdWxkbid0IHRvdWNoIHRoZW0uICovCgouQ29kZU1pcnJvciB7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIGNvbG9yOiBibGFjazsKfQoKLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIC8qIDMwcHggaXMgdGhlIG1hZ2ljIG1hcmdpbiB1c2VkIHRvIGhpZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJhcnMgKi8KICAgIC8qIFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAgICBtYXJnaW4tYm90dG9tOiAtMzBweDsKICAgIG1hcmdpbi1yaWdodDogLTMwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdXRsaW5lOiBub25lOyAvKiBQcmV2ZW50IGRyYWdnaW5nIGZyb20gaGlnaGxpZ2h0aW5nIHRoZSBlbGVtZW50ICovCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KCi5Db2RlTWlycm9yLXNpemVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLyogVGhlIGZha2UsIHZpc2libGUgc2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSByZWRyYXcgZHVyaW5nIHNjcm9sbGluZwogICBiZWZvcmUgYWN0dWFsbCBzY3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNoYWtpbmcgYW5kCiAgIGZsaWNrZXJpbmcgYXJ0aWZhY3RzLiAqLwouQ29kZU1pcnJvci12c2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1oc2Nyb2xsYmFyLCAuQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyLCAuQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHotaW5kZXg6IDY7CiAgICBkaXNwbGF5OiBub25lOwp9CgouQ29kZU1pcnJvci12c2Nyb2xsYmFyIHsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcmZsb3cteTogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1oc2Nyb2xsYmFyIHsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBvdmVyZmxvdy14OiBzY3JvbGw7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIgewogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIgewogICAgbGVmdDogMDsKICAgIGJvdHRvbTogMDsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVycyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgdG9wOiAwOwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICB6LWluZGV4OiAzOwp9CgouQ29kZU1pcnJvci1ndXR0ZXIgewogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGhlaWdodDogMTAwJTsKICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgbWFyZ2luLWJvdHRvbTogLTMycHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAvKiBIYWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqLwogICAgKnpvb206IDE7CiAgICAqZGlzcGxheTogaW5saW5lOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZWx0IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIHotaW5kZXg6IDQ7Cn0KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIGN1cnNvcjogdGV4dDsKfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAgIC8qIFJlc2V0IHNvbWUgc3R5bGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgbWlnaHQgaGF2ZSBzZXQgKi8KICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItd2lkdGg6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgbWFyZ2luOiAwOwogICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIHotaW5kZXg6IDI7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKfQoKLkNvZGVNaXJyb3Itd3JhcCBwcmUgewogICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC1icmVhazogbm9ybWFsOwp9CgouQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICB3aWR0aDogLXdlYmtpdC1maXQtY29udGVudDsKICAgIHdpZHRoOiAtbW96LWZpdC1jb250ZW50OwogICAgd2lkdGg6IGZpdC1jb250ZW50Owp9CgouQ29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLWNvZGUgcHJlIHsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiBhdXRvOwp9CgouQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB6LWluZGV4OiAwOwp9CgouQ29kZU1pcnJvci1saW5ld2lkZ2V0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7CiAgICBvdmVyZmxvdzogYXV0bzsKfQoKLkNvZGVNaXJyb3Itd2lkZ2V0IHsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwgewogICAgb3ZlcmZsb3cteDogaGlkZGVuOwp9CgouQ29kZU1pcnJvci1tZWFzdXJlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUgewogICAgcG9zaXRpb246IHN0YXRpYzsKfQoKLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiAwOwp9CgouQ29kZU1pcnJvci1mb2N1c2VkIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgouQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDlkOWQ5Owp9CgouQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICNkN2Q0ZjA7Cn0KCi5jbS1zZWFyY2hpbmcgewogICAgYmFja2dyb3VuZDogI2ZmYTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDAsIC40KTsKfQoKLyogSUU3IGhhY2sgdG8gcHJldmVudCBpdCBmcm9tIHJldHVybmluZyBmdW5ueSBvZmZzZXRUb3BzIG9uIHRoZSBzcGFucyAqLwouQ29kZU1pcnJvciBzcGFuIHsKICAgICp2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207Cn0KCkBtZWRpYSBwcmludCB7CiAgICAvKiBIaWRlIHRoZSBjdXJzb3Igd2hlbiBwcmludGluZyAqLwogICAgLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9Cn0KCi5jbS1zLWJhc2UxNi1kYXJrLkNvZGVNaXJyb3IgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGNvbG9yOiAjZTBlMGUwOwp9CgouY20tcy1iYXNlMTYtZGFyayBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjMjAyMDIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgYmFja2dyb3VuZDogIzE1MTUxNTsKICAgIGJvcmRlci1yaWdodDogMHB4Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1jdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYjBiMGIwICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tY29tbWVudCB7CiAgICBjb2xvcjogIzhmNTUzNjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdG9tIHsKICAgIGNvbG9yOiAjYWE3NTlmOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLW51bWJlciB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1wcm9wZXJ0eSwgLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1hdHRyaWJ1dGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20ta2V5d29yZCB7CiAgICBjb2xvcjogI2FjNDE0MjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1zdHJpbmcgewogICAgY29sb3I6ICNmNGJmNzU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUgewogICAgY29sb3I6ICM5MGE5NTk7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdmFyaWFibGUtMiB7CiAgICBjb2xvcjogIzZhOWZiNTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1kZWYgewogICAgY29sb3I6ICNkMjg0NDU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYnJhY2tldCB7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS10YWcgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tbGluayB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1lcnJvciB7CiAgICBiYWNrZ3JvdW5kOiAjYWM0MTQyOwogICAgY29sb3I6ICNiMGIwYjA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kOiAjMkYyRjJGICFpbXBvcnRhbnQ7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIC5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9ClBLBwgjAzWCTiAAAE4gAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAABzdGF0aWNcY3NzXGNvbW1vbi5jc3Nib2R5LGRpdixkbCxkdCxkZCx1bCxvbCxsaSxoMSxoMixoMyxoNCxoNSxoNixwcmUsY29kZSxmb3JtLGZpZWxkc2V0LGxlZ2VuZCxpbnB1dCx0ZXh0YXJlYSxwLGJsb2NrcXVvdGUsdGgsdGR7bWFyZ2luOjA7cGFkZGluZzowfWhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9dGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9ZmllbGRzZXQsaW1ne2JvcmRlcjowfWFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9b2wsdWx7bGlzdC1zdHlsZTpub25lfWNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH1xOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9YWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9c3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfXN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWxlZ2VuZHtjb2xvcjojMDAwfWh0bWwsYm9keXtmb250LWZhbWlseTpVYnVudHUsQ29uc29sYXMsIk1pY3Jvc29mdCBZYUhlaSIsVmVyZGFuYSxUYWhvbWEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifWF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9cHttYXJnaW4tYm90dG9tOjE4cHh9aDEsaDIsaDMsaDQsaDUsaDZ7cGFkZGluZzoxMnB4IDB9aDF7Zm9udC1zaXplOjI4cHh9aDJ7Zm9udC1zaXplOjI0cHh9aDN7Zm9udC1zaXplOjIxcHh9aDR7Zm9udC1zaXplOjE5cHh9aDV7Zm9udC1zaXplOjE2cHh9aDZ7Zm9udC1zaXplOjE0cHh9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmxlZnR7ZmxvYXQ6bGVmdH0ucmlnaHR7ZmxvYXQ6cmlnaHR9LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfS52ZXJ0aWNhbC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uYmxvY2t7ZGlzcGxheTpibG9ja30uZmFkZS1vdXR7b3BhY2l0eTowfS5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5jb250YWluZXJ7d2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfS5jb250YWluZXI5NjB7d2lkdGg6OTYwcHg7bWFyZ2luOmF1dG99LmdyaWQtMS0ye3dpZHRoOjUwJX0uZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9LmdyaWQtMS00e3dpZHRoOjI1JX0uZ3JpZC0xLTV7d2lkdGg6MjAlfS5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0uZ3JpZC0yLTN7d2lkdGg6NjYuNjY2NiV9LmdyaWQtMy00e3dpZHRoOjc1JX0uZ3JpZC0zLTV7d2lkdGg6NjAlfS5ncmlkLTQtNXt3aWR0aDo4MCV9LmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfWlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9LmZvcm0gbGVnZW5ke2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206MTRweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0uZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9LmZvcm0gLmNoa3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDZweCAwIDA7bGluZS1oZWlnaHQ6bm9ybWFsfS5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9LmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLnRpcHtmb250LXNpemU6MTNweDtjb2xvcjojOTk5O21hcmdpbi1sZWZ0OjEycHh9LmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0uZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS5mb3JtLXZlcnRpY2FsIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9LmJ0bnttaW4td2lkdGg6MTIwcHg7aGVpZ2h0OjM2cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTttYXJnaW46MH0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6Izk5OTtjdXJzb3I6cG9pbnRlcn1hLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9LmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfS5idG4tYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0uYnRuLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjlifS5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9LmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ubGJsLXJlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlNjQzNDY7Y29sb3I6I2ZiZmJmYn1hLmxibHtsaW5lLWhlaWdodDoyNnB4fWEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0ubGJsLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9YS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0ubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifWEubGJsLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mjtjb2xvcjojZmJmYmZifS5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfS5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9LnBhZ2VyIC5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6IzY2Njtjb2xvcjojZmJmYmZiO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLmN1cnJlbnQgYXtjb2xvcjojZmJmYmZifS5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Lm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0ubWFya2Rvd24gaDF7Zm9udC1zaXplOjI0cHg7cGFkZGluZy1ib3R0b206MTJweH0ubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Lm1hcmtkb3duIGgze2ZvbnQtc2l6ZToxOXB4fS5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0ubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Lm1hcmtkb3duIGg2e2ZvbnQtc2l6ZToxNHB4fS5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0ubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0ubWFya2Rvd24gb2x7bGlzdC1zdHlsZTpkZWNpbWFsIGluc2lkZX0ubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfS5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0ubWFya2Rvd24gYmxvY2txdW90ZXtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0ubWFya2Rvd24gYmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MH0ubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0ubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Lm1hcmtkb3duIHAgaW1ne21heC13aWR0aDo5OSU7aGVpZ2h0OmF1dG87bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrfS5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fS5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9UEsHCHu8/YwmFAAAJhQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xjc3NcaGlnaGxpZ2h0LmNzcy8qDQoNClN1bmJ1cnN0LWxpa2Ugc3R5bGUgKGMpIFZhc2lseSBQb2xvdm55b3YgPHZhc3RAd2hpdGVhbnRzLm5ldD4NCg0KKi8NCg0KcHJlIGNvZGUgew0KICAgIGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAwLjVlbTsNCiAgICBiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2Y4ZjhmODsNCn0NCg0KcHJlIC5jb21tZW50LA0KcHJlIC50ZW1wbGF0ZV9jb21tZW50LA0KcHJlIC5qYXZhZG9jIHsNCiAgICBjb2xvcjogI2FlYWVhZTsNCiAgICBmb250LXN0eWxlOiBpdGFsaWM7DQp9DQoNCnByZSAua2V5d29yZCwNCnByZSAucnVieSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnJlcXVlc3QsDQpwcmUgLnN0YXR1cywNCnByZSAubmdpbnggLnRpdGxlIHsNCiAgICBjb2xvcjogI0UyODk2NDsNCn0NCg0KcHJlIC5mdW5jdGlvbiAua2V5d29yZCwNCnByZSAuc3ViIC5rZXl3b3JkLA0KcHJlIC5tZXRob2QsDQpwcmUgLmxpc3QgLnRpdGxlIHsNCiAgICBjb2xvcjogIzk5Q0Y1MDsNCn0NCg0KcHJlIC5zdHJpbmcsDQpwcmUgLnRhZyAudmFsdWUsDQpwcmUgLmNkYXRhLA0KcHJlIC5maWx0ZXIgLmFyZ3VtZW50LA0KcHJlIC5hdHRyX3NlbGVjdG9yLA0KcHJlIC5hcGFjaGUgLmNicmFja2V0LA0KcHJlIC5kYXRlLA0KcHJlIC50ZXggLmNvbW1hbmQsDQpwcmUgLmNvZmZlZXNjcmlwdCAuYXR0cmlidXRlIHsNCiAgICBjb2xvcjogIzY1QjA0MjsNCn0NCg0KcHJlIC5zdWJzdCB7DQogICAgY29sb3I6ICNEQUVGQTM7DQp9DQoNCnByZSAucmVnZXhwIHsNCiAgICBjb2xvcjogI0U5QzA2MjsNCn0NCg0KcHJlIC50aXRsZSwNCnByZSAuc3ViIC5pZGVudGlmaWVyLA0KcHJlIC5waSwNCnByZSAudGFnLA0KcHJlIC50YWcgLmtleXdvcmQsDQpwcmUgLmRlY29yYXRvciwNCnByZSAuc2hlYmFuZywNCnByZSAucHJvbXB0IHsNCiAgICBjb2xvcjogIzg5QkRGRjsNCn0NCg0KcHJlIC5jbGFzcyAudGl0bGUsDQpwcmUgLmhhc2tlbGwgLnR5cGUsDQpwcmUgLnNtYWxsdGFsayAuY2xhc3MsDQpwcmUgLmphdmFkb2N0YWcsDQpwcmUgLnlhcmRvY3RhZywNCnByZSAucGhwZG9jIHsNCiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCg0KcHJlIC5zeW1ib2wsDQpwcmUgLnJ1YnkgLnN5bWJvbCAuc3RyaW5nLA0KcHJlIC5udW1iZXIgew0KICAgIGNvbG9yOiAjMzM4N0NDOw0KfQ0KDQpwcmUgLnBhcmFtcywNCnByZSAudmFyaWFibGUsDQpwcmUgLmNsb2p1cmUgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICMzRTg3RTM7DQp9DQoNCnByZSAuY3NzIC50YWcsDQpwcmUgLnJ1bGVzIC5wcm9wZXJ0eSwNCnByZSAucHNldWRvLA0KcHJlIC50ZXggLnNwZWNpYWwgew0KICAgIGNvbG9yOiAjQ0RBODY5Ow0KfQ0KDQpwcmUgLmNzcyAuY2xhc3Mgew0KICAgIGNvbG9yOiAjOUI3MDNGOw0KfQ0KDQpwcmUgLnJ1bGVzIC5rZXl3b3JkIHsNCiAgICBjb2xvcjogI0M1QUY3NTsNCn0NCg0KcHJlIC5ydWxlcyAudmFsdWUgew0KICAgIGNvbG9yOiAjQ0Y2QTRDOw0KfQ0KDQpwcmUgLmNzcyAuaWQgew0KICAgIGNvbG9yOiAjOEI5OEFCOw0KfQ0KDQpwcmUgLmFubm90YXRpb24sDQpwcmUgLmFwYWNoZSAuc3FicmFja2V0LA0KcHJlIC5uZ2lueCAuYnVpbHRfaW4gew0KICAgIGNvbG9yOiAjOUI4NTlEOw0KfQ0KDQpwcmUgLnByZXByb2Nlc3NvciwNCnByZSAucHJhZ21hIHsNCiAgICBjb2xvcjogIzg5OTZBODsNCn0NCg0KcHJlIC5oZXhjb2xvciwNCnByZSAuY3NzIC52YWx1ZSAubnVtYmVyIHsNCiAgICBjb2xvcjogI0REN0IzQjsNCn0NCg0KcHJlIC5jc3MgLmZ1bmN0aW9uIHsNCiAgICBjb2xvcjogI0RBRDA4NTsNCn0NCg0KcHJlIC5kaWZmIC5oZWFkZXIsDQpwcmUgLmNodW5rLA0KcHJlIC50ZXggLmZvcm11bGEgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMwRTIyMzE7DQogICAgY29sb3I6ICNGOEY4Rjg7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmRpZmYgLmNoYW5nZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzRBNDEwRDsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5hZGRpdGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI1M0IyMjsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5kZWxldGlvbiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzQyMEUwOTsNCiAgICBjb2xvcjogI0Y4RjhGODsNCn0NCg0KcHJlIC5jb2ZmZWVzY3JpcHQgLmphdmFzY3JpcHQsDQpwcmUgLmphdmFzY3JpcHQgLnhtbCwNCnByZSAudGV4IC5mb3JtdWxhLA0KcHJlIC54bWwgLmphdmFzY3JpcHQsDQpwcmUgLnhtbCAudmJzY3JpcHQsDQpwcmUgLnhtbCAuY3NzLA0KcHJlIC54bWwgLmNkYXRhIHsNCiAgICBvcGFjaXR5OiAwLjU7DQp9DQoNCnByZSAuZ28gLnR5cGVuYW1lew0KICAgIGNvbG9yOiAjZmZiYzU0Ow0KfVBLBwjDaOPeXQkAAF0JAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcY3NzXGxpbmcuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOiNmM2YzZjN9CiNoZWFkZXJ7YmFja2dyb3VuZDojMDA5M2M0O21pbi13aWR0aDoxMjBweDtwYWRkaW5nOjQwcHggMCA0OHB4IDA7Y29sb3I6I2ZiZmJmYn0jaGVhZGVyIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7Ym9yZGVyLXJhZGl1czo1MHB4Oy1tb3otYm9yZGVyLXJhZGl1czo1MHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo1MHB4fQojaGVhZGVyLWh7bGluZS1oZWlnaHQ6OTRweDtjb2xvcjojZmJmYmZiO3BhZGRpbmc6MDttYXJnaW4tbGVmdDoyNHB4fSNoZWFkZXItaCBhe2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItc3Vie2NvbG9yOiNmM2YzZjM7bWFyZ2luLWxlZnQ6MS4yZW07Zm9udC1zaXplOjE2cHh9CiNuYXZ7bGluZS1oZWlnaHQ6OTBweH0jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7bWFyZ2luLWxlZnQ6NDRweH0jbmF2IGxpIGF7Zm9udC1zaXplOjE4cHg7Y29sb3I6I2YzZjNmMztkaXNwbGF5OmJsb2NrfSNuYXYgbGkgYTpob3Zlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgMCAzcHggIzMzMzstbW96LXRleHQtc2hhZG93OjAgMCAzcHggIzMzMzstd2Via2l0LXRleHQtc2hhZG93OjAgMCAzcHggIzMzM30KI2Zvb3RlcntwYWRkaW5nOjMwcHggNDBweDtjb2xvcjojOTk5fQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0jYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAudmlld3N7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIC5jb21tZW50c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjQwcHg7bWFyZ2luLWxlZnQ6OHB4O2JvcmRlcjo2cHggc29saWQgI2ZmZjtib3gtc2hhZG93OjAgMCAycHggIzk5OTstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICM5OTl9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cyBhe2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHM6aG92ZXJ7Ym94LXNoYWRvdzowIDAgNHB4ICM2NjY7LW1vei1ib3gtc2hhZG93OjAgMCA0cHggIzY2Njstd2Via2l0LWJveC1zaGFkb3c6MCAwIDRweCAjNjY2fQojYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze3RvcDoxNHB4O2xlZnQ6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czozMHB4Oy1tb3otYm9yZGVyLXJhZGl1czozMHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozMHB4O3BhZGRpbmc6MDtib3JkZXI6NHB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tYWluOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7Ym9yZGVyOjExcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjYzcHg7bGVmdDotMjJweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aXRsZXtmb250LXNpemU6MjhweDtwYWRkaW5nLWJvdHRvbToyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1haW4gLnRpbWUtaW5mb3tjb2xvcjojOTk5O21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO3RleHQtaW5kZW50OjFlbTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjUwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1haW57bWFyZ2luLWxlZnQ6MH0jYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWluOmJlZm9yZXtkaXNwbGF5Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLm1ldGF7cmlnaHQ6NDRweDt0b3A6LTM2cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuYXJ0aWNsZS1zaW5nbGUgLnZpZXdze3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czozNnB4Oy1tb3otYm9yZGVyLXJhZGl1czozNnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozNnB4O2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1zaXplOjI0cHg7cGFkZGluZzowO2JvcmRlcjo2cHggc29saWQgI2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC50YWd7Y29sb3I6Izk5OX0KI2FydGljbGUtcGFnZXJ7bWFyZ2luLWxlZnQ6MTE2cHh9I2FydGljbGUtcGFnZXIgLml0ZW17bWFyZ2luOjA7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM5OTk7cGFkZGluZzoxMnB4IDE4cHg7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVtOmhvdmVye2JhY2tncm91bmQ6IzAwNzliY30KI2NvbW1lbnR7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggI2JiYjtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxOHB4IDI0cHh9I2NvbW1lbnQgLm1ldGF7cmlnaHQ6LTI0cHg7dG9wOi0zMHB4fSNjb21tZW50IC5tZXRhIC5jb21tZW50c3ttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye21hcmdpbi1yaWdodDoxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDttYXJnaW4tdG9wOjZweH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIHB7bWFyZ2luLWJvdHRvbTowfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3J7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmJsb2NrfSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1hdXRob3I6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZGRkO3BhZGRpbmc6M3B4IDEwcHh9I2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXJlcGx5OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KI2NvbW1lbnQtbGlzdCAuYy1jb250ZW50e3BhZGRpbmctdG9wOjRweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2O21hcmdpbi1sZWZ0OjEycHh9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1zaG93e21hcmdpbi1ib3R0b206MzJweH0KI2NvbW1lbnQtdGl0bGV7bWFyZ2luLWJvdHRvbToyMHB4O3BhZGRpbmctYm90dG9tOjIwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvO21hcmdpbi1ib3R0b206MzBweH0jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcntib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHg7d2lkdGg6NTBweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXtkaXNwbGF5Om5vbmV9ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH0gI25hdiwjaGVhZGVyLWh7bGluZS1oZWlnaHQ6NTBweH0gI2Zvb3RlciBzcGFue2Zsb2F0Om5vbmU7dGV4dC1hbGlnbjpjZW50ZXJ9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1oe21hcmdpbi1sZWZ0OjB9ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfSAjbmF2e2Zsb2F0OmxlZnR9I25hdiBsaXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo0NHB4fX0KUEsHCM/D6tacKgAAnCoAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHN0YXRpY1xjc3Ncc3R5bGUuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2JnLnBuZyIpIHJlcGVhdH0KI2hlYWRlcntiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2hlYWRlci5naWYiKSByZXBlYXQgIzRjNzI5ODttaW4td2lkdGg6MTIwcHg7cGFkZGluZzozMHB4IDA7Y29sb3I6I2ZiZmJmYn0KI2hlYWRlci1pbWd7d2lkdGg6OTZweDtoZWlnaHQ6OTZweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe3BhZGRpbmctdG9wOjI0cHg7Zm9udC1zaXplOjMycHh9I2hlYWRlci1oIGF7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfQojbmF2e2hlaWdodDo1NHB4O2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3gtc2hhZG93OjAgMCAycHggI2JiYjstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICNiYmI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY30jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7cGFkZGluZzowIDE4cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7cGFkZGluZzowIDMycHg7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzAwNzliY30KI25hdi5maXhlZHtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO3RvcDowfQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZm9vdGVye2NvbG9yOiNjY2M7YmFja2dyb3VuZC1jb2xvcjojMWMyNDI5O3BhZGRpbmc6MjRweCAwfSNmb290ZXIgcHttYXJnaW4tYm90dG9tOjlweDtmb250LXdlaWdodDpib2xkO2xldHRlci1zcGFjaW5nOjFweH0jZm9vdGVyIHAgYXtjb2xvcjojY2NjO21hcmdpbjowIDE2cHh9I2Zvb3RlciBwIGE6aG92ZXJ7Y29sb3I6I2ZiZmJmYn0KI2Zvb3RlciBwIGEgLmZhe21hcmdpbi1yaWdodDo4cHh9CiNnby10b3B7Ym90dG9tOjUwcHg7cmlnaHQ6NDBweDtwb3NpdGlvbjpmaXhlZDtjb2xvcjojZmZmO3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo4cHg7b3BhY2l0eTouNH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhe3dpZHRoOjEwOHB4O2xpbmUtaGVpZ2h0OjI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudmlld3MsI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYXtjb2xvcjojZmZmfSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDoxNDBweH0KI2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxle3BhZGRpbmc6OHB4IDE2cHg7YmFja2dyb3VuZC1jb2xvcjojNGM3Mjk4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjJweH0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYXtjb2xvcjojZWVlfSNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtwYWRkaW5nOjE4cHggMjRweCAyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm97bWFyZ2luLWJvdHRvbTowO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcDpub25lO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjJweDtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5zaGFyZSAuZmF7bWFyZ2luLXJpZ2h0OjB9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz4qe3BhZGRpbmc6NnB4IDE4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz5zcGFue2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZX0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFke2NvbG9yOiM5OTl9I2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLnRpbWUsI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC52aWV3cyBzcGFue2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciBhcnRpY2xle21hcmdpbi1ib3R0b206NDhweH0KI2NvbW1lbnR7bWFyZ2luLXRvcDotMjRweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmZmZ9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvfSNjb21tZW50LWZvcm0gLmMtaW5mb3t3aWR0aDoyNiV9I2NvbW1lbnQtZm9ybSAuYy1pbmZvIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjB9CiNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDo3MCV9CiNjb21tZW50LWZvcm0gLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjE4cHg7cGFkZGluZy1ib3R0b206MThweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1saXN0IC5jLXNlY3Rpb257bWF4LXdpZHRoOjgzMHB4fQojY29tbWVudC1saXN0IC5jLWNoZWNre2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNlNjQzNDZ9I2NvbW1lbnQtbGlzdCAuYy1jaGVjayAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MH0gI2FydGljbGUtY29udGFpbmVyIC5tZXRhLmxlZnR7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MDt3aWR0aDphdXRvfSAjbmF2IGxpe3BhZGRpbmc6MCAxMHB4fSAjaGVhZGVyLWltZ3tmbG9hdDpsZWZ0O3dpZHRoOjY0cHg7aGVpZ2h0OjY0cHh9ICNoZWFkZXItaHtwYWRkaW5nOjE3cHggMDtmb250LXNpemU6MjRweH0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLnRhZywjYXJ0aWNsZS1jb250YWluZXIgLnRpbWV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3Jte3dpZHRoOjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1pbWd7ZGlzcGxheTpub25lfSAjaGVhZGVyLXN1YntkaXNwbGF5Om5vbmV9ICNjb21tZW50LWxpc3QgLmMtYXZhdGFye2Rpc3BsYXk6bm9uZX19ClBLBwiqeuwujSgAAI0oAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcZmF2aWNvbi5pY28AAAEAAQAgIAAAAQAgAKgQAAAWAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAEAAAEgsAABILAAAAAAAAAAAAALN+B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs34H27N+B9uzfgfbs34H27N+B9uzfgfbs30H27N+B9uzfgfbs30H27N+B9uzfgfbs34H27N+B9uyfAfWr3oHx61+GK21k0qQuoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoMN/7qGF/+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7qBCP+5gQj/uYII/7qBCP+6ggj/uoII/7mBCP+5gQj/uYII/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoII/7mBCP+5gQj/uoEI/7qBCP+6ggj/uoII/7qBCP+6ggj/uoEI/7qCCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6gQj/uYEI/7mBCP+5ggf/uYIH/7mCB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+8hAX/vIQF/7uDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yDBf+8hAX/vIQF/7yDBf+8hAb/vIQG/8CHA//AhgP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhwT/wIcE/8CGA//AhgL/xYkC/8WJAf/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYoC/8WJAf/FigP/x48O/8yaJ//JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/Jkxf/1q9T/+HAdf/p0p//8+fN/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y40A/8ugPf/y693+/v36/v/////////+yo4A/sqNAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgH/y44A/8uOAP/LjQD/yo4A/8uOAP/LjgD/y44B/8uOAf/LjgD/y44A/8uOAP/LjgD/y44B/8qNAP/Ljwb/2Llz//r59f7+///+/v7+//7+/v7KjgD+yo0A/8uOAP/LjgD/yo4A/8qOAP/KjgD/yo4A/8uOAP/LjgD/yo4A/8uOAP/LjgD/yo0A/8uNAP/LjgH/yY0B/8eNCP/KjgP/yo0A/8uNAP/KjQD/yo0A/8qNAP/LjwL/0Job/9++cf/17+D//v7+/v////7+/v7//v7+/suOAfrLjgD/yo0A/8uOAP/LjgH/yo4A/8qOAP/KjgD/y44A/8qOAP/KjgD/y44A/8uOAf/KjgD/yo0A/8mMAP/HmjT/wat5/6iLSP/Npk7/xZgw/8+fMf/Wpjn/2rBP/+LCd//w37n/+/jy//7+///+/v7////////////+/v7/vJIyvruKGf/Mkgz/yo4A/8qNAP/KjQD/yo0A/8qOAP/KjgD/yo4A/8qNAP/KjQD/yo0A/8uOAf/QmRj/yaNN/9DGrf/l5eb/pqWj/+nm3//EvrH/4drJ/vnz4/779uz//fz5//////7////+/v7+//7+/v////////////7+/v+Vk42UmY95/+bOmf/gvWr/2a1I/9SjMv/Rmx//z5YT/8+VEf/PlRH/z5cX/9OfKP/Zq0P/4b9x/+3bs//QzMT/w8PD/urq6v62trb+6Ojo/rS0tf7a29v+/f39/v7///7+/v7//////v////7+/v7//v7+//////7////+/////peWlpWSkpP/9vb1//379//59Of/9u3X//Lkxf/w37j/7tyy/+/cs//x4bv/9enO//nz5P/39fL/ycnK/6+vr/+lpKT/vb29/5SUlP+5ubn/p6en/7Gxsf/R0dH//Pz8///////+/v7//v7+//7+/v/+/v7////////////+/v7/qampmJGRkf/y8vL////+//7+/v/////////////////+/v7//v7+//7+///+/////////+Hh4P+6ubn/7+/v/+zs7P/X19f/xsbG/97e3v/19fX/6urr/7i4uP/x8fH///////7+/v7//////v7+//7+/v////////////7+/v+bm5tng4OD8O3t7f///////////v///v7+/v7//v7+/v/+/v7+/v7++fn5/vb29v76+vr+5+fo/7e3t//t7e3/+Pj4/t3d3f7Y2Nj+8vLy/v7+/v7Y2Nj+vr6+/vj4+P7//////////v////7+/v7//v7+//////7////+/////jU1NSNxcXHY5ubm//////7////+//////7+/v//////7+/v/tDQ0P++vr7+urq6/r6+vv/R0dH+z8/P/qysrP9nZ2f+Kysr/yMjI/9bW1v/q6ur/729vf7k5OT+5eXl/9ra2v/f39/+8PDw/v39/f/////+/v7+/v/////////+jY2NJ3V1ddrb29v//////v////7//////v7+/+Hh4f+1tbX+ysrK/+Pj4/7n5+f+4+Pj/8nJyf6+vr7+t7e3/ywsLP4AAAD/AAAA/wYGBv+Ghob/19fX/r6+vv68vLz/wcHB/76+vv65ubn+x8fH//Hx8f7////+//////////7g4OAkhISE2cXFxf///////////v/////n5+f/tbW1/+Tk5P///////////v/////////+/v7+/uDg4P+2trb/rq6u/25ubv9ZWVn/g4OD/7u7u/++vr7/5OTk/vr6+v/9/f3//Pz8/vDw8P/Kysr/t7e3//Dw8P///////////4eHh4BdXV3xo6Oj///////////++/v7/8HBwf/BwcH/ra2t/8bGxv/6+vr///////7+/v/+/v7+/////9bW1v/ExMT/9vb2//b29v/d3d3/vr6+/+Tk5P/x8fH//v7+//7+/v/+/v7+//////39/f/Nzc3/w8PD//v7+///////hoaG+JaWlv+Li4v/9/f3///////u7u7/q6ur/1JSUv8TExP/Z2dn/9HR0f/9/f3//v7+////////////8vLy/7i4uP/v7+//+vr6/8DAwP+cnJz/VFRU/25ubv/c3Nz//v7+//////7+/v7///////T09P+3t7f/6+vr///////v7+//7Ozs/3x8fP/Y2Nj+/////ufn5/+Tk5P/FhYW/wUFBf83Nzf/mZmZ//v7+//+/v7//////v/////6+vr/w8PD/+fn5//z8/P/rKys/zk5Of8AAAD/RUVF/piYmP/19fX//////v7+/v///////f39/8TExP/e3t7////////////R0dH/MzMz/5eXl///////5+fn/7Ozs/9oaGj/FxcX/zo6Ov/IyMj//v7+//7+/v////////////j4+P+9vb3/6+vr//Dw8P+zs7P/TExM/wAAAP8ODg7+goKC//r6+v/////+/v7+///////+/v7/x8fH/9zc3P///////////7i4uP8ZGRn/Pz8//t/f3/729vb+vb29/9vb2/7ExMT+29vb//39/f7+/v7+/////v////7////+5eXl/rm5uf729vb/8/Pz/76+vv/BwcH+cnJy/n5+fv7g4OD///////7+/v7+/v7+//////j4+P68vLz+5ubm//////7////+8fHx/7Kysv+FhYX+i4uL/vT09P/U1NT/vb29//n5+f7//////v7+/v////7//////////vb29v69vb3/1tbW///////9/f3/x8fH/87Ozv/5+fn+/Pz8/v///////////////v////7/////39/f/rm5uf74+Pj/7u7u/snJyf/4+Pj+//////Ly8v6IiIj+m5ub//T09P/IyMj/vb29/ufn5//6+vr+/Pz8/vr6+v/n5+f+vb29/snJyf/6+vr////////////w8PD/t7e3/9jY2P79/f3+///////////////+/////unp6f+3t7f+4uLi//Hx8f+Ojo7+c3Nz5ZCQkP6jo6P/oKCg/n5+fvpOTk7hnJyc++Hh4f/W1tb+vb29/8DAwP/BwcH/vr6+/7m5uf7W1tb++vr6///////////////////////p6en/ubm5/sPDw/7f39//6Ojo/+Tk5P7MzMz/tra2/93d3f7q6ur/g4OD/3BwcP+rq6s/cHBwZkVFRWlKSkpnhYWFX4yMjDhtbW2bd3d3662trf/Y2Nj/5OTk/uXl5f/p6en/9vb2/v////////////////7+/v/////////////////19fX/1tbW/8LCwv+9vb3/wcHB/9HR0f/k5OT/xsbG/319ffNjY2POa2tr0hEREQD///8A////ALy8vAAAAAAAAAAAAM7Ozgt2dnZFbW1to3t7e+uZmZn/t7e3/9fX1//o6Oj/8PDw//b29v/6+vr//f39////////////////////////////9/f3/+rq6v/d3d3+t7e3/46Ojv58fHzgh4eHcry8vBdwcHAdw8PDAICAgAAgICAAPz8/AJiYmADGxsYAl5eXAf///wDKysoNqampU319fY5wcHDFe3t793d3d/WBgYH5kZGR/KOjo/uzs7P7v7+/+8XFxfvGxsb7wMDA+7Ozs/ucnJz8gYGB+nh4ePpxcXHMiYmJi76+vjz///8FqqqqAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAAAAAAAFBLBwipcxPwvhAAAL4QAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcaW1nL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABEAAABzdGF0aWNcaW1nXGJnLnBuZ4lQTkcNChoKAAAADUlIRFIAAACWAAAAlggCAAAAs2PmtQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANmaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDk3MEYzQ0VCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDk3MEYzQ0RCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQUFCQkVBMThGQjVFMjExQkJFM0FC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bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFDMTUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCMDE1QUFDMjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkIwMTVBQUJGNTI0NDExRTI4RjEzQTA0OUM5QUZBOTdDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkIwMTVBQUMwNTI0NDExRTI4RjEzQTA0OUM5QUZBOTdDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAAGQAZAAABP8wmZQQQWZKvDnFSIWEIykZJaodmHGdBHVM7HdQH3qHKJWNhAsoc7LwRIGWj4jyYAiZYPR3cWV+zSchMIly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bigpIHsNCiAgICB2YXIgdG9wID0gJCgnI25hdicpLm9mZnNldCgpLnRvcDsNCiAgICB2YXIgJHRvcCA9ICQoJyNnby10b3AnKTsNCiAgICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKHRvcCA8ICQodGhpcykuc2Nyb2xsVG9wKCkpIHsNCiAgICAgICAgICAgICR0b3AucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR0b3AuYWRkQ2xhc3MoJ2hpZGUnKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgICR0b3Aub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IDB9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSkNCn0NCg0KZnVuY3Rpb24gcmVuZGVyTWFya2Rvd24oKSB7DQogICAgdmFyICRtZCA9ICQoJy5tYXJrZG93bicpOw0KICAgICRtZC5lYWNoKGZ1bmN0aW9uIChpLCBpdGVtKSB7DQogICAgICAgICQoaXRlbSkuaHRtbChtYXJrZWQoJChpdGVtKS5odG1sKCkucmVwbGFjZSgvJmd0Oy9nLCAnPicpKSk7DQogICAgfSk7DQogICAgdmFyIGNvZGUgPSAkbWQuZmluZCgncHJlIGNvZGUnKTsNCiAgICBpZiAoY29kZS5sZW5ndGgpIHsNCiAgICAgICAgJCgiPGxpbms+IikuYXR0cih7IHJlbDogInN0eWxlc2hlZXQiLCB0eXBlOiAidGV4dC9jc3MiLCBocmVmOiAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyJ9KS5hcHBlbmRUbygiaGVhZCIpOw0KICAgICAgICAkLmdldFNjcmlwdCgiL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGNvZGUuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soaXRlbSkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGluaXRDb21tZW50KCkgew0KICAgIHZhciAkbGlzdCA9ICQoJyNjb21tZW50LWxpc3QnKTsNCiAgICBpZiAoISRsaXN0Lmxlbmd0aCkgew0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1hdXRob3IiKSkgew0KICAgICAgICAkKCcjY29tbWVudC1hdXRob3InKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpOw0KICAgICAgICAkKCcjY29tbWVudC1lbWFpbCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1lbWFpbCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtdXJsJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LXVybCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXZhdGFyJykuYXR0cigic3JjIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXZhdGFyIikpOw0KICAgICAgICAkKCcuYy1hdmF0YXInKS5yZW1vdmVDbGFzcygibnVsbCIpOw0KICAgIH0NCiAgICAkKCcjY29tbWVudC1jb250ZW50Jykub24oImZvY3VzIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoJCgnLmMtYXZhdGFyJykuaGFzQ2xhc3MoIm51bGwiKSkgew0KICAgICAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICAgICAkKCcuYy1pbmZvLWZpZWxkcycpLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkKCcubm90LW1lJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1hdmF0YXItZmllbGQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnI2NvbW1lbnQtc2hvdycpLm9uKCJjbGljayIsICIuZW5hYmxlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIjY29tbWVudC1zaG93IikucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWF1dGhvciIsICQoJyNjb21tZW50LWF1dGhvcicpLnZhbCgpKTsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWVtYWlsIiwgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC11cmwiLCAkKCcjY29tbWVudC11cmwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdmF0YXIiLCBqc29uLmNvbW1lbnQuYXZhdGFyKTsNCiAgICAgICAgICAgIHZhciB0cGwgPSAkKCQoJyNjb21tZW50LXRwbCcpLmh0bWwoKSk7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXZhdGFyIikuYXR0cigic3JjIiwganNvbi5jb21tZW50LmF2YXRhcikuYXR0cigiYWx0IiwganNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXV0aG9yIikuYXR0cigiaHJlZiIsIGpzb24uY29tbWVudC51cmwpLnRleHQoanNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtcmVwbHkiKS5hdHRyKCJyZWwiLCBqc29uLmNvbW1lbnQuaWQpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKGpzb24uY29tbWVudC5jb250ZW50KTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQucGFyZW50X21kKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXAtbWQiKS5odG1sKG1hcmtlZChqc29uLmNvbW1lbnQucGFyZW50X21kKSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0cGwuYXR0cigiaWQiLCAiY29tbWVudC0iICsganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQuc3RhdHVzID09ICJhcHByb3ZlZCIpIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtY2hlY2siKS5yZW1vdmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRsaXN0LmFwcGVuZCh0cGwpOw0KICAgICAgICAgICAgJCgnLmNhbmNlbC1yZXBseScpLnRyaWdnZXIoImNsaWNrIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykudmFsKCIiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGFsZXJ0KCLmj5DkuqTlpLHotKUhIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkbGlzdC5vbigiY2xpY2siLCAiLmMtcmVwbHkiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZXBseS1tZCcpLnJlbW92ZSgpOw0KICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICB2YXIgcGMgPSAkKCcjY29tbWVudC0nICsgaWQpOw0KICAgICAgICB2YXIgbWQgPSAiPiBAIiArIHBjLmZpbmQoIi5jLWF1dGhvciIpLnRleHQoKSArICJcblxuIjsNCiAgICAgICAgbWQgKz0gIj4gIiArIHBjLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKCkgKyAiXG4iOw0KICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykuYmVmb3JlKCc8ZGl2IGNsYXNzPSJyZXBseS1tZCBtYXJrZG93biI+JyArIG1hcmtlZChtZCkgKyAnPC9kaXY+Jyk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbChpZCk7DQogICAgICAgIGlmICgkKCcjY29tbWVudC1zaG93JykubGVuZ3RoKSB7DQogICAgICAgICAgICAkKCcjY29tbWVudC1zaG93IC5lbmFibGUnKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICB9DQogICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS5zaG93KCk7DQogICAgICAgIHZhciB0b3AgPSAkKCcjY29tbWVudC1mb3JtJykub2Zmc2V0KCkudG9wOw0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IHRvcH0sIDUwMCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCiAgICAkKCcuY2FuY2VsLXJlcGx5Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAkKHRoaXMpLmhpZGUoKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KfQ0KUEsHCB7hHnJ1EgAAdRIAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHN0YXRpY1xqc1x1cGxvYWQuanNmdW5jdGlvbiBpbml0VXBsb2FkKHApIHsNCiAgICAkKCcjYXR0YWNoLXNob3cnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICB9KTsNCiAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmIChjb25maXJtKCLnq4vljbPkuIrkvKA/IikpIHsNCiAgICAgICAgICAgIHZhciBiYXIgPSAkKCc8cCBjbGFzcz0iZmlsZS1wcm9ncmVzcyBpbmxpbmUtYmxvY2siPjAlPC9wPicpOw0KICAgICAgICAgICAgJCgnI2F0dGFjaC1mb3JtJykuYWpheFN1Ym1pdCh7DQogICAgICAgICAgICAgICAgImJlZm9yZVN1Ym1pdCI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgJChwKS5iZWZvcmUoYmFyKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJ1cGxvYWRQcm9ncmVzcyI6IGZ1bmN0aW9uIChldmVudCwgcG9zaXRpb24sIHRvdGFsLCBwZXJjZW50Q29tcGxldGUpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRWYWwgPSBwZXJjZW50Q29tcGxldGUgKyAnJSc7DQogICAgICAgICAgICAgICAgICAgIGJhci5jc3MoIndpZHRoIiwgcGVyY2VudFZhbCkuaHRtbChwZXJjZW50VmFsKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoanNvbi5tc2cpLmFkZENsYXNzKCJlcnIiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhci5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMDApOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoIi8iICsganNvbi5maWxlLlVybCArICImbmJzcDsmbmJzcDsmbmJzcDsoQCIgKyBqc29uLmZpbGUuTmFtZSArICIpIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJCgnI2F0dGFjaC11cGxvYWQnKS52YWwoIiIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJCh0aGlzKS52YWwoIiIpOw0KICAgICAgICB9DQogICAgfSk7DQp9UEsHCIiJF/v2BAAA9gQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHN0YXRpY1xsaWIvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAHN0YXRpY1xsaWJcY29kZW1pcnJvci1tb2RlLm1pbi5qcyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0vXihccyopKFsqKy1dfChcZCspXC4pKFxzKikvLGU9IiorLSI7Q29kZU1pcnJvci5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT1yLmdldEN1cnNvcigpLG89ci5nZXRTdGF0ZUFmdGVyKGkubGluZSkubGlzdCE9PSExO2lmKCFvfHwhKG49ci5nZXRMaW5lKGkubGluZSkubWF0Y2godCkpKXJldHVybiByLmV4ZWNDb21tYW5kKCJuZXdsaW5lQW5kSW5kZW50Iiksdm9pZCAwO3ZhciBsPW5bMV0sYT1uWzRdLHM9ZS5pbmRleE9mKG5bMl0pPj0wP25bMl06cGFyc2VJbnQoblszXSwxMCkrMSsiLiI7ci5yZXBsYWNlU2VsZWN0aW9uKCJcbiIrbCtzK2EsImVuZCIpfX0oKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoIm1hcmtkb3duIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlLHIpe3JldHVybiBlLmY9ZS5pbmxpbmU9cixyKHQsZSl9ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIGUuZj1lLmJsb2NrPXIscih0LGUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubGlua1RpdGxlPSExLHQuZW09ITEsdC5zdHJvbmc9ITEsdC5xdW90ZT0wLGd8fHQuZiE9bHx8KHQuZj1jLHQuYmxvY2s9byksdC50cmFpbGluZ1NwYWNlPTAsdC50cmFpbGluZ1NwYWNlTmV3TGluZT0hMSx0LnRoaXNMaW5lSGFzQ29udGVudD0hMSxudWxsfWZ1bmN0aW9uIG8odCxpKXt2YXIgbz1pLmxpc3QhPT0hMTtpLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbkRpZmY+PTA/KGkuaW5kZW50YXRpb25EaWZmPDQmJihpLmluZGVudGF0aW9uLT1pLmluZGVudGF0aW9uRGlmZiksaS5saXN0PW51bGwpOmkubGlzdCE9PSExJiZpLmluZGVudGF0aW9uPjA/KGkubGlzdD1udWxsLGkubGlzdERlcHRoPU1hdGguZmxvb3IoaS5pbmRlbnRhdGlvbi80KSk6aS5saXN0IT09ITEmJihpLmxpc3Q9ITEsaS5saXN0RGVwdGg9MCk7dmFyIGw9bnVsbDtpZihpLmluZGVudGF0aW9uRGlmZj49NClyZXR1cm4gaS5pbmRlbnRhdGlvbi09NCx0LnNraXBUb0VuZCgpLGs7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO2lmKGw9dC5tYXRjaChSKSlpLmhlYWRlcj1sWzBdLmxlbmd0aDw9Nj9sWzBdLmxlbmd0aDo2O2Vsc2UgaWYoaS5wcmV2TGluZUhhc0NvbnRlbnQmJihsPXQubWF0Y2goRykpKWkuaGVhZGVyPSI9Ij09bFswXS5jaGFyQXQoMCk/MToyO2Vsc2UgaWYodC5lYXQoIj4iKSlmb3IoaS5pbmRlbnRhdGlvbisrLGkucXVvdGU9MSx0LmVhdFNwYWNlKCk7dC5lYXQoIj4iKTspdC5lYXRTcGFjZSgpLGkucXVvdGUrKztlbHNle2lmKCJbIj09PXQucGVlaygpKXJldHVybiByKHQsaSxoKTtpZih0Lm1hdGNoKEksITApKXJldHVybiBBO2lmKGkucHJldkxpbmVIYXNDb250ZW50JiYhb3x8IXQubWF0Y2goUCwhMCkmJiF0Lm1hdGNoKEYsITApKXtpZihlLmZlbmNlZENvZGVCbG9ja3MmJnQubWF0Y2goL15gYGAoW1x3KyNdKikvLCEwKSlyZXR1cm4gaS5sb2NhbE1vZGU9eChSZWdFeHAuJDEpLGkubG9jYWxNb2RlJiYoaS5sb2NhbFN0YXRlPWkubG9jYWxNb2RlLnN0YXJ0U3RhdGUoKSksbih0LGksYSksa31lbHNlIGkuaW5kZW50YXRpb24rPTQsaS5saXN0PSEwLGkubGlzdERlcHRoKyssZS50YXNrTGlzdHMmJnQubWF0Y2goQiwhMSkmJihpLnRhc2tMaXN0PSEwKX1yZXR1cm4gcih0LGksaS5pbmxpbmUpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj12LnRva2VuKHQsZS5odG1sU3RhdGUpO3JldHVybiBnJiYidGFnIj09PXImJiJvcGVuVGFnIiE9PWUuaHRtbFN0YXRlLnR5cGUmJiFlLmh0bWxTdGF0ZS5jb250ZXh0JiYoZS5mPWMsZS5ibG9jaz1vKSxlLm1kX2luc2lkZSYmLTEhPXQuY3VycmVudCgpLmluZGV4T2YoIj4iKSYmKGUuZj1jLGUuYmxvY2s9byxlLmh0bWxTdGF0ZS5jb250ZXh0PXZvaWQgMCkscn1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQuc29sKCkmJnQubWF0Y2goL15gYGAvLCEwKT8oZS5sb2NhbE1vZGU9ZS5sb2NhbFN0YXRlPW51bGwsZS5mPWMsZS5ibG9jaz1vLGspOmUubG9jYWxNb2RlP2UubG9jYWxNb2RlLnRva2VuKHQsZS5sb2NhbFN0YXRlKToodC5za2lwVG9FbmQoKSxrKX1mdW5jdGlvbiBzKHQpe3ZhciBlPVtdO2lmKHQudGFza09wZW4pcmV0dXJuIm1ldGEiO2lmKHQudGFza0Nsb3NlZClyZXR1cm4icHJvcGVydHkiO2lmKHQuc3Ryb25nJiZlLnB1c2goeiksdC5lbSYmZS5wdXNoKEUpLHQubGlua1RleHQmJmUucHVzaChPKSx0LmNvZGUmJmUucHVzaChrKSx0LmhlYWRlciYmKGUucHVzaChDKSxlLnB1c2goQyt0LmhlYWRlcikpLHQucXVvdGUmJmUucHVzaCh0LnF1b3RlJTI/dzpMKSx0Lmxpc3QhPT0hMSl7dmFyIHI9KHQubGlzdERlcHRoLTEpJTM7cj8xPT09cj9lLnB1c2goTSk6ZS5wdXNoKFQpOmUucHVzaChTKX1yZXR1cm4gdC50cmFpbGluZ1NwYWNlTmV3TGluZT9lLnB1c2goInRyYWlsaW5nLXNwYWNlLW5ldy1saW5lIik6dC50cmFpbGluZ1NwYWNlJiZlLnB1c2goInRyYWlsaW5nLXNwYWNlLSIrKHQudHJhaWxpbmdTcGFjZSUyPyJhIjoiYiIpKSxlLmxlbmd0aD9lLmpvaW4oIiAiKTpudWxsfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdC5tYXRjaChfLCEwKT9zKGUpOnZvaWQgMH1mdW5jdGlvbiBjKHQsaSl7dmFyIG89aS50ZXh0KHQsaSk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBvKXJldHVybiBvO2lmKGkubGlzdClyZXR1cm4gaS5saXN0PW51bGwscyhpKTtpZihpLnRhc2tMaXN0KXt2YXIgYT0ieCIhPT10Lm1hdGNoKEIsITApWzFdO3JldHVybiBhP2kudGFza09wZW49ITA6aS50YXNrQ2xvc2VkPSEwLGkudGFza0xpc3Q9ITEscyhpKX1pLnRhc2tPcGVuPSExLGkudGFza0Nsb3NlZD0hMTt2YXIgdT10LnNvbCgpLGM9dC5uZXh0KCk7aWYoIlxcIj09PWMpcmV0dXJuIHQubmV4dCgpLHMoaSk7aWYoaS5saW5rVGl0bGUpe2kubGlua1RpdGxlPSExO3ZhciBoPWM7IigiPT09YyYmKGg9IikiKSxoPShoKyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpO3ZhciBkPSJeXFxzKig/OlteIitoKyJcXFxcXSt8XFxcXFxcXFx8XFxcXC4pIitoO2lmKHQubWF0Y2gobmV3IFJlZ0V4cChkKSwhMCkpcmV0dXJuIFd9aWYoImAiPT09Yyl7dmFyIHA9cyhpKSxnPXQucG9zO3QuZWF0V2hpbGUoImAiKTt2YXIgdj0xK3QucG9zLWc7cmV0dXJuIGkuY29kZT92PT09Yj8oaS5jb2RlPSExLHApOnMoaSk6KGI9dixpLmNvZGU9ITAscyhpKSl9aWYoaS5jb2RlKXJldHVybiBzKGkpO2lmKCIhIj09PWMmJnQubWF0Y2goL1xbW15cXV0qXF0gPyg/OlwofFxbKS8sITEpKXJldHVybiB0Lm1hdGNoKC9cW1teXF1dKlxdLyksaS5pbmxpbmU9aS5mPWYsTjtpZigiWyI9PT1jJiZ0Lm1hdGNoKC8uKlxdKFwofCA/XFspLywhMSkpcmV0dXJuIGkubGlua1RleHQ9ITAscyhpKTtpZigiXSI9PT1jJiZpLmxpbmtUZXh0KXt2YXIgeT1zKGkpO3JldHVybiBpLmxpbmtUZXh0PSExLGkuaW5saW5lPWkuZj1mLHl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXihodHRwcz98ZnRwcz8pOlwvXC8oPzpbXlxcPl18XFwuKSs+LywhMSkpcmV0dXJuIHIodCxpLG0oSCwiPiIpKTtpZigiPCI9PT1jJiZ0Lm1hdGNoKC9eW14+IFxcXStAKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEQsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXlx3LywhMSkpe2lmKC0xIT10LnN0cmluZy5pbmRleE9mKCI+Iikpe3ZhciB4PXQuc3RyaW5nLnN1YnN0cmluZygxLHQuc3RyaW5nLmluZGV4T2YoIj4iKSk7L21hcmtkb3duXHMqPVxzKignfCIpezAsMX0xKCd8Iil7MCwxfS8udGVzdCh4KSYmKGkubWRfaW5zaWRlPSEwKX1yZXR1cm4gdC5iYWNrVXAoMSksbih0LGksbCl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXlwvXHcqPz4vKSlyZXR1cm4gaS5tZF9pbnNpZGU9ITEsInRhZyI7dmFyIEM9ITE7aWYoIWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYiXyI9PT1jJiYiXyIhPT10LnBlZWsoKSYmdC5tYXRjaCgvKFx3KS8sITEpKXt2YXIgaz10LnBvcy0yO2lmKGs+PTApe3ZhciB3PXQuc3RyaW5nLmNoYXJBdChrKTsiXyIhPT13JiZ3Lm1hdGNoKC8oXHcpLywhMSkmJihDPSEwKX19dmFyIHA9cyhpKTtpZigiKiI9PT1jfHwiXyI9PT1jJiYhQylpZih1JiYiICI9PT10LnBlZWsoKSk7ZWxzZXtpZihpLnN0cm9uZz09PWMmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz0hMSxwO2lmKCFpLnN0cm9uZyYmdC5lYXQoYykpcmV0dXJuIGkuc3Ryb25nPWMscyhpKTtpZihpLmVtPT09YylyZXR1cm4gaS5lbT0hMSxwO2lmKCFpLmVtKXJldHVybiBpLmVtPWMscyhpKX1lbHNlIGlmKCIgIj09PWMmJih0LmVhdCgiKiIpfHx0LmVhdCgiXyIpKSl7aWYoIiAiPT09dC5wZWVrKCkpcmV0dXJuIHMoaSk7dC5iYWNrVXAoMSl9cmV0dXJuIiAiPT09YyYmKHQubWF0Y2goLyArJC8sITEpP2kudHJhaWxpbmdTcGFjZSsrOmkudHJhaWxpbmdTcGFjZSYmKGkudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITApKSxzKGkpfWZ1bmN0aW9uIGYodCxlKXtpZih0LmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7dmFyIG49dC5uZXh0KCk7cmV0dXJuIigiPT09bnx8IlsiPT09bj9yKHQsZSxtKFcsIigiPT09bj8iKSI6Il0iKSk6ImVycm9yIn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQubWF0Y2goL15bXlxdXSpcXTovLCEwKT8oZS5mPWQsTyk6cih0LGUsYyl9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0LmVhdFNwYWNlKCk/bnVsbDoodC5tYXRjaCgvXlteXHNdKy8sITApLHZvaWQgMD09PXQucGVlaygpP2UubGlua1RpdGxlPSEwOnQubWF0Y2goL14oPzpccysoPzoiKD86W14iXFxdfFxcXFx8XFwuKSsifCcoPzpbXidcXF18XFxcXHxcXC4pKyd8XCgoPzpbXilcXF18XFxcXHxcXC4pK1wpKSk/LywhMCksZS5mPWUuaW5saW5lPWMsVyl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gVlt0XXx8KHQ9KHQrIiIpLnJlcGxhY2UoLyhbLj8qK14kW1xdXFwoKXt9fC1dKS9nLCJcXCQxIiksVlt0XT1uZXcgUmVnRXhwKCJeKD86W15cXFxcXXxcXFxcLikqPygiK3QrIikiKSksVlt0XX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gcj1yfHxjLGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4ubWF0Y2gocChlKSksaS5pbmxpbmU9aS5mPXIsdH19dmFyIGc9Q29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eSgieG1sIiksdj1Db2RlTWlycm9yLmdldE1vZGUodCxnP3tuYW1lOiJ4bWwiLGh0bWxNb2RlOiEwfToidGV4dC9wbGFpbiIpLHk9e2h0bWw6Imh0bWxtaXhlZCIsanM6ImphdmFzY3JpcHQiLGpzb246ImFwcGxpY2F0aW9uL2pzb24iLGM6InRleHQveC1jc3JjIiwiYysrIjoidGV4dC94LWMrK3NyYyIsamF2YToidGV4dC94LWphdmEiLGNzaGFycDoidGV4dC94LWNzaGFycCIsImMjIjoidGV4dC94LWNzaGFycCIsc2NhbGE6InRleHQveC1zY2FsYSJ9LHg9ZnVuY3Rpb24oKXt2YXIgZSxyLG49e30saT17fSxvPVtdO2Zvcih2YXIgbCBpbiBDb2RlTWlycm9yLm1vZGVzKUNvZGVNaXJyb3IubW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJm8ucHVzaChsKTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKW5bb1tlXV09b1tlXTt2YXIgYT1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5taW1lTW9kZXMpQ29kZU1pcnJvci5taW1lTW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJmEucHVzaCh7bWltZTpsLG1vZGU6Q29kZU1pcnJvci5taW1lTW9kZXNbbF19KTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXI9YVtlXS5taW1lLGlbcl09YVtlXS5taW1lO2Zvcih2YXIgcyBpbiB5KSh5W3NdaW4gbnx8eVtzXWluIGkpJiYobltzXT15W3NdKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV0/Q29kZU1pcnJvci5nZXRNb2RlKHQsbltlXSk6bnVsbH19KCk7dm9pZCAwPT09ZS51bmRlcnNjb3Jlc0JyZWFrV29yZHMmJihlLnVuZGVyc2NvcmVzQnJlYWtXb3Jkcz0hMCksdm9pZCAwPT09ZS5mZW5jZWRDb2RlQmxvY2tzJiYoZS5mZW5jZWRDb2RlQmxvY2tzPSExKSx2b2lkIDA9PT1lLnRhc2tMaXN0cyYmKGUudGFza0xpc3RzPSExKTt2YXIgYj0wLEM9ImhlYWRlciIsaz0iY29tbWVudCIsdz0iYXRvbSIsTD0ibnVtYmVyIixTPSJ2YXJpYWJsZS0yIixNPSJ2YXJpYWJsZS0zIixUPSJrZXl3b3JkIixBPSJociIsTj0idGFnIixIPSJsaW5rIixEPSJsaW5rIixPPSJsaW5rIixXPSJzdHJpbmciLEU9ImVtIix6PSJzdHJvbmciLEk9L14oWypcLT1fXSkoPzpccypcMSl7Mix9XHMqJC8sUD0vXlsqXC0rXVxzKy8sRj0vXlswLTldK1wuXHMrLyxCPS9eXFsoeHwgKVxdKD89XHMpLyxSPS9eIysvLEc9L14oPzpcPXsxLH18LXsxLH0pJC8sXz0vXlteIVxbXF0qX1xcPD5gICInKF0rLyxWPVtdO3JldHVybntzdGFydFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue2Y6byxwcmV2TGluZUhhc0NvbnRlbnQ6ITEsdGhpc0xpbmVIYXNDb250ZW50OiExLGJsb2NrOm8saHRtbFN0YXRlOkNvZGVNaXJyb3Iuc3RhcnRTdGF0ZSh2KSxpbmRlbnRhdGlvbjowLGlubGluZTpjLHRleHQ6dSxsaW5rVGV4dDohMSxsaW5rVGl0bGU6ITEsZW06ITEsc3Ryb25nOiExLGhlYWRlcjowLHRhc2tMaXN0OiExLGxpc3Q6ITEsbGlzdERlcHRoOjAscXVvdGU6MCx0cmFpbGluZ1NwYWNlOjAsdHJhaWxpbmdTcGFjZU5ld0xpbmU6ITF9fSxjb3B5U3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJue2Y6dC5mLHByZXZMaW5lSGFzQ29udGVudDp0LnByZXZMaW5lSGFzQ29udGVudCx0aGlzTGluZUhhc0NvbnRlbnQ6dC50aGlzTGluZUhhc0NvbnRlbnQsYmxvY2s6dC5ibG9jayxodG1sU3RhdGU6Q29kZU1pcnJvci5jb3B5U3RhdGUodix0Lmh0bWxTdGF0ZSksaW5kZW50YXRpb246dC5pbmRlbnRhdGlvbixsb2NhbE1vZGU6dC5sb2NhbE1vZGUsbG9jYWxTdGF0ZTp0LmxvY2FsTW9kZT9Db2RlTWlycm9yLmNvcHlTdGF0ZSh0LmxvY2FsTW9kZSx0LmxvY2FsU3RhdGUpOm51bGwsaW5saW5lOnQuaW5saW5lLHRleHQ6dC50ZXh0LGxpbmtUaXRsZTp0LmxpbmtUaXRsZSxlbTp0LmVtLHN0cm9uZzp0LnN0cm9uZyxoZWFkZXI6dC5oZWFkZXIsdGFza0xpc3Q6dC50YXNrTGlzdCxsaXN0OnQubGlzdCxsaXN0RGVwdGg6dC5saXN0RGVwdGgscXVvdGU6dC5xdW90ZSx0cmFpbGluZ1NwYWNlOnQudHJhaWxpbmdTcGFjZSx0cmFpbGluZ1NwYWNlTmV3TGluZTp0LnRyYWlsaW5nU3BhY2VOZXdMaW5lLG1kX2luc2lkZTp0Lm1kX2luc2lkZX19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYodC5zb2woKSl7aWYodC5tYXRjaCgvXlxzKiQvLCEwKSlyZXR1cm4gZS5wcmV2TGluZUhhc0NvbnRlbnQ9ITEsaShlKTtlLnByZXZMaW5lSGFzQ29udGVudD1lLnRoaXNMaW5lSGFzQ29udGVudCxlLnRoaXNMaW5lSGFzQ29udGVudD0hMCxlLmhlYWRlcj0wLGUudGFza0xpc3Q9ITEsZS5jb2RlPSExLGUudHJhaWxpbmdTcGFjZT0wLGUudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsZS5mPWUuYmxvY2s7dmFyIHI9dC5tYXRjaCgvXlxzKi8sITApWzBdLnJlcGxhY2UoL1x0L2csIiAgICAiKS5sZW5ndGgsbj00Kk1hdGguZmxvb3IoKHItZS5pbmRlbnRhdGlvbikvNCk7bj40JiYobj00KTt2YXIgbz1lLmluZGVudGF0aW9uK247aWYoZS5pbmRlbnRhdGlvbkRpZmY9by1lLmluZGVudGF0aW9uLGUuaW5kZW50YXRpb249byxyPjApcmV0dXJuIG51bGx9cmV0dXJuIGUuZih0LGUpfSxibGFua0xpbmU6aSxnZXRUeXBlOnN9fSwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbWFya2Rvd24iLCJtYXJrZG93biIpLENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiByKHIpe3JldHVybiBlLnRva2VuaXplPXIscih0LGUpfXZhciBpPXQubmV4dCgpO2lmKCI8Ij09aSl7aWYodC5lYXQoIiEiKSlyZXR1cm4gdC5lYXQoIlsiKT90Lm1hdGNoKCJDREFUQVsiKT9yKG8oImF0b20iLCJdXT4iKSk6bnVsbDp0Lm1hdGNoKCItLSIpP3IobygiY29tbWVudCIsIi0tPiIpKTp0Lm1hdGNoKCJET0NUWVBFIiwhMCwhMCk/KHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLHIobCgxKSkpOm51bGw7aWYodC5lYXQoIj8iKSlyZXR1cm4gdC5lYXRXaGlsZSgvW1x3XC5fXC1dLyksZS50b2tlbml6ZT1vKCJtZXRhIiwiPz4iKSwibWV0YSI7dmFyIGE9dC5lYXQoIi8iKTt4PSIiO2Zvcih2YXIgcztzPXQuZWF0KC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKTspeCs9cztyZXR1cm4geD8oYj1hPyJjbG9zZVRhZyI6Im9wZW5UYWciLGUudG9rZW5pemU9biwidGFnIik6InRhZyBlcnJvciJ9aWYoIiYiPT1pKXt2YXIgdTtyZXR1cm4gdT10LmVhdCgiIyIpP3QuZWF0KCJ4Iik/dC5lYXRXaGlsZSgvW2EtZkEtRlxkXS8pJiZ0LmVhdCgiOyIpOnQuZWF0V2hpbGUoL1tcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXHdcLlwtOl0vKSYmdC5lYXQoIjsiKSx1PyJhdG9tIjoiZXJyb3IifXJldHVybiB0LmVhdFdoaWxlKC9bXiY8XS8pLG51bGx9ZnVuY3Rpb24gbih0LGUpe3ZhciBuPXQubmV4dCgpO2lmKCI+Ij09bnx8Ii8iPT1uJiZ0LmVhdCgiPiIpKXJldHVybiBlLnRva2VuaXplPXIsYj0iPiI9PW4/ImVuZFRhZyI6InNlbGZjbG9zZVRhZyIsInRhZyI7aWYoIj0iPT1uKXJldHVybiBiPSJlcXVhbHMiLG51bGw7aWYoIjwiPT1uKXtlLnRva2VuaXplPXI7dmFyIG89ZS50b2tlbml6ZSh0LGUpO3JldHVybiBvP28rIiBlcnJvciI6ImVycm9yIn1yZXR1cm4vW1wnXCJdLy50ZXN0KG4pPyhlLnRva2VuaXplPWkobiksZS5zdHJpbmdTdGFydENvbD10LmNvbHVtbigpLGUudG9rZW5pemUodCxlKSk6KHQuZWF0V2hpbGUoL1teXHNcdTAwYTA9PD5cIlwnXS8pLCJ3b3JkIil9ZnVuY3Rpb24gaSh0KXt2YXIgZT1mdW5jdGlvbihlLHIpe2Zvcig7IWUuZW9sKCk7KWlmKGUubmV4dCgpPT10KXtyLnRva2VuaXplPW47YnJlYWt9cmV0dXJuInN0cmluZyJ9O3JldHVybiBlLmlzSW5BdHRyaWJ1dGU9ITAsZX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7Zm9yKDshbi5lb2woKTspe2lmKG4ubWF0Y2goZSkpe2kudG9rZW5pemU9cjticmVha31uLm5leHQoKX1yZXR1cm4gdH19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk7bnVsbCE9KGk9ZS5uZXh0KCkpOyl7aWYoIjwiPT1pKXJldHVybiBuLnRva2VuaXplPWwodCsxKSxuLnRva2VuaXplKGUsbik7aWYoIj4iPT1pKXtpZigxPT10KXtuLnRva2VuaXplPXI7YnJlYWt9cmV0dXJuIG4udG9rZW5pemU9bCh0LTEpLG4udG9rZW5pemUoZSxuKX19cmV0dXJuIm1ldGEifX1mdW5jdGlvbiBhKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMTt0Pj0wO3QtLSlDLmNjLnB1c2goYXJndW1lbnRzW3RdKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGEuYXBwbHkobnVsbCxhcmd1bWVudHMpLCEwfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1ULmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHQpfHxDLmNvbnRleHQmJkMuY29udGV4dC5ub0luZGVudDtDLmNvbnRleHQ9e3ByZXY6Qy5jb250ZXh0LHRhZ05hbWU6dCxpbmRlbnQ6Qy5pbmRlbnRlZCxzdGFydE9mTGluZTplLG5vSW5kZW50OnJ9fWZ1bmN0aW9uIGMoKXtDLmNvbnRleHQmJihDLmNvbnRleHQ9Qy5jb250ZXh0LnByZXYpfWZ1bmN0aW9uIGYodCl7aWYoIm9wZW5UYWciPT10KXJldHVybiBDLnRhZ05hbWU9eCxDLnRhZ1N0YXJ0PWsuY29sdW1uKCkscyhtLGgoQy5zdGFydE9mTGluZSkpO2lmKCJjbG9zZVRhZyI9PXQpe3ZhciBlPSExO3JldHVybiBDLmNvbnRleHQ/Qy5jb250ZXh0LnRhZ05hbWUhPXgmJihULmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoQy5jb250ZXh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkmJmMoKSxlPSFDLmNvbnRleHR8fEMuY29udGV4dC50YWdOYW1lIT14KTplPSEwLGUmJih3PSJlcnJvciIpLHMoZChlKSl9cmV0dXJuIHMoKX1mdW5jdGlvbiBoKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1DLnRhZ05hbWU7cmV0dXJuIEMudGFnTmFtZT1DLnRhZ1N0YXJ0PW51bGwsInNlbGZjbG9zZVRhZyI9PWV8fCJlbmRUYWciPT1lJiZULmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShyLnRvTG93ZXJDYXNlKCkpPyhwKHIudG9Mb3dlckNhc2UoKSkscygpKToiZW5kVGFnIj09ZT8ocChyLnRvTG93ZXJDYXNlKCkpLHUocix0KSxzKCkpOnMoKX19ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJih3PSJlcnJvciIpLCJlbmRUYWciPT1lPyhjKCkscygpKToodz0iZXJyb3IiLHMoYXJndW1lbnRzLmNhbGxlZSkpfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZTs7KXtpZighQy5jb250ZXh0KXJldHVybjtpZihlPUMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIVQuY29udGV4dEdyYWJiZXJzLmhhc093blByb3BlcnR5KGUpfHwhVC5jb250ZXh0R3JhYmJlcnNbZV0uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2MoKX19ZnVuY3Rpb24gbSh0KXtyZXR1cm4id29yZCI9PXQ/KHc9ImF0dHJpYnV0ZSIscyhnLG0pKToiZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOih3PSJlcnJvciIscyhtKSl9ZnVuY3Rpb24gZyh0KXtpZigiZXF1YWxzIj09dClyZXR1cm4gcyh2LG0pO2lmKFQuYWxsb3dNaXNzaW5nKXtpZigid29yZCI9PXQpcmV0dXJuIHc9ImF0dHJpYnV0ZSIscyhnLG0pfWVsc2Ugdz0iZXJyb3IiO3JldHVybiJlbmRUYWciPT10fHwic2VsZmNsb3NlVGFnIj09dD9hKCk6cygpfWZ1bmN0aW9uIHYodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KToid29yZCI9PXQmJlQuYWxsb3dVbnF1b3RlZD8odz0ic3RyaW5nIixzKCkpOih3PSJlcnJvciIsImVuZFRhZyI9PXR8fCJzZWxmQ2xvc2VUYWciPT10P2EoKTpzKCkpfWZ1bmN0aW9uIHkodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KTphKCl9dmFyIHgsYixDLGssdyxMPXQuaW5kZW50VW5pdCxTPWUubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yfHwxLE09ZS5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnfHwhMCxUPWUuaHRtbE1vZGU/e2F1dG9TZWxmQ2xvc2Vyczp7YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxjb21tYW5kOiEwLGVtYmVkOiEwLGZyYW1lOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LGltcGxpY2l0bHlDbG9zZWQ6e2RkOiEwLGxpOiEwLG9wdGdyb3VwOiEwLG9wdGlvbjohMCxwOiEwLHJwOiEwLHJ0OiEwLHRib2R5OiEwLHRkOiEwLHRmb290OiEwLHRoOiEwLHRyOiEwfSxjb250ZXh0R3JhYmJlcnM6e2RkOntkZDohMCxkdDohMH0sZHQ6e2RkOiEwLGR0OiEwfSxsaTp7bGk6ITB9LG9wdGlvbjp7b3B0aW9uOiEwLG9wdGdyb3VwOiEwfSxvcHRncm91cDp7b3B0Z3JvdXA6ITB9LHA6e2FkZHJlc3M6ITAsYXJ0aWNsZTohMCxhc2lkZTohMCxibG9ja3F1b3RlOiEwLGRpcjohMCxkaXY6ITAsZGw6ITAsZmllbGRzZXQ6ITAsZm9vdGVyOiEwLGZvcm06ITAsaDE6ITAsaDI6ITAsaDM6ITAsaDQ6ITAsaDU6ITAsaDY6ITAsaGVhZGVyOiEwLGhncm91cDohMCxocjohMCxtZW51OiEwLG5hdjohMCxvbDohMCxwOiEwLHByZTohMCxzZWN0aW9uOiEwLHRhYmxlOiEwLHVsOiEwfSxycDp7cnA6ITAscnQ6ITB9LHJ0OntycDohMCxydDohMH0sdGJvZHk6e3Rib2R5OiEwLHRmb290OiEwfSx0ZDp7dGQ6ITAsdGg6ITB9LHRmb290Ont0Ym9keTohMH0sdGg6e3RkOiEwLHRoOiEwfSx0aGVhZDp7dGJvZHk6ITAsdGZvb3Q6ITB9LHRyOnt0cjohMH19LGRvTm90SW5kZW50OntwcmU6ITB9LGFsbG93VW5xdW90ZWQ6ITAsYWxsb3dNaXNzaW5nOiEwfTp7YXV0b1NlbGZDbG9zZXJzOnt9LGltcGxpY2l0bHlDbG9zZWQ6e30sY29udGV4dEdyYWJiZXJzOnt9LGRvTm90SW5kZW50Ont9LGFsbG93VW5xdW90ZWQ6ITEsYWxsb3dNaXNzaW5nOiExfSxBPWUuYWxpZ25DREFUQTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybnt0b2tlbml6ZTpyLGNjOltdLGluZGVudGVkOjAsc3RhcnRPZkxpbmU6ITAsdGFnTmFtZTpudWxsLHRhZ1N0YXJ0Om51bGwsY29udGV4dDpudWxsfX0sdG9rZW46ZnVuY3Rpb24odCxlKXtpZighZS50YWdOYW1lJiZ0LnNvbCgpJiYoZS5zdGFydE9mTGluZT0hMCxlLmluZGVudGVkPXQuaW5kZW50YXRpb24oKSksdC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3c9Yj14PW51bGw7dmFyIHI9ZS50b2tlbml6ZSh0LGUpO2lmKGUudHlwZT1iLChyfHxiKSYmImNvbW1lbnQiIT1yKWZvcihDPWUsaz10Ozspe3ZhciBuPWUuY2MucG9wKCl8fGY7aWYobihifHxyKSlicmVha31yZXR1cm4gZS5zdGFydE9mTGluZT0hMSx3JiYocj0iZXJyb3IiPT13P3IrIiBlcnJvciI6dykscn0saW5kZW50OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10LmNvbnRleHQ7aWYodC50b2tlbml6ZS5pc0luQXR0cmlidXRlKXJldHVybiB0LnN0cmluZ1N0YXJ0Q29sKzE7aWYodC50b2tlbml6ZSE9biYmdC50b2tlbml6ZSE9cnx8byYmby5ub0luZGVudClyZXR1cm4gaT9pLm1hdGNoKC9eKFxzKikvKVswXS5sZW5ndGg6MDtpZih0LnRhZ05hbWUpcmV0dXJuIE0/dC50YWdTdGFydCt0LnRhZ05hbWUubGVuZ3RoKzI6dC50YWdTdGFydCtMKlM7aWYoQSYmLzwhXFtDREFUQVxbLy50ZXN0KGUpKXJldHVybiAwO2ZvcihvJiYvXjxcLy8udGVzdChlKSYmKG89by5wcmV2KTtvJiYhby5zdGFydE9mTGluZTspbz1vLnByZXY7cmV0dXJuIG8/by5pbmRlbnQrTDowfSxlbGVjdHJpY0NoYXJzOiIvIixibG9ja0NvbW1lbnRTdGFydDoiPCEtLSIsYmxvY2tDb21tZW50RW5kOiItLT4iLGNvbmZpZ3VyYXRpb246ZS5odG1sTW9kZT8iaHRtbCI6InhtbCIsaGVscGVyVHlwZTplLmh0bWxNb2RlPyJodG1sIjoieG1sIn19KSxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveG1sIiwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCJ4bWwiKSxDb2RlTWlycm9yLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIil8fENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIix7bmFtZToieG1sIixodG1sTW9kZTohMH0pO1BLBwiT1g9diDIAAIgyAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABwAAABzdGF0aWNcbGliXGNvZGVtaXJyb3IubWluLmpzd2luZG93LkNvZGVNaXJyb3I9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChyLG4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChyLG4pO3RoaXMub3B0aW9ucz1uPW58fHt9O2Zvcih2YXIgaSBpbiBhbykhbi5oYXNPd25Qcm9wZXJ0eShpKSYmYW8uaGFzT3duUHJvcGVydHkoaSkmJihuW2ldPWFvW2ldKTtoKG4pO3ZhciBvPSJzdHJpbmciPT10eXBlb2Ygbi52YWx1ZT8wOm4udmFsdWUuZmlyc3QsbD10aGlzLmRpc3BsYXk9ZShyLG8pO2wud3JhcHBlci5Db2RlTWlycm9yPXRoaXMsdSh0aGlzKSxuLmF1dG9mb2N1cyYmIVZpJiZwZSh0aGlzKSx0aGlzLnN0YXRlPXtrZXlNYXBzOltdLG92ZXJsYXlzOltdLG1vZGVHZW46MCxvdmVyd3JpdGU6ITEsZm9jdXNlZDohMSxzdXBwcmVzc0VkaXRzOiExLHBhc3RlSW5jb21pbmc6ITEsZHJhZ2dpbmdUZXh0OiExLGhpZ2hsaWdodDpuZXcgJG59LHModGhpcyksbi5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIik7dmFyIGE9bi52YWx1ZTsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyB3byhuLnZhbHVlLG4ubW9kZSkpLGxlKHRoaXMscG4pKHRoaXMsYSksQWkmJnNldFRpbWVvdXQoaWkoZGUsdGhpcywhMCksMjApLG1lKHRoaXMpO3ZhciBjO3RyeXtjPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXR9Y2F0Y2goZil7fWN8fG4uYXV0b2ZvY3VzJiYhVmk/c2V0VGltZW91dChpaShFZSx0aGlzKSwyMCk6emUodGhpcyksbGUodGhpcyxmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzbylzby5wcm9wZXJ0eUlzRW51bWVyYWJsZSh0KSYmc29bdF0odGhpcyxuW3RdLHVvKTtmb3IodmFyIGU9MDtlPHBvLmxlbmd0aDsrK2UpcG9bZV0odGhpcyl9KSgpfWZ1bmN0aW9uIGUodCxlKXt2YXIgcj17fSxuPXIuaW5wdXQ9c2koInRleHRhcmVhIixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmU7IGZvbnQtc2l6ZTogNHB4OyIpO3JldHVybiBXaT9uLnN0eWxlLndpZHRoPSIxMDAwcHgiOm4uc2V0QXR0cmlidXRlKCJ3cmFwIiwib2ZmIiksR2kmJihuLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkIGJsYWNrIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0Iiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCJmYWxzZSIpLHIuaW5wdXREaXY9c2koImRpdiIsW25dLG51bGwsIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iiksci5zY3JvbGxiYXJIPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsImhlaWdodDogMXB4IildLCJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKSxyLnNjcm9sbGJhclY9c2koImRpdiIsW3NpKCJkaXYiLG51bGwsbnVsbCwid2lkdGg6IDFweCIpXSwiQ29kZU1pcnJvci12c2Nyb2xsYmFyIiksci5zY3JvbGxiYXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIiksci5ndXR0ZXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIiksci5saW5lRGl2PXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY29kZSIpLHIuc2VsZWN0aW9uRGl2PXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxIiksci5jdXJzb3I9c2koImRpdiIsIsKgIiwiQ29kZU1pcnJvci1jdXJzb3IiKSxyLm90aGVyQ3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIiksci5tZWFzdXJlPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItbWVhc3VyZSIpLHIubGluZVNwYWNlPXNpKCJkaXYiLFtyLm1lYXN1cmUsci5zZWxlY3Rpb25EaXYsci5saW5lRGl2LHIuY3Vyc29yLHIub3RoZXJDdXJzb3JdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpLHIubW92ZXI9c2koImRpdiIsW3NpKCJkaXYiLFtyLmxpbmVTcGFjZV0sIkNvZGVNaXJyb3ItbGluZXMiKV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIiksci5zaXplcj1zaSgiZGl2Iixbci5tb3Zlcl0sIkNvZGVNaXJyb3Itc2l6ZXIiKSxyLmhlaWdodEZvcmNlcj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAiK1RvKyJweDsgd2lkdGg6IDFweDsiKSxyLmd1dHRlcnM9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXJzIiksci5saW5lR3V0dGVyPW51bGwsci5zY3JvbGxlcj1zaSgiZGl2Iixbci5zaXplcixyLmhlaWdodEZvcmNlcixyLmd1dHRlcnNdLCJDb2RlTWlycm9yLXNjcm9sbCIpLHIuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIi0xIiksci53cmFwcGVyPXNpKCJkaXYiLFtyLmlucHV0RGl2LHIuc2Nyb2xsYmFySCxyLnNjcm9sbGJhclYsci5zY3JvbGxiYXJGaWxsZXIsci5ndXR0ZXJGaWxsZXIsci5zY3JvbGxlcl0sIkNvZGVNaXJyb3IiKSxIaSYmKHIuZ3V0dGVycy5zdHlsZS56SW5kZXg9LTEsci5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQ9MCksdC5hcHBlbmRDaGlsZD90LmFwcGVuZENoaWxkKHIud3JhcHBlcik6dChyLndyYXBwZXIpLEdpJiYobi5zdHlsZS53aWR0aD0iMHB4IiksV2l8fChyLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCksRmk/KHIuaW5wdXREaXYuc3R5bGUuaGVpZ2h0PSIxcHgiLHIuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIik6SGkmJihyLnNjcm9sbGJhckguc3R5bGUubWluV2lkdGg9ci5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPSIxOHB4Iiksci52aWV3T2Zmc2V0PXIubGFzdFNpemVDPTAsci5zaG93aW5nRnJvbT1yLnNob3dpbmdUbz1lLHIubGluZU51bVdpZHRoPXIubGluZU51bUlubmVyV2lkdGg9ci5saW5lTnVtQ2hhcnM9bnVsbCxyLnByZXZJbnB1dD0iIixyLmFsaWduV2lkZ2V0cz0hMSxyLnBvbGxpbmdGYXN0PSExLHIucG9sbD1uZXcgJG4sci5jYWNoZWRDaGFyV2lkdGg9ci5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsci5tZWFzdXJlTGluZUNhY2hlPVtdLHIubWVhc3VyZUxpbmVDYWNoZVBvcz0wLHIuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxyLm1heExpbmU9bnVsbCxyLm1heExpbmVMZW5ndGg9MCxyLm1heExpbmVDaGFuZ2VkPSExLHIud2hlZWxEWD1yLndoZWVsRFk9ci53aGVlbFN0YXJ0WD1yLndoZWVsU3RhcnRZPW51bGwscn1mdW5jdGlvbiByKGUpe2UuZG9jLm1vZGU9dC5nZXRNb2RlKGUub3B0aW9ucyxlLmRvYy5tb2RlT3B0aW9uKSxlLmRvYy5pdGVyKGZ1bmN0aW9uKHQpe3Quc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpfSksZS5kb2MuZnJvbnRpZXI9ZS5kb2MuZmlyc3QsVyhlLDEwMCksZS5zdGF0ZS5tb2RlR2VuKyssZS5jdXJPcCYmdWUoZSl9ZnVuY3Rpb24gbih0KXt0Lm9wdGlvbnMubGluZVdyYXBwaW5nPyh0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIix0LmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGg9IiIpOih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCIiKSxmKHQpKSxvKHQpLHVlKHQpLF8odCksc2V0VGltZW91dChmdW5jdGlvbigpe2QodCl9LDEwMCl9ZnVuY3Rpb24gaSh0KXt2YXIgZT1yZSh0LmRpc3BsYXkpLHI9dC5vcHRpb25zLmxpbmVXcmFwcGluZyxuPXImJk1hdGgubWF4KDUsdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoL25lKHQuZGlzcGxheSktMyk7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBWcih0LmRvYyxpKT8wOnI/KE1hdGguY2VpbChpLnRleHQubGVuZ3RoL24pfHwxKSplOmV9fWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5kb2Mscj1pKHQpO2UuaXRlcihmdW5jdGlvbih0KXt2YXIgZT1yKHQpO2UhPXQuaGVpZ2h0JiZ5bih0LGUpfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT12b1t0Lm9wdGlvbnMua2V5TWFwXSxyPWUuc3R5bGU7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1rZXltYXAtXFMrL2csIiIpKyhyPyIgY20ta2V5bWFwLSIrcjoiIiksdC5zdGF0ZS5kaXNhYmxlSW5wdXQ9ZS5kaXNhYmxlSW5wdXR9ZnVuY3Rpb24gcyh0KXt0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLXMtXFMrL2csIiIpK3Qub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywiIGNtLXMtIiksXyh0KX1mdW5jdGlvbiBhKHQpe3UodCksdWUodCksc2V0VGltZW91dChmdW5jdGlvbigpe2codCl9LDIwKX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQuZGlzcGxheS5ndXR0ZXJzLHI9dC5vcHRpb25zLmd1dHRlcnM7YWkoZSk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl0sbz1lLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyICIraSkpOyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIj09aSYmKHQuZGlzcGxheS5saW5lR3V0dGVyPW8sby5zdHlsZS53aWR0aD0odC5kaXNwbGF5LmxpbmVOdW1XaWR0aHx8MSkrInB4Iil9ZS5zdHlsZS5kaXNwbGF5PW4/IiI6Im5vbmUifWZ1bmN0aW9uIGModCxlKXtpZigwPT1lLmhlaWdodClyZXR1cm4gMDtmb3IodmFyIHIsbj1lLnRleHQubGVuZ3RoLGk9ZTtyPVJyKGkpOyl7dmFyIG89ci5maW5kKCk7aT1nbih0LG8uZnJvbS5saW5lKSxuKz1vLmZyb20uY2gtby50by5jaH1mb3IoaT1lO3I9QnIoaSk7KXt2YXIgbz1yLmZpbmQoKTtuLT1pLnRleHQubGVuZ3RoLW8uZnJvbS5jaCxpPWduKHQsby50by5saW5lKSxuKz1pLnRleHQubGVuZ3RoLW8udG8uY2h9cmV0dXJuIG59ZnVuY3Rpb24gZih0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYztlLm1heExpbmU9Z24ocixyLmZpcnN0KSxlLm1heExpbmVMZW5ndGg9YyhyLGUubWF4TGluZSksZS5tYXhMaW5lQ2hhbmdlZD0hMCxyLml0ZXIoZnVuY3Rpb24odCl7dmFyIG49YyhyLHQpO24+ZS5tYXhMaW5lTGVuZ3RoJiYoZS5tYXhMaW5lTGVuZ3RoPW4sZS5tYXhMaW5lPXQpfSl9ZnVuY3Rpb24gaCh0KXt2YXIgZT10aSh0Lmd1dHRlcnMsIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiKTstMT09ZSYmdC5saW5lTnVtYmVycz90Lmd1dHRlcnM9dC5ndXR0ZXJzLmNvbmNhdChbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSk6ZT4tMSYmIXQubGluZU51bWJlcnMmJih0Lmd1dHRlcnM9dC5ndXR0ZXJzLnNsaWNlKDApLHQuZ3V0dGVycy5zcGxpY2UoZSwxKSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYy5oZWlnaHQsbj1yK0YoZSk7ZS5zaXplci5zdHlsZS5taW5IZWlnaHQ9ZS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wPW4rInB4IixlLmd1dHRlcnMuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KG4sZS5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8pKyJweCI7dmFyIGk9TWF0aC5tYXgobixlLnNjcm9sbGVyLnNjcm9sbEhlaWdodCksbz1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoPmUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrMSxsPWk+ZS5zY3JvbGxlci5jbGllbnRIZWlnaHQrMTtsPyhlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFyVi5zdHlsZS5ib3R0b209bz9kaShlLm1lYXN1cmUpKyJweCI6IjAiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1pLWUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0K2Uuc2Nyb2xsYmFyVi5jbGllbnRIZWlnaHQrInB4Iik6KGUuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5PSIiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD0iMCIpLG8/KGUuc2Nyb2xsYmFySC5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJILnN0eWxlLnJpZ2h0PWw/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoLWUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrZS5zY3JvbGxiYXJILmNsaWVudFdpZHRoKyJweCIpOihlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iMCIpLG8mJmw/KGUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQ9ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGg9ZGkoZS5tZWFzdXJlKSsicHgiKTplLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSIiLG8mJnQub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciYmdC5vcHRpb25zLmZpeGVkR3V0dGVyPyhlLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWRpKGUubWVhc3VyZSkrInB4IixlLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aD1lLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4Iik6ZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixQaSYmMD09PWRpKGUubWVhc3VyZSkmJihlLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGg9ZS5zY3JvbGxiYXJILnN0eWxlLm1pbkhlaWdodD1SaT8iMThweCI6IjEycHgiLGUuc2Nyb2xsYmFyVi5zdHlsZS5wb2ludGVyRXZlbnRzPWUuc2Nyb2xsYmFySC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIil9ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49dC5zY3JvbGxlci5zY3JvbGxUb3AsaT10LndyYXBwZXIuY2xpZW50SGVpZ2h0OyJudW1iZXIiPT10eXBlb2Ygcj9uPXI6ciYmKG49ci50b3AsaT1yLmJvdHRvbS1yLnRvcCksbj1NYXRoLmZsb29yKG4tSSh0KSk7dmFyIG89TWF0aC5jZWlsKG4raSk7cmV0dXJue2Zyb206eG4oZSxuKSx0bzp4bihlLG8pfX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuZGlzcGxheTtpZihlLmFsaWduV2lkZ2V0c3x8ZS5ndXR0ZXJzLmZpcnN0Q2hpbGQmJnQub3B0aW9ucy5maXhlZEd1dHRlcil7Zm9yKHZhciByPXkoZSktZS5zY3JvbGxlci5zY3JvbGxMZWZ0K3QuZG9jLnNjcm9sbExlZnQsbj1lLmd1dHRlcnMub2Zmc2V0V2lkdGgsaT1yKyJweCIsbz1lLmxpbmVEaXYuZmlyc3RDaGlsZDtvO289by5uZXh0U2libGluZylpZihvLmFsaWduYWJsZSlmb3IodmFyIGw9MCxzPW8uYWxpZ25hYmxlO2w8cy5sZW5ndGg7KytsKXNbbF0uc3R5bGUubGVmdD1pO3Qub3B0aW9ucy5maXhlZEd1dHRlciYmKGUuZ3V0dGVycy5zdHlsZS5sZWZ0PXIrbisicHgiKX19ZnVuY3Rpb24gbSh0KXtpZighdC5vcHRpb25zLmxpbmVOdW1iZXJzKXJldHVybiExO3ZhciBlPXQuZG9jLHI9dih0Lm9wdGlvbnMsZS5maXJzdCtlLnNpemUtMSksbj10LmRpc3BsYXk7aWYoci5sZW5ndGghPW4ubGluZU51bUNoYXJzKXt2YXIgaT1uLm1lYXN1cmUuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3NpKCJkaXYiLHIpXSwiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIpKSxvPWkuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCxsPWkub2Zmc2V0V2lkdGgtbztyZXR1cm4gbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPSIiLG4ubGluZU51bUlubmVyV2lkdGg9TWF0aC5tYXgobyxuLmxpbmVHdXR0ZXIub2Zmc2V0V2lkdGgtbCksbi5saW5lTnVtV2lkdGg9bi5saW5lTnVtSW5uZXJXaWR0aCtsLG4ubGluZU51bUNoYXJzPW4ubGluZU51bUlubmVyV2lkdGg/ci5sZW5ndGg6LTEsbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPW4ubGluZU51bVdpZHRoKyJweCIsITB9cmV0dXJuITF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiBTdHJpbmcodC5saW5lTnVtYmVyRm9ybWF0dGVyKGUrdC5maXJzdExpbmVOdW1iZXIpKX1mdW5jdGlvbiB5KHQpe3JldHVybiBmaSh0LnNjcm9sbGVyKS5sZWZ0LWZpKHQuc2l6ZXIpLmxlZnR9ZnVuY3Rpb24gYih0LGUscixuKXtmb3IodmFyIGksbz10LmRpc3BsYXkuc2hvd2luZ0Zyb20sbD10LmRpc3BsYXkuc2hvd2luZ1RvLHM9cCh0LmRpc3BsYXksdC5kb2MsciksYT0hMDs7YT0hMSl7dmFyIHU9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoO2lmKCF4KHQsZSxzLG4pKWJyZWFrO2lmKGk9ITAsZT1bXSxBKHQpLGQodCksYSYmdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmdSE9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKW49ITA7ZWxzZSBpZihuPSExLHImJihyPU1hdGgubWluKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwibnVtYmVyIj09dHlwZW9mIHI/cjpyLnRvcCkpLHM9cCh0LmRpc3BsYXksdC5kb2Mscikscy5mcm9tPj10LmRpc3BsYXkuc2hvd2luZ0Zyb20mJnMudG88PXQuZGlzcGxheS5zaG93aW5nVG8pYnJlYWt9cmV0dXJuIGkmJihVbih0LCJ1cGRhdGUiLHQpLCh0LmRpc3BsYXkuc2hvd2luZ0Zyb20hPW98fHQuZGlzcGxheS5zaG93aW5nVG8hPWwpJiZVbih0LCJ2aWV3cG9ydENoYW5nZSIsdCx0LmRpc3BsYXkuc2hvd2luZ0Zyb20sdC5kaXNwbGF5LnNob3dpbmdUbykpLGl9ZnVuY3Rpb24geCh0LGUscixuKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYztpZighaS53cmFwcGVyLmNsaWVudFdpZHRoKXJldHVybiBpLnNob3dpbmdGcm9tPWkuc2hvd2luZ1RvPW8uZmlyc3QsaS52aWV3T2Zmc2V0PTAsdm9pZCAwO2lmKCEoIW4mJjA9PWUubGVuZ3RoJiZyLmZyb20+aS5zaG93aW5nRnJvbSYmci50bzxpLnNob3dpbmdUbykpe20odCkmJihlPVt7ZnJvbTpvLmZpcnN0LHRvOm8uZmlyc3Qrby5zaXplfV0pO3ZhciBsPWkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdD1pLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4IjtpLnNjcm9sbGJhckguc3R5bGUubGVmdD10Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bDoiMCI7dmFyIHM9MS8wO2lmKHQub3B0aW9ucy5saW5lTnVtYmVycylmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSllW2FdLmRpZmYmJmVbYV0uZnJvbTxzJiYocz1lW2FdLmZyb20pO3ZhciB1PW8uZmlyc3Qrby5zaXplLGM9TWF0aC5tYXgoci5mcm9tLXQub3B0aW9ucy52aWV3cG9ydE1hcmdpbixvLmZpcnN0KSxmPU1hdGgubWluKHUsci50byt0Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4pO2lmKGkuc2hvd2luZ0Zyb208YyYmYy1pLnNob3dpbmdGcm9tPDIwJiYoYz1NYXRoLm1heChvLmZpcnN0LGkuc2hvd2luZ0Zyb20pKSxpLnNob3dpbmdUbz5mJiZpLnNob3dpbmdUby1mPDIwJiYoZj1NYXRoLm1pbih1LGkuc2hvd2luZ1RvKSksUWkpZm9yKGM9Ym4oR3IobyxnbihvLGMpKSk7dT5mJiZWcihvLGduKG8sZikpOykrK2Y7dmFyIGg9W3tmcm9tOk1hdGgubWF4KGkuc2hvd2luZ0Zyb20sby5maXJzdCksdG86TWF0aC5taW4oaS5zaG93aW5nVG8sdSl9XTtpZihoPWhbMF0uZnJvbT49aFswXS50bz9bXTpMKGgsZSksUWkpZm9yKHZhciBhPTA7YTxoLmxlbmd0aDsrK2EpZm9yKHZhciBkLHA9aFthXTtkPUJyKGduKG8scC50by0xKSk7KXt2YXIgZz1kLmZpbmQoKS5mcm9tLmxpbmU7aWYoIShnPnAuZnJvbSkpe2guc3BsaWNlKGEtLSwxKTticmVha31wLnRvPWd9Zm9yKHZhciB2PTAsYT0wO2E8aC5sZW5ndGg7KythKXt2YXIgcD1oW2FdO3AuZnJvbTxjJiYocC5mcm9tPWMpLHAudG8+ZiYmKHAudG89ZikscC5mcm9tPj1wLnRvP2guc3BsaWNlKGEtLSwxKTp2Kz1wLnRvLXAuZnJvbX1pZighbiYmdj09Zi1jJiZjPT1pLnNob3dpbmdGcm9tJiZmPT1pLnNob3dpbmdUbylyZXR1cm4gdyh0KSx2b2lkIDA7aC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZnJvbS1lLmZyb219KTt0cnl7dmFyIHk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudH1jYXRjaChiKXt9LjcqKGYtYyk+diYmKGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSJub25lIiksUyh0LGMsZixoLHMpLGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSIiLHkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPXkmJnkub2Zmc2V0SGVpZ2h0JiZ5LmZvY3VzKCk7dmFyIHg9YyE9aS5zaG93aW5nRnJvbXx8ZiE9aS5zaG93aW5nVG98fGkubGFzdFNpemVDIT1pLndyYXBwZXIuY2xpZW50SGVpZ2h0O3JldHVybiB4JiYoaS5sYXN0U2l6ZUM9aS53cmFwcGVyLmNsaWVudEhlaWdodCxXKHQsNDAwKSksaS5zaG93aW5nRnJvbT1jLGkuc2hvd2luZ1RvPWYsQyh0KSx3KHQpLCEwfX1mdW5jdGlvbiBDKHQpe2Zvcih2YXIgZSxyPXQuZGlzcGxheSxuPXIubGluZURpdi5vZmZzZXRUb3AsaT1yLmxpbmVEaXYuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylpZihpLmxpbmVPYmope2lmKEhpKXt2YXIgbz1pLm9mZnNldFRvcCtpLm9mZnNldEhlaWdodDtlPW8tbixuPW99ZWxzZXt2YXIgbD1maShpKTtlPWwuYm90dG9tLWwudG9wfXZhciBzPWkubGluZU9iai5oZWlnaHQtZTtpZigyPmUmJihlPXJlKHIpKSxzPi4wMDF8fC0uMDAxPnMpe3luKGkubGluZU9iaixlKTt2YXIgYT1pLmxpbmVPYmoud2lkZ2V0cztpZihhKWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7Kyt1KWFbdV0uaGVpZ2h0PWFbdV0ubm9kZS5vZmZzZXRIZWlnaHR9fX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQuZGlzcGxheS52aWV3T2Zmc2V0PUNuKHQsZ24odC5kb2MsdC5kaXNwbGF5LnNob3dpbmdGcm9tKSk7dC5kaXNwbGF5Lm1vdmVyLnN0eWxlLnRvcD1lKyJweCJ9ZnVuY3Rpb24gTCh0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGh8fDA7bj5yOysrcil7Zm9yKHZhciBpPWVbcl0sbz1bXSxsPWkuZGlmZnx8MCxzPTAsYT10Lmxlbmd0aDthPnM7KytzKXt2YXIgdT10W3NdO2kudG88PXUuZnJvbSYmaS5kaWZmP28ucHVzaCh7ZnJvbTp1LmZyb20rbCx0bzp1LnRvK2x9KTppLnRvPD11LmZyb218fGkuZnJvbT49dS50bz9vLnB1c2godSk6KGkuZnJvbT51LmZyb20mJm8ucHVzaCh7ZnJvbTp1LmZyb20sdG86aS5mcm9tfSksaS50bzx1LnRvJiZvLnB1c2goe2Zyb206aS50bytsLHRvOnUudG8rbH0pKX10PW99cmV0dXJuIHR9ZnVuY3Rpb24gayh0KXtmb3IodmFyIGU9dC5kaXNwbGF5LHI9e30sbj17fSxpPWUuZ3V0dGVycy5maXJzdENoaWxkLG89MDtpO2k9aS5uZXh0U2libGluZywrK28pclt0Lm9wdGlvbnMuZ3V0dGVyc1tvXV09aS5vZmZzZXRMZWZ0LG5bdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0V2lkdGg7cmV0dXJue2ZpeGVkUG9zOnkoZSksZ3V0dGVyVG90YWxXaWR0aDplLmd1dHRlcnMub2Zmc2V0V2lkdGgsZ3V0dGVyTGVmdDpyLGd1dHRlcldpZHRoOm4sd3JhcHBlcldpZHRoOmUud3JhcHBlci5jbGllbnRXaWR0aH19ZnVuY3Rpb24gUyh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSl7dmFyIHI9ZS5uZXh0U2libGluZztyZXR1cm4gV2kmJktpJiZ0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PT1lPyhlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGUubGluZU9iaj1udWxsKTplLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSkscn12YXIgbD1rKHQpLHM9dC5kaXNwbGF5LGE9dC5vcHRpb25zLmxpbmVOdW1iZXJzO24ubGVuZ3RofHxXaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldHx8YWkocy5saW5lRGl2KTt2YXIgdT1zLmxpbmVEaXYsYz11LmZpcnN0Q2hpbGQsZj1uLnNoaWZ0KCksaD1lO2Zvcih0LmRvYy5pdGVyKGUscixmdW5jdGlvbihlKXtpZihmJiZmLnRvPT1oJiYoZj1uLnNoaWZ0KCkpLFZyKHQuZG9jLGUpKXtpZigwIT1lLmhlaWdodCYmeW4oZSwwKSxlLndpZGdldHMmJmMmJmMucHJldmlvdXNTaWJsaW5nKWZvcih2YXIgcj0wO3I8ZS53aWRnZXRzLmxlbmd0aDsrK3Ipe3ZhciBzPWUud2lkZ2V0c1tyXTtpZihzLnNob3dJZkhpZGRlbil7dmFyIGQ9Yy5wcmV2aW91c1NpYmxpbmc7aWYoL3ByZS9pLnRlc3QoZC5ub2RlTmFtZSkpe3ZhciBwPXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIik7ZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwLGQpLHAuYXBwZW5kQ2hpbGQoZCksZD1wfXZhciBnPWQuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3Mubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTtzLmhhbmRsZU1vdXNlRXZlbnRzfHwoZy5pZ25vcmVFdmVudHM9ITApLFQocyxnLGQsbCl9fX1lbHNlIGlmKGYmJmYuZnJvbTw9aCYmZi50bz5oKXtmb3IoO2MubGluZU9iaiE9ZTspYz1vKGMpO2EmJmg+PWkmJmMubGluZU51bWJlciYmY2koYy5saW5lTnVtYmVyLHYodC5vcHRpb25zLGgpKSxjPWMubmV4dFNpYmxpbmd9ZWxzZXtpZihlLndpZGdldHMpZm9yKHZhciBtLHk9MCxiPWM7YiYmMjA+eTsrK3ksYj1iLm5leHRTaWJsaW5nKWlmKGIubGluZU9iaj09ZSYmL2Rpdi9pLnRlc3QoYi5ub2RlTmFtZSkpe209YjticmVha312YXIgeD1NKHQsZSxoLGwsbSk7aWYoeCE9bSl1Lmluc2VydEJlZm9yZSh4LGMpO2Vsc2V7Zm9yKDtjIT1tOyljPW8oYyk7Yz1jLm5leHRTaWJsaW5nfXgubGluZU9iaj1lfSsraH0pO2M7KWM9byhjKX1mdW5jdGlvbiBNKHQsZSxyLG4saSl7dmFyIG8sbD1ybih0LGUpLHM9bC5wcmUsYT1lLmd1dHRlck1hcmtlcnMsdT10LmRpc3BsYXksYz1sLmJnQ2xhc3M/bC5iZ0NsYXNzKyIgIisoZS5iZ0NsYXNzfHwiIik6ZS5iZ0NsYXNzO2lmKCEodC5vcHRpb25zLmxpbmVOdW1iZXJzfHxhfHxjfHxlLndyYXBDbGFzc3x8ZS53aWRnZXRzKSlyZXR1cm4gcztpZihpKXtpLmFsaWduYWJsZT1udWxsO2Zvcih2YXIgZixoPSEwLGQ9MCxwPW51bGwsZz1pLmZpcnN0Q2hpbGQ7ZztnPWYpaWYoZj1nLm5leHRTaWJsaW5nLC9cYkNvZGVNaXJyb3ItbGluZXdpZGdldFxiLy50ZXN0KGcuY2xhc3NOYW1lKSl7Zm9yKHZhciBtPTA7bTxlLndpZGdldHMubGVuZ3RoOysrbSl7dmFyIHk9ZS53aWRnZXRzW21dO2lmKHkubm9kZT09Zy5maXJzdENoaWxkKXt5LmFib3ZlfHxwfHwocD1nKSxUKHksZyxpLG4pLCsrZDticmVha319aWYobT09ZS53aWRnZXRzLmxlbmd0aCl7aD0hMTticmVha319ZWxzZSBpLnJlbW92ZUNoaWxkKGcpO2kuaW5zZXJ0QmVmb3JlKHMscCksaCYmZD09ZS53aWRnZXRzLmxlbmd0aCYmKG89aSxpLmNsYXNzTmFtZT1lLndyYXBDbGFzc3x8IiIpfWlmKG98fChvPXNpKCJkaXYiLG51bGwsZS53cmFwQ2xhc3MsInBvc2l0aW9uOiByZWxhdGl2ZSIpLG8uYXBwZW5kQ2hpbGQocykpLGMmJm8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsYysiIENvZGVNaXJyb3ItbGluZWJhY2tncm91bmQiKSxvLmZpcnN0Q2hpbGQpLHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSl7dmFyIGI9by5pbnNlcnRCZWZvcmUoc2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrKHQub3B0aW9ucy5maXhlZEd1dHRlcj9uLmZpeGVkUG9zOi1uLmd1dHRlclRvdGFsV2lkdGgpKyJweCIpLG8uZmlyc3RDaGlsZCk7aWYodC5vcHRpb25zLmZpeGVkR3V0dGVyJiYoby5hbGlnbmFibGV8fChvLmFsaWduYWJsZT1bXSkpLnB1c2goYiksIXQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSYmYVsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdfHwoby5saW5lTnVtYmVyPWIuYXBwZW5kQ2hpbGQoc2koImRpdiIsdih0Lm9wdGlvbnMsciksIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKyJweDsgd2lkdGg6ICIrdS5saW5lTnVtSW5uZXJXaWR0aCsicHgiKSkpLGEpZm9yKHZhciB4PTA7eDx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt4KXt2YXIgQz10Lm9wdGlvbnMuZ3V0dGVyc1t4XSx3PWEuaGFzT3duUHJvcGVydHkoQykmJmFbQ107dyYmYi5hcHBlbmRDaGlsZChzaSgiZGl2Iixbd10sIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsImxlZnQ6ICIrbi5ndXR0ZXJMZWZ0W0NdKyJweDsgd2lkdGg6ICIrbi5ndXR0ZXJXaWR0aFtDXSsicHgiKSl9fWlmKEhpJiYoby5zdHlsZS56SW5kZXg9MiksZS53aWRnZXRzJiZvIT1pKWZvcih2YXIgbT0wLEw9ZS53aWRnZXRzO208TC5sZW5ndGg7KyttKXt2YXIgeT1MW21dLGs9c2koImRpdiIsW3kubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpO3kuaGFuZGxlTW91c2VFdmVudHN8fChrLmlnbm9yZUV2ZW50cz0hMCksVCh5LGssbyxuKSx5LmFib3ZlP28uaW5zZXJ0QmVmb3JlKGssdC5vcHRpb25zLmxpbmVOdW1iZXJzJiYwIT1lLmhlaWdodD9iOnMpOm8uYXBwZW5kQ2hpbGQoayksVW4oeSwicmVkcmF3Iil9cmV0dXJuIG99ZnVuY3Rpb24gVCh0LGUscixuKXtpZih0Lm5vSFNjcm9sbCl7KHIuYWxpZ25hYmxlfHwoci5hbGlnbmFibGU9W10pKS5wdXNoKGUpO3ZhciBpPW4ud3JhcHBlcldpZHRoO2Uuc3R5bGUubGVmdD1uLmZpeGVkUG9zKyJweCIsdC5jb3Zlckd1dHRlcnx8KGktPW4uZ3V0dGVyVG90YWxXaWR0aCxlLnN0eWxlLnBhZGRpbmdMZWZ0PW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSxlLnN0eWxlLndpZHRoPWkrInB4In10LmNvdmVyR3V0dGVyJiYoZS5zdHlsZS56SW5kZXg9NSxlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdC5ub0hTY3JvbGx8fChlLnN0eWxlLm1hcmdpbkxlZnQ9LW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LmRpc3BsYXkscj1qZSh0LmRvYy5zZWwuZnJvbSx0LmRvYy5zZWwudG8pO2lmKHJ8fHQub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZz9IKHQpOmUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIixyP2Uuc2VsZWN0aW9uRGl2LnN0eWxlLmRpc3BsYXk9Im5vbmUiOk4odCksdC5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3Ipe3ZhciBuPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2IiksaT1maShlLndyYXBwZXIpLG89ZmkoZS5saW5lRGl2KTtlLmlucHV0RGl2LnN0eWxlLnRvcD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRIZWlnaHQtMTAsbi50b3Arby50b3AtaS50b3ApKSsicHgiLGUuaW5wdXREaXYuc3R5bGUubGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRXaWR0aC0xMCxuLmxlZnQrby5sZWZ0LWkubGVmdCkpKyJweCJ9fWZ1bmN0aW9uIEgodCl7dmFyIGU9dC5kaXNwbGF5LHI9USh0LHQuZG9jLnNlbC5oZWFkLCJkaXYiKTtlLmN1cnNvci5zdHlsZS5sZWZ0PXIubGVmdCsicHgiLGUuY3Vyc29yLnN0eWxlLnRvcD1yLnRvcCsicHgiLGUuY3Vyc29yLnN0eWxlLmhlaWdodD1NYXRoLm1heCgwLHIuYm90dG9tLXIudG9wKSp0Lm9wdGlvbnMuY3Vyc29ySGVpZ2h0KyJweCIsZS5jdXJzb3Iuc3R5bGUuZGlzcGxheT0iIixyLm90aGVyPyhlLm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsZS5vdGhlckN1cnNvci5zdHlsZS5sZWZ0PXIub3RoZXIubGVmdCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUudG9wPXIub3RoZXIudG9wKyJweCIsZS5vdGhlckN1cnNvci5zdHlsZS5oZWlnaHQ9Ljg1KihyLm90aGVyLmJvdHRvbS1yLm90aGVyLnRvcCkrInB4Iik6ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIn1mdW5jdGlvbiBOKHQpe2Z1bmN0aW9uIGUodCxlLHIsbil7MD5lJiYoZT0wKSxsLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrdCsicHg7IHRvcDogIitlKyJweDsgd2lkdGg6ICIrKG51bGw9PXI/cy10OnIpKyJweDsgaGVpZ2h0OiAiKyhuLWUpKyJweCIpKX1mdW5jdGlvbiByKHIsbixvKXtmdW5jdGlvbiBsKGUsbil7cmV0dXJuIHEodCxZZShyLGUpLCJkaXYiLGYsbil9dmFyIHUsYyxmPWduKGksciksaD1mLnRleHQubGVuZ3RoO3JldHVybiBnaSh3bihmKSxufHwwLG51bGw9PW8/aDpvLGZ1bmN0aW9uKHQscixpKXt2YXIgZixkLHAsZz1sKHQsImxlZnQiKTtpZih0PT1yKWY9ZyxkPXA9Zy5sZWZ0O2Vsc2V7aWYoZj1sKHItMSwicmlnaHQiKSwicnRsIj09aSl7dmFyIG09ZztnPWYsZj1tfWQ9Zy5sZWZ0LHA9Zi5yaWdodH1udWxsPT1uJiYwPT10JiYoZD1hKSxmLnRvcC1nLnRvcD4zJiYoZShkLGcudG9wLG51bGwsZy5ib3R0b20pLGQ9YSxnLmJvdHRvbTxmLnRvcCYmZShkLGcuYm90dG9tLG51bGwsZi50b3ApKSxudWxsPT1vJiZyPT1oJiYocD1zKSwoIXV8fGcudG9wPHUudG9wfHxnLnRvcD09dS50b3AmJmcubGVmdDx1LmxlZnQpJiYodT1nKSwoIWN8fGYuYm90dG9tPmMuYm90dG9tfHxmLmJvdHRvbT09Yy5ib3R0b20mJmYucmlnaHQ+Yy5yaWdodCkmJihjPWYpLGErMT5kJiYoZD1hKSxlKGQsZi50b3AscC1kLGYuYm90dG9tKX0pLHtzdGFydDp1LGVuZDpjfX12YXIgbj10LmRpc3BsYXksaT10LmRvYyxvPXQuZG9jLnNlbCxsPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxzPW4ubGluZVNwYWNlLm9mZnNldFdpZHRoLGE9UCh0LmRpc3BsYXkpO2lmKG8uZnJvbS5saW5lPT1vLnRvLmxpbmUpcihvLmZyb20ubGluZSxvLmZyb20uY2gsby50by5jaCk7ZWxzZXt2YXIgdT1nbihpLG8uZnJvbS5saW5lKSxjPWduKGksby50by5saW5lKSxmPUdyKGksdSk9PUdyKGksYyksaD1yKG8uZnJvbS5saW5lLG8uZnJvbS5jaCxmP3UudGV4dC5sZW5ndGg6bnVsbCkuZW5kLGQ9cihvLnRvLmxpbmUsZj8wOm51bGwsby50by5jaCkuc3RhcnQ7ZiYmKGgudG9wPGQudG9wLTI/KGUoaC5yaWdodCxoLnRvcCxudWxsLGguYm90dG9tKSxlKGEsZC50b3AsZC5sZWZ0LGQuYm90dG9tKSk6ZShoLnJpZ2h0LGgudG9wLGQubGVmdC1oLnJpZ2h0LGguYm90dG9tKSksaC5ib3R0b208ZC50b3AmJmUoYSxoLmJvdHRvbSxudWxsLGQudG9wKX11aShuLnNlbGVjdGlvbkRpdixsKSxuLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSIifWZ1bmN0aW9uIEQodCl7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgZT10LmRpc3BsYXk7Y2xlYXJJbnRlcnZhbChlLmJsaW5rZXIpO3ZhciByPSEwO2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PSIiLHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU+MCYmKGUuYmxpbmtlcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PShyPSFyKT8iIjoiaGlkZGVuIn0sdC5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSkpfX1mdW5jdGlvbiBXKHQsZSl7dC5kb2MubW9kZS5zdGFydFN0YXRlJiZ0LmRvYy5mcm9udGllcjx0LmRpc3BsYXkuc2hvd2luZ1RvJiZ0LnN0YXRlLmhpZ2hsaWdodC5zZXQoZSxpaShPLHQpKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuZG9jO2lmKGUuZnJvbnRpZXI8ZS5maXJzdCYmKGUuZnJvbnRpZXI9ZS5maXJzdCksIShlLmZyb250aWVyPj10LmRpc3BsYXkuc2hvd2luZ1RvKSl7dmFyIHIsbj0rbmV3IERhdGUrdC5vcHRpb25zLndvcmtUaW1lLGk9YnIoZS5tb2RlLHoodCxlLmZyb250aWVyKSksbz1bXTtlLml0ZXIoZS5mcm9udGllcixNYXRoLm1pbihlLmZpcnN0K2Uuc2l6ZSx0LmRpc3BsYXkuc2hvd2luZ1RvKzUwMCksZnVuY3Rpb24obCl7aWYoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdGcm9tKXt2YXIgcz1sLnN0eWxlcztsLnN0eWxlcz1Rcih0LGwsaSwhMCk7Zm9yKHZhciBhPSFzfHxzLmxlbmd0aCE9bC5zdHlsZXMubGVuZ3RoLHU9MDshYSYmdTxzLmxlbmd0aDsrK3UpYT1zW3VdIT1sLnN0eWxlc1t1XTthJiYociYmci5lbmQ9PWUuZnJvbnRpZXI/ci5lbmQrKzpvLnB1c2gocj17c3RhcnQ6ZS5mcm9udGllcixlbmQ6ZS5mcm9udGllcisxfSkpLGwuc3RhdGVBZnRlcj1icihlLm1vZGUsaSl9ZWxzZSB0bih0LGwudGV4dCxpKSxsLnN0YXRlQWZ0ZXI9MD09ZS5mcm9udGllciU1P2JyKGUubW9kZSxpKTpudWxsO3JldHVybisrZS5mcm9udGllciwrbmV3IERhdGU+bj8oVyh0LHQub3B0aW9ucy53b3JrRGVsYXkpLCEwKTp2b2lkIDB9KSxvLmxlbmd0aCYmbGUodCxmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8by5sZW5ndGg7Kyt0KXVlKHRoaXMsb1t0XS5zdGFydCxvW3RdLmVuZCl9KSgpfX1mdW5jdGlvbiBFKHQsZSxyKXtmb3IodmFyIG4saSxvPXQuZG9jLGw9cj8tMTplLSh0LmRvYy5tb2RlLmlubmVyTW9kZT8xZTM6MTAwKSxzPWU7cz5sOy0tcyl7aWYoczw9by5maXJzdClyZXR1cm4gby5maXJzdDt2YXIgYT1nbihvLHMtMSk7aWYoYS5zdGF0ZUFmdGVyJiYoIXJ8fHM8PW8uZnJvbnRpZXIpKXJldHVybiBzO3ZhciB1PVpuKGEudGV4dCxudWxsLHQub3B0aW9ucy50YWJTaXplKTsobnVsbD09aXx8bj51KSYmKGk9cy0xLG49dSl9cmV0dXJuIGl9ZnVuY3Rpb24geih0LGUscil7dmFyIG49dC5kb2MsaT10LmRpc3BsYXk7aWYoIW4ubW9kZS5zdGFydFN0YXRlKXJldHVybiEwO3ZhciBvPUUodCxlLHIpLGw9bz5uLmZpcnN0JiZnbihuLG8tMSkuc3RhdGVBZnRlcjtyZXR1cm4gbD1sP2JyKG4ubW9kZSxsKTp4cihuLm1vZGUpLG4uaXRlcihvLGUsZnVuY3Rpb24ocil7dG4odCxyLnRleHQsbCk7dmFyIHM9bz09ZS0xfHwwPT1vJTV8fG8+PWkuc2hvd2luZ0Zyb20mJm88aS5zaG93aW5nVG87ci5zdGF0ZUFmdGVyPXM/YnIobi5tb2RlLGwpOm51bGwsKytvfSksciYmKG4uZnJvbnRpZXI9byksbH1mdW5jdGlvbiBJKHQpe3JldHVybiB0LmxpbmVTcGFjZS5vZmZzZXRUb3B9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5tb3Zlci5vZmZzZXRIZWlnaHQtdC5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIFAodCl7dmFyIGU9dWkodC5tZWFzdXJlLHNpKCJwcmUiLG51bGwsbnVsbCwidGV4dC1hbGlnbjogbGVmdCIpKS5hcHBlbmRDaGlsZChzaSgic3BhbiIsIngiKSk7cmV0dXJuIGUub2Zmc2V0TGVmdH1mdW5jdGlvbiBSKHQsZSxyLG4saSl7dmFyIG89LTE7aWYobj1ufHxWKHQsZSksbi5jcnVkZSl7dmFyIGw9bi5sZWZ0K3Iqbi53aWR0aDtyZXR1cm57bGVmdDpsLHJpZ2h0Omwrbi53aWR0aCx0b3A6bi50b3AsYm90dG9tOm4uYm90dG9tfX1mb3IodmFyIHM9cjs7cys9byl7dmFyIGE9bltzXTtpZihhKWJyZWFrOzA+byYmMD09cyYmKG89MSl9cmV0dXJuIGk9cz5yPyJsZWZ0IjpyPnM/InJpZ2h0IjppLCJsZWZ0Ij09aSYmYS5sZWZ0U2lkZT9hPWEubGVmdFNpZGU6InJpZ2h0Ij09aSYmYS5yaWdodFNpZGUmJihhPWEucmlnaHRTaWRlKSx7bGVmdDpyPnM/YS5yaWdodDphLmxlZnQscmlnaHQ6cz5yP2EubGVmdDphLnJpZ2h0LHRvcDphLnRvcCxib3R0b206YS5ib3R0b219fWZ1bmN0aW9uIEIodCxlKXtmb3IodmFyIHI9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO2lmKGkudGV4dD09ZS50ZXh0JiZpLm1hcmtlZFNwYW5zPT1lLm1hcmtlZFNwYW5zJiZ0LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg9PWkud2lkdGgmJmkuY2xhc3Nlcz09ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzKXJldHVybiBpfX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI9Qih0LGUpO3ImJihyLnRleHQ9ci5tZWFzdXJlPXIubWFya2VkU3BhbnM9bnVsbCl9ZnVuY3Rpb24gVih0LGUpe3ZhciByPUIodCxlKTtpZihyKXJldHVybiByLm1lYXN1cmU7dmFyIG49Syh0LGUpLGk9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbz17dGV4dDplLnRleHQsd2lkdGg6dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLG1hcmtlZFNwYW5zOmUubWFya2VkU3BhbnMsbWVhc3VyZTpuLGNsYXNzZXM6ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzfTtyZXR1cm4gMTY9PWkubGVuZ3RoP2lbKyt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyUxNl09bzppLnB1c2gobyksbn1mdW5jdGlvbiBLKHQsZSl7ZnVuY3Rpb24gcih0KXt2YXIgZT10LnRvcC1wLnRvcCxyPXQuYm90dG9tLXAudG9wO3I+diYmKHI9diksMD5lJiYoZT0wKTtmb3IodmFyIG49Zy5sZW5ndGgtMjtuPj0wO24tPTIpe3ZhciBpPWdbbl0sbz1nW24rMV07aWYoIShpPnJ8fGU+bykmJihlPj1pJiZvPj1yfHxpPj1lJiZyPj1vfHxNYXRoLm1pbihyLG8pLU1hdGgubWF4KGUsaSk+PXItZT4+MSkpe2dbbl09TWF0aC5taW4oZSxpKSxnW24rMV09TWF0aC5tYXgocixvKTticmVha319cmV0dXJuIDA+biYmKG49Zy5sZW5ndGgsZy5wdXNoKGUscikpLHtsZWZ0OnQubGVmdC1wLmxlZnQscmlnaHQ6dC5yaWdodC1wLmxlZnQsdG9wOm4sYm90dG9tOm51bGx9fWZ1bmN0aW9uIG4odCl7dC5ib3R0b209Z1t0LnRvcCsxXSx0LnRvcD1nW3QudG9wXX1pZighdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gVSh0LGUpO3ZhciBpPXQuZGlzcGxheSxvPW5pKGUudGV4dC5sZW5ndGgpLGw9cm4odCxlLG8sITApLnByZTtpZihBaSYmIUhpJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbC5jaGlsZE5vZGVzLmxlbmd0aD4xMDApe2Zvcih2YXIgcz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYT0xMCx1PWwuY2hpbGROb2Rlcy5sZW5ndGgsYz0wLGY9TWF0aC5jZWlsKHUvYSk7Zj5jOysrYyl7Zm9yKHZhciBoPXNpKCJkaXYiLG51bGwsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrIiksZD0wO2E+ZCYmdTsrK2QpaC5hcHBlbmRDaGlsZChsLmZpcnN0Q2hpbGQpLC0tdTtzLmFwcGVuZENoaWxkKGgpfWwuYXBwZW5kQ2hpbGQocyl9dWkoaS5tZWFzdXJlLGwpO3ZhciBwPWZpKGkubGluZURpdiksZz1bXSxtPW5pKGUudGV4dC5sZW5ndGgpLHY9bC5vZmZzZXRIZWlnaHQ7TmkmJmkubWVhc3VyZS5maXJzdCE9bCYmdWkoaS5tZWFzdXJlLGwpO2Zvcih2YXIgeSxjPTA7YzxvLmxlbmd0aDsrK2MpaWYoeT1vW2NdKXt2YXIgYj15LHg9bnVsbDtpZigvXGJDb2RlTWlycm9yLXdpZGdldFxiLy50ZXN0KHkuY2xhc3NOYW1lKSYmeS5nZXRDbGllbnRSZWN0cyl7MT09eS5maXJzdENoaWxkLm5vZGVUeXBlJiYoYj15LmZpcnN0Q2hpbGQpO3ZhciBDPWIuZ2V0Q2xpZW50UmVjdHMoKTtDLmxlbmd0aD4xJiYoeD1tW2NdPXIoQ1swXSkseC5yaWdodFNpZGU9cihDW0MubGVuZ3RoLTFdKSl9eHx8KHg9bVtjXT1yKGZpKGIpKSkseS5tZWFzdXJlUmlnaHQmJih4LnJpZ2h0PWZpKHkubWVhc3VyZVJpZ2h0KS5sZWZ0KSx5LmxlZnRTaWRlJiYoeC5sZWZ0U2lkZT1yKGZpKHkubGVmdFNpZGUpKSl9YWkodC5kaXNwbGF5Lm1lYXN1cmUpO2Zvcih2YXIgeSxjPTA7YzxtLmxlbmd0aDsrK2MpKHk9bVtjXSkmJihuKHkpLHkubGVmdFNpZGUmJm4oeS5sZWZ0U2lkZSkseS5yaWdodFNpZGUmJm4oeS5yaWdodFNpZGUpKTtyZXR1cm4gbX1mdW5jdGlvbiBVKHQsZSl7dmFyIHI9bmV3IGJvKGUudGV4dC5zbGljZSgwLDEwMCksbnVsbCk7ZS50ZXh0Q2xhc3MmJihyLnRleHRDbGFzcz1lLnRleHRDbGFzcyk7dmFyIG49Syh0LHIpLGk9Uih0LHIsMCxuLCJsZWZ0Iiksbz1SKHQsciw5OSxuLCJyaWdodCIpO3JldHVybntjcnVkZTohMCx0b3A6aS50b3AsbGVmdDppLmxlZnQsYm90dG9tOmkuYm90dG9tLHdpZHRoOihvLnJpZ2h0LWkubGVmdCkvMTAwfX1mdW5jdGlvbiBYKHQsZSl7dmFyIHI9ITE7aWYoZS5tYXJrZWRTcGFucylmb3IodmFyIG49MDtuPGUubWFya2VkU3BhbnM7KytuKXt2YXIgaT1lLm1hcmtlZFNwYW5zW25dOyFpLmNvbGxhcHNlZHx8bnVsbCE9aS50byYmaS50byE9ZS50ZXh0Lmxlbmd0aHx8KHI9ITApfXZhciBvPSFyJiZCKHQsZSk7aWYob3x8ZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gUih0LGUsZS50ZXh0Lmxlbmd0aCxvJiZvLm1lYXN1cmUsInJpZ2h0IikucmlnaHQ7dmFyIGw9cm4odCxlLG51bGwsITApLnByZSxzPWwuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKTtyZXR1cm4gdWkodC5kaXNwbGF5Lm1lYXN1cmUsbCksZmkocykucmlnaHQtZmkodC5kaXNwbGF5LmxpbmVEaXYpLmxlZnR9ZnVuY3Rpb24gXyh0KXt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCx0LmRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoPXQuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCksdC5kaXNwbGF5LmxpbmVOdW1DaGFycz1udWxsfWZ1bmN0aW9uIFkoKXtyZXR1cm4gd2luZG93LnBhZ2VYT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGooKXtyZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3B9ZnVuY3Rpb24gJCh0LGUscixuKXtpZihlLndpZGdldHMpZm9yKHZhciBpPTA7aTxlLndpZGdldHMubGVuZ3RoOysraSlpZihlLndpZGdldHNbaV0uYWJvdmUpe3ZhciBvPVlyKGUud2lkZ2V0c1tpXSk7ci50b3ArPW8sci5ib3R0b20rPW99aWYoImxpbmUiPT1uKXJldHVybiByO258fChuPSJsb2NhbCIpO3ZhciBsPUNuKHQsZSk7aWYoImxvY2FsIj09bj9sKz1JKHQuZGlzcGxheSk6bC09dC5kaXNwbGF5LnZpZXdPZmZzZXQsInBhZ2UiPT1ufHwid2luZG93Ij09bil7dmFyIHM9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7bCs9cy50b3ArKCJ3aW5kb3ciPT1uPzA6aigpKTt2YXIgYT1zLmxlZnQrKCJ3aW5kb3ciPT1uPzA6WSgpKTtyLmxlZnQrPWEsci5yaWdodCs9YX1yZXR1cm4gci50b3ArPWwsci5ib3R0b20rPWwscn1mdW5jdGlvbiBaKHQsZSxyKXtpZigiZGl2Ij09cilyZXR1cm4gZTt2YXIgbj1lLmxlZnQsaT1lLnRvcDtpZigicGFnZSI9PXIpbi09WSgpLGktPWooKTtlbHNlIGlmKCJsb2NhbCI9PXJ8fCFyKXt2YXIgbz1maSh0LmRpc3BsYXkuc2l6ZXIpO24rPW8ubGVmdCxpKz1vLnRvcH12YXIgbD1maSh0LmRpc3BsYXkubGluZVNwYWNlKTtyZXR1cm57bGVmdDpuLWwubGVmdCx0b3A6aS1sLnRvcH19ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBufHwobj1nbih0LmRvYyxlLmxpbmUpKSwkKHQsbixSKHQsbixlLmNoLG51bGwsaSkscil9ZnVuY3Rpb24gUSh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSxvKXt2YXIgbD1SKHQsbixlLGksbz8icmlnaHQiOiJsZWZ0Iik7cmV0dXJuIG8/bC5sZWZ0PWwucmlnaHQ6bC5yaWdodD1sLmxlZnQsJCh0LG4sbCxyKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9c1tlXSxuPXIubGV2ZWwlMjtyZXR1cm4gdD09bWkocikmJmUmJnIubGV2ZWw8c1tlLTFdLmxldmVsPyhyPXNbLS1lXSx0PXZpKHIpLShyLmxldmVsJTI/MDoxKSxuPSEwKTp0PT12aShyKSYmZTxzLmxlbmd0aC0xJiZyLmxldmVsPHNbZSsxXS5sZXZlbCYmKHI9c1srK2VdLHQ9bWkociktci5sZXZlbCUyLG49ITEpLG4mJnQ9PXIudG8mJnQ+ci5mcm9tP28odC0xKTpvKHQsbil9bj1ufHxnbih0LmRvYyxlLmxpbmUpLGl8fChpPVYodCxuKSk7dmFyIHM9d24obiksYT1lLmNoO2lmKCFzKXJldHVybiBvKGEpO3ZhciB1PUxpKHMsYSksYz1sKGEsdSk7cmV0dXJuIG51bGwhPVJvJiYoYy5vdGhlcj1sKGEsUm8pKSxjfWZ1bmN0aW9uIEoodCxlLHIsbil7dmFyIGk9bmV3IFllKHQsZSk7cmV0dXJuIGkueFJlbD1uLHImJihpLm91dHNpZGU9ITApLGl9ZnVuY3Rpb24gdGUodCxlLHIpe3ZhciBuPXQuZG9jO2lmKHIrPXQuZGlzcGxheS52aWV3T2Zmc2V0LDA+cilyZXR1cm4gSihuLmZpcnN0LDAsITAsLTEpO3ZhciBpPXhuKG4sciksbz1uLmZpcnN0K24uc2l6ZS0xO2lmKGk+bylyZXR1cm4gSihuLmZpcnN0K24uc2l6ZS0xLGduKG4sbykudGV4dC5sZW5ndGgsITAsMSk7Zm9yKDA+ZSYmKGU9MCk7Oyl7dmFyIGw9Z24obixpKSxzPWVlKHQsbCxpLGUsciksYT1CcihsKSx1PWEmJmEuZmluZCgpO2lmKCFhfHwhKHMuY2g+dS5mcm9tLmNofHxzLmNoPT11LmZyb20uY2gmJnMueFJlbD4wKSlyZXR1cm4gcztpPXUudG8ubGluZX19ZnVuY3Rpb24gZWUodCxlLHIsbixpKXtmdW5jdGlvbiBvKG4pe3ZhciBpPVEodCxZZShyLG4pLCJsaW5lIixlLHUpO3JldHVybiBzPSEwLGw+aS5ib3R0b20/aS5sZWZ0LWE6bDxpLnRvcD9pLmxlZnQrYToocz0hMSxpLmxlZnQpfXZhciBsPWktQ24odCxlKSxzPSExLGE9Mip0LmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCx1PVYodCxlKSxjPXduKGUpLGY9ZS50ZXh0Lmxlbmd0aCxoPXlpKGUpLGQ9YmkoZSkscD1vKGgpLGc9cyxtPW8oZCksdj1zO2lmKG4+bSlyZXR1cm4gSihyLGQsdiwxKTtmb3IoOzspe2lmKGM/ZD09aHx8ZD09U2koZSxoLDEpOjE+PWQtaCl7Zm9yKHZhciB5PXA+bnx8bS1uPj1uLXA/aDpkLGI9bi0oeT09aD9wOm0pO0RvLnRlc3QoZS50ZXh0LmNoYXJBdCh5KSk7KSsreTt2YXIgeD1KKHIseSx5PT1oP2c6diwwPmI/LTE6Yj8xOjApO3JldHVybiB4fXZhciBDPU1hdGguY2VpbChmLzIpLHc9aCtDO2lmKGMpe3c9aDtmb3IodmFyIEw9MDtDPkw7KytMKXc9U2koZSx3LDEpfXZhciBrPW8odyk7az5uPyhkPXcsbT1rLCh2PXMpJiYobSs9MWUzKSxmPUMpOihoPXcscD1rLGc9cyxmLT1DKX19ZnVuY3Rpb24gcmUodCl7aWYobnVsbCE9dC5jYWNoZWRUZXh0SGVpZ2h0KXJldHVybiB0LmNhY2hlZFRleHRIZWlnaHQ7aWYobnVsbD09X2kpe19pPXNpKCJwcmUiKTtmb3IodmFyIGU9MDs0OT5lOysrZSlfaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKSxfaS5hcHBlbmRDaGlsZChzaSgiYnIiKSk7X2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSl9dWkodC5tZWFzdXJlLF9pKTt2YXIgcj1faS5vZmZzZXRIZWlnaHQvNTA7cmV0dXJuIHI+MyYmKHQuY2FjaGVkVGV4dEhlaWdodD1yKSxhaSh0Lm1lYXN1cmUpLHJ8fDF9ZnVuY3Rpb24gbmUodCl7aWYobnVsbCE9dC5jYWNoZWRDaGFyV2lkdGgpcmV0dXJuIHQuY2FjaGVkQ2hhcldpZHRoO3ZhciBlPXNpKCJzcGFuIiwieCIpLHI9c2koInByZSIsW2VdKTt1aSh0Lm1lYXN1cmUscik7dmFyIG49ZS5vZmZzZXRXaWR0aDtyZXR1cm4gbj4yJiYodC5jYWNoZWRDaGFyV2lkdGg9biksbnx8MTB9ZnVuY3Rpb24gaWUodCl7dC5jdXJPcD17Y2hhbmdlczpbXSxmb3JjZVVwZGF0ZTohMSx1cGRhdGVJbnB1dDpudWxsLHVzZXJTZWxDaGFuZ2U6bnVsbCx0ZXh0Q2hhbmdlZDpudWxsLHNlbGVjdGlvbkNoYW5nZWQ6ITEsY3Vyc29yQWN0aXZpdHk6ITEsdXBkYXRlTWF4TGluZTohMSx1cGRhdGVTY3JvbGxQb3M6ITEsaWQ6KytKaX0sTW8rK3x8KFNvPVtdKX1mdW5jdGlvbiBvZSh0KXt2YXIgZT10LmN1ck9wLHI9dC5kb2Msbj10LmRpc3BsYXk7aWYodC5jdXJPcD1udWxsLGUudXBkYXRlTWF4TGluZSYmZih0KSxuLm1heExpbmVDaGFuZ2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbi5tYXhMaW5lKXt2YXIgaT1YKHQsbi5tYXhMaW5lKTtuLnNpemVyLnN0eWxlLm1pbldpZHRoPU1hdGgubWF4KDAsaSszK1RvKSsicHgiLG4ubWF4TGluZUNoYW5nZWQ9ITE7dmFyIG89TWF0aC5tYXgoMCxuLnNpemVyLm9mZnNldExlZnQrbi5zaXplci5vZmZzZXRXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoKTtvPHIuc2Nyb2xsTGVmdCYmIWUudXBkYXRlU2Nyb2xsUG9zJiZNZSh0LE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsTGVmdCxvKSwhMCl9dmFyIGwscztpZihlLnVwZGF0ZVNjcm9sbFBvcylsPWUudXBkYXRlU2Nyb2xsUG9zO2Vsc2UgaWYoZS5zZWxlY3Rpb25DaGFuZ2VkJiZuLnNjcm9sbGVyLmNsaWVudEhlaWdodCl7dmFyIGE9USh0LHIuc2VsLmhlYWQpO2w9dXIodCxhLmxlZnQsYS50b3AsYS5sZWZ0LGEuYm90dG9tKX1pZigoZS5jaGFuZ2VzLmxlbmd0aHx8ZS5mb3JjZVVwZGF0ZXx8bCYmbnVsbCE9bC5zY3JvbGxUb3ApJiYocz1iKHQsZS5jaGFuZ2VzLGwmJmwuc2Nyb2xsVG9wLGUuZm9yY2VVcGRhdGUpLHQuZGlzcGxheS5zY3JvbGxlci5vZmZzZXRIZWlnaHQmJih0LmRvYy5zY3JvbGxUb3A9dC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCkpLCFzJiZlLnNlbGVjdGlvbkNoYW5nZWQmJkEodCksZS51cGRhdGVTY3JvbGxQb3Mpe3ZhciB1PU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxIZWlnaHQtbi5zY3JvbGxlci5jbGllbnRIZWlnaHQsbC5zY3JvbGxUb3ApKSxjPU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoLGwuc2Nyb2xsTGVmdCkpO24uc2Nyb2xsZXIuc2Nyb2xsVG9wPW4uc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ci5zY3JvbGxUb3A9dSxuLnNjcm9sbGVyLnNjcm9sbExlZnQ9bi5zY3JvbGxiYXJILnNjcm9sbExlZnQ9ci5zY3JvbGxMZWZ0PWMsZyh0KSxlLnNjcm9sbFRvUG9zJiZzcih0LFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MuZnJvbSksUWUodC5kb2MsZS5zY3JvbGxUb1Bvcy50byksZS5zY3JvbGxUb1Bvcy5tYXJnaW4pfWVsc2UgbCYmbHIodCk7ZS5zZWxlY3Rpb25DaGFuZ2VkJiZEKHQpLHQuc3RhdGUuZm9jdXNlZCYmZS51cGRhdGVJbnB1dCYmZGUodCxlLnVzZXJTZWxDaGFuZ2UpO3ZhciBoPWUubWF5YmVIaWRkZW5NYXJrZXJzLGQ9ZS5tYXliZVVuaGlkZGVuTWFya2VycztpZihoKWZvcih2YXIgcD0wO3A8aC5sZW5ndGg7KytwKWhbcF0ubGluZXMubGVuZ3RofHxLbihoW3BdLCJoaWRlIik7aWYoZClmb3IodmFyIHA9MDtwPGQubGVuZ3RoOysrcClkW3BdLmxpbmVzLmxlbmd0aCYmS24oZFtwXSwidW5oaWRlIik7dmFyIG07aWYoLS1Nb3x8KG09U28sU289bnVsbCksZS50ZXh0Q2hhbmdlZCYmS24odCwiY2hhbmdlIix0LGUudGV4dENoYW5nZWQpLGUuY3Vyc29yQWN0aXZpdHkmJktuKHQsImN1cnNvckFjdGl2aXR5Iix0KSxtKWZvcih2YXIgcD0wO3A8bS5sZW5ndGg7KytwKW1bcF0oKX1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXR8fHRoaXMsbj0hci5jdXJPcDtuJiZpZShyKTt0cnl7dmFyIGk9ZS5hcHBseShyLGFyZ3VtZW50cyl9ZmluYWxseXtuJiZvZShyKX1yZXR1cm4gaX19ZnVuY3Rpb24gc2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmNtJiYhdGhpcy5jbS5jdXJPcDtyJiZpZSh0aGlzLmNtKTt0cnl7ZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3ImJm9lKHRoaXMuY20pfXJldHVybiBlfX1mdW5jdGlvbiBhZSh0LGUpe3ZhciByLG49IXQuY3VyT3A7biYmaWUodCk7dHJ5e3I9ZSgpfWZpbmFsbHl7biYmb2UodCl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWUodCxlLHIsbil7bnVsbD09ZSYmKGU9dC5kb2MuZmlyc3QpLG51bGw9PXImJihyPXQuZG9jLmZpcnN0K3QuZG9jLnNpemUpLHQuY3VyT3AuY2hhbmdlcy5wdXNoKHtmcm9tOmUsdG86cixkaWZmOm59KX1mdW5jdGlvbiBjZSh0KXt0LmRpc3BsYXkucG9sbGluZ0Zhc3R8fHQuZGlzcGxheS5wb2xsLnNldCh0Lm9wdGlvbnMucG9sbEludGVydmFsLGZ1bmN0aW9uKCl7aGUodCksdC5zdGF0ZS5mb2N1c2VkJiZjZSh0KX0pfWZ1bmN0aW9uIGZlKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj1oZSh0KTtufHxyPyh0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEsY2UodCkpOihyPSEwLHQuZGlzcGxheS5wb2xsLnNldCg2MCxlKSl9dmFyIHI9ITE7dC5kaXNwbGF5LnBvbGxpbmdGYXN0PSEwLHQuZGlzcGxheS5wb2xsLnNldCgyMCxlKX1mdW5jdGlvbiBoZSh0KXt2YXIgZT10LmRpc3BsYXkuaW5wdXQscj10LmRpc3BsYXkucHJldklucHV0LG49dC5kb2MsaT1uLnNlbDtpZighdC5zdGF0ZS5mb2N1c2VkfHxJbyhlKXx8Z2UodCl8fHQuc3RhdGUuZGlzYWJsZUlucHV0KXJldHVybiExO3Quc3RhdGUucGFzdGVJbmNvbWluZyYmdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYoZS52YWx1ZT1lLnZhbHVlLnN1YnN0cmluZygwLGUudmFsdWUubGVuZ3RoLTEpLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMSk7dmFyIG89ZS52YWx1ZTtpZihvPT1yJiZqZShpLmZyb20saS50bykpcmV0dXJuITE7aWYoQWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPT09bylyZXR1cm4gZGUodCwhMCksITE7dmFyIGw9IXQuY3VyT3A7bCYmaWUodCksaS5zaGlmdD0hMTtmb3IodmFyIHM9MCxhPU1hdGgubWluKHIubGVuZ3RoLG8ubGVuZ3RoKTthPnMmJnIuY2hhckNvZGVBdChzKT09by5jaGFyQ29kZUF0KHMpOykrK3M7dmFyIHU9aS5mcm9tLGM9aS50bztzPHIubGVuZ3RoP3U9WWUodS5saW5lLHUuY2gtKHIubGVuZ3RoLXMpKTp0LnN0YXRlLm92ZXJ3cml0ZSYmamUodSxjKSYmIXQuc3RhdGUucGFzdGVJbmNvbWluZyYmKGM9WWUoYy5saW5lLE1hdGgubWluKGduKG4sYy5saW5lKS50ZXh0Lmxlbmd0aCxjLmNoKyhvLmxlbmd0aC1zKSkpKTt2YXIgZj10LmN1ck9wLnVwZGF0ZUlucHV0LGg9e2Zyb206dSx0bzpjLHRleHQ6em8oby5zbGljZShzKSksb3JpZ2luOnQuc3RhdGUucGFzdGVJbmNvbWluZz8icGFzdGUiOiIraW5wdXQifTtyZXR1cm4gQmUodC5kb2MsaCwiZW5kIiksdC5jdXJPcC51cGRhdGVJbnB1dD1mLFVuKHQsImlucHV0UmVhZCIsdCxoKSxvLmxlbmd0aD4xZTN8fG8uaW5kZXhPZigiXG4iKT4tMT9lLnZhbHVlPXQuZGlzcGxheS5wcmV2SW5wdXQ9IiI6dC5kaXNwbGF5LnByZXZJbnB1dD1vLGwmJm9lKHQpLHQuc3RhdGUucGFzdGVJbmNvbWluZz0hMSwhMH1mdW5jdGlvbiBkZSh0LGUpe3ZhciByLG4saT10LmRvYztpZihqZShpLnNlbC5mcm9tLGkuc2VsLnRvKSllJiYodC5kaXNwbGF5LnByZXZJbnB1dD10LmRpc3BsYXkuaW5wdXQudmFsdWU9IiIsQWkmJiFOaSYmKHQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSk7ZWxzZXt0LmRpc3BsYXkucHJldklucHV0PSIiLHI9Rm8mJihpLnNlbC50by5saW5lLWkuc2VsLmZyb20ubGluZT4xMDB8fChuPXQuZ2V0U2VsZWN0aW9uKCkpLmxlbmd0aD4xZTMpO3ZhciBvPXI/Ii0iOm58fHQuZ2V0U2VsZWN0aW9uKCk7dC5kaXNwbGF5LmlucHV0LnZhbHVlPW8sdC5zdGF0ZS5mb2N1c2VkJiZKbih0LmRpc3BsYXkuaW5wdXQpLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249byl9dC5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb249cn1mdW5jdGlvbiBwZSh0KXsibm9jdXJzb3IiPT10Lm9wdGlvbnMucmVhZE9ubHl8fFZpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT10LmRpc3BsYXkuaW5wdXR8fHQuZGlzcGxheS5pbnB1dC5mb2N1cygpfWZ1bmN0aW9uIGdlKHQpe3JldHVybiB0Lm9wdGlvbnMucmVhZE9ubHl8fHQuZG9jLmNhbnRFZGl0fWZ1bmN0aW9uIG1lKHQpe2Z1bmN0aW9uIGUoKXt0LnN0YXRlLmZvY3VzZWQmJnNldFRpbWVvdXQoaWkocGUsdCksMCl9ZnVuY3Rpb24gcigpe251bGw9PXMmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGwsbC5jYWNoZWRDaGFyV2lkdGg9bC5jYWNoZWRUZXh0SGVpZ2h0PU9vPW51bGwsXyh0KSxhZSh0LGlpKHVlLHQpKX0sMTAwKSl9ZnVuY3Rpb24gbigpe2Zvcih2YXIgdD1sLndyYXBwZXIucGFyZW50Tm9kZTt0JiZ0IT1kb2N1bWVudC5ib2R5O3Q9dC5wYXJlbnROb2RlKTt0P3NldFRpbWVvdXQobiw1ZTMpOlZuKHdpbmRvdywicmVzaXplIixyKX1mdW5jdGlvbiBpKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbkRyYWdFdmVudCYmdC5vcHRpb25zLm9uRHJhZ0V2ZW50KHQsRW4oZSkpfHxQbihlKX1mdW5jdGlvbiBvKCl7bC5pbmFjY3VyYXRlU2VsZWN0aW9uJiYobC5wcmV2SW5wdXQ9IiIsbC5pbmFjY3VyYXRlU2VsZWN0aW9uPSExLGwuaW5wdXQudmFsdWU9dC5nZXRTZWxlY3Rpb24oKSxKbihsLmlucHV0KSl9dmFyIGw9dC5kaXNwbGF5O0duKGwuc2Nyb2xsZXIsIm1vdXNlZG93biIsbGUodCxiZSkpLEFpP0duKGwuc2Nyb2xsZXIsImRibGNsaWNrIixsZSh0LGZ1bmN0aW9uKGUpe2lmKCFYbih0LGUpKXt2YXIgcj15ZSh0LGUpO2lmKHImJiF3ZSh0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt6bihlKTt2YXIgbj1tcihnbih0LmRvYyxyLmxpbmUpLnRleHQscik7ZXIodC5kb2Msbi5mcm9tLG4udG8pfX19KSk6R24obC5zY3JvbGxlciwiZGJsY2xpY2siLGZ1bmN0aW9uKGUpe1huKHQsZSl8fHpuKGUpfSksR24obC5saW5lU3BhY2UsInNlbGVjdHN0YXJ0IixmdW5jdGlvbih0KXt2ZShsLHQpfHx6bih0KX0pLFppfHxHbihsLnNjcm9sbGVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZSl7SWUodCxlKX0pLEduKGwuc2Nyb2xsZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmKFNlKHQsbC5zY3JvbGxlci5zY3JvbGxUb3ApLE1lKHQsbC5zY3JvbGxlci5zY3JvbGxMZWZ0LCEwKSxLbih0LCJzY3JvbGwiLHQpKX0pLEduKGwuc2Nyb2xsYmFyViwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZTZSh0LGwuc2Nyb2xsYmFyVi5zY3JvbGxUb3ApfSksR24obC5zY3JvbGxiYXJILCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJk1lKHQsbC5zY3JvbGxiYXJILnNjcm9sbExlZnQpfSksR24obC5zY3JvbGxlciwibW91c2V3aGVlbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsZXIsIkRPTU1vdXNlU2Nyb2xsIixmdW5jdGlvbihlKXtUZSh0LGUpfSksR24obC5zY3JvbGxiYXJILCJtb3VzZWRvd24iLGUpLEduKGwuc2Nyb2xsYmFyViwibW91c2Vkb3duIixlKSxHbihsLndyYXBwZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLndyYXBwZXIuc2Nyb2xsVG9wPWwud3JhcHBlci5zY3JvbGxMZWZ0PTB9KTt2YXIgcztHbih3aW5kb3csInJlc2l6ZSIsciksc2V0VGltZW91dChuLDVlMyksR24obC5pbnB1dCwia2V5dXAiLGxlKHQsZnVuY3Rpb24oZSl7WG4odCxlKXx8dC5vcHRpb25zLm9uS2V5RXZlbnQmJnQub3B0aW9ucy5vbktleUV2ZW50KHQsRW4oZSkpfHwxNj09ZS5rZXlDb2RlJiYodC5kb2Muc2VsLnNoaWZ0PSExKX0pKSxHbihsLmlucHV0LCJpbnB1dCIsZnVuY3Rpb24oKXtBaSYmIU5pJiZ0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24mJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUodCl9KSxHbihsLmlucHV0LCJrZXlkb3duIixsZSh0LFdlKSksR24obC5pbnB1dCwia2V5cHJlc3MiLGxlKHQsT2UpKSxHbihsLmlucHV0LCJmb2N1cyIsaWkoRWUsdCkpLEduKGwuaW5wdXQsImJsdXIiLGlpKHplLHQpKSx0Lm9wdGlvbnMuZHJhZ0Ryb3AmJihHbihsLnNjcm9sbGVyLCJkcmFnc3RhcnQiLGZ1bmN0aW9uKGUpe2tlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJkcmFnZW50ZXIiLGkpLEduKGwuc2Nyb2xsZXIsImRyYWdvdmVyIixpKSxHbihsLnNjcm9sbGVyLCJkcm9wIixsZSh0LExlKSkpLEduKGwuc2Nyb2xsZXIsInBhc3RlIixmdW5jdGlvbihlKXt2ZShsLGUpfHwocGUodCksZmUodCkpfSksR24obC5pbnB1dCwicGFzdGUiLGZ1bmN0aW9uKCl7aWYoV2kmJiF0LnN0YXRlLmZha2VkTGFzdENoYXImJiEobmV3IERhdGUtdC5zdGF0ZS5sYXN0TWlkZGxlRG93bjwyMDApKXt2YXIgZT1sLmlucHV0LnNlbGVjdGlvblN0YXJ0LHI9bC5pbnB1dC5zZWxlY3Rpb25FbmQ7bC5pbnB1dC52YWx1ZSs9IiQiLGwuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9ZSxsLmlucHV0LnNlbGVjdGlvbkVuZD1yLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMH10LnN0YXRlLnBhc3RlSW5jb21pbmc9ITAsZmUodCl9KSxHbihsLmlucHV0LCJjdXQiLG8pLEduKGwuaW5wdXQsImNvcHkiLG8pLEZpJiZHbihsLnNpemVyLCJtb3VzZXVwIixmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXQmJmwuaW5wdXQuYmx1cigpLHBlKHQpfSl9ZnVuY3Rpb24gdmUodCxlKXtmb3IodmFyIHI9Um4oZSk7ciE9dC53cmFwcGVyO3I9ci5wYXJlbnROb2RlKWlmKCFyfHxyLmlnbm9yZUV2ZW50c3x8ci5wYXJlbnROb2RlPT10LnNpemVyJiZyIT10Lm1vdmVyKXJldHVybiEwfWZ1bmN0aW9uIHllKHQsZSxyKXt2YXIgbj10LmRpc3BsYXk7aWYoIXIpe3ZhciBpPVJuKGUpO2lmKGk9PW4uc2Nyb2xsYmFySHx8aT09bi5zY3JvbGxiYXJILmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyVnx8aT09bi5zY3JvbGxiYXJWLmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyRmlsbGVyfHxpPT1uLmd1dHRlckZpbGxlcilyZXR1cm4gbnVsbH12YXIgbyxsLHM9Zmkobi5saW5lU3BhY2UpO3RyeXtvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGUodCxvLXMubGVmdCxsLXMudG9wKX1mdW5jdGlvbiBiZSh0KXtmdW5jdGlvbiBlKHQpe2lmKCFqZSh2LHQpKXtpZih2PXQsInNpbmdsZSI9PWMpcmV0dXJuIGVyKGkuZG9jLFFlKGwsYSksdCksdm9pZCAwOwppZihnPVFlKGwsZyksbT1RZShsLG0pLCJkb3VibGUiPT1jKXt2YXIgZT1tcihnbihsLHQubGluZSkudGV4dCx0KTskZSh0LGcpP2VyKGkuZG9jLGUuZnJvbSxtKTplcihpLmRvYyxnLGUudG8pfWVsc2UidHJpcGxlIj09YyYmKCRlKHQsZyk/ZXIoaS5kb2MsbSxRZShsLFllKHQubGluZSwwKSkpOmVyKGkuZG9jLGcsUWUobCxZZSh0LmxpbmUrMSwwKSkpKX19ZnVuY3Rpb24gcih0KXt2YXIgbj0rK2Iscz15ZShpLHQsITApO2lmKHMpaWYoamUocyxoKSl7dmFyIGE9dC5jbGllbnRZPHkudG9wPy0yMDp0LmNsaWVudFk+eS5ib3R0b20/MjA6MDthJiZzZXRUaW1lb3V0KGxlKGksZnVuY3Rpb24oKXtiPT1uJiYoby5zY3JvbGxlci5zY3JvbGxUb3ArPWEscih0KSl9KSw1MCl9ZWxzZXtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpLGg9cyxlKHMpO3ZhciB1PXAobyxsKTsocy5saW5lPj11LnRvfHxzLmxpbmU8dS5mcm9tKSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmcih0KX0pLDE1MCl9fWZ1bmN0aW9uIG4odCl7Yj0xLzAsem4odCkscGUoaSksVm4oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksVm4oZG9jdW1lbnQsIm1vdXNldXAiLEMpfWlmKCFYbih0aGlzLHQpKXt2YXIgaT10aGlzLG89aS5kaXNwbGF5LGw9aS5kb2Mscz1sLnNlbDtpZihzLnNoaWZ0PXQuc2hpZnRLZXksdmUobyx0KSlyZXR1cm4gV2l8fChvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5zY3JvbGxlci5kcmFnZ2FibGU9ITB9LDEwMCkpLHZvaWQgMDtpZighd2UoaSx0KSl7dmFyIGE9eWUoaSx0KTtzd2l0Y2goQm4odCkpe2Nhc2UgMzpyZXR1cm4gWmkmJkllLmNhbGwoaSxpLHQpLHZvaWQgMDtjYXNlIDI6cmV0dXJuIFdpJiYoaS5zdGF0ZS5sYXN0TWlkZGxlRG93bj0rbmV3IERhdGUpLGEmJmVyKGkuZG9jLGEpLHNldFRpbWVvdXQoaWkocGUsaSksMjApLHpuKHQpLHZvaWQgMH1pZighYSlyZXR1cm4gUm4odCk9PW8uc2Nyb2xsZXImJnpuKHQpLHZvaWQgMDtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpO3ZhciB1PStuZXcgRGF0ZSxjPSJzaW5nbGUiO2lmKGppJiZqaS50aW1lPnUtNDAwJiZqZShqaS5wb3MsYSkpYz0idHJpcGxlIix6bih0KSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx2cihpLGEubGluZSk7ZWxzZSBpZihZaSYmWWkudGltZT51LTQwMCYmamUoWWkucG9zLGEpKXtjPSJkb3VibGUiLGppPXt0aW1lOnUscG9zOmF9LHpuKHQpO3ZhciBmPW1yKGduKGwsYS5saW5lKS50ZXh0LGEpO2VyKGkuZG9jLGYuZnJvbSxmLnRvKX1lbHNlIFlpPXt0aW1lOnUscG9zOmF9O3ZhciBoPWE7aWYoaS5vcHRpb25zLmRyYWdEcm9wJiZXbyYmIWdlKGkpJiYhamUocy5mcm9tLHMudG8pJiYhJGUoYSxzLmZyb20pJiYhJGUocy50byxhKSYmInNpbmdsZSI9PWMpe3ZhciBkPWxlKGksZnVuY3Rpb24oZSl7V2kmJihvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSksaS5zdGF0ZS5kcmFnZ2luZ1RleHQ9ITEsVm4oZG9jdW1lbnQsIm1vdXNldXAiLGQpLFZuKG8uc2Nyb2xsZXIsImRyb3AiLGQpLE1hdGguYWJzKHQuY2xpZW50WC1lLmNsaWVudFgpK01hdGguYWJzKHQuY2xpZW50WS1lLmNsaWVudFkpPDEwJiYoem4oZSksZXIoaS5kb2MsYSkscGUoaSkpfSk7cmV0dXJuIFdpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITApLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PWQsby5zY3JvbGxlci5kcmFnRHJvcCYmby5zY3JvbGxlci5kcmFnRHJvcCgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixkKSxHbihvLnNjcm9sbGVyLCJkcm9wIixkKSx2b2lkIDB9em4odCksInNpbmdsZSI9PWMmJmVyKGkuZG9jLFFlKGwsYSkpO3ZhciBnPXMuZnJvbSxtPXMudG8sdj1hLHk9Zmkoby53cmFwcGVyKSxiPTAseD1sZShpLGZ1bmN0aW9uKHQpe0FpfHxCbih0KT9yKHQpOm4odCl9KSxDPWxlKGksbik7R24oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksR24oZG9jdW1lbnQsIm1vdXNldXAiLEMpfX19ZnVuY3Rpb24geGUodCxlLHIsbixpKXt0cnl7dmFyIG89ZS5jbGllbnRYLGw9ZS5jbGllbnRZfWNhdGNoKGUpe3JldHVybiExfWlmKG8+PU1hdGguZmxvb3IoZmkodC5kaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSlyZXR1cm4hMTtuJiZ6bihlKTt2YXIgcz10LmRpc3BsYXksYT1maShzLmxpbmVEaXYpO2lmKGw+YS5ib3R0b218fCFZbih0LHIpKXJldHVybiBGbihlKTtsLT1hLnRvcC1zLnZpZXdPZmZzZXQ7Zm9yKHZhciB1PTA7dTx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt1KXt2YXIgYz1zLmd1dHRlcnMuY2hpbGROb2Rlc1t1XTtpZihjJiZmaShjKS5yaWdodD49byl7dmFyIGY9eG4odC5kb2MsbCksaD10Lm9wdGlvbnMuZ3V0dGVyc1t1XTtyZXR1cm4gaSh0LHIsdCxmLGgsZSksRm4oZSl9fX1mdW5jdGlvbiBDZSh0LGUpe3JldHVybiBZbih0LCJndXR0ZXJDb250ZXh0TWVudSIpP3hlKHQsZSwiZ3V0dGVyQ29udGV4dE1lbnUiLCExLEtuKTohMX1mdW5jdGlvbiB3ZSh0LGUpe3JldHVybiB4ZSh0LGUsImd1dHRlckNsaWNrIiwhMCxVbil9ZnVuY3Rpb24gTGUodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fHZlKGUuZGlzcGxheSx0KXx8ZS5vcHRpb25zLm9uRHJhZ0V2ZW50JiZlLm9wdGlvbnMub25EcmFnRXZlbnQoZSxFbih0KSkpKXt6bih0KSxBaSYmKHRvPStuZXcgRGF0ZSk7dmFyIHI9eWUoZSx0LCEwKSxuPXQuZGF0YVRyYW5zZmVyLmZpbGVzO2lmKHImJiFnZShlKSlpZihuJiZuLmxlbmd0aCYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlKWZvcih2YXIgaT1uLmxlbmd0aCxvPUFycmF5KGkpLGw9MCxzPWZ1bmN0aW9uKHQsbil7dmFyIHM9bmV3IEZpbGVSZWFkZXI7cy5vbmxvYWQ9ZnVuY3Rpb24oKXtvW25dPXMucmVzdWx0LCsrbD09aSYmKHI9UWUoZS5kb2MsciksQmUoZS5kb2Mse2Zyb206cix0bzpyLHRleHQ6em8oby5qb2luKCJcbiIpKSxvcmlnaW46InBhc3RlIn0sImFyb3VuZCIpKX0scy5yZWFkQXNUZXh0KHQpfSxhPTA7aT5hOysrYSlzKG5bYV0sYSk7ZWxzZXtpZihlLnN0YXRlLmRyYWdnaW5nVGV4dCYmISRlKHIsZS5kb2Muc2VsLmZyb20pJiYhJGUoZS5kb2Muc2VsLnRvLHIpKXJldHVybiBlLnN0YXRlLmRyYWdnaW5nVGV4dCh0KSxzZXRUaW1lb3V0KGlpKHBlLGUpLDIwKSx2b2lkIDA7dHJ5e3ZhciBvPXQuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTtpZihvKXt2YXIgdT1lLmRvYy5zZWwuZnJvbSxjPWUuZG9jLnNlbC50bztucihlLmRvYyxyLHIpLGUuc3RhdGUuZHJhZ2dpbmdUZXh0JiZfZShlLmRvYywiIix1LGMsInBhc3RlIiksZS5yZXBsYWNlU2VsZWN0aW9uKG8sbnVsbCwicGFzdGUiKSxwZShlKX19Y2F0Y2godCl7fX19fWZ1bmN0aW9uIGtlKHQsZSl7aWYoQWkmJighdC5zdGF0ZS5kcmFnZ2luZ1RleHR8fCtuZXcgRGF0ZS10bzwxMDApKXJldHVybiBQbihlKSx2b2lkIDA7aWYoIVhuKHQsZSkmJiF2ZSh0LmRpc3BsYXksZSkpe3ZhciByPXQuZ2V0U2VsZWN0aW9uKCk7aWYoZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsciksZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlJiYhSWkpe3ZhciBuPXNpKCJpbWciLG51bGwsbnVsbCwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7bi5zcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09Iix6aSYmKG4ud2lkdGg9bi5oZWlnaHQ9MSx0LmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChuKSxuLl90b3A9bi5vZmZzZXRUb3ApLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLDAsMCksemkmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX19fWZ1bmN0aW9uIFNlKHQsZSl7TWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWUpPDJ8fCh0LmRvYy5zY3JvbGxUb3A9ZSxUaXx8Yih0LFtdLGUpLHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wPWUpLHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1lKSxUaSYmYih0LFtdKSxXKHQsMTAwKSl9ZnVuY3Rpb24gTWUodCxlLHIpeyhyP2U9PXQuZG9jLnNjcm9sbExlZnQ6TWF0aC5hYnModC5kb2Muc2Nyb2xsTGVmdC1lKTwyKXx8KGU9TWF0aC5taW4oZSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKSx0LmRvYy5zY3JvbGxMZWZ0PWUsZyh0KSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0PWUpLHQuZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PWUpKX1mdW5jdGlvbiBUZSh0LGUpe3ZhciByPWUud2hlZWxEZWx0YVgsbj1lLndoZWVsRGVsdGFZO251bGw9PXImJmUuZGV0YWlsJiZlLmF4aXM9PWUuSE9SSVpPTlRBTF9BWElTJiYocj1lLmRldGFpbCksbnVsbD09biYmZS5kZXRhaWwmJmUuYXhpcz09ZS5WRVJUSUNBTF9BWElTP249ZS5kZXRhaWw6bnVsbD09biYmKG49ZS53aGVlbERlbHRhKTt2YXIgaT10LmRpc3BsYXksbz1pLnNjcm9sbGVyO2lmKHImJm8uc2Nyb2xsV2lkdGg+by5jbGllbnRXaWR0aHx8biYmby5zY3JvbGxIZWlnaHQ+by5jbGllbnRIZWlnaHQpe2lmKG4mJktpJiZXaSlmb3IodmFyIGw9ZS50YXJnZXQ7bCE9bztsPWwucGFyZW50Tm9kZSlpZihsLmxpbmVPYmope3QuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQ9bDticmVha31pZihyJiYhVGkmJiF6aSYmbnVsbCE9cm8pcmV0dXJuIG4mJlNlKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbFRvcCtuKnJvLG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0KSkpLE1lKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbExlZnQrcipybyxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgpKSksem4oZSksaS53aGVlbFN0YXJ0WD1udWxsLHZvaWQgMDtpZihuJiZudWxsIT1ybyl7dmFyIHM9bipybyxhPXQuZG9jLnNjcm9sbFRvcCx1PWEraS53cmFwcGVyLmNsaWVudEhlaWdodDswPnM/YT1NYXRoLm1heCgwLGErcy01MCk6dT1NYXRoLm1pbih0LmRvYy5oZWlnaHQsdStzKzUwKSxiKHQsW10se3RvcDphLGJvdHRvbTp1fSl9MjA+ZW8mJihudWxsPT1pLndoZWVsU3RhcnRYPyhpLndoZWVsU3RhcnRYPW8uc2Nyb2xsTGVmdCxpLndoZWVsU3RhcnRZPW8uc2Nyb2xsVG9wLGkud2hlZWxEWD1yLGkud2hlZWxEWT1uLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihudWxsIT1pLndoZWVsU3RhcnRYKXt2YXIgdD1vLnNjcm9sbExlZnQtaS53aGVlbFN0YXJ0WCxlPW8uc2Nyb2xsVG9wLWkud2hlZWxTdGFydFkscj1lJiZpLndoZWVsRFkmJmUvaS53aGVlbERZfHx0JiZpLndoZWVsRFgmJnQvaS53aGVlbERYO2kud2hlZWxTdGFydFg9aS53aGVlbFN0YXJ0WT1udWxsLHImJihybz0ocm8qZW8rcikvKGVvKzEpLCsrZW8pfX0sMjAwKSk6KGkud2hlZWxEWCs9cixpLndoZWVsRFkrPW4pKX19ZnVuY3Rpb24gQWUodCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9bW9bZV0sIWUpKXJldHVybiExO3QuZGlzcGxheS5wb2xsaW5nRmFzdCYmaGUodCkmJih0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEpO3ZhciBuPXQuZG9jLGk9bi5zZWwuc2hpZnQsbz0hMTt0cnl7Z2UodCkmJih0LnN0YXRlLnN1cHByZXNzRWRpdHM9ITApLHImJihuLnNlbC5zaGlmdD0hMSksbz1lKHQpIT1Bb31maW5hbGx5e24uc2VsLnNoaWZ0PWksdC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSExfXJldHVybiBvfWZ1bmN0aW9uIEhlKHQpe3ZhciBlPXQuc3RhdGUua2V5TWFwcy5zbGljZSgwKTtyZXR1cm4gdC5vcHRpb25zLmV4dHJhS2V5cyYmZS5wdXNoKHQub3B0aW9ucy5leHRyYUtleXMpLGUucHVzaCh0Lm9wdGlvbnMua2V5TWFwKSxlfWZ1bmN0aW9uIE5lKHQsZSl7dmFyIHI9Q3IodC5vcHRpb25zLmtleU1hcCksbj1yLmF1dG87Y2xlYXJUaW1lb3V0KG5vKSxuJiYhTHIoZSkmJihubz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Q3IodC5vcHRpb25zLmtleU1hcCk9PXImJih0Lm9wdGlvbnMua2V5TWFwPW4uY2FsbD9uLmNhbGwobnVsbCx0KTpuLGwodCkpfSw1MCkpO3ZhciBpPWtyKGUsITApLG89ITE7aWYoIWkpcmV0dXJuITE7dmFyIHM9SGUodCk7cmV0dXJuIG89ZS5zaGlmdEtleT93cigiU2hpZnQtIitpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KXx8d3IoaSxzLGZ1bmN0aW9uKGUpe3JldHVybigic3RyaW5nIj09dHlwZW9mIGU/L15nb1tBLVpdLy50ZXN0KGUpOmUubW90aW9uKT9BZSh0LGUpOnZvaWQgMH0pOndyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4gQWUodCxlKX0pLG8mJih6bihlKSxEKHQpLE5pJiYoZS5vbGRLZXlDb2RlPWUua2V5Q29kZSxlLmtleUNvZGU9MCksVW4odCwia2V5SGFuZGxlZCIsdCxpLGUpKSxvfWZ1bmN0aW9uIERlKHQsZSxyKXt2YXIgbj13cigiJyIrcisiJyIsSGUodCksZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KTtyZXR1cm4gbiYmKHpuKGUpLEQodCksVW4odCwia2V5SGFuZGxlZCIsdCwiJyIrcisiJyIsZSkpLG59ZnVuY3Rpb24gV2UodCl7dmFyIGU9dGhpcztpZihlLnN0YXRlLmZvY3VzZWR8fEVlKGUpLCEoWG4oZSx0KXx8ZS5vcHRpb25zLm9uS2V5RXZlbnQmJmUub3B0aW9ucy5vbktleUV2ZW50KGUsRW4odCkpKSl7QWkmJjI3PT10LmtleUNvZGUmJih0LnJldHVyblZhbHVlPSExKTt2YXIgcj10LmtleUNvZGU7ZS5kb2Muc2VsLnNoaWZ0PTE2PT1yfHx0LnNoaWZ0S2V5O3ZhciBuPU5lKGUsdCk7emkmJihvbz1uP3I6bnVsbCwhbiYmODg9PXImJiFGbyYmKEtpP3QubWV0YUtleTp0LmN0cmxLZXkpJiZlLnJlcGxhY2VTZWxlY3Rpb24oIiIpKX19ZnVuY3Rpb24gT2UodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe3ZhciByPXQua2V5Q29kZSxuPXQuY2hhckNvZGU7aWYoemkmJnI9PW9vKXJldHVybiBvbz1udWxsLHpuKHQpLHZvaWQgMDtpZighKHppJiYoIXQud2hpY2h8fHQud2hpY2g8MTApfHxGaSl8fCFOZShlLHQpKXt2YXIgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PW4/cjpuKTt0aGlzLm9wdGlvbnMuZWxlY3RyaWNDaGFycyYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzJiZ0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQmJiFnZSh0aGlzKSYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzLmluZGV4T2YoaSk+LTEmJnNldFRpbWVvdXQobGUoZSxmdW5jdGlvbigpe2hyKGUsZS5kb2Muc2VsLnRvLmxpbmUsInNtYXJ0Iil9KSw3NSksRGUoZSx0LGkpfHwoQWkmJiFOaSYmKGUuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSxmZShlKSl9fX1mdW5jdGlvbiBFZSh0KXsibm9jdXJzb3IiIT10Lm9wdGlvbnMucmVhZE9ubHkmJih0LnN0YXRlLmZvY3VzZWR8fChLbih0LCJmb2N1cyIsdCksdC5zdGF0ZS5mb2N1c2VkPSEwLC0xPT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNvZGVNaXJyb3ItZm9jdXNlZFxiLykmJih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci1mb2N1c2VkIiksdC5jdXJPcHx8KGRlKHQsITApLFdpJiZzZXRUaW1lb3V0KGlpKGRlLHQsITApLDApKSksY2UodCksRCh0KSl9ZnVuY3Rpb24gemUodCl7dC5zdGF0ZS5mb2N1c2VkJiYoS24odCwiYmx1ciIsdCksdC5zdGF0ZS5mb2N1c2VkPSExLHQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3ItZm9jdXNlZCIsIiIpKSxjbGVhckludGVydmFsKHQuZGlzcGxheS5ibGlua2VyKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zdGF0ZS5mb2N1c2VkfHwodC5kb2Muc2VsLnNoaWZ0PSExKX0sMTUwKX1mdW5jdGlvbiBJZSh0LGUpe2Z1bmN0aW9uIHIoKXtpZihudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXt2YXIgdD1pLmlucHV0LnZhbHVlPSLigIsiKyhqZShvLmZyb20sby50byk/IiI6aS5pbnB1dC52YWx1ZSk7aS5wcmV2SW5wdXQ9IuKAiyIsaS5pbnB1dC5zZWxlY3Rpb25TdGFydD0xLGkuaW5wdXQuc2VsZWN0aW9uRW5kPXQubGVuZ3RofX1mdW5jdGlvbiBuKCl7aWYoaS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGkuaW5wdXQuc3R5bGUuY3NzVGV4dD11LE5pJiYoaS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1pLnNjcm9sbGVyLnNjcm9sbFRvcD1zKSxjZSh0KSxudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXsoIUFpfHxOaSkmJnIoKSxjbGVhclRpbWVvdXQoaW8pO3ZhciBlPTAsbj1mdW5jdGlvbigpeyIgIj09aS5wcmV2SW5wdXQmJjA9PWkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ/bGUodCxtby5zZWxlY3RBbGwpKHQpOmUrKzwxMD9pbz1zZXRUaW1lb3V0KG4sNTAwKTpkZSh0KX07aW89c2V0VGltZW91dChuLDIwMCl9fWlmKCFYbih0LGUsImNvbnRleHRtZW51Iikpe3ZhciBpPXQuZGlzcGxheSxvPXQuZG9jLnNlbDtpZighdmUoaSxlKSYmIUNlKHQsZSkpe3ZhciBsPXllKHQsZSkscz1pLnNjcm9sbGVyLnNjcm9sbFRvcDtpZihsJiYhemkpe3ZhciBhPXQub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnU7YSYmKGplKG8uZnJvbSxvLnRvKXx8JGUobCxvLmZyb20pfHwhJGUobCxvLnRvKSkmJmxlKHQsbnIpKHQuZG9jLGwsbCk7dmFyIHU9aS5pbnB1dC5zdHlsZS5jc3NUZXh0O2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9wOiAiKyhlLmNsaWVudFktNSkrInB4OyBsZWZ0OiAiKyhlLmNsaWVudFgtNSkrInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgb3V0bGluZTogbm9uZTsiKyJib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgLW1zLW9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyIscGUodCksZGUodCwhMCksamUoby5mcm9tLG8udG8pJiYoaS5pbnB1dC52YWx1ZT1pLnByZXZJbnB1dD0iICIpLEFpJiYhTmkmJnIoKSxaaSl7UG4oZSk7dmFyIGM9ZnVuY3Rpb24oKXtWbih3aW5kb3csIm1vdXNldXAiLGMpLHNldFRpbWVvdXQobiwyMCl9O0duKHdpbmRvdywibW91c2V1cCIsYyl9ZWxzZSBzZXRUaW1lb3V0KG4sNTApfX19fWZ1bmN0aW9uIEZlKHQsZSxyKXtpZighJGUoZS5mcm9tLHIpKXJldHVybiBRZSh0LHIpO3ZhciBuPWUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKTtpZihyLmxpbmU+ZS50by5saW5lK24pe3ZhciBpPXIubGluZS1uLG89dC5maXJzdCt0LnNpemUtMTtyZXR1cm4gaT5vP1llKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCk6SmUocixnbih0LGkpLnRleHQubGVuZ3RoKX1pZihyLmxpbmU9PWUudG8ubGluZStuKXJldHVybiBKZShyLFFuKGUudGV4dCkubGVuZ3RoKygxPT1lLnRleHQubGVuZ3RoP2UuZnJvbS5jaDowKStnbih0LGUudG8ubGluZSkudGV4dC5sZW5ndGgtZS50by5jaCk7dmFyIGw9ci5saW5lLWUuZnJvbS5saW5lO3JldHVybiBKZShyLGUudGV4dFtsXS5sZW5ndGgrKGw/MDplLmZyb20uY2gpKX1mdW5jdGlvbiBQZSh0LGUscil7aWYociYmIm9iamVjdCI9PXR5cGVvZiByKXJldHVybnthbmNob3I6RmUodCxlLHIuYW5jaG9yKSxoZWFkOkZlKHQsZSxyLmhlYWQpfTtpZigic3RhcnQiPT1yKXJldHVybnthbmNob3I6ZS5mcm9tLGhlYWQ6ZS5mcm9tfTt2YXIgbj1sbyhlKTtpZigiYXJvdW5kIj09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOm59O2lmKCJlbmQiPT1yKXJldHVybnthbmNob3I6bixoZWFkOm59O3ZhciBpPWZ1bmN0aW9uKHQpe2lmKCRlKHQsZS5mcm9tKSlyZXR1cm4gdDtpZighJGUoZS50byx0KSlyZXR1cm4gbjt2YXIgcj10LmxpbmUrZS50ZXh0Lmxlbmd0aC0oZS50by5saW5lLWUuZnJvbS5saW5lKS0xLGk9dC5jaDtyZXR1cm4gdC5saW5lPT1lLnRvLmxpbmUmJihpKz1uLmNoLWUudG8uY2gpLFllKHIsaSl9O3JldHVybnthbmNob3I6aSh0LnNlbC5hbmNob3IpLGhlYWQ6aSh0LnNlbC5oZWFkKX19ZnVuY3Rpb24gUmUodCxlLHIpe3ZhciBuPXtjYW5jZWxlZDohMSxmcm9tOmUuZnJvbSx0bzplLnRvLHRleHQ6ZS50ZXh0LG9yaWdpbjplLm9yaWdpbixjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGVkPSEwfX07cmV0dXJuIHImJihuLnVwZGF0ZT1mdW5jdGlvbihlLHIsbixpKXtlJiYodGhpcy5mcm9tPVFlKHQsZSkpLHImJih0aGlzLnRvPVFlKHQscikpLG4mJih0aGlzLnRleHQ9biksdm9pZCAwIT09aSYmKHRoaXMub3JpZ2luPWkpfSksS24odCwiYmVmb3JlQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZUNoYW5nZSIsdC5jbSxuKSxuLmNhbmNlbGVkP251bGw6e2Zyb206bi5mcm9tLHRvOm4udG8sdGV4dDpuLnRleHQsb3JpZ2luOm4ub3JpZ2lufX1mdW5jdGlvbiBCZSh0LGUscixuKXtpZih0LmNtKXtpZighdC5jbS5jdXJPcClyZXR1cm4gbGUodC5jbSxCZSkodCxlLHIsbik7aWYodC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXJldHVybn1pZighKFluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSl8fChlPVJlKHQsZSwhMCkpKXt2YXIgaT1xaSYmIW4mJkZyKHQsZS5mcm9tLGUudG8pO2lmKGkpe2Zvcih2YXIgbz1pLmxlbmd0aC0xO28+PTE7LS1vKUdlKHQse2Zyb206aVtvXS5mcm9tLHRvOmlbb10udG8sdGV4dDpbIiJdfSk7aS5sZW5ndGgmJkdlKHQse2Zyb206aVswXS5mcm9tLHRvOmlbMF0udG8sdGV4dDplLnRleHR9LHIpfWVsc2UgR2UodCxlLHIpfX1mdW5jdGlvbiBHZSh0LGUscil7aWYoMSE9ZS50ZXh0Lmxlbmd0aHx8IiIhPWUudGV4dFswXXx8IWplKGUuZnJvbSxlLnRvKSl7dmFyIG49UGUodCxlLHIpO01uKHQsZSxuLHQuY20/dC5jbS5jdXJPcC5pZDowLzApLFVlKHQsZSxuLHpyKHQsZSkpO3ZhciBpPVtdO2RuKHQsZnVuY3Rpb24odCxyKXtyfHwtMSE9dGkoaSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LGUpLGkucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LGUsbnVsbCx6cih0LGUpKX0pfX1mdW5jdGlvbiBWZSh0LGUpe2lmKCF0LmNtfHwhdC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXt2YXIgcj10Lmhpc3Rvcnksbj0oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkucG9wKCk7aWYobil7dmFyIGk9e2NoYW5nZXM6W10sYW5jaG9yQmVmb3JlOm4uYW5jaG9yQWZ0ZXIsaGVhZEJlZm9yZTpuLmhlYWRBZnRlcixhbmNob3JBZnRlcjpuLmFuY2hvckJlZm9yZSxoZWFkQWZ0ZXI6bi5oZWFkQmVmb3JlLGdlbmVyYXRpb246ci5nZW5lcmF0aW9ufTsoInVuZG8iPT1lP3IudW5kb25lOnIuZG9uZSkucHVzaChpKSxyLmdlbmVyYXRpb249bi5nZW5lcmF0aW9ufHwrK3IubWF4R2VuZXJhdGlvbjtmb3IodmFyIG89WW4odCwiYmVmb3JlQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZUNoYW5nZSIpLGw9bi5jaGFuZ2VzLmxlbmd0aC0xO2w+PTA7LS1sKXt2YXIgcz1uLmNoYW5nZXNbbF07aWYocy5vcmlnaW49ZSxvJiYhUmUodCxzLCExKSlyZXR1cm4oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkubGVuZ3RoPTAsdm9pZCAwO2kuY2hhbmdlcy5wdXNoKFNuKHQscykpO3ZhciBhPWw/UGUodCxzLG51bGwpOnthbmNob3I6bi5hbmNob3JCZWZvcmUsaGVhZDpuLmhlYWRCZWZvcmV9O1VlKHQscyxhLElyKHQscykpO3ZhciB1PVtdO2RuKHQsZnVuY3Rpb24odCxlKXtlfHwtMSE9dGkodSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LHMpLHUucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LHMsbnVsbCxJcih0LHMpKX0pfX19fWZ1bmN0aW9uIEtlKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gWWUodC5saW5lK2UsdC5jaCl9dC5maXJzdCs9ZSx0LmNtJiZ1ZSh0LmNtLHQuZmlyc3QsdC5maXJzdCxlKSx0LnNlbC5oZWFkPXIodC5zZWwuaGVhZCksdC5zZWwuYW5jaG9yPXIodC5zZWwuYW5jaG9yKSx0LnNlbC5mcm9tPXIodC5zZWwuZnJvbSksdC5zZWwudG89cih0LnNlbC50byl9ZnVuY3Rpb24gVWUodCxlLHIsbil7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVWUpKHQsZSxyLG4pO2lmKGUudG8ubGluZTx0LmZpcnN0KXJldHVybiBLZSh0LGUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKSksdm9pZCAwO2lmKCEoZS5mcm9tLmxpbmU+dC5sYXN0TGluZSgpKSl7aWYoZS5mcm9tLmxpbmU8dC5maXJzdCl7dmFyIGk9ZS50ZXh0Lmxlbmd0aC0xLSh0LmZpcnN0LWUuZnJvbS5saW5lKTtLZSh0LGkpLGU9e2Zyb206WWUodC5maXJzdCwwKSx0bzpZZShlLnRvLmxpbmUraSxlLnRvLmNoKSx0ZXh0OltRbihlLnRleHQpXSxvcmlnaW46ZS5vcmlnaW59fXZhciBvPXQubGFzdExpbmUoKTtlLnRvLmxpbmU+byYmKGU9e2Zyb206ZS5mcm9tLHRvOlllKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCksdGV4dDpbZS50ZXh0WzBdXSxvcmlnaW46ZS5vcmlnaW59KSxlLnJlbW92ZWQ9bW4odCxlLmZyb20sZS50bykscnx8KHI9UGUodCxlLG51bGwpKSx0LmNtP1hlKHQuY20sZSxuLHIpOmNuKHQsZSxuLHIpfX1mdW5jdGlvbiBYZSh0LGUscixuKXt2YXIgbz10LmRvYyxsPXQuZGlzcGxheSxzPWUuZnJvbSxhPWUudG8sdT0hMSxmPXMubGluZTt0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoZj1ibihHcihvLGduKG8scy5saW5lKSkpLG8uaXRlcihmLGEubGluZSsxLGZ1bmN0aW9uKHQpe3JldHVybiB0PT1sLm1heExpbmU/KHU9ITAsITApOnZvaWQgMH0pKSwkZShvLnNlbC5oZWFkLGUuZnJvbSl8fCRlKGUudG8sby5zZWwuaGVhZCl8fCh0LmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxjbihvLGUscixuLGkodCkpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fChvLml0ZXIoZixzLmxpbmUrZS50ZXh0Lmxlbmd0aCxmdW5jdGlvbih0KXt2YXIgZT1jKG8sdCk7ZT5sLm1heExpbmVMZW5ndGgmJihsLm1heExpbmU9dCxsLm1heExpbmVMZW5ndGg9ZSxsLm1heExpbmVDaGFuZ2VkPSEwLHU9ITEpfSksdSYmKHQuY3VyT3AudXBkYXRlTWF4TGluZT0hMCkpLG8uZnJvbnRpZXI9TWF0aC5taW4oby5mcm9udGllcixzLmxpbmUpLFcodCw0MDApO3ZhciBoPWUudGV4dC5sZW5ndGgtKGEubGluZS1zLmxpbmUpLTE7aWYodWUodCxzLmxpbmUsYS5saW5lKzEsaCksWW4odCwiY2hhbmdlIikpe3ZhciBkPXtmcm9tOnMsdG86YSx0ZXh0OmUudGV4dCxyZW1vdmVkOmUucmVtb3ZlZCxvcmlnaW46ZS5vcmlnaW59O2lmKHQuY3VyT3AudGV4dENoYW5nZWQpe2Zvcih2YXIgcD10LmN1ck9wLnRleHRDaGFuZ2VkO3AubmV4dDtwPXAubmV4dCk7cC5uZXh0PWR9ZWxzZSB0LmN1ck9wLnRleHRDaGFuZ2VkPWR9fWZ1bmN0aW9uIF9lKHQsZSxyLG4saSl7aWYobnx8KG49ciksJGUobixyKSl7dmFyIG89bjtuPXIscj1vfSJzdHJpbmciPT10eXBlb2YgZSYmKGU9em8oZSkpLEJlKHQse2Zyb206cix0bzpuLHRleHQ6ZSxvcmlnaW46aX0sbnVsbCl9ZnVuY3Rpb24gWWUodCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFllPyh0aGlzLmxpbmU9dCx0aGlzLmNoPWUsdm9pZCAwKTpuZXcgWWUodCxlKX1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiB0LmxpbmU9PWUubGluZSYmdC5jaD09ZS5jaH1mdW5jdGlvbiAkZSh0LGUpe3JldHVybiB0LmxpbmU8ZS5saW5lfHx0LmxpbmU9PWUubGluZSYmdC5jaDxlLmNofWZ1bmN0aW9uIFplKHQpe3JldHVybiBZZSh0LmxpbmUsdC5jaCl9ZnVuY3Rpb24gcWUodCxlKXtyZXR1cm4gTWF0aC5tYXgodC5maXJzdCxNYXRoLm1pbihlLHQuZmlyc3QrdC5zaXplLTEpKX1mdW5jdGlvbiBRZSh0LGUpe2lmKGUubGluZTx0LmZpcnN0KXJldHVybiBZZSh0LmZpcnN0LDApO3ZhciByPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGUubGluZT5yP1llKHIsZ24odCxyKS50ZXh0Lmxlbmd0aCk6SmUoZSxnbih0LGUubGluZSkudGV4dC5sZW5ndGgpfWZ1bmN0aW9uIEplKHQsZSl7dmFyIHI9dC5jaDtyZXR1cm4gbnVsbD09cnx8cj5lP1llKHQubGluZSxlKTowPnI/WWUodC5saW5lLDApOnR9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gZT49dC5maXJzdCYmZTx0LmZpcnN0K3Quc2l6ZX1mdW5jdGlvbiBlcih0LGUscixuKXtpZih0LnNlbC5zaGlmdHx8dC5zZWwuZXh0ZW5kKXt2YXIgaT10LnNlbC5hbmNob3I7aWYocil7dmFyIG89JGUoZSxpKTtvIT0kZShyLGkpPyhpPWUsZT1yKTpvIT0kZShlLHIpJiYoZT1yKX1ucih0LGksZSxuKX1lbHNlIG5yKHQsZSxyfHxlLG4pO3QuY20mJih0LmNtLmN1ck9wLnVzZXJTZWxDaGFuZ2U9ITApfWZ1bmN0aW9uIHJyKHQsZSxyKXt2YXIgbj17YW5jaG9yOmUsaGVhZDpyfTtyZXR1cm4gS24odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdC5jbSxuKSxuLmFuY2hvcj1RZSh0LG4uYW5jaG9yKSxuLmhlYWQ9UWUodCxuLmhlYWQpLG59ZnVuY3Rpb24gbnIodCxlLHIsbixpKXtpZighaSYmWW4odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpKXt2YXIgbz1ycih0LGUscik7cj1vLmhlYWQsZT1vLmFuY2hvcn12YXIgbD10LnNlbDtpZihsLmdvYWxDb2x1bW49bnVsbCxudWxsPT1uJiYobj0kZShyLGwuaGVhZCk/LTE6MSksKGl8fCFqZShlLGwuYW5jaG9yKSkmJihlPW9yKHQsZSxuLCJwdXNoIiE9aSkpLChpfHwhamUocixsLmhlYWQpKSYmKHI9b3IodCxyLG4sInB1c2giIT1pKSksIWplKGwuYW5jaG9yLGUpfHwhamUobC5oZWFkLHIpKXtsLmFuY2hvcj1lLGwuaGVhZD1yO3ZhciBzPSRlKHIsZSk7bC5mcm9tPXM/cjplLGwudG89cz9lOnIsdC5jbSYmKHQuY20uY3VyT3AudXBkYXRlSW5wdXQ9dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPXQuY20uY3VyT3AuY3Vyc29yQWN0aXZpdHk9ITApLFVuKHQsImN1cnNvckFjdGl2aXR5Iix0KX19ZnVuY3Rpb24gaXIodCl7bnIodC5kb2MsdC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvLG51bGwsInB1c2giKX1mdW5jdGlvbiBvcih0LGUscixuKXt2YXIgaT0hMSxvPWUsbD1yfHwxO3QuY2FudEVkaXQ9ITE7dDpmb3IoOzspe3ZhciBzPWduKHQsby5saW5lKTtpZihzLm1hcmtlZFNwYW5zKWZvcih2YXIgYT0wO2E8cy5tYXJrZWRTcGFucy5sZW5ndGg7KythKXt2YXIgdT1zLm1hcmtlZFNwYW5zW2FdLGM9dS5tYXJrZXI7aWYoKG51bGw9PXUuZnJvbXx8KGMuaW5jbHVzaXZlTGVmdD91LmZyb208PW8uY2g6dS5mcm9tPG8uY2gpKSYmKG51bGw9PXUudG98fChjLmluY2x1c2l2ZVJpZ2h0P3UudG8+PW8uY2g6dS50bz5vLmNoKSkpe2lmKG4mJihLbihjLCJiZWZvcmVDdXJzb3JFbnRlciIpLGMuZXhwbGljaXRseUNsZWFyZWQpKXtpZihzLm1hcmtlZFNwYW5zKXstLWE7Y29udGludWV9YnJlYWt9aWYoIWMuYXRvbWljKWNvbnRpbnVlO3ZhciBmPWMuZmluZCgpWzA+bD8iZnJvbSI6InRvIl07aWYoamUoZixvKSYmKGYuY2grPWwsZi5jaDwwP2Y9Zi5saW5lPnQuZmlyc3Q/UWUodCxZZShmLmxpbmUtMSkpOm51bGw6Zi5jaD5zLnRleHQubGVuZ3RoJiYoZj1mLmxpbmU8dC5maXJzdCt0LnNpemUtMT9ZZShmLmxpbmUrMSwwKTpudWxsKSwhZikpe2lmKGkpcmV0dXJuIG4/KHQuY2FudEVkaXQ9ITAsWWUodC5maXJzdCwwKSk6b3IodCxlLHIsITApO2k9ITAsZj1lLGw9LWx9bz1mO2NvbnRpbnVlIHR9fXJldHVybiBvfX1mdW5jdGlvbiBscih0KXt2YXIgZT1zcih0LHQuZG9jLnNlbC5oZWFkLG51bGwsdC5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbik7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgcj10LmRpc3BsYXksbj1maShyLnNpemVyKSxpPW51bGw7aWYoZS50b3Arbi50b3A8MD9pPSEwOmUuYm90dG9tK24udG9wPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoaT0hMSksbnVsbCE9aSYmIUJpKXt2YXIgbz0ibm9uZSI9PXIuY3Vyc29yLnN0eWxlLmRpc3BsYXk7byYmKHIuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5jdXJzb3Iuc3R5bGUubGVmdD1lLmxlZnQrInB4IixyLmN1cnNvci5zdHlsZS50b3A9ZS50b3Atci52aWV3T2Zmc2V0KyJweCIpLHIuY3Vyc29yLnNjcm9sbEludG9WaWV3KGkpLG8mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIil9fX1mdW5jdGlvbiBzcih0LGUscixuKXtmb3IobnVsbD09biYmKG49MCk7Oyl7dmFyIGk9ITEsbz1RKHQsZSksbD1yJiZyIT1lP1EodCxyKTpvLHM9dXIodCxNYXRoLm1pbihvLmxlZnQsbC5sZWZ0KSxNYXRoLm1pbihvLnRvcCxsLnRvcCktbixNYXRoLm1heChvLmxlZnQsbC5sZWZ0KSxNYXRoLm1heChvLmJvdHRvbSxsLmJvdHRvbSkrbiksYT10LmRvYy5zY3JvbGxUb3AsdT10LmRvYy5zY3JvbGxMZWZ0O2lmKG51bGwhPXMuc2Nyb2xsVG9wJiYoU2UodCxzLnNjcm9sbFRvcCksTWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWEpPjEmJihpPSEwKSksbnVsbCE9cy5zY3JvbGxMZWZ0JiYoTWUodCxzLnNjcm9sbExlZnQpLE1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtdSk+MSYmKGk9ITApKSwhaSlyZXR1cm4gb319ZnVuY3Rpb24gYXIodCxlLHIsbixpKXt2YXIgbz11cih0LGUscixuLGkpO251bGwhPW8uc2Nyb2xsVG9wJiZTZSh0LG8uc2Nyb2xsVG9wKSxudWxsIT1vLnNjcm9sbExlZnQmJk1lKHQsby5zY3JvbGxMZWZ0KX1mdW5jdGlvbiB1cih0LGUscixuLGkpe3ZhciBvPXQuZGlzcGxheSxsPXJlKHQuZGlzcGxheSk7MD5yJiYocj0wKTt2YXIgcz1vLnNjcm9sbGVyLmNsaWVudEhlaWdodC1UbyxhPW8uc2Nyb2xsZXIuc2Nyb2xsVG9wLHU9e30sYz10LmRvYy5oZWlnaHQrRihvKSxmPWw+cixoPWk+Yy1sO2lmKGE+cil1LnNjcm9sbFRvcD1mPzA6cjtlbHNlIGlmKGk+YStzKXt2YXIgZD1NYXRoLm1pbihyLChoP2M6aSktcyk7ZCE9YSYmKHUuc2Nyb2xsVG9wPWQpfXZhciBwPW8uc2Nyb2xsZXIuY2xpZW50V2lkdGgtVG8sZz1vLnNjcm9sbGVyLnNjcm9sbExlZnQ7ZSs9by5ndXR0ZXJzLm9mZnNldFdpZHRoLG4rPW8uZ3V0dGVycy5vZmZzZXRXaWR0aDt2YXIgbT1vLmd1dHRlcnMub2Zmc2V0V2lkdGgsdj1tKzEwPmU7cmV0dXJuIGcrbT5lfHx2Pyh2JiYoZT0wKSx1LnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxlLTEwLW0pKTpuPnArZy0zJiYodS5zY3JvbGxMZWZ0PW4rMTAtcCksdX1mdW5jdGlvbiBjcih0LGUscil7dC5jdXJPcC51cGRhdGVTY3JvbGxQb3M9e3Njcm9sbExlZnQ6bnVsbD09ZT90LmRvYy5zY3JvbGxMZWZ0OmUsc2Nyb2xsVG9wOm51bGw9PXI/dC5kb2Muc2Nyb2xsVG9wOnJ9fWZ1bmN0aW9uIGZyKHQsZSxyKXt2YXIgbj10LmN1ck9wLnVwZGF0ZVNjcm9sbFBvc3x8KHQuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0OnQuZG9jLnNjcm9sbExlZnQsc2Nyb2xsVG9wOnQuZG9jLnNjcm9sbFRvcH0pLGk9dC5kaXNwbGF5LnNjcm9sbGVyO24uc2Nyb2xsVG9wPU1hdGgubWF4KDAsTWF0aC5taW4oaS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQsbi5zY3JvbGxUb3ArcikpLG4uc2Nyb2xsTGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aCxuLnNjcm9sbExlZnQrZSkpfWZ1bmN0aW9uIGhyKHQsZSxyLG4pe3ZhciBpPXQuZG9jO2lmKG51bGw9PXImJihyPSJhZGQiKSwic21hcnQiPT1yKWlmKHQuZG9jLm1vZGUuaW5kZW50KXZhciBvPXoodCxlKTtlbHNlIHI9InByZXYiO3ZhciBsLHM9dC5vcHRpb25zLnRhYlNpemUsYT1nbihpLGUpLHU9Wm4oYS50ZXh0LG51bGwscyksYz1hLnRleHQubWF0Y2goL15ccyovKVswXTtpZigic21hcnQiPT1yJiYobD10LmRvYy5tb2RlLmluZGVudChvLGEudGV4dC5zbGljZShjLmxlbmd0aCksYS50ZXh0KSxsPT1Bbykpe2lmKCFuKXJldHVybjtyPSJwcmV2In0icHJldiI9PXI/bD1lPmkuZmlyc3Q/Wm4oZ24oaSxlLTEpLnRleHQsbnVsbCxzKTowOiJhZGQiPT1yP2w9dSt0Lm9wdGlvbnMuaW5kZW50VW5pdDoic3VidHJhY3QiPT1yP2w9dS10Lm9wdGlvbnMuaW5kZW50VW5pdDoibnVtYmVyIj09dHlwZW9mIHImJihsPXUrciksbD1NYXRoLm1heCgwLGwpO3ZhciBmPSIiLGg9MDtpZih0Lm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpZm9yKHZhciBkPU1hdGguZmxvb3IobC9zKTtkOy0tZCloKz1zLGYrPSIJIjtsPmgmJihmKz1xbihsLWgpKSxmIT1jP19lKHQuZG9jLGYsWWUoZSwwKSxZZShlLGMubGVuZ3RoKSwiK2lucHV0Iik6aS5zZWwuaGVhZC5saW5lPT1lJiZpLnNlbC5oZWFkLmNoPGMubGVuZ3RoJiZucihpLFllKGUsYy5sZW5ndGgpLFllKGUsYy5sZW5ndGgpLDEpLGEuc3RhdGVBZnRlcj1udWxsfWZ1bmN0aW9uIGRyKHQsZSxyKXt2YXIgbj1lLGk9ZSxvPXQuZG9jO3JldHVybiJudW1iZXIiPT10eXBlb2YgZT9pPWduKG8scWUobyxlKSk6bj1ibihlKSxudWxsPT1uP251bGw6cihpLG4pPyh1ZSh0LG4sbisxKSxpKTpudWxsfWZ1bmN0aW9uIHByKHQsZSxyLG4saSl7ZnVuY3Rpb24gbygpe3ZhciBlPXMrcjtyZXR1cm4gZTx0LmZpcnN0fHxlPj10LmZpcnN0K3Quc2l6ZT9mPSExOihzPWUsYz1nbih0LGUpKX1mdW5jdGlvbiBsKHQpe3ZhciBlPShpP1NpOk1pKShjLGEsciwhMCk7aWYobnVsbD09ZSl7aWYodHx8IW8oKSlyZXR1cm4gZj0hMTthPWk/KDA+cj9iaTp5aSkoYyk6MD5yP2MudGV4dC5sZW5ndGg6MH1lbHNlIGE9ZTtyZXR1cm4hMH12YXIgcz1lLmxpbmUsYT1lLmNoLHU9cixjPWduKHQscyksZj0hMDtpZigiY2hhciI9PW4pbCgpO2Vsc2UgaWYoImNvbHVtbiI9PW4pbCghMCk7ZWxzZSBpZigid29yZCI9PW58fCJncm91cCI9PW4pZm9yKHZhciBoPW51bGwsZD0iZ3JvdXAiPT1uLHA9ITA7ISgwPnIpfHxsKCFwKTtwPSExKXt2YXIgZz1jLnRleHQuY2hhckF0KGEpfHwiXG4iLG09b2koZyk/InciOmQ/L1xzLy50ZXN0KGcpP251bGw6InAiOm51bGw7aWYoaCYmaCE9bSl7MD5yJiYocj0xLGwoKSk7YnJlYWt9aWYobSYmKGg9bSkscj4wJiYhbCghcCkpYnJlYWt9dmFyIHY9b3IodCxZZShzLGEpLHUsITApO3JldHVybiBmfHwodi5oaXRTaWRlPSEwKSx2fWZ1bmN0aW9uIGdyKHQsZSxyLG4pe3ZhciBpLG89dC5kb2MsbD1lLmxlZnQ7aWYoInBhZ2UiPT1uKXt2YXIgcz1NYXRoLm1pbih0LmRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsd2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTtpPWUudG9wK3IqKHMtKDA+cj8xLjU6LjUpKnJlKHQuZGlzcGxheSkpfWVsc2UibGluZSI9PW4mJihpPXI+MD9lLmJvdHRvbSszOmUudG9wLTMpO2Zvcig7Oyl7dmFyIGE9dGUodCxsLGkpO2lmKCFhLm91dHNpZGUpYnJlYWs7aWYoMD5yPzA+PWk6aT49by5oZWlnaHQpe2EuaGl0U2lkZT0hMDticmVha31pKz01KnJ9cmV0dXJuIGF9ZnVuY3Rpb24gbXIodCxlKXt2YXIgcj1lLmNoLG49ZS5jaDtpZih0KXsoZS54UmVsPDB8fG49PXQubGVuZ3RoKSYmcj8tLXI6KytuO2Zvcih2YXIgaT10LmNoYXJBdChyKSxvPW9pKGkpP29pOi9ccy8udGVzdChpKT9mdW5jdGlvbih0KXtyZXR1cm4vXHMvLnRlc3QodCl9OmZ1bmN0aW9uKHQpe3JldHVybiEvXHMvLnRlc3QodCkmJiFvaSh0KX07cj4wJiZvKHQuY2hhckF0KHItMSkpOyktLXI7Zm9yKDtuPHQubGVuZ3RoJiZvKHQuY2hhckF0KG4pKTspKytufXJldHVybntmcm9tOlllKGUubGluZSxyKSx0bzpZZShlLmxpbmUsbil9fWZ1bmN0aW9uIHZyKHQsZSl7ZXIodC5kb2MsWWUoZSwwKSxRZSh0LmRvYyxZZShlKzEsMCkpKX1mdW5jdGlvbiB5cihlLHIsbixpKXt0LmRlZmF1bHRzW2VdPXIsbiYmKHNvW2VdPWk/ZnVuY3Rpb24odCxlLHIpe3IhPXVvJiZuKHQsZSxyKX06bil9ZnVuY3Rpb24gYnIodCxlKXtpZihlPT09ITApcmV0dXJuIGU7aWYodC5jb3B5U3RhdGUpcmV0dXJuIHQuY29weVN0YXRlKGUpO3ZhciByPXt9O2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dO2kgaW5zdGFuY2VvZiBBcnJheSYmKGk9aS5jb25jYXQoW10pKSxyW25dPWl9cmV0dXJuIHJ9ZnVuY3Rpb24geHIodCxlLHIpe3JldHVybiB0LnN0YXJ0U3RhdGU/dC5zdGFydFN0YXRlKGUscik6ITB9ZnVuY3Rpb24gQ3IodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3ZvW3RdOnR9ZnVuY3Rpb24gd3IodCxlLHIpe2Z1bmN0aW9uIG4oZSl7ZT1DcihlKTt2YXIgaT1lW3RdO2lmKGk9PT0hMSlyZXR1cm4ic3RvcCI7aWYobnVsbCE9aSYmcihpKSlyZXR1cm4hMDtpZihlLm5vZmFsbHRocm91Z2gpcmV0dXJuInN0b3AiO3ZhciBvPWUuZmFsbHRocm91Z2g7aWYobnVsbD09bylyZXR1cm4hMTtpZigiW29iamVjdCBBcnJheV0iIT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpcmV0dXJuIG4obyk7Zm9yKHZhciBsPTAscz1vLmxlbmd0aDtzPmw7KytsKXt2YXIgYT1uKG9bbF0pO2lmKGEpcmV0dXJuIGF9cmV0dXJuITF9Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBvPW4oZVtpXSk7aWYobylyZXR1cm4ic3RvcCIhPW99fWZ1bmN0aW9uIExyKHQpe3ZhciBlPVBvW3Qua2V5Q29kZV07cmV0dXJuIkN0cmwiPT1lfHwiQWx0Ij09ZXx8IlNoaWZ0Ij09ZXx8Ik1vZCI9PWV9ZnVuY3Rpb24ga3IodCxlKXtpZih6aSYmMzQ9PXQua2V5Q29kZSYmdFsiY2hhciJdKXJldHVybiExO3ZhciByPVBvW3Qua2V5Q29kZV07cmV0dXJuIG51bGw9PXJ8fHQuYWx0R3JhcGhLZXk/ITE6KHQuYWx0S2V5JiYocj0iQWx0LSIrciksKCRpP3QubWV0YUtleTp0LmN0cmxLZXkpJiYocj0iQ3RybC0iK3IpLCgkaT90LmN0cmxLZXk6dC5tZXRhS2V5KSYmKHI9IkNtZC0iK3IpLCFlJiZ0LnNoaWZ0S2V5JiYocj0iU2hpZnQtIityKSxyKX1mdW5jdGlvbiBTcih0LGUpe3RoaXMucG9zPXRoaXMuc3RhcnQ9MCx0aGlzLnN0cmluZz10LHRoaXMudGFiU2l6ZT1lfHw4LHRoaXMubGFzdENvbHVtblBvcz10aGlzLmxhc3RDb2x1bW5WYWx1ZT0wfWZ1bmN0aW9uIE1yKHQsZSl7dGhpcy5saW5lcz1bXSx0aGlzLnR5cGU9ZSx0aGlzLmRvYz10fWZ1bmN0aW9uIFRyKHQsZSxyLG4saSl7aWYobiYmbi5zaGFyZWQpcmV0dXJuIEhyKHQsZSxyLG4saSk7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVHIpKHQsZSxyLG4saSk7dmFyIG89bmV3IE1yKHQsaSk7aWYoJGUocixlKXx8amUoZSxyKSYmInJhbmdlIj09aSYmKCFuLmluY2x1c2l2ZUxlZnR8fCFuLmluY2x1c2l2ZVJpZ2h0KSlyZXR1cm4gbztuJiZyaShuLG8pLG8ucmVwbGFjZWRXaXRoJiYoby5jb2xsYXBzZWQ9ITAsby5yZXBsYWNlZFdpdGg9c2koInNwYW4iLFtvLnJlcGxhY2VkV2l0aF0sIkNvZGVNaXJyb3Itd2lkZ2V0Iiksbi5oYW5kbGVNb3VzZUV2ZW50c3x8KG8ucmVwbGFjZWRXaXRoLmlnbm9yZUV2ZW50cz0hMCkpLG8uY29sbGFwc2VkJiYoUWk9ITApLG8uYWRkVG9IaXN0b3J5JiZNbih0LHtmcm9tOmUsdG86cixvcmlnaW46Im1hcmtUZXh0In0se2hlYWQ6dC5zZWwuaGVhZCxhbmNob3I6dC5zZWwuYW5jaG9yfSwwLzApO3ZhciBsLHMsYSx1PWUubGluZSxjPTAsZj10LmNtO2lmKHQuaXRlcih1LHIubGluZSsxLGZ1bmN0aW9uKG4pe2YmJm8uY29sbGFwc2VkJiYhZi5vcHRpb25zLmxpbmVXcmFwcGluZyYmR3IodCxuKT09Zi5kaXNwbGF5Lm1heExpbmUmJihhPSEwKTt2YXIgaT17ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOm99O2MrPW4udGV4dC5sZW5ndGgsdT09ZS5saW5lJiYoaS5mcm9tPWUuY2gsYy09ZS5jaCksdT09ci5saW5lJiYoaS50bz1yLmNoLGMtPW4udGV4dC5sZW5ndGgtci5jaCksby5jb2xsYXBzZWQmJih1PT1yLmxpbmUmJihzPVByKG4sci5jaCkpLHU9PWUubGluZT9sPVByKG4sZS5jaCk6eW4obiwwKSksV3IobixpKSwrK3V9KSxvLmNvbGxhcHNlZCYmdC5pdGVyKGUubGluZSxyLmxpbmUrMSxmdW5jdGlvbihlKXtWcih0LGUpJiZ5bihlLDApfSksby5jbGVhck9uRW50ZXImJkduKG8sImJlZm9yZUN1cnNvckVudGVyIixmdW5jdGlvbigpe28uY2xlYXIoKX0pLG8ucmVhZE9ubHkmJihxaT0hMCwodC5oaXN0b3J5LmRvbmUubGVuZ3RofHx0Lmhpc3RvcnkudW5kb25lLmxlbmd0aCkmJnQuY2xlYXJIaXN0b3J5KCkpLG8uY29sbGFwc2VkKXtpZihsIT1zKXRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7by5zaXplPWMsby5hdG9taWM9ITB9cmV0dXJuIGYmJihhJiYoZi5jdXJPcC51cGRhdGVNYXhMaW5lPSEwKSwoby5jbGFzc05hbWV8fG8udGl0bGV8fG8uc3RhcnRTdHlsZXx8by5lbmRTdHlsZXx8by5jb2xsYXBzZWQpJiZ1ZShmLGUubGluZSxyLmxpbmUrMSksby5hdG9taWMmJmlyKGYpKSxvfWZ1bmN0aW9uIEFyKHQsZSl7dGhpcy5tYXJrZXJzPXQsdGhpcy5wcmltYXJ5PWU7Zm9yKHZhciByPTAsbj10aGlzO3I8dC5sZW5ndGg7KytyKXRbcl0ucGFyZW50PXRoaXMsR24odFtyXSwiY2xlYXIiLGZ1bmN0aW9uKCl7bi5jbGVhcigpfSl9ZnVuY3Rpb24gSHIodCxlLHIsbixpKXtuPXJpKG4pLG4uc2hhcmVkPSExO3ZhciBvPVtUcih0LGUscixuLGkpXSxsPW9bMF0scz1uLnJlcGxhY2VkV2l0aDtyZXR1cm4gZG4odCxmdW5jdGlvbih0KXtzJiYobi5yZXBsYWNlZFdpdGg9cy5jbG9uZU5vZGUoITApKSxvLnB1c2goVHIodCxRZSh0LGUpLFFlKHQsciksbixpKSk7Zm9yKHZhciBhPTA7YTx0LmxpbmtlZC5sZW5ndGg7KythKWlmKHQubGlua2VkW2FdLmlzUGFyZW50KXJldHVybjtsPVFuKG8pfSksbmV3IEFyKG8sbCl9ZnVuY3Rpb24gTnIodCxlKXtpZih0KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2lmKG4ubWFya2VyPT1lKXJldHVybiBufX1mdW5jdGlvbiBEcih0LGUpe2Zvcih2YXIgcixuPTA7bjx0Lmxlbmd0aDsrK24pdFtuXSE9ZSYmKHJ8fChyPVtdKSkucHVzaCh0W25dKTtyZXR1cm4gcn1mdW5jdGlvbiBXcih0LGUpe3QubWFya2VkU3BhbnM9dC5tYXJrZWRTcGFucz90Lm1hcmtlZFNwYW5zLmNvbmNhdChbZV0pOltlXSxlLm1hcmtlci5hdHRhY2hMaW5lKHQpfWZ1bmN0aW9uIE9yKHQsZSxyKXtpZih0KWZvcih2YXIgbixpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBvPXRbaV0sbD1vLm1hcmtlcixzPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpO2lmKHN8fChsLmluY2x1c2l2ZUxlZnQmJmwuaW5jbHVzaXZlUmlnaHR8fCJib29rbWFyayI9PWwudHlwZSkmJm8uZnJvbT09ZSYmKCFyfHwhby5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8udG98fChsLmluY2x1c2l2ZVJpZ2h0P28udG8+PWU6by50bz5lKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOm8uZnJvbSx0bzphP251bGw6by50byxtYXJrZXI6bH0pfX1yZXR1cm4gbn1mdW5jdGlvbiBFcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7aWYoc3x8ImJvb2ttYXJrIj09bC50eXBlJiZvLmZyb209PWUmJighcnx8by5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpOyhufHwobj1bXSkpLnB1c2goe2Zyb206YT9udWxsOm8uZnJvbS1lLHRvOm51bGw9PW8udG8/bnVsbDpvLnRvLWUsbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24genIodCxlKXt2YXIgcj10cih0LGUuZnJvbS5saW5lKSYmZ24odCxlLmZyb20ubGluZSkubWFya2VkU3BhbnMsbj10cih0LGUudG8ubGluZSkmJmduKHQsZS50by5saW5lKS5tYXJrZWRTcGFucztpZighciYmIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5mcm9tLmNoLG89ZS50by5jaCxsPWplKGUuZnJvbSxlLnRvKSxzPU9yKHIsaSxsKSxhPUVyKG4sbyxsKSx1PTE9PWUudGV4dC5sZW5ndGgsYz1RbihlLnRleHQpLmxlbmd0aCsodT9pOjApO2lmKHMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2Ype3ZhciBoPXNbZl07aWYobnVsbD09aC50byl7dmFyIGQ9TnIoYSxoLm1hcmtlcik7ZD91JiYoaC50bz1udWxsPT1kLnRvP251bGw6ZC50bytjKTpoLnRvPWl9fWlmKGEpZm9yKHZhciBmPTA7ZjxhLmxlbmd0aDsrK2Ype3ZhciBoPWFbZl07aWYobnVsbCE9aC50byYmKGgudG8rPWMpLG51bGw9PWguZnJvbSl7dmFyIGQ9TnIocyxoLm1hcmtlcik7ZHx8KGguZnJvbT1jLHUmJihzfHwocz1bXSkpLnB1c2goaCkpfWVsc2UgaC5mcm9tKz1jLHUmJihzfHwocz1bXSkpLnB1c2goaCl9aWYodSYmcyl7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbCE9c1tmXS5mcm9tJiZzW2ZdLmZyb209PXNbZl0udG8mJiJib29rbWFyayIhPXNbZl0ubWFya2VyLnR5cGUmJnMuc3BsaWNlKGYtLSwxKTtzLmxlbmd0aHx8KHM9bnVsbCl9dmFyIHA9W3NdO2lmKCF1KXt2YXIgZyxtPWUudGV4dC5sZW5ndGgtMjtpZihtPjAmJnMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbD09c1tmXS50byYmKGd8fChnPVtdKSkucHVzaCh7ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOnNbZl0ubWFya2VyfSk7Zm9yKHZhciBmPTA7bT5mOysrZilwLnB1c2goZyk7cC5wdXNoKGEpfXJldHVybiBwfWZ1bmN0aW9uIElyKHQsZSl7dmFyIHI9QW4odCxlKSxuPXpyKHQsZSk7aWYoIXIpcmV0dXJuIG47aWYoIW4pcmV0dXJuIHI7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBvPXJbaV0sbD1uW2ldO2lmKG8mJmwpdDpmb3IodmFyIHM9MDtzPGwubGVuZ3RoOysrcyl7Zm9yKHZhciBhPWxbc10sdT0wO3U8by5sZW5ndGg7Kyt1KWlmKG9bdV0ubWFya2VyPT1hLm1hcmtlciljb250aW51ZSB0O28ucHVzaChhKX1lbHNlIGwmJihyW2ldPWwpfXJldHVybiByfWZ1bmN0aW9uIEZyKHQsZSxyKXt2YXIgbj1udWxsO2lmKHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7aWYodC5tYXJrZWRTcGFucylmb3IodmFyIGU9MDtlPHQubWFya2VkU3BhbnMubGVuZ3RoOysrZSl7dmFyIHI9dC5tYXJrZWRTcGFuc1tlXS5tYXJrZXI7IXIucmVhZE9ubHl8fG4mJi0xIT10aShuLHIpfHwobnx8KG49W10pKS5wdXNoKHIpfX0pLCFuKXJldHVybiBudWxsO2Zvcih2YXIgaT1be2Zyb206ZSx0bzpyfV0sbz0wO288bi5sZW5ndGg7KytvKWZvcih2YXIgbD1uW29dLHM9bC5maW5kKCksYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgdT1pW2FdO2lmKCEkZSh1LnRvLHMuZnJvbSkmJiEkZShzLnRvLHUuZnJvbSkpe3ZhciBjPVthLDFdOygkZSh1LmZyb20scy5mcm9tKXx8IWwuaW5jbHVzaXZlTGVmdCYmamUodS5mcm9tLHMuZnJvbSkpJiZjLnB1c2goe2Zyb206dS5mcm9tLHRvOnMuZnJvbX0pLCgkZShzLnRvLHUudG8pfHwhbC5pbmNsdXNpdmVSaWdodCYmamUodS50byxzLnRvKSkmJmMucHVzaCh7ZnJvbTpzLnRvLHRvOnUudG99KSxpLnNwbGljZS5hcHBseShpLGMpLGErPWMubGVuZ3RoLTF9fXJldHVybiBpfWZ1bmN0aW9uIFByKHQsZSl7dmFyIHIsbj1RaSYmdC5tYXJrZWRTcGFucztpZihuKWZvcih2YXIgaSxvPTA7bzxuLmxlbmd0aDsrK28paT1uW29dLGkubWFya2VyLmNvbGxhcHNlZCYmKG51bGw9PWkuZnJvbXx8aS5mcm9tPGUpJiYobnVsbD09aS50b3x8aS50bz5lKSYmKCFyfHxyLndpZHRoPGkubWFya2VyLndpZHRoKSYmKHI9aS5tYXJrZXIpO3JldHVybiByfWZ1bmN0aW9uIFJyKHQpe3JldHVybiBQcih0LC0xKX1mdW5jdGlvbiBCcih0KXtyZXR1cm4gUHIodCx0LnRleHQubGVuZ3RoKzEpfWZ1bmN0aW9uIEdyKHQsZSl7Zm9yKHZhciByO3I9UnIoZSk7KWU9Z24odCxyLmZpbmQoKS5mcm9tLmxpbmUpO3JldHVybiBlfWZ1bmN0aW9uIFZyKHQsZSl7dmFyIHI9UWkmJmUubWFya2VkU3BhbnM7aWYocilmb3IodmFyIG4saT0wO2k8ci5sZW5ndGg7KytpKWlmKG49cltpXSxuLm1hcmtlci5jb2xsYXBzZWQpe2lmKG51bGw9PW4uZnJvbSlyZXR1cm4hMDtpZighbi5tYXJrZXIucmVwbGFjZWRXaXRoJiYwPT1uLmZyb20mJm4ubWFya2VyLmluY2x1c2l2ZUxlZnQmJktyKHQsZSxuKSlyZXR1cm4hMH19ZnVuY3Rpb24gS3IodCxlLHIpe2lmKG51bGw9PXIudG8pe3ZhciBuPXIubWFya2VyLmZpbmQoKS50byxpPWduKHQsbi5saW5lKTtyZXR1cm4gS3IodCxpLE5yKGkubWFya2VkU3BhbnMsci5tYXJrZXIpKX1pZihyLm1hcmtlci5pbmNsdXNpdmVSaWdodCYmci50bz09ZS50ZXh0Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG8sbD0wO2w8ZS5tYXJrZWRTcGFucy5sZW5ndGg7KytsKWlmKG89ZS5tYXJrZWRTcGFuc1tsXSxvLm1hcmtlci5jb2xsYXBzZWQmJiFvLm1hcmtlci5yZXBsYWNlZFdpdGgmJm8uZnJvbT09ci50byYmKG8ubWFya2VyLmluY2x1c2l2ZUxlZnR8fHIubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSYmS3IodCxlLG8pKXJldHVybiEwfWZ1bmN0aW9uIFVyKHQpe3ZhciBlPXQubWFya2VkU3BhbnM7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuZGV0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPW51bGx9fWZ1bmN0aW9uIFhyKHQsZSl7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuYXR0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPWV9fWZ1bmN0aW9uIF9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPSF0aGlzLmNtLmN1ck9wO2UmJmllKHRoaXMuY20pO3RyeXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2UmJm9lKHRoaXMuY20pfXJldHVybiByfX1mdW5jdGlvbiBZcih0KXtyZXR1cm4gbnVsbCE9dC5oZWlnaHQ/dC5oZWlnaHQ6KHQubm9kZS5wYXJlbnROb2RlJiYxPT10Lm5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZXx8dWkodC5jbS5kaXNwbGF5Lm1lYXN1cmUsc2koImRpdiIsW3Qubm9kZV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIikpLHQuaGVpZ2h0PXQubm9kZS5vZmZzZXRIZWlnaHQpfWZ1bmN0aW9uIGpyKHQsZSxyLG4pe3ZhciBpPW5ldyB5byh0LHIsbik7cmV0dXJuIGkubm9IU2Nyb2xsJiYodC5kaXNwbGF5LmFsaWduV2lkZ2V0cz0hMCksZHIodCxlLGZ1bmN0aW9uKGUpe3ZhciByPWUud2lkZ2V0c3x8KGUud2lkZ2V0cz1bXSk7aWYobnVsbD09aS5pbnNlcnRBdD9yLnB1c2goaSk6ci5zcGxpY2UoTWF0aC5taW4oci5sZW5ndGgtMSxNYXRoLm1heCgwLGkuaW5zZXJ0QXQpKSwwLGkpLGkubGluZT1lLCFWcih0LmRvYyxlKXx8aS5zaG93SWZIaWRkZW4pe3ZhciBuPUNuKHQsZSk8dC5kb2Muc2Nyb2xsVG9wO3luKGUsZS5oZWlnaHQrWXIoaSkpLG4mJmZyKHQsMCxpLmhlaWdodCl9cmV0dXJuITB9KSxpfWZ1bmN0aW9uICRyKHQsZSxyLG4pe3QudGV4dD1lLHQuc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpLG51bGwhPXQub3JkZXImJih0Lm9yZGVyPW51bGwpLFVyKHQpLFhyKHQscik7dmFyIGk9bj9uKHQpOjE7aSE9dC5oZWlnaHQmJnluKHQsaSl9ZnVuY3Rpb24gWnIodCl7dC5wYXJlbnQ9bnVsbCxVcih0KX1mdW5jdGlvbiBxcih0LGUscixuLGksbyl7dmFyIGw9ci5mbGF0dGVuU3BhbnM7bnVsbD09bCYmKGw9dC5vcHRpb25zLmZsYXR0ZW5TcGFucyk7dmFyIHMsYT0wLHU9bnVsbCxjPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3IoIiI9PWUmJnIuYmxhbmtMaW5lJiZyLmJsYW5rTGluZShuKTshYy5lb2woKTspYy5wb3M+dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aD8obD0hMSxvJiZ0bih0LGUsbixjLnBvcyksYy5wb3M9ZS5sZW5ndGgscz1udWxsKTpzPXIudG9rZW4oYyxuKSxsJiZ1PT1zfHwoYTxjLnN0YXJ0JiZpKGMuc3RhcnQsdSksYT1jLnN0YXJ0LHU9cyksYy5zdGFydD1jLnBvcztmb3IoO2E8Yy5wb3M7KXt2YXIgZj1NYXRoLm1pbihjLnBvcyxhKzVlNCk7aShmLHUpLGE9Zn19ZnVuY3Rpb24gUXIodCxlLHIsbil7dmFyIGk9W3Quc3RhdGUubW9kZUdlbl07cXIodCxlLnRleHQsdC5kb2MubW9kZSxyLGZ1bmN0aW9uKHQsZSl7aS5wdXNoKHQsZSl9LG4pO2Zvcih2YXIgbz0wO288dC5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7KytvKXt2YXIgbD10LnN0YXRlLm92ZXJsYXlzW29dLHM9MSxhPTA7cXIodCxlLnRleHQsbC5tb2RlLCEwLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXM7dD5hOyl7dmFyIG49aVtzXTtuPnQmJmkuc3BsaWNlKHMsMSx0LGlbcysxXSxuKSxzKz0yLGE9TWF0aC5taW4odCxuKX1pZihlKWlmKGwub3BhcXVlKWkuc3BsaWNlKHIscy1yLHQsZSkscz1yKzI7ZWxzZSBmb3IoO3M+cjtyKz0yKXt2YXIgbz1pW3IrMV07aVtyKzFdPW8/bysiICIrZTplfX0pfXJldHVybiBpfWZ1bmN0aW9uIEpyKHQsZSl7cmV0dXJuIGUuc3R5bGVzJiZlLnN0eWxlc1swXT09dC5zdGF0ZS5tb2RlR2VufHwoZS5zdHlsZXM9UXIodCxlLGUuc3RhdGVBZnRlcj16KHQsYm4oZSkpKSksZS5zdHlsZXN9ZnVuY3Rpb24gdG4odCxlLHIsbil7dmFyIGk9dC5kb2MubW9kZSxvPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3Ioby5zdGFydD1vLnBvcz1ufHwwLCIiPT1lJiZpLmJsYW5rTGluZSYmaS5ibGFua0xpbmUocik7IW8uZW9sKCkmJm8ucG9zPD10Lm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoOylpLnRva2VuKG8sciksby5zdGFydD1vLnBvc31mdW5jdGlvbiBlbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2Zvcig7Oyl7dmFyIHI9dC5tYXRjaCgvKD86XnxccylsaW5lLShiYWNrZ3JvdW5kLSk/KFxTKykvKTtpZighcilicmVhazt0PXQuc2xpY2UoMCxyLmluZGV4KSt0LnNsaWNlKHIuaW5kZXgrclswXS5sZW5ndGgpO3ZhciBuPXJbMV0/ImJnQ2xhc3MiOiJ0ZXh0Q2xhc3MiO251bGw9PWVbbl0/ZVtuXT1yWzJdOm5ldyBSZWdFeHAoIig/Ol58cykiK3JbMl0rIig/OiR8cykiKS50ZXN0KGVbbl0pfHwoZVtuXSs9IiAiK3JbMl0pfXJldHVybiB4b1t0XXx8KHhvW3RdPSJjbS0iK3QucmVwbGFjZSgvICsvZywiIGNtLSIpKX1mdW5jdGlvbiBybih0LGUscixuKXtmb3IodmFyIGksbz1lLGw9ITA7aT1ScihvKTspbz1nbih0LmRvYyxpLmZpbmQoKS5mcm9tLmxpbmUpO3ZhciBzPXtwcmU6c2koInByZSIpLGNvbDowLHBvczowLG1lYXN1cmU6bnVsbCxtZWFzdXJlZFNvbWV0aGluZzohMSxjbTp0LGNvcHlXaWRnZXRzOm59O2Rve28udGV4dCYmKGw9ITEpLHMubWVhc3VyZT1vPT1lJiZyLHMucG9zPTAscy5hZGRUb2tlbj1zLm1lYXN1cmU/bG46b24sKEFpfHxXaSkmJnQuZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSYmKHMuYWRkVG9rZW49c24ocy5hZGRUb2tlbikpO3ZhciBhPXVuKG8scyxKcih0LG8pKTtyJiZvPT1lJiYhcy5tZWFzdXJlZFNvbWV0aGluZyYmKHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKSxzLm1lYXN1cmVkU29tZXRoaW5nPSEwKSxhJiYobz1nbih0LmRvYyxhLnRvLmxpbmUpKX13aGlsZShhKTshcnx8cy5tZWFzdXJlZFNvbWV0aGluZ3x8clswXXx8KHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQobD9zaSgic3BhbiIsIsKgIik6cGkodC5kaXNwbGF5Lm1lYXN1cmUpKSkscy5wcmUuZmlyc3RDaGlsZHx8VnIodC5kb2MsZSl8fHMucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCLCoCIpKTt2YXIgdTtpZihyJiYoQWl8fERpKSYmKHU9d24obykpKXt2YXIgYz11Lmxlbmd0aC0xO3VbY10uZnJvbT09dVtjXS50byYmLS1jO3ZhciBmPXVbY10saD11W2MtMV07aWYoZi5mcm9tKzE9PWYudG8mJmgmJmYubGV2ZWw8aC5sZXZlbCl7dmFyIGQ9cltzLnBvcy0xXTtkJiZkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGQubWVhc3VyZVJpZ2h0PXBpKHQuZGlzcGxheS5tZWFzdXJlKSxkLm5leHRTaWJsaW5nKX19dmFyIHA9cy50ZXh0Q2xhc3M/cy50ZXh0Q2xhc3MrIiAiKyhlLnRleHRDbGFzc3x8IiIpOmUudGV4dENsYXNzO3JldHVybiBwJiYocy5wcmUuY2xhc3NOYW1lPXApLEtuKHQsInJlbmRlckxpbmUiLHQsZSxzLnByZSksc31mdW5jdGlvbiBubih0KXt2YXIgZT1zaSgic3BhbiIsIuKAoiIsImNtLWludmFsaWRjaGFyIik7cmV0dXJuIGUudGl0bGU9IlxcdSIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSxlfWZ1bmN0aW9uIG9uKHQsZSxyLG4saSxvKXtpZihlKXt2YXIgbD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJzO2lmKGwudGVzdChlKSlmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MDs7KXtsLmxhc3RJbmRleD1hO3ZhciB1PWwuZXhlYyhlKSxjPXU/dS5pbmRleC1hOmUubGVuZ3RoLWE7aWYoYyYmKHMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZS5zbGljZShhLGErYykpKSx0LmNvbCs9YyksIXUpYnJlYWs7aWYoYSs9YysxLCIJIj09dVswXSl7dmFyIGY9dC5jbS5vcHRpb25zLnRhYlNpemUsaD1mLXQuY29sJWY7cy5hcHBlbmRDaGlsZChzaSgic3BhbiIscW4oaCksImNtLXRhYiIpKSx0LmNvbCs9aH1lbHNle3ZhciBkPXQuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKHVbMF0pO3MuYXBwZW5kQ2hpbGQoZCksdC5jb2wrPTF9fWVsc2V7dC5jb2wrPWUubGVuZ3RoO3ZhciBzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpfWlmKHJ8fG58fGl8fHQubWVhc3VyZSl7dmFyIHA9cnx8IiI7biYmKHArPW4pLGkmJihwKz1pKTt2YXIgZD1zaSgic3BhbiIsW3NdLHApO3JldHVybiBvJiYoZC50aXRsZT1vKSx0LnByZS5hcHBlbmRDaGlsZChkKX10LnByZS5hcHBlbmRDaGlsZChzKX19ZnVuY3Rpb24gbG4odCxlLHIsbixpKXtmb3IodmFyIG89dC5jbS5vcHRpb25zLmxpbmVXcmFwcGluZyxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBzPWUuY2hhckF0KGwpLGE9MD09bDtzPj0i7aCAIiYmIu2vvyI+cyYmbDxlLmxlbmd0aC0xPyhzPWUuc2xpY2UobCxsKzIpLCsrbCk6bCYmbyYmaGkoZSxsKSYmdC5wcmUuYXBwZW5kQ2hpbGQoc2koIndiciIpKTt2YXIgdT10Lm1lYXN1cmVbdC5wb3NdLGM9dC5tZWFzdXJlW3QucG9zXT1vbih0LHMscixhJiZuLGw9PWUubGVuZ3RoLTEmJmkpO3UmJihjLmxlZnRTaWRlPXUubGVmdFNpZGV8fHUpLEFpJiZvJiYiICI9PXMmJmwmJiEvXHMvLnRlc3QoZS5jaGFyQXQobC0xKSkmJmw8ZS5sZW5ndGgtMSYmIS9ccy8udGVzdChlLmNoYXJBdChsKzEpKSYmKGMuc3R5bGUud2hpdGVTcGFjZT0ibm9ybWFsIiksdC5wb3MrPXMubGVuZ3RofWUubGVuZ3RoJiYodC5tZWFzdXJlZFNvbWV0aGluZz0hMCl9ZnVuY3Rpb24gc24odCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9IiAiLHI9MDtyPHQubGVuZ3RoLTI7KytyKWUrPXIlMj8iICI6IsKgIjtyZXR1cm4gZSs9IiAifXJldHVybiBmdW5jdGlvbihyLG4saSxvLGwscyl7cmV0dXJuIHQocixuLnJlcGxhY2UoLyB7Myx9L2csZSksaSxvLGwscyl9fWZ1bmN0aW9uIGFuKHQsZSxyLG4pe3ZhciBpPSFuJiZyLnJlcGxhY2VkV2l0aDtpZihpJiYodC5jb3B5V2lkZ2V0cyYmKGk9aS5jbG9uZU5vZGUoITApKSx0LnByZS5hcHBlbmRDaGlsZChpKSx0Lm1lYXN1cmUpKXtpZihlKXQubWVhc3VyZVt0LnBvc109aTtlbHNle3ZhciBvPXBpKHQuY20uZGlzcGxheS5tZWFzdXJlKTtpZigiYm9va21hcmsiIT1yLnR5cGV8fHIuaW5zZXJ0TGVmdCl7aWYodC5tZWFzdXJlW3QucG9zXSlyZXR1cm47dC5tZWFzdXJlW3QucG9zXT10LnByZS5pbnNlcnRCZWZvcmUobyxpKX1lbHNlIHQubWVhc3VyZVt0LnBvc109dC5wcmUuYXBwZW5kQ2hpbGQobyl9dC5tZWFzdXJlZFNvbWV0aGluZz0hMH10LnBvcys9ZX1mdW5jdGlvbiB1bih0LGUscil7dmFyIG49dC5tYXJrZWRTcGFucyxpPXQudGV4dCxvPTA7aWYobilmb3IodmFyIGwscyxhLHUsYyxmLGg9aS5sZW5ndGgsZD0wLHA9MSxnPSIiLG09MDs7KXtpZihtPT1kKXtzPWE9dT1jPSIiLGY9bnVsbCxtPTEvMDtmb3IodmFyIHY9W10seT0wO3k8bi5sZW5ndGg7Kyt5KXt2YXIgYj1uW3ldLHg9Yi5tYXJrZXI7Yi5mcm9tPD1kJiYobnVsbD09Yi50b3x8Yi50bz5kKT8obnVsbCE9Yi50byYmbT5iLnRvJiYobT1iLnRvLGE9IiIpLHguY2xhc3NOYW1lJiYocys9IiAiK3guY2xhc3NOYW1lKSx4LnN0YXJ0U3R5bGUmJmIuZnJvbT09ZCYmKHUrPSIgIit4LnN0YXJ0U3R5bGUpLHguZW5kU3R5bGUmJmIudG89PW0mJihhKz0iICIreC5lbmRTdHlsZSkseC50aXRsZSYmIWMmJihjPXgudGl0bGUpLHguY29sbGFwc2VkJiYoIWZ8fGYubWFya2VyLnNpemU8eC5zaXplKSYmKGY9YikpOmIuZnJvbT5kJiZtPmIuZnJvbSYmKG09Yi5mcm9tKSwiYm9va21hcmsiPT14LnR5cGUmJmIuZnJvbT09ZCYmeC5yZXBsYWNlZFdpdGgmJnYucHVzaCh4KQp9aWYoZiYmKGYuZnJvbXx8MCk9PWQmJihhbihlLChudWxsPT1mLnRvP2g6Zi50byktZCxmLm1hcmtlcixudWxsPT1mLmZyb20pLG51bGw9PWYudG8pKXJldHVybiBmLm1hcmtlci5maW5kKCk7aWYoIWYmJnYubGVuZ3RoKWZvcih2YXIgeT0wO3k8di5sZW5ndGg7Kyt5KWFuKGUsMCx2W3ldKX1pZihkPj1oKWJyZWFrO2Zvcih2YXIgQz1NYXRoLm1pbihoLG0pOzspe2lmKGcpe3ZhciB3PWQrZy5sZW5ndGg7aWYoIWYpe3ZhciBMPXc+Qz9nLnNsaWNlKDAsQy1kKTpnO2UuYWRkVG9rZW4oZSxMLGw/bCtzOnMsdSxkK0wubGVuZ3RoPT1tP2E6IiIsYyl9aWYodz49Qyl7Zz1nLnNsaWNlKEMtZCksZD1DO2JyZWFrfWQ9dyx1PSIifWc9aS5zbGljZShvLG89cltwKytdKSxsPWVuKHJbcCsrXSxlKX19ZWxzZSBmb3IodmFyIHA9MTtwPHIubGVuZ3RoO3ArPTIpZS5hZGRUb2tlbihlLGkuc2xpY2UobyxvPXJbcF0pLGVuKHJbcCsxXSxlKSl9ZnVuY3Rpb24gY24odCxlLHIsbixpKXtmdW5jdGlvbiBvKHQpe3JldHVybiByP3JbdF06bnVsbH1mdW5jdGlvbiBsKHQscixuKXskcih0LHIsbixpKSxVbih0LCJjaGFuZ2UiLHQsZSl9dmFyIHM9ZS5mcm9tLGE9ZS50byx1PWUudGV4dCxjPWduKHQscy5saW5lKSxmPWduKHQsYS5saW5lKSxoPVFuKHUpLGQ9byh1Lmxlbmd0aC0xKSxwPWEubGluZS1zLmxpbmU7aWYoMCE9cy5jaHx8MCE9YS5jaHx8IiIhPWh8fHQuY20mJiF0LmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKWlmKGM9PWYpaWYoMT09dS5sZW5ndGgpbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK2grYy50ZXh0LnNsaWNlKGEuY2gpLGQpO2Vsc2V7Zm9yKHZhciBnPVtdLG09MSx2PXUubGVuZ3RoLTE7dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7Zy5wdXNoKG5ldyBibyhoK2MudGV4dC5zbGljZShhLmNoKSxkLGkpKSxsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSx0Lmluc2VydChzLmxpbmUrMSxnKX1lbHNlIGlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdK2YudGV4dC5zbGljZShhLmNoKSxvKDApKSx0LnJlbW92ZShzLmxpbmUrMSxwKTtlbHNle2woYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdLG8oMCkpLGwoZixoK2YudGV4dC5zbGljZShhLmNoKSxkKTtmb3IodmFyIG09MSx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtwPjEmJnQucmVtb3ZlKHMubGluZSsxLHAtMSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZXtmb3IodmFyIG09MCx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtsKGYsZi50ZXh0LGQpLHAmJnQucmVtb3ZlKHMubGluZSxwKSxnLmxlbmd0aCYmdC5pbnNlcnQocy5saW5lLGcpfVVuKHQsImNoYW5nZSIsdCxlKSxucih0LG4uYW5jaG9yLG4uaGVhZCxudWxsLCEwKX1mdW5jdGlvbiBmbih0KXt0aGlzLmxpbmVzPXQsdGhpcy5wYXJlbnQ9bnVsbDtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49MDtyPmU7KytlKXRbZV0ucGFyZW50PXRoaXMsbis9dFtlXS5oZWlnaHQ7dGhpcy5oZWlnaHQ9bn1mdW5jdGlvbiBobih0KXt0aGlzLmNoaWxkcmVuPXQ7Zm9yKHZhciBlPTAscj0wLG49MCxpPXQubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRbbl07ZSs9by5jaHVua1NpemUoKSxyKz1vLmhlaWdodCxvLnBhcmVudD10aGlzfXRoaXMuc2l6ZT1lLHRoaXMuaGVpZ2h0PXIsdGhpcy5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBkbih0LGUscil7ZnVuY3Rpb24gbih0LGksbyl7aWYodC5saW5rZWQpZm9yKHZhciBsPTA7bDx0LmxpbmtlZC5sZW5ndGg7KytsKXt2YXIgcz10LmxpbmtlZFtsXTtpZihzLmRvYyE9aSl7dmFyIGE9byYmcy5zaGFyZWRIaXN0Oyghcnx8YSkmJihlKHMuZG9jLGEpLG4ocy5kb2MsdCxhKSl9fX1uKHQsbnVsbCwhMCl9ZnVuY3Rpb24gcG4odCxlKXtpZihlLmNtKXRocm93IG5ldyBFcnJvcigiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS4iKTt0LmRvYz1lLGUuY209dCxvKHQpLHIodCksdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8Zih0KSx0Lm9wdGlvbnMubW9kZT1lLm1vZGVPcHRpb24sdWUodCl9ZnVuY3Rpb24gZ24odCxlKXtmb3IoZS09dC5maXJzdDshdC5saW5lczspZm9yKHZhciByPTA7Oysrcil7dmFyIG49dC5jaGlsZHJlbltyXSxpPW4uY2h1bmtTaXplKCk7aWYoaT5lKXt0PW47YnJlYWt9ZS09aX1yZXR1cm4gdC5saW5lc1tlXX1mdW5jdGlvbiBtbih0LGUscil7dmFyIG49W10saT1lLmxpbmU7cmV0dXJuIHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7dmFyIG89dC50ZXh0O2k9PXIubGluZSYmKG89by5zbGljZSgwLHIuY2gpKSxpPT1lLmxpbmUmJihvPW8uc2xpY2UoZS5jaCkpLG4ucHVzaChvKSwrK2l9KSxufWZ1bmN0aW9uIHZuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5pdGVyKGUscixmdW5jdGlvbih0KXtuLnB1c2godC50ZXh0KX0pLG59ZnVuY3Rpb24geW4odCxlKXtmb3IodmFyIHI9ZS10LmhlaWdodCxuPXQ7bjtuPW4ucGFyZW50KW4uaGVpZ2h0Kz1yfWZ1bmN0aW9uIGJuKHQpe2lmKG51bGw9PXQucGFyZW50KXJldHVybiBudWxsO2Zvcih2YXIgZT10LnBhcmVudCxyPXRpKGUubGluZXMsdCksbj1lLnBhcmVudDtuO2U9bixuPW4ucGFyZW50KWZvcih2YXIgaT0wO24uY2hpbGRyZW5baV0hPWU7KytpKXIrPW4uY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7cmV0dXJuIHIrZS5maXJzdH1mdW5jdGlvbiB4bih0LGUpe3ZhciByPXQuZmlyc3Q7dDpkb3tmb3IodmFyIG49MCxpPXQuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXQuY2hpbGRyZW5bbl0sbD1vLmhlaWdodDtpZihsPmUpe3Q9bztjb250aW51ZSB0fWUtPWwscis9by5jaHVua1NpemUoKX1yZXR1cm4gcn13aGlsZSghdC5saW5lcyk7Zm9yKHZhciBuPTAsaT10LmxpbmVzLmxlbmd0aDtpPm47KytuKXt2YXIgcz10LmxpbmVzW25dLGE9cy5oZWlnaHQ7aWYoYT5lKWJyZWFrO2UtPWF9cmV0dXJuIHIrbn1mdW5jdGlvbiBDbih0LGUpe2U9R3IodC5kb2MsZSk7Zm9yKHZhciByPTAsbj1lLnBhcmVudCxpPTA7aTxuLmxpbmVzLmxlbmd0aDsrK2kpe3ZhciBvPW4ubGluZXNbaV07aWYobz09ZSlicmVhaztyKz1vLmhlaWdodH1mb3IodmFyIGw9bi5wYXJlbnQ7bDtuPWwsbD1uLnBhcmVudClmb3IodmFyIGk9MDtpPGwuY2hpbGRyZW4ubGVuZ3RoOysraSl7dmFyIHM9bC5jaGlsZHJlbltpXTtpZihzPT1uKWJyZWFrO3IrPXMuaGVpZ2h0fXJldHVybiByfWZ1bmN0aW9uIHduKHQpe3ZhciBlPXQub3JkZXI7cmV0dXJuIG51bGw9PWUmJihlPXQub3JkZXI9Qm8odC50ZXh0KSksZX1mdW5jdGlvbiBMbih0KXtyZXR1cm57ZG9uZTpbXSx1bmRvbmU6W10sdW5kb0RlcHRoOjEvMCxsYXN0VGltZTowLGxhc3RPcDpudWxsLGxhc3RPcmlnaW46bnVsbCxnZW5lcmF0aW9uOnR8fDEsbWF4R2VuZXJhdGlvbjp0fHwxfX1mdW5jdGlvbiBrbih0LGUscixuKXt2YXIgaT1lWyJzcGFuc18iK3QuaWRdLG89MDt0Lml0ZXIoTWF0aC5tYXgodC5maXJzdCxyKSxNYXRoLm1pbih0LmZpcnN0K3Quc2l6ZSxuKSxmdW5jdGlvbihyKXtyLm1hcmtlZFNwYW5zJiYoKGl8fChpPWVbInNwYW5zXyIrdC5pZF09e30pKVtvXT1yLm1hcmtlZFNwYW5zKSwrK299KX1mdW5jdGlvbiBTbih0LGUpe3ZhciByPXtsaW5lOmUuZnJvbS5saW5lLGNoOmUuZnJvbS5jaH0sbj17ZnJvbTpyLHRvOmxvKGUpLHRleHQ6bW4odCxlLmZyb20sZS50byl9O3JldHVybiBrbih0LG4sZS5mcm9tLmxpbmUsZS50by5saW5lKzEpLGRuKHQsZnVuY3Rpb24odCl7a24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKX0sITApLG59ZnVuY3Rpb24gTW4odCxlLHIsbil7dmFyIGk9dC5oaXN0b3J5O2kudW5kb25lLmxlbmd0aD0wO3ZhciBvPStuZXcgRGF0ZSxsPVFuKGkuZG9uZSk7aWYobCYmKGkubGFzdE9wPT1ufHxpLmxhc3RPcmlnaW49PWUub3JpZ2luJiZlLm9yaWdpbiYmKCIrIj09ZS5vcmlnaW4uY2hhckF0KDApJiZ0LmNtJiZpLmxhc3RUaW1lPm8tdC5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5fHwiKiI9PWUub3JpZ2luLmNoYXJBdCgwKSkpKXt2YXIgcz1RbihsLmNoYW5nZXMpO2plKGUuZnJvbSxlLnRvKSYmamUoZS5mcm9tLHMudG8pP3MudG89bG8oZSk6bC5jaGFuZ2VzLnB1c2goU24odCxlKSksbC5hbmNob3JBZnRlcj1yLmFuY2hvcixsLmhlYWRBZnRlcj1yLmhlYWR9ZWxzZSBmb3IobD17Y2hhbmdlczpbU24odCxlKV0sZ2VuZXJhdGlvbjppLmdlbmVyYXRpb24sYW5jaG9yQmVmb3JlOnQuc2VsLmFuY2hvcixoZWFkQmVmb3JlOnQuc2VsLmhlYWQsYW5jaG9yQWZ0ZXI6ci5hbmNob3IsaGVhZEFmdGVyOnIuaGVhZH0saS5kb25lLnB1c2gobCksaS5nZW5lcmF0aW9uPSsraS5tYXhHZW5lcmF0aW9uO2kuZG9uZS5sZW5ndGg+aS51bmRvRGVwdGg7KWkuZG9uZS5zaGlmdCgpO2kubGFzdFRpbWU9byxpLmxhc3RPcD1uLGkubGFzdE9yaWdpbj1lLm9yaWdpbn1mdW5jdGlvbiBUbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGUscj0wO3I8dC5sZW5ndGg7KytyKXRbcl0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkP2V8fChlPXQuc2xpY2UoMCxyKSk6ZSYmZS5wdXNoKHRbcl0pO3JldHVybiBlP2UubGVuZ3RoP2U6bnVsbDp0fWZ1bmN0aW9uIEFuKHQsZSl7dmFyIHI9ZVsic3BhbnNfIit0LmlkXTtpZighcilyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxpPVtdO248ZS50ZXh0Lmxlbmd0aDsrK24paS5wdXNoKFRuKHJbbl0pKTtyZXR1cm4gaX1mdW5jdGlvbiBIbih0LGUpe2Zvcih2YXIgcj0wLG49W107cjx0Lmxlbmd0aDsrK3Ipe3ZhciBpPXRbcl0sbz1pLmNoYW5nZXMsbD1bXTtuLnB1c2goe2NoYW5nZXM6bCxhbmNob3JCZWZvcmU6aS5hbmNob3JCZWZvcmUsaGVhZEJlZm9yZTppLmhlYWRCZWZvcmUsYW5jaG9yQWZ0ZXI6aS5hbmNob3JBZnRlcixoZWFkQWZ0ZXI6aS5oZWFkQWZ0ZXJ9KTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoOysrcyl7dmFyIGEsdT1vW3NdO2lmKGwucHVzaCh7ZnJvbTp1LmZyb20sdG86dS50byx0ZXh0OnUudGV4dH0pLGUpZm9yKHZhciBjIGluIHUpKGE9Yy5tYXRjaCgvXnNwYW5zXyhcZCspJC8pKSYmdGkoZSxOdW1iZXIoYVsxXSkpPi0xJiYoUW4obClbY109dVtjXSxkZWxldGUgdVtjXSl9fXJldHVybiBufWZ1bmN0aW9uIE5uKHQsZSxyLG4pe3I8dC5saW5lP3QubGluZSs9bjplPHQubGluZSYmKHQubGluZT1lLHQuY2g9MCl9ZnVuY3Rpb24gRG4odCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe2Zvcih2YXIgbz10W2ldLGw9ITAscz0wO3M8by5jaGFuZ2VzLmxlbmd0aDsrK3Mpe3ZhciBhPW8uY2hhbmdlc1tzXTtpZihvLmNvcGllZHx8KGEuZnJvbT1aZShhLmZyb20pLGEudG89WmUoYS50bykpLHI8YS5mcm9tLmxpbmUpYS5mcm9tLmxpbmUrPW4sYS50by5saW5lKz1uO2Vsc2UgaWYoZTw9YS50by5saW5lKXtsPSExO2JyZWFrfX1vLmNvcGllZHx8KG8uYW5jaG9yQmVmb3JlPVplKG8uYW5jaG9yQmVmb3JlKSxvLmhlYWRCZWZvcmU9WmUoby5oZWFkQmVmb3JlKSxvLmFuY2hvckFmdGVyPVplKG8uYW5jaG9yQWZ0ZXIpLG8ucmVhZEFmdGVyPVplKG8uaGVhZEFmdGVyKSxvLmNvcGllZD0hMCksbD8oTm4oby5hbmNob3JCZWZvcmUpLE5uKG8uaGVhZEJlZm9yZSksTm4oby5hbmNob3JBZnRlciksTm4oby5oZWFkQWZ0ZXIpKToodC5zcGxpY2UoMCxpKzEpLGk9MCl9fWZ1bmN0aW9uIFduKHQsZSl7dmFyIHI9ZS5mcm9tLmxpbmUsbj1lLnRvLmxpbmUsaT1lLnRleHQubGVuZ3RoLShuLXIpLTE7RG4odC5kb25lLHIsbixpKSxEbih0LnVuZG9uZSxyLG4saSl9ZnVuY3Rpb24gT24oKXtQbih0aGlzKX1mdW5jdGlvbiBFbih0KXtyZXR1cm4gdC5zdG9wfHwodC5zdG9wPU9uKSx0fWZ1bmN0aW9uIHpuKHQpe3QucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITF9ZnVuY3Rpb24gSW4odCl7dC5zdG9wUHJvcGFnYXRpb24/dC5zdG9wUHJvcGFnYXRpb24oKTp0LmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBGbih0KXtyZXR1cm4gbnVsbCE9dC5kZWZhdWx0UHJldmVudGVkP3QuZGVmYXVsdFByZXZlbnRlZDowPT10LnJldHVyblZhbHVlfWZ1bmN0aW9uIFBuKHQpe3puKHQpLEluKHQpfWZ1bmN0aW9uIFJuKHQpe3JldHVybiB0LnRhcmdldHx8dC5zcmNFbGVtZW50fWZ1bmN0aW9uIEJuKHQpe3ZhciBlPXQud2hpY2g7cmV0dXJuIG51bGw9PWUmJigxJnQuYnV0dG9uP2U9MToyJnQuYnV0dG9uP2U9Mzo0JnQuYnV0dG9uJiYoZT0yKSksS2kmJnQuY3RybEtleSYmMT09ZSYmKGU9MyksZX1mdW5jdGlvbiBHbih0LGUscil7aWYodC5hZGRFdmVudExpc3RlbmVyKXQuYWRkRXZlbnRMaXN0ZW5lcihlLHIsITEpO2Vsc2UgaWYodC5hdHRhY2hFdmVudCl0LmF0dGFjaEV2ZW50KCJvbiIrZSxyKTtlbHNle3ZhciBuPXQuX2hhbmRsZXJzfHwodC5faGFuZGxlcnM9e30pLGk9bltlXXx8KG5bZV09W10pO2kucHVzaChyKX19ZnVuY3Rpb24gVm4odCxlLHIpe2lmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcil0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuZGV0YWNoRXZlbnQpdC5kZXRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYoIW4pcmV0dXJuO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7KytpKWlmKG5baV09PXIpe24uc3BsaWNlKGksMSk7YnJlYWt9fX1mdW5jdGlvbiBLbih0LGUpe3ZhciByPXQuX2hhbmRsZXJzJiZ0Ll9oYW5kbGVyc1tlXTtpZihyKWZvcih2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMiksaT0wO2k8ci5sZW5ndGg7KytpKXJbaV0uYXBwbHkobnVsbCxuKX1mdW5jdGlvbiBVbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dC5hcHBseShudWxsLGkpfX12YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYobil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO1NvfHwoKytNbyxTbz1bXSxzZXRUaW1lb3V0KF9uLDApKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbylTby5wdXNoKHIobltvXSkpfX1mdW5jdGlvbiBYbih0LGUscil7cmV0dXJuIEtuKHQscnx8ZS50eXBlLHQsZSksRm4oZSl8fGUuY29kZW1pcnJvcklnbm9yZX1mdW5jdGlvbiBfbigpey0tTW87dmFyIHQ9U287U289bnVsbDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdKCl9ZnVuY3Rpb24gWW4odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07cmV0dXJuIHImJnIubGVuZ3RoPjB9ZnVuY3Rpb24gam4odCl7dC5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXtHbih0aGlzLHQsZSl9LHQucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe1ZuKHRoaXMsdCxlKX19ZnVuY3Rpb24gJG4oKXt0aGlzLmlkPW51bGx9ZnVuY3Rpb24gWm4odCxlLHIsbixpKXtudWxsPT1lJiYoZT10LnNlYXJjaCgvW15cc1x1MDBhMF0vKSwtMT09ZSYmKGU9dC5sZW5ndGgpKTtmb3IodmFyIG89bnx8MCxsPWl8fDA7ZT5vOysrbykiCSI9PXQuY2hhckF0KG8pP2wrPXItbCVyOisrbDtyZXR1cm4gbH1mdW5jdGlvbiBxbih0KXtmb3IoO0hvLmxlbmd0aDw9dDspSG8ucHVzaChRbihIbykrIiAiKTtyZXR1cm4gSG9bdF19ZnVuY3Rpb24gUW4odCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gSm4odCl7aWYoR2kpdC5zZWxlY3Rpb25TdGFydD0wLHQuc2VsZWN0aW9uRW5kPXQudmFsdWUubGVuZ3RoO2Vsc2UgdHJ5e3Quc2VsZWN0KCl9Y2F0Y2goZSl7fX1mdW5jdGlvbiB0aSh0LGUpe2lmKHQuaW5kZXhPZilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7bj5yOysrcilpZih0W3JdPT1lKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGVpKHQsZSl7ZnVuY3Rpb24gcigpe31yLnByb3RvdHlwZT10O3ZhciBuPW5ldyByO3JldHVybiBlJiZyaShlLG4pLG59ZnVuY3Rpb24gcmkodCxlKXtlfHwoZT17fSk7Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmkodCl7Zm9yKHZhciBlPVtdLHI9MDt0PnI7KytyKWUucHVzaCh2b2lkIDApO3JldHVybiBlfWZ1bmN0aW9uIGlpKHQpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShudWxsLGUpfX1mdW5jdGlvbiBvaSh0KXtyZXR1cm4vXHcvLnRlc3QodCl8fHQ+IsKAIiYmKHQudG9VcHBlckNhc2UoKSE9dC50b0xvd2VyQ2FzZSgpfHxOby50ZXN0KHQpKX1mdW5jdGlvbiBsaSh0KXtmb3IodmFyIGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpJiZ0W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7aWYociYmKGkuY2xhc3NOYW1lPXIpLG4mJihpLnN0eWxlLmNzc1RleHQ9biksInN0cmluZyI9PXR5cGVvZiBlKWNpKGksZSk7ZWxzZSBpZihlKWZvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKWkuYXBwZW5kQ2hpbGQoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gYWkodCl7Zm9yKHZhciBlPXQuY2hpbGROb2Rlcy5sZW5ndGg7ZT4wOy0tZSl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCk7cmV0dXJuIHR9ZnVuY3Rpb24gdWkodCxlKXtyZXR1cm4gYWkodCkuYXBwZW5kQ2hpbGQoZSl9ZnVuY3Rpb24gY2kodCxlKXtOaT8odC5pbm5lckhUTUw9IiIsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSkpOnQudGV4dENvbnRlbnQ9ZX1mdW5jdGlvbiBmaSh0KXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1mdW5jdGlvbiBoaSgpe3JldHVybiExfWZ1bmN0aW9uIGRpKHQpe2lmKG51bGwhPU9vKXJldHVybiBPbzt2YXIgZT1zaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7IG92ZXJmbG93LXg6IHNjcm9sbCIpO3JldHVybiB1aSh0LGUpLGUub2Zmc2V0V2lkdGgmJihPbz1lLm9mZnNldEhlaWdodC1lLmNsaWVudEhlaWdodCksT298fDB9ZnVuY3Rpb24gcGkodCl7aWYobnVsbD09RW8pe3ZhciBlPXNpKCJzcGFuIiwi4oCLIik7dWkodCxzaSgic3BhbiIsW2UsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKV0pKSwwIT10LmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0JiYoRW89ZS5vZmZzZXRXaWR0aDw9MSYmZS5vZmZzZXRIZWlnaHQ+MiYmIUhpKX1yZXR1cm4gRW8/c2koInNwYW4iLCLigIsiKTpzaSgic3BhbiIsIsKgIixudWxsLCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpfWZ1bmN0aW9uIGdpKHQsZSxyLG4pe2lmKCF0KXJldHVybiBuKGUsciwibHRyIik7Zm9yKHZhciBpPSExLG89MDtvPHQubGVuZ3RoOysrbyl7dmFyIGw9dFtvXTsobC5mcm9tPHImJmwudG8+ZXx8ZT09ciYmbC50bz09ZSkmJihuKE1hdGgubWF4KGwuZnJvbSxlKSxNYXRoLm1pbihsLnRvLHIpLDE9PWwubGV2ZWw/InJ0bCI6Imx0ciIpLGk9ITApfWl8fG4oZSxyLCJsdHIiKX1mdW5jdGlvbiBtaSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QudG86dC5mcm9tfWZ1bmN0aW9uIHZpKHQpe3JldHVybiB0LmxldmVsJTI/dC5mcm9tOnQudG99ZnVuY3Rpb24geWkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/bWkoZVswXSk6MH1mdW5jdGlvbiBiaSh0KXt2YXIgZT13bih0KTtyZXR1cm4gZT92aShRbihlKSk6dC50ZXh0Lmxlbmd0aH1mdW5jdGlvbiB4aSh0LGUpe3ZhciByPWduKHQuZG9jLGUpLG49R3IodC5kb2Mscik7biE9ciYmKGU9Ym4obikpO3ZhciBpPXduKG4pLG89aT9pWzBdLmxldmVsJTI/Ymkobik6eWkobik6MDtyZXR1cm4gWWUoZSxvKX1mdW5jdGlvbiBDaSh0LGUpe2Zvcih2YXIgcixuO3I9QnIobj1nbih0LmRvYyxlKSk7KWU9ci5maW5kKCkudG8ubGluZTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP3lpKG4pOmJpKG4pOm4udGV4dC5sZW5ndGg7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gd2kodCxlLHIpe3ZhciBuPXRbMF0ubGV2ZWw7cmV0dXJuIGU9PW4/ITA6cj09bj8hMTpyPmV9ZnVuY3Rpb24gTGkodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXt2YXIgaT10W25dO2lmKGkuZnJvbTxlJiZpLnRvPmUpcmV0dXJuIFJvPW51bGwsbjtpZihpLmZyb209PWV8fGkudG89PWUpe2lmKG51bGwhPXIpcmV0dXJuIHdpKHQsaS5sZXZlbCx0W3JdLmxldmVsKT8oUm89cixuKTooUm89bixyKTtyPW59fXJldHVybiBSbz1udWxsLHJ9ZnVuY3Rpb24ga2kodCxlLHIsbil7aWYoIW4pcmV0dXJuIGUrcjtkbyBlKz1yO3doaWxlKGU+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGUpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gU2kodCxlLHIsbil7dmFyIGk9d24odCk7aWYoIWkpcmV0dXJuIE1pKHQsZSxyLG4pO2Zvcih2YXIgbz1MaShpLGUpLGw9aVtvXSxzPWtpKHQsZSxsLmxldmVsJTI/LXI6cixuKTs7KXtpZihzPmwuZnJvbSYmczxsLnRvKXJldHVybiBzO2lmKHM9PWwuZnJvbXx8cz09bC50bylyZXR1cm4gTGkoaSxzKT09bz9zOihsPWlbbys9cl0scj4wPT1sLmxldmVsJTI/bC50bzpsLmZyb20pO2lmKGw9aVtvKz1yXSwhbClyZXR1cm4gbnVsbDtzPXI+MD09bC5sZXZlbCUyP2tpKHQsbC50bywtMSxuKTpraSh0LGwuZnJvbSwxLG4pfX1mdW5jdGlvbiBNaSh0LGUscixuKXt2YXIgaT1lK3I7aWYobilmb3IoO2k+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGkpKTspaSs9cjtyZXR1cm4gMD5pfHxpPnQudGV4dC5sZW5ndGg/bnVsbDppfXZhciBUaT0vZ2Vja29cL1xkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxBaT0vTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxIaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDgpLE5pPUFpJiYobnVsbD09ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU8OSksRGk9L1RyaWRlbnRcLyhbNy05XXxcZHsyLH0pXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksV2k9L1dlYktpdFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLE9pPVdpJiYvUXRcL1xkK1wuXGQrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEVpPS9DaHJvbWVcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx6aT0vT3BlcmFcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxJaT0vQXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvciksRmk9L0tIVE1MXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUGk9L01hYyBPUyBYIDFcZFxEKFs3LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUmk9L01hYyBPUyBYIDFcZFxEKFs4LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQmk9L1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxHaT0vQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJi9Nb2JpbGVcL1x3Ky8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxWaT1HaXx8L0FuZHJvaWR8d2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEtpPUdpfHwvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksVWk9L3dpbi9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxYaT16aSYmbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwvKFxkKlwuXGQqKS8pO1hpJiYoWGk9TnVtYmVyKFhpWzFdKSksWGkmJlhpPj0xNSYmKHppPSExLFdpPSEwKTt2YXIgX2ksWWksamksJGk9S2kmJihPaXx8emkmJihudWxsPT1YaXx8MTIuMTE+WGkpKSxaaT1UaXx8QWkmJiFOaSxxaT0hMSxRaT0hMSxKaT0wLHRvPTAsZW89MCxybz1udWxsO0FpP3JvPS0uNTM6VGk/cm89MTU6RWk/cm89LS43OklpJiYocm89LTEvMyk7dmFyIG5vLGlvLG9vPW51bGwsbG89dC5jaGFuZ2VFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dD9ZZSh0LmZyb20ubGluZSt0LnRleHQubGVuZ3RoLTEsUW4odC50ZXh0KS5sZW5ndGgrKDE9PXQudGV4dC5sZW5ndGg/dC5mcm9tLmNoOjApKTp0LnRvfTt0LlBvcz1ZZSx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxmb2N1czpmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpLHBlKHRoaXMpLGZlKHRoaXMpfSxzZXRPcHRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLm9wdGlvbnMsbj1yW3RdOyhyW3RdIT1lfHwibW9kZSI9PXQpJiYoclt0XT1lLHNvLmhhc093blByb3BlcnR5KHQpJiZsZSh0aGlzLHNvW3RdKSh0aGlzLGUsbikpfSxnZXRPcHRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9uc1t0XX0sZ2V0RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jfSxhZGRLZXlNYXA6ZnVuY3Rpb24odCxlKXt0aGlzLnN0YXRlLmtleU1hcHNbZT8icHVzaCI6InVuc2hpZnQiXSh0KX0scmVtb3ZlS2V5TWFwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLmtleU1hcHMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PXR8fCJzdHJpbmciIT10eXBlb2YgZVtyXSYmZVtyXS5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLCEwfSxhZGRPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnRva2VuP2U6dC5nZXRNb2RlKHRoaXMub3B0aW9ucyxlKTtpZihuLnN0YXJ0U3RhdGUpdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLiIpO3RoaXMuc3RhdGUub3ZlcmxheXMucHVzaCh7bW9kZTpuLG1vZGVTcGVjOmUsb3BhcXVlOnImJnIub3BhcXVlfSksdGhpcy5zdGF0ZS5tb2RlR2VuKyssdWUodGhpcyl9KSxyZW1vdmVPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuc3RhdGUub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLm1vZGVTcGVjO2lmKG49PXR8fCJzdHJpbmciPT10eXBlb2YgdCYmbi5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpLHZvaWQgMH19KSxpbmRlbnRMaW5lOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpeyJzdHJpbmciIT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlJiYoZT1udWxsPT1lP3RoaXMub3B0aW9ucy5zbWFydEluZGVudD8ic21hcnQiOiJwcmV2IjplPyJhZGQiOiJzdWJ0cmFjdCIpLHRyKHRoaXMuZG9jLHQpJiZocih0aGlzLHQsZSxyKX0pLGluZGVudFNlbGVjdGlvbjpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jLnNlbDtpZihqZShlLmZyb20sZS50bykpcmV0dXJuIGhyKHRoaXMsZS5mcm9tLmxpbmUsdCk7Zm9yKHZhciByPWUudG8ubGluZS0oZS50by5jaD8wOjEpLG49ZS5mcm9tLmxpbmU7cj49bjsrK24paHIodGhpcyxuLHQpfSksZ2V0VG9rZW5BdDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3Q9UWUocix0KTtmb3IodmFyIG49eih0aGlzLHQubGluZSxlKSxpPXRoaXMuZG9jLm1vZGUsbz1nbihyLHQubGluZSksbD1uZXcgU3Ioby50ZXh0LHRoaXMub3B0aW9ucy50YWJTaXplKTtsLnBvczx0LmNoJiYhbC5lb2woKTspe2wuc3RhcnQ9bC5wb3M7dmFyIHM9aS50b2tlbihsLG4pfXJldHVybntzdGFydDpsLnN0YXJ0LGVuZDpsLnBvcyxzdHJpbmc6bC5jdXJyZW50KCksY2xhc3NOYW1lOnN8fG51bGwsdHlwZTpzfHxudWxsLHN0YXRlOm59fSxnZXRUb2tlblR5cGVBdDpmdW5jdGlvbih0KXt0PVFlKHRoaXMuZG9jLHQpO3ZhciBlPUpyKHRoaXMsZ24odGhpcy5kb2MsdC5saW5lKSkscj0wLG49KGUubGVuZ3RoLTEpLzIsaT10LmNoO2lmKDA9PWkpcmV0dXJuIGVbMl07Zm9yKDs7KXt2YXIgbz1yK24+PjE7aWYoKG8/ZVsyKm8tMV06MCk+PWkpbj1vO2Vsc2V7aWYoIShlWzIqbysxXTxpKSlyZXR1cm4gZVsyKm8rMl07cj1vKzF9fX0sZ2V0TW9kZUF0OmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZG9jLm1vZGU7cmV0dXJuIHIuaW5uZXJNb2RlP3QuaW5uZXJNb2RlKHIsdGhpcy5nZXRUb2tlbkF0KGUpLnN0YXRlKS5tb2RlOnJ9LGdldEhlbHBlcjpmdW5jdGlvbih0LGUpe2lmKGdvLmhhc093blByb3BlcnR5KGUpKXt2YXIgcj1nb1tlXSxuPXRoaXMuZ2V0TW9kZUF0KHQpO3JldHVybiBuW2VdJiZyW25bZV1dfHxuLmhlbHBlclR5cGUmJnJbbi5oZWxwZXJUeXBlXXx8cltuLm5hbWVdfX0sZ2V0U3RhdGVBZnRlcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3JldHVybiB0PXFlKHIsbnVsbD09dD9yLmZpcnN0K3Iuc2l6ZS0xOnQpLHoodGhpcyx0KzEsZSl9LGN1cnNvckNvb3JkczpmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3JldHVybiByPW51bGw9PXQ/bi5oZWFkOiJvYmplY3QiPT10eXBlb2YgdD9RZSh0aGlzLmRvYyx0KTp0P24uZnJvbTpuLnRvLFEodGhpcyxyLGV8fCJwYWdlIil9LGNoYXJDb29yZHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcSh0aGlzLFFlKHRoaXMuZG9jLHQpLGV8fCJwYWdlIil9LGNvb3Jkc0NoYXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1aKHRoaXMsdCxlfHwicGFnZSIpLHRlKHRoaXMsdC5sZWZ0LHQudG9wKX0sbGluZUF0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHt0b3A6dCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wLHhuKHRoaXMuZG9jLHQrdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpfSxoZWlnaHRBdExpbmU6ZnVuY3Rpb24odCxlKXt2YXIgcj0hMSxuPXRoaXMuZG9jLmZpcnN0K3RoaXMuZG9jLnNpemUtMTt0PHRoaXMuZG9jLmZpcnN0P3Q9dGhpcy5kb2MuZmlyc3Q6dD5uJiYodD1uLHI9ITApO3ZhciBpPWduKHRoaXMuZG9jLHQpO3JldHVybiAkKHRoaXMsZ24odGhpcy5kb2MsdCkse3RvcDowLGxlZnQ6MH0sZXx8InBhZ2UiKS50b3ArKHI/aS5oZWlnaHQ6MCl9LGRlZmF1bHRUZXh0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHJlKHRoaXMuZGlzcGxheSl9LGRlZmF1bHRDaGFyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gbmUodGhpcy5kaXNwbGF5KX0sc2V0R3V0dGVyTWFya2VyOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49dC5ndXR0ZXJNYXJrZXJzfHwodC5ndXR0ZXJNYXJrZXJzPXt9KTtyZXR1cm4gbltlXT1yLCFyJiZsaShuKSYmKHQuZ3V0dGVyTWFya2Vycz1udWxsKSwhMH0pfSksY2xlYXJHdXR0ZXI6bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kb2Msbj1yLmZpcnN0O3IuaXRlcihmdW5jdGlvbihyKXtyLmd1dHRlck1hcmtlcnMmJnIuZ3V0dGVyTWFya2Vyc1t0XSYmKHIuZ3V0dGVyTWFya2Vyc1t0XT1udWxsLHVlKGUsbixuKzEpLGxpKHIuZ3V0dGVyTWFya2VycykmJihyLmd1dHRlck1hcmtlcnM9bnVsbCkpLCsrbn0pfSksYWRkTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyI7aWYodFtuXSl7aWYobmV3IFJlZ0V4cCgiKD86XnxcXHMpIityKyIoPzokfFxccykiKS50ZXN0KHRbbl0pKXJldHVybiExO3Rbbl0rPSIgIityfWVsc2UgdFtuXT1yO3JldHVybiEwfSl9KSxyZW1vdmVMaW5lQ2xhc3M6bGUobnVsbCxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRyKHRoaXMsdCxmdW5jdGlvbih0KXt2YXIgbj0idGV4dCI9PWU/InRleHRDbGFzcyI6ImJhY2tncm91bmQiPT1lPyJiZ0NsYXNzIjoid3JhcENsYXNzIixpPXRbbl07aWYoIWkpcmV0dXJuITE7aWYobnVsbD09cil0W25dPW51bGw7ZWxzZXt2YXIgbz1pLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3IrIig/OiR8XFxzKykiKSk7aWYoIW8pcmV0dXJuITE7dmFyIGw9by5pbmRleCtvWzBdLmxlbmd0aDt0W25dPWkuc2xpY2UoMCxvLmluZGV4KSsoby5pbmRleCYmbCE9aS5sZW5ndGg/IiAiOiIiKStpLnNsaWNlKGwpfHxudWxsfXJldHVybiEwfSl9KSxhZGRMaW5lV2lkZ2V0OmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBqcih0aGlzLHQsZSxyKX0pLHJlbW92ZUxpbmVXaWRnZXQ6ZnVuY3Rpb24odCl7dC5jbGVhcigpfSxsaW5lSW5mbzpmdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCF0cih0aGlzLmRvYyx0KSlyZXR1cm4gbnVsbDt2YXIgZT10O2lmKHQ9Z24odGhpcy5kb2MsdCksIXQpcmV0dXJuIG51bGx9ZWxzZXt2YXIgZT1ibih0KTtpZihudWxsPT1lKXJldHVybiBudWxsfXJldHVybntsaW5lOmUsaGFuZGxlOnQsdGV4dDp0LnRleHQsZ3V0dGVyTWFya2Vyczp0Lmd1dHRlck1hcmtlcnMsdGV4dENsYXNzOnQudGV4dENsYXNzLGJnQ2xhc3M6dC5iZ0NsYXNzLHdyYXBDbGFzczp0LndyYXBDbGFzcyx3aWRnZXRzOnQud2lkZ2V0c319LGdldFZpZXdwb3J0OmZ1bmN0aW9uKCl7cmV0dXJue2Zyb206dGhpcy5kaXNwbGF5LnNob3dpbmdGcm9tLHRvOnRoaXMuZGlzcGxheS5zaG93aW5nVG99fSxhZGRXaWRnZXQ6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz10aGlzLmRpc3BsYXk7dD1RKHRoaXMsUWUodGhpcy5kb2MsdCkpO3ZhciBsPXQuYm90dG9tLHM9dC5sZWZ0O2lmKGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnNpemVyLmFwcGVuZENoaWxkKGUpLCJvdmVyIj09bilsPXQudG9wO2Vsc2UgaWYoImFib3ZlIj09bnx8Im5lYXIiPT1uKXt2YXIgYT1NYXRoLm1heChvLndyYXBwZXIuY2xpZW50SGVpZ2h0LHRoaXMuZG9jLmhlaWdodCksdT1NYXRoLm1heChvLnNpemVyLmNsaWVudFdpZHRoLG8ubGluZVNwYWNlLmNsaWVudFdpZHRoKTsoImFib3ZlIj09bnx8dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ+YSkmJnQudG9wPmUub2Zmc2V0SGVpZ2h0P2w9dC50b3AtZS5vZmZzZXRIZWlnaHQ6dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ8PWEmJihsPXQuYm90dG9tKSxzK2Uub2Zmc2V0V2lkdGg+dSYmKHM9dS1lLm9mZnNldFdpZHRoKX1lLnN0eWxlLnRvcD1sKyJweCIsZS5zdHlsZS5sZWZ0PWUuc3R5bGUucmlnaHQ9IiIsInJpZ2h0Ij09aT8ocz1vLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgsZS5zdHlsZS5yaWdodD0iMHB4Iik6KCJsZWZ0Ij09aT9zPTA6Im1pZGRsZSI9PWkmJihzPShvLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgpLzIpLGUuc3R5bGUubGVmdD1zKyJweCIpLHImJmFyKHRoaXMscyxsLHMrZS5vZmZzZXRXaWR0aCxsK2Uub2Zmc2V0SGVpZ2h0KX0sdHJpZ2dlck9uS2V5RG93bjpsZShudWxsLFdlKSxleGVjQ29tbWFuZDpmdW5jdGlvbih0KXtyZXR1cm4gbW9bdF0odGhpcyl9LGZpbmRQb3NIOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTE7MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIG89MCxsPVFlKHRoaXMuZG9jLHQpO2U+byYmKGw9cHIodGhpcy5kb2MsbCxpLHIsbiksIWwuaGl0U2lkZSk7KytvKTtyZXR1cm4gbH0sbW92ZUg6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3I9bi5zaGlmdHx8bi5leHRlbmR8fGplKG4uZnJvbSxuLnRvKT9wcih0aGlzLmRvYyxuLmhlYWQsdCxlLHRoaXMub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkpOjA+dD9uLmZyb206bi50byxlcih0aGlzLmRvYyxyLHIsdCl9KSxkZWxldGVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYy5zZWw7amUoci5mcm9tLHIudG8pP19lKHRoaXMuZG9jLCIiLHIuZnJvbSxwcih0aGlzLmRvYyxyLmhlYWQsdCxlLCExKSwiK2RlbGV0ZSIpOl9lKHRoaXMuZG9jLCIiLHIuZnJvbSxyLnRvLCIrZGVsZXRlIiksdGhpcy5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwfSksZmluZFBvc1Y6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MSxvPW47MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIGw9MCxzPVFlKHRoaXMuZG9jLHQpO2U+bDsrK2wpe3ZhciBhPVEodGhpcyxzLCJkaXYiKTtpZihudWxsPT1vP289YS5sZWZ0OmEubGVmdD1vLHM9Z3IodGhpcyxhLGkscikscy5oaXRTaWRlKWJyZWFrfXJldHVybiBzfSxtb3ZlVjpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsLG49USh0aGlzLHIuaGVhZCwiZGl2Iik7bnVsbCE9ci5nb2FsQ29sdW1uJiYobi5sZWZ0PXIuZ29hbENvbHVtbik7dmFyIGk9Z3IodGhpcyxuLHQsZSk7InBhZ2UiPT1lJiZmcih0aGlzLDAscSh0aGlzLGksImRpdiIpLnRvcC1uLnRvcCksZXIodGhpcy5kb2MsaSxpLHQpLHIuZ29hbENvbHVtbj1uLmxlZnR9KSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7KG51bGw9PXR8fHQhPXRoaXMuc3RhdGUub3ZlcndyaXRlKSYmKCh0aGlzLnN0YXRlLm92ZXJ3cml0ZT0hdGhpcy5zdGF0ZS5vdmVyd3JpdGUpP3RoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itb3ZlcndyaXRlIjp0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZT10aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1vdmVyd3JpdGUiLCIiKSl9LGhhc0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuZm9jdXNlZH0sc2Nyb2xsVG86bGUobnVsbCxmdW5jdGlvbih0LGUpe2NyKHRoaXMsdCxlKX0pLGdldFNjcm9sbEluZm86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRpc3BsYXkuc2Nyb2xsZXIsZT1UbztyZXR1cm57bGVmdDp0LnNjcm9sbExlZnQsdG9wOnQuc2Nyb2xsVG9wLGhlaWdodDp0LnNjcm9sbEhlaWdodC1lLHdpZHRoOnQuc2Nyb2xsV2lkdGgtZSxjbGllbnRIZWlnaHQ6dC5jbGllbnRIZWlnaHQtZSxjbGllbnRXaWR0aDp0LmNsaWVudFdpZHRoLWV9fSxzY3JvbGxJbnRvVmlldzpsZShudWxsLGZ1bmN0aW9uKHQsZSl7bnVsbD09dD90PXtmcm9tOnRoaXMuZG9jLnNlbC5oZWFkLHRvOm51bGx9OiJudW1iZXIiPT10eXBlb2YgdD90PXtmcm9tOlllKHQsMCksdG86bnVsbH06bnVsbD09dC5mcm9tJiYodD17ZnJvbTp0LHRvOm51bGx9KSx0LnRvfHwodC50bz10LmZyb20pLGV8fChlPTApO3ZhciByPXQ7bnVsbCE9dC5mcm9tLmxpbmUmJih0aGlzLmN1ck9wLnNjcm9sbFRvUG9zPXtmcm9tOnQuZnJvbSx0bzp0LnRvLG1hcmdpbjplfSxyPXtmcm9tOlEodGhpcyx0LmZyb20pLHRvOlEodGhpcyx0LnRvKX0pO3ZhciBuPXVyKHRoaXMsTWF0aC5taW4oci5mcm9tLmxlZnQsci50by5sZWZ0KSxNYXRoLm1pbihyLmZyb20udG9wLHIudG8udG9wKS1lLE1hdGgubWF4KHIuZnJvbS5yaWdodCxyLnRvLnJpZ2h0KSxNYXRoLm1heChyLmZyb20uYm90dG9tLHIudG8uYm90dG9tKStlKTtjcih0aGlzLG4uc2Nyb2xsTGVmdCxuLnNjcm9sbFRvcCl9KSxzZXRTaXplOmxlKG51bGwsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8L15cZCskLy50ZXN0KFN0cmluZyh0KSk/dCsicHgiOnR9bnVsbCE9dCYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoPXIodCkpLG51bGwhPWUmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQ9cihlKSksdGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZyYmKHRoaXMuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aD10aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcz0wKSx0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwfSksb3BlcmF0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBhZSh0aGlzLHQpfSxyZWZyZXNoOmxlKG51bGwsZnVuY3Rpb24oKXt2YXIgdD1udWxsPT10aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDtfKHRoaXMpLGNyKHRoaXMsdGhpcy5kb2Muc2Nyb2xsTGVmdCx0aGlzLmRvYy5zY3JvbGxUb3ApLHVlKHRoaXMpLHQmJm8odGhpcyl9KSxzd2FwRG9jOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kb2M7cmV0dXJuIGUuY209bnVsbCxwbih0aGlzLHQpLF8odGhpcyksZGUodGhpcywhMCksY3IodGhpcyx0LnNjcm9sbExlZnQsdC5zY3JvbGxUb3ApLFVuKHRoaXMsInN3YXBEb2MiLHRoaXMsZSksZX0pLGdldElucHV0RmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0fSxnZXRXcmFwcGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcn0sZ2V0U2Nyb2xsZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcn0sZ2V0R3V0dGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyc319LGpuKHQpO3ZhciBzbz10Lm9wdGlvbkhhbmRsZXJzPXt9LGFvPXQuZGVmYXVsdHM9e30sdW89dC5Jbml0PXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLkluaXQifX07eXIoInZhbHVlIiwiIixmdW5jdGlvbih0LGUpe3Quc2V0VmFsdWUoZSl9LCEwKSx5cigibW9kZSIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZG9jLm1vZGVPcHRpb249ZSxyKHQpfSwhMCkseXIoImluZGVudFVuaXQiLDIsciwhMCkseXIoImluZGVudFdpdGhUYWJzIiwhMSkseXIoInNtYXJ0SW5kZW50IiwhMCkseXIoInRhYlNpemUiLDQsZnVuY3Rpb24odCl7cih0KSxfKHQpLHVlKHQpfSwhMCkseXIoInNwZWNpYWxDaGFycyIsL1tcdFx1MDAwMC1cdTAwMTlcdTAwYWRcdTIwMGJcdTIwMjhcdTIwMjlcdWZlZmZdL2csZnVuY3Rpb24odCxlKXt0Lm9wdGlvbnMuc3BlY2lhbENoYXJzPW5ldyBSZWdFeHAoZS5zb3VyY2UrKGUudGVzdCgiCSIpPyIiOiJ8CSIpLCJnIiksdC5yZWZyZXNoKCl9LCEwKSx5cigic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsbm4sZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigiZWxlY3RyaWNDaGFycyIsITApLHlyKCJydGxNb3ZlVmlzdWFsbHkiLCFVaSkseXIoIndob2xlTGluZVVwZGF0ZUJlZm9yZSIsITApLHlyKCJ0aGVtZSIsImRlZmF1bHQiLGZ1bmN0aW9uKHQpe3ModCksYSh0KX0sITApLHlyKCJrZXlNYXAiLCJkZWZhdWx0IixsKSx5cigiZXh0cmFLZXlzIixudWxsKSx5cigib25LZXlFdmVudCIsbnVsbCkseXIoIm9uRHJhZ0V2ZW50IixudWxsKSx5cigibGluZVdyYXBwaW5nIiwhMSxuLCEwKSx5cigiZ3V0dGVycyIsW10sZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZml4ZWRHdXR0ZXIiLCEwLGZ1bmN0aW9uKHQsZSl7dC5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdD1lP3kodC5kaXNwbGF5KSsicHgiOiIwIix0LnJlZnJlc2goKX0sITApLHlyKCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciIsITEsZCwhMCkseXIoImxpbmVOdW1iZXJzIiwhMSxmdW5jdGlvbih0KXtoKHQub3B0aW9ucyksYSh0KX0sITApLHlyKCJmaXJzdExpbmVOdW1iZXIiLDEsYSwhMCkseXIoImxpbmVOdW1iZXJGb3JtYXR0ZXIiLGZ1bmN0aW9uKHQpe3JldHVybiB0fSxhLCEwKSx5cigic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCExLEEsITApLHlyKCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUiLCEwKSx5cigicmVhZE9ubHkiLCExLGZ1bmN0aW9uKHQsZSl7Im5vY3Vyc29yIj09ZT8oemUodCksdC5kaXNwbGF5LmlucHV0LmJsdXIoKSx0LmRpc3BsYXkuZGlzYWJsZWQ9ITApOih0LmRpc3BsYXkuZGlzYWJsZWQ9ITEsZXx8ZGUodCwhMCkpfSkseXIoImRyYWdEcm9wIiwhMCkseXIoImN1cnNvckJsaW5rUmF0ZSIsNTMwKSx5cigiY3Vyc29yU2Nyb2xsTWFyZ2luIiwwKSx5cigiY3Vyc29ySGVpZ2h0IiwxKSx5cigid29ya1RpbWUiLDEwMCkseXIoIndvcmtEZWxheSIsMTAwKSx5cigiZmxhdHRlblNwYW5zIiwhMCkseXIoInBvbGxJbnRlcnZhbCIsMTAwKSx5cigidW5kb0RlcHRoIiw0MCxmdW5jdGlvbih0LGUpe3QuZG9jLmhpc3RvcnkudW5kb0RlcHRoPWV9KSx5cigiaGlzdG9yeUV2ZW50RGVsYXkiLDUwMCkseXIoInZpZXdwb3J0TWFyZ2luIiwxMCxmdW5jdGlvbih0KXt0LnJlZnJlc2goKX0sITApLHlyKCJtYXhIaWdobGlnaHRMZW5ndGgiLDFlNCxmdW5jdGlvbih0KXtyKHQpLHQucmVmcmVzaCgpfSwhMCkseXIoImNydWRlTWVhc3VyaW5nRnJvbSIsMWU0KSx5cigibW92ZUlucHV0V2l0aEN1cnNvciIsITAsZnVuY3Rpb24odCxlKXtlfHwodC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcD10LmRpc3BsYXkuaW5wdXREaXYuc3R5bGUubGVmdD0wKX0pLHlyKCJ0YWJpbmRleCIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5pbnB1dC50YWJJbmRleD1lfHwiIn0pLHlyKCJhdXRvZm9jdXMiLG51bGwpO3ZhciBjbz10Lm1vZGVzPXt9LGZvPXQubWltZU1vZGVzPXt9O3QuZGVmaW5lTW9kZT1mdW5jdGlvbihlLHIpe2lmKHQuZGVmYXVsdHMubW9kZXx8Im51bGwiPT1lfHwodC5kZWZhdWx0cy5tb2RlPWUpLGFyZ3VtZW50cy5sZW5ndGg+Mil7ci5kZXBlbmRlbmNpZXM9W107Zm9yKHZhciBuPTI7bjxhcmd1bWVudHMubGVuZ3RoOysrbilyLmRlcGVuZGVuY2llcy5wdXNoKGFyZ3VtZW50c1tuXSl9Y29bZV09cn0sdC5kZWZpbmVNSU1FPWZ1bmN0aW9uKHQsZSl7Zm9bdF09ZX0sdC5yZXNvbHZlTW9kZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJmZvLmhhc093blByb3BlcnR5KGUpKWU9Zm9bZV07ZWxzZSBpZihlJiYic3RyaW5nIj09dHlwZW9mIGUubmFtZSYmZm8uaGFzT3duUHJvcGVydHkoZS5uYW1lKSl7dmFyIHI9Zm9bZS5uYW1lXTtlPWVpKHIsZSksZS5uYW1lPXIubmFtZX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSYmL15bXHdcLV0rXC9bXHdcLV0rXCt4bWwkLy50ZXN0KGUpKXJldHVybiB0LnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/e25hbWU6ZX06ZXx8e25hbWU6Im51bGwifX0sdC5nZXRNb2RlPWZ1bmN0aW9uKGUscil7dmFyIHI9dC5yZXNvbHZlTW9kZShyKSxuPWNvW3IubmFtZV07aWYoIW4pcmV0dXJuIHQuZ2V0TW9kZShlLCJ0ZXh0L3BsYWluIik7dmFyIGk9bihlLHIpO2lmKGhvLmhhc093blByb3BlcnR5KHIubmFtZSkpe3ZhciBvPWhvW3IubmFtZV07Zm9yKHZhciBsIGluIG8pby5oYXNPd25Qcm9wZXJ0eShsKSYmKGkuaGFzT3duUHJvcGVydHkobCkmJihpWyJfIitsXT1pW2xdKSxpW2xdPW9bbF0pfXJldHVybiBpLm5hbWU9ci5uYW1lLGl9LHQuZGVmaW5lTW9kZSgibnVsbCIsZnVuY3Rpb24oKXtyZXR1cm57dG9rZW46ZnVuY3Rpb24odCl7dC5za2lwVG9FbmQoKX19fSksdC5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwibnVsbCIpO3ZhciBobz10Lm1vZGVFeHRlbnNpb25zPXt9O3QuZXh0ZW5kTW9kZT1mdW5jdGlvbih0LGUpe3ZhciByPWhvLmhhc093blByb3BlcnR5KHQpP2hvW3RdOmhvW3RdPXt9O3JpKGUscil9LHQuZGVmaW5lRXh0ZW5zaW9uPWZ1bmN0aW9uKGUscil7dC5wcm90b3R5cGVbZV09cn0sdC5kZWZpbmVEb2NFeHRlbnNpb249ZnVuY3Rpb24odCxlKXt3by5wcm90b3R5cGVbdF09ZX0sdC5kZWZpbmVPcHRpb249eXI7dmFyIHBvPVtdO3QuZGVmaW5lSW5pdEhvb2s9ZnVuY3Rpb24odCl7cG8ucHVzaCh0KX07dmFyIGdvPXQuaGVscGVycz17fTt0LnJlZ2lzdGVySGVscGVyPWZ1bmN0aW9uKGUscixuKXtnby5oYXNPd25Qcm9wZXJ0eShlKXx8KGdvW2VdPXRbZV09e30pLGdvW2VdW3JdPW59LHQuaXNXb3JkQ2hhcj1vaSx0LmNvcHlTdGF0ZT1icix0LnN0YXJ0U3RhdGU9eHIsdC5pbm5lck1vZGU9ZnVuY3Rpb24odCxlKXtmb3IoO3QuaW5uZXJNb2RlOyl7dmFyIHI9dC5pbm5lck1vZGUoZSk7aWYoIXJ8fHIubW9kZT09dClicmVhaztlPXIuc3RhdGUsdD1yLm1vZGV9cmV0dXJuIHJ8fHttb2RlOnQsc3RhdGU6ZX19O3ZhciBtbz10LmNvbW1hbmRzPXtzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dC5zZXRTZWxlY3Rpb24oWWUodC5maXJzdExpbmUoKSwwKSxZZSh0Lmxhc3RMaW5lKCkpKX0sa2lsbExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoITApLHI9dC5nZXRDdXJzb3IoITEpLG49IWplKGUscik7bnx8dC5nZXRMaW5lKGUubGluZSkubGVuZ3RoIT1lLmNoP3QucmVwbGFjZVJhbmdlKCIiLGUsbj9yOlllKGUubGluZSksIitkZWxldGUiKTp0LnJlcGxhY2VSYW5nZSgiIixlLFllKGUubGluZSsxLDApLCIrZGVsZXRlIil9LGRlbGV0ZUxpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKS5saW5lO3QucmVwbGFjZVJhbmdlKCIiLFllKGUsMCksWWUoZSksIitkZWxldGUiKX0sZGVsTGluZUxlZnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLmxpbmUsMCksZSwiK2RlbGV0ZSIpfSx1bmRvOmZ1bmN0aW9uKHQpe3QudW5kbygpfSxyZWRvOmZ1bmN0aW9uKHQpe3QucmVkbygpfSxnb0RvY1N0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCkpfSxnb0RvY0VuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0Lmxhc3RMaW5lKCkpKX0sZ29MaW5lU3RhcnQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oeGkodCx0LmdldEN1cnNvcigpLmxpbmUpKX0sZ29MaW5lU3RhcnRTbWFydDpmdW5jdGlvbih0KXt2YXIgZT10LmdldEN1cnNvcigpLHI9eGkodCxlLmxpbmUpLG49dC5nZXRMaW5lSGFuZGxlKHIubGluZSksaT13bihuKTtpZihpJiYwIT1pWzBdLmxldmVsKXQuZXh0ZW5kU2VsZWN0aW9uKHIpO2Vsc2V7dmFyIG89TWF0aC5tYXgoMCxuLnRleHQuc2VhcmNoKC9cUy8pKSxsPWUubGluZT09ci5saW5lJiZlLmNoPD1vJiZlLmNoO3QuZXh0ZW5kU2VsZWN0aW9uKFllKHIubGluZSxsPzA6bykpfX0sZ29MaW5lRW5kOmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKENpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVJpZ2h0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6dC5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGgrMTAwLHRvcDplfSwiZGl2IikpfSxnb0xpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwibGluZSIpfSxnb0xpbmVEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwibGluZSIpfSxnb1BhZ2VVcDpmdW5jdGlvbih0KXt0Lm1vdmVWKC0xLCJwYWdlIil9LGdvUGFnZURvd246ZnVuY3Rpb24odCl7dC5tb3ZlVigxLCJwYWdlIil9LGdvQ2hhckxlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiY2hhciIpfSxnb0NoYXJSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNoYXIiKX0sZ29Db2x1bW5MZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNvbHVtbiIpfSxnb0NvbHVtblJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiY29sdW1uIil9LGdvV29yZExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwid29yZCIpfSxnb0dyb3VwUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJncm91cCIpfSxnb0dyb3VwTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJncm91cCIpfSxnb1dvcmRSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsIndvcmQiKX0sZGVsQ2hhckJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImNoYXIiKX0sZGVsQ2hhckFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJjaGFyIil9LGRlbFdvcmRCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJ3b3JkIil9LGRlbFdvcmRBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwid29yZCIpfSxkZWxHcm91cEJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImdyb3VwIil9LGRlbEdyb3VwQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsImdyb3VwIil9LGluZGVudEF1dG86ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iil9LGluZGVudE1vcmU6ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oImFkZCIpfSxpbmRlbnRMZXNzOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpfSxpbnNlcnRUYWI6ZnVuY3Rpb24odCl7dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LGRlZmF1bHRUYWI6ZnVuY3Rpb24odCl7dC5zb21ldGhpbmdTZWxlY3RlZCgpP3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKTp0LnJlcGxhY2VTZWxlY3Rpb24oIgkiLCJlbmQiLCIraW5wdXQiKX0sdHJhbnNwb3NlQ2hhcnM6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXQuZ2V0TGluZShlLmxpbmUpO2UuY2g+MCYmZS5jaDxyLmxlbmd0aC0xJiZ0LnJlcGxhY2VSYW5nZShyLmNoYXJBdChlLmNoKStyLmNoYXJBdChlLmNoLTEpLFllKGUubGluZSxlLmNoLTEpLFllKGUubGluZSxlLmNoKzEpKX0sbmV3bGluZUFuZEluZGVudDpmdW5jdGlvbih0KXtsZSh0LGZ1bmN0aW9uKCl7dC5yZXBsYWNlU2VsZWN0aW9uKCJcbiIsImVuZCIsIitpbnB1dCIpLHQuaW5kZW50TGluZSh0LmdldEN1cnNvcigpLmxpbmUsbnVsbCwhMCl9KSgpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7dC50b2dnbGVPdmVyd3JpdGUoKX19LHZvPXQua2V5TWFwPXt9O3ZvLmJhc2ljPXtMZWZ0OiJnb0NoYXJMZWZ0IixSaWdodDoiZ29DaGFyUmlnaHQiLFVwOiJnb0xpbmVVcCIsRG93bjoiZ29MaW5lRG93biIsRW5kOiJnb0xpbmVFbmQiLEhvbWU6ImdvTGluZVN0YXJ0U21hcnQiLFBhZ2VVcDoiZ29QYWdlVXAiLFBhZ2VEb3duOiJnb1BhZ2VEb3duIixEZWxldGU6ImRlbENoYXJBZnRlciIsQmFja3NwYWNlOiJkZWxDaGFyQmVmb3JlIiwiU2hpZnQtQmFja3NwYWNlIjoiZGVsQ2hhckJlZm9yZSIsVGFiOiJkZWZhdWx0VGFiIiwiU2hpZnQtVGFiIjoiaW5kZW50QXV0byIsRW50ZXI6Im5ld2xpbmVBbmRJbmRlbnQiLEluc2VydDoidG9nZ2xlT3ZlcndyaXRlIn0sdm8ucGNEZWZhdWx0PXsiQ3RybC1BIjoic2VsZWN0QWxsIiwiQ3RybC1EIjoiZGVsZXRlTGluZSIsIkN0cmwtWiI6InVuZG8iLCJTaGlmdC1DdHJsLVoiOiJyZWRvIiwiQ3RybC1ZIjoicmVkbyIsIkN0cmwtSG9tZSI6ImdvRG9jU3RhcnQiLCJBbHQtVXAiOiJnb0RvY1N0YXJ0IiwiQ3RybC1FbmQiOiJnb0RvY0VuZCIsIkN0cmwtRG93biI6ImdvRG9jRW5kIiwiQ3RybC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJDdHJsLVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQWx0LUxlZnQiOiJnb0xpbmVTdGFydCIsIkFsdC1SaWdodCI6ImdvTGluZUVuZCIsIkN0cmwtQmFja3NwYWNlIjoiZGVsR3JvdXBCZWZvcmUiLCJDdHJsLURlbGV0ZSI6ImRlbEdyb3VwQWZ0ZXIiLCJDdHJsLVMiOiJzYXZlIiwiQ3RybC1GIjoiZmluZCIsIkN0cmwtRyI6ImZpbmROZXh0IiwiU2hpZnQtQ3RybC1HIjoiZmluZFByZXYiLCJTaGlmdC1DdHJsLUYiOiJyZXBsYWNlIiwiU2hpZnQtQ3RybC1SIjoicmVwbGFjZUFsbCIsIkN0cmwtWyI6ImluZGVudExlc3MiLCJDdHJsLV0iOiJpbmRlbnRNb3JlIixmYWxsdGhyb3VnaDoiYmFzaWMifSx2by5tYWNEZWZhdWx0PXsiQ21kLUEiOiJzZWxlY3RBbGwiLCJDbWQtRCI6ImRlbGV0ZUxpbmUiLCJDbWQtWiI6InVuZG8iLCJTaGlmdC1DbWQtWiI6InJlZG8iLCJDbWQtWSI6InJlZG8iLCJDbWQtVXAiOiJnb0RvY1N0YXJ0IiwiQ21kLUVuZCI6ImdvRG9jRW5kIiwiQ21kLURvd24iOiJnb0RvY0VuZCIsIkFsdC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJBbHQtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJDbWQtTGVmdCI6ImdvTGluZVN0YXJ0IiwiQ21kLVJpZ2h0IjoiZ29MaW5lRW5kIiwiQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1BbHQtQmFja3NwYWNlIjoiZGVsR3JvdXBBZnRlciIsIkFsdC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ21kLVMiOiJzYXZlIiwiQ21kLUYiOiJmaW5kIiwiQ21kLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUNtZC1HIjoiZmluZFByZXYiLCJDbWQtQWx0LUYiOiJyZXBsYWNlIiwiU2hpZnQtQ21kLUFsdC1GIjoicmVwbGFjZUFsbCIsIkNtZC1bIjoiaW5kZW50TGVzcyIsIkNtZC1dIjoiaW5kZW50TW9yZSIsIkNtZC1CYWNrc3BhY2UiOiJkZWxMaW5lTGVmdCIsZmFsbHRocm91Z2g6WyJiYXNpYyIsImVtYWNzeSJdfSx2b1siZGVmYXVsdCJdPUtpP3ZvLm1hY0RlZmF1bHQ6dm8ucGNEZWZhdWx0LHZvLmVtYWNzeT17IkN0cmwtRiI6ImdvQ2hhclJpZ2h0IiwiQ3RybC1CIjoiZ29DaGFyTGVmdCIsIkN0cmwtUCI6ImdvTGluZVVwIiwiQ3RybC1OIjoiZ29MaW5lRG93biIsIkFsdC1GIjoiZ29Xb3JkUmlnaHQiLCJBbHQtQiI6ImdvV29yZExlZnQiLCJDdHJsLUEiOiJnb0xpbmVTdGFydCIsIkN0cmwtRSI6ImdvTGluZUVuZCIsIkN0cmwtViI6ImdvUGFnZURvd24iLCJTaGlmdC1DdHJsLVYiOiJnb1BhZ2VVcCIsIkN0cmwtRCI6ImRlbENoYXJBZnRlciIsIkN0cmwtSCI6ImRlbENoYXJCZWZvcmUiLCJBbHQtRCI6ImRlbFdvcmRBZnRlciIsIkFsdC1CYWNrc3BhY2UiOiJkZWxXb3JkQmVmb3JlIiwiQ3RybC1LIjoia2lsbExpbmUiLCJDdHJsLVQiOiJ0cmFuc3Bvc2VDaGFycyJ9LHQubG9va3VwS2V5PXdyLHQuaXNNb2RpZmllcktleT1Mcix0LmtleU5hbWU9a3IsdC5mcm9tVGV4dEFyZWE9ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7ZS52YWx1ZT11LmdldFZhbHVlKCl9aWYocnx8KHI9e30pLHIudmFsdWU9ZS52YWx1ZSwhci50YWJpbmRleCYmZS50YWJpbmRleCYmKHIudGFiaW5kZXg9ZS50YWJpbmRleCksIXIucGxhY2Vob2xkZXImJmUucGxhY2Vob2xkZXImJihyLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIpLG51bGw9PXIuYXV0b2ZvY3VzKXt2YXIgaT1kb2N1bWVudC5ib2R5O3RyeXtpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2gobyl7fXIuYXV0b2ZvY3VzPWk9PWV8fG51bGwhPWUuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSYmaT09ZG9jdW1lbnQuYm9keX1pZihlLmZvcm0mJihHbihlLmZvcm0sInN1Ym1pdCIsbiksIXIubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkpe3ZhciBsPWUuZm9ybSxzPWwuc3VibWl0O3RyeXt2YXIgYT1sLnN1Ym1pdD1mdW5jdGlvbigpe24oKSxsLnN1Ym1pdD1zLGwuc3VibWl0KCksbC5zdWJtaXQ9YX19Y2F0Y2gobyl7fX1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciB1PXQoZnVuY3Rpb24odCl7ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGUubmV4dFNpYmxpbmcpfSxyKTtyZXR1cm4gdS5zYXZlPW4sdS5nZXRUZXh0QXJlYT1mdW5jdGlvbigpe3JldHVybiBlfSx1LnRvVGV4dEFyZWE9ZnVuY3Rpb24oKXtuKCksZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUuZ2V0V3JhcHBlckVsZW1lbnQoKSksZS5zdHlsZS5kaXNwbGF5PSIiLGUuZm9ybSYmKFZuKGUuZm9ybSwic3VibWl0IixuKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JtLnN1Ym1pdCYmKGUuZm9ybS5zdWJtaXQ9cykpfSx1fSxTci5wcm90b3R5cGU9e2VvbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcz49dGhpcy5zdHJpbmcubGVuZ3RofSxzb2w6ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy5wb3N9LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKXx8dm9pZCAwfSxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPHRoaXMuc3RyaW5nLmxlbmd0aD90aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyk6dm9pZCAwfSxlYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTtpZigic3RyaW5nIj09dHlwZW9mIHQpdmFyIHI9ZT09dDtlbHNlIHZhciByPWUmJih0LnRlc3Q/dC50ZXN0KGUpOnQoZSkpO3JldHVybiByPygrK3RoaXMucG9zLGUpOnZvaWQgMH0sZWF0V2hpbGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucG9zO3RoaXMuZWF0KHQpOyk7cmV0dXJuIHRoaXMucG9zPmV9LGVhdFNwYWNlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucG9zOy9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpOykrK3RoaXMucG9zO3JldHVybiB0aGlzLnBvcz50fSxza2lwVG9FbmQ6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0cmluZy5sZW5ndGh9LHNraXBUbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN0cmluZy5pbmRleE9mKHQsdGhpcy5wb3MpO3JldHVybiBlPi0xPyh0aGlzLnBvcz1lLCEwKTp2b2lkIDB9LGJhY2tVcDpmdW5jdGlvbih0KXt0aGlzLnBvcy09dH0sY29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENvbHVtblBvczx0aGlzLnN0YXJ0JiYodGhpcy5sYXN0Q29sdW1uVmFsdWU9Wm4odGhpcy5zdHJpbmcsdGhpcy5zdGFydCx0aGlzLnRhYlNpemUsdGhpcy5sYXN0Q29sdW1uUG9zLHRoaXMubGFzdENvbHVtblZhbHVlKSx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5zdGFydCksdGhpcy5sYXN0Q29sdW1uVmFsdWV9LGluZGVudGF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFpuKHRoaXMuc3RyaW5nLG51bGwsdGhpcy50YWJTaXplKX0sbWF0Y2g6ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIG49dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHQpO3JldHVybiBuJiZuLmluZGV4PjA/bnVsbDoobiYmZSE9PSExJiYodGhpcy5wb3MrPW5bMF0ubGVuZ3RoKSxuKX12YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gcj90LnRvTG93ZXJDYXNlKCk6dH0sbz10aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsdC5sZW5ndGgpO3JldHVybiBpKG8pPT1pKHQpPyhlIT09ITEmJih0aGlzLnBvcys9dC5sZW5ndGgpLCEwKTp2b2lkIDB9LGN1cnJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCx0aGlzLnBvcyl9fSx0LlN0cmluZ1N0cmVhbT1Tcix0LlRleHRNYXJrZXI9TXIsam4oTXIpLE1yLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKXt2YXIgdD10aGlzLmRvYy5jbSxlPXQmJiF0LmN1ck9wO2lmKGUmJmllKHQpLFluKHRoaXMsImNsZWFyIikpe3ZhciByPXRoaXMuZmluZCgpO3ImJlVuKHRoaXMsImNsZWFyIixyLmZyb20sci50byl9Zm9yKHZhciBuPW51bGwsaT1udWxsLG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGw9dGhpcy5saW5lc1tvXSxzPU5yKGwubWFya2VkU3BhbnMsdGhpcyk7bnVsbCE9cy50byYmKGk9Ym4obCkpLGwubWFya2VkU3BhbnM9RHIobC5tYXJrZWRTcGFucyxzKSxudWxsIT1zLmZyb20/bj1ibihsKTp0aGlzLmNvbGxhcHNlZCYmIVZyKHRoaXMuZG9jLGwpJiZ0JiZ5bihsLHJlKHQuZGlzcGxheSkpfWlmKHQmJnRoaXMuY29sbGFwc2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZylmb3IodmFyIG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGE9R3IodC5kb2MsdGhpcy5saW5lc1tvXSksdT1jKHQuZG9jLGEpO3U+dC5kaXNwbGF5Lm1heExpbmVMZW5ndGgmJih0LmRpc3BsYXkubWF4TGluZT1hLHQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoPXUsdC5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKX1udWxsIT1uJiZ0JiZ1ZSh0LG4saSsxKSx0aGlzLmxpbmVzLmxlbmd0aD0wLHRoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITAsdGhpcy5hdG9taWMmJnRoaXMuZG9jLmNhbnRFZGl0JiYodGhpcy5kb2MuY2FudEVkaXQ9ITEsdCYmaXIodCkpLGUmJm9lKHQpfX0sTXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyPTA7cjx0aGlzLmxpbmVzLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGluZXNbcl0saT1OcihuLm1hcmtlZFNwYW5zLHRoaXMpO2lmKG51bGwhPWkuZnJvbXx8bnVsbCE9aS50byl7dmFyIG89Ym4obik7bnVsbCE9aS5mcm9tJiYodD1ZZShvLGkuZnJvbSkpLG51bGwhPWkudG8mJihlPVllKG8saS50bykpfX1yZXR1cm4iYm9va21hcmsiPT10aGlzLnR5cGU/dDp0JiZ7ZnJvbTp0LHRvOmV9fSxNci5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZmluZCgpLGU9dGhpcy5kb2MuY207aWYodCYmZSl7ImJvb2ttYXJrIiE9dGhpcy50eXBlJiYodD10LmZyb20pO3ZhciByPWduKHRoaXMuZG9jLHQubGluZSk7aWYoRyhlLHIpLHQubGluZT49ZS5kaXNwbGF5LnNob3dpbmdGcm9tJiZ0LmxpbmU8ZS5kaXNwbGF5LnNob3dpbmdUbyl7Zm9yKHZhciBuPWUuZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpaWYobi5saW5lT2JqPT1yKXtuLm9mZnNldEhlaWdodCE9ci5oZWlnaHQmJnluKHIsbi5vZmZzZXRIZWlnaHQpOwpicmVha31hZShlLGZ1bmN0aW9uKCl7ZS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPWUuY3VyT3AuZm9yY2VVcGRhdGU9ZS5jdXJPcC51cGRhdGVNYXhMaW5lPSEwfSl9fX0sTXIucHJvdG90eXBlLmF0dGFjaExpbmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7ZS5tYXliZUhpZGRlbk1hcmtlcnMmJi0xIT10aShlLm1heWJlSGlkZGVuTWFya2Vycyx0aGlzKXx8KGUubWF5YmVVbmhpZGRlbk1hcmtlcnN8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX10aGlzLmxpbmVzLnB1c2godCl9LE1yLnByb3RvdHlwZS5kZXRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGluZXMuc3BsaWNlKHRpKHRoaXMubGluZXMsdCksMSksIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7KGUubWF5YmVIaWRkZW5NYXJrZXJzfHwoZS5tYXliZUhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfX0sdC5TaGFyZWRUZXh0TWFya2VyPUFyLGpuKEFyKSxBci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMDtmb3IodmFyIHQ9MDt0PHRoaXMubWFya2Vycy5sZW5ndGg7Kyt0KXRoaXMubWFya2Vyc1t0XS5jbGVhcigpO1VuKHRoaXMsImNsZWFyIil9fSxBci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaW1hcnkuZmluZCgpfTt2YXIgeW89dC5MaW5lV2lkZ2V0PWZ1bmN0aW9uKHQsZSxyKXtpZihyKWZvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0aGlzW25dPXJbbl0pO3RoaXMuY209dCx0aGlzLm5vZGU9ZX07am4oeW8pLHlvLnByb3RvdHlwZS5jbGVhcj1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMubGluZS53aWRnZXRzLGU9Ym4odGhpcy5saW5lKTtpZihudWxsIT1lJiZ0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdPT10aGlzJiZ0LnNwbGljZShyLS0sMSk7dC5sZW5ndGh8fCh0aGlzLmxpbmUud2lkZ2V0cz1udWxsKTt2YXIgbj1Dbih0aGlzLmNtLHRoaXMubGluZSk8dGhpcy5jbS5kb2Muc2Nyb2xsVG9wO3luKHRoaXMubGluZSxNYXRoLm1heCgwLHRoaXMubGluZS5oZWlnaHQtWXIodGhpcykpKSxuJiZmcih0aGlzLmNtLDAsLXRoaXMuaGVpZ2h0KSx1ZSh0aGlzLmNtLGUsZSsxKX19KSx5by5wcm90b3R5cGUuY2hhbmdlZD1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVpZ2h0O3RoaXMuaGVpZ2h0PW51bGw7dmFyIGU9WXIodGhpcyktdDtpZihlKXt5bih0aGlzLmxpbmUsdGhpcy5saW5lLmhlaWdodCtlKTt2YXIgcj1ibih0aGlzLmxpbmUpO3VlKHRoaXMuY20scixyKzEpfX0pO3ZhciBibz10LkxpbmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LFhyKHRoaXMsZSksdGhpcy5oZWlnaHQ9cj9yKHRoaXMpOjF9O2puKGJvKSxiby5wcm90b3R5cGUubGluZU5vPWZ1bmN0aW9uKCl7cmV0dXJuIGJuKHRoaXMpfTt2YXIgeG89e307Zm4ucHJvdG90eXBlPXtjaHVua1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saW5lcy5sZW5ndGh9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQsbj10K2U7bj5yOysrcil7dmFyIGk9dGhpcy5saW5lc1tyXTt0aGlzLmhlaWdodC09aS5oZWlnaHQsWnIoaSksVW4oaSwiZGVsZXRlIil9dGhpcy5saW5lcy5zcGxpY2UodCxlKX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7dC5zcGxpY2UuYXBwbHkodCxbdC5sZW5ndGgsMF0uY29uY2F0KHRoaXMubGluZXMpKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGVpZ2h0Kz1yLHRoaXMubGluZXM9dGhpcy5saW5lcy5zbGljZSgwLHQpLmNvbmNhdChlKS5jb25jYXQodGhpcy5saW5lcy5zbGljZSh0KSk7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtpPm47KytuKWVbbl0ucGFyZW50PXRoaXN9LGl0ZXJOOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dCtlO24+dDsrK3QpaWYocih0aGlzLmxpbmVzW3RdKSlyZXR1cm4hMH19LGhuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24odCxlKXt0aGlzLnNpemUtPWU7Zm9yKHZhciByPTA7cjx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+dCl7dmFyIG89TWF0aC5taW4oZSxpLXQpLGw9bi5oZWlnaHQ7aWYobi5yZW1vdmVJbm5lcih0LG8pLHRoaXMuaGVpZ2h0LT1sLW4uaGVpZ2h0LGk9PW8mJih0aGlzLmNoaWxkcmVuLnNwbGljZShyLS0sMSksbi5wYXJlbnQ9bnVsbCksMD09KGUtPW8pKWJyZWFrO3Q9MH1lbHNlIHQtPWl9aWYodGhpcy5zaXplLWU8MjUpe3ZhciBzPVtdO3RoaXMuY29sbGFwc2UocyksdGhpcy5jaGlsZHJlbj1bbmV3IGZuKHMpXSx0aGlzLmNoaWxkcmVuWzBdLnBhcmVudD10aGlzfX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmNoaWxkcmVuLmxlbmd0aDtyPmU7KytlKXRoaXMuY2hpbGRyZW5bZV0uY29sbGFwc2UodCl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpemUrPWUubGVuZ3RoLHRoaXMuaGVpZ2h0Kz1yO2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD49dCl7aWYoby5pbnNlcnRJbm5lcih0LGUsciksby5saW5lcyYmby5saW5lcy5sZW5ndGg+NTApe2Zvcig7by5saW5lcy5sZW5ndGg+NTA7KXt2YXIgcz1vLmxpbmVzLnNwbGljZShvLmxpbmVzLmxlbmd0aC0yNSwyNSksYT1uZXcgZm4ocyk7by5oZWlnaHQtPWEuaGVpZ2h0LHRoaXMuY2hpbGRyZW4uc3BsaWNlKG4rMSwwLGEpLGEucGFyZW50PXRoaXN9dGhpcy5tYXliZVNwaWxsKCl9YnJlYWt9dC09bH19LG1heWJlU3BpbGw6ZnVuY3Rpb24oKXtpZighKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPD0xMCkpe3ZhciB0PXRoaXM7ZG97dmFyIGU9dC5jaGlsZHJlbi5zcGxpY2UodC5jaGlsZHJlbi5sZW5ndGgtNSw1KSxyPW5ldyBobihlKTtpZih0LnBhcmVudCl7dC5zaXplLT1yLnNpemUsdC5oZWlnaHQtPXIuaGVpZ2h0O3ZhciBuPXRpKHQucGFyZW50LmNoaWxkcmVuLHQpO3QucGFyZW50LmNoaWxkcmVuLnNwbGljZShuKzEsMCxyKX1lbHNle3ZhciBpPW5ldyBobih0LmNoaWxkcmVuKTtpLnBhcmVudD10LHQuY2hpbGRyZW49W2kscl0sdD1pfXIucGFyZW50PXQucGFyZW50fXdoaWxlKHQuY2hpbGRyZW4ubGVuZ3RoPjEwKTt0LnBhcmVudC5tYXliZVNwaWxsKCl9fSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10aGlzLmNoaWxkcmVuW25dLGw9by5jaHVua1NpemUoKTtpZihsPnQpe3ZhciBzPU1hdGgubWluKGUsbC10KTtpZihvLml0ZXJOKHQscyxyKSlyZXR1cm4hMDtpZigwPT0oZS09cykpYnJlYWs7dD0wfWVsc2UgdC09bH19fTt2YXIgQ289MCx3bz10LkRvYz1mdW5jdGlvbih0LGUscil7aWYoISh0aGlzIGluc3RhbmNlb2Ygd28pKXJldHVybiBuZXcgd28odCxlLHIpO251bGw9PXImJihyPTApLGhuLmNhbGwodGhpcyxbbmV3IGZuKFtuZXcgYm8oIiIsbnVsbCldKV0pLHRoaXMuZmlyc3Q9cix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbExlZnQ9MCx0aGlzLmNhbnRFZGl0PSExLHRoaXMuaGlzdG9yeT1MbigpLHRoaXMuY2xlYW5HZW5lcmF0aW9uPTEsdGhpcy5mcm9udGllcj1yO3ZhciBuPVllKHIsMCk7dGhpcy5zZWw9e2Zyb206bix0bzpuLGhlYWQ6bixhbmNob3I6bixzaGlmdDohMSxleHRlbmQ6ITEsZ29hbENvbHVtbjpudWxsfSx0aGlzLmlkPSsrQ28sdGhpcy5tb2RlT3B0aW9uPWUsInN0cmluZyI9PXR5cGVvZiB0JiYodD16byh0KSksY24odGhpcyx7ZnJvbTpuLHRvOm4sdGV4dDp0fSxudWxsLHtoZWFkOm4sYW5jaG9yOm59KX07d28ucHJvdG90eXBlPWVpKGhuLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6d28saXRlcjpmdW5jdGlvbih0LGUscil7cj90aGlzLml0ZXJOKHQtdGhpcy5maXJzdCxlLXQscik6dGhpcy5pdGVyTih0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplLHQpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lLmxlbmd0aDtpPm47KytuKXIrPWVbbl0uaGVpZ2h0O3RoaXMuaW5zZXJ0SW5uZXIodC10aGlzLmZpcnN0LGUscil9LHJlbW92ZTpmdW5jdGlvbih0LGUpe3RoaXMucmVtb3ZlSW5uZXIodC10aGlzLmZpcnN0LGUpfSxnZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT12bih0aGlzLHRoaXMuZmlyc3QsdGhpcy5maXJzdCt0aGlzLnNpemUpO3JldHVybiB0PT09ITE/ZTplLmpvaW4odHx8IlxuIil9LHNldFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVllKHRoaXMuZmlyc3QsMCkscj10aGlzLmZpcnN0K3RoaXMuc2l6ZS0xO0JlKHRoaXMse2Zyb206ZSx0bzpZZShyLGduKHRoaXMscikudGV4dC5sZW5ndGgpLHRleHQ6em8odCksb3JpZ2luOiJzZXRWYWx1ZSJ9LHtoZWFkOmUsYW5jaG9yOmV9LCEwKX0scmVwbGFjZVJhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe2U9UWUodGhpcyxlKSxyPXI/UWUodGhpcyxyKTplLF9lKHRoaXMsdCxlLHIsbil9LGdldFJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1tbih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSk7cmV0dXJuIHI9PT0hMT9uOm4uam9pbihyfHwiXG4iKX0sZ2V0TGluZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldExpbmVIYW5kbGUodCk7cmV0dXJuIGUmJmUudGV4dH0sc2V0TGluZTpmdW5jdGlvbih0LGUpe3RyKHRoaXMsdCkmJl9lKHRoaXMsZSxZZSh0LDApLFFlKHRoaXMsWWUodCkpKX0scmVtb3ZlTGluZTpmdW5jdGlvbih0KXt0P19lKHRoaXMsIiIsUWUodGhpcyxZZSh0LTEpKSxRZSh0aGlzLFllKHQpKSk6X2UodGhpcywiIixZZSgwLDApLFFlKHRoaXMsWWUoMSwwKSkpfSxnZXRMaW5lSGFuZGxlOmZ1bmN0aW9uKHQpe3JldHVybiB0cih0aGlzLHQpP2duKHRoaXMsdCk6dm9pZCAwfSxnZXRMaW5lTnVtYmVyOmZ1bmN0aW9uKHQpe3JldHVybiBibih0KX0sZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ9Z24odGhpcyx0KSksR3IodGhpcyx0KX0sbGluZUNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0sZmlyc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3R9LGxhc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3QrdGhpcy5zaXplLTF9LGNsaXBQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIFFlKHRoaXMsdCl9LGdldEN1cnNvcjpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuc2VsO3JldHVybiBlPW51bGw9PXR8fCJoZWFkIj09dD9yLmhlYWQ6ImFuY2hvciI9PXQ/ci5hbmNob3I6ImVuZCI9PXR8fHQ9PT0hMT9yLnRvOnIuZnJvbSxaZShlKX0sc29tZXRoaW5nU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hamUodGhpcy5zZWwuaGVhZCx0aGlzLnNlbC5hbmNob3IpfSxzZXRDdXJzb3I6c2UoZnVuY3Rpb24odCxlLHIpe3ZhciBuPVFlKHRoaXMsIm51bWJlciI9PXR5cGVvZiB0P1llKHQsZXx8MCk6dCk7cj9lcih0aGlzLG4pOm5yKHRoaXMsbixuKX0pLHNldFNlbGVjdGlvbjpzZShmdW5jdGlvbih0LGUscil7bnIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZXx8dCkscil9KSxleHRlbmRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe2VyKHRoaXMsUWUodGhpcyx0KSxlJiZRZSh0aGlzLGUpLHIpfSksZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFJhbmdlKHRoaXMuc2VsLmZyb20sdGhpcy5zZWwudG8sdCl9LHJlcGxhY2VTZWxlY3Rpb246ZnVuY3Rpb24odCxlLHIpe0JlKHRoaXMse2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byx0ZXh0OnpvKHQpLG9yaWdpbjpyfSxlfHwiYXJvdW5kIil9LHVuZG86c2UoZnVuY3Rpb24oKXtWZSh0aGlzLCJ1bmRvIil9KSxyZWRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywicmVkbyIpfSksc2V0RXh0ZW5kaW5nOmZ1bmN0aW9uKHQpe3RoaXMuc2VsLmV4dGVuZD10fSxoaXN0b3J5U2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGlzdG9yeTtyZXR1cm57dW5kbzp0LmRvbmUubGVuZ3RoLHJlZG86dC51bmRvbmUubGVuZ3RofX0sY2xlYXJIaXN0b3J5OmZ1bmN0aW9uKCl7dGhpcy5oaXN0b3J5PUxuKHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKX0sbWFya0NsZWFuOmZ1bmN0aW9uKCl7dGhpcy5jbGVhbkdlbmVyYXRpb249dGhpcy5jaGFuZ2VHZW5lcmF0aW9uKCl9LGNoYW5nZUdlbmVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaXN0b3J5Lmxhc3RPcD10aGlzLmhpc3RvcnkubGFzdE9yaWdpbj1udWxsLHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9ufSxpc0NsZWFuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbj09KHR8fHRoaXMuY2xlYW5HZW5lcmF0aW9uKX0sZ2V0SGlzdG9yeTpmdW5jdGlvbigpe3JldHVybntkb25lOkhuKHRoaXMuaGlzdG9yeS5kb25lKSx1bmRvbmU6SG4odGhpcy5oaXN0b3J5LnVuZG9uZSl9fSxzZXRIaXN0b3J5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7ZS5kb25lPXQuZG9uZS5zbGljZSgwKSxlLnVuZG9uZT10LnVuZG9uZS5zbGljZSgwKX0sbWFya1RleHQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUcih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSxyLCJyYW5nZSIpfSxzZXRCb29rbWFyazpmdW5jdGlvbih0LGUpe3ZhciByPXtyZXBsYWNlZFdpdGg6ZSYmKG51bGw9PWUubm9kZVR5cGU/ZS53aWRnZXQ6ZSksaW5zZXJ0TGVmdDplJiZlLmluc2VydExlZnR9O3JldHVybiB0PVFlKHRoaXMsdCksVHIodGhpcyx0LHQsciwiYm9va21hcmsiKX0sZmluZE1hcmtzQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLHQpO3ZhciBlPVtdLHI9Z24odGhpcyx0LmxpbmUpLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07KG51bGw9PWkuZnJvbXx8aS5mcm9tPD10LmNoKSYmKG51bGw9PWkudG98fGkudG8+PXQuY2gpJiZlLnB1c2goaS5tYXJrZXIucGFyZW50fHxpLm1hcmtlcil9cmV0dXJuIGV9LGdldEFsbE1hcmtzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihlKXt2YXIgcj1lLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pbnVsbCE9cltuXS5mcm9tJiZ0LnB1c2gocltuXS5tYXJrZXIpfSksdH0scG9zRnJvbUluZGV4OmZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKG4pe3ZhciBpPW4udGV4dC5sZW5ndGgrMTtyZXR1cm4gaT50PyhlPXQsITApOih0LT1pLCsrcix2b2lkIDApfSksUWUodGhpcyxZZShyLGUpKX0saW5kZXhGcm9tUG9zOmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT10LmNoO3JldHVybiB0LmxpbmU8dGhpcy5maXJzdHx8dC5jaDwwPzA6KHRoaXMuaXRlcih0aGlzLmZpcnN0LHQubGluZSxmdW5jdGlvbih0KXtlKz10LnRleHQubGVuZ3RoKzF9KSxlKX0sY29weTpmdW5jdGlvbih0KXt2YXIgZT1uZXcgd28odm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKSx0aGlzLm1vZGVPcHRpb24sdGhpcy5maXJzdCk7cmV0dXJuIGUuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLGUuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbExlZnQsZS5zZWw9e2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byxoZWFkOnRoaXMuc2VsLmhlYWQsYW5jaG9yOnRoaXMuc2VsLmFuY2hvcixzaGlmdDp0aGlzLnNlbC5zaGlmdCxleHRlbmQ6ITEsZ29hbENvbHVtbjp0aGlzLnNlbC5nb2FsQ29sdW1ufSx0JiYoZS5oaXN0b3J5LnVuZG9EZXB0aD10aGlzLmhpc3RvcnkudW5kb0RlcHRoLGUuc2V0SGlzdG9yeSh0aGlzLmdldEhpc3RvcnkoKSkpLGV9LGxpbmtlZERvYzpmdW5jdGlvbih0KXt0fHwodD17fSk7dmFyIGU9dGhpcy5maXJzdCxyPXRoaXMuZmlyc3QrdGhpcy5zaXplO251bGwhPXQuZnJvbSYmdC5mcm9tPmUmJihlPXQuZnJvbSksbnVsbCE9dC50byYmdC50bzxyJiYocj10LnRvKTt2YXIgbj1uZXcgd28odm4odGhpcyxlLHIpLHQubW9kZXx8dGhpcy5tb2RlT3B0aW9uLGUpO3JldHVybiB0LnNoYXJlZEhpc3QmJihuLmhpc3Rvcnk9dGhpcy5oaXN0b3J5KSwodGhpcy5saW5rZWR8fCh0aGlzLmxpbmtlZD1bXSkpLnB1c2goe2RvYzpuLHNoYXJlZEhpc3Q6dC5zaGFyZWRIaXN0fSksbi5saW5rZWQ9W3tkb2M6dGhpcyxpc1BhcmVudDohMCxzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH1dLG59LHVubGlua0RvYzpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdCYmKGU9ZS5kb2MpLHRoaXMubGlua2VkKWZvcih2YXIgcj0wO3I8dGhpcy5saW5rZWQubGVuZ3RoOysrcil7dmFyIG49dGhpcy5saW5rZWRbcl07aWYobi5kb2M9PWUpe3RoaXMubGlua2VkLnNwbGljZShyLDEpLGUudW5saW5rRG9jKHRoaXMpO2JyZWFrfX1pZihlLmhpc3Rvcnk9PXRoaXMuaGlzdG9yeSl7dmFyIGk9W2UuaWRdO2RuKGUsZnVuY3Rpb24odCl7aS5wdXNoKHQuaWQpfSwhMCksZS5oaXN0b3J5PUxuKCksZS5oaXN0b3J5LmRvbmU9SG4odGhpcy5oaXN0b3J5LmRvbmUsaSksZS5oaXN0b3J5LnVuZG9uZT1Ibih0aGlzLmhpc3RvcnkudW5kb25lLGkpfX0saXRlckxpbmtlZERvY3M6ZnVuY3Rpb24odCl7ZG4odGhpcyx0KX0sZ2V0TW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtfX0pLHdvLnByb3RvdHlwZS5lYWNoTGluZT13by5wcm90b3R5cGUuaXRlcjt2YXIgTG89Iml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciIuc3BsaXQoIiAiKTtmb3IodmFyIGtvIGluIHdvLnByb3RvdHlwZSl3by5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa28pJiZ0aShMbyxrbyk8MCYmKHQucHJvdG90eXBlW2tvXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLmRvYyxhcmd1bWVudHMpfX0od28ucHJvdG90eXBlW2tvXSkpO2puKHdvKSx0LmVfc3RvcD1Qbix0LmVfcHJldmVudERlZmF1bHQ9em4sdC5lX3N0b3BQcm9wYWdhdGlvbj1Jbjt2YXIgU28sTW89MDt0Lm9uPUduLHQub2ZmPVZuLHQuc2lnbmFsPUtuO3ZhciBUbz0zMCxBbz10LlBhc3M9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNvZGVNaXJyb3IuUGFzcyJ9fTskbi5wcm90b3R5cGU9e3NldDpmdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0aGlzLmlkKSx0aGlzLmlkPXNldFRpbWVvdXQoZSx0KX19LHQuY291bnRDb2x1bW49Wm47dmFyIEhvPVsiIl0sTm89L1tcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vLERvPS9bXHUwMzAwLVx1MDM2Rlx1MDQ4My1cdTA0ODdcdTA0ODgtXHUwNDg5XHUwNTkxLVx1MDVCRFx1MDVCRlx1MDVDMS1cdTA1QzJcdTA1QzQtXHUwNUM1XHUwNUM3XHUwNjEwLVx1MDYxQVx1MDY0Qi1cdTA2NUZcdTA2NzBcdTA2RDYtXHUwNkRDXHUwNkRGLVx1MDZFNFx1MDZFNy1cdTA2RThcdTA2RUEtXHUwNkVEXHVBNjZGXHUxREMw4oCTXHUxREZGXHUyMEQw4oCTXHUyMEZGXHVBNjcwLVx1QTY3Mlx1QTY3NC1cdUE2N0RcdUE2OUZcdWRjMDAtXHVkZmZmXHVGRTIw4oCTXHVGRTJGXS87dC5yZXBsYWNlR2V0UmVjdD1mdW5jdGlvbih0KXtmaT10fTt2YXIgV289ZnVuY3Rpb24oKXtpZihOaSlyZXR1cm4hMTt2YXIgdD1zaSgiZGl2Iik7cmV0dXJuImRyYWdnYWJsZSJpbiB0fHwiZHJhZ0Ryb3AiaW4gdH0oKTtUaT9oaT1mdW5jdGlvbih0LGUpe3JldHVybiAzNj09dC5jaGFyQ29kZUF0KGUtMSkmJjM5PT10LmNoYXJDb2RlQXQoZSl9OklpJiYhL1ZlcnNpb25cLyhbNi05XXxcZFxkKVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpP2hpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuL1wtW14gXC0/XXxcP1teICFcJ1wiXCksLlwtXC86O1w/XF1cfV0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9OldpJiYvQ2hyb21lXC8oPzoyOXxbMy05XVxkfFxkXGRcZClcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2hhckNvZGVBdChlLTEpO3JldHVybiByPj04MjA4JiY4MjEyPj1yfTpXaSYmKGhpPWZ1bmN0aW9uKHQsZSl7aWYoZT4xJiY0NT09dC5jaGFyQ29kZUF0KGUtMSkpe2lmKC9cdy8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1teXC0/XC5dLy50ZXN0KHQuY2hhckF0KGUpKSlyZXR1cm4hMDtpZihlPjImJi9bXGRcLixdLy50ZXN0KHQuY2hhckF0KGUtMikpJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITF9cmV0dXJuL1t+ISMlJiopPSt9XF1cXHxcIlwuPiw6O11bKHtbPF18LVteXC0/XC5cdTIwMTAtXHUyMDFmXHUyMDI2XXxcP1tcd35gQCMkJVxeJiooXz0re1t8PjxdfOKApltcd35gQCMkJVxeJiooXz0re1s+PF0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9KTt2YXIgT28sRW8sem89MyE9IlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1bXSxuPXQubGVuZ3RoO24+PWU7KXt2YXIgaT10LmluZGV4T2YoIlxuIixlKTstMT09aSYmKGk9dC5sZW5ndGgpO3ZhciBvPXQuc2xpY2UoZSwiXHIiPT10LmNoYXJBdChpLTEpP2ktMTppKSxsPW8uaW5kZXhPZigiXHIiKTstMSE9bD8oci5wdXNoKG8uc2xpY2UoMCxsKSksZSs9bCsxKTooci5wdXNoKG8pLGU9aSsxKX1yZXR1cm4gcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoL1xyXG4/fFxuLyl9O3Quc3BsaXRMaW5lcz16bzt2YXIgSW89d2luZG93LmdldFNlbGVjdGlvbj9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuc2VsZWN0aW9uU3RhcnQhPXQuc2VsZWN0aW9uRW5kfWNhdGNoKGUpe3JldHVybiExfX06ZnVuY3Rpb24odCl7dHJ5e3ZhciBlPXQub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX1jYXRjaChyKXt9cmV0dXJuIGUmJmUucGFyZW50RWxlbWVudCgpPT10PzAhPWUuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsZSk6ITF9LEZvPWZ1bmN0aW9uKCl7dmFyIHQ9c2koImRpdiIpO3JldHVybiJvbmNvcHkiaW4gdD8hMDoodC5zZXRBdHRyaWJ1dGUoIm9uY29weSIsInJldHVybjsiKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5vbmNvcHkpfSgpLFBvPXszOiJFbnRlciIsODoiQmFja3NwYWNlIiw5OiJUYWIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ3RybCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2MiLDMyOiJTcGFjZSIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkxlZnQiLDM4OiJVcCIsMzk6IlJpZ2h0Iiw0MDoiRG93biIsNDQ6IlByaW50U2NybiIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsNTk6IjsiLDkxOiJNb2QiLDkyOiJNb2QiLDkzOiJNb2QiLDEwOToiLSIsMTA3OiI9IiwxMjc6IkRlbGV0ZSIsMTg2OiI7IiwxODc6Ij0iLDE4ODoiLCIsMTg5OiItIiwxOTA6Ii4iLDE5MToiLyIsMTkyOiJgIiwyMTk6IlsiLDIyMDoiXFwiLDIyMToiXSIsMjIyOiInIiw2MzI3NjoiUGFnZVVwIiw2MzI3NzoiUGFnZURvd24iLDYzMjc1OiJFbmQiLDYzMjczOiJIb21lIiw2MzIzNDoiTGVmdCIsNjMyMzI6IlVwIiw2MzIzNToiUmlnaHQiLDYzMjMzOiJEb3duIiw2MzMwMjoiSW5zZXJ0Iiw2MzI3MjoiRGVsZXRlIn07dC5rZXlOYW1lcz1QbyxmdW5jdGlvbigpe2Zvcih2YXIgdD0wOzEwPnQ7dCsrKVBvW3QrNDhdPVN0cmluZyh0KTtmb3IodmFyIHQ9NjU7OTA+PXQ7dCsrKVBvW3RdPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7Zm9yKHZhciB0PTE7MTI+PXQ7dCsrKVBvW3QrMTExXT1Qb1t0KzYzMjM1XT0iRiIrdH0oKTt2YXIgUm8sQm89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiAyNTU+PXQ/ZS5jaGFyQXQodCk6dD49MTQyNCYmMTUyND49dD8iUiI6dD49MTUzNiYmMTc5MT49dD9yLmNoYXJBdCh0LTE1MzYpOnQ+PTE3OTImJjIyMjA+PXQ/InIiOiJMIn12YXIgZT0iYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTCIscj0icnJycnJycnJycnJyLHJOTm1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1ycnJycnJybm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1ObW1tbXJycnJycnJycnJycnJycnJyciIsbj0vW1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUwNzAwLVx1MDhhY10vLGk9L1tzdHdOXS8sbz0vW0xScl0vLGw9L1tMYjFuXS8scz0vWzFuXS8sYT0iTCI7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFuLnRlc3QoZSkpcmV0dXJuITE7Zm9yKHZhciByLHU9ZS5sZW5ndGgsYz1bXSxmPTA7dT5mOysrZiljLnB1c2gocj10KGUuY2hhckNvZGVBdChmKSkpO2Zvcih2YXIgZj0wLGg9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyJtIj09cj9jW2ZdPWg6aD1yfWZvcih2YXIgZj0wLGQ9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyIxIj09ciYmInIiPT1kP2NbZl09Im4iOm8udGVzdChyKSYmKGQ9ciwiciI9PXImJihjW2ZdPSJSIikpfWZvcih2YXIgZj0xLGg9Y1swXTt1LTE+ZjsrK2Ype3ZhciByPWNbZl07IisiPT1yJiYiMSI9PWgmJiIxIj09Y1tmKzFdP2NbZl09IjEiOiIsIiE9cnx8aCE9Y1tmKzFdfHwiMSIhPWgmJiJuIiE9aHx8KGNbZl09aCksaD1yfWZvcih2YXIgZj0wO3U+ZjsrK2Ype3ZhciByPWNbZl07aWYoIiwiPT1yKWNbZl09Ik4iO2Vsc2UgaWYoIiUiPT1yKXtmb3IodmFyIHA9ZisxO3U+cCYmIiUiPT1jW3BdOysrcCk7Zm9yKHZhciBnPWYmJiIhIj09Y1tmLTFdfHx1LTE+cCYmIjEiPT1jW3BdPyIxIjoiTiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfX1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiTCI9PWQmJiIxIj09cj9jW2ZdPSJMIjpvLnRlc3QocikmJihkPXIpfWZvcih2YXIgZj0wO3U+ZjsrK2YpaWYoaS50ZXN0KGNbZl0pKXtmb3IodmFyIHA9ZisxO3U+cCYmaS50ZXN0KGNbcF0pOysrcCk7Zm9yKHZhciB2PSJMIj09KGY/Y1tmLTFdOmEpLHk9IkwiPT0odS0xPnA/Y1twXTphKSxnPXZ8fHk/IkwiOiJSIixtPWY7cD5tOysrbSljW21dPWc7Zj1wLTF9Zm9yKHZhciBiLHg9W10sZj0wO3U+ZjspaWYobC50ZXN0KGNbZl0pKXt2YXIgQz1mO2ZvcigrK2Y7dT5mJiZsLnRlc3QoY1tmXSk7KytmKTt4LnB1c2goe2Zyb206Qyx0bzpmLGxldmVsOjB9KX1lbHNle3ZhciB3PWYsTD14Lmxlbmd0aDtmb3IoKytmO3U+ZiYmIkwiIT1jW2ZdOysrZik7Zm9yKHZhciBtPXc7Zj5tOylpZihzLnRlc3QoY1ttXSkpe20+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86bSxsZXZlbDoxfSk7dmFyIGs9bTtmb3IoKyttO2Y+bSYmcy50ZXN0KGNbbV0pOysrbSk7eC5zcGxpY2UoTCwwLHtmcm9tOmssdG86bSxsZXZlbDoyfSksdz1tfWVsc2UrK207Zj53JiZ4LnNwbGljZShMLDAse2Zyb206dyx0bzpmLGxldmVsOjF9KX1yZXR1cm4gMT09eFswXS5sZXZlbCYmKGI9ZS5tYXRjaCgvXlxzKy8pKSYmKHhbMF0uZnJvbT1iWzBdLmxlbmd0aCx4LnVuc2hpZnQoe2Zyb206MCx0bzpiWzBdLmxlbmd0aCxsZXZlbDowfSkpLDE9PVFuKHgpLmxldmVsJiYoYj1lLm1hdGNoKC9ccyskLykpJiYoUW4oeCkudG8tPWJbMF0ubGVuZ3RoLHgucHVzaCh7ZnJvbTp1LWJbMF0ubGVuZ3RoLHRvOnUsbGV2ZWw6MH0pKSx4WzBdLmxldmVsIT1Rbih4KS5sZXZlbCYmeC5wdXNoKHtmcm9tOnUsdG86dSxsZXZlbDp4WzBdLmxldmVsfSkseH19KCk7cmV0dXJuIHQudmVyc2lvbj0iMy4yMC4wIix0fSgpO1BLBwjGXJGwv68BAL+vAQBQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAABzdGF0aWNcbGliXGhpZ2hsaWdodC5taW4uanN2YXIgaGxqcz1uZXcgZnVuY3Rpb24oKXtmdW5jdGlvbiBsKG8pe3JldHVybiBvLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvPC9nbSwiJmx0OyIpLnJlcGxhY2UoLz4vZ20sIiZndDsiKX1mdW5jdGlvbiBiKHApe2Zvcih2YXIgbz1wLmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpe2lmKG8ubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkNPREUiKXtyZXR1cm4gb31pZighKG8ubm9kZVR5cGU9PTMmJm8ubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe2JyZWFrfX19ZnVuY3Rpb24gaChwLG8pe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwocC5jaGlsZE5vZGVzLGZ1bmN0aW9uKHEpe2lmKHEubm9kZVR5cGU9PTMpe3JldHVybiBvP3Eubm9kZVZhbHVlLnJlcGxhY2UoL1xuL2csIiIpOnEubm9kZVZhbHVlfWlmKHEubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cmV0dXJuIlxuIn1yZXR1cm4gaChxLG8pfSkuam9pbigiIil9ZnVuY3Rpb24gYShxKXt2YXIgcD0ocS5jbGFzc05hbWUrIiAiKyhxLnBhcmVudE5vZGU/cS5wYXJlbnROb2RlLmNsYXNzTmFtZToiIikpLnNwbGl0KC9ccysvKTtwPXAubWFwKGZ1bmN0aW9uKHIpe3JldHVybiByLnJlcGxhY2UoL15sYW5ndWFnZS0vLCIiKX0pO2Zvcih2YXIgbz0wO288cC5sZW5ndGg7bysrKXtpZihlW3Bbb11dfHxwW29dPT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJuIHBbb119fX1mdW5jdGlvbiBjKHEpe3ZhciBvPVtdOyhmdW5jdGlvbiBwKHIscyl7Zm9yKHZhciB0PXIuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZyl7aWYodC5ub2RlVHlwZT09Myl7cys9dC5ub2RlVmFsdWUubGVuZ3RofWVsc2V7aWYodC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT0iQlIiKXtzKz0xfWVsc2V7aWYodC5ub2RlVHlwZT09MSl7by5wdXNoKHtldmVudDoic3RhcnQiLG9mZnNldDpzLG5vZGU6dH0pO3M9cCh0LHMpO28ucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDpzLG5vZGU6dH0pfX19fXJldHVybiBzfSkocSwwKTtyZXR1cm4gb31mdW5jdGlvbiBqKHAscix2KXt2YXIgcT0wO3ZhciB5PSIiO3ZhciBzPVtdO2Z1bmN0aW9uIHUoKXtpZighcC5sZW5ndGh8fCFyLmxlbmd0aCl7cmV0dXJuIHAubGVuZ3RoP3A6cn1pZihwWzBdLm9mZnNldCE9clswXS5vZmZzZXQpe3JldHVybihwWzBdLm9mZnNldDxyWzBdLm9mZnNldCk/cDpyfXJldHVybiByWzBdLmV2ZW50PT0ic3RhcnQiP3A6cn1mdW5jdGlvbiB0KEEpe2Z1bmN0aW9uIHooQil7cmV0dXJuIiAiK0Iubm9kZU5hbWUrJz0iJytsKEIudmFsdWUpKyciJ315Kz0iPCIrQS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChBLmF0dHJpYnV0ZXMseikuam9pbigiIikrIj4ifWZ1bmN0aW9uIHgoeil7eSs9IjwvIit6Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4ifWZ1bmN0aW9uIG8oeil7KHouZXZlbnQ9PSJzdGFydCI/dDp4KSh6Lm5vZGUpfXdoaWxlKHAubGVuZ3RofHxyLmxlbmd0aCl7dmFyIHc9dSgpO3krPWwodi5zdWJzdHIocSx3WzBdLm9mZnNldC1xKSk7cT13WzBdLm9mZnNldDtpZih3PT1wKXtzLnJldmVyc2UoKS5mb3JFYWNoKHgpO2Rve28ody5zcGxpY2UoMCwxKVswXSk7dz11KCl9d2hpbGUodz09cCYmdy5sZW5ndGgmJndbMF0ub2Zmc2V0PT1xKTtzLnJldmVyc2UoKS5mb3JFYWNoKHQpfWVsc2V7aWYod1swXS5ldmVudD09InN0YXJ0Iil7cy5wdXNoKHdbMF0ubm9kZSl9ZWxzZXtzLnBvcCgpfW8ody5zcGxpY2UoMCwxKVswXSl9fXJldHVybiB5K2wodi5zdWJzdHIocSkpfWZ1bmN0aW9uIGYocil7ZnVuY3Rpb24gbyhzKXtyZXR1cm4ocyYmcy5zb3VyY2UpfHxzfWZ1bmN0aW9uIHAodCxzKXtyZXR1cm4gUmVnRXhwKG8odCksIm0iKyhyLmNJPyJpIjoiIikrKHM/ImciOiIiKSl9ZnVuY3Rpb24gcSh6LHgpe2lmKHouY29tcGlsZWQpe3JldHVybn16LmNvbXBpbGVkPXRydWU7dmFyIHU9W107aWYoei5rKXt2YXIgcz17fTtmdW5jdGlvbiBBKEIsdCl7aWYoci5jSSl7dD10LnRvTG93ZXJDYXNlKCl9dC5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oQyl7dmFyIEQ9Qy5zcGxpdCgifCIpO3NbRFswXV09W0IsRFsxXT9OdW1iZXIoRFsxXSk6MV07dS5wdXNoKERbMF0pfSl9ei5sUj1wKHoubHx8IlxcYiIraGxqcy5JUisiXFxiKD8hXFwuKSIsdHJ1ZSk7aWYodHlwZW9mIHouaz09InN0cmluZyIpe0EoImtleXdvcmQiLHouayl9ZWxzZXtmb3IodmFyIHkgaW4gei5rKXtpZighei5rLmhhc093blByb3BlcnR5KHkpKXtjb250aW51ZX1BKHksei5rW3ldKX19ei5rPXN9aWYoeCl7aWYoei5iV0spe3ouYj0iXFxiKCIrdS5qb2luKCJ8IikrIilcXGIoPyFcXC4pXFxzKiJ9ei5iUj1wKHouYj96LmI6IlxcQnxcXGIiKTtpZighei5lJiYhei5lVyl7ei5lPSJcXEJ8XFxiIn1pZih6LmUpe3ouZVI9cCh6LmUpfXoudEU9byh6LmUpfHwiIjtpZih6LmVXJiZ4LnRFKXt6LnRFKz0oei5lPyJ8IjoiIikreC50RX19aWYoei5pKXt6LmlSPXAoei5pKX1pZih6LnI9PT11bmRlZmluZWQpe3oucj0xfWlmKCF6LmMpe3ouYz1bXX1mb3IodmFyIHc9MDt3PHouYy5sZW5ndGg7dysrKXtpZih6LmNbd109PSJzZWxmIil7ei5jW3ddPXp9cSh6LmNbd10seil9aWYoei5zdGFydHMpe3Eoei5zdGFydHMseCl9dmFyIHY9W107Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7di5wdXNoKG8oei5jW3ddLmIpKX1pZih6LnRFKXt2LnB1c2gobyh6LnRFKSl9aWYoei5pKXt2LnB1c2gobyh6LmkpKX16LnQ9di5sZW5ndGg/cCh2LmpvaW4oInwiKSx0cnVlKTp7ZXhlYzpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH19fXEocil9ZnVuY3Rpb24gZChFLEcsQyxNKXtmdW5jdGlvbiBvKHIsUCl7Zm9yKHZhciBPPTA7TzxQLmMubGVuZ3RoO08rKyl7dmFyIE49UC5jW09dLmJSLmV4ZWMocik7aWYoTiYmTi5pbmRleD09MCl7cmV0dXJuIFAuY1tPXX19fWZ1bmN0aW9uIHMoTixyKXtpZihOLmUmJk4uZVIudGVzdChyKSl7cmV0dXJuIE59aWYoTi5lVyl7cmV0dXJuIHMoTi5wYXJlbnQscil9fWZ1bmN0aW9uIHQocixOKXtyZXR1cm4gIUMmJk4uaSYmTi5pUi50ZXN0KHIpfWZ1bmN0aW9uIHkoTyxyKXt2YXIgTj1ILmNJP3JbMF0udG9Mb3dlckNhc2UoKTpyWzBdO3JldHVybiBPLmsuaGFzT3duUHJvcGVydHkoTikmJk8ua1tOXX1mdW5jdGlvbiBJKCl7dmFyIE49bCh3KTtpZighQi5rKXtyZXR1cm4gTn12YXIgcj0iIjt2YXIgUT0wO0IubFIubGFzdEluZGV4PTA7dmFyIE89Qi5sUi5leGVjKE4pO3doaWxlKE8pe3IrPU4uc3Vic3RyKFEsTy5pbmRleC1RKTt2YXIgUD15KEIsTyk7aWYoUCl7dis9UFsxXTtyKz0nPHNwYW4gY2xhc3M9IicrUFswXSsnIj4nK09bMF0rIjwvc3Bhbj4ifWVsc2V7cis9T1swXX1RPUIubFIubGFzdEluZGV4O089Qi5sUi5leGVjKE4pfXJldHVybiByK04uc3Vic3RyKFEpfWZ1bmN0aW9uIHooKXtpZihCLnNMJiYhZVtCLnNMXSl7cmV0dXJuIGwodyl9dmFyIE49Qi5zdWJMYW5ndWFnZU1vZGU9PSJjb250aW51b3VzIj9CLnRvcDp1bmRlZmluZWQ7dmFyIHI9Qi5zTD9kKEIuc0wsdyx0cnVlLE4pOmcodyk7aWYoQi5yPjApe3YrPXIua2V5d29yZF9jb3VudDtBKz1yLnJ9Qi50b3A9ci50b3A7cmV0dXJuJzxzcGFuIGNsYXNzPSInK3IubGFuZ3VhZ2UrJyI+JytyLnZhbHVlKyI8L3NwYW4+In1mdW5jdGlvbiBMKCl7cmV0dXJuIEIuc0whPT11bmRlZmluZWQ/eigpOkkoKX1mdW5jdGlvbiBLKE8scil7dmFyIE49Ty5jTj8nPHNwYW4gY2xhc3M9IicrTy5jTisnIj4nOiIiO2lmKE8uckIpe3grPU47dz0iIn1lbHNle2lmKE8uZUIpe3grPWwocikrTjt3PSIifWVsc2V7eCs9Tjt3PXJ9fUI9T2JqZWN0LmNyZWF0ZShPLHtwYXJlbnQ6e3ZhbHVlOkJ9fSl9ZnVuY3Rpb24gRChOLHIpe3crPU47aWYocj09PXVuZGVmaW5lZCl7eCs9TCgpO3JldHVybiAwfXZhciBQPW8ocixCKTtpZihQKXt4Kz1MKCk7SyhQLHIpO3JldHVybiBQLnJCPzA6ci5sZW5ndGh9dmFyIFE9cyhCLHIpO2lmKFEpe3ZhciBPPUI7aWYoIShPLnJFfHxPLmVFKSl7dys9cn14Kz1MKCk7ZG97aWYoQi5jTil7eCs9Ijwvc3Bhbj4ifUErPUIucjtCPUIucGFyZW50fXdoaWxlKEIhPVEucGFyZW50KTtpZihPLmVFKXt4Kz1sKHIpfXc9IiI7aWYoUS5zdGFydHMpe0soUS5zdGFydHMsIiIpfXJldHVybiBPLnJFPzA6ci5sZW5ndGh9aWYodChyLEIpKXt0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgbGV4ZW0gIicrcisnIiBmb3IgbW9kZSAiJysoQi5jTnx8Ijx1bm5hbWVkPiIpKyciJyl9dys9cjtyZXR1cm4gci5sZW5ndGh8fDF9dmFyIEg9ZVtFXTtpZighSCl7dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJytFKyciJyl9ZihIKTt2YXIgQj1NfHxIO3ZhciB4PSIiO2Zvcih2YXIgRj1CO0YhPUg7Rj1GLnBhcmVudCl7aWYoRi5jTil7eD0nPHNwYW4gY2xhc3M9IicrRi5jTisnIj4nK3h9fXZhciB3PSIiO3ZhciBBPTA7dmFyIHY9MDt0cnl7dmFyIHUscSxwPTA7d2hpbGUodHJ1ZSl7Qi50Lmxhc3RJbmRleD1wO3U9Qi50LmV4ZWMoRyk7aWYoIXUpe2JyZWFrfXE9RChHLnN1YnN0cihwLHUuaW5kZXgtcCksdVswXSk7cD11LmluZGV4K3F9RChHLnN1YnN0cihwKSk7Zm9yKHZhciBGPUI7Ri5wYXJlbnQ7Rj1GLnBhcmVudCl7aWYoRi5jTil7eCs9Ijwvc3Bhbj4ifX1yZXR1cm57cjpBLGtleXdvcmRfY291bnQ6dix2YWx1ZTp4LGxhbmd1YWdlOkUsdG9wOkJ9fWNhdGNoKEope2lmKEoubWVzc2FnZS5pbmRleE9mKCJJbGxlZ2FsIikhPS0xKXtyZXR1cm57cjowLGtleXdvcmRfY291bnQ6MCx2YWx1ZTpsKEcpfX1lbHNle3Rocm93IEp9fX1mdW5jdGlvbiBnKHMpe3ZhciBvPXtrZXl3b3JkX2NvdW50OjAscjowLHZhbHVlOmwocyl9O3ZhciBxPW87Zm9yKHZhciBwIGluIGUpe2lmKCFlLmhhc093blByb3BlcnR5KHApKXtjb250aW51ZX12YXIgcj1kKHAscyxmYWxzZSk7ci5sYW5ndWFnZT1wO2lmKHIua2V5d29yZF9jb3VudCtyLnI+cS5rZXl3b3JkX2NvdW50K3Eucil7cT1yfWlmKHIua2V5d29yZF9jb3VudCtyLnI+by5rZXl3b3JkX2NvdW50K28ucil7cT1vO289cn19aWYocS5sYW5ndWFnZSl7by5zZWNvbmRfYmVzdD1xfXJldHVybiBvfWZ1bmN0aW9uIGkocSxwLG8pe2lmKHApe3E9cS5yZXBsYWNlKC9eKCg8W14+XSs+fFx0KSspL2dtLGZ1bmN0aW9uKHIsdix1LHQpe3JldHVybiB2LnJlcGxhY2UoL1x0L2cscCl9KX1pZihvKXtxPXEucmVwbGFjZSgvXG4vZywiPGJyPiIpfXJldHVybiBxfWZ1bmN0aW9uIG0ocix1LHApe3ZhciB2PWgocixwKTt2YXIgdD1hKHIpO2lmKHQ9PSJuby1oaWdobGlnaHQiKXtyZXR1cm59dmFyIHc9dD9kKHQsdix0cnVlKTpnKHYpO3Q9dy5sYW5ndWFnZTt2YXIgbz1jKHIpO2lmKG8ubGVuZ3RoKXt2YXIgcT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKTtxLmlubmVySFRNTD13LnZhbHVlO3cudmFsdWU9aihvLGMocSksdil9dy52YWx1ZT1pKHcudmFsdWUsdSxwKTt2YXIgcz1yLmNsYXNzTmFtZTtpZighcy5tYXRjaCgiKFxcc3xeKShsYW5ndWFnZS0pPyIrdCsiKFxcc3wkKSIpKXtzPXM/KHMrIiAiK3QpOnR9ci5pbm5lckhUTUw9dy52YWx1ZTtyLmNsYXNzTmFtZT1zO3IucmVzdWx0PXtsYW5ndWFnZTp0LGt3Oncua2V5d29yZF9jb3VudCxyZTp3LnJ9O2lmKHcuc2Vjb25kX2Jlc3Qpe3Iuc2Vjb25kX2Jlc3Q9e2xhbmd1YWdlOncuc2Vjb25kX2Jlc3QubGFuZ3VhZ2Usa3c6dy5zZWNvbmRfYmVzdC5rZXl3b3JkX2NvdW50LHJlOncuc2Vjb25kX2Jlc3Qucn19fWZ1bmN0aW9uIG4oKXtpZihuLmNhbGxlZCl7cmV0dXJufW4uY2FsbGVkPXRydWU7QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKSxiKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbihvKXttKG8saGxqcy50YWJSZXBsYWNlKX0pfWZ1bmN0aW9uIGsoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsbixmYWxzZSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLG4sZmFsc2UpfXZhciBlPXt9O3RoaXMuTEFOR1VBR0VTPWU7dGhpcy5oaWdobGlnaHQ9ZDt0aGlzLmhpZ2hsaWdodEF1dG89Zzt0aGlzLmZpeE1hcmt1cD1pO3RoaXMuaGlnaGxpZ2h0QmxvY2s9bTt0aGlzLmluaXRIaWdobGlnaHRpbmc9bjt0aGlzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9azt0aGlzLklSPSJbYS16QS1aXVthLXpBLVowLTlfXSoiO3RoaXMuVUlSPSJbYS16QS1aX11bYS16QS1aMC05X10qIjt0aGlzLk5SPSJcXGJcXGQrKFxcLlxcZCspPyI7dGhpcy5DTlI9IihcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSI7dGhpcy5CTlI9IlxcYigwYlswMV0rKSI7dGhpcy5SU1I9IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfFxcLnwtfC09fC98Lz18Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+Pnw+Pnw+fFxcP3xcXFt8XFx7fFxcKHxcXF58XFxePXxcXHx8XFx8PXxcXHxcXHx8fiI7dGhpcy5CRT17YjoiXFxcXFtcXHNcXFNdIixyOjB9O3RoaXMuQVNNPXtjTjoic3RyaW5nIixiOiInIixlOiInIixpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5RU009e2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGk6IlxcbiIsYzpbdGhpcy5CRV0scjowfTt0aGlzLkNMQ009e2NOOiJjb21tZW50IixiOiIvLyIsZToiJCJ9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xcKiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9O3RoaXMuTk09e2NOOiJudW1iZXIiLGI6dGhpcy5OUixyOjB9O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLHI6MH07dGhpcy5CTk09e2NOOiJudW1iZXIiLGI6dGhpcy5CTlIscjowfTt0aGlzLlJFR0VYUF9NT0RFPXtjTjoicmVnZXhwIixiOi9cLy8sZTovXC9bZ2ltXSovLGk6L1xuLyxjOlt0aGlzLkJFLHtiOi9cWy8sZTovXF0vLHI6MCxjOlt0aGlzLkJFXX1dfTt0aGlzLmluaGVyaXQ9ZnVuY3Rpb24ocSxyKXt2YXIgbz17fTtmb3IodmFyIHAgaW4gcSl7b1twXT1xW3BdfWlmKHIpe2Zvcih2YXIgcCBpbiByKXtvW3BdPXJbcF19fXJldHVybiBvfX0oKTtobGpzLkxBTkdVQUdFUy5iYXNoPWZ1bmN0aW9uKGEpe3ZhciBjPXtjTjoidmFyaWFibGUiLGI6L1wkW1x3XGQjQF1bXHdcZF9dKi99O3ZhciBiPXtjTjoidmFyaWFibGUiLGI6L1wkXHsoLio/KVx9L307dmFyIGU9e2NOOiJzdHJpbmciLGI6LyIvLGU6LyIvLGM6W2EuQkUsYyxiLHtjTjoidmFyaWFibGUiLGI6L1wkXCgvLGU6L1wpLyxjOmEuQkV9XSxyOjB9O3ZhciBkPXtjTjoic3RyaW5nIixiOi8nLyxlOi8nLyxyOjB9O3JldHVybntsOi8tP1thLXpdKy8sazp7a2V5d29yZDoiaWYgdGhlbiBlbHNlIGVsaWYgZmkgZm9yIGJyZWFrIGNvbnRpbnVlIHdoaWxlIGluIGRvIGRvbmUgZXhpdCByZXR1cm4gc2V0IGRlY2xhcmUgY2FzZSBlc2FjIGV4cG9ydCBleGVjIixsaXRlcmFsOiJ0cnVlIGZhbHNlIixidWlsdF9pbjoicHJpbnRmIGVjaG8gcmVhZCBjZCBwd2QgcHVzaGQgcG9wZCBkaXJzIGxldCBldmFsIHVuc2V0IHR5cGVzZXQgcmVhZG9ubHkgZ2V0b3B0cyBzb3VyY2Ugc2hvcHQgY2FsbGVyIHR5cGUgaGFzaCBiaW5kIGhlbHAgc3VkbyIsb3BlcmF0b3I6Ii1uZSAtZXEgLWx0IC1ndCAtZiAtZCAtZSAtcyAtbCAtYSJ9LGM6W3tjTjoic2hlYmFuZyIsYjovXiMhW15cbl0rc2hccyokLyxyOjEwfSx7Y046ImZ1bmN0aW9uIixiOi9cd1tcd1xkX10qXHMqXChccypcKVxzKlx7LyxyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6L1x3W1x3XGRfXSovfV0scjowfSxhLkhDTSxhLk5NLGUsZCxjLGJdfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3M9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImFic3RyYWN0IGFzIGJhc2UgYm9vbCBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjaGVja2VkIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlY2ltYWwgZGVmYXVsdCBkZWxlZ2F0ZSBkbyBkb3VibGUgZWxzZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmYWxzZSBmaW5hbGx5IGZpeGVkIGZsb2F0IGZvciBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbmFtZXNwYWNlIG5ldyBudWxsIG9iamVjdCBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNieXRlIHNlYWxlZCBzaG9ydCBzaXplb2Ygc3RhY2thbGxvYyBzdGF0aWMgc3RyaW5nIHN0cnVjdCBzd2l0Y2ggdGhpcyB0aHJvdyB0cnVlIHRyeSB0eXBlb2YgdWludCB1bG9uZyB1bmNoZWNrZWQgdW5zYWZlIHVzaG9ydCB1c2luZyB2aXJ0dWFsIHZvbGF0aWxlIHZvaWQgd2hpbGUgYXN5bmMgYXdhaXQgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZnJvbSBnZXQgZ3JvdXAgaW50byBqb2luIGxldCBvcmRlcmJ5IHBhcnRpYWwgc2VsZWN0IHNldCB2YWx1ZSB2YXIgd2hlcmUgeWllbGQiLGM6W3tjTjoiY29tbWVudCIsYjoiLy8vIixlOiIkIixyQjp0cnVlLGM6W3tjTjoieG1sRG9jVGFnIixiOiIvLy98PCEtLXwtLT4ifSx7Y046InhtbERvY1RhZyIsYjoiPC8/IixlOiI+In1dfSxhLkNMQ00sYS5DQkxDTE0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGs6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHJlZ2lvbiBlbmRyZWdpb24gcHJhZ21hIGNoZWNrc3VtIn0se2NOOiJzdHJpbmciLGI6J0AiJyxlOiciJyxjOlt7YjonIiInfV19LGEuQVNNLGEuUVNNLGEuQ05NXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnJ1Ynk9ZnVuY3Rpb24oZSl7dmFyIGE9IlthLXpBLVpfXVthLXpBLVowLTlfXSooXFwhfFxcPyk/Ijt2YXIgaj0iW2EtekEtWl9dXFx3KlshPz1dP3xbLSt+XVxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFwqXFwqfFstLyslXiYqfmB8XXxcXFtcXF09PyI7dmFyIGc9e2tleXdvcmQ6ImFuZCBmYWxzZSB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIGlmIEJFR0lOIHJldHJ5IGVuZCBmb3IgdHJ1ZSBzZWxmIHdoZW4gbmV4dCB1bnRpbCBkbyBiZWdpbiB1bmxlc3MgRU5EIHJlc2N1ZSBuaWwgZWxzZSBicmVhayB1bmRlZiBub3Qgc3VwZXIgY2xhc3MgY2FzZSByZXF1aXJlIHlpZWxkIGFsaWFzIHdoaWxlIGVuc3VyZSBlbHNpZiBvciBpbmNsdWRlIn07dmFyIGM9e2NOOiJ5YXJkb2N0YWciLGI6IkBbQS1aYS16XSsifTt2YXIgaz1be2NOOiJjb21tZW50IixiOiIjIixlOiIkIixjOltjXX0se2NOOiJjb21tZW50IixiOiJeXFw9YmVnaW4iLGU6Il5cXD1lbmQiLGM6W2NdLHI6MTB9LHtjTjoiY29tbWVudCIsYjoiXl9fRU5EX18iLGU6IlxcbiQifV07dmFyIGQ9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsbDphLGs6Z307dmFyIGk9W2UuQkUsZF07dmFyIGI9W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOmkscjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcKCIsZToiXFwpIixjOml9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXFsiLGU6IlxcXSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/eyIsZToifSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/PCIsZToiPiIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8vIixlOiIvIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPyUiLGU6IiUiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LSIsZToiLSIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXHwiLGU6IlxcfCIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOi9cQlw/KFxcXGR7MSwzfXxcXHhbQS1GYS1mMC05XXsxLDJ9fFxcdVtBLUZhLWYwLTldezR9fFxcP1xTKVxiL31dO3ZhciBoPXtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6IiB8JHw7IixrOiJkZWYiLGM6W3tjTjoidGl0bGUiLGI6aixsOmEsazpnfSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGw6YSxrOmd9XS5jb25jYXQoayl9O3ZhciBmPWsuY29uY2F0KGIuY29uY2F0KFt7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIkfDsiLGs6ImNsYXNzIG1vZHVsZSIsYzpbe2NOOiJ0aXRsZSIsYjoiW0EtWmEtel9dXFx3Kig6OlxcdyspKihcXD98XFwhKT8iLHI6MH0se2NOOiJpbmhlcml0YW5jZSIsYjoiPFxccyoiLGM6W3tjTjoicGFyZW50IixiOiIoIitlLklSKyI6Oik/IitlLklSfV19XS5jb25jYXQoayl9LGgse2NOOiJjb25zdGFudCIsYjoiKDo6KT8oXFxiW0EtWl1cXHcqKDo6KT8pKyIscjowfSx7Y046InN5bWJvbCIsYjoiOiIsYzpiLmNvbmNhdChbe2I6an1dKSxyOjB9LHtjTjoic3ltYm9sIixiOmErIjoiLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2NOOiJ2YXJpYWJsZSIsYjoiKFxcJFxcVyl8KChcXCR8XFxAXFxAPykoXFx3KykpIn0se2I6IigiK2UuUlNSKyIpXFxzKiIsYzprLmNvbmNhdChbe2NOOiJyZWdleHAiLGI6Ii8iLGU6Ii9bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyeyIsZToifVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXCgiLGU6IlxcKVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXIhIixlOiIhW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlclxcWyIsZToiXFxdW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19XSkscjowfV0pKTtkLmM9ZjtoLmNbMV0uYz1mO3JldHVybntsOmEsazpnLGM6Zn19KGhsanMpO2hsanMuTEFOR1VBR0VTLmRpZmY9ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiY2h1bmsiLGI6Il5cXEBcXEAgK1xcLVxcZCssXFxkKyArXFwrXFxkKyxcXGQrICtcXEBcXEAkIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwqXFwqXFwqICtcXGQrLFxcZCsgK1xcKlxcKlxcKlxcKiQiLHI6MTB9LHtjTjoiY2h1bmsiLGI6Il5cXC1cXC1cXC0gK1xcZCssXFxkKyArXFwtXFwtXFwtXFwtJCIscjoxMH0se2NOOiJoZWFkZXIiLGI6IkluZGV4OiAiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiPT09PT0iLGU6Ij09PT09JCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwtXFwtXFwtIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCp7M30gIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCtcXCtcXCsiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXFwqezV9IixlOiJcXCp7NX0kIn0se2NOOiJhZGRpdGlvbiIsYjoiXlxcKyIsZToiJCJ9LHtjTjoiZGVsZXRpb24iLGI6Il5cXC0iLGU6IiQifSx7Y046ImNoYW5nZSIsYjoiXlxcISIsZToiJCJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmFzY3JpcHQ9ZnVuY3Rpb24oYSl7cmV0dXJue2s6e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHdpdGggdGhyb3cgY2FzZSBkZWZhdWx0IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGxldCB5aWVsZCBjb25zdCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCBOYU4gSW5maW5pdHkifSxjOlthLkFTTSxhLlFTTSxhLkNMQ00sYS5DQkxDTE0sYS5DTk0se2I6IigiK2EuUlNSKyJ8XFxiKGNhc2V8cmV0dXJufHRocm93KVxcYilcXHMqIixrOiJyZXR1cm4gdGhyb3cgY2FzZSIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUkVHRVhQX01PREUse2I6LzwvLGU6Lz47LyxzTDoieG1sIn1dLHI6MH0se2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZTovey8sazoiZnVuY3Rpb24iLGM6W3tjTjoidGl0bGUiLGI6L1tBLVphLXokX11bMC05QS1aYS16JF9dKi99LHtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6W2EuQ0xDTSxhLkNCTENMTV0saTovWyInXChdL31dLGk6L1xbfCUvfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy54bWw9ZnVuY3Rpb24oYSl7dmFyIGM9IltBLVphLXowLTlcXC5fOi1dKyI7dmFyIGI9e2VXOnRydWUscjowLGM6W3tjTjoiYXR0cmlidXRlIixiOmMscjowfSx7YjonPSInLHJCOnRydWUsZTonIicsYzpbe2NOOiJ2YWx1ZSIsYjonIicsZVc6dHJ1ZX1dfSx7YjoiPSciLHJCOnRydWUsZToiJyIsYzpbe2NOOiJ2YWx1ZSIsYjoiJyIsZVc6dHJ1ZX1dfSx7YjoiPSIsYzpbe2NOOiJ2YWx1ZSIsYjoiW15cXHMvPl0rIn1dfV19O3JldHVybntjSTp0cnVlLGM6W3tjTjoicGkiLGI6IjxcXD8iLGU6IlxcPz4iLHI6MTB9LHtjTjoiZG9jdHlwZSIsYjoiPCFET0NUWVBFIixlOiI+IixyOjEwLGM6W3tiOiJcXFsiLGU6IlxcXSJ9XX0se2NOOiJjb21tZW50IixiOiI8IS0tIixlOiItLT4iLHI6MTB9LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiIscjoxMH0se2NOOiJ0YWciLGI6IjxzdHlsZSg/PVxcc3w+fCQpIixlOiI+IixrOnt0aXRsZToic3R5bGUifSxjOltiXSxzdGFydHM6e2U6Ijwvc3R5bGU+IixyRTp0cnVlLHNMOiJjc3MifX0se2NOOiJ0YWciLGI6IjxzY3JpcHQoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InNjcmlwdCJ9LGM6W2JdLHN0YXJ0czp7ZToiPFwvc2NyaXB0PiIsckU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9fSx7YjoiPCUiLGU6IiU+IixzTDoidmJzY3JpcHQifSx7Y046InRhZyIsYjoiPC8/IixlOiIvPz4iLHI6MCxjOlt7Y046InRpdGxlIixiOiJbXiAvPjxdKyJ9LGJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYXJrZG93bj1mdW5jdGlvbihhKXtyZXR1cm57Yzpbe2NOOiJoZWFkZXIiLGI6Il4jezEsM30iLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXi4rP1xcbls9LV17Mix9JCJ9LHtiOiI8IixlOiI+IixzTDoieG1sIixyOjB9LHtjTjoiYnVsbGV0IixiOiJeKFsqKy1dfChcXGQrXFwuKSlcXHMrIn0se2NOOiJzdHJvbmciLGI6IlsqX117Mn0uKz9bKl9dezJ9In0se2NOOiJlbXBoYXNpcyIsYjoiXFwqLis/XFwqIn0se2NOOiJlbXBoYXNpcyIsYjoiXy4rP18iLHI6MH0se2NOOiJibG9ja3F1b3RlIixiOiJePlxccysiLGU6IiQifSx7Y046ImNvZGUiLGI6ImAuKz9gIn0se2NOOiJjb2RlIixiOiJeICAgICIsZToiJCIscjowfSx7Y046Imhvcml6b250YWxfcnVsZSIsYjoiXi17Myx9IixlOiIkIn0se2I6IlxcWy4rP1xcXVxcKC4rP1xcKSIsckI6dHJ1ZSxjOlt7Y046ImxpbmtfbGFiZWwiLGI6IlxcWy4rXFxdIn0se2NOOiJsaW5rX3VybCIsYjoiXFwoIixlOiJcXCkiLGVCOnRydWUsZUU6dHJ1ZX1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jc3M9ZnVuY3Rpb24oYSl7dmFyIGI9IlthLXpBLVotXVthLXpBLVowLTlfLV0qIjt2YXIgYz17Y046ImZ1bmN0aW9uIixiOmIrIlxcKCIsZToiXFwpIixjOlsic2VsZiIsYS5OTSxhLkFTTSxhLlFTTV19O3JldHVybntjSTp0cnVlLGk6Ils9L3wnXSIsYzpbYS5DQkxDTE0se2NOOiJpZCIsYjoiXFwjW0EtWmEtejAtOV8tXSsifSx7Y046ImNsYXNzIixiOiJcXC5bQS1aYS16MC05Xy1dKyIscjowfSx7Y046ImF0dHJfc2VsZWN0b3IiLGI6IlxcWyIsZToiXFxdIixpOiIkIn0se2NOOiJwc2V1ZG8iLGI6IjooOik/W2EtekEtWjAtOVxcX1xcLVxcK1xcKFxcKVxcXCJcXCddKyJ9LHtjTjoiYXRfcnVsZSIsYjoiQChmb250LWZhY2V8cGFnZSkiLGw6IlthLXotXSsiLGs6ImZvbnQtZmFjZSBwYWdlIn0se2NOOiJhdF9ydWxlIixiOiJAIixlOiJbeztdIixjOlt7Y046ImtleXdvcmQiLGI6L1xTKy99LHtiOi9ccy8sZVc6dHJ1ZSxlRTp0cnVlLHI6MCxjOltjLGEuQVNNLGEuUVNNLGEuTk1dfV19LHtjTjoidGFnIixiOmIscjowfSx7Y046InJ1bGVzIixiOiJ7IixlOiJ9IixpOiJbXlxcc10iLHI6MCxjOlthLkNCTENMTSx7Y046InJ1bGUiLGI6IlteXFxzXSIsckI6dHJ1ZSxlOiI7IixlVzp0cnVlLGM6W3tjTjoiYXR0cmlidXRlIixiOiJbQS1aXFxfXFwuXFwtXSsiLGU6IjoiLGVFOnRydWUsaToiW15cXHNdIixzdGFydHM6e2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxlRTp0cnVlLGM6W2MsYS5OTSxhLlFTTSxhLkFTTSxhLkNCTENMTSx7Y046ImhleGNvbG9yIixiOiIjWzAtOUEtRmEtZl0rIn0se2NOOiJpbXBvcnRhbnQiLGI6IiFpbXBvcnRhbnQifV19fV19XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaHR0cD1mdW5jdGlvbihhKXtyZXR1cm57aToiXFxTIixjOlt7Y046InN0YXR1cyIsYjoiXkhUVFAvWzAtOVxcLl0rIixlOiIkIixjOlt7Y046Im51bWJlciIsYjoiXFxiXFxkezN9XFxiIn1dfSx7Y046InJlcXVlc3QiLGI6Il5bQS1aXSsgKC4qPykgSFRUUC9bMC05XFwuXSskIixyQjp0cnVlLGU6IiQiLGM6W3tjTjoic3RyaW5nIixiOiIgIixlOiIgIixlQjp0cnVlLGVFOnRydWV9XX0se2NOOiJhdHRyaWJ1dGUiLGI6Il5cXHciLGU6IjogIixlRTp0cnVlLGk6IlxcbnxcXHN8PSIsc3RhcnRzOntjTjoic3RyaW5nIixlOiIkIn19LHtiOiJcXG5cXG4iLHN0YXJ0czp7c0w6IiIsZVc6dHJ1ZX19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmE9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkIGVudW0gZWxzZSBicmVhayB0cmFuc2llbnQgbmV3IGNhdGNoIGluc3RhbmNlb2YgYnl0ZSBzdXBlciB2b2xhdGlsZSBjYXNlIGFzc2VydCBzaG9ydCBwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIixjOlt7Y046ImphdmFkb2MiLGI6Ii9cXCpcXCoiLGU6IlxcKi8iLGM6W3tjTjoiamF2YWRvY3RhZyIsYjoiKF58XFxzKUBbQS1aYS16XSsifV0scjoxMH0sYS5DTENNLGEuQ0JMQ0xNLGEuQVNNLGEuUVNNLHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIGludGVyZmFjZSIsZUU6dHJ1ZSxpOiI6IixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyBpbXBsZW1lbnRzIixyOjEwfSx7Y046InRpdGxlIixiOmEuVUlSfV19LGEuQ05NLHtjTjoiYW5ub3RhdGlvbiIsYjoiQFtBLVphLXpdKyJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnBocD1mdW5jdGlvbihhKXt2YXIgZT17Y046InZhcmlhYmxlIixiOiJcXCQrW2EtekEtWl9ceDdmLVx4ZmZdW2EtekEtWjAtOV9ceDdmLVx4ZmZdKiJ9O3ZhciBiPVthLmluaGVyaXQoYS5BU00se2k6bnVsbH0pLGEuaW5oZXJpdChhLlFTTSx7aTpudWxsfSkse2NOOiJzdHJpbmciLGI6J2IiJyxlOiciJyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6ImInIixlOiInIixjOlthLkJFXX1dO3ZhciBjPVthLkJOTSxhLkNOTV07dmFyIGQ9e2NOOiJ0aXRsZSIsYjphLlVJUn07cmV0dXJue2NJOnRydWUsbDphLlVJUixrOiJhbmQgaW5jbHVkZV9vbmNlIGxpc3QgYWJzdHJhY3QgZ2xvYmFsIHByaXZhdGUgZWNobyBpbnRlcmZhY2UgYXMgc3RhdGljIGVuZHN3aXRjaCBhcnJheSBudWxsIGlmIGVuZHdoaWxlIG9yIGNvbnN0IGZvciBlbmRmb3JlYWNoIHNlbGYgdmFyIHdoaWxlIGlzc2V0IHB1YmxpYyBwcm90ZWN0ZWQgZXhpdCBmb3JlYWNoIHRocm93IGVsc2VpZiBpbmNsdWRlIF9fRklMRV9fIGVtcHR5IHJlcXVpcmVfb25jZSBkbyB4b3IgcmV0dXJuIGltcGxlbWVudHMgcGFyZW50IGNsb25lIHVzZSBfX0NMQVNTX18gX19MSU5FX18gZWxzZSBicmVhayBwcmludCBldmFsIG5ldyBjYXRjaCBfX01FVEhPRF9fIGNhc2UgZXhjZXB0aW9uIGRlZmF1bHQgZGllIHJlcXVpcmUgX19GVU5DVElPTl9fIGVuZGRlY2xhcmUgZmluYWwgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIGVuZGZvciBlbmRpZiBkZWNsYXJlIHVuc2V0IHRydWUgZmFsc2UgbmFtZXNwYWNlIHRyYWl0IGdvdG8gaW5zdGFuY2VvZiBpbnN0ZWFkb2YgX19ESVJfXyBfX05BTUVTUEFDRV9fIHlpZWxkIGZpbmFsbHkiLGM6W2EuQ0xDTSxhLkhDTSx7Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8iLGM6W3tjTjoicGhwZG9jIixiOiJcXHNAW0EtWmEtel0rIn1dfSx7Y046ImNvbW1lbnQiLGI6Il9faGFsdF9jb21waWxlci4rPzsiLGVXOnRydWUsazoiX19oYWx0X2NvbXBpbGVyIixsOmEuVUlSfSx7Y046InN0cmluZyIsYjoiPDw8WydcIl0/XFx3K1snXCJdPyQiLGU6Il5cXHcrOyIsYzpbYS5CRV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiI8XFw/cGhwIixyOjEwfSx7Y046InByZXByb2Nlc3NvciIsYjoiXFw/PiJ9LGUse2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZToieyIsazoiZnVuY3Rpb24iLGk6IlxcJHxcXFt8JSIsYzpbZCx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6WyJzZWxmIixlLGEuQ0JMQ0xNXS5jb25jYXQoYikuY29uY2F0KGMpfV19LHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIixpOiJbOlxcKFxcJF0iLGM6W3tiV0s6dHJ1ZSxlVzp0cnVlLGs6ImV4dGVuZHMiLGM6W2RdfSxkXX0se2I6Ij0+In1dLmNvbmNhdChiKS5jb25jYXQoYyl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5weXRob249ZnVuY3Rpb24oYSl7dmFyIGY9e2NOOiJwcm9tcHQiLGI6L14oPj4+fFwuXC5cLikgL307dmFyIGM9W3tjTjoic3RyaW5nIixiOi8odXxiKT9yPycnJy8sZTovJycnLyxjOltmXSxyOjEwfSx7Y046InN0cmluZyIsYjovKHV8Yik/cj8iIiIvLGU6LyIiIi8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpJy8sZTovJy8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpIi8sZTovIi8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6LyhifGJyKScvLGU6LycvLGM6W2EuQkVdfSx7Y046InN0cmluZyIsYjovKGJ8YnIpIi8sZTovIi8sYzpbYS5CRV19XS5jb25jYXQoW2EuQVNNLGEuUVNNXSk7dmFyIGU9e2NOOiJ0aXRsZSIsYjphLlVJUn07dmFyIGQ9e2NOOiJwYXJhbXMiLGI6L1woLyxlOi9cKS8sYzpbInNlbGYiLGEuQ05NLGZdLmNvbmNhdChjKX07dmFyIGI9e2JXSzp0cnVlLGU6LzovLGk6L1skez07XG5dLyxjOltlLGRdLHI6MTB9O3JldHVybntrOntrZXl3b3JkOiJhbmQgZWxpZiBpcyBnbG9iYWwgYXMgaW4gaWYgZnJvbSByYWlzZSBmb3IgZXhjZXB0IGZpbmFsbHkgcHJpbnQgaW1wb3J0IHBhc3MgcmV0dXJuIGV4ZWMgZWxzZSBicmVhayBub3Qgd2l0aCBjbGFzcyBhc3NlcnQgeWllbGQgdHJ5IHdoaWxlIGNvbnRpbnVlIGRlbCBvciBkZWYgbGFtYmRhIG5vbmxvY2FsfDEwIE5vbmUgVHJ1ZSBGYWxzZSIsYnVpbHRfaW46IkVsbGlwc2lzIE5vdEltcGxlbWVudGVkIn0saTovKDxcL3wtPnxcPykvLGM6Yy5jb25jYXQoW2YsYS5IQ00sYS5pbmhlcml0KGIse2NOOiJmdW5jdGlvbiIsazoiZGVmIn0pLGEuaW5oZXJpdChiLHtjTjoiY2xhc3MiLGs6ImNsYXNzIn0pLGEuQ05NLHtjTjoiZGVjb3JhdG9yIixiOi9ALyxlOi8kL30se2I6L1xiKHByaW50fGV4ZWMpXCgvfV0pfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuc3FsPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGM6W3tjTjoib3BlcmF0b3IiLGI6IihiZWdpbnxlbmR8c3RhcnR8Y29tbWl0fHJvbGxiYWNrfHNhdmVwb2ludHxsb2NrfGFsdGVyfGNyZWF0ZXxkcm9wfHJlbmFtZXxjYWxsfGRlbGV0ZXxkb3xoYW5kbGVyfGluc2VydHxsb2FkfHJlcGxhY2V8c2VsZWN0fHRydW5jYXRlfHVwZGF0ZXxzZXR8c2hvd3xwcmFnbWF8Z3JhbnQpXFxiKD8hOikiLGU6IjsiLGVXOnRydWUsazp7a2V5d29yZDoiYWxsIHBhcnRpYWwgZ2xvYmFsIG1vbnRoIGN1cnJlbnRfdGltZXN0YW1wIHVzaW5nIGdvIHJldm9rZSBzbWFsbGludCBpbmRpY2F0b3IgZW5kLWV4ZWMgZGlzY29ubmVjdCB6b25lIHdpdGggY2hhcmFjdGVyIGFzc2VydGlvbiB0byBhZGQgY3VycmVudF91c2VyIHVzYWdlIGlucHV0IGxvY2FsIGFsdGVyIG1hdGNoIGNvbGxhdGUgcmVhbCB0aGVuIHJvbGxiYWNrIGdldCByZWFkIHRpbWVzdGFtcCBzZXNzaW9uX3VzZXIgbm90IGludGVnZXIgYml0IHVuaXF1ZSBkYXkgbWludXRlIGRlc2MgaW5zZXJ0IGV4ZWN1dGUgbGlrZSBpbGlrZXwyIGxldmVsIGRlY2ltYWwgZHJvcCBjb250aW51ZSBpc29sYXRpb24gZm91bmQgd2hlcmUgY29uc3RyYWludHMgZG9tYWluIHJpZ2h0IG5hdGlvbmFsIHNvbWUgbW9kdWxlIHRyYW5zYWN0aW9uIHJlbGF0aXZlIHNlY29uZCBjb25uZWN0IGVzY2FwZSBjbG9zZSBzeXN0ZW1fdXNlciBmb3IgZGVmZXJyZWQgc2VjdGlvbiBjYXN0IGN1cnJlbnQgc3Fsc3RhdGUgYWxsb2NhdGUgaW50ZXJzZWN0IGRlYWxsb2NhdGUgbnVtZXJpYyBwdWJsaWMgcHJlc2VydmUgZnVsbCBnb3RvIGluaXRpYWxseSBhc2Mgbm8ga2V5IG91dHB1dCBjb2xsYXRpb24gZ3JvdXAgYnkgdW5pb24gc2Vzc2lvbiBib3RoIGxhc3QgbGFuZ3VhZ2UgY29uc3RyYWludCBjb2x1bW4gb2Ygc3BhY2UgZm9yZWlnbiBkZWZlcnJhYmxlIHByaW9yIGNvbm5lY3Rpb24gdW5rbm93biBhY3Rpb24gY29tbWl0IHZpZXcgb3IgZmlyc3QgaW50byBmbG9hdCB5ZWFyIHByaW1hcnkgY2FzY2FkZWQgZXhjZXB0IHJlc3RyaWN0IHNldCByZWZlcmVuY2VzIG5hbWVzIHRhYmxlIG91dGVyIG9wZW4gc2VsZWN0IHNpemUgYXJlIHJvd3MgZnJvbSBwcmVwYXJlIGRpc3RpbmN0IGxlYWRpbmcgY3JlYXRlIG9ubHkgbmV4dCBpbm5lciBhdXRob3JpemF0aW9uIHNjaGVtYSBjb3JyZXNwb25kaW5nIG9wdGlvbiBkZWNsYXJlIHByZWNpc2lvbiBpbW1lZGlhdGUgZWxzZSB0aW1lem9uZV9taW51dGUgZXh0ZXJuYWwgdmFyeWluZyB0cmFuc2xhdGlvbiB0cnVlIGNhc2UgZXhjZXB0aW9uIGpvaW4gaG91ciBkZWZhdWx0IGRvdWJsZSBzY3JvbGwgdmFsdWUgY3Vyc29yIGRlc2NyaXB0b3IgdmFsdWVzIGRlYyBmZXRjaCBwcm9jZWR1cmUgZGVsZXRlIGFuZCBmYWxzZSBpbnQgaXMgZGVzY3JpYmUgY2hhciBhcyBhdCBpbiB2YXJjaGFyIG51bGwgdHJhaWxpbmcgYW55IGFic29sdXRlIGN1cnJlbnRfdGltZSBlbmQgZ3JhbnQgcHJpdmlsZWdlcyB3aGVuIGNyb3NzIGNoZWNrIHdyaXRlIGN1cnJlbnRfZGF0ZSBwYWQgYmVnaW4gdGVtcG9yYXJ5IGV4ZWMgdGltZSB1cGRhdGUgY2F0YWxvZyB1c2VyIHNxbCBkYXRlIG9uIGlkZW50aXR5IHRpbWV6b25lX2hvdXIgbmF0dXJhbCB3aGVuZXZlciBpbnRlcnZhbCB3b3JrIG9yZGVyIGNhc2NhZGUgZGlhZ25vc3RpY3MgbmNoYXIgaGF2aW5nIGxlZnQgY2FsbCBkbyBoYW5kbGVyIGxvYWQgcmVwbGFjZSB0cnVuY2F0ZSBzdGFydCBsb2NrIHNob3cgcHJhZ21hIGV4aXN0cyBudW1iZXIgdHJpZ2dlciBpZiBiZWZvcmUgYWZ0ZXIgZWFjaCByb3ciLGFnZ3JlZ2F0ZToiY291bnQgc3VtIG1pbiBtYXggYXZnIn0sYzpbe2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2EuQkUse2I6IicnIn1dLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2EuQkUse2I6JyIiJ31dLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6W2EuQkVdfSxhLkNOTV19LGEuQ0JMQ0xNLHtjTjoiY29tbWVudCIsYjoiLS0iLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5pbmk9ZnVuY3Rpb24oYSl7cmV0dXJue2NJOnRydWUsaToiW15cXHNdIixjOlt7Y046ImNvbW1lbnQiLGI6IjsiLGU6IiQifSx7Y046InRpdGxlIixiOiJeXFxbIixlOiJcXF0ifSx7Y046InNldHRpbmciLGI6Il5bYS16MC05XFxbXFxdXy1dK1sgXFx0XSo9WyBcXHRdKiIsZToiJCIsYzpbe2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxrOiJvbiBvZmYgdHJ1ZSBmYWxzZSB5ZXMgbm8iLGM6W2EuUVNNLGEuTk1dLHI6MH1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKGUpe3ZhciBhPSJnZXRwd2VudCBnZXRzZXJ2ZW50IHF1b3RlbWV0YSBtc2dyY3Ygc2NhbGFyIGtpbGwgZGJtY2xvc2UgdW5kZWYgbGMgbWEgc3lzd3JpdGUgdHIgc2VuZCB1bWFzayBzeXNvcGVuIHNobXdyaXRlIHZlYyBxeCB1dGltZSBsb2NhbCBvY3Qgc2VtY3RsIGxvY2FsdGltZSByZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXFmaWxlbm8gcXcgZW5kcHJvdG9lbnQgd2FpdCBzZXRob3N0ZW50IGJsZXNzIHN8MCBvcGVuZGlyIGNvbnRpbnVlIGVhY2ggc2xlZXAgZW5kZ3JlbnQgc2h1dGRvd24gZHVtcCBjaG9tcCBjb25uZWN0IGdldHNvY2tuYW1lIGRpZSBzb2NrZXRwYWlyIGNsb3NlIGZsb2NrIGV4aXN0cyBpbmRleCBzaG1nZXRzdWIgZm9yIGVuZHB3ZW50IHJlZG8gbHN0YXQgbXNnY3RsIHNldHBncnAgYWJzIGV4aXQgc2VsZWN0IHByaW50IHJlZiBnZXRob3N0YnlhZGRyIHVuc2hpZnQgZmNudGwgc3lzY2FsbCBnb3RvIGdldG5ldGJ5YWRkciBqb2luIGdtdGltZSBzeW1saW5rIHNlbWdldCBzcGxpY2UgeHwwIGdldHBlZXJuYW1lIHJlY3YgbG9nIHNldHNvY2tvcHQgY29zIGxhc3QgcmV2ZXJzZSBnZXRob3N0YnluYW1lIGdldGdybmFtIHN0dWR5IGZvcm1saW5lIGVuZGhvc3RlbnQgdGltZXMgY2hvcCBsZW5ndGggZ2V0aG9zdGVudCBnZXRuZXRlbnQgcGFjayBnZXRwcm90b2VudCBnZXRzZXJ2YnluYW1lIHJhbmQgbWtkaXIgcG9zIGNobW9kIHl8MCBzdWJzdHIgZW5kbmV0ZW50IHByaW50ZiBuZXh0IG9wZW4gbXNnc25kIHJlYWRkaXIgdXNlIHVubGluayBnZXRzb2Nrb3B0IGdldHByaW9yaXR5IHJpbmRleCB3YW50YXJyYXkgaGV4IHN5c3RlbSBnZXRzZXJ2Ynlwb3J0IGVuZHNlcnZlbnQgaW50IGNociB1bnRpZSBybWRpciBwcm90b3R5cGUgdGVsbCBsaXN0ZW4gZm9yayBzaG1yZWFkIHVjZmlyc3Qgc2V0cHJvdG9lbnQgZWxzZSBzeXNzZWVrIGxpbmsgZ2V0Z3JnaWQgc2htY3RsIHdhaXRwaWQgdW5wYWNrIGdldG5ldGJ5bmFtZSByZXNldCBjaGRpciBncmVwIHNwbGl0IHJlcXVpcmUgY2FsbGVyIGxjZmlyc3QgdW50aWwgd2FybiB3aGlsZSB2YWx1ZXMgc2hpZnQgdGVsbGRpciBnZXRwd3VpZCBteSBnZXRwcm90b2J5bnVtYmVyIGRlbGV0ZSBhbmQgc29ydCB1YyBkZWZpbmVkIHNyYW5kIGFjY2VwdCBwYWNrYWdlIHNlZWtkaXIgZ2V0cHJvdG9ieW5hbWUgc2Vtb3Agb3VyIHJlbmFtZSBzZWVrIGlmIHF8MCBjaHJvb3Qgc3lzcmVhZCBzZXRwd2VudCBubyBjcnlwdCBnZXRjIGNob3duIHNxcnQgd3JpdGUgc2V0bmV0ZW50IHNldHByaW9yaXR5IGZvcmVhY2ggdGllIHNpbiBtc2dnZXQgbWFwIHN0YXQgZ2V0bG9naW4gdW5sZXNzIGVsc2lmIHRydW5jYXRlIGV4ZWMga2V5cyBnbG9iIHRpZWQgY2xvc2VkaXJpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlIGF0YW4yIGdldGdyZW50IGV4cCB0aW1lIHB1c2ggc2V0Z3JlbnQgZ3QgbHQgb3IgbmUgbXwwIGJyZWFrIGdpdmVuIHNheSBzdGF0ZSB3aGVuIjt2YXIgZD17Y046InN1YnN0IixiOiJbJEBdXFx7IixlOiJcXH0iLGs6YSxyOjEwfTt2YXIgYj17Y046InZhcmlhYmxlIixiOiJcXCRcXGQifTt2YXIgaT17Y046InZhcmlhYmxlIixiOiJbXFwkXFwlXFxAXFwqXShcXF5cXHdcXGJ8I1xcdysoXFw6XFw6XFx3KykqfFteXFxzXFx3e118e1xcdyt9fFxcdysoXFw6XFw6XFx3KikqKSJ9O3ZhciBmPVtlLkJFLGQsYixpXTt2YXIgaD17YjoiLT4iLGM6W3tiOmUuSVJ9LHtiOiJ7IixlOiJ9In1dfTt2YXIgZz17Y046ImNvbW1lbnQiLGI6Il4oX19FTkRfX3xfX0RBVEFfXykiLGU6IlxcbiQiLHI6NX07dmFyIGM9W2IsaSxlLkhDTSxnLHtjTjoiY29tbWVudCIsYjoiXlxcPVxcdyIsZToiXFw9Y3V0IixlVzp0cnVlfSxoLHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXCgiLGU6IlxcKSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcWyIsZToiXFxdIixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXHwiLGU6IlxcfCIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcPCIsZToiXFw+IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicXdcXHMrcSIsZToicSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2UuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6ZixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFXX0se2NOOiJzdHJpbmciLGI6IntcXHcrfSIscjowfSx7Y046InN0cmluZyIsYjoiLT9cXHcrXFxzKlxcPVxcPiIscjowfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscjowfSx7YjoiKCIrZS5SU1IrInxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXGIpXFxzKiIsazoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscjowLGM6W2UuSENNLGcse2NOOiJyZWdleHAiLGI6IihzfHRyfHkpLyhcXFxcLnxbXi9dKSovKFxcXFwufFteL10pKi9bYS16XSoiLHI6MTB9LHtjTjoicmVnZXhwIixiOiIobXxxcik/LyIsZToiL1thLXpdKiIsYzpbZS5CRV0scjowfV19LHtjTjoic3ViIixiV0s6dHJ1ZSxlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsazoic3ViIixyOjV9LHtjTjoib3BlcmF0b3IiLGI6Ii1cXHdcXGIiLHI6MH1dO2QuYz1jO2guY1sxXS5jPWM7cmV0dXJue2s6YSxjOmN9fShobGpzKTtobGpzLkxBTkdVQUdFUy5vYmplY3RpdmVjPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNhdGNoIGV4cG9ydCBzaXplb2YgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgZm9yIHVuaW9uIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIG11dGFibGUgaWYgcHVibGljIGRvIHJldHVybiBnb3RvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiBhc20gY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSB0aHJvdyByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHdjaGFyX3QgaW5saW5lIHJlYWRvbmx5IGFzc2lnbiBwcm9wZXJ0eSBzZWxmIHN5bmNocm9uaXplZCBlbmQgc3ludGhlc2l6ZSBpZCBvcHRpb25hbCByZXF1aXJlZCBub25hdG9taWMgc3VwZXIgdW5pY2hhciBmaW5hbGx5IGR5bmFtaWMgSUJPdXRsZXQgSUJBY3Rpb24gc2VsZWN0b3Igc3Ryb25nIHdlYWsgcmVhZG9ubHkiLGxpdGVyYWw6ImZhbHNlIHRydWUgRkFMU0UgVFJVRSBuaWwgWUVTIE5PIE5VTEwiLGJ1aWx0X2luOiJOU1N0cmluZyBOU0RpY3Rpb25hcnkgQ0dSZWN0IENHUG9pbnQgVUlCdXR0b24gVUlMYWJlbCBVSVRleHRWaWV3IFVJV2ViVmlldyBNS01hcFZpZXcgVUlTZWdtZW50ZWRDb250cm9sIE5TT2JqZWN0IFVJVGFibGVWaWV3RGVsZWdhdGUgVUlUYWJsZVZpZXdEYXRhU291cmNlIE5TVGhyZWFkIFVJQWN0aXZpdHlJbmRpY2F0b3IgVUlUYWJiYXIgVUlUb29sQmFyIFVJQmFyQnV0dG9uSXRlbSBVSUltYWdlVmlldyBOU0F1dG9yZWxlYXNlUG9vbCBVSVRhYmxlVmlldyBCT09MIE5TSW50ZWdlciBDR0Zsb2F0IE5TRXhjZXB0aW9uIE5TTG9nIE5TTXV0YWJsZVN0cmluZyBOU011dGFibGVBcnJheSBOU011dGFibGVEaWN0aW9uYXJ5IE5TVVJMIE5TSW5kZXhQYXRoIENHU2l6ZSBVSVRhYmxlVmlld0NlbGwgVUlWaWV3IFVJVmlld0NvbnRyb2xsZXIgVUlOYXZpZ2F0aW9uQmFyIFVJTmF2aWdhdGlvbkNvbnRyb2xsZXIgVUlUYWJCYXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXIgVUlQb3BvdmVyQ29udHJvbGxlckRlbGVnYXRlIFVJSW1hZ2UgTlNOdW1iZXIgVUlTZWFyY2hCYXIgTlNGZXRjaGVkUmVzdWx0c0NvbnRyb2xsZXIgTlNGZXRjaGVkUmVzdWx0c0NoYW5nZVR5cGUgVUlTY3JvbGxWaWV3IFVJU2Nyb2xsVmlld0RlbGVnYXRlIFVJRWRnZUluc2V0cyBVSUNvbG9yIFVJRm9udCBVSUFwcGxpY2F0aW9uIE5TTm90Rm91bmQgTlNOb3RpZmljYXRpb25DZW50ZXIgTlNOb3RpZmljYXRpb24gVUlMb2NhbE5vdGlmaWNhdGlvbiBOU0J1bmRsZSBOU0ZpbGVNYW5hZ2VyIE5TVGltZUludGVydmFsIE5TRGF0ZSBOU0NhbGVuZGFyIE5TVXNlckRlZmF1bHRzIFVJV2luZG93IE5TUmFuZ2UgTlNBcnJheSBOU0Vycm9yIE5TVVJMUmVxdWVzdCBOU1VSTENvbm5lY3Rpb24gVUlJbnRlcmZhY2VPcmllbnRhdGlvbiBNUE1vdmllUGxheWVyQ29udHJvbGxlciBkaXNwYXRjaF9vbmNlX3QgZGlzcGF0Y2hfcXVldWVfdCBkaXNwYXRjaF9zeW5jIGRpc3BhdGNoX2FzeW5jIGRpc3BhdGNoX29uY2UifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5DTk0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixpOiJbXlxcXFxdW14nXSJ9LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjaW1wb3J0IixlOiIkIixjOlt7Y046InRpdGxlIixiOiciJyxlOiciJ30se2NOOiJ0aXRsZSIsYjoiPCIsZToiPiJ9XX0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQifSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIoe3wkKSIsazoiaW50ZXJmYWNlIGNsYXNzIHByb3RvY29sIGltcGxlbWVudGF0aW9uIixjOlt7Y046ImlkIixiOmEuVUlSfV19LHtjTjoidmFyaWFibGUiLGI6IlxcLiIrYS5VSVIscjowfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jb2ZmZWVzY3JpcHQ9ZnVuY3Rpb24oYyl7dmFyIGI9e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHRoZW4gdW5sZXNzIHVudGlsIGxvb3Agb2YgYnkgd2hlbiBhbmQgb3IgaXMgaXNudCBub3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgeWVzIG5vIG9uIG9mZiIscmVzZXJ2ZWQ6ImNhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgdm9pZCB3aXRoIGNvbnN0IGxldCBlbnVtIGV4cG9ydCBpbXBvcnQgbmF0aXZlIF9faGFzUHJvcCBfX2V4dGVuZHMgX19zbGljZSBfX2JpbmQgX19pbmRleE9mIixidWlsdF9pbjoibnBtIHJlcXVpcmUgY29uc29sZSBwcmludCBtb2R1bGUgZXhwb3J0cyBnbG9iYWwgd2luZG93IGRvY3VtZW50In07dmFyIGE9IltBLVphLXokX11bMC05QS1aYS16JF9dKiI7dmFyIGY9e2NOOiJ0aXRsZSIsYjphfTt2YXIgZT17Y046InN1YnN0IixiOiIjXFx7IixlOiJ9IixrOmIsfTt2YXIgZD1bYy5CTk0sYy5pbmhlcml0KGMuQ05NLHtzdGFydHM6e2U6IihcXHMqLyk/IixyOjB9fSkse2NOOiJzdHJpbmciLGI6IicnJyIsZToiJycnIixjOltjLkJFXX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2MuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyIiIicsZTonIiIiJyxjOltjLkJFLGVdfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbYy5CRSxlXSxyOjB9LHtjTjoicmVnZXhwIixiOiIvLy8iLGU6Ii8vLyIsYzpbYy5IQ01dfSx7Y046InJlZ2V4cCIsYjoiLy9bZ2ltXSoiLHI6MH0se2NOOiJyZWdleHAiLGI6Ii9cXFMoXFxcXC58W15cXG5dKSo/L1tnaW1dKig/PVxcc3xcXFd8JCkifSx7Y046InByb3BlcnR5IixiOiJAIithfSx7YjoiYCIsZToiYCIsZUI6dHJ1ZSxlRTp0cnVlLHNMOiJqYXZhc2NyaXB0In1dO2UuYz1kO3JldHVybntrOmIsYzpkLmNvbmNhdChbe2NOOiJjb21tZW50IixiOiIjIyMiLGU6IiMjIyJ9LGMuSENNLHtjTjoiZnVuY3Rpb24iLGI6IigiK2ErIlxccyo9XFxzKik/KFxcKC4qXFwpKT9cXHMqWy09XT4iLGU6IlstPV0+IixyQjp0cnVlLGM6W2Yse2NOOiJwYXJhbXMiLGI6IlxcKCIsckI6dHJ1ZSxjOlt7YjovXCgvLGU6L1wpLyxrOmIsYzpbInNlbGYiXS5jb25jYXQoZCl9XX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxrOiJjbGFzcyIsZToiJCIsaToiWzpcXFtcXF1dIixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyIsZVc6dHJ1ZSxpOiI6IixjOltmXX0sZl19LHtjTjoiYXR0cmlidXRlIixiOmErIjoiLGU6IjoiLHJCOnRydWUsZUU6dHJ1ZX1dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLm5naW54PWZ1bmN0aW9uKGIpe3ZhciBjPVt7Y046InZhcmlhYmxlIixiOiJcXCRcXGQrIn0se2NOOiJ2YXJpYWJsZSIsYjoiXFwkeyIsZToifSJ9LHtjTjoidmFyaWFibGUiLGI6IltcXCRcXEBdIitiLlVJUn1dO3ZhciBhPXtlVzp0cnVlLGw6IlthLXovX10rIixrOntidWlsdF9pbjoib24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgc2VsZWN0IGJyZWFrIGxhc3QgcGVybWFuZW50IHJlZGlyZWN0IGtxdWV1ZSBydHNpZyBlcG9sbCBwb2xsIC9kZXYvcG9sbCJ9LHI6MCxpOiI9PiIsYzpbYi5IQ00se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2IuQkVdLmNvbmNhdChjKSxyOjB9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InVybCIsYjoiKFthLXpdKyk6LyIsZToiXFxzIixlVzp0cnVlLGVFOnRydWV9LHtjTjoicmVnZXhwIixiOiJcXHNcXF4iLGU6Ilxcc3x7fDsiLHJFOnRydWUsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiflxcKj9cXHMrIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IlxcKihcXC5bYS16XFwtXSspKyIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiKFthLXpcXC1dK1xcLikrXFwqIixjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoibnVtYmVyIixiOiJcXGJcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSg6XFxkezEsNX0pP1xcYiJ9LHtjTjoibnVtYmVyIixiOiJcXGJcXGQrW2tLbU1nR2RzaGR3eV0qXFxiIixyOjB9XS5jb25jYXQoYyl9O3JldHVybntjOltiLkhDTSx7YjpiLlVJUisiXFxzIixlOiI7fHsiLHJCOnRydWUsYzpbe2NOOiJ0aXRsZSIsYjpiLlVJUixzdGFydHM6YX1dLHI6MH1dLGk6IlteXFxzXFx9XSJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5qc29uPWZ1bmN0aW9uKGEpe3ZhciBlPXtsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwifTt2YXIgZD1bYS5RU00sYS5DTk1dO3ZhciBjPXtjTjoidmFsdWUiLGU6IiwiLGVXOnRydWUsZUU6dHJ1ZSxjOmQsazplfTt2YXIgYj17YjoieyIsZToifSIsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6J1xccyoiJyxlOiciXFxzKjpcXHMqJyxlQjp0cnVlLGVFOnRydWUsYzpbYS5CRV0saToiXFxuIixzdGFydHM6Y31dLGk6IlxcUyJ9O3ZhciBmPXtiOiJcXFsiLGU6IlxcXSIsYzpbYS5pbmhlcml0KGMse2NOOm51bGx9KV0saToiXFxTIn07ZC5zcGxpY2UoZC5sZW5ndGgsMCxiLGYpO3JldHVybntjOmQsazplLGk6IlxcUyJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5hcGFjaGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJudW1iZXIiLGI6IltcXCQlXVxcZCsifTtyZXR1cm57Y0k6dHJ1ZSxjOlthLkhDTSx7Y046InRhZyIsYjoiPC8/IixlOiI+In0se2NOOiJrZXl3b3JkIixiOi9cdysvLHI6MCxrOntjb21tb246Im9yZGVyIGRlbnkgYWxsb3cgc2V0ZW52IHJld3JpdGVydWxlIHJld3JpdGVlbmdpbmUgcmV3cml0ZWNvbmQgZG9jdW1lbnRyb290IHNldGhhbmRsZXIgZXJyb3Jkb2N1bWVudCBsb2FkbW9kdWxlIG9wdGlvbnMgaGVhZGVyIGxpc3RlbiBzZXJ2ZXJyb290IHNlcnZlcm5hbWUifSxzdGFydHM6e2U6LyQvLHI6MCxrOntsaXRlcmFsOiJvbiBvZmYgYWxsIn0sYzpbe2NOOiJzcWJyYWNrZXQiLGI6Ilxcc1xcWyIsZToiXFxdJCJ9LHtjTjoiY2JyYWNrZXQiLGI6IltcXCQlXVxceyIsZToiXFx9IixjOlsic2VsZiIsYl19LGIsYS5RU01dfX1dLGk6L1xTL319KGhsanMpO2hsanMuTEFOR1VBR0VTLmNwcD1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiZmFsc2UgaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBzdHJ1Y3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSB1bnNpZ25lZCBsb25nIHRocm93IHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgZG8gcmV0dXJuIGdvdG8gYXV0byB2b2lkIGVudW0gZWxzZSBicmVhayBuZXcgZXh0ZXJuIHVzaW5nIHRydWUgY2xhc3MgYXNtIGNhc2UgdHlwZWlkIHNob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSBkZWxldGUgYWxpZ25vZiBjaGFyMTZfdCBjaGFyMzJfdCBjb25zdGV4cHIgZGVjbHR5cGUgbm9leGNlcHQgbnVsbHB0ciBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBfQm9vbCBjb21wbGV4IixidWlsdF9pbjoic3RkIHN0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RyaW5nc3RyZWFtIGlzdHJpbmdzdHJlYW0gb3N0cmluZ3N0cmVhbSBhdXRvX3B0ciBkZXF1ZSBsaXN0IHF1ZXVlIHN0YWNrIHZlY3RvciBtYXAgc2V0IGJpdHNldCBtdWx0aXNldCBtdWx0aW1hcCB1bm9yZGVyZWRfc2V0IHVub3JkZXJlZF9tYXAgdW5vcmRlcmVkX211bHRpc2V0IHVub3JkZXJlZF9tdWx0aW1hcCBhcnJheSBzaGFyZWRfcHRyIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUVNNLHtjTjoic3RyaW5nIixiOiInXFxcXD8uIixlOiInIixpOiIuIn0se2NOOiJudW1iZXIiLGI6IlxcYihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSh1fFV8bHxMfHVsfFVMfGZ8RikifSxhLkNOTSx7Y046InByZXByb2Nlc3NvciIsYjoiIyIsZToiJCIsYzpbe2I6IjwiLGU6Ij4iLGk6IlxcbiJ9LGEuQ0xDTV19LHtjTjoic3RsX2NvbnRhaW5lciIsYjoiXFxiKGRlcXVlfGxpc3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5KVxccyo8IixlOiI+IixrOmIscjoxMCxjOlsic2VsZiJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYWtlZmlsZT1mdW5jdGlvbihhKXt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfTtyZXR1cm57YzpbYS5IQ00se2I6L15cdytccypcVyo9LyxyQjp0cnVlLHI6MCxzdGFydHM6e2NOOiJjb25zdGFudCIsZTovXHMqXFcqPS8sZUU6dHJ1ZSxzdGFydHM6e2U6LyQvLHI6MCxjOltiXSx9fX0se2NOOiJ0aXRsZSIsYjovXltcd10rOlxzKiQvfSx7Y046InBob255IixiOi9eXC5QSE9OWTovLGU6LyQvLGs6Ii5QSE9OWSIsbDovW1wuXHddKy99LHtiOi9eXHQrLyxlOi8kLyxjOlthLlFTTSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuZ289ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImJyZWFrIGRlZmF1bHQgZnVuYyBpbnRlcmZhY2Ugc2VsZWN0IGNhc2UgbWFwIHN0cnVjdCBjaGFuIGVsc2UgZ290byBwYWNrYWdlIHN3aXRjaCBjb25zdCBmYWxsdGhyb3VnaCBpZiByYW5nZSB0eXBlIGNvbnRpbnVlIGZvciBpbXBvcnQgcmV0dXJuIHZhciBnbyBkZWZlciIsY29uc3RhbnQ6InRydWUgZmFsc2UgaW90YSBuaWwiLHR5cGVuYW1lOiJib29sIGJ5dGUgY29tcGxleDY0IGNvbXBsZXgxMjggZmxvYXQzMiBmbG9hdDY0IGludDggaW50MTYgaW50MzIgaW50NjQgc3RyaW5nIHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0IGludCB1aW50IHVpbnRwdHIgcnVuZSIsYnVpbHRfaW46ImFwcGVuZCBjYXAgY2xvc2UgY29tcGxleCBjb3B5IGltYWcgbGVuIG1ha2UgbmV3IHBhbmljIHByaW50IHByaW50bG4gcmVhbCByZWNvdmVyIGRlbGV0ZSJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJyIsZToiW15cXFxcXSciLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAifSx7Y046Im51bWJlciIsYjoiW15hLXpBLVpfMC05XShcXC18XFwrKT9cXGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHMpKFxcK3xcXC0pP1xcZCspPyIscjowfSxhLkNOTV19fShobGpzKTtQSwcIFVltTvZ1AAD2dQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAc3RhdGljXGxpYlxqcXVlcnkuZm9ybS5taW4uanMvKiEKICogalF1ZXJ5IEZvcm0gUGx1Z2luCiAqIHZlcnNpb246IDMuNDYuMC0yMDEzLjExLjIxCiAqIFJlcXVpcmVzIGpRdWVyeSB2MS41IG9yIGxhdGVyCiAqIENvcHlyaWdodCAoYykgMjAxMyBNLiBBbHN1cAogKiBFeGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBhdDogaHR0cDovL21hbHN1cC5jb20vanF1ZXJ5L2Zvcm0vCiAqIFByb2plY3QgcmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKiBodHRwczovL2dpdGh1Yi5jb20vbWFsc3VwL2Zvcm0jY29weXJpZ2h0LWFuZC1saWNlbnNlCiAqLwooZnVuY3Rpb24oYSl7aWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbImpxdWVyeSJdLGEpfWVsc2V7YSgodHlwZW9mKGpRdWVyeSkhPSJ1bmRlZmluZWQiKT9qUXVlcnk6d2luZG93LlplcHRvKX19KGZ1bmN0aW9uKGYpe3ZhciBjPXt9O2MuZmlsZWFwaT1mKCI8aW5wdXQgdHlwZT0nZmlsZScvPiIpLmdldCgwKS5maWxlcyE9PXVuZGVmaW5lZDtjLmZvcm1kYXRhPXdpbmRvdy5Gb3JtRGF0YSE9PXVuZGVmaW5lZDt2YXIgZT0hIWYuZm4ucHJvcDtmLmZuLmF0dHIyPWZ1bmN0aW9uKCl7aWYoIWUpe3JldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBnPXRoaXMucHJvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoKGcmJmcuanF1ZXJ5KXx8dHlwZW9mIGc9PT0ic3RyaW5nIil7cmV0dXJuIGd9cmV0dXJuIHRoaXMuYXR0ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2YuZm4uYWpheFN1Ym1pdD1mdW5jdGlvbihqKXtpZighdGhpcy5sZW5ndGgpe2QoImFqYXhTdWJtaXQ6IHNraXBwaW5nIHN1Ym1pdCBwcm9jZXNzIC0gbm8gZWxlbWVudCBzZWxlY3RlZCIpO3JldHVybiB0aGlzfXZhciBpLEMsbSxvPXRoaXM7aWYodHlwZW9mIGo9PSJmdW5jdGlvbiIpe2o9e3N1Y2Nlc3M6an19ZWxzZXtpZihqPT09dW5kZWZpbmVkKXtqPXt9fX1pPWoudHlwZXx8dGhpcy5hdHRyMigibWV0aG9kIik7Qz1qLnVybHx8dGhpcy5hdHRyMigiYWN0aW9uIik7bT0odHlwZW9mIEM9PT0ic3RyaW5nIik/Zi50cmltKEMpOiIiO209bXx8d2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiO2lmKG0pe209KG0ubWF0Y2goL14oW14jXSspLyl8fFtdKVsxXX1qPWYuZXh0ZW5kKHRydWUse3VybDptLHN1Y2Nlc3M6Zi5hamF4U2V0dGluZ3Muc3VjY2Vzcyx0eXBlOml8fGYuYWpheFNldHRpbmdzLnR5cGUsaWZyYW1lU3JjOi9eaHR0cHMvaS50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIik/ImphdmFzY3JpcHQ6ZmFsc2UiOiJhYm91dDpibGFuayJ9LGopO3ZhciB1PXt9O3RoaXMudHJpZ2dlcigiZm9ybS1wcmUtc2VyaWFsaXplIixbdGhpcyxqLHVdKTtpZih1LnZldG8pe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tcHJlLXNlcmlhbGl6ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9aWYoai5iZWZvcmVTZXJpYWxpemUmJmouYmVmb3JlU2VyaWFsaXplKHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVNlcmlhbGl6ZSBjYWxsYmFjayIpO3JldHVybiB0aGlzfXZhciBuPWoudHJhZGl0aW9uYWw7aWYobj09PXVuZGVmaW5lZCl7bj1mLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbH12YXIgcz1bXTt2YXIgRSxGPXRoaXMuZm9ybVRvQXJyYXkoai5zZW1hbnRpYyxzKTtpZihqLmRhdGEpe2ouZXh0cmFEYXRhPWouZGF0YTtFPWYucGFyYW0oai5kYXRhLG4pfWlmKGouYmVmb3JlU3VibWl0JiZqLmJlZm9yZVN1Ym1pdChGLHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVN1Ym1pdCBjYWxsYmFjayIpO3JldHVybiB0aGlzfXRoaXMudHJpZ2dlcigiZm9ybS1zdWJtaXQtdmFsaWRhdGUiLFtGLHRoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXN1Ym1pdC12YWxpZGF0ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9dmFyIHk9Zi5wYXJhbShGLG4pO2lmKEUpe3k9KHk/KHkrIiYiK0UpOkUpfWlmKGoudHlwZS50b1VwcGVyQ2FzZSgpPT0iR0VUIil7ai51cmwrPShqLnVybC5pbmRleE9mKCI/Iik+PTA/IiYiOiI/IikreTtqLmRhdGE9bnVsbH1lbHNle2ouZGF0YT15fXZhciBIPVtdO2lmKGoucmVzZXRGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLnJlc2V0Rm9ybSgpfSl9aWYoai5jbGVhckZvcm0pe0gucHVzaChmdW5jdGlvbigpe28uY2xlYXJGb3JtKGouaW5jbHVkZUhpZGRlbil9KX1pZighai5kYXRhVHlwZSYmai50YXJnZXQpe3ZhciBsPWouc3VjY2Vzc3x8ZnVuY3Rpb24oKXt9O0gucHVzaChmdW5jdGlvbihxKXt2YXIgaz1qLnJlcGxhY2VUYXJnZXQ/InJlcGxhY2VXaXRoIjoiaHRtbCI7ZihqLnRhcmdldClba10ocSkuZWFjaChsLGFyZ3VtZW50cyl9KX1lbHNle2lmKGouc3VjY2Vzcyl7SC5wdXNoKGouc3VjY2Vzcyl9fWouc3VjY2Vzcz1mdW5jdGlvbihLLHEsTCl7dmFyIEo9ai5jb250ZXh0fHx0aGlzO2Zvcih2YXIgST0wLGs9SC5sZW5ndGg7STxrO0krKyl7SFtJXS5hcHBseShKLFtLLHEsTHx8byxvXSl9fTtpZihqLmVycm9yKXt2YXIgej1qLmVycm9yO2ouZXJyb3I9ZnVuY3Rpb24oSixrLHEpe3ZhciBJPWouY29udGV4dHx8dGhpczt6LmFwcGx5KEksW0osayxxLG9dKX19aWYoai5jb21wbGV0ZSl7dmFyIGg9ai5jb21wbGV0ZTtqLmNvbXBsZXRlPWZ1bmN0aW9uKEksayl7dmFyIHE9ai5jb250ZXh0fHx0aGlzO2guYXBwbHkocSxbSSxrLG9dKX19dmFyIEQ9ZigiaW5wdXRbdHlwZT1maWxlXTplbmFibGVkIix0aGlzKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzKS52YWwoKSE9PSIifSk7dmFyIHA9RC5sZW5ndGg+MDt2YXIgQj0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7dmFyIHg9KG8uYXR0cigiZW5jdHlwZSIpPT1CfHxvLmF0dHIoImVuY29kaW5nIik9PUIpO3ZhciB3PWMuZmlsZWFwaSYmYy5mb3JtZGF0YTtkKCJmaWxlQVBJIDoiK3cpO3ZhciByPShwfHx4KSYmIXc7dmFyIHY7aWYoai5pZnJhbWUhPT1mYWxzZSYmKGouaWZyYW1lfHxyKSl7aWYoai5jbG9zZUtlZXBBbGl2ZSl7Zi5nZXQoai5jbG9zZUtlZXBBbGl2ZSxmdW5jdGlvbigpe3Y9RyhGKX0pfWVsc2V7dj1HKEYpfX1lbHNle2lmKChwfHx4KSYmdyl7dj10KEYpfWVsc2V7dj1mLmFqYXgoail9fW8ucmVtb3ZlRGF0YSgianF4aHIiKS5kYXRhKCJqcXhociIsdik7Zm9yKHZhciBBPTA7QTxzLmxlbmd0aDtBKyspe3NbQV09bnVsbH10aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LW5vdGlmeSIsW3RoaXMsal0pO3JldHVybiB0aGlzO2Z1bmN0aW9uIGcoSyl7dmFyIEw9Zi5wYXJhbShLLGoudHJhZGl0aW9uYWwpLnNwbGl0KCImIik7dmFyIHE9TC5sZW5ndGg7dmFyIGs9W107dmFyIEosSTtmb3IoSj0wO0o8cTtKKyspe0xbSl09TFtKXS5yZXBsYWNlKC9cKy9nLCIgIik7ST1MW0pdLnNwbGl0KCI9Iik7ay5wdXNoKFtkZWNvZGVVUklDb21wb25lbnQoSVswXSksZGVjb2RlVVJJQ29tcG9uZW50KElbMV0pXSl9cmV0dXJuIGt9ZnVuY3Rpb24gdChxKXt2YXIgaz1uZXcgRm9ybURhdGEoKTtmb3IodmFyIEk9MDtJPHEubGVuZ3RoO0krKyl7ay5hcHBlbmQocVtJXS5uYW1lLHFbSV0udmFsdWUpfWlmKGouZXh0cmFEYXRhKXt2YXIgTD1nKGouZXh0cmFEYXRhKTtmb3IoST0wO0k8TC5sZW5ndGg7SSsrKXtpZihMW0ldKXtrLmFwcGVuZChMW0ldWzBdLExbSV1bMV0pfX19ai5kYXRhPW51bGw7dmFyIEs9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqLHtjb250ZW50VHlwZTpmYWxzZSxwcm9jZXNzRGF0YTpmYWxzZSxjYWNoZTpmYWxzZSx0eXBlOml8fCJQT1NUIn0pO2lmKGoudXBsb2FkUHJvZ3Jlc3Mpe0sueGhyPWZ1bmN0aW9uKCl7dmFyIE09Zi5hamF4U2V0dGluZ3MueGhyKCk7aWYoTS51cGxvYWQpe00udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihRKXt2YXIgUD0wO3ZhciBOPVEubG9hZGVkfHxRLnBvc2l0aW9uO3ZhciBPPVEudG90YWw7aWYoUS5sZW5ndGhDb21wdXRhYmxlKXtQPU1hdGguY2VpbChOL08qMTAwKX1qLnVwbG9hZFByb2dyZXNzKFEsTixPLFApfSxmYWxzZSl9cmV0dXJuIE19fUsuZGF0YT1udWxsO3ZhciBKPUsuYmVmb3JlU2VuZDtLLmJlZm9yZVNlbmQ9ZnVuY3Rpb24oTixNKXtpZihqLmZvcm1EYXRhKXtNLmRhdGE9ai5mb3JtRGF0YX1lbHNle00uZGF0YT1rfWlmKEope0ouY2FsbCh0aGlzLE4sTSl9fTtyZXR1cm4gZi5hamF4KEspfWZ1bmN0aW9uIEcoYWYpe3ZhciBMPW9bMF0sSyxhYixWLGFkLFksTixRLE8sUCxaLGFjLFQ7dmFyIGFpPWYuRGVmZXJyZWQoKTthaS5hYm9ydD1mdW5jdGlvbihhail7Ty5hYm9ydChhail9O2lmKGFmKXtmb3IoYWI9MDthYjxzLmxlbmd0aDthYisrKXtLPWYoc1thYl0pO2lmKGUpe0sucHJvcCgiZGlzYWJsZWQiLGZhbHNlKX1lbHNle0sucmVtb3ZlQXR0cigiZGlzYWJsZWQiKX19fVY9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqKTtWLmNvbnRleHQ9Vi5jb250ZXh0fHxWO1k9ImpxRm9ybUlPIisobmV3IERhdGUoKS5nZXRUaW1lKCkpO2lmKFYuaWZyYW1lVGFyZ2V0KXtOPWYoVi5pZnJhbWVUYXJnZXQpO1o9Ti5hdHRyMigibmFtZSIpO2lmKCFaKXtOLmF0dHIyKCJuYW1lIixZKX1lbHNle1k9Wn19ZWxzZXtOPWYoJzxpZnJhbWUgbmFtZT0iJytZKyciIHNyYz0iJytWLmlmcmFtZVNyYysnIiAvPicpO04uY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiLTEwMDBweCIsbGVmdDoiLTEwMDBweCJ9KX1RPU5bMF07Tz17YWJvcnRlZDowLHJlc3BvbnNlVGV4dDpudWxsLHJlc3BvbnNlWE1MOm51bGwsc3RhdHVzOjAsc3RhdHVzVGV4dDoibi9hIixnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXt9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKCl7fSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKCl7fSxhYm9ydDpmdW5jdGlvbihhail7dmFyIGFrPShhaj09PSJ0aW1lb3V0Ij8idGltZW91dCI6ImFib3J0ZWQiKTtkKCJhYm9ydGluZyB1cGxvYWQuLi4gIithayk7dGhpcy5hYm9ydGVkPTE7dHJ5e2lmKFEuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCl7US5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kKCJTdG9wIil9fWNhdGNoKGFsKXt9Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKTtPLmVycm9yPWFrO2lmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhayxhail9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFrXSl9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFrKX19fTthZD1WLmdsb2JhbDtpZihhZCYmMD09PWYuYWN0aXZlKyspe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iil9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFNlbmQiLFtPLFZdKX1pZihWLmJlZm9yZVNlbmQmJlYuYmVmb3JlU2VuZC5jYWxsKFYuY29udGV4dCxPLFYpPT09ZmFsc2Upe2lmKFYuZ2xvYmFsKXtmLmFjdGl2ZS0tfWFpLnJlamVjdCgpO3JldHVybiBhaX1pZihPLmFib3J0ZWQpe2FpLnJlamVjdCgpO3JldHVybiBhaX1QPUwuY2xrO2lmKFApe1o9UC5uYW1lO2lmKFomJiFQLmRpc2FibGVkKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbWl09UC52YWx1ZTtpZihQLnR5cGU9PSJpbWFnZSIpe1YuZXh0cmFEYXRhW1orIi54Il09TC5jbGtfeDtWLmV4dHJhRGF0YVtaKyIueSJdPUwuY2xrX3l9fX12YXIgVT0xO3ZhciBSPTI7ZnVuY3Rpb24gUyhhbCl7dmFyIGFrPW51bGw7dHJ5e2lmKGFsLmNvbnRlbnRXaW5kb3cpe2FrPWFsLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnR9fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50V2luZG93IGRvY3VtZW50OiAiK2FqKX1pZihhayl7cmV0dXJuIGFrfXRyeXthaz1hbC5jb250ZW50RG9jdW1lbnQ/YWwuY29udGVudERvY3VtZW50OmFsLmRvY3VtZW50fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50RG9jdW1lbnQ6ICIrYWopO2FrPWFsLmRvY3VtZW50fXJldHVybiBha312YXIgSj1mKCJtZXRhW25hbWU9Y3NyZi10b2tlbl0iKS5hdHRyKCJjb250ZW50Iik7dmFyIEk9ZigibWV0YVtuYW1lPWNzcmYtcGFyYW1dIikuYXR0cigiY29udGVudCIpO2lmKEkmJkope1YuZXh0cmFEYXRhPVYuZXh0cmFEYXRhfHx7fTtWLmV4dHJhRGF0YVtJXT1KfWZ1bmN0aW9uIGFhKCl7dmFyIGFsPW8uYXR0cjIoInRhcmdldCIpLGFqPW8uYXR0cjIoImFjdGlvbiIpO0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLFkpO2lmKCFpfHwvcG9zdC9pLnRlc3QoaSkpe0wuc2V0QXR0cmlidXRlKCJtZXRob2QiLCJQT1NUIil9aWYoYWohPVYudXJsKXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixWLnVybCl9aWYoIVYuc2tpcEVuY29kaW5nT3ZlcnJpZGUmJighaXx8L3Bvc3QvaS50ZXN0KGkpKSl7by5hdHRyKHtlbmNvZGluZzoibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsZW5jdHlwZToibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9KX1pZihWLnRpbWVvdXQpe1Q9c2V0VGltZW91dChmdW5jdGlvbigpe2FjPXRydWU7WChVKX0sVi50aW1lb3V0KX1mdW5jdGlvbiBhbSgpe3RyeXt2YXIgYXE9UyhRKS5yZWFkeVN0YXRlO2QoInN0YXRlID0gIithcSk7aWYoYXEmJmFxLnRvTG93ZXJDYXNlKCk9PSJ1bmluaXRpYWxpemVkIil7c2V0VGltZW91dChhbSw1MCl9fWNhdGNoKGFyKXtkKCJTZXJ2ZXIgYWJvcnQ6ICIsYXIsIiAoIixhci5uYW1lLCIpIik7WChSKTtpZihUKXtjbGVhclRpbWVvdXQoVCl9VD11bmRlZmluZWR9fXZhciBhaz1bXTt0cnl7aWYoVi5leHRyYURhdGEpe2Zvcih2YXIgYXAgaW4gVi5leHRyYURhdGEpe2lmKFYuZXh0cmFEYXRhLmhhc093blByb3BlcnR5KGFwKSl7aWYoZi5pc1BsYWluT2JqZWN0KFYuZXh0cmFEYXRhW2FwXSkmJlYuZXh0cmFEYXRhW2FwXS5oYXNPd25Qcm9wZXJ0eSgibmFtZSIpJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoInZhbHVlIikpe2FrLnB1c2goZignPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJytWLmV4dHJhRGF0YVthcF0ubmFtZSsnIj4nKS52YWwoVi5leHRyYURhdGFbYXBdLnZhbHVlKS5hcHBlbmRUbyhMKVswXSl9ZWxzZXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrYXArJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXSkuYXBwZW5kVG8oTClbMF0pfX19fWlmKCFWLmlmcmFtZVRhcmdldCl7Ti5hcHBlbmRUbygiYm9keSIpfWlmKFEuYXR0YWNoRXZlbnQpe1EuYXR0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXNldFRpbWVvdXQoYW0sMTUpO3RyeXtMLnN1Ym1pdCgpfWNhdGNoKGFuKXt2YXIgYW89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLnN1Ym1pdDthby5hcHBseShMKX19ZmluYWxseXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixhaik7aWYoYWwpe0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLGFsKX1lbHNle28ucmVtb3ZlQXR0cigidGFyZ2V0Iil9ZihhaykucmVtb3ZlKCl9fWlmKFYuZm9yY2VTeW5jKXthYSgpfWVsc2V7c2V0VGltZW91dChhYSwxMCl9dmFyIGFnLGFoLGFlPTUwLE07ZnVuY3Rpb24gWChhcCl7aWYoTy5hYm9ydGVkfHxNKXtyZXR1cm59YWg9UyhRKTtpZighYWgpe2QoImNhbm5vdCBhY2Nlc3MgcmVzcG9uc2UgZG9jdW1lbnQiKTthcD1SfWlmKGFwPT09VSYmTyl7Ty5hYm9ydCgidGltZW91dCIpO2FpLnJlamVjdChPLCJ0aW1lb3V0Iik7cmV0dXJufWVsc2V7aWYoYXA9PVImJk8pe08uYWJvcnQoInNlcnZlciBhYm9ydCIpO2FpLnJlamVjdChPLCJlcnJvciIsInNlcnZlciBhYm9ydCIpO3JldHVybn19aWYoIWFofHxhaC5sb2NhdGlvbi5ocmVmPT1WLmlmcmFtZVNyYyl7aWYoIWFjKXtyZXR1cm59fWlmKFEuZGV0YWNoRXZlbnQpe1EuZGV0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXZhciBhbj0ic3VjY2VzcyIsYXI7dHJ5e2lmKGFjKXt0aHJvdyJ0aW1lb3V0In12YXIgYW09Vi5kYXRhVHlwZT09InhtbCJ8fGFoLlhNTERvY3VtZW50fHxmLmlzWE1MRG9jKGFoKTtkKCJpc1htbD0iK2FtKTtpZighYW0mJndpbmRvdy5vcGVyYSYmKGFoLmJvZHk9PT1udWxsfHwhYWguYm9keS5pbm5lckhUTUwpKXtpZigtLWFlKXtkKCJyZXF1ZWluZyBvbkxvYWQgY2FsbGJhY2ssIERPTSBub3QgYXZhaWxhYmxlIik7c2V0VGltZW91dChYLDI1MCk7cmV0dXJufX12YXIgYXQ9YWguYm9keT9haC5ib2R5OmFoLmRvY3VtZW50RWxlbWVudDtPLnJlc3BvbnNlVGV4dD1hdD9hdC5pbm5lckhUTUw6bnVsbDtPLnJlc3BvbnNlWE1MPWFoLlhNTERvY3VtZW50P2FoLlhNTERvY3VtZW50OmFoO2lmKGFtKXtWLmRhdGFUeXBlPSJ4bWwifU8uZ2V0UmVzcG9uc2VIZWFkZXI9ZnVuY3Rpb24oYXcpe3ZhciBhdj17ImNvbnRlbnQtdHlwZSI6Vi5kYXRhVHlwZX07cmV0dXJuIGF2W2F3LnRvTG93ZXJDYXNlKCldfTtpZihhdCl7Ty5zdGF0dXM9TnVtYmVyKGF0LmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YXQuZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH12YXIgYWo9KFYuZGF0YVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpO3ZhciBhcT0vKGpzb258c2NyaXB0fHRleHQpLy50ZXN0KGFqKTtpZihhcXx8Vi50ZXh0YXJlYSl7dmFyIGFvPWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZXh0YXJlYSIpWzBdO2lmKGFvKXtPLnJlc3BvbnNlVGV4dD1hby52YWx1ZTtPLnN0YXR1cz1OdW1iZXIoYW8uZ2V0QXR0cmlidXRlKCJzdGF0dXMiKSl8fE8uc3RhdHVzO08uc3RhdHVzVGV4dD1hby5nZXRBdHRyaWJ1dGUoInN0YXR1c1RleHQiKXx8Ty5zdGF0dXNUZXh0fWVsc2V7aWYoYXEpe3ZhciBhaz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIilbMF07dmFyIGF1PWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoYWspe08ucmVzcG9uc2VUZXh0PWFrLnRleHRDb250ZW50P2FrLnRleHRDb250ZW50OmFrLmlubmVyVGV4dH1lbHNle2lmKGF1KXtPLnJlc3BvbnNlVGV4dD1hdS50ZXh0Q29udGVudD9hdS50ZXh0Q29udGVudDphdS5pbm5lclRleHR9fX19fWVsc2V7aWYoYWo9PSJ4bWwiJiYhTy5yZXNwb25zZVhNTCYmTy5yZXNwb25zZVRleHQpe08ucmVzcG9uc2VYTUw9VyhPLnJlc3BvbnNlVGV4dCl9fXRyeXthZz1rKE8sYWosVil9Y2F0Y2goYWwpe2FuPSJwYXJzZXJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX19Y2F0Y2goYWwpe2QoImVycm9yIGNhdWdodDogIixhbCk7YW49ImVycm9yIjtPLmVycm9yPWFyPShhbHx8YW4pfWlmKE8uYWJvcnRlZCl7ZCgidXBsb2FkIGFib3J0ZWQiKTthbj1udWxsfWlmKE8uc3RhdHVzKXthbj0oTy5zdGF0dXM+PTIwMCYmTy5zdGF0dXM8MzAwfHxPLnN0YXR1cz09PTMwNCk/InN1Y2Nlc3MiOiJlcnJvciJ9aWYoYW49PT0ic3VjY2VzcyIpe2lmKFYuc3VjY2Vzcyl7Vi5zdWNjZXNzLmNhbGwoVi5jb250ZXh0LGFnLCJzdWNjZXNzIixPKX1haS5yZXNvbHZlKE8ucmVzcG9uc2VUZXh0LCJzdWNjZXNzIixPKTtpZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4U3VjY2VzcyIsW08sVl0pfX1lbHNle2lmKGFuKXtpZihhcj09PXVuZGVmaW5lZCl7YXI9Ty5zdGF0dXNUZXh0fWlmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhbixhcil9YWkucmVqZWN0KE8sImVycm9yIixhcik7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFyXSl9fX1pZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtPLFZdKX1pZihhZCYmIS0tZi5hY3RpdmUpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKX1pZihWLmNvbXBsZXRlKXtWLmNvbXBsZXRlLmNhbGwoVi5jb250ZXh0LE8sYW4pfU09dHJ1ZTtpZihWLnRpbWVvdXQpe2NsZWFyVGltZW91dChUKX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIVYuaWZyYW1lVGFyZ2V0KXtOLnJlbW92ZSgpfWVsc2V7Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKX1PLnJlc3BvbnNlWE1MPW51bGx9LDEwMCl9dmFyIFc9Zi5wYXJzZVhNTHx8ZnVuY3Rpb24oYWosYWspe2lmKHdpbmRvdy5BY3RpdmVYT2JqZWN0KXthaz1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpO2FrLmFzeW5jPSJmYWxzZSI7YWsubG9hZFhNTChhail9ZWxzZXthaz0obmV3IERPTVBhcnNlcigpKS5wYXJzZUZyb21TdHJpbmcoYWosInRleHQveG1sIil9cmV0dXJuKGFrJiZhay5kb2N1bWVudEVsZW1lbnQmJmFrLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSE9InBhcnNlcmVycm9yIik/YWs6bnVsbH07dmFyIHE9Zi5wYXJzZUpTT058fGZ1bmN0aW9uKGFqKXtyZXR1cm4gd2luZG93WyJldmFsIl0oIigiK2FqKyIpIil9O3ZhciBrPWZ1bmN0aW9uKGFvLGFtLGFsKXt2YXIgYWs9YW8uZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixhaj1hbT09PSJ4bWwifHwhYW0mJmFrLmluZGV4T2YoInhtbCIpPj0wLGFuPWFqP2FvLnJlc3BvbnNlWE1MOmFvLnJlc3BvbnNlVGV4dDtpZihhaiYmYW4uZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lPT09InBhcnNlcmVycm9yIil7aWYoZi5lcnJvcil7Zi5lcnJvcigicGFyc2VyZXJyb3IiKX19aWYoYWwmJmFsLmRhdGFGaWx0ZXIpe2FuPWFsLmRhdGFGaWx0ZXIoYW4sYW0pfWlmKHR5cGVvZiBhbj09PSJzdHJpbmciKXtpZihhbT09PSJqc29uInx8IWFtJiZhay5pbmRleE9mKCJqc29uIik+PTApe2FuPXEoYW4pfWVsc2V7aWYoYW09PT0ic2NyaXB0Inx8IWFtJiZhay5pbmRleE9mKCJqYXZhc2NyaXB0Iik+PTApe2YuZ2xvYmFsRXZhbChhbil9fX1yZXR1cm4gYW59O3JldHVybiBhaX19O2YuZm4uYWpheEZvcm09ZnVuY3Rpb24oZyl7Zz1nfHx7fTtnLmRlbGVnYXRpb249Zy5kZWxlZ2F0aW9uJiZmLmlzRnVuY3Rpb24oZi5mbi5vbik7aWYoIWcuZGVsZWdhdGlvbiYmdGhpcy5sZW5ndGg9PT0wKXt2YXIgaD17czp0aGlzLnNlbGVjdG9yLGM6dGhpcy5jb250ZXh0fTtpZighZi5pc1JlYWR5JiZoLnMpe2QoIkRPTSBub3QgcmVhZHksIHF1ZXVpbmcgYWpheEZvcm0iKTtmKGZ1bmN0aW9uKCl7ZihoLnMsaC5jKS5hamF4Rm9ybShnKX0pO3JldHVybiB0aGlzfWQoInRlcm1pbmF0aW5nOyB6ZXJvIGVsZW1lbnRzIGZvdW5kIGJ5IHNlbGVjdG9yIisoZi5pc1JlYWR5PyIiOiIgKERPTSBub3QgcmVhZHkpIikpO3JldHVybiB0aGlzfWlmKGcuZGVsZWdhdGlvbil7Zihkb2N1bWVudCkub2ZmKCJzdWJtaXQuZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYikub2ZmKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixhKS5vbigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYikub24oImNsaWNrLmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuYWpheEZvcm1VbmJpbmQoKS5iaW5kKCJzdWJtaXQuZm9ybS1wbHVnaW4iLGcsYikuYmluZCgiY2xpY2suZm9ybS1wbHVnaW4iLGcsYSl9O2Z1bmN0aW9uIGIoaCl7dmFyIGc9aC5kYXRhO2lmKCFoLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtoLnByZXZlbnREZWZhdWx0KCk7ZihoLnRhcmdldCkuYWpheFN1Ym1pdChnKX19ZnVuY3Rpb24gYShrKXt2YXIgaj1rLnRhcmdldDt2YXIgaD1mKGopO2lmKCEoaC5pcygiW3R5cGU9c3VibWl0XSxbdHlwZT1pbWFnZV0iKSkpe3ZhciBnPWguY2xvc2VzdCgiW3R5cGU9c3VibWl0XSIpO2lmKGcubGVuZ3RoPT09MCl7cmV0dXJufWo9Z1swXX12YXIgaT10aGlzO2kuY2xrPWo7aWYoai50eXBlPT0iaW1hZ2UiKXtpZihrLm9mZnNldFghPT11bmRlZmluZWQpe2kuY2xrX3g9ay5vZmZzZXRYO2kuY2xrX3k9ay5vZmZzZXRZfWVsc2V7aWYodHlwZW9mIGYuZm4ub2Zmc2V0PT0iZnVuY3Rpb24iKXt2YXIgbD1oLm9mZnNldCgpO2kuY2xrX3g9ay5wYWdlWC1sLmxlZnQ7aS5jbGtfeT1rLnBhZ2VZLWwudG9wfWVsc2V7aS5jbGtfeD1rLnBhZ2VYLWoub2Zmc2V0TGVmdDtpLmNsa195PWsucGFnZVktai5vZmZzZXRUb3B9fX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5jbGs9aS5jbGtfeD1pLmNsa195PW51bGx9LDEwMCl9Zi5mbi5hamF4Rm9ybVVuYmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIGNsaWNrLmZvcm0tcGx1Z2luIil9O2YuZm4uZm9ybVRvQXJyYXk9ZnVuY3Rpb24oeCxnKXt2YXIgdz1bXTtpZih0aGlzLmxlbmd0aD09PTApe3JldHVybiB3fXZhciBsPXRoaXNbMF07dmFyIHA9eD9sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6bC5lbGVtZW50cztpZighcCl7cmV0dXJuIHd9dmFyIHIscSxvLHksbSx0LGs7Zm9yKHI9MCx0PXAubGVuZ3RoO3I8dDtyKyspe209cFtyXTtvPW0ubmFtZTtpZighb3x8bS5kaXNhYmxlZCl7Y29udGludWV9aWYoeCYmbC5jbGsmJm0udHlwZT09ImltYWdlIil7aWYobC5jbGs9PW0pe3cucHVzaCh7bmFtZTpvLHZhbHVlOmYobSkudmFsKCksdHlwZTptLnR5cGV9KTt3LnB1c2goe25hbWU6bysiLngiLHZhbHVlOmwuY2xrX3h9LHtuYW1lOm8rIi55Iix2YWx1ZTpsLmNsa195fSl9Y29udGludWV9eT1mLmZpZWxkVmFsdWUobSx0cnVlKTtpZih5JiZ5LmNvbnN0cnVjdG9yPT1BcnJheSl7aWYoZyl7Zy5wdXNoKG0pfWZvcihxPTAsaz15Lmxlbmd0aDtxPGs7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTp5W3FdfSl9fWVsc2V7aWYoYy5maWxlYXBpJiZtLnR5cGU9PSJmaWxlIil7aWYoZyl7Zy5wdXNoKG0pfXZhciBoPW0uZmlsZXM7aWYoaC5sZW5ndGgpe2ZvcihxPTA7cTxoLmxlbmd0aDtxKyspe3cucHVzaCh7bmFtZTpvLHZhbHVlOmhbcV0sdHlwZTptLnR5cGV9KX19ZWxzZXt3LnB1c2goe25hbWU6byx2YWx1ZToiIix0eXBlOm0udHlwZX0pfX1lbHNle2lmKHkhPT1udWxsJiZ0eXBlb2YgeSE9InVuZGVmaW5lZCIpe2lmKGcpe2cucHVzaChtKX13LnB1c2goe25hbWU6byx2YWx1ZTp5LHR5cGU6bS50eXBlLHJlcXVpcmVkOm0ucmVxdWlyZWR9KX19fX1pZigheCYmbC5jbGspe3ZhciBzPWYobC5jbGspLHU9c1swXTtvPXUubmFtZTtpZihvJiYhdS5kaXNhYmxlZCYmdS50eXBlPT0iaW1hZ2UiKXt3LnB1c2goe25hbWU6byx2YWx1ZTpzLnZhbCgpfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfX1yZXR1cm4gd307Zi5mbi5mb3JtU2VyaWFsaXplPWZ1bmN0aW9uKGcpe3JldHVybiBmLnBhcmFtKHRoaXMuZm9ybVRvQXJyYXkoZykpfTtmLmZuLmZpZWxkU2VyaWFsaXplPWZ1bmN0aW9uKGgpe3ZhciBnPVtdO3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBtPXRoaXMubmFtZTtpZighbSl7cmV0dXJufXZhciBrPWYuZmllbGRWYWx1ZSh0aGlzLGgpO2lmKGsmJmsuY29uc3RydWN0b3I9PUFycmF5KXtmb3IodmFyIGw9MCxqPWsubGVuZ3RoO2w8ajtsKyspe2cucHVzaCh7bmFtZTptLHZhbHVlOmtbbF19KX19ZWxzZXtpZihrIT09bnVsbCYmdHlwZW9mIGshPSJ1bmRlZmluZWQiKXtnLnB1c2goe25hbWU6dGhpcy5uYW1lLHZhbHVlOmt9KX19fSk7cmV0dXJuIGYucGFyYW0oZyl9O2YuZm4uZmllbGRWYWx1ZT1mdW5jdGlvbihtKXtmb3IodmFyIGw9W10saj0wLGc9dGhpcy5sZW5ndGg7ajxnO2orKyl7dmFyIGs9dGhpc1tqXTt2YXIgaD1mLmZpZWxkVmFsdWUoayxtKTtpZihoPT09bnVsbHx8dHlwZW9mIGg9PSJ1bmRlZmluZWQifHwoaC5jb25zdHJ1Y3Rvcj09QXJyYXkmJiFoLmxlbmd0aCkpe2NvbnRpbnVlfWlmKGguY29uc3RydWN0b3I9PUFycmF5KXtmLm1lcmdlKGwsaCl9ZWxzZXtsLnB1c2goaCl9fXJldHVybiBsfTtmLmZpZWxkVmFsdWU9ZnVuY3Rpb24oZyxvKXt2YXIgaj1nLm5hbWUsdT1nLnR5cGUsdz1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihvPT09dW5kZWZpbmVkKXtvPXRydWV9aWYobyYmKCFqfHxnLmRpc2FibGVkfHx1PT0icmVzZXQifHx1PT0iYnV0dG9uInx8KHU9PSJjaGVja2JveCJ8fHU9PSJyYWRpbyIpJiYhZy5jaGVja2VkfHwodT09InN1Ym1pdCJ8fHU9PSJpbWFnZSIpJiZnLmZvcm0mJmcuZm9ybS5jbGshPWd8fHc9PSJzZWxlY3QiJiZnLnNlbGVjdGVkSW5kZXg9PS0xKSl7cmV0dXJuIG51bGx9aWYodz09InNlbGVjdCIpe3ZhciBwPWcuc2VsZWN0ZWRJbmRleDtpZihwPDApe3JldHVybiBudWxsfXZhciByPVtdLGg9Zy5vcHRpb25zO3ZhciBsPSh1PT0ic2VsZWN0LW9uZSIpO3ZhciBxPShsP3ArMTpoLmxlbmd0aCk7Zm9yKHZhciBrPShsP3A6MCk7azxxO2srKyl7dmFyIG09aFtrXTtpZihtLnNlbGVjdGVkKXt2YXIgcz1tLnZhbHVlO2lmKCFzKXtzPShtLmF0dHJpYnV0ZXMmJm0uYXR0cmlidXRlcy52YWx1ZSYmIShtLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkKSk/bS50ZXh0Om0udmFsdWV9aWYobCl7cmV0dXJuIHN9ci5wdXNoKHMpfX1yZXR1cm4gcn1yZXR1cm4gZihnKS52YWwoKX07Zi5mbi5jbGVhckZvcm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YoImlucHV0LHNlbGVjdCx0ZXh0YXJlYSIsdGhpcykuY2xlYXJGaWVsZHMoZyl9KX07Zi5mbi5jbGVhckZpZWxkcz1mLmZuLmNsZWFySW5wdXRzPWZ1bmN0aW9uKGcpe3ZhciBoPS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaj10aGlzLnR5cGUsaT10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihoLnRlc3Qoail8fGk9PSJ0ZXh0YXJlYSIpe3RoaXMudmFsdWU9IiJ9ZWxzZXtpZihqPT0iY2hlY2tib3gifHxqPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9ZmFsc2V9ZWxzZXtpZihpPT0ic2VsZWN0Iil7dGhpcy5zZWxlY3RlZEluZGV4PS0xfWVsc2V7aWYoaj09ImZpbGUiKXtpZigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7Zih0aGlzKS5yZXBsYWNlV2l0aChmKHRoaXMpLmNsb25lKHRydWUpKX1lbHNle2YodGhpcykudmFsKCIiKX19ZWxzZXtpZihnKXtpZigoZz09PXRydWUmJi9oaWRkZW4vLnRlc3QoaikpfHwodHlwZW9mIGc9PSJzdHJpbmciJiZmKHRoaXMpLmlzKGcpKSl7dGhpcy52YWx1ZT0iIn19fX19fX0pfTtmLmZuLnJlc2V0Rm9ybT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5yZXNldD09ImZ1bmN0aW9uInx8KHR5cGVvZiB0aGlzLnJlc2V0PT0ib2JqZWN0IiYmIXRoaXMucmVzZXQubm9kZVR5cGUpKXt0aGlzLnJlc2V0KCl9fSl9O2YuZm4uZW5hYmxlPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hZ30pfTtmLmZuLnNlbGVjdGVkPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9dGhpcy50eXBlO2lmKGg9PSJjaGVja2JveCJ8fGg9PSJyYWRpbyIpe3RoaXMuY2hlY2tlZD1nfWVsc2V7aWYodGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJvcHRpb24iKXt2YXIgaT1mKHRoaXMpLnBhcmVudCgic2VsZWN0Iik7aWYoZyYmaVswXSYmaVswXS50eXBlPT0ic2VsZWN0LW9uZSIpe2kuZmluZCgib3B0aW9uIikuc2VsZWN0ZWQoZmFsc2UpfXRoaXMuc2VsZWN0ZWQ9Z319fSl9O2YuZm4uYWpheFN1Ym1pdC5kZWJ1Zz1mYWxzZTtmdW5jdGlvbiBkKCl7aWYoIWYuZm4uYWpheFN1Ym1pdC5kZWJ1Zyl7cmV0dXJufXZhciBnPSJbanF1ZXJ5LmZvcm1dICIrQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsIiIpO2lmKHdpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cpe3dpbmRvdy5jb25zb2xlLmxvZyhnKX1lbHNle2lmKHdpbmRvdy5vcGVyYSYmd2luZG93Lm9wZXJhLnBvc3RFcnJvcil7d2luZG93Lm9wZXJhLnBvc3RFcnJvcihnKX19fX0pKTtQSwcIdhAQAaM+AACjPgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAc3RhdGljXGxpYlxtYXJrZWQubWluLmpzIWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz17fSx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLnJ1bGVzPWEubm9ybWFsLHRoaXMub3B0aW9ucy5nZm0mJih0aGlzLnJ1bGVzPXRoaXMub3B0aW9ucy50YWJsZXM/YS50YWJsZXM6YS5nZm0pfWZ1bmN0aW9uIHQoZSx0KXtpZih0aGlzLm9wdGlvbnM9dHx8aC5kZWZhdWx0cyx0aGlzLmxpbmtzPWUsdGhpcy5ydWxlcz11Lm5vcm1hbCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sIXRoaXMubGlua3MpdGhyb3cgbmV3IEVycm9yKCJUb2tlbnMgYXJyYXkgcmVxdWlyZXMgYSBgbGlua3NgIHByb3BlcnR5LiIpO3RoaXMub3B0aW9ucy5nZm0/dGhpcy5ydWxlcz10aGlzLm9wdGlvbnMuYnJlYWtzP3UuYnJlYWtzOnUuZ2ZtOnRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHRoaXMucnVsZXM9dS5wZWRhbnRpYyl9ZnVuY3Rpb24gbigpe31mdW5jdGlvbiByKGUpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW49bnVsbCx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgbix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcn1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0Py8mL2c6LyYoPyEjP1x3KzspL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjMzk7Iil9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlPWUuc291cmNlLHQ9dHx8IiIsZnVuY3Rpb24gbihyLHMpe3JldHVybiByPyhzPXMuc291cmNlfHxzLHM9cy5yZXBsYWNlKC8oXnxbXlxbXSlcXi9nLCIkMSIpLGU9ZS5yZXBsYWNlKHIscyksbik6bmV3IFJlZ0V4cChlLHQpfX1mdW5jdGlvbiBsKCl7fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0LG4scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Q9YXJndW1lbnRzW3JdO2ZvcihuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfXJldHVybiBlfWZ1bmN0aW9uIGgodCxuLGkpe2lmKGl8fCJmdW5jdGlvbiI9PXR5cGVvZiBuKXtpfHwoaT1uLG49bnVsbCksbj1vKHt9LGguZGVmYXVsdHMsbnx8e30pO3ZhciBsLGEsdT1uLmhpZ2hsaWdodCxwPTA7dHJ5e2w9ZS5sZXgodCxuKX1jYXRjaChjKXtyZXR1cm4gaShjKX1hPWwubGVuZ3RoO3ZhciBnPWZ1bmN0aW9uKCl7dmFyIGUsdDt0cnl7ZT1yLnBhcnNlKGwsbil9Y2F0Y2gocyl7dD1zfXJldHVybiBuLmhpZ2hsaWdodD11LHQ/aSh0KTppKG51bGwsZSl9O2lmKCF1fHx1Lmxlbmd0aDwzKXJldHVybiBnKCk7aWYoZGVsZXRlIG4uaGlnaGxpZ2h0LCFhKXJldHVybiBnKCk7Zm9yKDtwPGwubGVuZ3RoO3ArKykhZnVuY3Rpb24oZSl7cmV0dXJuImNvZGUiIT09ZS50eXBlPy0tYXx8ZygpOnUoZS50ZXh0LGUubGFuZyxmdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1ufHxuPT09ZS50ZXh0Py0tYXx8ZygpOihlLnRleHQ9bixlLmVzY2FwZWQ9ITAsLS1hfHxnKCksdm9pZCAwKX0pfShsW3BdKX1lbHNlIHRyeXtyZXR1cm4gbiYmKG49byh7fSxoLmRlZmF1bHRzLG4pKSxyLnBhcnNlKGUubGV4KHQsbiksbil9Y2F0Y2goYyl7aWYoYy5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL2NoamovbWFya2VkLiIsKG58fGguZGVmYXVsdHMpLnNpbGVudClyZXR1cm4iPHA+QW4gZXJyb3Igb2NjdXJlZDo8L3A+PHByZT4iK3MoYy5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+Ijt0aHJvdyBjfX12YXIgYT17bmV3bGluZTovXlxuKy8sY29kZTovXiggezR9W15cbl0rXG4qKSsvLGZlbmNlczpsLGhyOi9eKCAqWy0qX10pezMsfSAqKD86XG4rfCQpLyxoZWFkaW5nOi9eICooI3sxLDZ9KSAqKFteXG5dKz8pICojKiAqKD86XG4rfCQpLyxucHRhYmxlOmwsbGhlYWRpbmc6L14oW15cbl0rKVxuICooPXwtKXsyLH0gKig/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggKj5bXlxuXSsoXG5bXlxuXSspKlxuKikrLyxsaXN0Oi9eKCAqKShidWxsKSBbXHNcU10rPyg/OmhyfFxuezIsfSg/ISApKD8hXDFidWxsIClcbip8XHMqJCkvLGh0bWw6L14gKig/OmNvbW1lbnR8Y2xvc2VkfGNsb3NpbmcpICooPzpcbnsyLH18XHMqJCkvLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArWyIoXShbXlxuXSspWyIpXSk/ICooPzpcbit8JCkvLHRhYmxlOmwscGFyYWdyYXBoOi9eKCg/OlteXG5dK1xuPyg/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXx0YWd8ZGVmKSkrKVxuKi8sdGV4dDovXlteXG5dKy99O2EuYnVsbGV0PS8oPzpbKistXXxcZCtcLikvLGEuaXRlbT0vXiggKikoYnVsbCkgW15cbl0qKD86XG4oPyFcMWJ1bGwgKVteXG5dKikqLyxhLml0ZW09aShhLml0ZW0sImdtIikoL2J1bGwvZyxhLmJ1bGxldCkoKSxhLmxpc3Q9aShhLmxpc3QpKC9idWxsL2csYS5idWxsZXQpKCJociIsL1xuKyg/PSg/OiAqWy0qX10pezMsfSAqKD86XG4rfCQpKS8pKCksYS5fdGFnPSIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITovfEApXFxiIixhLmh0bWw9aShhLmh0bWwpKCJjb21tZW50IiwvPCEtLVtcc1xTXSo/LS0+LykoImNsb3NlZCIsLzwodGFnKVtcc1xTXSs/PFwvXDE+LykoImNsb3NpbmciLC88dGFnKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vKSgvdGFnL2csYS5fdGFnKSgpLGEucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCJociIsYS5ocikoImhlYWRpbmciLGEuaGVhZGluZykoImxoZWFkaW5nIixhLmxoZWFkaW5nKSgiYmxvY2txdW90ZSIsYS5ibG9ja3F1b3RlKSgidGFnIiwiPCIrYS5fdGFnKSgiZGVmIixhLmRlZikoKSxhLm5vcm1hbD1vKHt9LGEpLGEuZ2ZtPW8oe30sYS5ub3JtYWwse2ZlbmNlczovXiAqKGB7Myx9fH57Myx9KSAqKFxTKyk/ICpcbihbXHNcU10rPylccypcMSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6L14vfSksYS5nZm0ucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCIoPyEiLCIoPyEiK2EuZ2ZtLmZlbmNlcy5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwyIikrInwiK2EubGlzdC5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwzIikrInwiKSgpLGEudGFibGVzPW8oe30sYS5nZm0se25wdGFibGU6L14gKihcUy4qXHwuKilcbiAqKFstOl0rICpcfFstfCA6XSopXG4oKD86LipcfC4qKD86XG58JCkpKilcbiovLHRhYmxlOi9eICpcfCguKylcbiAqXHwoICpbLTpdK1stfCA6XSopXG4oKD86ICpcfC4qKD86XG58JCkpKilcbiovfSksZS5ydWxlcz1hLGUubGV4PWZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IGUobik7cmV0dXJuIHIubGV4KHQpfSxlLnByb3RvdHlwZS5sZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9cclxufFxyL2csIlxuIikucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL1x1MDBhMC9nLCIgIikucmVwbGFjZSgvXHUyNDI0L2csIlxuIiksdGhpcy50b2tlbihlLCEwKX0sZS5wcm90b3R5cGUudG9rZW49ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixzLGksbCxvLGgsdSxwLGU9ZS5yZXBsYWNlKC9eICskL2dtLCIiKTtlOylpZigocz10aGlzLnJ1bGVzLm5ld2xpbmUuZXhlYyhlKSkmJihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzWzBdLmxlbmd0aD4xJiZ0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJzcGFjZSJ9KSkscz10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzPXNbMF0ucmVwbGFjZSgvXiB7NH0vZ20sIiIpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3M6cy5yZXBsYWNlKC9cbiskLywiIil9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIixsYW5nOnNbMl0sdGV4dDpzWzNdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaGVhZGluZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmciLGRlcHRoOnNbMV0ubGVuZ3RoLHRleHQ6c1syXX0pO2Vsc2UgaWYodCYmKHM9dGhpcy5ydWxlcy5ucHRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC9cbiQvLCIiKS5zcGxpdCgiXG4iKX0sdT0wO3U8by5hbGlnbi5sZW5ndGg7dSsrKW8uYWxpZ25bdV09L14gKi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3Qoby5hbGlnblt1XSk/ImxlZnQiOm51bGw7Zm9yKHU9MDt1PG8uY2VsbHMubGVuZ3RoO3UrKylvLmNlbGxzW3VdPW8uY2VsbHNbdV0uc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZihzPXRoaXMucnVsZXMubGhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDoiPSI9PT1zWzJdPzE6Mix0ZXh0OnNbMV19KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5oci5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhyIn0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmJsb2NrcXVvdGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX3N0YXJ0In0pLHM9c1swXS5yZXBsYWNlKC9eICo+ID8vZ20sIiIpLHRoaXMudG9rZW4ocyx0KSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX2VuZCJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5saXN0LmV4ZWMoZSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxpPXNbMl0sdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9zdGFydCIsb3JkZXJlZDppLmxlbmd0aD4xfSkscz1zWzBdLm1hdGNoKHRoaXMucnVsZXMuaXRlbSksbj0hMSxwPXMubGVuZ3RoLHU9MDtwPnU7dSsrKW89c1t1XSxoPW8ubGVuZ3RoLG89by5yZXBsYWNlKC9eICooWyorLV18XGQrXC4pICsvLCIiKSx+by5pbmRleE9mKCJcbiAiKSYmKGgtPW8ubGVuZ3RoLG89dGhpcy5vcHRpb25zLnBlZGFudGljP28ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik6by5yZXBsYWNlKG5ldyBSZWdFeHAoIl4gezEsIitoKyJ9IiwiZ20iKSwiIikpLHRoaXMub3B0aW9ucy5zbWFydExpc3RzJiZ1IT09cC0xJiYobD1hLmJ1bGxldC5leGVjKHNbdSsxXSlbMF0saT09PWx8fGkubGVuZ3RoPjEmJmwubGVuZ3RoPjF8fChlPXMuc2xpY2UodSsxKS5qb2luKCJcbiIpK2UsdT1wLTEpKSxyPW58fC9cblxuKD8hXHMqJCkvLnRlc3QobyksdSE9PXAtMSYmKG49IlxuIj09PW8uY2hhckF0KG8ubGVuZ3RoLTEpLHJ8fChyPW4pKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnI/Imxvb3NlX2l0ZW1fc3RhcnQiOiJsaXN0X2l0ZW1fc3RhcnQifSksdGhpcy50b2tlbihvLCExKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW1fZW5kIn0pO3RoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3RfZW5kIn0pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmh0bWwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8icGFyYWdyYXBoIjoiaHRtbCIscHJlOiJwcmUiPT09c1sxXXx8InNjcmlwdCI9PT1zWzFdfHwic3R5bGUiPT09c1sxXSx0ZXh0OnNbMF19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMuZGVmLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLmxpbmtzW3NbMV0udG9Mb3dlckNhc2UoKV09e2hyZWY6c1syXSx0aXRsZTpzWzNdfTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMudGFibGUuZXhlYyhlKSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxvPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOnNbMV0ucmVwbGFjZSgvXiAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGFsaWduOnNbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxjZWxsczpzWzNdLnJlcGxhY2UoLyg/OiAqXHwgKik/XG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnJlcGxhY2UoL14gKlx8ICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyk7dGhpcy50b2tlbnMucHVzaChvKX1lbHNlIGlmKHQmJihzPXRoaXMucnVsZXMucGFyYWdyYXBoLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InBhcmFncmFwaCIsdGV4dDoiXG4iPT09c1sxXS5jaGFyQXQoc1sxXS5sZW5ndGgtMSk/c1sxXS5zbGljZSgwLC0xKTpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMudGV4dC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InRleHQiLHRleHQ6c1swXX0pO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiB0aGlzLnRva2Vuc307dmFyIHU9e2VzY2FwZTovXlxcKFtcXGAqe31cW1xdKCkjK1wtLiFfPl0pLyxhdXRvbGluazovXjwoW14gPl0rKEB8OlwvKVteID5dKyk+Lyx1cmw6bCx0YWc6L148IS0tW1xzXFNdKj8tLT58XjxcLz9cdysoPzoiW14iXSoifCdbXiddKid8W14nIj5dKSo/Pi8sbGluazovXiE/XFsoaW5zaWRlKVxdXChocmVmXCkvLHJlZmxpbms6L14hP1xbKGluc2lkZSlcXVxzKlxbKFteXF1dKilcXS8sbm9saW5rOi9eIT9cWygoPzpcW1teXF1dKlxdfFteXFtcXV0pKilcXS8sc3Ryb25nOi9eX18oW1xzXFNdKz8pX18oPyFfKXxeXCpcKihbXHNcU10rPylcKlwqKD8hXCopLyxlbTovXlxiXygoPzpfX3xbXHNcU10pKz8pX1xifF5cKigoPzpcKlwqfFtcc1xTXSkrPylcKig/IVwqKS8sY29kZTovXihgKylccyooW1xzXFNdKj9bXmBdKVxzKlwxKD8hYCkvLGJyOi9eIHsyLH1cbig/IVxzKiQpLyxkZWw6bCx0ZXh0Oi9eW1xzXFNdKz8oPz1bXFw8IVxbXypgXXwgezIsfVxufCQpL307dS5faW5zaWRlPS8oPzpcW1teXF1dKlxdfFteXFtcXV18XF0oPz1bXlxbXSpcXSkpKi8sdS5faHJlZj0vXHMqPD8oW1xzXFNdKj8pPj8oPzpccytbJyJdKFtcc1xTXSo/KVsnIl0pP1xzKi8sdS5saW5rPWkodS5saW5rKSgiaW5zaWRlIix1Ll9pbnNpZGUpKCJocmVmIix1Ll9ocmVmKSgpLHUucmVmbGluaz1pKHUucmVmbGluaykoImluc2lkZSIsdS5faW5zaWRlKSgpLHUubm9ybWFsPW8oe30sdSksdS5wZWRhbnRpYz1vKHt9LHUubm9ybWFsLHtzdHJvbmc6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbTovXl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXyl8XlwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKikvfSksdS5nZm09byh7fSx1Lm5vcm1hbCx7ZXNjYXBlOmkodS5lc2NhcGUpKCJdKSIsIn58XSkiKSgpLHVybDovXihodHRwcz86XC9cL1teXHM8XStbXjwuLDo7IicpXF1cc10pLyxkZWw6L15+fig/PVxTKShbXHNcU10qP1xTKX5+Lyx0ZXh0OmkodS50ZXh0KSgiXXwiLCJ+XXwiKSgifCIsInxodHRwcz86Ly98IikoKX0pLHUuYnJlYWtzPW8oe30sdS5nZm0se2JyOmkodS5icikoInsyLH0iLCIqIikoKSx0ZXh0OmkodS5nZm0udGV4dCkoInsyLH0iLCIqIikoKX0pLHQucnVsZXM9dSx0Lm91dHB1dD1mdW5jdGlvbihlLG4scil7dmFyIHM9bmV3IHQobixyKTtyZXR1cm4gcy5vdXRwdXQoZSl9LHQucHJvdG90eXBlLm91dHB1dD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGksbD0iIjtlOylpZihpPXRoaXMucnVsZXMuZXNjYXBlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9aVsxXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5hdXRvbGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLCJAIj09PWlbMl0/KG49IjoiPT09aVsxXS5jaGFyQXQoNik/dGhpcy5tYW5nbGUoaVsxXS5zdWJzdHJpbmcoNykpOnRoaXMubWFuZ2xlKGlbMV0pLHI9dGhpcy5tYW5nbGUoIm1haWx0bzoiKStuKToobj1zKGlbMV0pLHI9biksbCs9dGhpcy5yZW5kZXJlci5saW5rKHIsbnVsbCxuKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy51cmwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxuPXMoaVsxXSkscj1uLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudGFnLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vcHRpb25zLnNhbml0aXplP3MoaVswXSk6aVswXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5saW5rLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vdXRwdXRMaW5rKGkse2hyZWY6aVsyXSx0aXRsZTppWzNdfSk7ZWxzZSBpZigoaT10aGlzLnJ1bGVzLnJlZmxpbmsuZXhlYyhlKSl8fChpPXRoaXMucnVsZXMubm9saW5rLmV4ZWMoZSkpKXtpZihlPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx0PShpWzJdfHxpWzFdKS5yZXBsYWNlKC9ccysvZywiICIpLHQ9dGhpcy5saW5rc1t0LnRvTG93ZXJDYXNlKCldLCF0fHwhdC5ocmVmKXtsKz1pWzBdLmNoYXJBdCgwKSxlPWlbMF0uc3Vic3RyaW5nKDEpK2U7Y29udGludWV9bCs9dGhpcy5vdXRwdXRMaW5rKGksdCl9ZWxzZSBpZihpPXRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5zdHJvbmcodGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmVtLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5lbSh0aGlzLm91dHB1dChpWzJdfHxpWzFdKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuY29kZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuY29kZXNwYW4ocyhpWzJdLCEwKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuYnIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmJyKCk7ZWxzZSBpZihpPXRoaXMucnVsZXMuZGVsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoaVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz1zKHRoaXMuc21hcnR5cGFudHMoaVswXSkpO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiBsfSx0LnByb3RvdHlwZS5vdXRwdXRMaW5rPWZ1bmN0aW9uKGUsdCl7dmFyIG49cyh0LmhyZWYpLHI9dC50aXRsZT9zKHQudGl0bGUpOm51bGw7cmV0dXJuIiEiIT09ZVswXS5jaGFyQXQoMCk/dGhpcy5yZW5kZXJlci5saW5rKG4scix0aGlzLm91dHB1dChlWzFdKSk6dGhpcy5yZW5kZXJlci5pbWFnZShuLHIscyhlWzFdKSl9LHQucHJvdG90eXBlLnNtYXJ0eXBhbnRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/ZS5yZXBsYWNlKC8tLS9nLCLigJQiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQx4oCYIikucmVwbGFjZSgvJy9nLCLigJkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDHigJwiKS5yZXBsYWNlKC8iL2csIuKAnSIpLnJlcGxhY2UoL1wuezN9L2csIuKApiIpOmV9LHQucHJvdG90eXBlLm1hbmdsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixyPWUubGVuZ3RoLHM9MDtyPnM7cysrKXQ9ZS5jaGFyQ29kZUF0KHMpLE1hdGgucmFuZG9tKCk+LjUmJih0PSJ4Iit0LnRvU3RyaW5nKDE2KSksbis9IiYjIit0KyI7IjtyZXR1cm4gbn0sbi5wcm90b3R5cGUuY29kZT1mdW5jdGlvbihlLHQsbixyKXtpZihyPXJ8fHt9LHIuaGlnaGxpZ2h0KXt2YXIgaT1yLmhpZ2hsaWdodChlLHQpO251bGwhPWkmJmkhPT1lJiYobj0hMCxlPWkpfXJldHVybiB0Pyc8cHJlPjxjb2RlIGNsYXNzPSInK3IubGFuZ1ByZWZpeCt0KyciPicrKG4/ZTpzKGUpKSsiXG48L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKG4/ZTpzKGUsITApKSsiXG48L2NvZGU+PC9wcmU+In0sbi5wcm90b3R5cGUuYmxvY2txdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4iPGJsb2NrcXVvdGU+XG4iK2UrIjwvYmxvY2txdW90ZT5cbiJ9LG4ucHJvdG90eXBlLmh0bWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG4ucHJvdG90eXBlLmhlYWRpbmc9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIjxoIit0KycgaWQ9Iicrci5oZWFkZXJQcmVmaXgrbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teXHddKy9nLCItIikrJyI+JytlKyI8L2giK3QrIj5cbiJ9LG4ucHJvdG90eXBlLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIjxocj5cbiJ9LG4ucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj10PyJvbCI6InVsIjtyZXR1cm4iPCIrbisiPlxuIitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUubGlzdGl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxsaT4iK2UrIjwvbGk+XG4ifSxuLnByb3RvdHlwZS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7cmV0dXJuIjxwPiIrZSsiPC9wPlxuIn0sbi5wcm90b3R5cGUudGFibGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHRhYmxlPlxuPHRoZWFkPlxuIitlKyI8L3RoZWFkPlxuIisiPHRib2R5PlxuIit0KyI8L3Rib2R5PlxuIisiPC90YWJsZT5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlcm93PWZ1bmN0aW9uKGUpe3JldHVybiI8dHI+XG4iK2UrIjwvdHI+XG4ifSxuLnByb3RvdHlwZS50YWJsZWNlbGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmhlYWRlcj8idGgiOiJ0ZCIscj10LmFsaWduPyI8IituKycgc3R5bGU9InRleHQtYWxpZ246Jyt0LmFsaWduKyciPic6IjwiK24rIj4iO3JldHVybiByK2UrIjwvIituKyI+XG4ifSxuLnByb3RvdHlwZS5zdHJvbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIjxzdHJvbmc+IitlKyI8L3N0cm9uZz4ifSxuLnByb3RvdHlwZS5lbT1mdW5jdGlvbihlKXtyZXR1cm4iPGVtPiIrZSsiPC9lbT4ifSxuLnByb3RvdHlwZS5jb2Rlc3Bhbj1mdW5jdGlvbihlKXtyZXR1cm4iPGNvZGU+IitlKyI8L2NvZGU+In0sbi5wcm90b3R5cGUuYnI9ZnVuY3Rpb24oKXtyZXR1cm4iPGJyPiJ9LG4ucHJvdG90eXBlLmRlbD1mdW5jdGlvbihlKXtyZXR1cm4iPGRlbD4iK2UrIjwvZGVsPiJ9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8YSBocmVmPSInK2UrJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4iK24rIjwvYT4ifSxuLnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9JzxpbWcgc3JjPSInK2UrJyIgYWx0PSInK24rJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4ifSxyLnBhcnNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1uZXcgcih0LG4pO3JldHVybiBzLnBhcnNlKGUpfSxyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlKXt0aGlzLmlubGluZT1uZXcgdChlLmxpbmtzLHRoaXMub3B0aW9ucyx0aGlzLnJlbmRlcmVyKSx0aGlzLnRva2Vucz1lLnJldmVyc2UoKTtmb3IodmFyIG49IiI7dGhpcy5uZXh0KCk7KW4rPXRoaXMudG9rKCk7cmV0dXJuIG59LHIucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbj10aGlzLnRva2Vucy5wb3AoKX0sci5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGgtMV18fDB9LHIucHJvdG90eXBlLnBhcnNlVGV4dD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnRva2VuLnRleHQ7InRleHQiPT09dGhpcy5wZWVrKCkudHlwZTspZSs9IlxuIit0aGlzLm5leHQoKS50ZXh0O3JldHVybiB0aGlzLmlubGluZS5vdXRwdXQoZSl9LHIucHJvdG90eXBlLnRvaz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLnRva2VuLnR5cGUpe2Nhc2Uic3BhY2UiOnJldHVybiIiO2Nhc2UiaHIiOnJldHVybiB0aGlzLnJlbmRlcmVyLmhyKCk7Y2FzZSJoZWFkaW5nIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpLHRoaXMudG9rZW4uZGVwdGgsdGhpcy50b2tlbi50ZXh0LHRoaXMub3B0aW9ucyk7Y2FzZSJjb2RlIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5jb2RlKHRoaXMudG9rZW4udGV4dCx0aGlzLnRva2VuLmxhbmcsdGhpcy50b2tlbi5lc2NhcGVkLHRoaXMub3B0aW9ucyk7Y2FzZSJ0YWJsZSI6dmFyIGUsdCxuLHIscyxpPSIiLGw9IiI7Zm9yKG49IiIsZT0wO2U8dGhpcy50b2tlbi5oZWFkZXIubGVuZ3RoO2UrKylyPXtoZWFkZXI6ITAsYWxpZ246dGhpcy50b2tlbi5hbGlnbltlXX0sbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4uaGVhZGVyW2VdKSx7aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19KTtmb3IoaSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhuKSxlPTA7ZTx0aGlzLnRva2VuLmNlbGxzLmxlbmd0aDtlKyspe2Zvcih0PXRoaXMudG9rZW4uY2VsbHNbZV0sbj0iIixzPTA7czx0Lmxlbmd0aDtzKyspbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRbc10pLHtoZWFkZXI6ITEsYWxpZ246dGhpcy50b2tlbi5hbGlnbltzXX0pO2wrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobil9cmV0dXJuIHRoaXMucmVuZGVyZXIudGFibGUoaSxsKTtjYXNlImJsb2NrcXVvdGVfc3RhcnQiOmZvcih2YXIgbD0iIjsiYmxvY2txdW90ZV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGwpO2Nhc2UibGlzdF9zdGFydCI6Zm9yKHZhciBsPSIiLG89dGhpcy50b2tlbi5vcmRlcmVkOyJsaXN0X2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3QobCxvKTtjYXNlImxpc3RfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPSJ0ZXh0Ij09PXRoaXMudG9rZW4udHlwZT90aGlzLnBhcnNlVGV4dCgpOnRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJsb29zZV9pdGVtX3N0YXJ0Ijpmb3IodmFyIGw9IiI7Imxpc3RfaXRlbV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0aXRlbShsKTtjYXNlImh0bWwiOnZhciBoPXRoaXMudG9rZW4ucHJlfHx0aGlzLm9wdGlvbnMucGVkYW50aWM/dGhpcy50b2tlbi50ZXh0OnRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpO3JldHVybiB0aGlzLnJlbmRlcmVyLmh0bWwoaCk7Y2FzZSJwYXJhZ3JhcGgiOnJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZVRleHQoKSl9fSxsLmV4ZWM9bCxoLm9wdGlvbnM9aC5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBvKGguZGVmYXVsdHMsZSksaH0saC5kZWZhdWx0cz17Z2ZtOiEwLHRhYmxlczohMCxicmVha3M6ITEscGVkYW50aWM6ITEsc2FuaXRpemU6ITEsc21hcnRMaXN0czohMSxzaWxlbnQ6ITEsaGlnaGxpZ2h0Om51bGwsbGFuZ1ByZWZpeDoibGFuZy0iLHNtYXJ0eXBhbnRzOiExLGhlYWRlclByZWZpeDoiIixyZW5kZXJlcjpuZXcgbn0saC5QYXJzZXI9cixoLnBhcnNlcj1yLnBhcnNlLGguUmVuZGVyZXI9bixoLkxleGVyPWUsaC5sZXhlcj1lLmxleCxoLklubGluZUxleGVyPXQsaC5pbmxpbmVMZXhlcj10Lm91dHB1dCxoLnBhcnNlPWgsIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWg6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZnVuY3Rpb24oKXtyZXR1cm4gaH0pOnRoaXMubWFya2VkPWh9LmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpnbG9iYWwpfSgpKTtQSwcIQvpMalM5AABTOQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAc3RhdGljXGxpYlx2YWxpZGF0ZS5taW4uanMvKgogKiB2YWxpZGF0ZS5qcyAxLjMKICogQ29weXJpZ2h0IChjKSAyMDEzIFJpY2sgSGFycmlzb24sIGh0dHA6Ly9yaWNraGFycmlzb24ubWUKICogdmFsaWRhdGUuanMgaXMgb3BlbiBzb3VyY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KICogUG9ydGlvbnMgb2YgdmFsaWRhdGUuanMgYXJlIGluc3BpcmVkIGJ5IENvZGVJZ25pdGVyLgogKiBodHRwOi8vcmlja2hhcnJpc29uLmdpdGh1Yi5jb20vdmFsaWRhdGUuanMKICovCgooZnVuY3Rpb24ocSxyLG0pe3ZhciBzPXtyZXF1aXJlZDoiVGhlICVzIGZpZWxkIGlzIHJlcXVpcmVkLiIsbWF0Y2hlczoiVGhlICVzIGZpZWxkIGRvZXMgbm90IG1hdGNoIHRoZSAlcyBmaWVsZC4iLCJkZWZhdWx0IjoiVGhlICVzIGZpZWxkIGlzIHN0aWxsIHNldCB0byBkZWZhdWx0LCBwbGVhc2UgY2hhbmdlLiIsdmFsaWRfZW1haWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiIsdmFsaWRfZW1haWxzOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFsbCB2YWxpZCBlbWFpbCBhZGRyZXNzZXMuIixtaW5fbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBhdCBsZWFzdCAlcyBjaGFyYWN0ZXJzIGluIGxlbmd0aC4iLG1heF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IG5vdCBleGNlZWQgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixleGFjdF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IGJlIGV4YWN0bHkgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixncmVhdGVyX3RoYW46IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBudW1iZXIgZ3JlYXRlciB0aGFuICVzLiIsbGVzc190aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGxlc3MgdGhhbiAlcy4iLGFscGhhOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMuIixhbHBoYV9udW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzLiIsYWxwaGFfZGFzaDoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycywgdW5kZXJzY29yZXMsIGFuZCBkYXNoZXMuIixudW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgbnVtYmVycy4iLGludGVnZXI6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYW4gaW50ZWdlci4iLGRlY2ltYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBkZWNpbWFsIG51bWJlci4iLGlzX25hdHVyYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSBwb3NpdGl2ZSBudW1iZXJzLiIsaXNfbmF0dXJhbF9ub196ZXJvOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvLiIsdmFsaWRfaXA6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBJUC4iLHZhbGlkX2Jhc2U2NDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIGJhc2U2NCBzdHJpbmcuIix2YWxpZF9jcmVkaXRfY2FyZDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci4iLGlzX2ZpbGVfdHlwZToiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5ICVzIGZpbGVzLiIsdmFsaWRfdXJsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgVVJMLiJ9LHQ9ZnVuY3Rpb24oYSl7fSx1PS9eKC4rPylcWyguKylcXSQvLGg9L15bMC05XSskLyx2PS9eXC0/WzAtOV0rJC8saz0vXlwtP1swLTldKlwuP1swLTldKyQvLHA9L15bYS16QS1aMC05LiEjJCUmYW1wOycqK1wtXC89P1xeX2B7fH1+XC1dK0BbYS16QS1aMC05XC1dKyg/OlwuW2EtekEtWjAtOVwtXSspKiQvLHc9L15bYS16XSskL2kseD0vXlthLXowLTldKyQvaSx5PS9eW2EtejAtOV9cLV0rJC9pLHo9L15bMC05XSskL2ksQT0vXlsxLTldWzAtOV0qJC9pLEI9L14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pJC9pLEM9L1teYS16QS1aMC05XC9cKz1dL2ksRD0vXltcZFwtXHNdKyQvLEU9L14oKGh0dHB8aHR0cHMpOlwvXC8oXHcrOnswLDF9XHcqQCk/KFxTKyl8KSg6WzAtOV0rKT8oXC98XC8oW1x3IyE6Lj8rPSYlQCFcLVwvXSkpPyQvLGU9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY2FsbGJhY2s9Y3x8dDt0aGlzLmVycm9ycz1bXTt0aGlzLmZpZWxkcz17fTt0aGlzLmZvcm09dGhpcy5fZm9ybUJ5TmFtZU9yTm9kZShhKXx8e307dGhpcy5tZXNzYWdlcz17fTt0aGlzLmhhbmRsZXJzPXt9O2E9MDtmb3IoYz1iLmxlbmd0aDthPGM7YSsrKXt2YXIgZD1iW2FdO2lmKChkLm5hbWV8fGQubmFtZXMpJiZkLnJ1bGVzKWlmKGQubmFtZXMpZm9yKHZhciBsPTA7bDxkLm5hbWVzLmxlbmd0aDtsKyspdGhpcy5fYWRkRmllbGQoZCxkLm5hbWVzW2xdKTtlbHNlIHRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lKX12YXIgZz10aGlzLmZvcm0ub25zdWJtaXQ7dGhpcy5mb3JtLm9uc3VibWl0PWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXt0cnl7cmV0dXJuIGEuX3ZhbGlkYXRlRm9ybShiKSYmKGc9PT1tfHxnKCkpfWNhdGNoKGMpe319fSh0aGlzKX0sbj1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKDA8YS5sZW5ndGgmJigicmFkaW8iPT09YVswXS50eXBlfHwiY2hlY2tib3giPT09YVswXS50eXBlKSlmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXtpZihhW2NdLmNoZWNrZWQpcmV0dXJuIGFbY11bYl19ZWxzZSByZXR1cm4gYVtiXX07ZS5wcm90b3R5cGUuc2V0TWVzc2FnZT1mdW5jdGlvbihhLGIpe3RoaXMubWVzc2FnZXNbYV09YjtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUucmVnaXN0ZXJDYWxsYmFjaz1mdW5jdGlvbihhLGIpe2EmJigic3RyaW5nIj09PXR5cGVvZiBhJiZiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGIpJiYodGhpcy5oYW5kbGVyc1thXT1iKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuX2Zvcm1CeU5hbWVPck5vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgYT9hOnIuZm9ybXNbYV19O2UucHJvdG90eXBlLl9hZGRGaWVsZD1mdW5jdGlvbihhLGIpe3RoaXMuZmllbGRzW2JdPXtuYW1lOmIsZGlzcGxheTphLmRpc3BsYXl8fGIscnVsZXM6YS5ydWxlcyxpZDpudWxsLHR5cGU6bnVsbCx2YWx1ZTpudWxsLGNoZWNrZWQ6bnVsbH19O2UucHJvdG90eXBlLl92YWxpZGF0ZUZvcm09ZnVuY3Rpb24oYSl7dGhpcy5lcnJvcnM9W107Zm9yKHZhciBiIGluIHRoaXMuZmllbGRzKWlmKHRoaXMuZmllbGRzLmhhc093blByb3BlcnR5KGIpKXt2YXIgYz10aGlzLmZpZWxkc1tiXXx8e30sZD10aGlzLmZvcm1bYy5uYW1lXTtkJiZkIT09bSYmKGMuaWQ9bihkLCJpZCIpLGMudHlwZT0wPGQubGVuZ3RoP2RbMF0udHlwZTpkLnR5cGUsYy52YWx1ZT1uKGQsInZhbHVlIiksYy5jaGVja2VkPW4oZCwiY2hlY2tlZCIpLHRoaXMuX3ZhbGlkYXRlRmllbGQoYykpfSJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5jYWxsYmFjayYmdGhpcy5jYWxsYmFjayh0aGlzLmVycm9ycyxhKTswPHRoaXMuZXJyb3JzLmxlbmd0aCYmKGEmJmEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmV2ZW50JiYoZXZlbnQucmV0dXJuVmFsdWU9ITEpKTtyZXR1cm4hMH07ZS5wcm90b3R5cGUuX3ZhbGlkYXRlRmllbGQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEucnVsZXMuc3BsaXQoInwiKSxjPWEucnVsZXMuaW5kZXhPZigicmVxdWlyZWQiKSxkPSFhLnZhbHVlfHwiIj09PWEudmFsdWV8fGEudmFsdWU9PT1tLGw9MCxnPWIubGVuZ3RoO2w8ZztsKyspe3ZhciBmPWJbbF0sZT1udWxsLGg9ITEsaz11LmV4ZWMoZik7aWYoLTEhPT1jfHwtMSE9PWYuaW5kZXhPZigiIWNhbGxiYWNrXyIpfHwhZClpZihrJiYoZj1rWzFdLGU9a1syXSksIiEiPT09Zi5jaGFyQXQoMCkmJihmPWYuc3Vic3RyaW5nKDEsZi5sZW5ndGgpKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuX2hvb2tzW2ZdP3RoaXMuX2hvb2tzW2ZdLmFwcGx5KHRoaXMsW2EsZV0pfHwoaD0hMCk6ImNhbGxiYWNrXyI9PT1mLnN1YnN0cmluZygwLDkpJiYoZj1mLnN1YnN0cmluZyg5LGYubGVuZ3RoKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuaGFuZGxlcnNbZl0mJiExPT09dGhpcy5oYW5kbGVyc1tmXS5hcHBseSh0aGlzLFthLnZhbHVlLGVdKSYmKGg9ITApKSxoKXtiPXRoaXMubWVzc2FnZXNbZl18fHNbZl07Yz0iQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdpdGggdGhlICIrYS5kaXNwbGF5KyIgZmllbGQuIjtiJiYoYz1iLnJlcGxhY2UoIiVzIixhLmRpc3BsYXkpLGUmJihjPWMucmVwbGFjZSgiJXMiLHRoaXMuZmllbGRzW2VdP3RoaXMuZmllbGRzW2VdLmRpc3BsYXk6ZSkpKTt0aGlzLmVycm9ycy5wdXNoKHtpZDphLmlkLG5hbWU6YS5uYW1lLG1lc3NhZ2U6YyxydWxlOmZ9KTticmVha319fTtlLnByb3RvdHlwZS5faG9va3M9e3JlcXVpcmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWEudmFsdWU7cmV0dXJuImNoZWNrYm94Ij09PWEudHlwZXx8InJhZGlvIj09PWEudHlwZT8hMD09PWEuY2hlY2tlZDpudWxsIT09YiYmIiIhPT1ifSwiZGVmYXVsdCI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS52YWx1ZSE9PWJ9LG1hdGNoZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmZvcm1bYl07cmV0dXJuIGM/YS52YWx1ZT09PWMudmFsdWU6ITF9LHZhbGlkX2VtYWlsOmZ1bmN0aW9uKGEpe3JldHVybiBwLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2VtYWlsczpmdW5jdGlvbihhKXthPWEudmFsdWUuc3BsaXQoIiwiKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKylpZighcC50ZXN0KGFbYl0pKXJldHVybiExO3JldHVybiEwfSxtaW5fbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD49cGFyc2VJbnQoYiwxMCk6ITF9LG1heF9sZW5ndGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC50ZXN0KGIpP2EudmFsdWUubGVuZ3RoPD1wYXJzZUludChiLDEwKTohMX0sZXhhY3RfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD09PXBhcnNlSW50KGIsMTApOiExfSxncmVhdGVyX3RoYW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpP3BhcnNlRmxvYXQoYS52YWx1ZSk+cGFyc2VGbG9hdChiKTohMX0sbGVzc190aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPHBhcnNlRmxvYXQoYik6ITF9LGFscGhhOmZ1bmN0aW9uKGEpe3JldHVybiB3LnRlc3QoYS52YWx1ZSl9LGFscGhhX251bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIHgudGVzdChhLnZhbHVlKX0sYWxwaGFfZGFzaDpmdW5jdGlvbihhKXtyZXR1cm4geS50ZXN0KGEudmFsdWUpfSxudW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiBoLnRlc3QoYS52YWx1ZSl9LGludGVnZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHYudGVzdChhLnZhbHVlKX0sZGVjaW1hbDpmdW5jdGlvbihhKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsOmZ1bmN0aW9uKGEpe3JldHVybiB6LnRlc3QoYS52YWx1ZSl9LGlzX25hdHVyYWxfbm9femVybzpmdW5jdGlvbihhKXtyZXR1cm4gQS50ZXN0KGEudmFsdWUpfSx2YWxpZF9pcDpmdW5jdGlvbihhKXtyZXR1cm4gQi50ZXN0KGEudmFsdWUpfSx2YWxpZF9iYXNlNjQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEMudGVzdChhLnZhbHVlKX0sdmFsaWRfdXJsOmZ1bmN0aW9uKGEpe3JldHVybiBFLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2NyZWRpdF9jYXJkOmZ1bmN0aW9uKGEpe2lmKCFELnRlc3QoYS52YWx1ZSkpcmV0dXJuITE7dmFyIGI9MCxjPTAsZD0hMTthPWEudmFsdWUucmVwbGFjZSgvXEQvZywiIik7Zm9yKHZhciBlPWEubGVuZ3RoLTE7MDw9ZTtlLS0pYz1hLmNoYXJBdChlKSxjPXBhcnNlSW50KGMsMTApLGQmJjk8KGMqPTIpJiYoYy09OSksYis9YyxkPSFkO3JldHVybiAwPT09YiUxMH0saXNfZmlsZV90eXBlOmZ1bmN0aW9uKGEsYil7aWYoImZpbGUiIT09YS50eXBlKXJldHVybiEwO3ZhciBjPWEudmFsdWUuc3Vic3RyKGEudmFsdWUubGFzdEluZGV4T2YoIi4iKSsxKSxkPWIuc3BsaXQoIiwiKSxlPSExLGc9MCxmPWQubGVuZ3RoO2ZvcihnO2c8ZjtnKyspYz09ZFtnXSYmKGU9ITApO3JldHVybiBlfX07cS5Gb3JtVmFsaWRhdG9yPWV9KSh3aW5kb3csZG9jdW1lbnQpOwpQSwcIZowfxDMYAAAzGAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAdmlldy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAdmlld1xhZG1pbi9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxhcnRpY2xlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mt7vliqDmlofnq6A8L2E+DQogICAgPC9saT57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk5paH56ug5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9hcnRpY2xlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIlnRyEm4GAABuBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xhZG1pblxjbWQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcYWRtaW5cY21kXGJhY2t1cC5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciBjbGVhciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUgbGVmdCI+5aSH5Lu95pWw5o2uPC9oMT4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUgbGVmdCIgaWQ9ImJhY2t1cC1idG4iPuWkh+S7vTwvYnV0dG9uPg0KPC9oZWFkZXI+DQo8dWwgY2xhc3M9ImNtZC1saXN0IiBpZD0iYmFja3VwLWxpc3QiPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVUaW1lIC5Nb2RUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fSA8YSBjbGFzcz0ibGluayIgaHJlZj0iL2NtZC9iYWNrdXAvZmlsZT9maWxlPXt7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIiByZWw9Int7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZS1vIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNiYWNrdXAtYnRuJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICB0eXBlOiAicG9zdCIsDQogICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAkKCcuY21kLWxpc3QnKS5wcmVwZW5kKCc8bGkgY2xhc3M9ImJhY2t1cC1sb2FkaW5nIj7lpIfku73kuK0uLjwvbGk+Jyk7DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuaGlkZSgpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuYmFja3VwLWxvYWRpbmcnKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLXJlc3VsdCI+5Yia5Yia5aSH5Lu95YiwICcgKyBqc29uLmZpbGUgKyAnPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkKCcjYmFja3VwLWJ0bicpLnNob3coKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHVybDogIi9jbWQvYmFja3VwLz9maWxlPSIgKyAkKHRoaXMpLmF0dHIoInJlbCIpLA0KICAgICAgICAgICAgICAgIHR5cGU6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICQodGhhdCkucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCLeb5slHBwAARwcAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cY21kXGxvZy5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUiPumUmeivr+aXpeW/lzwvaDE+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJsb2ctbGlzdCI+e3tyYW5nZSAuTG9nc319DQogICAgPGxpIGNsYXNzPSJsb2cgcmVsYXRpdmUiPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSBpbmxpbmUtYmxvY2siPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxwcmUgY2xhc3M9InRleHQiPnt7LlRleHR9fTwvcHJlPg0KICAgICAgICA8YSBjbGFzcz0icmVtb3ZlIGFic29sdXRlIiBocmVmPSIvY21kL2xvZ3MvP2ZpbGU9e3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZW1vdmUnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi56Gu6K6k5Yig6Zmk6K6w5b2VIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgIHVybDokdGhpcy5hdHRyKCJocmVmIiksDQogICAgICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcI3rBgWBkEAAAZBAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAdmlld1xhZG1pblxjbWRcbWVzc2FnZS5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUiPua2iOaBr+iusOW9lTwvaDE+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJtZXNzYWdlLWxpc3QiPnt7cmFuZ2UgLk1lc3NhZ2VzfX0NCiAgICA8bGkgY2xhc3M9Im1lc3NhZ2UgcmVsYXRpdmUiPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhIj57e0h0bWwgLkRhdGF9fTwvZGl2Pg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD5QSwcIyZjInUYBAABGAQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxjb21tZW50cy5odG1sPGRpdiBpZD0iY29tbWVudC1saXN0IiBjbGFzcz0iYWRtaW4gY29udGFpbmVyOTYwIj57e3JhbmdlIC5Db21tZW50c319DQogICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciIgaWQ9ImNvbW1lbnQte3suSWR9fSI+DQogICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIGMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLXRpbWUiPjxpIGNsYXNzPSJmYSBmYS1jbG9jay1vIj48L2k+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWVtYWlsIj57ey5FbWFpbH19PC9zcGFuPnt7aWYgLkdldENvbnRlbnR9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNudCI+QHt7LkdldENvbnRlbnQuVGl0bGV9fTwvc3Bhbj57e2Vsc2V9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNudCI+QOaXoOaViDwvc3Bhbj57e2VuZH19e3tpZiBuZSAuU3RhdHVzICJhcHByb3ZlZCJ9fQ0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLWNoZWNrIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLlrqHmoLgiPjxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSI+PC9pPuWuoeaguOS4rTwvYT57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWbnuWkjSI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLWRlbCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Yig6ZmkIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj57e2VuZH19DQogICAgPHVsIGlkPSJhcnRpY2xlLXBhZ2VyIiBjbGFzcz0icGFnZXIgY29udGFpbmVyOTYwIj57e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgICAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQogICAgPC91bD4NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9jb21tZW50cy8iIGNsYXNzPSJmb3JtIGNsZWFyIGxlZnQiIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IGxlZnQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIiBpZD0iY29tbWVudC1zdWJtaXQiPuWbnuWkjeivhOiuujwvYnV0dG9uPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIiBpZD0iY29tbWVudC1jbG9zZSI+5YWz6Zet5Zue5aSNPC9idXR0b24+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBpZD0iY29tbWVudC1wYXJlbnQiIG5hbWU9InBpZCIvPg0KICAgIDwvZm9ybT4NCjwvZGl2Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtZGVsJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWIoOmZpOivhOiuuuWwhuS9v+ebuOWFs+WGheWuueaXoOaViCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgIHVybDogIi9hZG1pbi9jb21tZW50cy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NvbW1lbnQtJyArIGlkKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWIoOmZpOWksei0pSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5jLWNoZWNrJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWuoeaguOWQjuatpOS9nOiAheWwhuS4jeWGjeagh+iusOWuoeaguCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogInB1dCIsDQogICAgICAgICAgICAgICAgICAgIHVybDogIi9hZG1pbi9jb21tZW50cy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NvbW1lbnQtJyArIGlkKS5maW5kKCIuYy1jaGVjayIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5a6h5qC45aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtcmVwbHknKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtJytpZCkuYXBwZW5kKCQoJyNjb21tZW50LWZvcm0nKS5kZXRhY2goKS5zaG93KCkpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKGlkKTsNCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Llm57lpI0iKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vY29tbWVudHMvIjsNCiAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlm57lpI3lpLHotKUiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgICQoJyNjb21tZW50LWNsb3NlJykub24oImNsaWNrIixmdW5jdGlvbigpew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtZm9ybScpLmhpZGUoKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LWNvbnRlbnQnKS52YWwoIiIpOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCECYCO/tDwAA7Q8AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAHZpZXdcYWRtaW5cZWRpdF9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIiB2YWx1ZT0ie3suQXJ0aWNsZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5BcnRpY2xlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suQXJ0aWNsZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+IiB2YWx1ZT0ie3suQXJ0aWNsZS5UYWdTdHJpbmd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoInt7aWYgZXEgLkFydGljbGUuU3RhdHVzICJwdWJsaXNoIn19IHNlbGVjdGVke3tlbmR9fT7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCJ7e2lmIGVxIC5BcnRpY2xlLlN0YXR1cyAiZHJhZnQifX0gc2VsZWN0ZWR7e2VuZH19PuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuQXJ0aWNsZS5Jc0NvbW1lbnQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgi5bey5L+d5a2Y77yM5Y675p+l55yL77yf6L+Y5piv57un57ut57yW6L6RIikpIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2FydGljbGVzLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhLnOnxbQ0AAG0NAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGFkbWluXGVkaXRfcGFnZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9Iumhtemdouagh+mimCIgdmFsdWU9Int7LlBhZ2UuVGl0bGV9fSIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPnt7SHRtbCAuUGFnZS5UZXh0fX08L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumhtemdoueahOWUr+S4gOmTvuaOpSIgdmFsdWU9Int7LlBhZ2UuU2x1Z319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuUGFnZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLlBhZ2UuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPue9rumhtumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ibGluayIgaWQ9ImlzLWxpbmsiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNMaW5rZWQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vcGFnZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCLZ4MjLjDQAA4w0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5cZmlsZXMuaHRtbDx1bCBpZD0iZmlsZXMtbGlzdCIgY2xhc3M9ImFkbWluIGNvbnRhaW5lcjk2MCBwYWdlciI+DQogICAgPGxpIGNsYXNzPSJmaWxlIiBpZD0iZmlsZXMtYnRuLWxpIj4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICA8L2xpPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlLXt7LklkfX0iPg0KICAgICAgICA8c3BhbiBjbGFzcz0idXBsb2FkLXRpbWUiPnt7RGF0ZUludDY0IC5VcGxvYWRUaW1lICJNTS5ERCJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InNpemUiPnt7RmlsZVNpemUgLlNpemV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii97ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSIve3suVXJsfX0iPjxpIGNsYXNzPSJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZSI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBmYWRlLW91dCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Yig6Zmk6ZmE5Lu2Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KICAgIHt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vZmlsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICBpbml0VXBsb2FkKCIjYXR0YWNoLXNob3ciKTsNCiAgICAgICAgJCgiLmRlbCIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLliKDpmaTpmYTku7bnm7jlhbPpk77mjqXkvJrlpLHmlYghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiL2FkbWluL2ZpbGVzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZmlsZS0nK2lkKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCGLFm/rsBgAA7AYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHZpZXdcYWRtaW5caG9tZS5odG1sPGRpdiBjbGFzcz0iYWRtaW4gY29udGFpbmVyIGNsZWFyIiBpZD0iZGFzaGJvYXJkIj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtNSBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0id2VsY29tZSI+DQogICAgICAgICAgICA8aDQ+V2VsY29tZTwvaDQ+DQogICAgICAgICAgICA8cD7mrKLov47lm57mnaXvvIwgPHN0cm9uZz57ey5Vc2VyLk5pY2t9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InF1aWNrLWxpbmsiPg0KICAgICAgICAgICAgPGg0PuW/q+mAn+mTvuaOpTwvaDQ+DQogICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5pKw5YaZ5paH56ugPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wYWdlL3dyaXRlLyI+5re75Yqg6aG16Z2iPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iPuafpeeci+WSjOWuoeaguOivhOiuujwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vc2V0dGluZy8iPuS/ruaUuemFjee9rjwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vcHJvZmlsZS8iPuabtOaWsOS4quS6uui1hOaWmTwvYT48L2xpPg0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTIgbGVmdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5Ij4NCiAgICAgICAgICAgIDxoND7mnIDmlrDmtLvliqg8L2g0Pnt7cmFuZ2UgLk1lc3NhZ2VzfX0NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1zZyByZWxhdGl2ZSB7ey5UeXBlfX0iPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YSI+e3tIdG1sIC5EYXRhfX08L2Rpdj4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0icmVhZCBhYnNvbHV0ZSIgaHJlZj0iL2FkbWluL21lc3NhZ2UvcmVhZD9pZD17ey5JZH19IiByZWw9Int7LklkfX0iPjxpIGNsYXNzPSJmYSBmYS1jaGVjayI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pnt7ZW5kfX17e2lmIGx0IChsZW4gLk1lc3NhZ2VzKSAxfX0NCiAgICAgICAgICAgIDxwPuayoeacieaWsOeahOa0u+WKqOS/oeaBrzwvcD4NCiAgICAgICAgICAgIHt7ZW5kfX0NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTQgcmlnaHQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cyI+DQogICAgICAgICAgICA8aDQ+5pWw5o2u57uf6K6hPC9oND4NCiAgICAgICAgICAgIDxwPuW3sue7j+WPkeW4g+aWh+eroCA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5BcnRpY2xlc319PC9zcGFuPiDnr4fvvIwNCiAgICAgICAgICAgIOmhtemdoiA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5QYWdlc319PC9zcGFuPiDkuKrvvIwgPGJyLz4NCiAgICAgICAgICAgIOaUtuWIsOivhOiuuiA8c3BhbiBjbGFzcz0ibGJsIGxibC1ibHVlIj57ey5TdGF0aXMuQ29tbWVudHN9fTwvc3Bhbj4g5qyh77yMDQogICAgICAgICAgICDkuIrkvKAgPHNwYW4gY2xhc3M9ImxibCBsYmwtZ3JlZW4iPnt7LlN0YXRpcy5GaWxlc319PC9zcGFuPiDkuKrpmYTku7Y8L3A+DQogICAgICAgICAgICA8cD7lvZPliY3nqIvluo/niYjmnKzvvJo8c3Ryb25nPnt7LlN0YXRpcy5WZXJzaW9ufX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJvZmZpY2UiPg0KICAgICAgICAgICAgPGg0PuWumOaWuea2iOaBrzwvaDQ+DQogICAgICAgICAgICA8cD7ov5jmsqHmnInmtojmga88L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgICAgJCgiLnJlYWQiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICQucG9zdCgkdGhpcy5hdHRyKCJocmVmIiksZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICR0aGlzLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgIH0pOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgfSk7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcI9JTc5iAJAAAgCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxsb2dpbi5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPueZu+W9lSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPg0KICAgICAgICAjbG9naW4tZm9ybXsNCiAgICAgICAgICAgIHdpZHRoOiAyODBweDsNCiAgICAgICAgICAgIG1hcmdpbjogODBweCBhdXRvOw0KICAgICAgICB9DQogICAgICAgICNsb2dpbi1mb3JtIGgxew0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsNCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxmb3JtIGlkPSJsb2dpbi1mb3JtIiBjbGFzcz0iZm9ybSBmb3JtLXZlcnRpY2FsIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0ibG9naW4tZm9ybSI+DQogICAgPGgxPueZu+W9lSAtIEZ4aC5HbzwvaDE+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0idXNlciI+55So5oi35ZCNPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQiIGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InVzZXIiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVzZXItaW52YWxpZCI+55So5oi35ZCN5Li65a2X5q+NK+aVsOWtl++8jOmVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9InBhc3N3b3JkIj7nlKjmiLflr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJwYXNzd29yZCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0icGFzc3dvcmQtaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7nmbsg5b2VPC9idXR0b24+DQogICAgPHNwYW4gY2xhc3M9InRpcCI+6buY6K6k6K6w5L2P55m76ZmGM+WkqTwvc3Bhbj4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2Nkbi5zdGF0aWNmaWxlLm9yZy9qcXVlcnkuZm9ybS8zLjQ2L2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvdmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigibG9naW4tZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoidXNlciIsInJ1bGVzIjoiYWxwaGFfbnVtZXJpY3xtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJwYXNzd29yZCIsInJ1bGVzIjoicmVxdWlyZWR8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI2xvZ2luLWZvcm0nKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLnmbvlvZXplJnor6/vvIzor7fmo4Dmn6XnlKjmiLfmiJblr4bnoIEiKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcI1uB4YpAIAACQCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxwYWdlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+DQogICAgPC9saT57e3JhbmdlIC5QYWdlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vcGFnZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk6aG16Z2i5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9wYWdlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIa+TbIVwGAABcBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxwYXNzd29yZC5odG1sPGZvcm0gaWQ9InBhc3N3b3JkIiBjbGFzcz0iZm9ybSBmb3JtLWFsaWduIGNsZWFyIiBhY3Rpb249IiMiIG5hbWU9InBhc3N3b3JkLWZvcm0iIG1ldGhvZD0icG9zdCI+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ib2xkIj7ml6flr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im9sZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im9sZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPumqjOivgeaXp+WvhueggTwvc3Bhbj48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ib2xkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im5ldyI+5paw5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJuZXciIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJuZXciIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuZXctaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0iY29uZmlybSI+56Gu6K6k5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImNvbmZpcm0taW52YWxpZCI+56Gu6K6k5a+G56CB5LiN5Yy56YWNPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInBhc3N3b3JkLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6Im9sZCIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmV3IiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJjb25maXJtIiwicnVsZXMiOiJyZXF1aXJlZHxtYXRjaGVzW25ld10ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwYXNzd29yZCcpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIbnEngU8HAABPBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xhZG1pblxwbHVnaW4uaHRtbDx1bCBpZD0icGx1Z2luLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPnt7cmFuZ2UgLlBsdWdpbnN9fQ0KICAgIDxsaSBjbGFzcz0iY2xlYXIiPnt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQgbGJsIGFjdGl2ZSBsYmwtZ3JlZW4iPiZuYnNwOzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGxlZnQiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24gbGVmdCI+e3suVmVyc2lvbn19PC9zcGFuPnt7aWYgLkhhc1NldHRpbmd9fQ0KICAgICAgICA8YSBjbGFzcz0ic2V0dGluZyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy97ey5LZXl9fS8iPumAiemhuTwvYT57e2VuZH19e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8YSBjbGFzcz0iZGVhY3RpdmF0ZSBsYmwgbGJsLXJlZCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5bCB5Y2wPC9hPnt7ZWxzZX19DQogICAgICAgIDxhIGNsYXNzPSJhY3RpdmF0ZSBsYmwgbGJsLWJsdWUgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPua/gOa0uzwvYT57e2VuZH19DQogICAgICAgIDxwIGNsYXNzPSJkZXNjIGxlZnQiPnt7LkRlc2N9fTwvcD4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIuZGVhY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJkZWFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoea/gOa0uyIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlsIHljbDlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgiLmFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoeWwgeWNsCIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLmv4DmtLvlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCE9wWaFiBgAAYgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAHZpZXdcYWRtaW5ccGx1Z2luX3NldHRpbmcuaHRtbDxmb3JtIGlkPSJwbHVnaW4tc2V0dGluZy1mb3JtIiBjbGFzcz0iZm9ybSBjb250YWluZXI5NjAgYWRtaW4iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICB7e0h0bWwgLkZvcm19fQ0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICAgICAgICAkKCcjcGx1Z2luLXNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIjoi5L+d5a2Y5aSx6LSlIik7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwg0K3PVOAEAADgBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHByb2ZpbGUuaHRtbDxmb3JtIGlkPSJwcm9maWxlIiBjbGFzcz0iYWRtaW4gZm9ybSBjbGVhciBmb3JtLWFsaWduIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0icHJvZmlsZS1mb3JtIj4NCiAgICA8ZGl2IGNsYXNzPSJhdmF0YXIgZ3JpZC0xLTQgbGVmdCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7ey5Vc2VyLkF2YXRhcn19IiBhbHQ9Int7LlVzZXIuTmlja319IiBjbGFzcz0iZmllbGQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBmaWVsZCBpbmxpbmUtYmxvY2siPuWktOWDj+eUsSA8YSBocmVmPSJodHRwOi8vZ3JhdmF0YXIuY29tLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm8tZm9sbG93Ij5HcmF2YXRhcjwvYT4g5o+Q5L6bPC9zcGFuPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tcmVkIGlubGluZS1ibG9jayIgaHJlZj0iL2FkbWluL3Bhc3N3b3JkLyI+5L+u5pS55a+G56CBPC9hPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaW5mbyByaWdodCBncmlkLTMtNCI+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nmbvlvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiB2YWx1ZT0ie3suVXNlci5OYW1lfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+55m75b2V55qE55So5oi35ZCNPC9zcGFuPjxici8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ibmljayI+5pi156ewPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ibmljayIgdHlwZT0idGV4dCIgbmFtZT0ibmljayIgdmFsdWU9Int7LlVzZXIuTmlja319IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuaYvuekuuWcqOWJjeWPsOeahOensOWRvDwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5pY2staW52YWxpZCI+5pi156ew6ZW/5bqmMi0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZW1haWwiPumCrueusTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImVtYWlsIiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHZhbHVlPSJ7ey5Vc2VyLkVtYWlsfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6IGU57O76YKu566x77yM5Y2B5YiG6YeN6KaB77yBPC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iZW1haWwtaW52YWxpZCI+6YKu566x5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1cmwiPue9keWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVybCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHZhbHVlPSJ7ey5Vc2VyLlVybH19IiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1cmwtaW52YWxpZCI+572R5Z2A5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBiaW8iIG5hbWU9ImJpbyIgaWQ9ImJpbyI+e3suVXNlci5CaW99fTwvdGV4dGFyZWE+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwcm9maWxlLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmljayIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiZW1haWwiLCJydWxlcyI6InZhbGlkX2VtYWlsIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJ1cmwiLCJydWxlcyI6InZhbGlkX3VybCJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Byb2ZpbGUnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCB+PoV8CDAAAAgwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cc2V0dGluZy5odG1sPHVsIGlkPSJzZXR0aW5nLW5hdiIgY2xhc3M9ImNvbnRhaW5lcjk2MCB0ZXh0LWNlbnRlciI+DQogICAgPGxpPjxhIGhyZWY9IiNnZW5lcmFsIj7ln7rmnKw8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iI25hdiI+5a+86IiqPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9IiNjdXN0b20iPuiHquWumuS5iTwvYT48L2xpPg0KPC91bD4NCjxkaXYgaWQ9InNldHRpbmctcGFuZWxzIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICA8Zm9ybSBpZD0ic2V0dGluZy1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nLyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS11cmwiPuermeeCueWcsOWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdXJsIiBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InNpdGVfdXJsIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdXJsYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS10aXRsZSI+56uZ54K55Li75qCH6aKYPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aXRsZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1zdWItdGl0bGUiPuermeeCueWJr+agh+mimDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtc3ViLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3N1Yl90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3N1Yl90aXRsZWB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUta2V5d29yZHMiPk1ldGHlhbPplK7lrZc8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLWtleXdvcmRzIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2tleXdvcmRzIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1kZXNjIj5NZXRh56uZ54K55LuL57uNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1kZXNjIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2Rlc2NyaXB0aW9uIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iYXJ0aWNsZS1zaXplIj7ljZXpobXmlofnq6DliJfooajmlbA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJhcnRpY2xlLXNpemUiIGNsYXNzPSJpcHQiIHR5cGU9Im51bWJlciIgbmFtZT0iYXJ0aWNsZV9zaXplIiB2YWx1ZT0ie3tTZXR0aW5nIGBhcnRpY2xlX3NpemVgfX0iIG1heD0iMTAiIG1pbj0iMyIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGhlbWUiPuS4u+mimOebruW9leWQjTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdGhlbWUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfdGhlbWUiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdGhlbWVgfX0iLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS4u+mimOWNs+aMh+WQkeeahOaooeadv+ebruW9le+8jOWFt+S9k+WGheWuueivt+WPguiAgyBkZWZhdWx0IOebruW9le+8iOWNsyBkZWZhdWx0IOS4u+mimO+8iTwvc3Bhbj4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNpdGVfdGhlbWVfZGVmIiB2YWx1ZT0iZGVmYXVsdCIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImdvLW1hcmtkb3duIj5Hb+a4suafk01hcmtkb3duPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iZ28tbWFya2Rvd24iIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9ImVuYWJsZV9nb19tYXJrZG93biIgdmFsdWU9Int7U2V0dGluZyBgZW5hYmxlX2dvX21hcmtkb3duYH19Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7pu5jorqTlhbPpl63vvIzkvb/nlKjliY3nq69tYXJrZWQuanPmuLLmn5PvvIzloat0cnVl5pe25byA5ZCvPC9zcGFuPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duX2RlZiIgdmFsdWU9ImZhbHNlIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHA+DQogICAgICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Zvcm0+DQogICAgPGZvcm0gaWQ9InNldHRpbmctbmF2LWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nL25hdiIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgbmF2DQogICAgPC9mb3JtPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWN1c3RvbS1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nL2N1c3RvbS8iIG1ldGhvZD0icG9zdCI+e3tyYW5nZSAkaywkdiA6PSAuQ3VzdG9tfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHZhbHVlPSJ7eyRrfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7JHZ9fSIvPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiPua3u+WKoOS4gOmhuTwvYT4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS9v+eUqOWHveaVsOiHquWumuS5iemFjee9ru+8jOmcgOimgeWKoOWJjee8gCJjXyLvvIzlpoJHZXRTZXR0aW5nKCJjX2tleSIpPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImN1c3RvbS1pdGVtIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgcGxhY2Vob2xkZXI9IuWtl+auteWQjSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IuWtl+auteWAvCIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9zY3JpcHQ+DQogICAgPC9mb3JtPg0KICAgIDxkaXYgY2xhc3M9InNldHRpbmctcGFuZWwiPjMzMzwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeXRvb2xzLzEuMi43L2pxdWVyeS50b29scy5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI3NldHRpbmctbmF2JykudGFicygiLnNldHRpbmctcGFuZWwiKTsNCiAgICAgICAgJCgnLnNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiIDoganNvbi5tc2cpOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmFkZCcpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcjc2V0dGluZy1jdXN0b20tZm9ybScpLnByZXBlbmQoJCgiI2N1c3RvbS1pdGVtIikuaHRtbCgpKTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgaWYoY29uZmlybSgi6KaB5Yig6Zmk6L+Z6aG577yfIikpew0KICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwgg178woxIAAKMSAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAB2aWV3XGFkbWluXHdyaXRlX2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnmlofnq6DlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCiAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgPC9wPg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9hcnRpY2xlcy8iOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwi+ynR8IQwAACEMAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGFkbWluXHdyaXRlX3BhZ2UuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLpobXpnaLmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnpobXpnaLlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpobXpnaLnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCI+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQiPuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7nva7pobbpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImxpbmsiIGlkPSJpcy1saW5rIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vcGFnZXMvIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIcltVaXwMAAB8DAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAdmlld1xhZG1pbi5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+e3suVGl0bGV9fSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9hZG1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvdmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhciI+DQogICAgICAgIDxoMyBjbGFzcz0ibG9nbyBsZWZ0Ij5GeGguR28gLSA8c3Bhbj57ey5UaXRsZX19PC9zcGFuPjwvaDM+DQogICAgICAgIDxkaXYgY2xhc3M9Im5hdiBsZWZ0IHJlbGF0aXZlIj4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJkYXNoYm9hcmQgbGVmdCIgaHJlZj0iL2FkbWluLyI+PGkgY2xhc3M9ImZhIGZhLWRhc2hib2FyZCI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJhcnRpY2xlIGxlZnQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlcy8iIHRpdGxlPSLmlofnq6AiPjxpIGNsYXNzPSJmYSBmYS1jb3B5Ij48L2k+PC9hPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJwYWdlcyBsZWZ0IiBocmVmPSIvYWRtaW4vcGFnZXMvIiB0aXRsZT0i54us56uL6aG16Z2iIj48aSBjbGFzcz0iZmEgZmEtcGFzdGUiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iY29tbWVudHMgbGVmdCIgaHJlZj0iL2FkbWluL2NvbW1lbnRzLyIgdGl0bGU9IuivhOiuuiI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImZpbGVzIGxlZnQiIGhyZWY9Ii9hZG1pbi9maWxlcy8iIHRpdGxlPSLlqpLkvZPmlofku7YiPjxpIGNsYXNzPSJmYSBmYS1pbmJveCI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJwbHVnaW5zIGxlZnQiIGhyZWY9Ii9hZG1pbi9wbHVnaW5zLyIgdGl0bGU9IuaPkuS7tiI+PGkgY2xhc3M9ImZhIGZhLWdlYXJzIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9InNldHRpbmcgbGVmdCIgaHJlZj0iL2FkbWluL3NldHRpbmcvIiB0aXRsZT0i6K6+572uIj48aSBjbGFzcz0iZmEgZmEtY29nIj48L2k+PC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGEgY2xhc3M9Im91dCBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2xvZ291dC8iIHRpdGxlPSLpgIDlh7oiPjxpIGNsYXNzPSJmYSBmYS1wb3dlci1vZmYgZmEtbGciPjwvaT48L2E+DQogICAgICAgIDxhIGNsYXNzPSJwcm9maWxlIG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvYWRtaW4vcHJvZmlsZS8iIHRpdGxlPSLmiJEiPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0iZnJvbnQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii8iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0i5p+l55yL572R56uZIj48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluayI+PC9pPjwvYT4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0Ke0BDb250ZW50fQ0KPGRpdiBpZD0iZm9vdGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhciI+DQogICAgICAgPHAgY2xhc3M9ImxpbmtzIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgPGEgY2xhc3M9InN0YXQiIGhyZWY9Ii9jbWQvbWVzc2FnZS8iPua2iOaBrzwvYT4NCiAgICAgICAgICAgPGEgY2xhc3M9ImJhY2t1cCIgaHJlZj0iL2NtZC9iYWNrdXAvIj7lpIfku708L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJlcnIiIGhyZWY9Ii9jbWQvbG9ncy8iPuaXpeW/lzwvYT4NCiAgICAgICAgICAgPGEgY2xhc3M9InN5cyIgaHJlZj0iIyI+57O757ufPC9hPg0KICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImNwIHRleHQtY2VudGVyIj5Qcm91ZGx5IHB1Ymxpc2hlZCB3aXRoIEZ4aC5Hby48L3A+DQogICAgPC9kaXY+DQo8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD5QSwcI2fiqVMEIAADBCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xjbWQubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPnt7LlRpdGxlfX0gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY21kLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHkgY2xhc3M9ImNtZCI+DQp7QENvbnRlbnR9DQo8cCBjbGFzcz0iYmFjayI+PGEgaHJlZj0iamF2YXNjcmlwdDpoaXN0b3J5LmJhY2soKSI+QmFjazwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCAp9yADOAQAAzgEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAADQAAAHZpZXdcZGVmYXVsdC9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xkZWZhdWx0XGFydGljbGUuaHRtbDxkaXYgaWQ9ImFydGljbGUtY29udGFpbmVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxhcnRpY2xlIGNsYXNzPSJjbGVhciB7ey5BcnRpY2xlLlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5BcnRpY2xlLklkfX0iPnt7d2l0aCAuQXJ0aWNsZX19DQogICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPg0KICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hhcmUgd2VpYm8gaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtd2VpYm8gZmEtbGciPjwvaT48L3NwYW4+e3tpZiAuVXNlcn19DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0aG9yIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT57ey5Vc2VyLk5pY2t9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZSBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS1jbG9jay1vIj48L2k+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPnt7aWYgLlRhZ1N0cmluZ319DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXRhZ3MiPjwvaT57ey5UYWdTdHJpbmd9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idmlld3MgaW5saW5lLWJsb2NrIHJpZ2h0Ij7pmIXor7smbmJzcDsmbmJzcDs8c3Bhbj57ey5IaXRzfX08L3NwYW4+Jm5ic3A7Jm5ic3A75qyhPC9zcGFuPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgIDwvYXJ0aWNsZT4NCiAgICB7e0h0bWwgLkNvbW1lbnRIdG1sfX0NCjwvZGl2PlBLBwjAuDSItwMAALcDAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGRlZmF1bHRcY29tbWVudC5odG1sPGRpdiBpZD0iY29tbWVudCI+DQogICAgPGRpdiBpZD0iY29tbWVudC1saXN0Ij57e3JhbmdlIC5Db21tZW50c319e3tpZiAuSXNWYWxpZH19DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiIGlkPSJjb21tZW50LXt7LklkfX0iPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSJ7ey5BdXRob3J9fSIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+DQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLXRpbWUiPjxpIGNsYXNzPSJmYSBmYS1jbG9jay1vIj48L2k+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19Ij48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9IiIgYWx0PSIiLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiBsZWZ0Ij4NCiAgICAgICAgICAgICAgICA8ZGl2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aW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vIi8+DQogICAgPHRpdGxlPnt7aWYgLlRpdGxlfX17ey5UaXRsZX19IC0ge3tlbmR9fXt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvdGl0bGU+DQogICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9rZXl3b3Jkc2B9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfZGVzY3JpcHRpb25gfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkZ4aEdvIEJsb2ciIC8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9zdHlsZS5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIHRleHQtY2VudGVyIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIvPg0KICAgICAgICA8aDEgaWQ9ImhlYWRlci1oIj48YSBocmVmPSIvIj57e1NldHRpbmcgInNpdGVfdGl0bGUifX08L2E+PC9oMT4NCiAgICAgICAgPGg0IGlkPSJoZWFkZXItc3ViIj57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4NCiAgICA8L2Rpdj4NCjwvaGVhZGVyPg0KPG5hdiBpZD0ibmF2IiBjbGFzcz0iY2xlYXIgdGV4dC1jZW50ZXIiPg0KICAgIDx1bD4NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii8iPuaWh+eroDwvYT48L2xpPg0KICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iL2Fib3V0LW1lLmh0bWwiPuWFs+S6jjwvYT48L2xpPg0KICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0iL2ZyaWVuZHMuaHRtbCI+5aW95Y+LPC9hPjwvbGk+DQogICAgPC91bD4NCjwvbmF2Pg0KPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbnRhaW5lcjk2MCI+DQogICAge0BDb250ZW50fQ0KPC9kaXY+DQo8Zm9vdGVyIGlkPSJmb290ZXIiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+DQogICAgPHA+DQogICAgICAgIDxhIGNsYXNzPSJ3ZWlibyIgaHJlZj0ie3tTZXR0aW5nIGBjX2Zvb3Rlcl93ZWlib2B9fSIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS13ZWlibyI+PC9pPldlaWJvPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZ2l0IiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX2dpdGh1YmB9fSIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1naXRodWIiPjwvaT5HaXRIdWI8L2E+DQogICAgICAgIDxhIGNsYXNzPSJlbWFpbCIgaHJlZj0ie3tTZXR0aW5nIGBjX2Zvb3Rlcl9lbWFpbGB9fSIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1lbnZlbG9wZSI+PC9pPkVtYWlsPC9hPg0KICAgICAgICA8YSBjbGFzcz0icnNzIiBocmVmPSIvcnNzLnhtbCIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1yc3MiPjwvaT5SU1M8L2E+e3tTZXR0aW5nIGBjX2Zvb3Rlcl9nYWAgfCBIdG1sfX0NCiAgICA8L3A+DQogICAgPHNwYW4+R28gwqkgMjAxNCBBbGwgcmlnaHRzIHJlc2VydmVkLiBQcm91ZGx5IHB1Ymxpc2hlZCB3aXRoIEZ4aC5Hby48L3NwYW4+DQogICAgPGEgaWQ9ImdvLXRvcCIgaHJlZj0iIyIgY2xhc3M9ImxibCBoaWRlIGxibC1ibHVlIiB0aXRsZT0i5Zue5Yiw6aG26YOoIj48aSBjbGFzcz0iZmEgZmEtYXJyb3ctdXAgZmEtbGciPjwvaT48L2E+DQo8L2Zvb3Rlcj4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL2hvbWUuanMiPjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwiVBbT8lAkAAJQJAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGRlZmF1bHRcaW5kZXguaHRtbDxkaXYgaWQ9ImFydGljbGUtY29udGFpbmVyIiBjbGFzcz0iY2xlYXIiPnt7cmFuZ2UgLkFydGljbGVzfX0NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIge3suU3RhdHVzfX0iIGlkPSJhcnRpY2xlLXt7LklkfX0iPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGxlZnQgdGV4dC1jZW50ZXIiPnt7aWYgZ3QgLkNvbW1lbnROdW0gMH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1yZWQgY29tbWVudHMiPjxhIGhyZWY9Int7Lkxpbmt9fSNjb21tZW50Ij48aSBjbGFzcz0iZmEgZmEtY29tbWVudHMiPjwvaT48c3Ryb25nPnt7LkNvbW1lbnROdW19fSDihIM8L3N0cm9uZz48L2E+PC9wPnt7ZW5kfX0NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIj48aSBjbGFzcz0iZmEgZmEtZXllIj48L2k+PHN0cm9uZz57ey5IaXRzfX0g4oSJPC9zdHJvbmc+PC9wPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtZ3JheSB0aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPjxzdHJvbmc+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+DQogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5TdW1tYXJ5fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX17e2lmIC5UYWdTdHJpbmd9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWcgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdGFncyI+PC9pPnt7LlRhZ1N0cmluZ319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iaW5saW5lLWJsb2NrIHJlYWQgcmlnaHQiIGhyZWY9Int7Lkxpbmt9fSI+PGkgY2xhc3M9ImZhIGZhLXNlYXJjaCI+PC9pPue7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ICAgICA8YSBjbGFzcz0iYy1yZXBseSBsYmwgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSI+5Zue5aSNPC9hPg0KICAgICAgICAgICAgICAgICAgICA8cD48YSBjbGFzcz0iYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+PC9wPg0KICAgICAgICAgICAgICAgICAgICA8cD48c3BhbiBjbGFzcz0iYy10aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0g5pyIIEREIOaXpSBISCDml7YgbW0g5YiGIn19PC9zcGFuPjwvcD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+e3tlbmR9fXt7ZW5kfX0NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LXNob3ciIGNsYXNzPSJ0ZXh0LWNlbnRlciI+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGVuYWJsZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+e3tlbHNlfX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1yZWQiPuacrOaWh+WFs+mXreS6huivhOiuujwvYnV0dG9uPnt7ZW5kfX0NCiAgICA8L2Rpdj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgY2xhc3M9ImhpZGUgY2xlYXIgdGV4dC1jZW50ZXIgZm9ybSIgYWN0aW9uPSIvY29tbWVudC97ey5Db250ZW50LklkfX0vIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8gbGVmdCB0ZXh0LXJpZ2h0Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIGMtYXZhdGFyLWZpZWxkIj4NCiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBudWxsIiBzcmM9Ii9zdGF0aWMvaW1nL3NpdGUucG5nIiBhbHQ9IiIgaWQ9ImNvbW1lbnQtYXZhdGFyIi8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5vdC1tZSBibG9jayIgaHJlZj0iIyI+5LiN5piv5oiRPzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mby1maWVsZHMgaGlkZSI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLnp7DlkbwiIGlkPSJjb21tZW50LWF1dGhvciIvPjwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6YKu566xIiBpZD0iY29tbWVudC1lbWFpbCIvPiA8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgcGxhY2Vob2xkZXI9Iue9keWdgCIgaWQ9ImNvbW1lbnQtdXJsIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY29tbWVudC1wYXJlbnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIG5hbWU9InBpZCIvPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWNvbnRlbnQgdGV4dC1sZWZ0IHJpZ2h0Ij4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuWPkeihqOivhOiuujwvYnV0dG9uPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGJsIGxibC1ncmVlbiBjYW5jZWwtcmVwbHkiIHR5cGU9ImJ1dHRvbiI+5Y+W5raI5Zue5aSNPC9idXR0b24+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZm9ybT57e2VuZH19DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY29tbWVudC10cGwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0iIi8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24iPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSBjbGVhciI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IGxibCByaWdodCIgaHJlZj0iIyIgcmVsPSIiPuWbnuWkjTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHA+PGEgY2xhc3M9ImMtYXV0aG9yICIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj48L2E+PC9wPg0KICAgICAgICAgICAgICAgICAgICA8cD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLXRpbWUiPk5vdzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNoZWNrIj7lrqHmoLjkuK3vvIzliLfmlrDlkI7pmpDol488L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij48L3NlY3Rpb24+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L3NjcmlwdD4NCjwvZGl2PlBLBwhpoEeilQ0AAJUNAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABAAAAB2aWV3XGxpbmdcZXJyb3IvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcbGluZ1xlcnJvclxlcnJvci5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPumUmeivr+aPkOekujwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPmJvZHl7bWFyZ2luOiA0MHB4IDEwMHB4fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoMj7mgqjorr/pl67nmoTpobXpnaLmraPlnKjmiZPnnoznnaE8L2gyPjxici8+DQo8cD7nqIvluo/lkZjmraPlnKjliqrlipvllKTphpLvvIzor7fnqI3lgJnorr/pl64uLi48L3A+DQo8cD48YSBocmVmPSIvIj7ov5Tlm57pppbpobU8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwgThEZSeAEAAHgBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAB2aWV3XGxpbmdcZXJyb3Jcbm90Zm91bmQuaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7plJnor6/mj5DnpLo8L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT5ib2R5e21hcmdpbjogNDBweCAxMDBweH08L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8aDI+5oKo6K6/6Zeu55qE6aG16Z2i56a75a625Ye66LWwPC9oMj48YnIvPg0KPHA+56iL5bqP5ZGY5q2j5Zyo5Zub5aSE5a+75om+77yM6K+356iN5YCZ6K6/6ZeuLi4uPC9wPg0KPHA+PGEgaHJlZj0iLyI+6L+U5Zue6aaW6aG1PC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIkPnUwHUBAAB1AQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xsaW5nXGhvbWUubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIi8+DQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vIi8+DQogICAgPHRpdGxlPnt7aWYgLlRpdGxlfX17ey5UaXRsZX19IC0ge3tlbmR9fXt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvdGl0bGU+DQogICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9rZXl3b3Jkc2B9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfZGVzY3JpcHRpb25gfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkZ4aEdvIEJsb2ciIC8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9saW5nLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19IC0gUlNTIDIuMCIgaHJlZj0iL3Jzcy54bWwiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIiBjbGFzcz0ibGVmdCIvPg0KICAgICAgICA8aDEgaWQ9ImhlYWRlci1oIiBjbGFzcz0ibGVmdCI+PGEgaHJlZj0iLyI+e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC9hPjwvaDE+DQogICAgICAgIDxoNCBpZD0iaGVhZGVyLXN1YiIgY2xhc3M9ImxlZnQiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgICAgICA8bmF2IGlkPSJuYXYiIGNsYXNzPSJyaWdodCI+DQogICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii8iPuaWh+eroDwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSIvYWJvdXQtbWUuaHRtbCI+5YWz5LqOPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Ii9mcmllbmRzLmh0bWwiPuWlveWPizwvYT48L2xpPg0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9uYXY+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCBjbGVhciI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0Ij5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0icmlnaHQiPlByb3VkbHkgcHVibGlzaGVkIHdpdGggRnhoLkdvLjwvc3Bhbj4NCiAgICA8L2Rpdj4NCiAgICA8YSBpZD0iZ28tdG9wIiBocmVmPSIjIiBjbGFzcz0ibGJsIGhpZGUgbGJsLWJsdWUiIHRpdGxlPSLlm57liLDpobbpg6giPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy11cCBmYS1sZyI+PC9pPjwvYT4NCiAgICB7e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCnt7SHRtbCAiPCEtLSB0aGFua3MgZm9yIHRoZW1lIExpbmdvbmJlcnJ5KGh0dHA6Ly93d3cuYW5kZXJzbm9yZW4uc2UvKSBmb3IgV29yZFByZXNzLS0+In19UEsHCEN9vfrZCAAA2QgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHZpZXdcbGluZ1xpbmRleC5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxhcnRpY2xlIGNsYXNzPSJjbGVhciB7ey5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suSWR9fSI+DQogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEgbGVmdCB0ZXh0LWNlbnRlciByZWxhdGl2ZSI+DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1yZWQgY29tbWVudHMiPjxhIGhyZWY9Int7Lkxpbmt9fSNjb21tZW50Ij57ey5Db21tZW50TnVtfX08L2E+PC9wPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtZ3JlZW4gdmlld3MgYWJzb2x1dGUiPnt7LkhpdHN9fTwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1haW4gcmVsYXRpdmUiPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICAgICAgPHAgY2xhc3M9InRpbWUtaW5mbyI+e3tpZiAuVXNlcn19PHN0cm9uZz57ey5Vc2VyLk5pY2t9fTwvc3Ryb25nPiZuYnNwOyZuYnNwOyZuYnNwO3t7ZW5kfX3lj5Hooajkuo4mbmJzcDsmbmJzcDsmbmJzcDt7e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiWVlZWSDlubQgTU0g5pyIIEREIOaXpSJ9fTwvcD4NCiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLlN1bW1hcnl9fTwvc2VjdGlvbj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+5qCH562+77yae3suVGFnU3RyaW5nfX08L3NwYW4+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlubGluZS1ibG9jayByZWFk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" \ No newline at end of file +const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnt3aWR0aDoxMDAwcHg7bWFyZ2luLXRvcDoyNHB4O21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNzZXR0aW5nLW5hdiBsaXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCAxMnB4fSNzZXR0aW5nLW5hdiBsaSBhe3BhZGRpbmc6M3B4IDEwcHh9CiNzZXR0aW5nLW5hdiBsaSBhOmhvdmVyLCNzZXR0aW5nLW5hdiBsaSBhLmN1cnJlbnR7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzAwNWI5Yn0KLnNldHRpbmctcGFuZWx7ZGlzcGxheTpub25lfQouc2V0dGluZy1mb3Jte3dpZHRoOjgyMHB4O21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfS5zZXR0aW5nLWZvcm0gLmlwdHt3aWR0aDo0ODBweH0KLnNldHRpbmctZm9ybSAuaW52YWxpZHttYXJnaW4tbGVmdDo3NXB4fQouc2V0dGluZy1mb3JtIGxhYmVse21pbi13aWR0aDoxMGVtfQouc2V0dGluZy1mb3JtIC50aXAuYmxvY2t7bWFyZ2luLWxlZnQ6MTJlbX0KI3NldHRpbmctY3VzdG9tLWZvcm17d2lkdGg6MTAwMHB4fSNzZXR0aW5nLWN1c3RvbS1mb3JtIGlucHV0LmtleXt3aWR0aDoyNTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQudmFsdWV7d2lkdGg6NjUwcHh9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5pdGVte21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojc2V0dGluZy1jdXN0b20tZm9ybSAuZGVse21hcmdpbi1sZWZ0OjEycHg7Y29sb3I6I2U2NDM0Nn0KI3NldHRpbmctY3VzdG9tLWZvcm0gLnRpcHttYXJnaW4tbGVmdDowfQojc2V0dGluZy1uYXYtZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctbmF2LWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLW5hdi1mb3JtIHNwYW4ubGFiZWx7bWFyZ2luLXJpZ2h0OjZweH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQub3JkZXJ7d2lkdGg6Mi41ZW07bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0LnRleHR7d2lkdGg6ODBweDttaW4td2lkdGg6MH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQudGl0bGV7d2lkdGg6MTUwcHg7bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0Lmxpbmt7d2lkdGg6MzQwcHh9CiNzZXR0aW5nLW5hdi1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jbnQsI2NvbW1lbnQtbGlzdCAuYy1lbWFpbHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWxpc3QgLmMtc2VjdGlvbnttYXgtd2lkdGg6ODMwcHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2ssI2NvbW1lbnQtbGlzdCAuYy1kZWx7Y29sb3I6I2U2NDM0Nn0jY29tbWVudC1saXN0IC5jLWNoZWNrIC5mYSwjY29tbWVudC1saXN0IC5jLWRlbCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjazpob3ZlciwjY29tbWVudC1saXN0IC5jLWRlbDpob3Zlcntjb2xvcjojYWEzOTNjfQojY29tbWVudC1mb3Jte3BhZGRpbmctdG9wOjEycHg7ZGlzcGxheTpub25lO21hcmdpbi1sZWZ0OjcycHh9I2NvbW1lbnQtZm9ybSAuYnRue21hcmdpbi1yaWdodDoyNHB4fQojY29tbWVudC1jb250ZW50e3dpZHRoOjUwMHB4O2hlaWdodDo4MHB4O21hcmdpbi1yaWdodDoyNHB4fQojZmlsZXMtbGlzdCBsaS5maWxle21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZmlsZXMtbGlzdCBsaS5maWxlPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNmaWxlcy1saXN0IGxpLmZpbGU6aG92ZXIgLmRlbHtvcGFjaXR5OjEgIWltcG9ydGFudH0KI2ZpbGVzLWxpc3QgLnVwbG9hZC10aW1le2NvbG9yOiM5OTk7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2ZpbGVzLWxpc3QgLmRlbHtjb2xvcjojZTY0MzQ2fQojZmlsZXMtbGlzdCAuZmlsZS1wcm9ncmVzc3twYWRkaW5nOjAgMTJweDtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMik7Y29sb3I6IzY2Njtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNzLmVycntiYWNrZ3JvdW5kOnJnYmEoMjU1LDY4LDcxLDAuMik7Y29sb3I6I2FhMzkzY30KI2ZpbGVzLWxpc3QgLnNpemV7d2lkdGg6NGVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfQojcGx1Z2luLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxNnB4O3BhZGRpbmctYm90dG9tOjE2cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3BsdWdpbi1saXN0IGxpIC5kZXNje21hcmdpbi1ib3R0b206MDt3aWR0aDo5OSU7Y29sb3I6Izk5OX0KI3BsdWdpbi1saXN0IGxpIGEubGJse3BhZGRpbmc6MCA4cHg7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC52ZXJzaW9ue2NvbG9yOiM1MDc2NTA7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC5uYW1le2ZvbnQtc2l6ZToxNnB4fQojcGx1Z2luLWxpc3QgbGkgLmFjdGl2ZXt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O21hcmdpbi1yaWdodDoxNnB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjEwcHh9CiNwbHVnaW4tbGlzdCBsaSAuc2V0dGluZ3ttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBwLml0ZW17Y2xlYXI6Ym90aH0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gbGFiZWx7ZmxvYXQ6bGVmdDttaW4td2lkdGg6NmVtO3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luLXJpZ2h0OjJlbX0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gLnRpdGxle3BhZGRpbmctdG9wOjA7bWFyZ2luLWJvdHRvbToxOHB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBpbnB1dC5pcHR7d2lkdGg6NjAwcHh9CiNkYXNoYm9hcmQgLmdyaWQtMS01e21hcmdpbi1yaWdodDoyJX0KI2Rhc2hib2FyZCAucXVpY2stbGluayBsaXtsaXN0LXN0eWxlOmluc2lkZSBkaXNjO21hcmdpbi1ib3R0b206NnB4O3BhZGRpbmctYm90dG9tOjZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2Rhc2hib2FyZCAuc3RhdHMgLmxibHtwYWRkaW5nOjFweCA1cHg7bWFyZ2luOjAgM3B4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNne3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZzpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMDYpfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2c6aG92ZXIgLnJlYWR7b3BhY2l0eToxfQpQSwcIHMaB8VMyAABTMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGNzc1xjbWQuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Ci5jbWR7bWFyZ2luOjI0cHggNDhweH0KLmNtZC1oZWFkZXJ7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtYnRue21hcmdpbjoxMHB4IDAgMCAzMHB4fQouY21kLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtbGlzdCBsaXtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlO2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2JhY2t1cC1saXN0IGxpPnNwYW4sI2JhY2t1cC1saXN0IGxpPmF7bWFyZ2luLXJpZ2h0OjE2cHh9CiNiYWNrdXAtbGlzdCBsaSAuZGVse2NvbG9yOiNlNjQzNDY7b3BhY2l0eTowfQojYmFja3VwLWxpc3QgbGkgLmxpbmt7bWFyZ2luLWxlZnQ6MTJweH0KI2JhY2t1cC1saXN0IGxpOmhvdmVyIC5kZWx7b3BhY2l0eToxfQojbWVzc2FnZS1saXN0IC5tZXNzYWdle3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI21lc3NhZ2UtbGlzdCAubWVzc2FnZTpob3ZlciAucmVhZHtvcGFjaXR5OjF9CiNsb2ctbGlzdCAubG9ne2ZvbnQtc2l6ZToxMnB4fQojbG9nLWxpc3QgLm5hbWV7bWFyZ2luLXJpZ2h0OjEuNWVtO2ZvbnQtd2VpZ2h0OmJvbGR9CiNsb2ctbGlzdCAudGltZSwjbG9nLWxpc3QgLm5hbWV7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2xvZy1saXN0IC50ZXh0e2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbDtjb2xvcjojNjY2O3BhZGRpbmc6OHB4IDEycHg7YmFja2dyb3VuZDojZjNmM2YzfQojbG9nLWxpc3QgLnJlbW92ZXt0b3A6MDtyaWdodDoxMnB4O2NvbG9yOiNlNjQzNDZ9ClBLBwjSN8QbLxoAAC8aAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAABzdGF0aWNcY3NzXGNvZGVtaXJyb3IuY3NzLyogQkFTSUNTICovCgouQ29kZU1pcnJvciB7CiAgICAvKiBTZXQgaGVpZ2h0LCB3aWR0aCwgYm9yZGVycywgYW5kIGdsb2JhbCBmb250IHByb3BlcnRpZXMgaGVyZSAqLwogICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiTWljcm9zb2Z0IFlhSGVpIiwgIkNvdXJpZXIgTmV3IiwgQXJpYWw7CiAgICBoZWlnaHQ6IDY2MHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgYm9yZGVyOjFweCBzb2xpZCAjOTk5Owp9CgouQ29kZU1pcnJvci1zY3JvbGwgewogICAgLyogU2V0IHNjcm9sbGluZyBiZWhhdmlvdXIgaGVyZSAqLwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi8qIFBBRERJTkcgKi8KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIHBhZGRpbmc6IDRweCAwOyAvKiBWZXJ0aWNhbCBwYWRkaW5nIGFyb3VuZCBjb250ZW50ICovCn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICBwYWRkaW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KfQoKLyogR1VUVEVSICovCgouQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLkNvZGVNaXJyb3ItbGluZW51bWJlcnMgewp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIHBhZGRpbmc6IDAgM3B4IDAgNXB4OwogICAgbWluLXdpZHRoOiAyMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBjb2xvcjogIzU1NTsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4Owp9CgovKiBDVVJTT1IgKi8KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogICAgei1pbmRleDogMzsKfQoKLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7Cn0KCi5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB3aWR0aDogYXV0bzsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6ICM3ZTc7CiAgICB6LWluZGV4OiAxOwp9CgovKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHsKfQoKLmNtLXRhYiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi8qIERFRkFVTFQgVEhFTUUgKi8KCi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQgewogICAgY29sb3I6ICM3MDg7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWF0b20gewogICAgY29sb3I6ICMyMTk7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7CiAgICBjb2xvcjogIzE2NDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tZGVmIHsKICAgIGNvbG9yOiAjMDBmOwp9CgouY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZSB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICMwNWE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTMgewogICAgY29sb3I6ICMwODU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5IHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3IgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHsKICAgIGNvbG9yOiAjYTUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1zdHJpbmcgewogICAgY29sb3I6ICNhMTE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0yIHsKICAgIGNvbG9yOiAjZjUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1tZXRhIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW4gewogICAgY29sb3I6ICMzMGE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICM5OTc7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7CiAgICBjb2xvcjogIzE3MDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIgewogICAgY29sb3I6IGJsdWU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1b3RlIHsKICAgIGNvbG9yOiAjMDkwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1ociB7CiAgICBjb2xvcjogIzk5OTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbGluayB7CiAgICBjb2xvcjogIzAwYzsKfQoKLmNtLW5lZ2F0aXZlIHsKICAgIGNvbG9yOiAjZDQ0Owp9CgouY20tcG9zaXRpdmUgewogICAgY29sb3I6ICMyOTI7Cn0KCi5jbS1oZWFkZXIsIC5jbS1zdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5jbS1lbSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5jbS1saW5rIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7CiAgICBjb2xvcjogI2YwMDsKfQoKLmNtLWludmFsaWRjaGFyIHsKICAgIGNvbG9yOiAjZjAwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjMGYwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjZjIyOwp9CgouQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogI2U4ZjJmZjsKfQoKLyogU1RPUCAqLwoKLyogVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGNvbnRhaW5zIHN0eWxlcyByZWxhdGVkIHRvIHRoZSBtZWNoYW5pY3Mgb2YKICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwoKLkNvZGVNaXJyb3IgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciAqLwogICAgbWFyZ2luLWJvdHRvbTogLTMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IC0zMHB4OwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CgouQ29kZU1pcnJvci1zaXplciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcKICAgYmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZAogICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA2OwogICAgZGlzcGxheTogbm9uZTsKfQoKLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7CiAgICByaWdodDogMDsKICAgIHRvcDogMDsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKfQoKLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgb3ZlcmZsb3cteDogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGxlZnQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHRvcDogMDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgei1pbmRleDogMzsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIG1hcmdpbi1ib3R0b206IC0zMnB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgLyogSGFjayB0byBtYWtlIElFNyBiZWhhdmUgKi8KICAgICp6b29tOiAxOwogICAgKmRpc3BsYXk6IGlubGluZTsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB6LWluZGV4OiA0Owp9CgouQ29kZU1pcnJvci1saW5lcyB7CiAgICBjdXJzb3I6IHRleHQ7Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovCiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLXdpZHRoOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgIG1hcmdpbjogMDsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICB6LWluZGV4OiAyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7Cn0KCi5Db2RlTWlycm9yLXdyYXAgcHJlIHsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKfQoKLkNvZGVNaXJyb3ItY29kZSBwcmUgewogICAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7CiAgICB3aWR0aDogLW1vei1maXQtY29udGVudDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogYXV0bzsKfQoKLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgei1pbmRleDogMDsKfQoKLkNvZGVNaXJyb3ItbGluZXdpZGdldCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi5Db2RlTWlycm9yLXdpZGdldCB7Cn0KCi5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7Cn0KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogMDsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogI2Q5ZDlkOTsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDdkNGYwOwp9CgouY20tc2VhcmNoaW5nIHsKICAgIGJhY2tncm91bmQ6ICNmZmE7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAuNCk7Cn0KCi8qIElFNyBoYWNrIHRvIHByZXZlbnQgaXQgZnJvbSByZXR1cm5pbmcgZnVubnkgb2Zmc2V0VG9wcyBvbiB0aGUgc3BhbnMgKi8KLkNvZGVNaXJyb3Igc3BhbiB7CiAgICAqdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwp9CgpAbWVkaWEgcHJpbnQgewogICAgLyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KICAgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQp9CgouY20tcy1iYXNlMTYtZGFyay5Db2RlTWlycm9yIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogIzIwMjAyMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBib3JkZXItcmlnaHQ6IDBweDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItbGluZW51bWJlciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2IwYjBiMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICM4ZjU1MzY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXRvbSB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1udW1iZXIgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWtleXdvcmQgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tc3RyaW5nIHsKICAgIGNvbG9yOiAjZjRiZjc1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICM2YTlmYjU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZGVmIHsKICAgIGNvbG9yOiAjZDI4NDQ1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICNlMGUwZTA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdGFnIHsKICAgIGNvbG9yOiAjYWM0MTQyOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWxpbmsgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZXJyb3IgewogICAgYmFja2dyb3VuZDogI2FjNDE0MjsKICAgIGNvbG9yOiAjYjBiMGIwOwp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogIzJGMkYyRiAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQpQSwcIIwM1gk4gAABOIAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAc3RhdGljXGNzc1xjb21tb24uY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH1oZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfWZpZWxkc2V0LGltZ3tib3JkZXI6MH1hZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfW9sLHVse2xpc3Qtc3R5bGU6bm9uZX1jYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9cTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfWFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfXN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH1zdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1sZWdlbmR7Y29sb3I6IzAwMH1odG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn1he3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifXB7bWFyZ2luLWJvdHRvbToxOHB4fWgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfWgxe2ZvbnQtc2l6ZToyOHB4fWgye2ZvbnQtc2l6ZToyNHB4fWgze2ZvbnQtc2l6ZToyMXB4fWg0e2ZvbnQtc2l6ZToxOXB4fWg1e2ZvbnQtc2l6ZToxNnB4fWg2e2ZvbnQtc2l6ZToxNHB4fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5sZWZ0e2Zsb2F0OmxlZnR9LnJpZ2h0e2Zsb2F0OnJpZ2h0fS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0udmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmZhZGUtb3V0e29wYWNpdHk6MH0uaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uY29udGFpbmVye3dpZHRoOjEyMDBweDttYXJnaW46YXV0b30uY29udGFpbmVyOTYwe3dpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmctYm90dG9tOjEycHh9Lm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fVBLBwh7vP2MJhQAACYUAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAABzdGF0aWNcY3NzXGhpZ2hsaWdodC5jc3MvKg0KDQpTdW5idXJzdC1saWtlIHN0eWxlIChjKSBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+DQoNCiovDQoNCnByZSBjb2RlIHsNCiAgICBkaXNwbGF5OiBibG9jazsgcGFkZGluZzogMC41ZW07DQogICAgYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmOGY4Zjg7DQp9DQoNCnByZSAuY29tbWVudCwNCnByZSAudGVtcGxhdGVfY29tbWVudCwNCnByZSAuamF2YWRvYyB7DQogICAgY29sb3I6ICNhZWFlYWU7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmtleXdvcmQsDQpwcmUgLnJ1YnkgLmZ1bmN0aW9uIC5rZXl3b3JkLA0KcHJlIC5yZXF1ZXN0LA0KcHJlIC5zdGF0dXMsDQpwcmUgLm5naW54IC50aXRsZSB7DQogICAgY29sb3I6ICNFMjg5NjQ7DQp9DQoNCnByZSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnN1YiAua2V5d29yZCwNCnByZSAubWV0aG9kLA0KcHJlIC5saXN0IC50aXRsZSB7DQogICAgY29sb3I6ICM5OUNGNTA7DQp9DQoNCnByZSAuc3RyaW5nLA0KcHJlIC50YWcgLnZhbHVlLA0KcHJlIC5jZGF0YSwNCnByZSAuZmlsdGVyIC5hcmd1bWVudCwNCnByZSAuYXR0cl9zZWxlY3RvciwNCnByZSAuYXBhY2hlIC5jYnJhY2tldCwNCnByZSAuZGF0ZSwNCnByZSAudGV4IC5jb21tYW5kLA0KcHJlIC5jb2ZmZWVzY3JpcHQgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICM2NUIwNDI7DQp9DQoNCnByZSAuc3Vic3Qgew0KICAgIGNvbG9yOiAjREFFRkEzOw0KfQ0KDQpwcmUgLnJlZ2V4cCB7DQogICAgY29sb3I6ICNFOUMwNjI7DQp9DQoNCnByZSAudGl0bGUsDQpwcmUgLnN1YiAuaWRlbnRpZmllciwNCnByZSAucGksDQpwcmUgLnRhZywNCnByZSAudGFnIC5rZXl3b3JkLA0KcHJlIC5kZWNvcmF0b3IsDQpwcmUgLnNoZWJhbmcsDQpwcmUgLnByb21wdCB7DQogICAgY29sb3I6ICM4OUJERkY7DQp9DQoNCnByZSAuY2xhc3MgLnRpdGxlLA0KcHJlIC5oYXNrZWxsIC50eXBlLA0KcHJlIC5zbWFsbHRhbGsgLmNsYXNzLA0KcHJlIC5qYXZhZG9jdGFnLA0KcHJlIC55YXJkb2N0YWcsDQpwcmUgLnBocGRvYyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCnByZSAuc3ltYm9sLA0KcHJlIC5ydWJ5IC5zeW1ib2wgLnN0cmluZywNCnByZSAubnVtYmVyIHsNCiAgICBjb2xvcjogIzMzODdDQzsNCn0NCg0KcHJlIC5wYXJhbXMsDQpwcmUgLnZhcmlhYmxlLA0KcHJlIC5jbG9qdXJlIC5hdHRyaWJ1dGUgew0KICAgIGNvbG9yOiAjM0U4N0UzOw0KfQ0KDQpwcmUgLmNzcyAudGFnLA0KcHJlIC5ydWxlcyAucHJvcGVydHksDQpwcmUgLnBzZXVkbywNCnByZSAudGV4IC5zcGVjaWFsIHsNCiAgICBjb2xvcjogI0NEQTg2OTsNCn0NCg0KcHJlIC5jc3MgLmNsYXNzIHsNCiAgICBjb2xvcjogIzlCNzAzRjsNCn0NCg0KcHJlIC5ydWxlcyAua2V5d29yZCB7DQogICAgY29sb3I6ICNDNUFGNzU7DQp9DQoNCnByZSAucnVsZXMgLnZhbHVlIHsNCiAgICBjb2xvcjogI0NGNkE0QzsNCn0NCg0KcHJlIC5jc3MgLmlkIHsNCiAgICBjb2xvcjogIzhCOThBQjsNCn0NCg0KcHJlIC5hbm5vdGF0aW9uLA0KcHJlIC5hcGFjaGUgLnNxYnJhY2tldCwNCnByZSAubmdpbnggLmJ1aWx0X2luIHsNCiAgICBjb2xvcjogIzlCODU5RDsNCn0NCg0KcHJlIC5wcmVwcm9jZXNzb3IsDQpwcmUgLnByYWdtYSB7DQogICAgY29sb3I6ICM4OTk2QTg7DQp9DQoNCnByZSAuaGV4Y29sb3IsDQpwcmUgLmNzcyAudmFsdWUgLm51bWJlciB7DQogICAgY29sb3I6ICNERDdCM0I7DQp9DQoNCnByZSAuY3NzIC5mdW5jdGlvbiB7DQogICAgY29sb3I6ICNEQUQwODU7DQp9DQoNCnByZSAuZGlmZiAuaGVhZGVyLA0KcHJlIC5jaHVuaywNCnByZSAudGV4IC5mb3JtdWxhIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEUyMjMxOw0KICAgIGNvbG9yOiAjRjhGOEY4Ow0KICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCn0NCg0KcHJlIC5kaWZmIC5jaGFuZ2Ugew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0QTQxMEQ7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuYWRkaXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTNCMjI7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuZGVsZXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0MjBFMDk7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuY29mZmVlc2NyaXB0IC5qYXZhc2NyaXB0LA0KcHJlIC5qYXZhc2NyaXB0IC54bWwsDQpwcmUgLnRleCAuZm9ybXVsYSwNCnByZSAueG1sIC5qYXZhc2NyaXB0LA0KcHJlIC54bWwgLnZic2NyaXB0LA0KcHJlIC54bWwgLmNzcywNCnByZSAueG1sIC5jZGF0YSB7DQogICAgb3BhY2l0eTogMC41Ow0KfQ0KDQpwcmUgLmdvIC50eXBlbmFtZXsNCiAgICBjb2xvcjogI2ZmYmM1NDsNCn1QSwcIw2jj3l0JAABdCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAc3RhdGljXGNzc1xsaW5nLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDojZjNmM2YzfQojaGVhZGVye2JhY2tncm91bmQ6IzAwOTNjNDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzo0MHB4IDAgNDhweCAwO2NvbG9yOiNmYmZiZmJ9I2hlYWRlciBhOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy1tb3otdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy13ZWJraXQtdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzfQojaGVhZGVyLWltZ3t3aWR0aDo5NnB4O2hlaWdodDo5NnB4O2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe2xpbmUtaGVpZ2h0Ojk0cHg7Y29sb3I6I2ZiZmJmYjtwYWRkaW5nOjA7bWFyZ2luLWxlZnQ6MjRweH0jaGVhZGVyLWggYXtjb2xvcjojZmJmYmZifQojaGVhZGVyLXN1Yntjb2xvcjojZjNmM2YzO21hcmdpbi1sZWZ0OjEuMmVtO2ZvbnQtc2l6ZToxNnB4fQojbmF2e2xpbmUtaGVpZ2h0OjkwcHh9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O21hcmdpbi1sZWZ0OjQ0cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiNmM2YzZjM7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNmb290ZXJ7cGFkZGluZzozMHB4IDQwcHg7Y29sb3I6Izk5OX0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2dvLXRvcHtib3R0b206NTBweDtyaWdodDo0MHB4O3Bvc2l0aW9uOmZpeGVkO2NvbG9yOiNmZmY7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjhweDtvcGFjaXR5Oi40fQojYXJ0aWNsZS1jb250YWluZXJ7aGVpZ2h0OjEwMCV9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHN7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjM2cHg7LW1vei1ib3JkZXItcmFkaXVzOjM2cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjM2cHg7bGluZS1oZWlnaHQ6NTZweDtmb250LXNpemU6MjRweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDo0MHB4O21hcmdpbi1sZWZ0OjhweDtib3JkZXI6NnB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHMgYXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzOmhvdmVye2JveC1zaGFkb3c6MCAwIDRweCAjNjY2Oy1tb3otYm94LXNoYWRvdzowIDAgNHB4ICM2NjY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA0cHggIzY2Nn0KI2FydGljbGUtY29udGFpbmVyIC52aWV3c3t0b3A6MTRweDtsZWZ0OjA7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6MzBweDstbW96LWJvcmRlci1yYWRpdXM6MzBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzBweDtwYWRkaW5nOjA7Ym9yZGVyOjRweCBzb2xpZCAjZmZmO2JveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy1tb3otYm94LXNoYWRvdzowIDAgMnB4ICM5OTk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggIzk5OX0KI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjExNnB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxMXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjojZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2M3B4O2xlZnQ6LTIycHh9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbiAudGl0bGV7Zm9udC1zaXplOjI4cHg7cGFkZGluZy1ib3R0b206MjRweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aW1lLWluZm97Y29sb3I6Izk5OTttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZy1ib3R0b206MjBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZDt0ZXh0LWluZGVudDoxZW07Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIGFydGljbGV7bWFyZ2luLWJvdHRvbTo1MHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWlue21hcmdpbi1sZWZ0OjB9I2FydGljbGUtY29udGFpbmVyIC5hcnRpY2xlLXNpbmdsZSAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tZXRhe3JpZ2h0OjQ0cHg7dG9wOi0zNnB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC52aWV3c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDtib3JkZXI6NnB4IHNvbGlkICNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAudGFne2NvbG9yOiM5OTl9CiNhcnRpY2xlLXBhZ2Vye21hcmdpbi1sZWZ0OjExNnB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVte21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojOTk5O3BhZGRpbmc6MTJweCAxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweH0jYXJ0aWNsZS1wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kOiMwMDc5YmN9CiNjb21tZW50e2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNjb21tZW50IC5tZXRhe3JpZ2h0Oi0yNHB4O3RvcDotMzBweH0jY29tbWVudCAubWV0YSAuY29tbWVudHN7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjB9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbTozMnB4fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnttYXJnaW4tcmlnaHQ6MThweDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHh9CiNjb21tZW50LWxpc3QgLmMtbWV0YSBwe21hcmdpbi1ib3R0b206MH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTpibG9ja30jY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9yOmhvdmVye2NvbG9yOiMwMDViOWJ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseXtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2RkZDtwYWRkaW5nOjNweCAxMHB4fSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9CiNjb21tZW50LWxpc3QgLmMtY29udGVudHtwYWRkaW5nLXRvcDo0cHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2t7Zm9udC1zaXplOjEzcHg7Y29sb3I6I2U2NDM0NjttYXJnaW4tbGVmdDoxMnB4fQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtc2hvd3ttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LXRpdGxle21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0bzttYXJnaW4tYm90dG9tOjMwcHh9I2NvbW1lbnQtZm9ybSAuYy1pbmZve3dpZHRoOjI2JX0jY29tbWVudC1mb3JtIC5jLWluZm8gLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MH0KI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjcwJX0KI2NvbW1lbnQtZm9ybSAuYy1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O21hcmdpbi10b3A6NnB4O3dpZHRoOjUwcHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b319QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDowfSAjYXJ0aWNsZS1jb250YWluZXIgLm1ldGF7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW46YmVmb3Jle2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9ICNuYXYsI2hlYWRlci1oe2xpbmUtaGVpZ2h0OjUwcHh9ICNmb290ZXIgc3BhbntmbG9hdDpub25lO3RleHQtYWxpZ246Y2VudGVyfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaHttYXJnaW4tbGVmdDowfSAjaGVhZGVyLWltZ3tkaXNwbGF5Om5vbmV9ICNjb21tZW50LWZvcm17d2lkdGg6MTAwJX0gI25hdntmbG9hdDpsZWZ0fSNuYXYgbGl7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NDRweH19ClBLBwjPw+rWnCoAAJwqAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXHN0eWxlLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9iZy5wbmciKSByZXBlYXR9CiNoZWFkZXJ7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9oZWFkZXIuZ2lmIikgcmVwZWF0ICM0YzcyOTg7bWluLXdpZHRoOjEyMHB4O3BhZGRpbmc6MzBweCAwO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjUwcHg7LW1vei1ib3JkZXItcmFkaXVzOjUwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwcHh9CiNoZWFkZXItaHtwYWRkaW5nLXRvcDoyNHB4O2ZvbnQtc2l6ZTozMnB4fSNoZWFkZXItaCBhe2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0KI25hdntoZWlnaHQ6NTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym94LXNoYWRvdzowIDAgMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O3BhZGRpbmc6MCAxOHB4fSNuYXYgbGkgYXtmb250LXNpemU6MTZweDtjb2xvcjojMzMzO3BhZGRpbmc6MCAzMnB4O2Rpc3BsYXk6YmxvY2t9I25hdiBsaSBhOmhvdmVye2JvcmRlci1ib3R0b206NHB4IHNvbGlkICMwMDc5YmN9CiNuYXYuZml4ZWR7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTt0b3A6MH0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2Zvb3Rlcntjb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6IzFjMjQyOTtwYWRkaW5nOjI0cHggMH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsZXR0ZXItc3BhY2luZzoxcHh9I2Zvb3RlciBwIGF7Y29sb3I6I2NjYzttYXJnaW46MCAxNnB4fSNmb290ZXIgcCBhOmhvdmVye2NvbG9yOiNmYmZiZmJ9CiNmb290ZXIgcCBhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXt3aWR0aDoxMDhweDtsaW5lLWhlaWdodDoyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnZpZXdzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnRpbWV7Y29sb3I6I2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIGF7Y29sb3I6I2ZmZn0jYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTQwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZXtwYWRkaW5nOjhweCAxNnB4O2JhY2tncm91bmQtY29sb3I6IzRjNzI5ODtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjJweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoycHh9I2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxlIGF7Y29sb3I6I2VlZX0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxOHB4IDI0cHggMjRweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZve21hcmdpbi1ib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoycHg7Y29sb3I6Izk5OX0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLmZhe21hcmdpbi1yaWdodDo4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuc2hhcmUgLmZhe21hcmdpbi1yaWdodDowfQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+KntwYWRkaW5nOjZweCAxOHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+c3Bhbntib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmlnaHR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJpZ2h0Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZHtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC50aW1lLCNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAudmlld3Mgc3Bhbntmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjQ4cHh9CiNjb21tZW50e21hcmdpbi10b3A6LTI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjI0cHg7YmFja2dyb3VuZDojZmZmfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0b30jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxOHB4O3BhZGRpbmctYm90dG9tOjE4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1yZXBseXtjb2xvcjojOTk5fSNjb21tZW50LWxpc3QgLmMtcmVwbHk6aG92ZXJ7Y29sb3I6IzMzM30KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3J7Zm9udC1zaXplOjEzcHh9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhe21hcmdpbi1yaWdodDo2cHh9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YS5sZWZ0e2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI25hdiBsaXtwYWRkaW5nOjAgMTBweH0gI2hlYWRlci1pbWd7ZmxvYXQ6bGVmdDt3aWR0aDo2NHB4O2hlaWdodDo2NHB4fSAjaGVhZGVyLWh7cGFkZGluZzoxN3B4IDA7Zm9udC1zaXplOjI0cHh9ICNoZWFkZXItc3Vie2Rpc3BsYXk6bm9uZX0gI2FydGljbGUtY29udGFpbmVyIC50YWcsI2FydGljbGUtY29udGFpbmVyIC50aW1le2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjY29tbWVudC1saXN0IC5jLWF2YXRhcntkaXNwbGF5Om5vbmV9fQpQSwcIqnrsLo0oAACNKAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGZhdmljb24uaWNvAAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAAAACzfgfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N+B9uzfgfbs34H27N+B9uzfgfbs34H27N9B9uzfgfbs34H27N9B9uzfgfbs34H27N+B9uzfgfbsnwH1q96B8etfhittZNKkLqCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qDDf+6hhf/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+6gQj/uYEI/7mCCP+6gQj/uoII/7qCCP+5gQj/uYEI/7mCCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qCCP+5gQj/uYEI/7qBCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6ggj/uoEI/7qCCP+6ggj/uoEI/7qCCP+6gQj/uoEI/7mBCP+5gQj/uYIH/7mCB/+5ggf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/vIQF/7yEBf+7gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8gwX/vIQF/7yEBf+8gwX/vIQG/7yEBv/AhwP/wIYD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIcE/8CHBP/AhgP/wIYC/8WJAv/FiQH/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WKAv/FiQH/xYoD/8ePDv/Mmif/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yZMX/9avU//hwHX/6dKf//Pnzf/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uNAP/LoD3/8uvd/v79+v7//////////sqOAP7KjQD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44B/8uOAP/LjgD/y40A/8qOAP/LjgD/y44A/8uOAf/LjgH/y44A/8uOAP/LjgD/y44A/8uOAf/KjQD/y48G/9i5c//6+fX+/v///v7+/v/+/v7+yo4A/sqNAP/LjgD/y44A/8qOAP/KjgD/yo4A/8qOAP/LjgD/y44A/8qOAP/LjgD/y44A/8qNAP/LjQD/y44B/8mNAf/HjQj/yo4D/8qNAP/LjQD/yo0A/8qNAP/KjQD/y48C/9CaG//fvnH/9e/g//7+/v7////+/v7+//7+/v7LjgH6y44A/8qNAP/LjgD/y44B/8qOAP/KjgD/yo4A/8uOAP/KjgD/yo4A/8uOAP/LjgH/yo4A/8qNAP/JjAD/x5o0/8Gref+oi0j/zaZO/8WYMP/PnzH/1qY5/9qwT//iwnf/8N+5//v48v/+/v///v7+/////////////v7+/7ySMr67ihn/zJIM/8qOAP/KjQD/yo0A/8qNAP/KjgD/yo4A/8qOAP/KjQD/yo0A/8qNAP/LjgH/0JkY/8mjTf/Qxq3/5eXm/6alo//p5t//xL6x/+Hayf758+P++/bs//38+f/////+/////v7+/v/+/v7////////////+/v7/lZONlJmPef/mzpn/4L1q/9mtSP/UozL/0Zsf/8+WE//PlRH/z5UR/8+XF//Tnyj/2atD/+G/cf/t27P/0MzE/8PDw/7q6ur+tra2/ujo6P60tLX+2tvb/v39/f7+///+/v7+//////7////+/v7+//7+/v/////+/////v////6XlpaVkpKT//b29f/9+/f/+fTn//bt1//y5MX/8N+4/+7csv/v3LP/8eG7//Xpzv/58+T/9/Xy/8nJyv+vr6//paSk/729vf+UlJT/ubm5/6enp/+xsbH/0dHR//z8/P///////v7+//7+/v/+/v7//v7+/////////////v7+/6mpqZiRkZH/8vLy/////v/+/v7//////////////////v7+//7+/v/+/v///v/////////h4eD/urm5/+/v7//s7Oz/19fX/8bGxv/e3t7/9fX1/+rq6/+4uLj/8fHx///////+/v7+//////7+/v/+/v7////////////+/v7/m5ubZ4ODg/Dt7e3///////////7///7+/v7+//7+/v7//v7+/v7+/vn5+f729vb++vr6/ufn6P+3t7f/7e3t//j4+P7d3d3+2NjY/vLy8v7+/v7+2NjY/r6+vv74+Pj+//////////7////+/v7+//7+/v/////+/////v////41NTUjcXFx2Obm5v/////+/////v/////+/v7//////+/v7/7Q0ND/vr6+/rq6uv6+vr7/0dHR/s/Pz/6srKz/Z2dn/isrK/8jIyP/W1tb/6urq/+9vb3+5OTk/uXl5f/a2tr/39/f/vDw8P79/f3//////v7+/v7//////////o2NjSd1dXXa29vb//////7////+//////7+/v/h4eH/tbW1/srKyv/j4+P+5+fn/uPj4//Jycn+vr6+/re3t/8sLCz+AAAA/wAAAP8GBgb/hoaG/9fX1/6+vr7+vLy8/8HBwf++vr7+ubm5/sfHx//x8fH+/////v/////////+4ODgJISEhNnFxcX///////////7/////5+fn/7W1tf/k5OT///////////7//////////v7+/v7g4OD/tra2/66urv9ubm7/WVlZ/4ODg/+7u7v/vr6+/+Tk5P76+vr//f39//z8/P7w8PD/ysrK/7e3t//w8PD///////////+Hh4eAXV1d8aOjo////////////vv7+//BwcH/wcHB/62trf/Gxsb/+vr6///////+/v7//v7+/v/////W1tb/xMTE//b29v/29vb/3d3d/76+vv/k5OT/8fHx//7+/v/+/v7//v7+/v/////9/f3/zc3N/8PDw//7+/v//////4aGhviWlpb/i4uL//f39///////7u7u/6urq/9SUlL/ExMT/2dnZ//R0dH//f39//7+/v////////////Ly8v+4uLj/7+/v//r6+v/AwMD/nJyc/1RUVP9ubm7/3Nzc//7+/v/////+/v7+///////09PT/t7e3/+vr6///////7+/v/+zs7P98fHz/2NjY/v////7n5+f/k5OT/xYWFv8FBQX/Nzc3/5mZmf/7+/v//v7+//////7/////+vr6/8PDw//n5+f/8/Pz/6ysrP85OTn/AAAA/0VFRf6YmJj/9fX1//////7+/v7///////39/f/ExMT/3t7e////////////0dHR/zMzM/+Xl5f//////+fn5/+zs7P/aGho/xcXF/86Ojr/yMjI//7+/v/+/v7////////////4+Pj/vb29/+vr6//w8PD/s7Oz/0xMTP8AAAD/Dg4O/oKCgv/6+vr//////v7+/v///////v7+/8fHx//c3Nz///////////+4uLj/GRkZ/z8/P/7f39/+9vb2/r29vf/b29v+xMTE/tvb2//9/f3+/v7+/v////7////+/////uXl5f65ubn+9vb2//Pz8/++vr7/wcHB/nJycv5+fn7+4ODg///////+/v7+/v7+/v/////4+Pj+vLy8/ubm5v/////+/////vHx8f+ysrL/hYWF/ouLi/709PT/1NTU/729vf/5+fn+//////7+/v7////+//////////729vb+vb29/9bW1v///////f39/8fHx//Ozs7/+fn5/vz8/P7///////////////7////+/////9/f3/65ubn++Pj4/+7u7v7Jycn/+Pj4/v/////y8vL+iIiI/pubm//09PT/yMjI/729vf7n5+f/+vr6/vz8/P76+vr/5+fn/r29vf7Jycn/+vr6////////////8PDw/7e3t//Y2Nj+/f39/v///////////////v////7p6en/t7e3/uLi4v/x8fH/jo6O/nNzc+WQkJD+o6Oj/6CgoP5+fn76Tk5O4ZycnPvh4eH/1tbW/r29vf/AwMD/wcHB/76+vv+5ubn+1tbW/vr6+v//////////////////////6enp/7m5uf7Dw8P+39/f/+jo6P/k5OT+zMzM/7a2tv/d3d3+6urq/4ODg/9wcHD/q6urP3BwcGZFRUVpSkpKZ4WFhV+MjIw4bW1tm3d3d+utra3/2NjY/+Tk5P7l5eX/6enp//b29v7////////////////+/v7/////////////////9fX1/9bW1v/CwsL/vb29/8HBwf/R0dH/5OTk/8bGxv99fX3zY2Njzmtra9IREREA////AP///wC8vLwAAAAAAAAAAADOzs4LdnZ2RW1tbaN7e3vrmZmZ/7e3t//X19f/6Ojo//Dw8P/29vb/+vr6//39/f////////////////////////////f39//q6ur/3d3d/re3t/+Ojo7+fHx84IeHh3K8vLwXcHBwHcPDwwCAgIAAICAgAD8/PwCYmJgAxsbGAJeXlwH///8AysrKDampqVN9fX2OcHBwxXt7e/d3d3f1gYGB+ZGRkfyjo6P7s7Oz+7+/v/vFxcX7xsbG+8DAwPuzs7P7nJyc/IGBgfp4eHj6cXFxzImJiYu+vr48////BaqqqgH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAAAAAABQSwcIqXMT8L4QAAC+EAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAc3RhdGljXGltZy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAc3RhdGljXGltZ1xiZy5wbmeJUE5HDQoaCgAAAA1JSERSAAAAlgAAAJYIAgAAALNj5rUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI2RTRGQ0JFNTVBQUUyMTE5NzAwQjU5OUUyOTNFQTA3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA5NzBGM0NFQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA5NzBGM0NEQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkFBQkJFQTE4RkI1RTIxMUJCRTNBQkY0MzkzOEFFQkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7MjgrrAAAoI0lEQVR42uzd7ZJkR5GtYXVSwP1fKCMQzBwDhHR2aXU/9SoKww5Dbh2Eqn60VWdl7ozwiPCP5cs9Pn399TePx+Nvf/vbp0+fvvvuu1//+td//etfX15ert9/9atfffvtt9dfr99/85vf/OUvf7l+/+qrr/bf6yPXX/fL9dm97frlevH6+PUQL17/7nXv2ZOvX66v2+t78/X7vvf777+/Hnu9sjdc/90brhevv16/XK9cX3H9vmFvYNdfr/fvT9cr11+/++Hn+uX60/X6XtyT98F96vr3+uD1y/XKNfjrndcrvnRjvl7xkevFSWNvuP7dmwntesj1huudE8Uefpec//CHP00EG4ShXL9sthvH3jO5TxbXv3vEZrvvuD5y/fcaxPVfs90b9inj/uqHnwndwycmw9jH9+aN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w3a6wnOpCa4gdQeJQJeeiFsXYlc2FYcbyN0V27XTaTOuRTqGnrcDXNUp4qRkMkYWjkUv7LUnjkZBT5fz/xVgAMwCMiX3lhRvAAAAAElFTkSuQmCCUEsHCJuj1O/zKwAA8ysAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHN0YXRpY1xpbWdcaGVhZGVyLmdpZkdJRjg5YWQAZACzAABNdJpJbZJOdZxIbJBJbpJMc5lKb5RMcphKcJVLcZYAAAAAAAAAAAAAAAAAAAAAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjAxNUFBQzE1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjAxNUFBQzI1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFCRjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgc3RSZWY6ZG9jdW1lbnRJRD0i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Ow0KICAgIHRvcEJ1dHRvbigpOw0KICAgIHJlbmRlck1hcmtkb3duKCk7DQogICAgaW5pdENvbW1lbnQoKTsNCn0pOw0KDQpmdW5jdGlvbiBmaXhIZWFkZXIoKSB7DQogICAgdmFyICRuYXYgPSAkKCcjbmF2Jyk7DQogICAgdmFyIHRvcCA9ICRuYXYub2Zmc2V0KCkudG9wOw0KICAgIGNvbnNvbGUubG9nKHRvcCk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkbmF2LmFkZENsYXNzKCJmaXhlZCIpLnJlbW92ZUNsYXNzKCJ0ZXh0LWNlbnRlciIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG5hdi5yZW1vdmVDbGFzcygiZml4ZWQiKS5hZGRDbGFzcygidGV4dC1jZW50ZXIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiB0b3BCdXR0b24oKSB7DQogICAgdmFyIHRvcCA9ICQoJyNuYXYnKS5vZmZzZXQoKS50b3A7DQogICAgdmFyICR0b3AgPSAkKCcjZ28tdG9wJyk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkdG9wLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdG9wLmFkZENsYXNzKCdoaWRlJyk7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkdG9wLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiAwfSwgNTAwKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pDQp9DQoNCmZ1bmN0aW9uIHJlbmRlck1hcmtkb3duKCkgew0KICAgIHZhciAkbWQgPSAkKCcubWFya2Rvd24nKTsNCiAgICAkbWQuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAkKGl0ZW0pLmh0bWwobWFya2VkKCQoaXRlbSkuaHRtbCgpLnJlcGxhY2UoLyZndDsvZywgJz4nKSkpOw0KICAgIH0pOw0KICAgIHZhciBjb2RlID0gJG1kLmZpbmQoJ3ByZSBjb2RlJyk7DQogICAgaWYgKGNvZGUubGVuZ3RoKSB7DQogICAgICAgICQoIjxsaW5rPiIpLmF0dHIoeyByZWw6ICJzdHlsZXNoZWV0IiwgdHlwZTogInRleHQvY3NzIiwgaHJlZjogIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MifSkuYXBwZW5kVG8oImhlYWQiKTsNCiAgICAgICAgJC5nZXRTY3JpcHQoIi9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBjb2RlLmVhY2goZnVuY3Rpb24gKGksIGl0ZW0pIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGl0ZW0pDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBpbml0Q29tbWVudCgpIHsNCiAgICB2YXIgJGxpc3QgPSAkKCcjY29tbWVudC1saXN0Jyk7DQogICAgaWYgKCEkbGlzdC5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpIHsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXV0aG9yJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF1dGhvciIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtZW1haWwiKSk7DQogICAgICAgICQoJyNjb21tZW50LXVybCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC11cmwiKSk7DQogICAgICAgICQoJyNjb21tZW50LWF2YXRhcicpLmF0dHIoInNyYyIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF2YXRhciIpKTsNCiAgICAgICAgJCgnLmMtYXZhdGFyJykucmVtb3ZlQ2xhc3MoIm51bGwiKTsNCiAgICB9DQogICAgJCgnI2NvbW1lbnQtY29udGVudCcpLm9uKCJmb2N1cyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKCQoJy5jLWF2YXRhcicpLmhhc0NsYXNzKCJudWxsIikpIHsNCiAgICAgICAgICAgICQoJy5jLWF2YXRhci1maWVsZCcpLnJlbW92ZSgpOw0KICAgICAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJCgnLm5vdC1tZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICQoJy5jLWluZm8tZmllbGRzJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LXNob3cnKS5vbigiY2xpY2siLCAiLmVuYWJsZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgiI2NvbW1lbnQtc2hvdyIpLnJlbW92ZSgpOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICB9KTsNCiAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdXRob3IiLCAkKCcjY29tbWVudC1hdXRob3InKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1lbWFpbCIsICQoJyNjb21tZW50LWVtYWlsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtdXJsIiwgJCgnI2NvbW1lbnQtdXJsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtYXZhdGFyIiwganNvbi5jb21tZW50LmF2YXRhcik7DQogICAgICAgICAgICB2YXIgdHBsID0gJCgkKCcjY29tbWVudC10cGwnKS5odG1sKCkpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF2YXRhciIpLmF0dHIoInNyYyIsIGpzb24uY29tbWVudC5hdmF0YXIpLmF0dHIoImFsdCIsIGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF1dGhvciIpLmF0dHIoImhyZWYiLCBqc29uLmNvbW1lbnQudXJsKS50ZXh0KGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXJlcGx5IikuYXR0cigicmVsIiwganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIHRwbC5maW5kKCIuYy1jb250ZW50IikuaHRtbChqc29uLmNvbW1lbnQuY29udGVudCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnBhcmVudF9tZCkgew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikuaHRtbChtYXJrZWQoanNvbi5jb21tZW50LnBhcmVudF9tZCkpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtcC1tZCIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHBsLmF0dHIoImlkIiwgImNvbW1lbnQtIiArIGpzb24uY29tbWVudC5pZCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnN0YXR1cyA9PSAiYXBwcm92ZWQiKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbGlzdC5hcHBlbmQodHBsKTsNCiAgICAgICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhbGVydCgi5o+Q5Lqk5aSx6LSlISIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJGxpc3Qub24oImNsaWNrIiwgIi5jLXJlcGx5IiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgdmFyIHBjID0gJCgnI2NvbW1lbnQtJyArIGlkKTsNCiAgICAgICAgdmFyIG1kID0gIj4gQCIgKyBwYy5maW5kKCIuYy1hdXRob3IiKS50ZXh0KCkgKyAiXG5cbiI7DQogICAgICAgIG1kICs9ICI+ICIgKyBwYy5maW5kKCIuYy1jb250ZW50IikuaHRtbCgpICsgIlxuIjsNCiAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLmJlZm9yZSgnPGRpdiBjbGFzcz0icmVwbHktbWQgbWFya2Rvd24iPicgKyBtYXJrZWQobWQpICsgJzwvZGl2PicpOw0KICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICBpZiAoJCgnI2NvbW1lbnQtc2hvdycpLmxlbmd0aCkgew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtc2hvdyAuZW5hYmxlJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICAgICAgfQ0KICAgICAgICAkKCcuY2FuY2VsLXJlcGx5Jykuc2hvdygpOw0KICAgICAgICB2YXIgdG9wID0gJCgnI2NvbW1lbnQtZm9ybScpLm9mZnNldCgpLnRvcDsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiB0b3B9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnLmNhbmNlbC1yZXBseScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlcGx5LW1kJykucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCn0NClBLBwge4R5ydRIAAHUSAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcanNcdXBsb2FkLmpzZnVuY3Rpb24gaW5pdFVwbG9hZChwKSB7DQogICAgJCgnI2F0dGFjaC1zaG93Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLnRyaWdnZXIoImNsaWNrIik7DQogICAgfSk7DQogICAgJCgnI2F0dGFjaC11cGxvYWQnKS5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoY29uZmlybSgi56uL5Y2z5LiK5LygPyIpKSB7DQogICAgICAgICAgICB2YXIgYmFyID0gJCgnPHAgY2xhc3M9ImZpbGUtcHJvZ3Jlc3MgaW5saW5lLWJsb2NrIj4wJTwvcD4nKTsNCiAgICAgICAgICAgICQoJyNhdHRhY2gtZm9ybScpLmFqYXhTdWJtaXQoew0KICAgICAgICAgICAgICAgICJiZWZvcmVTdWJtaXQiOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQocCkuYmVmb3JlKGJhcik7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAidXBsb2FkUHJvZ3Jlc3MiOiBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCB0b3RhbCwgcGVyY2VudENvbXBsZXRlKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBwZXJjZW50VmFsID0gcGVyY2VudENvbXBsZXRlICsgJyUnOw0KICAgICAgICAgICAgICAgICAgICBiYXIuY3NzKCJ3aWR0aCIsIHBlcmNlbnRWYWwpLmh0bWwocGVyY2VudFZhbCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKGpzb24ubXNnKS5hZGRDbGFzcygiZXJyIik7DQogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXIucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDAwKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKCIvIiArIGpzb24uZmlsZS5VcmwgKyAiJm5ic3A7Jm5ic3A7Jm5ic3A7KEAiICsganNvbi5maWxlLk5hbWUgKyAiKSIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudmFsKCIiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICQodGhpcykudmFsKCIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfVBLBwiIiRf79gQAAPYEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcbGliL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAACEAAABzdGF0aWNcbGliXGNvZGVtaXJyb3ItbW9kZS5taW4uanMhZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9L14oXHMqKShbKistXXwoXGQrKVwuKShccyopLyxlPSIqKy0iO0NvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0PWZ1bmN0aW9uKHIpe3ZhciBuLGk9ci5nZXRDdXJzb3IoKSxvPXIuZ2V0U3RhdGVBZnRlcihpLmxpbmUpLmxpc3QhPT0hMTtpZighb3x8IShuPXIuZ2V0TGluZShpLmxpbmUpLm1hdGNoKHQpKSlyZXR1cm4gci5leGVjQ29tbWFuZCgibmV3bGluZUFuZEluZGVudCIpLHZvaWQgMDt2YXIgbD1uWzFdLGE9bls0XSxzPWUuaW5kZXhPZihuWzJdKT49MD9uWzJdOnBhcnNlSW50KG5bM10sMTApKzErIi4iO3IucmVwbGFjZVNlbGVjdGlvbigiXG4iK2wrcythLCJlbmQiKX19KCksQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4gZS5mPWUuaW5saW5lPXIscih0LGUpfWZ1bmN0aW9uIG4odCxlLHIpe3JldHVybiBlLmY9ZS5ibG9jaz1yLHIodCxlKX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LmxpbmtUaXRsZT0hMSx0LmVtPSExLHQuc3Ryb25nPSExLHQucXVvdGU9MCxnfHx0LmYhPWx8fCh0LmY9Yyx0LmJsb2NrPW8pLHQudHJhaWxpbmdTcGFjZT0wLHQudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsdC50aGlzTGluZUhhc0NvbnRlbnQ9ITEsbnVsbH1mdW5jdGlvbiBvKHQsaSl7dmFyIG89aS5saXN0IT09ITE7aS5saXN0IT09ITEmJmkuaW5kZW50YXRpb25EaWZmPj0wPyhpLmluZGVudGF0aW9uRGlmZjw0JiYoaS5pbmRlbnRhdGlvbi09aS5pbmRlbnRhdGlvbkRpZmYpLGkubGlzdD1udWxsKTppLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbj4wPyhpLmxpc3Q9bnVsbCxpLmxpc3REZXB0aD1NYXRoLmZsb29yKGkuaW5kZW50YXRpb24vNCkpOmkubGlzdCE9PSExJiYoaS5saXN0PSExLGkubGlzdERlcHRoPTApO3ZhciBsPW51bGw7aWYoaS5pbmRlbnRhdGlvbkRpZmY+PTQpcmV0dXJuIGkuaW5kZW50YXRpb24tPTQsdC5za2lwVG9FbmQoKSxrO2lmKHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDtpZihsPXQubWF0Y2goUikpaS5oZWFkZXI9bFswXS5sZW5ndGg8PTY/bFswXS5sZW5ndGg6NjtlbHNlIGlmKGkucHJldkxpbmVIYXNDb250ZW50JiYobD10Lm1hdGNoKEcpKSlpLmhlYWRlcj0iPSI9PWxbMF0uY2hhckF0KDApPzE6MjtlbHNlIGlmKHQuZWF0KCI+IikpZm9yKGkuaW5kZW50YXRpb24rKyxpLnF1b3RlPTEsdC5lYXRTcGFjZSgpO3QuZWF0KCI+Iik7KXQuZWF0U3BhY2UoKSxpLnF1b3RlKys7ZWxzZXtpZigiWyI9PT10LnBlZWsoKSlyZXR1cm4gcih0LGksaCk7aWYodC5tYXRjaChJLCEwKSlyZXR1cm4gQTtpZihpLnByZXZMaW5lSGFzQ29udGVudCYmIW98fCF0Lm1hdGNoKFAsITApJiYhdC5tYXRjaChGLCEwKSl7aWYoZS5mZW5jZWRDb2RlQmxvY2tzJiZ0Lm1hdGNoKC9eYGBgKFtcdysjXSopLywhMCkpcmV0dXJuIGkubG9jYWxNb2RlPXgoUmVnRXhwLiQxKSxpLmxvY2FsTW9kZSYmKGkubG9jYWxTdGF0ZT1pLmxvY2FsTW9kZS5zdGFydFN0YXRlKCkpLG4odCxpLGEpLGt9ZWxzZSBpLmluZGVudGF0aW9uKz00LGkubGlzdD0hMCxpLmxpc3REZXB0aCsrLGUudGFza0xpc3RzJiZ0Lm1hdGNoKEIsITEpJiYoaS50YXNrTGlzdD0hMCl9cmV0dXJuIHIodCxpLGkuaW5saW5lKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9di50b2tlbih0LGUuaHRtbFN0YXRlKTtyZXR1cm4gZyYmInRhZyI9PT1yJiYib3BlblRhZyIhPT1lLmh0bWxTdGF0ZS50eXBlJiYhZS5odG1sU3RhdGUuY29udGV4dCYmKGUuZj1jLGUuYmxvY2s9byksZS5tZF9pbnNpZGUmJi0xIT10LmN1cnJlbnQoKS5pbmRleE9mKCI+IikmJihlLmY9YyxlLmJsb2NrPW8sZS5odG1sU3RhdGUuY29udGV4dD12b2lkIDApLHJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LnNvbCgpJiZ0Lm1hdGNoKC9eYGBgLywhMCk/KGUubG9jYWxNb2RlPWUubG9jYWxTdGF0ZT1udWxsLGUuZj1jLGUuYmxvY2s9byxrKTplLmxvY2FsTW9kZT9lLmxvY2FsTW9kZS50b2tlbih0LGUubG9jYWxTdGF0ZSk6KHQuc2tpcFRvRW5kKCksayl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1bXTtpZih0LnRhc2tPcGVuKXJldHVybiJtZXRhIjtpZih0LnRhc2tDbG9zZWQpcmV0dXJuInByb3BlcnR5IjtpZih0LnN0cm9uZyYmZS5wdXNoKHopLHQuZW0mJmUucHVzaChFKSx0LmxpbmtUZXh0JiZlLnB1c2goTyksdC5jb2RlJiZlLnB1c2goayksdC5oZWFkZXImJihlLnB1c2goQyksZS5wdXNoKEMrdC5oZWFkZXIpKSx0LnF1b3RlJiZlLnB1c2godC5xdW90ZSUyP3c6TCksdC5saXN0IT09ITEpe3ZhciByPSh0Lmxpc3REZXB0aC0xKSUzO3I/MT09PXI/ZS5wdXNoKE0pOmUucHVzaChUKTplLnB1c2goUyl9cmV0dXJuIHQudHJhaWxpbmdTcGFjZU5ld0xpbmU/ZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS1uZXctbGluZSIpOnQudHJhaWxpbmdTcGFjZSYmZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS0iKyh0LnRyYWlsaW5nU3BhY2UlMj8iYSI6ImIiKSksZS5sZW5ndGg/ZS5qb2luKCIgIik6bnVsbH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQubWF0Y2goXywhMCk/cyhlKTp2b2lkIDB9ZnVuY3Rpb24gYyh0LGkpe3ZhciBvPWkudGV4dCh0LGkpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgbylyZXR1cm4gbztpZihpLmxpc3QpcmV0dXJuIGkubGlzdD1udWxsLHMoaSk7aWYoaS50YXNrTGlzdCl7dmFyIGE9IngiIT09dC5tYXRjaChCLCEwKVsxXTtyZXR1cm4gYT9pLnRhc2tPcGVuPSEwOmkudGFza0Nsb3NlZD0hMCxpLnRhc2tMaXN0PSExLHMoaSl9aS50YXNrT3Blbj0hMSxpLnRhc2tDbG9zZWQ9ITE7dmFyIHU9dC5zb2woKSxjPXQubmV4dCgpO2lmKCJcXCI9PT1jKXJldHVybiB0Lm5leHQoKSxzKGkpO2lmKGkubGlua1RpdGxlKXtpLmxpbmtUaXRsZT0hMTt2YXIgaD1jOyIoIj09PWMmJihoPSIpIiksaD0oaCsiIikucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csIlxcJDEiKTt2YXIgZD0iXlxccyooPzpbXiIraCsiXFxcXF0rfFxcXFxcXFxcfFxcXFwuKSIraDtpZih0Lm1hdGNoKG5ldyBSZWdFeHAoZCksITApKXJldHVybiBXfWlmKCJgIj09PWMpe3ZhciBwPXMoaSksZz10LnBvczt0LmVhdFdoaWxlKCJgIik7dmFyIHY9MSt0LnBvcy1nO3JldHVybiBpLmNvZGU/dj09PWI/KGkuY29kZT0hMSxwKTpzKGkpOihiPXYsaS5jb2RlPSEwLHMoaSkpfWlmKGkuY29kZSlyZXR1cm4gcyhpKTtpZigiISI9PT1jJiZ0Lm1hdGNoKC9cW1teXF1dKlxdID8oPzpcKHxcWykvLCExKSlyZXR1cm4gdC5tYXRjaCgvXFtbXlxdXSpcXS8pLGkuaW5saW5lPWkuZj1mLE47aWYoIlsiPT09YyYmdC5tYXRjaCgvLipcXShcKHwgP1xbKS8sITEpKXJldHVybiBpLmxpbmtUZXh0PSEwLHMoaSk7aWYoIl0iPT09YyYmaS5saW5rVGV4dCl7dmFyIHk9cyhpKTtyZXR1cm4gaS5saW5rVGV4dD0hMSxpLmlubGluZT1pLmY9Zix5fWlmKCI8Ij09PWMmJnQubWF0Y2goL14oaHR0cHM/fGZ0cHM/KTpcL1wvKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEgsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXltePiBcXF0rQCg/OlteXFw+XXxcXC4pKz4vLCExKSlyZXR1cm4gcih0LGksbShELCI+IikpO2lmKCI8Ij09PWMmJnQubWF0Y2goL15cdy8sITEpKXtpZigtMSE9dC5zdHJpbmcuaW5kZXhPZigiPiIpKXt2YXIgeD10LnN0cmluZy5zdWJzdHJpbmcoMSx0LnN0cmluZy5pbmRleE9mKCI+IikpOy9tYXJrZG93blxzKj1ccyooJ3wiKXswLDF9MSgnfCIpezAsMX0vLnRlc3QoeCkmJihpLm1kX2luc2lkZT0hMCl9cmV0dXJuIHQuYmFja1VwKDEpLG4odCxpLGwpfWlmKCI8Ij09PWMmJnQubWF0Y2goL15cL1x3Kj8+LykpcmV0dXJuIGkubWRfaW5zaWRlPSExLCJ0YWciO3ZhciBDPSExO2lmKCFlLnVuZGVyc2NvcmVzQnJlYWtXb3JkcyYmIl8iPT09YyYmIl8iIT09dC5wZWVrKCkmJnQubWF0Y2goLyhcdykvLCExKSl7dmFyIGs9dC5wb3MtMjtpZihrPj0wKXt2YXIgdz10LnN0cmluZy5jaGFyQXQoayk7Il8iIT09dyYmdy5tYXRjaCgvKFx3KS8sITEpJiYoQz0hMCl9fXZhciBwPXMoaSk7aWYoIioiPT09Y3x8Il8iPT09YyYmIUMpaWYodSYmIiAiPT09dC5wZWVrKCkpO2Vsc2V7aWYoaS5zdHJvbmc9PT1jJiZ0LmVhdChjKSlyZXR1cm4gaS5zdHJvbmc9ITEscDtpZighaS5zdHJvbmcmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz1jLHMoaSk7aWYoaS5lbT09PWMpcmV0dXJuIGkuZW09ITEscDtpZighaS5lbSlyZXR1cm4gaS5lbT1jLHMoaSl9ZWxzZSBpZigiICI9PT1jJiYodC5lYXQoIioiKXx8dC5lYXQoIl8iKSkpe2lmKCIgIj09PXQucGVlaygpKXJldHVybiBzKGkpO3QuYmFja1VwKDEpfXJldHVybiIgIj09PWMmJih0Lm1hdGNoKC8gKyQvLCExKT9pLnRyYWlsaW5nU3BhY2UrKzppLnRyYWlsaW5nU3BhY2UmJihpLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSEwKSkscyhpKX1mdW5jdGlvbiBmKHQsZSl7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3ZhciBuPXQubmV4dCgpO3JldHVybiIoIj09PW58fCJbIj09PW4/cih0LGUsbShXLCIoIj09PW4/IikiOiJdIikpOiJlcnJvciJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0Lm1hdGNoKC9eW15cXV0qXF06LywhMCk/KGUuZj1kLE8pOnIodCxlLGMpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdC5lYXRTcGFjZSgpP251bGw6KHQubWF0Y2goL15bXlxzXSsvLCEwKSx2b2lkIDA9PT10LnBlZWsoKT9lLmxpbmtUaXRsZT0hMDp0Lm1hdGNoKC9eKD86XHMrKD86Iig/OlteIlxcXXxcXFxcfFxcLikrInwnKD86W14nXFxdfFxcXFx8XFwuKSsnfFwoKD86W14pXFxdfFxcXFx8XFwuKStcKSkpPy8sITApLGUuZj1lLmlubGluZT1jLFcpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIFZbdF18fCh0PSh0KyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpLFZbdF09bmV3IFJlZ0V4cCgiXig/OlteXFxcXF18XFxcXC4pKj8oIit0KyIpIikpLFZbdF19ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIHI9cnx8YyxmdW5jdGlvbihuLGkpe3JldHVybiBuLm1hdGNoKHAoZSkpLGkuaW5saW5lPWkuZj1yLHR9fXZhciBnPUNvZGVNaXJyb3IubW9kZXMuaGFzT3duUHJvcGVydHkoInhtbCIpLHY9Q29kZU1pcnJvci5nZXRNb2RlKHQsZz97bmFtZToieG1sIixodG1sTW9kZTohMH06InRleHQvcGxhaW4iKSx5PXtodG1sOiJodG1sbWl4ZWQiLGpzOiJqYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uIixjOiJ0ZXh0L3gtY3NyYyIsImMrKyI6InRleHQveC1jKytzcmMiLGphdmE6InRleHQveC1qYXZhIixjc2hhcnA6InRleHQveC1jc2hhcnAiLCJjIyI6InRleHQveC1jc2hhcnAiLHNjYWxhOiJ0ZXh0L3gtc2NhbGEifSx4PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9e30sbz1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5tb2RlcylDb2RlTWlycm9yLm1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZvLnB1c2gobCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyluW29bZV1dPW9bZV07dmFyIGE9W107Zm9yKHZhciBsIGluIENvZGVNaXJyb3IubWltZU1vZGVzKUNvZGVNaXJyb3IubWltZU1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZhLnB1c2goe21pbWU6bCxtb2RlOkNvZGVNaXJyb3IubWltZU1vZGVzW2xdfSk7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylyPWFbZV0ubWltZSxpW3JdPWFbZV0ubWltZTtmb3IodmFyIHMgaW4geSkoeVtzXWluIG58fHlbc11pbiBpKSYmKG5bc109eVtzXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdP0NvZGVNaXJyb3IuZ2V0TW9kZSh0LG5bZV0pOm51bGx9fSgpO3ZvaWQgMD09PWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYoZS51bmRlcnNjb3Jlc0JyZWFrV29yZHM9ITApLHZvaWQgMD09PWUuZmVuY2VkQ29kZUJsb2NrcyYmKGUuZmVuY2VkQ29kZUJsb2Nrcz0hMSksdm9pZCAwPT09ZS50YXNrTGlzdHMmJihlLnRhc2tMaXN0cz0hMSk7dmFyIGI9MCxDPSJoZWFkZXIiLGs9ImNvbW1lbnQiLHc9ImF0b20iLEw9Im51bWJlciIsUz0idmFyaWFibGUtMiIsTT0idmFyaWFibGUtMyIsVD0ia2V5d29yZCIsQT0iaHIiLE49InRhZyIsSD0ibGluayIsRD0ibGluayIsTz0ibGluayIsVz0ic3RyaW5nIixFPSJlbSIsej0ic3Ryb25nIixJPS9eKFsqXC09X10pKD86XHMqXDEpezIsfVxzKiQvLFA9L15bKlwtK11ccysvLEY9L15bMC05XStcLlxzKy8sQj0vXlxbKHh8IClcXSg/PVxzKS8sUj0vXiMrLyxHPS9eKD86XD17MSx9fC17MSx9KSQvLF89L15bXiFcW1xdKl9cXDw+YCAiJyhdKy8sVj1bXTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybntmOm8scHJldkxpbmVIYXNDb250ZW50OiExLHRoaXNMaW5lSGFzQ29udGVudDohMSxibG9jazpvLGh0bWxTdGF0ZTpDb2RlTWlycm9yLnN0YXJ0U3RhdGUodiksaW5kZW50YXRpb246MCxpbmxpbmU6Yyx0ZXh0OnUsbGlua1RleHQ6ITEsbGlua1RpdGxlOiExLGVtOiExLHN0cm9uZzohMSxoZWFkZXI6MCx0YXNrTGlzdDohMSxsaXN0OiExLGxpc3REZXB0aDowLHF1b3RlOjAsdHJhaWxpbmdTcGFjZTowLHRyYWlsaW5nU3BhY2VOZXdMaW5lOiExfX0sY29weVN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybntmOnQuZixwcmV2TGluZUhhc0NvbnRlbnQ6dC5wcmV2TGluZUhhc0NvbnRlbnQsdGhpc0xpbmVIYXNDb250ZW50OnQudGhpc0xpbmVIYXNDb250ZW50LGJsb2NrOnQuYmxvY2ssaHRtbFN0YXRlOkNvZGVNaXJyb3IuY29weVN0YXRlKHYsdC5odG1sU3RhdGUpLGluZGVudGF0aW9uOnQuaW5kZW50YXRpb24sbG9jYWxNb2RlOnQubG9jYWxNb2RlLGxvY2FsU3RhdGU6dC5sb2NhbE1vZGU/Q29kZU1pcnJvci5jb3B5U3RhdGUodC5sb2NhbE1vZGUsdC5sb2NhbFN0YXRlKTpudWxsLGlubGluZTp0LmlubGluZSx0ZXh0OnQudGV4dCxsaW5rVGl0bGU6dC5saW5rVGl0bGUsZW06dC5lbSxzdHJvbmc6dC5zdHJvbmcsaGVhZGVyOnQuaGVhZGVyLHRhc2tMaXN0OnQudGFza0xpc3QsbGlzdDp0Lmxpc3QsbGlzdERlcHRoOnQubGlzdERlcHRoLHF1b3RlOnQucXVvdGUsdHJhaWxpbmdTcGFjZTp0LnRyYWlsaW5nU3BhY2UsdHJhaWxpbmdTcGFjZU5ld0xpbmU6dC50cmFpbGluZ1NwYWNlTmV3TGluZSxtZF9pbnNpZGU6dC5tZF9pbnNpZGV9fSx0b2tlbjpmdW5jdGlvbih0LGUpe2lmKHQuc29sKCkpe2lmKHQubWF0Y2goL15ccyokLywhMCkpcmV0dXJuIGUucHJldkxpbmVIYXNDb250ZW50PSExLGkoZSk7ZS5wcmV2TGluZUhhc0NvbnRlbnQ9ZS50aGlzTGluZUhhc0NvbnRlbnQsZS50aGlzTGluZUhhc0NvbnRlbnQ9ITAsZS5oZWFkZXI9MCxlLnRhc2tMaXN0PSExLGUuY29kZT0hMSxlLnRyYWlsaW5nU3BhY2U9MCxlLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSExLGUuZj1lLmJsb2NrO3ZhciByPXQubWF0Y2goL15ccyovLCEwKVswXS5yZXBsYWNlKC9cdC9nLCIgICAgIikubGVuZ3RoLG49NCpNYXRoLmZsb29yKChyLWUuaW5kZW50YXRpb24pLzQpO24+NCYmKG49NCk7dmFyIG89ZS5pbmRlbnRhdGlvbituO2lmKGUuaW5kZW50YXRpb25EaWZmPW8tZS5pbmRlbnRhdGlvbixlLmluZGVudGF0aW9uPW8scj4wKXJldHVybiBudWxsfXJldHVybiBlLmYodCxlKX0sYmxhbmtMaW5lOmksZ2V0VHlwZTpzfX0sInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LW1hcmtkb3duIiwibWFya2Rvd24iKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4gZS50b2tlbml6ZT1yLHIodCxlKX12YXIgaT10Lm5leHQoKTtpZigiPCI9PWkpe2lmKHQuZWF0KCIhIikpcmV0dXJuIHQuZWF0KCJbIik/dC5tYXRjaCgiQ0RBVEFbIik/cihvKCJhdG9tIiwiXV0+IikpOm51bGw6dC5tYXRjaCgiLS0iKT9yKG8oImNvbW1lbnQiLCItLT4iKSk6dC5tYXRjaCgiRE9DVFlQRSIsITAsITApPyh0LmVhdFdoaWxlKC9bXHdcLl9cLV0vKSxyKGwoMSkpKTpudWxsO2lmKHQuZWF0KCI/IikpcmV0dXJuIHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLGUudG9rZW5pemU9bygibWV0YSIsIj8+IiksIm1ldGEiO3ZhciBhPXQuZWF0KCIvIik7eD0iIjtmb3IodmFyIHM7cz10LmVhdCgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7KXgrPXM7cmV0dXJuIHg/KGI9YT8iY2xvc2VUYWciOiJvcGVuVGFnIixlLnRva2VuaXplPW4sInRhZyIpOiJ0YWcgZXJyb3IifWlmKCImIj09aSl7dmFyIHU7cmV0dXJuIHU9dC5lYXQoIiMiKT90LmVhdCgieCIpP3QuZWF0V2hpbGUoL1thLWZBLUZcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXGRdLykmJnQuZWF0KCI7Iik6dC5lYXRXaGlsZSgvW1x3XC5cLTpdLykmJnQuZWF0KCI7IiksdT8iYXRvbSI6ImVycm9yIn1yZXR1cm4gdC5lYXRXaGlsZSgvW14mPF0vKSxudWxsfWZ1bmN0aW9uIG4odCxlKXt2YXIgbj10Lm5leHQoKTtpZigiPiI9PW58fCIvIj09biYmdC5lYXQoIj4iKSlyZXR1cm4gZS50b2tlbml6ZT1yLGI9Ij4iPT1uPyJlbmRUYWciOiJzZWxmY2xvc2VUYWciLCJ0YWciO2lmKCI9Ij09bilyZXR1cm4gYj0iZXF1YWxzIixudWxsO2lmKCI8Ij09bil7ZS50b2tlbml6ZT1yO3ZhciBvPWUudG9rZW5pemUodCxlKTtyZXR1cm4gbz9vKyIgZXJyb3IiOiJlcnJvciJ9cmV0dXJuL1tcJ1wiXS8udGVzdChuKT8oZS50b2tlbml6ZT1pKG4pLGUuc3RyaW5nU3RhcnRDb2w9dC5jb2x1bW4oKSxlLnRva2VuaXplKHQsZSkpOih0LmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKSwid29yZCIpfWZ1bmN0aW9uIGkodCl7dmFyIGU9ZnVuY3Rpb24oZSxyKXtmb3IoOyFlLmVvbCgpOylpZihlLm5leHQoKT09dCl7ci50b2tlbml6ZT1uO2JyZWFrfXJldHVybiJzdHJpbmcifTtyZXR1cm4gZS5pc0luQXR0cmlidXRlPSEwLGV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcig7IW4uZW9sKCk7KXtpZihuLm1hdGNoKGUpKXtpLnRva2VuaXplPXI7YnJlYWt9bi5uZXh0KCl9cmV0dXJuIHR9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpO251bGwhPShpPWUubmV4dCgpKTspe2lmKCI8Ij09aSlyZXR1cm4gbi50b2tlbml6ZT1sKHQrMSksbi50b2tlbml6ZShlLG4pO2lmKCI+Ij09aSl7aWYoMT09dCl7bi50b2tlbml6ZT1yO2JyZWFrfXJldHVybiBuLnRva2VuaXplPWwodC0xKSxuLnRva2VuaXplKGUsbil9fXJldHVybiJtZXRhIn19ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTE7dD49MDt0LS0pQy5jYy5wdXNoKGFyZ3VtZW50c1t0XSl9ZnVuY3Rpb24gcygpe3JldHVybiBhLmFwcGx5KG51bGwsYXJndW1lbnRzKSwhMH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9VC5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0KXx8Qy5jb250ZXh0JiZDLmNvbnRleHQubm9JbmRlbnQ7Qy5jb250ZXh0PXtwcmV2OkMuY29udGV4dCx0YWdOYW1lOnQsaW5kZW50OkMuaW5kZW50ZWQsc3RhcnRPZkxpbmU6ZSxub0luZGVudDpyfX1mdW5jdGlvbiBjKCl7Qy5jb250ZXh0JiYoQy5jb250ZXh0PUMuY29udGV4dC5wcmV2KX1mdW5jdGlvbiBmKHQpe2lmKCJvcGVuVGFnIj09dClyZXR1cm4gQy50YWdOYW1lPXgsQy50YWdTdGFydD1rLmNvbHVtbigpLHMobSxoKEMuc3RhcnRPZkxpbmUpKTtpZigiY2xvc2VUYWciPT10KXt2YXIgZT0hMTtyZXR1cm4gQy5jb250ZXh0P0MuY29udGV4dC50YWdOYW1lIT14JiYoVC5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KEMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiZjKCksZT0hQy5jb250ZXh0fHxDLmNvbnRleHQudGFnTmFtZSE9eCk6ZT0hMCxlJiYodz0iZXJyb3IiKSxzKGQoZSkpfXJldHVybiBzKCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9Qy50YWdOYW1lO3JldHVybiBDLnRhZ05hbWU9Qy50YWdTdGFydD1udWxsLCJzZWxmY2xvc2VUYWciPT1lfHwiZW5kVGFnIj09ZSYmVC5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkoci50b0xvd2VyQ2FzZSgpKT8ocChyLnRvTG93ZXJDYXNlKCkpLHMoKSk6ImVuZFRhZyI9PWU/KHAoci50b0xvd2VyQ2FzZSgpKSx1KHIsdCkscygpKTpzKCl9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiYodz0iZXJyb3IiKSwiZW5kVGFnIj09ZT8oYygpLHMoKSk6KHc9ImVycm9yIixzKGFyZ3VtZW50cy5jYWxsZWUpKX19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU7Oyl7aWYoIUMuY29udGV4dClyZXR1cm47aWYoZT1DLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCFULmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShlKXx8IVQuY29udGV4dEdyYWJiZXJzW2VdLmhhc093blByb3BlcnR5KHQpKXJldHVybjtjKCl9fWZ1bmN0aW9uIG0odCl7cmV0dXJuIndvcmQiPT10Pyh3PSJhdHRyaWJ1dGUiLHMoZyxtKSk6ImVuZFRhZyI9PXR8fCJzZWxmY2xvc2VUYWciPT10P2EoKToodz0iZXJyb3IiLHMobSkpfWZ1bmN0aW9uIGcodCl7aWYoImVxdWFscyI9PXQpcmV0dXJuIHModixtKTtpZihULmFsbG93TWlzc2luZyl7aWYoIndvcmQiPT10KXJldHVybiB3PSJhdHRyaWJ1dGUiLHMoZyxtKX1lbHNlIHc9ImVycm9yIjtyZXR1cm4iZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOnMoKX1mdW5jdGlvbiB2KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6IndvcmQiPT10JiZULmFsbG93VW5xdW90ZWQ/KHc9InN0cmluZyIscygpKToodz0iZXJyb3IiLCJlbmRUYWciPT10fHwic2VsZkNsb3NlVGFnIj09dD9hKCk6cygpKX1mdW5jdGlvbiB5KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6YSgpfXZhciB4LGIsQyxrLHcsTD10LmluZGVudFVuaXQsUz1lLm11bHRpbGluZVRhZ0luZGVudEZhY3Rvcnx8MSxNPWUubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZ3x8ITAsVD1lLmh0bWxNb2RlP3thdXRvU2VsZkNsb3NlcnM6e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxmcmFtZTohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxpbXBsaWNpdGx5Q2xvc2VkOntkZDohMCxsaTohMCxvcHRncm91cDohMCxvcHRpb246ITAscDohMCxycDohMCxydDohMCx0Ym9keTohMCx0ZDohMCx0Zm9vdDohMCx0aDohMCx0cjohMH0sY29udGV4dEdyYWJiZXJzOntkZDp7ZGQ6ITAsZHQ6ITB9LGR0OntkZDohMCxkdDohMH0sbGk6e2xpOiEwfSxvcHRpb246e29wdGlvbjohMCxvcHRncm91cDohMH0sb3B0Z3JvdXA6e29wdGdyb3VwOiEwfSxwOnthZGRyZXNzOiEwLGFydGljbGU6ITAsYXNpZGU6ITAsYmxvY2txdW90ZTohMCxkaXI6ITAsZGl2OiEwLGRsOiEwLGZpZWxkc2V0OiEwLGZvb3RlcjohMCxmb3JtOiEwLGgxOiEwLGgyOiEwLGgzOiEwLGg0OiEwLGg1OiEwLGg2OiEwLGhlYWRlcjohMCxoZ3JvdXA6ITAsaHI6ITAsbWVudTohMCxuYXY6ITAsb2w6ITAscDohMCxwcmU6ITAsc2VjdGlvbjohMCx0YWJsZTohMCx1bDohMH0scnA6e3JwOiEwLHJ0OiEwfSxydDp7cnA6ITAscnQ6ITB9LHRib2R5Ont0Ym9keTohMCx0Zm9vdDohMH0sdGQ6e3RkOiEwLHRoOiEwfSx0Zm9vdDp7dGJvZHk6ITB9LHRoOnt0ZDohMCx0aDohMH0sdGhlYWQ6e3Rib2R5OiEwLHRmb290OiEwfSx0cjp7dHI6ITB9fSxkb05vdEluZGVudDp7cHJlOiEwfSxhbGxvd1VucXVvdGVkOiEwLGFsbG93TWlzc2luZzohMH06e2F1dG9TZWxmQ2xvc2Vyczp7fSxpbXBsaWNpdGx5Q2xvc2VkOnt9LGNvbnRleHRHcmFiYmVyczp7fSxkb05vdEluZGVudDp7fSxhbGxvd1VucXVvdGVkOiExLGFsbG93TWlzc2luZzohMX0sQT1lLmFsaWduQ0RBVEE7cmV0dXJue3N0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57dG9rZW5pemU6cixjYzpbXSxpbmRlbnRlZDowLHN0YXJ0T2ZMaW5lOiEwLHRhZ05hbWU6bnVsbCx0YWdTdGFydDpudWxsLGNvbnRleHQ6bnVsbH19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYoIWUudGFnTmFtZSYmdC5zb2woKSYmKGUuc3RhcnRPZkxpbmU9ITAsZS5pbmRlbnRlZD10LmluZGVudGF0aW9uKCkpLHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDt3PWI9eD1udWxsO3ZhciByPWUudG9rZW5pemUodCxlKTtpZihlLnR5cGU9Yiwocnx8YikmJiJjb21tZW50IiE9cilmb3IoQz1lLGs9dDs7KXt2YXIgbj1lLmNjLnBvcCgpfHxmO2lmKG4oYnx8cikpYnJlYWt9cmV0dXJuIGUuc3RhcnRPZkxpbmU9ITEsdyYmKHI9ImVycm9yIj09dz9yKyIgZXJyb3IiOncpLHJ9LGluZGVudDpmdW5jdGlvbih0LGUsaSl7dmFyIG89dC5jb250ZXh0O2lmKHQudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSlyZXR1cm4gdC5zdHJpbmdTdGFydENvbCsxO2lmKHQudG9rZW5pemUhPW4mJnQudG9rZW5pemUhPXJ8fG8mJm8ubm9JbmRlbnQpcmV0dXJuIGk/aS5tYXRjaCgvXihccyopLylbMF0ubGVuZ3RoOjA7aWYodC50YWdOYW1lKXJldHVybiBNP3QudGFnU3RhcnQrdC50YWdOYW1lLmxlbmd0aCsyOnQudGFnU3RhcnQrTCpTO2lmKEEmJi88IVxbQ0RBVEFcWy8udGVzdChlKSlyZXR1cm4gMDtmb3IobyYmL148XC8vLnRlc3QoZSkmJihvPW8ucHJldik7byYmIW8uc3RhcnRPZkxpbmU7KW89by5wcmV2O3JldHVybiBvP28uaW5kZW50K0w6MH0sZWxlY3RyaWNDaGFyczoiLyIsYmxvY2tDb21tZW50U3RhcnQ6IjwhLS0iLGJsb2NrQ29tbWVudEVuZDoiLS0+Iixjb25maWd1cmF0aW9uOmUuaHRtbE1vZGU/Imh0bWwiOiJ4bWwiLGhlbHBlclR5cGU6ZS5odG1sTW9kZT8iaHRtbCI6InhtbCJ9fSksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIsInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwieG1sIiksQ29kZU1pcnJvci5taW1lTW9kZXMuaGFzT3duUHJvcGVydHkoInRleHQvaHRtbCIpfHxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIse25hbWU6InhtbCIsaHRtbE1vZGU6ITB9KTtQSwcIk9YPXYgyAACIMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAc3RhdGljXGxpYlxjb2RlbWlycm9yLm1pbi5qc3dpbmRvdy5Db2RlTWlycm9yPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQocixuKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQocixuKTt0aGlzLm9wdGlvbnM9bj1ufHx7fTtmb3IodmFyIGkgaW4gYW8pIW4uaGFzT3duUHJvcGVydHkoaSkmJmFvLmhhc093blByb3BlcnR5KGkpJiYobltpXT1hb1tpXSk7aChuKTt2YXIgbz0ic3RyaW5nIj09dHlwZW9mIG4udmFsdWU/MDpuLnZhbHVlLmZpcnN0LGw9dGhpcy5kaXNwbGF5PWUocixvKTtsLndyYXBwZXIuQ29kZU1pcnJvcj10aGlzLHUodGhpcyksbi5hdXRvZm9jdXMmJiFWaSYmcGUodGhpcyksdGhpcy5zdGF0ZT17a2V5TWFwczpbXSxvdmVybGF5czpbXSxtb2RlR2VuOjAsb3ZlcndyaXRlOiExLGZvY3VzZWQ6ITEsc3VwcHJlc3NFZGl0czohMSxwYXN0ZUluY29taW5nOiExLGRyYWdnaW5nVGV4dDohMSxoaWdobGlnaHQ6bmV3ICRufSxzKHRoaXMpLG4ubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIpO3ZhciBhPW4udmFsdWU7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcgd28obi52YWx1ZSxuLm1vZGUpKSxsZSh0aGlzLHBuKSh0aGlzLGEpLEFpJiZzZXRUaW1lb3V0KGlpKGRlLHRoaXMsITApLDIwKSxtZSh0aGlzKTt2YXIgYzt0cnl7Yz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0fWNhdGNoKGYpe31jfHxuLmF1dG9mb2N1cyYmIVZpP3NldFRpbWVvdXQoaWkoRWUsdGhpcyksMjApOnplKHRoaXMpLGxlKHRoaXMsZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gc28pc28ucHJvcGVydHlJc0VudW1lcmFibGUodCkmJnNvW3RdKHRoaXMsblt0XSx1byk7Zm9yKHZhciBlPTA7ZTxwby5sZW5ndGg7KytlKXBvW2VdKHRoaXMpfSkoKX1mdW5jdGlvbiBlKHQsZSl7dmFyIHI9e30sbj1yLmlucHV0PXNpKCJ0ZXh0YXJlYSIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lOyBmb250LXNpemU6IDRweDsiKTtyZXR1cm4gV2k/bi5zdHlsZS53aWR0aD0iMTAwMHB4IjpuLnNldEF0dHJpYnV0ZSgid3JhcCIsIm9mZiIpLEdpJiYobi5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwiZmFsc2UiKSxyLmlucHV0RGl2PXNpKCJkaXYiLFtuXSxudWxsLCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIpLHIuc2Nyb2xsYmFySD1zaSgiZGl2Iixbc2koImRpdiIsbnVsbCxudWxsLCJoZWlnaHQ6IDFweCIpXSwiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIiksci5zY3JvbGxiYXJWPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiAxcHgiKV0sIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpLHIuc2Nyb2xsYmFyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpLHIuZ3V0dGVyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpLHIubGluZURpdj1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWNvZGUiKSxyLnNlbGVjdGlvbkRpdj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSIpLHIuY3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIiksci5vdGhlckN1cnNvcj1zaSgiZGl2IiwiwqAiLCJDb2RlTWlycm9yLWN1cnNvciBDb2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpLHIubWVhc3VyZT1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLW1lYXN1cmUiKSxyLmxpbmVTcGFjZT1zaSgiZGl2Iixbci5tZWFzdXJlLHIuc2VsZWN0aW9uRGl2LHIubGluZURpdixyLmN1cnNvcixyLm90aGVyQ3Vyc29yXSxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKSxyLm1vdmVyPXNpKCJkaXYiLFtzaSgiZGl2Iixbci5saW5lU3BhY2VdLCJDb2RlTWlycm9yLWxpbmVzIildLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpLHIuc2l6ZXI9c2koImRpdiIsW3IubW92ZXJdLCJDb2RlTWlycm9yLXNpemVyIiksci5oZWlnaHRGb3JjZXI9c2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIitUbysicHg7IHdpZHRoOiAxcHg7Iiksci5ndXR0ZXJzPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVycyIpLHIubGluZUd1dHRlcj1udWxsLHIuc2Nyb2xsZXI9c2koImRpdiIsW3Iuc2l6ZXIsci5oZWlnaHRGb3JjZXIsci5ndXR0ZXJzXSwiQ29kZU1pcnJvci1zY3JvbGwiKSxyLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCItMSIpLHIud3JhcHBlcj1zaSgiZGl2Iixbci5pbnB1dERpdixyLnNjcm9sbGJhckgsci5zY3JvbGxiYXJWLHIuc2Nyb2xsYmFyRmlsbGVyLHIuZ3V0dGVyRmlsbGVyLHIuc2Nyb2xsZXJdLCJDb2RlTWlycm9yIiksSGkmJihyLmd1dHRlcnMuc3R5bGUuekluZGV4PS0xLHIuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0PTApLHQuYXBwZW5kQ2hpbGQ/dC5hcHBlbmRDaGlsZChyLndyYXBwZXIpOnQoci53cmFwcGVyKSxHaSYmKG4uc3R5bGUud2lkdGg9IjBweCIpLFdpfHwoci5zY3JvbGxlci5kcmFnZ2FibGU9ITApLEZpPyhyLmlucHV0RGl2LnN0eWxlLmhlaWdodD0iMXB4IixyLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIpOkhpJiYoci5zY3JvbGxiYXJILnN0eWxlLm1pbldpZHRoPXIuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aD0iMThweCIpLHIudmlld09mZnNldD1yLmxhc3RTaXplQz0wLHIuc2hvd2luZ0Zyb209ci5zaG93aW5nVG89ZSxyLmxpbmVOdW1XaWR0aD1yLmxpbmVOdW1Jbm5lcldpZHRoPXIubGluZU51bUNoYXJzPW51bGwsci5wcmV2SW5wdXQ9IiIsci5hbGlnbldpZGdldHM9ITEsci5wb2xsaW5nRmFzdD0hMSxyLnBvbGw9bmV3ICRuLHIuY2FjaGVkQ2hhcldpZHRoPXIuY2FjaGVkVGV4dEhlaWdodD1udWxsLHIubWVhc3VyZUxpbmVDYWNoZT1bXSxyLm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCxyLmluYWNjdXJhdGVTZWxlY3Rpb249ITEsci5tYXhMaW5lPW51bGwsci5tYXhMaW5lTGVuZ3RoPTAsci5tYXhMaW5lQ2hhbmdlZD0hMSxyLndoZWVsRFg9ci53aGVlbERZPXIud2hlZWxTdGFydFg9ci53aGVlbFN0YXJ0WT1udWxsLHJ9ZnVuY3Rpb24gcihlKXtlLmRvYy5tb2RlPXQuZ2V0TW9kZShlLm9wdGlvbnMsZS5kb2MubW9kZU9wdGlvbiksZS5kb2MuaXRlcihmdW5jdGlvbih0KXt0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKX0pLGUuZG9jLmZyb250aWVyPWUuZG9jLmZpcnN0LFcoZSwxMDApLGUuc3RhdGUubW9kZUdlbisrLGUuY3VyT3AmJnVlKGUpfWZ1bmN0aW9uIG4odCl7dC5vcHRpb25zLmxpbmVXcmFwcGluZz8odC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIsdC5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoPSIiKToodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci13cmFwIiwiIiksZih0KSksbyh0KSx1ZSh0KSxfKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkKHQpfSwxMDApfWZ1bmN0aW9uIGkodCl7dmFyIGU9cmUodC5kaXNwbGF5KSxyPXQub3B0aW9ucy5saW5lV3JhcHBpbmcsbj1yJiZNYXRoLm1heCg1LHQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC9uZSh0LmRpc3BsYXkpLTMpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gVnIodC5kb2MsaSk/MDpyPyhNYXRoLmNlaWwoaS50ZXh0Lmxlbmd0aC9uKXx8MSkqZTplfX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQuZG9jLHI9aSh0KTtlLml0ZXIoZnVuY3Rpb24odCl7dmFyIGU9cih0KTtlIT10LmhlaWdodCYmeW4odCxlKX0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dm9bdC5vcHRpb25zLmtleU1hcF0scj1lLnN0eWxlO3QuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20ta2V5bWFwLVxTKy9nLCIiKSsocj8iIGNtLWtleW1hcC0iK3I6IiIpLHQuc3RhdGUuZGlzYWJsZUlucHV0PWUuZGlzYWJsZUlucHV0fWZ1bmN0aW9uIHModCl7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCIiKSt0Lm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XHMpXHMqL2csIiBjbS1zLSIpLF8odCl9ZnVuY3Rpb24gYSh0KXt1KHQpLHVlKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtnKHQpfSwyMCl9ZnVuY3Rpb24gdSh0KXt2YXIgZT10LmRpc3BsYXkuZ3V0dGVycyxyPXQub3B0aW9ucy5ndXR0ZXJzO2FpKGUpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dLG89ZS5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlciAiK2kpKTsiQ29kZU1pcnJvci1saW5lbnVtYmVycyI9PWkmJih0LmRpc3BsYXkubGluZUd1dHRlcj1vLG8uc3R5bGUud2lkdGg9KHQuZGlzcGxheS5saW5lTnVtV2lkdGh8fDEpKyJweCIpfWUuc3R5bGUuZGlzcGxheT1uPyIiOiJub25lIn1mdW5jdGlvbiBjKHQsZSl7aWYoMD09ZS5oZWlnaHQpcmV0dXJuIDA7Zm9yKHZhciByLG49ZS50ZXh0Lmxlbmd0aCxpPWU7cj1ScihpKTspe3ZhciBvPXIuZmluZCgpO2k9Z24odCxvLmZyb20ubGluZSksbis9by5mcm9tLmNoLW8udG8uY2h9Zm9yKGk9ZTtyPUJyKGkpOyl7dmFyIG89ci5maW5kKCk7bi09aS50ZXh0Lmxlbmd0aC1vLmZyb20uY2gsaT1nbih0LG8udG8ubGluZSksbis9aS50ZXh0Lmxlbmd0aC1vLnRvLmNofXJldHVybiBufWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2M7ZS5tYXhMaW5lPWduKHIsci5maXJzdCksZS5tYXhMaW5lTGVuZ3RoPWMocixlLm1heExpbmUpLGUubWF4TGluZUNoYW5nZWQ9ITAsci5pdGVyKGZ1bmN0aW9uKHQpe3ZhciBuPWMocix0KTtuPmUubWF4TGluZUxlbmd0aCYmKGUubWF4TGluZUxlbmd0aD1uLGUubWF4TGluZT10KX0pfWZ1bmN0aW9uIGgodCl7dmFyIGU9dGkodC5ndXR0ZXJzLCJDb2RlTWlycm9yLWxpbmVudW1iZXJzIik7LTE9PWUmJnQubGluZU51bWJlcnM/dC5ndXR0ZXJzPXQuZ3V0dGVycy5jb25jYXQoWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0pOmU+LTEmJiF0LmxpbmVOdW1iZXJzJiYodC5ndXR0ZXJzPXQuZ3V0dGVycy5zbGljZSgwKSx0Lmd1dHRlcnMuc3BsaWNlKGUsMSkpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2MuaGVpZ2h0LG49citGKGUpO2Uuc2l6ZXIuc3R5bGUubWluSGVpZ2h0PWUuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcD1uKyJweCIsZS5ndXR0ZXJzLnN0eWxlLmhlaWdodD1NYXRoLm1heChuLGUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LVRvKSsicHgiO3ZhciBpPU1hdGgubWF4KG4sZS5zY3JvbGxlci5zY3JvbGxIZWlnaHQpLG89ZS5zY3JvbGxlci5zY3JvbGxXaWR0aD5lLnNjcm9sbGVyLmNsaWVudFdpZHRoKzEsbD1pPmUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KzE7bD8oZS5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhclYuc3R5bGUuYm90dG9tPW8/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9aS1lLnNjcm9sbGVyLmNsaWVudEhlaWdodCtlLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KyJweCIpOihlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9IjAiKSxvPyhlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFySC5zdHlsZS5yaWdodD1sP2RpKGUubWVhc3VyZSkrInB4IjoiMCIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9ZS5zY3JvbGxlci5zY3JvbGxXaWR0aC1lLnNjcm9sbGVyLmNsaWVudFdpZHRoK2Uuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCsicHgiKTooZS5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXk9IiIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjAiKSxvJiZsPyhlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoPWRpKGUubWVhc3VyZSkrInB4Iik6ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixvJiZ0Lm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXImJnQub3B0aW9ucy5maXhlZEd1dHRlcj8oZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodD1kaShlLm1lYXN1cmUpKyJweCIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGg9ZS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCIpOmUuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXk9IiIsUGkmJjA9PT1kaShlLm1lYXN1cmUpJiYoZS5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPWUuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQ9Umk/IjE4cHgiOiIxMnB4IixlLnNjcm9sbGJhclYuc3R5bGUucG9pbnRlckV2ZW50cz1lLnNjcm9sbGJhckguc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXQuc2Nyb2xsZXIuc2Nyb2xsVG9wLGk9dC53cmFwcGVyLmNsaWVudEhlaWdodDsibnVtYmVyIj09dHlwZW9mIHI/bj1yOnImJihuPXIudG9wLGk9ci5ib3R0b20tci50b3ApLG49TWF0aC5mbG9vcihuLUkodCkpO3ZhciBvPU1hdGguY2VpbChuK2kpO3JldHVybntmcm9tOnhuKGUsbiksdG86eG4oZSxvKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10LmRpc3BsYXk7aWYoZS5hbGlnbldpZGdldHN8fGUuZ3V0dGVycy5maXJzdENoaWxkJiZ0Lm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgcj15KGUpLWUuc2Nyb2xsZXIuc2Nyb2xsTGVmdCt0LmRvYy5zY3JvbGxMZWZ0LG49ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGk9cisicHgiLG89ZS5saW5lRGl2LmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpaWYoby5hbGlnbmFibGUpZm9yKHZhciBsPTAscz1vLmFsaWduYWJsZTtsPHMubGVuZ3RoOysrbClzW2xdLnN0eWxlLmxlZnQ9aTt0Lm9wdGlvbnMuZml4ZWRHdXR0ZXImJihlLmd1dHRlcnMuc3R5bGUubGVmdD1yK24rInB4Iil9fWZ1bmN0aW9uIG0odCl7aWYoIXQub3B0aW9ucy5saW5lTnVtYmVycylyZXR1cm4hMTt2YXIgZT10LmRvYyxyPXYodC5vcHRpb25zLGUuZmlyc3QrZS5zaXplLTEpLG49dC5kaXNwbGF5O2lmKHIubGVuZ3RoIT1uLmxpbmVOdW1DaGFycyl7dmFyIGk9bi5tZWFzdXJlLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzaSgiZGl2IixyKV0sIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSksbz1pLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsbD1pLm9mZnNldFdpZHRoLW87cmV0dXJuIG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD0iIixuLmxpbmVOdW1Jbm5lcldpZHRoPU1hdGgubWF4KG8sbi5saW5lR3V0dGVyLm9mZnNldFdpZHRoLWwpLG4ubGluZU51bVdpZHRoPW4ubGluZU51bUlubmVyV2lkdGgrbCxuLmxpbmVOdW1DaGFycz1uLmxpbmVOdW1Jbm5lcldpZHRoP3IubGVuZ3RoOi0xLG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD1uLmxpbmVOdW1XaWR0aCsicHgiLCEwfXJldHVybiExfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gU3RyaW5nKHQubGluZU51bWJlckZvcm1hdHRlcihlK3QuZmlyc3RMaW5lTnVtYmVyKSl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZmkodC5zY3JvbGxlcikubGVmdC1maSh0LnNpemVyKS5sZWZ0fWZ1bmN0aW9uIGIodCxlLHIsbil7Zm9yKHZhciBpLG89dC5kaXNwbGF5LnNob3dpbmdGcm9tLGw9dC5kaXNwbGF5LnNob3dpbmdUbyxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLGE9ITA7O2E9ITEpe3ZhciB1PXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtpZigheCh0LGUscyxuKSlicmVhaztpZihpPSEwLGU9W10sQSh0KSxkKHQpLGEmJnQub3B0aW9ucy5saW5lV3JhcHBpbmcmJnUhPXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCluPSEwO2Vsc2UgaWYobj0hMSxyJiYocj1NYXRoLm1pbih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIm51bWJlciI9PXR5cGVvZiByP3I6ci50b3ApKSxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLHMuZnJvbT49dC5kaXNwbGF5LnNob3dpbmdGcm9tJiZzLnRvPD10LmRpc3BsYXkuc2hvd2luZ1RvKWJyZWFrfXJldHVybiBpJiYoVW4odCwidXBkYXRlIix0KSwodC5kaXNwbGF5LnNob3dpbmdGcm9tIT1vfHx0LmRpc3BsYXkuc2hvd2luZ1RvIT1sKSYmVW4odCwidmlld3BvcnRDaGFuZ2UiLHQsdC5kaXNwbGF5LnNob3dpbmdGcm9tLHQuZGlzcGxheS5zaG93aW5nVG8pKSxpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9dC5kaXNwbGF5LG89dC5kb2M7aWYoIWkud3JhcHBlci5jbGllbnRXaWR0aClyZXR1cm4gaS5zaG93aW5nRnJvbT1pLnNob3dpbmdUbz1vLmZpcnN0LGkudmlld09mZnNldD0wLHZvaWQgMDtpZighKCFuJiYwPT1lLmxlbmd0aCYmci5mcm9tPmkuc2hvd2luZ0Zyb20mJnIudG88aS5zaG93aW5nVG8pKXttKHQpJiYoZT1be2Zyb206by5maXJzdCx0bzpvLmZpcnN0K28uc2l6ZX1dKTt2YXIgbD1pLnNpemVyLnN0eWxlLm1hcmdpbkxlZnQ9aS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCI7aS5zY3JvbGxiYXJILnN0eWxlLmxlZnQ9dC5vcHRpb25zLmZpeGVkR3V0dGVyP2w6IjAiO3ZhciBzPTEvMDtpZih0Lm9wdGlvbnMubGluZU51bWJlcnMpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpZVthXS5kaWZmJiZlW2FdLmZyb208cyYmKHM9ZVthXS5mcm9tKTt2YXIgdT1vLmZpcnN0K28uc2l6ZSxjPU1hdGgubWF4KHIuZnJvbS10Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4sby5maXJzdCksZj1NYXRoLm1pbih1LHIudG8rdC5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtpZihpLnNob3dpbmdGcm9tPGMmJmMtaS5zaG93aW5nRnJvbTwyMCYmKGM9TWF0aC5tYXgoby5maXJzdCxpLnNob3dpbmdGcm9tKSksaS5zaG93aW5nVG8+ZiYmaS5zaG93aW5nVG8tZjwyMCYmKGY9TWF0aC5taW4odSxpLnNob3dpbmdUbykpLFFpKWZvcihjPWJuKEdyKG8sZ24obyxjKSkpO3U+ZiYmVnIobyxnbihvLGYpKTspKytmO3ZhciBoPVt7ZnJvbTpNYXRoLm1heChpLnNob3dpbmdGcm9tLG8uZmlyc3QpLHRvOk1hdGgubWluKGkuc2hvd2luZ1RvLHUpfV07aWYoaD1oWzBdLmZyb20+PWhbMF0udG8/W106TChoLGUpLFFpKWZvcih2YXIgYT0wO2E8aC5sZW5ndGg7KythKWZvcih2YXIgZCxwPWhbYV07ZD1CcihnbihvLHAudG8tMSkpOyl7dmFyIGc9ZC5maW5kKCkuZnJvbS5saW5lO2lmKCEoZz5wLmZyb20pKXtoLnNwbGljZShhLS0sMSk7YnJlYWt9cC50bz1nfWZvcih2YXIgdj0wLGE9MDthPGgubGVuZ3RoOysrYSl7dmFyIHA9aFthXTtwLmZyb208YyYmKHAuZnJvbT1jKSxwLnRvPmYmJihwLnRvPWYpLHAuZnJvbT49cC50bz9oLnNwbGljZShhLS0sMSk6dis9cC50by1wLmZyb219aWYoIW4mJnY9PWYtYyYmYz09aS5zaG93aW5nRnJvbSYmZj09aS5zaG93aW5nVG8pcmV0dXJuIHcodCksdm9pZCAwO2guc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmZyb20tZS5mcm9tfSk7dHJ5e3ZhciB5PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYil7fS43KihmLWMpPnYmJihpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIpLFModCxjLGYsaCxzKSxpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0iIix5JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT15JiZ5Lm9mZnNldEhlaWdodCYmeS5mb2N1cygpO3ZhciB4PWMhPWkuc2hvd2luZ0Zyb218fGYhPWkuc2hvd2luZ1RvfHxpLmxhc3RTaXplQyE9aS53cmFwcGVyLmNsaWVudEhlaWdodDtyZXR1cm4geCYmKGkubGFzdFNpemVDPWkud3JhcHBlci5jbGllbnRIZWlnaHQsVyh0LDQwMCkpLGkuc2hvd2luZ0Zyb209YyxpLnNob3dpbmdUbz1mLEModCksdyh0KSwhMH19ZnVuY3Rpb24gQyh0KXtmb3IodmFyIGUscj10LmRpc3BsYXksbj1yLmxpbmVEaXYub2Zmc2V0VG9wLGk9ci5saW5lRGl2LmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpaWYoaS5saW5lT2JqKXtpZihIaSl7dmFyIG89aS5vZmZzZXRUb3AraS5vZmZzZXRIZWlnaHQ7ZT1vLW4sbj1vfWVsc2V7dmFyIGw9ZmkoaSk7ZT1sLmJvdHRvbS1sLnRvcH12YXIgcz1pLmxpbmVPYmouaGVpZ2h0LWU7aWYoMj5lJiYoZT1yZShyKSkscz4uMDAxfHwtLjAwMT5zKXt5bihpLmxpbmVPYmosZSk7dmFyIGE9aS5saW5lT2JqLndpZGdldHM7aWYoYSlmb3IodmFyIHU9MDt1PGEubGVuZ3RoOysrdSlhW3VdLmhlaWdodD1hW3VdLm5vZGUub2Zmc2V0SGVpZ2h0fX19ZnVuY3Rpb24gdyh0KXt2YXIgZT10LmRpc3BsYXkudmlld09mZnNldD1Dbih0LGduKHQuZG9jLHQuZGlzcGxheS5zaG93aW5nRnJvbSkpO3QuZGlzcGxheS5tb3Zlci5zdHlsZS50b3A9ZSsicHgifWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RofHwwO24+cjsrK3Ipe2Zvcih2YXIgaT1lW3JdLG89W10sbD1pLmRpZmZ8fDAscz0wLGE9dC5sZW5ndGg7YT5zOysrcyl7dmFyIHU9dFtzXTtpLnRvPD11LmZyb20mJmkuZGlmZj9vLnB1c2goe2Zyb206dS5mcm9tK2wsdG86dS50bytsfSk6aS50bzw9dS5mcm9tfHxpLmZyb20+PXUudG8/by5wdXNoKHUpOihpLmZyb20+dS5mcm9tJiZvLnB1c2goe2Zyb206dS5mcm9tLHRvOmkuZnJvbX0pLGkudG88dS50byYmby5wdXNoKHtmcm9tOmkudG8rbCx0bzp1LnRvK2x9KSl9dD1vfXJldHVybiB0fWZ1bmN0aW9uIGsodCl7Zm9yKHZhciBlPXQuZGlzcGxheSxyPXt9LG49e30saT1lLmd1dHRlcnMuZmlyc3RDaGlsZCxvPTA7aTtpPWkubmV4dFNpYmxpbmcsKytvKXJbdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0TGVmdCxuW3Qub3B0aW9ucy5ndXR0ZXJzW29dXT1pLm9mZnNldFdpZHRoO3JldHVybntmaXhlZFBvczp5KGUpLGd1dHRlclRvdGFsV2lkdGg6ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGd1dHRlckxlZnQ6cixndXR0ZXJXaWR0aDpuLHdyYXBwZXJXaWR0aDplLndyYXBwZXIuY2xpZW50V2lkdGh9fWZ1bmN0aW9uIFModCxlLHIsbixpKXtmdW5jdGlvbiBvKGUpe3ZhciByPWUubmV4dFNpYmxpbmc7cmV0dXJuIFdpJiZLaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD09ZT8oZS5zdHlsZS5kaXNwbGF5PSJub25lIixlLmxpbmVPYmo9bnVsbCk6ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLHJ9dmFyIGw9ayh0KSxzPXQuZGlzcGxheSxhPXQub3B0aW9ucy5saW5lTnVtYmVycztuLmxlbmd0aHx8V2kmJnQuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXR8fGFpKHMubGluZURpdik7dmFyIHU9cy5saW5lRGl2LGM9dS5maXJzdENoaWxkLGY9bi5zaGlmdCgpLGg9ZTtmb3IodC5kb2MuaXRlcihlLHIsZnVuY3Rpb24oZSl7aWYoZiYmZi50bz09aCYmKGY9bi5zaGlmdCgpKSxWcih0LmRvYyxlKSl7aWYoMCE9ZS5oZWlnaHQmJnluKGUsMCksZS53aWRnZXRzJiZjJiZjLnByZXZpb3VzU2libGluZylmb3IodmFyIHI9MDtyPGUud2lkZ2V0cy5sZW5ndGg7KytyKXt2YXIgcz1lLndpZGdldHNbcl07aWYocy5zaG93SWZIaWRkZW4pe3ZhciBkPWMucHJldmlvdXNTaWJsaW5nO2lmKC9wcmUvaS50ZXN0KGQubm9kZU5hbWUpKXt2YXIgcD1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpO2QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocCxkKSxwLmFwcGVuZENoaWxkKGQpLGQ9cH12YXIgZz1kLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzLm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKSk7cy5oYW5kbGVNb3VzZUV2ZW50c3x8KGcuaWdub3JlRXZlbnRzPSEwKSxUKHMsZyxkLGwpfX19ZWxzZSBpZihmJiZmLmZyb208PWgmJmYudG8+aCl7Zm9yKDtjLmxpbmVPYmohPWU7KWM9byhjKTthJiZoPj1pJiZjLmxpbmVOdW1iZXImJmNpKGMubGluZU51bWJlcix2KHQub3B0aW9ucyxoKSksYz1jLm5leHRTaWJsaW5nfWVsc2V7aWYoZS53aWRnZXRzKWZvcih2YXIgbSx5PTAsYj1jO2ImJjIwPnk7Kyt5LGI9Yi5uZXh0U2libGluZylpZihiLmxpbmVPYmo9PWUmJi9kaXYvaS50ZXN0KGIubm9kZU5hbWUpKXttPWI7YnJlYWt9dmFyIHg9TSh0LGUsaCxsLG0pO2lmKHghPW0pdS5pbnNlcnRCZWZvcmUoeCxjKTtlbHNle2Zvcig7YyE9bTspYz1vKGMpO2M9Yy5uZXh0U2libGluZ314LmxpbmVPYmo9ZX0rK2h9KTtjOyljPW8oYyl9ZnVuY3Rpb24gTSh0LGUscixuLGkpe3ZhciBvLGw9cm4odCxlKSxzPWwucHJlLGE9ZS5ndXR0ZXJNYXJrZXJzLHU9dC5kaXNwbGF5LGM9bC5iZ0NsYXNzP2wuYmdDbGFzcysiICIrKGUuYmdDbGFzc3x8IiIpOmUuYmdDbGFzcztpZighKHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YXx8Y3x8ZS53cmFwQ2xhc3N8fGUud2lkZ2V0cykpcmV0dXJuIHM7aWYoaSl7aS5hbGlnbmFibGU9bnVsbDtmb3IodmFyIGYsaD0hMCxkPTAscD1udWxsLGc9aS5maXJzdENoaWxkO2c7Zz1mKWlmKGY9Zy5uZXh0U2libGluZywvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChnLmNsYXNzTmFtZSkpe2Zvcih2YXIgbT0wO208ZS53aWRnZXRzLmxlbmd0aDsrK20pe3ZhciB5PWUud2lkZ2V0c1ttXTtpZih5Lm5vZGU9PWcuZmlyc3RDaGlsZCl7eS5hYm92ZXx8cHx8KHA9ZyksVCh5LGcsaSxuKSwrK2Q7YnJlYWt9fWlmKG09PWUud2lkZ2V0cy5sZW5ndGgpe2g9ITE7YnJlYWt9fWVsc2UgaS5yZW1vdmVDaGlsZChnKTtpLmluc2VydEJlZm9yZShzLHApLGgmJmQ9PWUud2lkZ2V0cy5sZW5ndGgmJihvPWksaS5jbGFzc05hbWU9ZS53cmFwQ2xhc3N8fCIiKX1pZihvfHwobz1zaSgiZGl2IixudWxsLGUud3JhcENsYXNzLCJwb3NpdGlvbjogcmVsYXRpdmUiKSxvLmFwcGVuZENoaWxkKHMpKSxjJiZvLmluc2VydEJlZm9yZShzaSgiZGl2IixudWxsLGMrIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIiksby5maXJzdENoaWxkKSx0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEpe3ZhciBiPW8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiKyh0Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bi5maXhlZFBvczotbi5ndXR0ZXJUb3RhbFdpZHRoKSsicHgiKSxvLmZpcnN0Q2hpbGQpO2lmKHQub3B0aW9ucy5maXhlZEd1dHRlciYmKG8uYWxpZ25hYmxlfHwoby5hbGlnbmFibGU9W10pKS5wdXNoKGIpLCF0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEmJmFbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXXx8KG8ubGluZU51bWJlcj1iLmFwcGVuZENoaWxkKHNpKCJkaXYiLHYodC5vcHRpb25zLHIpLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIituLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSsicHg7IHdpZHRoOiAiK3UubGluZU51bUlubmVyV2lkdGgrInB4IikpKSxhKWZvcih2YXIgeD0wO3g8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysreCl7dmFyIEM9dC5vcHRpb25zLmd1dHRlcnNbeF0sdz1hLmhhc093blByb3BlcnR5KEMpJiZhW0NdO3cmJmIuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3ddLCJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFtDXSsicHg7IHdpZHRoOiAiK24uZ3V0dGVyV2lkdGhbQ10rInB4IikpfX1pZihIaSYmKG8uc3R5bGUuekluZGV4PTIpLGUud2lkZ2V0cyYmbyE9aSlmb3IodmFyIG09MCxMPWUud2lkZ2V0czttPEwubGVuZ3RoOysrbSl7dmFyIHk9TFttXSxrPXNpKCJkaXYiLFt5Lm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTt5LmhhbmRsZU1vdXNlRXZlbnRzfHwoay5pZ25vcmVFdmVudHM9ITApLFQoeSxrLG8sbikseS5hYm92ZT9vLmluc2VydEJlZm9yZShrLHQub3B0aW9ucy5saW5lTnVtYmVycyYmMCE9ZS5oZWlnaHQ/YjpzKTpvLmFwcGVuZENoaWxkKGspLFVuKHksInJlZHJhdyIpfXJldHVybiBvfWZ1bmN0aW9uIFQodCxlLHIsbil7aWYodC5ub0hTY3JvbGwpeyhyLmFsaWduYWJsZXx8KHIuYWxpZ25hYmxlPVtdKSkucHVzaChlKTt2YXIgaT1uLndyYXBwZXJXaWR0aDtlLnN0eWxlLmxlZnQ9bi5maXhlZFBvcysicHgiLHQuY292ZXJHdXR0ZXJ8fChpLT1uLmd1dHRlclRvdGFsV2lkdGgsZS5zdHlsZS5wYWRkaW5nTGVmdD1uLmd1dHRlclRvdGFsV2lkdGgrInB4IiksZS5zdHlsZS53aWR0aD1pKyJweCJ9dC5jb3Zlckd1dHRlciYmKGUuc3R5bGUuekluZGV4PTUsZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHQubm9IU2Nyb2xsfHwoZS5zdHlsZS5tYXJnaW5MZWZ0PS1uLmd1dHRlclRvdGFsV2lkdGgrInB4IikpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5kaXNwbGF5LHI9amUodC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvKTtpZihyfHx0Lm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3Rpbmc/SCh0KTplLmN1cnNvci5zdHlsZS5kaXNwbGF5PWUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIscj9lLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSJub25lIjpOKHQpLHQub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKXt2YXIgbj1RKHQsdC5kb2Muc2VsLmhlYWQsImRpdiIpLGk9ZmkoZS53cmFwcGVyKSxvPWZpKGUubGluZURpdik7ZS5pbnB1dERpdi5zdHlsZS50b3A9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50SGVpZ2h0LTEwLG4udG9wK28udG9wLWkudG9wKSkrInB4IixlLmlucHV0RGl2LnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50V2lkdGgtMTAsbi5sZWZ0K28ubGVmdC1pLmxlZnQpKSsicHgifX1mdW5jdGlvbiBIKHQpe3ZhciBlPXQuZGlzcGxheSxyPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2Iik7ZS5jdXJzb3Iuc3R5bGUubGVmdD1yLmxlZnQrInB4IixlLmN1cnNvci5zdHlsZS50b3A9ci50b3ArInB4IixlLmN1cnNvci5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxyLmJvdHRvbS1yLnRvcCkqdC5vcHRpb25zLmN1cnNvckhlaWdodCsicHgiLGUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5vdGhlcj8oZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLGUub3RoZXJDdXJzb3Iuc3R5bGUubGVmdD1yLm90aGVyLmxlZnQrInB4IixlLm90aGVyQ3Vyc29yLnN0eWxlLnRvcD1yLm90aGVyLnRvcCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0PS44NSooci5vdGhlci5ib3R0b20tci5vdGhlci50b3ApKyJweCIpOmUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZnVuY3Rpb24gTih0KXtmdW5jdGlvbiBlKHQsZSxyLG4pezA+ZSYmKGU9MCksbC5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLXNlbGVjdGVkIiwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiK3QrInB4OyB0b3A6ICIrZSsicHg7IHdpZHRoOiAiKyhudWxsPT1yP3MtdDpyKSsicHg7IGhlaWdodDogIisobi1lKSsicHgiKSl9ZnVuY3Rpb24gcihyLG4sbyl7ZnVuY3Rpb24gbChlLG4pe3JldHVybiBxKHQsWWUocixlKSwiZGl2IixmLG4pfXZhciB1LGMsZj1nbihpLHIpLGg9Zi50ZXh0Lmxlbmd0aDtyZXR1cm4gZ2kod24oZiksbnx8MCxudWxsPT1vP2g6byxmdW5jdGlvbih0LHIsaSl7dmFyIGYsZCxwLGc9bCh0LCJsZWZ0Iik7aWYodD09cilmPWcsZD1wPWcubGVmdDtlbHNle2lmKGY9bChyLTEsInJpZ2h0IiksInJ0bCI9PWkpe3ZhciBtPWc7Zz1mLGY9bX1kPWcubGVmdCxwPWYucmlnaHR9bnVsbD09biYmMD09dCYmKGQ9YSksZi50b3AtZy50b3A+MyYmKGUoZCxnLnRvcCxudWxsLGcuYm90dG9tKSxkPWEsZy5ib3R0b208Zi50b3AmJmUoZCxnLmJvdHRvbSxudWxsLGYudG9wKSksbnVsbD09byYmcj09aCYmKHA9cyksKCF1fHxnLnRvcDx1LnRvcHx8Zy50b3A9PXUudG9wJiZnLmxlZnQ8dS5sZWZ0KSYmKHU9ZyksKCFjfHxmLmJvdHRvbT5jLmJvdHRvbXx8Zi5ib3R0b209PWMuYm90dG9tJiZmLnJpZ2h0PmMucmlnaHQpJiYoYz1mKSxhKzE+ZCYmKGQ9YSksZShkLGYudG9wLHAtZCxmLmJvdHRvbSl9KSx7c3RhcnQ6dSxlbmQ6Y319dmFyIG49dC5kaXNwbGF5LGk9dC5kb2Msbz10LmRvYy5zZWwsbD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscz1uLmxpbmVTcGFjZS5vZmZzZXRXaWR0aCxhPVAodC5kaXNwbGF5KTtpZihvLmZyb20ubGluZT09by50by5saW5lKXIoby5mcm9tLmxpbmUsby5mcm9tLmNoLG8udG8uY2gpO2Vsc2V7dmFyIHU9Z24oaSxvLmZyb20ubGluZSksYz1nbihpLG8udG8ubGluZSksZj1HcihpLHUpPT1HcihpLGMpLGg9cihvLmZyb20ubGluZSxvLmZyb20uY2gsZj91LnRleHQubGVuZ3RoOm51bGwpLmVuZCxkPXIoby50by5saW5lLGY/MDpudWxsLG8udG8uY2gpLnN0YXJ0O2YmJihoLnRvcDxkLnRvcC0yPyhlKGgucmlnaHQsaC50b3AsbnVsbCxoLmJvdHRvbSksZShhLGQudG9wLGQubGVmdCxkLmJvdHRvbSkpOmUoaC5yaWdodCxoLnRvcCxkLmxlZnQtaC5yaWdodCxoLmJvdHRvbSkpLGguYm90dG9tPGQudG9wJiZlKGEsaC5ib3R0b20sbnVsbCxkLnRvcCl9dWkobi5zZWxlY3Rpb25EaXYsbCksbi5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheT0iIn1mdW5jdGlvbiBEKHQpe2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIGU9dC5kaXNwbGF5O2NsZWFySW50ZXJ2YWwoZS5ibGlua2VyKTt2YXIgcj0hMDtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0iIix0Lm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlPjAmJihlLmJsaW5rZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0ocj0hcik/IiI6ImhpZGRlbiJ9LHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpKX19ZnVuY3Rpb24gVyh0LGUpe3QuZG9jLm1vZGUuc3RhcnRTdGF0ZSYmdC5kb2MuZnJvbnRpZXI8dC5kaXNwbGF5LnNob3dpbmdUbyYmdC5zdGF0ZS5oaWdobGlnaHQuc2V0KGUsaWkoTyx0KSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmRvYztpZihlLmZyb250aWVyPGUuZmlyc3QmJihlLmZyb250aWVyPWUuZmlyc3QpLCEoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdUbykpe3ZhciByLG49K25ldyBEYXRlK3Qub3B0aW9ucy53b3JrVGltZSxpPWJyKGUubW9kZSx6KHQsZS5mcm9udGllcikpLG89W107ZS5pdGVyKGUuZnJvbnRpZXIsTWF0aC5taW4oZS5maXJzdCtlLnNpemUsdC5kaXNwbGF5LnNob3dpbmdUbys1MDApLGZ1bmN0aW9uKGwpe2lmKGUuZnJvbnRpZXI+PXQuZGlzcGxheS5zaG93aW5nRnJvbSl7dmFyIHM9bC5zdHlsZXM7bC5zdHlsZXM9UXIodCxsLGksITApO2Zvcih2YXIgYT0hc3x8cy5sZW5ndGghPWwuc3R5bGVzLmxlbmd0aCx1PTA7IWEmJnU8cy5sZW5ndGg7Kyt1KWE9c1t1XSE9bC5zdHlsZXNbdV07YSYmKHImJnIuZW5kPT1lLmZyb250aWVyP3IuZW5kKys6by5wdXNoKHI9e3N0YXJ0OmUuZnJvbnRpZXIsZW5kOmUuZnJvbnRpZXIrMX0pKSxsLnN0YXRlQWZ0ZXI9YnIoZS5tb2RlLGkpfWVsc2UgdG4odCxsLnRleHQsaSksbC5zdGF0ZUFmdGVyPTA9PWUuZnJvbnRpZXIlNT9icihlLm1vZGUsaSk6bnVsbDtyZXR1cm4rK2UuZnJvbnRpZXIsK25ldyBEYXRlPm4/KFcodCx0Lm9wdGlvbnMud29ya0RlbGF5KSwhMCk6dm9pZCAwfSksby5sZW5ndGgmJmxlKHQsZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoOysrdCl1ZSh0aGlzLG9bdF0uc3RhcnQsb1t0XS5lbmQpfSkoKX19ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuLGksbz10LmRvYyxsPXI/LTE6ZS0odC5kb2MubW9kZS5pbm5lck1vZGU/MWUzOjEwMCkscz1lO3M+bDstLXMpe2lmKHM8PW8uZmlyc3QpcmV0dXJuIG8uZmlyc3Q7dmFyIGE9Z24obyxzLTEpO2lmKGEuc3RhdGVBZnRlciYmKCFyfHxzPD1vLmZyb250aWVyKSlyZXR1cm4gczt2YXIgdT1abihhLnRleHQsbnVsbCx0Lm9wdGlvbnMudGFiU2l6ZSk7KG51bGw9PWl8fG4+dSkmJihpPXMtMSxuPXUpfXJldHVybiBpfWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXQuZG9jLGk9dC5kaXNwbGF5O2lmKCFuLm1vZGUuc3RhcnRTdGF0ZSlyZXR1cm4hMDt2YXIgbz1FKHQsZSxyKSxsPW8+bi5maXJzdCYmZ24obixvLTEpLnN0YXRlQWZ0ZXI7cmV0dXJuIGw9bD9icihuLm1vZGUsbCk6eHIobi5tb2RlKSxuLml0ZXIobyxlLGZ1bmN0aW9uKHIpe3RuKHQsci50ZXh0LGwpO3ZhciBzPW89PWUtMXx8MD09byU1fHxvPj1pLnNob3dpbmdGcm9tJiZvPGkuc2hvd2luZ1RvO3Iuc3RhdGVBZnRlcj1zP2JyKG4ubW9kZSxsKTpudWxsLCsrb30pLHImJihuLmZyb250aWVyPW8pLGx9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5saW5lU3BhY2Uub2Zmc2V0VG9wfWZ1bmN0aW9uIEYodCl7cmV0dXJuIHQubW92ZXIub2Zmc2V0SGVpZ2h0LXQubGluZVNwYWNlLm9mZnNldEhlaWdodH1mdW5jdGlvbiBQKHQpe3ZhciBlPXVpKHQubWVhc3VyZSxzaSgicHJlIixudWxsLG51bGwsInRleHQtYWxpZ246IGxlZnQiKSkuYXBwZW5kQ2hpbGQoc2koInNwYW4iLCJ4IikpO3JldHVybiBlLm9mZnNldExlZnR9ZnVuY3Rpb24gUih0LGUscixuLGkpe3ZhciBvPS0xO2lmKG49bnx8Vih0LGUpLG4uY3J1ZGUpe3ZhciBsPW4ubGVmdCtyKm4ud2lkdGg7cmV0dXJue2xlZnQ6bCxyaWdodDpsK24ud2lkdGgsdG9wOm4udG9wLGJvdHRvbTpuLmJvdHRvbX19Zm9yKHZhciBzPXI7O3MrPW8pe3ZhciBhPW5bc107aWYoYSlicmVhazswPm8mJjA9PXMmJihvPTEpfXJldHVybiBpPXM+cj8ibGVmdCI6cj5zPyJyaWdodCI6aSwibGVmdCI9PWkmJmEubGVmdFNpZGU/YT1hLmxlZnRTaWRlOiJyaWdodCI9PWkmJmEucmlnaHRTaWRlJiYoYT1hLnJpZ2h0U2lkZSkse2xlZnQ6cj5zP2EucmlnaHQ6YS5sZWZ0LHJpZ2h0OnM+cj9hLmxlZnQ6YS5yaWdodCx0b3A6YS50b3AsYm90dG9tOmEuYm90dG9tfX1mdW5jdGlvbiBCKHQsZSl7Zm9yKHZhciByPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtpZihpLnRleHQ9PWUudGV4dCYmaS5tYXJrZWRTcGFucz09ZS5tYXJrZWRTcGFucyYmdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoPT1pLndpZHRoJiZpLmNsYXNzZXM9PWUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzcylyZXR1cm4gaX19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPUIodCxlKTtyJiYoci50ZXh0PXIubWVhc3VyZT1yLm1hcmtlZFNwYW5zPW51bGwpfWZ1bmN0aW9uIFYodCxlKXt2YXIgcj1CKHQsZSk7aWYocilyZXR1cm4gci5tZWFzdXJlO3ZhciBuPUsodCxlKSxpPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG89e3RleHQ6ZS50ZXh0LHdpZHRoOnQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCxtYXJrZWRTcGFuczplLm1hcmtlZFNwYW5zLG1lYXN1cmU6bixjbGFzc2VzOmUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzc307cmV0dXJuIDE2PT1pLmxlbmd0aD9pWysrdC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3MlMTZdPW86aS5wdXNoKG8pLG59ZnVuY3Rpb24gSyh0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9dC50b3AtcC50b3Ascj10LmJvdHRvbS1wLnRvcDtyPnYmJihyPXYpLDA+ZSYmKGU9MCk7Zm9yKHZhciBuPWcubGVuZ3RoLTI7bj49MDtuLT0yKXt2YXIgaT1nW25dLG89Z1tuKzFdO2lmKCEoaT5yfHxlPm8pJiYoZT49aSYmbz49cnx8aT49ZSYmcj49b3x8TWF0aC5taW4ocixvKS1NYXRoLm1heChlLGkpPj1yLWU+PjEpKXtnW25dPU1hdGgubWluKGUsaSksZ1tuKzFdPU1hdGgubWF4KHIsbyk7YnJlYWt9fXJldHVybiAwPm4mJihuPWcubGVuZ3RoLGcucHVzaChlLHIpKSx7bGVmdDp0LmxlZnQtcC5sZWZ0LHJpZ2h0OnQucmlnaHQtcC5sZWZ0LHRvcDpuLGJvdHRvbTpudWxsfX1mdW5jdGlvbiBuKHQpe3QuYm90dG9tPWdbdC50b3ArMV0sdC50b3A9Z1t0LnRvcF19aWYoIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFUodCxlKTt2YXIgaT10LmRpc3BsYXksbz1uaShlLnRleHQubGVuZ3RoKSxsPXJuKHQsZSxvLCEwKS5wcmU7aWYoQWkmJiFIaSYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmwuY2hpbGROb2Rlcy5sZW5ndGg+MTAwKXtmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MTAsdT1sLmNoaWxkTm9kZXMubGVuZ3RoLGM9MCxmPU1hdGguY2VpbCh1L2EpO2Y+YzsrK2Mpe2Zvcih2YXIgaD1zaSgiZGl2IixudWxsLG51bGwsImRpc3BsYXk6IGlubGluZS1ibG9jayIpLGQ9MDthPmQmJnU7KytkKWguYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKSwtLXU7cy5hcHBlbmRDaGlsZChoKX1sLmFwcGVuZENoaWxkKHMpfXVpKGkubWVhc3VyZSxsKTt2YXIgcD1maShpLmxpbmVEaXYpLGc9W10sbT1uaShlLnRleHQubGVuZ3RoKSx2PWwub2Zmc2V0SGVpZ2h0O05pJiZpLm1lYXN1cmUuZmlyc3QhPWwmJnVpKGkubWVhc3VyZSxsKTtmb3IodmFyIHksYz0wO2M8by5sZW5ndGg7KytjKWlmKHk9b1tjXSl7dmFyIGI9eSx4PW51bGw7aWYoL1xiQ29kZU1pcnJvci13aWRnZXRcYi8udGVzdCh5LmNsYXNzTmFtZSkmJnkuZ2V0Q2xpZW50UmVjdHMpezE9PXkuZmlyc3RDaGlsZC5ub2RlVHlwZSYmKGI9eS5maXJzdENoaWxkKTt2YXIgQz1iLmdldENsaWVudFJlY3RzKCk7Qy5sZW5ndGg+MSYmKHg9bVtjXT1yKENbMF0pLHgucmlnaHRTaWRlPXIoQ1tDLmxlbmd0aC0xXSkpfXh8fCh4PW1bY109cihmaShiKSkpLHkubWVhc3VyZVJpZ2h0JiYoeC5yaWdodD1maSh5Lm1lYXN1cmVSaWdodCkubGVmdCkseS5sZWZ0U2lkZSYmKHgubGVmdFNpZGU9cihmaSh5LmxlZnRTaWRlKSkpfWFpKHQuZGlzcGxheS5tZWFzdXJlKTtmb3IodmFyIHksYz0wO2M8bS5sZW5ndGg7KytjKSh5PW1bY10pJiYobih5KSx5LmxlZnRTaWRlJiZuKHkubGVmdFNpZGUpLHkucmlnaHRTaWRlJiZuKHkucmlnaHRTaWRlKSk7cmV0dXJuIG19ZnVuY3Rpb24gVSh0LGUpe3ZhciByPW5ldyBibyhlLnRleHQuc2xpY2UoMCwxMDApLG51bGwpO2UudGV4dENsYXNzJiYoci50ZXh0Q2xhc3M9ZS50ZXh0Q2xhc3MpO3ZhciBuPUsodCxyKSxpPVIodCxyLDAsbiwibGVmdCIpLG89Uih0LHIsOTksbiwicmlnaHQiKTtyZXR1cm57Y3J1ZGU6ITAsdG9wOmkudG9wLGxlZnQ6aS5sZWZ0LGJvdHRvbTppLmJvdHRvbSx3aWR0aDooby5yaWdodC1pLmxlZnQpLzEwMH19ZnVuY3Rpb24gWCh0LGUpe3ZhciByPSExO2lmKGUubWFya2VkU3BhbnMpZm9yKHZhciBuPTA7bjxlLm1hcmtlZFNwYW5zOysrbil7dmFyIGk9ZS5tYXJrZWRTcGFuc1tuXTshaS5jb2xsYXBzZWR8fG51bGwhPWkudG8mJmkudG8hPWUudGV4dC5sZW5ndGh8fChyPSEwKX12YXIgbz0hciYmQih0LGUpO2lmKG98fGUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFIodCxlLGUudGV4dC5sZW5ndGgsbyYmby5tZWFzdXJlLCJyaWdodCIpLnJpZ2h0O3ZhciBsPXJuKHQsZSxudWxsLCEwKS5wcmUscz1sLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSk7cmV0dXJuIHVpKHQuZGlzcGxheS5tZWFzdXJlLGwpLGZpKHMpLnJpZ2h0LWZpKHQuZGlzcGxheS5saW5lRGl2KS5sZWZ0fWZ1bmN0aW9uIF8odCl7dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zPTAsdC5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aD10LmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodD1udWxsLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fCh0LmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApLHQuZGlzcGxheS5saW5lTnVtQ2hhcnM9bnVsbH1mdW5jdGlvbiBZKCl7cmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBqKCl7cmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wfWZ1bmN0aW9uICQodCxlLHIsbil7aWYoZS53aWRnZXRzKWZvcih2YXIgaT0wO2k8ZS53aWRnZXRzLmxlbmd0aDsrK2kpaWYoZS53aWRnZXRzW2ldLmFib3ZlKXt2YXIgbz1ZcihlLndpZGdldHNbaV0pO3IudG9wKz1vLHIuYm90dG9tKz1vfWlmKCJsaW5lIj09bilyZXR1cm4gcjtufHwobj0ibG9jYWwiKTt2YXIgbD1Dbih0LGUpO2lmKCJsb2NhbCI9PW4/bCs9SSh0LmRpc3BsYXkpOmwtPXQuZGlzcGxheS52aWV3T2Zmc2V0LCJwYWdlIj09bnx8IndpbmRvdyI9PW4pe3ZhciBzPWZpKHQuZGlzcGxheS5saW5lU3BhY2UpO2wrPXMudG9wKygid2luZG93Ij09bj8wOmooKSk7dmFyIGE9cy5sZWZ0Kygid2luZG93Ij09bj8wOlkoKSk7ci5sZWZ0Kz1hLHIucmlnaHQrPWF9cmV0dXJuIHIudG9wKz1sLHIuYm90dG9tKz1sLHJ9ZnVuY3Rpb24gWih0LGUscil7aWYoImRpdiI9PXIpcmV0dXJuIGU7dmFyIG49ZS5sZWZ0LGk9ZS50b3A7aWYoInBhZ2UiPT1yKW4tPVkoKSxpLT1qKCk7ZWxzZSBpZigibG9jYWwiPT1yfHwhcil7dmFyIG89ZmkodC5kaXNwbGF5LnNpemVyKTtuKz1vLmxlZnQsaSs9by50b3B9dmFyIGw9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7cmV0dXJue2xlZnQ6bi1sLmxlZnQsdG9wOmktbC50b3B9fWZ1bmN0aW9uIHEodCxlLHIsbixpKXtyZXR1cm4gbnx8KG49Z24odC5kb2MsZS5saW5lKSksJCh0LG4sUih0LG4sZS5jaCxudWxsLGkpLHIpfWZ1bmN0aW9uIFEodCxlLHIsbixpKXtmdW5jdGlvbiBvKGUsbyl7dmFyIGw9Uih0LG4sZSxpLG8/InJpZ2h0IjoibGVmdCIpO3JldHVybiBvP2wubGVmdD1sLnJpZ2h0OmwucmlnaHQ9bC5sZWZ0LCQodCxuLGwscil9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXNbZV0sbj1yLmxldmVsJTI7cmV0dXJuIHQ9PW1pKHIpJiZlJiZyLmxldmVsPHNbZS0xXS5sZXZlbD8ocj1zWy0tZV0sdD12aShyKS0oci5sZXZlbCUyPzA6MSksbj0hMCk6dD09dmkocikmJmU8cy5sZW5ndGgtMSYmci5sZXZlbDxzW2UrMV0ubGV2ZWwmJihyPXNbKytlXSx0PW1pKHIpLXIubGV2ZWwlMixuPSExKSxuJiZ0PT1yLnRvJiZ0PnIuZnJvbT9vKHQtMSk6byh0LG4pfW49bnx8Z24odC5kb2MsZS5saW5lKSxpfHwoaT1WKHQsbikpO3ZhciBzPXduKG4pLGE9ZS5jaDtpZighcylyZXR1cm4gbyhhKTt2YXIgdT1MaShzLGEpLGM9bChhLHUpO3JldHVybiBudWxsIT1SbyYmKGMub3RoZXI9bChhLFJvKSksY31mdW5jdGlvbiBKKHQsZSxyLG4pe3ZhciBpPW5ldyBZZSh0LGUpO3JldHVybiBpLnhSZWw9bixyJiYoaS5vdXRzaWRlPSEwKSxpfWZ1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj10LmRvYztpZihyKz10LmRpc3BsYXkudmlld09mZnNldCwwPnIpcmV0dXJuIEoobi5maXJzdCwwLCEwLC0xKTt2YXIgaT14bihuLHIpLG89bi5maXJzdCtuLnNpemUtMTtpZihpPm8pcmV0dXJuIEoobi5maXJzdCtuLnNpemUtMSxnbihuLG8pLnRleHQubGVuZ3RoLCEwLDEpO2ZvcigwPmUmJihlPTApOzspe3ZhciBsPWduKG4saSkscz1lZSh0LGwsaSxlLHIpLGE9QnIobCksdT1hJiZhLmZpbmQoKTtpZighYXx8IShzLmNoPnUuZnJvbS5jaHx8cy5jaD09dS5mcm9tLmNoJiZzLnhSZWw+MCkpcmV0dXJuIHM7aT11LnRvLmxpbmV9fWZ1bmN0aW9uIGVlKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyhuKXt2YXIgaT1RKHQsWWUocixuKSwibGluZSIsZSx1KTtyZXR1cm4gcz0hMCxsPmkuYm90dG9tP2kubGVmdC1hOmw8aS50b3A/aS5sZWZ0K2E6KHM9ITEsaS5sZWZ0KX12YXIgbD1pLUNuKHQsZSkscz0hMSxhPTIqdC5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgsdT1WKHQsZSksYz13bihlKSxmPWUudGV4dC5sZW5ndGgsaD15aShlKSxkPWJpKGUpLHA9byhoKSxnPXMsbT1vKGQpLHY9cztpZihuPm0pcmV0dXJuIEoocixkLHYsMSk7Zm9yKDs7KXtpZihjP2Q9PWh8fGQ9PVNpKGUsaCwxKToxPj1kLWgpe2Zvcih2YXIgeT1wPm58fG0tbj49bi1wP2g6ZCxiPW4tKHk9PWg/cDptKTtEby50ZXN0KGUudGV4dC5jaGFyQXQoeSkpOykrK3k7dmFyIHg9SihyLHkseT09aD9nOnYsMD5iPy0xOmI/MTowKTtyZXR1cm4geH12YXIgQz1NYXRoLmNlaWwoZi8yKSx3PWgrQztpZihjKXt3PWg7Zm9yKHZhciBMPTA7Qz5MOysrTCl3PVNpKGUsdywxKX12YXIgaz1vKHcpO2s+bj8oZD13LG09aywodj1zKSYmKG0rPTFlMyksZj1DKTooaD13LHA9ayxnPXMsZi09Qyl9fWZ1bmN0aW9uIHJlKHQpe2lmKG51bGwhPXQuY2FjaGVkVGV4dEhlaWdodClyZXR1cm4gdC5jYWNoZWRUZXh0SGVpZ2h0O2lmKG51bGw9PV9pKXtfaT1zaSgicHJlIik7Zm9yKHZhciBlPTA7NDk+ZTsrK2UpX2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSksX2kuYXBwZW5kQ2hpbGQoc2koImJyIikpO19pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IikpfXVpKHQubWVhc3VyZSxfaSk7dmFyIHI9X2kub2Zmc2V0SGVpZ2h0LzUwO3JldHVybiByPjMmJih0LmNhY2hlZFRleHRIZWlnaHQ9ciksYWkodC5tZWFzdXJlKSxyfHwxfWZ1bmN0aW9uIG5lKHQpe2lmKG51bGwhPXQuY2FjaGVkQ2hhcldpZHRoKXJldHVybiB0LmNhY2hlZENoYXJXaWR0aDt2YXIgZT1zaSgic3BhbiIsIngiKSxyPXNpKCJwcmUiLFtlXSk7dWkodC5tZWFzdXJlLHIpO3ZhciBuPWUub2Zmc2V0V2lkdGg7cmV0dXJuIG4+MiYmKHQuY2FjaGVkQ2hhcldpZHRoPW4pLG58fDEwfWZ1bmN0aW9uIGllKHQpe3QuY3VyT3A9e2NoYW5nZXM6W10sZm9yY2VVcGRhdGU6ITEsdXBkYXRlSW5wdXQ6bnVsbCx1c2VyU2VsQ2hhbmdlOm51bGwsdGV4dENoYW5nZWQ6bnVsbCxzZWxlY3Rpb25DaGFuZ2VkOiExLGN1cnNvckFjdGl2aXR5OiExLHVwZGF0ZU1heExpbmU6ITEsdXBkYXRlU2Nyb2xsUG9zOiExLGlkOisrSml9LE1vKyt8fChTbz1bXSl9ZnVuY3Rpb24gb2UodCl7dmFyIGU9dC5jdXJPcCxyPXQuZG9jLG49dC5kaXNwbGF5O2lmKHQuY3VyT3A9bnVsbCxlLnVwZGF0ZU1heExpbmUmJmYodCksbi5tYXhMaW5lQ2hhbmdlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJm4ubWF4TGluZSl7dmFyIGk9WCh0LG4ubWF4TGluZSk7bi5zaXplci5zdHlsZS5taW5XaWR0aD1NYXRoLm1heCgwLGkrMytUbykrInB4IixuLm1heExpbmVDaGFuZ2VkPSExO3ZhciBvPU1hdGgubWF4KDAsbi5zaXplci5vZmZzZXRMZWZ0K24uc2l6ZXIub2Zmc2V0V2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCk7bzxyLnNjcm9sbExlZnQmJiFlLnVwZGF0ZVNjcm9sbFBvcyYmTWUodCxNYXRoLm1pbihuLnNjcm9sbGVyLnNjcm9sbExlZnQsbyksITApfXZhciBsLHM7aWYoZS51cGRhdGVTY3JvbGxQb3MpbD1lLnVwZGF0ZVNjcm9sbFBvcztlbHNlIGlmKGUuc2VsZWN0aW9uQ2hhbmdlZCYmbi5zY3JvbGxlci5jbGllbnRIZWlnaHQpe3ZhciBhPVEodCxyLnNlbC5oZWFkKTtsPXVyKHQsYS5sZWZ0LGEudG9wLGEubGVmdCxhLmJvdHRvbSl9aWYoKGUuY2hhbmdlcy5sZW5ndGh8fGUuZm9yY2VVcGRhdGV8fGwmJm51bGwhPWwuc2Nyb2xsVG9wKSYmKHM9Yih0LGUuY2hhbmdlcyxsJiZsLnNjcm9sbFRvcCxlLmZvcmNlVXBkYXRlKSx0LmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0JiYodC5kb2Muc2Nyb2xsVG9wPXQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApKSwhcyYmZS5zZWxlY3Rpb25DaGFuZ2VkJiZBKHQpLGUudXBkYXRlU2Nyb2xsUG9zKXt2YXIgdT1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LW4uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LGwuc2Nyb2xsVG9wKSksYz1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCxsLnNjcm9sbExlZnQpKTtuLnNjcm9sbGVyLnNjcm9sbFRvcD1uLnNjcm9sbGJhclYuc2Nyb2xsVG9wPXIuc2Nyb2xsVG9wPXUsbi5zY3JvbGxlci5zY3JvbGxMZWZ0PW4uc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PXIuc2Nyb2xsTGVmdD1jLGcodCksZS5zY3JvbGxUb1BvcyYmc3IodCxRZSh0LmRvYyxlLnNjcm9sbFRvUG9zLmZyb20pLFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MudG8pLGUuc2Nyb2xsVG9Qb3MubWFyZ2luKX1lbHNlIGwmJmxyKHQpO2Uuc2VsZWN0aW9uQ2hhbmdlZCYmRCh0KSx0LnN0YXRlLmZvY3VzZWQmJmUudXBkYXRlSW5wdXQmJmRlKHQsZS51c2VyU2VsQ2hhbmdlKTt2YXIgaD1lLm1heWJlSGlkZGVuTWFya2VycyxkPWUubWF5YmVVbmhpZGRlbk1hcmtlcnM7aWYoaClmb3IodmFyIHA9MDtwPGgubGVuZ3RoOysrcCloW3BdLmxpbmVzLmxlbmd0aHx8S24oaFtwXSwiaGlkZSIpO2lmKGQpZm9yKHZhciBwPTA7cDxkLmxlbmd0aDsrK3ApZFtwXS5saW5lcy5sZW5ndGgmJktuKGRbcF0sInVuaGlkZSIpO3ZhciBtO2lmKC0tTW98fChtPVNvLFNvPW51bGwpLGUudGV4dENoYW5nZWQmJktuKHQsImNoYW5nZSIsdCxlLnRleHRDaGFuZ2VkKSxlLmN1cnNvckFjdGl2aXR5JiZLbih0LCJjdXJzb3JBY3Rpdml0eSIsdCksbSlmb3IodmFyIHA9MDtwPG0ubGVuZ3RoOysrcCltW3BdKCl9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10fHx0aGlzLG49IXIuY3VyT3A7biYmaWUocik7dHJ5e3ZhciBpPWUuYXBwbHkocixhcmd1bWVudHMpfWZpbmFsbHl7biYmb2Uocil9cmV0dXJuIGl9fWZ1bmN0aW9uIHNlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5jbSYmIXRoaXMuY20uY3VyT3A7ciYmaWUodGhpcy5jbSk7dHJ5e2U9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtyJiZvZSh0aGlzLmNtKX1yZXR1cm4gZX19ZnVuY3Rpb24gYWUodCxlKXt2YXIgcixuPSF0LmN1ck9wO24mJmllKHQpO3RyeXtyPWUoKX1maW5hbGx5e24mJm9lKHQpfXJldHVybiByfWZ1bmN0aW9uIHVlKHQsZSxyLG4pe251bGw9PWUmJihlPXQuZG9jLmZpcnN0KSxudWxsPT1yJiYocj10LmRvYy5maXJzdCt0LmRvYy5zaXplKSx0LmN1ck9wLmNoYW5nZXMucHVzaCh7ZnJvbTplLHRvOnIsZGlmZjpufSl9ZnVuY3Rpb24gY2UodCl7dC5kaXNwbGF5LnBvbGxpbmdGYXN0fHx0LmRpc3BsYXkucG9sbC5zZXQodC5vcHRpb25zLnBvbGxJbnRlcnZhbCxmdW5jdGlvbigpe2hlKHQpLHQuc3RhdGUuZm9jdXNlZCYmY2UodCl9KX1mdW5jdGlvbiBmZSh0KXtmdW5jdGlvbiBlKCl7dmFyIG49aGUodCk7bnx8cj8odC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExLGNlKHQpKToocj0hMCx0LmRpc3BsYXkucG9sbC5zZXQoNjAsZSkpfXZhciByPSExO3QuZGlzcGxheS5wb2xsaW5nRmFzdD0hMCx0LmRpc3BsYXkucG9sbC5zZXQoMjAsZSl9ZnVuY3Rpb24gaGUodCl7dmFyIGU9dC5kaXNwbGF5LmlucHV0LHI9dC5kaXNwbGF5LnByZXZJbnB1dCxuPXQuZG9jLGk9bi5zZWw7aWYoIXQuc3RhdGUuZm9jdXNlZHx8SW8oZSl8fGdlKHQpfHx0LnN0YXRlLmRpc2FibGVJbnB1dClyZXR1cm4hMTt0LnN0YXRlLnBhc3RlSW5jb21pbmcmJnQuc3RhdGUuZmFrZWRMYXN0Q2hhciYmKGUudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxlLnZhbHVlLmxlbmd0aC0xKSx0LnN0YXRlLmZha2VkTGFzdENoYXI9ITEpO3ZhciBvPWUudmFsdWU7aWYobz09ciYmamUoaS5mcm9tLGkudG8pKXJldHVybiExO2lmKEFpJiYhTmkmJnQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj09PW8pcmV0dXJuIGRlKHQsITApLCExO3ZhciBsPSF0LmN1ck9wO2wmJmllKHQpLGkuc2hpZnQ9ITE7Zm9yKHZhciBzPTAsYT1NYXRoLm1pbihyLmxlbmd0aCxvLmxlbmd0aCk7YT5zJiZyLmNoYXJDb2RlQXQocyk9PW8uY2hhckNvZGVBdChzKTspKytzO3ZhciB1PWkuZnJvbSxjPWkudG87czxyLmxlbmd0aD91PVllKHUubGluZSx1LmNoLShyLmxlbmd0aC1zKSk6dC5zdGF0ZS5vdmVyd3JpdGUmJmplKHUsYykmJiF0LnN0YXRlLnBhc3RlSW5jb21pbmcmJihjPVllKGMubGluZSxNYXRoLm1pbihnbihuLGMubGluZSkudGV4dC5sZW5ndGgsYy5jaCsoby5sZW5ndGgtcykpKSk7dmFyIGY9dC5jdXJPcC51cGRhdGVJbnB1dCxoPXtmcm9tOnUsdG86Yyx0ZXh0OnpvKG8uc2xpY2UocykpLG9yaWdpbjp0LnN0YXRlLnBhc3RlSW5jb21pbmc/InBhc3RlIjoiK2lucHV0In07cmV0dXJuIEJlKHQuZG9jLGgsImVuZCIpLHQuY3VyT3AudXBkYXRlSW5wdXQ9ZixVbih0LCJpbnB1dFJlYWQiLHQsaCksby5sZW5ndGg+MWUzfHxvLmluZGV4T2YoIlxuIik+LTE/ZS52YWx1ZT10LmRpc3BsYXkucHJldklucHV0PSIiOnQuZGlzcGxheS5wcmV2SW5wdXQ9byxsJiZvZSh0KSx0LnN0YXRlLnBhc3RlSW5jb21pbmc9ITEsITB9ZnVuY3Rpb24gZGUodCxlKXt2YXIgcixuLGk9dC5kb2M7aWYoamUoaS5zZWwuZnJvbSxpLnNlbC50bykpZSYmKHQuZGlzcGxheS5wcmV2SW5wdXQ9dC5kaXNwbGF5LmlucHV0LnZhbHVlPSIiLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCkpO2Vsc2V7dC5kaXNwbGF5LnByZXZJbnB1dD0iIixyPUZvJiYoaS5zZWwudG8ubGluZS1pLnNlbC5mcm9tLmxpbmU+MTAwfHwobj10LmdldFNlbGVjdGlvbigpKS5sZW5ndGg+MWUzKTt2YXIgbz1yPyItIjpufHx0LmdldFNlbGVjdGlvbigpO3QuZGlzcGxheS5pbnB1dC52YWx1ZT1vLHQuc3RhdGUuZm9jdXNlZCYmSm4odC5kaXNwbGF5LmlucHV0KSxBaSYmIU5pJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW8pfXQuZGlzcGxheS5pbmFjY3VyYXRlU2VsZWN0aW9uPXJ9ZnVuY3Rpb24gcGUodCl7Im5vY3Vyc29yIj09dC5vcHRpb25zLnJlYWRPbmx5fHxWaSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09dC5kaXNwbGF5LmlucHV0fHx0LmRpc3BsYXkuaW5wdXQuZm9jdXMoKX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gdC5vcHRpb25zLnJlYWRPbmx5fHx0LmRvYy5jYW50RWRpdH1mdW5jdGlvbiBtZSh0KXtmdW5jdGlvbiBlKCl7dC5zdGF0ZS5mb2N1c2VkJiZzZXRUaW1lb3V0KGlpKHBlLHQpLDApfWZ1bmN0aW9uIHIoKXtudWxsPT1zJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz1udWxsLGwuY2FjaGVkQ2hhcldpZHRoPWwuY2FjaGVkVGV4dEhlaWdodD1Pbz1udWxsLF8odCksYWUodCxpaSh1ZSx0KSl9LDEwMCkpfWZ1bmN0aW9uIG4oKXtmb3IodmFyIHQ9bC53cmFwcGVyLnBhcmVudE5vZGU7dCYmdCE9ZG9jdW1lbnQuYm9keTt0PXQucGFyZW50Tm9kZSk7dD9zZXRUaW1lb3V0KG4sNWUzKTpWbih3aW5kb3csInJlc2l6ZSIscil9ZnVuY3Rpb24gaShlKXtYbih0LGUpfHx0Lm9wdGlvbnMub25EcmFnRXZlbnQmJnQub3B0aW9ucy5vbkRyYWdFdmVudCh0LEVuKGUpKXx8UG4oZSl9ZnVuY3Rpb24gbygpe2wuaW5hY2N1cmF0ZVNlbGVjdGlvbiYmKGwucHJldklucHV0PSIiLGwuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxsLmlucHV0LnZhbHVlPXQuZ2V0U2VsZWN0aW9uKCksSm4obC5pbnB1dCkpfXZhciBsPXQuZGlzcGxheTtHbihsLnNjcm9sbGVyLCJtb3VzZWRvd24iLGxlKHQsYmUpKSxBaT9HbihsLnNjcm9sbGVyLCJkYmxjbGljayIsbGUodCxmdW5jdGlvbihlKXtpZighWG4odCxlKSl7dmFyIHI9eWUodCxlKTtpZihyJiYhd2UodCxlKSYmIXZlKHQuZGlzcGxheSxlKSl7em4oZSk7dmFyIG49bXIoZ24odC5kb2Msci5saW5lKS50ZXh0LHIpO2VyKHQuZG9jLG4uZnJvbSxuLnRvKX19fSkpOkduKGwuc2Nyb2xsZXIsImRibGNsaWNrIixmdW5jdGlvbihlKXtYbih0LGUpfHx6bihlKX0pLEduKGwubGluZVNwYWNlLCJzZWxlY3RzdGFydCIsZnVuY3Rpb24odCl7dmUobCx0KXx8em4odCl9KSxaaXx8R24obC5zY3JvbGxlciwiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe0llKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJihTZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsVG9wKSxNZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwhMCksS24odCwic2Nyb2xsIix0KSl9KSxHbihsLnNjcm9sbGJhclYsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmU2UodCxsLnNjcm9sbGJhclYuc2Nyb2xsVG9wKX0pLEduKGwuc2Nyb2xsYmFySCwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZNZSh0LGwuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KX0pLEduKGwuc2Nyb2xsZXIsIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGUpe1RlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJET01Nb3VzZVNjcm9sbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsYmFySCwibW91c2Vkb3duIixlKSxHbihsLnNjcm9sbGJhclYsIm1vdXNlZG93biIsZSksR24obC53cmFwcGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC53cmFwcGVyLnNjcm9sbFRvcD1sLndyYXBwZXIuc2Nyb2xsTGVmdD0wfSk7dmFyIHM7R24od2luZG93LCJyZXNpemUiLHIpLHNldFRpbWVvdXQobiw1ZTMpLEduKGwuaW5wdXQsImtleXVwIixsZSh0LGZ1bmN0aW9uKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbktleUV2ZW50JiZ0Lm9wdGlvbnMub25LZXlFdmVudCh0LEVuKGUpKXx8MTY9PWUua2V5Q29kZSYmKHQuZG9jLnNlbC5zaGlmdD0hMSl9KSksR24obC5pbnB1dCwiaW5wdXQiLGZ1bmN0aW9uKCl7QWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW51bGwpLGZlKHQpfSksR24obC5pbnB1dCwia2V5ZG93biIsbGUodCxXZSkpLEduKGwuaW5wdXQsImtleXByZXNzIixsZSh0LE9lKSksR24obC5pbnB1dCwiZm9jdXMiLGlpKEVlLHQpKSxHbihsLmlucHV0LCJibHVyIixpaSh6ZSx0KSksdC5vcHRpb25zLmRyYWdEcm9wJiYoR24obC5zY3JvbGxlciwiZHJhZ3N0YXJ0IixmdW5jdGlvbihlKXtrZSh0LGUpfSksR24obC5zY3JvbGxlciwiZHJhZ2VudGVyIixpKSxHbihsLnNjcm9sbGVyLCJkcmFnb3ZlciIsaSksR24obC5zY3JvbGxlciwiZHJvcCIsbGUodCxMZSkpKSxHbihsLnNjcm9sbGVyLCJwYXN0ZSIsZnVuY3Rpb24oZSl7dmUobCxlKXx8KHBlKHQpLGZlKHQpKX0pLEduKGwuaW5wdXQsInBhc3RlIixmdW5jdGlvbigpe2lmKFdpJiYhdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYhKG5ldyBEYXRlLXQuc3RhdGUubGFzdE1pZGRsZURvd248MjAwKSl7dmFyIGU9bC5pbnB1dC5zZWxlY3Rpb25TdGFydCxyPWwuaW5wdXQuc2VsZWN0aW9uRW5kO2wuaW5wdXQudmFsdWUrPSIkIixsLmlucHV0LnNlbGVjdGlvblN0YXJ0PWUsbC5pbnB1dC5zZWxlY3Rpb25FbmQ9cix0LnN0YXRlLmZha2VkTGFzdENoYXI9ITB9dC5zdGF0ZS5wYXN0ZUluY29taW5nPSEwLGZlKHQpfSksR24obC5pbnB1dCwiY3V0IixvKSxHbihsLmlucHV0LCJjb3B5IixvKSxGaSYmR24obC5zaXplciwibW91c2V1cCIsZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0JiZsLmlucHV0LmJsdXIoKSxwZSh0KX0pfWZ1bmN0aW9uIHZlKHQsZSl7Zm9yKHZhciByPVJuKGUpO3IhPXQud3JhcHBlcjtyPXIucGFyZW50Tm9kZSlpZighcnx8ci5pZ25vcmVFdmVudHN8fHIucGFyZW50Tm9kZT09dC5zaXplciYmciE9dC5tb3ZlcilyZXR1cm4hMH1mdW5jdGlvbiB5ZSh0LGUscil7dmFyIG49dC5kaXNwbGF5O2lmKCFyKXt2YXIgaT1SbihlKTtpZihpPT1uLnNjcm9sbGJhckh8fGk9PW4uc2Nyb2xsYmFySC5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhclZ8fGk9PW4uc2Nyb2xsYmFyVi5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhckZpbGxlcnx8aT09bi5ndXR0ZXJGaWxsZXIpcmV0dXJuIG51bGx9dmFyIG8sbCxzPWZpKG4ubGluZVNwYWNlKTt0cnl7bz1lLmNsaWVudFgsbD1lLmNsaWVudFl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9cmV0dXJuIHRlKHQsby1zLmxlZnQsbC1zLnRvcCl9ZnVuY3Rpb24gYmUodCl7ZnVuY3Rpb24gZSh0KXtpZighamUodix0KSl7aWYodj10LCJzaW5nbGUiPT1jKXJldHVybiBlcihpLmRvYyxRZShsLGEpLHQpLHZvaWQgMDsKaWYoZz1RZShsLGcpLG09UWUobCxtKSwiZG91YmxlIj09Yyl7dmFyIGU9bXIoZ24obCx0LmxpbmUpLnRleHQsdCk7JGUodCxnKT9lcihpLmRvYyxlLmZyb20sbSk6ZXIoaS5kb2MsZyxlLnRvKX1lbHNlInRyaXBsZSI9PWMmJigkZSh0LGcpP2VyKGkuZG9jLG0sUWUobCxZZSh0LmxpbmUsMCkpKTplcihpLmRvYyxnLFFlKGwsWWUodC5saW5lKzEsMCkpKSl9fWZ1bmN0aW9uIHIodCl7dmFyIG49KytiLHM9eWUoaSx0LCEwKTtpZihzKWlmKGplKHMsaCkpe3ZhciBhPXQuY2xpZW50WTx5LnRvcD8tMjA6dC5jbGllbnRZPnkuYm90dG9tPzIwOjA7YSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmKG8uc2Nyb2xsZXIuc2Nyb2xsVG9wKz1hLHIodCkpfSksNTApfWVsc2V7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKSxoPXMsZShzKTt2YXIgdT1wKG8sbCk7KHMubGluZT49dS50b3x8cy5saW5lPHUuZnJvbSkmJnNldFRpbWVvdXQobGUoaSxmdW5jdGlvbigpe2I9PW4mJnIodCl9KSwxNTApfX1mdW5jdGlvbiBuKHQpe2I9MS8wLHpuKHQpLHBlKGkpLFZuKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLFZuKGRvY3VtZW50LCJtb3VzZXVwIixDKX1pZighWG4odGhpcyx0KSl7dmFyIGk9dGhpcyxvPWkuZGlzcGxheSxsPWkuZG9jLHM9bC5zZWw7aWYocy5zaGlmdD10LnNoaWZ0S2V5LHZlKG8sdCkpcmV0dXJuIFdpfHwoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe28uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwfSwxMDApKSx2b2lkIDA7aWYoIXdlKGksdCkpe3ZhciBhPXllKGksdCk7c3dpdGNoKEJuKHQpKXtjYXNlIDM6cmV0dXJuIFppJiZJZS5jYWxsKGksaSx0KSx2b2lkIDA7Y2FzZSAyOnJldHVybiBXaSYmKGkuc3RhdGUubGFzdE1pZGRsZURvd249K25ldyBEYXRlKSxhJiZlcihpLmRvYyxhKSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx6bih0KSx2b2lkIDB9aWYoIWEpcmV0dXJuIFJuKHQpPT1vLnNjcm9sbGVyJiZ6bih0KSx2b2lkIDA7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKTt2YXIgdT0rbmV3IERhdGUsYz0ic2luZ2xlIjtpZihqaSYmamkudGltZT51LTQwMCYmamUoamkucG9zLGEpKWM9InRyaXBsZSIsem4odCksc2V0VGltZW91dChpaShwZSxpKSwyMCksdnIoaSxhLmxpbmUpO2Vsc2UgaWYoWWkmJllpLnRpbWU+dS00MDAmJmplKFlpLnBvcyxhKSl7Yz0iZG91YmxlIixqaT17dGltZTp1LHBvczphfSx6bih0KTt2YXIgZj1tcihnbihsLGEubGluZSkudGV4dCxhKTtlcihpLmRvYyxmLmZyb20sZi50byl9ZWxzZSBZaT17dGltZTp1LHBvczphfTt2YXIgaD1hO2lmKGkub3B0aW9ucy5kcmFnRHJvcCYmV28mJiFnZShpKSYmIWplKHMuZnJvbSxzLnRvKSYmISRlKGEscy5mcm9tKSYmISRlKHMudG8sYSkmJiJzaW5nbGUiPT1jKXt2YXIgZD1sZShpLGZ1bmN0aW9uKGUpe1dpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEpLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PSExLFZuKGRvY3VtZW50LCJtb3VzZXVwIixkKSxWbihvLnNjcm9sbGVyLCJkcm9wIixkKSxNYXRoLmFicyh0LmNsaWVudFgtZS5jbGllbnRYKStNYXRoLmFicyh0LmNsaWVudFktZS5jbGllbnRZKTwxMCYmKHpuKGUpLGVyKGkuZG9jLGEpLHBlKGkpKX0pO3JldHVybiBXaSYmKG8uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwKSxpLnN0YXRlLmRyYWdnaW5nVGV4dD1kLG8uc2Nyb2xsZXIuZHJhZ0Ryb3AmJm8uc2Nyb2xsZXIuZHJhZ0Ryb3AoKSxHbihkb2N1bWVudCwibW91c2V1cCIsZCksR24oby5zY3JvbGxlciwiZHJvcCIsZCksdm9pZCAwfXpuKHQpLCJzaW5nbGUiPT1jJiZlcihpLmRvYyxRZShsLGEpKTt2YXIgZz1zLmZyb20sbT1zLnRvLHY9YSx5PWZpKG8ud3JhcHBlciksYj0wLHg9bGUoaSxmdW5jdGlvbih0KXtBaXx8Qm4odCk/cih0KTpuKHQpfSksQz1sZShpLG4pO0duKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixDKX19fWZ1bmN0aW9uIHhlKHQsZSxyLG4saSl7dHJ5e3ZhciBvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4hMX1pZihvPj1NYXRoLmZsb29yKGZpKHQuZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpcmV0dXJuITE7biYmem4oZSk7dmFyIHM9dC5kaXNwbGF5LGE9Zmkocy5saW5lRGl2KTtpZihsPmEuYm90dG9tfHwhWW4odCxyKSlyZXR1cm4gRm4oZSk7bC09YS50b3Atcy52aWV3T2Zmc2V0O2Zvcih2YXIgdT0wO3U8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysrdSl7dmFyIGM9cy5ndXR0ZXJzLmNoaWxkTm9kZXNbdV07aWYoYyYmZmkoYykucmlnaHQ+PW8pe3ZhciBmPXhuKHQuZG9jLGwpLGg9dC5vcHRpb25zLmd1dHRlcnNbdV07cmV0dXJuIGkodCxyLHQsZixoLGUpLEZuKGUpfX19ZnVuY3Rpb24gQ2UodCxlKXtyZXR1cm4gWW4odCwiZ3V0dGVyQ29udGV4dE1lbnUiKT94ZSh0LGUsImd1dHRlckNvbnRleHRNZW51IiwhMSxLbik6ITF9ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4geGUodCxlLCJndXR0ZXJDbGljayIsITAsVW4pfWZ1bmN0aW9uIExlKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHx2ZShlLmRpc3BsYXksdCl8fGUub3B0aW9ucy5vbkRyYWdFdmVudCYmZS5vcHRpb25zLm9uRHJhZ0V2ZW50KGUsRW4odCkpKSl7em4odCksQWkmJih0bz0rbmV3IERhdGUpO3ZhciByPXllKGUsdCwhMCksbj10LmRhdGFUcmFuc2Zlci5maWxlcztpZihyJiYhZ2UoZSkpaWYobiYmbi5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIGk9bi5sZW5ndGgsbz1BcnJheShpKSxsPTAscz1mdW5jdGlvbih0LG4pe3ZhciBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPWZ1bmN0aW9uKCl7b1tuXT1zLnJlc3VsdCwrK2w9PWkmJihyPVFlKGUuZG9jLHIpLEJlKGUuZG9jLHtmcm9tOnIsdG86cix0ZXh0OnpvKG8uam9pbigiXG4iKSksb3JpZ2luOiJwYXN0ZSJ9LCJhcm91bmQiKSl9LHMucmVhZEFzVGV4dCh0KX0sYT0wO2k+YTsrK2EpcyhuW2FdLGEpO2Vsc2V7aWYoZS5zdGF0ZS5kcmFnZ2luZ1RleHQmJiEkZShyLGUuZG9jLnNlbC5mcm9tKSYmISRlKGUuZG9jLnNlbC50byxyKSlyZXR1cm4gZS5zdGF0ZS5kcmFnZ2luZ1RleHQodCksc2V0VGltZW91dChpaShwZSxlKSwyMCksdm9pZCAwO3RyeXt2YXIgbz10LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7aWYobyl7dmFyIHU9ZS5kb2Muc2VsLmZyb20sYz1lLmRvYy5zZWwudG87bnIoZS5kb2MscixyKSxlLnN0YXRlLmRyYWdnaW5nVGV4dCYmX2UoZS5kb2MsIiIsdSxjLCJwYXN0ZSIpLGUucmVwbGFjZVNlbGVjdGlvbihvLG51bGwsInBhc3RlIikscGUoZSl9fWNhdGNoKHQpe319fX1mdW5jdGlvbiBrZSh0LGUpe2lmKEFpJiYoIXQuc3RhdGUuZHJhZ2dpbmdUZXh0fHwrbmV3IERhdGUtdG88MTAwKSlyZXR1cm4gUG4oZSksdm9pZCAwO2lmKCFYbih0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt2YXIgcj10LmdldFNlbGVjdGlvbigpO2lmKGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLHIpLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSYmIUlpKXt2YXIgbj1zaSgiaW1nIixudWxsLG51bGwsInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyIpO24uc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSIsemkmJihuLndpZHRoPW4uaGVpZ2h0PTEsdC5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQobiksbi5fdG9wPW4ub2Zmc2V0VG9wKSxlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UobiwwLDApLHppJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9fX1mdW5jdGlvbiBTZSh0LGUpe01hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1lKTwyfHwodC5kb2Muc2Nyb2xsVG9wPWUsVGl8fGIodCxbXSxlKSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT1lJiYodC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ZSksVGkmJmIodCxbXSksVyh0LDEwMCkpfWZ1bmN0aW9uIE1lKHQsZSxyKXsocj9lPT10LmRvYy5zY3JvbGxMZWZ0Ok1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtZSk8Mil8fChlPU1hdGgubWluKGUsdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoLXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCksdC5kb2Muc2Nyb2xsTGVmdD1lLGcodCksdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0IT1lJiYodC5kaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdD1lKSl9ZnVuY3Rpb24gVGUodCxlKXt2YXIgcj1lLndoZWVsRGVsdGFYLG49ZS53aGVlbERlbHRhWTtudWxsPT1yJiZlLmRldGFpbCYmZS5heGlzPT1lLkhPUklaT05UQUxfQVhJUyYmKHI9ZS5kZXRhaWwpLG51bGw9PW4mJmUuZGV0YWlsJiZlLmF4aXM9PWUuVkVSVElDQUxfQVhJUz9uPWUuZGV0YWlsOm51bGw9PW4mJihuPWUud2hlZWxEZWx0YSk7dmFyIGk9dC5kaXNwbGF5LG89aS5zY3JvbGxlcjtpZihyJiZvLnNjcm9sbFdpZHRoPm8uY2xpZW50V2lkdGh8fG4mJm8uc2Nyb2xsSGVpZ2h0Pm8uY2xpZW50SGVpZ2h0KXtpZihuJiZLaSYmV2kpZm9yKHZhciBsPWUudGFyZ2V0O2whPW87bD1sLnBhcmVudE5vZGUpaWYobC5saW5lT2JqKXt0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PWw7YnJlYWt9aWYociYmIVRpJiYhemkmJm51bGwhPXJvKXJldHVybiBuJiZTZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxUb3ArbipybyxvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodCkpKSxNZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxMZWZ0K3Iqcm8sby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoKSkpLHpuKGUpLGkud2hlZWxTdGFydFg9bnVsbCx2b2lkIDA7aWYobiYmbnVsbCE9cm8pe3ZhciBzPW4qcm8sYT10LmRvYy5zY3JvbGxUb3AsdT1hK2kud3JhcHBlci5jbGllbnRIZWlnaHQ7MD5zP2E9TWF0aC5tYXgoMCxhK3MtNTApOnU9TWF0aC5taW4odC5kb2MuaGVpZ2h0LHUrcys1MCksYih0LFtdLHt0b3A6YSxib3R0b206dX0pfTIwPmVvJiYobnVsbD09aS53aGVlbFN0YXJ0WD8oaS53aGVlbFN0YXJ0WD1vLnNjcm9sbExlZnQsaS53aGVlbFN0YXJ0WT1vLnNjcm9sbFRvcCxpLndoZWVsRFg9cixpLndoZWVsRFk9bixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYobnVsbCE9aS53aGVlbFN0YXJ0WCl7dmFyIHQ9by5zY3JvbGxMZWZ0LWkud2hlZWxTdGFydFgsZT1vLnNjcm9sbFRvcC1pLndoZWVsU3RhcnRZLHI9ZSYmaS53aGVlbERZJiZlL2kud2hlZWxEWXx8dCYmaS53aGVlbERYJiZ0L2kud2hlZWxEWDtpLndoZWVsU3RhcnRYPWkud2hlZWxTdGFydFk9bnVsbCxyJiYocm89KHJvKmVvK3IpLyhlbysxKSwrK2VvKX19LDIwMCkpOihpLndoZWVsRFgrPXIsaS53aGVlbERZKz1uKSl9fWZ1bmN0aW9uIEFlKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPW1vW2VdLCFlKSlyZXR1cm4hMTt0LmRpc3BsYXkucG9sbGluZ0Zhc3QmJmhlKHQpJiYodC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExKTt2YXIgbj10LmRvYyxpPW4uc2VsLnNoaWZ0LG89ITE7dHJ5e2dlKHQpJiYodC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSEwKSxyJiYobi5zZWwuc2hpZnQ9ITEpLG89ZSh0KSE9QW99ZmluYWxseXtuLnNlbC5zaGlmdD1pLHQuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gb31mdW5jdGlvbiBIZSh0KXt2YXIgZT10LnN0YXRlLmtleU1hcHMuc2xpY2UoMCk7cmV0dXJuIHQub3B0aW9ucy5leHRyYUtleXMmJmUucHVzaCh0Lm9wdGlvbnMuZXh0cmFLZXlzKSxlLnB1c2godC5vcHRpb25zLmtleU1hcCksZX1mdW5jdGlvbiBOZSh0LGUpe3ZhciByPUNyKHQub3B0aW9ucy5rZXlNYXApLG49ci5hdXRvO2NsZWFyVGltZW91dChubyksbiYmIUxyKGUpJiYobm89c2V0VGltZW91dChmdW5jdGlvbigpe0NyKHQub3B0aW9ucy5rZXlNYXApPT1yJiYodC5vcHRpb25zLmtleU1hcD1uLmNhbGw/bi5jYWxsKG51bGwsdCk6bixsKHQpKX0sNTApKTt2YXIgaT1rcihlLCEwKSxvPSExO2lmKCFpKXJldHVybiExO3ZhciBzPUhlKHQpO3JldHVybiBvPWUuc2hpZnRLZXk/d3IoIlNoaWZ0LSIraSxzLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSl8fHdyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiBlPy9eZ29bQS1aXS8udGVzdChlKTplLm1vdGlvbik/QWUodCxlKTp2b2lkIDB9KTp3cihpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSl9KSxvJiYoem4oZSksRCh0KSxOaSYmKGUub2xkS2V5Q29kZT1lLmtleUNvZGUsZS5rZXlDb2RlPTApLFVuKHQsImtleUhhbmRsZWQiLHQsaSxlKSksb31mdW5jdGlvbiBEZSh0LGUscil7dmFyIG49d3IoIiciK3IrIiciLEhlKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSk7cmV0dXJuIG4mJih6bihlKSxEKHQpLFVuKHQsImtleUhhbmRsZWQiLHQsIiciK3IrIiciLGUpKSxufWZ1bmN0aW9uIFdlKHQpe3ZhciBlPXRoaXM7aWYoZS5zdGF0ZS5mb2N1c2VkfHxFZShlKSwhKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe0FpJiYyNz09dC5rZXlDb2RlJiYodC5yZXR1cm5WYWx1ZT0hMSk7dmFyIHI9dC5rZXlDb2RlO2UuZG9jLnNlbC5zaGlmdD0xNj09cnx8dC5zaGlmdEtleTt2YXIgbj1OZShlLHQpO3ppJiYob289bj9yOm51bGwsIW4mJjg4PT1yJiYhRm8mJihLaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmZS5yZXBsYWNlU2VsZWN0aW9uKCIiKSl9fWZ1bmN0aW9uIE9lKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHxlLm9wdGlvbnMub25LZXlFdmVudCYmZS5vcHRpb25zLm9uS2V5RXZlbnQoZSxFbih0KSkpKXt2YXIgcj10LmtleUNvZGUsbj10LmNoYXJDb2RlO2lmKHppJiZyPT1vbylyZXR1cm4gb289bnVsbCx6bih0KSx2b2lkIDA7aWYoISh6aSYmKCF0LndoaWNofHx0LndoaWNoPDEwKXx8RmkpfHwhTmUoZSx0KSl7dmFyIGk9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1uP3I6bik7dGhpcy5vcHRpb25zLmVsZWN0cmljQ2hhcnMmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycyYmdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50JiYhZ2UodGhpcykmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGkpPi0xJiZzZXRUaW1lb3V0KGxlKGUsZnVuY3Rpb24oKXtocihlLGUuZG9jLnNlbC50by5saW5lLCJzbWFydCIpfSksNzUpLERlKGUsdCxpKXx8KEFpJiYhTmkmJihlLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUoZSkpfX19ZnVuY3Rpb24gRWUodCl7Im5vY3Vyc29yIiE9dC5vcHRpb25zLnJlYWRPbmx5JiYodC5zdGF0ZS5mb2N1c2VkfHwoS24odCwiZm9jdXMiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMCwtMT09dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pJiYodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3ItZm9jdXNlZCIpLHQuY3VyT3B8fChkZSh0LCEwKSxXaSYmc2V0VGltZW91dChpaShkZSx0LCEwKSwwKSkpLGNlKHQpLEQodCkpfWZ1bmN0aW9uIHplKHQpe3Quc3RhdGUuZm9jdXNlZCYmKEtuKHQsImJsdXIiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMSx0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCIiKSksY2xlYXJJbnRlcnZhbCh0LmRpc3BsYXkuYmxpbmtlciksc2V0VGltZW91dChmdW5jdGlvbigpe3Quc3RhdGUuZm9jdXNlZHx8KHQuZG9jLnNlbC5zaGlmdD0hMSl9LDE1MCl9ZnVuY3Rpb24gSWUodCxlKXtmdW5jdGlvbiByKCl7aWYobnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7dmFyIHQ9aS5pbnB1dC52YWx1ZT0i4oCLIisoamUoby5mcm9tLG8udG8pPyIiOmkuaW5wdXQudmFsdWUpO2kucHJldklucHV0PSLigIsiLGkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9MSxpLmlucHV0LnNlbGVjdGlvbkVuZD10Lmxlbmd0aH19ZnVuY3Rpb24gbigpe2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9dSxOaSYmKGkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9aS5zY3JvbGxlci5zY3JvbGxUb3A9cyksY2UodCksbnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7KCFBaXx8TmkpJiZyKCksY2xlYXJUaW1lb3V0KGlvKTt2YXIgZT0wLG49ZnVuY3Rpb24oKXsiICI9PWkucHJldklucHV0JiYwPT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0P2xlKHQsbW8uc2VsZWN0QWxsKSh0KTplKys8MTA/aW89c2V0VGltZW91dChuLDUwMCk6ZGUodCl9O2lvPXNldFRpbWVvdXQobiwyMDApfX1pZighWG4odCxlLCJjb250ZXh0bWVudSIpKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYy5zZWw7aWYoIXZlKGksZSkmJiFDZSh0LGUpKXt2YXIgbD15ZSh0LGUpLHM9aS5zY3JvbGxlci5zY3JvbGxUb3A7aWYobCYmIXppKXt2YXIgYT10Lm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51O2EmJihqZShvLmZyb20sby50byl8fCRlKGwsby5mcm9tKXx8ISRlKGwsby50bykpJiZsZSh0LG5yKSh0LmRvYyxsLGwpO3ZhciB1PWkuaW5wdXQuc3R5bGUuY3NzVGV4dDtpZihpLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5pbnB1dC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIisoZS5jbGllbnRZLTUpKyJweDsgbGVmdDogIisoZS5jbGllbnRYLTUpKyJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogd2hpdGU7IG91dGxpbmU6IG5vbmU7IisiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IC1tcy1vcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTsiLHBlKHQpLGRlKHQsITApLGplKG8uZnJvbSxvLnRvKSYmKGkuaW5wdXQudmFsdWU9aS5wcmV2SW5wdXQ9IiAiKSxBaSYmIU5pJiZyKCksWmkpe1BuKGUpO3ZhciBjPWZ1bmN0aW9uKCl7Vm4od2luZG93LCJtb3VzZXVwIixjKSxzZXRUaW1lb3V0KG4sMjApfTtHbih3aW5kb3csIm1vdXNldXAiLGMpfWVsc2Ugc2V0VGltZW91dChuLDUwKX19fX1mdW5jdGlvbiBGZSh0LGUscil7aWYoISRlKGUuZnJvbSxyKSlyZXR1cm4gUWUodCxyKTt2YXIgbj1lLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSk7aWYoci5saW5lPmUudG8ubGluZStuKXt2YXIgaT1yLmxpbmUtbixvPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGk+bz9ZZShvLGduKHQsbykudGV4dC5sZW5ndGgpOkplKHIsZ24odCxpKS50ZXh0Lmxlbmd0aCl9aWYoci5saW5lPT1lLnRvLmxpbmUrbilyZXR1cm4gSmUocixRbihlLnRleHQpLmxlbmd0aCsoMT09ZS50ZXh0Lmxlbmd0aD9lLmZyb20uY2g6MCkrZ24odCxlLnRvLmxpbmUpLnRleHQubGVuZ3RoLWUudG8uY2gpO3ZhciBsPXIubGluZS1lLmZyb20ubGluZTtyZXR1cm4gSmUocixlLnRleHRbbF0ubGVuZ3RoKyhsPzA6ZS5mcm9tLmNoKSl9ZnVuY3Rpb24gUGUodCxlLHIpe2lmKHImJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm57YW5jaG9yOkZlKHQsZSxyLmFuY2hvciksaGVhZDpGZSh0LGUsci5oZWFkKX07aWYoInN0YXJ0Ij09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOmUuZnJvbX07dmFyIG49bG8oZSk7aWYoImFyb3VuZCI9PXIpcmV0dXJue2FuY2hvcjplLmZyb20saGVhZDpufTtpZigiZW5kIj09cilyZXR1cm57YW5jaG9yOm4saGVhZDpufTt2YXIgaT1mdW5jdGlvbih0KXtpZigkZSh0LGUuZnJvbSkpcmV0dXJuIHQ7aWYoISRlKGUudG8sdCkpcmV0dXJuIG47dmFyIHI9dC5saW5lK2UudGV4dC5sZW5ndGgtKGUudG8ubGluZS1lLmZyb20ubGluZSktMSxpPXQuY2g7cmV0dXJuIHQubGluZT09ZS50by5saW5lJiYoaSs9bi5jaC1lLnRvLmNoKSxZZShyLGkpfTtyZXR1cm57YW5jaG9yOmkodC5zZWwuYW5jaG9yKSxoZWFkOmkodC5zZWwuaGVhZCl9fWZ1bmN0aW9uIFJlKHQsZSxyKXt2YXIgbj17Y2FuY2VsZWQ6ITEsZnJvbTplLmZyb20sdG86ZS50byx0ZXh0OmUudGV4dCxvcmlnaW46ZS5vcmlnaW4sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxlZD0hMH19O3JldHVybiByJiYobi51cGRhdGU9ZnVuY3Rpb24oZSxyLG4saSl7ZSYmKHRoaXMuZnJvbT1RZSh0LGUpKSxyJiYodGhpcy50bz1RZSh0LHIpKSxuJiYodGhpcy50ZXh0PW4pLHZvaWQgMCE9PWkmJih0aGlzLm9yaWdpbj1pKX0pLEtuKHQsImJlZm9yZUNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVDaGFuZ2UiLHQuY20sbiksbi5jYW5jZWxlZD9udWxsOntmcm9tOm4uZnJvbSx0bzpuLnRvLHRleHQ6bi50ZXh0LG9yaWdpbjpuLm9yaWdpbn19ZnVuY3Rpb24gQmUodCxlLHIsbil7aWYodC5jbSl7aWYoIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sQmUpKHQsZSxyLG4pO2lmKHQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cylyZXR1cm59aWYoIShZbih0LCJiZWZvcmVDaGFuZ2UiKXx8dC5jbSYmWW4odC5jbSwiYmVmb3JlQ2hhbmdlIikpfHwoZT1SZSh0LGUsITApKSl7dmFyIGk9cWkmJiFuJiZGcih0LGUuZnJvbSxlLnRvKTtpZihpKXtmb3IodmFyIG89aS5sZW5ndGgtMTtvPj0xOy0tbylHZSh0LHtmcm9tOmlbb10uZnJvbSx0bzppW29dLnRvLHRleHQ6WyIiXX0pO2kubGVuZ3RoJiZHZSh0LHtmcm9tOmlbMF0uZnJvbSx0bzppWzBdLnRvLHRleHQ6ZS50ZXh0fSxyKX1lbHNlIEdlKHQsZSxyKX19ZnVuY3Rpb24gR2UodCxlLHIpe2lmKDEhPWUudGV4dC5sZW5ndGh8fCIiIT1lLnRleHRbMF18fCFqZShlLmZyb20sZS50bykpe3ZhciBuPVBlKHQsZSxyKTtNbih0LGUsbix0LmNtP3QuY20uY3VyT3AuaWQ6MC8wKSxVZSh0LGUsbix6cih0LGUpKTt2YXIgaT1bXTtkbih0LGZ1bmN0aW9uKHQscil7cnx8LTEhPXRpKGksdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxlKSxpLnB1c2godC5oaXN0b3J5KSksVWUodCxlLG51bGwsenIodCxlKSl9KX19ZnVuY3Rpb24gVmUodCxlKXtpZighdC5jbXx8IXQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cyl7dmFyIHI9dC5oaXN0b3J5LG49KCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLnBvcCgpO2lmKG4pe3ZhciBpPXtjaGFuZ2VzOltdLGFuY2hvckJlZm9yZTpuLmFuY2hvckFmdGVyLGhlYWRCZWZvcmU6bi5oZWFkQWZ0ZXIsYW5jaG9yQWZ0ZXI6bi5hbmNob3JCZWZvcmUsaGVhZEFmdGVyOm4uaGVhZEJlZm9yZSxnZW5lcmF0aW9uOnIuZ2VuZXJhdGlvbn07KCJ1bmRvIj09ZT9yLnVuZG9uZTpyLmRvbmUpLnB1c2goaSksci5nZW5lcmF0aW9uPW4uZ2VuZXJhdGlvbnx8KytyLm1heEdlbmVyYXRpb247Zm9yKHZhciBvPVluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSxsPW4uY2hhbmdlcy5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHM9bi5jaGFuZ2VzW2xdO2lmKHMub3JpZ2luPWUsbyYmIVJlKHQscywhMSkpcmV0dXJuKCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLmxlbmd0aD0wLHZvaWQgMDtpLmNoYW5nZXMucHVzaChTbih0LHMpKTt2YXIgYT1sP1BlKHQscyxudWxsKTp7YW5jaG9yOm4uYW5jaG9yQmVmb3JlLGhlYWQ6bi5oZWFkQmVmb3JlfTtVZSh0LHMsYSxJcih0LHMpKTt2YXIgdT1bXTtkbih0LGZ1bmN0aW9uKHQsZSl7ZXx8LTEhPXRpKHUsdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxzKSx1LnB1c2godC5oaXN0b3J5KSksVWUodCxzLG51bGwsSXIodCxzKSl9KX19fX1mdW5jdGlvbiBLZSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIFllKHQubGluZStlLHQuY2gpfXQuZmlyc3QrPWUsdC5jbSYmdWUodC5jbSx0LmZpcnN0LHQuZmlyc3QsZSksdC5zZWwuaGVhZD1yKHQuc2VsLmhlYWQpLHQuc2VsLmFuY2hvcj1yKHQuc2VsLmFuY2hvciksdC5zZWwuZnJvbT1yKHQuc2VsLmZyb20pLHQuc2VsLnRvPXIodC5zZWwudG8pfWZ1bmN0aW9uIFVlKHQsZSxyLG4pe2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFVlKSh0LGUscixuKTtpZihlLnRvLmxpbmU8dC5maXJzdClyZXR1cm4gS2UodCxlLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSkpLHZvaWQgMDtpZighKGUuZnJvbS5saW5lPnQubGFzdExpbmUoKSkpe2lmKGUuZnJvbS5saW5lPHQuZmlyc3Qpe3ZhciBpPWUudGV4dC5sZW5ndGgtMS0odC5maXJzdC1lLmZyb20ubGluZSk7S2UodCxpKSxlPXtmcm9tOlllKHQuZmlyc3QsMCksdG86WWUoZS50by5saW5lK2ksZS50by5jaCksdGV4dDpbUW4oZS50ZXh0KV0sb3JpZ2luOmUub3JpZ2lufX12YXIgbz10Lmxhc3RMaW5lKCk7ZS50by5saW5lPm8mJihlPXtmcm9tOmUuZnJvbSx0bzpZZShvLGduKHQsbykudGV4dC5sZW5ndGgpLHRleHQ6W2UudGV4dFswXV0sb3JpZ2luOmUub3JpZ2lufSksZS5yZW1vdmVkPW1uKHQsZS5mcm9tLGUudG8pLHJ8fChyPVBlKHQsZSxudWxsKSksdC5jbT9YZSh0LmNtLGUsbixyKTpjbih0LGUsbixyKX19ZnVuY3Rpb24gWGUodCxlLHIsbil7dmFyIG89dC5kb2MsbD10LmRpc3BsYXkscz1lLmZyb20sYT1lLnRvLHU9ITEsZj1zLmxpbmU7dC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGY9Ym4oR3IobyxnbihvLHMubGluZSkpKSxvLml0ZXIoZixhLmxpbmUrMSxmdW5jdGlvbih0KXtyZXR1cm4gdD09bC5tYXhMaW5lPyh1PSEwLCEwKTp2b2lkIDB9KSksJGUoby5zZWwuaGVhZCxlLmZyb20pfHwkZShlLnRvLG8uc2VsLmhlYWQpfHwodC5jdXJPcC5jdXJzb3JBY3Rpdml0eT0hMCksY24obyxlLHIsbixpKHQpKSx0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoby5pdGVyKGYscy5saW5lK2UudGV4dC5sZW5ndGgsZnVuY3Rpb24odCl7dmFyIGU9YyhvLHQpO2U+bC5tYXhMaW5lTGVuZ3RoJiYobC5tYXhMaW5lPXQsbC5tYXhMaW5lTGVuZ3RoPWUsbC5tYXhMaW5lQ2hhbmdlZD0hMCx1PSExKX0pLHUmJih0LmN1ck9wLnVwZGF0ZU1heExpbmU9ITApKSxvLmZyb250aWVyPU1hdGgubWluKG8uZnJvbnRpZXIscy5saW5lKSxXKHQsNDAwKTt2YXIgaD1lLnRleHQubGVuZ3RoLShhLmxpbmUtcy5saW5lKS0xO2lmKHVlKHQscy5saW5lLGEubGluZSsxLGgpLFluKHQsImNoYW5nZSIpKXt2YXIgZD17ZnJvbTpzLHRvOmEsdGV4dDplLnRleHQscmVtb3ZlZDplLnJlbW92ZWQsb3JpZ2luOmUub3JpZ2lufTtpZih0LmN1ck9wLnRleHRDaGFuZ2VkKXtmb3IodmFyIHA9dC5jdXJPcC50ZXh0Q2hhbmdlZDtwLm5leHQ7cD1wLm5leHQpO3AubmV4dD1kfWVsc2UgdC5jdXJPcC50ZXh0Q2hhbmdlZD1kfX1mdW5jdGlvbiBfZSh0LGUscixuLGkpe2lmKG58fChuPXIpLCRlKG4scikpe3ZhciBvPW47bj1yLHI9b30ic3RyaW5nIj09dHlwZW9mIGUmJihlPXpvKGUpKSxCZSh0LHtmcm9tOnIsdG86bix0ZXh0OmUsb3JpZ2luOml9LG51bGwpfWZ1bmN0aW9uIFllKHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBZZT8odGhpcy5saW5lPXQsdGhpcy5jaD1lLHZvaWQgMCk6bmV3IFllKHQsZSl9ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gdC5saW5lPT1lLmxpbmUmJnQuY2g9PWUuY2h9ZnVuY3Rpb24gJGUodCxlKXtyZXR1cm4gdC5saW5lPGUubGluZXx8dC5saW5lPT1lLmxpbmUmJnQuY2g8ZS5jaH1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gWWUodC5saW5lLHQuY2gpfWZ1bmN0aW9uIHFlKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQuZmlyc3QsTWF0aC5taW4oZSx0LmZpcnN0K3Quc2l6ZS0xKSl9ZnVuY3Rpb24gUWUodCxlKXtpZihlLmxpbmU8dC5maXJzdClyZXR1cm4gWWUodC5maXJzdCwwKTt2YXIgcj10LmZpcnN0K3Quc2l6ZS0xO3JldHVybiBlLmxpbmU+cj9ZZShyLGduKHQscikudGV4dC5sZW5ndGgpOkplKGUsZ24odCxlLmxpbmUpLnRleHQubGVuZ3RoKX1mdW5jdGlvbiBKZSh0LGUpe3ZhciByPXQuY2g7cmV0dXJuIG51bGw9PXJ8fHI+ZT9ZZSh0LmxpbmUsZSk6MD5yP1llKHQubGluZSwwKTp0fWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJuIGU+PXQuZmlyc3QmJmU8dC5maXJzdCt0LnNpemV9ZnVuY3Rpb24gZXIodCxlLHIsbil7aWYodC5zZWwuc2hpZnR8fHQuc2VsLmV4dGVuZCl7dmFyIGk9dC5zZWwuYW5jaG9yO2lmKHIpe3ZhciBvPSRlKGUsaSk7byE9JGUocixpKT8oaT1lLGU9cik6byE9JGUoZSxyKSYmKGU9cil9bnIodCxpLGUsbil9ZWxzZSBucih0LGUscnx8ZSxuKTt0LmNtJiYodC5jbS5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwKX1mdW5jdGlvbiBycih0LGUscil7dmFyIG49e2FuY2hvcjplLGhlYWQ6cn07cmV0dXJuIEtuKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLHQuY20sbiksbi5hbmNob3I9UWUodCxuLmFuY2hvciksbi5oZWFkPVFlKHQsbi5oZWFkKSxufWZ1bmN0aW9uIG5yKHQsZSxyLG4saSl7aWYoIWkmJlluKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSl7dmFyIG89cnIodCxlLHIpO3I9by5oZWFkLGU9by5hbmNob3J9dmFyIGw9dC5zZWw7aWYobC5nb2FsQ29sdW1uPW51bGwsbnVsbD09biYmKG49JGUocixsLmhlYWQpPy0xOjEpLChpfHwhamUoZSxsLmFuY2hvcikpJiYoZT1vcih0LGUsbiwicHVzaCIhPWkpKSwoaXx8IWplKHIsbC5oZWFkKSkmJihyPW9yKHQscixuLCJwdXNoIiE9aSkpLCFqZShsLmFuY2hvcixlKXx8IWplKGwuaGVhZCxyKSl7bC5hbmNob3I9ZSxsLmhlYWQ9cjt2YXIgcz0kZShyLGUpO2wuZnJvbT1zP3I6ZSxsLnRvPXM/ZTpyLHQuY20mJih0LmNtLmN1ck9wLnVwZGF0ZUlucHV0PXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD10LmNtLmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxVbih0LCJjdXJzb3JBY3Rpdml0eSIsdCl9fWZ1bmN0aW9uIGlyKHQpe25yKHQuZG9jLHQuZG9jLnNlbC5mcm9tLHQuZG9jLnNlbC50byxudWxsLCJwdXNoIil9ZnVuY3Rpb24gb3IodCxlLHIsbil7dmFyIGk9ITEsbz1lLGw9cnx8MTt0LmNhbnRFZGl0PSExO3Q6Zm9yKDs7KXt2YXIgcz1nbih0LG8ubGluZSk7aWYocy5tYXJrZWRTcGFucylmb3IodmFyIGE9MDthPHMubWFya2VkU3BhbnMubGVuZ3RoOysrYSl7dmFyIHU9cy5tYXJrZWRTcGFuc1thXSxjPXUubWFya2VyO2lmKChudWxsPT11LmZyb218fChjLmluY2x1c2l2ZUxlZnQ/dS5mcm9tPD1vLmNoOnUuZnJvbTxvLmNoKSkmJihudWxsPT11LnRvfHwoYy5pbmNsdXNpdmVSaWdodD91LnRvPj1vLmNoOnUudG8+by5jaCkpKXtpZihuJiYoS24oYywiYmVmb3JlQ3Vyc29yRW50ZXIiKSxjLmV4cGxpY2l0bHlDbGVhcmVkKSl7aWYocy5tYXJrZWRTcGFucyl7LS1hO2NvbnRpbnVlfWJyZWFrfWlmKCFjLmF0b21pYyljb250aW51ZTt2YXIgZj1jLmZpbmQoKVswPmw/ImZyb20iOiJ0byJdO2lmKGplKGYsbykmJihmLmNoKz1sLGYuY2g8MD9mPWYubGluZT50LmZpcnN0P1FlKHQsWWUoZi5saW5lLTEpKTpudWxsOmYuY2g+cy50ZXh0Lmxlbmd0aCYmKGY9Zi5saW5lPHQuZmlyc3QrdC5zaXplLTE/WWUoZi5saW5lKzEsMCk6bnVsbCksIWYpKXtpZihpKXJldHVybiBuPyh0LmNhbnRFZGl0PSEwLFllKHQuZmlyc3QsMCkpOm9yKHQsZSxyLCEwKTtpPSEwLGY9ZSxsPS1sfW89Zjtjb250aW51ZSB0fX1yZXR1cm4gb319ZnVuY3Rpb24gbHIodCl7dmFyIGU9c3IodCx0LmRvYy5zZWwuaGVhZCxudWxsLHQub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pO2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIHI9dC5kaXNwbGF5LG49Zmkoci5zaXplciksaT1udWxsO2lmKGUudG9wK24udG9wPDA/aT0hMDplLmJvdHRvbStuLnRvcD4od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmKGk9ITEpLG51bGwhPWkmJiFCaSl7dmFyIG89Im5vbmUiPT1yLmN1cnNvci5zdHlsZS5kaXNwbGF5O28mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLHIuY3Vyc29yLnN0eWxlLmxlZnQ9ZS5sZWZ0KyJweCIsci5jdXJzb3Iuc3R5bGUudG9wPWUudG9wLXIudmlld09mZnNldCsicHgiKSxyLmN1cnNvci5zY3JvbGxJbnRvVmlldyhpKSxvJiYoci5jdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19ZnVuY3Rpb24gc3IodCxlLHIsbil7Zm9yKG51bGw9PW4mJihuPTApOzspe3ZhciBpPSExLG89USh0LGUpLGw9ciYmciE9ZT9RKHQscik6byxzPXVyKHQsTWF0aC5taW4oby5sZWZ0LGwubGVmdCksTWF0aC5taW4oby50b3AsbC50b3ApLW4sTWF0aC5tYXgoby5sZWZ0LGwubGVmdCksTWF0aC5tYXgoby5ib3R0b20sbC5ib3R0b20pK24pLGE9dC5kb2Muc2Nyb2xsVG9wLHU9dC5kb2Muc2Nyb2xsTGVmdDtpZihudWxsIT1zLnNjcm9sbFRvcCYmKFNlKHQscy5zY3JvbGxUb3ApLE1hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1hKT4xJiYoaT0hMCkpLG51bGwhPXMuc2Nyb2xsTGVmdCYmKE1lKHQscy5zY3JvbGxMZWZ0KSxNYXRoLmFicyh0LmRvYy5zY3JvbGxMZWZ0LXUpPjEmJihpPSEwKSksIWkpcmV0dXJuIG99fWZ1bmN0aW9uIGFyKHQsZSxyLG4saSl7dmFyIG89dXIodCxlLHIsbixpKTtudWxsIT1vLnNjcm9sbFRvcCYmU2UodCxvLnNjcm9sbFRvcCksbnVsbCE9by5zY3JvbGxMZWZ0JiZNZSh0LG8uc2Nyb2xsTGVmdCl9ZnVuY3Rpb24gdXIodCxlLHIsbixpKXt2YXIgbz10LmRpc3BsYXksbD1yZSh0LmRpc3BsYXkpOzA+ciYmKHI9MCk7dmFyIHM9by5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8sYT1vLnNjcm9sbGVyLnNjcm9sbFRvcCx1PXt9LGM9dC5kb2MuaGVpZ2h0K0YobyksZj1sPnIsaD1pPmMtbDtpZihhPnIpdS5zY3JvbGxUb3A9Zj8wOnI7ZWxzZSBpZihpPmErcyl7dmFyIGQ9TWF0aC5taW4ociwoaD9jOmkpLXMpO2QhPWEmJih1LnNjcm9sbFRvcD1kKX12YXIgcD1vLnNjcm9sbGVyLmNsaWVudFdpZHRoLVRvLGc9by5zY3JvbGxlci5zY3JvbGxMZWZ0O2UrPW8uZ3V0dGVycy5vZmZzZXRXaWR0aCxuKz1vLmd1dHRlcnMub2Zmc2V0V2lkdGg7dmFyIG09by5ndXR0ZXJzLm9mZnNldFdpZHRoLHY9bSsxMD5lO3JldHVybiBnK20+ZXx8dj8odiYmKGU9MCksdS5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsZS0xMC1tKSk6bj5wK2ctMyYmKHUuc2Nyb2xsTGVmdD1uKzEwLXApLHV9ZnVuY3Rpb24gY3IodCxlLHIpe3QuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0Om51bGw9PWU/dC5kb2Muc2Nyb2xsTGVmdDplLHNjcm9sbFRvcDpudWxsPT1yP3QuZG9jLnNjcm9sbFRvcDpyfX1mdW5jdGlvbiBmcih0LGUscil7dmFyIG49dC5jdXJPcC51cGRhdGVTY3JvbGxQb3N8fCh0LmN1ck9wLnVwZGF0ZVNjcm9sbFBvcz17c2Nyb2xsTGVmdDp0LmRvYy5zY3JvbGxMZWZ0LHNjcm9sbFRvcDp0LmRvYy5zY3JvbGxUb3B9KSxpPXQuZGlzcGxheS5zY3JvbGxlcjtuLnNjcm9sbFRvcD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsSGVpZ2h0LWkuY2xpZW50SGVpZ2h0LG4uc2Nyb2xsVG9wK3IpKSxuLnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihpLnNjcm9sbFdpZHRoLWkuY2xpZW50V2lkdGgsbi5zY3JvbGxMZWZ0K2UpKX1mdW5jdGlvbiBocih0LGUscixuKXt2YXIgaT10LmRvYztpZihudWxsPT1yJiYocj0iYWRkIiksInNtYXJ0Ij09cilpZih0LmRvYy5tb2RlLmluZGVudCl2YXIgbz16KHQsZSk7ZWxzZSByPSJwcmV2Ijt2YXIgbCxzPXQub3B0aW9ucy50YWJTaXplLGE9Z24oaSxlKSx1PVpuKGEudGV4dCxudWxsLHMpLGM9YS50ZXh0Lm1hdGNoKC9eXHMqLylbMF07aWYoInNtYXJ0Ij09ciYmKGw9dC5kb2MubW9kZS5pbmRlbnQobyxhLnRleHQuc2xpY2UoYy5sZW5ndGgpLGEudGV4dCksbD09QW8pKXtpZighbilyZXR1cm47cj0icHJldiJ9InByZXYiPT1yP2w9ZT5pLmZpcnN0P1puKGduKGksZS0xKS50ZXh0LG51bGwscyk6MDoiYWRkIj09cj9sPXUrdC5vcHRpb25zLmluZGVudFVuaXQ6InN1YnRyYWN0Ij09cj9sPXUtdC5vcHRpb25zLmluZGVudFVuaXQ6Im51bWJlciI9PXR5cGVvZiByJiYobD11K3IpLGw9TWF0aC5tYXgoMCxsKTt2YXIgZj0iIixoPTA7aWYodC5vcHRpb25zLmluZGVudFdpdGhUYWJzKWZvcih2YXIgZD1NYXRoLmZsb29yKGwvcyk7ZDstLWQpaCs9cyxmKz0iCSI7bD5oJiYoZis9cW4obC1oKSksZiE9Yz9fZSh0LmRvYyxmLFllKGUsMCksWWUoZSxjLmxlbmd0aCksIitpbnB1dCIpOmkuc2VsLmhlYWQubGluZT09ZSYmaS5zZWwuaGVhZC5jaDxjLmxlbmd0aCYmbnIoaSxZZShlLGMubGVuZ3RoKSxZZShlLGMubGVuZ3RoKSwxKSxhLnN0YXRlQWZ0ZXI9bnVsbH1mdW5jdGlvbiBkcih0LGUscil7dmFyIG49ZSxpPWUsbz10LmRvYztyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/aT1nbihvLHFlKG8sZSkpOm49Ym4oZSksbnVsbD09bj9udWxsOnIoaSxuKT8odWUodCxuLG4rMSksaSk6bnVsbH1mdW5jdGlvbiBwcih0LGUscixuLGkpe2Z1bmN0aW9uIG8oKXt2YXIgZT1zK3I7cmV0dXJuIGU8dC5maXJzdHx8ZT49dC5maXJzdCt0LnNpemU/Zj0hMToocz1lLGM9Z24odCxlKSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT0oaT9TaTpNaSkoYyxhLHIsITApO2lmKG51bGw9PWUpe2lmKHR8fCFvKCkpcmV0dXJuIGY9ITE7YT1pPygwPnI/Ymk6eWkpKGMpOjA+cj9jLnRleHQubGVuZ3RoOjB9ZWxzZSBhPWU7cmV0dXJuITB9dmFyIHM9ZS5saW5lLGE9ZS5jaCx1PXIsYz1nbih0LHMpLGY9ITA7aWYoImNoYXIiPT1uKWwoKTtlbHNlIGlmKCJjb2x1bW4iPT1uKWwoITApO2Vsc2UgaWYoIndvcmQiPT1ufHwiZ3JvdXAiPT1uKWZvcih2YXIgaD1udWxsLGQ9Imdyb3VwIj09bixwPSEwOyEoMD5yKXx8bCghcCk7cD0hMSl7dmFyIGc9Yy50ZXh0LmNoYXJBdChhKXx8IlxuIixtPW9pKGcpPyJ3IjpkPy9ccy8udGVzdChnKT9udWxsOiJwIjpudWxsO2lmKGgmJmghPW0pezA+ciYmKHI9MSxsKCkpO2JyZWFrfWlmKG0mJihoPW0pLHI+MCYmIWwoIXApKWJyZWFrfXZhciB2PW9yKHQsWWUocyxhKSx1LCEwKTtyZXR1cm4gZnx8KHYuaGl0U2lkZT0hMCksdn1mdW5jdGlvbiBncih0LGUscixuKXt2YXIgaSxvPXQuZG9jLGw9ZS5sZWZ0O2lmKCJwYWdlIj09bil7dmFyIHM9TWF0aC5taW4odC5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7aT1lLnRvcCtyKihzLSgwPnI/MS41Oi41KSpyZSh0LmRpc3BsYXkpKX1lbHNlImxpbmUiPT1uJiYoaT1yPjA/ZS5ib3R0b20rMzplLnRvcC0zKTtmb3IoOzspe3ZhciBhPXRlKHQsbCxpKTtpZighYS5vdXRzaWRlKWJyZWFrO2lmKDA+cj8wPj1pOmk+PW8uaGVpZ2h0KXthLmhpdFNpZGU9ITA7YnJlYWt9aSs9NSpyfXJldHVybiBhfWZ1bmN0aW9uIG1yKHQsZSl7dmFyIHI9ZS5jaCxuPWUuY2g7aWYodCl7KGUueFJlbDwwfHxuPT10Lmxlbmd0aCkmJnI/LS1yOisrbjtmb3IodmFyIGk9dC5jaGFyQXQociksbz1vaShpKT9vaTovXHMvLnRlc3QoaSk/ZnVuY3Rpb24odCl7cmV0dXJuL1xzLy50ZXN0KHQpfTpmdW5jdGlvbih0KXtyZXR1cm4hL1xzLy50ZXN0KHQpJiYhb2kodCl9O3I+MCYmbyh0LmNoYXJBdChyLTEpKTspLS1yO2Zvcig7bjx0Lmxlbmd0aCYmbyh0LmNoYXJBdChuKSk7KSsrbn1yZXR1cm57ZnJvbTpZZShlLmxpbmUsciksdG86WWUoZS5saW5lLG4pfX1mdW5jdGlvbiB2cih0LGUpe2VyKHQuZG9jLFllKGUsMCksUWUodC5kb2MsWWUoZSsxLDApKSl9ZnVuY3Rpb24geXIoZSxyLG4saSl7dC5kZWZhdWx0c1tlXT1yLG4mJihzb1tlXT1pP2Z1bmN0aW9uKHQsZSxyKXtyIT11byYmbih0LGUscil9Om4pfWZ1bmN0aW9uIGJyKHQsZSl7aWYoZT09PSEwKXJldHVybiBlO2lmKHQuY29weVN0YXRlKXJldHVybiB0LmNvcHlTdGF0ZShlKTt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpIGluc3RhbmNlb2YgQXJyYXkmJihpPWkuY29uY2F0KFtdKSkscltuXT1pfXJldHVybiByfWZ1bmN0aW9uIHhyKHQsZSxyKXtyZXR1cm4gdC5zdGFydFN0YXRlP3Quc3RhcnRTdGF0ZShlLHIpOiEwfWZ1bmN0aW9uIENyKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD92b1t0XTp0fWZ1bmN0aW9uIHdyKHQsZSxyKXtmdW5jdGlvbiBuKGUpe2U9Q3IoZSk7dmFyIGk9ZVt0XTtpZihpPT09ITEpcmV0dXJuInN0b3AiO2lmKG51bGwhPWkmJnIoaSkpcmV0dXJuITA7aWYoZS5ub2ZhbGx0aHJvdWdoKXJldHVybiJzdG9wIjt2YXIgbz1lLmZhbGx0aHJvdWdoO2lmKG51bGw9PW8pcmV0dXJuITE7aWYoIltvYmplY3QgQXJyYXldIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKXJldHVybiBuKG8pO2Zvcih2YXIgbD0wLHM9by5sZW5ndGg7cz5sOysrbCl7dmFyIGE9bihvW2xdKTtpZihhKXJldHVybiBhfXJldHVybiExfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgbz1uKGVbaV0pO2lmKG8pcmV0dXJuInN0b3AiIT1vfX1mdW5jdGlvbiBMcih0KXt2YXIgZT1Qb1t0LmtleUNvZGVdO3JldHVybiJDdHJsIj09ZXx8IkFsdCI9PWV8fCJTaGlmdCI9PWV8fCJNb2QiPT1lfWZ1bmN0aW9uIGtyKHQsZSl7aWYoemkmJjM0PT10LmtleUNvZGUmJnRbImNoYXIiXSlyZXR1cm4hMTt2YXIgcj1Qb1t0LmtleUNvZGVdO3JldHVybiBudWxsPT1yfHx0LmFsdEdyYXBoS2V5PyExOih0LmFsdEtleSYmKHI9IkFsdC0iK3IpLCgkaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmKHI9IkN0cmwtIityKSwoJGk/dC5jdHJsS2V5OnQubWV0YUtleSkmJihyPSJDbWQtIityKSwhZSYmdC5zaGlmdEtleSYmKHI9IlNoaWZ0LSIrcikscil9ZnVuY3Rpb24gU3IodCxlKXt0aGlzLnBvcz10aGlzLnN0YXJ0PTAsdGhpcy5zdHJpbmc9dCx0aGlzLnRhYlNpemU9ZXx8OCx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5sYXN0Q29sdW1uVmFsdWU9MH1mdW5jdGlvbiBNcih0LGUpe3RoaXMubGluZXM9W10sdGhpcy50eXBlPWUsdGhpcy5kb2M9dH1mdW5jdGlvbiBUcih0LGUscixuLGkpe2lmKG4mJm4uc2hhcmVkKXJldHVybiBIcih0LGUscixuLGkpO2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFRyKSh0LGUscixuLGkpO3ZhciBvPW5ldyBNcih0LGkpO2lmKCRlKHIsZSl8fGplKGUscikmJiJyYW5nZSI9PWkmJighbi5pbmNsdXNpdmVMZWZ0fHwhbi5pbmNsdXNpdmVSaWdodCkpcmV0dXJuIG87biYmcmkobixvKSxvLnJlcGxhY2VkV2l0aCYmKG8uY29sbGFwc2VkPSEwLG8ucmVwbGFjZWRXaXRoPXNpKCJzcGFuIixbby5yZXBsYWNlZFdpdGhdLCJDb2RlTWlycm9yLXdpZGdldCIpLG4uaGFuZGxlTW91c2VFdmVudHN8fChvLnJlcGxhY2VkV2l0aC5pZ25vcmVFdmVudHM9ITApKSxvLmNvbGxhcHNlZCYmKFFpPSEwKSxvLmFkZFRvSGlzdG9yeSYmTW4odCx7ZnJvbTplLHRvOnIsb3JpZ2luOiJtYXJrVGV4dCJ9LHtoZWFkOnQuc2VsLmhlYWQsYW5jaG9yOnQuc2VsLmFuY2hvcn0sMC8wKTt2YXIgbCxzLGEsdT1lLmxpbmUsYz0wLGY9dC5jbTtpZih0Lml0ZXIodSxyLmxpbmUrMSxmdW5jdGlvbihuKXtmJiZvLmNvbGxhcHNlZCYmIWYub3B0aW9ucy5saW5lV3JhcHBpbmcmJkdyKHQsbik9PWYuZGlzcGxheS5tYXhMaW5lJiYoYT0hMCk7dmFyIGk9e2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpvfTtjKz1uLnRleHQubGVuZ3RoLHU9PWUubGluZSYmKGkuZnJvbT1lLmNoLGMtPWUuY2gpLHU9PXIubGluZSYmKGkudG89ci5jaCxjLT1uLnRleHQubGVuZ3RoLXIuY2gpLG8uY29sbGFwc2VkJiYodT09ci5saW5lJiYocz1QcihuLHIuY2gpKSx1PT1lLmxpbmU/bD1QcihuLGUuY2gpOnluKG4sMCkpLFdyKG4saSksKyt1fSksby5jb2xsYXBzZWQmJnQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24oZSl7VnIodCxlKSYmeW4oZSwwKX0pLG8uY2xlYXJPbkVudGVyJiZHbihvLCJiZWZvcmVDdXJzb3JFbnRlciIsZnVuY3Rpb24oKXtvLmNsZWFyKCl9KSxvLnJlYWRPbmx5JiYocWk9ITAsKHQuaGlzdG9yeS5kb25lLmxlbmd0aHx8dC5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpJiZ0LmNsZWFySGlzdG9yeSgpKSxvLmNvbGxhcHNlZCl7aWYobCE9cyl0aHJvdyBuZXcgRXJyb3IoIkluc2VydGluZyBjb2xsYXBzZWQgbWFya2VyIG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpO28uc2l6ZT1jLG8uYXRvbWljPSEwfXJldHVybiBmJiYoYSYmKGYuY3VyT3AudXBkYXRlTWF4TGluZT0hMCksKG8uY2xhc3NOYW1lfHxvLnRpdGxlfHxvLnN0YXJ0U3R5bGV8fG8uZW5kU3R5bGV8fG8uY29sbGFwc2VkKSYmdWUoZixlLmxpbmUsci5saW5lKzEpLG8uYXRvbWljJiZpcihmKSksb31mdW5jdGlvbiBBcih0LGUpe3RoaXMubWFya2Vycz10LHRoaXMucHJpbWFyeT1lO2Zvcih2YXIgcj0wLG49dGhpcztyPHQubGVuZ3RoOysrcil0W3JdLnBhcmVudD10aGlzLEduKHRbcl0sImNsZWFyIixmdW5jdGlvbigpe24uY2xlYXIoKX0pfWZ1bmN0aW9uIEhyKHQsZSxyLG4saSl7bj1yaShuKSxuLnNoYXJlZD0hMTt2YXIgbz1bVHIodCxlLHIsbixpKV0sbD1vWzBdLHM9bi5yZXBsYWNlZFdpdGg7cmV0dXJuIGRuKHQsZnVuY3Rpb24odCl7cyYmKG4ucmVwbGFjZWRXaXRoPXMuY2xvbmVOb2RlKCEwKSksby5wdXNoKFRyKHQsUWUodCxlKSxRZSh0LHIpLG4saSkpO2Zvcih2YXIgYT0wO2E8dC5saW5rZWQubGVuZ3RoOysrYSlpZih0LmxpbmtlZFthXS5pc1BhcmVudClyZXR1cm47bD1RbihvKX0pLG5ldyBBcihvLGwpfWZ1bmN0aW9uIE5yKHQsZSl7aWYodClmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtpZihuLm1hcmtlcj09ZSlyZXR1cm4gbn19ZnVuY3Rpb24gRHIodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXRbbl0hPWUmJihyfHwocj1bXSkpLnB1c2godFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gV3IodCxlKXt0Lm1hcmtlZFNwYW5zPXQubWFya2VkU3BhbnM/dC5tYXJrZWRTcGFucy5jb25jYXQoW2VdKTpbZV0sZS5tYXJrZXIuYXR0YWNoTGluZSh0KX1mdW5jdGlvbiBPcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTtpZihzfHwobC5pbmNsdXNpdmVMZWZ0JiZsLmluY2x1c2l2ZVJpZ2h0fHwiYm9va21hcmsiPT1sLnR5cGUpJiZvLmZyb209PWUmJighcnx8IW8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7KG58fChuPVtdKSkucHVzaCh7ZnJvbTpvLmZyb20sdG86YT9udWxsOm8udG8sbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24gRXIodCxlLHIpe2lmKHQpZm9yKHZhciBuLGk9MDtpPHQubGVuZ3RoOysraSl7dmFyIG89dFtpXSxsPW8ubWFya2VyLHM9bnVsbD09by50b3x8KGwuaW5jbHVzaXZlUmlnaHQ/by50bz49ZTpvLnRvPmUpO2lmKHN8fCJib29rbWFyayI9PWwudHlwZSYmby5mcm9tPT1lJiYoIXJ8fG8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOmE/bnVsbDpvLmZyb20tZSx0bzpudWxsPT1vLnRvP251bGw6by50by1lLG1hcmtlcjpsfSl9fXJldHVybiBufWZ1bmN0aW9uIHpyKHQsZSl7dmFyIHI9dHIodCxlLmZyb20ubGluZSkmJmduKHQsZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zLG49dHIodCxlLnRvLmxpbmUpJiZnbih0LGUudG8ubGluZSkubWFya2VkU3BhbnM7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPWUuZnJvbS5jaCxvPWUudG8uY2gsbD1qZShlLmZyb20sZS50bykscz1PcihyLGksbCksYT1FcihuLG8sbCksdT0xPT1lLnRleHQubGVuZ3RoLGM9UW4oZS50ZXh0KS5sZW5ndGgrKHU/aTowKTtpZihzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKXt2YXIgaD1zW2ZdO2lmKG51bGw9PWgudG8pe3ZhciBkPU5yKGEsaC5tYXJrZXIpO2Q/dSYmKGgudG89bnVsbD09ZC50bz9udWxsOmQudG8rYyk6aC50bz1pfX1pZihhKWZvcih2YXIgZj0wO2Y8YS5sZW5ndGg7KytmKXt2YXIgaD1hW2ZdO2lmKG51bGwhPWgudG8mJihoLnRvKz1jKSxudWxsPT1oLmZyb20pe3ZhciBkPU5yKHMsaC5tYXJrZXIpO2R8fChoLmZyb209Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpKX1lbHNlIGguZnJvbSs9Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpfWlmKHUmJnMpe2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGwhPXNbZl0uZnJvbSYmc1tmXS5mcm9tPT1zW2ZdLnRvJiYiYm9va21hcmsiIT1zW2ZdLm1hcmtlci50eXBlJiZzLnNwbGljZShmLS0sMSk7cy5sZW5ndGh8fChzPW51bGwpfXZhciBwPVtzXTtpZighdSl7dmFyIGcsbT1lLnRleHQubGVuZ3RoLTI7aWYobT4wJiZzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGw9PXNbZl0udG8mJihnfHwoZz1bXSkpLnB1c2goe2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpzW2ZdLm1hcmtlcn0pO2Zvcih2YXIgZj0wO20+ZjsrK2YpcC5wdXNoKGcpO3AucHVzaChhKX1yZXR1cm4gcH1mdW5jdGlvbiBJcih0LGUpe3ZhciByPUFuKHQsZSksbj16cih0LGUpO2lmKCFyKXJldHVybiBuO2lmKCFuKXJldHVybiByO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgbz1yW2ldLGw9bltpXTtpZihvJiZsKXQ6Zm9yKHZhciBzPTA7czxsLmxlbmd0aDsrK3Mpe2Zvcih2YXIgYT1sW3NdLHU9MDt1PG8ubGVuZ3RoOysrdSlpZihvW3VdLm1hcmtlcj09YS5tYXJrZXIpY29udGludWUgdDtvLnB1c2goYSl9ZWxzZSBsJiYocltpXT1sKX1yZXR1cm4gcn1mdW5jdGlvbiBGcih0LGUscil7dmFyIG49bnVsbDtpZih0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe2lmKHQubWFya2VkU3BhbnMpZm9yKHZhciBlPTA7ZTx0Lm1hcmtlZFNwYW5zLmxlbmd0aDsrK2Upe3ZhciByPXQubWFya2VkU3BhbnNbZV0ubWFya2VyOyFyLnJlYWRPbmx5fHxuJiYtMSE9dGkobixyKXx8KG58fChuPVtdKSkucHVzaChyKX19KSwhbilyZXR1cm4gbnVsbDtmb3IodmFyIGk9W3tmcm9tOmUsdG86cn1dLG89MDtvPG4ubGVuZ3RoOysrbylmb3IodmFyIGw9bltvXSxzPWwuZmluZCgpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIHU9aVthXTtpZighJGUodS50byxzLmZyb20pJiYhJGUocy50byx1LmZyb20pKXt2YXIgYz1bYSwxXTsoJGUodS5mcm9tLHMuZnJvbSl8fCFsLmluY2x1c2l2ZUxlZnQmJmplKHUuZnJvbSxzLmZyb20pKSYmYy5wdXNoKHtmcm9tOnUuZnJvbSx0bzpzLmZyb219KSwoJGUocy50byx1LnRvKXx8IWwuaW5jbHVzaXZlUmlnaHQmJmplKHUudG8scy50bykpJiZjLnB1c2goe2Zyb206cy50byx0bzp1LnRvfSksaS5zcGxpY2UuYXBwbHkoaSxjKSxhKz1jLmxlbmd0aC0xfX1yZXR1cm4gaX1mdW5jdGlvbiBQcih0LGUpe3ZhciByLG49UWkmJnQubWFya2VkU3BhbnM7aWYobilmb3IodmFyIGksbz0wO288bi5sZW5ndGg7KytvKWk9bltvXSxpLm1hcmtlci5jb2xsYXBzZWQmJihudWxsPT1pLmZyb218fGkuZnJvbTxlKSYmKG51bGw9PWkudG98fGkudG8+ZSkmJighcnx8ci53aWR0aDxpLm1hcmtlci53aWR0aCkmJihyPWkubWFya2VyKTtyZXR1cm4gcn1mdW5jdGlvbiBScih0KXtyZXR1cm4gUHIodCwtMSl9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIFByKHQsdC50ZXh0Lmxlbmd0aCsxKX1mdW5jdGlvbiBHcih0LGUpe2Zvcih2YXIgcjtyPVJyKGUpOyllPWduKHQsci5maW5kKCkuZnJvbS5saW5lKTtyZXR1cm4gZX1mdW5jdGlvbiBWcih0LGUpe3ZhciByPVFpJiZlLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuLGk9MDtpPHIubGVuZ3RoOysraSlpZihuPXJbaV0sbi5tYXJrZXIuY29sbGFwc2VkKXtpZihudWxsPT1uLmZyb20pcmV0dXJuITA7aWYoIW4ubWFya2VyLnJlcGxhY2VkV2l0aCYmMD09bi5mcm9tJiZuLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZLcih0LGUsbikpcmV0dXJuITB9fWZ1bmN0aW9uIEtyKHQsZSxyKXtpZihudWxsPT1yLnRvKXt2YXIgbj1yLm1hcmtlci5maW5kKCkudG8saT1nbih0LG4ubGluZSk7cmV0dXJuIEtyKHQsaSxOcihpLm1hcmtlZFNwYW5zLHIubWFya2VyKSl9aWYoci5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJnIudG89PWUudGV4dC5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBvLGw9MDtsPGUubWFya2VkU3BhbnMubGVuZ3RoOysrbClpZihvPWUubWFya2VkU3BhbnNbbF0sby5tYXJrZXIuY29sbGFwc2VkJiYhby5tYXJrZXIucmVwbGFjZWRXaXRoJiZvLmZyb209PXIudG8mJihvLm1hcmtlci5pbmNsdXNpdmVMZWZ0fHxyLm1hcmtlci5pbmNsdXNpdmVSaWdodCkmJktyKHQsZSxvKSlyZXR1cm4hMH1mdW5jdGlvbiBVcih0KXt2YXIgZT10Lm1hcmtlZFNwYW5zO2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmRldGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1udWxsfX1mdW5jdGlvbiBYcih0LGUpe2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmF0dGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1lfX1mdW5jdGlvbiBfcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT0hdGhpcy5jbS5jdXJPcDtlJiZpZSh0aGlzLmNtKTt0cnl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtlJiZvZSh0aGlzLmNtKX1yZXR1cm4gcn19ZnVuY3Rpb24gWXIodCl7cmV0dXJuIG51bGwhPXQuaGVpZ2h0P3QuaGVpZ2h0Oih0Lm5vZGUucGFyZW50Tm9kZSYmMT09dC5ub2RlLnBhcmVudE5vZGUubm9kZVR5cGV8fHVpKHQuY20uZGlzcGxheS5tZWFzdXJlLHNpKCJkaXYiLFt0Lm5vZGVdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpKSx0LmhlaWdodD10Lm5vZGUub2Zmc2V0SGVpZ2h0KX1mdW5jdGlvbiBqcih0LGUscixuKXt2YXIgaT1uZXcgeW8odCxyLG4pO3JldHVybiBpLm5vSFNjcm9sbCYmKHQuZGlzcGxheS5hbGlnbldpZGdldHM9ITApLGRyKHQsZSxmdW5jdGlvbihlKXt2YXIgcj1lLndpZGdldHN8fChlLndpZGdldHM9W10pO2lmKG51bGw9PWkuaW5zZXJ0QXQ/ci5wdXNoKGkpOnIuc3BsaWNlKE1hdGgubWluKHIubGVuZ3RoLTEsTWF0aC5tYXgoMCxpLmluc2VydEF0KSksMCxpKSxpLmxpbmU9ZSwhVnIodC5kb2MsZSl8fGkuc2hvd0lmSGlkZGVuKXt2YXIgbj1Dbih0LGUpPHQuZG9jLnNjcm9sbFRvcDt5bihlLGUuaGVpZ2h0K1lyKGkpKSxuJiZmcih0LDAsaS5oZWlnaHQpfXJldHVybiEwfSksaX1mdW5jdGlvbiAkcih0LGUscixuKXt0LnRleHQ9ZSx0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKSxudWxsIT10Lm9yZGVyJiYodC5vcmRlcj1udWxsKSxVcih0KSxYcih0LHIpO3ZhciBpPW4/bih0KToxO2khPXQuaGVpZ2h0JiZ5bih0LGkpfWZ1bmN0aW9uIFpyKHQpe3QucGFyZW50PW51bGwsVXIodCl9ZnVuY3Rpb24gcXIodCxlLHIsbixpLG8pe3ZhciBsPXIuZmxhdHRlblNwYW5zO251bGw9PWwmJihsPXQub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciBzLGE9MCx1PW51bGwsYz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKCIiPT1lJiZyLmJsYW5rTGluZSYmci5ibGFua0xpbmUobik7IWMuZW9sKCk7KWMucG9zPnQub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGg/KGw9ITEsbyYmdG4odCxlLG4sYy5wb3MpLGMucG9zPWUubGVuZ3RoLHM9bnVsbCk6cz1yLnRva2VuKGMsbiksbCYmdT09c3x8KGE8Yy5zdGFydCYmaShjLnN0YXJ0LHUpLGE9Yy5zdGFydCx1PXMpLGMuc3RhcnQ9Yy5wb3M7Zm9yKDthPGMucG9zOyl7dmFyIGY9TWF0aC5taW4oYy5wb3MsYSs1ZTQpO2koZix1KSxhPWZ9fWZ1bmN0aW9uIFFyKHQsZSxyLG4pe3ZhciBpPVt0LnN0YXRlLm1vZGVHZW5dO3FyKHQsZS50ZXh0LHQuZG9jLm1vZGUscixmdW5jdGlvbih0LGUpe2kucHVzaCh0LGUpfSxuKTtmb3IodmFyIG89MDtvPHQuc3RhdGUub3ZlcmxheXMubGVuZ3RoOysrbyl7dmFyIGw9dC5zdGF0ZS5vdmVybGF5c1tvXSxzPTEsYT0wO3FyKHQsZS50ZXh0LGwubW9kZSwhMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1zO3Q+YTspe3ZhciBuPWlbc107bj50JiZpLnNwbGljZShzLDEsdCxpW3MrMV0sbikscys9MixhPU1hdGgubWluKHQsbil9aWYoZSlpZihsLm9wYXF1ZSlpLnNwbGljZShyLHMtcix0LGUpLHM9cisyO2Vsc2UgZm9yKDtzPnI7cis9Mil7dmFyIG89aVtyKzFdO2lbcisxXT1vP28rIiAiK2U6ZX19KX1yZXR1cm4gaX1mdW5jdGlvbiBKcih0LGUpe3JldHVybiBlLnN0eWxlcyYmZS5zdHlsZXNbMF09PXQuc3RhdGUubW9kZUdlbnx8KGUuc3R5bGVzPVFyKHQsZSxlLnN0YXRlQWZ0ZXI9eih0LGJuKGUpKSkpLGUuc3R5bGVzfWZ1bmN0aW9uIHRuKHQsZSxyLG4pe3ZhciBpPXQuZG9jLm1vZGUsbz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKG8uc3RhcnQ9by5wb3M9bnx8MCwiIj09ZSYmaS5ibGFua0xpbmUmJmkuYmxhbmtMaW5lKHIpOyFvLmVvbCgpJiZvLnBvczw9dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aDspaS50b2tlbihvLHIpLG8uc3RhcnQ9by5wb3N9ZnVuY3Rpb24gZW4odCxlKXtpZighdClyZXR1cm4gbnVsbDtmb3IoOzspe3ZhciByPXQubWF0Y2goLyg/Ol58XHMpbGluZS0oYmFja2dyb3VuZC0pPyhcUyspLyk7aWYoIXIpYnJlYWs7dD10LnNsaWNlKDAsci5pbmRleCkrdC5zbGljZShyLmluZGV4K3JbMF0ubGVuZ3RoKTt2YXIgbj1yWzFdPyJiZ0NsYXNzIjoidGV4dENsYXNzIjtudWxsPT1lW25dP2Vbbl09clsyXTpuZXcgUmVnRXhwKCIoPzpefHMpIityWzJdKyIoPzokfHMpIikudGVzdChlW25dKXx8KGVbbl0rPSIgIityWzJdKX1yZXR1cm4geG9bdF18fCh4b1t0XT0iY20tIit0LnJlcGxhY2UoLyArL2csIiBjbS0iKSl9ZnVuY3Rpb24gcm4odCxlLHIsbil7Zm9yKHZhciBpLG89ZSxsPSEwO2k9UnIobyk7KW89Z24odC5kb2MsaS5maW5kKCkuZnJvbS5saW5lKTt2YXIgcz17cHJlOnNpKCJwcmUiKSxjb2w6MCxwb3M6MCxtZWFzdXJlOm51bGwsbWVhc3VyZWRTb21ldGhpbmc6ITEsY206dCxjb3B5V2lkZ2V0czpufTtkb3tvLnRleHQmJihsPSExKSxzLm1lYXN1cmU9bz09ZSYmcixzLnBvcz0wLHMuYWRkVG9rZW49cy5tZWFzdXJlP2xuOm9uLChBaXx8V2kpJiZ0LmdldE9wdGlvbigibGluZVdyYXBwaW5nIikmJihzLmFkZFRva2VuPXNuKHMuYWRkVG9rZW4pKTt2YXIgYT11bihvLHMsSnIodCxvKSk7ciYmbz09ZSYmIXMubWVhc3VyZWRTb21ldGhpbmcmJihyWzBdPXMucHJlLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSkscy5tZWFzdXJlZFNvbWV0aGluZz0hMCksYSYmKG89Z24odC5kb2MsYS50by5saW5lKSl9d2hpbGUoYSk7IXJ8fHMubWVhc3VyZWRTb21ldGhpbmd8fHJbMF18fChyWzBdPXMucHJlLmFwcGVuZENoaWxkKGw/c2koInNwYW4iLCLCoCIpOnBpKHQuZGlzcGxheS5tZWFzdXJlKSkpLHMucHJlLmZpcnN0Q2hpbGR8fFZyKHQuZG9jLGUpfHxzLnByZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiwqAiKSk7dmFyIHU7aWYociYmKEFpfHxEaSkmJih1PXduKG8pKSl7dmFyIGM9dS5sZW5ndGgtMTt1W2NdLmZyb209PXVbY10udG8mJi0tYzt2YXIgZj11W2NdLGg9dVtjLTFdO2lmKGYuZnJvbSsxPT1mLnRvJiZoJiZmLmxldmVsPGgubGV2ZWwpe3ZhciBkPXJbcy5wb3MtMV07ZCYmZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkLm1lYXN1cmVSaWdodD1waSh0LmRpc3BsYXkubWVhc3VyZSksZC5uZXh0U2libGluZyl9fXZhciBwPXMudGV4dENsYXNzP3MudGV4dENsYXNzKyIgIisoZS50ZXh0Q2xhc3N8fCIiKTplLnRleHRDbGFzcztyZXR1cm4gcCYmKHMucHJlLmNsYXNzTmFtZT1wKSxLbih0LCJyZW5kZXJMaW5lIix0LGUscy5wcmUpLHN9ZnVuY3Rpb24gbm4odCl7dmFyIGU9c2koInNwYW4iLCLigKIiLCJjbS1pbnZhbGlkY2hhciIpO3JldHVybiBlLnRpdGxlPSJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNiksZX1mdW5jdGlvbiBvbih0LGUscixuLGksbyl7aWYoZSl7dmFyIGw9dC5jbS5vcHRpb25zLnNwZWNpYWxDaGFycztpZihsLnRlc3QoZSkpZm9yKHZhciBzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxhPTA7Oyl7bC5sYXN0SW5kZXg9YTt2YXIgdT1sLmV4ZWMoZSksYz11P3UuaW5kZXgtYTplLmxlbmd0aC1hO2lmKGMmJihzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuc2xpY2UoYSxhK2MpKSksdC5jb2wrPWMpLCF1KWJyZWFrO2lmKGErPWMrMSwiCSI9PXVbMF0pe3ZhciBmPXQuY20ub3B0aW9ucy50YWJTaXplLGg9Zi10LmNvbCVmO3MuYXBwZW5kQ2hpbGQoc2koInNwYW4iLHFuKGgpLCJjbS10YWIiKSksdC5jb2wrPWh9ZWxzZXt2YXIgZD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcih1WzBdKTtzLmFwcGVuZENoaWxkKGQpLHQuY29sKz0xfX1lbHNle3QuY29sKz1lLmxlbmd0aDt2YXIgcz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX1pZihyfHxufHxpfHx0Lm1lYXN1cmUpe3ZhciBwPXJ8fCIiO24mJihwKz1uKSxpJiYocCs9aSk7dmFyIGQ9c2koInNwYW4iLFtzXSxwKTtyZXR1cm4gbyYmKGQudGl0bGU9byksdC5wcmUuYXBwZW5kQ2hpbGQoZCl9dC5wcmUuYXBwZW5kQ2hpbGQocyl9fWZ1bmN0aW9uIGxuKHQsZSxyLG4saSl7Zm9yKHZhciBvPXQuY20ub3B0aW9ucy5saW5lV3JhcHBpbmcsbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgcz1lLmNoYXJBdChsKSxhPTA9PWw7cz49Iu2ggCImJiLtr78iPnMmJmw8ZS5sZW5ndGgtMT8ocz1lLnNsaWNlKGwsbCsyKSwrK2wpOmwmJm8mJmhpKGUsbCkmJnQucHJlLmFwcGVuZENoaWxkKHNpKCJ3YnIiKSk7dmFyIHU9dC5tZWFzdXJlW3QucG9zXSxjPXQubWVhc3VyZVt0LnBvc109b24odCxzLHIsYSYmbixsPT1lLmxlbmd0aC0xJiZpKTt1JiYoYy5sZWZ0U2lkZT11LmxlZnRTaWRlfHx1KSxBaSYmbyYmIiAiPT1zJiZsJiYhL1xzLy50ZXN0KGUuY2hhckF0KGwtMSkpJiZsPGUubGVuZ3RoLTEmJiEvXHMvLnRlc3QoZS5jaGFyQXQobCsxKSkmJihjLnN0eWxlLndoaXRlU3BhY2U9Im5vcm1hbCIpLHQucG9zKz1zLmxlbmd0aH1lLmxlbmd0aCYmKHQubWVhc3VyZWRTb21ldGhpbmc9ITApfWZ1bmN0aW9uIHNuKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlPSIgIixyPTA7cjx0Lmxlbmd0aC0yOysrcillKz1yJTI/IiAiOiLCoCI7cmV0dXJuIGUrPSIgIn1yZXR1cm4gZnVuY3Rpb24ocixuLGksbyxsLHMpe3JldHVybiB0KHIsbi5yZXBsYWNlKC8gezMsfS9nLGUpLGksbyxsLHMpfX1mdW5jdGlvbiBhbih0LGUscixuKXt2YXIgaT0hbiYmci5yZXBsYWNlZFdpdGg7aWYoaSYmKHQuY29weVdpZGdldHMmJihpPWkuY2xvbmVOb2RlKCEwKSksdC5wcmUuYXBwZW5kQ2hpbGQoaSksdC5tZWFzdXJlKSl7aWYoZSl0Lm1lYXN1cmVbdC5wb3NdPWk7ZWxzZXt2YXIgbz1waSh0LmNtLmRpc3BsYXkubWVhc3VyZSk7aWYoImJvb2ttYXJrIiE9ci50eXBlfHxyLmluc2VydExlZnQpe2lmKHQubWVhc3VyZVt0LnBvc10pcmV0dXJuO3QubWVhc3VyZVt0LnBvc109dC5wcmUuaW5zZXJ0QmVmb3JlKG8saSl9ZWxzZSB0Lm1lYXN1cmVbdC5wb3NdPXQucHJlLmFwcGVuZENoaWxkKG8pfXQubWVhc3VyZWRTb21ldGhpbmc9ITB9dC5wb3MrPWV9ZnVuY3Rpb24gdW4odCxlLHIpe3ZhciBuPXQubWFya2VkU3BhbnMsaT10LnRleHQsbz0wO2lmKG4pZm9yKHZhciBsLHMsYSx1LGMsZixoPWkubGVuZ3RoLGQ9MCxwPTEsZz0iIixtPTA7Oyl7aWYobT09ZCl7cz1hPXU9Yz0iIixmPW51bGwsbT0xLzA7Zm9yKHZhciB2PVtdLHk9MDt5PG4ubGVuZ3RoOysreSl7dmFyIGI9blt5XSx4PWIubWFya2VyO2IuZnJvbTw9ZCYmKG51bGw9PWIudG98fGIudG8+ZCk/KG51bGwhPWIudG8mJm0+Yi50byYmKG09Yi50byxhPSIiKSx4LmNsYXNzTmFtZSYmKHMrPSIgIit4LmNsYXNzTmFtZSkseC5zdGFydFN0eWxlJiZiLmZyb209PWQmJih1Kz0iICIreC5zdGFydFN0eWxlKSx4LmVuZFN0eWxlJiZiLnRvPT1tJiYoYSs9IiAiK3guZW5kU3R5bGUpLHgudGl0bGUmJiFjJiYoYz14LnRpdGxlKSx4LmNvbGxhcHNlZCYmKCFmfHxmLm1hcmtlci5zaXplPHguc2l6ZSkmJihmPWIpKTpiLmZyb20+ZCYmbT5iLmZyb20mJihtPWIuZnJvbSksImJvb2ttYXJrIj09eC50eXBlJiZiLmZyb209PWQmJngucmVwbGFjZWRXaXRoJiZ2LnB1c2goeCkKfWlmKGYmJihmLmZyb218fDApPT1kJiYoYW4oZSwobnVsbD09Zi50bz9oOmYudG8pLWQsZi5tYXJrZXIsbnVsbD09Zi5mcm9tKSxudWxsPT1mLnRvKSlyZXR1cm4gZi5tYXJrZXIuZmluZCgpO2lmKCFmJiZ2Lmxlbmd0aClmb3IodmFyIHk9MDt5PHYubGVuZ3RoOysreSlhbihlLDAsdlt5XSl9aWYoZD49aClicmVhaztmb3IodmFyIEM9TWF0aC5taW4oaCxtKTs7KXtpZihnKXt2YXIgdz1kK2cubGVuZ3RoO2lmKCFmKXt2YXIgTD13PkM/Zy5zbGljZSgwLEMtZCk6ZztlLmFkZFRva2VuKGUsTCxsP2wrczpzLHUsZCtMLmxlbmd0aD09bT9hOiIiLGMpfWlmKHc+PUMpe2c9Zy5zbGljZShDLWQpLGQ9QzticmVha31kPXcsdT0iIn1nPWkuc2xpY2UobyxvPXJbcCsrXSksbD1lbihyW3ArK10sZSl9fWVsc2UgZm9yKHZhciBwPTE7cDxyLmxlbmd0aDtwKz0yKWUuYWRkVG9rZW4oZSxpLnNsaWNlKG8sbz1yW3BdKSxlbihyW3ArMV0sZSkpfWZ1bmN0aW9uIGNuKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gcj9yW3RdOm51bGx9ZnVuY3Rpb24gbCh0LHIsbil7JHIodCxyLG4saSksVW4odCwiY2hhbmdlIix0LGUpfXZhciBzPWUuZnJvbSxhPWUudG8sdT1lLnRleHQsYz1nbih0LHMubGluZSksZj1nbih0LGEubGluZSksaD1Rbih1KSxkPW8odS5sZW5ndGgtMSkscD1hLmxpbmUtcy5saW5lO2lmKDAhPXMuY2h8fDAhPWEuY2h8fCIiIT1ofHx0LmNtJiYhdC5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSlpZihjPT1mKWlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKStoK2MudGV4dC5zbGljZShhLmNoKSxkKTtlbHNle2Zvcih2YXIgZz1bXSxtPTEsdj11Lmxlbmd0aC0xO3Y+bTsrK20pZy5wdXNoKG5ldyBibyh1W21dLG8obSksaSkpO2cucHVzaChuZXcgYm8oaCtjLnRleHQuc2xpY2UoYS5jaCksZCxpKSksbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK3VbMF0sbygwKSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZSBpZigxPT11Lmxlbmd0aClsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXStmLnRleHQuc2xpY2UoYS5jaCksbygwKSksdC5yZW1vdmUocy5saW5lKzEscCk7ZWxzZXtsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSxsKGYsaCtmLnRleHQuc2xpY2UoYS5jaCksZCk7Zm9yKHZhciBtPTEsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7cD4xJiZ0LnJlbW92ZShzLmxpbmUrMSxwLTEpLHQuaW5zZXJ0KHMubGluZSsxLGcpfWVsc2V7Zm9yKHZhciBtPTAsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7bChmLGYudGV4dCxkKSxwJiZ0LnJlbW92ZShzLmxpbmUscCksZy5sZW5ndGgmJnQuaW5zZXJ0KHMubGluZSxnKX1Vbih0LCJjaGFuZ2UiLHQsZSksbnIodCxuLmFuY2hvcixuLmhlYWQsbnVsbCwhMCl9ZnVuY3Rpb24gZm4odCl7dGhpcy5saW5lcz10LHRoaXMucGFyZW50PW51bGw7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPTA7cj5lOysrZSl0W2VdLnBhcmVudD10aGlzLG4rPXRbZV0uaGVpZ2h0O3RoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gaG4odCl7dGhpcy5jaGlsZHJlbj10O2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10Lmxlbmd0aDtpPm47KytuKXt2YXIgbz10W25dO2UrPW8uY2h1bmtTaXplKCkscis9by5oZWlnaHQsby5wYXJlbnQ9dGhpc310aGlzLnNpemU9ZSx0aGlzLmhlaWdodD1yLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24gZG4odCxlLHIpe2Z1bmN0aW9uIG4odCxpLG8pe2lmKHQubGlua2VkKWZvcih2YXIgbD0wO2w8dC5saW5rZWQubGVuZ3RoOysrbCl7dmFyIHM9dC5saW5rZWRbbF07aWYocy5kb2MhPWkpe3ZhciBhPW8mJnMuc2hhcmVkSGlzdDsoIXJ8fGEpJiYoZShzLmRvYyxhKSxuKHMuZG9jLHQsYSkpfX19bih0LG51bGwsITApfWZ1bmN0aW9uIHBuKHQsZSl7aWYoZS5jbSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuIik7dC5kb2M9ZSxlLmNtPXQsbyh0KSxyKHQpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fGYodCksdC5vcHRpb25zLm1vZGU9ZS5tb2RlT3B0aW9uLHVlKHQpfWZ1bmN0aW9uIGduKHQsZSl7Zm9yKGUtPXQuZmlyc3Q7IXQubGluZXM7KWZvcih2YXIgcj0wOzsrK3Ipe3ZhciBuPXQuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+ZSl7dD1uO2JyZWFrfWUtPWl9cmV0dXJuIHQubGluZXNbZV19ZnVuY3Rpb24gbW4odCxlLHIpe3ZhciBuPVtdLGk9ZS5saW5lO3JldHVybiB0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe3ZhciBvPXQudGV4dDtpPT1yLmxpbmUmJihvPW8uc2xpY2UoMCxyLmNoKSksaT09ZS5saW5lJiYobz1vLnNsaWNlKGUuY2gpKSxuLnB1c2gobyksKytpfSksbn1mdW5jdGlvbiB2bih0LGUscil7dmFyIG49W107cmV0dXJuIHQuaXRlcihlLHIsZnVuY3Rpb24odCl7bi5wdXNoKHQudGV4dCl9KSxufWZ1bmN0aW9uIHluKHQsZSl7Zm9yKHZhciByPWUtdC5oZWlnaHQsbj10O247bj1uLnBhcmVudCluLmhlaWdodCs9cn1mdW5jdGlvbiBibih0KXtpZihudWxsPT10LnBhcmVudClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQscj10aShlLmxpbmVzLHQpLG49ZS5wYXJlbnQ7bjtlPW4sbj1uLnBhcmVudClmb3IodmFyIGk9MDtuLmNoaWxkcmVuW2ldIT1lOysraSlyKz1uLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpO3JldHVybiByK2UuZmlyc3R9ZnVuY3Rpb24geG4odCxlKXt2YXIgcj10LmZpcnN0O3Q6ZG97Zm9yKHZhciBuPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10LmNoaWxkcmVuW25dLGw9by5oZWlnaHQ7aWYobD5lKXt0PW87Y29udGludWUgdH1lLT1sLHIrPW8uY2h1bmtTaXplKCl9cmV0dXJuIHJ9d2hpbGUoIXQubGluZXMpO2Zvcih2YXIgbj0wLGk9dC5saW5lcy5sZW5ndGg7aT5uOysrbil7dmFyIHM9dC5saW5lc1tuXSxhPXMuaGVpZ2h0O2lmKGE+ZSlicmVhaztlLT1hfXJldHVybiByK259ZnVuY3Rpb24gQ24odCxlKXtlPUdyKHQuZG9jLGUpO2Zvcih2YXIgcj0wLG49ZS5wYXJlbnQsaT0wO2k8bi5saW5lcy5sZW5ndGg7KytpKXt2YXIgbz1uLmxpbmVzW2ldO2lmKG89PWUpYnJlYWs7cis9by5oZWlnaHR9Zm9yKHZhciBsPW4ucGFyZW50O2w7bj1sLGw9bi5wYXJlbnQpZm9yKHZhciBpPTA7aTxsLmNoaWxkcmVuLmxlbmd0aDsrK2kpe3ZhciBzPWwuY2hpbGRyZW5baV07aWYocz09bilicmVhaztyKz1zLmhlaWdodH1yZXR1cm4gcn1mdW5jdGlvbiB3bih0KXt2YXIgZT10Lm9yZGVyO3JldHVybiBudWxsPT1lJiYoZT10Lm9yZGVyPUJvKHQudGV4dCkpLGV9ZnVuY3Rpb24gTG4odCl7cmV0dXJue2RvbmU6W10sdW5kb25lOltdLHVuZG9EZXB0aDoxLzAsbGFzdFRpbWU6MCxsYXN0T3A6bnVsbCxsYXN0T3JpZ2luOm51bGwsZ2VuZXJhdGlvbjp0fHwxLG1heEdlbmVyYXRpb246dHx8MX19ZnVuY3Rpb24ga24odCxlLHIsbil7dmFyIGk9ZVsic3BhbnNfIit0LmlkXSxvPTA7dC5pdGVyKE1hdGgubWF4KHQuZmlyc3QsciksTWF0aC5taW4odC5maXJzdCt0LnNpemUsbiksZnVuY3Rpb24ocil7ci5tYXJrZWRTcGFucyYmKChpfHwoaT1lWyJzcGFuc18iK3QuaWRdPXt9KSlbb109ci5tYXJrZWRTcGFucyksKytvfSl9ZnVuY3Rpb24gU24odCxlKXt2YXIgcj17bGluZTplLmZyb20ubGluZSxjaDplLmZyb20uY2h9LG49e2Zyb206cix0bzpsbyhlKSx0ZXh0Om1uKHQsZS5mcm9tLGUudG8pfTtyZXR1cm4ga24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKSxkbih0LGZ1bmN0aW9uKHQpe2tuKHQsbixlLmZyb20ubGluZSxlLnRvLmxpbmUrMSl9LCEwKSxufWZ1bmN0aW9uIE1uKHQsZSxyLG4pe3ZhciBpPXQuaGlzdG9yeTtpLnVuZG9uZS5sZW5ndGg9MDt2YXIgbz0rbmV3IERhdGUsbD1RbihpLmRvbmUpO2lmKGwmJihpLmxhc3RPcD09bnx8aS5sYXN0T3JpZ2luPT1lLm9yaWdpbiYmZS5vcmlnaW4mJigiKyI9PWUub3JpZ2luLmNoYXJBdCgwKSYmdC5jbSYmaS5sYXN0VGltZT5vLXQuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheXx8IioiPT1lLm9yaWdpbi5jaGFyQXQoMCkpKSl7dmFyIHM9UW4obC5jaGFuZ2VzKTtqZShlLmZyb20sZS50bykmJmplKGUuZnJvbSxzLnRvKT9zLnRvPWxvKGUpOmwuY2hhbmdlcy5wdXNoKFNuKHQsZSkpLGwuYW5jaG9yQWZ0ZXI9ci5hbmNob3IsbC5oZWFkQWZ0ZXI9ci5oZWFkfWVsc2UgZm9yKGw9e2NoYW5nZXM6W1NuKHQsZSldLGdlbmVyYXRpb246aS5nZW5lcmF0aW9uLGFuY2hvckJlZm9yZTp0LnNlbC5hbmNob3IsaGVhZEJlZm9yZTp0LnNlbC5oZWFkLGFuY2hvckFmdGVyOnIuYW5jaG9yLGhlYWRBZnRlcjpyLmhlYWR9LGkuZG9uZS5wdXNoKGwpLGkuZ2VuZXJhdGlvbj0rK2kubWF4R2VuZXJhdGlvbjtpLmRvbmUubGVuZ3RoPmkudW5kb0RlcHRoOylpLmRvbmUuc2hpZnQoKTtpLmxhc3RUaW1lPW8saS5sYXN0T3A9bixpLmxhc3RPcmlnaW49ZS5vcmlnaW59ZnVuY3Rpb24gVG4odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlLHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLm1hcmtlci5leHBsaWNpdGx5Q2xlYXJlZD9lfHwoZT10LnNsaWNlKDAscikpOmUmJmUucHVzaCh0W3JdKTtyZXR1cm4gZT9lLmxlbmd0aD9lOm51bGw6dH1mdW5jdGlvbiBBbih0LGUpe3ZhciByPWVbInNwYW5zXyIrdC5pZF07aWYoIXIpcmV0dXJuIG51bGw7Zm9yKHZhciBuPTAsaT1bXTtuPGUudGV4dC5sZW5ndGg7KytuKWkucHVzaChUbihyW25dKSk7cmV0dXJuIGl9ZnVuY3Rpb24gSG4odCxlKXtmb3IodmFyIHI9MCxuPVtdO3I8dC5sZW5ndGg7KytyKXt2YXIgaT10W3JdLG89aS5jaGFuZ2VzLGw9W107bi5wdXNoKHtjaGFuZ2VzOmwsYW5jaG9yQmVmb3JlOmkuYW5jaG9yQmVmb3JlLGhlYWRCZWZvcmU6aS5oZWFkQmVmb3JlLGFuY2hvckFmdGVyOmkuYW5jaG9yQWZ0ZXIsaGVhZEFmdGVyOmkuaGVhZEFmdGVyfSk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDsrK3Mpe3ZhciBhLHU9b1tzXTtpZihsLnB1c2goe2Zyb206dS5mcm9tLHRvOnUudG8sdGV4dDp1LnRleHR9KSxlKWZvcih2YXIgYyBpbiB1KShhPWMubWF0Y2goL15zcGFuc18oXGQrKSQvKSkmJnRpKGUsTnVtYmVyKGFbMV0pKT4tMSYmKFFuKGwpW2NdPXVbY10sZGVsZXRlIHVbY10pfX1yZXR1cm4gbn1mdW5jdGlvbiBObih0LGUscixuKXtyPHQubGluZT90LmxpbmUrPW46ZTx0LmxpbmUmJih0LmxpbmU9ZSx0LmNoPTApfWZ1bmN0aW9uIERuKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXtmb3IodmFyIG89dFtpXSxsPSEwLHM9MDtzPG8uY2hhbmdlcy5sZW5ndGg7KytzKXt2YXIgYT1vLmNoYW5nZXNbc107aWYoby5jb3BpZWR8fChhLmZyb209WmUoYS5mcm9tKSxhLnRvPVplKGEudG8pKSxyPGEuZnJvbS5saW5lKWEuZnJvbS5saW5lKz1uLGEudG8ubGluZSs9bjtlbHNlIGlmKGU8PWEudG8ubGluZSl7bD0hMTticmVha319by5jb3BpZWR8fChvLmFuY2hvckJlZm9yZT1aZShvLmFuY2hvckJlZm9yZSksby5oZWFkQmVmb3JlPVplKG8uaGVhZEJlZm9yZSksby5hbmNob3JBZnRlcj1aZShvLmFuY2hvckFmdGVyKSxvLnJlYWRBZnRlcj1aZShvLmhlYWRBZnRlciksby5jb3BpZWQ9ITApLGw/KE5uKG8uYW5jaG9yQmVmb3JlKSxObihvLmhlYWRCZWZvcmUpLE5uKG8uYW5jaG9yQWZ0ZXIpLE5uKG8uaGVhZEFmdGVyKSk6KHQuc3BsaWNlKDAsaSsxKSxpPTApfX1mdW5jdGlvbiBXbih0LGUpe3ZhciByPWUuZnJvbS5saW5lLG49ZS50by5saW5lLGk9ZS50ZXh0Lmxlbmd0aC0obi1yKS0xO0RuKHQuZG9uZSxyLG4saSksRG4odC51bmRvbmUscixuLGkpfWZ1bmN0aW9uIE9uKCl7UG4odGhpcyl9ZnVuY3Rpb24gRW4odCl7cmV0dXJuIHQuc3RvcHx8KHQuc3RvcD1PbiksdH1mdW5jdGlvbiB6bih0KXt0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIEluKHQpe3Quc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gRm4odCl7cmV0dXJuIG51bGwhPXQuZGVmYXVsdFByZXZlbnRlZD90LmRlZmF1bHRQcmV2ZW50ZWQ6MD09dC5yZXR1cm5WYWx1ZX1mdW5jdGlvbiBQbih0KXt6bih0KSxJbih0KX1mdW5jdGlvbiBSbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudH1mdW5jdGlvbiBCbih0KXt2YXIgZT10LndoaWNoO3JldHVybiBudWxsPT1lJiYoMSZ0LmJ1dHRvbj9lPTE6MiZ0LmJ1dHRvbj9lPTM6NCZ0LmJ1dHRvbiYmKGU9MikpLEtpJiZ0LmN0cmxLZXkmJjE9PWUmJihlPTMpLGV9ZnVuY3Rpb24gR24odCxlLHIpe2lmKHQuYWRkRXZlbnRMaXN0ZW5lcil0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuYXR0YWNoRXZlbnQpdC5hdHRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVyc3x8KHQuX2hhbmRsZXJzPXt9KSxpPW5bZV18fChuW2VdPVtdKTtpLnB1c2gocil9fWZ1bmN0aW9uIFZuKHQsZSxyKXtpZih0LnJlbW92ZUV2ZW50TGlzdGVuZXIpdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMSk7ZWxzZSBpZih0LmRldGFjaEV2ZW50KXQuZGV0YWNoRXZlbnQoIm9uIitlLHIpO2Vsc2V7dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKCFuKXJldHVybjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoOysraSlpZihuW2ldPT1yKXtuLnNwbGljZShpLDEpO2JyZWFrfX19ZnVuY3Rpb24gS24odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYocilmb3IodmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLGk9MDtpPHIubGVuZ3RoOysraSlyW2ldLmFwcGx5KG51bGwsbil9ZnVuY3Rpb24gVW4odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxpKX19dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKG4pe3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtTb3x8KCsrTW8sU289W10sc2V0VGltZW91dChfbiwwKSk7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDsrK28pU28ucHVzaChyKG5bb10pKX19ZnVuY3Rpb24gWG4odCxlLHIpe3JldHVybiBLbih0LHJ8fGUudHlwZSx0LGUpLEZuKGUpfHxlLmNvZGVtaXJyb3JJZ25vcmV9ZnVuY3Rpb24gX24oKXstLU1vO3ZhciB0PVNvO1NvPW51bGw7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2UpdFtlXSgpfWZ1bmN0aW9uIFluKHQsZSl7dmFyIHI9dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO3JldHVybiByJiZyLmxlbmd0aD4wfWZ1bmN0aW9uIGpuKHQpe3QucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7R24odGhpcyx0LGUpfSx0LnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXtWbih0aGlzLHQsZSl9fWZ1bmN0aW9uICRuKCl7dGhpcy5pZD1udWxsfWZ1bmN0aW9uIFpuKHQsZSxyLG4saSl7bnVsbD09ZSYmKGU9dC5zZWFyY2goL1teXHNcdTAwYTBdLyksLTE9PWUmJihlPXQubGVuZ3RoKSk7Zm9yKHZhciBvPW58fDAsbD1pfHwwO2U+bzsrK28pIgkiPT10LmNoYXJBdChvKT9sKz1yLWwlcjorK2w7cmV0dXJuIGx9ZnVuY3Rpb24gcW4odCl7Zm9yKDtIby5sZW5ndGg8PXQ7KUhvLnB1c2goUW4oSG8pKyIgIik7cmV0dXJuIEhvW3RdfWZ1bmN0aW9uIFFuKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfWZ1bmN0aW9uIEpuKHQpe2lmKEdpKXQuc2VsZWN0aW9uU3RhcnQ9MCx0LnNlbGVjdGlvbkVuZD10LnZhbHVlLmxlbmd0aDtlbHNlIHRyeXt0LnNlbGVjdCgpfWNhdGNoKGUpe319ZnVuY3Rpb24gdGkodCxlKXtpZih0LmluZGV4T2YpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO24+cjsrK3IpaWYodFtyXT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBlaSh0LGUpe2Z1bmN0aW9uIHIoKXt9ci5wcm90b3R5cGU9dDt2YXIgbj1uZXcgcjtyZXR1cm4gZSYmcmkoZSxuKSxufWZ1bmN0aW9uIHJpKHQsZSl7ZXx8KGU9e30pO2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT1bXSxyPTA7dD5yOysrcillLnB1c2godm9pZCAwKTtyZXR1cm4gZX1mdW5jdGlvbiBpaSh0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gb2kodCl7cmV0dXJuL1x3Ly50ZXN0KHQpfHx0PiLCgCImJih0LnRvVXBwZXJDYXNlKCkhPXQudG9Mb3dlckNhc2UoKXx8Tm8udGVzdCh0KSl9ZnVuY3Rpb24gbGkodCl7Zm9yKHZhciBlIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzaSh0LGUscixuKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO2lmKHImJihpLmNsYXNzTmFtZT1yKSxuJiYoaS5zdHlsZS5jc3NUZXh0PW4pLCJzdHJpbmciPT10eXBlb2YgZSljaShpLGUpO2Vsc2UgaWYoZSlmb3IodmFyIG89MDtvPGUubGVuZ3RoOysrbylpLmFwcGVuZENoaWxkKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGFpKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMubGVuZ3RoO2U+MDstLWUpdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3JldHVybiB0fWZ1bmN0aW9uIHVpKHQsZSl7cmV0dXJuIGFpKHQpLmFwcGVuZENoaWxkKGUpfWZ1bmN0aW9uIGNpKHQsZSl7Tmk/KHQuaW5uZXJIVE1MPSIiLHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpKTp0LnRleHRDb250ZW50PWV9ZnVuY3Rpb24gZmkodCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4hMX1mdW5jdGlvbiBkaSh0KXtpZihudWxsIT1PbylyZXR1cm4gT287dmFyIGU9c2koImRpdiIsbnVsbCxudWxsLCJ3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxvdy14OiBzY3JvbGwiKTtyZXR1cm4gdWkodCxlKSxlLm9mZnNldFdpZHRoJiYoT289ZS5vZmZzZXRIZWlnaHQtZS5jbGllbnRIZWlnaHQpLE9vfHwwfWZ1bmN0aW9uIHBpKHQpe2lmKG51bGw9PUVvKXt2YXIgZT1zaSgic3BhbiIsIuKAiyIpO3VpKHQsc2koInNwYW4iLFtlLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IildKSksMCE9dC5maXJzdENoaWxkLm9mZnNldEhlaWdodCYmKEVvPWUub2Zmc2V0V2lkdGg8PTEmJmUub2Zmc2V0SGVpZ2h0PjImJiFIaSl9cmV0dXJuIEVvP3NpKCJzcGFuIiwi4oCLIik6c2koInNwYW4iLCLCoCIsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgiKX1mdW5jdGlvbiBnaSh0LGUscixuKXtpZighdClyZXR1cm4gbihlLHIsImx0ciIpO2Zvcih2YXIgaT0hMSxvPTA7bzx0Lmxlbmd0aDsrK28pe3ZhciBsPXRbb107KGwuZnJvbTxyJiZsLnRvPmV8fGU9PXImJmwudG89PWUpJiYobihNYXRoLm1heChsLmZyb20sZSksTWF0aC5taW4obC50byxyKSwxPT1sLmxldmVsPyJydGwiOiJsdHIiKSxpPSEwKX1pfHxuKGUsciwibHRyIil9ZnVuY3Rpb24gbWkodCl7cmV0dXJuIHQubGV2ZWwlMj90LnRvOnQuZnJvbX1mdW5jdGlvbiB2aSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QuZnJvbTp0LnRvfWZ1bmN0aW9uIHlpKHQpe3ZhciBlPXduKHQpO3JldHVybiBlP21pKGVbMF0pOjB9ZnVuY3Rpb24gYmkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/dmkoUW4oZSkpOnQudGV4dC5sZW5ndGh9ZnVuY3Rpb24geGkodCxlKXt2YXIgcj1nbih0LmRvYyxlKSxuPUdyKHQuZG9jLHIpO24hPXImJihlPWJuKG4pKTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP2JpKG4pOnlpKG4pOjA7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gQ2kodCxlKXtmb3IodmFyIHIsbjtyPUJyKG49Z24odC5kb2MsZSkpOyllPXIuZmluZCgpLnRvLmxpbmU7dmFyIGk9d24obiksbz1pP2lbMF0ubGV2ZWwlMj95aShuKTpiaShuKTpuLnRleHQubGVuZ3RoO3JldHVybiBZZShlLG8pfWZ1bmN0aW9uIHdpKHQsZSxyKXt2YXIgbj10WzBdLmxldmVsO3JldHVybiBlPT1uPyEwOnI9PW4/ITE6cj5lfWZ1bmN0aW9uIExpKHQsZSl7Zm9yKHZhciByLG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXTtpZihpLmZyb208ZSYmaS50bz5lKXJldHVybiBSbz1udWxsLG47aWYoaS5mcm9tPT1lfHxpLnRvPT1lKXtpZihudWxsIT1yKXJldHVybiB3aSh0LGkubGV2ZWwsdFtyXS5sZXZlbCk/KFJvPXIsbik6KFJvPW4scik7cj1ufX1yZXR1cm4gUm89bnVsbCxyfWZ1bmN0aW9uIGtpKHQsZSxyLG4pe2lmKCFuKXJldHVybiBlK3I7ZG8gZSs9cjt3aGlsZShlPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChlKSkpO3JldHVybiBlfWZ1bmN0aW9uIFNpKHQsZSxyLG4pe3ZhciBpPXduKHQpO2lmKCFpKXJldHVybiBNaSh0LGUscixuKTtmb3IodmFyIG89TGkoaSxlKSxsPWlbb10scz1raSh0LGUsbC5sZXZlbCUyPy1yOnIsbik7Oyl7aWYocz5sLmZyb20mJnM8bC50bylyZXR1cm4gcztpZihzPT1sLmZyb218fHM9PWwudG8pcmV0dXJuIExpKGkscyk9PW8/czoobD1pW28rPXJdLHI+MD09bC5sZXZlbCUyP2wudG86bC5mcm9tKTtpZihsPWlbbys9cl0sIWwpcmV0dXJuIG51bGw7cz1yPjA9PWwubGV2ZWwlMj9raSh0LGwudG8sLTEsbik6a2kodCxsLmZyb20sMSxuKX19ZnVuY3Rpb24gTWkodCxlLHIsbil7dmFyIGk9ZStyO2lmKG4pZm9yKDtpPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChpKSk7KWkrPXI7cmV0dXJuIDA+aXx8aT50LnRleHQubGVuZ3RoP251bGw6aX12YXIgVGk9L2dlY2tvXC9cZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQWk9L01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSGk9QWkmJihudWxsPT1kb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw4KSxOaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDkpLERpPS9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFdpPS9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxPaT1XaSYmL1F0XC9cZCtcLlxkKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxFaT0vQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksemk9L09wZXJhXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSWk9L0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLEZpPS9LSFRNTFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFBpPS9NYWMgT1MgWCAxXGRcRChbNy05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFJpPS9NYWMgT1MgWCAxXGRcRChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEJpPS9QaGFudG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksR2k9L0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvTW9iaWxlXC9cdysvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksVmk9R2l8fC9BbmRyb2lkfHdlYk9TfEJsYWNrQmVycnl8T3BlcmEgTWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxLaT1HaXx8L01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFVpPS93aW4vaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksWGk9emkmJm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cLyhcZCpcLlxkKikvKTtYaSYmKFhpPU51bWJlcihYaVsxXSkpLFhpJiZYaT49MTUmJih6aT0hMSxXaT0hMCk7dmFyIF9pLFlpLGppLCRpPUtpJiYoT2l8fHppJiYobnVsbD09WGl8fDEyLjExPlhpKSksWmk9VGl8fEFpJiYhTmkscWk9ITEsUWk9ITEsSmk9MCx0bz0wLGVvPTAscm89bnVsbDtBaT9ybz0tLjUzOlRpP3JvPTE1OkVpP3JvPS0uNzpJaSYmKHJvPS0xLzMpO3ZhciBubyxpbyxvbz1udWxsLGxvPXQuY2hhbmdlRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQ/WWUodC5mcm9tLmxpbmUrdC50ZXh0Lmxlbmd0aC0xLFFuKHQudGV4dCkubGVuZ3RoKygxPT10LnRleHQubGVuZ3RoP3QuZnJvbS5jaDowKSk6dC50b307dC5Qb3M9WWUsdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsZm9jdXM6ZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKSxwZSh0aGlzKSxmZSh0aGlzKX0sc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHRpb25zLG49clt0XTsoclt0XSE9ZXx8Im1vZGUiPT10KSYmKHJbdF09ZSxzby5oYXNPd25Qcm9wZXJ0eSh0KSYmbGUodGhpcyxzb1t0XSkodGhpcyxlLG4pKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnNbdF19LGdldERvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY30sYWRkS2V5TWFwOmZ1bmN0aW9uKHQsZSl7dGhpcy5zdGF0ZS5rZXlNYXBzW2U/InB1c2giOiJ1bnNoaWZ0Il0odCl9LHJlbW92ZUtleU1hcDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdGF0ZS5rZXlNYXBzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT10fHwic3RyaW5nIiE9dHlwZW9mIGVbcl0mJmVbcl0ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSwhMH0sYWRkT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKGUscil7dmFyIG49ZS50b2tlbj9lOnQuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsZSk7aWYobi5zdGFydFN0YXRlKXRocm93IG5ldyBFcnJvcigiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKTt0aGlzLnN0YXRlLm92ZXJsYXlzLnB1c2goe21vZGU6bixtb2RlU3BlYzplLG9wYXF1ZTpyJiZyLm9wYXF1ZX0pLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpfSkscmVtb3ZlT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLm92ZXJsYXlzLHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG49ZVtyXS5tb2RlU3BlYztpZihuPT10fHwic3RyaW5nIj09dHlwZW9mIHQmJm4ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSx0aGlzLnN0YXRlLm1vZGVHZW4rKyx1ZSh0aGlzKSx2b2lkIDB9fSksaW5kZW50TGluZTpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXsic3RyaW5nIiE9dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZSYmKGU9bnVsbD09ZT90aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQ/InNtYXJ0IjoicHJldiI6ZT8iYWRkIjoic3VidHJhY3QiKSx0cih0aGlzLmRvYyx0KSYmaHIodGhpcyx0LGUscil9KSxpbmRlbnRTZWxlY3Rpb246bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRvYy5zZWw7aWYoamUoZS5mcm9tLGUudG8pKXJldHVybiBocih0aGlzLGUuZnJvbS5saW5lLHQpO2Zvcih2YXIgcj1lLnRvLmxpbmUtKGUudG8uY2g/MDoxKSxuPWUuZnJvbS5saW5lO3I+PW47KytuKWhyKHRoaXMsbix0KX0pLGdldFRva2VuQXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYzt0PVFlKHIsdCk7Zm9yKHZhciBuPXoodGhpcyx0LmxpbmUsZSksaT10aGlzLmRvYy5tb2RlLG89Z24ocix0LmxpbmUpLGw9bmV3IFNyKG8udGV4dCx0aGlzLm9wdGlvbnMudGFiU2l6ZSk7bC5wb3M8dC5jaCYmIWwuZW9sKCk7KXtsLnN0YXJ0PWwucG9zO3ZhciBzPWkudG9rZW4obCxuKX1yZXR1cm57c3RhcnQ6bC5zdGFydCxlbmQ6bC5wb3Msc3RyaW5nOmwuY3VycmVudCgpLGNsYXNzTmFtZTpzfHxudWxsLHR5cGU6c3x8bnVsbCxzdGF0ZTpufX0sZ2V0VG9rZW5UeXBlQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLmRvYyx0KTt2YXIgZT1Kcih0aGlzLGduKHRoaXMuZG9jLHQubGluZSkpLHI9MCxuPShlLmxlbmd0aC0xKS8yLGk9dC5jaDtpZigwPT1pKXJldHVybiBlWzJdO2Zvcig7Oyl7dmFyIG89cituPj4xO2lmKChvP2VbMipvLTFdOjApPj1pKW49bztlbHNle2lmKCEoZVsyKm8rMV08aSkpcmV0dXJuIGVbMipvKzJdO3I9bysxfX19LGdldE1vZGVBdDpmdW5jdGlvbihlKXt2YXIgcj10aGlzLmRvYy5tb2RlO3JldHVybiByLmlubmVyTW9kZT90LmlubmVyTW9kZShyLHRoaXMuZ2V0VG9rZW5BdChlKS5zdGF0ZSkubW9kZTpyfSxnZXRIZWxwZXI6ZnVuY3Rpb24odCxlKXtpZihnby5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHI9Z29bZV0sbj10aGlzLmdldE1vZGVBdCh0KTtyZXR1cm4gbltlXSYmcltuW2VdXXx8bi5oZWxwZXJUeXBlJiZyW24uaGVscGVyVHlwZV18fHJbbi5uYW1lXX19LGdldFN0YXRlQWZ0ZXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYztyZXR1cm4gdD1xZShyLG51bGw9PXQ/ci5maXJzdCtyLnNpemUtMTp0KSx6KHRoaXMsdCsxLGUpfSxjdXJzb3JDb29yZHM6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyZXR1cm4gcj1udWxsPT10P24uaGVhZDoib2JqZWN0Ij09dHlwZW9mIHQ/UWUodGhpcy5kb2MsdCk6dD9uLmZyb206bi50byxRKHRoaXMscixlfHwicGFnZSIpfSxjaGFyQ29vcmRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHEodGhpcyxRZSh0aGlzLmRvYyx0KSxlfHwicGFnZSIpfSxjb29yZHNDaGFyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHQsZXx8InBhZ2UiKSx0ZSh0aGlzLHQubGVmdCx0LnRvcCl9LGxpbmVBdEhlaWdodDpmdW5jdGlvbih0LGUpe3JldHVybiB0PVoodGhpcyx7dG9wOnQsbGVmdDowfSxlfHwicGFnZSIpLnRvcCx4bih0aGlzLmRvYyx0K3RoaXMuZGlzcGxheS52aWV3T2Zmc2V0KX0saGVpZ2h0QXRMaW5lOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ITEsbj10aGlzLmRvYy5maXJzdCt0aGlzLmRvYy5zaXplLTE7dDx0aGlzLmRvYy5maXJzdD90PXRoaXMuZG9jLmZpcnN0OnQ+biYmKHQ9bixyPSEwKTt2YXIgaT1nbih0aGlzLmRvYyx0KTtyZXR1cm4gJCh0aGlzLGduKHRoaXMuZG9jLHQpLHt0b3A6MCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wKyhyP2kuaGVpZ2h0OjApfSxkZWZhdWx0VGV4dEhlaWdodDpmdW5jdGlvbigpe3JldHVybiByZSh0aGlzLmRpc3BsYXkpfSxkZWZhdWx0Q2hhcldpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5lKHRoaXMuZGlzcGxheSl9LHNldEd1dHRlck1hcmtlcjpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ3V0dGVyTWFya2Vyc3x8KHQuZ3V0dGVyTWFya2Vycz17fSk7cmV0dXJuIG5bZV09ciwhciYmbGkobikmJih0Lmd1dHRlck1hcmtlcnM9bnVsbCksITB9KX0pLGNsZWFyR3V0dGVyOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZG9jLG49ci5maXJzdDtyLml0ZXIoZnVuY3Rpb24ocil7ci5ndXR0ZXJNYXJrZXJzJiZyLmd1dHRlck1hcmtlcnNbdF0mJihyLmd1dHRlck1hcmtlcnNbdF09bnVsbCx1ZShlLG4sbisxKSxsaShyLmd1dHRlck1hcmtlcnMpJiYoci5ndXR0ZXJNYXJrZXJzPW51bGwpKSwrK259KX0pLGFkZExpbmVDbGFzczpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPSJ0ZXh0Ij09ZT8idGV4dENsYXNzIjoiYmFja2dyb3VuZCI9PWU/ImJnQ2xhc3MiOiJ3cmFwQ2xhc3MiO2lmKHRbbl0pe2lmKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIrcisiKD86JHxcXHMpIikudGVzdCh0W25dKSlyZXR1cm4hMTt0W25dKz0iICIrcn1lbHNlIHRbbl09cjtyZXR1cm4hMH0pfSkscmVtb3ZlTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyIsaT10W25dO2lmKCFpKXJldHVybiExO2lmKG51bGw9PXIpdFtuXT1udWxsO2Vsc2V7dmFyIG89aS5tYXRjaChuZXcgUmVnRXhwKCIoPzpefFxccyspIityKyIoPzokfFxccyspIikpO2lmKCFvKXJldHVybiExO3ZhciBsPW8uaW5kZXgrb1swXS5sZW5ndGg7dFtuXT1pLnNsaWNlKDAsby5pbmRleCkrKG8uaW5kZXgmJmwhPWkubGVuZ3RoPyIgIjoiIikraS5zbGljZShsKXx8bnVsbH1yZXR1cm4hMH0pfSksYWRkTGluZVdpZGdldDpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4ganIodGhpcyx0LGUscil9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKHQpe3QuY2xlYXIoKX0sbGluZUluZm86ZnVuY3Rpb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZighdHIodGhpcy5kb2MsdCkpcmV0dXJuIG51bGw7dmFyIGU9dDtpZih0PWduKHRoaXMuZG9jLHQpLCF0KXJldHVybiBudWxsfWVsc2V7dmFyIGU9Ym4odCk7aWYobnVsbD09ZSlyZXR1cm4gbnVsbH1yZXR1cm57bGluZTplLGhhbmRsZTp0LHRleHQ6dC50ZXh0LGd1dHRlck1hcmtlcnM6dC5ndXR0ZXJNYXJrZXJzLHRleHRDbGFzczp0LnRleHRDbGFzcyxiZ0NsYXNzOnQuYmdDbGFzcyx3cmFwQ2xhc3M6dC53cmFwQ2xhc3Msd2lkZ2V0czp0LndpZGdldHN9fSxnZXRWaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZGlzcGxheS5zaG93aW5nRnJvbSx0bzp0aGlzLmRpc3BsYXkuc2hvd2luZ1RvfX0sYWRkV2lkZ2V0OmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89dGhpcy5kaXNwbGF5O3Q9USh0aGlzLFFlKHRoaXMuZG9jLHQpKTt2YXIgbD10LmJvdHRvbSxzPXQubGVmdDtpZihlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zaXplci5hcHBlbmRDaGlsZChlKSwib3ZlciI9PW4pbD10LnRvcDtlbHNlIGlmKCJhYm92ZSI9PW58fCJuZWFyIj09bil7dmFyIGE9TWF0aC5tYXgoby53cmFwcGVyLmNsaWVudEhlaWdodCx0aGlzLmRvYy5oZWlnaHQpLHU9TWF0aC5tYXgoby5zaXplci5jbGllbnRXaWR0aCxvLmxpbmVTcGFjZS5jbGllbnRXaWR0aCk7KCJhYm92ZSI9PW58fHQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PmEpJiZ0LnRvcD5lLm9mZnNldEhlaWdodD9sPXQudG9wLWUub2Zmc2V0SGVpZ2h0OnQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PD1hJiYobD10LmJvdHRvbSkscytlLm9mZnNldFdpZHRoPnUmJihzPXUtZS5vZmZzZXRXaWR0aCl9ZS5zdHlsZS50b3A9bCsicHgiLGUuc3R5bGUubGVmdD1lLnN0eWxlLnJpZ2h0PSIiLCJyaWdodCI9PWk/KHM9by5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoLGUuc3R5bGUucmlnaHQ9IjBweCIpOigibGVmdCI9PWk/cz0wOiJtaWRkbGUiPT1pJiYocz0oby5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoKS8yKSxlLnN0eWxlLmxlZnQ9cysicHgiKSxyJiZhcih0aGlzLHMsbCxzK2Uub2Zmc2V0V2lkdGgsbCtlLm9mZnNldEhlaWdodCl9LHRyaWdnZXJPbktleURvd246bGUobnVsbCxXZSksZXhlY0NvbW1hbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG1vW3RdKHRoaXMpfSxmaW5kUG9zSDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBvPTAsbD1RZSh0aGlzLmRvYyx0KTtlPm8mJihsPXByKHRoaXMuZG9jLGwsaSxyLG4pLCFsLmhpdFNpZGUpOysrbyk7cmV0dXJuIGx9LG1vdmVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyPW4uc2hpZnR8fG4uZXh0ZW5kfHxqZShuLmZyb20sbi50byk/cHIodGhpcy5kb2Msbi5oZWFkLHQsZSx0aGlzLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTowPnQ/bi5mcm9tOm4udG8sZXIodGhpcy5kb2MscixyLHQpfSksZGVsZXRlSDpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsO2plKHIuZnJvbSxyLnRvKT9fZSh0aGlzLmRvYywiIixyLmZyb20scHIodGhpcy5kb2Msci5oZWFkLHQsZSwhMSksIitkZWxldGUiKTpfZSh0aGlzLmRvYywiIixyLmZyb20sci50bywiK2RlbGV0ZSIpLHRoaXMuY3VyT3AudXNlclNlbENoYW5nZT0hMH0pLGZpbmRQb3NWOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTEsbz1uOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBsPTAscz1RZSh0aGlzLmRvYyx0KTtlPmw7KytsKXt2YXIgYT1RKHRoaXMscywiZGl2Iik7aWYobnVsbD09bz9vPWEubGVmdDphLmxlZnQ9byxzPWdyKHRoaXMsYSxpLHIpLHMuaGl0U2lkZSlicmVha31yZXR1cm4gc30sbW92ZVY6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jLnNlbCxuPVEodGhpcyxyLmhlYWQsImRpdiIpO251bGwhPXIuZ29hbENvbHVtbiYmKG4ubGVmdD1yLmdvYWxDb2x1bW4pO3ZhciBpPWdyKHRoaXMsbix0LGUpOyJwYWdlIj09ZSYmZnIodGhpcywwLHEodGhpcyxpLCJkaXYiKS50b3Atbi50b3ApLGVyKHRoaXMuZG9jLGksaSx0KSxyLmdvYWxDb2x1bW49bi5sZWZ0fSksdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpeyhudWxsPT10fHx0IT10aGlzLnN0YXRlLm92ZXJ3cml0ZSkmJigodGhpcy5zdGF0ZS5vdmVyd3JpdGU9IXRoaXMuc3RhdGUub3ZlcndyaXRlKT90aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI6dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWU9dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itb3ZlcndyaXRlIiwiIikpfSxoYXNGb2N1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmZvY3VzZWR9LHNjcm9sbFRvOmxlKG51bGwsZnVuY3Rpb24odCxlKXtjcih0aGlzLHQsZSl9KSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kaXNwbGF5LnNjcm9sbGVyLGU9VG87cmV0dXJue2xlZnQ6dC5zY3JvbGxMZWZ0LHRvcDp0LnNjcm9sbFRvcCxoZWlnaHQ6dC5zY3JvbGxIZWlnaHQtZSx3aWR0aDp0LnNjcm9sbFdpZHRoLWUsY2xpZW50SGVpZ2h0OnQuY2xpZW50SGVpZ2h0LWUsY2xpZW50V2lkdGg6dC5jbGllbnRXaWR0aC1lfX0sc2Nyb2xsSW50b1ZpZXc6bGUobnVsbCxmdW5jdGlvbih0LGUpe251bGw9PXQ/dD17ZnJvbTp0aGlzLmRvYy5zZWwuaGVhZCx0bzpudWxsfToibnVtYmVyIj09dHlwZW9mIHQ/dD17ZnJvbTpZZSh0LDApLHRvOm51bGx9Om51bGw9PXQuZnJvbSYmKHQ9e2Zyb206dCx0bzpudWxsfSksdC50b3x8KHQudG89dC5mcm9tKSxlfHwoZT0wKTt2YXIgcj10O251bGwhPXQuZnJvbS5saW5lJiYodGhpcy5jdXJPcC5zY3JvbGxUb1Bvcz17ZnJvbTp0LmZyb20sdG86dC50byxtYXJnaW46ZX0scj17ZnJvbTpRKHRoaXMsdC5mcm9tKSx0bzpRKHRoaXMsdC50byl9KTt2YXIgbj11cih0aGlzLE1hdGgubWluKHIuZnJvbS5sZWZ0LHIudG8ubGVmdCksTWF0aC5taW4oci5mcm9tLnRvcCxyLnRvLnRvcCktZSxNYXRoLm1heChyLmZyb20ucmlnaHQsci50by5yaWdodCksTWF0aC5tYXgoci5mcm9tLmJvdHRvbSxyLnRvLmJvdHRvbSkrZSk7Y3IodGhpcyxuLnNjcm9sbExlZnQsbi5zY3JvbGxUb3ApfSksc2V0U2l6ZTpsZShudWxsLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fC9eXGQrJC8udGVzdChTdHJpbmcodCkpP3QrInB4Ijp0fW51bGwhPXQmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aD1yKHQpKSxudWxsIT1lJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0PXIoZSkpLHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dGhpcy5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCksdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMH0pLG9wZXJhdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gYWUodGhpcyx0KX0scmVmcmVzaDpsZShudWxsLGZ1bmN0aW9uKCl7dmFyIHQ9bnVsbD09dGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7Xyh0aGlzKSxjcih0aGlzLHRoaXMuZG9jLnNjcm9sbExlZnQsdGhpcy5kb2Muc2Nyb2xsVG9wKSx1ZSh0aGlzKSx0JiZvKHRoaXMpfSksc3dhcERvYzpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jO3JldHVybiBlLmNtPW51bGwscG4odGhpcyx0KSxfKHRoaXMpLGRlKHRoaXMsITApLGNyKHRoaXMsdC5zY3JvbGxMZWZ0LHQuc2Nyb2xsVG9wKSxVbih0aGlzLCJzd2FwRG9jIix0aGlzLGUpLGV9KSxnZXRJbnB1dEZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dH0sZ2V0V3JhcHBlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXJ9LGdldFNjcm9sbGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXJ9LGdldEd1dHRlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnN9fSxqbih0KTt2YXIgc289dC5vcHRpb25IYW5kbGVycz17fSxhbz10LmRlZmF1bHRzPXt9LHVvPXQuSW5pdD17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ29kZU1pcnJvci5Jbml0In19O3lyKCJ2YWx1ZSIsIiIsZnVuY3Rpb24odCxlKXt0LnNldFZhbHVlKGUpfSwhMCkseXIoIm1vZGUiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRvYy5tb2RlT3B0aW9uPWUscih0KX0sITApLHlyKCJpbmRlbnRVbml0IiwyLHIsITApLHlyKCJpbmRlbnRXaXRoVGFicyIsITEpLHlyKCJzbWFydEluZGVudCIsITApLHlyKCJ0YWJTaXplIiw0LGZ1bmN0aW9uKHQpe3IodCksXyh0KSx1ZSh0KX0sITApLHlyKCJzcGVjaWFsQ2hhcnMiLC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVmZWZmXS9nLGZ1bmN0aW9uKHQsZSl7dC5vcHRpb25zLnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKGUuc291cmNlKyhlLnRlc3QoIgkiKT8iIjoifAkiKSwiZyIpLHQucmVmcmVzaCgpfSwhMCkseXIoInNwZWNpYWxDaGFyUGxhY2Vob2xkZXIiLG5uLGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSwhMCkseXIoImVsZWN0cmljQ2hhcnMiLCEwKSx5cigicnRsTW92ZVZpc3VhbGx5IiwhVWkpLHlyKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCEwKSx5cigidGhlbWUiLCJkZWZhdWx0IixmdW5jdGlvbih0KXtzKHQpLGEodCl9LCEwKSx5cigia2V5TWFwIiwiZGVmYXVsdCIsbCkseXIoImV4dHJhS2V5cyIsbnVsbCkseXIoIm9uS2V5RXZlbnQiLG51bGwpLHlyKCJvbkRyYWdFdmVudCIsbnVsbCkseXIoImxpbmVXcmFwcGluZyIsITEsbiwhMCkseXIoImd1dHRlcnMiLFtdLGZ1bmN0aW9uKHQpe2godC5vcHRpb25zKSxhKHQpfSwhMCkseXIoImZpeGVkR3V0dGVyIiwhMCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQ9ZT95KHQuZGlzcGxheSkrInB4IjoiMCIsdC5yZWZyZXNoKCl9LCEwKSx5cigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIiLCExLGQsITApLHlyKCJsaW5lTnVtYmVycyIsITEsZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZmlyc3RMaW5lTnVtYmVyIiwxLGEsITApLHlyKCJsaW5lTnVtYmVyRm9ybWF0dGVyIixmdW5jdGlvbih0KXtyZXR1cm4gdH0sYSwhMCkseXIoInNob3dDdXJzb3JXaGVuU2VsZWN0aW5nIiwhMSxBLCEwKSx5cigicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51IiwhMCkseXIoInJlYWRPbmx5IiwhMSxmdW5jdGlvbih0LGUpeyJub2N1cnNvciI9PWU/KHplKHQpLHQuZGlzcGxheS5pbnB1dC5ibHVyKCksdC5kaXNwbGF5LmRpc2FibGVkPSEwKToodC5kaXNwbGF5LmRpc2FibGVkPSExLGV8fGRlKHQsITApKX0pLHlyKCJkcmFnRHJvcCIsITApLHlyKCJjdXJzb3JCbGlua1JhdGUiLDUzMCkseXIoImN1cnNvclNjcm9sbE1hcmdpbiIsMCkseXIoImN1cnNvckhlaWdodCIsMSkseXIoIndvcmtUaW1lIiwxMDApLHlyKCJ3b3JrRGVsYXkiLDEwMCkseXIoImZsYXR0ZW5TcGFucyIsITApLHlyKCJwb2xsSW50ZXJ2YWwiLDEwMCkseXIoInVuZG9EZXB0aCIsNDAsZnVuY3Rpb24odCxlKXt0LmRvYy5oaXN0b3J5LnVuZG9EZXB0aD1lfSkseXIoImhpc3RvcnlFdmVudERlbGF5Iiw1MDApLHlyKCJ2aWV3cG9ydE1hcmdpbiIsMTAsZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigibWF4SGlnaGxpZ2h0TGVuZ3RoIiwxZTQsZnVuY3Rpb24odCl7cih0KSx0LnJlZnJlc2goKX0sITApLHlyKCJjcnVkZU1lYXN1cmluZ0Zyb20iLDFlNCkseXIoIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCEwLGZ1bmN0aW9uKHQsZSl7ZXx8KHQuZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3A9dC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQ9MCl9KSx5cigidGFiaW5kZXgiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRpc3BsYXkuaW5wdXQudGFiSW5kZXg9ZXx8IiJ9KSx5cigiYXV0b2ZvY3VzIixudWxsKTt2YXIgY289dC5tb2Rlcz17fSxmbz10Lm1pbWVNb2Rlcz17fTt0LmRlZmluZU1vZGU9ZnVuY3Rpb24oZSxyKXtpZih0LmRlZmF1bHRzLm1vZGV8fCJudWxsIj09ZXx8KHQuZGVmYXVsdHMubW9kZT1lKSxhcmd1bWVudHMubGVuZ3RoPjIpe3IuZGVwZW5kZW5jaWVzPVtdO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDsrK24pci5kZXBlbmRlbmNpZXMucHVzaChhcmd1bWVudHNbbl0pfWNvW2VdPXJ9LHQuZGVmaW5lTUlNRT1mdW5jdGlvbih0LGUpe2ZvW3RdPWV9LHQucmVzb2x2ZU1vZGU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiZmby5oYXNPd25Qcm9wZXJ0eShlKSllPWZvW2VdO2Vsc2UgaWYoZSYmInN0cmluZyI9PXR5cGVvZiBlLm5hbWUmJmZvLmhhc093blByb3BlcnR5KGUubmFtZSkpe3ZhciByPWZvW2UubmFtZV07ZT1laShyLGUpLGUubmFtZT1yLm5hbWV9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUmJi9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChlKSlyZXR1cm4gdC5yZXNvbHZlTW9kZSgiYXBwbGljYXRpb24veG1sIik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3tuYW1lOmV9OmV8fHtuYW1lOiJudWxsIn19LHQuZ2V0TW9kZT1mdW5jdGlvbihlLHIpe3ZhciByPXQucmVzb2x2ZU1vZGUociksbj1jb1tyLm5hbWVdO2lmKCFuKXJldHVybiB0LmdldE1vZGUoZSwidGV4dC9wbGFpbiIpO3ZhciBpPW4oZSxyKTtpZihoby5oYXNPd25Qcm9wZXJ0eShyLm5hbWUpKXt2YXIgbz1ob1tyLm5hbWVdO2Zvcih2YXIgbCBpbiBvKW8uaGFzT3duUHJvcGVydHkobCkmJihpLmhhc093blByb3BlcnR5KGwpJiYoaVsiXyIrbF09aVtsXSksaVtsXT1vW2xdKX1yZXR1cm4gaS5uYW1lPXIubmFtZSxpfSx0LmRlZmluZU1vZGUoIm51bGwiLGZ1bmN0aW9uKCl7cmV0dXJue3Rva2VuOmZ1bmN0aW9uKHQpe3Quc2tpcFRvRW5kKCl9fX0pLHQuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsIm51bGwiKTt2YXIgaG89dC5tb2RlRXh0ZW5zaW9ucz17fTt0LmV4dGVuZE1vZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1oby5oYXNPd25Qcm9wZXJ0eSh0KT9ob1t0XTpob1t0XT17fTtyaShlLHIpfSx0LmRlZmluZUV4dGVuc2lvbj1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlW2VdPXJ9LHQuZGVmaW5lRG9jRXh0ZW5zaW9uPWZ1bmN0aW9uKHQsZSl7d28ucHJvdG90eXBlW3RdPWV9LHQuZGVmaW5lT3B0aW9uPXlyO3ZhciBwbz1bXTt0LmRlZmluZUluaXRIb29rPWZ1bmN0aW9uKHQpe3BvLnB1c2godCl9O3ZhciBnbz10LmhlbHBlcnM9e307dC5yZWdpc3RlckhlbHBlcj1mdW5jdGlvbihlLHIsbil7Z28uaGFzT3duUHJvcGVydHkoZSl8fChnb1tlXT10W2VdPXt9KSxnb1tlXVtyXT1ufSx0LmlzV29yZENoYXI9b2ksdC5jb3B5U3RhdGU9YnIsdC5zdGFydFN0YXRlPXhyLHQuaW5uZXJNb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKDt0LmlubmVyTW9kZTspe3ZhciByPXQuaW5uZXJNb2RlKGUpO2lmKCFyfHxyLm1vZGU9PXQpYnJlYWs7ZT1yLnN0YXRlLHQ9ci5tb2RlfXJldHVybiByfHx7bW9kZTp0LHN0YXRlOmV9fTt2YXIgbW89dC5jb21tYW5kcz17c2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3Quc2V0U2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCksWWUodC5sYXN0TGluZSgpKSl9LGtpbGxMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCEwKSxyPXQuZ2V0Q3Vyc29yKCExKSxuPSFqZShlLHIpO258fHQuZ2V0TGluZShlLmxpbmUpLmxlbmd0aCE9ZS5jaD90LnJlcGxhY2VSYW5nZSgiIixlLG4/cjpZZShlLmxpbmUpLCIrZGVsZXRlIik6dC5yZXBsYWNlUmFuZ2UoIiIsZSxZZShlLmxpbmUrMSwwKSwiK2RlbGV0ZSIpfSxkZWxldGVMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkubGluZTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLDApLFllKGUpLCIrZGVsZXRlIil9LGRlbExpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCk7dC5yZXBsYWNlUmFuZ2UoIiIsWWUoZS5saW5lLDApLGUsIitkZWxldGUiKX0sdW5kbzpmdW5jdGlvbih0KXt0LnVuZG8oKX0scmVkbzpmdW5jdGlvbih0KXt0LnJlZG8oKX0sZ29Eb2NTdGFydDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0LmZpcnN0TGluZSgpLDApKX0sZ29Eb2NFbmQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oWWUodC5sYXN0TGluZSgpKSl9LGdvTGluZVN0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKHhpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVN0YXJ0U21hcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXhpKHQsZS5saW5lKSxuPXQuZ2V0TGluZUhhbmRsZShyLmxpbmUpLGk9d24obik7aWYoaSYmMCE9aVswXS5sZXZlbCl0LmV4dGVuZFNlbGVjdGlvbihyKTtlbHNle3ZhciBvPU1hdGgubWF4KDAsbi50ZXh0LnNlYXJjaCgvXFMvKSksbD1lLmxpbmU9PXIubGluZSYmZS5jaDw9byYmZS5jaDt0LmV4dGVuZFNlbGVjdGlvbihZZShyLmxpbmUsbD8wOm8pKX19LGdvTGluZUVuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihDaSh0LHQuZ2V0Q3Vyc29yKCkubGluZSkpfSxnb0xpbmVSaWdodDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OnQuZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoKzEwMCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lTGVmdDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OjAsdG9wOmV9LCJkaXYiKSl9LGdvTGluZVVwOmZ1bmN0aW9uKHQpe3QubW92ZVYoLTEsImxpbmUiKX0sZ29MaW5lRG93bjpmdW5jdGlvbih0KXt0Lm1vdmVWKDEsImxpbmUiKX0sZ29QYWdlVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwicGFnZSIpfSxnb1BhZ2VEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwicGFnZSIpfSxnb0NoYXJMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNoYXIiKX0sZ29DaGFyUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJjaGFyIil9LGdvQ29sdW1uTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJjb2x1bW4iKX0sZ29Db2x1bW5SaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNvbHVtbiIpfSxnb1dvcmRMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsIndvcmQiKX0sZ29Hcm91cFJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiZ3JvdXAiKX0sZ29Hcm91cExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiZ3JvdXAiKX0sZ29Xb3JkUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJ3b3JkIil9LGRlbENoYXJCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJjaGFyIil9LGRlbENoYXJBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwiY2hhciIpfSxkZWxXb3JkQmVmb3JlOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgtMSwid29yZCIpfSxkZWxXb3JkQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsIndvcmQiKX0sZGVsR3JvdXBCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJncm91cCIpfSxkZWxHcm91cEFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJncm91cCIpfSxpbmRlbnRBdXRvOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpfSxpbmRlbnRNb3JlOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKX0saW5kZW50TGVzczpmdW5jdGlvbih0KXt0LmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKX0saW5zZXJ0VGFiOmZ1bmN0aW9uKHQpe3QucmVwbGFjZVNlbGVjdGlvbigiCSIsImVuZCIsIitpbnB1dCIpfSxkZWZhdWx0VGFiOmZ1bmN0aW9uKHQpe3Quc29tZXRoaW5nU2VsZWN0ZWQoKT90LmluZGVudFNlbGVjdGlvbigiYWRkIik6dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LHRyYW5zcG9zZUNoYXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkscj10LmdldExpbmUoZS5saW5lKTtlLmNoPjAmJmUuY2g8ci5sZW5ndGgtMSYmdC5yZXBsYWNlUmFuZ2Uoci5jaGFyQXQoZS5jaCkrci5jaGFyQXQoZS5jaC0xKSxZZShlLmxpbmUsZS5jaC0xKSxZZShlLmxpbmUsZS5jaCsxKSl9LG5ld2xpbmVBbmRJbmRlbnQ6ZnVuY3Rpb24odCl7bGUodCxmdW5jdGlvbigpe3QucmVwbGFjZVNlbGVjdGlvbigiXG4iLCJlbmQiLCIraW5wdXQiKSx0LmluZGVudExpbmUodC5nZXRDdXJzb3IoKS5saW5lLG51bGwsITApfSkoKX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpe3QudG9nZ2xlT3ZlcndyaXRlKCl9fSx2bz10LmtleU1hcD17fTt2by5iYXNpYz17TGVmdDoiZ29DaGFyTGVmdCIsUmlnaHQ6ImdvQ2hhclJpZ2h0IixVcDoiZ29MaW5lVXAiLERvd246ImdvTGluZURvd24iLEVuZDoiZ29MaW5lRW5kIixIb21lOiJnb0xpbmVTdGFydFNtYXJ0IixQYWdlVXA6ImdvUGFnZVVwIixQYWdlRG93bjoiZ29QYWdlRG93biIsRGVsZXRlOiJkZWxDaGFyQWZ0ZXIiLEJhY2tzcGFjZToiZGVsQ2hhckJlZm9yZSIsIlNoaWZ0LUJhY2tzcGFjZSI6ImRlbENoYXJCZWZvcmUiLFRhYjoiZGVmYXVsdFRhYiIsIlNoaWZ0LVRhYiI6ImluZGVudEF1dG8iLEVudGVyOiJuZXdsaW5lQW5kSW5kZW50IixJbnNlcnQ6InRvZ2dsZU92ZXJ3cml0ZSJ9LHZvLnBjRGVmYXVsdD17IkN0cmwtQSI6InNlbGVjdEFsbCIsIkN0cmwtRCI6ImRlbGV0ZUxpbmUiLCJDdHJsLVoiOiJ1bmRvIiwiU2hpZnQtQ3RybC1aIjoicmVkbyIsIkN0cmwtWSI6InJlZG8iLCJDdHJsLUhvbWUiOiJnb0RvY1N0YXJ0IiwiQWx0LVVwIjoiZ29Eb2NTdGFydCIsIkN0cmwtRW5kIjoiZ29Eb2NFbmQiLCJDdHJsLURvd24iOiJnb0RvY0VuZCIsIkN0cmwtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQ3RybC1SaWdodCI6ImdvR3JvdXBSaWdodCIsIkFsdC1MZWZ0IjoiZ29MaW5lU3RhcnQiLCJBbHQtUmlnaHQiOiJnb0xpbmVFbmQiLCJDdHJsLUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ3RybC1TIjoic2F2ZSIsIkN0cmwtRiI6ImZpbmQiLCJDdHJsLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUN0cmwtRyI6ImZpbmRQcmV2IiwiU2hpZnQtQ3RybC1GIjoicmVwbGFjZSIsIlNoaWZ0LUN0cmwtUiI6InJlcGxhY2VBbGwiLCJDdHJsLVsiOiJpbmRlbnRMZXNzIiwiQ3RybC1dIjoiaW5kZW50TW9yZSIsZmFsbHRocm91Z2g6ImJhc2ljIn0sdm8ubWFjRGVmYXVsdD17IkNtZC1BIjoic2VsZWN0QWxsIiwiQ21kLUQiOiJkZWxldGVMaW5lIiwiQ21kLVoiOiJ1bmRvIiwiU2hpZnQtQ21kLVoiOiJyZWRvIiwiQ21kLVkiOiJyZWRvIiwiQ21kLVVwIjoiZ29Eb2NTdGFydCIsIkNtZC1FbmQiOiJnb0RvY0VuZCIsIkNtZC1Eb3duIjoiZ29Eb2NFbmQiLCJBbHQtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQWx0LVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQ21kLUxlZnQiOiJnb0xpbmVTdGFydCIsIkNtZC1SaWdodCI6ImdvTGluZUVuZCIsIkFsdC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQWZ0ZXIiLCJBbHQtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkNtZC1TIjoic2F2ZSIsIkNtZC1GIjoiZmluZCIsIkNtZC1HIjoiZmluZE5leHQiLCJTaGlmdC1DbWQtRyI6ImZpbmRQcmV2IiwiQ21kLUFsdC1GIjoicmVwbGFjZSIsIlNoaWZ0LUNtZC1BbHQtRiI6InJlcGxhY2VBbGwiLCJDbWQtWyI6ImluZGVudExlc3MiLCJDbWQtXSI6ImluZGVudE1vcmUiLCJDbWQtQmFja3NwYWNlIjoiZGVsTGluZUxlZnQiLGZhbGx0aHJvdWdoOlsiYmFzaWMiLCJlbWFjc3kiXX0sdm9bImRlZmF1bHQiXT1LaT92by5tYWNEZWZhdWx0OnZvLnBjRGVmYXVsdCx2by5lbWFjc3k9eyJDdHJsLUYiOiJnb0NoYXJSaWdodCIsIkN0cmwtQiI6ImdvQ2hhckxlZnQiLCJDdHJsLVAiOiJnb0xpbmVVcCIsIkN0cmwtTiI6ImdvTGluZURvd24iLCJBbHQtRiI6ImdvV29yZFJpZ2h0IiwiQWx0LUIiOiJnb1dvcmRMZWZ0IiwiQ3RybC1BIjoiZ29MaW5lU3RhcnQiLCJDdHJsLUUiOiJnb0xpbmVFbmQiLCJDdHJsLVYiOiJnb1BhZ2VEb3duIiwiU2hpZnQtQ3RybC1WIjoiZ29QYWdlVXAiLCJDdHJsLUQiOiJkZWxDaGFyQWZ0ZXIiLCJDdHJsLUgiOiJkZWxDaGFyQmVmb3JlIiwiQWx0LUQiOiJkZWxXb3JkQWZ0ZXIiLCJBbHQtQmFja3NwYWNlIjoiZGVsV29yZEJlZm9yZSIsIkN0cmwtSyI6ImtpbGxMaW5lIiwiQ3RybC1UIjoidHJhbnNwb3NlQ2hhcnMifSx0Lmxvb2t1cEtleT13cix0LmlzTW9kaWZpZXJLZXk9THIsdC5rZXlOYW1lPWtyLHQuZnJvbVRleHRBcmVhPWZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe2UudmFsdWU9dS5nZXRWYWx1ZSgpfWlmKHJ8fChyPXt9KSxyLnZhbHVlPWUudmFsdWUsIXIudGFiaW5kZXgmJmUudGFiaW5kZXgmJihyLnRhYmluZGV4PWUudGFiaW5kZXgpLCFyLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyJiYoci5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyKSxudWxsPT1yLmF1dG9mb2N1cyl7dmFyIGk9ZG9jdW1lbnQuYm9keTt0cnl7aT1kb2N1bWVudC5hY3RpdmVFbGVtZW50fWNhdGNoKG8pe31yLmF1dG9mb2N1cz1pPT1lfHxudWxsIT1lLmdldEF0dHJpYnV0ZSgiYXV0b2ZvY3VzIikmJmk9PWRvY3VtZW50LmJvZHl9aWYoZS5mb3JtJiYoR24oZS5mb3JtLCJzdWJtaXQiLG4pLCFyLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpKXt2YXIgbD1lLmZvcm0scz1sLnN1Ym1pdDt0cnl7dmFyIGE9bC5zdWJtaXQ9ZnVuY3Rpb24oKXtuKCksbC5zdWJtaXQ9cyxsLnN1Ym1pdCgpLGwuc3VibWl0PWF9fWNhdGNoKG8pe319ZS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgdT10KGZ1bmN0aW9uKHQpe2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlLm5leHRTaWJsaW5nKX0scik7cmV0dXJuIHUuc2F2ZT1uLHUuZ2V0VGV4dEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sdS50b1RleHRBcmVhPWZ1bmN0aW9uKCl7bigpLGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1LmdldFdyYXBwZXJFbGVtZW50KCkpLGUuc3R5bGUuZGlzcGxheT0iIixlLmZvcm0mJihWbihlLmZvcm0sInN1Ym1pdCIsbiksImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9ybS5zdWJtaXQmJihlLmZvcm0uc3VibWl0PXMpKX0sdX0sU3IucHJvdG90eXBlPXtlb2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuc3RyaW5nLmxlbmd0aH0sc29sOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMucG9zfSxwZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyl8fHZvaWQgMH0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGg/dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOnZvaWQgMH0sZWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXZhciByPWU9PXQ7ZWxzZSB2YXIgcj1lJiYodC50ZXN0P3QudGVzdChlKTp0KGUpKTtyZXR1cm4gcj8oKyt0aGlzLnBvcyxlKTp2b2lkIDB9LGVhdFdoaWxlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmVhdCh0KTspO3JldHVybiB0aGlzLnBvcz5lfSxlYXRTcGFjZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBvczsvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTspKyt0aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M+dH0sc2tpcFRvRW5kOmZ1bmN0aW9uKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofSxza2lwVG86ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuaW5kZXhPZih0LHRoaXMucG9zKTtyZXR1cm4gZT4tMT8odGhpcy5wb3M9ZSwhMCk6dm9pZCAwfSxiYWNrVXA6ZnVuY3Rpb24odCl7dGhpcy5wb3MtPXR9LGNvbHVtbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPVpuKHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlfSxpbmRlbnRhdGlvbjpmdW5jdGlvbigpe3JldHVybiBabih0aGlzLnN0cmluZyxudWxsLHRoaXMudGFiU2l6ZSl9LG1hdGNoOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBuPXRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaCh0KTtyZXR1cm4gbiYmbi5pbmRleD4wP251bGw6KG4mJmUhPT0hMSYmKHRoaXMucG9zKz1uWzBdLmxlbmd0aCksbil9dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIHI/dC50b0xvd2VyQ2FzZSgpOnR9LG89dGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLHQubGVuZ3RoKTtyZXR1cm4gaShvKT09aSh0KT8oZSE9PSExJiYodGhpcy5wb3MrPXQubGVuZ3RoKSwhMCk6dm9pZCAwfSxjdXJyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5wb3MpfX0sdC5TdHJpbmdTdHJlYW09U3IsdC5UZXh0TWFya2VyPU1yLGpuKE1yKSxNci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dmFyIHQ9dGhpcy5kb2MuY20sZT10JiYhdC5jdXJPcDtpZihlJiZpZSh0KSxZbih0aGlzLCJjbGVhciIpKXt2YXIgcj10aGlzLmZpbmQoKTtyJiZVbih0aGlzLCJjbGVhciIsci5mcm9tLHIudG8pfWZvcih2YXIgbj1udWxsLGk9bnVsbCxvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBsPXRoaXMubGluZXNbb10scz1OcihsLm1hcmtlZFNwYW5zLHRoaXMpO251bGwhPXMudG8mJihpPWJuKGwpKSxsLm1hcmtlZFNwYW5zPURyKGwubWFya2VkU3BhbnMscyksbnVsbCE9cy5mcm9tP249Ym4obCk6dGhpcy5jb2xsYXBzZWQmJiFWcih0aGlzLmRvYyxsKSYmdCYmeW4obCxyZSh0LmRpc3BsYXkpKX1pZih0JiZ0aGlzLmNvbGxhcHNlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcpZm9yKHZhciBvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBhPUdyKHQuZG9jLHRoaXMubGluZXNbb10pLHU9Yyh0LmRvYyxhKTt1PnQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYodC5kaXNwbGF5Lm1heExpbmU9YSx0LmRpc3BsYXkubWF4TGluZUxlbmd0aD11LHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCl9bnVsbCE9biYmdCYmdWUodCxuLGkrMSksdGhpcy5saW5lcy5sZW5ndGg9MCx0aGlzLmV4cGxpY2l0bHlDbGVhcmVkPSEwLHRoaXMuYXRvbWljJiZ0aGlzLmRvYy5jYW50RWRpdCYmKHRoaXMuZG9jLmNhbnRFZGl0PSExLHQmJmlyKHQpKSxlJiZvZSh0KX19LE1yLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscj0wO3I8dGhpcy5saW5lcy5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmxpbmVzW3JdLGk9TnIobi5tYXJrZWRTcGFucyx0aGlzKTtpZihudWxsIT1pLmZyb218fG51bGwhPWkudG8pe3ZhciBvPWJuKG4pO251bGwhPWkuZnJvbSYmKHQ9WWUobyxpLmZyb20pKSxudWxsIT1pLnRvJiYoZT1ZZShvLGkudG8pKX19cmV0dXJuImJvb2ttYXJrIj09dGhpcy50eXBlP3Q6dCYme2Zyb206dCx0bzplfX0sTXIucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZpbmQoKSxlPXRoaXMuZG9jLmNtO2lmKHQmJmUpeyJib29rbWFyayIhPXRoaXMudHlwZSYmKHQ9dC5mcm9tKTt2YXIgcj1nbih0aGlzLmRvYyx0LmxpbmUpO2lmKEcoZSxyKSx0LmxpbmU+PWUuZGlzcGxheS5zaG93aW5nRnJvbSYmdC5saW5lPGUuZGlzcGxheS5zaG93aW5nVG8pe2Zvcih2YXIgbj1lLmRpc3BsYXkubGluZURpdi5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKWlmKG4ubGluZU9iaj09cil7bi5vZmZzZXRIZWlnaHQhPXIuaGVpZ2h0JiZ5bihyLG4ub2Zmc2V0SGVpZ2h0KTsKYnJlYWt9YWUoZSxmdW5jdGlvbigpe2UuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD1lLmN1ck9wLmZvcmNlVXBkYXRlPWUuY3VyT3AudXBkYXRlTWF4TGluZT0hMH0pfX19LE1yLnByb3RvdHlwZS5hdHRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wO2UubWF5YmVIaWRkZW5NYXJrZXJzJiYtMSE9dGkoZS5tYXliZUhpZGRlbk1hcmtlcnMsdGhpcyl8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzfHwoZS5tYXliZVVuaGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcyl9dGhpcy5saW5lcy5wdXNoKHQpfSxNci5wcm90b3R5cGUuZGV0YWNoTGluZT1mdW5jdGlvbih0KXtpZih0aGlzLmxpbmVzLnNwbGljZSh0aSh0aGlzLmxpbmVzLHQpLDEpLCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wOyhlLm1heWJlSGlkZGVuTWFya2Vyc3x8KGUubWF5YmVIaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX19LHQuU2hhcmVkVGV4dE1hcmtlcj1BcixqbihBciksQXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3RoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITA7Zm9yKHZhciB0PTA7dDx0aGlzLm1hcmtlcnMubGVuZ3RoOysrdCl0aGlzLm1hcmtlcnNbdF0uY2xlYXIoKTtVbih0aGlzLCJjbGVhciIpfX0sQXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoKX07dmFyIHlvPXQuTGluZVdpZGdldD1mdW5jdGlvbih0LGUscil7aWYocilmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodGhpc1tuXT1yW25dKTt0aGlzLmNtPXQsdGhpcy5ub2RlPWV9O2puKHlvKSx5by5wcm90b3R5cGUuY2xlYXI9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxpbmUud2lkZ2V0cyxlPWJuKHRoaXMubGluZSk7aWYobnVsbCE9ZSYmdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdFtyXT09dGhpcyYmdC5zcGxpY2Uoci0tLDEpO3QubGVuZ3RofHwodGhpcy5saW5lLndpZGdldHM9bnVsbCk7dmFyIG49Q24odGhpcy5jbSx0aGlzLmxpbmUpPHRoaXMuY20uZG9jLnNjcm9sbFRvcDt5bih0aGlzLmxpbmUsTWF0aC5tYXgoMCx0aGlzLmxpbmUuaGVpZ2h0LVlyKHRoaXMpKSksbiYmZnIodGhpcy5jbSwwLC10aGlzLmhlaWdodCksdWUodGhpcy5jbSxlLGUrMSl9fSkseW8ucHJvdG90eXBlLmNoYW5nZWQ9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhlaWdodDt0aGlzLmhlaWdodD1udWxsO3ZhciBlPVlyKHRoaXMpLXQ7aWYoZSl7eW4odGhpcy5saW5lLHRoaXMubGluZS5oZWlnaHQrZSk7dmFyIHI9Ym4odGhpcy5saW5lKTt1ZSh0aGlzLmNtLHIscisxKX19KTt2YXIgYm89dC5MaW5lPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCxYcih0aGlzLGUpLHRoaXMuaGVpZ2h0PXI/cih0aGlzKToxfTtqbihibyksYm8ucHJvdG90eXBlLmxpbmVObz1mdW5jdGlvbigpe3JldHVybiBibih0aGlzKX07dmFyIHhvPXt9O2ZuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZXMubGVuZ3RofSxyZW1vdmVJbm5lcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LG49dCtlO24+cjsrK3Ipe3ZhciBpPXRoaXMubGluZXNbcl07dGhpcy5oZWlnaHQtPWkuaGVpZ2h0LFpyKGkpLFVuKGksImRlbGV0ZSIpfXRoaXMubGluZXMuc3BsaWNlKHQsZSl9LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe3Quc3BsaWNlLmFwcGx5KHQsW3QubGVuZ3RoLDBdLmNvbmNhdCh0aGlzLmxpbmVzKSl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmhlaWdodCs9cix0aGlzLmxpbmVzPXRoaXMubGluZXMuc2xpY2UoMCx0KS5jb25jYXQoZSkuY29uY2F0KHRoaXMubGluZXMuc2xpY2UodCkpO2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7aT5uOysrbillW25dLnBhcmVudD10aGlzfSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQrZTtuPnQ7Kyt0KWlmKHIodGhpcy5saW5lc1t0XSkpcmV0dXJuITB9fSxobi5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5zaXplLT1lO2Zvcih2YXIgcj0wO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmNoaWxkcmVuW3JdLGk9bi5jaHVua1NpemUoKTtpZihpPnQpe3ZhciBvPU1hdGgubWluKGUsaS10KSxsPW4uaGVpZ2h0O2lmKG4ucmVtb3ZlSW5uZXIodCxvKSx0aGlzLmhlaWdodC09bC1uLmhlaWdodCxpPT1vJiYodGhpcy5jaGlsZHJlbi5zcGxpY2Uoci0tLDEpLG4ucGFyZW50PW51bGwpLDA9PShlLT1vKSlicmVhazt0PTB9ZWxzZSB0LT1pfWlmKHRoaXMuc2l6ZS1lPDI1KXt2YXIgcz1bXTt0aGlzLmNvbGxhcHNlKHMpLHRoaXMuY2hpbGRyZW49W25ldyBmbihzKV0sdGhpcy5jaGlsZHJlblswXS5wYXJlbnQ9dGhpc319LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7cj5lOysrZSl0aGlzLmNoaWxkcmVuW2VdLmNvbGxhcHNlKHQpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbih0LGUscil7dGhpcy5zaXplKz1lLmxlbmd0aCx0aGlzLmhlaWdodCs9cjtmb3IodmFyIG49MCxpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRoaXMuY2hpbGRyZW5bbl0sbD1vLmNodW5rU2l6ZSgpO2lmKGw+PXQpe2lmKG8uaW5zZXJ0SW5uZXIodCxlLHIpLG8ubGluZXMmJm8ubGluZXMubGVuZ3RoPjUwKXtmb3IoO28ubGluZXMubGVuZ3RoPjUwOyl7dmFyIHM9by5saW5lcy5zcGxpY2Uoby5saW5lcy5sZW5ndGgtMjUsMjUpLGE9bmV3IGZuKHMpO28uaGVpZ2h0LT1hLmhlaWdodCx0aGlzLmNoaWxkcmVuLnNwbGljZShuKzEsMCxhKSxhLnBhcmVudD10aGlzfXRoaXMubWF5YmVTcGlsbCgpfWJyZWFrfXQtPWx9fSxtYXliZVNwaWxsOmZ1bmN0aW9uKCl7aWYoISh0aGlzLmNoaWxkcmVuLmxlbmd0aDw9MTApKXt2YXIgdD10aGlzO2Rve3ZhciBlPXQuY2hpbGRyZW4uc3BsaWNlKHQuY2hpbGRyZW4ubGVuZ3RoLTUsNSkscj1uZXcgaG4oZSk7aWYodC5wYXJlbnQpe3Quc2l6ZS09ci5zaXplLHQuaGVpZ2h0LT1yLmhlaWdodDt2YXIgbj10aSh0LnBhcmVudC5jaGlsZHJlbix0KTt0LnBhcmVudC5jaGlsZHJlbi5zcGxpY2UobisxLDAscil9ZWxzZXt2YXIgaT1uZXcgaG4odC5jaGlsZHJlbik7aS5wYXJlbnQ9dCx0LmNoaWxkcmVuPVtpLHJdLHQ9aX1yLnBhcmVudD10LnBhcmVudH13aGlsZSh0LmNoaWxkcmVuLmxlbmd0aD4xMCk7dC5wYXJlbnQubWF5YmVTcGlsbCgpfX0saXRlck46ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD50KXt2YXIgcz1NYXRoLm1pbihlLGwtdCk7aWYoby5pdGVyTih0LHMscikpcmV0dXJuITA7aWYoMD09KGUtPXMpKWJyZWFrO3Q9MH1lbHNlIHQtPWx9fX07dmFyIENvPTAsd289dC5Eb2M9ZnVuY3Rpb24odCxlLHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHdvKSlyZXR1cm4gbmV3IHdvKHQsZSxyKTtudWxsPT1yJiYocj0wKSxobi5jYWxsKHRoaXMsW25ldyBmbihbbmV3IGJvKCIiLG51bGwpXSldKSx0aGlzLmZpcnN0PXIsdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5jYW50RWRpdD0hMSx0aGlzLmhpc3Rvcnk9TG4oKSx0aGlzLmNsZWFuR2VuZXJhdGlvbj0xLHRoaXMuZnJvbnRpZXI9cjt2YXIgbj1ZZShyLDApO3RoaXMuc2VsPXtmcm9tOm4sdG86bixoZWFkOm4sYW5jaG9yOm4sc2hpZnQ6ITEsZXh0ZW5kOiExLGdvYWxDb2x1bW46bnVsbH0sdGhpcy5pZD0rK0NvLHRoaXMubW9kZU9wdGlvbj1lLCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9em8odCkpLGNuKHRoaXMse2Zyb206bix0bzpuLHRleHQ6dH0sbnVsbCx7aGVhZDpuLGFuY2hvcjpufSl9O3dvLnByb3RvdHlwZT1laShobi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOndvLGl0ZXI6ZnVuY3Rpb24odCxlLHIpe3I/dGhpcy5pdGVyTih0LXRoaXMuZmlyc3QsZS10LHIpOnRoaXMuaXRlck4odGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSx0KX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9ZS5sZW5ndGg7aT5uOysrbilyKz1lW25dLmhlaWdodDt0aGlzLmluc2VydElubmVyKHQtdGhpcy5maXJzdCxlLHIpfSxyZW1vdmU6ZnVuY3Rpb24odCxlKXt0aGlzLnJlbW92ZUlubmVyKHQtdGhpcy5maXJzdCxlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKTtyZXR1cm4gdD09PSExP2U6ZS5qb2luKHR8fCJcbiIpfSxzZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1ZZSh0aGlzLmZpcnN0LDApLHI9dGhpcy5maXJzdCt0aGlzLnNpemUtMTtCZSh0aGlzLHtmcm9tOmUsdG86WWUocixnbih0aGlzLHIpLnRleHQubGVuZ3RoKSx0ZXh0OnpvKHQpLG9yaWdpbjoic2V0VmFsdWUifSx7aGVhZDplLGFuY2hvcjplfSwhMCl9LHJlcGxhY2VSYW5nZTpmdW5jdGlvbih0LGUscixuKXtlPVFlKHRoaXMsZSkscj1yP1FlKHRoaXMscik6ZSxfZSh0aGlzLHQsZSxyLG4pfSxnZXRSYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49bW4odGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSkpO3JldHVybiByPT09ITE/bjpuLmpvaW4ocnx8IlxuIil9LGdldExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMaW5lSGFuZGxlKHQpO3JldHVybiBlJiZlLnRleHR9LHNldExpbmU6ZnVuY3Rpb24odCxlKXt0cih0aGlzLHQpJiZfZSh0aGlzLGUsWWUodCwwKSxRZSh0aGlzLFllKHQpKSl9LHJlbW92ZUxpbmU6ZnVuY3Rpb24odCl7dD9fZSh0aGlzLCIiLFFlKHRoaXMsWWUodC0xKSksUWUodGhpcyxZZSh0KSkpOl9lKHRoaXMsIiIsWWUoMCwwKSxRZSh0aGlzLFllKDEsMCkpKX0sZ2V0TGluZUhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdHIodGhpcyx0KT9nbih0aGlzLHQpOnZvaWQgMH0sZ2V0TGluZU51bWJlcjpmdW5jdGlvbih0KXtyZXR1cm4gYm4odCl9LGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJih0PWduKHRoaXMsdCkpLEdyKHRoaXMsdCl9LGxpbmVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LGZpcnN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0fSxsYXN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0K3RoaXMuc2l6ZS0xfSxjbGlwUG9zOmZ1bmN0aW9uKHQpe3JldHVybiBRZSh0aGlzLHQpfSxnZXRDdXJzb3I6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLnNlbDtyZXR1cm4gZT1udWxsPT10fHwiaGVhZCI9PXQ/ci5oZWFkOiJhbmNob3IiPT10P3IuYW5jaG9yOiJlbmQiPT10fHx0PT09ITE/ci50bzpyLmZyb20sWmUoZSl9LHNvbWV0aGluZ1NlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWplKHRoaXMuc2VsLmhlYWQsdGhpcy5zZWwuYW5jaG9yKX0sc2V0Q3Vyc29yOnNlKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1RZSh0aGlzLCJudW1iZXIiPT10eXBlb2YgdD9ZZSh0LGV8fDApOnQpO3I/ZXIodGhpcyxuKTpucih0aGlzLG4sbil9KSxzZXRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe25yKHRoaXMsUWUodGhpcyx0KSxRZSh0aGlzLGV8fHQpLHIpfSksZXh0ZW5kU2VsZWN0aW9uOnNlKGZ1bmN0aW9uKHQsZSxyKXtlcih0aGlzLFFlKHRoaXMsdCksZSYmUWUodGhpcyxlKSxyKX0pLGdldFNlbGVjdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRSYW5nZSh0aGlzLnNlbC5mcm9tLHRoaXMuc2VsLnRvLHQpfSxyZXBsYWNlU2VsZWN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtCZSh0aGlzLHtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8sdGV4dDp6byh0KSxvcmlnaW46cn0sZXx8ImFyb3VuZCIpfSx1bmRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywidW5kbyIpfSkscmVkbzpzZShmdW5jdGlvbigpe1ZlKHRoaXMsInJlZG8iKX0pLHNldEV4dGVuZGluZzpmdW5jdGlvbih0KXt0aGlzLnNlbC5leHRlbmQ9dH0saGlzdG9yeVNpemU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhpc3Rvcnk7cmV0dXJue3VuZG86dC5kb25lLmxlbmd0aCxyZWRvOnQudW5kb25lLmxlbmd0aH19LGNsZWFySGlzdG9yeTpmdW5jdGlvbigpe3RoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbil9LG1hcmtDbGVhbjpmdW5jdGlvbigpe3RoaXMuY2xlYW5HZW5lcmF0aW9uPXRoaXMuY2hhbmdlR2VuZXJhdGlvbigpfSxjaGFuZ2VHZW5lcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGlzdG9yeS5sYXN0T3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCx0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbn0saXNDbGVhbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb249PSh0fHx0aGlzLmNsZWFuR2VuZXJhdGlvbil9LGdldEhpc3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpIbih0aGlzLmhpc3RvcnkuZG9uZSksdW5kb25lOkhuKHRoaXMuaGlzdG9yeS51bmRvbmUpfX0sc2V0SGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmhpc3Rvcnk9TG4odGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO2UuZG9uZT10LmRvbmUuc2xpY2UoMCksZS51bmRvbmU9dC51bmRvbmUuc2xpY2UoMCl9LG1hcmtUZXh0OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVHIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSksciwicmFuZ2UiKX0sc2V0Qm9va21hcms6ZnVuY3Rpb24odCxlKXt2YXIgcj17cmVwbGFjZWRXaXRoOmUmJihudWxsPT1lLm5vZGVUeXBlP2Uud2lkZ2V0OmUpLGluc2VydExlZnQ6ZSYmZS5pbnNlcnRMZWZ0fTtyZXR1cm4gdD1RZSh0aGlzLHQpLFRyKHRoaXMsdCx0LHIsImJvb2ttYXJrIil9LGZpbmRNYXJrc0F0OmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT1bXSxyPWduKHRoaXMsdC5saW5lKS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dOyhudWxsPT1pLmZyb218fGkuZnJvbTw9dC5jaCkmJihudWxsPT1pLnRvfHxpLnRvPj10LmNoKSYmZS5wdXNoKGkubWFya2VyLnBhcmVudHx8aS5tYXJrZXIpfXJldHVybiBlfSxnZXRBbGxNYXJrczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLml0ZXIoZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKW51bGwhPXJbbl0uZnJvbSYmdC5wdXNoKHJbbl0ubWFya2VyKX0pLHR9LHBvc0Zyb21JbmRleDpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihuKXt2YXIgaT1uLnRleHQubGVuZ3RoKzE7cmV0dXJuIGk+dD8oZT10LCEwKToodC09aSwrK3Isdm9pZCAwKX0pLFFlKHRoaXMsWWUocixlKSl9LGluZGV4RnJvbVBvczpmdW5jdGlvbih0KXt0PVFlKHRoaXMsdCk7dmFyIGU9dC5jaDtyZXR1cm4gdC5saW5lPHRoaXMuZmlyc3R8fHQuY2g8MD8wOih0aGlzLml0ZXIodGhpcy5maXJzdCx0LmxpbmUsZnVuY3Rpb24odCl7ZSs9dC50ZXh0Lmxlbmd0aCsxfSksZSl9LGNvcHk6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHdvKHZuKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSksdGhpcy5tb2RlT3B0aW9uLHRoaXMuZmlyc3QpO3JldHVybiBlLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCxlLnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0LGUuc2VsPXtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8saGVhZDp0aGlzLnNlbC5oZWFkLGFuY2hvcjp0aGlzLnNlbC5hbmNob3Isc2hpZnQ6dGhpcy5zZWwuc2hpZnQsZXh0ZW5kOiExLGdvYWxDb2x1bW46dGhpcy5zZWwuZ29hbENvbHVtbn0sdCYmKGUuaGlzdG9yeS51bmRvRGVwdGg9dGhpcy5oaXN0b3J5LnVuZG9EZXB0aCxlLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpKSxlfSxsaW5rZWREb2M6ZnVuY3Rpb24odCl7dHx8KHQ9e30pO3ZhciBlPXRoaXMuZmlyc3Qscj10aGlzLmZpcnN0K3RoaXMuc2l6ZTtudWxsIT10LmZyb20mJnQuZnJvbT5lJiYoZT10LmZyb20pLG51bGwhPXQudG8mJnQudG88ciYmKHI9dC50byk7dmFyIG49bmV3IHdvKHZuKHRoaXMsZSxyKSx0Lm1vZGV8fHRoaXMubW9kZU9wdGlvbixlKTtyZXR1cm4gdC5zaGFyZWRIaXN0JiYobi5oaXN0b3J5PXRoaXMuaGlzdG9yeSksKHRoaXMubGlua2VkfHwodGhpcy5saW5rZWQ9W10pKS5wdXNoKHtkb2M6bixzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH0pLG4ubGlua2VkPVt7ZG9jOnRoaXMsaXNQYXJlbnQ6ITAsc2hhcmVkSGlzdDp0LnNoYXJlZEhpc3R9XSxufSx1bmxpbmtEb2M6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQmJihlPWUuZG9jKSx0aGlzLmxpbmtlZClmb3IodmFyIHI9MDtyPHRoaXMubGlua2VkLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGlua2VkW3JdO2lmKG4uZG9jPT1lKXt0aGlzLmxpbmtlZC5zcGxpY2UociwxKSxlLnVubGlua0RvYyh0aGlzKTticmVha319aWYoZS5oaXN0b3J5PT10aGlzLmhpc3Rvcnkpe3ZhciBpPVtlLmlkXTtkbihlLGZ1bmN0aW9uKHQpe2kucHVzaCh0LmlkKX0sITApLGUuaGlzdG9yeT1MbigpLGUuaGlzdG9yeS5kb25lPUhuKHRoaXMuaGlzdG9yeS5kb25lLGkpLGUuaGlzdG9yeS51bmRvbmU9SG4odGhpcy5oaXN0b3J5LnVuZG9uZSxpKX19LGl0ZXJMaW5rZWREb2NzOmZ1bmN0aW9uKHQpe2RuKHRoaXMsdCl9LGdldE1vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxnZXRFZGl0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbX19KSx3by5wcm90b3R5cGUuZWFjaExpbmU9d28ucHJvdG90eXBlLml0ZXI7dmFyIExvPSJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IiLnNwbGl0KCIgIik7Zm9yKHZhciBrbyBpbiB3by5wcm90b3R5cGUpd28ucHJvdG90eXBlLmhhc093blByb3BlcnR5KGtvKSYmdGkoTG8sa28pPDAmJih0LnByb3RvdHlwZVtrb109ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcy5kb2MsYXJndW1lbnRzKX19KHdvLnByb3RvdHlwZVtrb10pKTtqbih3byksdC5lX3N0b3A9UG4sdC5lX3ByZXZlbnREZWZhdWx0PXpuLHQuZV9zdG9wUHJvcGFnYXRpb249SW47dmFyIFNvLE1vPTA7dC5vbj1Hbix0Lm9mZj1Wbix0LnNpZ25hbD1Lbjt2YXIgVG89MzAsQW89dC5QYXNzPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLlBhc3MifX07JG4ucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodGhpcy5pZCksdGhpcy5pZD1zZXRUaW1lb3V0KGUsdCl9fSx0LmNvdW50Q29sdW1uPVpuO3ZhciBIbz1bIiJdLE5vPS9bXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLyxEbz0vW1x1MDMwMC1cdTAzNkZcdTA0ODMtXHUwNDg3XHUwNDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0LVx1MDVDNVx1MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEItXHUwNjVGXHUwNjcwXHUwNkQ2LVx1MDZEQ1x1MDZERi1cdTA2RTRcdTA2RTctXHUwNkU4XHUwNkVBLVx1MDZFRFx1QTY2Rlx1MURDMOKAk1x1MURGRlx1MjBEMOKAk1x1MjBGRlx1QTY3MC1cdUE2NzJcdUE2NzQtXHVBNjdEXHVBNjlGXHVkYzAwLVx1ZGZmZlx1RkUyMOKAk1x1RkUyRl0vO3QucmVwbGFjZUdldFJlY3Q9ZnVuY3Rpb24odCl7Zmk9dH07dmFyIFdvPWZ1bmN0aW9uKCl7aWYoTmkpcmV0dXJuITE7dmFyIHQ9c2koImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gdHx8ImRyYWdEcm9wImluIHR9KCk7VGk/aGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzY9PXQuY2hhckNvZGVBdChlLTEpJiYzOT09dC5jaGFyQ29kZUF0KGUpfTpJaSYmIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3JldHVybi9cLVteIFwtP118XD9bXiAhXCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfTpXaSYmL0Nocm9tZVwvKD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk/aGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZS0xKTtyZXR1cm4gcj49ODIwOCYmODIxMj49cn06V2kmJihoaT1mdW5jdGlvbih0LGUpe2lmKGU+MSYmNDU9PXQuY2hhckNvZGVBdChlLTEpKXtpZigvXHcvLnRlc3QodC5jaGFyQXQoZS0yKSkmJi9bXlwtP1wuXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITA7aWYoZT4yJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1tcZFwuLF0vLnRlc3QodC5jaGFyQXQoZSkpKXJldHVybiExfXJldHVybi9bfiEjJSYqKT0rfVxdXFx8XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZbXHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfSk7dmFyIE9vLEVvLHpvPTMhPSJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9W10sbj10Lmxlbmd0aDtuPj1lOyl7dmFyIGk9dC5pbmRleE9mKCJcbiIsZSk7LTE9PWkmJihpPXQubGVuZ3RoKTt2YXIgbz10LnNsaWNlKGUsIlxyIj09dC5jaGFyQXQoaS0xKT9pLTE6aSksbD1vLmluZGV4T2YoIlxyIik7LTEhPWw/KHIucHVzaChvLnNsaWNlKDAsbCkpLGUrPWwrMSk6KHIucHVzaChvKSxlPWkrMSl9cmV0dXJuIHJ9OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KC9cclxuP3xcbi8pfTt0LnNwbGl0TGluZXM9em87dmFyIElvPXdpbmRvdy5nZXRTZWxlY3Rpb24/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LnNlbGVjdGlvblN0YXJ0IT10LnNlbGVjdGlvbkVuZH1jYXRjaChlKXtyZXR1cm4hMX19OmZ1bmN0aW9uKHQpe3RyeXt2YXIgZT10Lm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCl9Y2F0Y2gocil7fXJldHVybiBlJiZlLnBhcmVudEVsZW1lbnQoKT09dD8wIT1lLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLGUpOiExfSxGbz1mdW5jdGlvbigpe3ZhciB0PXNpKCJkaXYiKTtyZXR1cm4ib25jb3B5ImluIHQ/ITA6KHQuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCJyZXR1cm47IiksImZ1bmN0aW9uIj09dHlwZW9mIHQub25jb3B5KX0oKSxQbz17MzoiRW50ZXIiLDg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkN0cmwiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjIiwzMjoiU3BhY2UiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJMZWZ0IiwzODoiVXAiLDM5OiJSaWdodCIsNDA6IkRvd24iLDQ0OiJQcmludFNjcm4iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDU5OiI7Iiw5MToiTW9kIiw5MjoiTW9kIiw5MzoiTW9kIiwxMDk6Ii0iLDEwNzoiPSIsMTI3OiJEZWxldGUiLDE4NjoiOyIsMTg3OiI9IiwxODg6IiwiLDE4OToiLSIsMTkwOiIuIiwxOTE6Ii8iLDE5MjoiYCIsMjE5OiJbIiwyMjA6IlxcIiwyMjE6Il0iLDIyMjoiJyIsNjMyNzY6IlBhZ2VVcCIsNjMyNzc6IlBhZ2VEb3duIiw2MzI3NToiRW5kIiw2MzI3MzoiSG9tZSIsNjMyMzQ6IkxlZnQiLDYzMjMyOiJVcCIsNjMyMzU6IlJpZ2h0Iiw2MzIzMzoiRG93biIsNjMzMDI6Ikluc2VydCIsNjMyNzI6IkRlbGV0ZSJ9O3Qua2V5TmFtZXM9UG8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDsxMD50O3QrKylQb1t0KzQ4XT1TdHJpbmcodCk7Zm9yKHZhciB0PTY1OzkwPj10O3QrKylQb1t0XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2Zvcih2YXIgdD0xOzEyPj10O3QrKylQb1t0KzExMV09UG9bdCs2MzIzNV09IkYiK3R9KCk7dmFyIFJvLEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gMjU1Pj10P2UuY2hhckF0KHQpOnQ+PTE0MjQmJjE1MjQ+PXQ/IlIiOnQ+PTE1MzYmJjE3OTE+PXQ/ci5jaGFyQXQodC0xNTM2KTp0Pj0xNzkyJiYyMjIwPj10PyJyIjoiTCJ9dmFyIGU9ImJiYmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJzc3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTEwiLHI9InJycnJycnJycnJycixyTk5tbW1tbW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tcnJycnJycm5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbW1tbW1tTm1tbW1ycnJycnJycnJycnJycnJycnIiLG49L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLyxpPS9bc3R3Tl0vLG89L1tMUnJdLyxsPS9bTGIxbl0vLHM9L1sxbl0vLGE9IkwiO3JldHVybiBmdW5jdGlvbihlKXtpZighbi50ZXN0KGUpKXJldHVybiExO2Zvcih2YXIgcix1PWUubGVuZ3RoLGM9W10sZj0wO3U+ZjsrK2YpYy5wdXNoKHI9dChlLmNoYXJDb2RlQXQoZikpKTtmb3IodmFyIGY9MCxoPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsibSI9PXI/Y1tmXT1oOmg9cn1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiMSI9PXImJiJyIj09ZD9jW2ZdPSJuIjpvLnRlc3QocikmJihkPXIsInIiPT1yJiYoY1tmXT0iUiIpKX1mb3IodmFyIGY9MSxoPWNbMF07dS0xPmY7KytmKXt2YXIgcj1jW2ZdOyIrIj09ciYmIjEiPT1oJiYiMSI9PWNbZisxXT9jW2ZdPSIxIjoiLCIhPXJ8fGghPWNbZisxXXx8IjEiIT1oJiYibiIhPWh8fChjW2ZdPWgpLGg9cn1mb3IodmFyIGY9MDt1PmY7KytmKXt2YXIgcj1jW2ZdO2lmKCIsIj09ciljW2ZdPSJOIjtlbHNlIGlmKCIlIj09cil7Zm9yKHZhciBwPWYrMTt1PnAmJiIlIj09Y1twXTsrK3ApO2Zvcih2YXIgZz1mJiYiISI9PWNbZi0xXXx8dS0xPnAmJiIxIj09Y1twXT8iMSI6Ik4iLG09ZjtwPm07KyttKWNbbV09ZztmPXAtMX19Zm9yKHZhciBmPTAsZD1hO3U+ZjsrK2Ype3ZhciByPWNbZl07IkwiPT1kJiYiMSI9PXI/Y1tmXT0iTCI6by50ZXN0KHIpJiYoZD1yKX1mb3IodmFyIGY9MDt1PmY7KytmKWlmKGkudGVzdChjW2ZdKSl7Zm9yKHZhciBwPWYrMTt1PnAmJmkudGVzdChjW3BdKTsrK3ApO2Zvcih2YXIgdj0iTCI9PShmP2NbZi0xXTphKSx5PSJMIj09KHUtMT5wP2NbcF06YSksZz12fHx5PyJMIjoiUiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfWZvcih2YXIgYix4PVtdLGY9MDt1PmY7KWlmKGwudGVzdChjW2ZdKSl7dmFyIEM9Zjtmb3IoKytmO3U+ZiYmbC50ZXN0KGNbZl0pOysrZik7eC5wdXNoKHtmcm9tOkMsdG86ZixsZXZlbDowfSl9ZWxzZXt2YXIgdz1mLEw9eC5sZW5ndGg7Zm9yKCsrZjt1PmYmJiJMIiE9Y1tmXTsrK2YpO2Zvcih2YXIgbT13O2Y+bTspaWYocy50ZXN0KGNbbV0pKXttPncmJnguc3BsaWNlKEwsMCx7ZnJvbTp3LHRvOm0sbGV2ZWw6MX0pO3ZhciBrPW07Zm9yKCsrbTtmPm0mJnMudGVzdChjW21dKTsrK20pO3guc3BsaWNlKEwsMCx7ZnJvbTprLHRvOm0sbGV2ZWw6Mn0pLHc9bX1lbHNlKyttO2Y+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86ZixsZXZlbDoxfSl9cmV0dXJuIDE9PXhbMF0ubGV2ZWwmJihiPWUubWF0Y2goL15ccysvKSkmJih4WzBdLmZyb209YlswXS5sZW5ndGgseC51bnNoaWZ0KHtmcm9tOjAsdG86YlswXS5sZW5ndGgsbGV2ZWw6MH0pKSwxPT1Rbih4KS5sZXZlbCYmKGI9ZS5tYXRjaCgvXHMrJC8pKSYmKFFuKHgpLnRvLT1iWzBdLmxlbmd0aCx4LnB1c2goe2Zyb206dS1iWzBdLmxlbmd0aCx0bzp1LGxldmVsOjB9KSkseFswXS5sZXZlbCE9UW4oeCkubGV2ZWwmJngucHVzaCh7ZnJvbTp1LHRvOnUsbGV2ZWw6eFswXS5sZXZlbH0pLHh9fSgpO3JldHVybiB0LnZlcnNpb249IjMuMjAuMCIsdH0oKTtQSwcIxlyRsL+vAQC/rwEAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAc3RhdGljXGxpYlxoaWdobGlnaHQubWluLmpzdmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChvKXtyZXR1cm4gby5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gYihwKXtmb3IodmFyIG89cC5maXJzdENoaWxkO287bz1vLm5leHRTaWJsaW5nKXtpZihvLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJDT0RFIil7cmV0dXJuIG99aWYoIShvLm5vZGVUeXBlPT0zJiZvLm5vZGVWYWx1ZS5tYXRjaCgvXHMrLykpKXticmVha319fWZ1bmN0aW9uIGgocCxvKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHAuY2hpbGROb2RlcyxmdW5jdGlvbihxKXtpZihxLm5vZGVUeXBlPT0zKXtyZXR1cm4gbz9xLm5vZGVWYWx1ZS5yZXBsYWNlKC9cbi9nLCIiKTpxLm5vZGVWYWx1ZX1pZihxLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJCUiIpe3JldHVybiJcbiJ9cmV0dXJuIGgocSxvKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIGEocSl7dmFyIHA9KHEuY2xhc3NOYW1lKyIgIisocS5wYXJlbnROb2RlP3EucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIpKS5zcGxpdCgvXHMrLyk7cD1wLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIil9KTtmb3IodmFyIG89MDtvPHAubGVuZ3RoO28rKyl7aWYoZVtwW29dXXx8cFtvXT09Im5vLWhpZ2hsaWdodCIpe3JldHVybiBwW29dfX19ZnVuY3Rpb24gYyhxKXt2YXIgbz1bXTsoZnVuY3Rpb24gcChyLHMpe2Zvcih2YXIgdD1yLmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpe2lmKHQubm9kZVR5cGU9PTMpe3MrPXQubm9kZVZhbHVlLmxlbmd0aH1lbHNle2lmKHQubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cys9MX1lbHNle2lmKHQubm9kZVR5cGU9PTEpe28ucHVzaCh7ZXZlbnQ6InN0YXJ0IixvZmZzZXQ6cyxub2RlOnR9KTtzPXAodCxzKTtvLnB1c2goe2V2ZW50OiJzdG9wIixvZmZzZXQ6cyxub2RlOnR9KX19fX1yZXR1cm4gc30pKHEsMCk7cmV0dXJuIG99ZnVuY3Rpb24gaihwLHIsdil7dmFyIHE9MDt2YXIgeT0iIjt2YXIgcz1bXTtmdW5jdGlvbiB1KCl7aWYoIXAubGVuZ3RofHwhci5sZW5ndGgpe3JldHVybiBwLmxlbmd0aD9wOnJ9aWYocFswXS5vZmZzZXQhPXJbMF0ub2Zmc2V0KXtyZXR1cm4ocFswXS5vZmZzZXQ8clswXS5vZmZzZXQpP3A6cn1yZXR1cm4gclswXS5ldmVudD09InN0YXJ0Ij9wOnJ9ZnVuY3Rpb24gdChBKXtmdW5jdGlvbiB6KEIpe3JldHVybiIgIitCLm5vZGVOYW1lKyc9IicrbChCLnZhbHVlKSsnIid9eSs9IjwiK0Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKStBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoQS5hdHRyaWJ1dGVzLHopLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB4KHope3krPSI8LyIrei5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKyI+In1mdW5jdGlvbiBvKHopeyh6LmV2ZW50PT0ic3RhcnQiP3Q6eCkoei5ub2RlKX13aGlsZShwLmxlbmd0aHx8ci5sZW5ndGgpe3ZhciB3PXUoKTt5Kz1sKHYuc3Vic3RyKHEsd1swXS5vZmZzZXQtcSkpO3E9d1swXS5vZmZzZXQ7aWYodz09cCl7cy5yZXZlcnNlKCkuZm9yRWFjaCh4KTtkb3tvKHcuc3BsaWNlKDAsMSlbMF0pO3c9dSgpfXdoaWxlKHc9PXAmJncubGVuZ3RoJiZ3WzBdLm9mZnNldD09cSk7cy5yZXZlcnNlKCkuZm9yRWFjaCh0KX1lbHNle2lmKHdbMF0uZXZlbnQ9PSJzdGFydCIpe3MucHVzaCh3WzBdLm5vZGUpfWVsc2V7cy5wb3AoKX1vKHcuc3BsaWNlKDAsMSlbMF0pfX1yZXR1cm4geStsKHYuc3Vic3RyKHEpKX1mdW5jdGlvbiBmKHIpe2Z1bmN0aW9uIG8ocyl7cmV0dXJuKHMmJnMuc291cmNlKXx8c31mdW5jdGlvbiBwKHQscyl7cmV0dXJuIFJlZ0V4cChvKHQpLCJtIisoci5jST8iaSI6IiIpKyhzPyJnIjoiIikpfWZ1bmN0aW9uIHEoeix4KXtpZih6LmNvbXBpbGVkKXtyZXR1cm59ei5jb21waWxlZD10cnVlO3ZhciB1PVtdO2lmKHouayl7dmFyIHM9e307ZnVuY3Rpb24gQShCLHQpe2lmKHIuY0kpe3Q9dC50b0xvd2VyQ2FzZSgpfXQuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBEPUMuc3BsaXQoInwiKTtzW0RbMF1dPVtCLERbMV0/TnVtYmVyKERbMV0pOjFdO3UucHVzaChEWzBdKX0pfXoubFI9cCh6Lmx8fCJcXGIiK2hsanMuSVIrIlxcYig/IVxcLikiLHRydWUpO2lmKHR5cGVvZiB6Lms9PSJzdHJpbmciKXtBKCJrZXl3b3JkIix6LmspfWVsc2V7Zm9yKHZhciB5IGluIHouayl7aWYoIXouay5oYXNPd25Qcm9wZXJ0eSh5KSl7Y29udGludWV9QSh5LHoua1t5XSl9fXouaz1zfWlmKHgpe2lmKHouYldLKXt6LmI9IlxcYigiK3Uuam9pbigifCIpKyIpXFxiKD8hXFwuKVxccyoifXouYlI9cCh6LmI/ei5iOiJcXEJ8XFxiIik7aWYoIXouZSYmIXouZVcpe3ouZT0iXFxCfFxcYiJ9aWYoei5lKXt6LmVSPXAoei5lKX16LnRFPW8oei5lKXx8IiI7aWYoei5lVyYmeC50RSl7ei50RSs9KHouZT8ifCI6IiIpK3gudEV9fWlmKHouaSl7ei5pUj1wKHouaSl9aWYoei5yPT09dW5kZWZpbmVkKXt6LnI9MX1pZighei5jKXt6LmM9W119Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7aWYoei5jW3ddPT0ic2VsZiIpe3ouY1t3XT16fXEoei5jW3ddLHopfWlmKHouc3RhcnRzKXtxKHouc3RhcnRzLHgpfXZhciB2PVtdO2Zvcih2YXIgdz0wO3c8ei5jLmxlbmd0aDt3Kyspe3YucHVzaChvKHouY1t3XS5iKSl9aWYoei50RSl7di5wdXNoKG8oei50RSkpfWlmKHouaSl7di5wdXNoKG8oei5pKSl9ei50PXYubGVuZ3RoP3Aodi5qb2luKCJ8IiksdHJ1ZSk6e2V4ZWM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9fX1xKHIpfWZ1bmN0aW9uIGQoRSxHLEMsTSl7ZnVuY3Rpb24gbyhyLFApe2Zvcih2YXIgTz0wO088UC5jLmxlbmd0aDtPKyspe3ZhciBOPVAuY1tPXS5iUi5leGVjKHIpO2lmKE4mJk4uaW5kZXg9PTApe3JldHVybiBQLmNbT119fX1mdW5jdGlvbiBzKE4scil7aWYoTi5lJiZOLmVSLnRlc3Qocikpe3JldHVybiBOfWlmKE4uZVcpe3JldHVybiBzKE4ucGFyZW50LHIpfX1mdW5jdGlvbiB0KHIsTil7cmV0dXJuICFDJiZOLmkmJk4uaVIudGVzdChyKX1mdW5jdGlvbiB5KE8scil7dmFyIE49SC5jST9yWzBdLnRvTG93ZXJDYXNlKCk6clswXTtyZXR1cm4gTy5rLmhhc093blByb3BlcnR5KE4pJiZPLmtbTl19ZnVuY3Rpb24gSSgpe3ZhciBOPWwodyk7aWYoIUIuayl7cmV0dXJuIE59dmFyIHI9IiI7dmFyIFE9MDtCLmxSLmxhc3RJbmRleD0wO3ZhciBPPUIubFIuZXhlYyhOKTt3aGlsZShPKXtyKz1OLnN1YnN0cihRLE8uaW5kZXgtUSk7dmFyIFA9eShCLE8pO2lmKFApe3YrPVBbMV07cis9JzxzcGFuIGNsYXNzPSInK1BbMF0rJyI+JytPWzBdKyI8L3NwYW4+In1lbHNle3IrPU9bMF19UT1CLmxSLmxhc3RJbmRleDtPPUIubFIuZXhlYyhOKX1yZXR1cm4gcitOLnN1YnN0cihRKX1mdW5jdGlvbiB6KCl7aWYoQi5zTCYmIWVbQi5zTF0pe3JldHVybiBsKHcpfXZhciBOPUIuc3ViTGFuZ3VhZ2VNb2RlPT0iY29udGludW91cyI/Qi50b3A6dW5kZWZpbmVkO3ZhciByPUIuc0w/ZChCLnNMLHcsdHJ1ZSxOKTpnKHcpO2lmKEIucj4wKXt2Kz1yLmtleXdvcmRfY291bnQ7QSs9ci5yfUIudG9wPXIudG9wO3JldHVybic8c3BhbiBjbGFzcz0iJytyLmxhbmd1YWdlKyciPicrci52YWx1ZSsiPC9zcGFuPiJ9ZnVuY3Rpb24gTCgpe3JldHVybiBCLnNMIT09dW5kZWZpbmVkP3ooKTpJKCl9ZnVuY3Rpb24gSyhPLHIpe3ZhciBOPU8uY04/JzxzcGFuIGNsYXNzPSInK08uY04rJyI+JzoiIjtpZihPLnJCKXt4Kz1OO3c9IiJ9ZWxzZXtpZihPLmVCKXt4Kz1sKHIpK047dz0iIn1lbHNle3grPU47dz1yfX1CPU9iamVjdC5jcmVhdGUoTyx7cGFyZW50Ont2YWx1ZTpCfX0pfWZ1bmN0aW9uIEQoTixyKXt3Kz1OO2lmKHI9PT11bmRlZmluZWQpe3grPUwoKTtyZXR1cm4gMH12YXIgUD1vKHIsQik7aWYoUCl7eCs9TCgpO0soUCxyKTtyZXR1cm4gUC5yQj8wOnIubGVuZ3RofXZhciBRPXMoQixyKTtpZihRKXt2YXIgTz1CO2lmKCEoTy5yRXx8Ty5lRSkpe3crPXJ9eCs9TCgpO2Rve2lmKEIuY04pe3grPSI8L3NwYW4+In1BKz1CLnI7Qj1CLnBhcmVudH13aGlsZShCIT1RLnBhcmVudCk7aWYoTy5lRSl7eCs9bChyKX13PSIiO2lmKFEuc3RhcnRzKXtLKFEuc3RhcnRzLCIiKX1yZXR1cm4gTy5yRT8wOnIubGVuZ3RofWlmKHQocixCKSl7dGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtICInK3IrJyIgZm9yIG1vZGUgIicrKEIuY058fCI8dW5uYW1lZD4iKSsnIicpfXcrPXI7cmV0dXJuIHIubGVuZ3RofHwxfXZhciBIPWVbRV07aWYoIUgpe3Rocm93IG5ldyBFcnJvcignVW5rbm93biBsYW5ndWFnZTogIicrRSsnIicpfWYoSCk7dmFyIEI9TXx8SDt2YXIgeD0iIjtmb3IodmFyIEY9QjtGIT1IO0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3g9JzxzcGFuIGNsYXNzPSInK0YuY04rJyI+Jyt4fX12YXIgdz0iIjt2YXIgQT0wO3ZhciB2PTA7dHJ5e3ZhciB1LHEscD0wO3doaWxlKHRydWUpe0IudC5sYXN0SW5kZXg9cDt1PUIudC5leGVjKEcpO2lmKCF1KXticmVha31xPUQoRy5zdWJzdHIocCx1LmluZGV4LXApLHVbMF0pO3A9dS5pbmRleCtxfUQoRy5zdWJzdHIocCkpO2Zvcih2YXIgRj1CO0YucGFyZW50O0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3grPSI8L3NwYW4+In19cmV0dXJue3I6QSxrZXl3b3JkX2NvdW50OnYsdmFsdWU6eCxsYW5ndWFnZTpFLHRvcDpCfX1jYXRjaChKKXtpZihKLm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpIT0tMSl7cmV0dXJue3I6MCxrZXl3b3JkX2NvdW50OjAsdmFsdWU6bChHKX19ZWxzZXt0aHJvdyBKfX19ZnVuY3Rpb24gZyhzKXt2YXIgbz17a2V5d29yZF9jb3VudDowLHI6MCx2YWx1ZTpsKHMpfTt2YXIgcT1vO2Zvcih2YXIgcCBpbiBlKXtpZighZS5oYXNPd25Qcm9wZXJ0eShwKSl7Y29udGludWV9dmFyIHI9ZChwLHMsZmFsc2UpO3IubGFuZ3VhZ2U9cDtpZihyLmtleXdvcmRfY291bnQrci5yPnEua2V5d29yZF9jb3VudCtxLnIpe3E9cn1pZihyLmtleXdvcmRfY291bnQrci5yPm8ua2V5d29yZF9jb3VudCtvLnIpe3E9bztvPXJ9fWlmKHEubGFuZ3VhZ2Upe28uc2Vjb25kX2Jlc3Q9cX1yZXR1cm4gb31mdW5jdGlvbiBpKHEscCxvKXtpZihwKXtxPXEucmVwbGFjZSgvXigoPFtePl0rPnxcdCkrKS9nbSxmdW5jdGlvbihyLHYsdSx0KXtyZXR1cm4gdi5yZXBsYWNlKC9cdC9nLHApfSl9aWYobyl7cT1xLnJlcGxhY2UoL1xuL2csIjxicj4iKX1yZXR1cm4gcX1mdW5jdGlvbiBtKHIsdSxwKXt2YXIgdj1oKHIscCk7dmFyIHQ9YShyKTtpZih0PT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJufXZhciB3PXQ/ZCh0LHYsdHJ1ZSk6Zyh2KTt0PXcubGFuZ3VhZ2U7dmFyIG89YyhyKTtpZihvLmxlbmd0aCl7dmFyIHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIik7cS5pbm5lckhUTUw9dy52YWx1ZTt3LnZhbHVlPWoobyxjKHEpLHYpfXcudmFsdWU9aSh3LnZhbHVlLHUscCk7dmFyIHM9ci5jbGFzc05hbWU7aWYoIXMubWF0Y2goIihcXHN8XikobGFuZ3VhZ2UtKT8iK3QrIihcXHN8JCkiKSl7cz1zPyhzKyIgIit0KTp0fXIuaW5uZXJIVE1MPXcudmFsdWU7ci5jbGFzc05hbWU9cztyLnJlc3VsdD17bGFuZ3VhZ2U6dCxrdzp3LmtleXdvcmRfY291bnQscmU6dy5yfTtpZih3LnNlY29uZF9iZXN0KXtyLnNlY29uZF9iZXN0PXtsYW5ndWFnZTp3LnNlY29uZF9iZXN0Lmxhbmd1YWdlLGt3Oncuc2Vjb25kX2Jlc3Qua2V5d29yZF9jb3VudCxyZTp3LnNlY29uZF9iZXN0LnJ9fX1mdW5jdGlvbiBuKCl7aWYobi5jYWxsZWQpe3JldHVybn1uLmNhbGxlZD10cnVlO0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIiksYikuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24obyl7bShvLGhsanMudGFiUmVwbGFjZSl9KX1mdW5jdGlvbiBrKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLG4sZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixuLGZhbHNlKX12YXIgZT17fTt0aGlzLkxBTkdVQUdFUz1lO3RoaXMuaGlnaGxpZ2h0PWQ7dGhpcy5oaWdobGlnaHRBdXRvPWc7dGhpcy5maXhNYXJrdXA9aTt0aGlzLmhpZ2hsaWdodEJsb2NrPW07dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW47dGhpcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPWs7dGhpcy5JUj0iW2EtekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSIoXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcYlxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bLStdP1xcZCspPykiO3RoaXMuQk5SPSJcXGIoMGJbMDFdKykiO3RoaXMuUlNSPSIhfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFwqfFxcKj18XFwrfFxcKz18LHxcXC58LXwtPXwvfC89fDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXD98XFxbfFxce3xcXCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iO3RoaXMuQkU9e2I6IlxcXFxbXFxzXFxTXSIscjowfTt0aGlzLkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlt0aGlzLkJFXSxyOjB9O3RoaXMuUVNNPXtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5DTENNPXtjTjoiY29tbWVudCIsYjoiLy8iLGU6IiQifTt0aGlzLkNCTENMTT17Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8ifTt0aGlzLkhDTT17Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQifTt0aGlzLk5NPXtjTjoibnVtYmVyIixiOnRoaXMuTlIscjowfTt0aGlzLkNOTT17Y046Im51bWJlciIsYjp0aGlzLkNOUixyOjB9O3RoaXMuQk5NPXtjTjoibnVtYmVyIixiOnRoaXMuQk5SLHI6MH07dGhpcy5SRUdFWFBfTU9ERT17Y046InJlZ2V4cCIsYjovXC8vLGU6L1wvW2dpbV0qLyxpOi9cbi8sYzpbdGhpcy5CRSx7YjovXFsvLGU6L1xdLyxyOjAsYzpbdGhpcy5CRV19XX07dGhpcy5pbmhlcml0PWZ1bmN0aW9uKHEscil7dmFyIG89e307Zm9yKHZhciBwIGluIHEpe29bcF09cVtwXX1pZihyKXtmb3IodmFyIHAgaW4gcil7b1twXT1yW3BdfX1yZXR1cm4gb319KCk7aGxqcy5MQU5HVUFHRVMuYmFzaD1mdW5jdGlvbihhKXt2YXIgYz17Y046InZhcmlhYmxlIixiOi9cJFtcd1xkI0BdW1x3XGRfXSovfTt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFx7KC4qPylcfS99O3ZhciBlPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOlthLkJFLGMsYix7Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfV0scjowfTt2YXIgZD17Y046InN0cmluZyIsYjovJy8sZTovJy8scjowfTtyZXR1cm57bDovLT9bYS16XSsvLGs6e2tleXdvcmQ6ImlmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciBicmVhayBjb250aW51ZSB3aGlsZSBpbiBkbyBkb25lIGV4aXQgcmV0dXJuIHNldCBkZWNsYXJlIGNhc2UgZXNhYyBleHBvcnQgZXhlYyIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSIsYnVpbHRfaW46InByaW50ZiBlY2hvIHJlYWQgY2QgcHdkIHB1c2hkIHBvcGQgZGlycyBsZXQgZXZhbCB1bnNldCB0eXBlc2V0IHJlYWRvbmx5IGdldG9wdHMgc291cmNlIHNob3B0IGNhbGxlciB0eXBlIGhhc2ggYmluZCBoZWxwIHN1ZG8iLG9wZXJhdG9yOiItbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEifSxjOlt7Y046InNoZWJhbmciLGI6L14jIVteXG5dK3NoXHMqJC8scjoxMH0se2NOOiJmdW5jdGlvbiIsYjovXHdbXHdcZF9dKlxzKlwoXHMqXClccypcey8sckI6dHJ1ZSxjOlt7Y046InRpdGxlIixiOi9cd1tcd1xkX10qL31dLHI6MH0sYS5IQ00sYS5OTSxlLGQsYyxiXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmNzPWZ1bmN0aW9uKGEpe3JldHVybntrOiJhYnN0cmFjdCBhcyBiYXNlIGJvb2wgYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2hlY2tlZCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWNpbWFsIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmFsc2UgZmluYWxseSBmaXhlZCBmbG9hdCBmb3IgZm9yZWFjaCBnb3RvIGlmIGltcGxpY2l0IGluIGludCBpbnRlcmZhY2UgaW50ZXJuYWwgaXMgbG9jayBsb25nIG5hbWVzcGFjZSBuZXcgbnVsbCBvYmplY3Qgb3BlcmF0b3Igb3V0IG92ZXJyaWRlIHBhcmFtcyBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmVhZG9ubHkgcmVmIHJldHVybiBzYnl0ZSBzZWFsZWQgc2hvcnQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVpbnQgdWxvbmcgdW5jaGVja2VkIHVuc2FmZSB1c2hvcnQgdXNpbmcgdmlydHVhbCB2b2xhdGlsZSB2b2lkIHdoaWxlIGFzeW5jIGF3YWl0IGFzY2VuZGluZyBkZXNjZW5kaW5nIGZyb20gZ2V0IGdyb3VwIGludG8gam9pbiBsZXQgb3JkZXJieSBwYXJ0aWFsIHNlbGVjdCBzZXQgdmFsdWUgdmFyIHdoZXJlIHlpZWxkIixjOlt7Y046ImNvbW1lbnQiLGI6Ii8vLyIsZToiJCIsckI6dHJ1ZSxjOlt7Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+In0se2NOOiJ4bWxEb2NUYWciLGI6IjwvPyIsZToiPiJ9XX0sYS5DTENNLGEuQ0JMQ0xNLHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIixrOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSByZWdpb24gZW5kcmVnaW9uIHByYWdtYSBjaGVja3N1bSJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIicsYzpbe2I6JyIiJ31dfSxhLkFTTSxhLlFTTSxhLkNOTV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5ydWJ5PWZ1bmN0aW9uKGUpe3ZhciBhPSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGo9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBnPXtrZXl3b3JkOiJhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyBpZiBCRUdJTiByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuIG5leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgbmlsIGVsc2UgYnJlYWsgdW5kZWYgbm90IHN1cGVyIGNsYXNzIGNhc2UgcmVxdWlyZSB5aWVsZCBhbGlhcyB3aGlsZSBlbnN1cmUgZWxzaWYgb3IgaW5jbHVkZSJ9O3ZhciBjPXtjTjoieWFyZG9jdGFnIixiOiJAW0EtWmEtel0rIn07dmFyIGs9W3tjTjoiY29tbWVudCIsYjoiIyIsZToiJCIsYzpbY119LHtjTjoiY29tbWVudCIsYjoiXlxcPWJlZ2luIixlOiJeXFw9ZW5kIixjOltjXSxyOjEwfSx7Y046ImNvbW1lbnQiLGI6Il5fX0VORF9fIixlOiJcXG4kIn1dO3ZhciBkPXtjTjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6YSxrOmd9O3ZhciBpPVtlLkJFLGRdO3ZhciBiPVt7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6aSxyOjB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXCgiLGU6IlxcKSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddP3siLGU6In0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddPzwiLGU6Ij4iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LyIsZToiLyIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPy0iLGU6Ii0iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFx8IixlOiJcXHwiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjovXEJcPyhcXFxkezEsM318XFx4W0EtRmEtZjAtOV17MSwyfXxcXHVbQS1GYS1mMC05XXs0fXxcXD9cUylcYi99XTt2YXIgaD17Y046ImZ1bmN0aW9uIixiV0s6dHJ1ZSxlOiIgfCR8OyIsazoiZGVmIixjOlt7Y046InRpdGxlIixiOmosbDphLGs6Z30se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixsOmEsazpnfV0uY29uY2F0KGspfTt2YXIgZj1rLmNvbmNhdChiLmNvbmNhdChbe2NOOiJjbGFzcyIsYldLOnRydWUsZToiJHw7IixrOiJjbGFzcyBtb2R1bGUiLGM6W3tjTjoidGl0bGUiLGI6IltBLVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixyOjB9LHtjTjoiaW5oZXJpdGFuY2UiLGI6IjxcXHMqIixjOlt7Y046InBhcmVudCIsYjoiKCIrZS5JUisiOjopPyIrZS5JUn1dfV0uY29uY2F0KGspfSxoLHtjTjoiY29uc3RhbnQiLGI6Iig6Oik/KFxcYltBLVpdXFx3Kig6Oik/KSsiLHI6MH0se2NOOiJzeW1ib2wiLGI6IjoiLGM6Yi5jb25jYXQoW3tiOmp9XSkscjowfSx7Y046InN5bWJvbCIsYjphKyI6IixyOjB9LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtjTjoidmFyaWFibGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSJ9LHtiOiIoIitlLlJTUisiKVxccyoiLGM6ay5jb25jYXQoW3tjTjoicmVnZXhwIixiOiIvIixlOiIvW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlcnsiLGU6In1bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyXFwoIixlOiJcXClbYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyISIsZToiIVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXFsiLGU6IlxcXVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfV0pLHI6MH1dKSk7ZC5jPWY7aC5jWzFdLmM9ZjtyZXR1cm57bDphLGs6ZyxjOmZ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5kaWZmPWZ1bmN0aW9uKGEpe3JldHVybntjOlt7Y046ImNodW5rIixiOiJeXFxAXFxAICtcXC1cXGQrLFxcZCsgK1xcK1xcZCssXFxkKyArXFxAXFxAJCIscjoxMH0se2NOOiJjaHVuayIsYjoiXlxcKlxcKlxcKiArXFxkKyxcXGQrICtcXCpcXCpcXCpcXCokIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwtXFwtXFwtICtcXGQrLFxcZCsgK1xcLVxcLVxcLVxcLSQiLHI6MTB9LHtjTjoiaGVhZGVyIixiOiJJbmRleDogIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Ij09PT09IixlOiI9PT09PSQifSx7Y046ImhlYWRlciIsYjoiXlxcLVxcLVxcLSIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwqezN9ICIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwrXFwrXFwrIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6IlxcKns1fSIsZToiXFwqezV9JCJ9LHtjTjoiYWRkaXRpb24iLGI6Il5cXCsiLGU6IiQifSx7Y046ImRlbGV0aW9uIixiOiJeXFwtIixlOiIkIn0se2NOOiJjaGFuZ2UiLGI6Il5cXCEiLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PWZ1bmN0aW9uKGEpe3JldHVybntrOntrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5In0sYzpbYS5BU00sYS5RU00sYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLHtiOiIoIithLlJTUisifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsazoicmV0dXJuIHRocm93IGNhc2UiLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlJFR0VYUF9NT0RFLHtiOi88LyxlOi8+Oy8sc0w6InhtbCJ9XSxyOjB9LHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6L3svLGs6ImZ1bmN0aW9uIixjOlt7Y046InRpdGxlIixiOi9bQS1aYS16JF9dWzAtOUEtWmEteiRfXSovfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxjOlthLkNMQ00sYS5DQkxDTE1dLGk6L1siJ1woXS99XSxpOi9cW3wlL31dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMueG1sPWZ1bmN0aW9uKGEpe3ZhciBjPSJbQS1aYS16MC05XFwuXzotXSsiO3ZhciBiPXtlVzp0cnVlLHI6MCxjOlt7Y046ImF0dHJpYnV0ZSIsYjpjLHI6MH0se2I6Jz0iJyxyQjp0cnVlLGU6JyInLGM6W3tjTjoidmFsdWUiLGI6JyInLGVXOnRydWV9XX0se2I6Ij0nIixyQjp0cnVlLGU6IiciLGM6W3tjTjoidmFsdWUiLGI6IiciLGVXOnRydWV9XX0se2I6Ij0iLGM6W3tjTjoidmFsdWUiLGI6IlteXFxzLz5dKyJ9XX1dfTtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSx7Y046ImRvY3R5cGUiLGI6IjwhRE9DVFlQRSIsZToiPiIscjoxMCxjOlt7YjoiXFxbIixlOiJcXF0ifV19LHtjTjoiY29tbWVudCIsYjoiPCEtLSIsZToiLS0+IixyOjEwfSx7Y046ImNkYXRhIixiOiI8XFwhXFxbQ0RBVEFcXFsiLGU6IlxcXVxcXT4iLHI6MTB9LHtjTjoidGFnIixiOiI8c3R5bGUoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InN0eWxlIn0sYzpbYl0sc3RhcnRzOntlOiI8L3N0eWxlPiIsckU6dHJ1ZSxzTDoiY3NzIn19LHtjTjoidGFnIixiOiI8c2NyaXB0KD89XFxzfD58JCkiLGU6Ij4iLGs6e3RpdGxlOiJzY3JpcHQifSxjOltiXSxzdGFydHM6e2U6IjxcL3NjcmlwdD4iLHJFOnRydWUsc0w6ImphdmFzY3JpcHQifX0se2I6IjwlIixlOiIlPiIsc0w6InZic2NyaXB0In0se2NOOiJ0YWciLGI6IjwvPyIsZToiLz8+IixyOjAsYzpbe2NOOiJ0aXRsZSIsYjoiW14gLz48XSsifSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFya2Rvd249ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiaGVhZGVyIixiOiJeI3sxLDN9IixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il4uKz9cXG5bPS1dezIsfSQifSx7YjoiPCIsZToiPiIsc0w6InhtbCIscjowfSx7Y046ImJ1bGxldCIsYjoiXihbKistXXwoXFxkK1xcLikpXFxzKyJ9LHtjTjoic3Ryb25nIixiOiJbKl9dezJ9Lis/WypfXXsyfSJ9LHtjTjoiZW1waGFzaXMiLGI6IlxcKi4rP1xcKiJ9LHtjTjoiZW1waGFzaXMiLGI6Il8uKz9fIixyOjB9LHtjTjoiYmxvY2txdW90ZSIsYjoiXj5cXHMrIixlOiIkIn0se2NOOiJjb2RlIixiOiJgLis/YCJ9LHtjTjoiY29kZSIsYjoiXiAgICAiLGU6IiQiLHI6MH0se2NOOiJob3Jpem9udGFsX3J1bGUiLGI6Il4tezMsfSIsZToiJCJ9LHtiOiJcXFsuKz9cXF1cXCguKz9cXCkiLHJCOnRydWUsYzpbe2NOOiJsaW5rX2xhYmVsIixiOiJcXFsuK1xcXSJ9LHtjTjoibGlua191cmwiLGI6IlxcKCIsZToiXFwpIixlQjp0cnVlLGVFOnRydWV9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3NzPWZ1bmN0aW9uKGEpe3ZhciBiPSJbYS16QS1aLV1bYS16QS1aMC05Xy1dKiI7dmFyIGM9e2NOOiJmdW5jdGlvbiIsYjpiKyJcXCgiLGU6IlxcKSIsYzpbInNlbGYiLGEuTk0sYS5BU00sYS5RU01dfTtyZXR1cm57Y0k6dHJ1ZSxpOiJbPS98J10iLGM6W2EuQ0JMQ0xNLHtjTjoiaWQiLGI6IlxcI1tBLVphLXowLTlfLV0rIn0se2NOOiJjbGFzcyIsYjoiXFwuW0EtWmEtejAtOV8tXSsiLHI6MH0se2NOOiJhdHRyX3NlbGVjdG9yIixiOiJcXFsiLGU6IlxcXSIsaToiJCJ9LHtjTjoicHNldWRvIixiOiI6KDopP1thLXpBLVowLTlcXF9cXC1cXCtcXChcXClcXFwiXFwnXSsifSx7Y046ImF0X3J1bGUiLGI6IkAoZm9udC1mYWNlfHBhZ2UpIixsOiJbYS16LV0rIixrOiJmb250LWZhY2UgcGFnZSJ9LHtjTjoiYXRfcnVsZSIsYjoiQCIsZToiW3s7XSIsYzpbe2NOOiJrZXl3b3JkIixiOi9cUysvfSx7YjovXHMvLGVXOnRydWUsZUU6dHJ1ZSxyOjAsYzpbYyxhLkFTTSxhLlFTTSxhLk5NXX1dfSx7Y046InRhZyIsYjpiLHI6MH0se2NOOiJydWxlcyIsYjoieyIsZToifSIsaToiW15cXHNdIixyOjAsYzpbYS5DQkxDTE0se2NOOiJydWxlIixiOiJbXlxcc10iLHJCOnRydWUsZToiOyIsZVc6dHJ1ZSxjOlt7Y046ImF0dHJpYnV0ZSIsYjoiW0EtWlxcX1xcLlxcLV0rIixlOiI6IixlRTp0cnVlLGk6IlteXFxzXSIsc3RhcnRzOntjTjoidmFsdWUiLGVXOnRydWUsZUU6dHJ1ZSxjOltjLGEuTk0sYS5RU00sYS5BU00sYS5DQkxDTE0se2NOOiJoZXhjb2xvciIsYjoiI1swLTlBLUZhLWZdKyJ9LHtjTjoiaW1wb3J0YW50IixiOiIhaW1wb3J0YW50In1dfX1dfV19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmh0dHA9ZnVuY3Rpb24oYSl7cmV0dXJue2k6IlxcUyIsYzpbe2NOOiJzdGF0dXMiLGI6Il5IVFRQL1swLTlcXC5dKyIsZToiJCIsYzpbe2NOOiJudW1iZXIiLGI6IlxcYlxcZHszfVxcYiJ9XX0se2NOOiJyZXF1ZXN0IixiOiJeW0EtWl0rICguKj8pIEhUVFAvWzAtOVxcLl0rJCIsckI6dHJ1ZSxlOiIkIixjOlt7Y046InN0cmluZyIsYjoiICIsZToiICIsZUI6dHJ1ZSxlRTp0cnVlfV19LHtjTjoiYXR0cmlidXRlIixiOiJeXFx3IixlOiI6ICIsZUU6dHJ1ZSxpOiJcXG58XFxzfD0iLHN0YXJ0czp7Y046InN0cmluZyIsZToiJCJ9fSx7YjoiXFxuXFxuIixzdGFydHM6e3NMOiIiLGVXOnRydWV9fV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhPWZ1bmN0aW9uKGEpe3JldHVybntrOiJmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0IGZvciB0cnVlIHdoaWxlIGxvbmcgdGhyb3cgc3RyaWN0ZnAgZmluYWxseSBwcm90ZWN0ZWQgaW1wb3J0IG5hdGl2ZSBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgYnJlYWsgdHJhbnNpZW50IG5ldyBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyIsYzpbe2NOOiJqYXZhZG9jIixiOiIvXFwqXFwqIixlOiJcXCovIixjOlt7Y046ImphdmFkb2N0YWciLGI6IihefFxccylAW0EtWmEtel0rIn1dLHI6MTB9LGEuQ0xDTSxhLkNCTENMTSxhLkFTTSxhLlFTTSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyBpbnRlcmZhY2UiLGVFOnRydWUsaToiOiIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMgaW1wbGVtZW50cyIscjoxMH0se2NOOiJ0aXRsZSIsYjphLlVJUn1dfSxhLkNOTSx7Y046ImFubm90YXRpb24iLGI6IkBbQS1aYS16XSsifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5waHA9ZnVuY3Rpb24oYSl7dmFyIGU9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkK1thLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSoifTt2YXIgYj1bYS5pbmhlcml0KGEuQVNNLHtpOm51bGx9KSxhLmluaGVyaXQoYS5RU00se2k6bnVsbH0pLHtjTjoic3RyaW5nIixiOidiIicsZTonIicsYzpbYS5CRV19LHtjTjoic3RyaW5nIixiOiJiJyIsZToiJyIsYzpbYS5CRV19XTt2YXIgYz1bYS5CTk0sYS5DTk1dO3ZhciBkPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3JldHVybntjSTp0cnVlLGw6YS5VSVIsazoiYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciB3aGlsZSBpc3NldCBwdWJsaWMgcHJvdGVjdGVkIGV4aXQgZm9yZWFjaCB0aHJvdyBlbHNlaWYgaW5jbHVkZSBfX0ZJTEVfXyBlbXB0eSByZXF1aXJlX29uY2UgZG8geG9yIHJldHVybiBpbXBsZW1lbnRzIHBhcmVudCBjbG9uZSB1c2UgX19DTEFTU19fIF9fTElORV9fIGVsc2UgYnJlYWsgcHJpbnQgZXZhbCBuZXcgY2F0Y2ggX19NRVRIT0RfXyBjYXNlIGV4Y2VwdGlvbiBkZWZhdWx0IGRpZSByZXF1aXJlIF9fRlVOQ1RJT05fXyBlbmRkZWNsYXJlIGZpbmFsIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSBlbmRmb3IgZW5kaWYgZGVjbGFyZSB1bnNldCB0cnVlIGZhbHNlIG5hbWVzcGFjZSB0cmFpdCBnb3RvIGluc3RhbmNlb2YgaW5zdGVhZG9mIF9fRElSX18gX19OQU1FU1BBQ0VfXyB5aWVsZCBmaW5hbGx5IixjOlthLkNMQ00sYS5IQ00se2NOOiJjb21tZW50IixiOiIvXFwqIixlOiJcXCovIixjOlt7Y046InBocGRvYyIsYjoiXFxzQFtBLVphLXpdKyJ9XX0se2NOOiJjb21tZW50IixiOiJfX2hhbHRfY29tcGlsZXIuKz87IixlVzp0cnVlLGs6Il9faGFsdF9jb21waWxlciIsbDphLlVJUn0se2NOOiJzdHJpbmciLGI6Ijw8PFsnXCJdP1xcdytbJ1wiXT8kIixlOiJeXFx3KzsiLGM6W2EuQkVdfSx7Y046InByZXByb2Nlc3NvciIsYjoiPFxcP3BocCIscjoxMH0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IlxcPz4ifSxlLHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6InsiLGs6ImZ1bmN0aW9uIixpOiJcXCR8XFxbfCUiLGM6W2Qse2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic2VsZiIsZSxhLkNCTENMTV0uY29uY2F0KGIpLmNvbmNhdChjKX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyIsaToiWzpcXChcXCRdIixjOlt7YldLOnRydWUsZVc6dHJ1ZSxrOiJleHRlbmRzIixjOltkXX0sZF19LHtiOiI9PiJ9XS5jb25jYXQoYikuY29uY2F0KGMpfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucHl0aG9uPWZ1bmN0aW9uKGEpe3ZhciBmPXtjTjoicHJvbXB0IixiOi9eKD4+PnxcLlwuXC4pIC99O3ZhciBjPVt7Y046InN0cmluZyIsYjovKHV8Yik/cj8nJycvLGU6LycnJy8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fGIpP3I/IiIiLyxlOi8iIiIvLGM6W2ZdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKScvLGU6LycvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKSIvLGU6LyIvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8oYnxiciknLyxlOi8nLyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6LyhifGJyKSIvLGU6LyIvLGM6W2EuQkVdfV0uY29uY2F0KFthLkFTTSxhLlFTTV0pO3ZhciBlPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3ZhciBkPXtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6WyJzZWxmIixhLkNOTSxmXS5jb25jYXQoYyl9O3ZhciBiPXtiV0s6dHJ1ZSxlOi86LyxpOi9bJHs9O1xuXS8sYzpbZSxkXSxyOjEwfTtyZXR1cm57azp7a2V5d29yZDoiYW5kIGVsaWYgaXMgZ2xvYmFsIGFzIGluIGlmIGZyb20gcmFpc2UgZm9yIGV4Y2VwdCBmaW5hbGx5IHByaW50IGltcG9ydCBwYXNzIHJldHVybiBleGVjIGVsc2UgYnJlYWsgbm90IHdpdGggY2xhc3MgYXNzZXJ0IHlpZWxkIHRyeSB3aGlsZSBjb250aW51ZSBkZWwgb3IgZGVmIGxhbWJkYSBub25sb2NhbHwxMCBOb25lIFRydWUgRmFsc2UiLGJ1aWx0X2luOiJFbGxpcHNpcyBOb3RJbXBsZW1lbnRlZCJ9LGk6Lyg8XC98LT58XD8pLyxjOmMuY29uY2F0KFtmLGEuSENNLGEuaW5oZXJpdChiLHtjTjoiZnVuY3Rpb24iLGs6ImRlZiJ9KSxhLmluaGVyaXQoYix7Y046ImNsYXNzIixrOiJjbGFzcyJ9KSxhLkNOTSx7Y046ImRlY29yYXRvciIsYjovQC8sZTovJC99LHtiOi9cYihwcmludHxleGVjKVwoL31dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnNxbD1mdW5jdGlvbihhKXtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046Im9wZXJhdG9yIixiOiIoYmVnaW58ZW5kfHN0YXJ0fGNvbW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxyZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNlfHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hfGdyYW50KVxcYig/ITopIixlOiI7IixlVzp0cnVlLGs6e2tleXdvcmQ6ImFsbCBwYXJ0aWFsIGdsb2JhbCBtb250aCBjdXJyZW50X3RpbWVzdGFtcCB1c2luZyBnbyByZXZva2Ugc21hbGxpbnQgaW5kaWNhdG9yIGVuZC1leGVjIGRpc2Nvbm5lY3Qgem9uZSB3aXRoIGNoYXJhY3RlciBhc3NlcnRpb24gdG8gYWRkIGN1cnJlbnRfdXNlciB1c2FnZSBpbnB1dCBsb2NhbCBhbHRlciBtYXRjaCBjb2xsYXRlIHJlYWwgdGhlbiByb2xsYmFjayBnZXQgcmVhZCB0aW1lc3RhbXAgc2Vzc2lvbl91c2VyIG5vdCBpbnRlZ2VyIGJpdCB1bmlxdWUgZGF5IG1pbnV0ZSBkZXNjIGluc2VydCBleGVjdXRlIGxpa2UgaWxpa2V8MiBsZXZlbCBkZWNpbWFsIGRyb3AgY29udGludWUgaXNvbGF0aW9uIGZvdW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvbWFpbiByaWdodCBuYXRpb25hbCBzb21lIG1vZHVsZSB0cmFuc2FjdGlvbiByZWxhdGl2ZSBzZWNvbmQgY29ubmVjdCBlc2NhcGUgY2xvc2Ugc3lzdGVtX3VzZXIgZm9yIGRlZmVycmVkIHNlY3Rpb24gY2FzdCBjdXJyZW50IHNxbHN0YXRlIGFsbG9jYXRlIGludGVyc2VjdCBkZWFsbG9jYXRlIG51bWVyaWMgcHVibGljIHByZXNlcnZlIGZ1bGwgZ290byBpbml0aWFsbHkgYXNjIG5vIGtleSBvdXRwdXQgY29sbGF0aW9uIGdyb3VwIGJ5IHVuaW9uIHNlc3Npb24gYm90aCBsYXN0IGxhbmd1YWdlIGNvbnN0cmFpbnQgY29sdW1uIG9mIHNwYWNlIGZvcmVpZ24gZGVmZXJyYWJsZSBwcmlvciBjb25uZWN0aW9uIHVua25vd24gYWN0aW9uIGNvbW1pdCB2aWV3IG9yIGZpcnN0IGludG8gZmxvYXQgeWVhciBwcmltYXJ5IGNhc2NhZGVkIGV4Y2VwdCByZXN0cmljdCBzZXQgcmVmZXJlbmNlcyBuYW1lcyB0YWJsZSBvdXRlciBvcGVuIHNlbGVjdCBzaXplIGFyZSByb3dzIGZyb20gcHJlcGFyZSBkaXN0aW5jdCBsZWFkaW5nIGNyZWF0ZSBvbmx5IG5leHQgaW5uZXIgYXV0aG9yaXphdGlvbiBzY2hlbWEgY29ycmVzcG9uZGluZyBvcHRpb24gZGVjbGFyZSBwcmVjaXNpb24gaW1tZWRpYXRlIGVsc2UgdGltZXpvbmVfbWludXRlIGV4dGVybmFsIHZhcnlpbmcgdHJhbnNsYXRpb24gdHJ1ZSBjYXNlIGV4Y2VwdGlvbiBqb2luIGhvdXIgZGVmYXVsdCBkb3VibGUgc2Nyb2xsIHZhbHVlIGN1cnNvciBkZXNjcmlwdG9yIHZhbHVlcyBkZWMgZmV0Y2ggcHJvY2VkdXJlIGRlbGV0ZSBhbmQgZmFsc2UgaW50IGlzIGRlc2NyaWJlIGNoYXIgYXMgYXQgaW4gdmFyY2hhciBudWxsIHRyYWlsaW5nIGFueSBhYnNvbHV0ZSBjdXJyZW50X3RpbWUgZW5kIGdyYW50IHByaXZpbGVnZXMgd2hlbiBjcm9zcyBjaGVjayB3cml0ZSBjdXJyZW50X2RhdGUgcGFkIGJlZ2luIHRlbXBvcmFyeSBleGVjIHRpbWUgdXBkYXRlIGNhdGFsb2cgdXNlciBzcWwgZGF0ZSBvbiBpZGVudGl0eSB0aW1lem9uZV9ob3VyIG5hdHVyYWwgd2hlbmV2ZXIgaW50ZXJ2YWwgd29yayBvcmRlciBjYXNjYWRlIGRpYWdub3N0aWNzIG5jaGFyIGhhdmluZyBsZWZ0IGNhbGwgZG8gaGFuZGxlciBsb2FkIHJlcGxhY2UgdHJ1bmNhdGUgc3RhcnQgbG9jayBzaG93IHByYWdtYSBleGlzdHMgbnVtYmVyIHRyaWdnZXIgaWYgYmVmb3JlIGFmdGVyIGVhY2ggcm93IixhZ2dyZWdhdGU6ImNvdW50IHN1bSBtaW4gbWF4IGF2ZyJ9LGM6W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOlthLkJFLHtiOiInJyJ9XSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlthLkJFLHtiOiciIid9XSxyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlthLkJFXX0sYS5DTk1dfSxhLkNCTENMTSx7Y046ImNvbW1lbnQiLGI6Ii0tIixlOiIkIn1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaW5pPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGk6IlteXFxzXSIsYzpbe2NOOiJjb21tZW50IixiOiI7IixlOiIkIn0se2NOOiJ0aXRsZSIsYjoiXlxcWyIsZToiXFxdIn0se2NOOiJzZXR0aW5nIixiOiJeW2EtejAtOVxcW1xcXV8tXStbIFxcdF0qPVsgXFx0XSoiLGU6IiQiLGM6W3tjTjoidmFsdWUiLGVXOnRydWUsazoib24gb2ZmIHRydWUgZmFsc2UgeWVzIG5vIixjOlthLlFTTSxhLk5NXSxyOjB9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucGVybD1mdW5jdGlvbihlKXt2YXIgYT0iZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjIG1hIHN5c3dyaXRlIHRyIHNlbmQgdW1hc2sgc3lzb3BlbiBzaG13cml0ZSB2ZWMgcXggdXRpbWUgbG9jYWwgb2N0IHNlbWN0bCBsb2NhbHRpbWUgcmVhZHBpcGUgZG8gcmV0dXJuIGZvcm1hdCByZWFkIHNwcmludGYgZGJtb3BlbiBwb3AgZ2V0cGdycCBub3QgZ2V0cHduYW0gcmV3aW5kZGlyIHFxZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50IHNodXRkb3duIGR1bXAgY2hvbXAgY29ubmVjdCBnZXRzb2NrbmFtZSBkaWUgc29ja2V0cGFpciBjbG9zZSBmbG9jayBleGlzdHMgaW5kZXggc2htZ2V0c3ViIGZvciBlbmRwd2VudCByZWRvIGxzdGF0IG1zZ2N0bCBzZXRwZ3JwIGFicyBleGl0IHNlbGVjdCBwcmludCByZWYgZ2V0aG9zdGJ5YWRkciB1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCBnZXRwZWVybmFtZSByZWN2IGxvZyBzZXRzb2Nrb3B0IGNvcyBsYXN0IHJldmVyc2UgZ2V0aG9zdGJ5bmFtZSBnZXRncm5hbSBzdHVkeSBmb3JtbGluZSBlbmRob3N0ZW50IHRpbWVzIGNob3AgbGVuZ3RoIGdldGhvc3RlbnQgZ2V0bmV0ZW50IHBhY2sgZ2V0cHJvdG9lbnQgZ2V0c2VydmJ5bmFtZSByYW5kIG1rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgZ2V0c29ja29wdCBnZXRwcmlvcml0eSByaW5kZXggd2FudGFycmF5IGhleCBzeXN0ZW0gZ2V0c2VydmJ5cG9ydCBlbmRzZXJ2ZW50IGludCBjaHIgdW50aWUgcm1kaXIgcHJvdG90eXBlIHRlbGwgbGlzdGVuIGZvcmsgc2htcmVhZCB1Y2ZpcnN0IHNldHByb3RvZW50IGVsc2Ugc3lzc2VlayBsaW5rIGdldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciBsY2ZpcnN0IHVudGlsIHdhcm4gd2hpbGUgdmFsdWVzIHNoaWZ0IHRlbGxkaXIgZ2V0cHd1aWQgbXkgZ2V0cHJvdG9ieW51bWJlciBkZWxldGUgYW5kIHNvcnQgdWMgZGVmaW5lZCBzcmFuZCBhY2NlcHQgcGFja2FnZSBzZWVrZGlyIGdldHByb3RvYnluYW1lIHNlbW9wIG91ciByZW5hbWUgc2VlayBpZiBxfDAgY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoIHRpZSBzaW4gbXNnZ2V0IG1hcCBzdGF0IGdldGxvZ2luIHVubGVzcyBlbHNpZiB0cnVuY2F0ZSBleGVjIGtleXMgZ2xvYiB0aWVkIGNsb3NlZGlyaW9jdGwgc29ja2V0IHJlYWRsaW5rIGV2YWwgeG9yIHJlYWRsaW5lIGJpbm1vZGUgc2V0c2VydmVudCBlb2Ygb3JkIGJpbmQgYWxhcm0gcGlwZSBhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbiI7dmFyIGQ9e2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToiXFx9IixrOmEscjoxMH07dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkIn07dmFyIGk9e2NOOiJ2YXJpYWJsZSIsYjoiW1xcJFxcJVxcQFxcKl0oXFxeXFx3XFxifCNcXHcrKFxcOlxcOlxcdyspKnxbXlxcc1xcd3tdfHtcXHcrfXxcXHcrKFxcOlxcOlxcdyopKikifTt2YXIgZj1bZS5CRSxkLGIsaV07dmFyIGg9e2I6Ii0+IixjOlt7YjplLklSfSx7YjoieyIsZToifSJ9XX07dmFyIGc9e2NOOiJjb21tZW50IixiOiJeKF9fRU5EX198X19EQVRBX18pIixlOiJcXG4kIixyOjV9O3ZhciBjPVtiLGksZS5IQ00sZyx7Y046ImNvbW1lbnQiLGI6Il5cXD1cXHciLGU6IlxcPWN1dCIsZVc6dHJ1ZX0saCx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFwoIixlOiJcXCkiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxceyIsZToiXFx9IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx8IixlOiJcXHwiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InF3XFxzK3EiLGU6InEiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltlLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOmYscjowfSx7Y046InN0cmluZyIsYjoiYCIsZToiYCIsYzpbZS5CRV19LHtjTjoic3RyaW5nIixiOiJ7XFx3K30iLHI6MH0se2NOOiJzdHJpbmciLGI6Ii0/XFx3K1xccypcXD1cXD4iLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2I6IigiK2UuUlNSKyJ8XFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxiKVxccyoiLGs6InNwbGl0IHJldHVybiBwcmludCByZXZlcnNlIGdyZXAiLHI6MCxjOltlLkhDTSxnLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2UuQkVdLHI6MH1dfSx7Y046InN1YiIsYldLOnRydWUsZToiKFxccypcXCguKj9cXCkpP1s7e10iLGs6InN1YiIscjo1fSx7Y046Im9wZXJhdG9yIixiOiItXFx3XFxiIixyOjB9XTtkLmM9YztoLmNbMV0uYz1jO3JldHVybntrOmEsYzpjfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMub2JqZWN0aXZlYz1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgc2l6ZW9mIHR5cGVkZWYgY29uc3Qgc3RydWN0IGZvciB1bmlvbiB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCBtdXRhYmxlIGlmIHB1YmxpYyBkbyByZXR1cm4gZ290byB2b2lkIGVudW0gZWxzZSBicmVhayBleHRlcm4gYXNtIGNhc2Ugc2hvcnQgZGVmYXVsdCBkb3VibGUgdGhyb3cgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSByZWFkb25seSBhc3NpZ24gcHJvcGVydHkgc2VsZiBzeW5jaHJvbml6ZWQgZW5kIHN5bnRoZXNpemUgaWQgb3B0aW9uYWwgcmVxdWlyZWQgbm9uYXRvbWljIHN1cGVyIHVuaWNoYXIgZmluYWxseSBkeW5hbWljIElCT3V0bGV0IElCQWN0aW9uIHNlbGVjdG9yIHN0cm9uZyB3ZWFrIHJlYWRvbmx5IixsaXRlcmFsOiJmYWxzZSB0cnVlIEZBTFNFIFRSVUUgbmlsIFlFUyBOTyBOVUxMIixidWlsdF9pbjoiTlNTdHJpbmcgTlNEaWN0aW9uYXJ5IENHUmVjdCBDR1BvaW50IFVJQnV0dG9uIFVJTGFiZWwgVUlUZXh0VmlldyBVSVdlYlZpZXcgTUtNYXBWaWV3IFVJU2VnbWVudGVkQ29udHJvbCBOU09iamVjdCBVSVRhYmxlVmlld0RlbGVnYXRlIFVJVGFibGVWaWV3RGF0YVNvdXJjZSBOU1RocmVhZCBVSUFjdGl2aXR5SW5kaWNhdG9yIFVJVGFiYmFyIFVJVG9vbEJhciBVSUJhckJ1dHRvbkl0ZW0gVUlJbWFnZVZpZXcgTlNBdXRvcmVsZWFzZVBvb2wgVUlUYWJsZVZpZXcgQk9PTCBOU0ludGVnZXIgQ0dGbG9hdCBOU0V4Y2VwdGlvbiBOU0xvZyBOU011dGFibGVTdHJpbmcgTlNNdXRhYmxlQXJyYXkgTlNNdXRhYmxlRGljdGlvbmFyeSBOU1VSTCBOU0luZGV4UGF0aCBDR1NpemUgVUlUYWJsZVZpZXdDZWxsIFVJVmlldyBVSVZpZXdDb250cm9sbGVyIFVJTmF2aWdhdGlvbkJhciBVSU5hdmlnYXRpb25Db250cm9sbGVyIFVJVGFiQmFyQ29udHJvbGxlciBVSVBvcG92ZXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXJEZWxlZ2F0ZSBVSUltYWdlIE5TTnVtYmVyIFVJU2VhcmNoQmFyIE5TRmV0Y2hlZFJlc3VsdHNDb250cm9sbGVyIE5TRmV0Y2hlZFJlc3VsdHNDaGFuZ2VUeXBlIFVJU2Nyb2xsVmlldyBVSVNjcm9sbFZpZXdEZWxlZ2F0ZSBVSUVkZ2VJbnNldHMgVUlDb2xvciBVSUZvbnQgVUlBcHBsaWNhdGlvbiBOU05vdEZvdW5kIE5TTm90aWZpY2F0aW9uQ2VudGVyIE5TTm90aWZpY2F0aW9uIFVJTG9jYWxOb3RpZmljYXRpb24gTlNCdW5kbGUgTlNGaWxlTWFuYWdlciBOU1RpbWVJbnRlcnZhbCBOU0RhdGUgTlNDYWxlbmRhciBOU1VzZXJEZWZhdWx0cyBVSVdpbmRvdyBOU1JhbmdlIE5TQXJyYXkgTlNFcnJvciBOU1VSTFJlcXVlc3QgTlNVUkxDb25uZWN0aW9uIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gTVBNb3ZpZVBsYXllckNvbnRyb2xsZXIgZGlzcGF0Y2hfb25jZV90IGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hfc3luYyBkaXNwYXRjaF9hc3luYyBkaXNwYXRjaF9vbmNlIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLGEuUVNNLHtjTjoic3RyaW5nIixiOiInIixlOiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIsYjoiI2ltcG9ydCIsZToiJCIsYzpbe2NOOiJ0aXRsZSIsYjonIicsZTonIid9LHtjTjoidGl0bGUiLGI6IjwiLGU6Ij4ifV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIn0se2NOOiJjbGFzcyIsYldLOnRydWUsZToiKHt8JCkiLGs6ImludGVyZmFjZSBjbGFzcyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiIsYzpbe2NOOiJpZCIsYjphLlVJUn1dfSx7Y046InZhcmlhYmxlIixiOiJcXC4iK2EuVUlSLHI6MH1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY29mZmVlc2NyaXB0PWZ1bmN0aW9uKGMpe3ZhciBiPXtrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSBuZXcgZG8gcmV0dXJuIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB0aHJvdyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBkZWJ1Z2dlciBzdXBlciB0aGVuIHVubGVzcyB1bnRpbCBsb29wIG9mIGJ5IHdoZW4gYW5kIG9yIGlzIGlzbnQgbm90IixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIHllcyBubyBvbiBvZmYiLHJlc2VydmVkOiJjYXNlIGRlZmF1bHQgZnVuY3Rpb24gdmFyIHZvaWQgd2l0aCBjb25zdCBsZXQgZW51bSBleHBvcnQgaW1wb3J0IG5hdGl2ZSBfX2hhc1Byb3AgX19leHRlbmRzIF9fc2xpY2UgX19iaW5kIF9faW5kZXhPZiIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGV4cG9ydHMgZ2xvYmFsIHdpbmRvdyBkb2N1bWVudCJ9O3ZhciBhPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiO3ZhciBmPXtjTjoidGl0bGUiLGI6YX07dmFyIGU9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsazpiLH07dmFyIGQ9W2MuQk5NLGMuaW5oZXJpdChjLkNOTSx7c3RhcnRzOntlOiIoXFxzKi8pPyIscjowfX0pLHtjTjoic3RyaW5nIixiOiInJyciLGU6IicnJyIsYzpbYy5CRV19LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltjLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciIiInLGU6JyIiIicsYzpbYy5CRSxlXX0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2MuQkUsZV0scjowfSx7Y046InJlZ2V4cCIsYjoiLy8vIixlOiIvLy8iLGM6W2MuSENNXX0se2NOOiJyZWdleHAiLGI6Ii8vW2dpbV0qIixyOjB9LHtjTjoicmVnZXhwIixiOiIvXFxTKFxcXFwufFteXFxuXSkqPy9bZ2ltXSooPz1cXHN8XFxXfCQpIn0se2NOOiJwcm9wZXJ0eSIsYjoiQCIrYX0se2I6ImAiLGU6ImAiLGVCOnRydWUsZUU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9XTtlLmM9ZDtyZXR1cm57azpiLGM6ZC5jb25jYXQoW3tjTjoiY29tbWVudCIsYjoiIyMjIixlOiIjIyMifSxjLkhDTSx7Y046ImZ1bmN0aW9uIixiOiIoIithKyJcXHMqPVxccyopPyhcXCguKlxcKSk/XFxzKlstPV0+IixlOiJbLT1dPiIsckI6dHJ1ZSxjOltmLHtjTjoicGFyYW1zIixiOiJcXCgiLHJCOnRydWUsYzpbe2I6L1woLyxlOi9cKS8sazpiLGM6WyJzZWxmIl0uY29uY2F0KGQpfV19XX0se2NOOiJjbGFzcyIsYldLOnRydWUsazoiY2xhc3MiLGU6IiQiLGk6Ils6XFxbXFxdXSIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMiLGVXOnRydWUsaToiOiIsYzpbZl19LGZdfSx7Y046ImF0dHJpYnV0ZSIsYjphKyI6IixlOiI6IixyQjp0cnVlLGVFOnRydWV9XSl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5uZ2lueD1mdW5jdGlvbihiKXt2YXIgYz1be2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkKyJ9LHtjTjoidmFyaWFibGUiLGI6IlxcJHsiLGU6In0ifSx7Y046InZhcmlhYmxlIixiOiJbXFwkXFxAXSIrYi5VSVJ9XTt2YXIgYT17ZVc6dHJ1ZSxsOiJbYS16L19dKyIsazp7YnVpbHRfaW46Im9uIG9mZiB5ZXMgbm8gdHJ1ZSBmYWxzZSBub25lIGJsb2NrZWQgZGVidWcgaW5mbyBub3RpY2Ugd2FybiBlcnJvciBjcml0IHNlbGVjdCBicmVhayBsYXN0IHBlcm1hbmVudCByZWRpcmVjdCBrcXVldWUgcnRzaWcgZXBvbGwgcG9sbCAvZGV2L3BvbGwifSxyOjAsaToiPT4iLGM6W2IuSENNLHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbYi5CRV0uY29uY2F0KGMpLHI6MH0se2NOOiJ1cmwiLGI6IihbYS16XSspOi8iLGU6IlxccyIsZVc6dHJ1ZSxlRTp0cnVlfSx7Y046InJlZ2V4cCIsYjoiXFxzXFxeIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6In5cXCo/XFxzKyIsZToiXFxzfHt8OyIsckU6dHJ1ZSxjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoicmVnZXhwIixiOiJcXCooXFwuW2EtelxcLV0rKSsiLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IihbYS16XFwtXStcXC4pK1xcKiIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046Im51bWJlciIsYjoiXFxiXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30oOlxcZHsxLDV9KT9cXGIifSx7Y046Im51bWJlciIsYjoiXFxiXFxkK1trS21NZ0dkc2hkd3ldKlxcYiIscjowfV0uY29uY2F0KGMpfTtyZXR1cm57YzpbYi5IQ00se2I6Yi5VSVIrIlxccyIsZToiO3x7IixyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6Yi5VSVIsc3RhcnRzOmF9XSxyOjB9XSxpOiJbXlxcc1xcfV0ifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuanNvbj1mdW5jdGlvbihhKXt2YXIgZT17bGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIn07dmFyIGQ9W2EuUVNNLGEuQ05NXTt2YXIgYz17Y046InZhbHVlIixlOiIsIixlVzp0cnVlLGVFOnRydWUsYzpkLGs6ZX07dmFyIGI9e2I6InsiLGU6In0iLGM6W3tjTjoiYXR0cmlidXRlIixiOidcXHMqIicsZTonIlxccyo6XFxzKicsZUI6dHJ1ZSxlRTp0cnVlLGM6W2EuQkVdLGk6IlxcbiIsc3RhcnRzOmN9XSxpOiJcXFMifTt2YXIgZj17YjoiXFxbIixlOiJcXF0iLGM6W2EuaW5oZXJpdChjLHtjTjpudWxsfSldLGk6IlxcUyJ9O2Quc3BsaWNlKGQubGVuZ3RoLDAsYixmKTtyZXR1cm57YzpkLGs6ZSxpOiJcXFMifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuYXBhY2hlPWZ1bmN0aW9uKGEpe3ZhciBiPXtjTjoibnVtYmVyIixiOiJbXFwkJV1cXGQrIn07cmV0dXJue2NJOnRydWUsYzpbYS5IQ00se2NOOiJ0YWciLGI6IjwvPyIsZToiPiJ9LHtjTjoia2V5d29yZCIsYjovXHcrLyxyOjAsazp7Y29tbW9uOiJvcmRlciBkZW55IGFsbG93IHNldGVudiByZXdyaXRlcnVsZSByZXdyaXRlZW5naW5lIHJld3JpdGVjb25kIGRvY3VtZW50cm9vdCBzZXRoYW5kbGVyIGVycm9yZG9jdW1lbnQgbG9hZG1vZHVsZSBvcHRpb25zIGhlYWRlciBsaXN0ZW4gc2VydmVycm9vdCBzZXJ2ZXJuYW1lIn0sc3RhcnRzOntlOi8kLyxyOjAsazp7bGl0ZXJhbDoib24gb2ZmIGFsbCJ9LGM6W3tjTjoic3FicmFja2V0IixiOiJcXHNcXFsiLGU6IlxcXSQifSx7Y046ImNicmFja2V0IixiOiJbXFwkJV1cXHsiLGU6IlxcfSIsYzpbInNlbGYiLGJdfSxiLGEuUVNNXX19XSxpOi9cUy99fShobGpzKTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImZhbHNlIGludCBmbG9hdCB3aGlsZSBwcml2YXRlIGNoYXIgY2F0Y2ggZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mIGR5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3Qgc3RydWN0IGZvciBzdGF0aWNfY2FzdHwxMCB1bmlvbiBuYW1lc3BhY2UgdW5zaWduZWQgbG9uZyB0aHJvdyB2b2xhdGlsZSBzdGF0aWMgcHJvdGVjdGVkIGJvb2wgdGVtcGxhdGUgbXV0YWJsZSBpZiBwdWJsaWMgZnJpZW5kIGRvIHJldHVybiBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgbmV3IGV4dGVybiB1c2luZyB0cnVlIGNsYXNzIGFzbSBjYXNlIHR5cGVpZCBzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgZGVsZXRlIGFsaWdub2YgY2hhcjE2X3QgY2hhcjMyX3QgY29uc3RleHByIGRlY2x0eXBlIG5vZXhjZXB0IG51bGxwdHIgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgX0Jvb2wgY29tcGxleCIsYnVpbHRfaW46InN0ZCBzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0cmluZ3N0cmVhbSBpc3RyaW5nc3RyZWFtIG9zdHJpbmdzdHJlYW0gYXV0b19wdHIgZGVxdWUgbGlzdCBxdWV1ZSBzdGFjayB2ZWN0b3IgbWFwIHNldCBiaXRzZXQgbXVsdGlzZXQgbXVsdGltYXAgdW5vcmRlcmVkX3NldCB1bm9yZGVyZWRfbWFwIHVub3JkZXJlZF9tdWx0aXNldCB1bm9yZGVyZWRfbXVsdGltYXAgYXJyYXkgc2hhcmVkX3B0ciJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJ1xcXFw/LiIsZToiJyIsaToiLiJ9LHtjTjoibnVtYmVyIixiOiJcXGIoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykodXxVfGx8THx1bHxVTHxmfEYpIn0sYS5DTk0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGM6W3tiOiI8IixlOiI+IixpOiJcXG4ifSxhLkNMQ01dfSx7Y046InN0bF9jb250YWluZXIiLGI6IlxcYihkZXF1ZXxsaXN0fHF1ZXVlfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsZToiPiIsazpiLHI6MTAsYzpbInNlbGYiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFrZWZpbGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6YS5CRX07cmV0dXJue2M6W2EuSENNLHtiOi9eXHcrXHMqXFcqPS8sckI6dHJ1ZSxyOjAsc3RhcnRzOntjTjoiY29uc3RhbnQiLGU6L1xzKlxXKj0vLGVFOnRydWUsc3RhcnRzOntlOi8kLyxyOjAsYzpbYl0sfX19LHtjTjoidGl0bGUiLGI6L15bXHddKzpccyokL30se2NOOiJwaG9ueSIsYjovXlwuUEhPTlk6LyxlOi8kLyxrOiIuUEhPTlkiLGw6L1tcLlx3XSsvfSx7YjovXlx0Ky8sZTovJC8sYzpbYS5RU00sYl19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmdvPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIiLGNvbnN0YW50OiJ0cnVlIGZhbHNlIGlvdGEgbmlsIix0eXBlbmFtZToiYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUiLGJ1aWx0X2luOiJhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIn0se2NOOiJudW1iZXIiLGI6IlteYS16QS1aXzAtOV0oXFwtfFxcKyk/XFxkKyhcXC5cXGQrfFxcL1xcZCspPygoZHxlfGZ8bHxzKShcXCt8XFwtKT9cXGQrKT8iLHI6MH0sYS5DTk1dfX0oaGxqcyk7UEsHCBVZbU72dQAA9nUAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHN0YXRpY1xsaWJcanF1ZXJ5LmZvcm0ubWluLmpzLyohCiAqIGpRdWVyeSBGb3JtIFBsdWdpbgogKiB2ZXJzaW9uOiAzLjQ2LjAtMjAxMy4xMS4yMQogKiBSZXF1aXJlcyBqUXVlcnkgdjEuNSBvciBsYXRlcgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTS4gQWxzdXAKICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9mb3JtLwogKiBQcm9qZWN0IHJlcG9zaXRvcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxzdXAvZm9ybQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcy4KICogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtI2NvcHlyaWdodC1hbmQtbGljZW5zZQogKi8KKGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoWyJqcXVlcnkiXSxhKX1lbHNle2EoKHR5cGVvZihqUXVlcnkpIT0idW5kZWZpbmVkIik/alF1ZXJ5OndpbmRvdy5aZXB0byl9fShmdW5jdGlvbihmKXt2YXIgYz17fTtjLmZpbGVhcGk9ZigiPGlucHV0IHR5cGU9J2ZpbGUnLz4iKS5nZXQoMCkuZmlsZXMhPT11bmRlZmluZWQ7Yy5mb3JtZGF0YT13aW5kb3cuRm9ybURhdGEhPT11bmRlZmluZWQ7dmFyIGU9ISFmLmZuLnByb3A7Zi5mbi5hdHRyMj1mdW5jdGlvbigpe2lmKCFlKXtyZXR1cm4gdGhpcy5hdHRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZz10aGlzLnByb3AuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKChnJiZnLmpxdWVyeSl8fHR5cGVvZiBnPT09InN0cmluZyIpe3JldHVybiBnfXJldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmLmZuLmFqYXhTdWJtaXQ9ZnVuY3Rpb24oail7aWYoIXRoaXMubGVuZ3RoKXtkKCJhamF4U3VibWl0OiBza2lwcGluZyBzdWJtaXQgcHJvY2VzcyAtIG5vIGVsZW1lbnQgc2VsZWN0ZWQiKTtyZXR1cm4gdGhpc312YXIgaSxDLG0sbz10aGlzO2lmKHR5cGVvZiBqPT0iZnVuY3Rpb24iKXtqPXtzdWNjZXNzOmp9fWVsc2V7aWYoaj09PXVuZGVmaW5lZCl7aj17fX19aT1qLnR5cGV8fHRoaXMuYXR0cjIoIm1ldGhvZCIpO0M9ai51cmx8fHRoaXMuYXR0cjIoImFjdGlvbiIpO209KHR5cGVvZiBDPT09InN0cmluZyIpP2YudHJpbShDKToiIjttPW18fHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIjtpZihtKXttPShtLm1hdGNoKC9eKFteI10rKS8pfHxbXSlbMV19aj1mLmV4dGVuZCh0cnVlLHt1cmw6bSxzdWNjZXNzOmYuYWpheFNldHRpbmdzLnN1Y2Nlc3MsdHlwZTppfHxmLmFqYXhTZXR0aW5ncy50eXBlLGlmcmFtZVNyYzovXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZnx8IiIpPyJqYXZhc2NyaXB0OmZhbHNlIjoiYWJvdXQ6YmxhbmsifSxqKTt2YXIgdT17fTt0aGlzLnRyaWdnZXIoImZvcm0tcHJlLXNlcmlhbGl6ZSIsW3RoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXByZS1zZXJpYWxpemUgdHJpZ2dlciIpO3JldHVybiB0aGlzfWlmKGouYmVmb3JlU2VyaWFsaXplJiZqLmJlZm9yZVNlcmlhbGl6ZSh0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTZXJpYWxpemUgY2FsbGJhY2siKTtyZXR1cm4gdGhpc312YXIgbj1qLnRyYWRpdGlvbmFsO2lmKG49PT11bmRlZmluZWQpe249Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWx9dmFyIHM9W107dmFyIEUsRj10aGlzLmZvcm1Ub0FycmF5KGouc2VtYW50aWMscyk7aWYoai5kYXRhKXtqLmV4dHJhRGF0YT1qLmRhdGE7RT1mLnBhcmFtKGouZGF0YSxuKX1pZihqLmJlZm9yZVN1Ym1pdCYmai5iZWZvcmVTdWJtaXQoRix0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTdWJtaXQgY2FsbGJhY2siKTtyZXR1cm4gdGhpc310aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LXZhbGlkYXRlIixbRix0aGlzLGosdV0pO2lmKHUudmV0byl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IHZldG9lZCB2aWEgZm9ybS1zdWJtaXQtdmFsaWRhdGUgdHJpZ2dlciIpO3JldHVybiB0aGlzfXZhciB5PWYucGFyYW0oRixuKTtpZihFKXt5PSh5Pyh5KyImIitFKTpFKX1pZihqLnR5cGUudG9VcHBlckNhc2UoKT09IkdFVCIpe2oudXJsKz0oai51cmwuaW5kZXhPZigiPyIpPj0wPyImIjoiPyIpK3k7ai5kYXRhPW51bGx9ZWxzZXtqLmRhdGE9eX12YXIgSD1bXTtpZihqLnJlc2V0Rm9ybSl7SC5wdXNoKGZ1bmN0aW9uKCl7by5yZXNldEZvcm0oKX0pfWlmKGouY2xlYXJGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLmNsZWFyRm9ybShqLmluY2x1ZGVIaWRkZW4pfSl9aWYoIWouZGF0YVR5cGUmJmoudGFyZ2V0KXt2YXIgbD1qLnN1Y2Nlc3N8fGZ1bmN0aW9uKCl7fTtILnB1c2goZnVuY3Rpb24ocSl7dmFyIGs9ai5yZXBsYWNlVGFyZ2V0PyJyZXBsYWNlV2l0aCI6Imh0bWwiO2Yoai50YXJnZXQpW2tdKHEpLmVhY2gobCxhcmd1bWVudHMpfSl9ZWxzZXtpZihqLnN1Y2Nlc3Mpe0gucHVzaChqLnN1Y2Nlc3MpfX1qLnN1Y2Nlc3M9ZnVuY3Rpb24oSyxxLEwpe3ZhciBKPWouY29udGV4dHx8dGhpcztmb3IodmFyIEk9MCxrPUgubGVuZ3RoO0k8aztJKyspe0hbSV0uYXBwbHkoSixbSyxxLEx8fG8sb10pfX07aWYoai5lcnJvcil7dmFyIHo9ai5lcnJvcjtqLmVycm9yPWZ1bmN0aW9uKEosayxxKXt2YXIgST1qLmNvbnRleHR8fHRoaXM7ei5hcHBseShJLFtKLGsscSxvXSl9fWlmKGouY29tcGxldGUpe3ZhciBoPWouY29tcGxldGU7ai5jb21wbGV0ZT1mdW5jdGlvbihJLGspe3ZhciBxPWouY29udGV4dHx8dGhpcztoLmFwcGx5KHEsW0ksayxvXSl9fXZhciBEPWYoImlucHV0W3R5cGU9ZmlsZV06ZW5hYmxlZCIsdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcykudmFsKCkhPT0iIn0pO3ZhciBwPUQubGVuZ3RoPjA7dmFyIEI9Im11bHRpcGFydC9mb3JtLWRhdGEiO3ZhciB4PShvLmF0dHIoImVuY3R5cGUiKT09Qnx8by5hdHRyKCJlbmNvZGluZyIpPT1CKTt2YXIgdz1jLmZpbGVhcGkmJmMuZm9ybWRhdGE7ZCgiZmlsZUFQSSA6Iit3KTt2YXIgcj0ocHx8eCkmJiF3O3ZhciB2O2lmKGouaWZyYW1lIT09ZmFsc2UmJihqLmlmcmFtZXx8cikpe2lmKGouY2xvc2VLZWVwQWxpdmUpe2YuZ2V0KGouY2xvc2VLZWVwQWxpdmUsZnVuY3Rpb24oKXt2PUcoRil9KX1lbHNle3Y9RyhGKX19ZWxzZXtpZigocHx8eCkmJncpe3Y9dChGKX1lbHNle3Y9Zi5hamF4KGopfX1vLnJlbW92ZURhdGEoImpxeGhyIikuZGF0YSgianF4aHIiLHYpO2Zvcih2YXIgQT0wO0E8cy5sZW5ndGg7QSsrKXtzW0FdPW51bGx9dGhpcy50cmlnZ2VyKCJmb3JtLXN1Ym1pdC1ub3RpZnkiLFt0aGlzLGpdKTtyZXR1cm4gdGhpcztmdW5jdGlvbiBnKEspe3ZhciBMPWYucGFyYW0oSyxqLnRyYWRpdGlvbmFsKS5zcGxpdCgiJiIpO3ZhciBxPUwubGVuZ3RoO3ZhciBrPVtdO3ZhciBKLEk7Zm9yKEo9MDtKPHE7SisrKXtMW0pdPUxbSl0ucmVwbGFjZSgvXCsvZywiICIpO0k9TFtKXS5zcGxpdCgiPSIpO2sucHVzaChbZGVjb2RlVVJJQ29tcG9uZW50KElbMF0pLGRlY29kZVVSSUNvbXBvbmVudChJWzFdKV0pfXJldHVybiBrfWZ1bmN0aW9uIHQocSl7dmFyIGs9bmV3IEZvcm1EYXRhKCk7Zm9yKHZhciBJPTA7STxxLmxlbmd0aDtJKyspe2suYXBwZW5kKHFbSV0ubmFtZSxxW0ldLnZhbHVlKX1pZihqLmV4dHJhRGF0YSl7dmFyIEw9ZyhqLmV4dHJhRGF0YSk7Zm9yKEk9MDtJPEwubGVuZ3RoO0krKyl7aWYoTFtJXSl7ay5hcHBlbmQoTFtJXVswXSxMW0ldWzFdKX19fWouZGF0YT1udWxsO3ZhciBLPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaix7Y29udGVudFR5cGU6ZmFsc2UscHJvY2Vzc0RhdGE6ZmFsc2UsY2FjaGU6ZmFsc2UsdHlwZTppfHwiUE9TVCJ9KTtpZihqLnVwbG9hZFByb2dyZXNzKXtLLnhocj1mdW5jdGlvbigpe3ZhciBNPWYuYWpheFNldHRpbmdzLnhocigpO2lmKE0udXBsb2FkKXtNLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oUSl7dmFyIFA9MDt2YXIgTj1RLmxvYWRlZHx8US5wb3NpdGlvbjt2YXIgTz1RLnRvdGFsO2lmKFEubGVuZ3RoQ29tcHV0YWJsZSl7UD1NYXRoLmNlaWwoTi9PKjEwMCl9ai51cGxvYWRQcm9ncmVzcyhRLE4sTyxQKX0sZmFsc2UpfXJldHVybiBNfX1LLmRhdGE9bnVsbDt2YXIgSj1LLmJlZm9yZVNlbmQ7Sy5iZWZvcmVTZW5kPWZ1bmN0aW9uKE4sTSl7aWYoai5mb3JtRGF0YSl7TS5kYXRhPWouZm9ybURhdGF9ZWxzZXtNLmRhdGE9a31pZihKKXtKLmNhbGwodGhpcyxOLE0pfX07cmV0dXJuIGYuYWpheChLKX1mdW5jdGlvbiBHKGFmKXt2YXIgTD1vWzBdLEssYWIsVixhZCxZLE4sUSxPLFAsWixhYyxUO3ZhciBhaT1mLkRlZmVycmVkKCk7YWkuYWJvcnQ9ZnVuY3Rpb24oYWope08uYWJvcnQoYWopfTtpZihhZil7Zm9yKGFiPTA7YWI8cy5sZW5ndGg7YWIrKyl7Sz1mKHNbYWJdKTtpZihlKXtLLnByb3AoImRpc2FibGVkIixmYWxzZSl9ZWxzZXtLLnJlbW92ZUF0dHIoImRpc2FibGVkIil9fX1WPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaik7Vi5jb250ZXh0PVYuY29udGV4dHx8VjtZPSJqcUZvcm1JTyIrKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtpZihWLmlmcmFtZVRhcmdldCl7Tj1mKFYuaWZyYW1lVGFyZ2V0KTtaPU4uYXR0cjIoIm5hbWUiKTtpZighWil7Ti5hdHRyMigibmFtZSIsWSl9ZWxzZXtZPVp9fWVsc2V7Tj1mKCc8aWZyYW1lIG5hbWU9IicrWSsnIiBzcmM9IicrVi5pZnJhbWVTcmMrJyIgLz4nKTtOLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6Ii0xMDAwcHgiLGxlZnQ6Ii0xMDAwcHgifSl9UT1OWzBdO089e2Fib3J0ZWQ6MCxyZXNwb25zZVRleHQ6bnVsbCxyZXNwb25zZVhNTDpudWxsLHN0YXR1czowLHN0YXR1c1RleHQ6Im4vYSIsZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbigpe30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbigpe30sYWJvcnQ6ZnVuY3Rpb24oYWope3ZhciBhaz0oYWo9PT0idGltZW91dCI/InRpbWVvdXQiOiJhYm9ydGVkIik7ZCgiYWJvcnRpbmcgdXBsb2FkLi4uICIrYWspO3RoaXMuYWJvcnRlZD0xO3RyeXtpZihRLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQpe1EuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgiU3RvcCIpfX1jYXRjaChhbCl7fU4uYXR0cigic3JjIixWLmlmcmFtZVNyYyk7Ty5lcnJvcj1haztpZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYWssYWopfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixha10pfWlmKFYuY29tcGxldGUpe1YuY29tcGxldGUuY2FsbChWLmNvbnRleHQsTyxhayl9fX07YWQ9Vi5nbG9iYWw7aWYoYWQmJjA9PT1mLmFjdGl2ZSsrKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTZW5kIixbTyxWXSl9aWYoVi5iZWZvcmVTZW5kJiZWLmJlZm9yZVNlbmQuY2FsbChWLmNvbnRleHQsTyxWKT09PWZhbHNlKXtpZihWLmdsb2JhbCl7Zi5hY3RpdmUtLX1haS5yZWplY3QoKTtyZXR1cm4gYWl9aWYoTy5hYm9ydGVkKXthaS5yZWplY3QoKTtyZXR1cm4gYWl9UD1MLmNsaztpZihQKXtaPVAubmFtZTtpZihaJiYhUC5kaXNhYmxlZCl7Vi5leHRyYURhdGE9Vi5leHRyYURhdGF8fHt9O1YuZXh0cmFEYXRhW1pdPVAudmFsdWU7aWYoUC50eXBlPT0iaW1hZ2UiKXtWLmV4dHJhRGF0YVtaKyIueCJdPUwuY2xrX3g7Vi5leHRyYURhdGFbWisiLnkiXT1MLmNsa195fX19dmFyIFU9MTt2YXIgUj0yO2Z1bmN0aW9uIFMoYWwpe3ZhciBhaz1udWxsO3RyeXtpZihhbC5jb250ZW50V2luZG93KXthaz1hbC5jb250ZW50V2luZG93LmRvY3VtZW50fX1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudFdpbmRvdyBkb2N1bWVudDogIithail9aWYoYWspe3JldHVybiBha310cnl7YWs9YWwuY29udGVudERvY3VtZW50P2FsLmNvbnRlbnREb2N1bWVudDphbC5kb2N1bWVudH1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudERvY3VtZW50OiAiK2FqKTthaz1hbC5kb2N1bWVudH1yZXR1cm4gYWt9dmFyIEo9ZigibWV0YVtuYW1lPWNzcmYtdG9rZW5dIikuYXR0cigiY29udGVudCIpO3ZhciBJPWYoIm1ldGFbbmFtZT1jc3JmLXBhcmFtXSIpLmF0dHIoImNvbnRlbnQiKTtpZihJJiZKKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbSV09Sn1mdW5jdGlvbiBhYSgpe3ZhciBhbD1vLmF0dHIyKCJ0YXJnZXQiKSxhaj1vLmF0dHIyKCJhY3Rpb24iKTtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixZKTtpZighaXx8L3Bvc3QvaS50ZXN0KGkpKXtMLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwiUE9TVCIpfWlmKGFqIT1WLnVybCl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsVi51cmwpfWlmKCFWLnNraXBFbmNvZGluZ092ZXJyaWRlJiYoIWl8fC9wb3N0L2kudGVzdChpKSkpe28uYXR0cih7ZW5jb2Rpbmc6Im11bHRpcGFydC9mb3JtLWRhdGEiLGVuY3R5cGU6Im11bHRpcGFydC9mb3JtLWRhdGEifSl9aWYoVi50aW1lb3V0KXtUPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthYz10cnVlO1goVSl9LFYudGltZW91dCl9ZnVuY3Rpb24gYW0oKXt0cnl7dmFyIGFxPVMoUSkucmVhZHlTdGF0ZTtkKCJzdGF0ZSA9ICIrYXEpO2lmKGFxJiZhcS50b0xvd2VyQ2FzZSgpPT0idW5pbml0aWFsaXplZCIpe3NldFRpbWVvdXQoYW0sNTApfX1jYXRjaChhcil7ZCgiU2VydmVyIGFib3J0OiAiLGFyLCIgKCIsYXIubmFtZSwiKSIpO1goUik7aWYoVCl7Y2xlYXJUaW1lb3V0KFQpfVQ9dW5kZWZpbmVkfX12YXIgYWs9W107dHJ5e2lmKFYuZXh0cmFEYXRhKXtmb3IodmFyIGFwIGluIFYuZXh0cmFEYXRhKXtpZihWLmV4dHJhRGF0YS5oYXNPd25Qcm9wZXJ0eShhcCkpe2lmKGYuaXNQbGFpbk9iamVjdChWLmV4dHJhRGF0YVthcF0pJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoIm5hbWUiKSYmVi5leHRyYURhdGFbYXBdLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrVi5leHRyYURhdGFbYXBdLm5hbWUrJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXS52YWx1ZSkuYXBwZW5kVG8oTClbMF0pfWVsc2V7YWsucHVzaChmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInK2FwKyciPicpLnZhbChWLmV4dHJhRGF0YVthcF0pLmFwcGVuZFRvKEwpWzBdKX19fX1pZighVi5pZnJhbWVUYXJnZXQpe04uYXBwZW5kVG8oImJvZHkiKX1pZihRLmF0dGFjaEV2ZW50KXtRLmF0dGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX1zZXRUaW1lb3V0KGFtLDE1KTt0cnl7TC5zdWJtaXQoKX1jYXRjaChhbil7dmFyIGFvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5zdWJtaXQ7YW8uYXBwbHkoTCl9fWZpbmFsbHl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsYWopO2lmKGFsKXtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixhbCl9ZWxzZXtvLnJlbW92ZUF0dHIoInRhcmdldCIpfWYoYWspLnJlbW92ZSgpfX1pZihWLmZvcmNlU3luYyl7YWEoKX1lbHNle3NldFRpbWVvdXQoYWEsMTApfXZhciBhZyxhaCxhZT01MCxNO2Z1bmN0aW9uIFgoYXApe2lmKE8uYWJvcnRlZHx8TSl7cmV0dXJufWFoPVMoUSk7aWYoIWFoKXtkKCJjYW5ub3QgYWNjZXNzIHJlc3BvbnNlIGRvY3VtZW50Iik7YXA9Un1pZihhcD09PVUmJk8pe08uYWJvcnQoInRpbWVvdXQiKTthaS5yZWplY3QoTywidGltZW91dCIpO3JldHVybn1lbHNle2lmKGFwPT1SJiZPKXtPLmFib3J0KCJzZXJ2ZXIgYWJvcnQiKTthaS5yZWplY3QoTywiZXJyb3IiLCJzZXJ2ZXIgYWJvcnQiKTtyZXR1cm59fWlmKCFhaHx8YWgubG9jYXRpb24uaHJlZj09Vi5pZnJhbWVTcmMpe2lmKCFhYyl7cmV0dXJufX1pZihRLmRldGFjaEV2ZW50KXtRLmRldGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX12YXIgYW49InN1Y2Nlc3MiLGFyO3RyeXtpZihhYyl7dGhyb3cidGltZW91dCJ9dmFyIGFtPVYuZGF0YVR5cGU9PSJ4bWwifHxhaC5YTUxEb2N1bWVudHx8Zi5pc1hNTERvYyhhaCk7ZCgiaXNYbWw9IithbSk7aWYoIWFtJiZ3aW5kb3cub3BlcmEmJihhaC5ib2R5PT09bnVsbHx8IWFoLmJvZHkuaW5uZXJIVE1MKSl7aWYoLS1hZSl7ZCgicmVxdWVpbmcgb25Mb2FkIGNhbGxiYWNrLCBET00gbm90IGF2YWlsYWJsZSIpO3NldFRpbWVvdXQoWCwyNTApO3JldHVybn19dmFyIGF0PWFoLmJvZHk/YWguYm9keTphaC5kb2N1bWVudEVsZW1lbnQ7Ty5yZXNwb25zZVRleHQ9YXQ/YXQuaW5uZXJIVE1MOm51bGw7Ty5yZXNwb25zZVhNTD1haC5YTUxEb2N1bWVudD9haC5YTUxEb2N1bWVudDphaDtpZihhbSl7Vi5kYXRhVHlwZT0ieG1sIn1PLmdldFJlc3BvbnNlSGVhZGVyPWZ1bmN0aW9uKGF3KXt2YXIgYXY9eyJjb250ZW50LXR5cGUiOlYuZGF0YVR5cGV9O3JldHVybiBhdlthdy50b0xvd2VyQ2FzZSgpXX07aWYoYXQpe08uc3RhdHVzPU51bWJlcihhdC5nZXRBdHRyaWJ1dGUoInN0YXR1cyIpKXx8Ty5zdGF0dXM7Ty5zdGF0dXNUZXh0PWF0LmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxPLnN0YXR1c1RleHR9dmFyIGFqPShWLmRhdGFUeXBlfHwiIikudG9Mb3dlckNhc2UoKTt2YXIgYXE9Lyhqc29ufHNjcmlwdHx0ZXh0KS8udGVzdChhaik7aWYoYXF8fFYudGV4dGFyZWEpe3ZhciBhbz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGV4dGFyZWEiKVswXTtpZihhbyl7Ty5yZXNwb25zZVRleHQ9YW8udmFsdWU7Ty5zdGF0dXM9TnVtYmVyKGFvLmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YW8uZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH1lbHNle2lmKGFxKXt2YXIgYWs9YWguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpWzBdO3ZhciBhdT1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKGFrKXtPLnJlc3BvbnNlVGV4dD1hay50ZXh0Q29udGVudD9hay50ZXh0Q29udGVudDphay5pbm5lclRleHR9ZWxzZXtpZihhdSl7Ty5yZXNwb25zZVRleHQ9YXUudGV4dENvbnRlbnQ/YXUudGV4dENvbnRlbnQ6YXUuaW5uZXJUZXh0fX19fX1lbHNle2lmKGFqPT0ieG1sIiYmIU8ucmVzcG9uc2VYTUwmJk8ucmVzcG9uc2VUZXh0KXtPLnJlc3BvbnNlWE1MPVcoTy5yZXNwb25zZVRleHQpfX10cnl7YWc9ayhPLGFqLFYpfWNhdGNoKGFsKXthbj0icGFyc2VyZXJyb3IiO08uZXJyb3I9YXI9KGFsfHxhbil9fWNhdGNoKGFsKXtkKCJlcnJvciBjYXVnaHQ6ICIsYWwpO2FuPSJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX1pZihPLmFib3J0ZWQpe2QoInVwbG9hZCBhYm9ydGVkIik7YW49bnVsbH1pZihPLnN0YXR1cyl7YW49KE8uc3RhdHVzPj0yMDAmJk8uc3RhdHVzPDMwMHx8Ty5zdGF0dXM9PT0zMDQpPyJzdWNjZXNzIjoiZXJyb3IifWlmKGFuPT09InN1Y2Nlc3MiKXtpZihWLnN1Y2Nlc3Mpe1Yuc3VjY2Vzcy5jYWxsKFYuY29udGV4dCxhZywic3VjY2VzcyIsTyl9YWkucmVzb2x2ZShPLnJlc3BvbnNlVGV4dCwic3VjY2VzcyIsTyk7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN1Y2Nlc3MiLFtPLFZdKX19ZWxzZXtpZihhbil7aWYoYXI9PT11bmRlZmluZWQpe2FyPU8uc3RhdHVzVGV4dH1pZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYW4sYXIpfWFpLnJlamVjdChPLCJlcnJvciIsYXIpO2lmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixhcl0pfX19aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbTyxWXSl9aWYoYWQmJiEtLWYuYWN0aXZlKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFuKX1NPXRydWU7aWYoVi50aW1lb3V0KXtjbGVhclRpbWVvdXQoVCl9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFWLmlmcmFtZVRhcmdldCl7Ti5yZW1vdmUoKX1lbHNle04uYXR0cigic3JjIixWLmlmcmFtZVNyYyl9Ty5yZXNwb25zZVhNTD1udWxsfSwxMDApfXZhciBXPWYucGFyc2VYTUx8fGZ1bmN0aW9uKGFqLGFrKXtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7YWs9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKTthay5hc3luYz0iZmFsc2UiO2FrLmxvYWRYTUwoYWopfWVsc2V7YWs9KG5ldyBET01QYXJzZXIoKSkucGFyc2VGcm9tU3RyaW5nKGFqLCJ0ZXh0L3htbCIpfXJldHVybihhayYmYWsuZG9jdW1lbnRFbGVtZW50JiZhay5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUhPSJwYXJzZXJlcnJvciIpP2FrOm51bGx9O3ZhciBxPWYucGFyc2VKU09OfHxmdW5jdGlvbihhail7cmV0dXJuIHdpbmRvd1siZXZhbCJdKCIoIithaisiKSIpfTt2YXIgaz1mdW5jdGlvbihhbyxhbSxhbCl7dmFyIGFrPWFvLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKXx8IiIsYWo9YW09PT0ieG1sInx8IWFtJiZhay5pbmRleE9mKCJ4bWwiKT49MCxhbj1haj9hby5yZXNwb25zZVhNTDphby5yZXNwb25zZVRleHQ7aWYoYWomJmFuLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZT09PSJwYXJzZXJlcnJvciIpe2lmKGYuZXJyb3Ipe2YuZXJyb3IoInBhcnNlcmVycm9yIil9fWlmKGFsJiZhbC5kYXRhRmlsdGVyKXthbj1hbC5kYXRhRmlsdGVyKGFuLGFtKX1pZih0eXBlb2YgYW49PT0ic3RyaW5nIil7aWYoYW09PT0ianNvbiJ8fCFhbSYmYWsuaW5kZXhPZigianNvbiIpPj0wKXthbj1xKGFuKX1lbHNle2lmKGFtPT09InNjcmlwdCJ8fCFhbSYmYWsuaW5kZXhPZigiamF2YXNjcmlwdCIpPj0wKXtmLmdsb2JhbEV2YWwoYW4pfX19cmV0dXJuIGFufTtyZXR1cm4gYWl9fTtmLmZuLmFqYXhGb3JtPWZ1bmN0aW9uKGcpe2c9Z3x8e307Zy5kZWxlZ2F0aW9uPWcuZGVsZWdhdGlvbiYmZi5pc0Z1bmN0aW9uKGYuZm4ub24pO2lmKCFnLmRlbGVnYXRpb24mJnRoaXMubGVuZ3RoPT09MCl7dmFyIGg9e3M6dGhpcy5zZWxlY3RvcixjOnRoaXMuY29udGV4dH07aWYoIWYuaXNSZWFkeSYmaC5zKXtkKCJET00gbm90IHJlYWR5LCBxdWV1aW5nIGFqYXhGb3JtIik7ZihmdW5jdGlvbigpe2YoaC5zLGguYykuYWpheEZvcm0oZyl9KTtyZXR1cm4gdGhpc31kKCJ0ZXJtaW5hdGluZzsgemVybyBlbGVtZW50cyBmb3VuZCBieSBzZWxlY3RvciIrKGYuaXNSZWFkeT8iIjoiIChET00gbm90IHJlYWR5KSIpKTtyZXR1cm4gdGhpc31pZihnLmRlbGVnYXRpb24pe2YoZG9jdW1lbnQpLm9mZigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGIpLm9mZigiY2xpY2suZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYSkub24oInN1Ym1pdC5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGIpLm9uKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGEpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIixnLGIpLmJpbmQoImNsaWNrLmZvcm0tcGx1Z2luIixnLGEpfTtmdW5jdGlvbiBiKGgpe3ZhciBnPWguZGF0YTtpZighaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aC5wcmV2ZW50RGVmYXVsdCgpO2YoaC50YXJnZXQpLmFqYXhTdWJtaXQoZyl9fWZ1bmN0aW9uIGEoayl7dmFyIGo9ay50YXJnZXQ7dmFyIGg9ZihqKTtpZighKGguaXMoIlt0eXBlPXN1Ym1pdF0sW3R5cGU9aW1hZ2VdIikpKXt2YXIgZz1oLmNsb3Nlc3QoIlt0eXBlPXN1Ym1pdF0iKTtpZihnLmxlbmd0aD09PTApe3JldHVybn1qPWdbMF19dmFyIGk9dGhpcztpLmNsaz1qO2lmKGoudHlwZT09ImltYWdlIil7aWYoay5vZmZzZXRYIT09dW5kZWZpbmVkKXtpLmNsa194PWsub2Zmc2V0WDtpLmNsa195PWsub2Zmc2V0WX1lbHNle2lmKHR5cGVvZiBmLmZuLm9mZnNldD09ImZ1bmN0aW9uIil7dmFyIGw9aC5vZmZzZXQoKTtpLmNsa194PWsucGFnZVgtbC5sZWZ0O2kuY2xrX3k9ay5wYWdlWS1sLnRvcH1lbHNle2kuY2xrX3g9ay5wYWdlWC1qLm9mZnNldExlZnQ7aS5jbGtfeT1rLnBhZ2VZLWoub2Zmc2V0VG9wfX19c2V0VGltZW91dChmdW5jdGlvbigpe2kuY2xrPWkuY2xrX3g9aS5jbGtfeT1udWxsfSwxMDApfWYuZm4uYWpheEZvcm1VbmJpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoInN1Ym1pdC5mb3JtLXBsdWdpbiBjbGljay5mb3JtLXBsdWdpbiIpfTtmLmZuLmZvcm1Ub0FycmF5PWZ1bmN0aW9uKHgsZyl7dmFyIHc9W107aWYodGhpcy5sZW5ndGg9PT0wKXtyZXR1cm4gd312YXIgbD10aGlzWzBdO3ZhciBwPXg/bC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOmwuZWxlbWVudHM7aWYoIXApe3JldHVybiB3fXZhciByLHEsbyx5LG0sdCxrO2ZvcihyPTAsdD1wLmxlbmd0aDtyPHQ7cisrKXttPXBbcl07bz1tLm5hbWU7aWYoIW98fG0uZGlzYWJsZWQpe2NvbnRpbnVlfWlmKHgmJmwuY2xrJiZtLnR5cGU9PSJpbWFnZSIpe2lmKGwuY2xrPT1tKXt3LnB1c2goe25hbWU6byx2YWx1ZTpmKG0pLnZhbCgpLHR5cGU6bS50eXBlfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfWNvbnRpbnVlfXk9Zi5maWVsZFZhbHVlKG0sdHJ1ZSk7aWYoeSYmeS5jb25zdHJ1Y3Rvcj09QXJyYXkpe2lmKGcpe2cucHVzaChtKX1mb3IocT0wLGs9eS5sZW5ndGg7cTxrO3ErKyl7dy5wdXNoKHtuYW1lOm8sdmFsdWU6eVtxXX0pfX1lbHNle2lmKGMuZmlsZWFwaSYmbS50eXBlPT0iZmlsZSIpe2lmKGcpe2cucHVzaChtKX12YXIgaD1tLmZpbGVzO2lmKGgubGVuZ3RoKXtmb3IocT0wO3E8aC5sZW5ndGg7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTpoW3FdLHR5cGU6bS50eXBlfSl9fWVsc2V7dy5wdXNoKHtuYW1lOm8sdmFsdWU6IiIsdHlwZTptLnR5cGV9KX19ZWxzZXtpZih5IT09bnVsbCYmdHlwZW9mIHkhPSJ1bmRlZmluZWQiKXtpZihnKXtnLnB1c2gobSl9dy5wdXNoKHtuYW1lOm8sdmFsdWU6eSx0eXBlOm0udHlwZSxyZXF1aXJlZDptLnJlcXVpcmVkfSl9fX19aWYoIXgmJmwuY2xrKXt2YXIgcz1mKGwuY2xrKSx1PXNbMF07bz11Lm5hbWU7aWYobyYmIXUuZGlzYWJsZWQmJnUudHlwZT09ImltYWdlIil7dy5wdXNoKHtuYW1lOm8sdmFsdWU6cy52YWwoKX0pO3cucHVzaCh7bmFtZTpvKyIueCIsdmFsdWU6bC5jbGtfeH0se25hbWU6bysiLnkiLHZhbHVlOmwuY2xrX3l9KX19cmV0dXJuIHd9O2YuZm4uZm9ybVNlcmlhbGl6ZT1mdW5jdGlvbihnKXtyZXR1cm4gZi5wYXJhbSh0aGlzLmZvcm1Ub0FycmF5KGcpKX07Zi5mbi5maWVsZFNlcmlhbGl6ZT1mdW5jdGlvbihoKXt2YXIgZz1bXTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5hbWU7aWYoIW0pe3JldHVybn12YXIgaz1mLmZpZWxkVmFsdWUodGhpcyxoKTtpZihrJiZrLmNvbnN0cnVjdG9yPT1BcnJheSl7Zm9yKHZhciBsPTAsaj1rLmxlbmd0aDtsPGo7bCsrKXtnLnB1c2goe25hbWU6bSx2YWx1ZTprW2xdfSl9fWVsc2V7aWYoayE9PW51bGwmJnR5cGVvZiBrIT0idW5kZWZpbmVkIil7Zy5wdXNoKHtuYW1lOnRoaXMubmFtZSx2YWx1ZTprfSl9fX0pO3JldHVybiBmLnBhcmFtKGcpfTtmLmZuLmZpZWxkVmFsdWU9ZnVuY3Rpb24obSl7Zm9yKHZhciBsPVtdLGo9MCxnPXRoaXMubGVuZ3RoO2o8ZztqKyspe3ZhciBrPXRoaXNbal07dmFyIGg9Zi5maWVsZFZhbHVlKGssbSk7aWYoaD09PW51bGx8fHR5cGVvZiBoPT0idW5kZWZpbmVkInx8KGguY29uc3RydWN0b3I9PUFycmF5JiYhaC5sZW5ndGgpKXtjb250aW51ZX1pZihoLmNvbnN0cnVjdG9yPT1BcnJheSl7Zi5tZXJnZShsLGgpfWVsc2V7bC5wdXNoKGgpfX1yZXR1cm4gbH07Zi5maWVsZFZhbHVlPWZ1bmN0aW9uKGcsbyl7dmFyIGo9Zy5uYW1lLHU9Zy50eXBlLHc9Zy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYobz09PXVuZGVmaW5lZCl7bz10cnVlfWlmKG8mJighanx8Zy5kaXNhYmxlZHx8dT09InJlc2V0Inx8dT09ImJ1dHRvbiJ8fCh1PT0iY2hlY2tib3gifHx1PT0icmFkaW8iKSYmIWcuY2hlY2tlZHx8KHU9PSJzdWJtaXQifHx1PT0iaW1hZ2UiKSYmZy5mb3JtJiZnLmZvcm0uY2xrIT1nfHx3PT0ic2VsZWN0IiYmZy5zZWxlY3RlZEluZGV4PT0tMSkpe3JldHVybiBudWxsfWlmKHc9PSJzZWxlY3QiKXt2YXIgcD1nLnNlbGVjdGVkSW5kZXg7aWYocDwwKXtyZXR1cm4gbnVsbH12YXIgcj1bXSxoPWcub3B0aW9uczt2YXIgbD0odT09InNlbGVjdC1vbmUiKTt2YXIgcT0obD9wKzE6aC5sZW5ndGgpO2Zvcih2YXIgaz0obD9wOjApO2s8cTtrKyspe3ZhciBtPWhba107aWYobS5zZWxlY3RlZCl7dmFyIHM9bS52YWx1ZTtpZighcyl7cz0obS5hdHRyaWJ1dGVzJiZtLmF0dHJpYnV0ZXMudmFsdWUmJiEobS5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZCkpP20udGV4dDptLnZhbHVlfWlmKGwpe3JldHVybiBzfXIucHVzaChzKX19cmV0dXJuIHJ9cmV0dXJuIGYoZykudmFsKCl9O2YuZm4uY2xlYXJGb3JtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKCJpbnB1dCxzZWxlY3QsdGV4dGFyZWEiLHRoaXMpLmNsZWFyRmllbGRzKGcpfSl9O2YuZm4uY2xlYXJGaWVsZHM9Zi5mbi5jbGVhcklucHV0cz1mdW5jdGlvbihnKXt2YXIgaD0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy50eXBlLGk9dGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoaC50ZXN0KGopfHxpPT0idGV4dGFyZWEiKXt0aGlzLnZhbHVlPSIifWVsc2V7aWYoaj09ImNoZWNrYm94Inx8aj09InJhZGlvIil7dGhpcy5jaGVja2VkPWZhbHNlfWVsc2V7aWYoaT09InNlbGVjdCIpe3RoaXMuc2VsZWN0ZWRJbmRleD0tMX1lbHNle2lmKGo9PSJmaWxlIil7aWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpe2YodGhpcykucmVwbGFjZVdpdGgoZih0aGlzKS5jbG9uZSh0cnVlKSl9ZWxzZXtmKHRoaXMpLnZhbCgiIil9fWVsc2V7aWYoZyl7aWYoKGc9PT10cnVlJiYvaGlkZGVuLy50ZXN0KGopKXx8KHR5cGVvZiBnPT0ic3RyaW5nIiYmZih0aGlzKS5pcyhnKSkpe3RoaXMudmFsdWU9IiJ9fX19fX19KX07Zi5mbi5yZXNldEZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMucmVzZXQ9PSJmdW5jdGlvbiJ8fCh0eXBlb2YgdGhpcy5yZXNldD09Im9iamVjdCImJiF0aGlzLnJlc2V0Lm5vZGVUeXBlKSl7dGhpcy5yZXNldCgpfX0pfTtmLmZuLmVuYWJsZT1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9IWd9KX07Zi5mbi5zZWxlY3RlZD1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXRoaXMudHlwZTtpZihoPT0iY2hlY2tib3gifHxoPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9Z31lbHNle2lmKHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ib3B0aW9uIil7dmFyIGk9Zih0aGlzKS5wYXJlbnQoInNlbGVjdCIpO2lmKGcmJmlbMF0mJmlbMF0udHlwZT09InNlbGVjdC1vbmUiKXtpLmZpbmQoIm9wdGlvbiIpLnNlbGVjdGVkKGZhbHNlKX10aGlzLnNlbGVjdGVkPWd9fX0pfTtmLmZuLmFqYXhTdWJtaXQuZGVidWc9ZmFsc2U7ZnVuY3Rpb24gZCgpe2lmKCFmLmZuLmFqYXhTdWJtaXQuZGVidWcpe3JldHVybn12YXIgZz0iW2pxdWVyeS5mb3JtXSAiK0FycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKTtpZih3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nKXt3aW5kb3cuY29uc29sZS5sb2coZyl9ZWxzZXtpZih3aW5kb3cub3BlcmEmJndpbmRvdy5vcGVyYS5wb3N0RXJyb3Ipe3dpbmRvdy5vcGVyYS5wb3N0RXJyb3IoZyl9fX19KSk7UEsHCHYQEAGjPgAAoz4AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xsaWJcbWFya2VkLm1pbi5qcyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9e30sdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5ydWxlcz1hLm5vcm1hbCx0aGlzLm9wdGlvbnMuZ2ZtJiYodGhpcy5ydWxlcz10aGlzLm9wdGlvbnMudGFibGVzP2EudGFibGVzOmEuZ2ZtKX1mdW5jdGlvbiB0KGUsdCl7aWYodGhpcy5vcHRpb25zPXR8fGguZGVmYXVsdHMsdGhpcy5saW5rcz1lLHRoaXMucnVsZXM9dS5ub3JtYWwsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBuLCF0aGlzLmxpbmtzKXRocm93IG5ldyBFcnJvcigiVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4iKTt0aGlzLm9wdGlvbnMuZ2ZtP3RoaXMucnVsZXM9dGhpcy5vcHRpb25zLmJyZWFrcz91LmJyZWFrczp1LmdmbTp0aGlzLm9wdGlvbnMucGVkYW50aWMmJih0aGlzLnJ1bGVzPXUucGVkYW50aWMpfWZ1bmN0aW9uIG4oKXt9ZnVuY3Rpb24gcihlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlLnJlcGxhY2UodD8vJi9nOi8mKD8hIz9cdys7KS9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCImIzM5OyIpfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZT1lLnNvdXJjZSx0PXR8fCIiLGZ1bmN0aW9uIG4ocixzKXtyZXR1cm4gcj8ocz1zLnNvdXJjZXx8cyxzPXMucmVwbGFjZSgvKF58W15cW10pXF4vZywiJDEiKSxlPWUucmVwbGFjZShyLHMpLG4pOm5ldyBSZWdFeHAoZSx0KX19ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdCxuLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt0PWFyZ3VtZW50c1tyXTtmb3IobiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX1yZXR1cm4gZX1mdW5jdGlvbiBoKHQsbixpKXtpZihpfHwiZnVuY3Rpb24iPT10eXBlb2Ygbil7aXx8KGk9bixuPW51bGwpLG49byh7fSxoLmRlZmF1bHRzLG58fHt9KTt2YXIgbCxhLHU9bi5oaWdobGlnaHQscD0wO3RyeXtsPWUubGV4KHQsbil9Y2F0Y2goYyl7cmV0dXJuIGkoYyl9YT1sLmxlbmd0aDt2YXIgZz1mdW5jdGlvbigpe3ZhciBlLHQ7dHJ5e2U9ci5wYXJzZShsLG4pfWNhdGNoKHMpe3Q9c31yZXR1cm4gbi5oaWdobGlnaHQ9dSx0P2kodCk6aShudWxsLGUpfTtpZighdXx8dS5sZW5ndGg8MylyZXR1cm4gZygpO2lmKGRlbGV0ZSBuLmhpZ2hsaWdodCwhYSlyZXR1cm4gZygpO2Zvcig7cDxsLmxlbmd0aDtwKyspIWZ1bmN0aW9uKGUpe3JldHVybiJjb2RlIiE9PWUudHlwZT8tLWF8fGcoKTp1KGUudGV4dCxlLmxhbmcsZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09bnx8bj09PWUudGV4dD8tLWF8fGcoKTooZS50ZXh0PW4sZS5lc2NhcGVkPSEwLC0tYXx8ZygpLHZvaWQgMCl9KX0obFtwXSl9ZWxzZSB0cnl7cmV0dXJuIG4mJihuPW8oe30saC5kZWZhdWx0cyxuKSksci5wYXJzZShlLmxleCh0LG4pLG4pfWNhdGNoKGMpe2lmKGMubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGpqL21hcmtlZC4iLChufHxoLmRlZmF1bHRzKS5zaWxlbnQpcmV0dXJuIjxwPkFuIGVycm9yIG9jY3VyZWQ6PC9wPjxwcmU+IitzKGMubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7dGhyb3cgY319dmFyIGE9e25ld2xpbmU6L15cbisvLGNvZGU6L14oIHs0fVteXG5dK1xuKikrLyxmZW5jZXM6bCxocjovXiggKlstKl9dKXszLH0gKig/OlxuK3wkKS8saGVhZGluZzovXiAqKCN7MSw2fSkgKihbXlxuXSs/KSAqIyogKig/OlxuK3wkKS8sbnB0YWJsZTpsLGxoZWFkaW5nOi9eKFteXG5dKylcbiAqKD18LSl7Mix9ICooPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oICo+W15cbl0rKFxuW15cbl0rKSpcbiopKy8sbGlzdDovXiggKikoYnVsbCkgW1xzXFNdKz8oPzpocnxcbnsyLH0oPyEgKSg/IVwxYnVsbCApXG4qfFxzKiQpLyxodG1sOi9eICooPzpjb21tZW50fGNsb3NlZHxjbG9zaW5nKSAqKD86XG57Mix9fFxzKiQpLyxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogK1siKF0oW15cbl0rKVsiKV0pPyAqKD86XG4rfCQpLyx0YWJsZTpsLHBhcmFncmFwaDovXigoPzpbXlxuXStcbj8oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8dGFnfGRlZikpKylcbiovLHRleHQ6L15bXlxuXSsvfTthLmJ1bGxldD0vKD86WyorLV18XGQrXC4pLyxhLml0ZW09L14oICopKGJ1bGwpIFteXG5dKig/OlxuKD8hXDFidWxsIClbXlxuXSopKi8sYS5pdGVtPWkoYS5pdGVtLCJnbSIpKC9idWxsL2csYS5idWxsZXQpKCksYS5saXN0PWkoYS5saXN0KSgvYnVsbC9nLGEuYnVsbGV0KSgiaHIiLC9cbisoPz0oPzogKlstKl9dKXszLH0gKig/OlxuK3wkKSkvKSgpLGEuX3RhZz0iKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6L3xAKVxcYiIsYS5odG1sPWkoYS5odG1sKSgiY29tbWVudCIsLzwhLS1bXHNcU10qPy0tPi8pKCJjbG9zZWQiLC88KHRhZylbXHNcU10rPzxcL1wxPi8pKCJjbG9zaW5nIiwvPHRhZyg/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPl0pKj8+LykoL3RhZy9nLGEuX3RhZykoKSxhLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiaHIiLGEuaHIpKCJoZWFkaW5nIixhLmhlYWRpbmcpKCJsaGVhZGluZyIsYS5saGVhZGluZykoImJsb2NrcXVvdGUiLGEuYmxvY2txdW90ZSkoInRhZyIsIjwiK2EuX3RhZykoImRlZiIsYS5kZWYpKCksYS5ub3JtYWw9byh7fSxhKSxhLmdmbT1vKHt9LGEubm9ybWFsLHtmZW5jZXM6L14gKihgezMsfXx+ezMsfSkgKihcUyspPyAqXG4oW1xzXFNdKz8pXHMqXDEgKig/OlxuK3wkKS8scGFyYWdyYXBoOi9eL30pLGEuZ2ZtLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiKD8hIiwiKD8hIithLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMiIpKyJ8IithLmxpc3Quc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMyIpKyJ8IikoKSxhLnRhYmxlcz1vKHt9LGEuZ2ZtLHtucHRhYmxlOi9eICooXFMuKlx8LiopXG4gKihbLTpdKyAqXHxbLXwgOl0qKVxuKCg/Oi4qXHwuKig/OlxufCQpKSopXG4qLyx0YWJsZTovXiAqXHwoLispXG4gKlx8KCAqWy06XStbLXwgOl0qKVxuKCg/OiAqXHwuKig/OlxufCQpKSopXG4qL30pLGUucnVsZXM9YSxlLmxleD1mdW5jdGlvbih0LG4pe3ZhciByPW5ldyBlKG4pO3JldHVybiByLmxleCh0KX0sZS5wcm90b3R5cGUubGV4PWZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9cdTAwYTAvZywiICIpLnJlcGxhY2UoL1x1MjQyNC9nLCJcbiIpLHRoaXMudG9rZW4oZSwhMCl9LGUucHJvdG90eXBlLnRva2VuPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIscyxpLGwsbyxoLHUscCxlPWUucmVwbGFjZSgvXiArJC9nbSwiIik7ZTspaWYoKHM9dGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoZSkpJiYoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksc1swXS5sZW5ndGg+MSYmdGhpcy50b2tlbnMucHVzaCh7dHlwZToic3BhY2UifSkpLHM9dGhpcy5ydWxlcy5jb2RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCkscz1zWzBdLnJlcGxhY2UoL14gezR9L2dtLCIiKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9zOnMucmVwbGFjZSgvXG4rJC8sIiIpfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuZmVuY2VzLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiY29kZSIsbGFuZzpzWzJdLHRleHQ6c1szXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDpzWzFdLmxlbmd0aCx0ZXh0OnNbMl19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMubnB0YWJsZS5leGVjKGUpKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLG89e3R5cGU6InRhYmxlIixoZWFkZXI6c1sxXS5yZXBsYWNlKC9eICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksYWxpZ246c1syXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGNlbGxzOnNbM10ucmVwbGFjZSgvXG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnNwbGl0KC8gKlx8ICovKTt0aGlzLnRva2Vucy5wdXNoKG8pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmxoZWFkaW5nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiaGVhZGluZyIsZGVwdGg6Ij0iPT09c1syXT8xOjIsdGV4dDpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaHIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJociJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9zdGFydCJ9KSxzPXNbMF0ucmVwbGFjZSgvXiAqPiA/L2dtLCIiKSx0aGlzLnRva2VuKHMsdCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9lbmQifSk7ZWxzZSBpZihzPXRoaXMucnVsZXMubGlzdC5leGVjKGUpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksaT1zWzJdLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3Rfc3RhcnQiLG9yZGVyZWQ6aS5sZW5ndGg+MX0pLHM9c1swXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pLG49ITEscD1zLmxlbmd0aCx1PTA7cD51O3UrKylvPXNbdV0saD1vLmxlbmd0aCxvPW8ucmVwbGFjZSgvXiAqKFsqKy1dfFxkK1wuKSArLywiIiksfm8uaW5kZXhPZigiXG4gIikmJihoLT1vLmxlbmd0aCxvPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9vLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpOm8ucmVwbGFjZShuZXcgUmVnRXhwKCJeIHsxLCIraCsifSIsImdtIiksIiIpKSx0aGlzLm9wdGlvbnMuc21hcnRMaXN0cyYmdSE9PXAtMSYmKGw9YS5idWxsZXQuZXhlYyhzW3UrMV0pWzBdLGk9PT1sfHxpLmxlbmd0aD4xJiZsLmxlbmd0aD4xfHwoZT1zLnNsaWNlKHUrMSkuam9pbigiXG4iKStlLHU9cC0xKSkscj1ufHwvXG5cbig/IVxzKiQpLy50ZXN0KG8pLHUhPT1wLTEmJihuPSJcbiI9PT1vLmNoYXJBdChvLmxlbmd0aC0xKSxyfHwocj1uKSksdGhpcy50b2tlbnMucHVzaCh7dHlwZTpyPyJsb29zZV9pdGVtX3N0YXJ0IjoibGlzdF9pdGVtX3N0YXJ0In0pLHRoaXMudG9rZW4obywhMSksdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9pdGVtX2VuZCJ9KTt0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2VuZCJ9KX1lbHNlIGlmKHM9dGhpcy5ydWxlcy5odG1sLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InBhcmFncmFwaCI6Imh0bWwiLHByZToicHJlIj09PXNbMV18fCJzY3JpcHQiPT09c1sxXXx8InN0eWxlIj09PXNbMV0sdGV4dDpzWzBdfSk7ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLmRlZi5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5saW5rc1tzWzFdLnRvTG93ZXJDYXNlKCldPXtocmVmOnNbMl0sdGl0bGU6c1szXX07ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC8oPzogKlx8ICopP1xuJC8sIiIpLnNwbGl0KCJcbiIpfSx1PTA7dTxvLmFsaWduLmxlbmd0aDt1Kyspby5hbGlnblt1XT0vXiAqLSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChvLmFsaWduW3VdKT8ibGVmdCI6bnVsbDtmb3IodT0wO3U8by5jZWxscy5sZW5ndGg7dSsrKW8uY2VsbHNbdV09by5jZWxsc1t1XS5yZXBsYWNlKC9eICpcfCAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJwYXJhZ3JhcGgiLHRleHQ6IlxuIj09PXNbMV0uY2hhckF0KHNbMV0ubGVuZ3RoLTEpP3NbMV0uc2xpY2UoMCwtMSk6c1sxXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJ0ZXh0Iix0ZXh0OnNbMF19KTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gdGhpcy50b2tlbnN9O3ZhciB1PXtlc2NhcGU6L15cXChbXFxgKnt9XFtcXSgpIytcLS4hXz5dKS8sYXV0b2xpbms6L148KFteID5dKyhAfDpcLylbXiA+XSspPi8sdXJsOmwsdGFnOi9ePCEtLVtcc1xTXSo/LS0+fF48XC8/XHcrKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vLGxpbms6L14hP1xbKGluc2lkZSlcXVwoaHJlZlwpLyxyZWZsaW5rOi9eIT9cWyhpbnNpZGUpXF1ccypcWyhbXlxdXSopXF0vLG5vbGluazovXiE/XFsoKD86XFtbXlxdXSpcXXxbXlxbXF1dKSopXF0vLHN0cm9uZzovXl9fKFtcc1xTXSs/KV9fKD8hXyl8XlwqXCooW1xzXFNdKz8pXCpcKig/IVwqKS8sZW06L15cYl8oKD86X198W1xzXFNdKSs/KV9cYnxeXCooKD86XCpcKnxbXHNcU10pKz8pXCooPyFcKikvLGNvZGU6L14oYCspXHMqKFtcc1xTXSo/W15gXSlccypcMSg/IWApLyxicjovXiB7Mix9XG4oPyFccyokKS8sZGVsOmwsdGV4dDovXltcc1xTXSs/KD89W1xcPCFcW18qYF18IHsyLH1cbnwkKS99O3UuX2luc2lkZT0vKD86XFtbXlxdXSpcXXxbXlxbXF1dfFxdKD89W15cW10qXF0pKSovLHUuX2hyZWY9L1xzKjw/KFtcc1xTXSo/KT4/KD86XHMrWyciXShbXHNcU10qPylbJyJdKT9ccyovLHUubGluaz1pKHUubGluaykoImluc2lkZSIsdS5faW5zaWRlKSgiaHJlZiIsdS5faHJlZikoKSx1LnJlZmxpbms9aSh1LnJlZmxpbmspKCJpbnNpZGUiLHUuX2luc2lkZSkoKSx1Lm5vcm1hbD1vKHt9LHUpLHUucGVkYW50aWM9byh7fSx1Lm5vcm1hbCx7c3Ryb25nOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW06L15fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pfF5cKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopL30pLHUuZ2ZtPW8oe30sdS5ub3JtYWwse2VzY2FwZTppKHUuZXNjYXBlKSgiXSkiLCJ+fF0pIikoKSx1cmw6L14oaHR0cHM/OlwvXC9bXlxzPF0rW148Liw6OyInKVxdXHNdKS8sZGVsOi9efn4oPz1cUykoW1xzXFNdKj9cUyl+fi8sdGV4dDppKHUudGV4dCkoIl18Iiwifl18IikoInwiLCJ8aHR0cHM/Oi8vfCIpKCl9KSx1LmJyZWFrcz1vKHt9LHUuZ2ZtLHticjppKHUuYnIpKCJ7Mix9IiwiKiIpKCksdGV4dDppKHUuZ2ZtLnRleHQpKCJ7Mix9IiwiKiIpKCl9KSx0LnJ1bGVzPXUsdC5vdXRwdXQ9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzPW5ldyB0KG4scik7cmV0dXJuIHMub3V0cHV0KGUpfSx0LnByb3RvdHlwZS5vdXRwdXQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpLGw9IiI7ZTspaWYoaT10aGlzLnJ1bGVzLmVzY2FwZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPWlbMV07ZWxzZSBpZihpPXRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSwiQCI9PT1pWzJdPyhuPSI6Ij09PWlbMV0uY2hhckF0KDYpP3RoaXMubWFuZ2xlKGlbMV0uc3Vic3RyaW5nKDcpKTp0aGlzLm1hbmdsZShpWzFdKSxyPXRoaXMubWFuZ2xlKCJtYWlsdG86Iikrbik6KG49cyhpWzFdKSxyPW4pLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudXJsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbj1zKGlbMV0pLHI9bixsKz10aGlzLnJlbmRlcmVyLmxpbmsocixudWxsLG4pO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRhZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3B0aW9ucy5zYW5pdGl6ZT9zKGlbMF0pOmlbMF07ZWxzZSBpZihpPXRoaXMucnVsZXMubGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3V0cHV0TGluayhpLHtocmVmOmlbMl0sdGl0bGU6aVszXX0pO2Vsc2UgaWYoKGk9dGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoZSkpfHwoaT10aGlzLnJ1bGVzLm5vbGluay5leGVjKGUpKSl7aWYoZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdD0oaVsyXXx8aVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSx0PXRoaXMubGlua3NbdC50b0xvd2VyQ2FzZSgpXSwhdHx8IXQuaHJlZil7bCs9aVswXS5jaGFyQXQoMCksZT1pWzBdLnN1YnN0cmluZygxKStlO2NvbnRpbnVlfWwrPXRoaXMub3V0cHV0TGluayhpLHQpfWVsc2UgaWYoaT10aGlzLnJ1bGVzLnN0cm9uZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuc3Ryb25nKHRoaXMub3V0cHV0KGlbMl18fGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5lbS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZW0odGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmNvZGVzcGFuKHMoaVsyXSwhMCkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmJyLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5icigpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmRlbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZGVsKHRoaXMub3V0cHV0KGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy50ZXh0LmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9cyh0aGlzLnNtYXJ0eXBhbnRzKGlbMF0pKTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gbH0sdC5wcm90b3R5cGUub3V0cHV0TGluaz1mdW5jdGlvbihlLHQpe3ZhciBuPXModC5ocmVmKSxyPXQudGl0bGU/cyh0LnRpdGxlKTpudWxsO3JldHVybiIhIiE9PWVbMF0uY2hhckF0KDApP3RoaXMucmVuZGVyZXIubGluayhuLHIsdGhpcy5vdXRwdXQoZVsxXSkpOnRoaXMucmVuZGVyZXIuaW1hZ2UobixyLHMoZVsxXSkpfSx0LnByb3RvdHlwZS5zbWFydHlwYW50cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2UucmVwbGFjZSgvLS0vZywi4oCUIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMeKAmCIpLnJlcGxhY2UoLycvZywi4oCZIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQx4oCcIikucmVwbGFjZSgvIi9nLCLigJ0iKS5yZXBsYWNlKC9cLnszfS9nLCLigKYiKTplfSx0LnByb3RvdHlwZS5tYW5nbGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiIscj1lLmxlbmd0aCxzPTA7cj5zO3MrKyl0PWUuY2hhckNvZGVBdChzKSxNYXRoLnJhbmRvbSgpPi41JiYodD0ieCIrdC50b1N0cmluZygxNikpLG4rPSImIyIrdCsiOyI7cmV0dXJuIG59LG4ucHJvdG90eXBlLmNvZGU9ZnVuY3Rpb24oZSx0LG4scil7aWYocj1yfHx7fSxyLmhpZ2hsaWdodCl7dmFyIGk9ci5oaWdobGlnaHQoZSx0KTtudWxsIT1pJiZpIT09ZSYmKG49ITAsZT1pKX1yZXR1cm4gdD8nPHByZT48Y29kZSBjbGFzcz0iJytyLmxhbmdQcmVmaXgrdCsnIj4nKyhuP2U6cyhlKSkrIlxuPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhuP2U6cyhlLCEwKSkrIlxuPC9jb2RlPjwvcHJlPiJ9LG4ucHJvdG90eXBlLmJsb2NrcXVvdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIjxibG9ja3F1b3RlPlxuIitlKyI8L2Jsb2NrcXVvdGU+XG4ifSxuLnByb3RvdHlwZS5odG1sPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxuLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aCIrdCsnIGlkPSInK3IuaGVhZGVyUHJlZml4K24udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlx3XSsvZywiLSIpKyciPicrZSsiPC9oIit0KyI+XG4ifSxuLnByb3RvdHlwZS5ocj1mdW5jdGlvbigpe3JldHVybiI8aHI+XG4ifSxuLnByb3RvdHlwZS5saXN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dD8ib2wiOiJ1bCI7cmV0dXJuIjwiK24rIj5cbiIrZSsiPC8iK24rIj5cbiJ9LG4ucHJvdG90eXBlLmxpc3RpdGVtPWZ1bmN0aW9uKGUpe3JldHVybiI8bGk+IitlKyI8L2xpPlxuIn0sbi5wcm90b3R5cGUucGFyYWdyYXBoPWZ1bmN0aW9uKGUpe3JldHVybiI8cD4iK2UrIjwvcD5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrZSsiPC90aGVhZD5cbiIrIjx0Ym9keT5cbiIrdCsiPC90Ym9keT5cbiIrIjwvdGFibGU+XG4ifSxuLnByb3RvdHlwZS50YWJsZXJvdz1mdW5jdGlvbihlKXtyZXR1cm4iPHRyPlxuIitlKyI8L3RyPlxuIn0sbi5wcm90b3R5cGUudGFibGVjZWxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5oZWFkZXI/InRoIjoidGQiLHI9dC5hbGlnbj8iPCIrbisnIHN0eWxlPSJ0ZXh0LWFsaWduOicrdC5hbGlnbisnIj4nOiI8IituKyI+IjtyZXR1cm4gcitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUuc3Ryb25nPWZ1bmN0aW9uKGUpe3JldHVybiI8c3Ryb25nPiIrZSsiPC9zdHJvbmc+In0sbi5wcm90b3R5cGUuZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxlbT4iK2UrIjwvZW0+In0sbi5wcm90b3R5cGUuY29kZXNwYW49ZnVuY3Rpb24oZSl7cmV0dXJuIjxjb2RlPiIrZSsiPC9jb2RlPiJ9LG4ucHJvdG90eXBlLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIjxicj4ifSxuLnByb3RvdHlwZS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIjxkZWw+IitlKyI8L2RlbD4ifSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0nPGEgaHJlZj0iJytlKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+IituKyI8L2E+In0sbi5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8aW1nIHNyYz0iJytlKyciIGFsdD0iJytuKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+In0sci5wYXJzZT1mdW5jdGlvbihlLHQsbil7dmFyIHM9bmV3IHIodCxuKTtyZXR1cm4gcy5wYXJzZShlKX0sci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7dGhpcy5pbmxpbmU9bmV3IHQoZS5saW5rcyx0aGlzLm9wdGlvbnMsdGhpcy5yZW5kZXJlciksdGhpcy50b2tlbnM9ZS5yZXZlcnNlKCk7Zm9yKHZhciBuPSIiO3RoaXMubmV4dCgpOyluKz10aGlzLnRvaygpO3JldHVybiBufSxyLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW49dGhpcy50b2tlbnMucG9wKCl9LHIucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdfHwwfSxyLnByb3RvdHlwZS5wYXJzZVRleHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy50b2tlbi50ZXh0OyJ0ZXh0Ij09PXRoaXMucGVlaygpLnR5cGU7KWUrPSJcbiIrdGhpcy5uZXh0KCkudGV4dDtyZXR1cm4gdGhpcy5pbmxpbmUub3V0cHV0KGUpfSxyLnByb3RvdHlwZS50b2s9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy50b2tlbi50eXBlKXtjYXNlInNwYWNlIjpyZXR1cm4iIjtjYXNlImhyIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpO2Nhc2UiaGVhZGluZyI6cmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSx0aGlzLnRva2VuLmRlcHRoLHRoaXMudG9rZW4udGV4dCx0aGlzLm9wdGlvbnMpO2Nhc2UiY29kZSI6cmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsdGhpcy50b2tlbi5sYW5nLHRoaXMudG9rZW4uZXNjYXBlZCx0aGlzLm9wdGlvbnMpO2Nhc2UidGFibGUiOnZhciBlLHQsbixyLHMsaT0iIixsPSIiO2ZvcihuPSIiLGU9MDtlPHRoaXMudG9rZW4uaGVhZGVyLmxlbmd0aDtlKyspcj17aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19LG4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLmhlYWRlcltlXSkse2hlYWRlcjohMCxhbGlnbjp0aGlzLnRva2VuLmFsaWduW2VdfSk7Zm9yKGkrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobiksZT0wO2U8dGhpcy50b2tlbi5jZWxscy5sZW5ndGg7ZSsrKXtmb3IodD10aGlzLnRva2VuLmNlbGxzW2VdLG49IiIscz0wO3M8dC5sZW5ndGg7cysrKW4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0W3NdKSx7aGVhZGVyOiExLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bc119KTtsKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KG4pfXJldHVybiB0aGlzLnJlbmRlcmVyLnRhYmxlKGksbCk7Y2FzZSJibG9ja3F1b3RlX3N0YXJ0Ijpmb3IodmFyIGw9IiI7ImJsb2NrcXVvdGVfZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShsKTtjYXNlImxpc3Rfc3RhcnQiOmZvcih2YXIgbD0iIixvPXRoaXMudG9rZW4ub3JkZXJlZDsibGlzdF9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0KGwsbyk7Y2FzZSJsaXN0X2l0ZW1fc3RhcnQiOmZvcih2YXIgbD0iIjsibGlzdF9pdGVtX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz0idGV4dCI9PT10aGlzLnRva2VuLnR5cGU/dGhpcy5wYXJzZVRleHQoKTp0aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGwpO2Nhc2UibG9vc2VfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJodG1sIjp2YXIgaD10aGlzLnRva2VuLnByZXx8dGhpcy5vcHRpb25zLnBlZGFudGljP3RoaXMudG9rZW4udGV4dDp0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KTtyZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKGgpO2Nhc2UicGFyYWdyYXBoIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCkpO2Nhc2UidGV4dCI6cmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VUZXh0KCkpfX0sbC5leGVjPWwsaC5vcHRpb25zPWguc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gbyhoLmRlZmF1bHRzLGUpLGh9LGguZGVmYXVsdHM9e2dmbTohMCx0YWJsZXM6ITAsYnJlYWtzOiExLHBlZGFudGljOiExLHNhbml0aXplOiExLHNtYXJ0TGlzdHM6ITEsc2lsZW50OiExLGhpZ2hsaWdodDpudWxsLGxhbmdQcmVmaXg6ImxhbmctIixzbWFydHlwYW50czohMSxoZWFkZXJQcmVmaXg6IiIscmVuZGVyZXI6bmV3IG59LGguUGFyc2VyPXIsaC5wYXJzZXI9ci5wYXJzZSxoLlJlbmRlcmVyPW4saC5MZXhlcj1lLGgubGV4ZXI9ZS5sZXgsaC5JbmxpbmVMZXhlcj10LGguaW5saW5lTGV4ZXI9dC5vdXRwdXQsaC5wYXJzZT1oLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1oOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTp0aGlzLm1hcmtlZD1ofS5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fCgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6Z2xvYmFsKX0oKSk7UEsHCEL6TGpTOQAAUzkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHN0YXRpY1xsaWJcdmFsaWRhdGUubWluLmpzLyoKICogdmFsaWRhdGUuanMgMS4zCiAqIENvcHlyaWdodCAoYykgMjAxMyBSaWNrIEhhcnJpc29uLCBodHRwOi8vcmlja2hhcnJpc29uLm1lCiAqIHZhbGlkYXRlLmpzIGlzIG9wZW4gc291cmNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqIFBvcnRpb25zIG9mIHZhbGlkYXRlLmpzIGFyZSBpbnNwaXJlZCBieSBDb2RlSWduaXRlci4KICogaHR0cDovL3JpY2toYXJyaXNvbi5naXRodWIuY29tL3ZhbGlkYXRlLmpzCiAqLwoKKGZ1bmN0aW9uKHEscixtKXt2YXIgcz17cmVxdWlyZWQ6IlRoZSAlcyBmaWVsZCBpcyByZXF1aXJlZC4iLG1hdGNoZXM6IlRoZSAlcyBmaWVsZCBkb2VzIG5vdCBtYXRjaCB0aGUgJXMgZmllbGQuIiwiZGVmYXVsdCI6IlRoZSAlcyBmaWVsZCBpcyBzdGlsbCBzZXQgdG8gZGVmYXVsdCwgcGxlYXNlIGNoYW5nZS4iLHZhbGlkX2VtYWlsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iLHZhbGlkX2VtYWlsczoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhbGwgdmFsaWQgZW1haWwgYWRkcmVzc2VzLiIsbWluX2xlbmd0aDoiVGhlICVzIGZpZWxkIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixtYXhfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBub3QgZXhjZWVkICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZXhhY3RfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBleGFjdGx5ICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZ3JlYXRlcl90aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAlcy4iLGxlc3NfdGhhbjoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBsZXNzIHRoYW4gJXMuIixhbHBoYToiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzLiIsYWxwaGFfbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycy4iLGFscGhhX2Rhc2g6IlRoZSAlcyBmaWVsZCBtdXN0IG9ubHkgY29udGFpbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBhbmQgZGFzaGVzLiIsbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5IG51bWJlcnMuIixpbnRlZ2VyOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFuIGludGVnZXIuIixkZWNpbWFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgZGVjaW1hbCBudW1iZXIuIixpc19uYXR1cmFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgcG9zaXRpdmUgbnVtYmVycy4iLGlzX25hdHVyYWxfbm9femVybzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4iLHZhbGlkX2lwOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgSVAuIix2YWxpZF9iYXNlNjQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBiYXNlNjQgc3RyaW5nLiIsdmFsaWRfY3JlZGl0X2NhcmQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIuIixpc19maWxlX3R5cGU6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSAlcyBmaWxlcy4iLHZhbGlkX3VybDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIFVSTC4ifSx0PWZ1bmN0aW9uKGEpe30sdT0vXiguKz8pXFsoLispXF0kLyxoPS9eWzAtOV0rJC8sdj0vXlwtP1swLTldKyQvLGs9L15cLT9bMC05XSpcLj9bMC05XSskLyxwPS9eW2EtekEtWjAtOS4hIyQlJmFtcDsnKitcLVwvPT9cXl9ge3x9flwtXStAW2EtekEtWjAtOVwtXSsoPzpcLlthLXpBLVowLTlcLV0rKSokLyx3PS9eW2Etel0rJC9pLHg9L15bYS16MC05XSskL2kseT0vXlthLXowLTlfXC1dKyQvaSx6PS9eWzAtOV0rJC9pLEE9L15bMS05XVswLTldKiQvaSxCPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KSQvaSxDPS9bXmEtekEtWjAtOVwvXCs9XS9pLEQ9L15bXGRcLVxzXSskLyxFPS9eKChodHRwfGh0dHBzKTpcL1wvKFx3Kzp7MCwxfVx3KkApPyhcUyspfCkoOlswLTldKyk/KFwvfFwvKFtcdyMhOi4/Kz0mJUAhXC1cL10pKT8kLyxlPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbGxiYWNrPWN8fHQ7dGhpcy5lcnJvcnM9W107dGhpcy5maWVsZHM9e307dGhpcy5mb3JtPXRoaXMuX2Zvcm1CeU5hbWVPck5vZGUoYSl8fHt9O3RoaXMubWVzc2FnZXM9e307dGhpcy5oYW5kbGVycz17fTthPTA7Zm9yKGM9Yi5sZW5ndGg7YTxjO2ErKyl7dmFyIGQ9YlthXTtpZigoZC5uYW1lfHxkLm5hbWVzKSYmZC5ydWxlcylpZihkLm5hbWVzKWZvcih2YXIgbD0wO2w8ZC5uYW1lcy5sZW5ndGg7bCsrKXRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lc1tsXSk7ZWxzZSB0aGlzLl9hZGRGaWVsZChkLGQubmFtZSl9dmFyIGc9dGhpcy5mb3JtLm9uc3VibWl0O3RoaXMuZm9ybS5vbnN1Ym1pdD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7dHJ5e3JldHVybiBhLl92YWxpZGF0ZUZvcm0oYikmJihnPT09bXx8ZygpKX1jYXRjaChjKXt9fX0odGhpcyl9LG49ZnVuY3Rpb24oYSxiKXt2YXIgYztpZigwPGEubGVuZ3RoJiYoInJhZGlvIj09PWFbMF0udHlwZXx8ImNoZWNrYm94Ij09PWFbMF0udHlwZSkpZm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoYVtjXS5jaGVja2VkKXJldHVybiBhW2NdW2JdfWVsc2UgcmV0dXJuIGFbYl19O2UucHJvdG90eXBlLnNldE1lc3NhZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLm1lc3NhZ2VzW2FdPWI7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLnJlZ2lzdGVyQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXthJiYoInN0cmluZyI9PT10eXBlb2YgYSYmYiYmImZ1bmN0aW9uIj09PXR5cGVvZiBiKSYmKHRoaXMuaGFuZGxlcnNbYV09Yik7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLl9mb3JtQnlOYW1lT3JOb2RlPWZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiPT09dHlwZW9mIGE/YTpyLmZvcm1zW2FdfTtlLnByb3RvdHlwZS5fYWRkRmllbGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmZpZWxkc1tiXT17bmFtZTpiLGRpc3BsYXk6YS5kaXNwbGF5fHxiLHJ1bGVzOmEucnVsZXMsaWQ6bnVsbCx0eXBlOm51bGwsdmFsdWU6bnVsbCxjaGVja2VkOm51bGx9fTtlLnByb3RvdHlwZS5fdmFsaWRhdGVGb3JtPWZ1bmN0aW9uKGEpe3RoaXMuZXJyb3JzPVtdO2Zvcih2YXIgYiBpbiB0aGlzLmZpZWxkcylpZih0aGlzLmZpZWxkcy5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGM9dGhpcy5maWVsZHNbYl18fHt9LGQ9dGhpcy5mb3JtW2MubmFtZV07ZCYmZCE9PW0mJihjLmlkPW4oZCwiaWQiKSxjLnR5cGU9MDxkLmxlbmd0aD9kWzBdLnR5cGU6ZC50eXBlLGMudmFsdWU9bihkLCJ2YWx1ZSIpLGMuY2hlY2tlZD1uKGQsImNoZWNrZWQiKSx0aGlzLl92YWxpZGF0ZUZpZWxkKGMpKX0iZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuY2FsbGJhY2smJnRoaXMuY2FsbGJhY2sodGhpcy5lcnJvcnMsYSk7MDx0aGlzLmVycm9ycy5sZW5ndGgmJihhJiZhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTpldmVudCYmKGV2ZW50LnJldHVyblZhbHVlPSExKSk7cmV0dXJuITB9O2UucHJvdG90eXBlLl92YWxpZGF0ZUZpZWxkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLnJ1bGVzLnNwbGl0KCJ8IiksYz1hLnJ1bGVzLmluZGV4T2YoInJlcXVpcmVkIiksZD0hYS52YWx1ZXx8IiI9PT1hLnZhbHVlfHxhLnZhbHVlPT09bSxsPTAsZz1iLmxlbmd0aDtsPGc7bCsrKXt2YXIgZj1iW2xdLGU9bnVsbCxoPSExLGs9dS5leGVjKGYpO2lmKC0xIT09Y3x8LTEhPT1mLmluZGV4T2YoIiFjYWxsYmFja18iKXx8IWQpaWYoayYmKGY9a1sxXSxlPWtbMl0pLCIhIj09PWYuY2hhckF0KDApJiYoZj1mLnN1YnN0cmluZygxLGYubGVuZ3RoKSksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLl9ob29rc1tmXT90aGlzLl9ob29rc1tmXS5hcHBseSh0aGlzLFthLGVdKXx8KGg9ITApOiJjYWxsYmFja18iPT09Zi5zdWJzdHJpbmcoMCw5KSYmKGY9Zi5zdWJzdHJpbmcoOSxmLmxlbmd0aCksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmhhbmRsZXJzW2ZdJiYhMT09PXRoaXMuaGFuZGxlcnNbZl0uYXBwbHkodGhpcyxbYS52YWx1ZSxlXSkmJihoPSEwKSksaCl7Yj10aGlzLm1lc3NhZ2VzW2ZdfHxzW2ZdO2M9IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aXRoIHRoZSAiK2EuZGlzcGxheSsiIGZpZWxkLiI7YiYmKGM9Yi5yZXBsYWNlKCIlcyIsYS5kaXNwbGF5KSxlJiYoYz1jLnJlcGxhY2UoIiVzIix0aGlzLmZpZWxkc1tlXT90aGlzLmZpZWxkc1tlXS5kaXNwbGF5OmUpKSk7dGhpcy5lcnJvcnMucHVzaCh7aWQ6YS5pZCxuYW1lOmEubmFtZSxtZXNzYWdlOmMscnVsZTpmfSk7YnJlYWt9fX07ZS5wcm90b3R5cGUuX2hvb2tzPXtyZXF1aXJlZDpmdW5jdGlvbihhKXt2YXIgYj1hLnZhbHVlO3JldHVybiJjaGVja2JveCI9PT1hLnR5cGV8fCJyYWRpbyI9PT1hLnR5cGU/ITA9PT1hLmNoZWNrZWQ6bnVsbCE9PWImJiIiIT09Yn0sImRlZmF1bHQiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUhPT1ifSxtYXRjaGVzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5mb3JtW2JdO3JldHVybiBjP2EudmFsdWU9PT1jLnZhbHVlOiExfSx2YWxpZF9lbWFpbDpmdW5jdGlvbihhKXtyZXR1cm4gcC50ZXN0KGEudmFsdWUpfSx2YWxpZF9lbWFpbHM6ZnVuY3Rpb24oYSl7YT1hLnZhbHVlLnNwbGl0KCIsIik7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspaWYoIXAudGVzdChhW2JdKSlyZXR1cm4hMTtyZXR1cm4hMH0sbWluX2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg+PXBhcnNlSW50KGIsMTApOiExfSxtYXhfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aDw9cGFyc2VJbnQoYiwxMCk6ITF9LGV4YWN0X2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg9PT1wYXJzZUludChiLDEwKTohMX0sZ3JlYXRlcl90aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPnBhcnNlRmxvYXQoYik6ITF9LGxlc3NfdGhhbjpmdW5jdGlvbihhLGIpe3JldHVybiBrLnRlc3QoYS52YWx1ZSk/cGFyc2VGbG9hdChhLnZhbHVlKTxwYXJzZUZsb2F0KGIpOiExfSxhbHBoYTpmdW5jdGlvbihhKXtyZXR1cm4gdy50ZXN0KGEudmFsdWUpfSxhbHBoYV9udW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiB4LnRlc3QoYS52YWx1ZSl9LGFscGhhX2Rhc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHkudGVzdChhLnZhbHVlKX0sbnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4gaC50ZXN0KGEudmFsdWUpfSxpbnRlZ2VyOmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoYS52YWx1ZSl9LGRlY2ltYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGsudGVzdChhLnZhbHVlKX0saXNfbmF0dXJhbDpmdW5jdGlvbihhKXtyZXR1cm4gei50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsX25vX3plcm86ZnVuY3Rpb24oYSl7cmV0dXJuIEEudGVzdChhLnZhbHVlKX0sdmFsaWRfaXA6ZnVuY3Rpb24oYSl7cmV0dXJuIEIudGVzdChhLnZhbHVlKX0sdmFsaWRfYmFzZTY0OmZ1bmN0aW9uKGEpe3JldHVybiBDLnRlc3QoYS52YWx1ZSl9LHZhbGlkX3VybDpmdW5jdGlvbihhKXtyZXR1cm4gRS50ZXN0KGEudmFsdWUpfSx2YWxpZF9jcmVkaXRfY2FyZDpmdW5jdGlvbihhKXtpZighRC50ZXN0KGEudmFsdWUpKXJldHVybiExO3ZhciBiPTAsYz0wLGQ9ITE7YT1hLnZhbHVlLnJlcGxhY2UoL1xEL2csIiIpO2Zvcih2YXIgZT1hLmxlbmd0aC0xOzA8PWU7ZS0tKWM9YS5jaGFyQXQoZSksYz1wYXJzZUludChjLDEwKSxkJiY5PChjKj0yKSYmKGMtPTkpLGIrPWMsZD0hZDtyZXR1cm4gMD09PWIlMTB9LGlzX2ZpbGVfdHlwZTpmdW5jdGlvbihhLGIpe2lmKCJmaWxlIiE9PWEudHlwZSlyZXR1cm4hMDt2YXIgYz1hLnZhbHVlLnN1YnN0cihhLnZhbHVlLmxhc3RJbmRleE9mKCIuIikrMSksZD1iLnNwbGl0KCIsIiksZT0hMSxnPTAsZj1kLmxlbmd0aDtmb3IoZztnPGY7ZysrKWM9PWRbZ10mJihlPSEwKTtyZXR1cm4gZX19O3EuRm9ybVZhbGlkYXRvcj1lfSkod2luZG93LGRvY3VtZW50KTsKUEsHCGaMH8QzGAAAMxgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAABQAAAHZpZXcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHZpZXdcYWRtaW4vUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcYWRtaW5cYXJ0aWNsZXMuaHRtbDx1bCBpZD0iYXJ0aWNsZS1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj4NCiAgICA8bGk+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5re75Yqg5paH56ugPC9hPg0KICAgIDwvbGk+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj48aDQgY2xhc3M9ImlubGluZS1ibG9jayB0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0YXJnZXQ9Il9ibGFuayI+e3suVGl0bGV9fTwvYT48L2g0Pnt7aWYgbmUgLlN0YXR1cyAicHVibGlzaCJ9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGJsIHN0YXR1cyI+6I2J56i/PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9InNsdWciPnt7LlNsdWd9fTwvc3Bhbj57e2lmIGVxIC5Jc0NvbW1lbnQgZmFsc2V9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iaXMtY29tbWVudCI+PGkgY2xhc3M9ImZhLWNvbW1lbnRzIGZhIj48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50Ij57ey5Db21tZW50TnVtfX0gLyB7ey5IaXRzfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJlZGl0IGxibCBsYmwtZ3JlZW4iIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPue8lui+kTwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBsYmwgbGJsLXJlZCIgaHJlZj0iL2FkbWluL2FydGljbGUve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+5Yig6ZmkPC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKCIuZGVsIikub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBpZihjb25maXJtKCLliKDpmaTmlofnq6DlsIbkvb/nm7jlhbPlhoXlrrnlpLHmlYjvvIHnoa7orqTvvJ8iKSl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAidXJsIjoiL2FkbWluL2FydGljbGUvIitpZCsiLyIsDQogICAgICAgICAgICAgICAgInR5cGUiOiJkZWxldGUiLA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suWIoOmZpCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0NCiAgICB9KTsNCjwvc2NyaXB0PlBLBwgfwp6+rgYAAK4GAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAB2aWV3XGFkbWluXGNtZC9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblxjbWRcYmFja3VwLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIGNsZWFyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSBsZWZ0Ij7lpIfku73mlbDmja48L2gxPg0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSBsZWZ0IiBpZD0iYmFja3VwLWJ0biI+5aSH5Lu9PC9idXR0b24+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJiYWNrdXAtbGlzdCI+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZVRpbWUgLk1vZFRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19IDxhIGNsYXNzPSJsaW5rIiBocmVmPSIvY21kL2JhY2t1cC9maWxlP2ZpbGU9e3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluayI+PC9pPjwvYT48L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJzaXplIj57e0ZpbGVTaXplIC5TaXplfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiIHJlbD0ie3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlLW8iPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHR5cGU6ICJwb3N0IiwNCiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLWxvYWRpbmciPuWkh+S7veS4rS4uPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5oaWRlKCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5iYWNrdXAtbG9hZGluZycpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNtZC1saXN0JykucHJlcGVuZCgnPGxpIGNsYXNzPSJiYWNrdXAtcmVzdWx0Ij7liJrliJrlpIfku73liLAgJyArIGpzb24uZmlsZSArICc8L2xpPicpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuc2hvdygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmRlbCcpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgdXJsOiAiL2NtZC9iYWNrdXAvP2ZpbGU9IiArICQodGhpcykuYXR0cigicmVsIiksDQogICAgICAgICAgICAgICAgdHlwZTogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGF0KS5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcIt5vmyUcHAABHBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxjbWRcbG9nLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSI+6ZSZ6K+v5pel5b+XPC9oMT4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9ImxvZy1saXN0Ij57e3JhbmdlIC5Mb2dzfX0NCiAgICA8bGkgY2xhc3M9ImxvZyByZWxhdGl2ZSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGlubGluZS1ibG9jayI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSBpbmxpbmUtYmxvY2siPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHByZSBjbGFzcz0idGV4dCI+e3suVGV4dH19PC9wcmU+DQogICAgICAgIDxhIGNsYXNzPSJyZW1vdmUgYWJzb2x1dGUiIGhyZWY9Ii9jbWQvbG9ncy8/ZmlsZT17ey5OYW1lfX0iPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlbW92ZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLnoa7orqTliKDpmaTorrDlvZUiKSkgew0KICAgICAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZToiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiR0aGlzLmF0dHIoImhyZWYiKSwNCiAgICAgICAgICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwjesGBYGQQAABkEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAAB2aWV3XGFkbWluXGNtZFxtZXNzYWdlLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSI+5raI5oGv6K6w5b2VPC9oMT4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9Im1lc3NhZ2UtbGlzdCI+e3tyYW5nZSAuTWVzc2FnZXN9fQ0KICAgIDxsaSBjbGFzcz0ibWVzc2FnZSByZWxhdGl2ZSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxkaXYgY2xhc3M9ImRhdGEiPnt7SHRtbCAuRGF0YX19PC9kaXY+DQogICAgPC9saT57e2VuZH19DQo8L3VsPlBLBwjJmMidRgEAAEYBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXGNvbW1lbnRzLmh0bWw8ZGl2IGlkPSJjb21tZW50LWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAiPnt7cmFuZ2UgLkNvbW1lbnRzfX0NCiAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSJ7ey5BdXRob3J9fSIvPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtZW1haWwiPnt7LkVtYWlsfX08L3NwYW4+e3tpZiAuR2V0Q29udGVudH19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5Ae3suR2V0Q29udGVudC5UaXRsZX19PC9zcGFuPnt7ZWxzZX19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5A5peg5pWIPC9zcGFuPnt7ZW5kfX17e2lmIG5lIC5TdGF0dXMgImFwcHJvdmVkIn19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtY2hlY2siIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWuoeaguCI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45LitPC9hPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Zue5aSNIj48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtZGVsIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaQiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pnt7ZW5kfX0NCiAgICA8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGFjdGlvbj0iL2FkbWluL2NvbW1lbnRzLyIgY2xhc3M9ImZvcm0gY2xlYXIgbGVmdCIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQgbGVmdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiIGlkPSJjb21tZW50LXN1Ym1pdCI+5Zue5aSN6K+E6K66PC9idXR0b24+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJjb21tZW50LWNsb3NlIj7lhbPpl63lm57lpI08L2J1dHRvbj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIGlkPSJjb21tZW50LXBhcmVudCIgbmFtZT0icGlkIi8+DQogICAgPC9mb3JtPg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6K+E6K665bCG5L2/55u45YWz5YaF5a655peg5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5Yig6Zmk5aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtY2hlY2snKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5a6h5qC45ZCO5q2k5L2c6ICF5bCG5LiN5YaN5qCH6K6w5a6h5qC4ISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAicHV0IiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlrqHmoLjlpLHotKUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuYy1yZXBseScpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC0nK2lkKS5hcHBlbmQoJCgnI2NvbW1lbnQtZm9ybScpLmRldGFjaCgpLnNob3coKSk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suWbnuWkjSIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9jb21tZW50cy8iOw0KICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgYWxlcnQoIuWbnuWkjeWksei0pSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtY2xvc2UnKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuaGlkZSgpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIQJgI7+0PAADtDwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAdmlld1xhZG1pblxlZGl0X2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiIHZhbHVlPSJ7ey5BcnRpY2xlLlRpdGxlfX0iLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij57e0h0bWwgLkFydGljbGUuVGV4dH19PC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiIHZhbHVlPSJ7ey5BcnRpY2xlLlNsdWd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuagh+etvjwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0idGFnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWciIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTmoIfnrb4iIHZhbHVlPSJ7ey5BcnRpY2xlLlRhZ1N0cmluZ319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuQXJ0aWNsZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLkFydGljbGUuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLkFydGljbGUuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCEuc6fFtDQAAbQ0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcYWRtaW5cZWRpdF9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIiB2YWx1ZT0ie3suUGFnZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5QYWdlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suUGFnZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCJ7e2lmIGVxIC5QYWdlLlN0YXR1cyAicHVibGlzaCJ9fSBzZWxlY3RlZHt7ZW5kfX0+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQie3tpZiBlcSAuUGFnZS5TdGF0dXMgImRyYWZ0In19IHNlbGVjdGVke3tlbmR9fT7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0NvbW1lbnQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzTGlua2VkIGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuW3suS/neWtmO+8jOWOu+afpeeci++8n+i/mOaYr+e7p+e7ree8lui+kSIpKSB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9wYWdlcy8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcItngyMuMNAADjDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxmaWxlcy5odG1sPHVsIGlkPSJmaWxlcy1saXN0IiBjbGFzcz0iYWRtaW4gY29udGFpbmVyOTYwIHBhZ2VyIj4NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlcy1idG4tbGkiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgIDwvbGk+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaSBjbGFzcz0iZmlsZSIgaWQ9ImZpbGUte3suSWR9fSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ1cGxvYWQtdGltZSI+e3tEYXRlSW50NjQgLlVwbG9hZFRpbWUgIk1NLkREIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iL3t7LlVybH19IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Ii97ey5Vcmx9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmstc3F1YXJlIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIGZhZGUtb3V0IiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaTpmYTku7YiPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQogICAge3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9maWxlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIGluaXRVcGxvYWQoIiNhdHRhY2gtc2hvdyIpOw0KICAgICAgICAkKCIuZGVsIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWIoOmZpOmZhOS7tuebuOWFs+mTvuaOpeS8muWkseaViCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgInVybCI6ICIvYWRtaW4vZmlsZXMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgInN1Y2Nlc3MiOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNmaWxlLScraWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIYsWb+uwGAADsBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAdmlld1xhZG1pblxob21lLmh0bWw8ZGl2IGNsYXNzPSJhZG1pbiBjb250YWluZXIgY2xlYXIiIGlkPSJkYXNoYm9hcmQiPg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS01IGxlZnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ3ZWxjb21lIj4NCiAgICAgICAgICAgIDxoND5XZWxjb21lPC9oND4NCiAgICAgICAgICAgIDxwPuasoui/juWbnuadpe+8jCA8c3Ryb25nPnt7LlVzZXIuTmlja319PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0icXVpY2stbGluayI+DQogICAgICAgICAgICA8aDQ+5b+r6YCf6ZO+5o6lPC9oND4NCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mkrDlhpnmlofnq6A8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLyI+5p+l55yL5ZKM5a6h5qC46K+E6K66PC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyI+5L+u5pS56YWN572uPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wcm9maWxlLyI+5pu05paw5Liq5Lq66LWE5paZPC9hPjwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtMiBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHkiPg0KICAgICAgICAgICAgPGg0PuacgOaWsOa0u+WKqDwvaDQ+e3tyYW5nZSAuTWVzc2FnZXN9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXNnIHJlbGF0aXZlIHt7LlR5cGV9fSI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhIj57e0h0bWwgLkRhdGF9fTwvZGl2Pg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJyZWFkIGFic29sdXRlIiBocmVmPSIvYWRtaW4vbWVzc2FnZS9yZWFkP2lkPXt7LklkfX0iIHJlbD0ie3suSWR9fSI+PGkgY2xhc3M9ImZhIGZhLWNoZWNrIj48L2k+PC9hPg0KICAgICAgICAgICAgPC9kaXY+e3tlbmR9fXt7aWYgbHQgKGxlbiAuTWVzc2FnZXMpIDF9fQ0KICAgICAgICAgICAgPHA+5rKh5pyJ5paw55qE5rS75Yqo5L+h5oGvPC9wPg0KICAgICAgICAgICAge3tlbmR9fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtNCByaWdodCI+DQogICAgICAgIDxkaXYgY2xhc3M9InN0YXRzIj4NCiAgICAgICAgICAgIDxoND7mlbDmja7nu5/orqE8L2g0Pg0KICAgICAgICAgICAgPHA+5bey57uP5Y+R5biD5paH56ugIDxzcGFuIGNsYXNzPSJsYmwgbGJsLXJlZCI+e3suU3RhdGlzLkFydGljbGVzfX08L3NwYW4+IOevh++8jA0KICAgICAgICAgICAg6aG16Z2iIDxzcGFuIGNsYXNzPSJsYmwgbGJsLXJlZCI+e3suU3RhdGlzLlBhZ2VzfX08L3NwYW4+IOS4qu+8jCA8YnIvPg0KICAgICAgICAgICAg5pS25Yiw6K+E6K66IDxzcGFuIGNsYXNzPSJsYmwgbGJsLWJsdWUiPnt7LlN0YXRpcy5Db21tZW50c319PC9zcGFuPiDmrKHvvIwNCiAgICAgICAgICAgIOS4iuS8oCA8c3BhbiBjbGFzcz0ibGJsIGxibC1ncmVlbiI+e3suU3RhdGlzLkZpbGVzfX08L3NwYW4+IOS4qumZhOS7tjwvcD4NCiAgICAgICAgICAgIDxwPuW9k+WJjeeoi+W6j+eJiOacrO+8mjxzdHJvbmc+e3suU3RhdGlzLlZlcnNpb259fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im9mZmljZSI+DQogICAgICAgICAgICA8aDQ+5a6Y5pa55raI5oGvPC9oND4NCiAgICAgICAgICAgIDxwPui/mOayoeaciea2iOaBrzwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQo8L2Rpdj4NCjxzY3JpcHQ+DQogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsNCiAgICAgICAkKCIucmVhZCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgJC5wb3N0KCR0aGlzLmF0dHIoImhyZWYiKSxmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgJHRoaXMucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgfSk7DQogICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICB9KTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwj0lNzmIAkAACAJAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXGxvZ2luLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+55m75b2VIC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+DQogICAgICAgICNsb2dpbi1mb3Jtew0KICAgICAgICAgICAgd2lkdGg6IDI4MHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG87DQogICAgICAgIH0NCiAgICAgICAgI2xvZ2luLWZvcm0gaDF7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4Ow0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGZvcm0gaWQ9ImxvZ2luLWZvcm0iIGNsYXNzPSJmb3JtIGZvcm0tdmVydGljYWwiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0IiBuYW1lPSJsb2dpbi1mb3JtIj4NCiAgICA8aDE+55m75b2VIC0gRnhoLkdvPC9oMT4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nlKjmiLflkI08L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InVzZXIiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idXNlciIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0icGFzc3dvcmQiPueUqOaIt+WvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IiBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InBhc3N3b3JkIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJwYXNzd29yZC1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPueZuyDlvZU8L2J1dHRvbj4NCiAgICA8c3BhbiBjbGFzcz0idGlwIj7pu5jorqTorrDkvY/nmbvpmYYz5aSpPC9zcGFuPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jZG4uc3RhdGljZmlsZS5vcmcvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS5mb3JtLzMuNDYvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi92YWxpZGF0ZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJsb2dpbi1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJ1c2VyIiwicnVsZXMiOiJhbHBoYV9udW1lcmljfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6InBhc3N3b3JkIiwicnVsZXMiOiJyZXF1aXJlZHxtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjbG9naW4tZm9ybScpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIueZu+W9lemUmeivr++8jOivt+ajgOafpeeUqOaIt+aIluWvhueggSIpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwjW4HhikAgAAJAIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXHBhZ2VzLmh0bWw8dWwgaWQ9ImFydGljbGUtbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+DQogICAgPGxpPg0KICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIiBocmVmPSIvYWRtaW4vcGFnZS93cml0ZS8iPua3u+WKoOmhtemdojwvYT4NCiAgICA8L2xpPnt7cmFuZ2UgLlBhZ2VzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+PGg0IGNsYXNzPSJpbmxpbmUtYmxvY2sgdGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LlRpdGxlfX08L2E+PC9oND57e2lmIG5lIC5TdGF0dXMgInB1Ymxpc2gifX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxibCBzdGF0dXMiPuiNieeovzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJzbHVnIj57ey5TbHVnfX08L3NwYW4+e3tpZiBlcSAuSXNDb21tZW50IGZhbHNlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImlzLWNvbW1lbnQiPjxpIGNsYXNzPSJmYS1jb21tZW50cyBmYSI+PC9pPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudCI+e3suQ29tbWVudE51bX19IC8ge3suSGl0c319PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vcGFnZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk6aG16Z2i5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9wYWdlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIqCtGRpwGAACcBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxwYXNzd29yZC5odG1sPGZvcm0gaWQ9InBhc3N3b3JkIiBjbGFzcz0iZm9ybSBmb3JtLWFsaWduIGNsZWFyIiBhY3Rpb249IiMiIG5hbWU9InBhc3N3b3JkLWZvcm0iIG1ldGhvZD0icG9zdCI+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ib2xkIj7ml6flr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im9sZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im9sZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPumqjOivgeaXp+WvhueggTwvc3Bhbj48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ib2xkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im5ldyI+5paw5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJuZXciIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJuZXciIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuZXctaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0iY29uZmlybSI+56Gu6K6k5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImNvbmZpcm0taW52YWxpZCI+56Gu6K6k5a+G56CB5LiN5Yy56YWNPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInBhc3N3b3JkLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6Im9sZCIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmV3IiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJjb25maXJtIiwicnVsZXMiOiJyZXF1aXJlZHxtYXRjaGVzW25ld10ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwYXNzd29yZCcpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIbnEngU8HAABPBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xhZG1pblxwbHVnaW4uaHRtbDx1bCBpZD0icGx1Z2luLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPnt7cmFuZ2UgLlBsdWdpbnN9fQ0KICAgIDxsaSBjbGFzcz0iY2xlYXIiPnt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQgbGJsIGFjdGl2ZSBsYmwtZ3JlZW4iPiZuYnNwOzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGxlZnQiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24gbGVmdCI+e3suVmVyc2lvbn19PC9zcGFuPnt7aWYgLkhhc1NldHRpbmd9fQ0KICAgICAgICA8YSBjbGFzcz0ic2V0dGluZyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy97ey5LZXl9fS8iPumAiemhuTwvYT57e2VuZH19e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8YSBjbGFzcz0iZGVhY3RpdmF0ZSBsYmwgbGJsLXJlZCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5bCB5Y2wPC9hPnt7ZWxzZX19DQogICAgICAgIDxhIGNsYXNzPSJhY3RpdmF0ZSBsYmwgbGJsLWJsdWUgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPua/gOa0uzwvYT57e2VuZH19DQogICAgICAgIDxwIGNsYXNzPSJkZXNjIGxlZnQiPnt7LkRlc2N9fTwvcD4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIuZGVhY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJkZWFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoea/gOa0uyIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlsIHljbDlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgiLmFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoeWwgeWNsCIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLmv4DmtLvlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCE9wWaFiBgAAYgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAHZpZXdcYWRtaW5ccGx1Z2luX3NldHRpbmcuaHRtbDxmb3JtIGlkPSJwbHVnaW4tc2V0dGluZy1mb3JtIiBjbGFzcz0iZm9ybSBjb250YWluZXI5NjAgYWRtaW4iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICB7e0h0bWwgLkZvcm19fQ0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICAgICAgICAkKCcjcGx1Z2luLXNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIjoi5L+d5a2Y5aSx6LSlIik7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwg0K3PVOAEAADgBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHByb2ZpbGUuaHRtbDxmb3JtIGlkPSJwcm9maWxlIiBjbGFzcz0iYWRtaW4gZm9ybSBjbGVhciBmb3JtLWFsaWduIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0icHJvZmlsZS1mb3JtIj4NCiAgICA8ZGl2IGNsYXNzPSJhdmF0YXIgZ3JpZC0xLTQgbGVmdCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7ey5Vc2VyLkF2YXRhcn19IiBhbHQ9Int7LlVzZXIuTmlja319IiBjbGFzcz0iZmllbGQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBmaWVsZCBpbmxpbmUtYmxvY2siPuWktOWDj+eUsSA8YSBocmVmPSJodHRwOi8vZ3JhdmF0YXIuY29tLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm8tZm9sbG93Ij5HcmF2YXRhcjwvYT4g5o+Q5L6bPC9zcGFuPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tcmVkIGlubGluZS1ibG9jayIgaHJlZj0iL2FkbWluL3Bhc3N3b3JkLyI+5L+u5pS55a+G56CBPC9hPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaW5mbyByaWdodCBncmlkLTMtNCI+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nmbvlvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiB2YWx1ZT0ie3suVXNlci5OYW1lfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+55m75b2V55qE55So5oi35ZCNPC9zcGFuPjxici8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ibmljayI+5pi156ewPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ibmljayIgdHlwZT0idGV4dCIgbmFtZT0ibmljayIgdmFsdWU9Int7LlVzZXIuTmlja319IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuaYvuekuuWcqOWJjeWPsOeahOensOWRvDwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5pY2staW52YWxpZCI+5pi156ew6ZW/5bqmMi0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZW1haWwiPumCrueusTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImVtYWlsIiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHZhbHVlPSJ7ey5Vc2VyLkVtYWlsfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6IGU57O76YKu566x77yM5Y2B5YiG6YeN6KaB77yBPC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iZW1haWwtaW52YWxpZCI+6YKu566x5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1cmwiPue9keWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVybCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHZhbHVlPSJ7ey5Vc2VyLlVybH19IiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1cmwtaW52YWxpZCI+572R5Z2A5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBiaW8iIG5hbWU9ImJpbyIgaWQ9ImJpbyI+e3suVXNlci5CaW99fTwvdGV4dGFyZWE+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwcm9maWxlLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmljayIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiZW1haWwiLCJydWxlcyI6InZhbGlkX2VtYWlsIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJ1cmwiLCJydWxlcyI6InZhbGlkX3VybCJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Byb2ZpbGUnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCB+PoV8CDAAAAgwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cc2V0dGluZy5odG1sPHVsIGlkPSJzZXR0aW5nLW5hdiIgY2xhc3M9ImNvbnRhaW5lciB0ZXh0LWNlbnRlciI+DQogICAgPGxpPjxhIGhyZWY9IiNnZW5lcmFsIj7ln7rmnKw8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iI25hdiI+5a+86IiqPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9IiNjdXN0b20iPuiHquWumuS5iTwvYT48L2xpPg0KPC91bD4NCjxkaXYgaWQ9InNldHRpbmctcGFuZWxzIiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICA8Zm9ybSBpZD0ic2V0dGluZy1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nLyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS11cmwiPuermeeCueWcsOWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdXJsIiBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InNpdGVfdXJsIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdXJsYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS10aXRsZSI+56uZ54K55Li75qCH6aKYPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aXRsZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1zdWItdGl0bGUiPuermeeCueWJr+agh+mimDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtc3ViLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3N1Yl90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3N1Yl90aXRsZWB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUta2V5d29yZHMiPk1ldGHlhbPplK7lrZc8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLWtleXdvcmRzIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2tleXdvcmRzIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1kZXNjIj5NZXRh56uZ54K55LuL57uNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1kZXNjIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2Rlc2NyaXB0aW9uIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iYXJ0aWNsZS1zaXplIj7ljZXpobXmlofnq6DliJfooajmlbA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJhcnRpY2xlLXNpemUiIGNsYXNzPSJpcHQiIHR5cGU9Im51bWJlciIgbmFtZT0iYXJ0aWNsZV9zaXplIiB2YWx1ZT0ie3tTZXR0aW5nIGBhcnRpY2xlX3NpemVgfX0iIG1heD0iMTAiIG1pbj0iMyIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGhlbWUiPuS4u+mimOebruW9leWQjTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdGhlbWUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfdGhlbWUiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdGhlbWVgfX0iLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS4u+mimOWNs+aMh+WQkeeahOaooeadv+ebruW9le+8jOWFt+S9k+WGheWuueivt+WPguiAgyBkZWZhdWx0IOebruW9le+8iOWNsyBkZWZhdWx0IOS4u+mimO+8iTwvc3Bhbj4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNpdGVfdGhlbWVfZGVmIiB2YWx1ZT0iZGVmYXVsdCIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImdvLW1hcmtkb3duIj5Hb+a4suafk01hcmtkb3duPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iZ28tbWFya2Rvd24iIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9ImVuYWJsZV9nb19tYXJrZG93biIgdmFsdWU9Int7U2V0dGluZyBgZW5hYmxlX2dvX21hcmtkb3duYH19Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7pu5jorqTlhbPpl63vvIzkvb/nlKjliY3nq69tYXJrZWQuanPmuLLmn5PvvIzloat0cnVl5pe25byA5ZCvPC9zcGFuPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duX2RlZiIgdmFsdWU9ImZhbHNlIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHA+DQogICAgICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Zvcm0+DQogICAgPGZvcm0gaWQ9InNldHRpbmctbmF2LWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybSBmb3JtLWFsaWduIHNldHRpbmctcGFuZWwiIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvbmF2LyIgbWV0aG9kPSJwb3N0Ij57e3JhbmdlIC5OYXZpZ2F0b3JzfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7mjpLluo88L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgb3JkZXIiIHR5cGU9Im51bWJlciIgbmFtZT0ib3JkZXIiIHZhbHVlPSJ7ey5PcmRlcn19Ii8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPuaWh+acrDwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCB0ZXh0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0ZXh0IiB2YWx1ZT0ie3suVGV4dH19IiByZXF1aXJlZD0icmVxdWlyZWQiLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5qCH6aKYPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgdmFsdWU9Int7LlRpdGxlfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+6ZO+5o6lPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IGxpbmsiIHR5cGU9InRleHQiIG5hbWU9ImxpbmsiIHZhbHVlPSJ7ey5MaW5rfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiIHJlbD0iI25hdi1pdGVtIj7mt7vliqDkuIDpobk8L2E+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0ibmF2LWl0ZW0iPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5o6S5bqPPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IG9yZGVyIiB0eXBlPSJudW1iZXIiIG5hbWU9Im9yZGVyIiB2YWx1ZT0iMSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5paH5pysPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRleHQiIHR5cGU9InRleHQiIG5hbWU9InRleHQiIHZhbHVlPSIiIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5qCH6aKYPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgdmFsdWU9IiIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+6ZO+5o6lPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IGxpbmsiIHR5cGU9InRleHQiIG5hbWU9ImxpbmsiIHZhbHVlPSIiIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9zY3JpcHQ+DQogICAgPC9mb3JtPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWN1c3RvbS1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nL2N1c3RvbS8iIG1ldGhvZD0icG9zdCI+e3tyYW5nZSAkaywkdiA6PSAuQ3VzdG9tfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHZhbHVlPSJ7eyRrfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7JHZ9fSIvPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiIHJlbD0iI2N1c3RvbS1pdGVtIj7mt7vliqDkuIDpobk8L2E+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kvb/nlKjlh73mlbDoh6rlrprkuYnphY3nva7vvIzpnIDopoHliqDliY3nvIAiY18i77yM5aaCR2V0U2V0dGluZygiY19rZXkiKTwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjdXN0b20taXRlbSI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSLlrZfmrrXlkI0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSLlrZfmrrXlgLwiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvc2NyaXB0Pg0KICAgIDwvZm9ybT4NCjwvZGl2Pg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnl0b29scy8xLjIuNy9qcXVlcnkudG9vbHMubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNzZXR0aW5nLW5hdicpLnRhYnMoIi5zZXR0aW5nLXBhbmVsIik7DQogICAgICAgICQoJy5zZXR0aW5nLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIiA6IGpzb24ubXNnKTsNCiAgICAgICAgfSkub24oImNsaWNrIiwiLmFkZCIsZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLnByZXBlbmQoJCgkKHRoaXMpLmF0dHIoInJlbCIpKS5odG1sKCkpOw0KICAgICAgICB9KS5vbigiY2xpY2siLCIuZGVsIixmdW5jdGlvbihlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGlmKGNvbmZpcm0oIuimgeWIoOmZpOi/memhue+8nyIpKXsNCiAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcICEOLExAZAAAQGQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xhZG1pblx3cml0ZV9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ5paH56ug5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5qCH562+PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJ0YWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InRhZyIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOagh+etviIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoIj7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCI+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgIDwvcD4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIvsp0fCEMAAAhDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblx3cml0ZV9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ6aG16Z2i5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL3BhZ2VzLyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCHJbVWl8DAAAfAwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHZpZXdcYWRtaW4ubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPnt7LlRpdGxlfX0gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvYWRtaW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgICA8aDMgY2xhc3M9ImxvZ28gbGVmdCI+RnhoLkdvIC0gPHNwYW4+e3suVGl0bGV9fTwvc3Bhbj48L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJuYXYgbGVmdCByZWxhdGl2ZSI+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGFzaGJvYXJkIGxlZnQiIGhyZWY9Ii9hZG1pbi8iPjxpIGNsYXNzPSJmYSBmYS1kYXNoYm9hcmQiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iYXJ0aWNsZSBsZWZ0IiBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvIiB0aXRsZT0i5paH56ugIj48aSBjbGFzcz0iZmEgZmEtY29weSI+PC9pPjwvYT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGFnZXMgbGVmdCIgaHJlZj0iL2FkbWluL3BhZ2VzLyIgdGl0bGU9IueLrOeri+mhtemdoiI+PGkgY2xhc3M9ImZhIGZhLXBhc3RlIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImNvbW1lbnRzIGxlZnQiIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iIHRpdGxlPSLor4TorroiPjxpIGNsYXNzPSJmYSBmYS1jb21tZW50cyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJmaWxlcyBsZWZ0IiBocmVmPSIvYWRtaW4vZmlsZXMvIiB0aXRsZT0i5aqS5L2T5paH5Lu2Ij48aSBjbGFzcz0iZmEgZmEtaW5ib3giPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGx1Z2lucyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy8iIHRpdGxlPSLmj5Lku7YiPjxpIGNsYXNzPSJmYSBmYS1nZWFycyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyIgdGl0bGU9Iuiuvue9riI+PGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPjwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxhIGNsYXNzPSJvdXQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii9sb2dvdXQvIiB0aXRsZT0i6YCA5Ye6Ij48aSBjbGFzcz0iZmEgZmEtcG93ZXItb2ZmIGZhLWxnIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0icHJvZmlsZSBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIiB0aXRsZT0i5oiRIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImZyb250IG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Iuafpeeci+e9keermSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+DQogICAgPC9kaXY+DQo8L2Rpdj4NCntAQ29udGVudH0NCjxkaXYgaWQ9ImZvb3RlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgIDxwIGNsYXNzPSJsaW5rcyB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgIDxhIGNsYXNzPSJzdGF0IiBocmVmPSIvY21kL21lc3NhZ2UvIj7mtojmga88L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJiYWNrdXAiIGhyZWY9Ii9jbWQvYmFja3VwLyI+5aSH5Lu9PC9hPg0KICAgICAgICAgICA8YSBjbGFzcz0iZXJyIiBocmVmPSIvY21kL2xvZ3MvIj7ml6Xlv5c8L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJzeXMiIGhyZWY9IiMiPuezu+e7nzwvYT4NCiAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJjcCB0ZXh0LWNlbnRlciI+UHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9wPg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCNn4qlTBCAAAwQgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAADwAAAHZpZXdcY21kLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT57ey5UaXRsZX19IC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NtZC5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5IGNsYXNzPSJjbWQiPg0Ke0BDb250ZW50fQ0KPHAgY2xhc3M9ImJhY2siPjxhIGhyZWY9ImphdmFzY3JpcHQ6aGlzdG9yeS5iYWNrKCkiPkJhY2s8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwgKfcgAzgEAAM4BAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAB2aWV3XGRlZmF1bHQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcZGVmYXVsdFxhcnRpY2xlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIge3suQXJ0aWNsZS5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj4NCiAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImF1dGhvciBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+e3suVXNlci5OaWNrfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj57e2lmIC5UYWdTdHJpbmd9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS10YWdzIj48L2k+e3suVGFnU3RyaW5nfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZpZXdzIGlubGluZS1ibG9jayByaWdodCI+6ZiF6K+7Jm5ic3A7Jm5ic3A7PHNwYW4+e3suSGl0c319PC9zcGFuPiZuYnNwOyZuYnNwO+asoTwvc3Bhbj4NCiAgICAgICAgPC9wPnt7ZW5kfX0NCiAgICA8L2FydGljbGU+DQogICAge3tIdG1sIC5Db21tZW50SHRtbH19DQo8L2Rpdj5QSwcIwLg0iLcDAAC3AwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xkZWZhdWx0XGNvbW1lbnQuaHRtbDxkaXYgaWQ9ImNvbW1lbnQiPg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiBsZWZ0Ij4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIGMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj57e2VuZH19e3tlbmR9fQ0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtc2hvdyIgY2xhc3M9InRleHQtY2VudGVyIj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gZW5hYmxlIj7lj5Hooajor4Torro8L2J1dHRvbj57e2Vsc2V9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXJlZCI+5pys5paH5YWz6Zet5LqG6K+E6K66PC9idXR0b24+e3tlbmR9fQ0KICAgIDwvZGl2Pnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBjbGFzcz0iaGlkZSBjbGVhciB0ZXh0LWNlbnRlciBmb3JtIiBhY3Rpb249Ii9jb21tZW50L3t7LkNvbnRlbnQuSWR9fS8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mbyBsZWZ0IHRleHQtcmlnaHQiPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0gYy1hdmF0YXItZmllbGQiPg0KICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIG51bGwiIHNyYz0iL3N0YXRpYy9pbWcvc2l0ZS5wbmciIGFsdD0iIiBpZD0iY29tbWVudC1hdmF0YXIiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibm90LW1lIGJsb2NrIiBocmVmPSIjIj7kuI3mmK/miJE/PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvLWZpZWxkcyBoaWRlIj4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuensOWRvCIgaWQ9ImNvbW1lbnQtYXV0aG9yIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpgq7nrrEiIGlkPSJjb21tZW50LWVtYWlsIi8+IDwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0idXJsIiBwbGFjZWhvbGRlcj0i572R5Z2AIiBpZD0iY29tbWVudC11cmwiLz48L3A+DQogICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjb21tZW50LXBhcmVudCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgbmFtZT0icGlkIi8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtY29udGVudCB0ZXh0LWxlZnQgcmlnaHQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGNhbmNlbC1yZXBseSIgdHlwZT0iYnV0dG9uIj7lj5bmtojlm57lpI08L2J1dHRvbj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9mb3JtPnt7ZW5kfX0NCiAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjb21tZW50LXRwbCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSIiIGFsdD0iIi8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSBjLWF1dGhvciIgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPk5vdzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0iIj48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNoZWNrIj48aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUiPjwvaT7lrqHmoLjkuK3vvIzliLfmlrDlkI7pmpDol488L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+PC9zZWN0aW9uPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9zY3JpcHQ+DQo8L2Rpdj5QSwcIb65vVOIMAADiDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAdmlld1xkZWZhdWx0XGVycm9yL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAB2aWV3XGRlZmF1bHRcZXJyb3JcZXJyb3IuaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7plJnor6/mj5DnpLo8L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT5ib2R5e21hcmdpbjogNDBweCAxMDBweH08L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8aDI+5oKo6K6/6Zeu55qE6aG16Z2i5q2j5Zyo5omT556M552hPC9oMj48YnIvPg0KPHA+56iL5bqP5ZGY5q2j5Zyo5Yqq5Yqb5ZSk6YaS77yM6K+356iN5YCZ6K6/6ZeuLi4uPC9wPg0KPHA+PGEgaHJlZj0iLyI+6L+U5Zue6aaW6aG1PC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIE4RGUngBAAB4AQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAdmlld1xkZWZhdWx0XGVycm9yXG5vdGZvdW5kLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouemu+WutuWHuui1sDwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWbm+WkhOWvu+aJvu+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCJD51MB1AQAAdQEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcZGVmYXVsdFxob21lLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3Mvc3R5bGUuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRpdGxlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0gLSBSU1MgMi4wIiBocmVmPSIvcnNzLnhtbCIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGhlYWRlciBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7e1NldHRpbmcgYGNfaG9tZV9hdmF0YXJgfX0iIGFsdD0ic2l0ZSIgaWQ9ImhlYWRlci1pbWciLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCI+PGEgaHJlZj0iLyI+e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC9hPjwvaDE+DQogICAgICAgIDxoNCBpZD0iaGVhZGVyLXN1YiI+e3tTZXR0aW5nICJzaXRlX3N1Yl90aXRsZSJ9fTwvaDQ+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxuYXYgaWQ9Im5hdiIgY2xhc3M9ImNsZWFyIHRleHQtY2VudGVyIj4NCiAgICA8dWw+e3tyYW5nZSBOYXZpZ2F0b3J9fQ0KICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGV4dH19PC9hPjwvbGk+e3tlbmR9fQ0KICAgIDwvdWw+DQo8L25hdj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxwPg0KICAgICAgICA8YSBjbGFzcz0id2VpYm8iIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfd2VpYm9gfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtd2VpYm8iPjwvaT5XZWlibzwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImdpdCIgaHJlZj0ie3tTZXR0aW5nIGBjX2Zvb3Rlcl9naXRodWJgfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZ2l0aHViIj48L2k+R2l0SHViPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZW1haWwiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZW1haWxgfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZW52ZWxvcGUiPjwvaT5FbWFpbDwvYT4NCiAgICAgICAgPGEgY2xhc3M9InJzcyIgaHJlZj0iL3Jzcy54bWwiIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtcnNzIj48L2k+UlNTPC9hPnt7U2V0dGluZyBgY19mb290ZXJfZ2FgIHwgSHRtbH19DQogICAgPC9wPg0KICAgIDxzcGFuPkdvIMKpIDIwMTQgQWxsIHJpZ2h0cyByZXNlcnZlZC4gUHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9zcGFuPg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcI5rtrtDcJAAA3CQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xkZWZhdWx0XGluZGV4Lmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5JZH19Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBsZWZ0IHRleHQtY2VudGVyIj57e2lmIGd0IC5Db21tZW50TnVtIDB9fQ0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PHN0cm9uZz57ey5Db21tZW50TnVtfX0g4oSDPC9zdHJvbmc+PC9hPjwvcD57e2VuZH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyI+PGkgY2xhc3M9ImZhIGZhLWV5ZSI+PC9pPjxzdHJvbmc+e3suSGl0c319IOKEiTwvc3Ryb25nPjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyYXkgdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT48c3Ryb25nPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1haW4iPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuU3VtbWFyeX19PC9zZWN0aW9uPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0aG9yIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT57ey5Vc2VyLk5pY2t9fTwvc3Bhbj57e2VuZH19e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXRhZ3MiPjwvaT57ey5UYWdTdHJpbmd9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlubGluZS1ibG9jayByZWFkIHJpZ2h0IiBocmVmPSJ7ey5MaW5rfX0iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT7nu6fnu63pmIXor7s8L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvYXJ0aWNsZT57e2VuZH19DQogICAgPGRpdiBjbGFzcz0icGFnZXIgdGV4dC1jZW50ZXIiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxhIGhyZWY9Ii9wL3t7Ln19LyIgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPnt7Ln19PC9hPnt7ZW5kfX0NCiAgICA8L2Rpdj4NCjwvZGl2PlBLBwipLoBo5wUAAOcFAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGRlZmF1bHRccGFnZS5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIiBpZD0iYXJ0aWNsZS1JZCI+e3t3aXRoIC5QYWdlfX0NCiAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idmlld3MgaW5saW5lLWJsb2NrIHJpZ2h0Ij7pmIXor7smbmJzcDsmbmJzcDs8c3Bhbj57ey5IaXRzfX08L3NwYW4+Jm5ic3A7Jm5ic3A75qyhPC9zcGFuPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgIDwvYXJ0aWNsZT4NCjwvZGl2PlBLBwhcAM7dBAMAAAQDAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAB2aWV3XGxpbmcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xhcnRpY2xlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIgYXJ0aWNsZS1zaW5nbGUgcmVsYXRpdmUge3suQXJ0aWNsZS5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIGFic29sdXRlIj57ey5IaXRzfX08L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJ0aW1lLWluZm8iPnt7aWYgLlVzZXJ9fTxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDt7e2VuZH195Y+R6KGo5LqOJm5ic3A7Jm5ic3A7Jm5ic3A7e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIllZWVkg5bm0IE1NIOaciCBERCDml6UifX08L3A+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPuagh+etvu+8mnt7LlRhZ1N0cmluZ319PC9zcGFuPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCBrCnX1tAwAAbQMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0icmVsYXRpdmUiPg0KICAgIDxoNCBpZD0iY29tbWVudC10aXRsZSI+5paH56ug6K+E6K66PC9oND4NCiAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+e3suQ29udGVudC5Db21tZW50TnVtfX08L2E+PC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIGNsZWFyIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkgbGJsIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LklkfX0iPuWbnuWkjTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHA+PGEgY2xhc3M9ImMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9ImMtdGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NIOaciCBERCDml6UgSEgg5pe2IG1tIOWIhiJ9fTwvc3Bhbj48L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2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PTEuMCwgdXNlci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvbGluZy5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIgY2xhc3M9ImxlZnQiLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCIgY2xhc3M9ImxlZnQiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiIGNsYXNzPSJsZWZ0Ij57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4NCiAgICAgICAgPG5hdiBpZD0ibmF2IiBjbGFzcz0icmlnaHQiPg0KICAgICAgICAgICAgPHVsPnt7cmFuZ2UgTmF2aWdhdG9yfX0NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGV4dH19PC9hPjwvbGk+e3tlbmR9fQ0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9uYXY+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCBjbGVhciI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0Ij5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0icmlnaHQiPlByb3VkbHkgcHVibGlzaGVkIHdpdGggRnhoLkdvLjwvc3Bhbj4NCiAgICA8L2Rpdj4NCiAgICA8YSBpZD0iZ28tdG9wIiBocmVmPSIjIiBjbGFzcz0ibGJsIGhpZGUgbGJsLWJsdWUiIHRpdGxlPSLlm57liLDpobbpg6giPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy11cCBmYS1sZyI+PC9pPjwvYT4NCiAgICB7e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KPC9mb290ZXI+DQo8c2Ny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" \ No newline at end of file diff --git a/app/handler/admin.go b/app/handler/admin.go index d1120cf..3b91315 100644 --- a/app/handler/admin.go +++ b/app/handler/admin.go @@ -260,8 +260,9 @@ func AdminSetting(context *GoInk.Context) { } context.Layout("admin") context.Render("admin/setting", map[string]interface{}{ - "Title": "配置", - "Custom": model.GetCustomSettings(), + "Title": "配置", + "Custom": model.GetCustomSettings(), + "Navigators": model.GetNavigators(), }) } @@ -280,6 +281,17 @@ func CustomSetting(context *GoInk.Context) { return } +func NavigatorSetting(context *GoInk.Context) { + order := context.Strings("order") + text := context.Strings("text") + title := context.Strings("title") + link := context.Strings("link") + model.SetNavigators(order, text, title, link) + Json(context, true).End() + context.Do("setting_saved") + return +} + func AdminComments(context *GoInk.Context) { if context.Method == "DELETE" { id := context.Int("id") diff --git a/app/model/message.go b/app/model/message.go index b98918b..69889f4 100644 --- a/app/model/message.go +++ b/app/model/message.go @@ -135,8 +135,8 @@ func generateCommentMessage(co interface{}) string { } func StartMessageTimer() { - time.AfterFunc(time.Duration(1)*time.Hour, func() { - println("write messages in 1 hour timer") + time.AfterFunc(time.Duration(90)*time.Minute, func() { + println("write messages in 1.5 hour timer") RecycleMessages() SyncMessages() StartMessageTimer() diff --git a/app/model/setting.go b/app/model/setting.go index 7de8394..d853c33 100644 --- a/app/model/setting.go +++ b/app/model/setting.go @@ -1,8 +1,21 @@ package model -import "strings" +import ( + "strconv" + "strings" +) -var settings map[string]string +type navItem struct { + Order int + Text string + Title string + Link string +} + +var ( + settings map[string]string + navigators []*navItem +) func GetSetting(key string) string { return settings[key] @@ -30,3 +43,43 @@ func LoadSettings() { settings = make(map[string]string) Storage.Get("settings", &settings) } + +func SortNavigators() { + l := len(navigators) + for i := 1; i < l; i++ { + for j := i; j > 0; j-- { + if navigators[j].Order < navigators[j-1].Order { + navigators[j], navigators[j-1] = navigators[j-1], navigators[j] + } + } + } +} + +func LoadNavigators() { + navigators = make([]*navItem, 0) + Storage.Get("navigators", &navigators) + SortNavigators() +} + +func SetNavigators(order []string, text []string, title []string, link []string) { + navs := make([]*navItem, len(text)) + for i, t := range text { + n := new(navItem) + n.Order, _ = strconv.Atoi(order[i]) + n.Text = t + n.Title = title[i] + n.Link = link[i] + navs[i] = n + } + navigators = navs + SyncNavigators() +} + +func SyncNavigators(){ + Storage.Set("navigators", navigators) + SortNavigators() +} + +func GetNavigators() []*navItem { + return navigators +} diff --git a/app/model/storage.go b/app/model/storage.go index b04e189..89539c2 100644 --- a/app/model/storage.go +++ b/app/model/storage.go @@ -193,12 +193,31 @@ func writeDefaultData() { Storage.Set("files", []*File{}) // write message - Storage.Set("messages",[]*Message{}) + Storage.Set("messages", []*Message{}) + + // write navigators + n := new(navItem) + n.Order = 1 + n.Text = "文章" + n.Title = "文章" + n.Link = "/" + n2 := new(navItem) + n2.Order = 2 + n2.Text = "关于" + n2.Title = "关于" + n2.Link = "/about-me.html" + n3 := new(navItem) + n3.Order = 3 + n3.Text = "好友" + n3.Title = "好友" + n3.Link = "/friends.html" + Storage.Set("navigators", []*navItem{n, n2, n3}) } func loadAllData() { loadVersion() LoadSettings() + LoadNavigators() LoadUsers() LoadTokens() LoadContents() @@ -228,12 +247,13 @@ func All() { StartMessageTimer() } -func SyncAll(){ +func SyncAll() { SyncContents() SyncMessages() SyncFiles() SyncReaders() SyncSettings() + SyncNavigators() SyncTokens() SyncUsers() SyncVersion() diff --git a/static/css/admin.css b/static/css/admin.css index 590ebc7..f1f932c 100644 --- a/static/css/admin.css +++ b/static/css/admin.css @@ -125,7 +125,7 @@ a.lbl-green:hover{background-color:#649462;color:#fbfbfb} #article-form .form-vertical .btn{margin-right:16px} #article-form .file-progress{padding:0 12px;background:rgba(0,150,223,0.2);color:#666;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;box-sizing:border-box;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} #article-form .file-progress.err{background:rgba(255,68,71,0.2);color:#aa393c} -#setting-nav{margin-top:24px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#setting-nav li{display:inline-block;margin:0 12px}#setting-nav li a{padding:3px 10px} +#setting-nav{width:1000px;margin-top:24px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#setting-nav li{display:inline-block;margin:0 12px}#setting-nav li a{padding:3px 10px} #setting-nav li a:hover,#setting-nav li a.current{border-bottom:2px solid #005b9b} .setting-panel{display:none} .setting-form{width:820px;margin:24px auto 48px auto}.setting-form .ipt{width:480px} @@ -137,6 +137,13 @@ a.lbl-green:hover{background-color:#649462;color:#fbfbfb} #setting-custom-form .item{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd} #setting-custom-form .del{margin-left:12px;color:#e64346} #setting-custom-form .tip{margin-left:0} +#setting-nav-form{width:1000px}#setting-nav-form .item{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd} +#setting-nav-form span.label{margin-right:6px} +#setting-nav-form input.order{width:2.5em;min-width:0} +#setting-nav-form input.text{width:80px;min-width:0} +#setting-nav-form input.title{width:150px;min-width:0} +#setting-nav-form input.link{width:340px} +#setting-nav-form .del{margin-left:12px;color:#e64346} #comment-list .c-avatar{width:48px;height:48px;padding:2px;border:1px solid #ccc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;margin-right:18px} #comment-list .comment{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd} #comment-list .c-meta>*{margin-right:16px} diff --git a/static/less/admin.less b/static/less/admin.less index add22c5..04f8f58 100644 --- a/static/less/admin.less +++ b/static/less/admin.less @@ -194,6 +194,7 @@ } #setting-nav{ + width: 1000px; margin-top: 24px; li{ display: inline-block; @@ -249,6 +250,35 @@ } } +#setting-nav-form{ + width:1000px; + .item{ + .bottom-line(12px); + } + span.label{ + margin-right: 6px; + } + input.order{ + width: 2.5em; + min-width: 0; + } + input.text{ + width: 80px; + min-width: 0; + } + input.title{ + width: 150px; + min-width: 0; + } + input.link{ + width: 340px; + } + .del{ + margin-left: 12px; + color: @red1; + } +} + #comment-list{ .c-avatar{ width: 48px; diff --git a/view/admin/articles.html b/view/admin/articles.html index a3a5f47..45efa6a 100644 --- a/view/admin/articles.html +++ b/view/admin/articles.html @@ -7,6 +7,7 @@ 草稿{{end}} {{.Slug}}{{if eq .IsComment false}} {{end}} + {{.CommentNum}} / {{.Hits}} 编辑 删除 {{end}} diff --git a/view/admin/pages.html b/view/admin/pages.html index 1af010f..d13b4aa 100644 --- a/view/admin/pages.html +++ b/view/admin/pages.html @@ -7,6 +7,7 @@ 草稿{{end}} {{.Slug}}{{if eq .IsComment false}} {{end}} + {{.CommentNum}} / {{.Hits}} 编辑 删除 {{end}} diff --git a/view/admin/setting.html b/view/admin/setting.html index 5061e5c..9527ead 100644 --- a/view/admin/setting.html +++ b/view/admin/setting.html @@ -1,9 +1,9 @@ -

      + -
      +

      @@ -46,8 +46,27 @@

      -
      - nav + {{range .Navigators}} +

      + 排序     + 文本     + 标题     + 链接     + +

      {{end}} +

      +      + 添加一项 +

      +
      {{range $k,$v := .Custom}}

      @@ -57,7 +76,7 @@

      {{end}}

           - 添加一项 + 添加一项 使用函数自定义配置,需要加前缀"c_",如GetSetting("c_key")

      -
      333
      diff --git a/view/ling/home.layout b/view/ling/home.layout index 4c3fe3b..9a6ac95 100644 --- a/view/ling/home.layout +++ b/view/ling/home.layout @@ -34,7 +34,7 @@
      Go © 2014 All rights reserved. - Proudly published with Fxh.Go. + Proudly Powered by Fxh.Go.
      {{Setting `c_footer_ga` | Html}} From 6ad155f7e77d3cdc17aaaf281ca893803971d318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=82=85=E5=B0=8F=E9=BB=91?= Date: Fri, 7 Feb 2014 17:30:28 +0800 Subject: [PATCH 24/82] go fmt, refactor struct --- GoInk/app.go | 171 -------------------- GoInk/config.go | 92 ----------- GoInk/context.go | 334 --------------------------------------- GoInk/router.go | 112 ------------- GoInk/view.go | 48 ------ app/app.go | 2 +- app/cmd/backup.go | 2 +- app/cmd/install.go | 6 +- app/cmd/log.go | 2 +- app/cmd/reboot.go | 2 - app/cmd/upgrade.go | 2 +- app/cmd/zip.go | 2 +- app/handler/admin.go | 4 +- app/handler/cmd.go | 2 +- app/handler/func.go | 2 +- app/handler/home.go | 10 +- app/handler/rss.go | 2 +- app/handler/upload.go | 2 +- app/model/file.go | 2 +- app/model/locker.go | 2 +- app/model/setting.go | 2 +- app/model/token.go | 2 +- app/model/user.go | 2 +- app/plugin/email.go | 2 +- app/plugin/hello.go | 4 +- app/plugin/plugin.go | 2 +- app/upgrade/v20140130.go | 4 +- app/upgrade/v20140131.go | 3 +- app/upgrade/v20140209.go | 2 +- app/utils/html.go | 4 +- app/utils/pager.go | 2 +- 31 files changed, 35 insertions(+), 795 deletions(-) delete mode 100644 GoInk/app.go delete mode 100644 GoInk/config.go delete mode 100644 GoInk/context.go delete mode 100644 GoInk/router.go delete mode 100644 GoInk/view.go diff --git a/GoInk/app.go b/GoInk/app.go deleted file mode 100644 index 385d028..0000000 --- a/GoInk/app.go +++ /dev/null @@ -1,171 +0,0 @@ -package GoInk - -import ( - "fmt" - "net/http" - "runtime/debug" - "strings" -) - -const () - -type App struct { - router *Router - view *View - middle []Handler - inter map[string]Handler - config *Config -} - -func New() *App { - a := new(App) - a.router = NewRouter() - a.middle = make([]Handler, 0) - a.inter = make(map[string]Handler) - a.config, _ = NewConfig("config.json") - a.view = NewView(a.config.StringOr("app.view_dir", "view")) - - // add empty handler - /*a.Get("/", func(context *Context) { - context.Body = []byte("It Works!") - })*/ - return a -} - -func (app *App) Use(h Handler) { - app.middle = append(app.middle, h) -} - -func (app *App) Config() *Config { - return app.config -} - -func (app *App) View() *View { - return app.view -} - -func (app *App) handler(res http.ResponseWriter, req *http.Request) { - context := NewContext(app, res, req) - - defer func() { - e := recover() - if e == nil { - return - } - context.Body = []byte(fmt.Sprint(e)) - context.Status = 503 - println(string(context.Body)) - debug.PrintStack() - if _, ok := app.inter["recover"]; ok { - app.inter["recover"](context) - } - if !context.IsEnd { - context.End() - } - }() - - if _, ok := app.inter["static"]; ok { - app.inter["static"](context) - if context.IsEnd { - return - } - } - - if len(app.middle) > 0 { - for _, h := range app.middle { - h(context) - if context.IsEnd { - break - } - } - } - params, fn := app.router.Find(req.URL.Path, req.Method) - if params != nil && fn != nil { - context.routeParams = params - for _, f := range fn { - f(context) - if context.IsEnd { - break - } - } - if !context.IsEnd { - context.End() - } - } else { - println("router is missing at "+req.URL.Path) - context.Status = 404 - if _, ok := app.inter["notfound"]; ok { - app.inter["notfound"](context) - if !context.IsEnd { - context.End() - } - }else { - context.Throw(404) - } - } -} - -func (app *App) ServeHTTP(res http.ResponseWriter, req *http.Request) { - app.handler(res, req) -} - -func (app *App) Run() { - addr := app.config.StringOr("app.server", "localhost:9001") - println("http server run at "+addr) - e := http.ListenAndServe(addr, app) - panic(e) -} - -func (app *App) Set(key string, v interface {}) { - app.config.Set("app." + key, v) -} - -func (app *App) Get(key string, fn ...Handler) string { - if len(fn) > 0 { - app.router.Get(key, fn...) - return "" - } - return app.config.String("app."+key) -} - -func (app *App) Post(key string, fn ...Handler) { - app.router.Post(key, fn...) -} - -func (app *App) Put(key string, fn ...Handler) { - app.router.Put(key, fn...) -} - -func (app *App) Delete(key string, fn ...Handler) { - app.router.Delete(key, fn...) -} - -func (app *App) Route(method string, key string, fn ...Handler) { - methods := strings.Split(method, ",") - for _, m := range methods { - switch m{ - case "GET": - app.Get(key, fn...) - case "POST": - app.Post(key, fn...) - case "PUT": - app.Put(key, fn...) - case "DELETE": - app.Delete(key, fn...) - default: - println("unknow route method "+m) - } - } -} - -func (app *App) Static(h Handler) { - app.inter["static"] = h -} - -func (app *App) Recover(h Handler) { - app.inter["recover"] = h -} - -func (app *App) NotFound(h Handler) { - app.inter["notfound"] = h -} diff --git a/GoInk/config.go b/GoInk/config.go deleted file mode 100644 index bd41a00..0000000 --- a/GoInk/config.go +++ /dev/null @@ -1,92 +0,0 @@ -package GoInk - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "strconv" - "strings" -) - -type Config map[string]map[string]interface{} - -func (cfg *Config) String(key string) string { - keys := strings.Split(key, ".") - if len(keys) < 2 { - return "" - } - str, ok := (*cfg)[keys[0]][keys[1]] - if !ok { - return "" - } - return fmt.Sprint(str) -} - -func (cfg *Config) StringOr(key string, def string) string { - value := cfg.String(key) - if value == "" { - cfg.Set(key, def) - return def - } - return value -} - -func (cfg *Config) Int(key string) int { - str := cfg.String(key) - i, _ := strconv.Atoi(str) - return i -} - -func (cfg *Config) IntOr(key string, def int) int { - i := cfg.Int(key) - if i == 0 { - cfg.Set(key, def) - return def - } - return i -} - -func (cfg *Config) Float(key string) float64 { - str := cfg.String(key) - f, _ := strconv.ParseFloat(str, 64) - return f -} - -func (cfg *Config) FloatOr(key string, def float64) float64 { - f := cfg.Float(key) - if f == 0.0 { - cfg.Set(key, def) - return def - } - return f -} - -func (cfg *Config) Bool(key string) bool { - str := cfg.String(key) - b, _ := strconv.ParseBool(str) - return b -} - -func (cfg *Config) Set(key string, value interface{}) { - keys := strings.Split(key, ".") - if len(keys) < 2 { - return - } - if (*cfg) == nil { - (*cfg) = make(map[string]map[string]interface{}) - } - if _, ok := (*cfg)[keys[0]]; !ok { - (*cfg)[keys[0]] = make(map[string]interface{}) - } - (*cfg)[keys[0]][keys[1]] = value -} - -func NewConfig(fileAbsPath string) (*Config, error) { - cfg := new(Config) - bytes, e := ioutil.ReadFile(fileAbsPath) - if e != nil { - return cfg, e - } - e = json.Unmarshal(bytes, cfg) - return cfg, e -} diff --git a/GoInk/context.go b/GoInk/context.go deleted file mode 100644 index fddec42..0000000 --- a/GoInk/context.go +++ /dev/null @@ -1,334 +0,0 @@ -package GoInk - -import ( - "bytes" - "encoding/json" - "net/http" - "os" - "path" - "reflect" - "strconv" - "strings" - "time" -) - -const ( - CONTEXT_RENDERED = "context_rendered" - CONTEXT_END = "context_end" - CONTEXT_SEND = "context_send" -) - -type Context struct { - Request *http.Request - Base string - Url string - RequestUrl string - Method string - Ip string - UserAgent string - Referer string - Host string - Ext string - IsSSL bool - IsAjax bool - - Response http.ResponseWriter - Status int - Header map[string]string - Body []byte - - routeParams map[string]string - flashData map[string]interface{} - - eventsFunc map[string]reflect.Value - - IsSend bool - IsEnd bool - - app *App - layout string -} - -func NewContext(app *App, res http.ResponseWriter, req *http.Request) *Context { - context := new(Context) - context.flashData = make(map[string]interface{}) - context.eventsFunc = make(map[string]reflect.Value) - context.IsSend = false - context.IsEnd = false - - context.Request = req - context.Url = req.URL.Path - context.RequestUrl = req.RequestURI - context.Method = req.Method - context.Ext = path.Ext(req.URL.Path) - context.Host = req.Host - context.Ip = strings.Split(req.RemoteAddr, ":")[0] - context.IsAjax = req.Header.Get("X-Requested-With") == "XMLHttpRequest" - context.IsSSL = req.TLS != nil - context.Referer = req.Referer() - context.UserAgent = req.UserAgent() - context.Base = "://" + context.Host + "/" - if context.IsSSL { - context.Base = "https" + context.Base - } else { - context.Base = "http" + context.Base - } - - context.Response = res - context.Status = 200 - context.Header = make(map[string]string) - context.Header["Content-Type"] = "text/html;charset=UTF-8" - - context.app = app - - req.ParseForm() - - return context -} - -func (ctx *Context) Param(key string) string { - return ctx.routeParams[key] -} - -func (ctx *Context) Flash(key string, v ...interface{}) interface{} { - if len(v) > 0 { - return ctx.flashData[key] - } - ctx.flashData[key] = v[0] - return nil -} - -func (ctx *Context) On(e string, fn interface{}) { - if reflect.TypeOf(fn).Kind() != reflect.Func { - println("only support function type for Context.On method") - return - } - ctx.eventsFunc[e] = reflect.ValueOf(fn) -} - -func (ctx *Context) Do(e string, args ...interface{}) []interface{} { - _, ok := ctx.eventsFunc[e] - if !ok { - return nil - } - if !ctx.eventsFunc[e].IsValid() { - println("invalid function call for Context.Do(" + e + ")") - return nil - } - fn := ctx.eventsFunc[e] - numIn := fn.Type().NumIn() - if numIn > len(args) { - println("not enough parameters for Context.Do(" + e + ")") - return nil - } - rArgs := make([]reflect.Value, numIn) - for i := 0; i < numIn; i++ { - rArgs[i] = reflect.ValueOf(args[i]) - } - resValue := fn.Call(rArgs) - if len(resValue) < 1 { - return nil - } - res := make([]interface{}, len(resValue)) - for i, v := range resValue { - res[i] = v.Interface() - } - return res -} - -func (ctx *Context) Input() map[string]string { - data := make(map[string]string) - for key, v := range ctx.Request.Form { - data[key] = v[0] - } - return data -} - -func (ctx *Context) Strings(key string) []string { - return ctx.Request.Form[key] -} - -func (ctx *Context) String(key string) string { - return ctx.Request.FormValue(key) -} - -func (ctx *Context) StringOr(key string, def string) string { - value := ctx.String(key) - if value == "" { - return def - } - return value -} - -func (ctx *Context) Int(key string) int { - str := ctx.String(key) - i, _ := strconv.Atoi(str) - return i -} - -func (ctx *Context) IntOr(key string, def int) int { - i := ctx.Int(key) - if i == 0 { - return def - } - return i -} - -func (ctx *Context) Float(key string) float64 { - str := ctx.String(key) - f, _ := strconv.ParseFloat(str, 64) - return f -} - -func (ctx *Context) FloatOr(key string, def float64) float64 { - f := ctx.Float(key) - if f == 0.0 { - return def - } - return f -} - -func (ctx *Context) Bool(key string) bool { - str := ctx.String(key) - b, _ := strconv.ParseBool(str) - return b -} - -func (ctx *Context) Cookie(key string, value ...string) string { - if len(value) < 1 { - c, e := ctx.Request.Cookie(key) - if e != nil { - return "" - } - return c.Value - } - if len(value) == 2 { - t := time.Now() - expire, _ := strconv.Atoi(value[1]) - t = t.Add(time.Duration(expire) * time.Second) - cookie := &http.Cookie{ - Name: key, - Value: value[0], - Path: "/", - MaxAge: expire, - Expires: t, - } - http.SetCookie(ctx.Response, cookie) - return "" - } - return "" -} - -func (ctx *Context) GetHeader(key string) string { - return ctx.Request.Header.Get(key) -} - -func (ctx *Context) Redirect(url string, status ...int) { - ctx.Header["Location"] = url - if len(status) > 0 { - ctx.Status = status[0] - return - } - ctx.Status = 302 -} - -func (ctx *Context) ContentType(contentType string) { - ctx.Header["Content-Type"] = contentType -} - -func (ctx *Context) Json(data interface{}) { - bytes, e := json.MarshalIndent(data, "", " ") - if e != nil { - panic(e) - } - ctx.ContentType("application/json;charset=UTF-8") - ctx.Body = bytes -} - -func (ctx *Context) Send() { - if ctx.IsSend { - return - } - for name, value := range ctx.Header { - ctx.Response.Header().Set(name, value) - } - ctx.Response.WriteHeader(ctx.Status) - ctx.Response.Write(ctx.Body) - ctx.IsSend = true - ctx.Do(CONTEXT_SEND) -} - -func (ctx *Context) End() { - if ctx.IsEnd { - return - } - if !ctx.IsSend { - ctx.Send() - } - ctx.IsEnd = true - ctx.Do(CONTEXT_END) -} - -func (ctx *Context) Throw(status int, message ...interface{}) { - e := strconv.Itoa(status) - ctx.Status = status - ctx.Do(e, message...) - ctx.End() -} - -func (ctx *Context) Layout(str string) { - ctx.layout = str -} - -func (ctx *Context) Tpl(tpl string, data map[string]interface{}) string { - b, e := ctx.app.view.Render(tpl+".html", data) - if e != nil { - panic(e) - } - return string(b) -} - -func (ctx *Context) Render(tpl string, data map[string]interface{}) { - b, e := ctx.app.view.Render(tpl+".html", data) - if e != nil { - panic(e) - } - if ctx.layout != "" { - l, e := ctx.app.view.Render(ctx.layout+".layout", data) - if e != nil { - panic(e) - } - b = bytes.Replace(l, []byte("{@Content}"), b, -1) - } - ctx.Body = b - ctx.Do(CONTEXT_RENDERED) -} - -func (ctx *Context) Func(name string, fn interface{}) { - ctx.app.view.FuncMap[name] = fn -} - -func (ctx *Context) App() *App { - return ctx.app -} - -func (ctx *Context) Download(file string) { - f, e := os.Stat(file) - if e != nil { - ctx.Status = 404 - return - } - if f.IsDir() { - ctx.Status = 403 - return - } - output := ctx.Response.Header() - output.Set("Content-Type", "application/octet-stream") - output.Set("Content-Disposition", "attachment; filename="+path.Base(file)) - output.Set("Content-Transfer-Encoding", "binary") - output.Set("Expires", "0") - output.Set("Cache-Control", "must-revalidate") - output.Set("Pragma", "public") - http.ServeFile(ctx.Response, ctx.Request, file) - ctx.IsSend = true -} diff --git a/GoInk/router.go b/GoInk/router.go deleted file mode 100644 index 9813575..0000000 --- a/GoInk/router.go +++ /dev/null @@ -1,112 +0,0 @@ -package GoInk - -import ( - "path" - "regexp" - "strings" -) - -const ( - ROUTER_METHOD_GET = "GET" - ROUTER_METHOD_POST = "POST" - ROUTER_METHOD_PUT = "PUT" - ROUTER_METHOD_DELETE = "DELETE" -) - -type Router struct { - routeSlice []*Route -} - -func NewRouter() *Router { - rt := new(Router) - rt.routeSlice = make([]*Route, 0) - return rt -} - -func newRoute() *Route { - route := new(Route) - route.params = make([]string, 0) - return route -} - -func (rt *Router) Get(pattern string, fn ...Handler) { - route := newRoute() - route.regex, route.params = rt.parsePattern(pattern) - route.method = ROUTER_METHOD_GET - route.fn = fn - rt.routeSlice = append(rt.routeSlice, route) -} - -func (rt *Router) Post(pattern string, fn ...Handler) { - route := newRoute() - route.regex, route.params = rt.parsePattern(pattern) - route.method = ROUTER_METHOD_POST - route.fn = fn - rt.routeSlice = append(rt.routeSlice, route) -} - -func (rt *Router) Put(pattern string, fn ...Handler) { - route := newRoute() - route.regex, route.params = rt.parsePattern(pattern) - route.method = ROUTER_METHOD_PUT - route.fn = fn - rt.routeSlice = append(rt.routeSlice, route) -} - -func (rt *Router) Delete(pattern string, fn ...Handler) { - route := newRoute() - route.regex, route.params = rt.parsePattern(pattern) - route.method = ROUTER_METHOD_DELETE - route.fn = fn - rt.routeSlice = append(rt.routeSlice, route) -} - -func (rt *Router) parsePattern(pattern string) (regex *regexp.Regexp, params []string) { - params = make([]string, 0) - segments := strings.Split(pattern, "/") - for i, v := range segments { - if strings.HasPrefix(v, ":") { - segments[i] = `([\w-]+)` - params = append(params, strings.TrimPrefix(v, ":")) - } - } - regex, _ = regexp.Compile("^"+strings.Join(segments, "/")+"$") - return -} - -func (rt *Router) Find(url string, method string) (params map[string]string, fn []Handler) { - sfx := path.Ext(url) - url = strings.Replace(url, sfx, "", -1) - // fix path end slash - if !strings.HasSuffix(url,"/") && sfx == ""{ - url +="/" - } - for _, r := range rt.routeSlice { - if r.regex.MatchString(url) && r.method == method { - p := r.regex.FindStringSubmatch(url) - if len(p) != len(r.params)+1 { - continue - } - params = make(map[string]string) - for i, n := range r.params { - params[n] = p[i+1] - } - fn = r.fn - return - } - } - return nil, nil -} - -// ------------------------------------------------- - -type Route struct { - regex *regexp.Regexp - method string - params []string - fn []Handler -} - -// ------------------------------------------------ - -type Handler func(context *Context) diff --git a/GoInk/view.go b/GoInk/view.go deleted file mode 100644 index d1f4663..0000000 --- a/GoInk/view.go +++ /dev/null @@ -1,48 +0,0 @@ -package GoInk - -import ( - "bytes" - "html/template" - "os" - "path" -) - -type View struct { - Dir string - FuncMap template.FuncMap -} - -func (v *View) Render(tpl string, data map[string]interface{}) ([]byte, error) { - t := template.New(path.Base(tpl)) - t.Funcs(v.FuncMap) - var ( - e error - file = path.Join(v.Dir, tpl) - ) - t, e = t.ParseFiles(file) - if e != nil { - return nil, e - } - var buf bytes.Buffer - e = t.Execute(&buf, data) - if e != nil { - return nil, e - } - return buf.Bytes(), nil -} - -func (v *View) Has(tpl string) bool { - f := path.Join(v.Dir, tpl) - _, e := os.Stat(f) - return e == nil -} - -func NewView(dir string) *View { - v := new(View) - v.Dir = dir - v.FuncMap = make(template.FuncMap) - v.FuncMap["Html"] = func(str string) template.HTML { - return template.HTML(str) - } - return v -} diff --git a/app/app.go b/app/app.go index e5a5f24..ca3efbf 100644 --- a/app/app.go +++ b/app/app.go @@ -2,11 +2,11 @@ package app import ( "fmt" - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/handler" "github.com/fuxiaohei/GoBlog/app/model" "github.com/fuxiaohei/GoBlog/app/plugin" "github.com/fuxiaohei/GoBlog/app/utils" + "github.com/fuxiaohei/GoInk" "net/http" "os" "os/signal" diff --git a/app/cmd/backup.go b/app/cmd/backup.go index 2f301d9..9b86a6a 100644 --- a/app/cmd/backup.go +++ b/app/cmd/backup.go @@ -2,8 +2,8 @@ package cmd import ( "github.com/Unknwon/cae/zip" - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/utils" + "github.com/fuxiaohei/GoInk" "os" "path" "path/filepath" diff --git a/app/cmd/install.go b/app/cmd/install.go index 19b6447..d596603 100644 --- a/app/cmd/install.go +++ b/app/cmd/install.go @@ -4,8 +4,8 @@ import ( "bytes" "encoding/base64" "fmt" - "github.com/fuxiaohei/GoBlog/app/utils" "github.com/Unknwon/cae/zip" + "github.com/fuxiaohei/GoBlog/app/utils" "io/ioutil" "os" ) @@ -20,7 +20,7 @@ func CheckInstall() bool { return e == nil } -func ExtractBundleBytes(){ +func ExtractBundleBytes() { // origin from https://github.com/wendal/gor/blob/master/gor/gor.go decoder := base64.NewDecoder(base64.StdEncoding, bytes.NewBufferString(zipBytes)) b, _ := ioutil.ReadAll(decoder) @@ -47,7 +47,7 @@ func DoInstall() { func DoUpdateZipBytes(file string) error { // copy from https://github.com/wendal/gor/blob/master/gor/gor.go bytes, _ := ioutil.ReadFile(file) - zipWriter, _ := os.OpenFile("app/cmd/zip.go", os.O_WRONLY | os.O_TRUNC | os.O_CREATE, os.ModePerm) + zipWriter, _ := os.OpenFile("app/cmd/zip.go", os.O_WRONLY|os.O_TRUNC|os.O_CREATE, os.ModePerm) header := `package cmd const zipBytes="` zipWriter.Write([]byte(header)) diff --git a/app/cmd/log.go b/app/cmd/log.go index 5947b4f..52a3003 100644 --- a/app/cmd/log.go +++ b/app/cmd/log.go @@ -1,7 +1,7 @@ package cmd import ( - "github.com/fuxiaohei/GoBlog/GoInk" + "github.com/fuxiaohei/GoInk" "io/ioutil" "os" "path/filepath" diff --git a/app/cmd/reboot.go b/app/cmd/reboot.go index 31e8e8c..1d619dd 100644 --- a/app/cmd/reboot.go +++ b/app/cmd/reboot.go @@ -1,3 +1 @@ - package cmd - diff --git a/app/cmd/upgrade.go b/app/cmd/upgrade.go index 833e374..f676dfa 100644 --- a/app/cmd/upgrade.go +++ b/app/cmd/upgrade.go @@ -1,8 +1,8 @@ package cmd import ( - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/model" + "github.com/fuxiaohei/GoInk" "sort" "strconv" ) diff --git a/app/cmd/zip.go b/app/cmd/zip.go index 3f94738..dee29e9 100644 --- a/app/cmd/zip.go +++ b/app/cmd/zip.go @@ -1,2 +1,2 @@ package cmd -const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnt3aWR0aDoxMDAwcHg7bWFyZ2luLXRvcDoyNHB4O21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNzZXR0aW5nLW5hdiBsaXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCAxMnB4fSNzZXR0aW5nLW5hdiBsaSBhe3BhZGRpbmc6M3B4IDEwcHh9CiNzZXR0aW5nLW5hdiBsaSBhOmhvdmVyLCNzZXR0aW5nLW5hdiBsaSBhLmN1cnJlbnR7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzAwNWI5Yn0KLnNldHRpbmctcGFuZWx7ZGlzcGxheTpub25lfQouc2V0dGluZy1mb3Jte3dpZHRoOjgyMHB4O21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfS5zZXR0aW5nLWZvcm0gLmlwdHt3aWR0aDo0ODBweH0KLnNldHRpbmctZm9ybSAuaW52YWxpZHttYXJnaW4tbGVmdDo3NXB4fQouc2V0dGluZy1mb3JtIGxhYmVse21pbi13aWR0aDoxMGVtfQouc2V0dGluZy1mb3JtIC50aXAuYmxvY2t7bWFyZ2luLWxlZnQ6MTJlbX0KI3NldHRpbmctY3VzdG9tLWZvcm17d2lkdGg6MTAwMHB4fSNzZXR0aW5nLWN1c3RvbS1mb3JtIGlucHV0LmtleXt3aWR0aDoyNTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQudmFsdWV7d2lkdGg6NjUwcHh9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5pdGVte21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojc2V0dGluZy1jdXN0b20tZm9ybSAuZGVse21hcmdpbi1sZWZ0OjEycHg7Y29sb3I6I2U2NDM0Nn0KI3NldHRpbmctY3VzdG9tLWZvcm0gLnRpcHttYXJnaW4tbGVmdDowfQojc2V0dGluZy1uYXYtZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctbmF2LWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLW5hdi1mb3JtIHNwYW4ubGFiZWx7bWFyZ2luLXJpZ2h0OjZweH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQub3JkZXJ7d2lkdGg6Mi41ZW07bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0LnRleHR7d2lkdGg6ODBweDttaW4td2lkdGg6MH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQudGl0bGV7d2lkdGg6MTUwcHg7bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0Lmxpbmt7d2lkdGg6MzQwcHh9CiNzZXR0aW5nLW5hdi1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jbnQsI2NvbW1lbnQtbGlzdCAuYy1lbWFpbHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWxpc3QgLmMtc2VjdGlvbnttYXgtd2lkdGg6ODMwcHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2ssI2NvbW1lbnQtbGlzdCAuYy1kZWx7Y29sb3I6I2U2NDM0Nn0jY29tbWVudC1saXN0IC5jLWNoZWNrIC5mYSwjY29tbWVudC1saXN0IC5jLWRlbCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjazpob3ZlciwjY29tbWVudC1saXN0IC5jLWRlbDpob3Zlcntjb2xvcjojYWEzOTNjfQojY29tbWVudC1mb3Jte3BhZGRpbmctdG9wOjEycHg7ZGlzcGxheTpub25lO21hcmdpbi1sZWZ0OjcycHh9I2NvbW1lbnQtZm9ybSAuYnRue21hcmdpbi1yaWdodDoyNHB4fQojY29tbWVudC1jb250ZW50e3dpZHRoOjUwMHB4O2hlaWdodDo4MHB4O21hcmdpbi1yaWdodDoyNHB4fQojZmlsZXMtbGlzdCBsaS5maWxle21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZmlsZXMtbGlzdCBsaS5maWxlPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNmaWxlcy1saXN0IGxpLmZpbGU6aG92ZXIgLmRlbHtvcGFjaXR5OjEgIWltcG9ydGFudH0KI2ZpbGVzLWxpc3QgLnVwbG9hZC10aW1le2NvbG9yOiM5OTk7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2ZpbGVzLWxpc3QgLmRlbHtjb2xvcjojZTY0MzQ2fQojZmlsZXMtbGlzdCAuZmlsZS1wcm9ncmVzc3twYWRkaW5nOjAgMTJweDtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMik7Y29sb3I6IzY2Njtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNzLmVycntiYWNrZ3JvdW5kOnJnYmEoMjU1LDY4LDcxLDAuMik7Y29sb3I6I2FhMzkzY30KI2ZpbGVzLWxpc3QgLnNpemV7d2lkdGg6NGVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfQojcGx1Z2luLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxNnB4O3BhZGRpbmctYm90dG9tOjE2cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3BsdWdpbi1saXN0IGxpIC5kZXNje21hcmdpbi1ib3R0b206MDt3aWR0aDo5OSU7Y29sb3I6Izk5OX0KI3BsdWdpbi1saXN0IGxpIGEubGJse3BhZGRpbmc6MCA4cHg7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC52ZXJzaW9ue2NvbG9yOiM1MDc2NTA7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC5uYW1le2ZvbnQtc2l6ZToxNnB4fQojcGx1Z2luLWxpc3QgbGkgLmFjdGl2ZXt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O21hcmdpbi1yaWdodDoxNnB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjEwcHh9CiNwbHVnaW4tbGlzdCBsaSAuc2V0dGluZ3ttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBwLml0ZW17Y2xlYXI6Ym90aH0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gbGFiZWx7ZmxvYXQ6bGVmdDttaW4td2lkdGg6NmVtO3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luLXJpZ2h0OjJlbX0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gLnRpdGxle3BhZGRpbmctdG9wOjA7bWFyZ2luLWJvdHRvbToxOHB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBpbnB1dC5pcHR7d2lkdGg6NjAwcHh9CiNkYXNoYm9hcmQgLmdyaWQtMS01e21hcmdpbi1yaWdodDoyJX0KI2Rhc2hib2FyZCAucXVpY2stbGluayBsaXtsaXN0LXN0eWxlOmluc2lkZSBkaXNjO21hcmdpbi1ib3R0b206NnB4O3BhZGRpbmctYm90dG9tOjZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2Rhc2hib2FyZCAuc3RhdHMgLmxibHtwYWRkaW5nOjFweCA1cHg7bWFyZ2luOjAgM3B4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNne3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZzpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMDYpfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2c6aG92ZXIgLnJlYWR7b3BhY2l0eToxfQpQSwcIHMaB8VMyAABTMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGNzc1xjbWQuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Ci5jbWR7bWFyZ2luOjI0cHggNDhweH0KLmNtZC1oZWFkZXJ7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtYnRue21hcmdpbjoxMHB4IDAgMCAzMHB4fQouY21kLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtbGlzdCBsaXtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlO2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2JhY2t1cC1saXN0IGxpPnNwYW4sI2JhY2t1cC1saXN0IGxpPmF7bWFyZ2luLXJpZ2h0OjE2cHh9CiNiYWNrdXAtbGlzdCBsaSAuZGVse2NvbG9yOiNlNjQzNDY7b3BhY2l0eTowfQojYmFja3VwLWxpc3QgbGkgLmxpbmt7bWFyZ2luLWxlZnQ6MTJweH0KI2JhY2t1cC1saXN0IGxpOmhvdmVyIC5kZWx7b3BhY2l0eToxfQojbWVzc2FnZS1saXN0IC5tZXNzYWdle3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI21lc3NhZ2UtbGlzdCAubWVzc2FnZTpob3ZlciAucmVhZHtvcGFjaXR5OjF9CiNsb2ctbGlzdCAubG9ne2ZvbnQtc2l6ZToxMnB4fQojbG9nLWxpc3QgLm5hbWV7bWFyZ2luLXJpZ2h0OjEuNWVtO2ZvbnQtd2VpZ2h0OmJvbGR9CiNsb2ctbGlzdCAudGltZSwjbG9nLWxpc3QgLm5hbWV7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2xvZy1saXN0IC50ZXh0e2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbDtjb2xvcjojNjY2O3BhZGRpbmc6OHB4IDEycHg7YmFja2dyb3VuZDojZjNmM2YzfQojbG9nLWxpc3QgLnJlbW92ZXt0b3A6MDtyaWdodDoxMnB4O2NvbG9yOiNlNjQzNDZ9ClBLBwjSN8QbLxoAAC8aAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAABzdGF0aWNcY3NzXGNvZGVtaXJyb3IuY3NzLyogQkFTSUNTICovCgouQ29kZU1pcnJvciB7CiAgICAvKiBTZXQgaGVpZ2h0LCB3aWR0aCwgYm9yZGVycywgYW5kIGdsb2JhbCBmb250IHByb3BlcnRpZXMgaGVyZSAqLwogICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiTWljcm9zb2Z0IFlhSGVpIiwgIkNvdXJpZXIgTmV3IiwgQXJpYWw7CiAgICBoZWlnaHQ6IDY2MHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgYm9yZGVyOjFweCBzb2xpZCAjOTk5Owp9CgouQ29kZU1pcnJvci1zY3JvbGwgewogICAgLyogU2V0IHNjcm9sbGluZyBiZWhhdmlvdXIgaGVyZSAqLwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi8qIFBBRERJTkcgKi8KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIHBhZGRpbmc6IDRweCAwOyAvKiBWZXJ0aWNhbCBwYWRkaW5nIGFyb3VuZCBjb250ZW50ICovCn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICBwYWRkaW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KfQoKLyogR1VUVEVSICovCgouQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLkNvZGVNaXJyb3ItbGluZW51bWJlcnMgewp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIHBhZGRpbmc6IDAgM3B4IDAgNXB4OwogICAgbWluLXdpZHRoOiAyMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBjb2xvcjogIzU1NTsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4Owp9CgovKiBDVVJTT1IgKi8KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogICAgei1pbmRleDogMzsKfQoKLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7Cn0KCi5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB3aWR0aDogYXV0bzsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6ICM3ZTc7CiAgICB6LWluZGV4OiAxOwp9CgovKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHsKfQoKLmNtLXRhYiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi8qIERFRkFVTFQgVEhFTUUgKi8KCi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQgewogICAgY29sb3I6ICM3MDg7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWF0b20gewogICAgY29sb3I6ICMyMTk7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7CiAgICBjb2xvcjogIzE2NDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tZGVmIHsKICAgIGNvbG9yOiAjMDBmOwp9CgouY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZSB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICMwNWE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTMgewogICAgY29sb3I6ICMwODU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5IHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3IgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHsKICAgIGNvbG9yOiAjYTUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1zdHJpbmcgewogICAgY29sb3I6ICNhMTE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0yIHsKICAgIGNvbG9yOiAjZjUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1tZXRhIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW4gewogICAgY29sb3I6ICMzMGE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICM5OTc7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7CiAgICBjb2xvcjogIzE3MDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIgewogICAgY29sb3I6IGJsdWU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1b3RlIHsKICAgIGNvbG9yOiAjMDkwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1ociB7CiAgICBjb2xvcjogIzk5OTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbGluayB7CiAgICBjb2xvcjogIzAwYzsKfQoKLmNtLW5lZ2F0aXZlIHsKICAgIGNvbG9yOiAjZDQ0Owp9CgouY20tcG9zaXRpdmUgewogICAgY29sb3I6ICMyOTI7Cn0KCi5jbS1oZWFkZXIsIC5jbS1zdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5jbS1lbSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5jbS1saW5rIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7CiAgICBjb2xvcjogI2YwMDsKfQoKLmNtLWludmFsaWRjaGFyIHsKICAgIGNvbG9yOiAjZjAwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjMGYwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjZjIyOwp9CgouQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogI2U4ZjJmZjsKfQoKLyogU1RPUCAqLwoKLyogVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGNvbnRhaW5zIHN0eWxlcyByZWxhdGVkIHRvIHRoZSBtZWNoYW5pY3Mgb2YKICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwoKLkNvZGVNaXJyb3IgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciAqLwogICAgbWFyZ2luLWJvdHRvbTogLTMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IC0zMHB4OwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CgouQ29kZU1pcnJvci1zaXplciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcKICAgYmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZAogICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA2OwogICAgZGlzcGxheTogbm9uZTsKfQoKLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7CiAgICByaWdodDogMDsKICAgIHRvcDogMDsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKfQoKLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgb3ZlcmZsb3cteDogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGxlZnQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHRvcDogMDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgei1pbmRleDogMzsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIG1hcmdpbi1ib3R0b206IC0zMnB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgLyogSGFjayB0byBtYWtlIElFNyBiZWhhdmUgKi8KICAgICp6b29tOiAxOwogICAgKmRpc3BsYXk6IGlubGluZTsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB6LWluZGV4OiA0Owp9CgouQ29kZU1pcnJvci1saW5lcyB7CiAgICBjdXJzb3I6IHRleHQ7Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovCiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLXdpZHRoOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgIG1hcmdpbjogMDsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICB6LWluZGV4OiAyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7Cn0KCi5Db2RlTWlycm9yLXdyYXAgcHJlIHsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKfQoKLkNvZGVNaXJyb3ItY29kZSBwcmUgewogICAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7CiAgICB3aWR0aDogLW1vei1maXQtY29udGVudDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogYXV0bzsKfQoKLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgei1pbmRleDogMDsKfQoKLkNvZGVNaXJyb3ItbGluZXdpZGdldCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi5Db2RlTWlycm9yLXdpZGdldCB7Cn0KCi5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7Cn0KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogMDsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogI2Q5ZDlkOTsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDdkNGYwOwp9CgouY20tc2VhcmNoaW5nIHsKICAgIGJhY2tncm91bmQ6ICNmZmE7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAuNCk7Cn0KCi8qIElFNyBoYWNrIHRvIHByZXZlbnQgaXQgZnJvbSByZXR1cm5pbmcgZnVubnkgb2Zmc2V0VG9wcyBvbiB0aGUgc3BhbnMgKi8KLkNvZGVNaXJyb3Igc3BhbiB7CiAgICAqdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwp9CgpAbWVkaWEgcHJpbnQgewogICAgLyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KICAgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQp9CgouY20tcy1iYXNlMTYtZGFyay5Db2RlTWlycm9yIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogIzIwMjAyMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBib3JkZXItcmlnaHQ6IDBweDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItbGluZW51bWJlciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2IwYjBiMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICM4ZjU1MzY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXRvbSB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1udW1iZXIgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWtleXdvcmQgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tc3RyaW5nIHsKICAgIGNvbG9yOiAjZjRiZjc1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICM2YTlmYjU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZGVmIHsKICAgIGNvbG9yOiAjZDI4NDQ1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICNlMGUwZTA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdGFnIHsKICAgIGNvbG9yOiAjYWM0MTQyOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWxpbmsgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZXJyb3IgewogICAgYmFja2dyb3VuZDogI2FjNDE0MjsKICAgIGNvbG9yOiAjYjBiMGIwOwp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogIzJGMkYyRiAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQpQSwcIIwM1gk4gAABOIAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAc3RhdGljXGNzc1xjb21tb24uY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH1oZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfWZpZWxkc2V0LGltZ3tib3JkZXI6MH1hZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfW9sLHVse2xpc3Qtc3R5bGU6bm9uZX1jYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9cTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfWFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfXN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH1zdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1sZWdlbmR7Y29sb3I6IzAwMH1odG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn1he3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifXB7bWFyZ2luLWJvdHRvbToxOHB4fWgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfWgxe2ZvbnQtc2l6ZToyOHB4fWgye2ZvbnQtc2l6ZToyNHB4fWgze2ZvbnQtc2l6ZToyMXB4fWg0e2ZvbnQtc2l6ZToxOXB4fWg1e2ZvbnQtc2l6ZToxNnB4fWg2e2ZvbnQtc2l6ZToxNHB4fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5sZWZ0e2Zsb2F0OmxlZnR9LnJpZ2h0e2Zsb2F0OnJpZ2h0fS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0udmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmZhZGUtb3V0e29wYWNpdHk6MH0uaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uY29udGFpbmVye3dpZHRoOjEyMDBweDttYXJnaW46YXV0b30uY29udGFpbmVyOTYwe3dpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmctYm90dG9tOjEycHh9Lm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fVBLBwh7vP2MJhQAACYUAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAABzdGF0aWNcY3NzXGhpZ2hsaWdodC5jc3MvKg0KDQpTdW5idXJzdC1saWtlIHN0eWxlIChjKSBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+DQoNCiovDQoNCnByZSBjb2RlIHsNCiAgICBkaXNwbGF5OiBibG9jazsgcGFkZGluZzogMC41ZW07DQogICAgYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmOGY4Zjg7DQp9DQoNCnByZSAuY29tbWVudCwNCnByZSAudGVtcGxhdGVfY29tbWVudCwNCnByZSAuamF2YWRvYyB7DQogICAgY29sb3I6ICNhZWFlYWU7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmtleXdvcmQsDQpwcmUgLnJ1YnkgLmZ1bmN0aW9uIC5rZXl3b3JkLA0KcHJlIC5yZXF1ZXN0LA0KcHJlIC5zdGF0dXMsDQpwcmUgLm5naW54IC50aXRsZSB7DQogICAgY29sb3I6ICNFMjg5NjQ7DQp9DQoNCnByZSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnN1YiAua2V5d29yZCwNCnByZSAubWV0aG9kLA0KcHJlIC5saXN0IC50aXRsZSB7DQogICAgY29sb3I6ICM5OUNGNTA7DQp9DQoNCnByZSAuc3RyaW5nLA0KcHJlIC50YWcgLnZhbHVlLA0KcHJlIC5jZGF0YSwNCnByZSAuZmlsdGVyIC5hcmd1bWVudCwNCnByZSAuYXR0cl9zZWxlY3RvciwNCnByZSAuYXBhY2hlIC5jYnJhY2tldCwNCnByZSAuZGF0ZSwNCnByZSAudGV4IC5jb21tYW5kLA0KcHJlIC5jb2ZmZWVzY3JpcHQgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICM2NUIwNDI7DQp9DQoNCnByZSAuc3Vic3Qgew0KICAgIGNvbG9yOiAjREFFRkEzOw0KfQ0KDQpwcmUgLnJlZ2V4cCB7DQogICAgY29sb3I6ICNFOUMwNjI7DQp9DQoNCnByZSAudGl0bGUsDQpwcmUgLnN1YiAuaWRlbnRpZmllciwNCnByZSAucGksDQpwcmUgLnRhZywNCnByZSAudGFnIC5rZXl3b3JkLA0KcHJlIC5kZWNvcmF0b3IsDQpwcmUgLnNoZWJhbmcsDQpwcmUgLnByb21wdCB7DQogICAgY29sb3I6ICM4OUJERkY7DQp9DQoNCnByZSAuY2xhc3MgLnRpdGxlLA0KcHJlIC5oYXNrZWxsIC50eXBlLA0KcHJlIC5zbWFsbHRhbGsgLmNsYXNzLA0KcHJlIC5qYXZhZG9jdGFnLA0KcHJlIC55YXJkb2N0YWcsDQpwcmUgLnBocGRvYyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCnByZSAuc3ltYm9sLA0KcHJlIC5ydWJ5IC5zeW1ib2wgLnN0cmluZywNCnByZSAubnVtYmVyIHsNCiAgICBjb2xvcjogIzMzODdDQzsNCn0NCg0KcHJlIC5wYXJhbXMsDQpwcmUgLnZhcmlhYmxlLA0KcHJlIC5jbG9qdXJlIC5hdHRyaWJ1dGUgew0KICAgIGNvbG9yOiAjM0U4N0UzOw0KfQ0KDQpwcmUgLmNzcyAudGFnLA0KcHJlIC5ydWxlcyAucHJvcGVydHksDQpwcmUgLnBzZXVkbywNCnByZSAudGV4IC5zcGVjaWFsIHsNCiAgICBjb2xvcjogI0NEQTg2OTsNCn0NCg0KcHJlIC5jc3MgLmNsYXNzIHsNCiAgICBjb2xvcjogIzlCNzAzRjsNCn0NCg0KcHJlIC5ydWxlcyAua2V5d29yZCB7DQogICAgY29sb3I6ICNDNUFGNzU7DQp9DQoNCnByZSAucnVsZXMgLnZhbHVlIHsNCiAgICBjb2xvcjogI0NGNkE0QzsNCn0NCg0KcHJlIC5jc3MgLmlkIHsNCiAgICBjb2xvcjogIzhCOThBQjsNCn0NCg0KcHJlIC5hbm5vdGF0aW9uLA0KcHJlIC5hcGFjaGUgLnNxYnJhY2tldCwNCnByZSAubmdpbnggLmJ1aWx0X2luIHsNCiAgICBjb2xvcjogIzlCODU5RDsNCn0NCg0KcHJlIC5wcmVwcm9jZXNzb3IsDQpwcmUgLnByYWdtYSB7DQogICAgY29sb3I6ICM4OTk2QTg7DQp9DQoNCnByZSAuaGV4Y29sb3IsDQpwcmUgLmNzcyAudmFsdWUgLm51bWJlciB7DQogICAgY29sb3I6ICNERDdCM0I7DQp9DQoNCnByZSAuY3NzIC5mdW5jdGlvbiB7DQogICAgY29sb3I6ICNEQUQwODU7DQp9DQoNCnByZSAuZGlmZiAuaGVhZGVyLA0KcHJlIC5jaHVuaywNCnByZSAudGV4IC5mb3JtdWxhIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEUyMjMxOw0KICAgIGNvbG9yOiAjRjhGOEY4Ow0KICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCn0NCg0KcHJlIC5kaWZmIC5jaGFuZ2Ugew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0QTQxMEQ7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuYWRkaXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTNCMjI7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuZGVsZXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0MjBFMDk7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuY29mZmVlc2NyaXB0IC5qYXZhc2NyaXB0LA0KcHJlIC5qYXZhc2NyaXB0IC54bWwsDQpwcmUgLnRleCAuZm9ybXVsYSwNCnByZSAueG1sIC5qYXZhc2NyaXB0LA0KcHJlIC54bWwgLnZic2NyaXB0LA0KcHJlIC54bWwgLmNzcywNCnByZSAueG1sIC5jZGF0YSB7DQogICAgb3BhY2l0eTogMC41Ow0KfQ0KDQpwcmUgLmdvIC50eXBlbmFtZXsNCiAgICBjb2xvcjogI2ZmYmM1NDsNCn1QSwcIw2jj3l0JAABdCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAc3RhdGljXGNzc1xsaW5nLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDojZjNmM2YzfQojaGVhZGVye2JhY2tncm91bmQ6IzAwOTNjNDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzo0MHB4IDAgNDhweCAwO2NvbG9yOiNmYmZiZmJ9I2hlYWRlciBhOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy1tb3otdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy13ZWJraXQtdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzfQojaGVhZGVyLWltZ3t3aWR0aDo5NnB4O2hlaWdodDo5NnB4O2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe2xpbmUtaGVpZ2h0Ojk0cHg7Y29sb3I6I2ZiZmJmYjtwYWRkaW5nOjA7bWFyZ2luLWxlZnQ6MjRweH0jaGVhZGVyLWggYXtjb2xvcjojZmJmYmZifQojaGVhZGVyLXN1Yntjb2xvcjojZjNmM2YzO21hcmdpbi1sZWZ0OjEuMmVtO2ZvbnQtc2l6ZToxNnB4fQojbmF2e2xpbmUtaGVpZ2h0OjkwcHh9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O21hcmdpbi1sZWZ0OjQ0cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiNmM2YzZjM7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNmb290ZXJ7cGFkZGluZzozMHB4IDQwcHg7Y29sb3I6Izk5OX0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2dvLXRvcHtib3R0b206NTBweDtyaWdodDo0MHB4O3Bvc2l0aW9uOmZpeGVkO2NvbG9yOiNmZmY7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjhweDtvcGFjaXR5Oi40fQojYXJ0aWNsZS1jb250YWluZXJ7aGVpZ2h0OjEwMCV9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHN7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjM2cHg7LW1vei1ib3JkZXItcmFkaXVzOjM2cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjM2cHg7bGluZS1oZWlnaHQ6NTZweDtmb250LXNpemU6MjRweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDo0MHB4O21hcmdpbi1sZWZ0OjhweDtib3JkZXI6NnB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHMgYXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzOmhvdmVye2JveC1zaGFkb3c6MCAwIDRweCAjNjY2Oy1tb3otYm94LXNoYWRvdzowIDAgNHB4ICM2NjY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA0cHggIzY2Nn0KI2FydGljbGUtY29udGFpbmVyIC52aWV3c3t0b3A6MTRweDtsZWZ0OjA7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6MzBweDstbW96LWJvcmRlci1yYWRpdXM6MzBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzBweDtwYWRkaW5nOjA7Ym9yZGVyOjRweCBzb2xpZCAjZmZmO2JveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy1tb3otYm94LXNoYWRvdzowIDAgMnB4ICM5OTk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggIzk5OX0KI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjExNnB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxMXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjojZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2M3B4O2xlZnQ6LTIycHh9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbiAudGl0bGV7Zm9udC1zaXplOjI4cHg7cGFkZGluZy1ib3R0b206MjRweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aW1lLWluZm97Y29sb3I6Izk5OTttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZy1ib3R0b206MjBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZDt0ZXh0LWluZGVudDoxZW07Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIGFydGljbGV7bWFyZ2luLWJvdHRvbTo1MHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWlue21hcmdpbi1sZWZ0OjB9I2FydGljbGUtY29udGFpbmVyIC5hcnRpY2xlLXNpbmdsZSAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tZXRhe3JpZ2h0OjQ0cHg7dG9wOi0zNnB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC52aWV3c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDtib3JkZXI6NnB4IHNvbGlkICNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAudGFne2NvbG9yOiM5OTl9CiNhcnRpY2xlLXBhZ2Vye21hcmdpbi1sZWZ0OjExNnB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVte21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojOTk5O3BhZGRpbmc6MTJweCAxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweH0jYXJ0aWNsZS1wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kOiMwMDc5YmN9CiNjb21tZW50e2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNjb21tZW50IC5tZXRhe3JpZ2h0Oi0yNHB4O3RvcDotMzBweH0jY29tbWVudCAubWV0YSAuY29tbWVudHN7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjB9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbTozMnB4fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnttYXJnaW4tcmlnaHQ6MThweDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHh9CiNjb21tZW50LWxpc3QgLmMtbWV0YSBwe21hcmdpbi1ib3R0b206MH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTpibG9ja30jY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9yOmhvdmVye2NvbG9yOiMwMDViOWJ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseXtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2RkZDtwYWRkaW5nOjNweCAxMHB4fSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9CiNjb21tZW50LWxpc3QgLmMtY29udGVudHtwYWRkaW5nLXRvcDo0cHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2t7Zm9udC1zaXplOjEzcHg7Y29sb3I6I2U2NDM0NjttYXJnaW4tbGVmdDoxMnB4fQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtc2hvd3ttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LXRpdGxle21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0bzttYXJnaW4tYm90dG9tOjMwcHh9I2NvbW1lbnQtZm9ybSAuYy1pbmZve3dpZHRoOjI2JX0jY29tbWVudC1mb3JtIC5jLWluZm8gLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MH0KI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjcwJX0KI2NvbW1lbnQtZm9ybSAuYy1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O21hcmdpbi10b3A6NnB4O3dpZHRoOjUwcHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b319QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDowfSAjYXJ0aWNsZS1jb250YWluZXIgLm1ldGF7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW46YmVmb3Jle2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9ICNuYXYsI2hlYWRlci1oe2xpbmUtaGVpZ2h0OjUwcHh9ICNmb290ZXIgc3BhbntmbG9hdDpub25lO3RleHQtYWxpZ246Y2VudGVyfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaHttYXJnaW4tbGVmdDowfSAjaGVhZGVyLWltZ3tkaXNwbGF5Om5vbmV9ICNjb21tZW50LWZvcm17d2lkdGg6MTAwJX0gI25hdntmbG9hdDpsZWZ0fSNuYXYgbGl7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NDRweH19ClBLBwjPw+rWnCoAAJwqAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXHN0eWxlLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9iZy5wbmciKSByZXBlYXR9CiNoZWFkZXJ7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9oZWFkZXIuZ2lmIikgcmVwZWF0ICM0YzcyOTg7bWluLXdpZHRoOjEyMHB4O3BhZGRpbmc6MzBweCAwO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjUwcHg7LW1vei1ib3JkZXItcmFkaXVzOjUwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwcHh9CiNoZWFkZXItaHtwYWRkaW5nLXRvcDoyNHB4O2ZvbnQtc2l6ZTozMnB4fSNoZWFkZXItaCBhe2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0KI25hdntoZWlnaHQ6NTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym94LXNoYWRvdzowIDAgMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O3BhZGRpbmc6MCAxOHB4fSNuYXYgbGkgYXtmb250LXNpemU6MTZweDtjb2xvcjojMzMzO3BhZGRpbmc6MCAzMnB4O2Rpc3BsYXk6YmxvY2t9I25hdiBsaSBhOmhvdmVye2JvcmRlci1ib3R0b206NHB4IHNvbGlkICMwMDc5YmN9CiNuYXYuZml4ZWR7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTt0b3A6MH0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2Zvb3Rlcntjb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6IzFjMjQyOTtwYWRkaW5nOjI0cHggMH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsZXR0ZXItc3BhY2luZzoxcHh9I2Zvb3RlciBwIGF7Y29sb3I6I2NjYzttYXJnaW46MCAxNnB4fSNmb290ZXIgcCBhOmhvdmVye2NvbG9yOiNmYmZiZmJ9CiNmb290ZXIgcCBhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXt3aWR0aDoxMDhweDtsaW5lLWhlaWdodDoyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnZpZXdzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnRpbWV7Y29sb3I6I2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIGF7Y29sb3I6I2ZmZn0jYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTQwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZXtwYWRkaW5nOjhweCAxNnB4O2JhY2tncm91bmQtY29sb3I6IzRjNzI5ODtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjJweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoycHh9I2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxlIGF7Y29sb3I6I2VlZX0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxOHB4IDI0cHggMjRweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZve21hcmdpbi1ib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoycHg7Y29sb3I6Izk5OX0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLmZhe21hcmdpbi1yaWdodDo4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuc2hhcmUgLmZhe21hcmdpbi1yaWdodDowfQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+KntwYWRkaW5nOjZweCAxOHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+c3Bhbntib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmlnaHR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJpZ2h0Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZHtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC50aW1lLCNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAudmlld3Mgc3Bhbntmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjQ4cHh9CiNjb21tZW50e21hcmdpbi10b3A6LTI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjI0cHg7YmFja2dyb3VuZDojZmZmfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0b30jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxOHB4O3BhZGRpbmctYm90dG9tOjE4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1yZXBseXtjb2xvcjojOTk5fSNjb21tZW50LWxpc3QgLmMtcmVwbHk6aG92ZXJ7Y29sb3I6IzMzM30KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3J7Zm9udC1zaXplOjEzcHh9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhe21hcmdpbi1yaWdodDo2cHh9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YS5sZWZ0e2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI25hdiBsaXtwYWRkaW5nOjAgMTBweH0gI2hlYWRlci1pbWd7ZmxvYXQ6bGVmdDt3aWR0aDo2NHB4O2hlaWdodDo2NHB4fSAjaGVhZGVyLWh7cGFkZGluZzoxN3B4IDA7Zm9udC1zaXplOjI0cHh9ICNoZWFkZXItc3Vie2Rpc3BsYXk6bm9uZX0gI2FydGljbGUtY29udGFpbmVyIC50YWcsI2FydGljbGUtY29udGFpbmVyIC50aW1le2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjY29tbWVudC1saXN0IC5jLWF2YXRhcntkaXNwbGF5Om5vbmV9fQpQSwcIqnrsLo0oAACNKAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGZhdmljb24uaWNvAAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAAAACzfgfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N+B9uzfgfbs34H27N+B9uzfgfbs34H27N9B9uzfgfbs34H27N9B9uzfgfbs34H27N+B9uzfgfbsnwH1q96B8etfhittZNKkLqCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qDDf+6hhf/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+6gQj/uYEI/7mCCP+6gQj/uoII/7qCCP+5gQj/uYEI/7mCCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qCCP+5gQj/uYEI/7qBCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6ggj/uoEI/7qCCP+6ggj/uoEI/7qCCP+6gQj/uoEI/7mBCP+5gQj/uYIH/7mCB/+5ggf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/vIQF/7yEBf+7gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8gwX/vIQF/7yEBf+8gwX/vIQG/7yEBv/AhwP/wIYD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIcE/8CHBP/AhgP/wIYC/8WJAv/FiQH/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WKAv/FiQH/xYoD/8ePDv/Mmif/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yZMX/9avU//hwHX/6dKf//Pnzf/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uNAP/LoD3/8uvd/v79+v7//////////sqOAP7KjQD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44B/8uOAP/LjgD/y40A/8qOAP/LjgD/y44A/8uOAf/LjgH/y44A/8uOAP/LjgD/y44A/8uOAf/KjQD/y48G/9i5c//6+fX+/v///v7+/v/+/v7+yo4A/sqNAP/LjgD/y44A/8qOAP/KjgD/yo4A/8qOAP/LjgD/y44A/8qOAP/LjgD/y44A/8qNAP/LjQD/y44B/8mNAf/HjQj/yo4D/8qNAP/LjQD/yo0A/8qNAP/KjQD/y48C/9CaG//fvnH/9e/g//7+/v7////+/v7+//7+/v7LjgH6y44A/8qNAP/LjgD/y44B/8qOAP/KjgD/yo4A/8uOAP/KjgD/yo4A/8uOAP/LjgH/yo4A/8qNAP/JjAD/x5o0/8Gref+oi0j/zaZO/8WYMP/PnzH/1qY5/9qwT//iwnf/8N+5//v48v/+/v///v7+/////////////v7+/7ySMr67ihn/zJIM/8qOAP/KjQD/yo0A/8qNAP/KjgD/yo4A/8qOAP/KjQD/yo0A/8qNAP/LjgH/0JkY/8mjTf/Qxq3/5eXm/6alo//p5t//xL6x/+Hayf758+P++/bs//38+f/////+/////v7+/v/+/v7////////////+/v7/lZONlJmPef/mzpn/4L1q/9mtSP/UozL/0Zsf/8+WE//PlRH/z5UR/8+XF//Tnyj/2atD/+G/cf/t27P/0MzE/8PDw/7q6ur+tra2/ujo6P60tLX+2tvb/v39/f7+///+/v7+//////7////+/v7+//7+/v/////+/////v////6XlpaVkpKT//b29f/9+/f/+fTn//bt1//y5MX/8N+4/+7csv/v3LP/8eG7//Xpzv/58+T/9/Xy/8nJyv+vr6//paSk/729vf+UlJT/ubm5/6enp/+xsbH/0dHR//z8/P///////v7+//7+/v/+/v7//v7+/////////////v7+/6mpqZiRkZH/8vLy/////v/+/v7//////////////////v7+//7+/v/+/v///v/////////h4eD/urm5/+/v7//s7Oz/19fX/8bGxv/e3t7/9fX1/+rq6/+4uLj/8fHx///////+/v7+//////7+/v/+/v7////////////+/v7/m5ubZ4ODg/Dt7e3///////////7///7+/v7+//7+/v7//v7+/v7+/vn5+f729vb++vr6/ufn6P+3t7f/7e3t//j4+P7d3d3+2NjY/vLy8v7+/v7+2NjY/r6+vv74+Pj+//////////7////+/v7+//7+/v/////+/////v////41NTUjcXFx2Obm5v/////+/////v/////+/v7//////+/v7/7Q0ND/vr6+/rq6uv6+vr7/0dHR/s/Pz/6srKz/Z2dn/isrK/8jIyP/W1tb/6urq/+9vb3+5OTk/uXl5f/a2tr/39/f/vDw8P79/f3//////v7+/v7//////////o2NjSd1dXXa29vb//////7////+//////7+/v/h4eH/tbW1/srKyv/j4+P+5+fn/uPj4//Jycn+vr6+/re3t/8sLCz+AAAA/wAAAP8GBgb/hoaG/9fX1/6+vr7+vLy8/8HBwf++vr7+ubm5/sfHx//x8fH+/////v/////////+4ODgJISEhNnFxcX///////////7/////5+fn/7W1tf/k5OT///////////7//////////v7+/v7g4OD/tra2/66urv9ubm7/WVlZ/4ODg/+7u7v/vr6+/+Tk5P76+vr//f39//z8/P7w8PD/ysrK/7e3t//w8PD///////////+Hh4eAXV1d8aOjo////////////vv7+//BwcH/wcHB/62trf/Gxsb/+vr6///////+/v7//v7+/v/////W1tb/xMTE//b29v/29vb/3d3d/76+vv/k5OT/8fHx//7+/v/+/v7//v7+/v/////9/f3/zc3N/8PDw//7+/v//////4aGhviWlpb/i4uL//f39///////7u7u/6urq/9SUlL/ExMT/2dnZ//R0dH//f39//7+/v////////////Ly8v+4uLj/7+/v//r6+v/AwMD/nJyc/1RUVP9ubm7/3Nzc//7+/v/////+/v7+///////09PT/t7e3/+vr6///////7+/v/+zs7P98fHz/2NjY/v////7n5+f/k5OT/xYWFv8FBQX/Nzc3/5mZmf/7+/v//v7+//////7/////+vr6/8PDw//n5+f/8/Pz/6ysrP85OTn/AAAA/0VFRf6YmJj/9fX1//////7+/v7///////39/f/ExMT/3t7e////////////0dHR/zMzM/+Xl5f//////+fn5/+zs7P/aGho/xcXF/86Ojr/yMjI//7+/v/+/v7////////////4+Pj/vb29/+vr6//w8PD/s7Oz/0xMTP8AAAD/Dg4O/oKCgv/6+vr//////v7+/v///////v7+/8fHx//c3Nz///////////+4uLj/GRkZ/z8/P/7f39/+9vb2/r29vf/b29v+xMTE/tvb2//9/f3+/v7+/v////7////+/////uXl5f65ubn+9vb2//Pz8/++vr7/wcHB/nJycv5+fn7+4ODg///////+/v7+/v7+/v/////4+Pj+vLy8/ubm5v/////+/////vHx8f+ysrL/hYWF/ouLi/709PT/1NTU/729vf/5+fn+//////7+/v7////+//////////729vb+vb29/9bW1v///////f39/8fHx//Ozs7/+fn5/vz8/P7///////////////7////+/////9/f3/65ubn++Pj4/+7u7v7Jycn/+Pj4/v/////y8vL+iIiI/pubm//09PT/yMjI/729vf7n5+f/+vr6/vz8/P76+vr/5+fn/r29vf7Jycn/+vr6////////////8PDw/7e3t//Y2Nj+/f39/v///////////////v////7p6en/t7e3/uLi4v/x8fH/jo6O/nNzc+WQkJD+o6Oj/6CgoP5+fn76Tk5O4ZycnPvh4eH/1tbW/r29vf/AwMD/wcHB/76+vv+5ubn+1tbW/vr6+v//////////////////////6enp/7m5uf7Dw8P+39/f/+jo6P/k5OT+zMzM/7a2tv/d3d3+6urq/4ODg/9wcHD/q6urP3BwcGZFRUVpSkpKZ4WFhV+MjIw4bW1tm3d3d+utra3/2NjY/+Tk5P7l5eX/6enp//b29v7////////////////+/v7/////////////////9fX1/9bW1v/CwsL/vb29/8HBwf/R0dH/5OTk/8bGxv99fX3zY2Njzmtra9IREREA////AP///wC8vLwAAAAAAAAAAADOzs4LdnZ2RW1tbaN7e3vrmZmZ/7e3t//X19f/6Ojo//Dw8P/29vb/+vr6//39/f////////////////////////////f39//q6ur/3d3d/re3t/+Ojo7+fHx84IeHh3K8vLwXcHBwHcPDwwCAgIAAICAgAD8/PwCYmJgAxsbGAJeXlwH///8AysrKDampqVN9fX2OcHBwxXt7e/d3d3f1gYGB+ZGRkfyjo6P7s7Oz+7+/v/vFxcX7xsbG+8DAwPuzs7P7nJyc/IGBgfp4eHj6cXFxzImJiYu+vr48////BaqqqgH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAAAAAABQSwcIqXMT8L4QAAC+EAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAc3RhdGljXGltZy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAc3RhdGljXGltZ1xiZy5wbmeJUE5HDQoaCgAAAA1JSERSAAAAlgAAAJYIAgAAALNj5rUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI2RTRGQ0JFNTVBQUUyMTE5NzAwQjU5OUUyOTNFQTA3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA5NzBGM0NFQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA5NzBGM0NEQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkFBQkJFQTE4RkI1RTIxMUJCRTNBQkY0MzkzOEFFQkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7MjgrrAAAoI0lEQVR42uzd7ZJkR5GtYXVSwP1fKCMQzBwDhHR2aXU/9SoKww5Dbh2Eqn60VWdl7ozwiPCP5cs9Pn399TePx+Nvf/vbp0+fvvvuu1//+td//etfX15ert9/9atfffvtt9dfr99/85vf/OUvf7l+/+qrr/bf6yPXX/fL9dm97frlevH6+PUQL17/7nXv2ZOvX66v2+t78/X7vvf777+/Hnu9sjdc/90brhevv16/XK9cX3H9vmFvYNdfr/fvT9cr11+/++Hn+uX60/X6XtyT98F96vr3+uD1y/XKNfjrndcrvnRjvl7xkevFSWNvuP7dmwntesj1huudE8Uefpec//CHP00EG4ShXL9sthvH3jO5TxbXv3vEZrvvuD5y/fcaxPVfs90b9inj/uqHnwndwycmw9jH9+aN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w3a6wnOpCa4gdQeJQJeeiFsXYlc2FYcbyN0V27XTaTOuRTqGnrcDXNUp4qRkMkYWjkUv7LUnjkZBT5fz/xVgAMwCMiX3lhRvAAAAAElFTkSuQmCCUEsHCJuj1O/zKwAA8ysAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHN0YXRpY1xpbWdcaGVhZGVyLmdpZkdJRjg5YWQAZACzAABNdJpJbZJOdZxIbJBJbpJMc5lKb5RMcphKcJVLcZYAAAAAAAAAAAAAAAAAAAAAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjAxNUFBQzE1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjAxNUFBQzI1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFCRjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgc3RSZWY6ZG9jdW1lbnRJRD0i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Ow0KICAgIHRvcEJ1dHRvbigpOw0KICAgIHJlbmRlck1hcmtkb3duKCk7DQogICAgaW5pdENvbW1lbnQoKTsNCn0pOw0KDQpmdW5jdGlvbiBmaXhIZWFkZXIoKSB7DQogICAgdmFyICRuYXYgPSAkKCcjbmF2Jyk7DQogICAgdmFyIHRvcCA9ICRuYXYub2Zmc2V0KCkudG9wOw0KICAgIGNvbnNvbGUubG9nKHRvcCk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkbmF2LmFkZENsYXNzKCJmaXhlZCIpLnJlbW92ZUNsYXNzKCJ0ZXh0LWNlbnRlciIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG5hdi5yZW1vdmVDbGFzcygiZml4ZWQiKS5hZGRDbGFzcygidGV4dC1jZW50ZXIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiB0b3BCdXR0b24oKSB7DQogICAgdmFyIHRvcCA9ICQoJyNuYXYnKS5vZmZzZXQoKS50b3A7DQogICAgdmFyICR0b3AgPSAkKCcjZ28tdG9wJyk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkdG9wLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdG9wLmFkZENsYXNzKCdoaWRlJyk7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkdG9wLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiAwfSwgNTAwKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pDQp9DQoNCmZ1bmN0aW9uIHJlbmRlck1hcmtkb3duKCkgew0KICAgIHZhciAkbWQgPSAkKCcubWFya2Rvd24nKTsNCiAgICAkbWQuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAkKGl0ZW0pLmh0bWwobWFya2VkKCQoaXRlbSkuaHRtbCgpLnJlcGxhY2UoLyZndDsvZywgJz4nKSkpOw0KICAgIH0pOw0KICAgIHZhciBjb2RlID0gJG1kLmZpbmQoJ3ByZSBjb2RlJyk7DQogICAgaWYgKGNvZGUubGVuZ3RoKSB7DQogICAgICAgICQoIjxsaW5rPiIpLmF0dHIoeyByZWw6ICJzdHlsZXNoZWV0IiwgdHlwZTogInRleHQvY3NzIiwgaHJlZjogIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MifSkuYXBwZW5kVG8oImhlYWQiKTsNCiAgICAgICAgJC5nZXRTY3JpcHQoIi9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBjb2RlLmVhY2goZnVuY3Rpb24gKGksIGl0ZW0pIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGl0ZW0pDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBpbml0Q29tbWVudCgpIHsNCiAgICB2YXIgJGxpc3QgPSAkKCcjY29tbWVudC1saXN0Jyk7DQogICAgaWYgKCEkbGlzdC5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpIHsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXV0aG9yJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF1dGhvciIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtZW1haWwiKSk7DQogICAgICAgICQoJyNjb21tZW50LXVybCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC11cmwiKSk7DQogICAgICAgICQoJyNjb21tZW50LWF2YXRhcicpLmF0dHIoInNyYyIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF2YXRhciIpKTsNCiAgICAgICAgJCgnLmMtYXZhdGFyJykucmVtb3ZlQ2xhc3MoIm51bGwiKTsNCiAgICB9DQogICAgJCgnI2NvbW1lbnQtY29udGVudCcpLm9uKCJmb2N1cyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKCQoJy5jLWF2YXRhcicpLmhhc0NsYXNzKCJudWxsIikpIHsNCiAgICAgICAgICAgICQoJy5jLWF2YXRhci1maWVsZCcpLnJlbW92ZSgpOw0KICAgICAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJCgnLm5vdC1tZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICQoJy5jLWluZm8tZmllbGRzJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LXNob3cnKS5vbigiY2xpY2siLCAiLmVuYWJsZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgiI2NvbW1lbnQtc2hvdyIpLnJlbW92ZSgpOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICB9KTsNCiAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdXRob3IiLCAkKCcjY29tbWVudC1hdXRob3InKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1lbWFpbCIsICQoJyNjb21tZW50LWVtYWlsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtdXJsIiwgJCgnI2NvbW1lbnQtdXJsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtYXZhdGFyIiwganNvbi5jb21tZW50LmF2YXRhcik7DQogICAgICAgICAgICB2YXIgdHBsID0gJCgkKCcjY29tbWVudC10cGwnKS5odG1sKCkpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF2YXRhciIpLmF0dHIoInNyYyIsIGpzb24uY29tbWVudC5hdmF0YXIpLmF0dHIoImFsdCIsIGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF1dGhvciIpLmF0dHIoImhyZWYiLCBqc29uLmNvbW1lbnQudXJsKS50ZXh0KGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXJlcGx5IikuYXR0cigicmVsIiwganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIHRwbC5maW5kKCIuYy1jb250ZW50IikuaHRtbChqc29uLmNvbW1lbnQuY29udGVudCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnBhcmVudF9tZCkgew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikuaHRtbChtYXJrZWQoanNvbi5jb21tZW50LnBhcmVudF9tZCkpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtcC1tZCIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHBsLmF0dHIoImlkIiwgImNvbW1lbnQtIiArIGpzb24uY29tbWVudC5pZCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnN0YXR1cyA9PSAiYXBwcm92ZWQiKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbGlzdC5hcHBlbmQodHBsKTsNCiAgICAgICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhbGVydCgi5o+Q5Lqk5aSx6LSlISIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJGxpc3Qub24oImNsaWNrIiwgIi5jLXJlcGx5IiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgdmFyIHBjID0gJCgnI2NvbW1lbnQtJyArIGlkKTsNCiAgICAgICAgdmFyIG1kID0gIj4gQCIgKyBwYy5maW5kKCIuYy1hdXRob3IiKS50ZXh0KCkgKyAiXG5cbiI7DQogICAgICAgIG1kICs9ICI+ICIgKyBwYy5maW5kKCIuYy1jb250ZW50IikuaHRtbCgpICsgIlxuIjsNCiAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLmJlZm9yZSgnPGRpdiBjbGFzcz0icmVwbHktbWQgbWFya2Rvd24iPicgKyBtYXJrZWQobWQpICsgJzwvZGl2PicpOw0KICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICBpZiAoJCgnI2NvbW1lbnQtc2hvdycpLmxlbmd0aCkgew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtc2hvdyAuZW5hYmxlJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICAgICAgfQ0KICAgICAgICAkKCcuY2FuY2VsLXJlcGx5Jykuc2hvdygpOw0KICAgICAgICB2YXIgdG9wID0gJCgnI2NvbW1lbnQtZm9ybScpLm9mZnNldCgpLnRvcDsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiB0b3B9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnLmNhbmNlbC1yZXBseScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlcGx5LW1kJykucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCn0NClBLBwge4R5ydRIAAHUSAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcanNcdXBsb2FkLmpzZnVuY3Rpb24gaW5pdFVwbG9hZChwKSB7DQogICAgJCgnI2F0dGFjaC1zaG93Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLnRyaWdnZXIoImNsaWNrIik7DQogICAgfSk7DQogICAgJCgnI2F0dGFjaC11cGxvYWQnKS5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoY29uZmlybSgi56uL5Y2z5LiK5LygPyIpKSB7DQogICAgICAgICAgICB2YXIgYmFyID0gJCgnPHAgY2xhc3M9ImZpbGUtcHJvZ3Jlc3MgaW5saW5lLWJsb2NrIj4wJTwvcD4nKTsNCiAgICAgICAgICAgICQoJyNhdHRhY2gtZm9ybScpLmFqYXhTdWJtaXQoew0KICAgICAgICAgICAgICAgICJiZWZvcmVTdWJtaXQiOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQocCkuYmVmb3JlKGJhcik7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAidXBsb2FkUHJvZ3Jlc3MiOiBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCB0b3RhbCwgcGVyY2VudENvbXBsZXRlKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBwZXJjZW50VmFsID0gcGVyY2VudENvbXBsZXRlICsgJyUnOw0KICAgICAgICAgICAgICAgICAgICBiYXIuY3NzKCJ3aWR0aCIsIHBlcmNlbnRWYWwpLmh0bWwocGVyY2VudFZhbCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKGpzb24ubXNnKS5hZGRDbGFzcygiZXJyIik7DQogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXIucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDAwKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKCIvIiArIGpzb24uZmlsZS5VcmwgKyAiJm5ic3A7Jm5ic3A7Jm5ic3A7KEAiICsganNvbi5maWxlLk5hbWUgKyAiKSIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudmFsKCIiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICQodGhpcykudmFsKCIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfVBLBwiIiRf79gQAAPYEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcbGliL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAACEAAABzdGF0aWNcbGliXGNvZGVtaXJyb3ItbW9kZS5taW4uanMhZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9L14oXHMqKShbKistXXwoXGQrKVwuKShccyopLyxlPSIqKy0iO0NvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0PWZ1bmN0aW9uKHIpe3ZhciBuLGk9ci5nZXRDdXJzb3IoKSxvPXIuZ2V0U3RhdGVBZnRlcihpLmxpbmUpLmxpc3QhPT0hMTtpZighb3x8IShuPXIuZ2V0TGluZShpLmxpbmUpLm1hdGNoKHQpKSlyZXR1cm4gci5leGVjQ29tbWFuZCgibmV3bGluZUFuZEluZGVudCIpLHZvaWQgMDt2YXIgbD1uWzFdLGE9bls0XSxzPWUuaW5kZXhPZihuWzJdKT49MD9uWzJdOnBhcnNlSW50KG5bM10sMTApKzErIi4iO3IucmVwbGFjZVNlbGVjdGlvbigiXG4iK2wrcythLCJlbmQiKX19KCksQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4gZS5mPWUuaW5saW5lPXIscih0LGUpfWZ1bmN0aW9uIG4odCxlLHIpe3JldHVybiBlLmY9ZS5ibG9jaz1yLHIodCxlKX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LmxpbmtUaXRsZT0hMSx0LmVtPSExLHQuc3Ryb25nPSExLHQucXVvdGU9MCxnfHx0LmYhPWx8fCh0LmY9Yyx0LmJsb2NrPW8pLHQudHJhaWxpbmdTcGFjZT0wLHQudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsdC50aGlzTGluZUhhc0NvbnRlbnQ9ITEsbnVsbH1mdW5jdGlvbiBvKHQsaSl7dmFyIG89aS5saXN0IT09ITE7aS5saXN0IT09ITEmJmkuaW5kZW50YXRpb25EaWZmPj0wPyhpLmluZGVudGF0aW9uRGlmZjw0JiYoaS5pbmRlbnRhdGlvbi09aS5pbmRlbnRhdGlvbkRpZmYpLGkubGlzdD1udWxsKTppLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbj4wPyhpLmxpc3Q9bnVsbCxpLmxpc3REZXB0aD1NYXRoLmZsb29yKGkuaW5kZW50YXRpb24vNCkpOmkubGlzdCE9PSExJiYoaS5saXN0PSExLGkubGlzdERlcHRoPTApO3ZhciBsPW51bGw7aWYoaS5pbmRlbnRhdGlvbkRpZmY+PTQpcmV0dXJuIGkuaW5kZW50YXRpb24tPTQsdC5za2lwVG9FbmQoKSxrO2lmKHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDtpZihsPXQubWF0Y2goUikpaS5oZWFkZXI9bFswXS5sZW5ndGg8PTY/bFswXS5sZW5ndGg6NjtlbHNlIGlmKGkucHJldkxpbmVIYXNDb250ZW50JiYobD10Lm1hdGNoKEcpKSlpLmhlYWRlcj0iPSI9PWxbMF0uY2hhckF0KDApPzE6MjtlbHNlIGlmKHQuZWF0KCI+IikpZm9yKGkuaW5kZW50YXRpb24rKyxpLnF1b3RlPTEsdC5lYXRTcGFjZSgpO3QuZWF0KCI+Iik7KXQuZWF0U3BhY2UoKSxpLnF1b3RlKys7ZWxzZXtpZigiWyI9PT10LnBlZWsoKSlyZXR1cm4gcih0LGksaCk7aWYodC5tYXRjaChJLCEwKSlyZXR1cm4gQTtpZihpLnByZXZMaW5lSGFzQ29udGVudCYmIW98fCF0Lm1hdGNoKFAsITApJiYhdC5tYXRjaChGLCEwKSl7aWYoZS5mZW5jZWRDb2RlQmxvY2tzJiZ0Lm1hdGNoKC9eYGBgKFtcdysjXSopLywhMCkpcmV0dXJuIGkubG9jYWxNb2RlPXgoUmVnRXhwLiQxKSxpLmxvY2FsTW9kZSYmKGkubG9jYWxTdGF0ZT1pLmxvY2FsTW9kZS5zdGFydFN0YXRlKCkpLG4odCxpLGEpLGt9ZWxzZSBpLmluZGVudGF0aW9uKz00LGkubGlzdD0hMCxpLmxpc3REZXB0aCsrLGUudGFza0xpc3RzJiZ0Lm1hdGNoKEIsITEpJiYoaS50YXNrTGlzdD0hMCl9cmV0dXJuIHIodCxpLGkuaW5saW5lKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9di50b2tlbih0LGUuaHRtbFN0YXRlKTtyZXR1cm4gZyYmInRhZyI9PT1yJiYib3BlblRhZyIhPT1lLmh0bWxTdGF0ZS50eXBlJiYhZS5odG1sU3RhdGUuY29udGV4dCYmKGUuZj1jLGUuYmxvY2s9byksZS5tZF9pbnNpZGUmJi0xIT10LmN1cnJlbnQoKS5pbmRleE9mKCI+IikmJihlLmY9YyxlLmJsb2NrPW8sZS5odG1sU3RhdGUuY29udGV4dD12b2lkIDApLHJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LnNvbCgpJiZ0Lm1hdGNoKC9eYGBgLywhMCk/KGUubG9jYWxNb2RlPWUubG9jYWxTdGF0ZT1udWxsLGUuZj1jLGUuYmxvY2s9byxrKTplLmxvY2FsTW9kZT9lLmxvY2FsTW9kZS50b2tlbih0LGUubG9jYWxTdGF0ZSk6KHQuc2tpcFRvRW5kKCksayl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1bXTtpZih0LnRhc2tPcGVuKXJldHVybiJtZXRhIjtpZih0LnRhc2tDbG9zZWQpcmV0dXJuInByb3BlcnR5IjtpZih0LnN0cm9uZyYmZS5wdXNoKHopLHQuZW0mJmUucHVzaChFKSx0LmxpbmtUZXh0JiZlLnB1c2goTyksdC5jb2RlJiZlLnB1c2goayksdC5oZWFkZXImJihlLnB1c2goQyksZS5wdXNoKEMrdC5oZWFkZXIpKSx0LnF1b3RlJiZlLnB1c2godC5xdW90ZSUyP3c6TCksdC5saXN0IT09ITEpe3ZhciByPSh0Lmxpc3REZXB0aC0xKSUzO3I/MT09PXI/ZS5wdXNoKE0pOmUucHVzaChUKTplLnB1c2goUyl9cmV0dXJuIHQudHJhaWxpbmdTcGFjZU5ld0xpbmU/ZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS1uZXctbGluZSIpOnQudHJhaWxpbmdTcGFjZSYmZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS0iKyh0LnRyYWlsaW5nU3BhY2UlMj8iYSI6ImIiKSksZS5sZW5ndGg/ZS5qb2luKCIgIik6bnVsbH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQubWF0Y2goXywhMCk/cyhlKTp2b2lkIDB9ZnVuY3Rpb24gYyh0LGkpe3ZhciBvPWkudGV4dCh0LGkpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgbylyZXR1cm4gbztpZihpLmxpc3QpcmV0dXJuIGkubGlzdD1udWxsLHMoaSk7aWYoaS50YXNrTGlzdCl7dmFyIGE9IngiIT09dC5tYXRjaChCLCEwKVsxXTtyZXR1cm4gYT9pLnRhc2tPcGVuPSEwOmkudGFza0Nsb3NlZD0hMCxpLnRhc2tMaXN0PSExLHMoaSl9aS50YXNrT3Blbj0hMSxpLnRhc2tDbG9zZWQ9ITE7dmFyIHU9dC5zb2woKSxjPXQubmV4dCgpO2lmKCJcXCI9PT1jKXJldHVybiB0Lm5leHQoKSxzKGkpO2lmKGkubGlua1RpdGxlKXtpLmxpbmtUaXRsZT0hMTt2YXIgaD1jOyIoIj09PWMmJihoPSIpIiksaD0oaCsiIikucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csIlxcJDEiKTt2YXIgZD0iXlxccyooPzpbXiIraCsiXFxcXF0rfFxcXFxcXFxcfFxcXFwuKSIraDtpZih0Lm1hdGNoKG5ldyBSZWdFeHAoZCksITApKXJldHVybiBXfWlmKCJgIj09PWMpe3ZhciBwPXMoaSksZz10LnBvczt0LmVhdFdoaWxlKCJgIik7dmFyIHY9MSt0LnBvcy1nO3JldHVybiBpLmNvZGU/dj09PWI/KGkuY29kZT0hMSxwKTpzKGkpOihiPXYsaS5jb2RlPSEwLHMoaSkpfWlmKGkuY29kZSlyZXR1cm4gcyhpKTtpZigiISI9PT1jJiZ0Lm1hdGNoKC9cW1teXF1dKlxdID8oPzpcKHxcWykvLCExKSlyZXR1cm4gdC5tYXRjaCgvXFtbXlxdXSpcXS8pLGkuaW5saW5lPWkuZj1mLE47aWYoIlsiPT09YyYmdC5tYXRjaCgvLipcXShcKHwgP1xbKS8sITEpKXJldHVybiBpLmxpbmtUZXh0PSEwLHMoaSk7aWYoIl0iPT09YyYmaS5saW5rVGV4dCl7dmFyIHk9cyhpKTtyZXR1cm4gaS5saW5rVGV4dD0hMSxpLmlubGluZT1pLmY9Zix5fWlmKCI8Ij09PWMmJnQubWF0Y2goL14oaHR0cHM/fGZ0cHM/KTpcL1wvKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEgsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXltePiBcXF0rQCg/OlteXFw+XXxcXC4pKz4vLCExKSlyZXR1cm4gcih0LGksbShELCI+IikpO2lmKCI8Ij09PWMmJnQubWF0Y2goL15cdy8sITEpKXtpZigtMSE9dC5zdHJpbmcuaW5kZXhPZigiPiIpKXt2YXIgeD10LnN0cmluZy5zdWJzdHJpbmcoMSx0LnN0cmluZy5pbmRleE9mKCI+IikpOy9tYXJrZG93blxzKj1ccyooJ3wiKXswLDF9MSgnfCIpezAsMX0vLnRlc3QoeCkmJihpLm1kX2luc2lkZT0hMCl9cmV0dXJuIHQuYmFja1VwKDEpLG4odCxpLGwpfWlmKCI8Ij09PWMmJnQubWF0Y2goL15cL1x3Kj8+LykpcmV0dXJuIGkubWRfaW5zaWRlPSExLCJ0YWciO3ZhciBDPSExO2lmKCFlLnVuZGVyc2NvcmVzQnJlYWtXb3JkcyYmIl8iPT09YyYmIl8iIT09dC5wZWVrKCkmJnQubWF0Y2goLyhcdykvLCExKSl7dmFyIGs9dC5wb3MtMjtpZihrPj0wKXt2YXIgdz10LnN0cmluZy5jaGFyQXQoayk7Il8iIT09dyYmdy5tYXRjaCgvKFx3KS8sITEpJiYoQz0hMCl9fXZhciBwPXMoaSk7aWYoIioiPT09Y3x8Il8iPT09YyYmIUMpaWYodSYmIiAiPT09dC5wZWVrKCkpO2Vsc2V7aWYoaS5zdHJvbmc9PT1jJiZ0LmVhdChjKSlyZXR1cm4gaS5zdHJvbmc9ITEscDtpZighaS5zdHJvbmcmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz1jLHMoaSk7aWYoaS5lbT09PWMpcmV0dXJuIGkuZW09ITEscDtpZighaS5lbSlyZXR1cm4gaS5lbT1jLHMoaSl9ZWxzZSBpZigiICI9PT1jJiYodC5lYXQoIioiKXx8dC5lYXQoIl8iKSkpe2lmKCIgIj09PXQucGVlaygpKXJldHVybiBzKGkpO3QuYmFja1VwKDEpfXJldHVybiIgIj09PWMmJih0Lm1hdGNoKC8gKyQvLCExKT9pLnRyYWlsaW5nU3BhY2UrKzppLnRyYWlsaW5nU3BhY2UmJihpLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSEwKSkscyhpKX1mdW5jdGlvbiBmKHQsZSl7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3ZhciBuPXQubmV4dCgpO3JldHVybiIoIj09PW58fCJbIj09PW4/cih0LGUsbShXLCIoIj09PW4/IikiOiJdIikpOiJlcnJvciJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0Lm1hdGNoKC9eW15cXV0qXF06LywhMCk/KGUuZj1kLE8pOnIodCxlLGMpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdC5lYXRTcGFjZSgpP251bGw6KHQubWF0Y2goL15bXlxzXSsvLCEwKSx2b2lkIDA9PT10LnBlZWsoKT9lLmxpbmtUaXRsZT0hMDp0Lm1hdGNoKC9eKD86XHMrKD86Iig/OlteIlxcXXxcXFxcfFxcLikrInwnKD86W14nXFxdfFxcXFx8XFwuKSsnfFwoKD86W14pXFxdfFxcXFx8XFwuKStcKSkpPy8sITApLGUuZj1lLmlubGluZT1jLFcpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIFZbdF18fCh0PSh0KyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpLFZbdF09bmV3IFJlZ0V4cCgiXig/OlteXFxcXF18XFxcXC4pKj8oIit0KyIpIikpLFZbdF19ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIHI9cnx8YyxmdW5jdGlvbihuLGkpe3JldHVybiBuLm1hdGNoKHAoZSkpLGkuaW5saW5lPWkuZj1yLHR9fXZhciBnPUNvZGVNaXJyb3IubW9kZXMuaGFzT3duUHJvcGVydHkoInhtbCIpLHY9Q29kZU1pcnJvci5nZXRNb2RlKHQsZz97bmFtZToieG1sIixodG1sTW9kZTohMH06InRleHQvcGxhaW4iKSx5PXtodG1sOiJodG1sbWl4ZWQiLGpzOiJqYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uIixjOiJ0ZXh0L3gtY3NyYyIsImMrKyI6InRleHQveC1jKytzcmMiLGphdmE6InRleHQveC1qYXZhIixjc2hhcnA6InRleHQveC1jc2hhcnAiLCJjIyI6InRleHQveC1jc2hhcnAiLHNjYWxhOiJ0ZXh0L3gtc2NhbGEifSx4PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9e30sbz1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5tb2RlcylDb2RlTWlycm9yLm1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZvLnB1c2gobCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyluW29bZV1dPW9bZV07dmFyIGE9W107Zm9yKHZhciBsIGluIENvZGVNaXJyb3IubWltZU1vZGVzKUNvZGVNaXJyb3IubWltZU1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZhLnB1c2goe21pbWU6bCxtb2RlOkNvZGVNaXJyb3IubWltZU1vZGVzW2xdfSk7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylyPWFbZV0ubWltZSxpW3JdPWFbZV0ubWltZTtmb3IodmFyIHMgaW4geSkoeVtzXWluIG58fHlbc11pbiBpKSYmKG5bc109eVtzXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdP0NvZGVNaXJyb3IuZ2V0TW9kZSh0LG5bZV0pOm51bGx9fSgpO3ZvaWQgMD09PWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYoZS51bmRlcnNjb3Jlc0JyZWFrV29yZHM9ITApLHZvaWQgMD09PWUuZmVuY2VkQ29kZUJsb2NrcyYmKGUuZmVuY2VkQ29kZUJsb2Nrcz0hMSksdm9pZCAwPT09ZS50YXNrTGlzdHMmJihlLnRhc2tMaXN0cz0hMSk7dmFyIGI9MCxDPSJoZWFkZXIiLGs9ImNvbW1lbnQiLHc9ImF0b20iLEw9Im51bWJlciIsUz0idmFyaWFibGUtMiIsTT0idmFyaWFibGUtMyIsVD0ia2V5d29yZCIsQT0iaHIiLE49InRhZyIsSD0ibGluayIsRD0ibGluayIsTz0ibGluayIsVz0ic3RyaW5nIixFPSJlbSIsej0ic3Ryb25nIixJPS9eKFsqXC09X10pKD86XHMqXDEpezIsfVxzKiQvLFA9L15bKlwtK11ccysvLEY9L15bMC05XStcLlxzKy8sQj0vXlxbKHh8IClcXSg/PVxzKS8sUj0vXiMrLyxHPS9eKD86XD17MSx9fC17MSx9KSQvLF89L15bXiFcW1xdKl9cXDw+YCAiJyhdKy8sVj1bXTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybntmOm8scHJldkxpbmVIYXNDb250ZW50OiExLHRoaXNMaW5lSGFzQ29udGVudDohMSxibG9jazpvLGh0bWxTdGF0ZTpDb2RlTWlycm9yLnN0YXJ0U3RhdGUodiksaW5kZW50YXRpb246MCxpbmxpbmU6Yyx0ZXh0OnUsbGlua1RleHQ6ITEsbGlua1RpdGxlOiExLGVtOiExLHN0cm9uZzohMSxoZWFkZXI6MCx0YXNrTGlzdDohMSxsaXN0OiExLGxpc3REZXB0aDowLHF1b3RlOjAsdHJhaWxpbmdTcGFjZTowLHRyYWlsaW5nU3BhY2VOZXdMaW5lOiExfX0sY29weVN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybntmOnQuZixwcmV2TGluZUhhc0NvbnRlbnQ6dC5wcmV2TGluZUhhc0NvbnRlbnQsdGhpc0xpbmVIYXNDb250ZW50OnQudGhpc0xpbmVIYXNDb250ZW50LGJsb2NrOnQuYmxvY2ssaHRtbFN0YXRlOkNvZGVNaXJyb3IuY29weVN0YXRlKHYsdC5odG1sU3RhdGUpLGluZGVudGF0aW9uOnQuaW5kZW50YXRpb24sbG9jYWxNb2RlOnQubG9jYWxNb2RlLGxvY2FsU3RhdGU6dC5sb2NhbE1vZGU/Q29kZU1pcnJvci5jb3B5U3RhdGUodC5sb2NhbE1vZGUsdC5sb2NhbFN0YXRlKTpudWxsLGlubGluZTp0LmlubGluZSx0ZXh0OnQudGV4dCxsaW5rVGl0bGU6dC5saW5rVGl0bGUsZW06dC5lbSxzdHJvbmc6dC5zdHJvbmcsaGVhZGVyOnQuaGVhZGVyLHRhc2tMaXN0OnQudGFza0xpc3QsbGlzdDp0Lmxpc3QsbGlzdERlcHRoOnQubGlzdERlcHRoLHF1b3RlOnQucXVvdGUsdHJhaWxpbmdTcGFjZTp0LnRyYWlsaW5nU3BhY2UsdHJhaWxpbmdTcGFjZU5ld0xpbmU6dC50cmFpbGluZ1NwYWNlTmV3TGluZSxtZF9pbnNpZGU6dC5tZF9pbnNpZGV9fSx0b2tlbjpmdW5jdGlvbih0LGUpe2lmKHQuc29sKCkpe2lmKHQubWF0Y2goL15ccyokLywhMCkpcmV0dXJuIGUucHJldkxpbmVIYXNDb250ZW50PSExLGkoZSk7ZS5wcmV2TGluZUhhc0NvbnRlbnQ9ZS50aGlzTGluZUhhc0NvbnRlbnQsZS50aGlzTGluZUhhc0NvbnRlbnQ9ITAsZS5oZWFkZXI9MCxlLnRhc2tMaXN0PSExLGUuY29kZT0hMSxlLnRyYWlsaW5nU3BhY2U9MCxlLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSExLGUuZj1lLmJsb2NrO3ZhciByPXQubWF0Y2goL15ccyovLCEwKVswXS5yZXBsYWNlKC9cdC9nLCIgICAgIikubGVuZ3RoLG49NCpNYXRoLmZsb29yKChyLWUuaW5kZW50YXRpb24pLzQpO24+NCYmKG49NCk7dmFyIG89ZS5pbmRlbnRhdGlvbituO2lmKGUuaW5kZW50YXRpb25EaWZmPW8tZS5pbmRlbnRhdGlvbixlLmluZGVudGF0aW9uPW8scj4wKXJldHVybiBudWxsfXJldHVybiBlLmYodCxlKX0sYmxhbmtMaW5lOmksZ2V0VHlwZTpzfX0sInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LW1hcmtkb3duIiwibWFya2Rvd24iKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4gZS50b2tlbml6ZT1yLHIodCxlKX12YXIgaT10Lm5leHQoKTtpZigiPCI9PWkpe2lmKHQuZWF0KCIhIikpcmV0dXJuIHQuZWF0KCJbIik/dC5tYXRjaCgiQ0RBVEFbIik/cihvKCJhdG9tIiwiXV0+IikpOm51bGw6dC5tYXRjaCgiLS0iKT9yKG8oImNvbW1lbnQiLCItLT4iKSk6dC5tYXRjaCgiRE9DVFlQRSIsITAsITApPyh0LmVhdFdoaWxlKC9bXHdcLl9cLV0vKSxyKGwoMSkpKTpudWxsO2lmKHQuZWF0KCI/IikpcmV0dXJuIHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLGUudG9rZW5pemU9bygibWV0YSIsIj8+IiksIm1ldGEiO3ZhciBhPXQuZWF0KCIvIik7eD0iIjtmb3IodmFyIHM7cz10LmVhdCgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7KXgrPXM7cmV0dXJuIHg/KGI9YT8iY2xvc2VUYWciOiJvcGVuVGFnIixlLnRva2VuaXplPW4sInRhZyIpOiJ0YWcgZXJyb3IifWlmKCImIj09aSl7dmFyIHU7cmV0dXJuIHU9dC5lYXQoIiMiKT90LmVhdCgieCIpP3QuZWF0V2hpbGUoL1thLWZBLUZcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXGRdLykmJnQuZWF0KCI7Iik6dC5lYXRXaGlsZSgvW1x3XC5cLTpdLykmJnQuZWF0KCI7IiksdT8iYXRvbSI6ImVycm9yIn1yZXR1cm4gdC5lYXRXaGlsZSgvW14mPF0vKSxudWxsfWZ1bmN0aW9uIG4odCxlKXt2YXIgbj10Lm5leHQoKTtpZigiPiI9PW58fCIvIj09biYmdC5lYXQoIj4iKSlyZXR1cm4gZS50b2tlbml6ZT1yLGI9Ij4iPT1uPyJlbmRUYWciOiJzZWxmY2xvc2VUYWciLCJ0YWciO2lmKCI9Ij09bilyZXR1cm4gYj0iZXF1YWxzIixudWxsO2lmKCI8Ij09bil7ZS50b2tlbml6ZT1yO3ZhciBvPWUudG9rZW5pemUodCxlKTtyZXR1cm4gbz9vKyIgZXJyb3IiOiJlcnJvciJ9cmV0dXJuL1tcJ1wiXS8udGVzdChuKT8oZS50b2tlbml6ZT1pKG4pLGUuc3RyaW5nU3RhcnRDb2w9dC5jb2x1bW4oKSxlLnRva2VuaXplKHQsZSkpOih0LmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKSwid29yZCIpfWZ1bmN0aW9uIGkodCl7dmFyIGU9ZnVuY3Rpb24oZSxyKXtmb3IoOyFlLmVvbCgpOylpZihlLm5leHQoKT09dCl7ci50b2tlbml6ZT1uO2JyZWFrfXJldHVybiJzdHJpbmcifTtyZXR1cm4gZS5pc0luQXR0cmlidXRlPSEwLGV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcig7IW4uZW9sKCk7KXtpZihuLm1hdGNoKGUpKXtpLnRva2VuaXplPXI7YnJlYWt9bi5uZXh0KCl9cmV0dXJuIHR9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpO251bGwhPShpPWUubmV4dCgpKTspe2lmKCI8Ij09aSlyZXR1cm4gbi50b2tlbml6ZT1sKHQrMSksbi50b2tlbml6ZShlLG4pO2lmKCI+Ij09aSl7aWYoMT09dCl7bi50b2tlbml6ZT1yO2JyZWFrfXJldHVybiBuLnRva2VuaXplPWwodC0xKSxuLnRva2VuaXplKGUsbil9fXJldHVybiJtZXRhIn19ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTE7dD49MDt0LS0pQy5jYy5wdXNoKGFyZ3VtZW50c1t0XSl9ZnVuY3Rpb24gcygpe3JldHVybiBhLmFwcGx5KG51bGwsYXJndW1lbnRzKSwhMH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9VC5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0KXx8Qy5jb250ZXh0JiZDLmNvbnRleHQubm9JbmRlbnQ7Qy5jb250ZXh0PXtwcmV2OkMuY29udGV4dCx0YWdOYW1lOnQsaW5kZW50OkMuaW5kZW50ZWQsc3RhcnRPZkxpbmU6ZSxub0luZGVudDpyfX1mdW5jdGlvbiBjKCl7Qy5jb250ZXh0JiYoQy5jb250ZXh0PUMuY29udGV4dC5wcmV2KX1mdW5jdGlvbiBmKHQpe2lmKCJvcGVuVGFnIj09dClyZXR1cm4gQy50YWdOYW1lPXgsQy50YWdTdGFydD1rLmNvbHVtbigpLHMobSxoKEMuc3RhcnRPZkxpbmUpKTtpZigiY2xvc2VUYWciPT10KXt2YXIgZT0hMTtyZXR1cm4gQy5jb250ZXh0P0MuY29udGV4dC50YWdOYW1lIT14JiYoVC5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KEMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiZjKCksZT0hQy5jb250ZXh0fHxDLmNvbnRleHQudGFnTmFtZSE9eCk6ZT0hMCxlJiYodz0iZXJyb3IiKSxzKGQoZSkpfXJldHVybiBzKCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9Qy50YWdOYW1lO3JldHVybiBDLnRhZ05hbWU9Qy50YWdTdGFydD1udWxsLCJzZWxmY2xvc2VUYWciPT1lfHwiZW5kVGFnIj09ZSYmVC5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkoci50b0xvd2VyQ2FzZSgpKT8ocChyLnRvTG93ZXJDYXNlKCkpLHMoKSk6ImVuZFRhZyI9PWU/KHAoci50b0xvd2VyQ2FzZSgpKSx1KHIsdCkscygpKTpzKCl9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiYodz0iZXJyb3IiKSwiZW5kVGFnIj09ZT8oYygpLHMoKSk6KHc9ImVycm9yIixzKGFyZ3VtZW50cy5jYWxsZWUpKX19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU7Oyl7aWYoIUMuY29udGV4dClyZXR1cm47aWYoZT1DLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCFULmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShlKXx8IVQuY29udGV4dEdyYWJiZXJzW2VdLmhhc093blByb3BlcnR5KHQpKXJldHVybjtjKCl9fWZ1bmN0aW9uIG0odCl7cmV0dXJuIndvcmQiPT10Pyh3PSJhdHRyaWJ1dGUiLHMoZyxtKSk6ImVuZFRhZyI9PXR8fCJzZWxmY2xvc2VUYWciPT10P2EoKToodz0iZXJyb3IiLHMobSkpfWZ1bmN0aW9uIGcodCl7aWYoImVxdWFscyI9PXQpcmV0dXJuIHModixtKTtpZihULmFsbG93TWlzc2luZyl7aWYoIndvcmQiPT10KXJldHVybiB3PSJhdHRyaWJ1dGUiLHMoZyxtKX1lbHNlIHc9ImVycm9yIjtyZXR1cm4iZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOnMoKX1mdW5jdGlvbiB2KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6IndvcmQiPT10JiZULmFsbG93VW5xdW90ZWQ/KHc9InN0cmluZyIscygpKToodz0iZXJyb3IiLCJlbmRUYWciPT10fHwic2VsZkNsb3NlVGFnIj09dD9hKCk6cygpKX1mdW5jdGlvbiB5KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6YSgpfXZhciB4LGIsQyxrLHcsTD10LmluZGVudFVuaXQsUz1lLm11bHRpbGluZVRhZ0luZGVudEZhY3Rvcnx8MSxNPWUubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZ3x8ITAsVD1lLmh0bWxNb2RlP3thdXRvU2VsZkNsb3NlcnM6e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxmcmFtZTohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxpbXBsaWNpdGx5Q2xvc2VkOntkZDohMCxsaTohMCxvcHRncm91cDohMCxvcHRpb246ITAscDohMCxycDohMCxydDohMCx0Ym9keTohMCx0ZDohMCx0Zm9vdDohMCx0aDohMCx0cjohMH0sY29udGV4dEdyYWJiZXJzOntkZDp7ZGQ6ITAsZHQ6ITB9LGR0OntkZDohMCxkdDohMH0sbGk6e2xpOiEwfSxvcHRpb246e29wdGlvbjohMCxvcHRncm91cDohMH0sb3B0Z3JvdXA6e29wdGdyb3VwOiEwfSxwOnthZGRyZXNzOiEwLGFydGljbGU6ITAsYXNpZGU6ITAsYmxvY2txdW90ZTohMCxkaXI6ITAsZGl2OiEwLGRsOiEwLGZpZWxkc2V0OiEwLGZvb3RlcjohMCxmb3JtOiEwLGgxOiEwLGgyOiEwLGgzOiEwLGg0OiEwLGg1OiEwLGg2OiEwLGhlYWRlcjohMCxoZ3JvdXA6ITAsaHI6ITAsbWVudTohMCxuYXY6ITAsb2w6ITAscDohMCxwcmU6ITAsc2VjdGlvbjohMCx0YWJsZTohMCx1bDohMH0scnA6e3JwOiEwLHJ0OiEwfSxydDp7cnA6ITAscnQ6ITB9LHRib2R5Ont0Ym9keTohMCx0Zm9vdDohMH0sdGQ6e3RkOiEwLHRoOiEwfSx0Zm9vdDp7dGJvZHk6ITB9LHRoOnt0ZDohMCx0aDohMH0sdGhlYWQ6e3Rib2R5OiEwLHRmb290OiEwfSx0cjp7dHI6ITB9fSxkb05vdEluZGVudDp7cHJlOiEwfSxhbGxvd1VucXVvdGVkOiEwLGFsbG93TWlzc2luZzohMH06e2F1dG9TZWxmQ2xvc2Vyczp7fSxpbXBsaWNpdGx5Q2xvc2VkOnt9LGNvbnRleHRHcmFiYmVyczp7fSxkb05vdEluZGVudDp7fSxhbGxvd1VucXVvdGVkOiExLGFsbG93TWlzc2luZzohMX0sQT1lLmFsaWduQ0RBVEE7cmV0dXJue3N0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57dG9rZW5pemU6cixjYzpbXSxpbmRlbnRlZDowLHN0YXJ0T2ZMaW5lOiEwLHRhZ05hbWU6bnVsbCx0YWdTdGFydDpudWxsLGNvbnRleHQ6bnVsbH19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYoIWUudGFnTmFtZSYmdC5zb2woKSYmKGUuc3RhcnRPZkxpbmU9ITAsZS5pbmRlbnRlZD10LmluZGVudGF0aW9uKCkpLHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDt3PWI9eD1udWxsO3ZhciByPWUudG9rZW5pemUodCxlKTtpZihlLnR5cGU9Yiwocnx8YikmJiJjb21tZW50IiE9cilmb3IoQz1lLGs9dDs7KXt2YXIgbj1lLmNjLnBvcCgpfHxmO2lmKG4oYnx8cikpYnJlYWt9cmV0dXJuIGUuc3RhcnRPZkxpbmU9ITEsdyYmKHI9ImVycm9yIj09dz9yKyIgZXJyb3IiOncpLHJ9LGluZGVudDpmdW5jdGlvbih0LGUsaSl7dmFyIG89dC5jb250ZXh0O2lmKHQudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSlyZXR1cm4gdC5zdHJpbmdTdGFydENvbCsxO2lmKHQudG9rZW5pemUhPW4mJnQudG9rZW5pemUhPXJ8fG8mJm8ubm9JbmRlbnQpcmV0dXJuIGk/aS5tYXRjaCgvXihccyopLylbMF0ubGVuZ3RoOjA7aWYodC50YWdOYW1lKXJldHVybiBNP3QudGFnU3RhcnQrdC50YWdOYW1lLmxlbmd0aCsyOnQudGFnU3RhcnQrTCpTO2lmKEEmJi88IVxbQ0RBVEFcWy8udGVzdChlKSlyZXR1cm4gMDtmb3IobyYmL148XC8vLnRlc3QoZSkmJihvPW8ucHJldik7byYmIW8uc3RhcnRPZkxpbmU7KW89by5wcmV2O3JldHVybiBvP28uaW5kZW50K0w6MH0sZWxlY3RyaWNDaGFyczoiLyIsYmxvY2tDb21tZW50U3RhcnQ6IjwhLS0iLGJsb2NrQ29tbWVudEVuZDoiLS0+Iixjb25maWd1cmF0aW9uOmUuaHRtbE1vZGU/Imh0bWwiOiJ4bWwiLGhlbHBlclR5cGU6ZS5odG1sTW9kZT8iaHRtbCI6InhtbCJ9fSksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIsInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwieG1sIiksQ29kZU1pcnJvci5taW1lTW9kZXMuaGFzT3duUHJvcGVydHkoInRleHQvaHRtbCIpfHxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIse25hbWU6InhtbCIsaHRtbE1vZGU6ITB9KTtQSwcIk9YPXYgyAACIMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAc3RhdGljXGxpYlxjb2RlbWlycm9yLm1pbi5qc3dpbmRvdy5Db2RlTWlycm9yPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQocixuKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQocixuKTt0aGlzLm9wdGlvbnM9bj1ufHx7fTtmb3IodmFyIGkgaW4gYW8pIW4uaGFzT3duUHJvcGVydHkoaSkmJmFvLmhhc093blByb3BlcnR5KGkpJiYobltpXT1hb1tpXSk7aChuKTt2YXIgbz0ic3RyaW5nIj09dHlwZW9mIG4udmFsdWU/MDpuLnZhbHVlLmZpcnN0LGw9dGhpcy5kaXNwbGF5PWUocixvKTtsLndyYXBwZXIuQ29kZU1pcnJvcj10aGlzLHUodGhpcyksbi5hdXRvZm9jdXMmJiFWaSYmcGUodGhpcyksdGhpcy5zdGF0ZT17a2V5TWFwczpbXSxvdmVybGF5czpbXSxtb2RlR2VuOjAsb3ZlcndyaXRlOiExLGZvY3VzZWQ6ITEsc3VwcHJlc3NFZGl0czohMSxwYXN0ZUluY29taW5nOiExLGRyYWdnaW5nVGV4dDohMSxoaWdobGlnaHQ6bmV3ICRufSxzKHRoaXMpLG4ubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIpO3ZhciBhPW4udmFsdWU7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcgd28obi52YWx1ZSxuLm1vZGUpKSxsZSh0aGlzLHBuKSh0aGlzLGEpLEFpJiZzZXRUaW1lb3V0KGlpKGRlLHRoaXMsITApLDIwKSxtZSh0aGlzKTt2YXIgYzt0cnl7Yz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0fWNhdGNoKGYpe31jfHxuLmF1dG9mb2N1cyYmIVZpP3NldFRpbWVvdXQoaWkoRWUsdGhpcyksMjApOnplKHRoaXMpLGxlKHRoaXMsZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gc28pc28ucHJvcGVydHlJc0VudW1lcmFibGUodCkmJnNvW3RdKHRoaXMsblt0XSx1byk7Zm9yKHZhciBlPTA7ZTxwby5sZW5ndGg7KytlKXBvW2VdKHRoaXMpfSkoKX1mdW5jdGlvbiBlKHQsZSl7dmFyIHI9e30sbj1yLmlucHV0PXNpKCJ0ZXh0YXJlYSIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lOyBmb250LXNpemU6IDRweDsiKTtyZXR1cm4gV2k/bi5zdHlsZS53aWR0aD0iMTAwMHB4IjpuLnNldEF0dHJpYnV0ZSgid3JhcCIsIm9mZiIpLEdpJiYobi5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwiZmFsc2UiKSxyLmlucHV0RGl2PXNpKCJkaXYiLFtuXSxudWxsLCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIpLHIuc2Nyb2xsYmFySD1zaSgiZGl2Iixbc2koImRpdiIsbnVsbCxudWxsLCJoZWlnaHQ6IDFweCIpXSwiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIiksci5zY3JvbGxiYXJWPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiAxcHgiKV0sIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpLHIuc2Nyb2xsYmFyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpLHIuZ3V0dGVyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpLHIubGluZURpdj1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWNvZGUiKSxyLnNlbGVjdGlvbkRpdj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSIpLHIuY3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIiksci5vdGhlckN1cnNvcj1zaSgiZGl2IiwiwqAiLCJDb2RlTWlycm9yLWN1cnNvciBDb2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpLHIubWVhc3VyZT1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLW1lYXN1cmUiKSxyLmxpbmVTcGFjZT1zaSgiZGl2Iixbci5tZWFzdXJlLHIuc2VsZWN0aW9uRGl2LHIubGluZURpdixyLmN1cnNvcixyLm90aGVyQ3Vyc29yXSxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKSxyLm1vdmVyPXNpKCJkaXYiLFtzaSgiZGl2Iixbci5saW5lU3BhY2VdLCJDb2RlTWlycm9yLWxpbmVzIildLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpLHIuc2l6ZXI9c2koImRpdiIsW3IubW92ZXJdLCJDb2RlTWlycm9yLXNpemVyIiksci5oZWlnaHRGb3JjZXI9c2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIitUbysicHg7IHdpZHRoOiAxcHg7Iiksci5ndXR0ZXJzPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVycyIpLHIubGluZUd1dHRlcj1udWxsLHIuc2Nyb2xsZXI9c2koImRpdiIsW3Iuc2l6ZXIsci5oZWlnaHRGb3JjZXIsci5ndXR0ZXJzXSwiQ29kZU1pcnJvci1zY3JvbGwiKSxyLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCItMSIpLHIud3JhcHBlcj1zaSgiZGl2Iixbci5pbnB1dERpdixyLnNjcm9sbGJhckgsci5zY3JvbGxiYXJWLHIuc2Nyb2xsYmFyRmlsbGVyLHIuZ3V0dGVyRmlsbGVyLHIuc2Nyb2xsZXJdLCJDb2RlTWlycm9yIiksSGkmJihyLmd1dHRlcnMuc3R5bGUuekluZGV4PS0xLHIuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0PTApLHQuYXBwZW5kQ2hpbGQ/dC5hcHBlbmRDaGlsZChyLndyYXBwZXIpOnQoci53cmFwcGVyKSxHaSYmKG4uc3R5bGUud2lkdGg9IjBweCIpLFdpfHwoci5zY3JvbGxlci5kcmFnZ2FibGU9ITApLEZpPyhyLmlucHV0RGl2LnN0eWxlLmhlaWdodD0iMXB4IixyLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIpOkhpJiYoci5zY3JvbGxiYXJILnN0eWxlLm1pbldpZHRoPXIuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aD0iMThweCIpLHIudmlld09mZnNldD1yLmxhc3RTaXplQz0wLHIuc2hvd2luZ0Zyb209ci5zaG93aW5nVG89ZSxyLmxpbmVOdW1XaWR0aD1yLmxpbmVOdW1Jbm5lcldpZHRoPXIubGluZU51bUNoYXJzPW51bGwsci5wcmV2SW5wdXQ9IiIsci5hbGlnbldpZGdldHM9ITEsci5wb2xsaW5nRmFzdD0hMSxyLnBvbGw9bmV3ICRuLHIuY2FjaGVkQ2hhcldpZHRoPXIuY2FjaGVkVGV4dEhlaWdodD1udWxsLHIubWVhc3VyZUxpbmVDYWNoZT1bXSxyLm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCxyLmluYWNjdXJhdGVTZWxlY3Rpb249ITEsci5tYXhMaW5lPW51bGwsci5tYXhMaW5lTGVuZ3RoPTAsci5tYXhMaW5lQ2hhbmdlZD0hMSxyLndoZWVsRFg9ci53aGVlbERZPXIud2hlZWxTdGFydFg9ci53aGVlbFN0YXJ0WT1udWxsLHJ9ZnVuY3Rpb24gcihlKXtlLmRvYy5tb2RlPXQuZ2V0TW9kZShlLm9wdGlvbnMsZS5kb2MubW9kZU9wdGlvbiksZS5kb2MuaXRlcihmdW5jdGlvbih0KXt0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKX0pLGUuZG9jLmZyb250aWVyPWUuZG9jLmZpcnN0LFcoZSwxMDApLGUuc3RhdGUubW9kZUdlbisrLGUuY3VyT3AmJnVlKGUpfWZ1bmN0aW9uIG4odCl7dC5vcHRpb25zLmxpbmVXcmFwcGluZz8odC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIsdC5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoPSIiKToodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci13cmFwIiwiIiksZih0KSksbyh0KSx1ZSh0KSxfKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkKHQpfSwxMDApfWZ1bmN0aW9uIGkodCl7dmFyIGU9cmUodC5kaXNwbGF5KSxyPXQub3B0aW9ucy5saW5lV3JhcHBpbmcsbj1yJiZNYXRoLm1heCg1LHQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC9uZSh0LmRpc3BsYXkpLTMpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gVnIodC5kb2MsaSk/MDpyPyhNYXRoLmNlaWwoaS50ZXh0Lmxlbmd0aC9uKXx8MSkqZTplfX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQuZG9jLHI9aSh0KTtlLml0ZXIoZnVuY3Rpb24odCl7dmFyIGU9cih0KTtlIT10LmhlaWdodCYmeW4odCxlKX0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dm9bdC5vcHRpb25zLmtleU1hcF0scj1lLnN0eWxlO3QuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20ta2V5bWFwLVxTKy9nLCIiKSsocj8iIGNtLWtleW1hcC0iK3I6IiIpLHQuc3RhdGUuZGlzYWJsZUlucHV0PWUuZGlzYWJsZUlucHV0fWZ1bmN0aW9uIHModCl7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCIiKSt0Lm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XHMpXHMqL2csIiBjbS1zLSIpLF8odCl9ZnVuY3Rpb24gYSh0KXt1KHQpLHVlKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtnKHQpfSwyMCl9ZnVuY3Rpb24gdSh0KXt2YXIgZT10LmRpc3BsYXkuZ3V0dGVycyxyPXQub3B0aW9ucy5ndXR0ZXJzO2FpKGUpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dLG89ZS5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlciAiK2kpKTsiQ29kZU1pcnJvci1saW5lbnVtYmVycyI9PWkmJih0LmRpc3BsYXkubGluZUd1dHRlcj1vLG8uc3R5bGUud2lkdGg9KHQuZGlzcGxheS5saW5lTnVtV2lkdGh8fDEpKyJweCIpfWUuc3R5bGUuZGlzcGxheT1uPyIiOiJub25lIn1mdW5jdGlvbiBjKHQsZSl7aWYoMD09ZS5oZWlnaHQpcmV0dXJuIDA7Zm9yKHZhciByLG49ZS50ZXh0Lmxlbmd0aCxpPWU7cj1ScihpKTspe3ZhciBvPXIuZmluZCgpO2k9Z24odCxvLmZyb20ubGluZSksbis9by5mcm9tLmNoLW8udG8uY2h9Zm9yKGk9ZTtyPUJyKGkpOyl7dmFyIG89ci5maW5kKCk7bi09aS50ZXh0Lmxlbmd0aC1vLmZyb20uY2gsaT1nbih0LG8udG8ubGluZSksbis9aS50ZXh0Lmxlbmd0aC1vLnRvLmNofXJldHVybiBufWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2M7ZS5tYXhMaW5lPWduKHIsci5maXJzdCksZS5tYXhMaW5lTGVuZ3RoPWMocixlLm1heExpbmUpLGUubWF4TGluZUNoYW5nZWQ9ITAsci5pdGVyKGZ1bmN0aW9uKHQpe3ZhciBuPWMocix0KTtuPmUubWF4TGluZUxlbmd0aCYmKGUubWF4TGluZUxlbmd0aD1uLGUubWF4TGluZT10KX0pfWZ1bmN0aW9uIGgodCl7dmFyIGU9dGkodC5ndXR0ZXJzLCJDb2RlTWlycm9yLWxpbmVudW1iZXJzIik7LTE9PWUmJnQubGluZU51bWJlcnM/dC5ndXR0ZXJzPXQuZ3V0dGVycy5jb25jYXQoWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0pOmU+LTEmJiF0LmxpbmVOdW1iZXJzJiYodC5ndXR0ZXJzPXQuZ3V0dGVycy5zbGljZSgwKSx0Lmd1dHRlcnMuc3BsaWNlKGUsMSkpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2MuaGVpZ2h0LG49citGKGUpO2Uuc2l6ZXIuc3R5bGUubWluSGVpZ2h0PWUuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcD1uKyJweCIsZS5ndXR0ZXJzLnN0eWxlLmhlaWdodD1NYXRoLm1heChuLGUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LVRvKSsicHgiO3ZhciBpPU1hdGgubWF4KG4sZS5zY3JvbGxlci5zY3JvbGxIZWlnaHQpLG89ZS5zY3JvbGxlci5zY3JvbGxXaWR0aD5lLnNjcm9sbGVyLmNsaWVudFdpZHRoKzEsbD1pPmUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KzE7bD8oZS5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhclYuc3R5bGUuYm90dG9tPW8/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9aS1lLnNjcm9sbGVyLmNsaWVudEhlaWdodCtlLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KyJweCIpOihlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9IjAiKSxvPyhlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFySC5zdHlsZS5yaWdodD1sP2RpKGUubWVhc3VyZSkrInB4IjoiMCIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9ZS5zY3JvbGxlci5zY3JvbGxXaWR0aC1lLnNjcm9sbGVyLmNsaWVudFdpZHRoK2Uuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCsicHgiKTooZS5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXk9IiIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjAiKSxvJiZsPyhlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoPWRpKGUubWVhc3VyZSkrInB4Iik6ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixvJiZ0Lm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXImJnQub3B0aW9ucy5maXhlZEd1dHRlcj8oZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodD1kaShlLm1lYXN1cmUpKyJweCIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGg9ZS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCIpOmUuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXk9IiIsUGkmJjA9PT1kaShlLm1lYXN1cmUpJiYoZS5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPWUuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQ9Umk/IjE4cHgiOiIxMnB4IixlLnNjcm9sbGJhclYuc3R5bGUucG9pbnRlckV2ZW50cz1lLnNjcm9sbGJhckguc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXQuc2Nyb2xsZXIuc2Nyb2xsVG9wLGk9dC53cmFwcGVyLmNsaWVudEhlaWdodDsibnVtYmVyIj09dHlwZW9mIHI/bj1yOnImJihuPXIudG9wLGk9ci5ib3R0b20tci50b3ApLG49TWF0aC5mbG9vcihuLUkodCkpO3ZhciBvPU1hdGguY2VpbChuK2kpO3JldHVybntmcm9tOnhuKGUsbiksdG86eG4oZSxvKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10LmRpc3BsYXk7aWYoZS5hbGlnbldpZGdldHN8fGUuZ3V0dGVycy5maXJzdENoaWxkJiZ0Lm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgcj15KGUpLWUuc2Nyb2xsZXIuc2Nyb2xsTGVmdCt0LmRvYy5zY3JvbGxMZWZ0LG49ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGk9cisicHgiLG89ZS5saW5lRGl2LmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpaWYoby5hbGlnbmFibGUpZm9yKHZhciBsPTAscz1vLmFsaWduYWJsZTtsPHMubGVuZ3RoOysrbClzW2xdLnN0eWxlLmxlZnQ9aTt0Lm9wdGlvbnMuZml4ZWRHdXR0ZXImJihlLmd1dHRlcnMuc3R5bGUubGVmdD1yK24rInB4Iil9fWZ1bmN0aW9uIG0odCl7aWYoIXQub3B0aW9ucy5saW5lTnVtYmVycylyZXR1cm4hMTt2YXIgZT10LmRvYyxyPXYodC5vcHRpb25zLGUuZmlyc3QrZS5zaXplLTEpLG49dC5kaXNwbGF5O2lmKHIubGVuZ3RoIT1uLmxpbmVOdW1DaGFycyl7dmFyIGk9bi5tZWFzdXJlLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzaSgiZGl2IixyKV0sIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSksbz1pLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsbD1pLm9mZnNldFdpZHRoLW87cmV0dXJuIG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD0iIixuLmxpbmVOdW1Jbm5lcldpZHRoPU1hdGgubWF4KG8sbi5saW5lR3V0dGVyLm9mZnNldFdpZHRoLWwpLG4ubGluZU51bVdpZHRoPW4ubGluZU51bUlubmVyV2lkdGgrbCxuLmxpbmVOdW1DaGFycz1uLmxpbmVOdW1Jbm5lcldpZHRoP3IubGVuZ3RoOi0xLG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD1uLmxpbmVOdW1XaWR0aCsicHgiLCEwfXJldHVybiExfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gU3RyaW5nKHQubGluZU51bWJlckZvcm1hdHRlcihlK3QuZmlyc3RMaW5lTnVtYmVyKSl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZmkodC5zY3JvbGxlcikubGVmdC1maSh0LnNpemVyKS5sZWZ0fWZ1bmN0aW9uIGIodCxlLHIsbil7Zm9yKHZhciBpLG89dC5kaXNwbGF5LnNob3dpbmdGcm9tLGw9dC5kaXNwbGF5LnNob3dpbmdUbyxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLGE9ITA7O2E9ITEpe3ZhciB1PXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtpZigheCh0LGUscyxuKSlicmVhaztpZihpPSEwLGU9W10sQSh0KSxkKHQpLGEmJnQub3B0aW9ucy5saW5lV3JhcHBpbmcmJnUhPXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCluPSEwO2Vsc2UgaWYobj0hMSxyJiYocj1NYXRoLm1pbih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIm51bWJlciI9PXR5cGVvZiByP3I6ci50b3ApKSxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLHMuZnJvbT49dC5kaXNwbGF5LnNob3dpbmdGcm9tJiZzLnRvPD10LmRpc3BsYXkuc2hvd2luZ1RvKWJyZWFrfXJldHVybiBpJiYoVW4odCwidXBkYXRlIix0KSwodC5kaXNwbGF5LnNob3dpbmdGcm9tIT1vfHx0LmRpc3BsYXkuc2hvd2luZ1RvIT1sKSYmVW4odCwidmlld3BvcnRDaGFuZ2UiLHQsdC5kaXNwbGF5LnNob3dpbmdGcm9tLHQuZGlzcGxheS5zaG93aW5nVG8pKSxpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9dC5kaXNwbGF5LG89dC5kb2M7aWYoIWkud3JhcHBlci5jbGllbnRXaWR0aClyZXR1cm4gaS5zaG93aW5nRnJvbT1pLnNob3dpbmdUbz1vLmZpcnN0LGkudmlld09mZnNldD0wLHZvaWQgMDtpZighKCFuJiYwPT1lLmxlbmd0aCYmci5mcm9tPmkuc2hvd2luZ0Zyb20mJnIudG88aS5zaG93aW5nVG8pKXttKHQpJiYoZT1be2Zyb206by5maXJzdCx0bzpvLmZpcnN0K28uc2l6ZX1dKTt2YXIgbD1pLnNpemVyLnN0eWxlLm1hcmdpbkxlZnQ9aS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCI7aS5zY3JvbGxiYXJILnN0eWxlLmxlZnQ9dC5vcHRpb25zLmZpeGVkR3V0dGVyP2w6IjAiO3ZhciBzPTEvMDtpZih0Lm9wdGlvbnMubGluZU51bWJlcnMpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpZVthXS5kaWZmJiZlW2FdLmZyb208cyYmKHM9ZVthXS5mcm9tKTt2YXIgdT1vLmZpcnN0K28uc2l6ZSxjPU1hdGgubWF4KHIuZnJvbS10Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4sby5maXJzdCksZj1NYXRoLm1pbih1LHIudG8rdC5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtpZihpLnNob3dpbmdGcm9tPGMmJmMtaS5zaG93aW5nRnJvbTwyMCYmKGM9TWF0aC5tYXgoby5maXJzdCxpLnNob3dpbmdGcm9tKSksaS5zaG93aW5nVG8+ZiYmaS5zaG93aW5nVG8tZjwyMCYmKGY9TWF0aC5taW4odSxpLnNob3dpbmdUbykpLFFpKWZvcihjPWJuKEdyKG8sZ24obyxjKSkpO3U+ZiYmVnIobyxnbihvLGYpKTspKytmO3ZhciBoPVt7ZnJvbTpNYXRoLm1heChpLnNob3dpbmdGcm9tLG8uZmlyc3QpLHRvOk1hdGgubWluKGkuc2hvd2luZ1RvLHUpfV07aWYoaD1oWzBdLmZyb20+PWhbMF0udG8/W106TChoLGUpLFFpKWZvcih2YXIgYT0wO2E8aC5sZW5ndGg7KythKWZvcih2YXIgZCxwPWhbYV07ZD1CcihnbihvLHAudG8tMSkpOyl7dmFyIGc9ZC5maW5kKCkuZnJvbS5saW5lO2lmKCEoZz5wLmZyb20pKXtoLnNwbGljZShhLS0sMSk7YnJlYWt9cC50bz1nfWZvcih2YXIgdj0wLGE9MDthPGgubGVuZ3RoOysrYSl7dmFyIHA9aFthXTtwLmZyb208YyYmKHAuZnJvbT1jKSxwLnRvPmYmJihwLnRvPWYpLHAuZnJvbT49cC50bz9oLnNwbGljZShhLS0sMSk6dis9cC50by1wLmZyb219aWYoIW4mJnY9PWYtYyYmYz09aS5zaG93aW5nRnJvbSYmZj09aS5zaG93aW5nVG8pcmV0dXJuIHcodCksdm9pZCAwO2guc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmZyb20tZS5mcm9tfSk7dHJ5e3ZhciB5PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYil7fS43KihmLWMpPnYmJihpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIpLFModCxjLGYsaCxzKSxpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0iIix5JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT15JiZ5Lm9mZnNldEhlaWdodCYmeS5mb2N1cygpO3ZhciB4PWMhPWkuc2hvd2luZ0Zyb218fGYhPWkuc2hvd2luZ1RvfHxpLmxhc3RTaXplQyE9aS53cmFwcGVyLmNsaWVudEhlaWdodDtyZXR1cm4geCYmKGkubGFzdFNpemVDPWkud3JhcHBlci5jbGllbnRIZWlnaHQsVyh0LDQwMCkpLGkuc2hvd2luZ0Zyb209YyxpLnNob3dpbmdUbz1mLEModCksdyh0KSwhMH19ZnVuY3Rpb24gQyh0KXtmb3IodmFyIGUscj10LmRpc3BsYXksbj1yLmxpbmVEaXYub2Zmc2V0VG9wLGk9ci5saW5lRGl2LmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpaWYoaS5saW5lT2JqKXtpZihIaSl7dmFyIG89aS5vZmZzZXRUb3AraS5vZmZzZXRIZWlnaHQ7ZT1vLW4sbj1vfWVsc2V7dmFyIGw9ZmkoaSk7ZT1sLmJvdHRvbS1sLnRvcH12YXIgcz1pLmxpbmVPYmouaGVpZ2h0LWU7aWYoMj5lJiYoZT1yZShyKSkscz4uMDAxfHwtLjAwMT5zKXt5bihpLmxpbmVPYmosZSk7dmFyIGE9aS5saW5lT2JqLndpZGdldHM7aWYoYSlmb3IodmFyIHU9MDt1PGEubGVuZ3RoOysrdSlhW3VdLmhlaWdodD1hW3VdLm5vZGUub2Zmc2V0SGVpZ2h0fX19ZnVuY3Rpb24gdyh0KXt2YXIgZT10LmRpc3BsYXkudmlld09mZnNldD1Dbih0LGduKHQuZG9jLHQuZGlzcGxheS5zaG93aW5nRnJvbSkpO3QuZGlzcGxheS5tb3Zlci5zdHlsZS50b3A9ZSsicHgifWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RofHwwO24+cjsrK3Ipe2Zvcih2YXIgaT1lW3JdLG89W10sbD1pLmRpZmZ8fDAscz0wLGE9dC5sZW5ndGg7YT5zOysrcyl7dmFyIHU9dFtzXTtpLnRvPD11LmZyb20mJmkuZGlmZj9vLnB1c2goe2Zyb206dS5mcm9tK2wsdG86dS50bytsfSk6aS50bzw9dS5mcm9tfHxpLmZyb20+PXUudG8/by5wdXNoKHUpOihpLmZyb20+dS5mcm9tJiZvLnB1c2goe2Zyb206dS5mcm9tLHRvOmkuZnJvbX0pLGkudG88dS50byYmby5wdXNoKHtmcm9tOmkudG8rbCx0bzp1LnRvK2x9KSl9dD1vfXJldHVybiB0fWZ1bmN0aW9uIGsodCl7Zm9yKHZhciBlPXQuZGlzcGxheSxyPXt9LG49e30saT1lLmd1dHRlcnMuZmlyc3RDaGlsZCxvPTA7aTtpPWkubmV4dFNpYmxpbmcsKytvKXJbdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0TGVmdCxuW3Qub3B0aW9ucy5ndXR0ZXJzW29dXT1pLm9mZnNldFdpZHRoO3JldHVybntmaXhlZFBvczp5KGUpLGd1dHRlclRvdGFsV2lkdGg6ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGd1dHRlckxlZnQ6cixndXR0ZXJXaWR0aDpuLHdyYXBwZXJXaWR0aDplLndyYXBwZXIuY2xpZW50V2lkdGh9fWZ1bmN0aW9uIFModCxlLHIsbixpKXtmdW5jdGlvbiBvKGUpe3ZhciByPWUubmV4dFNpYmxpbmc7cmV0dXJuIFdpJiZLaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD09ZT8oZS5zdHlsZS5kaXNwbGF5PSJub25lIixlLmxpbmVPYmo9bnVsbCk6ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLHJ9dmFyIGw9ayh0KSxzPXQuZGlzcGxheSxhPXQub3B0aW9ucy5saW5lTnVtYmVycztuLmxlbmd0aHx8V2kmJnQuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXR8fGFpKHMubGluZURpdik7dmFyIHU9cy5saW5lRGl2LGM9dS5maXJzdENoaWxkLGY9bi5zaGlmdCgpLGg9ZTtmb3IodC5kb2MuaXRlcihlLHIsZnVuY3Rpb24oZSl7aWYoZiYmZi50bz09aCYmKGY9bi5zaGlmdCgpKSxWcih0LmRvYyxlKSl7aWYoMCE9ZS5oZWlnaHQmJnluKGUsMCksZS53aWRnZXRzJiZjJiZjLnByZXZpb3VzU2libGluZylmb3IodmFyIHI9MDtyPGUud2lkZ2V0cy5sZW5ndGg7KytyKXt2YXIgcz1lLndpZGdldHNbcl07aWYocy5zaG93SWZIaWRkZW4pe3ZhciBkPWMucHJldmlvdXNTaWJsaW5nO2lmKC9wcmUvaS50ZXN0KGQubm9kZU5hbWUpKXt2YXIgcD1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpO2QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocCxkKSxwLmFwcGVuZENoaWxkKGQpLGQ9cH12YXIgZz1kLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzLm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKSk7cy5oYW5kbGVNb3VzZUV2ZW50c3x8KGcuaWdub3JlRXZlbnRzPSEwKSxUKHMsZyxkLGwpfX19ZWxzZSBpZihmJiZmLmZyb208PWgmJmYudG8+aCl7Zm9yKDtjLmxpbmVPYmohPWU7KWM9byhjKTthJiZoPj1pJiZjLmxpbmVOdW1iZXImJmNpKGMubGluZU51bWJlcix2KHQub3B0aW9ucyxoKSksYz1jLm5leHRTaWJsaW5nfWVsc2V7aWYoZS53aWRnZXRzKWZvcih2YXIgbSx5PTAsYj1jO2ImJjIwPnk7Kyt5LGI9Yi5uZXh0U2libGluZylpZihiLmxpbmVPYmo9PWUmJi9kaXYvaS50ZXN0KGIubm9kZU5hbWUpKXttPWI7YnJlYWt9dmFyIHg9TSh0LGUsaCxsLG0pO2lmKHghPW0pdS5pbnNlcnRCZWZvcmUoeCxjKTtlbHNle2Zvcig7YyE9bTspYz1vKGMpO2M9Yy5uZXh0U2libGluZ314LmxpbmVPYmo9ZX0rK2h9KTtjOyljPW8oYyl9ZnVuY3Rpb24gTSh0LGUscixuLGkpe3ZhciBvLGw9cm4odCxlKSxzPWwucHJlLGE9ZS5ndXR0ZXJNYXJrZXJzLHU9dC5kaXNwbGF5LGM9bC5iZ0NsYXNzP2wuYmdDbGFzcysiICIrKGUuYmdDbGFzc3x8IiIpOmUuYmdDbGFzcztpZighKHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YXx8Y3x8ZS53cmFwQ2xhc3N8fGUud2lkZ2V0cykpcmV0dXJuIHM7aWYoaSl7aS5hbGlnbmFibGU9bnVsbDtmb3IodmFyIGYsaD0hMCxkPTAscD1udWxsLGc9aS5maXJzdENoaWxkO2c7Zz1mKWlmKGY9Zy5uZXh0U2libGluZywvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChnLmNsYXNzTmFtZSkpe2Zvcih2YXIgbT0wO208ZS53aWRnZXRzLmxlbmd0aDsrK20pe3ZhciB5PWUud2lkZ2V0c1ttXTtpZih5Lm5vZGU9PWcuZmlyc3RDaGlsZCl7eS5hYm92ZXx8cHx8KHA9ZyksVCh5LGcsaSxuKSwrK2Q7YnJlYWt9fWlmKG09PWUud2lkZ2V0cy5sZW5ndGgpe2g9ITE7YnJlYWt9fWVsc2UgaS5yZW1vdmVDaGlsZChnKTtpLmluc2VydEJlZm9yZShzLHApLGgmJmQ9PWUud2lkZ2V0cy5sZW5ndGgmJihvPWksaS5jbGFzc05hbWU9ZS53cmFwQ2xhc3N8fCIiKX1pZihvfHwobz1zaSgiZGl2IixudWxsLGUud3JhcENsYXNzLCJwb3NpdGlvbjogcmVsYXRpdmUiKSxvLmFwcGVuZENoaWxkKHMpKSxjJiZvLmluc2VydEJlZm9yZShzaSgiZGl2IixudWxsLGMrIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIiksby5maXJzdENoaWxkKSx0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEpe3ZhciBiPW8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiKyh0Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bi5maXhlZFBvczotbi5ndXR0ZXJUb3RhbFdpZHRoKSsicHgiKSxvLmZpcnN0Q2hpbGQpO2lmKHQub3B0aW9ucy5maXhlZEd1dHRlciYmKG8uYWxpZ25hYmxlfHwoby5hbGlnbmFibGU9W10pKS5wdXNoKGIpLCF0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEmJmFbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXXx8KG8ubGluZU51bWJlcj1iLmFwcGVuZENoaWxkKHNpKCJkaXYiLHYodC5vcHRpb25zLHIpLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIituLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSsicHg7IHdpZHRoOiAiK3UubGluZU51bUlubmVyV2lkdGgrInB4IikpKSxhKWZvcih2YXIgeD0wO3g8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysreCl7dmFyIEM9dC5vcHRpb25zLmd1dHRlcnNbeF0sdz1hLmhhc093blByb3BlcnR5KEMpJiZhW0NdO3cmJmIuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3ddLCJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFtDXSsicHg7IHdpZHRoOiAiK24uZ3V0dGVyV2lkdGhbQ10rInB4IikpfX1pZihIaSYmKG8uc3R5bGUuekluZGV4PTIpLGUud2lkZ2V0cyYmbyE9aSlmb3IodmFyIG09MCxMPWUud2lkZ2V0czttPEwubGVuZ3RoOysrbSl7dmFyIHk9TFttXSxrPXNpKCJkaXYiLFt5Lm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTt5LmhhbmRsZU1vdXNlRXZlbnRzfHwoay5pZ25vcmVFdmVudHM9ITApLFQoeSxrLG8sbikseS5hYm92ZT9vLmluc2VydEJlZm9yZShrLHQub3B0aW9ucy5saW5lTnVtYmVycyYmMCE9ZS5oZWlnaHQ/YjpzKTpvLmFwcGVuZENoaWxkKGspLFVuKHksInJlZHJhdyIpfXJldHVybiBvfWZ1bmN0aW9uIFQodCxlLHIsbil7aWYodC5ub0hTY3JvbGwpeyhyLmFsaWduYWJsZXx8KHIuYWxpZ25hYmxlPVtdKSkucHVzaChlKTt2YXIgaT1uLndyYXBwZXJXaWR0aDtlLnN0eWxlLmxlZnQ9bi5maXhlZFBvcysicHgiLHQuY292ZXJHdXR0ZXJ8fChpLT1uLmd1dHRlclRvdGFsV2lkdGgsZS5zdHlsZS5wYWRkaW5nTGVmdD1uLmd1dHRlclRvdGFsV2lkdGgrInB4IiksZS5zdHlsZS53aWR0aD1pKyJweCJ9dC5jb3Zlckd1dHRlciYmKGUuc3R5bGUuekluZGV4PTUsZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHQubm9IU2Nyb2xsfHwoZS5zdHlsZS5tYXJnaW5MZWZ0PS1uLmd1dHRlclRvdGFsV2lkdGgrInB4IikpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5kaXNwbGF5LHI9amUodC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvKTtpZihyfHx0Lm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3Rpbmc/SCh0KTplLmN1cnNvci5zdHlsZS5kaXNwbGF5PWUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIscj9lLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSJub25lIjpOKHQpLHQub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKXt2YXIgbj1RKHQsdC5kb2Muc2VsLmhlYWQsImRpdiIpLGk9ZmkoZS53cmFwcGVyKSxvPWZpKGUubGluZURpdik7ZS5pbnB1dERpdi5zdHlsZS50b3A9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50SGVpZ2h0LTEwLG4udG9wK28udG9wLWkudG9wKSkrInB4IixlLmlucHV0RGl2LnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50V2lkdGgtMTAsbi5sZWZ0K28ubGVmdC1pLmxlZnQpKSsicHgifX1mdW5jdGlvbiBIKHQpe3ZhciBlPXQuZGlzcGxheSxyPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2Iik7ZS5jdXJzb3Iuc3R5bGUubGVmdD1yLmxlZnQrInB4IixlLmN1cnNvci5zdHlsZS50b3A9ci50b3ArInB4IixlLmN1cnNvci5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxyLmJvdHRvbS1yLnRvcCkqdC5vcHRpb25zLmN1cnNvckhlaWdodCsicHgiLGUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5vdGhlcj8oZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLGUub3RoZXJDdXJzb3Iuc3R5bGUubGVmdD1yLm90aGVyLmxlZnQrInB4IixlLm90aGVyQ3Vyc29yLnN0eWxlLnRvcD1yLm90aGVyLnRvcCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0PS44NSooci5vdGhlci5ib3R0b20tci5vdGhlci50b3ApKyJweCIpOmUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZnVuY3Rpb24gTih0KXtmdW5jdGlvbiBlKHQsZSxyLG4pezA+ZSYmKGU9MCksbC5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLXNlbGVjdGVkIiwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiK3QrInB4OyB0b3A6ICIrZSsicHg7IHdpZHRoOiAiKyhudWxsPT1yP3MtdDpyKSsicHg7IGhlaWdodDogIisobi1lKSsicHgiKSl9ZnVuY3Rpb24gcihyLG4sbyl7ZnVuY3Rpb24gbChlLG4pe3JldHVybiBxKHQsWWUocixlKSwiZGl2IixmLG4pfXZhciB1LGMsZj1nbihpLHIpLGg9Zi50ZXh0Lmxlbmd0aDtyZXR1cm4gZ2kod24oZiksbnx8MCxudWxsPT1vP2g6byxmdW5jdGlvbih0LHIsaSl7dmFyIGYsZCxwLGc9bCh0LCJsZWZ0Iik7aWYodD09cilmPWcsZD1wPWcubGVmdDtlbHNle2lmKGY9bChyLTEsInJpZ2h0IiksInJ0bCI9PWkpe3ZhciBtPWc7Zz1mLGY9bX1kPWcubGVmdCxwPWYucmlnaHR9bnVsbD09biYmMD09dCYmKGQ9YSksZi50b3AtZy50b3A+MyYmKGUoZCxnLnRvcCxudWxsLGcuYm90dG9tKSxkPWEsZy5ib3R0b208Zi50b3AmJmUoZCxnLmJvdHRvbSxudWxsLGYudG9wKSksbnVsbD09byYmcj09aCYmKHA9cyksKCF1fHxnLnRvcDx1LnRvcHx8Zy50b3A9PXUudG9wJiZnLmxlZnQ8dS5sZWZ0KSYmKHU9ZyksKCFjfHxmLmJvdHRvbT5jLmJvdHRvbXx8Zi5ib3R0b209PWMuYm90dG9tJiZmLnJpZ2h0PmMucmlnaHQpJiYoYz1mKSxhKzE+ZCYmKGQ9YSksZShkLGYudG9wLHAtZCxmLmJvdHRvbSl9KSx7c3RhcnQ6dSxlbmQ6Y319dmFyIG49dC5kaXNwbGF5LGk9dC5kb2Msbz10LmRvYy5zZWwsbD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscz1uLmxpbmVTcGFjZS5vZmZzZXRXaWR0aCxhPVAodC5kaXNwbGF5KTtpZihvLmZyb20ubGluZT09by50by5saW5lKXIoby5mcm9tLmxpbmUsby5mcm9tLmNoLG8udG8uY2gpO2Vsc2V7dmFyIHU9Z24oaSxvLmZyb20ubGluZSksYz1nbihpLG8udG8ubGluZSksZj1HcihpLHUpPT1HcihpLGMpLGg9cihvLmZyb20ubGluZSxvLmZyb20uY2gsZj91LnRleHQubGVuZ3RoOm51bGwpLmVuZCxkPXIoby50by5saW5lLGY/MDpudWxsLG8udG8uY2gpLnN0YXJ0O2YmJihoLnRvcDxkLnRvcC0yPyhlKGgucmlnaHQsaC50b3AsbnVsbCxoLmJvdHRvbSksZShhLGQudG9wLGQubGVmdCxkLmJvdHRvbSkpOmUoaC5yaWdodCxoLnRvcCxkLmxlZnQtaC5yaWdodCxoLmJvdHRvbSkpLGguYm90dG9tPGQudG9wJiZlKGEsaC5ib3R0b20sbnVsbCxkLnRvcCl9dWkobi5zZWxlY3Rpb25EaXYsbCksbi5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheT0iIn1mdW5jdGlvbiBEKHQpe2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIGU9dC5kaXNwbGF5O2NsZWFySW50ZXJ2YWwoZS5ibGlua2VyKTt2YXIgcj0hMDtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0iIix0Lm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlPjAmJihlLmJsaW5rZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0ocj0hcik/IiI6ImhpZGRlbiJ9LHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpKX19ZnVuY3Rpb24gVyh0LGUpe3QuZG9jLm1vZGUuc3RhcnRTdGF0ZSYmdC5kb2MuZnJvbnRpZXI8dC5kaXNwbGF5LnNob3dpbmdUbyYmdC5zdGF0ZS5oaWdobGlnaHQuc2V0KGUsaWkoTyx0KSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmRvYztpZihlLmZyb250aWVyPGUuZmlyc3QmJihlLmZyb250aWVyPWUuZmlyc3QpLCEoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdUbykpe3ZhciByLG49K25ldyBEYXRlK3Qub3B0aW9ucy53b3JrVGltZSxpPWJyKGUubW9kZSx6KHQsZS5mcm9udGllcikpLG89W107ZS5pdGVyKGUuZnJvbnRpZXIsTWF0aC5taW4oZS5maXJzdCtlLnNpemUsdC5kaXNwbGF5LnNob3dpbmdUbys1MDApLGZ1bmN0aW9uKGwpe2lmKGUuZnJvbnRpZXI+PXQuZGlzcGxheS5zaG93aW5nRnJvbSl7dmFyIHM9bC5zdHlsZXM7bC5zdHlsZXM9UXIodCxsLGksITApO2Zvcih2YXIgYT0hc3x8cy5sZW5ndGghPWwuc3R5bGVzLmxlbmd0aCx1PTA7IWEmJnU8cy5sZW5ndGg7Kyt1KWE9c1t1XSE9bC5zdHlsZXNbdV07YSYmKHImJnIuZW5kPT1lLmZyb250aWVyP3IuZW5kKys6by5wdXNoKHI9e3N0YXJ0OmUuZnJvbnRpZXIsZW5kOmUuZnJvbnRpZXIrMX0pKSxsLnN0YXRlQWZ0ZXI9YnIoZS5tb2RlLGkpfWVsc2UgdG4odCxsLnRleHQsaSksbC5zdGF0ZUFmdGVyPTA9PWUuZnJvbnRpZXIlNT9icihlLm1vZGUsaSk6bnVsbDtyZXR1cm4rK2UuZnJvbnRpZXIsK25ldyBEYXRlPm4/KFcodCx0Lm9wdGlvbnMud29ya0RlbGF5KSwhMCk6dm9pZCAwfSksby5sZW5ndGgmJmxlKHQsZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoOysrdCl1ZSh0aGlzLG9bdF0uc3RhcnQsb1t0XS5lbmQpfSkoKX19ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuLGksbz10LmRvYyxsPXI/LTE6ZS0odC5kb2MubW9kZS5pbm5lck1vZGU/MWUzOjEwMCkscz1lO3M+bDstLXMpe2lmKHM8PW8uZmlyc3QpcmV0dXJuIG8uZmlyc3Q7dmFyIGE9Z24obyxzLTEpO2lmKGEuc3RhdGVBZnRlciYmKCFyfHxzPD1vLmZyb250aWVyKSlyZXR1cm4gczt2YXIgdT1abihhLnRleHQsbnVsbCx0Lm9wdGlvbnMudGFiU2l6ZSk7KG51bGw9PWl8fG4+dSkmJihpPXMtMSxuPXUpfXJldHVybiBpfWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXQuZG9jLGk9dC5kaXNwbGF5O2lmKCFuLm1vZGUuc3RhcnRTdGF0ZSlyZXR1cm4hMDt2YXIgbz1FKHQsZSxyKSxsPW8+bi5maXJzdCYmZ24obixvLTEpLnN0YXRlQWZ0ZXI7cmV0dXJuIGw9bD9icihuLm1vZGUsbCk6eHIobi5tb2RlKSxuLml0ZXIobyxlLGZ1bmN0aW9uKHIpe3RuKHQsci50ZXh0LGwpO3ZhciBzPW89PWUtMXx8MD09byU1fHxvPj1pLnNob3dpbmdGcm9tJiZvPGkuc2hvd2luZ1RvO3Iuc3RhdGVBZnRlcj1zP2JyKG4ubW9kZSxsKTpudWxsLCsrb30pLHImJihuLmZyb250aWVyPW8pLGx9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5saW5lU3BhY2Uub2Zmc2V0VG9wfWZ1bmN0aW9uIEYodCl7cmV0dXJuIHQubW92ZXIub2Zmc2V0SGVpZ2h0LXQubGluZVNwYWNlLm9mZnNldEhlaWdodH1mdW5jdGlvbiBQKHQpe3ZhciBlPXVpKHQubWVhc3VyZSxzaSgicHJlIixudWxsLG51bGwsInRleHQtYWxpZ246IGxlZnQiKSkuYXBwZW5kQ2hpbGQoc2koInNwYW4iLCJ4IikpO3JldHVybiBlLm9mZnNldExlZnR9ZnVuY3Rpb24gUih0LGUscixuLGkpe3ZhciBvPS0xO2lmKG49bnx8Vih0LGUpLG4uY3J1ZGUpe3ZhciBsPW4ubGVmdCtyKm4ud2lkdGg7cmV0dXJue2xlZnQ6bCxyaWdodDpsK24ud2lkdGgsdG9wOm4udG9wLGJvdHRvbTpuLmJvdHRvbX19Zm9yKHZhciBzPXI7O3MrPW8pe3ZhciBhPW5bc107aWYoYSlicmVhazswPm8mJjA9PXMmJihvPTEpfXJldHVybiBpPXM+cj8ibGVmdCI6cj5zPyJyaWdodCI6aSwibGVmdCI9PWkmJmEubGVmdFNpZGU/YT1hLmxlZnRTaWRlOiJyaWdodCI9PWkmJmEucmlnaHRTaWRlJiYoYT1hLnJpZ2h0U2lkZSkse2xlZnQ6cj5zP2EucmlnaHQ6YS5sZWZ0LHJpZ2h0OnM+cj9hLmxlZnQ6YS5yaWdodCx0b3A6YS50b3AsYm90dG9tOmEuYm90dG9tfX1mdW5jdGlvbiBCKHQsZSl7Zm9yKHZhciByPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtpZihpLnRleHQ9PWUudGV4dCYmaS5tYXJrZWRTcGFucz09ZS5tYXJrZWRTcGFucyYmdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoPT1pLndpZHRoJiZpLmNsYXNzZXM9PWUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzcylyZXR1cm4gaX19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPUIodCxlKTtyJiYoci50ZXh0PXIubWVhc3VyZT1yLm1hcmtlZFNwYW5zPW51bGwpfWZ1bmN0aW9uIFYodCxlKXt2YXIgcj1CKHQsZSk7aWYocilyZXR1cm4gci5tZWFzdXJlO3ZhciBuPUsodCxlKSxpPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG89e3RleHQ6ZS50ZXh0LHdpZHRoOnQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCxtYXJrZWRTcGFuczplLm1hcmtlZFNwYW5zLG1lYXN1cmU6bixjbGFzc2VzOmUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzc307cmV0dXJuIDE2PT1pLmxlbmd0aD9pWysrdC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3MlMTZdPW86aS5wdXNoKG8pLG59ZnVuY3Rpb24gSyh0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9dC50b3AtcC50b3Ascj10LmJvdHRvbS1wLnRvcDtyPnYmJihyPXYpLDA+ZSYmKGU9MCk7Zm9yKHZhciBuPWcubGVuZ3RoLTI7bj49MDtuLT0yKXt2YXIgaT1nW25dLG89Z1tuKzFdO2lmKCEoaT5yfHxlPm8pJiYoZT49aSYmbz49cnx8aT49ZSYmcj49b3x8TWF0aC5taW4ocixvKS1NYXRoLm1heChlLGkpPj1yLWU+PjEpKXtnW25dPU1hdGgubWluKGUsaSksZ1tuKzFdPU1hdGgubWF4KHIsbyk7YnJlYWt9fXJldHVybiAwPm4mJihuPWcubGVuZ3RoLGcucHVzaChlLHIpKSx7bGVmdDp0LmxlZnQtcC5sZWZ0LHJpZ2h0OnQucmlnaHQtcC5sZWZ0LHRvcDpuLGJvdHRvbTpudWxsfX1mdW5jdGlvbiBuKHQpe3QuYm90dG9tPWdbdC50b3ArMV0sdC50b3A9Z1t0LnRvcF19aWYoIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFUodCxlKTt2YXIgaT10LmRpc3BsYXksbz1uaShlLnRleHQubGVuZ3RoKSxsPXJuKHQsZSxvLCEwKS5wcmU7aWYoQWkmJiFIaSYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmwuY2hpbGROb2Rlcy5sZW5ndGg+MTAwKXtmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MTAsdT1sLmNoaWxkTm9kZXMubGVuZ3RoLGM9MCxmPU1hdGguY2VpbCh1L2EpO2Y+YzsrK2Mpe2Zvcih2YXIgaD1zaSgiZGl2IixudWxsLG51bGwsImRpc3BsYXk6IGlubGluZS1ibG9jayIpLGQ9MDthPmQmJnU7KytkKWguYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKSwtLXU7cy5hcHBlbmRDaGlsZChoKX1sLmFwcGVuZENoaWxkKHMpfXVpKGkubWVhc3VyZSxsKTt2YXIgcD1maShpLmxpbmVEaXYpLGc9W10sbT1uaShlLnRleHQubGVuZ3RoKSx2PWwub2Zmc2V0SGVpZ2h0O05pJiZpLm1lYXN1cmUuZmlyc3QhPWwmJnVpKGkubWVhc3VyZSxsKTtmb3IodmFyIHksYz0wO2M8by5sZW5ndGg7KytjKWlmKHk9b1tjXSl7dmFyIGI9eSx4PW51bGw7aWYoL1xiQ29kZU1pcnJvci13aWRnZXRcYi8udGVzdCh5LmNsYXNzTmFtZSkmJnkuZ2V0Q2xpZW50UmVjdHMpezE9PXkuZmlyc3RDaGlsZC5ub2RlVHlwZSYmKGI9eS5maXJzdENoaWxkKTt2YXIgQz1iLmdldENsaWVudFJlY3RzKCk7Qy5sZW5ndGg+MSYmKHg9bVtjXT1yKENbMF0pLHgucmlnaHRTaWRlPXIoQ1tDLmxlbmd0aC0xXSkpfXh8fCh4PW1bY109cihmaShiKSkpLHkubWVhc3VyZVJpZ2h0JiYoeC5yaWdodD1maSh5Lm1lYXN1cmVSaWdodCkubGVmdCkseS5sZWZ0U2lkZSYmKHgubGVmdFNpZGU9cihmaSh5LmxlZnRTaWRlKSkpfWFpKHQuZGlzcGxheS5tZWFzdXJlKTtmb3IodmFyIHksYz0wO2M8bS5sZW5ndGg7KytjKSh5PW1bY10pJiYobih5KSx5LmxlZnRTaWRlJiZuKHkubGVmdFNpZGUpLHkucmlnaHRTaWRlJiZuKHkucmlnaHRTaWRlKSk7cmV0dXJuIG19ZnVuY3Rpb24gVSh0LGUpe3ZhciByPW5ldyBibyhlLnRleHQuc2xpY2UoMCwxMDApLG51bGwpO2UudGV4dENsYXNzJiYoci50ZXh0Q2xhc3M9ZS50ZXh0Q2xhc3MpO3ZhciBuPUsodCxyKSxpPVIodCxyLDAsbiwibGVmdCIpLG89Uih0LHIsOTksbiwicmlnaHQiKTtyZXR1cm57Y3J1ZGU6ITAsdG9wOmkudG9wLGxlZnQ6aS5sZWZ0LGJvdHRvbTppLmJvdHRvbSx3aWR0aDooby5yaWdodC1pLmxlZnQpLzEwMH19ZnVuY3Rpb24gWCh0LGUpe3ZhciByPSExO2lmKGUubWFya2VkU3BhbnMpZm9yKHZhciBuPTA7bjxlLm1hcmtlZFNwYW5zOysrbil7dmFyIGk9ZS5tYXJrZWRTcGFuc1tuXTshaS5jb2xsYXBzZWR8fG51bGwhPWkudG8mJmkudG8hPWUudGV4dC5sZW5ndGh8fChyPSEwKX12YXIgbz0hciYmQih0LGUpO2lmKG98fGUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFIodCxlLGUudGV4dC5sZW5ndGgsbyYmby5tZWFzdXJlLCJyaWdodCIpLnJpZ2h0O3ZhciBsPXJuKHQsZSxudWxsLCEwKS5wcmUscz1sLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSk7cmV0dXJuIHVpKHQuZGlzcGxheS5tZWFzdXJlLGwpLGZpKHMpLnJpZ2h0LWZpKHQuZGlzcGxheS5saW5lRGl2KS5sZWZ0fWZ1bmN0aW9uIF8odCl7dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zPTAsdC5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aD10LmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodD1udWxsLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fCh0LmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApLHQuZGlzcGxheS5saW5lTnVtQ2hhcnM9bnVsbH1mdW5jdGlvbiBZKCl7cmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBqKCl7cmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wfWZ1bmN0aW9uICQodCxlLHIsbil7aWYoZS53aWRnZXRzKWZvcih2YXIgaT0wO2k8ZS53aWRnZXRzLmxlbmd0aDsrK2kpaWYoZS53aWRnZXRzW2ldLmFib3ZlKXt2YXIgbz1ZcihlLndpZGdldHNbaV0pO3IudG9wKz1vLHIuYm90dG9tKz1vfWlmKCJsaW5lIj09bilyZXR1cm4gcjtufHwobj0ibG9jYWwiKTt2YXIgbD1Dbih0LGUpO2lmKCJsb2NhbCI9PW4/bCs9SSh0LmRpc3BsYXkpOmwtPXQuZGlzcGxheS52aWV3T2Zmc2V0LCJwYWdlIj09bnx8IndpbmRvdyI9PW4pe3ZhciBzPWZpKHQuZGlzcGxheS5saW5lU3BhY2UpO2wrPXMudG9wKygid2luZG93Ij09bj8wOmooKSk7dmFyIGE9cy5sZWZ0Kygid2luZG93Ij09bj8wOlkoKSk7ci5sZWZ0Kz1hLHIucmlnaHQrPWF9cmV0dXJuIHIudG9wKz1sLHIuYm90dG9tKz1sLHJ9ZnVuY3Rpb24gWih0LGUscil7aWYoImRpdiI9PXIpcmV0dXJuIGU7dmFyIG49ZS5sZWZ0LGk9ZS50b3A7aWYoInBhZ2UiPT1yKW4tPVkoKSxpLT1qKCk7ZWxzZSBpZigibG9jYWwiPT1yfHwhcil7dmFyIG89ZmkodC5kaXNwbGF5LnNpemVyKTtuKz1vLmxlZnQsaSs9by50b3B9dmFyIGw9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7cmV0dXJue2xlZnQ6bi1sLmxlZnQsdG9wOmktbC50b3B9fWZ1bmN0aW9uIHEodCxlLHIsbixpKXtyZXR1cm4gbnx8KG49Z24odC5kb2MsZS5saW5lKSksJCh0LG4sUih0LG4sZS5jaCxudWxsLGkpLHIpfWZ1bmN0aW9uIFEodCxlLHIsbixpKXtmdW5jdGlvbiBvKGUsbyl7dmFyIGw9Uih0LG4sZSxpLG8/InJpZ2h0IjoibGVmdCIpO3JldHVybiBvP2wubGVmdD1sLnJpZ2h0OmwucmlnaHQ9bC5sZWZ0LCQodCxuLGwscil9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXNbZV0sbj1yLmxldmVsJTI7cmV0dXJuIHQ9PW1pKHIpJiZlJiZyLmxldmVsPHNbZS0xXS5sZXZlbD8ocj1zWy0tZV0sdD12aShyKS0oci5sZXZlbCUyPzA6MSksbj0hMCk6dD09dmkocikmJmU8cy5sZW5ndGgtMSYmci5sZXZlbDxzW2UrMV0ubGV2ZWwmJihyPXNbKytlXSx0PW1pKHIpLXIubGV2ZWwlMixuPSExKSxuJiZ0PT1yLnRvJiZ0PnIuZnJvbT9vKHQtMSk6byh0LG4pfW49bnx8Z24odC5kb2MsZS5saW5lKSxpfHwoaT1WKHQsbikpO3ZhciBzPXduKG4pLGE9ZS5jaDtpZighcylyZXR1cm4gbyhhKTt2YXIgdT1MaShzLGEpLGM9bChhLHUpO3JldHVybiBudWxsIT1SbyYmKGMub3RoZXI9bChhLFJvKSksY31mdW5jdGlvbiBKKHQsZSxyLG4pe3ZhciBpPW5ldyBZZSh0LGUpO3JldHVybiBpLnhSZWw9bixyJiYoaS5vdXRzaWRlPSEwKSxpfWZ1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj10LmRvYztpZihyKz10LmRpc3BsYXkudmlld09mZnNldCwwPnIpcmV0dXJuIEoobi5maXJzdCwwLCEwLC0xKTt2YXIgaT14bihuLHIpLG89bi5maXJzdCtuLnNpemUtMTtpZihpPm8pcmV0dXJuIEoobi5maXJzdCtuLnNpemUtMSxnbihuLG8pLnRleHQubGVuZ3RoLCEwLDEpO2ZvcigwPmUmJihlPTApOzspe3ZhciBsPWduKG4saSkscz1lZSh0LGwsaSxlLHIpLGE9QnIobCksdT1hJiZhLmZpbmQoKTtpZighYXx8IShzLmNoPnUuZnJvbS5jaHx8cy5jaD09dS5mcm9tLmNoJiZzLnhSZWw+MCkpcmV0dXJuIHM7aT11LnRvLmxpbmV9fWZ1bmN0aW9uIGVlKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyhuKXt2YXIgaT1RKHQsWWUocixuKSwibGluZSIsZSx1KTtyZXR1cm4gcz0hMCxsPmkuYm90dG9tP2kubGVmdC1hOmw8aS50b3A/aS5sZWZ0K2E6KHM9ITEsaS5sZWZ0KX12YXIgbD1pLUNuKHQsZSkscz0hMSxhPTIqdC5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgsdT1WKHQsZSksYz13bihlKSxmPWUudGV4dC5sZW5ndGgsaD15aShlKSxkPWJpKGUpLHA9byhoKSxnPXMsbT1vKGQpLHY9cztpZihuPm0pcmV0dXJuIEoocixkLHYsMSk7Zm9yKDs7KXtpZihjP2Q9PWh8fGQ9PVNpKGUsaCwxKToxPj1kLWgpe2Zvcih2YXIgeT1wPm58fG0tbj49bi1wP2g6ZCxiPW4tKHk9PWg/cDptKTtEby50ZXN0KGUudGV4dC5jaGFyQXQoeSkpOykrK3k7dmFyIHg9SihyLHkseT09aD9nOnYsMD5iPy0xOmI/MTowKTtyZXR1cm4geH12YXIgQz1NYXRoLmNlaWwoZi8yKSx3PWgrQztpZihjKXt3PWg7Zm9yKHZhciBMPTA7Qz5MOysrTCl3PVNpKGUsdywxKX12YXIgaz1vKHcpO2s+bj8oZD13LG09aywodj1zKSYmKG0rPTFlMyksZj1DKTooaD13LHA9ayxnPXMsZi09Qyl9fWZ1bmN0aW9uIHJlKHQpe2lmKG51bGwhPXQuY2FjaGVkVGV4dEhlaWdodClyZXR1cm4gdC5jYWNoZWRUZXh0SGVpZ2h0O2lmKG51bGw9PV9pKXtfaT1zaSgicHJlIik7Zm9yKHZhciBlPTA7NDk+ZTsrK2UpX2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSksX2kuYXBwZW5kQ2hpbGQoc2koImJyIikpO19pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IikpfXVpKHQubWVhc3VyZSxfaSk7dmFyIHI9X2kub2Zmc2V0SGVpZ2h0LzUwO3JldHVybiByPjMmJih0LmNhY2hlZFRleHRIZWlnaHQ9ciksYWkodC5tZWFzdXJlKSxyfHwxfWZ1bmN0aW9uIG5lKHQpe2lmKG51bGwhPXQuY2FjaGVkQ2hhcldpZHRoKXJldHVybiB0LmNhY2hlZENoYXJXaWR0aDt2YXIgZT1zaSgic3BhbiIsIngiKSxyPXNpKCJwcmUiLFtlXSk7dWkodC5tZWFzdXJlLHIpO3ZhciBuPWUub2Zmc2V0V2lkdGg7cmV0dXJuIG4+MiYmKHQuY2FjaGVkQ2hhcldpZHRoPW4pLG58fDEwfWZ1bmN0aW9uIGllKHQpe3QuY3VyT3A9e2NoYW5nZXM6W10sZm9yY2VVcGRhdGU6ITEsdXBkYXRlSW5wdXQ6bnVsbCx1c2VyU2VsQ2hhbmdlOm51bGwsdGV4dENoYW5nZWQ6bnVsbCxzZWxlY3Rpb25DaGFuZ2VkOiExLGN1cnNvckFjdGl2aXR5OiExLHVwZGF0ZU1heExpbmU6ITEsdXBkYXRlU2Nyb2xsUG9zOiExLGlkOisrSml9LE1vKyt8fChTbz1bXSl9ZnVuY3Rpb24gb2UodCl7dmFyIGU9dC5jdXJPcCxyPXQuZG9jLG49dC5kaXNwbGF5O2lmKHQuY3VyT3A9bnVsbCxlLnVwZGF0ZU1heExpbmUmJmYodCksbi5tYXhMaW5lQ2hhbmdlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJm4ubWF4TGluZSl7dmFyIGk9WCh0LG4ubWF4TGluZSk7bi5zaXplci5zdHlsZS5taW5XaWR0aD1NYXRoLm1heCgwLGkrMytUbykrInB4IixuLm1heExpbmVDaGFuZ2VkPSExO3ZhciBvPU1hdGgubWF4KDAsbi5zaXplci5vZmZzZXRMZWZ0K24uc2l6ZXIub2Zmc2V0V2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCk7bzxyLnNjcm9sbExlZnQmJiFlLnVwZGF0ZVNjcm9sbFBvcyYmTWUodCxNYXRoLm1pbihuLnNjcm9sbGVyLnNjcm9sbExlZnQsbyksITApfXZhciBsLHM7aWYoZS51cGRhdGVTY3JvbGxQb3MpbD1lLnVwZGF0ZVNjcm9sbFBvcztlbHNlIGlmKGUuc2VsZWN0aW9uQ2hhbmdlZCYmbi5zY3JvbGxlci5jbGllbnRIZWlnaHQpe3ZhciBhPVEodCxyLnNlbC5oZWFkKTtsPXVyKHQsYS5sZWZ0LGEudG9wLGEubGVmdCxhLmJvdHRvbSl9aWYoKGUuY2hhbmdlcy5sZW5ndGh8fGUuZm9yY2VVcGRhdGV8fGwmJm51bGwhPWwuc2Nyb2xsVG9wKSYmKHM9Yih0LGUuY2hhbmdlcyxsJiZsLnNjcm9sbFRvcCxlLmZvcmNlVXBkYXRlKSx0LmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0JiYodC5kb2Muc2Nyb2xsVG9wPXQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApKSwhcyYmZS5zZWxlY3Rpb25DaGFuZ2VkJiZBKHQpLGUudXBkYXRlU2Nyb2xsUG9zKXt2YXIgdT1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LW4uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LGwuc2Nyb2xsVG9wKSksYz1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCxsLnNjcm9sbExlZnQpKTtuLnNjcm9sbGVyLnNjcm9sbFRvcD1uLnNjcm9sbGJhclYuc2Nyb2xsVG9wPXIuc2Nyb2xsVG9wPXUsbi5zY3JvbGxlci5zY3JvbGxMZWZ0PW4uc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PXIuc2Nyb2xsTGVmdD1jLGcodCksZS5zY3JvbGxUb1BvcyYmc3IodCxRZSh0LmRvYyxlLnNjcm9sbFRvUG9zLmZyb20pLFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MudG8pLGUuc2Nyb2xsVG9Qb3MubWFyZ2luKX1lbHNlIGwmJmxyKHQpO2Uuc2VsZWN0aW9uQ2hhbmdlZCYmRCh0KSx0LnN0YXRlLmZvY3VzZWQmJmUudXBkYXRlSW5wdXQmJmRlKHQsZS51c2VyU2VsQ2hhbmdlKTt2YXIgaD1lLm1heWJlSGlkZGVuTWFya2VycyxkPWUubWF5YmVVbmhpZGRlbk1hcmtlcnM7aWYoaClmb3IodmFyIHA9MDtwPGgubGVuZ3RoOysrcCloW3BdLmxpbmVzLmxlbmd0aHx8S24oaFtwXSwiaGlkZSIpO2lmKGQpZm9yKHZhciBwPTA7cDxkLmxlbmd0aDsrK3ApZFtwXS5saW5lcy5sZW5ndGgmJktuKGRbcF0sInVuaGlkZSIpO3ZhciBtO2lmKC0tTW98fChtPVNvLFNvPW51bGwpLGUudGV4dENoYW5nZWQmJktuKHQsImNoYW5nZSIsdCxlLnRleHRDaGFuZ2VkKSxlLmN1cnNvckFjdGl2aXR5JiZLbih0LCJjdXJzb3JBY3Rpdml0eSIsdCksbSlmb3IodmFyIHA9MDtwPG0ubGVuZ3RoOysrcCltW3BdKCl9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10fHx0aGlzLG49IXIuY3VyT3A7biYmaWUocik7dHJ5e3ZhciBpPWUuYXBwbHkocixhcmd1bWVudHMpfWZpbmFsbHl7biYmb2Uocil9cmV0dXJuIGl9fWZ1bmN0aW9uIHNlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5jbSYmIXRoaXMuY20uY3VyT3A7ciYmaWUodGhpcy5jbSk7dHJ5e2U9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtyJiZvZSh0aGlzLmNtKX1yZXR1cm4gZX19ZnVuY3Rpb24gYWUodCxlKXt2YXIgcixuPSF0LmN1ck9wO24mJmllKHQpO3RyeXtyPWUoKX1maW5hbGx5e24mJm9lKHQpfXJldHVybiByfWZ1bmN0aW9uIHVlKHQsZSxyLG4pe251bGw9PWUmJihlPXQuZG9jLmZpcnN0KSxudWxsPT1yJiYocj10LmRvYy5maXJzdCt0LmRvYy5zaXplKSx0LmN1ck9wLmNoYW5nZXMucHVzaCh7ZnJvbTplLHRvOnIsZGlmZjpufSl9ZnVuY3Rpb24gY2UodCl7dC5kaXNwbGF5LnBvbGxpbmdGYXN0fHx0LmRpc3BsYXkucG9sbC5zZXQodC5vcHRpb25zLnBvbGxJbnRlcnZhbCxmdW5jdGlvbigpe2hlKHQpLHQuc3RhdGUuZm9jdXNlZCYmY2UodCl9KX1mdW5jdGlvbiBmZSh0KXtmdW5jdGlvbiBlKCl7dmFyIG49aGUodCk7bnx8cj8odC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExLGNlKHQpKToocj0hMCx0LmRpc3BsYXkucG9sbC5zZXQoNjAsZSkpfXZhciByPSExO3QuZGlzcGxheS5wb2xsaW5nRmFzdD0hMCx0LmRpc3BsYXkucG9sbC5zZXQoMjAsZSl9ZnVuY3Rpb24gaGUodCl7dmFyIGU9dC5kaXNwbGF5LmlucHV0LHI9dC5kaXNwbGF5LnByZXZJbnB1dCxuPXQuZG9jLGk9bi5zZWw7aWYoIXQuc3RhdGUuZm9jdXNlZHx8SW8oZSl8fGdlKHQpfHx0LnN0YXRlLmRpc2FibGVJbnB1dClyZXR1cm4hMTt0LnN0YXRlLnBhc3RlSW5jb21pbmcmJnQuc3RhdGUuZmFrZWRMYXN0Q2hhciYmKGUudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxlLnZhbHVlLmxlbmd0aC0xKSx0LnN0YXRlLmZha2VkTGFzdENoYXI9ITEpO3ZhciBvPWUudmFsdWU7aWYobz09ciYmamUoaS5mcm9tLGkudG8pKXJldHVybiExO2lmKEFpJiYhTmkmJnQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj09PW8pcmV0dXJuIGRlKHQsITApLCExO3ZhciBsPSF0LmN1ck9wO2wmJmllKHQpLGkuc2hpZnQ9ITE7Zm9yKHZhciBzPTAsYT1NYXRoLm1pbihyLmxlbmd0aCxvLmxlbmd0aCk7YT5zJiZyLmNoYXJDb2RlQXQocyk9PW8uY2hhckNvZGVBdChzKTspKytzO3ZhciB1PWkuZnJvbSxjPWkudG87czxyLmxlbmd0aD91PVllKHUubGluZSx1LmNoLShyLmxlbmd0aC1zKSk6dC5zdGF0ZS5vdmVyd3JpdGUmJmplKHUsYykmJiF0LnN0YXRlLnBhc3RlSW5jb21pbmcmJihjPVllKGMubGluZSxNYXRoLm1pbihnbihuLGMubGluZSkudGV4dC5sZW5ndGgsYy5jaCsoby5sZW5ndGgtcykpKSk7dmFyIGY9dC5jdXJPcC51cGRhdGVJbnB1dCxoPXtmcm9tOnUsdG86Yyx0ZXh0OnpvKG8uc2xpY2UocykpLG9yaWdpbjp0LnN0YXRlLnBhc3RlSW5jb21pbmc/InBhc3RlIjoiK2lucHV0In07cmV0dXJuIEJlKHQuZG9jLGgsImVuZCIpLHQuY3VyT3AudXBkYXRlSW5wdXQ9ZixVbih0LCJpbnB1dFJlYWQiLHQsaCksby5sZW5ndGg+MWUzfHxvLmluZGV4T2YoIlxuIik+LTE/ZS52YWx1ZT10LmRpc3BsYXkucHJldklucHV0PSIiOnQuZGlzcGxheS5wcmV2SW5wdXQ9byxsJiZvZSh0KSx0LnN0YXRlLnBhc3RlSW5jb21pbmc9ITEsITB9ZnVuY3Rpb24gZGUodCxlKXt2YXIgcixuLGk9dC5kb2M7aWYoamUoaS5zZWwuZnJvbSxpLnNlbC50bykpZSYmKHQuZGlzcGxheS5wcmV2SW5wdXQ9dC5kaXNwbGF5LmlucHV0LnZhbHVlPSIiLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCkpO2Vsc2V7dC5kaXNwbGF5LnByZXZJbnB1dD0iIixyPUZvJiYoaS5zZWwudG8ubGluZS1pLnNlbC5mcm9tLmxpbmU+MTAwfHwobj10LmdldFNlbGVjdGlvbigpKS5sZW5ndGg+MWUzKTt2YXIgbz1yPyItIjpufHx0LmdldFNlbGVjdGlvbigpO3QuZGlzcGxheS5pbnB1dC52YWx1ZT1vLHQuc3RhdGUuZm9jdXNlZCYmSm4odC5kaXNwbGF5LmlucHV0KSxBaSYmIU5pJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW8pfXQuZGlzcGxheS5pbmFjY3VyYXRlU2VsZWN0aW9uPXJ9ZnVuY3Rpb24gcGUodCl7Im5vY3Vyc29yIj09dC5vcHRpb25zLnJlYWRPbmx5fHxWaSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09dC5kaXNwbGF5LmlucHV0fHx0LmRpc3BsYXkuaW5wdXQuZm9jdXMoKX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gdC5vcHRpb25zLnJlYWRPbmx5fHx0LmRvYy5jYW50RWRpdH1mdW5jdGlvbiBtZSh0KXtmdW5jdGlvbiBlKCl7dC5zdGF0ZS5mb2N1c2VkJiZzZXRUaW1lb3V0KGlpKHBlLHQpLDApfWZ1bmN0aW9uIHIoKXtudWxsPT1zJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz1udWxsLGwuY2FjaGVkQ2hhcldpZHRoPWwuY2FjaGVkVGV4dEhlaWdodD1Pbz1udWxsLF8odCksYWUodCxpaSh1ZSx0KSl9LDEwMCkpfWZ1bmN0aW9uIG4oKXtmb3IodmFyIHQ9bC53cmFwcGVyLnBhcmVudE5vZGU7dCYmdCE9ZG9jdW1lbnQuYm9keTt0PXQucGFyZW50Tm9kZSk7dD9zZXRUaW1lb3V0KG4sNWUzKTpWbih3aW5kb3csInJlc2l6ZSIscil9ZnVuY3Rpb24gaShlKXtYbih0LGUpfHx0Lm9wdGlvbnMub25EcmFnRXZlbnQmJnQub3B0aW9ucy5vbkRyYWdFdmVudCh0LEVuKGUpKXx8UG4oZSl9ZnVuY3Rpb24gbygpe2wuaW5hY2N1cmF0ZVNlbGVjdGlvbiYmKGwucHJldklucHV0PSIiLGwuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxsLmlucHV0LnZhbHVlPXQuZ2V0U2VsZWN0aW9uKCksSm4obC5pbnB1dCkpfXZhciBsPXQuZGlzcGxheTtHbihsLnNjcm9sbGVyLCJtb3VzZWRvd24iLGxlKHQsYmUpKSxBaT9HbihsLnNjcm9sbGVyLCJkYmxjbGljayIsbGUodCxmdW5jdGlvbihlKXtpZighWG4odCxlKSl7dmFyIHI9eWUodCxlKTtpZihyJiYhd2UodCxlKSYmIXZlKHQuZGlzcGxheSxlKSl7em4oZSk7dmFyIG49bXIoZ24odC5kb2Msci5saW5lKS50ZXh0LHIpO2VyKHQuZG9jLG4uZnJvbSxuLnRvKX19fSkpOkduKGwuc2Nyb2xsZXIsImRibGNsaWNrIixmdW5jdGlvbihlKXtYbih0LGUpfHx6bihlKX0pLEduKGwubGluZVNwYWNlLCJzZWxlY3RzdGFydCIsZnVuY3Rpb24odCl7dmUobCx0KXx8em4odCl9KSxaaXx8R24obC5zY3JvbGxlciwiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe0llKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJihTZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsVG9wKSxNZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwhMCksS24odCwic2Nyb2xsIix0KSl9KSxHbihsLnNjcm9sbGJhclYsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmU2UodCxsLnNjcm9sbGJhclYuc2Nyb2xsVG9wKX0pLEduKGwuc2Nyb2xsYmFySCwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZNZSh0LGwuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KX0pLEduKGwuc2Nyb2xsZXIsIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGUpe1RlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJET01Nb3VzZVNjcm9sbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsYmFySCwibW91c2Vkb3duIixlKSxHbihsLnNjcm9sbGJhclYsIm1vdXNlZG93biIsZSksR24obC53cmFwcGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC53cmFwcGVyLnNjcm9sbFRvcD1sLndyYXBwZXIuc2Nyb2xsTGVmdD0wfSk7dmFyIHM7R24od2luZG93LCJyZXNpemUiLHIpLHNldFRpbWVvdXQobiw1ZTMpLEduKGwuaW5wdXQsImtleXVwIixsZSh0LGZ1bmN0aW9uKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbktleUV2ZW50JiZ0Lm9wdGlvbnMub25LZXlFdmVudCh0LEVuKGUpKXx8MTY9PWUua2V5Q29kZSYmKHQuZG9jLnNlbC5zaGlmdD0hMSl9KSksR24obC5pbnB1dCwiaW5wdXQiLGZ1bmN0aW9uKCl7QWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW51bGwpLGZlKHQpfSksR24obC5pbnB1dCwia2V5ZG93biIsbGUodCxXZSkpLEduKGwuaW5wdXQsImtleXByZXNzIixsZSh0LE9lKSksR24obC5pbnB1dCwiZm9jdXMiLGlpKEVlLHQpKSxHbihsLmlucHV0LCJibHVyIixpaSh6ZSx0KSksdC5vcHRpb25zLmRyYWdEcm9wJiYoR24obC5zY3JvbGxlciwiZHJhZ3N0YXJ0IixmdW5jdGlvbihlKXtrZSh0LGUpfSksR24obC5zY3JvbGxlciwiZHJhZ2VudGVyIixpKSxHbihsLnNjcm9sbGVyLCJkcmFnb3ZlciIsaSksR24obC5zY3JvbGxlciwiZHJvcCIsbGUodCxMZSkpKSxHbihsLnNjcm9sbGVyLCJwYXN0ZSIsZnVuY3Rpb24oZSl7dmUobCxlKXx8KHBlKHQpLGZlKHQpKX0pLEduKGwuaW5wdXQsInBhc3RlIixmdW5jdGlvbigpe2lmKFdpJiYhdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYhKG5ldyBEYXRlLXQuc3RhdGUubGFzdE1pZGRsZURvd248MjAwKSl7dmFyIGU9bC5pbnB1dC5zZWxlY3Rpb25TdGFydCxyPWwuaW5wdXQuc2VsZWN0aW9uRW5kO2wuaW5wdXQudmFsdWUrPSIkIixsLmlucHV0LnNlbGVjdGlvblN0YXJ0PWUsbC5pbnB1dC5zZWxlY3Rpb25FbmQ9cix0LnN0YXRlLmZha2VkTGFzdENoYXI9ITB9dC5zdGF0ZS5wYXN0ZUluY29taW5nPSEwLGZlKHQpfSksR24obC5pbnB1dCwiY3V0IixvKSxHbihsLmlucHV0LCJjb3B5IixvKSxGaSYmR24obC5zaXplciwibW91c2V1cCIsZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0JiZsLmlucHV0LmJsdXIoKSxwZSh0KX0pfWZ1bmN0aW9uIHZlKHQsZSl7Zm9yKHZhciByPVJuKGUpO3IhPXQud3JhcHBlcjtyPXIucGFyZW50Tm9kZSlpZighcnx8ci5pZ25vcmVFdmVudHN8fHIucGFyZW50Tm9kZT09dC5zaXplciYmciE9dC5tb3ZlcilyZXR1cm4hMH1mdW5jdGlvbiB5ZSh0LGUscil7dmFyIG49dC5kaXNwbGF5O2lmKCFyKXt2YXIgaT1SbihlKTtpZihpPT1uLnNjcm9sbGJhckh8fGk9PW4uc2Nyb2xsYmFySC5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhclZ8fGk9PW4uc2Nyb2xsYmFyVi5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhckZpbGxlcnx8aT09bi5ndXR0ZXJGaWxsZXIpcmV0dXJuIG51bGx9dmFyIG8sbCxzPWZpKG4ubGluZVNwYWNlKTt0cnl7bz1lLmNsaWVudFgsbD1lLmNsaWVudFl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9cmV0dXJuIHRlKHQsby1zLmxlZnQsbC1zLnRvcCl9ZnVuY3Rpb24gYmUodCl7ZnVuY3Rpb24gZSh0KXtpZighamUodix0KSl7aWYodj10LCJzaW5nbGUiPT1jKXJldHVybiBlcihpLmRvYyxRZShsLGEpLHQpLHZvaWQgMDsKaWYoZz1RZShsLGcpLG09UWUobCxtKSwiZG91YmxlIj09Yyl7dmFyIGU9bXIoZ24obCx0LmxpbmUpLnRleHQsdCk7JGUodCxnKT9lcihpLmRvYyxlLmZyb20sbSk6ZXIoaS5kb2MsZyxlLnRvKX1lbHNlInRyaXBsZSI9PWMmJigkZSh0LGcpP2VyKGkuZG9jLG0sUWUobCxZZSh0LmxpbmUsMCkpKTplcihpLmRvYyxnLFFlKGwsWWUodC5saW5lKzEsMCkpKSl9fWZ1bmN0aW9uIHIodCl7dmFyIG49KytiLHM9eWUoaSx0LCEwKTtpZihzKWlmKGplKHMsaCkpe3ZhciBhPXQuY2xpZW50WTx5LnRvcD8tMjA6dC5jbGllbnRZPnkuYm90dG9tPzIwOjA7YSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmKG8uc2Nyb2xsZXIuc2Nyb2xsVG9wKz1hLHIodCkpfSksNTApfWVsc2V7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKSxoPXMsZShzKTt2YXIgdT1wKG8sbCk7KHMubGluZT49dS50b3x8cy5saW5lPHUuZnJvbSkmJnNldFRpbWVvdXQobGUoaSxmdW5jdGlvbigpe2I9PW4mJnIodCl9KSwxNTApfX1mdW5jdGlvbiBuKHQpe2I9MS8wLHpuKHQpLHBlKGkpLFZuKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLFZuKGRvY3VtZW50LCJtb3VzZXVwIixDKX1pZighWG4odGhpcyx0KSl7dmFyIGk9dGhpcyxvPWkuZGlzcGxheSxsPWkuZG9jLHM9bC5zZWw7aWYocy5zaGlmdD10LnNoaWZ0S2V5LHZlKG8sdCkpcmV0dXJuIFdpfHwoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe28uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwfSwxMDApKSx2b2lkIDA7aWYoIXdlKGksdCkpe3ZhciBhPXllKGksdCk7c3dpdGNoKEJuKHQpKXtjYXNlIDM6cmV0dXJuIFppJiZJZS5jYWxsKGksaSx0KSx2b2lkIDA7Y2FzZSAyOnJldHVybiBXaSYmKGkuc3RhdGUubGFzdE1pZGRsZURvd249K25ldyBEYXRlKSxhJiZlcihpLmRvYyxhKSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx6bih0KSx2b2lkIDB9aWYoIWEpcmV0dXJuIFJuKHQpPT1vLnNjcm9sbGVyJiZ6bih0KSx2b2lkIDA7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKTt2YXIgdT0rbmV3IERhdGUsYz0ic2luZ2xlIjtpZihqaSYmamkudGltZT51LTQwMCYmamUoamkucG9zLGEpKWM9InRyaXBsZSIsem4odCksc2V0VGltZW91dChpaShwZSxpKSwyMCksdnIoaSxhLmxpbmUpO2Vsc2UgaWYoWWkmJllpLnRpbWU+dS00MDAmJmplKFlpLnBvcyxhKSl7Yz0iZG91YmxlIixqaT17dGltZTp1LHBvczphfSx6bih0KTt2YXIgZj1tcihnbihsLGEubGluZSkudGV4dCxhKTtlcihpLmRvYyxmLmZyb20sZi50byl9ZWxzZSBZaT17dGltZTp1LHBvczphfTt2YXIgaD1hO2lmKGkub3B0aW9ucy5kcmFnRHJvcCYmV28mJiFnZShpKSYmIWplKHMuZnJvbSxzLnRvKSYmISRlKGEscy5mcm9tKSYmISRlKHMudG8sYSkmJiJzaW5nbGUiPT1jKXt2YXIgZD1sZShpLGZ1bmN0aW9uKGUpe1dpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEpLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PSExLFZuKGRvY3VtZW50LCJtb3VzZXVwIixkKSxWbihvLnNjcm9sbGVyLCJkcm9wIixkKSxNYXRoLmFicyh0LmNsaWVudFgtZS5jbGllbnRYKStNYXRoLmFicyh0LmNsaWVudFktZS5jbGllbnRZKTwxMCYmKHpuKGUpLGVyKGkuZG9jLGEpLHBlKGkpKX0pO3JldHVybiBXaSYmKG8uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwKSxpLnN0YXRlLmRyYWdnaW5nVGV4dD1kLG8uc2Nyb2xsZXIuZHJhZ0Ryb3AmJm8uc2Nyb2xsZXIuZHJhZ0Ryb3AoKSxHbihkb2N1bWVudCwibW91c2V1cCIsZCksR24oby5zY3JvbGxlciwiZHJvcCIsZCksdm9pZCAwfXpuKHQpLCJzaW5nbGUiPT1jJiZlcihpLmRvYyxRZShsLGEpKTt2YXIgZz1zLmZyb20sbT1zLnRvLHY9YSx5PWZpKG8ud3JhcHBlciksYj0wLHg9bGUoaSxmdW5jdGlvbih0KXtBaXx8Qm4odCk/cih0KTpuKHQpfSksQz1sZShpLG4pO0duKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixDKX19fWZ1bmN0aW9uIHhlKHQsZSxyLG4saSl7dHJ5e3ZhciBvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4hMX1pZihvPj1NYXRoLmZsb29yKGZpKHQuZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpcmV0dXJuITE7biYmem4oZSk7dmFyIHM9dC5kaXNwbGF5LGE9Zmkocy5saW5lRGl2KTtpZihsPmEuYm90dG9tfHwhWW4odCxyKSlyZXR1cm4gRm4oZSk7bC09YS50b3Atcy52aWV3T2Zmc2V0O2Zvcih2YXIgdT0wO3U8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysrdSl7dmFyIGM9cy5ndXR0ZXJzLmNoaWxkTm9kZXNbdV07aWYoYyYmZmkoYykucmlnaHQ+PW8pe3ZhciBmPXhuKHQuZG9jLGwpLGg9dC5vcHRpb25zLmd1dHRlcnNbdV07cmV0dXJuIGkodCxyLHQsZixoLGUpLEZuKGUpfX19ZnVuY3Rpb24gQ2UodCxlKXtyZXR1cm4gWW4odCwiZ3V0dGVyQ29udGV4dE1lbnUiKT94ZSh0LGUsImd1dHRlckNvbnRleHRNZW51IiwhMSxLbik6ITF9ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4geGUodCxlLCJndXR0ZXJDbGljayIsITAsVW4pfWZ1bmN0aW9uIExlKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHx2ZShlLmRpc3BsYXksdCl8fGUub3B0aW9ucy5vbkRyYWdFdmVudCYmZS5vcHRpb25zLm9uRHJhZ0V2ZW50KGUsRW4odCkpKSl7em4odCksQWkmJih0bz0rbmV3IERhdGUpO3ZhciByPXllKGUsdCwhMCksbj10LmRhdGFUcmFuc2Zlci5maWxlcztpZihyJiYhZ2UoZSkpaWYobiYmbi5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIGk9bi5sZW5ndGgsbz1BcnJheShpKSxsPTAscz1mdW5jdGlvbih0LG4pe3ZhciBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPWZ1bmN0aW9uKCl7b1tuXT1zLnJlc3VsdCwrK2w9PWkmJihyPVFlKGUuZG9jLHIpLEJlKGUuZG9jLHtmcm9tOnIsdG86cix0ZXh0OnpvKG8uam9pbigiXG4iKSksb3JpZ2luOiJwYXN0ZSJ9LCJhcm91bmQiKSl9LHMucmVhZEFzVGV4dCh0KX0sYT0wO2k+YTsrK2EpcyhuW2FdLGEpO2Vsc2V7aWYoZS5zdGF0ZS5kcmFnZ2luZ1RleHQmJiEkZShyLGUuZG9jLnNlbC5mcm9tKSYmISRlKGUuZG9jLnNlbC50byxyKSlyZXR1cm4gZS5zdGF0ZS5kcmFnZ2luZ1RleHQodCksc2V0VGltZW91dChpaShwZSxlKSwyMCksdm9pZCAwO3RyeXt2YXIgbz10LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7aWYobyl7dmFyIHU9ZS5kb2Muc2VsLmZyb20sYz1lLmRvYy5zZWwudG87bnIoZS5kb2MscixyKSxlLnN0YXRlLmRyYWdnaW5nVGV4dCYmX2UoZS5kb2MsIiIsdSxjLCJwYXN0ZSIpLGUucmVwbGFjZVNlbGVjdGlvbihvLG51bGwsInBhc3RlIikscGUoZSl9fWNhdGNoKHQpe319fX1mdW5jdGlvbiBrZSh0LGUpe2lmKEFpJiYoIXQuc3RhdGUuZHJhZ2dpbmdUZXh0fHwrbmV3IERhdGUtdG88MTAwKSlyZXR1cm4gUG4oZSksdm9pZCAwO2lmKCFYbih0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt2YXIgcj10LmdldFNlbGVjdGlvbigpO2lmKGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLHIpLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSYmIUlpKXt2YXIgbj1zaSgiaW1nIixudWxsLG51bGwsInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyIpO24uc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSIsemkmJihuLndpZHRoPW4uaGVpZ2h0PTEsdC5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQobiksbi5fdG9wPW4ub2Zmc2V0VG9wKSxlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UobiwwLDApLHppJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9fX1mdW5jdGlvbiBTZSh0LGUpe01hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1lKTwyfHwodC5kb2Muc2Nyb2xsVG9wPWUsVGl8fGIodCxbXSxlKSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT1lJiYodC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ZSksVGkmJmIodCxbXSksVyh0LDEwMCkpfWZ1bmN0aW9uIE1lKHQsZSxyKXsocj9lPT10LmRvYy5zY3JvbGxMZWZ0Ok1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtZSk8Mil8fChlPU1hdGgubWluKGUsdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoLXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCksdC5kb2Muc2Nyb2xsTGVmdD1lLGcodCksdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0IT1lJiYodC5kaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdD1lKSl9ZnVuY3Rpb24gVGUodCxlKXt2YXIgcj1lLndoZWVsRGVsdGFYLG49ZS53aGVlbERlbHRhWTtudWxsPT1yJiZlLmRldGFpbCYmZS5heGlzPT1lLkhPUklaT05UQUxfQVhJUyYmKHI9ZS5kZXRhaWwpLG51bGw9PW4mJmUuZGV0YWlsJiZlLmF4aXM9PWUuVkVSVElDQUxfQVhJUz9uPWUuZGV0YWlsOm51bGw9PW4mJihuPWUud2hlZWxEZWx0YSk7dmFyIGk9dC5kaXNwbGF5LG89aS5zY3JvbGxlcjtpZihyJiZvLnNjcm9sbFdpZHRoPm8uY2xpZW50V2lkdGh8fG4mJm8uc2Nyb2xsSGVpZ2h0Pm8uY2xpZW50SGVpZ2h0KXtpZihuJiZLaSYmV2kpZm9yKHZhciBsPWUudGFyZ2V0O2whPW87bD1sLnBhcmVudE5vZGUpaWYobC5saW5lT2JqKXt0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PWw7YnJlYWt9aWYociYmIVRpJiYhemkmJm51bGwhPXJvKXJldHVybiBuJiZTZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxUb3ArbipybyxvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodCkpKSxNZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxMZWZ0K3Iqcm8sby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoKSkpLHpuKGUpLGkud2hlZWxTdGFydFg9bnVsbCx2b2lkIDA7aWYobiYmbnVsbCE9cm8pe3ZhciBzPW4qcm8sYT10LmRvYy5zY3JvbGxUb3AsdT1hK2kud3JhcHBlci5jbGllbnRIZWlnaHQ7MD5zP2E9TWF0aC5tYXgoMCxhK3MtNTApOnU9TWF0aC5taW4odC5kb2MuaGVpZ2h0LHUrcys1MCksYih0LFtdLHt0b3A6YSxib3R0b206dX0pfTIwPmVvJiYobnVsbD09aS53aGVlbFN0YXJ0WD8oaS53aGVlbFN0YXJ0WD1vLnNjcm9sbExlZnQsaS53aGVlbFN0YXJ0WT1vLnNjcm9sbFRvcCxpLndoZWVsRFg9cixpLndoZWVsRFk9bixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYobnVsbCE9aS53aGVlbFN0YXJ0WCl7dmFyIHQ9by5zY3JvbGxMZWZ0LWkud2hlZWxTdGFydFgsZT1vLnNjcm9sbFRvcC1pLndoZWVsU3RhcnRZLHI9ZSYmaS53aGVlbERZJiZlL2kud2hlZWxEWXx8dCYmaS53aGVlbERYJiZ0L2kud2hlZWxEWDtpLndoZWVsU3RhcnRYPWkud2hlZWxTdGFydFk9bnVsbCxyJiYocm89KHJvKmVvK3IpLyhlbysxKSwrK2VvKX19LDIwMCkpOihpLndoZWVsRFgrPXIsaS53aGVlbERZKz1uKSl9fWZ1bmN0aW9uIEFlKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPW1vW2VdLCFlKSlyZXR1cm4hMTt0LmRpc3BsYXkucG9sbGluZ0Zhc3QmJmhlKHQpJiYodC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExKTt2YXIgbj10LmRvYyxpPW4uc2VsLnNoaWZ0LG89ITE7dHJ5e2dlKHQpJiYodC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSEwKSxyJiYobi5zZWwuc2hpZnQ9ITEpLG89ZSh0KSE9QW99ZmluYWxseXtuLnNlbC5zaGlmdD1pLHQuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gb31mdW5jdGlvbiBIZSh0KXt2YXIgZT10LnN0YXRlLmtleU1hcHMuc2xpY2UoMCk7cmV0dXJuIHQub3B0aW9ucy5leHRyYUtleXMmJmUucHVzaCh0Lm9wdGlvbnMuZXh0cmFLZXlzKSxlLnB1c2godC5vcHRpb25zLmtleU1hcCksZX1mdW5jdGlvbiBOZSh0LGUpe3ZhciByPUNyKHQub3B0aW9ucy5rZXlNYXApLG49ci5hdXRvO2NsZWFyVGltZW91dChubyksbiYmIUxyKGUpJiYobm89c2V0VGltZW91dChmdW5jdGlvbigpe0NyKHQub3B0aW9ucy5rZXlNYXApPT1yJiYodC5vcHRpb25zLmtleU1hcD1uLmNhbGw/bi5jYWxsKG51bGwsdCk6bixsKHQpKX0sNTApKTt2YXIgaT1rcihlLCEwKSxvPSExO2lmKCFpKXJldHVybiExO3ZhciBzPUhlKHQpO3JldHVybiBvPWUuc2hpZnRLZXk/d3IoIlNoaWZ0LSIraSxzLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSl8fHdyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiBlPy9eZ29bQS1aXS8udGVzdChlKTplLm1vdGlvbik/QWUodCxlKTp2b2lkIDB9KTp3cihpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSl9KSxvJiYoem4oZSksRCh0KSxOaSYmKGUub2xkS2V5Q29kZT1lLmtleUNvZGUsZS5rZXlDb2RlPTApLFVuKHQsImtleUhhbmRsZWQiLHQsaSxlKSksb31mdW5jdGlvbiBEZSh0LGUscil7dmFyIG49d3IoIiciK3IrIiciLEhlKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSk7cmV0dXJuIG4mJih6bihlKSxEKHQpLFVuKHQsImtleUhhbmRsZWQiLHQsIiciK3IrIiciLGUpKSxufWZ1bmN0aW9uIFdlKHQpe3ZhciBlPXRoaXM7aWYoZS5zdGF0ZS5mb2N1c2VkfHxFZShlKSwhKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe0FpJiYyNz09dC5rZXlDb2RlJiYodC5yZXR1cm5WYWx1ZT0hMSk7dmFyIHI9dC5rZXlDb2RlO2UuZG9jLnNlbC5zaGlmdD0xNj09cnx8dC5zaGlmdEtleTt2YXIgbj1OZShlLHQpO3ppJiYob289bj9yOm51bGwsIW4mJjg4PT1yJiYhRm8mJihLaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmZS5yZXBsYWNlU2VsZWN0aW9uKCIiKSl9fWZ1bmN0aW9uIE9lKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHxlLm9wdGlvbnMub25LZXlFdmVudCYmZS5vcHRpb25zLm9uS2V5RXZlbnQoZSxFbih0KSkpKXt2YXIgcj10LmtleUNvZGUsbj10LmNoYXJDb2RlO2lmKHppJiZyPT1vbylyZXR1cm4gb289bnVsbCx6bih0KSx2b2lkIDA7aWYoISh6aSYmKCF0LndoaWNofHx0LndoaWNoPDEwKXx8RmkpfHwhTmUoZSx0KSl7dmFyIGk9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1uP3I6bik7dGhpcy5vcHRpb25zLmVsZWN0cmljQ2hhcnMmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycyYmdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50JiYhZ2UodGhpcykmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGkpPi0xJiZzZXRUaW1lb3V0KGxlKGUsZnVuY3Rpb24oKXtocihlLGUuZG9jLnNlbC50by5saW5lLCJzbWFydCIpfSksNzUpLERlKGUsdCxpKXx8KEFpJiYhTmkmJihlLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUoZSkpfX19ZnVuY3Rpb24gRWUodCl7Im5vY3Vyc29yIiE9dC5vcHRpb25zLnJlYWRPbmx5JiYodC5zdGF0ZS5mb2N1c2VkfHwoS24odCwiZm9jdXMiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMCwtMT09dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pJiYodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3ItZm9jdXNlZCIpLHQuY3VyT3B8fChkZSh0LCEwKSxXaSYmc2V0VGltZW91dChpaShkZSx0LCEwKSwwKSkpLGNlKHQpLEQodCkpfWZ1bmN0aW9uIHplKHQpe3Quc3RhdGUuZm9jdXNlZCYmKEtuKHQsImJsdXIiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMSx0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCIiKSksY2xlYXJJbnRlcnZhbCh0LmRpc3BsYXkuYmxpbmtlciksc2V0VGltZW91dChmdW5jdGlvbigpe3Quc3RhdGUuZm9jdXNlZHx8KHQuZG9jLnNlbC5zaGlmdD0hMSl9LDE1MCl9ZnVuY3Rpb24gSWUodCxlKXtmdW5jdGlvbiByKCl7aWYobnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7dmFyIHQ9aS5pbnB1dC52YWx1ZT0i4oCLIisoamUoby5mcm9tLG8udG8pPyIiOmkuaW5wdXQudmFsdWUpO2kucHJldklucHV0PSLigIsiLGkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9MSxpLmlucHV0LnNlbGVjdGlvbkVuZD10Lmxlbmd0aH19ZnVuY3Rpb24gbigpe2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9dSxOaSYmKGkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9aS5zY3JvbGxlci5zY3JvbGxUb3A9cyksY2UodCksbnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7KCFBaXx8TmkpJiZyKCksY2xlYXJUaW1lb3V0KGlvKTt2YXIgZT0wLG49ZnVuY3Rpb24oKXsiICI9PWkucHJldklucHV0JiYwPT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0P2xlKHQsbW8uc2VsZWN0QWxsKSh0KTplKys8MTA/aW89c2V0VGltZW91dChuLDUwMCk6ZGUodCl9O2lvPXNldFRpbWVvdXQobiwyMDApfX1pZighWG4odCxlLCJjb250ZXh0bWVudSIpKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYy5zZWw7aWYoIXZlKGksZSkmJiFDZSh0LGUpKXt2YXIgbD15ZSh0LGUpLHM9aS5zY3JvbGxlci5zY3JvbGxUb3A7aWYobCYmIXppKXt2YXIgYT10Lm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51O2EmJihqZShvLmZyb20sby50byl8fCRlKGwsby5mcm9tKXx8ISRlKGwsby50bykpJiZsZSh0LG5yKSh0LmRvYyxsLGwpO3ZhciB1PWkuaW5wdXQuc3R5bGUuY3NzVGV4dDtpZihpLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5pbnB1dC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIisoZS5jbGllbnRZLTUpKyJweDsgbGVmdDogIisoZS5jbGllbnRYLTUpKyJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogd2hpdGU7IG91dGxpbmU6IG5vbmU7IisiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IC1tcy1vcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTsiLHBlKHQpLGRlKHQsITApLGplKG8uZnJvbSxvLnRvKSYmKGkuaW5wdXQudmFsdWU9aS5wcmV2SW5wdXQ9IiAiKSxBaSYmIU5pJiZyKCksWmkpe1BuKGUpO3ZhciBjPWZ1bmN0aW9uKCl7Vm4od2luZG93LCJtb3VzZXVwIixjKSxzZXRUaW1lb3V0KG4sMjApfTtHbih3aW5kb3csIm1vdXNldXAiLGMpfWVsc2Ugc2V0VGltZW91dChuLDUwKX19fX1mdW5jdGlvbiBGZSh0LGUscil7aWYoISRlKGUuZnJvbSxyKSlyZXR1cm4gUWUodCxyKTt2YXIgbj1lLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSk7aWYoci5saW5lPmUudG8ubGluZStuKXt2YXIgaT1yLmxpbmUtbixvPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGk+bz9ZZShvLGduKHQsbykudGV4dC5sZW5ndGgpOkplKHIsZ24odCxpKS50ZXh0Lmxlbmd0aCl9aWYoci5saW5lPT1lLnRvLmxpbmUrbilyZXR1cm4gSmUocixRbihlLnRleHQpLmxlbmd0aCsoMT09ZS50ZXh0Lmxlbmd0aD9lLmZyb20uY2g6MCkrZ24odCxlLnRvLmxpbmUpLnRleHQubGVuZ3RoLWUudG8uY2gpO3ZhciBsPXIubGluZS1lLmZyb20ubGluZTtyZXR1cm4gSmUocixlLnRleHRbbF0ubGVuZ3RoKyhsPzA6ZS5mcm9tLmNoKSl9ZnVuY3Rpb24gUGUodCxlLHIpe2lmKHImJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm57YW5jaG9yOkZlKHQsZSxyLmFuY2hvciksaGVhZDpGZSh0LGUsci5oZWFkKX07aWYoInN0YXJ0Ij09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOmUuZnJvbX07dmFyIG49bG8oZSk7aWYoImFyb3VuZCI9PXIpcmV0dXJue2FuY2hvcjplLmZyb20saGVhZDpufTtpZigiZW5kIj09cilyZXR1cm57YW5jaG9yOm4saGVhZDpufTt2YXIgaT1mdW5jdGlvbih0KXtpZigkZSh0LGUuZnJvbSkpcmV0dXJuIHQ7aWYoISRlKGUudG8sdCkpcmV0dXJuIG47dmFyIHI9dC5saW5lK2UudGV4dC5sZW5ndGgtKGUudG8ubGluZS1lLmZyb20ubGluZSktMSxpPXQuY2g7cmV0dXJuIHQubGluZT09ZS50by5saW5lJiYoaSs9bi5jaC1lLnRvLmNoKSxZZShyLGkpfTtyZXR1cm57YW5jaG9yOmkodC5zZWwuYW5jaG9yKSxoZWFkOmkodC5zZWwuaGVhZCl9fWZ1bmN0aW9uIFJlKHQsZSxyKXt2YXIgbj17Y2FuY2VsZWQ6ITEsZnJvbTplLmZyb20sdG86ZS50byx0ZXh0OmUudGV4dCxvcmlnaW46ZS5vcmlnaW4sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxlZD0hMH19O3JldHVybiByJiYobi51cGRhdGU9ZnVuY3Rpb24oZSxyLG4saSl7ZSYmKHRoaXMuZnJvbT1RZSh0LGUpKSxyJiYodGhpcy50bz1RZSh0LHIpKSxuJiYodGhpcy50ZXh0PW4pLHZvaWQgMCE9PWkmJih0aGlzLm9yaWdpbj1pKX0pLEtuKHQsImJlZm9yZUNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVDaGFuZ2UiLHQuY20sbiksbi5jYW5jZWxlZD9udWxsOntmcm9tOm4uZnJvbSx0bzpuLnRvLHRleHQ6bi50ZXh0LG9yaWdpbjpuLm9yaWdpbn19ZnVuY3Rpb24gQmUodCxlLHIsbil7aWYodC5jbSl7aWYoIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sQmUpKHQsZSxyLG4pO2lmKHQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cylyZXR1cm59aWYoIShZbih0LCJiZWZvcmVDaGFuZ2UiKXx8dC5jbSYmWW4odC5jbSwiYmVmb3JlQ2hhbmdlIikpfHwoZT1SZSh0LGUsITApKSl7dmFyIGk9cWkmJiFuJiZGcih0LGUuZnJvbSxlLnRvKTtpZihpKXtmb3IodmFyIG89aS5sZW5ndGgtMTtvPj0xOy0tbylHZSh0LHtmcm9tOmlbb10uZnJvbSx0bzppW29dLnRvLHRleHQ6WyIiXX0pO2kubGVuZ3RoJiZHZSh0LHtmcm9tOmlbMF0uZnJvbSx0bzppWzBdLnRvLHRleHQ6ZS50ZXh0fSxyKX1lbHNlIEdlKHQsZSxyKX19ZnVuY3Rpb24gR2UodCxlLHIpe2lmKDEhPWUudGV4dC5sZW5ndGh8fCIiIT1lLnRleHRbMF18fCFqZShlLmZyb20sZS50bykpe3ZhciBuPVBlKHQsZSxyKTtNbih0LGUsbix0LmNtP3QuY20uY3VyT3AuaWQ6MC8wKSxVZSh0LGUsbix6cih0LGUpKTt2YXIgaT1bXTtkbih0LGZ1bmN0aW9uKHQscil7cnx8LTEhPXRpKGksdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxlKSxpLnB1c2godC5oaXN0b3J5KSksVWUodCxlLG51bGwsenIodCxlKSl9KX19ZnVuY3Rpb24gVmUodCxlKXtpZighdC5jbXx8IXQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cyl7dmFyIHI9dC5oaXN0b3J5LG49KCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLnBvcCgpO2lmKG4pe3ZhciBpPXtjaGFuZ2VzOltdLGFuY2hvckJlZm9yZTpuLmFuY2hvckFmdGVyLGhlYWRCZWZvcmU6bi5oZWFkQWZ0ZXIsYW5jaG9yQWZ0ZXI6bi5hbmNob3JCZWZvcmUsaGVhZEFmdGVyOm4uaGVhZEJlZm9yZSxnZW5lcmF0aW9uOnIuZ2VuZXJhdGlvbn07KCJ1bmRvIj09ZT9yLnVuZG9uZTpyLmRvbmUpLnB1c2goaSksci5nZW5lcmF0aW9uPW4uZ2VuZXJhdGlvbnx8KytyLm1heEdlbmVyYXRpb247Zm9yKHZhciBvPVluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSxsPW4uY2hhbmdlcy5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHM9bi5jaGFuZ2VzW2xdO2lmKHMub3JpZ2luPWUsbyYmIVJlKHQscywhMSkpcmV0dXJuKCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLmxlbmd0aD0wLHZvaWQgMDtpLmNoYW5nZXMucHVzaChTbih0LHMpKTt2YXIgYT1sP1BlKHQscyxudWxsKTp7YW5jaG9yOm4uYW5jaG9yQmVmb3JlLGhlYWQ6bi5oZWFkQmVmb3JlfTtVZSh0LHMsYSxJcih0LHMpKTt2YXIgdT1bXTtkbih0LGZ1bmN0aW9uKHQsZSl7ZXx8LTEhPXRpKHUsdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxzKSx1LnB1c2godC5oaXN0b3J5KSksVWUodCxzLG51bGwsSXIodCxzKSl9KX19fX1mdW5jdGlvbiBLZSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIFllKHQubGluZStlLHQuY2gpfXQuZmlyc3QrPWUsdC5jbSYmdWUodC5jbSx0LmZpcnN0LHQuZmlyc3QsZSksdC5zZWwuaGVhZD1yKHQuc2VsLmhlYWQpLHQuc2VsLmFuY2hvcj1yKHQuc2VsLmFuY2hvciksdC5zZWwuZnJvbT1yKHQuc2VsLmZyb20pLHQuc2VsLnRvPXIodC5zZWwudG8pfWZ1bmN0aW9uIFVlKHQsZSxyLG4pe2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFVlKSh0LGUscixuKTtpZihlLnRvLmxpbmU8dC5maXJzdClyZXR1cm4gS2UodCxlLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSkpLHZvaWQgMDtpZighKGUuZnJvbS5saW5lPnQubGFzdExpbmUoKSkpe2lmKGUuZnJvbS5saW5lPHQuZmlyc3Qpe3ZhciBpPWUudGV4dC5sZW5ndGgtMS0odC5maXJzdC1lLmZyb20ubGluZSk7S2UodCxpKSxlPXtmcm9tOlllKHQuZmlyc3QsMCksdG86WWUoZS50by5saW5lK2ksZS50by5jaCksdGV4dDpbUW4oZS50ZXh0KV0sb3JpZ2luOmUub3JpZ2lufX12YXIgbz10Lmxhc3RMaW5lKCk7ZS50by5saW5lPm8mJihlPXtmcm9tOmUuZnJvbSx0bzpZZShvLGduKHQsbykudGV4dC5sZW5ndGgpLHRleHQ6W2UudGV4dFswXV0sb3JpZ2luOmUub3JpZ2lufSksZS5yZW1vdmVkPW1uKHQsZS5mcm9tLGUudG8pLHJ8fChyPVBlKHQsZSxudWxsKSksdC5jbT9YZSh0LmNtLGUsbixyKTpjbih0LGUsbixyKX19ZnVuY3Rpb24gWGUodCxlLHIsbil7dmFyIG89dC5kb2MsbD10LmRpc3BsYXkscz1lLmZyb20sYT1lLnRvLHU9ITEsZj1zLmxpbmU7dC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGY9Ym4oR3IobyxnbihvLHMubGluZSkpKSxvLml0ZXIoZixhLmxpbmUrMSxmdW5jdGlvbih0KXtyZXR1cm4gdD09bC5tYXhMaW5lPyh1PSEwLCEwKTp2b2lkIDB9KSksJGUoby5zZWwuaGVhZCxlLmZyb20pfHwkZShlLnRvLG8uc2VsLmhlYWQpfHwodC5jdXJPcC5jdXJzb3JBY3Rpdml0eT0hMCksY24obyxlLHIsbixpKHQpKSx0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoby5pdGVyKGYscy5saW5lK2UudGV4dC5sZW5ndGgsZnVuY3Rpb24odCl7dmFyIGU9YyhvLHQpO2U+bC5tYXhMaW5lTGVuZ3RoJiYobC5tYXhMaW5lPXQsbC5tYXhMaW5lTGVuZ3RoPWUsbC5tYXhMaW5lQ2hhbmdlZD0hMCx1PSExKX0pLHUmJih0LmN1ck9wLnVwZGF0ZU1heExpbmU9ITApKSxvLmZyb250aWVyPU1hdGgubWluKG8uZnJvbnRpZXIscy5saW5lKSxXKHQsNDAwKTt2YXIgaD1lLnRleHQubGVuZ3RoLShhLmxpbmUtcy5saW5lKS0xO2lmKHVlKHQscy5saW5lLGEubGluZSsxLGgpLFluKHQsImNoYW5nZSIpKXt2YXIgZD17ZnJvbTpzLHRvOmEsdGV4dDplLnRleHQscmVtb3ZlZDplLnJlbW92ZWQsb3JpZ2luOmUub3JpZ2lufTtpZih0LmN1ck9wLnRleHRDaGFuZ2VkKXtmb3IodmFyIHA9dC5jdXJPcC50ZXh0Q2hhbmdlZDtwLm5leHQ7cD1wLm5leHQpO3AubmV4dD1kfWVsc2UgdC5jdXJPcC50ZXh0Q2hhbmdlZD1kfX1mdW5jdGlvbiBfZSh0LGUscixuLGkpe2lmKG58fChuPXIpLCRlKG4scikpe3ZhciBvPW47bj1yLHI9b30ic3RyaW5nIj09dHlwZW9mIGUmJihlPXpvKGUpKSxCZSh0LHtmcm9tOnIsdG86bix0ZXh0OmUsb3JpZ2luOml9LG51bGwpfWZ1bmN0aW9uIFllKHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBZZT8odGhpcy5saW5lPXQsdGhpcy5jaD1lLHZvaWQgMCk6bmV3IFllKHQsZSl9ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gdC5saW5lPT1lLmxpbmUmJnQuY2g9PWUuY2h9ZnVuY3Rpb24gJGUodCxlKXtyZXR1cm4gdC5saW5lPGUubGluZXx8dC5saW5lPT1lLmxpbmUmJnQuY2g8ZS5jaH1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gWWUodC5saW5lLHQuY2gpfWZ1bmN0aW9uIHFlKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQuZmlyc3QsTWF0aC5taW4oZSx0LmZpcnN0K3Quc2l6ZS0xKSl9ZnVuY3Rpb24gUWUodCxlKXtpZihlLmxpbmU8dC5maXJzdClyZXR1cm4gWWUodC5maXJzdCwwKTt2YXIgcj10LmZpcnN0K3Quc2l6ZS0xO3JldHVybiBlLmxpbmU+cj9ZZShyLGduKHQscikudGV4dC5sZW5ndGgpOkplKGUsZ24odCxlLmxpbmUpLnRleHQubGVuZ3RoKX1mdW5jdGlvbiBKZSh0LGUpe3ZhciByPXQuY2g7cmV0dXJuIG51bGw9PXJ8fHI+ZT9ZZSh0LmxpbmUsZSk6MD5yP1llKHQubGluZSwwKTp0fWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJuIGU+PXQuZmlyc3QmJmU8dC5maXJzdCt0LnNpemV9ZnVuY3Rpb24gZXIodCxlLHIsbil7aWYodC5zZWwuc2hpZnR8fHQuc2VsLmV4dGVuZCl7dmFyIGk9dC5zZWwuYW5jaG9yO2lmKHIpe3ZhciBvPSRlKGUsaSk7byE9JGUocixpKT8oaT1lLGU9cik6byE9JGUoZSxyKSYmKGU9cil9bnIodCxpLGUsbil9ZWxzZSBucih0LGUscnx8ZSxuKTt0LmNtJiYodC5jbS5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwKX1mdW5jdGlvbiBycih0LGUscil7dmFyIG49e2FuY2hvcjplLGhlYWQ6cn07cmV0dXJuIEtuKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLHQuY20sbiksbi5hbmNob3I9UWUodCxuLmFuY2hvciksbi5oZWFkPVFlKHQsbi5oZWFkKSxufWZ1bmN0aW9uIG5yKHQsZSxyLG4saSl7aWYoIWkmJlluKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSl7dmFyIG89cnIodCxlLHIpO3I9by5oZWFkLGU9by5hbmNob3J9dmFyIGw9dC5zZWw7aWYobC5nb2FsQ29sdW1uPW51bGwsbnVsbD09biYmKG49JGUocixsLmhlYWQpPy0xOjEpLChpfHwhamUoZSxsLmFuY2hvcikpJiYoZT1vcih0LGUsbiwicHVzaCIhPWkpKSwoaXx8IWplKHIsbC5oZWFkKSkmJihyPW9yKHQscixuLCJwdXNoIiE9aSkpLCFqZShsLmFuY2hvcixlKXx8IWplKGwuaGVhZCxyKSl7bC5hbmNob3I9ZSxsLmhlYWQ9cjt2YXIgcz0kZShyLGUpO2wuZnJvbT1zP3I6ZSxsLnRvPXM/ZTpyLHQuY20mJih0LmNtLmN1ck9wLnVwZGF0ZUlucHV0PXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD10LmNtLmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxVbih0LCJjdXJzb3JBY3Rpdml0eSIsdCl9fWZ1bmN0aW9uIGlyKHQpe25yKHQuZG9jLHQuZG9jLnNlbC5mcm9tLHQuZG9jLnNlbC50byxudWxsLCJwdXNoIil9ZnVuY3Rpb24gb3IodCxlLHIsbil7dmFyIGk9ITEsbz1lLGw9cnx8MTt0LmNhbnRFZGl0PSExO3Q6Zm9yKDs7KXt2YXIgcz1nbih0LG8ubGluZSk7aWYocy5tYXJrZWRTcGFucylmb3IodmFyIGE9MDthPHMubWFya2VkU3BhbnMubGVuZ3RoOysrYSl7dmFyIHU9cy5tYXJrZWRTcGFuc1thXSxjPXUubWFya2VyO2lmKChudWxsPT11LmZyb218fChjLmluY2x1c2l2ZUxlZnQ/dS5mcm9tPD1vLmNoOnUuZnJvbTxvLmNoKSkmJihudWxsPT11LnRvfHwoYy5pbmNsdXNpdmVSaWdodD91LnRvPj1vLmNoOnUudG8+by5jaCkpKXtpZihuJiYoS24oYywiYmVmb3JlQ3Vyc29yRW50ZXIiKSxjLmV4cGxpY2l0bHlDbGVhcmVkKSl7aWYocy5tYXJrZWRTcGFucyl7LS1hO2NvbnRpbnVlfWJyZWFrfWlmKCFjLmF0b21pYyljb250aW51ZTt2YXIgZj1jLmZpbmQoKVswPmw/ImZyb20iOiJ0byJdO2lmKGplKGYsbykmJihmLmNoKz1sLGYuY2g8MD9mPWYubGluZT50LmZpcnN0P1FlKHQsWWUoZi5saW5lLTEpKTpudWxsOmYuY2g+cy50ZXh0Lmxlbmd0aCYmKGY9Zi5saW5lPHQuZmlyc3QrdC5zaXplLTE/WWUoZi5saW5lKzEsMCk6bnVsbCksIWYpKXtpZihpKXJldHVybiBuPyh0LmNhbnRFZGl0PSEwLFllKHQuZmlyc3QsMCkpOm9yKHQsZSxyLCEwKTtpPSEwLGY9ZSxsPS1sfW89Zjtjb250aW51ZSB0fX1yZXR1cm4gb319ZnVuY3Rpb24gbHIodCl7dmFyIGU9c3IodCx0LmRvYy5zZWwuaGVhZCxudWxsLHQub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pO2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIHI9dC5kaXNwbGF5LG49Zmkoci5zaXplciksaT1udWxsO2lmKGUudG9wK24udG9wPDA/aT0hMDplLmJvdHRvbStuLnRvcD4od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmKGk9ITEpLG51bGwhPWkmJiFCaSl7dmFyIG89Im5vbmUiPT1yLmN1cnNvci5zdHlsZS5kaXNwbGF5O28mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLHIuY3Vyc29yLnN0eWxlLmxlZnQ9ZS5sZWZ0KyJweCIsci5jdXJzb3Iuc3R5bGUudG9wPWUudG9wLXIudmlld09mZnNldCsicHgiKSxyLmN1cnNvci5zY3JvbGxJbnRvVmlldyhpKSxvJiYoci5jdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19ZnVuY3Rpb24gc3IodCxlLHIsbil7Zm9yKG51bGw9PW4mJihuPTApOzspe3ZhciBpPSExLG89USh0LGUpLGw9ciYmciE9ZT9RKHQscik6byxzPXVyKHQsTWF0aC5taW4oby5sZWZ0LGwubGVmdCksTWF0aC5taW4oby50b3AsbC50b3ApLW4sTWF0aC5tYXgoby5sZWZ0LGwubGVmdCksTWF0aC5tYXgoby5ib3R0b20sbC5ib3R0b20pK24pLGE9dC5kb2Muc2Nyb2xsVG9wLHU9dC5kb2Muc2Nyb2xsTGVmdDtpZihudWxsIT1zLnNjcm9sbFRvcCYmKFNlKHQscy5zY3JvbGxUb3ApLE1hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1hKT4xJiYoaT0hMCkpLG51bGwhPXMuc2Nyb2xsTGVmdCYmKE1lKHQscy5zY3JvbGxMZWZ0KSxNYXRoLmFicyh0LmRvYy5zY3JvbGxMZWZ0LXUpPjEmJihpPSEwKSksIWkpcmV0dXJuIG99fWZ1bmN0aW9uIGFyKHQsZSxyLG4saSl7dmFyIG89dXIodCxlLHIsbixpKTtudWxsIT1vLnNjcm9sbFRvcCYmU2UodCxvLnNjcm9sbFRvcCksbnVsbCE9by5zY3JvbGxMZWZ0JiZNZSh0LG8uc2Nyb2xsTGVmdCl9ZnVuY3Rpb24gdXIodCxlLHIsbixpKXt2YXIgbz10LmRpc3BsYXksbD1yZSh0LmRpc3BsYXkpOzA+ciYmKHI9MCk7dmFyIHM9by5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8sYT1vLnNjcm9sbGVyLnNjcm9sbFRvcCx1PXt9LGM9dC5kb2MuaGVpZ2h0K0YobyksZj1sPnIsaD1pPmMtbDtpZihhPnIpdS5zY3JvbGxUb3A9Zj8wOnI7ZWxzZSBpZihpPmErcyl7dmFyIGQ9TWF0aC5taW4ociwoaD9jOmkpLXMpO2QhPWEmJih1LnNjcm9sbFRvcD1kKX12YXIgcD1vLnNjcm9sbGVyLmNsaWVudFdpZHRoLVRvLGc9by5zY3JvbGxlci5zY3JvbGxMZWZ0O2UrPW8uZ3V0dGVycy5vZmZzZXRXaWR0aCxuKz1vLmd1dHRlcnMub2Zmc2V0V2lkdGg7dmFyIG09by5ndXR0ZXJzLm9mZnNldFdpZHRoLHY9bSsxMD5lO3JldHVybiBnK20+ZXx8dj8odiYmKGU9MCksdS5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsZS0xMC1tKSk6bj5wK2ctMyYmKHUuc2Nyb2xsTGVmdD1uKzEwLXApLHV9ZnVuY3Rpb24gY3IodCxlLHIpe3QuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0Om51bGw9PWU/dC5kb2Muc2Nyb2xsTGVmdDplLHNjcm9sbFRvcDpudWxsPT1yP3QuZG9jLnNjcm9sbFRvcDpyfX1mdW5jdGlvbiBmcih0LGUscil7dmFyIG49dC5jdXJPcC51cGRhdGVTY3JvbGxQb3N8fCh0LmN1ck9wLnVwZGF0ZVNjcm9sbFBvcz17c2Nyb2xsTGVmdDp0LmRvYy5zY3JvbGxMZWZ0LHNjcm9sbFRvcDp0LmRvYy5zY3JvbGxUb3B9KSxpPXQuZGlzcGxheS5zY3JvbGxlcjtuLnNjcm9sbFRvcD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsSGVpZ2h0LWkuY2xpZW50SGVpZ2h0LG4uc2Nyb2xsVG9wK3IpKSxuLnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihpLnNjcm9sbFdpZHRoLWkuY2xpZW50V2lkdGgsbi5zY3JvbGxMZWZ0K2UpKX1mdW5jdGlvbiBocih0LGUscixuKXt2YXIgaT10LmRvYztpZihudWxsPT1yJiYocj0iYWRkIiksInNtYXJ0Ij09cilpZih0LmRvYy5tb2RlLmluZGVudCl2YXIgbz16KHQsZSk7ZWxzZSByPSJwcmV2Ijt2YXIgbCxzPXQub3B0aW9ucy50YWJTaXplLGE9Z24oaSxlKSx1PVpuKGEudGV4dCxudWxsLHMpLGM9YS50ZXh0Lm1hdGNoKC9eXHMqLylbMF07aWYoInNtYXJ0Ij09ciYmKGw9dC5kb2MubW9kZS5pbmRlbnQobyxhLnRleHQuc2xpY2UoYy5sZW5ndGgpLGEudGV4dCksbD09QW8pKXtpZighbilyZXR1cm47cj0icHJldiJ9InByZXYiPT1yP2w9ZT5pLmZpcnN0P1puKGduKGksZS0xKS50ZXh0LG51bGwscyk6MDoiYWRkIj09cj9sPXUrdC5vcHRpb25zLmluZGVudFVuaXQ6InN1YnRyYWN0Ij09cj9sPXUtdC5vcHRpb25zLmluZGVudFVuaXQ6Im51bWJlciI9PXR5cGVvZiByJiYobD11K3IpLGw9TWF0aC5tYXgoMCxsKTt2YXIgZj0iIixoPTA7aWYodC5vcHRpb25zLmluZGVudFdpdGhUYWJzKWZvcih2YXIgZD1NYXRoLmZsb29yKGwvcyk7ZDstLWQpaCs9cyxmKz0iCSI7bD5oJiYoZis9cW4obC1oKSksZiE9Yz9fZSh0LmRvYyxmLFllKGUsMCksWWUoZSxjLmxlbmd0aCksIitpbnB1dCIpOmkuc2VsLmhlYWQubGluZT09ZSYmaS5zZWwuaGVhZC5jaDxjLmxlbmd0aCYmbnIoaSxZZShlLGMubGVuZ3RoKSxZZShlLGMubGVuZ3RoKSwxKSxhLnN0YXRlQWZ0ZXI9bnVsbH1mdW5jdGlvbiBkcih0LGUscil7dmFyIG49ZSxpPWUsbz10LmRvYztyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/aT1nbihvLHFlKG8sZSkpOm49Ym4oZSksbnVsbD09bj9udWxsOnIoaSxuKT8odWUodCxuLG4rMSksaSk6bnVsbH1mdW5jdGlvbiBwcih0LGUscixuLGkpe2Z1bmN0aW9uIG8oKXt2YXIgZT1zK3I7cmV0dXJuIGU8dC5maXJzdHx8ZT49dC5maXJzdCt0LnNpemU/Zj0hMToocz1lLGM9Z24odCxlKSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT0oaT9TaTpNaSkoYyxhLHIsITApO2lmKG51bGw9PWUpe2lmKHR8fCFvKCkpcmV0dXJuIGY9ITE7YT1pPygwPnI/Ymk6eWkpKGMpOjA+cj9jLnRleHQubGVuZ3RoOjB9ZWxzZSBhPWU7cmV0dXJuITB9dmFyIHM9ZS5saW5lLGE9ZS5jaCx1PXIsYz1nbih0LHMpLGY9ITA7aWYoImNoYXIiPT1uKWwoKTtlbHNlIGlmKCJjb2x1bW4iPT1uKWwoITApO2Vsc2UgaWYoIndvcmQiPT1ufHwiZ3JvdXAiPT1uKWZvcih2YXIgaD1udWxsLGQ9Imdyb3VwIj09bixwPSEwOyEoMD5yKXx8bCghcCk7cD0hMSl7dmFyIGc9Yy50ZXh0LmNoYXJBdChhKXx8IlxuIixtPW9pKGcpPyJ3IjpkPy9ccy8udGVzdChnKT9udWxsOiJwIjpudWxsO2lmKGgmJmghPW0pezA+ciYmKHI9MSxsKCkpO2JyZWFrfWlmKG0mJihoPW0pLHI+MCYmIWwoIXApKWJyZWFrfXZhciB2PW9yKHQsWWUocyxhKSx1LCEwKTtyZXR1cm4gZnx8KHYuaGl0U2lkZT0hMCksdn1mdW5jdGlvbiBncih0LGUscixuKXt2YXIgaSxvPXQuZG9jLGw9ZS5sZWZ0O2lmKCJwYWdlIj09bil7dmFyIHM9TWF0aC5taW4odC5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7aT1lLnRvcCtyKihzLSgwPnI/MS41Oi41KSpyZSh0LmRpc3BsYXkpKX1lbHNlImxpbmUiPT1uJiYoaT1yPjA/ZS5ib3R0b20rMzplLnRvcC0zKTtmb3IoOzspe3ZhciBhPXRlKHQsbCxpKTtpZighYS5vdXRzaWRlKWJyZWFrO2lmKDA+cj8wPj1pOmk+PW8uaGVpZ2h0KXthLmhpdFNpZGU9ITA7YnJlYWt9aSs9NSpyfXJldHVybiBhfWZ1bmN0aW9uIG1yKHQsZSl7dmFyIHI9ZS5jaCxuPWUuY2g7aWYodCl7KGUueFJlbDwwfHxuPT10Lmxlbmd0aCkmJnI/LS1yOisrbjtmb3IodmFyIGk9dC5jaGFyQXQociksbz1vaShpKT9vaTovXHMvLnRlc3QoaSk/ZnVuY3Rpb24odCl7cmV0dXJuL1xzLy50ZXN0KHQpfTpmdW5jdGlvbih0KXtyZXR1cm4hL1xzLy50ZXN0KHQpJiYhb2kodCl9O3I+MCYmbyh0LmNoYXJBdChyLTEpKTspLS1yO2Zvcig7bjx0Lmxlbmd0aCYmbyh0LmNoYXJBdChuKSk7KSsrbn1yZXR1cm57ZnJvbTpZZShlLmxpbmUsciksdG86WWUoZS5saW5lLG4pfX1mdW5jdGlvbiB2cih0LGUpe2VyKHQuZG9jLFllKGUsMCksUWUodC5kb2MsWWUoZSsxLDApKSl9ZnVuY3Rpb24geXIoZSxyLG4saSl7dC5kZWZhdWx0c1tlXT1yLG4mJihzb1tlXT1pP2Z1bmN0aW9uKHQsZSxyKXtyIT11byYmbih0LGUscil9Om4pfWZ1bmN0aW9uIGJyKHQsZSl7aWYoZT09PSEwKXJldHVybiBlO2lmKHQuY29weVN0YXRlKXJldHVybiB0LmNvcHlTdGF0ZShlKTt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpIGluc3RhbmNlb2YgQXJyYXkmJihpPWkuY29uY2F0KFtdKSkscltuXT1pfXJldHVybiByfWZ1bmN0aW9uIHhyKHQsZSxyKXtyZXR1cm4gdC5zdGFydFN0YXRlP3Quc3RhcnRTdGF0ZShlLHIpOiEwfWZ1bmN0aW9uIENyKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD92b1t0XTp0fWZ1bmN0aW9uIHdyKHQsZSxyKXtmdW5jdGlvbiBuKGUpe2U9Q3IoZSk7dmFyIGk9ZVt0XTtpZihpPT09ITEpcmV0dXJuInN0b3AiO2lmKG51bGwhPWkmJnIoaSkpcmV0dXJuITA7aWYoZS5ub2ZhbGx0aHJvdWdoKXJldHVybiJzdG9wIjt2YXIgbz1lLmZhbGx0aHJvdWdoO2lmKG51bGw9PW8pcmV0dXJuITE7aWYoIltvYmplY3QgQXJyYXldIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKXJldHVybiBuKG8pO2Zvcih2YXIgbD0wLHM9by5sZW5ndGg7cz5sOysrbCl7dmFyIGE9bihvW2xdKTtpZihhKXJldHVybiBhfXJldHVybiExfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgbz1uKGVbaV0pO2lmKG8pcmV0dXJuInN0b3AiIT1vfX1mdW5jdGlvbiBMcih0KXt2YXIgZT1Qb1t0LmtleUNvZGVdO3JldHVybiJDdHJsIj09ZXx8IkFsdCI9PWV8fCJTaGlmdCI9PWV8fCJNb2QiPT1lfWZ1bmN0aW9uIGtyKHQsZSl7aWYoemkmJjM0PT10LmtleUNvZGUmJnRbImNoYXIiXSlyZXR1cm4hMTt2YXIgcj1Qb1t0LmtleUNvZGVdO3JldHVybiBudWxsPT1yfHx0LmFsdEdyYXBoS2V5PyExOih0LmFsdEtleSYmKHI9IkFsdC0iK3IpLCgkaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmKHI9IkN0cmwtIityKSwoJGk/dC5jdHJsS2V5OnQubWV0YUtleSkmJihyPSJDbWQtIityKSwhZSYmdC5zaGlmdEtleSYmKHI9IlNoaWZ0LSIrcikscil9ZnVuY3Rpb24gU3IodCxlKXt0aGlzLnBvcz10aGlzLnN0YXJ0PTAsdGhpcy5zdHJpbmc9dCx0aGlzLnRhYlNpemU9ZXx8OCx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5sYXN0Q29sdW1uVmFsdWU9MH1mdW5jdGlvbiBNcih0LGUpe3RoaXMubGluZXM9W10sdGhpcy50eXBlPWUsdGhpcy5kb2M9dH1mdW5jdGlvbiBUcih0LGUscixuLGkpe2lmKG4mJm4uc2hhcmVkKXJldHVybiBIcih0LGUscixuLGkpO2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFRyKSh0LGUscixuLGkpO3ZhciBvPW5ldyBNcih0LGkpO2lmKCRlKHIsZSl8fGplKGUscikmJiJyYW5nZSI9PWkmJighbi5pbmNsdXNpdmVMZWZ0fHwhbi5pbmNsdXNpdmVSaWdodCkpcmV0dXJuIG87biYmcmkobixvKSxvLnJlcGxhY2VkV2l0aCYmKG8uY29sbGFwc2VkPSEwLG8ucmVwbGFjZWRXaXRoPXNpKCJzcGFuIixbby5yZXBsYWNlZFdpdGhdLCJDb2RlTWlycm9yLXdpZGdldCIpLG4uaGFuZGxlTW91c2VFdmVudHN8fChvLnJlcGxhY2VkV2l0aC5pZ25vcmVFdmVudHM9ITApKSxvLmNvbGxhcHNlZCYmKFFpPSEwKSxvLmFkZFRvSGlzdG9yeSYmTW4odCx7ZnJvbTplLHRvOnIsb3JpZ2luOiJtYXJrVGV4dCJ9LHtoZWFkOnQuc2VsLmhlYWQsYW5jaG9yOnQuc2VsLmFuY2hvcn0sMC8wKTt2YXIgbCxzLGEsdT1lLmxpbmUsYz0wLGY9dC5jbTtpZih0Lml0ZXIodSxyLmxpbmUrMSxmdW5jdGlvbihuKXtmJiZvLmNvbGxhcHNlZCYmIWYub3B0aW9ucy5saW5lV3JhcHBpbmcmJkdyKHQsbik9PWYuZGlzcGxheS5tYXhMaW5lJiYoYT0hMCk7dmFyIGk9e2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpvfTtjKz1uLnRleHQubGVuZ3RoLHU9PWUubGluZSYmKGkuZnJvbT1lLmNoLGMtPWUuY2gpLHU9PXIubGluZSYmKGkudG89ci5jaCxjLT1uLnRleHQubGVuZ3RoLXIuY2gpLG8uY29sbGFwc2VkJiYodT09ci5saW5lJiYocz1QcihuLHIuY2gpKSx1PT1lLmxpbmU/bD1QcihuLGUuY2gpOnluKG4sMCkpLFdyKG4saSksKyt1fSksby5jb2xsYXBzZWQmJnQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24oZSl7VnIodCxlKSYmeW4oZSwwKX0pLG8uY2xlYXJPbkVudGVyJiZHbihvLCJiZWZvcmVDdXJzb3JFbnRlciIsZnVuY3Rpb24oKXtvLmNsZWFyKCl9KSxvLnJlYWRPbmx5JiYocWk9ITAsKHQuaGlzdG9yeS5kb25lLmxlbmd0aHx8dC5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpJiZ0LmNsZWFySGlzdG9yeSgpKSxvLmNvbGxhcHNlZCl7aWYobCE9cyl0aHJvdyBuZXcgRXJyb3IoIkluc2VydGluZyBjb2xsYXBzZWQgbWFya2VyIG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpO28uc2l6ZT1jLG8uYXRvbWljPSEwfXJldHVybiBmJiYoYSYmKGYuY3VyT3AudXBkYXRlTWF4TGluZT0hMCksKG8uY2xhc3NOYW1lfHxvLnRpdGxlfHxvLnN0YXJ0U3R5bGV8fG8uZW5kU3R5bGV8fG8uY29sbGFwc2VkKSYmdWUoZixlLmxpbmUsci5saW5lKzEpLG8uYXRvbWljJiZpcihmKSksb31mdW5jdGlvbiBBcih0LGUpe3RoaXMubWFya2Vycz10LHRoaXMucHJpbWFyeT1lO2Zvcih2YXIgcj0wLG49dGhpcztyPHQubGVuZ3RoOysrcil0W3JdLnBhcmVudD10aGlzLEduKHRbcl0sImNsZWFyIixmdW5jdGlvbigpe24uY2xlYXIoKX0pfWZ1bmN0aW9uIEhyKHQsZSxyLG4saSl7bj1yaShuKSxuLnNoYXJlZD0hMTt2YXIgbz1bVHIodCxlLHIsbixpKV0sbD1vWzBdLHM9bi5yZXBsYWNlZFdpdGg7cmV0dXJuIGRuKHQsZnVuY3Rpb24odCl7cyYmKG4ucmVwbGFjZWRXaXRoPXMuY2xvbmVOb2RlKCEwKSksby5wdXNoKFRyKHQsUWUodCxlKSxRZSh0LHIpLG4saSkpO2Zvcih2YXIgYT0wO2E8dC5saW5rZWQubGVuZ3RoOysrYSlpZih0LmxpbmtlZFthXS5pc1BhcmVudClyZXR1cm47bD1RbihvKX0pLG5ldyBBcihvLGwpfWZ1bmN0aW9uIE5yKHQsZSl7aWYodClmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtpZihuLm1hcmtlcj09ZSlyZXR1cm4gbn19ZnVuY3Rpb24gRHIodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXRbbl0hPWUmJihyfHwocj1bXSkpLnB1c2godFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gV3IodCxlKXt0Lm1hcmtlZFNwYW5zPXQubWFya2VkU3BhbnM/dC5tYXJrZWRTcGFucy5jb25jYXQoW2VdKTpbZV0sZS5tYXJrZXIuYXR0YWNoTGluZSh0KX1mdW5jdGlvbiBPcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTtpZihzfHwobC5pbmNsdXNpdmVMZWZ0JiZsLmluY2x1c2l2ZVJpZ2h0fHwiYm9va21hcmsiPT1sLnR5cGUpJiZvLmZyb209PWUmJighcnx8IW8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7KG58fChuPVtdKSkucHVzaCh7ZnJvbTpvLmZyb20sdG86YT9udWxsOm8udG8sbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24gRXIodCxlLHIpe2lmKHQpZm9yKHZhciBuLGk9MDtpPHQubGVuZ3RoOysraSl7dmFyIG89dFtpXSxsPW8ubWFya2VyLHM9bnVsbD09by50b3x8KGwuaW5jbHVzaXZlUmlnaHQ/by50bz49ZTpvLnRvPmUpO2lmKHN8fCJib29rbWFyayI9PWwudHlwZSYmby5mcm9tPT1lJiYoIXJ8fG8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOmE/bnVsbDpvLmZyb20tZSx0bzpudWxsPT1vLnRvP251bGw6by50by1lLG1hcmtlcjpsfSl9fXJldHVybiBufWZ1bmN0aW9uIHpyKHQsZSl7dmFyIHI9dHIodCxlLmZyb20ubGluZSkmJmduKHQsZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zLG49dHIodCxlLnRvLmxpbmUpJiZnbih0LGUudG8ubGluZSkubWFya2VkU3BhbnM7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPWUuZnJvbS5jaCxvPWUudG8uY2gsbD1qZShlLmZyb20sZS50bykscz1PcihyLGksbCksYT1FcihuLG8sbCksdT0xPT1lLnRleHQubGVuZ3RoLGM9UW4oZS50ZXh0KS5sZW5ndGgrKHU/aTowKTtpZihzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKXt2YXIgaD1zW2ZdO2lmKG51bGw9PWgudG8pe3ZhciBkPU5yKGEsaC5tYXJrZXIpO2Q/dSYmKGgudG89bnVsbD09ZC50bz9udWxsOmQudG8rYyk6aC50bz1pfX1pZihhKWZvcih2YXIgZj0wO2Y8YS5sZW5ndGg7KytmKXt2YXIgaD1hW2ZdO2lmKG51bGwhPWgudG8mJihoLnRvKz1jKSxudWxsPT1oLmZyb20pe3ZhciBkPU5yKHMsaC5tYXJrZXIpO2R8fChoLmZyb209Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpKX1lbHNlIGguZnJvbSs9Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpfWlmKHUmJnMpe2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGwhPXNbZl0uZnJvbSYmc1tmXS5mcm9tPT1zW2ZdLnRvJiYiYm9va21hcmsiIT1zW2ZdLm1hcmtlci50eXBlJiZzLnNwbGljZShmLS0sMSk7cy5sZW5ndGh8fChzPW51bGwpfXZhciBwPVtzXTtpZighdSl7dmFyIGcsbT1lLnRleHQubGVuZ3RoLTI7aWYobT4wJiZzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGw9PXNbZl0udG8mJihnfHwoZz1bXSkpLnB1c2goe2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpzW2ZdLm1hcmtlcn0pO2Zvcih2YXIgZj0wO20+ZjsrK2YpcC5wdXNoKGcpO3AucHVzaChhKX1yZXR1cm4gcH1mdW5jdGlvbiBJcih0LGUpe3ZhciByPUFuKHQsZSksbj16cih0LGUpO2lmKCFyKXJldHVybiBuO2lmKCFuKXJldHVybiByO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgbz1yW2ldLGw9bltpXTtpZihvJiZsKXQ6Zm9yKHZhciBzPTA7czxsLmxlbmd0aDsrK3Mpe2Zvcih2YXIgYT1sW3NdLHU9MDt1PG8ubGVuZ3RoOysrdSlpZihvW3VdLm1hcmtlcj09YS5tYXJrZXIpY29udGludWUgdDtvLnB1c2goYSl9ZWxzZSBsJiYocltpXT1sKX1yZXR1cm4gcn1mdW5jdGlvbiBGcih0LGUscil7dmFyIG49bnVsbDtpZih0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe2lmKHQubWFya2VkU3BhbnMpZm9yKHZhciBlPTA7ZTx0Lm1hcmtlZFNwYW5zLmxlbmd0aDsrK2Upe3ZhciByPXQubWFya2VkU3BhbnNbZV0ubWFya2VyOyFyLnJlYWRPbmx5fHxuJiYtMSE9dGkobixyKXx8KG58fChuPVtdKSkucHVzaChyKX19KSwhbilyZXR1cm4gbnVsbDtmb3IodmFyIGk9W3tmcm9tOmUsdG86cn1dLG89MDtvPG4ubGVuZ3RoOysrbylmb3IodmFyIGw9bltvXSxzPWwuZmluZCgpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIHU9aVthXTtpZighJGUodS50byxzLmZyb20pJiYhJGUocy50byx1LmZyb20pKXt2YXIgYz1bYSwxXTsoJGUodS5mcm9tLHMuZnJvbSl8fCFsLmluY2x1c2l2ZUxlZnQmJmplKHUuZnJvbSxzLmZyb20pKSYmYy5wdXNoKHtmcm9tOnUuZnJvbSx0bzpzLmZyb219KSwoJGUocy50byx1LnRvKXx8IWwuaW5jbHVzaXZlUmlnaHQmJmplKHUudG8scy50bykpJiZjLnB1c2goe2Zyb206cy50byx0bzp1LnRvfSksaS5zcGxpY2UuYXBwbHkoaSxjKSxhKz1jLmxlbmd0aC0xfX1yZXR1cm4gaX1mdW5jdGlvbiBQcih0LGUpe3ZhciByLG49UWkmJnQubWFya2VkU3BhbnM7aWYobilmb3IodmFyIGksbz0wO288bi5sZW5ndGg7KytvKWk9bltvXSxpLm1hcmtlci5jb2xsYXBzZWQmJihudWxsPT1pLmZyb218fGkuZnJvbTxlKSYmKG51bGw9PWkudG98fGkudG8+ZSkmJighcnx8ci53aWR0aDxpLm1hcmtlci53aWR0aCkmJihyPWkubWFya2VyKTtyZXR1cm4gcn1mdW5jdGlvbiBScih0KXtyZXR1cm4gUHIodCwtMSl9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIFByKHQsdC50ZXh0Lmxlbmd0aCsxKX1mdW5jdGlvbiBHcih0LGUpe2Zvcih2YXIgcjtyPVJyKGUpOyllPWduKHQsci5maW5kKCkuZnJvbS5saW5lKTtyZXR1cm4gZX1mdW5jdGlvbiBWcih0LGUpe3ZhciByPVFpJiZlLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuLGk9MDtpPHIubGVuZ3RoOysraSlpZihuPXJbaV0sbi5tYXJrZXIuY29sbGFwc2VkKXtpZihudWxsPT1uLmZyb20pcmV0dXJuITA7aWYoIW4ubWFya2VyLnJlcGxhY2VkV2l0aCYmMD09bi5mcm9tJiZuLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZLcih0LGUsbikpcmV0dXJuITB9fWZ1bmN0aW9uIEtyKHQsZSxyKXtpZihudWxsPT1yLnRvKXt2YXIgbj1yLm1hcmtlci5maW5kKCkudG8saT1nbih0LG4ubGluZSk7cmV0dXJuIEtyKHQsaSxOcihpLm1hcmtlZFNwYW5zLHIubWFya2VyKSl9aWYoci5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJnIudG89PWUudGV4dC5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBvLGw9MDtsPGUubWFya2VkU3BhbnMubGVuZ3RoOysrbClpZihvPWUubWFya2VkU3BhbnNbbF0sby5tYXJrZXIuY29sbGFwc2VkJiYhby5tYXJrZXIucmVwbGFjZWRXaXRoJiZvLmZyb209PXIudG8mJihvLm1hcmtlci5pbmNsdXNpdmVMZWZ0fHxyLm1hcmtlci5pbmNsdXNpdmVSaWdodCkmJktyKHQsZSxvKSlyZXR1cm4hMH1mdW5jdGlvbiBVcih0KXt2YXIgZT10Lm1hcmtlZFNwYW5zO2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmRldGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1udWxsfX1mdW5jdGlvbiBYcih0LGUpe2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmF0dGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1lfX1mdW5jdGlvbiBfcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT0hdGhpcy5jbS5jdXJPcDtlJiZpZSh0aGlzLmNtKTt0cnl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtlJiZvZSh0aGlzLmNtKX1yZXR1cm4gcn19ZnVuY3Rpb24gWXIodCl7cmV0dXJuIG51bGwhPXQuaGVpZ2h0P3QuaGVpZ2h0Oih0Lm5vZGUucGFyZW50Tm9kZSYmMT09dC5ub2RlLnBhcmVudE5vZGUubm9kZVR5cGV8fHVpKHQuY20uZGlzcGxheS5tZWFzdXJlLHNpKCJkaXYiLFt0Lm5vZGVdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpKSx0LmhlaWdodD10Lm5vZGUub2Zmc2V0SGVpZ2h0KX1mdW5jdGlvbiBqcih0LGUscixuKXt2YXIgaT1uZXcgeW8odCxyLG4pO3JldHVybiBpLm5vSFNjcm9sbCYmKHQuZGlzcGxheS5hbGlnbldpZGdldHM9ITApLGRyKHQsZSxmdW5jdGlvbihlKXt2YXIgcj1lLndpZGdldHN8fChlLndpZGdldHM9W10pO2lmKG51bGw9PWkuaW5zZXJ0QXQ/ci5wdXNoKGkpOnIuc3BsaWNlKE1hdGgubWluKHIubGVuZ3RoLTEsTWF0aC5tYXgoMCxpLmluc2VydEF0KSksMCxpKSxpLmxpbmU9ZSwhVnIodC5kb2MsZSl8fGkuc2hvd0lmSGlkZGVuKXt2YXIgbj1Dbih0LGUpPHQuZG9jLnNjcm9sbFRvcDt5bihlLGUuaGVpZ2h0K1lyKGkpKSxuJiZmcih0LDAsaS5oZWlnaHQpfXJldHVybiEwfSksaX1mdW5jdGlvbiAkcih0LGUscixuKXt0LnRleHQ9ZSx0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKSxudWxsIT10Lm9yZGVyJiYodC5vcmRlcj1udWxsKSxVcih0KSxYcih0LHIpO3ZhciBpPW4/bih0KToxO2khPXQuaGVpZ2h0JiZ5bih0LGkpfWZ1bmN0aW9uIFpyKHQpe3QucGFyZW50PW51bGwsVXIodCl9ZnVuY3Rpb24gcXIodCxlLHIsbixpLG8pe3ZhciBsPXIuZmxhdHRlblNwYW5zO251bGw9PWwmJihsPXQub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciBzLGE9MCx1PW51bGwsYz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKCIiPT1lJiZyLmJsYW5rTGluZSYmci5ibGFua0xpbmUobik7IWMuZW9sKCk7KWMucG9zPnQub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGg/KGw9ITEsbyYmdG4odCxlLG4sYy5wb3MpLGMucG9zPWUubGVuZ3RoLHM9bnVsbCk6cz1yLnRva2VuKGMsbiksbCYmdT09c3x8KGE8Yy5zdGFydCYmaShjLnN0YXJ0LHUpLGE9Yy5zdGFydCx1PXMpLGMuc3RhcnQ9Yy5wb3M7Zm9yKDthPGMucG9zOyl7dmFyIGY9TWF0aC5taW4oYy5wb3MsYSs1ZTQpO2koZix1KSxhPWZ9fWZ1bmN0aW9uIFFyKHQsZSxyLG4pe3ZhciBpPVt0LnN0YXRlLm1vZGVHZW5dO3FyKHQsZS50ZXh0LHQuZG9jLm1vZGUscixmdW5jdGlvbih0LGUpe2kucHVzaCh0LGUpfSxuKTtmb3IodmFyIG89MDtvPHQuc3RhdGUub3ZlcmxheXMubGVuZ3RoOysrbyl7dmFyIGw9dC5zdGF0ZS5vdmVybGF5c1tvXSxzPTEsYT0wO3FyKHQsZS50ZXh0LGwubW9kZSwhMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1zO3Q+YTspe3ZhciBuPWlbc107bj50JiZpLnNwbGljZShzLDEsdCxpW3MrMV0sbikscys9MixhPU1hdGgubWluKHQsbil9aWYoZSlpZihsLm9wYXF1ZSlpLnNwbGljZShyLHMtcix0LGUpLHM9cisyO2Vsc2UgZm9yKDtzPnI7cis9Mil7dmFyIG89aVtyKzFdO2lbcisxXT1vP28rIiAiK2U6ZX19KX1yZXR1cm4gaX1mdW5jdGlvbiBKcih0LGUpe3JldHVybiBlLnN0eWxlcyYmZS5zdHlsZXNbMF09PXQuc3RhdGUubW9kZUdlbnx8KGUuc3R5bGVzPVFyKHQsZSxlLnN0YXRlQWZ0ZXI9eih0LGJuKGUpKSkpLGUuc3R5bGVzfWZ1bmN0aW9uIHRuKHQsZSxyLG4pe3ZhciBpPXQuZG9jLm1vZGUsbz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKG8uc3RhcnQ9by5wb3M9bnx8MCwiIj09ZSYmaS5ibGFua0xpbmUmJmkuYmxhbmtMaW5lKHIpOyFvLmVvbCgpJiZvLnBvczw9dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aDspaS50b2tlbihvLHIpLG8uc3RhcnQ9by5wb3N9ZnVuY3Rpb24gZW4odCxlKXtpZighdClyZXR1cm4gbnVsbDtmb3IoOzspe3ZhciByPXQubWF0Y2goLyg/Ol58XHMpbGluZS0oYmFja2dyb3VuZC0pPyhcUyspLyk7aWYoIXIpYnJlYWs7dD10LnNsaWNlKDAsci5pbmRleCkrdC5zbGljZShyLmluZGV4K3JbMF0ubGVuZ3RoKTt2YXIgbj1yWzFdPyJiZ0NsYXNzIjoidGV4dENsYXNzIjtudWxsPT1lW25dP2Vbbl09clsyXTpuZXcgUmVnRXhwKCIoPzpefHMpIityWzJdKyIoPzokfHMpIikudGVzdChlW25dKXx8KGVbbl0rPSIgIityWzJdKX1yZXR1cm4geG9bdF18fCh4b1t0XT0iY20tIit0LnJlcGxhY2UoLyArL2csIiBjbS0iKSl9ZnVuY3Rpb24gcm4odCxlLHIsbil7Zm9yKHZhciBpLG89ZSxsPSEwO2k9UnIobyk7KW89Z24odC5kb2MsaS5maW5kKCkuZnJvbS5saW5lKTt2YXIgcz17cHJlOnNpKCJwcmUiKSxjb2w6MCxwb3M6MCxtZWFzdXJlOm51bGwsbWVhc3VyZWRTb21ldGhpbmc6ITEsY206dCxjb3B5V2lkZ2V0czpufTtkb3tvLnRleHQmJihsPSExKSxzLm1lYXN1cmU9bz09ZSYmcixzLnBvcz0wLHMuYWRkVG9rZW49cy5tZWFzdXJlP2xuOm9uLChBaXx8V2kpJiZ0LmdldE9wdGlvbigibGluZVdyYXBwaW5nIikmJihzLmFkZFRva2VuPXNuKHMuYWRkVG9rZW4pKTt2YXIgYT11bihvLHMsSnIodCxvKSk7ciYmbz09ZSYmIXMubWVhc3VyZWRTb21ldGhpbmcmJihyWzBdPXMucHJlLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSkscy5tZWFzdXJlZFNvbWV0aGluZz0hMCksYSYmKG89Z24odC5kb2MsYS50by5saW5lKSl9d2hpbGUoYSk7IXJ8fHMubWVhc3VyZWRTb21ldGhpbmd8fHJbMF18fChyWzBdPXMucHJlLmFwcGVuZENoaWxkKGw/c2koInNwYW4iLCLCoCIpOnBpKHQuZGlzcGxheS5tZWFzdXJlKSkpLHMucHJlLmZpcnN0Q2hpbGR8fFZyKHQuZG9jLGUpfHxzLnByZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiwqAiKSk7dmFyIHU7aWYociYmKEFpfHxEaSkmJih1PXduKG8pKSl7dmFyIGM9dS5sZW5ndGgtMTt1W2NdLmZyb209PXVbY10udG8mJi0tYzt2YXIgZj11W2NdLGg9dVtjLTFdO2lmKGYuZnJvbSsxPT1mLnRvJiZoJiZmLmxldmVsPGgubGV2ZWwpe3ZhciBkPXJbcy5wb3MtMV07ZCYmZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkLm1lYXN1cmVSaWdodD1waSh0LmRpc3BsYXkubWVhc3VyZSksZC5uZXh0U2libGluZyl9fXZhciBwPXMudGV4dENsYXNzP3MudGV4dENsYXNzKyIgIisoZS50ZXh0Q2xhc3N8fCIiKTplLnRleHRDbGFzcztyZXR1cm4gcCYmKHMucHJlLmNsYXNzTmFtZT1wKSxLbih0LCJyZW5kZXJMaW5lIix0LGUscy5wcmUpLHN9ZnVuY3Rpb24gbm4odCl7dmFyIGU9c2koInNwYW4iLCLigKIiLCJjbS1pbnZhbGlkY2hhciIpO3JldHVybiBlLnRpdGxlPSJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNiksZX1mdW5jdGlvbiBvbih0LGUscixuLGksbyl7aWYoZSl7dmFyIGw9dC5jbS5vcHRpb25zLnNwZWNpYWxDaGFycztpZihsLnRlc3QoZSkpZm9yKHZhciBzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxhPTA7Oyl7bC5sYXN0SW5kZXg9YTt2YXIgdT1sLmV4ZWMoZSksYz11P3UuaW5kZXgtYTplLmxlbmd0aC1hO2lmKGMmJihzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuc2xpY2UoYSxhK2MpKSksdC5jb2wrPWMpLCF1KWJyZWFrO2lmKGErPWMrMSwiCSI9PXVbMF0pe3ZhciBmPXQuY20ub3B0aW9ucy50YWJTaXplLGg9Zi10LmNvbCVmO3MuYXBwZW5kQ2hpbGQoc2koInNwYW4iLHFuKGgpLCJjbS10YWIiKSksdC5jb2wrPWh9ZWxzZXt2YXIgZD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcih1WzBdKTtzLmFwcGVuZENoaWxkKGQpLHQuY29sKz0xfX1lbHNle3QuY29sKz1lLmxlbmd0aDt2YXIgcz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX1pZihyfHxufHxpfHx0Lm1lYXN1cmUpe3ZhciBwPXJ8fCIiO24mJihwKz1uKSxpJiYocCs9aSk7dmFyIGQ9c2koInNwYW4iLFtzXSxwKTtyZXR1cm4gbyYmKGQudGl0bGU9byksdC5wcmUuYXBwZW5kQ2hpbGQoZCl9dC5wcmUuYXBwZW5kQ2hpbGQocyl9fWZ1bmN0aW9uIGxuKHQsZSxyLG4saSl7Zm9yKHZhciBvPXQuY20ub3B0aW9ucy5saW5lV3JhcHBpbmcsbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgcz1lLmNoYXJBdChsKSxhPTA9PWw7cz49Iu2ggCImJiLtr78iPnMmJmw8ZS5sZW5ndGgtMT8ocz1lLnNsaWNlKGwsbCsyKSwrK2wpOmwmJm8mJmhpKGUsbCkmJnQucHJlLmFwcGVuZENoaWxkKHNpKCJ3YnIiKSk7dmFyIHU9dC5tZWFzdXJlW3QucG9zXSxjPXQubWVhc3VyZVt0LnBvc109b24odCxzLHIsYSYmbixsPT1lLmxlbmd0aC0xJiZpKTt1JiYoYy5sZWZ0U2lkZT11LmxlZnRTaWRlfHx1KSxBaSYmbyYmIiAiPT1zJiZsJiYhL1xzLy50ZXN0KGUuY2hhckF0KGwtMSkpJiZsPGUubGVuZ3RoLTEmJiEvXHMvLnRlc3QoZS5jaGFyQXQobCsxKSkmJihjLnN0eWxlLndoaXRlU3BhY2U9Im5vcm1hbCIpLHQucG9zKz1zLmxlbmd0aH1lLmxlbmd0aCYmKHQubWVhc3VyZWRTb21ldGhpbmc9ITApfWZ1bmN0aW9uIHNuKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlPSIgIixyPTA7cjx0Lmxlbmd0aC0yOysrcillKz1yJTI/IiAiOiLCoCI7cmV0dXJuIGUrPSIgIn1yZXR1cm4gZnVuY3Rpb24ocixuLGksbyxsLHMpe3JldHVybiB0KHIsbi5yZXBsYWNlKC8gezMsfS9nLGUpLGksbyxsLHMpfX1mdW5jdGlvbiBhbih0LGUscixuKXt2YXIgaT0hbiYmci5yZXBsYWNlZFdpdGg7aWYoaSYmKHQuY29weVdpZGdldHMmJihpPWkuY2xvbmVOb2RlKCEwKSksdC5wcmUuYXBwZW5kQ2hpbGQoaSksdC5tZWFzdXJlKSl7aWYoZSl0Lm1lYXN1cmVbdC5wb3NdPWk7ZWxzZXt2YXIgbz1waSh0LmNtLmRpc3BsYXkubWVhc3VyZSk7aWYoImJvb2ttYXJrIiE9ci50eXBlfHxyLmluc2VydExlZnQpe2lmKHQubWVhc3VyZVt0LnBvc10pcmV0dXJuO3QubWVhc3VyZVt0LnBvc109dC5wcmUuaW5zZXJ0QmVmb3JlKG8saSl9ZWxzZSB0Lm1lYXN1cmVbdC5wb3NdPXQucHJlLmFwcGVuZENoaWxkKG8pfXQubWVhc3VyZWRTb21ldGhpbmc9ITB9dC5wb3MrPWV9ZnVuY3Rpb24gdW4odCxlLHIpe3ZhciBuPXQubWFya2VkU3BhbnMsaT10LnRleHQsbz0wO2lmKG4pZm9yKHZhciBsLHMsYSx1LGMsZixoPWkubGVuZ3RoLGQ9MCxwPTEsZz0iIixtPTA7Oyl7aWYobT09ZCl7cz1hPXU9Yz0iIixmPW51bGwsbT0xLzA7Zm9yKHZhciB2PVtdLHk9MDt5PG4ubGVuZ3RoOysreSl7dmFyIGI9blt5XSx4PWIubWFya2VyO2IuZnJvbTw9ZCYmKG51bGw9PWIudG98fGIudG8+ZCk/KG51bGwhPWIudG8mJm0+Yi50byYmKG09Yi50byxhPSIiKSx4LmNsYXNzTmFtZSYmKHMrPSIgIit4LmNsYXNzTmFtZSkseC5zdGFydFN0eWxlJiZiLmZyb209PWQmJih1Kz0iICIreC5zdGFydFN0eWxlKSx4LmVuZFN0eWxlJiZiLnRvPT1tJiYoYSs9IiAiK3guZW5kU3R5bGUpLHgudGl0bGUmJiFjJiYoYz14LnRpdGxlKSx4LmNvbGxhcHNlZCYmKCFmfHxmLm1hcmtlci5zaXplPHguc2l6ZSkmJihmPWIpKTpiLmZyb20+ZCYmbT5iLmZyb20mJihtPWIuZnJvbSksImJvb2ttYXJrIj09eC50eXBlJiZiLmZyb209PWQmJngucmVwbGFjZWRXaXRoJiZ2LnB1c2goeCkKfWlmKGYmJihmLmZyb218fDApPT1kJiYoYW4oZSwobnVsbD09Zi50bz9oOmYudG8pLWQsZi5tYXJrZXIsbnVsbD09Zi5mcm9tKSxudWxsPT1mLnRvKSlyZXR1cm4gZi5tYXJrZXIuZmluZCgpO2lmKCFmJiZ2Lmxlbmd0aClmb3IodmFyIHk9MDt5PHYubGVuZ3RoOysreSlhbihlLDAsdlt5XSl9aWYoZD49aClicmVhaztmb3IodmFyIEM9TWF0aC5taW4oaCxtKTs7KXtpZihnKXt2YXIgdz1kK2cubGVuZ3RoO2lmKCFmKXt2YXIgTD13PkM/Zy5zbGljZSgwLEMtZCk6ZztlLmFkZFRva2VuKGUsTCxsP2wrczpzLHUsZCtMLmxlbmd0aD09bT9hOiIiLGMpfWlmKHc+PUMpe2c9Zy5zbGljZShDLWQpLGQ9QzticmVha31kPXcsdT0iIn1nPWkuc2xpY2UobyxvPXJbcCsrXSksbD1lbihyW3ArK10sZSl9fWVsc2UgZm9yKHZhciBwPTE7cDxyLmxlbmd0aDtwKz0yKWUuYWRkVG9rZW4oZSxpLnNsaWNlKG8sbz1yW3BdKSxlbihyW3ArMV0sZSkpfWZ1bmN0aW9uIGNuKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gcj9yW3RdOm51bGx9ZnVuY3Rpb24gbCh0LHIsbil7JHIodCxyLG4saSksVW4odCwiY2hhbmdlIix0LGUpfXZhciBzPWUuZnJvbSxhPWUudG8sdT1lLnRleHQsYz1nbih0LHMubGluZSksZj1nbih0LGEubGluZSksaD1Rbih1KSxkPW8odS5sZW5ndGgtMSkscD1hLmxpbmUtcy5saW5lO2lmKDAhPXMuY2h8fDAhPWEuY2h8fCIiIT1ofHx0LmNtJiYhdC5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSlpZihjPT1mKWlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKStoK2MudGV4dC5zbGljZShhLmNoKSxkKTtlbHNle2Zvcih2YXIgZz1bXSxtPTEsdj11Lmxlbmd0aC0xO3Y+bTsrK20pZy5wdXNoKG5ldyBibyh1W21dLG8obSksaSkpO2cucHVzaChuZXcgYm8oaCtjLnRleHQuc2xpY2UoYS5jaCksZCxpKSksbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK3VbMF0sbygwKSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZSBpZigxPT11Lmxlbmd0aClsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXStmLnRleHQuc2xpY2UoYS5jaCksbygwKSksdC5yZW1vdmUocy5saW5lKzEscCk7ZWxzZXtsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSxsKGYsaCtmLnRleHQuc2xpY2UoYS5jaCksZCk7Zm9yKHZhciBtPTEsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7cD4xJiZ0LnJlbW92ZShzLmxpbmUrMSxwLTEpLHQuaW5zZXJ0KHMubGluZSsxLGcpfWVsc2V7Zm9yKHZhciBtPTAsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7bChmLGYudGV4dCxkKSxwJiZ0LnJlbW92ZShzLmxpbmUscCksZy5sZW5ndGgmJnQuaW5zZXJ0KHMubGluZSxnKX1Vbih0LCJjaGFuZ2UiLHQsZSksbnIodCxuLmFuY2hvcixuLmhlYWQsbnVsbCwhMCl9ZnVuY3Rpb24gZm4odCl7dGhpcy5saW5lcz10LHRoaXMucGFyZW50PW51bGw7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPTA7cj5lOysrZSl0W2VdLnBhcmVudD10aGlzLG4rPXRbZV0uaGVpZ2h0O3RoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gaG4odCl7dGhpcy5jaGlsZHJlbj10O2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10Lmxlbmd0aDtpPm47KytuKXt2YXIgbz10W25dO2UrPW8uY2h1bmtTaXplKCkscis9by5oZWlnaHQsby5wYXJlbnQ9dGhpc310aGlzLnNpemU9ZSx0aGlzLmhlaWdodD1yLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24gZG4odCxlLHIpe2Z1bmN0aW9uIG4odCxpLG8pe2lmKHQubGlua2VkKWZvcih2YXIgbD0wO2w8dC5saW5rZWQubGVuZ3RoOysrbCl7dmFyIHM9dC5saW5rZWRbbF07aWYocy5kb2MhPWkpe3ZhciBhPW8mJnMuc2hhcmVkSGlzdDsoIXJ8fGEpJiYoZShzLmRvYyxhKSxuKHMuZG9jLHQsYSkpfX19bih0LG51bGwsITApfWZ1bmN0aW9uIHBuKHQsZSl7aWYoZS5jbSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuIik7dC5kb2M9ZSxlLmNtPXQsbyh0KSxyKHQpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fGYodCksdC5vcHRpb25zLm1vZGU9ZS5tb2RlT3B0aW9uLHVlKHQpfWZ1bmN0aW9uIGduKHQsZSl7Zm9yKGUtPXQuZmlyc3Q7IXQubGluZXM7KWZvcih2YXIgcj0wOzsrK3Ipe3ZhciBuPXQuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+ZSl7dD1uO2JyZWFrfWUtPWl9cmV0dXJuIHQubGluZXNbZV19ZnVuY3Rpb24gbW4odCxlLHIpe3ZhciBuPVtdLGk9ZS5saW5lO3JldHVybiB0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe3ZhciBvPXQudGV4dDtpPT1yLmxpbmUmJihvPW8uc2xpY2UoMCxyLmNoKSksaT09ZS5saW5lJiYobz1vLnNsaWNlKGUuY2gpKSxuLnB1c2gobyksKytpfSksbn1mdW5jdGlvbiB2bih0LGUscil7dmFyIG49W107cmV0dXJuIHQuaXRlcihlLHIsZnVuY3Rpb24odCl7bi5wdXNoKHQudGV4dCl9KSxufWZ1bmN0aW9uIHluKHQsZSl7Zm9yKHZhciByPWUtdC5oZWlnaHQsbj10O247bj1uLnBhcmVudCluLmhlaWdodCs9cn1mdW5jdGlvbiBibih0KXtpZihudWxsPT10LnBhcmVudClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQscj10aShlLmxpbmVzLHQpLG49ZS5wYXJlbnQ7bjtlPW4sbj1uLnBhcmVudClmb3IodmFyIGk9MDtuLmNoaWxkcmVuW2ldIT1lOysraSlyKz1uLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpO3JldHVybiByK2UuZmlyc3R9ZnVuY3Rpb24geG4odCxlKXt2YXIgcj10LmZpcnN0O3Q6ZG97Zm9yKHZhciBuPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10LmNoaWxkcmVuW25dLGw9by5oZWlnaHQ7aWYobD5lKXt0PW87Y29udGludWUgdH1lLT1sLHIrPW8uY2h1bmtTaXplKCl9cmV0dXJuIHJ9d2hpbGUoIXQubGluZXMpO2Zvcih2YXIgbj0wLGk9dC5saW5lcy5sZW5ndGg7aT5uOysrbil7dmFyIHM9dC5saW5lc1tuXSxhPXMuaGVpZ2h0O2lmKGE+ZSlicmVhaztlLT1hfXJldHVybiByK259ZnVuY3Rpb24gQ24odCxlKXtlPUdyKHQuZG9jLGUpO2Zvcih2YXIgcj0wLG49ZS5wYXJlbnQsaT0wO2k8bi5saW5lcy5sZW5ndGg7KytpKXt2YXIgbz1uLmxpbmVzW2ldO2lmKG89PWUpYnJlYWs7cis9by5oZWlnaHR9Zm9yKHZhciBsPW4ucGFyZW50O2w7bj1sLGw9bi5wYXJlbnQpZm9yKHZhciBpPTA7aTxsLmNoaWxkcmVuLmxlbmd0aDsrK2kpe3ZhciBzPWwuY2hpbGRyZW5baV07aWYocz09bilicmVhaztyKz1zLmhlaWdodH1yZXR1cm4gcn1mdW5jdGlvbiB3bih0KXt2YXIgZT10Lm9yZGVyO3JldHVybiBudWxsPT1lJiYoZT10Lm9yZGVyPUJvKHQudGV4dCkpLGV9ZnVuY3Rpb24gTG4odCl7cmV0dXJue2RvbmU6W10sdW5kb25lOltdLHVuZG9EZXB0aDoxLzAsbGFzdFRpbWU6MCxsYXN0T3A6bnVsbCxsYXN0T3JpZ2luOm51bGwsZ2VuZXJhdGlvbjp0fHwxLG1heEdlbmVyYXRpb246dHx8MX19ZnVuY3Rpb24ga24odCxlLHIsbil7dmFyIGk9ZVsic3BhbnNfIit0LmlkXSxvPTA7dC5pdGVyKE1hdGgubWF4KHQuZmlyc3QsciksTWF0aC5taW4odC5maXJzdCt0LnNpemUsbiksZnVuY3Rpb24ocil7ci5tYXJrZWRTcGFucyYmKChpfHwoaT1lWyJzcGFuc18iK3QuaWRdPXt9KSlbb109ci5tYXJrZWRTcGFucyksKytvfSl9ZnVuY3Rpb24gU24odCxlKXt2YXIgcj17bGluZTplLmZyb20ubGluZSxjaDplLmZyb20uY2h9LG49e2Zyb206cix0bzpsbyhlKSx0ZXh0Om1uKHQsZS5mcm9tLGUudG8pfTtyZXR1cm4ga24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKSxkbih0LGZ1bmN0aW9uKHQpe2tuKHQsbixlLmZyb20ubGluZSxlLnRvLmxpbmUrMSl9LCEwKSxufWZ1bmN0aW9uIE1uKHQsZSxyLG4pe3ZhciBpPXQuaGlzdG9yeTtpLnVuZG9uZS5sZW5ndGg9MDt2YXIgbz0rbmV3IERhdGUsbD1RbihpLmRvbmUpO2lmKGwmJihpLmxhc3RPcD09bnx8aS5sYXN0T3JpZ2luPT1lLm9yaWdpbiYmZS5vcmlnaW4mJigiKyI9PWUub3JpZ2luLmNoYXJBdCgwKSYmdC5jbSYmaS5sYXN0VGltZT5vLXQuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheXx8IioiPT1lLm9yaWdpbi5jaGFyQXQoMCkpKSl7dmFyIHM9UW4obC5jaGFuZ2VzKTtqZShlLmZyb20sZS50bykmJmplKGUuZnJvbSxzLnRvKT9zLnRvPWxvKGUpOmwuY2hhbmdlcy5wdXNoKFNuKHQsZSkpLGwuYW5jaG9yQWZ0ZXI9ci5hbmNob3IsbC5oZWFkQWZ0ZXI9ci5oZWFkfWVsc2UgZm9yKGw9e2NoYW5nZXM6W1NuKHQsZSldLGdlbmVyYXRpb246aS5nZW5lcmF0aW9uLGFuY2hvckJlZm9yZTp0LnNlbC5hbmNob3IsaGVhZEJlZm9yZTp0LnNlbC5oZWFkLGFuY2hvckFmdGVyOnIuYW5jaG9yLGhlYWRBZnRlcjpyLmhlYWR9LGkuZG9uZS5wdXNoKGwpLGkuZ2VuZXJhdGlvbj0rK2kubWF4R2VuZXJhdGlvbjtpLmRvbmUubGVuZ3RoPmkudW5kb0RlcHRoOylpLmRvbmUuc2hpZnQoKTtpLmxhc3RUaW1lPW8saS5sYXN0T3A9bixpLmxhc3RPcmlnaW49ZS5vcmlnaW59ZnVuY3Rpb24gVG4odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlLHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLm1hcmtlci5leHBsaWNpdGx5Q2xlYXJlZD9lfHwoZT10LnNsaWNlKDAscikpOmUmJmUucHVzaCh0W3JdKTtyZXR1cm4gZT9lLmxlbmd0aD9lOm51bGw6dH1mdW5jdGlvbiBBbih0LGUpe3ZhciByPWVbInNwYW5zXyIrdC5pZF07aWYoIXIpcmV0dXJuIG51bGw7Zm9yKHZhciBuPTAsaT1bXTtuPGUudGV4dC5sZW5ndGg7KytuKWkucHVzaChUbihyW25dKSk7cmV0dXJuIGl9ZnVuY3Rpb24gSG4odCxlKXtmb3IodmFyIHI9MCxuPVtdO3I8dC5sZW5ndGg7KytyKXt2YXIgaT10W3JdLG89aS5jaGFuZ2VzLGw9W107bi5wdXNoKHtjaGFuZ2VzOmwsYW5jaG9yQmVmb3JlOmkuYW5jaG9yQmVmb3JlLGhlYWRCZWZvcmU6aS5oZWFkQmVmb3JlLGFuY2hvckFmdGVyOmkuYW5jaG9yQWZ0ZXIsaGVhZEFmdGVyOmkuaGVhZEFmdGVyfSk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDsrK3Mpe3ZhciBhLHU9b1tzXTtpZihsLnB1c2goe2Zyb206dS5mcm9tLHRvOnUudG8sdGV4dDp1LnRleHR9KSxlKWZvcih2YXIgYyBpbiB1KShhPWMubWF0Y2goL15zcGFuc18oXGQrKSQvKSkmJnRpKGUsTnVtYmVyKGFbMV0pKT4tMSYmKFFuKGwpW2NdPXVbY10sZGVsZXRlIHVbY10pfX1yZXR1cm4gbn1mdW5jdGlvbiBObih0LGUscixuKXtyPHQubGluZT90LmxpbmUrPW46ZTx0LmxpbmUmJih0LmxpbmU9ZSx0LmNoPTApfWZ1bmN0aW9uIERuKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXtmb3IodmFyIG89dFtpXSxsPSEwLHM9MDtzPG8uY2hhbmdlcy5sZW5ndGg7KytzKXt2YXIgYT1vLmNoYW5nZXNbc107aWYoby5jb3BpZWR8fChhLmZyb209WmUoYS5mcm9tKSxhLnRvPVplKGEudG8pKSxyPGEuZnJvbS5saW5lKWEuZnJvbS5saW5lKz1uLGEudG8ubGluZSs9bjtlbHNlIGlmKGU8PWEudG8ubGluZSl7bD0hMTticmVha319by5jb3BpZWR8fChvLmFuY2hvckJlZm9yZT1aZShvLmFuY2hvckJlZm9yZSksby5oZWFkQmVmb3JlPVplKG8uaGVhZEJlZm9yZSksby5hbmNob3JBZnRlcj1aZShvLmFuY2hvckFmdGVyKSxvLnJlYWRBZnRlcj1aZShvLmhlYWRBZnRlciksby5jb3BpZWQ9ITApLGw/KE5uKG8uYW5jaG9yQmVmb3JlKSxObihvLmhlYWRCZWZvcmUpLE5uKG8uYW5jaG9yQWZ0ZXIpLE5uKG8uaGVhZEFmdGVyKSk6KHQuc3BsaWNlKDAsaSsxKSxpPTApfX1mdW5jdGlvbiBXbih0LGUpe3ZhciByPWUuZnJvbS5saW5lLG49ZS50by5saW5lLGk9ZS50ZXh0Lmxlbmd0aC0obi1yKS0xO0RuKHQuZG9uZSxyLG4saSksRG4odC51bmRvbmUscixuLGkpfWZ1bmN0aW9uIE9uKCl7UG4odGhpcyl9ZnVuY3Rpb24gRW4odCl7cmV0dXJuIHQuc3RvcHx8KHQuc3RvcD1PbiksdH1mdW5jdGlvbiB6bih0KXt0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIEluKHQpe3Quc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gRm4odCl7cmV0dXJuIG51bGwhPXQuZGVmYXVsdFByZXZlbnRlZD90LmRlZmF1bHRQcmV2ZW50ZWQ6MD09dC5yZXR1cm5WYWx1ZX1mdW5jdGlvbiBQbih0KXt6bih0KSxJbih0KX1mdW5jdGlvbiBSbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudH1mdW5jdGlvbiBCbih0KXt2YXIgZT10LndoaWNoO3JldHVybiBudWxsPT1lJiYoMSZ0LmJ1dHRvbj9lPTE6MiZ0LmJ1dHRvbj9lPTM6NCZ0LmJ1dHRvbiYmKGU9MikpLEtpJiZ0LmN0cmxLZXkmJjE9PWUmJihlPTMpLGV9ZnVuY3Rpb24gR24odCxlLHIpe2lmKHQuYWRkRXZlbnRMaXN0ZW5lcil0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuYXR0YWNoRXZlbnQpdC5hdHRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVyc3x8KHQuX2hhbmRsZXJzPXt9KSxpPW5bZV18fChuW2VdPVtdKTtpLnB1c2gocil9fWZ1bmN0aW9uIFZuKHQsZSxyKXtpZih0LnJlbW92ZUV2ZW50TGlzdGVuZXIpdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMSk7ZWxzZSBpZih0LmRldGFjaEV2ZW50KXQuZGV0YWNoRXZlbnQoIm9uIitlLHIpO2Vsc2V7dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKCFuKXJldHVybjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoOysraSlpZihuW2ldPT1yKXtuLnNwbGljZShpLDEpO2JyZWFrfX19ZnVuY3Rpb24gS24odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYocilmb3IodmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLGk9MDtpPHIubGVuZ3RoOysraSlyW2ldLmFwcGx5KG51bGwsbil9ZnVuY3Rpb24gVW4odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxpKX19dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKG4pe3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtTb3x8KCsrTW8sU289W10sc2V0VGltZW91dChfbiwwKSk7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDsrK28pU28ucHVzaChyKG5bb10pKX19ZnVuY3Rpb24gWG4odCxlLHIpe3JldHVybiBLbih0LHJ8fGUudHlwZSx0LGUpLEZuKGUpfHxlLmNvZGVtaXJyb3JJZ25vcmV9ZnVuY3Rpb24gX24oKXstLU1vO3ZhciB0PVNvO1NvPW51bGw7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2UpdFtlXSgpfWZ1bmN0aW9uIFluKHQsZSl7dmFyIHI9dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO3JldHVybiByJiZyLmxlbmd0aD4wfWZ1bmN0aW9uIGpuKHQpe3QucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7R24odGhpcyx0LGUpfSx0LnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXtWbih0aGlzLHQsZSl9fWZ1bmN0aW9uICRuKCl7dGhpcy5pZD1udWxsfWZ1bmN0aW9uIFpuKHQsZSxyLG4saSl7bnVsbD09ZSYmKGU9dC5zZWFyY2goL1teXHNcdTAwYTBdLyksLTE9PWUmJihlPXQubGVuZ3RoKSk7Zm9yKHZhciBvPW58fDAsbD1pfHwwO2U+bzsrK28pIgkiPT10LmNoYXJBdChvKT9sKz1yLWwlcjorK2w7cmV0dXJuIGx9ZnVuY3Rpb24gcW4odCl7Zm9yKDtIby5sZW5ndGg8PXQ7KUhvLnB1c2goUW4oSG8pKyIgIik7cmV0dXJuIEhvW3RdfWZ1bmN0aW9uIFFuKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfWZ1bmN0aW9uIEpuKHQpe2lmKEdpKXQuc2VsZWN0aW9uU3RhcnQ9MCx0LnNlbGVjdGlvbkVuZD10LnZhbHVlLmxlbmd0aDtlbHNlIHRyeXt0LnNlbGVjdCgpfWNhdGNoKGUpe319ZnVuY3Rpb24gdGkodCxlKXtpZih0LmluZGV4T2YpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO24+cjsrK3IpaWYodFtyXT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBlaSh0LGUpe2Z1bmN0aW9uIHIoKXt9ci5wcm90b3R5cGU9dDt2YXIgbj1uZXcgcjtyZXR1cm4gZSYmcmkoZSxuKSxufWZ1bmN0aW9uIHJpKHQsZSl7ZXx8KGU9e30pO2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT1bXSxyPTA7dD5yOysrcillLnB1c2godm9pZCAwKTtyZXR1cm4gZX1mdW5jdGlvbiBpaSh0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gb2kodCl7cmV0dXJuL1x3Ly50ZXN0KHQpfHx0PiLCgCImJih0LnRvVXBwZXJDYXNlKCkhPXQudG9Mb3dlckNhc2UoKXx8Tm8udGVzdCh0KSl9ZnVuY3Rpb24gbGkodCl7Zm9yKHZhciBlIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzaSh0LGUscixuKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO2lmKHImJihpLmNsYXNzTmFtZT1yKSxuJiYoaS5zdHlsZS5jc3NUZXh0PW4pLCJzdHJpbmciPT10eXBlb2YgZSljaShpLGUpO2Vsc2UgaWYoZSlmb3IodmFyIG89MDtvPGUubGVuZ3RoOysrbylpLmFwcGVuZENoaWxkKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGFpKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMubGVuZ3RoO2U+MDstLWUpdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3JldHVybiB0fWZ1bmN0aW9uIHVpKHQsZSl7cmV0dXJuIGFpKHQpLmFwcGVuZENoaWxkKGUpfWZ1bmN0aW9uIGNpKHQsZSl7Tmk/KHQuaW5uZXJIVE1MPSIiLHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpKTp0LnRleHRDb250ZW50PWV9ZnVuY3Rpb24gZmkodCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4hMX1mdW5jdGlvbiBkaSh0KXtpZihudWxsIT1PbylyZXR1cm4gT287dmFyIGU9c2koImRpdiIsbnVsbCxudWxsLCJ3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxvdy14OiBzY3JvbGwiKTtyZXR1cm4gdWkodCxlKSxlLm9mZnNldFdpZHRoJiYoT289ZS5vZmZzZXRIZWlnaHQtZS5jbGllbnRIZWlnaHQpLE9vfHwwfWZ1bmN0aW9uIHBpKHQpe2lmKG51bGw9PUVvKXt2YXIgZT1zaSgic3BhbiIsIuKAiyIpO3VpKHQsc2koInNwYW4iLFtlLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IildKSksMCE9dC5maXJzdENoaWxkLm9mZnNldEhlaWdodCYmKEVvPWUub2Zmc2V0V2lkdGg8PTEmJmUub2Zmc2V0SGVpZ2h0PjImJiFIaSl9cmV0dXJuIEVvP3NpKCJzcGFuIiwi4oCLIik6c2koInNwYW4iLCLCoCIsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgiKX1mdW5jdGlvbiBnaSh0LGUscixuKXtpZighdClyZXR1cm4gbihlLHIsImx0ciIpO2Zvcih2YXIgaT0hMSxvPTA7bzx0Lmxlbmd0aDsrK28pe3ZhciBsPXRbb107KGwuZnJvbTxyJiZsLnRvPmV8fGU9PXImJmwudG89PWUpJiYobihNYXRoLm1heChsLmZyb20sZSksTWF0aC5taW4obC50byxyKSwxPT1sLmxldmVsPyJydGwiOiJsdHIiKSxpPSEwKX1pfHxuKGUsciwibHRyIil9ZnVuY3Rpb24gbWkodCl7cmV0dXJuIHQubGV2ZWwlMj90LnRvOnQuZnJvbX1mdW5jdGlvbiB2aSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QuZnJvbTp0LnRvfWZ1bmN0aW9uIHlpKHQpe3ZhciBlPXduKHQpO3JldHVybiBlP21pKGVbMF0pOjB9ZnVuY3Rpb24gYmkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/dmkoUW4oZSkpOnQudGV4dC5sZW5ndGh9ZnVuY3Rpb24geGkodCxlKXt2YXIgcj1nbih0LmRvYyxlKSxuPUdyKHQuZG9jLHIpO24hPXImJihlPWJuKG4pKTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP2JpKG4pOnlpKG4pOjA7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gQ2kodCxlKXtmb3IodmFyIHIsbjtyPUJyKG49Z24odC5kb2MsZSkpOyllPXIuZmluZCgpLnRvLmxpbmU7dmFyIGk9d24obiksbz1pP2lbMF0ubGV2ZWwlMj95aShuKTpiaShuKTpuLnRleHQubGVuZ3RoO3JldHVybiBZZShlLG8pfWZ1bmN0aW9uIHdpKHQsZSxyKXt2YXIgbj10WzBdLmxldmVsO3JldHVybiBlPT1uPyEwOnI9PW4/ITE6cj5lfWZ1bmN0aW9uIExpKHQsZSl7Zm9yKHZhciByLG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXTtpZihpLmZyb208ZSYmaS50bz5lKXJldHVybiBSbz1udWxsLG47aWYoaS5mcm9tPT1lfHxpLnRvPT1lKXtpZihudWxsIT1yKXJldHVybiB3aSh0LGkubGV2ZWwsdFtyXS5sZXZlbCk/KFJvPXIsbik6KFJvPW4scik7cj1ufX1yZXR1cm4gUm89bnVsbCxyfWZ1bmN0aW9uIGtpKHQsZSxyLG4pe2lmKCFuKXJldHVybiBlK3I7ZG8gZSs9cjt3aGlsZShlPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChlKSkpO3JldHVybiBlfWZ1bmN0aW9uIFNpKHQsZSxyLG4pe3ZhciBpPXduKHQpO2lmKCFpKXJldHVybiBNaSh0LGUscixuKTtmb3IodmFyIG89TGkoaSxlKSxsPWlbb10scz1raSh0LGUsbC5sZXZlbCUyPy1yOnIsbik7Oyl7aWYocz5sLmZyb20mJnM8bC50bylyZXR1cm4gcztpZihzPT1sLmZyb218fHM9PWwudG8pcmV0dXJuIExpKGkscyk9PW8/czoobD1pW28rPXJdLHI+MD09bC5sZXZlbCUyP2wudG86bC5mcm9tKTtpZihsPWlbbys9cl0sIWwpcmV0dXJuIG51bGw7cz1yPjA9PWwubGV2ZWwlMj9raSh0LGwudG8sLTEsbik6a2kodCxsLmZyb20sMSxuKX19ZnVuY3Rpb24gTWkodCxlLHIsbil7dmFyIGk9ZStyO2lmKG4pZm9yKDtpPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChpKSk7KWkrPXI7cmV0dXJuIDA+aXx8aT50LnRleHQubGVuZ3RoP251bGw6aX12YXIgVGk9L2dlY2tvXC9cZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQWk9L01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSGk9QWkmJihudWxsPT1kb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw4KSxOaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDkpLERpPS9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFdpPS9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxPaT1XaSYmL1F0XC9cZCtcLlxkKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxFaT0vQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksemk9L09wZXJhXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSWk9L0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLEZpPS9LSFRNTFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFBpPS9NYWMgT1MgWCAxXGRcRChbNy05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFJpPS9NYWMgT1MgWCAxXGRcRChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEJpPS9QaGFudG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksR2k9L0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvTW9iaWxlXC9cdysvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksVmk9R2l8fC9BbmRyb2lkfHdlYk9TfEJsYWNrQmVycnl8T3BlcmEgTWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxLaT1HaXx8L01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFVpPS93aW4vaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksWGk9emkmJm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cLyhcZCpcLlxkKikvKTtYaSYmKFhpPU51bWJlcihYaVsxXSkpLFhpJiZYaT49MTUmJih6aT0hMSxXaT0hMCk7dmFyIF9pLFlpLGppLCRpPUtpJiYoT2l8fHppJiYobnVsbD09WGl8fDEyLjExPlhpKSksWmk9VGl8fEFpJiYhTmkscWk9ITEsUWk9ITEsSmk9MCx0bz0wLGVvPTAscm89bnVsbDtBaT9ybz0tLjUzOlRpP3JvPTE1OkVpP3JvPS0uNzpJaSYmKHJvPS0xLzMpO3ZhciBubyxpbyxvbz1udWxsLGxvPXQuY2hhbmdlRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQ/WWUodC5mcm9tLmxpbmUrdC50ZXh0Lmxlbmd0aC0xLFFuKHQudGV4dCkubGVuZ3RoKygxPT10LnRleHQubGVuZ3RoP3QuZnJvbS5jaDowKSk6dC50b307dC5Qb3M9WWUsdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsZm9jdXM6ZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKSxwZSh0aGlzKSxmZSh0aGlzKX0sc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHRpb25zLG49clt0XTsoclt0XSE9ZXx8Im1vZGUiPT10KSYmKHJbdF09ZSxzby5oYXNPd25Qcm9wZXJ0eSh0KSYmbGUodGhpcyxzb1t0XSkodGhpcyxlLG4pKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnNbdF19LGdldERvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY30sYWRkS2V5TWFwOmZ1bmN0aW9uKHQsZSl7dGhpcy5zdGF0ZS5rZXlNYXBzW2U/InB1c2giOiJ1bnNoaWZ0Il0odCl9LHJlbW92ZUtleU1hcDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdGF0ZS5rZXlNYXBzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT10fHwic3RyaW5nIiE9dHlwZW9mIGVbcl0mJmVbcl0ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSwhMH0sYWRkT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKGUscil7dmFyIG49ZS50b2tlbj9lOnQuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsZSk7aWYobi5zdGFydFN0YXRlKXRocm93IG5ldyBFcnJvcigiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKTt0aGlzLnN0YXRlLm92ZXJsYXlzLnB1c2goe21vZGU6bixtb2RlU3BlYzplLG9wYXF1ZTpyJiZyLm9wYXF1ZX0pLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpfSkscmVtb3ZlT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLm92ZXJsYXlzLHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG49ZVtyXS5tb2RlU3BlYztpZihuPT10fHwic3RyaW5nIj09dHlwZW9mIHQmJm4ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSx0aGlzLnN0YXRlLm1vZGVHZW4rKyx1ZSh0aGlzKSx2b2lkIDB9fSksaW5kZW50TGluZTpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXsic3RyaW5nIiE9dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZSYmKGU9bnVsbD09ZT90aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQ/InNtYXJ0IjoicHJldiI6ZT8iYWRkIjoic3VidHJhY3QiKSx0cih0aGlzLmRvYyx0KSYmaHIodGhpcyx0LGUscil9KSxpbmRlbnRTZWxlY3Rpb246bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRvYy5zZWw7aWYoamUoZS5mcm9tLGUudG8pKXJldHVybiBocih0aGlzLGUuZnJvbS5saW5lLHQpO2Zvcih2YXIgcj1lLnRvLmxpbmUtKGUudG8uY2g/MDoxKSxuPWUuZnJvbS5saW5lO3I+PW47KytuKWhyKHRoaXMsbix0KX0pLGdldFRva2VuQXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYzt0PVFlKHIsdCk7Zm9yKHZhciBuPXoodGhpcyx0LmxpbmUsZSksaT10aGlzLmRvYy5tb2RlLG89Z24ocix0LmxpbmUpLGw9bmV3IFNyKG8udGV4dCx0aGlzLm9wdGlvbnMudGFiU2l6ZSk7bC5wb3M8dC5jaCYmIWwuZW9sKCk7KXtsLnN0YXJ0PWwucG9zO3ZhciBzPWkudG9rZW4obCxuKX1yZXR1cm57c3RhcnQ6bC5zdGFydCxlbmQ6bC5wb3Msc3RyaW5nOmwuY3VycmVudCgpLGNsYXNzTmFtZTpzfHxudWxsLHR5cGU6c3x8bnVsbCxzdGF0ZTpufX0sZ2V0VG9rZW5UeXBlQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLmRvYyx0KTt2YXIgZT1Kcih0aGlzLGduKHRoaXMuZG9jLHQubGluZSkpLHI9MCxuPShlLmxlbmd0aC0xKS8yLGk9dC5jaDtpZigwPT1pKXJldHVybiBlWzJdO2Zvcig7Oyl7dmFyIG89cituPj4xO2lmKChvP2VbMipvLTFdOjApPj1pKW49bztlbHNle2lmKCEoZVsyKm8rMV08aSkpcmV0dXJuIGVbMipvKzJdO3I9bysxfX19LGdldE1vZGVBdDpmdW5jdGlvbihlKXt2YXIgcj10aGlzLmRvYy5tb2RlO3JldHVybiByLmlubmVyTW9kZT90LmlubmVyTW9kZShyLHRoaXMuZ2V0VG9rZW5BdChlKS5zdGF0ZSkubW9kZTpyfSxnZXRIZWxwZXI6ZnVuY3Rpb24odCxlKXtpZihnby5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHI9Z29bZV0sbj10aGlzLmdldE1vZGVBdCh0KTtyZXR1cm4gbltlXSYmcltuW2VdXXx8bi5oZWxwZXJUeXBlJiZyW24uaGVscGVyVHlwZV18fHJbbi5uYW1lXX19LGdldFN0YXRlQWZ0ZXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYztyZXR1cm4gdD1xZShyLG51bGw9PXQ/ci5maXJzdCtyLnNpemUtMTp0KSx6KHRoaXMsdCsxLGUpfSxjdXJzb3JDb29yZHM6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyZXR1cm4gcj1udWxsPT10P24uaGVhZDoib2JqZWN0Ij09dHlwZW9mIHQ/UWUodGhpcy5kb2MsdCk6dD9uLmZyb206bi50byxRKHRoaXMscixlfHwicGFnZSIpfSxjaGFyQ29vcmRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHEodGhpcyxRZSh0aGlzLmRvYyx0KSxlfHwicGFnZSIpfSxjb29yZHNDaGFyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHQsZXx8InBhZ2UiKSx0ZSh0aGlzLHQubGVmdCx0LnRvcCl9LGxpbmVBdEhlaWdodDpmdW5jdGlvbih0LGUpe3JldHVybiB0PVoodGhpcyx7dG9wOnQsbGVmdDowfSxlfHwicGFnZSIpLnRvcCx4bih0aGlzLmRvYyx0K3RoaXMuZGlzcGxheS52aWV3T2Zmc2V0KX0saGVpZ2h0QXRMaW5lOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ITEsbj10aGlzLmRvYy5maXJzdCt0aGlzLmRvYy5zaXplLTE7dDx0aGlzLmRvYy5maXJzdD90PXRoaXMuZG9jLmZpcnN0OnQ+biYmKHQ9bixyPSEwKTt2YXIgaT1nbih0aGlzLmRvYyx0KTtyZXR1cm4gJCh0aGlzLGduKHRoaXMuZG9jLHQpLHt0b3A6MCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wKyhyP2kuaGVpZ2h0OjApfSxkZWZhdWx0VGV4dEhlaWdodDpmdW5jdGlvbigpe3JldHVybiByZSh0aGlzLmRpc3BsYXkpfSxkZWZhdWx0Q2hhcldpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5lKHRoaXMuZGlzcGxheSl9LHNldEd1dHRlck1hcmtlcjpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ3V0dGVyTWFya2Vyc3x8KHQuZ3V0dGVyTWFya2Vycz17fSk7cmV0dXJuIG5bZV09ciwhciYmbGkobikmJih0Lmd1dHRlck1hcmtlcnM9bnVsbCksITB9KX0pLGNsZWFyR3V0dGVyOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZG9jLG49ci5maXJzdDtyLml0ZXIoZnVuY3Rpb24ocil7ci5ndXR0ZXJNYXJrZXJzJiZyLmd1dHRlck1hcmtlcnNbdF0mJihyLmd1dHRlck1hcmtlcnNbdF09bnVsbCx1ZShlLG4sbisxKSxsaShyLmd1dHRlck1hcmtlcnMpJiYoci5ndXR0ZXJNYXJrZXJzPW51bGwpKSwrK259KX0pLGFkZExpbmVDbGFzczpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPSJ0ZXh0Ij09ZT8idGV4dENsYXNzIjoiYmFja2dyb3VuZCI9PWU/ImJnQ2xhc3MiOiJ3cmFwQ2xhc3MiO2lmKHRbbl0pe2lmKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIrcisiKD86JHxcXHMpIikudGVzdCh0W25dKSlyZXR1cm4hMTt0W25dKz0iICIrcn1lbHNlIHRbbl09cjtyZXR1cm4hMH0pfSkscmVtb3ZlTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyIsaT10W25dO2lmKCFpKXJldHVybiExO2lmKG51bGw9PXIpdFtuXT1udWxsO2Vsc2V7dmFyIG89aS5tYXRjaChuZXcgUmVnRXhwKCIoPzpefFxccyspIityKyIoPzokfFxccyspIikpO2lmKCFvKXJldHVybiExO3ZhciBsPW8uaW5kZXgrb1swXS5sZW5ndGg7dFtuXT1pLnNsaWNlKDAsby5pbmRleCkrKG8uaW5kZXgmJmwhPWkubGVuZ3RoPyIgIjoiIikraS5zbGljZShsKXx8bnVsbH1yZXR1cm4hMH0pfSksYWRkTGluZVdpZGdldDpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4ganIodGhpcyx0LGUscil9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKHQpe3QuY2xlYXIoKX0sbGluZUluZm86ZnVuY3Rpb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZighdHIodGhpcy5kb2MsdCkpcmV0dXJuIG51bGw7dmFyIGU9dDtpZih0PWduKHRoaXMuZG9jLHQpLCF0KXJldHVybiBudWxsfWVsc2V7dmFyIGU9Ym4odCk7aWYobnVsbD09ZSlyZXR1cm4gbnVsbH1yZXR1cm57bGluZTplLGhhbmRsZTp0LHRleHQ6dC50ZXh0LGd1dHRlck1hcmtlcnM6dC5ndXR0ZXJNYXJrZXJzLHRleHRDbGFzczp0LnRleHRDbGFzcyxiZ0NsYXNzOnQuYmdDbGFzcyx3cmFwQ2xhc3M6dC53cmFwQ2xhc3Msd2lkZ2V0czp0LndpZGdldHN9fSxnZXRWaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZGlzcGxheS5zaG93aW5nRnJvbSx0bzp0aGlzLmRpc3BsYXkuc2hvd2luZ1RvfX0sYWRkV2lkZ2V0OmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89dGhpcy5kaXNwbGF5O3Q9USh0aGlzLFFlKHRoaXMuZG9jLHQpKTt2YXIgbD10LmJvdHRvbSxzPXQubGVmdDtpZihlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zaXplci5hcHBlbmRDaGlsZChlKSwib3ZlciI9PW4pbD10LnRvcDtlbHNlIGlmKCJhYm92ZSI9PW58fCJuZWFyIj09bil7dmFyIGE9TWF0aC5tYXgoby53cmFwcGVyLmNsaWVudEhlaWdodCx0aGlzLmRvYy5oZWlnaHQpLHU9TWF0aC5tYXgoby5zaXplci5jbGllbnRXaWR0aCxvLmxpbmVTcGFjZS5jbGllbnRXaWR0aCk7KCJhYm92ZSI9PW58fHQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PmEpJiZ0LnRvcD5lLm9mZnNldEhlaWdodD9sPXQudG9wLWUub2Zmc2V0SGVpZ2h0OnQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PD1hJiYobD10LmJvdHRvbSkscytlLm9mZnNldFdpZHRoPnUmJihzPXUtZS5vZmZzZXRXaWR0aCl9ZS5zdHlsZS50b3A9bCsicHgiLGUuc3R5bGUubGVmdD1lLnN0eWxlLnJpZ2h0PSIiLCJyaWdodCI9PWk/KHM9by5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoLGUuc3R5bGUucmlnaHQ9IjBweCIpOigibGVmdCI9PWk/cz0wOiJtaWRkbGUiPT1pJiYocz0oby5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoKS8yKSxlLnN0eWxlLmxlZnQ9cysicHgiKSxyJiZhcih0aGlzLHMsbCxzK2Uub2Zmc2V0V2lkdGgsbCtlLm9mZnNldEhlaWdodCl9LHRyaWdnZXJPbktleURvd246bGUobnVsbCxXZSksZXhlY0NvbW1hbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG1vW3RdKHRoaXMpfSxmaW5kUG9zSDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBvPTAsbD1RZSh0aGlzLmRvYyx0KTtlPm8mJihsPXByKHRoaXMuZG9jLGwsaSxyLG4pLCFsLmhpdFNpZGUpOysrbyk7cmV0dXJuIGx9LG1vdmVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyPW4uc2hpZnR8fG4uZXh0ZW5kfHxqZShuLmZyb20sbi50byk/cHIodGhpcy5kb2Msbi5oZWFkLHQsZSx0aGlzLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTowPnQ/bi5mcm9tOm4udG8sZXIodGhpcy5kb2MscixyLHQpfSksZGVsZXRlSDpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsO2plKHIuZnJvbSxyLnRvKT9fZSh0aGlzLmRvYywiIixyLmZyb20scHIodGhpcy5kb2Msci5oZWFkLHQsZSwhMSksIitkZWxldGUiKTpfZSh0aGlzLmRvYywiIixyLmZyb20sci50bywiK2RlbGV0ZSIpLHRoaXMuY3VyT3AudXNlclNlbENoYW5nZT0hMH0pLGZpbmRQb3NWOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTEsbz1uOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBsPTAscz1RZSh0aGlzLmRvYyx0KTtlPmw7KytsKXt2YXIgYT1RKHRoaXMscywiZGl2Iik7aWYobnVsbD09bz9vPWEubGVmdDphLmxlZnQ9byxzPWdyKHRoaXMsYSxpLHIpLHMuaGl0U2lkZSlicmVha31yZXR1cm4gc30sbW92ZVY6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jLnNlbCxuPVEodGhpcyxyLmhlYWQsImRpdiIpO251bGwhPXIuZ29hbENvbHVtbiYmKG4ubGVmdD1yLmdvYWxDb2x1bW4pO3ZhciBpPWdyKHRoaXMsbix0LGUpOyJwYWdlIj09ZSYmZnIodGhpcywwLHEodGhpcyxpLCJkaXYiKS50b3Atbi50b3ApLGVyKHRoaXMuZG9jLGksaSx0KSxyLmdvYWxDb2x1bW49bi5sZWZ0fSksdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpeyhudWxsPT10fHx0IT10aGlzLnN0YXRlLm92ZXJ3cml0ZSkmJigodGhpcy5zdGF0ZS5vdmVyd3JpdGU9IXRoaXMuc3RhdGUub3ZlcndyaXRlKT90aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI6dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWU9dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itb3ZlcndyaXRlIiwiIikpfSxoYXNGb2N1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmZvY3VzZWR9LHNjcm9sbFRvOmxlKG51bGwsZnVuY3Rpb24odCxlKXtjcih0aGlzLHQsZSl9KSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kaXNwbGF5LnNjcm9sbGVyLGU9VG87cmV0dXJue2xlZnQ6dC5zY3JvbGxMZWZ0LHRvcDp0LnNjcm9sbFRvcCxoZWlnaHQ6dC5zY3JvbGxIZWlnaHQtZSx3aWR0aDp0LnNjcm9sbFdpZHRoLWUsY2xpZW50SGVpZ2h0OnQuY2xpZW50SGVpZ2h0LWUsY2xpZW50V2lkdGg6dC5jbGllbnRXaWR0aC1lfX0sc2Nyb2xsSW50b1ZpZXc6bGUobnVsbCxmdW5jdGlvbih0LGUpe251bGw9PXQ/dD17ZnJvbTp0aGlzLmRvYy5zZWwuaGVhZCx0bzpudWxsfToibnVtYmVyIj09dHlwZW9mIHQ/dD17ZnJvbTpZZSh0LDApLHRvOm51bGx9Om51bGw9PXQuZnJvbSYmKHQ9e2Zyb206dCx0bzpudWxsfSksdC50b3x8KHQudG89dC5mcm9tKSxlfHwoZT0wKTt2YXIgcj10O251bGwhPXQuZnJvbS5saW5lJiYodGhpcy5jdXJPcC5zY3JvbGxUb1Bvcz17ZnJvbTp0LmZyb20sdG86dC50byxtYXJnaW46ZX0scj17ZnJvbTpRKHRoaXMsdC5mcm9tKSx0bzpRKHRoaXMsdC50byl9KTt2YXIgbj11cih0aGlzLE1hdGgubWluKHIuZnJvbS5sZWZ0LHIudG8ubGVmdCksTWF0aC5taW4oci5mcm9tLnRvcCxyLnRvLnRvcCktZSxNYXRoLm1heChyLmZyb20ucmlnaHQsci50by5yaWdodCksTWF0aC5tYXgoci5mcm9tLmJvdHRvbSxyLnRvLmJvdHRvbSkrZSk7Y3IodGhpcyxuLnNjcm9sbExlZnQsbi5zY3JvbGxUb3ApfSksc2V0U2l6ZTpsZShudWxsLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fC9eXGQrJC8udGVzdChTdHJpbmcodCkpP3QrInB4Ijp0fW51bGwhPXQmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aD1yKHQpKSxudWxsIT1lJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0PXIoZSkpLHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dGhpcy5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCksdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMH0pLG9wZXJhdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gYWUodGhpcyx0KX0scmVmcmVzaDpsZShudWxsLGZ1bmN0aW9uKCl7dmFyIHQ9bnVsbD09dGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7Xyh0aGlzKSxjcih0aGlzLHRoaXMuZG9jLnNjcm9sbExlZnQsdGhpcy5kb2Muc2Nyb2xsVG9wKSx1ZSh0aGlzKSx0JiZvKHRoaXMpfSksc3dhcERvYzpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jO3JldHVybiBlLmNtPW51bGwscG4odGhpcyx0KSxfKHRoaXMpLGRlKHRoaXMsITApLGNyKHRoaXMsdC5zY3JvbGxMZWZ0LHQuc2Nyb2xsVG9wKSxVbih0aGlzLCJzd2FwRG9jIix0aGlzLGUpLGV9KSxnZXRJbnB1dEZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dH0sZ2V0V3JhcHBlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXJ9LGdldFNjcm9sbGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXJ9LGdldEd1dHRlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnN9fSxqbih0KTt2YXIgc289dC5vcHRpb25IYW5kbGVycz17fSxhbz10LmRlZmF1bHRzPXt9LHVvPXQuSW5pdD17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ29kZU1pcnJvci5Jbml0In19O3lyKCJ2YWx1ZSIsIiIsZnVuY3Rpb24odCxlKXt0LnNldFZhbHVlKGUpfSwhMCkseXIoIm1vZGUiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRvYy5tb2RlT3B0aW9uPWUscih0KX0sITApLHlyKCJpbmRlbnRVbml0IiwyLHIsITApLHlyKCJpbmRlbnRXaXRoVGFicyIsITEpLHlyKCJzbWFydEluZGVudCIsITApLHlyKCJ0YWJTaXplIiw0LGZ1bmN0aW9uKHQpe3IodCksXyh0KSx1ZSh0KX0sITApLHlyKCJzcGVjaWFsQ2hhcnMiLC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVmZWZmXS9nLGZ1bmN0aW9uKHQsZSl7dC5vcHRpb25zLnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKGUuc291cmNlKyhlLnRlc3QoIgkiKT8iIjoifAkiKSwiZyIpLHQucmVmcmVzaCgpfSwhMCkseXIoInNwZWNpYWxDaGFyUGxhY2Vob2xkZXIiLG5uLGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSwhMCkseXIoImVsZWN0cmljQ2hhcnMiLCEwKSx5cigicnRsTW92ZVZpc3VhbGx5IiwhVWkpLHlyKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCEwKSx5cigidGhlbWUiLCJkZWZhdWx0IixmdW5jdGlvbih0KXtzKHQpLGEodCl9LCEwKSx5cigia2V5TWFwIiwiZGVmYXVsdCIsbCkseXIoImV4dHJhS2V5cyIsbnVsbCkseXIoIm9uS2V5RXZlbnQiLG51bGwpLHlyKCJvbkRyYWdFdmVudCIsbnVsbCkseXIoImxpbmVXcmFwcGluZyIsITEsbiwhMCkseXIoImd1dHRlcnMiLFtdLGZ1bmN0aW9uKHQpe2godC5vcHRpb25zKSxhKHQpfSwhMCkseXIoImZpeGVkR3V0dGVyIiwhMCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQ9ZT95KHQuZGlzcGxheSkrInB4IjoiMCIsdC5yZWZyZXNoKCl9LCEwKSx5cigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIiLCExLGQsITApLHlyKCJsaW5lTnVtYmVycyIsITEsZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZmlyc3RMaW5lTnVtYmVyIiwxLGEsITApLHlyKCJsaW5lTnVtYmVyRm9ybWF0dGVyIixmdW5jdGlvbih0KXtyZXR1cm4gdH0sYSwhMCkseXIoInNob3dDdXJzb3JXaGVuU2VsZWN0aW5nIiwhMSxBLCEwKSx5cigicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51IiwhMCkseXIoInJlYWRPbmx5IiwhMSxmdW5jdGlvbih0LGUpeyJub2N1cnNvciI9PWU/KHplKHQpLHQuZGlzcGxheS5pbnB1dC5ibHVyKCksdC5kaXNwbGF5LmRpc2FibGVkPSEwKToodC5kaXNwbGF5LmRpc2FibGVkPSExLGV8fGRlKHQsITApKX0pLHlyKCJkcmFnRHJvcCIsITApLHlyKCJjdXJzb3JCbGlua1JhdGUiLDUzMCkseXIoImN1cnNvclNjcm9sbE1hcmdpbiIsMCkseXIoImN1cnNvckhlaWdodCIsMSkseXIoIndvcmtUaW1lIiwxMDApLHlyKCJ3b3JrRGVsYXkiLDEwMCkseXIoImZsYXR0ZW5TcGFucyIsITApLHlyKCJwb2xsSW50ZXJ2YWwiLDEwMCkseXIoInVuZG9EZXB0aCIsNDAsZnVuY3Rpb24odCxlKXt0LmRvYy5oaXN0b3J5LnVuZG9EZXB0aD1lfSkseXIoImhpc3RvcnlFdmVudERlbGF5Iiw1MDApLHlyKCJ2aWV3cG9ydE1hcmdpbiIsMTAsZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigibWF4SGlnaGxpZ2h0TGVuZ3RoIiwxZTQsZnVuY3Rpb24odCl7cih0KSx0LnJlZnJlc2goKX0sITApLHlyKCJjcnVkZU1lYXN1cmluZ0Zyb20iLDFlNCkseXIoIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCEwLGZ1bmN0aW9uKHQsZSl7ZXx8KHQuZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3A9dC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQ9MCl9KSx5cigidGFiaW5kZXgiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRpc3BsYXkuaW5wdXQudGFiSW5kZXg9ZXx8IiJ9KSx5cigiYXV0b2ZvY3VzIixudWxsKTt2YXIgY289dC5tb2Rlcz17fSxmbz10Lm1pbWVNb2Rlcz17fTt0LmRlZmluZU1vZGU9ZnVuY3Rpb24oZSxyKXtpZih0LmRlZmF1bHRzLm1vZGV8fCJudWxsIj09ZXx8KHQuZGVmYXVsdHMubW9kZT1lKSxhcmd1bWVudHMubGVuZ3RoPjIpe3IuZGVwZW5kZW5jaWVzPVtdO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDsrK24pci5kZXBlbmRlbmNpZXMucHVzaChhcmd1bWVudHNbbl0pfWNvW2VdPXJ9LHQuZGVmaW5lTUlNRT1mdW5jdGlvbih0LGUpe2ZvW3RdPWV9LHQucmVzb2x2ZU1vZGU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiZmby5oYXNPd25Qcm9wZXJ0eShlKSllPWZvW2VdO2Vsc2UgaWYoZSYmInN0cmluZyI9PXR5cGVvZiBlLm5hbWUmJmZvLmhhc093blByb3BlcnR5KGUubmFtZSkpe3ZhciByPWZvW2UubmFtZV07ZT1laShyLGUpLGUubmFtZT1yLm5hbWV9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUmJi9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChlKSlyZXR1cm4gdC5yZXNvbHZlTW9kZSgiYXBwbGljYXRpb24veG1sIik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3tuYW1lOmV9OmV8fHtuYW1lOiJudWxsIn19LHQuZ2V0TW9kZT1mdW5jdGlvbihlLHIpe3ZhciByPXQucmVzb2x2ZU1vZGUociksbj1jb1tyLm5hbWVdO2lmKCFuKXJldHVybiB0LmdldE1vZGUoZSwidGV4dC9wbGFpbiIpO3ZhciBpPW4oZSxyKTtpZihoby5oYXNPd25Qcm9wZXJ0eShyLm5hbWUpKXt2YXIgbz1ob1tyLm5hbWVdO2Zvcih2YXIgbCBpbiBvKW8uaGFzT3duUHJvcGVydHkobCkmJihpLmhhc093blByb3BlcnR5KGwpJiYoaVsiXyIrbF09aVtsXSksaVtsXT1vW2xdKX1yZXR1cm4gaS5uYW1lPXIubmFtZSxpfSx0LmRlZmluZU1vZGUoIm51bGwiLGZ1bmN0aW9uKCl7cmV0dXJue3Rva2VuOmZ1bmN0aW9uKHQpe3Quc2tpcFRvRW5kKCl9fX0pLHQuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsIm51bGwiKTt2YXIgaG89dC5tb2RlRXh0ZW5zaW9ucz17fTt0LmV4dGVuZE1vZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1oby5oYXNPd25Qcm9wZXJ0eSh0KT9ob1t0XTpob1t0XT17fTtyaShlLHIpfSx0LmRlZmluZUV4dGVuc2lvbj1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlW2VdPXJ9LHQuZGVmaW5lRG9jRXh0ZW5zaW9uPWZ1bmN0aW9uKHQsZSl7d28ucHJvdG90eXBlW3RdPWV9LHQuZGVmaW5lT3B0aW9uPXlyO3ZhciBwbz1bXTt0LmRlZmluZUluaXRIb29rPWZ1bmN0aW9uKHQpe3BvLnB1c2godCl9O3ZhciBnbz10LmhlbHBlcnM9e307dC5yZWdpc3RlckhlbHBlcj1mdW5jdGlvbihlLHIsbil7Z28uaGFzT3duUHJvcGVydHkoZSl8fChnb1tlXT10W2VdPXt9KSxnb1tlXVtyXT1ufSx0LmlzV29yZENoYXI9b2ksdC5jb3B5U3RhdGU9YnIsdC5zdGFydFN0YXRlPXhyLHQuaW5uZXJNb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKDt0LmlubmVyTW9kZTspe3ZhciByPXQuaW5uZXJNb2RlKGUpO2lmKCFyfHxyLm1vZGU9PXQpYnJlYWs7ZT1yLnN0YXRlLHQ9ci5tb2RlfXJldHVybiByfHx7bW9kZTp0LHN0YXRlOmV9fTt2YXIgbW89dC5jb21tYW5kcz17c2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3Quc2V0U2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCksWWUodC5sYXN0TGluZSgpKSl9LGtpbGxMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCEwKSxyPXQuZ2V0Q3Vyc29yKCExKSxuPSFqZShlLHIpO258fHQuZ2V0TGluZShlLmxpbmUpLmxlbmd0aCE9ZS5jaD90LnJlcGxhY2VSYW5nZSgiIixlLG4/cjpZZShlLmxpbmUpLCIrZGVsZXRlIik6dC5yZXBsYWNlUmFuZ2UoIiIsZSxZZShlLmxpbmUrMSwwKSwiK2RlbGV0ZSIpfSxkZWxldGVMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkubGluZTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLDApLFllKGUpLCIrZGVsZXRlIil9LGRlbExpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCk7dC5yZXBsYWNlUmFuZ2UoIiIsWWUoZS5saW5lLDApLGUsIitkZWxldGUiKX0sdW5kbzpmdW5jdGlvbih0KXt0LnVuZG8oKX0scmVkbzpmdW5jdGlvbih0KXt0LnJlZG8oKX0sZ29Eb2NTdGFydDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0LmZpcnN0TGluZSgpLDApKX0sZ29Eb2NFbmQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oWWUodC5sYXN0TGluZSgpKSl9LGdvTGluZVN0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKHhpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVN0YXJ0U21hcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXhpKHQsZS5saW5lKSxuPXQuZ2V0TGluZUhhbmRsZShyLmxpbmUpLGk9d24obik7aWYoaSYmMCE9aVswXS5sZXZlbCl0LmV4dGVuZFNlbGVjdGlvbihyKTtlbHNle3ZhciBvPU1hdGgubWF4KDAsbi50ZXh0LnNlYXJjaCgvXFMvKSksbD1lLmxpbmU9PXIubGluZSYmZS5jaDw9byYmZS5jaDt0LmV4dGVuZFNlbGVjdGlvbihZZShyLmxpbmUsbD8wOm8pKX19LGdvTGluZUVuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihDaSh0LHQuZ2V0Q3Vyc29yKCkubGluZSkpfSxnb0xpbmVSaWdodDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OnQuZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoKzEwMCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lTGVmdDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OjAsdG9wOmV9LCJkaXYiKSl9LGdvTGluZVVwOmZ1bmN0aW9uKHQpe3QubW92ZVYoLTEsImxpbmUiKX0sZ29MaW5lRG93bjpmdW5jdGlvbih0KXt0Lm1vdmVWKDEsImxpbmUiKX0sZ29QYWdlVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwicGFnZSIpfSxnb1BhZ2VEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwicGFnZSIpfSxnb0NoYXJMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNoYXIiKX0sZ29DaGFyUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJjaGFyIil9LGdvQ29sdW1uTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJjb2x1bW4iKX0sZ29Db2x1bW5SaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNvbHVtbiIpfSxnb1dvcmRMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsIndvcmQiKX0sZ29Hcm91cFJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiZ3JvdXAiKX0sZ29Hcm91cExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiZ3JvdXAiKX0sZ29Xb3JkUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJ3b3JkIil9LGRlbENoYXJCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJjaGFyIil9LGRlbENoYXJBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwiY2hhciIpfSxkZWxXb3JkQmVmb3JlOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgtMSwid29yZCIpfSxkZWxXb3JkQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsIndvcmQiKX0sZGVsR3JvdXBCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJncm91cCIpfSxkZWxHcm91cEFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJncm91cCIpfSxpbmRlbnRBdXRvOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpfSxpbmRlbnRNb3JlOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKX0saW5kZW50TGVzczpmdW5jdGlvbih0KXt0LmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKX0saW5zZXJ0VGFiOmZ1bmN0aW9uKHQpe3QucmVwbGFjZVNlbGVjdGlvbigiCSIsImVuZCIsIitpbnB1dCIpfSxkZWZhdWx0VGFiOmZ1bmN0aW9uKHQpe3Quc29tZXRoaW5nU2VsZWN0ZWQoKT90LmluZGVudFNlbGVjdGlvbigiYWRkIik6dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LHRyYW5zcG9zZUNoYXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkscj10LmdldExpbmUoZS5saW5lKTtlLmNoPjAmJmUuY2g8ci5sZW5ndGgtMSYmdC5yZXBsYWNlUmFuZ2Uoci5jaGFyQXQoZS5jaCkrci5jaGFyQXQoZS5jaC0xKSxZZShlLmxpbmUsZS5jaC0xKSxZZShlLmxpbmUsZS5jaCsxKSl9LG5ld2xpbmVBbmRJbmRlbnQ6ZnVuY3Rpb24odCl7bGUodCxmdW5jdGlvbigpe3QucmVwbGFjZVNlbGVjdGlvbigiXG4iLCJlbmQiLCIraW5wdXQiKSx0LmluZGVudExpbmUodC5nZXRDdXJzb3IoKS5saW5lLG51bGwsITApfSkoKX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpe3QudG9nZ2xlT3ZlcndyaXRlKCl9fSx2bz10LmtleU1hcD17fTt2by5iYXNpYz17TGVmdDoiZ29DaGFyTGVmdCIsUmlnaHQ6ImdvQ2hhclJpZ2h0IixVcDoiZ29MaW5lVXAiLERvd246ImdvTGluZURvd24iLEVuZDoiZ29MaW5lRW5kIixIb21lOiJnb0xpbmVTdGFydFNtYXJ0IixQYWdlVXA6ImdvUGFnZVVwIixQYWdlRG93bjoiZ29QYWdlRG93biIsRGVsZXRlOiJkZWxDaGFyQWZ0ZXIiLEJhY2tzcGFjZToiZGVsQ2hhckJlZm9yZSIsIlNoaWZ0LUJhY2tzcGFjZSI6ImRlbENoYXJCZWZvcmUiLFRhYjoiZGVmYXVsdFRhYiIsIlNoaWZ0LVRhYiI6ImluZGVudEF1dG8iLEVudGVyOiJuZXdsaW5lQW5kSW5kZW50IixJbnNlcnQ6InRvZ2dsZU92ZXJ3cml0ZSJ9LHZvLnBjRGVmYXVsdD17IkN0cmwtQSI6InNlbGVjdEFsbCIsIkN0cmwtRCI6ImRlbGV0ZUxpbmUiLCJDdHJsLVoiOiJ1bmRvIiwiU2hpZnQtQ3RybC1aIjoicmVkbyIsIkN0cmwtWSI6InJlZG8iLCJDdHJsLUhvbWUiOiJnb0RvY1N0YXJ0IiwiQWx0LVVwIjoiZ29Eb2NTdGFydCIsIkN0cmwtRW5kIjoiZ29Eb2NFbmQiLCJDdHJsLURvd24iOiJnb0RvY0VuZCIsIkN0cmwtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQ3RybC1SaWdodCI6ImdvR3JvdXBSaWdodCIsIkFsdC1MZWZ0IjoiZ29MaW5lU3RhcnQiLCJBbHQtUmlnaHQiOiJnb0xpbmVFbmQiLCJDdHJsLUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ3RybC1TIjoic2F2ZSIsIkN0cmwtRiI6ImZpbmQiLCJDdHJsLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUN0cmwtRyI6ImZpbmRQcmV2IiwiU2hpZnQtQ3RybC1GIjoicmVwbGFjZSIsIlNoaWZ0LUN0cmwtUiI6InJlcGxhY2VBbGwiLCJDdHJsLVsiOiJpbmRlbnRMZXNzIiwiQ3RybC1dIjoiaW5kZW50TW9yZSIsZmFsbHRocm91Z2g6ImJhc2ljIn0sdm8ubWFjRGVmYXVsdD17IkNtZC1BIjoic2VsZWN0QWxsIiwiQ21kLUQiOiJkZWxldGVMaW5lIiwiQ21kLVoiOiJ1bmRvIiwiU2hpZnQtQ21kLVoiOiJyZWRvIiwiQ21kLVkiOiJyZWRvIiwiQ21kLVVwIjoiZ29Eb2NTdGFydCIsIkNtZC1FbmQiOiJnb0RvY0VuZCIsIkNtZC1Eb3duIjoiZ29Eb2NFbmQiLCJBbHQtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQWx0LVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQ21kLUxlZnQiOiJnb0xpbmVTdGFydCIsIkNtZC1SaWdodCI6ImdvTGluZUVuZCIsIkFsdC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQWZ0ZXIiLCJBbHQtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkNtZC1TIjoic2F2ZSIsIkNtZC1GIjoiZmluZCIsIkNtZC1HIjoiZmluZE5leHQiLCJTaGlmdC1DbWQtRyI6ImZpbmRQcmV2IiwiQ21kLUFsdC1GIjoicmVwbGFjZSIsIlNoaWZ0LUNtZC1BbHQtRiI6InJlcGxhY2VBbGwiLCJDbWQtWyI6ImluZGVudExlc3MiLCJDbWQtXSI6ImluZGVudE1vcmUiLCJDbWQtQmFja3NwYWNlIjoiZGVsTGluZUxlZnQiLGZhbGx0aHJvdWdoOlsiYmFzaWMiLCJlbWFjc3kiXX0sdm9bImRlZmF1bHQiXT1LaT92by5tYWNEZWZhdWx0OnZvLnBjRGVmYXVsdCx2by5lbWFjc3k9eyJDdHJsLUYiOiJnb0NoYXJSaWdodCIsIkN0cmwtQiI6ImdvQ2hhckxlZnQiLCJDdHJsLVAiOiJnb0xpbmVVcCIsIkN0cmwtTiI6ImdvTGluZURvd24iLCJBbHQtRiI6ImdvV29yZFJpZ2h0IiwiQWx0LUIiOiJnb1dvcmRMZWZ0IiwiQ3RybC1BIjoiZ29MaW5lU3RhcnQiLCJDdHJsLUUiOiJnb0xpbmVFbmQiLCJDdHJsLVYiOiJnb1BhZ2VEb3duIiwiU2hpZnQtQ3RybC1WIjoiZ29QYWdlVXAiLCJDdHJsLUQiOiJkZWxDaGFyQWZ0ZXIiLCJDdHJsLUgiOiJkZWxDaGFyQmVmb3JlIiwiQWx0LUQiOiJkZWxXb3JkQWZ0ZXIiLCJBbHQtQmFja3NwYWNlIjoiZGVsV29yZEJlZm9yZSIsIkN0cmwtSyI6ImtpbGxMaW5lIiwiQ3RybC1UIjoidHJhbnNwb3NlQ2hhcnMifSx0Lmxvb2t1cEtleT13cix0LmlzTW9kaWZpZXJLZXk9THIsdC5rZXlOYW1lPWtyLHQuZnJvbVRleHRBcmVhPWZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe2UudmFsdWU9dS5nZXRWYWx1ZSgpfWlmKHJ8fChyPXt9KSxyLnZhbHVlPWUudmFsdWUsIXIudGFiaW5kZXgmJmUudGFiaW5kZXgmJihyLnRhYmluZGV4PWUudGFiaW5kZXgpLCFyLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyJiYoci5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyKSxudWxsPT1yLmF1dG9mb2N1cyl7dmFyIGk9ZG9jdW1lbnQuYm9keTt0cnl7aT1kb2N1bWVudC5hY3RpdmVFbGVtZW50fWNhdGNoKG8pe31yLmF1dG9mb2N1cz1pPT1lfHxudWxsIT1lLmdldEF0dHJpYnV0ZSgiYXV0b2ZvY3VzIikmJmk9PWRvY3VtZW50LmJvZHl9aWYoZS5mb3JtJiYoR24oZS5mb3JtLCJzdWJtaXQiLG4pLCFyLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpKXt2YXIgbD1lLmZvcm0scz1sLnN1Ym1pdDt0cnl7dmFyIGE9bC5zdWJtaXQ9ZnVuY3Rpb24oKXtuKCksbC5zdWJtaXQ9cyxsLnN1Ym1pdCgpLGwuc3VibWl0PWF9fWNhdGNoKG8pe319ZS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgdT10KGZ1bmN0aW9uKHQpe2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlLm5leHRTaWJsaW5nKX0scik7cmV0dXJuIHUuc2F2ZT1uLHUuZ2V0VGV4dEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sdS50b1RleHRBcmVhPWZ1bmN0aW9uKCl7bigpLGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1LmdldFdyYXBwZXJFbGVtZW50KCkpLGUuc3R5bGUuZGlzcGxheT0iIixlLmZvcm0mJihWbihlLmZvcm0sInN1Ym1pdCIsbiksImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9ybS5zdWJtaXQmJihlLmZvcm0uc3VibWl0PXMpKX0sdX0sU3IucHJvdG90eXBlPXtlb2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuc3RyaW5nLmxlbmd0aH0sc29sOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMucG9zfSxwZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyl8fHZvaWQgMH0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGg/dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOnZvaWQgMH0sZWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXZhciByPWU9PXQ7ZWxzZSB2YXIgcj1lJiYodC50ZXN0P3QudGVzdChlKTp0KGUpKTtyZXR1cm4gcj8oKyt0aGlzLnBvcyxlKTp2b2lkIDB9LGVhdFdoaWxlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmVhdCh0KTspO3JldHVybiB0aGlzLnBvcz5lfSxlYXRTcGFjZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBvczsvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTspKyt0aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M+dH0sc2tpcFRvRW5kOmZ1bmN0aW9uKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofSxza2lwVG86ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuaW5kZXhPZih0LHRoaXMucG9zKTtyZXR1cm4gZT4tMT8odGhpcy5wb3M9ZSwhMCk6dm9pZCAwfSxiYWNrVXA6ZnVuY3Rpb24odCl7dGhpcy5wb3MtPXR9LGNvbHVtbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPVpuKHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlfSxpbmRlbnRhdGlvbjpmdW5jdGlvbigpe3JldHVybiBabih0aGlzLnN0cmluZyxudWxsLHRoaXMudGFiU2l6ZSl9LG1hdGNoOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBuPXRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaCh0KTtyZXR1cm4gbiYmbi5pbmRleD4wP251bGw6KG4mJmUhPT0hMSYmKHRoaXMucG9zKz1uWzBdLmxlbmd0aCksbil9dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIHI/dC50b0xvd2VyQ2FzZSgpOnR9LG89dGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLHQubGVuZ3RoKTtyZXR1cm4gaShvKT09aSh0KT8oZSE9PSExJiYodGhpcy5wb3MrPXQubGVuZ3RoKSwhMCk6dm9pZCAwfSxjdXJyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5wb3MpfX0sdC5TdHJpbmdTdHJlYW09U3IsdC5UZXh0TWFya2VyPU1yLGpuKE1yKSxNci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dmFyIHQ9dGhpcy5kb2MuY20sZT10JiYhdC5jdXJPcDtpZihlJiZpZSh0KSxZbih0aGlzLCJjbGVhciIpKXt2YXIgcj10aGlzLmZpbmQoKTtyJiZVbih0aGlzLCJjbGVhciIsci5mcm9tLHIudG8pfWZvcih2YXIgbj1udWxsLGk9bnVsbCxvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBsPXRoaXMubGluZXNbb10scz1OcihsLm1hcmtlZFNwYW5zLHRoaXMpO251bGwhPXMudG8mJihpPWJuKGwpKSxsLm1hcmtlZFNwYW5zPURyKGwubWFya2VkU3BhbnMscyksbnVsbCE9cy5mcm9tP249Ym4obCk6dGhpcy5jb2xsYXBzZWQmJiFWcih0aGlzLmRvYyxsKSYmdCYmeW4obCxyZSh0LmRpc3BsYXkpKX1pZih0JiZ0aGlzLmNvbGxhcHNlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcpZm9yKHZhciBvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBhPUdyKHQuZG9jLHRoaXMubGluZXNbb10pLHU9Yyh0LmRvYyxhKTt1PnQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYodC5kaXNwbGF5Lm1heExpbmU9YSx0LmRpc3BsYXkubWF4TGluZUxlbmd0aD11LHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCl9bnVsbCE9biYmdCYmdWUodCxuLGkrMSksdGhpcy5saW5lcy5sZW5ndGg9MCx0aGlzLmV4cGxpY2l0bHlDbGVhcmVkPSEwLHRoaXMuYXRvbWljJiZ0aGlzLmRvYy5jYW50RWRpdCYmKHRoaXMuZG9jLmNhbnRFZGl0PSExLHQmJmlyKHQpKSxlJiZvZSh0KX19LE1yLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscj0wO3I8dGhpcy5saW5lcy5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmxpbmVzW3JdLGk9TnIobi5tYXJrZWRTcGFucyx0aGlzKTtpZihudWxsIT1pLmZyb218fG51bGwhPWkudG8pe3ZhciBvPWJuKG4pO251bGwhPWkuZnJvbSYmKHQ9WWUobyxpLmZyb20pKSxudWxsIT1pLnRvJiYoZT1ZZShvLGkudG8pKX19cmV0dXJuImJvb2ttYXJrIj09dGhpcy50eXBlP3Q6dCYme2Zyb206dCx0bzplfX0sTXIucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZpbmQoKSxlPXRoaXMuZG9jLmNtO2lmKHQmJmUpeyJib29rbWFyayIhPXRoaXMudHlwZSYmKHQ9dC5mcm9tKTt2YXIgcj1nbih0aGlzLmRvYyx0LmxpbmUpO2lmKEcoZSxyKSx0LmxpbmU+PWUuZGlzcGxheS5zaG93aW5nRnJvbSYmdC5saW5lPGUuZGlzcGxheS5zaG93aW5nVG8pe2Zvcih2YXIgbj1lLmRpc3BsYXkubGluZURpdi5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKWlmKG4ubGluZU9iaj09cil7bi5vZmZzZXRIZWlnaHQhPXIuaGVpZ2h0JiZ5bihyLG4ub2Zmc2V0SGVpZ2h0KTsKYnJlYWt9YWUoZSxmdW5jdGlvbigpe2UuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD1lLmN1ck9wLmZvcmNlVXBkYXRlPWUuY3VyT3AudXBkYXRlTWF4TGluZT0hMH0pfX19LE1yLnByb3RvdHlwZS5hdHRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wO2UubWF5YmVIaWRkZW5NYXJrZXJzJiYtMSE9dGkoZS5tYXliZUhpZGRlbk1hcmtlcnMsdGhpcyl8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzfHwoZS5tYXliZVVuaGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcyl9dGhpcy5saW5lcy5wdXNoKHQpfSxNci5wcm90b3R5cGUuZGV0YWNoTGluZT1mdW5jdGlvbih0KXtpZih0aGlzLmxpbmVzLnNwbGljZSh0aSh0aGlzLmxpbmVzLHQpLDEpLCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wOyhlLm1heWJlSGlkZGVuTWFya2Vyc3x8KGUubWF5YmVIaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX19LHQuU2hhcmVkVGV4dE1hcmtlcj1BcixqbihBciksQXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3RoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITA7Zm9yKHZhciB0PTA7dDx0aGlzLm1hcmtlcnMubGVuZ3RoOysrdCl0aGlzLm1hcmtlcnNbdF0uY2xlYXIoKTtVbih0aGlzLCJjbGVhciIpfX0sQXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoKX07dmFyIHlvPXQuTGluZVdpZGdldD1mdW5jdGlvbih0LGUscil7aWYocilmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodGhpc1tuXT1yW25dKTt0aGlzLmNtPXQsdGhpcy5ub2RlPWV9O2puKHlvKSx5by5wcm90b3R5cGUuY2xlYXI9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxpbmUud2lkZ2V0cyxlPWJuKHRoaXMubGluZSk7aWYobnVsbCE9ZSYmdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdFtyXT09dGhpcyYmdC5zcGxpY2Uoci0tLDEpO3QubGVuZ3RofHwodGhpcy5saW5lLndpZGdldHM9bnVsbCk7dmFyIG49Q24odGhpcy5jbSx0aGlzLmxpbmUpPHRoaXMuY20uZG9jLnNjcm9sbFRvcDt5bih0aGlzLmxpbmUsTWF0aC5tYXgoMCx0aGlzLmxpbmUuaGVpZ2h0LVlyKHRoaXMpKSksbiYmZnIodGhpcy5jbSwwLC10aGlzLmhlaWdodCksdWUodGhpcy5jbSxlLGUrMSl9fSkseW8ucHJvdG90eXBlLmNoYW5nZWQ9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhlaWdodDt0aGlzLmhlaWdodD1udWxsO3ZhciBlPVlyKHRoaXMpLXQ7aWYoZSl7eW4odGhpcy5saW5lLHRoaXMubGluZS5oZWlnaHQrZSk7dmFyIHI9Ym4odGhpcy5saW5lKTt1ZSh0aGlzLmNtLHIscisxKX19KTt2YXIgYm89dC5MaW5lPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCxYcih0aGlzLGUpLHRoaXMuaGVpZ2h0PXI/cih0aGlzKToxfTtqbihibyksYm8ucHJvdG90eXBlLmxpbmVObz1mdW5jdGlvbigpe3JldHVybiBibih0aGlzKX07dmFyIHhvPXt9O2ZuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZXMubGVuZ3RofSxyZW1vdmVJbm5lcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LG49dCtlO24+cjsrK3Ipe3ZhciBpPXRoaXMubGluZXNbcl07dGhpcy5oZWlnaHQtPWkuaGVpZ2h0LFpyKGkpLFVuKGksImRlbGV0ZSIpfXRoaXMubGluZXMuc3BsaWNlKHQsZSl9LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe3Quc3BsaWNlLmFwcGx5KHQsW3QubGVuZ3RoLDBdLmNvbmNhdCh0aGlzLmxpbmVzKSl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmhlaWdodCs9cix0aGlzLmxpbmVzPXRoaXMubGluZXMuc2xpY2UoMCx0KS5jb25jYXQoZSkuY29uY2F0KHRoaXMubGluZXMuc2xpY2UodCkpO2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7aT5uOysrbillW25dLnBhcmVudD10aGlzfSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQrZTtuPnQ7Kyt0KWlmKHIodGhpcy5saW5lc1t0XSkpcmV0dXJuITB9fSxobi5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5zaXplLT1lO2Zvcih2YXIgcj0wO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmNoaWxkcmVuW3JdLGk9bi5jaHVua1NpemUoKTtpZihpPnQpe3ZhciBvPU1hdGgubWluKGUsaS10KSxsPW4uaGVpZ2h0O2lmKG4ucmVtb3ZlSW5uZXIodCxvKSx0aGlzLmhlaWdodC09bC1uLmhlaWdodCxpPT1vJiYodGhpcy5jaGlsZHJlbi5zcGxpY2Uoci0tLDEpLG4ucGFyZW50PW51bGwpLDA9PShlLT1vKSlicmVhazt0PTB9ZWxzZSB0LT1pfWlmKHRoaXMuc2l6ZS1lPDI1KXt2YXIgcz1bXTt0aGlzLmNvbGxhcHNlKHMpLHRoaXMuY2hpbGRyZW49W25ldyBmbihzKV0sdGhpcy5jaGlsZHJlblswXS5wYXJlbnQ9dGhpc319LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7cj5lOysrZSl0aGlzLmNoaWxkcmVuW2VdLmNvbGxhcHNlKHQpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbih0LGUscil7dGhpcy5zaXplKz1lLmxlbmd0aCx0aGlzLmhlaWdodCs9cjtmb3IodmFyIG49MCxpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRoaXMuY2hpbGRyZW5bbl0sbD1vLmNodW5rU2l6ZSgpO2lmKGw+PXQpe2lmKG8uaW5zZXJ0SW5uZXIodCxlLHIpLG8ubGluZXMmJm8ubGluZXMubGVuZ3RoPjUwKXtmb3IoO28ubGluZXMubGVuZ3RoPjUwOyl7dmFyIHM9by5saW5lcy5zcGxpY2Uoby5saW5lcy5sZW5ndGgtMjUsMjUpLGE9bmV3IGZuKHMpO28uaGVpZ2h0LT1hLmhlaWdodCx0aGlzLmNoaWxkcmVuLnNwbGljZShuKzEsMCxhKSxhLnBhcmVudD10aGlzfXRoaXMubWF5YmVTcGlsbCgpfWJyZWFrfXQtPWx9fSxtYXliZVNwaWxsOmZ1bmN0aW9uKCl7aWYoISh0aGlzLmNoaWxkcmVuLmxlbmd0aDw9MTApKXt2YXIgdD10aGlzO2Rve3ZhciBlPXQuY2hpbGRyZW4uc3BsaWNlKHQuY2hpbGRyZW4ubGVuZ3RoLTUsNSkscj1uZXcgaG4oZSk7aWYodC5wYXJlbnQpe3Quc2l6ZS09ci5zaXplLHQuaGVpZ2h0LT1yLmhlaWdodDt2YXIgbj10aSh0LnBhcmVudC5jaGlsZHJlbix0KTt0LnBhcmVudC5jaGlsZHJlbi5zcGxpY2UobisxLDAscil9ZWxzZXt2YXIgaT1uZXcgaG4odC5jaGlsZHJlbik7aS5wYXJlbnQ9dCx0LmNoaWxkcmVuPVtpLHJdLHQ9aX1yLnBhcmVudD10LnBhcmVudH13aGlsZSh0LmNoaWxkcmVuLmxlbmd0aD4xMCk7dC5wYXJlbnQubWF5YmVTcGlsbCgpfX0saXRlck46ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD50KXt2YXIgcz1NYXRoLm1pbihlLGwtdCk7aWYoby5pdGVyTih0LHMscikpcmV0dXJuITA7aWYoMD09KGUtPXMpKWJyZWFrO3Q9MH1lbHNlIHQtPWx9fX07dmFyIENvPTAsd289dC5Eb2M9ZnVuY3Rpb24odCxlLHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHdvKSlyZXR1cm4gbmV3IHdvKHQsZSxyKTtudWxsPT1yJiYocj0wKSxobi5jYWxsKHRoaXMsW25ldyBmbihbbmV3IGJvKCIiLG51bGwpXSldKSx0aGlzLmZpcnN0PXIsdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5jYW50RWRpdD0hMSx0aGlzLmhpc3Rvcnk9TG4oKSx0aGlzLmNsZWFuR2VuZXJhdGlvbj0xLHRoaXMuZnJvbnRpZXI9cjt2YXIgbj1ZZShyLDApO3RoaXMuc2VsPXtmcm9tOm4sdG86bixoZWFkOm4sYW5jaG9yOm4sc2hpZnQ6ITEsZXh0ZW5kOiExLGdvYWxDb2x1bW46bnVsbH0sdGhpcy5pZD0rK0NvLHRoaXMubW9kZU9wdGlvbj1lLCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9em8odCkpLGNuKHRoaXMse2Zyb206bix0bzpuLHRleHQ6dH0sbnVsbCx7aGVhZDpuLGFuY2hvcjpufSl9O3dvLnByb3RvdHlwZT1laShobi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOndvLGl0ZXI6ZnVuY3Rpb24odCxlLHIpe3I/dGhpcy5pdGVyTih0LXRoaXMuZmlyc3QsZS10LHIpOnRoaXMuaXRlck4odGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSx0KX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9ZS5sZW5ndGg7aT5uOysrbilyKz1lW25dLmhlaWdodDt0aGlzLmluc2VydElubmVyKHQtdGhpcy5maXJzdCxlLHIpfSxyZW1vdmU6ZnVuY3Rpb24odCxlKXt0aGlzLnJlbW92ZUlubmVyKHQtdGhpcy5maXJzdCxlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKTtyZXR1cm4gdD09PSExP2U6ZS5qb2luKHR8fCJcbiIpfSxzZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1ZZSh0aGlzLmZpcnN0LDApLHI9dGhpcy5maXJzdCt0aGlzLnNpemUtMTtCZSh0aGlzLHtmcm9tOmUsdG86WWUocixnbih0aGlzLHIpLnRleHQubGVuZ3RoKSx0ZXh0OnpvKHQpLG9yaWdpbjoic2V0VmFsdWUifSx7aGVhZDplLGFuY2hvcjplfSwhMCl9LHJlcGxhY2VSYW5nZTpmdW5jdGlvbih0LGUscixuKXtlPVFlKHRoaXMsZSkscj1yP1FlKHRoaXMscik6ZSxfZSh0aGlzLHQsZSxyLG4pfSxnZXRSYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49bW4odGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSkpO3JldHVybiByPT09ITE/bjpuLmpvaW4ocnx8IlxuIil9LGdldExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMaW5lSGFuZGxlKHQpO3JldHVybiBlJiZlLnRleHR9LHNldExpbmU6ZnVuY3Rpb24odCxlKXt0cih0aGlzLHQpJiZfZSh0aGlzLGUsWWUodCwwKSxRZSh0aGlzLFllKHQpKSl9LHJlbW92ZUxpbmU6ZnVuY3Rpb24odCl7dD9fZSh0aGlzLCIiLFFlKHRoaXMsWWUodC0xKSksUWUodGhpcyxZZSh0KSkpOl9lKHRoaXMsIiIsWWUoMCwwKSxRZSh0aGlzLFllKDEsMCkpKX0sZ2V0TGluZUhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdHIodGhpcyx0KT9nbih0aGlzLHQpOnZvaWQgMH0sZ2V0TGluZU51bWJlcjpmdW5jdGlvbih0KXtyZXR1cm4gYm4odCl9LGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJih0PWduKHRoaXMsdCkpLEdyKHRoaXMsdCl9LGxpbmVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LGZpcnN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0fSxsYXN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0K3RoaXMuc2l6ZS0xfSxjbGlwUG9zOmZ1bmN0aW9uKHQpe3JldHVybiBRZSh0aGlzLHQpfSxnZXRDdXJzb3I6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLnNlbDtyZXR1cm4gZT1udWxsPT10fHwiaGVhZCI9PXQ/ci5oZWFkOiJhbmNob3IiPT10P3IuYW5jaG9yOiJlbmQiPT10fHx0PT09ITE/ci50bzpyLmZyb20sWmUoZSl9LHNvbWV0aGluZ1NlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWplKHRoaXMuc2VsLmhlYWQsdGhpcy5zZWwuYW5jaG9yKX0sc2V0Q3Vyc29yOnNlKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1RZSh0aGlzLCJudW1iZXIiPT10eXBlb2YgdD9ZZSh0LGV8fDApOnQpO3I/ZXIodGhpcyxuKTpucih0aGlzLG4sbil9KSxzZXRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe25yKHRoaXMsUWUodGhpcyx0KSxRZSh0aGlzLGV8fHQpLHIpfSksZXh0ZW5kU2VsZWN0aW9uOnNlKGZ1bmN0aW9uKHQsZSxyKXtlcih0aGlzLFFlKHRoaXMsdCksZSYmUWUodGhpcyxlKSxyKX0pLGdldFNlbGVjdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRSYW5nZSh0aGlzLnNlbC5mcm9tLHRoaXMuc2VsLnRvLHQpfSxyZXBsYWNlU2VsZWN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtCZSh0aGlzLHtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8sdGV4dDp6byh0KSxvcmlnaW46cn0sZXx8ImFyb3VuZCIpfSx1bmRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywidW5kbyIpfSkscmVkbzpzZShmdW5jdGlvbigpe1ZlKHRoaXMsInJlZG8iKX0pLHNldEV4dGVuZGluZzpmdW5jdGlvbih0KXt0aGlzLnNlbC5leHRlbmQ9dH0saGlzdG9yeVNpemU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhpc3Rvcnk7cmV0dXJue3VuZG86dC5kb25lLmxlbmd0aCxyZWRvOnQudW5kb25lLmxlbmd0aH19LGNsZWFySGlzdG9yeTpmdW5jdGlvbigpe3RoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbil9LG1hcmtDbGVhbjpmdW5jdGlvbigpe3RoaXMuY2xlYW5HZW5lcmF0aW9uPXRoaXMuY2hhbmdlR2VuZXJhdGlvbigpfSxjaGFuZ2VHZW5lcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGlzdG9yeS5sYXN0T3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCx0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbn0saXNDbGVhbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb249PSh0fHx0aGlzLmNsZWFuR2VuZXJhdGlvbil9LGdldEhpc3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpIbih0aGlzLmhpc3RvcnkuZG9uZSksdW5kb25lOkhuKHRoaXMuaGlzdG9yeS51bmRvbmUpfX0sc2V0SGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmhpc3Rvcnk9TG4odGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO2UuZG9uZT10LmRvbmUuc2xpY2UoMCksZS51bmRvbmU9dC51bmRvbmUuc2xpY2UoMCl9LG1hcmtUZXh0OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVHIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSksciwicmFuZ2UiKX0sc2V0Qm9va21hcms6ZnVuY3Rpb24odCxlKXt2YXIgcj17cmVwbGFjZWRXaXRoOmUmJihudWxsPT1lLm5vZGVUeXBlP2Uud2lkZ2V0OmUpLGluc2VydExlZnQ6ZSYmZS5pbnNlcnRMZWZ0fTtyZXR1cm4gdD1RZSh0aGlzLHQpLFRyKHRoaXMsdCx0LHIsImJvb2ttYXJrIil9LGZpbmRNYXJrc0F0OmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT1bXSxyPWduKHRoaXMsdC5saW5lKS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dOyhudWxsPT1pLmZyb218fGkuZnJvbTw9dC5jaCkmJihudWxsPT1pLnRvfHxpLnRvPj10LmNoKSYmZS5wdXNoKGkubWFya2VyLnBhcmVudHx8aS5tYXJrZXIpfXJldHVybiBlfSxnZXRBbGxNYXJrczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLml0ZXIoZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKW51bGwhPXJbbl0uZnJvbSYmdC5wdXNoKHJbbl0ubWFya2VyKX0pLHR9LHBvc0Zyb21JbmRleDpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihuKXt2YXIgaT1uLnRleHQubGVuZ3RoKzE7cmV0dXJuIGk+dD8oZT10LCEwKToodC09aSwrK3Isdm9pZCAwKX0pLFFlKHRoaXMsWWUocixlKSl9LGluZGV4RnJvbVBvczpmdW5jdGlvbih0KXt0PVFlKHRoaXMsdCk7dmFyIGU9dC5jaDtyZXR1cm4gdC5saW5lPHRoaXMuZmlyc3R8fHQuY2g8MD8wOih0aGlzLml0ZXIodGhpcy5maXJzdCx0LmxpbmUsZnVuY3Rpb24odCl7ZSs9dC50ZXh0Lmxlbmd0aCsxfSksZSl9LGNvcHk6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHdvKHZuKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSksdGhpcy5tb2RlT3B0aW9uLHRoaXMuZmlyc3QpO3JldHVybiBlLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCxlLnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0LGUuc2VsPXtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8saGVhZDp0aGlzLnNlbC5oZWFkLGFuY2hvcjp0aGlzLnNlbC5hbmNob3Isc2hpZnQ6dGhpcy5zZWwuc2hpZnQsZXh0ZW5kOiExLGdvYWxDb2x1bW46dGhpcy5zZWwuZ29hbENvbHVtbn0sdCYmKGUuaGlzdG9yeS51bmRvRGVwdGg9dGhpcy5oaXN0b3J5LnVuZG9EZXB0aCxlLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpKSxlfSxsaW5rZWREb2M6ZnVuY3Rpb24odCl7dHx8KHQ9e30pO3ZhciBlPXRoaXMuZmlyc3Qscj10aGlzLmZpcnN0K3RoaXMuc2l6ZTtudWxsIT10LmZyb20mJnQuZnJvbT5lJiYoZT10LmZyb20pLG51bGwhPXQudG8mJnQudG88ciYmKHI9dC50byk7dmFyIG49bmV3IHdvKHZuKHRoaXMsZSxyKSx0Lm1vZGV8fHRoaXMubW9kZU9wdGlvbixlKTtyZXR1cm4gdC5zaGFyZWRIaXN0JiYobi5oaXN0b3J5PXRoaXMuaGlzdG9yeSksKHRoaXMubGlua2VkfHwodGhpcy5saW5rZWQ9W10pKS5wdXNoKHtkb2M6bixzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH0pLG4ubGlua2VkPVt7ZG9jOnRoaXMsaXNQYXJlbnQ6ITAsc2hhcmVkSGlzdDp0LnNoYXJlZEhpc3R9XSxufSx1bmxpbmtEb2M6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQmJihlPWUuZG9jKSx0aGlzLmxpbmtlZClmb3IodmFyIHI9MDtyPHRoaXMubGlua2VkLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGlua2VkW3JdO2lmKG4uZG9jPT1lKXt0aGlzLmxpbmtlZC5zcGxpY2UociwxKSxlLnVubGlua0RvYyh0aGlzKTticmVha319aWYoZS5oaXN0b3J5PT10aGlzLmhpc3Rvcnkpe3ZhciBpPVtlLmlkXTtkbihlLGZ1bmN0aW9uKHQpe2kucHVzaCh0LmlkKX0sITApLGUuaGlzdG9yeT1MbigpLGUuaGlzdG9yeS5kb25lPUhuKHRoaXMuaGlzdG9yeS5kb25lLGkpLGUuaGlzdG9yeS51bmRvbmU9SG4odGhpcy5oaXN0b3J5LnVuZG9uZSxpKX19LGl0ZXJMaW5rZWREb2NzOmZ1bmN0aW9uKHQpe2RuKHRoaXMsdCl9LGdldE1vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxnZXRFZGl0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbX19KSx3by5wcm90b3R5cGUuZWFjaExpbmU9d28ucHJvdG90eXBlLml0ZXI7dmFyIExvPSJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IiLnNwbGl0KCIgIik7Zm9yKHZhciBrbyBpbiB3by5wcm90b3R5cGUpd28ucHJvdG90eXBlLmhhc093blByb3BlcnR5KGtvKSYmdGkoTG8sa28pPDAmJih0LnByb3RvdHlwZVtrb109ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcy5kb2MsYXJndW1lbnRzKX19KHdvLnByb3RvdHlwZVtrb10pKTtqbih3byksdC5lX3N0b3A9UG4sdC5lX3ByZXZlbnREZWZhdWx0PXpuLHQuZV9zdG9wUHJvcGFnYXRpb249SW47dmFyIFNvLE1vPTA7dC5vbj1Hbix0Lm9mZj1Wbix0LnNpZ25hbD1Lbjt2YXIgVG89MzAsQW89dC5QYXNzPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLlBhc3MifX07JG4ucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodGhpcy5pZCksdGhpcy5pZD1zZXRUaW1lb3V0KGUsdCl9fSx0LmNvdW50Q29sdW1uPVpuO3ZhciBIbz1bIiJdLE5vPS9bXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLyxEbz0vW1x1MDMwMC1cdTAzNkZcdTA0ODMtXHUwNDg3XHUwNDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0LVx1MDVDNVx1MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEItXHUwNjVGXHUwNjcwXHUwNkQ2LVx1MDZEQ1x1MDZERi1cdTA2RTRcdTA2RTctXHUwNkU4XHUwNkVBLVx1MDZFRFx1QTY2Rlx1MURDMOKAk1x1MURGRlx1MjBEMOKAk1x1MjBGRlx1QTY3MC1cdUE2NzJcdUE2NzQtXHVBNjdEXHVBNjlGXHVkYzAwLVx1ZGZmZlx1RkUyMOKAk1x1RkUyRl0vO3QucmVwbGFjZUdldFJlY3Q9ZnVuY3Rpb24odCl7Zmk9dH07dmFyIFdvPWZ1bmN0aW9uKCl7aWYoTmkpcmV0dXJuITE7dmFyIHQ9c2koImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gdHx8ImRyYWdEcm9wImluIHR9KCk7VGk/aGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzY9PXQuY2hhckNvZGVBdChlLTEpJiYzOT09dC5jaGFyQ29kZUF0KGUpfTpJaSYmIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3JldHVybi9cLVteIFwtP118XD9bXiAhXCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfTpXaSYmL0Nocm9tZVwvKD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk/aGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZS0xKTtyZXR1cm4gcj49ODIwOCYmODIxMj49cn06V2kmJihoaT1mdW5jdGlvbih0LGUpe2lmKGU+MSYmNDU9PXQuY2hhckNvZGVBdChlLTEpKXtpZigvXHcvLnRlc3QodC5jaGFyQXQoZS0yKSkmJi9bXlwtP1wuXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITA7aWYoZT4yJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1tcZFwuLF0vLnRlc3QodC5jaGFyQXQoZSkpKXJldHVybiExfXJldHVybi9bfiEjJSYqKT0rfVxdXFx8XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZbXHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfSk7dmFyIE9vLEVvLHpvPTMhPSJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9W10sbj10Lmxlbmd0aDtuPj1lOyl7dmFyIGk9dC5pbmRleE9mKCJcbiIsZSk7LTE9PWkmJihpPXQubGVuZ3RoKTt2YXIgbz10LnNsaWNlKGUsIlxyIj09dC5jaGFyQXQoaS0xKT9pLTE6aSksbD1vLmluZGV4T2YoIlxyIik7LTEhPWw/KHIucHVzaChvLnNsaWNlKDAsbCkpLGUrPWwrMSk6KHIucHVzaChvKSxlPWkrMSl9cmV0dXJuIHJ9OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KC9cclxuP3xcbi8pfTt0LnNwbGl0TGluZXM9em87dmFyIElvPXdpbmRvdy5nZXRTZWxlY3Rpb24/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LnNlbGVjdGlvblN0YXJ0IT10LnNlbGVjdGlvbkVuZH1jYXRjaChlKXtyZXR1cm4hMX19OmZ1bmN0aW9uKHQpe3RyeXt2YXIgZT10Lm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCl9Y2F0Y2gocil7fXJldHVybiBlJiZlLnBhcmVudEVsZW1lbnQoKT09dD8wIT1lLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLGUpOiExfSxGbz1mdW5jdGlvbigpe3ZhciB0PXNpKCJkaXYiKTtyZXR1cm4ib25jb3B5ImluIHQ/ITA6KHQuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCJyZXR1cm47IiksImZ1bmN0aW9uIj09dHlwZW9mIHQub25jb3B5KX0oKSxQbz17MzoiRW50ZXIiLDg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkN0cmwiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjIiwzMjoiU3BhY2UiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJMZWZ0IiwzODoiVXAiLDM5OiJSaWdodCIsNDA6IkRvd24iLDQ0OiJQcmludFNjcm4iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDU5OiI7Iiw5MToiTW9kIiw5MjoiTW9kIiw5MzoiTW9kIiwxMDk6Ii0iLDEwNzoiPSIsMTI3OiJEZWxldGUiLDE4NjoiOyIsMTg3OiI9IiwxODg6IiwiLDE4OToiLSIsMTkwOiIuIiwxOTE6Ii8iLDE5MjoiYCIsMjE5OiJbIiwyMjA6IlxcIiwyMjE6Il0iLDIyMjoiJyIsNjMyNzY6IlBhZ2VVcCIsNjMyNzc6IlBhZ2VEb3duIiw2MzI3NToiRW5kIiw2MzI3MzoiSG9tZSIsNjMyMzQ6IkxlZnQiLDYzMjMyOiJVcCIsNjMyMzU6IlJpZ2h0Iiw2MzIzMzoiRG93biIsNjMzMDI6Ikluc2VydCIsNjMyNzI6IkRlbGV0ZSJ9O3Qua2V5TmFtZXM9UG8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDsxMD50O3QrKylQb1t0KzQ4XT1TdHJpbmcodCk7Zm9yKHZhciB0PTY1OzkwPj10O3QrKylQb1t0XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2Zvcih2YXIgdD0xOzEyPj10O3QrKylQb1t0KzExMV09UG9bdCs2MzIzNV09IkYiK3R9KCk7dmFyIFJvLEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gMjU1Pj10P2UuY2hhckF0KHQpOnQ+PTE0MjQmJjE1MjQ+PXQ/IlIiOnQ+PTE1MzYmJjE3OTE+PXQ/ci5jaGFyQXQodC0xNTM2KTp0Pj0xNzkyJiYyMjIwPj10PyJyIjoiTCJ9dmFyIGU9ImJiYmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJzc3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTEwiLHI9InJycnJycnJycnJycixyTk5tbW1tbW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tcnJycnJycm5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbW1tbW1tTm1tbW1ycnJycnJycnJycnJycnJycnIiLG49L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLyxpPS9bc3R3Tl0vLG89L1tMUnJdLyxsPS9bTGIxbl0vLHM9L1sxbl0vLGE9IkwiO3JldHVybiBmdW5jdGlvbihlKXtpZighbi50ZXN0KGUpKXJldHVybiExO2Zvcih2YXIgcix1PWUubGVuZ3RoLGM9W10sZj0wO3U+ZjsrK2YpYy5wdXNoKHI9dChlLmNoYXJDb2RlQXQoZikpKTtmb3IodmFyIGY9MCxoPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsibSI9PXI/Y1tmXT1oOmg9cn1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiMSI9PXImJiJyIj09ZD9jW2ZdPSJuIjpvLnRlc3QocikmJihkPXIsInIiPT1yJiYoY1tmXT0iUiIpKX1mb3IodmFyIGY9MSxoPWNbMF07dS0xPmY7KytmKXt2YXIgcj1jW2ZdOyIrIj09ciYmIjEiPT1oJiYiMSI9PWNbZisxXT9jW2ZdPSIxIjoiLCIhPXJ8fGghPWNbZisxXXx8IjEiIT1oJiYibiIhPWh8fChjW2ZdPWgpLGg9cn1mb3IodmFyIGY9MDt1PmY7KytmKXt2YXIgcj1jW2ZdO2lmKCIsIj09ciljW2ZdPSJOIjtlbHNlIGlmKCIlIj09cil7Zm9yKHZhciBwPWYrMTt1PnAmJiIlIj09Y1twXTsrK3ApO2Zvcih2YXIgZz1mJiYiISI9PWNbZi0xXXx8dS0xPnAmJiIxIj09Y1twXT8iMSI6Ik4iLG09ZjtwPm07KyttKWNbbV09ZztmPXAtMX19Zm9yKHZhciBmPTAsZD1hO3U+ZjsrK2Ype3ZhciByPWNbZl07IkwiPT1kJiYiMSI9PXI/Y1tmXT0iTCI6by50ZXN0KHIpJiYoZD1yKX1mb3IodmFyIGY9MDt1PmY7KytmKWlmKGkudGVzdChjW2ZdKSl7Zm9yKHZhciBwPWYrMTt1PnAmJmkudGVzdChjW3BdKTsrK3ApO2Zvcih2YXIgdj0iTCI9PShmP2NbZi0xXTphKSx5PSJMIj09KHUtMT5wP2NbcF06YSksZz12fHx5PyJMIjoiUiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfWZvcih2YXIgYix4PVtdLGY9MDt1PmY7KWlmKGwudGVzdChjW2ZdKSl7dmFyIEM9Zjtmb3IoKytmO3U+ZiYmbC50ZXN0KGNbZl0pOysrZik7eC5wdXNoKHtmcm9tOkMsdG86ZixsZXZlbDowfSl9ZWxzZXt2YXIgdz1mLEw9eC5sZW5ndGg7Zm9yKCsrZjt1PmYmJiJMIiE9Y1tmXTsrK2YpO2Zvcih2YXIgbT13O2Y+bTspaWYocy50ZXN0KGNbbV0pKXttPncmJnguc3BsaWNlKEwsMCx7ZnJvbTp3LHRvOm0sbGV2ZWw6MX0pO3ZhciBrPW07Zm9yKCsrbTtmPm0mJnMudGVzdChjW21dKTsrK20pO3guc3BsaWNlKEwsMCx7ZnJvbTprLHRvOm0sbGV2ZWw6Mn0pLHc9bX1lbHNlKyttO2Y+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86ZixsZXZlbDoxfSl9cmV0dXJuIDE9PXhbMF0ubGV2ZWwmJihiPWUubWF0Y2goL15ccysvKSkmJih4WzBdLmZyb209YlswXS5sZW5ndGgseC51bnNoaWZ0KHtmcm9tOjAsdG86YlswXS5sZW5ndGgsbGV2ZWw6MH0pKSwxPT1Rbih4KS5sZXZlbCYmKGI9ZS5tYXRjaCgvXHMrJC8pKSYmKFFuKHgpLnRvLT1iWzBdLmxlbmd0aCx4LnB1c2goe2Zyb206dS1iWzBdLmxlbmd0aCx0bzp1LGxldmVsOjB9KSkseFswXS5sZXZlbCE9UW4oeCkubGV2ZWwmJngucHVzaCh7ZnJvbTp1LHRvOnUsbGV2ZWw6eFswXS5sZXZlbH0pLHh9fSgpO3JldHVybiB0LnZlcnNpb249IjMuMjAuMCIsdH0oKTtQSwcIxlyRsL+vAQC/rwEAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAc3RhdGljXGxpYlxoaWdobGlnaHQubWluLmpzdmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChvKXtyZXR1cm4gby5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gYihwKXtmb3IodmFyIG89cC5maXJzdENoaWxkO287bz1vLm5leHRTaWJsaW5nKXtpZihvLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJDT0RFIil7cmV0dXJuIG99aWYoIShvLm5vZGVUeXBlPT0zJiZvLm5vZGVWYWx1ZS5tYXRjaCgvXHMrLykpKXticmVha319fWZ1bmN0aW9uIGgocCxvKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHAuY2hpbGROb2RlcyxmdW5jdGlvbihxKXtpZihxLm5vZGVUeXBlPT0zKXtyZXR1cm4gbz9xLm5vZGVWYWx1ZS5yZXBsYWNlKC9cbi9nLCIiKTpxLm5vZGVWYWx1ZX1pZihxLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJCUiIpe3JldHVybiJcbiJ9cmV0dXJuIGgocSxvKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIGEocSl7dmFyIHA9KHEuY2xhc3NOYW1lKyIgIisocS5wYXJlbnROb2RlP3EucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIpKS5zcGxpdCgvXHMrLyk7cD1wLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIil9KTtmb3IodmFyIG89MDtvPHAubGVuZ3RoO28rKyl7aWYoZVtwW29dXXx8cFtvXT09Im5vLWhpZ2hsaWdodCIpe3JldHVybiBwW29dfX19ZnVuY3Rpb24gYyhxKXt2YXIgbz1bXTsoZnVuY3Rpb24gcChyLHMpe2Zvcih2YXIgdD1yLmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpe2lmKHQubm9kZVR5cGU9PTMpe3MrPXQubm9kZVZhbHVlLmxlbmd0aH1lbHNle2lmKHQubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cys9MX1lbHNle2lmKHQubm9kZVR5cGU9PTEpe28ucHVzaCh7ZXZlbnQ6InN0YXJ0IixvZmZzZXQ6cyxub2RlOnR9KTtzPXAodCxzKTtvLnB1c2goe2V2ZW50OiJzdG9wIixvZmZzZXQ6cyxub2RlOnR9KX19fX1yZXR1cm4gc30pKHEsMCk7cmV0dXJuIG99ZnVuY3Rpb24gaihwLHIsdil7dmFyIHE9MDt2YXIgeT0iIjt2YXIgcz1bXTtmdW5jdGlvbiB1KCl7aWYoIXAubGVuZ3RofHwhci5sZW5ndGgpe3JldHVybiBwLmxlbmd0aD9wOnJ9aWYocFswXS5vZmZzZXQhPXJbMF0ub2Zmc2V0KXtyZXR1cm4ocFswXS5vZmZzZXQ8clswXS5vZmZzZXQpP3A6cn1yZXR1cm4gclswXS5ldmVudD09InN0YXJ0Ij9wOnJ9ZnVuY3Rpb24gdChBKXtmdW5jdGlvbiB6KEIpe3JldHVybiIgIitCLm5vZGVOYW1lKyc9IicrbChCLnZhbHVlKSsnIid9eSs9IjwiK0Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKStBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoQS5hdHRyaWJ1dGVzLHopLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB4KHope3krPSI8LyIrei5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKyI+In1mdW5jdGlvbiBvKHopeyh6LmV2ZW50PT0ic3RhcnQiP3Q6eCkoei5ub2RlKX13aGlsZShwLmxlbmd0aHx8ci5sZW5ndGgpe3ZhciB3PXUoKTt5Kz1sKHYuc3Vic3RyKHEsd1swXS5vZmZzZXQtcSkpO3E9d1swXS5vZmZzZXQ7aWYodz09cCl7cy5yZXZlcnNlKCkuZm9yRWFjaCh4KTtkb3tvKHcuc3BsaWNlKDAsMSlbMF0pO3c9dSgpfXdoaWxlKHc9PXAmJncubGVuZ3RoJiZ3WzBdLm9mZnNldD09cSk7cy5yZXZlcnNlKCkuZm9yRWFjaCh0KX1lbHNle2lmKHdbMF0uZXZlbnQ9PSJzdGFydCIpe3MucHVzaCh3WzBdLm5vZGUpfWVsc2V7cy5wb3AoKX1vKHcuc3BsaWNlKDAsMSlbMF0pfX1yZXR1cm4geStsKHYuc3Vic3RyKHEpKX1mdW5jdGlvbiBmKHIpe2Z1bmN0aW9uIG8ocyl7cmV0dXJuKHMmJnMuc291cmNlKXx8c31mdW5jdGlvbiBwKHQscyl7cmV0dXJuIFJlZ0V4cChvKHQpLCJtIisoci5jST8iaSI6IiIpKyhzPyJnIjoiIikpfWZ1bmN0aW9uIHEoeix4KXtpZih6LmNvbXBpbGVkKXtyZXR1cm59ei5jb21waWxlZD10cnVlO3ZhciB1PVtdO2lmKHouayl7dmFyIHM9e307ZnVuY3Rpb24gQShCLHQpe2lmKHIuY0kpe3Q9dC50b0xvd2VyQ2FzZSgpfXQuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBEPUMuc3BsaXQoInwiKTtzW0RbMF1dPVtCLERbMV0/TnVtYmVyKERbMV0pOjFdO3UucHVzaChEWzBdKX0pfXoubFI9cCh6Lmx8fCJcXGIiK2hsanMuSVIrIlxcYig/IVxcLikiLHRydWUpO2lmKHR5cGVvZiB6Lms9PSJzdHJpbmciKXtBKCJrZXl3b3JkIix6LmspfWVsc2V7Zm9yKHZhciB5IGluIHouayl7aWYoIXouay5oYXNPd25Qcm9wZXJ0eSh5KSl7Y29udGludWV9QSh5LHoua1t5XSl9fXouaz1zfWlmKHgpe2lmKHouYldLKXt6LmI9IlxcYigiK3Uuam9pbigifCIpKyIpXFxiKD8hXFwuKVxccyoifXouYlI9cCh6LmI/ei5iOiJcXEJ8XFxiIik7aWYoIXouZSYmIXouZVcpe3ouZT0iXFxCfFxcYiJ9aWYoei5lKXt6LmVSPXAoei5lKX16LnRFPW8oei5lKXx8IiI7aWYoei5lVyYmeC50RSl7ei50RSs9KHouZT8ifCI6IiIpK3gudEV9fWlmKHouaSl7ei5pUj1wKHouaSl9aWYoei5yPT09dW5kZWZpbmVkKXt6LnI9MX1pZighei5jKXt6LmM9W119Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7aWYoei5jW3ddPT0ic2VsZiIpe3ouY1t3XT16fXEoei5jW3ddLHopfWlmKHouc3RhcnRzKXtxKHouc3RhcnRzLHgpfXZhciB2PVtdO2Zvcih2YXIgdz0wO3c8ei5jLmxlbmd0aDt3Kyspe3YucHVzaChvKHouY1t3XS5iKSl9aWYoei50RSl7di5wdXNoKG8oei50RSkpfWlmKHouaSl7di5wdXNoKG8oei5pKSl9ei50PXYubGVuZ3RoP3Aodi5qb2luKCJ8IiksdHJ1ZSk6e2V4ZWM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9fX1xKHIpfWZ1bmN0aW9uIGQoRSxHLEMsTSl7ZnVuY3Rpb24gbyhyLFApe2Zvcih2YXIgTz0wO088UC5jLmxlbmd0aDtPKyspe3ZhciBOPVAuY1tPXS5iUi5leGVjKHIpO2lmKE4mJk4uaW5kZXg9PTApe3JldHVybiBQLmNbT119fX1mdW5jdGlvbiBzKE4scil7aWYoTi5lJiZOLmVSLnRlc3Qocikpe3JldHVybiBOfWlmKE4uZVcpe3JldHVybiBzKE4ucGFyZW50LHIpfX1mdW5jdGlvbiB0KHIsTil7cmV0dXJuICFDJiZOLmkmJk4uaVIudGVzdChyKX1mdW5jdGlvbiB5KE8scil7dmFyIE49SC5jST9yWzBdLnRvTG93ZXJDYXNlKCk6clswXTtyZXR1cm4gTy5rLmhhc093blByb3BlcnR5KE4pJiZPLmtbTl19ZnVuY3Rpb24gSSgpe3ZhciBOPWwodyk7aWYoIUIuayl7cmV0dXJuIE59dmFyIHI9IiI7dmFyIFE9MDtCLmxSLmxhc3RJbmRleD0wO3ZhciBPPUIubFIuZXhlYyhOKTt3aGlsZShPKXtyKz1OLnN1YnN0cihRLE8uaW5kZXgtUSk7dmFyIFA9eShCLE8pO2lmKFApe3YrPVBbMV07cis9JzxzcGFuIGNsYXNzPSInK1BbMF0rJyI+JytPWzBdKyI8L3NwYW4+In1lbHNle3IrPU9bMF19UT1CLmxSLmxhc3RJbmRleDtPPUIubFIuZXhlYyhOKX1yZXR1cm4gcitOLnN1YnN0cihRKX1mdW5jdGlvbiB6KCl7aWYoQi5zTCYmIWVbQi5zTF0pe3JldHVybiBsKHcpfXZhciBOPUIuc3ViTGFuZ3VhZ2VNb2RlPT0iY29udGludW91cyI/Qi50b3A6dW5kZWZpbmVkO3ZhciByPUIuc0w/ZChCLnNMLHcsdHJ1ZSxOKTpnKHcpO2lmKEIucj4wKXt2Kz1yLmtleXdvcmRfY291bnQ7QSs9ci5yfUIudG9wPXIudG9wO3JldHVybic8c3BhbiBjbGFzcz0iJytyLmxhbmd1YWdlKyciPicrci52YWx1ZSsiPC9zcGFuPiJ9ZnVuY3Rpb24gTCgpe3JldHVybiBCLnNMIT09dW5kZWZpbmVkP3ooKTpJKCl9ZnVuY3Rpb24gSyhPLHIpe3ZhciBOPU8uY04/JzxzcGFuIGNsYXNzPSInK08uY04rJyI+JzoiIjtpZihPLnJCKXt4Kz1OO3c9IiJ9ZWxzZXtpZihPLmVCKXt4Kz1sKHIpK047dz0iIn1lbHNle3grPU47dz1yfX1CPU9iamVjdC5jcmVhdGUoTyx7cGFyZW50Ont2YWx1ZTpCfX0pfWZ1bmN0aW9uIEQoTixyKXt3Kz1OO2lmKHI9PT11bmRlZmluZWQpe3grPUwoKTtyZXR1cm4gMH12YXIgUD1vKHIsQik7aWYoUCl7eCs9TCgpO0soUCxyKTtyZXR1cm4gUC5yQj8wOnIubGVuZ3RofXZhciBRPXMoQixyKTtpZihRKXt2YXIgTz1CO2lmKCEoTy5yRXx8Ty5lRSkpe3crPXJ9eCs9TCgpO2Rve2lmKEIuY04pe3grPSI8L3NwYW4+In1BKz1CLnI7Qj1CLnBhcmVudH13aGlsZShCIT1RLnBhcmVudCk7aWYoTy5lRSl7eCs9bChyKX13PSIiO2lmKFEuc3RhcnRzKXtLKFEuc3RhcnRzLCIiKX1yZXR1cm4gTy5yRT8wOnIubGVuZ3RofWlmKHQocixCKSl7dGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtICInK3IrJyIgZm9yIG1vZGUgIicrKEIuY058fCI8dW5uYW1lZD4iKSsnIicpfXcrPXI7cmV0dXJuIHIubGVuZ3RofHwxfXZhciBIPWVbRV07aWYoIUgpe3Rocm93IG5ldyBFcnJvcignVW5rbm93biBsYW5ndWFnZTogIicrRSsnIicpfWYoSCk7dmFyIEI9TXx8SDt2YXIgeD0iIjtmb3IodmFyIEY9QjtGIT1IO0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3g9JzxzcGFuIGNsYXNzPSInK0YuY04rJyI+Jyt4fX12YXIgdz0iIjt2YXIgQT0wO3ZhciB2PTA7dHJ5e3ZhciB1LHEscD0wO3doaWxlKHRydWUpe0IudC5sYXN0SW5kZXg9cDt1PUIudC5leGVjKEcpO2lmKCF1KXticmVha31xPUQoRy5zdWJzdHIocCx1LmluZGV4LXApLHVbMF0pO3A9dS5pbmRleCtxfUQoRy5zdWJzdHIocCkpO2Zvcih2YXIgRj1CO0YucGFyZW50O0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3grPSI8L3NwYW4+In19cmV0dXJue3I6QSxrZXl3b3JkX2NvdW50OnYsdmFsdWU6eCxsYW5ndWFnZTpFLHRvcDpCfX1jYXRjaChKKXtpZihKLm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpIT0tMSl7cmV0dXJue3I6MCxrZXl3b3JkX2NvdW50OjAsdmFsdWU6bChHKX19ZWxzZXt0aHJvdyBKfX19ZnVuY3Rpb24gZyhzKXt2YXIgbz17a2V5d29yZF9jb3VudDowLHI6MCx2YWx1ZTpsKHMpfTt2YXIgcT1vO2Zvcih2YXIgcCBpbiBlKXtpZighZS5oYXNPd25Qcm9wZXJ0eShwKSl7Y29udGludWV9dmFyIHI9ZChwLHMsZmFsc2UpO3IubGFuZ3VhZ2U9cDtpZihyLmtleXdvcmRfY291bnQrci5yPnEua2V5d29yZF9jb3VudCtxLnIpe3E9cn1pZihyLmtleXdvcmRfY291bnQrci5yPm8ua2V5d29yZF9jb3VudCtvLnIpe3E9bztvPXJ9fWlmKHEubGFuZ3VhZ2Upe28uc2Vjb25kX2Jlc3Q9cX1yZXR1cm4gb31mdW5jdGlvbiBpKHEscCxvKXtpZihwKXtxPXEucmVwbGFjZSgvXigoPFtePl0rPnxcdCkrKS9nbSxmdW5jdGlvbihyLHYsdSx0KXtyZXR1cm4gdi5yZXBsYWNlKC9cdC9nLHApfSl9aWYobyl7cT1xLnJlcGxhY2UoL1xuL2csIjxicj4iKX1yZXR1cm4gcX1mdW5jdGlvbiBtKHIsdSxwKXt2YXIgdj1oKHIscCk7dmFyIHQ9YShyKTtpZih0PT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJufXZhciB3PXQ/ZCh0LHYsdHJ1ZSk6Zyh2KTt0PXcubGFuZ3VhZ2U7dmFyIG89YyhyKTtpZihvLmxlbmd0aCl7dmFyIHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIik7cS5pbm5lckhUTUw9dy52YWx1ZTt3LnZhbHVlPWoobyxjKHEpLHYpfXcudmFsdWU9aSh3LnZhbHVlLHUscCk7dmFyIHM9ci5jbGFzc05hbWU7aWYoIXMubWF0Y2goIihcXHN8XikobGFuZ3VhZ2UtKT8iK3QrIihcXHN8JCkiKSl7cz1zPyhzKyIgIit0KTp0fXIuaW5uZXJIVE1MPXcudmFsdWU7ci5jbGFzc05hbWU9cztyLnJlc3VsdD17bGFuZ3VhZ2U6dCxrdzp3LmtleXdvcmRfY291bnQscmU6dy5yfTtpZih3LnNlY29uZF9iZXN0KXtyLnNlY29uZF9iZXN0PXtsYW5ndWFnZTp3LnNlY29uZF9iZXN0Lmxhbmd1YWdlLGt3Oncuc2Vjb25kX2Jlc3Qua2V5d29yZF9jb3VudCxyZTp3LnNlY29uZF9iZXN0LnJ9fX1mdW5jdGlvbiBuKCl7aWYobi5jYWxsZWQpe3JldHVybn1uLmNhbGxlZD10cnVlO0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIiksYikuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24obyl7bShvLGhsanMudGFiUmVwbGFjZSl9KX1mdW5jdGlvbiBrKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLG4sZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixuLGZhbHNlKX12YXIgZT17fTt0aGlzLkxBTkdVQUdFUz1lO3RoaXMuaGlnaGxpZ2h0PWQ7dGhpcy5oaWdobGlnaHRBdXRvPWc7dGhpcy5maXhNYXJrdXA9aTt0aGlzLmhpZ2hsaWdodEJsb2NrPW07dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW47dGhpcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPWs7dGhpcy5JUj0iW2EtekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSIoXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcYlxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bLStdP1xcZCspPykiO3RoaXMuQk5SPSJcXGIoMGJbMDFdKykiO3RoaXMuUlNSPSIhfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFwqfFxcKj18XFwrfFxcKz18LHxcXC58LXwtPXwvfC89fDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXD98XFxbfFxce3xcXCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iO3RoaXMuQkU9e2I6IlxcXFxbXFxzXFxTXSIscjowfTt0aGlzLkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlt0aGlzLkJFXSxyOjB9O3RoaXMuUVNNPXtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5DTENNPXtjTjoiY29tbWVudCIsYjoiLy8iLGU6IiQifTt0aGlzLkNCTENMTT17Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8ifTt0aGlzLkhDTT17Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQifTt0aGlzLk5NPXtjTjoibnVtYmVyIixiOnRoaXMuTlIscjowfTt0aGlzLkNOTT17Y046Im51bWJlciIsYjp0aGlzLkNOUixyOjB9O3RoaXMuQk5NPXtjTjoibnVtYmVyIixiOnRoaXMuQk5SLHI6MH07dGhpcy5SRUdFWFBfTU9ERT17Y046InJlZ2V4cCIsYjovXC8vLGU6L1wvW2dpbV0qLyxpOi9cbi8sYzpbdGhpcy5CRSx7YjovXFsvLGU6L1xdLyxyOjAsYzpbdGhpcy5CRV19XX07dGhpcy5pbmhlcml0PWZ1bmN0aW9uKHEscil7dmFyIG89e307Zm9yKHZhciBwIGluIHEpe29bcF09cVtwXX1pZihyKXtmb3IodmFyIHAgaW4gcil7b1twXT1yW3BdfX1yZXR1cm4gb319KCk7aGxqcy5MQU5HVUFHRVMuYmFzaD1mdW5jdGlvbihhKXt2YXIgYz17Y046InZhcmlhYmxlIixiOi9cJFtcd1xkI0BdW1x3XGRfXSovfTt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFx7KC4qPylcfS99O3ZhciBlPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOlthLkJFLGMsYix7Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfV0scjowfTt2YXIgZD17Y046InN0cmluZyIsYjovJy8sZTovJy8scjowfTtyZXR1cm57bDovLT9bYS16XSsvLGs6e2tleXdvcmQ6ImlmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciBicmVhayBjb250aW51ZSB3aGlsZSBpbiBkbyBkb25lIGV4aXQgcmV0dXJuIHNldCBkZWNsYXJlIGNhc2UgZXNhYyBleHBvcnQgZXhlYyIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSIsYnVpbHRfaW46InByaW50ZiBlY2hvIHJlYWQgY2QgcHdkIHB1c2hkIHBvcGQgZGlycyBsZXQgZXZhbCB1bnNldCB0eXBlc2V0IHJlYWRvbmx5IGdldG9wdHMgc291cmNlIHNob3B0IGNhbGxlciB0eXBlIGhhc2ggYmluZCBoZWxwIHN1ZG8iLG9wZXJhdG9yOiItbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEifSxjOlt7Y046InNoZWJhbmciLGI6L14jIVteXG5dK3NoXHMqJC8scjoxMH0se2NOOiJmdW5jdGlvbiIsYjovXHdbXHdcZF9dKlxzKlwoXHMqXClccypcey8sckI6dHJ1ZSxjOlt7Y046InRpdGxlIixiOi9cd1tcd1xkX10qL31dLHI6MH0sYS5IQ00sYS5OTSxlLGQsYyxiXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmNzPWZ1bmN0aW9uKGEpe3JldHVybntrOiJhYnN0cmFjdCBhcyBiYXNlIGJvb2wgYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2hlY2tlZCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWNpbWFsIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmFsc2UgZmluYWxseSBmaXhlZCBmbG9hdCBmb3IgZm9yZWFjaCBnb3RvIGlmIGltcGxpY2l0IGluIGludCBpbnRlcmZhY2UgaW50ZXJuYWwgaXMgbG9jayBsb25nIG5hbWVzcGFjZSBuZXcgbnVsbCBvYmplY3Qgb3BlcmF0b3Igb3V0IG92ZXJyaWRlIHBhcmFtcyBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmVhZG9ubHkgcmVmIHJldHVybiBzYnl0ZSBzZWFsZWQgc2hvcnQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVpbnQgdWxvbmcgdW5jaGVja2VkIHVuc2FmZSB1c2hvcnQgdXNpbmcgdmlydHVhbCB2b2xhdGlsZSB2b2lkIHdoaWxlIGFzeW5jIGF3YWl0IGFzY2VuZGluZyBkZXNjZW5kaW5nIGZyb20gZ2V0IGdyb3VwIGludG8gam9pbiBsZXQgb3JkZXJieSBwYXJ0aWFsIHNlbGVjdCBzZXQgdmFsdWUgdmFyIHdoZXJlIHlpZWxkIixjOlt7Y046ImNvbW1lbnQiLGI6Ii8vLyIsZToiJCIsckI6dHJ1ZSxjOlt7Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+In0se2NOOiJ4bWxEb2NUYWciLGI6IjwvPyIsZToiPiJ9XX0sYS5DTENNLGEuQ0JMQ0xNLHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIixrOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSByZWdpb24gZW5kcmVnaW9uIHByYWdtYSBjaGVja3N1bSJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIicsYzpbe2I6JyIiJ31dfSxhLkFTTSxhLlFTTSxhLkNOTV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5ydWJ5PWZ1bmN0aW9uKGUpe3ZhciBhPSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGo9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBnPXtrZXl3b3JkOiJhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyBpZiBCRUdJTiByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuIG5leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgbmlsIGVsc2UgYnJlYWsgdW5kZWYgbm90IHN1cGVyIGNsYXNzIGNhc2UgcmVxdWlyZSB5aWVsZCBhbGlhcyB3aGlsZSBlbnN1cmUgZWxzaWYgb3IgaW5jbHVkZSJ9O3ZhciBjPXtjTjoieWFyZG9jdGFnIixiOiJAW0EtWmEtel0rIn07dmFyIGs9W3tjTjoiY29tbWVudCIsYjoiIyIsZToiJCIsYzpbY119LHtjTjoiY29tbWVudCIsYjoiXlxcPWJlZ2luIixlOiJeXFw9ZW5kIixjOltjXSxyOjEwfSx7Y046ImNvbW1lbnQiLGI6Il5fX0VORF9fIixlOiJcXG4kIn1dO3ZhciBkPXtjTjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6YSxrOmd9O3ZhciBpPVtlLkJFLGRdO3ZhciBiPVt7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6aSxyOjB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXCgiLGU6IlxcKSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddP3siLGU6In0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddPzwiLGU6Ij4iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LyIsZToiLyIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPy0iLGU6Ii0iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFx8IixlOiJcXHwiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjovXEJcPyhcXFxkezEsM318XFx4W0EtRmEtZjAtOV17MSwyfXxcXHVbQS1GYS1mMC05XXs0fXxcXD9cUylcYi99XTt2YXIgaD17Y046ImZ1bmN0aW9uIixiV0s6dHJ1ZSxlOiIgfCR8OyIsazoiZGVmIixjOlt7Y046InRpdGxlIixiOmosbDphLGs6Z30se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixsOmEsazpnfV0uY29uY2F0KGspfTt2YXIgZj1rLmNvbmNhdChiLmNvbmNhdChbe2NOOiJjbGFzcyIsYldLOnRydWUsZToiJHw7IixrOiJjbGFzcyBtb2R1bGUiLGM6W3tjTjoidGl0bGUiLGI6IltBLVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixyOjB9LHtjTjoiaW5oZXJpdGFuY2UiLGI6IjxcXHMqIixjOlt7Y046InBhcmVudCIsYjoiKCIrZS5JUisiOjopPyIrZS5JUn1dfV0uY29uY2F0KGspfSxoLHtjTjoiY29uc3RhbnQiLGI6Iig6Oik/KFxcYltBLVpdXFx3Kig6Oik/KSsiLHI6MH0se2NOOiJzeW1ib2wiLGI6IjoiLGM6Yi5jb25jYXQoW3tiOmp9XSkscjowfSx7Y046InN5bWJvbCIsYjphKyI6IixyOjB9LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtjTjoidmFyaWFibGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSJ9LHtiOiIoIitlLlJTUisiKVxccyoiLGM6ay5jb25jYXQoW3tjTjoicmVnZXhwIixiOiIvIixlOiIvW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlcnsiLGU6In1bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyXFwoIixlOiJcXClbYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyISIsZToiIVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXFsiLGU6IlxcXVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfV0pLHI6MH1dKSk7ZC5jPWY7aC5jWzFdLmM9ZjtyZXR1cm57bDphLGs6ZyxjOmZ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5kaWZmPWZ1bmN0aW9uKGEpe3JldHVybntjOlt7Y046ImNodW5rIixiOiJeXFxAXFxAICtcXC1cXGQrLFxcZCsgK1xcK1xcZCssXFxkKyArXFxAXFxAJCIscjoxMH0se2NOOiJjaHVuayIsYjoiXlxcKlxcKlxcKiArXFxkKyxcXGQrICtcXCpcXCpcXCpcXCokIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwtXFwtXFwtICtcXGQrLFxcZCsgK1xcLVxcLVxcLVxcLSQiLHI6MTB9LHtjTjoiaGVhZGVyIixiOiJJbmRleDogIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Ij09PT09IixlOiI9PT09PSQifSx7Y046ImhlYWRlciIsYjoiXlxcLVxcLVxcLSIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwqezN9ICIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwrXFwrXFwrIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6IlxcKns1fSIsZToiXFwqezV9JCJ9LHtjTjoiYWRkaXRpb24iLGI6Il5cXCsiLGU6IiQifSx7Y046ImRlbGV0aW9uIixiOiJeXFwtIixlOiIkIn0se2NOOiJjaGFuZ2UiLGI6Il5cXCEiLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PWZ1bmN0aW9uKGEpe3JldHVybntrOntrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5In0sYzpbYS5BU00sYS5RU00sYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLHtiOiIoIithLlJTUisifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsazoicmV0dXJuIHRocm93IGNhc2UiLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlJFR0VYUF9NT0RFLHtiOi88LyxlOi8+Oy8sc0w6InhtbCJ9XSxyOjB9LHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6L3svLGs6ImZ1bmN0aW9uIixjOlt7Y046InRpdGxlIixiOi9bQS1aYS16JF9dWzAtOUEtWmEteiRfXSovfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxjOlthLkNMQ00sYS5DQkxDTE1dLGk6L1siJ1woXS99XSxpOi9cW3wlL31dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMueG1sPWZ1bmN0aW9uKGEpe3ZhciBjPSJbQS1aYS16MC05XFwuXzotXSsiO3ZhciBiPXtlVzp0cnVlLHI6MCxjOlt7Y046ImF0dHJpYnV0ZSIsYjpjLHI6MH0se2I6Jz0iJyxyQjp0cnVlLGU6JyInLGM6W3tjTjoidmFsdWUiLGI6JyInLGVXOnRydWV9XX0se2I6Ij0nIixyQjp0cnVlLGU6IiciLGM6W3tjTjoidmFsdWUiLGI6IiciLGVXOnRydWV9XX0se2I6Ij0iLGM6W3tjTjoidmFsdWUiLGI6IlteXFxzLz5dKyJ9XX1dfTtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSx7Y046ImRvY3R5cGUiLGI6IjwhRE9DVFlQRSIsZToiPiIscjoxMCxjOlt7YjoiXFxbIixlOiJcXF0ifV19LHtjTjoiY29tbWVudCIsYjoiPCEtLSIsZToiLS0+IixyOjEwfSx7Y046ImNkYXRhIixiOiI8XFwhXFxbQ0RBVEFcXFsiLGU6IlxcXVxcXT4iLHI6MTB9LHtjTjoidGFnIixiOiI8c3R5bGUoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InN0eWxlIn0sYzpbYl0sc3RhcnRzOntlOiI8L3N0eWxlPiIsckU6dHJ1ZSxzTDoiY3NzIn19LHtjTjoidGFnIixiOiI8c2NyaXB0KD89XFxzfD58JCkiLGU6Ij4iLGs6e3RpdGxlOiJzY3JpcHQifSxjOltiXSxzdGFydHM6e2U6IjxcL3NjcmlwdD4iLHJFOnRydWUsc0w6ImphdmFzY3JpcHQifX0se2I6IjwlIixlOiIlPiIsc0w6InZic2NyaXB0In0se2NOOiJ0YWciLGI6IjwvPyIsZToiLz8+IixyOjAsYzpbe2NOOiJ0aXRsZSIsYjoiW14gLz48XSsifSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFya2Rvd249ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiaGVhZGVyIixiOiJeI3sxLDN9IixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il4uKz9cXG5bPS1dezIsfSQifSx7YjoiPCIsZToiPiIsc0w6InhtbCIscjowfSx7Y046ImJ1bGxldCIsYjoiXihbKistXXwoXFxkK1xcLikpXFxzKyJ9LHtjTjoic3Ryb25nIixiOiJbKl9dezJ9Lis/WypfXXsyfSJ9LHtjTjoiZW1waGFzaXMiLGI6IlxcKi4rP1xcKiJ9LHtjTjoiZW1waGFzaXMiLGI6Il8uKz9fIixyOjB9LHtjTjoiYmxvY2txdW90ZSIsYjoiXj5cXHMrIixlOiIkIn0se2NOOiJjb2RlIixiOiJgLis/YCJ9LHtjTjoiY29kZSIsYjoiXiAgICAiLGU6IiQiLHI6MH0se2NOOiJob3Jpem9udGFsX3J1bGUiLGI6Il4tezMsfSIsZToiJCJ9LHtiOiJcXFsuKz9cXF1cXCguKz9cXCkiLHJCOnRydWUsYzpbe2NOOiJsaW5rX2xhYmVsIixiOiJcXFsuK1xcXSJ9LHtjTjoibGlua191cmwiLGI6IlxcKCIsZToiXFwpIixlQjp0cnVlLGVFOnRydWV9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3NzPWZ1bmN0aW9uKGEpe3ZhciBiPSJbYS16QS1aLV1bYS16QS1aMC05Xy1dKiI7dmFyIGM9e2NOOiJmdW5jdGlvbiIsYjpiKyJcXCgiLGU6IlxcKSIsYzpbInNlbGYiLGEuTk0sYS5BU00sYS5RU01dfTtyZXR1cm57Y0k6dHJ1ZSxpOiJbPS98J10iLGM6W2EuQ0JMQ0xNLHtjTjoiaWQiLGI6IlxcI1tBLVphLXowLTlfLV0rIn0se2NOOiJjbGFzcyIsYjoiXFwuW0EtWmEtejAtOV8tXSsiLHI6MH0se2NOOiJhdHRyX3NlbGVjdG9yIixiOiJcXFsiLGU6IlxcXSIsaToiJCJ9LHtjTjoicHNldWRvIixiOiI6KDopP1thLXpBLVowLTlcXF9cXC1cXCtcXChcXClcXFwiXFwnXSsifSx7Y046ImF0X3J1bGUiLGI6IkAoZm9udC1mYWNlfHBhZ2UpIixsOiJbYS16LV0rIixrOiJmb250LWZhY2UgcGFnZSJ9LHtjTjoiYXRfcnVsZSIsYjoiQCIsZToiW3s7XSIsYzpbe2NOOiJrZXl3b3JkIixiOi9cUysvfSx7YjovXHMvLGVXOnRydWUsZUU6dHJ1ZSxyOjAsYzpbYyxhLkFTTSxhLlFTTSxhLk5NXX1dfSx7Y046InRhZyIsYjpiLHI6MH0se2NOOiJydWxlcyIsYjoieyIsZToifSIsaToiW15cXHNdIixyOjAsYzpbYS5DQkxDTE0se2NOOiJydWxlIixiOiJbXlxcc10iLHJCOnRydWUsZToiOyIsZVc6dHJ1ZSxjOlt7Y046ImF0dHJpYnV0ZSIsYjoiW0EtWlxcX1xcLlxcLV0rIixlOiI6IixlRTp0cnVlLGk6IlteXFxzXSIsc3RhcnRzOntjTjoidmFsdWUiLGVXOnRydWUsZUU6dHJ1ZSxjOltjLGEuTk0sYS5RU00sYS5BU00sYS5DQkxDTE0se2NOOiJoZXhjb2xvciIsYjoiI1swLTlBLUZhLWZdKyJ9LHtjTjoiaW1wb3J0YW50IixiOiIhaW1wb3J0YW50In1dfX1dfV19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmh0dHA9ZnVuY3Rpb24oYSl7cmV0dXJue2k6IlxcUyIsYzpbe2NOOiJzdGF0dXMiLGI6Il5IVFRQL1swLTlcXC5dKyIsZToiJCIsYzpbe2NOOiJudW1iZXIiLGI6IlxcYlxcZHszfVxcYiJ9XX0se2NOOiJyZXF1ZXN0IixiOiJeW0EtWl0rICguKj8pIEhUVFAvWzAtOVxcLl0rJCIsckI6dHJ1ZSxlOiIkIixjOlt7Y046InN0cmluZyIsYjoiICIsZToiICIsZUI6dHJ1ZSxlRTp0cnVlfV19LHtjTjoiYXR0cmlidXRlIixiOiJeXFx3IixlOiI6ICIsZUU6dHJ1ZSxpOiJcXG58XFxzfD0iLHN0YXJ0czp7Y046InN0cmluZyIsZToiJCJ9fSx7YjoiXFxuXFxuIixzdGFydHM6e3NMOiIiLGVXOnRydWV9fV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhPWZ1bmN0aW9uKGEpe3JldHVybntrOiJmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0IGZvciB0cnVlIHdoaWxlIGxvbmcgdGhyb3cgc3RyaWN0ZnAgZmluYWxseSBwcm90ZWN0ZWQgaW1wb3J0IG5hdGl2ZSBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgYnJlYWsgdHJhbnNpZW50IG5ldyBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyIsYzpbe2NOOiJqYXZhZG9jIixiOiIvXFwqXFwqIixlOiJcXCovIixjOlt7Y046ImphdmFkb2N0YWciLGI6IihefFxccylAW0EtWmEtel0rIn1dLHI6MTB9LGEuQ0xDTSxhLkNCTENMTSxhLkFTTSxhLlFTTSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyBpbnRlcmZhY2UiLGVFOnRydWUsaToiOiIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMgaW1wbGVtZW50cyIscjoxMH0se2NOOiJ0aXRsZSIsYjphLlVJUn1dfSxhLkNOTSx7Y046ImFubm90YXRpb24iLGI6IkBbQS1aYS16XSsifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5waHA9ZnVuY3Rpb24oYSl7dmFyIGU9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkK1thLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSoifTt2YXIgYj1bYS5pbmhlcml0KGEuQVNNLHtpOm51bGx9KSxhLmluaGVyaXQoYS5RU00se2k6bnVsbH0pLHtjTjoic3RyaW5nIixiOidiIicsZTonIicsYzpbYS5CRV19LHtjTjoic3RyaW5nIixiOiJiJyIsZToiJyIsYzpbYS5CRV19XTt2YXIgYz1bYS5CTk0sYS5DTk1dO3ZhciBkPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3JldHVybntjSTp0cnVlLGw6YS5VSVIsazoiYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciB3aGlsZSBpc3NldCBwdWJsaWMgcHJvdGVjdGVkIGV4aXQgZm9yZWFjaCB0aHJvdyBlbHNlaWYgaW5jbHVkZSBfX0ZJTEVfXyBlbXB0eSByZXF1aXJlX29uY2UgZG8geG9yIHJldHVybiBpbXBsZW1lbnRzIHBhcmVudCBjbG9uZSB1c2UgX19DTEFTU19fIF9fTElORV9fIGVsc2UgYnJlYWsgcHJpbnQgZXZhbCBuZXcgY2F0Y2ggX19NRVRIT0RfXyBjYXNlIGV4Y2VwdGlvbiBkZWZhdWx0IGRpZSByZXF1aXJlIF9fRlVOQ1RJT05fXyBlbmRkZWNsYXJlIGZpbmFsIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSBlbmRmb3IgZW5kaWYgZGVjbGFyZSB1bnNldCB0cnVlIGZhbHNlIG5hbWVzcGFjZSB0cmFpdCBnb3RvIGluc3RhbmNlb2YgaW5zdGVhZG9mIF9fRElSX18gX19OQU1FU1BBQ0VfXyB5aWVsZCBmaW5hbGx5IixjOlthLkNMQ00sYS5IQ00se2NOOiJjb21tZW50IixiOiIvXFwqIixlOiJcXCovIixjOlt7Y046InBocGRvYyIsYjoiXFxzQFtBLVphLXpdKyJ9XX0se2NOOiJjb21tZW50IixiOiJfX2hhbHRfY29tcGlsZXIuKz87IixlVzp0cnVlLGs6Il9faGFsdF9jb21waWxlciIsbDphLlVJUn0se2NOOiJzdHJpbmciLGI6Ijw8PFsnXCJdP1xcdytbJ1wiXT8kIixlOiJeXFx3KzsiLGM6W2EuQkVdfSx7Y046InByZXByb2Nlc3NvciIsYjoiPFxcP3BocCIscjoxMH0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IlxcPz4ifSxlLHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6InsiLGs6ImZ1bmN0aW9uIixpOiJcXCR8XFxbfCUiLGM6W2Qse2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic2VsZiIsZSxhLkNCTENMTV0uY29uY2F0KGIpLmNvbmNhdChjKX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyIsaToiWzpcXChcXCRdIixjOlt7YldLOnRydWUsZVc6dHJ1ZSxrOiJleHRlbmRzIixjOltkXX0sZF19LHtiOiI9PiJ9XS5jb25jYXQoYikuY29uY2F0KGMpfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucHl0aG9uPWZ1bmN0aW9uKGEpe3ZhciBmPXtjTjoicHJvbXB0IixiOi9eKD4+PnxcLlwuXC4pIC99O3ZhciBjPVt7Y046InN0cmluZyIsYjovKHV8Yik/cj8nJycvLGU6LycnJy8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fGIpP3I/IiIiLyxlOi8iIiIvLGM6W2ZdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKScvLGU6LycvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKSIvLGU6LyIvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8oYnxiciknLyxlOi8nLyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6LyhifGJyKSIvLGU6LyIvLGM6W2EuQkVdfV0uY29uY2F0KFthLkFTTSxhLlFTTV0pO3ZhciBlPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3ZhciBkPXtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6WyJzZWxmIixhLkNOTSxmXS5jb25jYXQoYyl9O3ZhciBiPXtiV0s6dHJ1ZSxlOi86LyxpOi9bJHs9O1xuXS8sYzpbZSxkXSxyOjEwfTtyZXR1cm57azp7a2V5d29yZDoiYW5kIGVsaWYgaXMgZ2xvYmFsIGFzIGluIGlmIGZyb20gcmFpc2UgZm9yIGV4Y2VwdCBmaW5hbGx5IHByaW50IGltcG9ydCBwYXNzIHJldHVybiBleGVjIGVsc2UgYnJlYWsgbm90IHdpdGggY2xhc3MgYXNzZXJ0IHlpZWxkIHRyeSB3aGlsZSBjb250aW51ZSBkZWwgb3IgZGVmIGxhbWJkYSBub25sb2NhbHwxMCBOb25lIFRydWUgRmFsc2UiLGJ1aWx0X2luOiJFbGxpcHNpcyBOb3RJbXBsZW1lbnRlZCJ9LGk6Lyg8XC98LT58XD8pLyxjOmMuY29uY2F0KFtmLGEuSENNLGEuaW5oZXJpdChiLHtjTjoiZnVuY3Rpb24iLGs6ImRlZiJ9KSxhLmluaGVyaXQoYix7Y046ImNsYXNzIixrOiJjbGFzcyJ9KSxhLkNOTSx7Y046ImRlY29yYXRvciIsYjovQC8sZTovJC99LHtiOi9cYihwcmludHxleGVjKVwoL31dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnNxbD1mdW5jdGlvbihhKXtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046Im9wZXJhdG9yIixiOiIoYmVnaW58ZW5kfHN0YXJ0fGNvbW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxyZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNlfHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hfGdyYW50KVxcYig/ITopIixlOiI7IixlVzp0cnVlLGs6e2tleXdvcmQ6ImFsbCBwYXJ0aWFsIGdsb2JhbCBtb250aCBjdXJyZW50X3RpbWVzdGFtcCB1c2luZyBnbyByZXZva2Ugc21hbGxpbnQgaW5kaWNhdG9yIGVuZC1leGVjIGRpc2Nvbm5lY3Qgem9uZSB3aXRoIGNoYXJhY3RlciBhc3NlcnRpb24gdG8gYWRkIGN1cnJlbnRfdXNlciB1c2FnZSBpbnB1dCBsb2NhbCBhbHRlciBtYXRjaCBjb2xsYXRlIHJlYWwgdGhlbiByb2xsYmFjayBnZXQgcmVhZCB0aW1lc3RhbXAgc2Vzc2lvbl91c2VyIG5vdCBpbnRlZ2VyIGJpdCB1bmlxdWUgZGF5IG1pbnV0ZSBkZXNjIGluc2VydCBleGVjdXRlIGxpa2UgaWxpa2V8MiBsZXZlbCBkZWNpbWFsIGRyb3AgY29udGludWUgaXNvbGF0aW9uIGZvdW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvbWFpbiByaWdodCBuYXRpb25hbCBzb21lIG1vZHVsZSB0cmFuc2FjdGlvbiByZWxhdGl2ZSBzZWNvbmQgY29ubmVjdCBlc2NhcGUgY2xvc2Ugc3lzdGVtX3VzZXIgZm9yIGRlZmVycmVkIHNlY3Rpb24gY2FzdCBjdXJyZW50IHNxbHN0YXRlIGFsbG9jYXRlIGludGVyc2VjdCBkZWFsbG9jYXRlIG51bWVyaWMgcHVibGljIHByZXNlcnZlIGZ1bGwgZ290byBpbml0aWFsbHkgYXNjIG5vIGtleSBvdXRwdXQgY29sbGF0aW9uIGdyb3VwIGJ5IHVuaW9uIHNlc3Npb24gYm90aCBsYXN0IGxhbmd1YWdlIGNvbnN0cmFpbnQgY29sdW1uIG9mIHNwYWNlIGZvcmVpZ24gZGVmZXJyYWJsZSBwcmlvciBjb25uZWN0aW9uIHVua25vd24gYWN0aW9uIGNvbW1pdCB2aWV3IG9yIGZpcnN0IGludG8gZmxvYXQgeWVhciBwcmltYXJ5IGNhc2NhZGVkIGV4Y2VwdCByZXN0cmljdCBzZXQgcmVmZXJlbmNlcyBuYW1lcyB0YWJsZSBvdXRlciBvcGVuIHNlbGVjdCBzaXplIGFyZSByb3dzIGZyb20gcHJlcGFyZSBkaXN0aW5jdCBsZWFkaW5nIGNyZWF0ZSBvbmx5IG5leHQgaW5uZXIgYXV0aG9yaXphdGlvbiBzY2hlbWEgY29ycmVzcG9uZGluZyBvcHRpb24gZGVjbGFyZSBwcmVjaXNpb24gaW1tZWRpYXRlIGVsc2UgdGltZXpvbmVfbWludXRlIGV4dGVybmFsIHZhcnlpbmcgdHJhbnNsYXRpb24gdHJ1ZSBjYXNlIGV4Y2VwdGlvbiBqb2luIGhvdXIgZGVmYXVsdCBkb3VibGUgc2Nyb2xsIHZhbHVlIGN1cnNvciBkZXNjcmlwdG9yIHZhbHVlcyBkZWMgZmV0Y2ggcHJvY2VkdXJlIGRlbGV0ZSBhbmQgZmFsc2UgaW50IGlzIGRlc2NyaWJlIGNoYXIgYXMgYXQgaW4gdmFyY2hhciBudWxsIHRyYWlsaW5nIGFueSBhYnNvbHV0ZSBjdXJyZW50X3RpbWUgZW5kIGdyYW50IHByaXZpbGVnZXMgd2hlbiBjcm9zcyBjaGVjayB3cml0ZSBjdXJyZW50X2RhdGUgcGFkIGJlZ2luIHRlbXBvcmFyeSBleGVjIHRpbWUgdXBkYXRlIGNhdGFsb2cgdXNlciBzcWwgZGF0ZSBvbiBpZGVudGl0eSB0aW1lem9uZV9ob3VyIG5hdHVyYWwgd2hlbmV2ZXIgaW50ZXJ2YWwgd29yayBvcmRlciBjYXNjYWRlIGRpYWdub3N0aWNzIG5jaGFyIGhhdmluZyBsZWZ0IGNhbGwgZG8gaGFuZGxlciBsb2FkIHJlcGxhY2UgdHJ1bmNhdGUgc3RhcnQgbG9jayBzaG93IHByYWdtYSBleGlzdHMgbnVtYmVyIHRyaWdnZXIgaWYgYmVmb3JlIGFmdGVyIGVhY2ggcm93IixhZ2dyZWdhdGU6ImNvdW50IHN1bSBtaW4gbWF4IGF2ZyJ9LGM6W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOlthLkJFLHtiOiInJyJ9XSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlthLkJFLHtiOiciIid9XSxyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlthLkJFXX0sYS5DTk1dfSxhLkNCTENMTSx7Y046ImNvbW1lbnQiLGI6Ii0tIixlOiIkIn1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaW5pPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGk6IlteXFxzXSIsYzpbe2NOOiJjb21tZW50IixiOiI7IixlOiIkIn0se2NOOiJ0aXRsZSIsYjoiXlxcWyIsZToiXFxdIn0se2NOOiJzZXR0aW5nIixiOiJeW2EtejAtOVxcW1xcXV8tXStbIFxcdF0qPVsgXFx0XSoiLGU6IiQiLGM6W3tjTjoidmFsdWUiLGVXOnRydWUsazoib24gb2ZmIHRydWUgZmFsc2UgeWVzIG5vIixjOlthLlFTTSxhLk5NXSxyOjB9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucGVybD1mdW5jdGlvbihlKXt2YXIgYT0iZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjIG1hIHN5c3dyaXRlIHRyIHNlbmQgdW1hc2sgc3lzb3BlbiBzaG13cml0ZSB2ZWMgcXggdXRpbWUgbG9jYWwgb2N0IHNlbWN0bCBsb2NhbHRpbWUgcmVhZHBpcGUgZG8gcmV0dXJuIGZvcm1hdCByZWFkIHNwcmludGYgZGJtb3BlbiBwb3AgZ2V0cGdycCBub3QgZ2V0cHduYW0gcmV3aW5kZGlyIHFxZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50IHNodXRkb3duIGR1bXAgY2hvbXAgY29ubmVjdCBnZXRzb2NrbmFtZSBkaWUgc29ja2V0cGFpciBjbG9zZSBmbG9jayBleGlzdHMgaW5kZXggc2htZ2V0c3ViIGZvciBlbmRwd2VudCByZWRvIGxzdGF0IG1zZ2N0bCBzZXRwZ3JwIGFicyBleGl0IHNlbGVjdCBwcmludCByZWYgZ2V0aG9zdGJ5YWRkciB1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCBnZXRwZWVybmFtZSByZWN2IGxvZyBzZXRzb2Nrb3B0IGNvcyBsYXN0IHJldmVyc2UgZ2V0aG9zdGJ5bmFtZSBnZXRncm5hbSBzdHVkeSBmb3JtbGluZSBlbmRob3N0ZW50IHRpbWVzIGNob3AgbGVuZ3RoIGdldGhvc3RlbnQgZ2V0bmV0ZW50IHBhY2sgZ2V0cHJvdG9lbnQgZ2V0c2VydmJ5bmFtZSByYW5kIG1rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgZ2V0c29ja29wdCBnZXRwcmlvcml0eSByaW5kZXggd2FudGFycmF5IGhleCBzeXN0ZW0gZ2V0c2VydmJ5cG9ydCBlbmRzZXJ2ZW50IGludCBjaHIgdW50aWUgcm1kaXIgcHJvdG90eXBlIHRlbGwgbGlzdGVuIGZvcmsgc2htcmVhZCB1Y2ZpcnN0IHNldHByb3RvZW50IGVsc2Ugc3lzc2VlayBsaW5rIGdldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciBsY2ZpcnN0IHVudGlsIHdhcm4gd2hpbGUgdmFsdWVzIHNoaWZ0IHRlbGxkaXIgZ2V0cHd1aWQgbXkgZ2V0cHJvdG9ieW51bWJlciBkZWxldGUgYW5kIHNvcnQgdWMgZGVmaW5lZCBzcmFuZCBhY2NlcHQgcGFja2FnZSBzZWVrZGlyIGdldHByb3RvYnluYW1lIHNlbW9wIG91ciByZW5hbWUgc2VlayBpZiBxfDAgY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoIHRpZSBzaW4gbXNnZ2V0IG1hcCBzdGF0IGdldGxvZ2luIHVubGVzcyBlbHNpZiB0cnVuY2F0ZSBleGVjIGtleXMgZ2xvYiB0aWVkIGNsb3NlZGlyaW9jdGwgc29ja2V0IHJlYWRsaW5rIGV2YWwgeG9yIHJlYWRsaW5lIGJpbm1vZGUgc2V0c2VydmVudCBlb2Ygb3JkIGJpbmQgYWxhcm0gcGlwZSBhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbiI7dmFyIGQ9e2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToiXFx9IixrOmEscjoxMH07dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkIn07dmFyIGk9e2NOOiJ2YXJpYWJsZSIsYjoiW1xcJFxcJVxcQFxcKl0oXFxeXFx3XFxifCNcXHcrKFxcOlxcOlxcdyspKnxbXlxcc1xcd3tdfHtcXHcrfXxcXHcrKFxcOlxcOlxcdyopKikifTt2YXIgZj1bZS5CRSxkLGIsaV07dmFyIGg9e2I6Ii0+IixjOlt7YjplLklSfSx7YjoieyIsZToifSJ9XX07dmFyIGc9e2NOOiJjb21tZW50IixiOiJeKF9fRU5EX198X19EQVRBX18pIixlOiJcXG4kIixyOjV9O3ZhciBjPVtiLGksZS5IQ00sZyx7Y046ImNvbW1lbnQiLGI6Il5cXD1cXHciLGU6IlxcPWN1dCIsZVc6dHJ1ZX0saCx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFwoIixlOiJcXCkiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxceyIsZToiXFx9IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx8IixlOiJcXHwiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InF3XFxzK3EiLGU6InEiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltlLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOmYscjowfSx7Y046InN0cmluZyIsYjoiYCIsZToiYCIsYzpbZS5CRV19LHtjTjoic3RyaW5nIixiOiJ7XFx3K30iLHI6MH0se2NOOiJzdHJpbmciLGI6Ii0/XFx3K1xccypcXD1cXD4iLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2I6IigiK2UuUlNSKyJ8XFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxiKVxccyoiLGs6InNwbGl0IHJldHVybiBwcmludCByZXZlcnNlIGdyZXAiLHI6MCxjOltlLkhDTSxnLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2UuQkVdLHI6MH1dfSx7Y046InN1YiIsYldLOnRydWUsZToiKFxccypcXCguKj9cXCkpP1s7e10iLGs6InN1YiIscjo1fSx7Y046Im9wZXJhdG9yIixiOiItXFx3XFxiIixyOjB9XTtkLmM9YztoLmNbMV0uYz1jO3JldHVybntrOmEsYzpjfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMub2JqZWN0aXZlYz1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgc2l6ZW9mIHR5cGVkZWYgY29uc3Qgc3RydWN0IGZvciB1bmlvbiB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCBtdXRhYmxlIGlmIHB1YmxpYyBkbyByZXR1cm4gZ290byB2b2lkIGVudW0gZWxzZSBicmVhayBleHRlcm4gYXNtIGNhc2Ugc2hvcnQgZGVmYXVsdCBkb3VibGUgdGhyb3cgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSByZWFkb25seSBhc3NpZ24gcHJvcGVydHkgc2VsZiBzeW5jaHJvbml6ZWQgZW5kIHN5bnRoZXNpemUgaWQgb3B0aW9uYWwgcmVxdWlyZWQgbm9uYXRvbWljIHN1cGVyIHVuaWNoYXIgZmluYWxseSBkeW5hbWljIElCT3V0bGV0IElCQWN0aW9uIHNlbGVjdG9yIHN0cm9uZyB3ZWFrIHJlYWRvbmx5IixsaXRlcmFsOiJmYWxzZSB0cnVlIEZBTFNFIFRSVUUgbmlsIFlFUyBOTyBOVUxMIixidWlsdF9pbjoiTlNTdHJpbmcgTlNEaWN0aW9uYXJ5IENHUmVjdCBDR1BvaW50IFVJQnV0dG9uIFVJTGFiZWwgVUlUZXh0VmlldyBVSVdlYlZpZXcgTUtNYXBWaWV3IFVJU2VnbWVudGVkQ29udHJvbCBOU09iamVjdCBVSVRhYmxlVmlld0RlbGVnYXRlIFVJVGFibGVWaWV3RGF0YVNvdXJjZSBOU1RocmVhZCBVSUFjdGl2aXR5SW5kaWNhdG9yIFVJVGFiYmFyIFVJVG9vbEJhciBVSUJhckJ1dHRvbkl0ZW0gVUlJbWFnZVZpZXcgTlNBdXRvcmVsZWFzZVBvb2wgVUlUYWJsZVZpZXcgQk9PTCBOU0ludGVnZXIgQ0dGbG9hdCBOU0V4Y2VwdGlvbiBOU0xvZyBOU011dGFibGVTdHJpbmcgTlNNdXRhYmxlQXJyYXkgTlNNdXRhYmxlRGljdGlvbmFyeSBOU1VSTCBOU0luZGV4UGF0aCBDR1NpemUgVUlUYWJsZVZpZXdDZWxsIFVJVmlldyBVSVZpZXdDb250cm9sbGVyIFVJTmF2aWdhdGlvbkJhciBVSU5hdmlnYXRpb25Db250cm9sbGVyIFVJVGFiQmFyQ29udHJvbGxlciBVSVBvcG92ZXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXJEZWxlZ2F0ZSBVSUltYWdlIE5TTnVtYmVyIFVJU2VhcmNoQmFyIE5TRmV0Y2hlZFJlc3VsdHNDb250cm9sbGVyIE5TRmV0Y2hlZFJlc3VsdHNDaGFuZ2VUeXBlIFVJU2Nyb2xsVmlldyBVSVNjcm9sbFZpZXdEZWxlZ2F0ZSBVSUVkZ2VJbnNldHMgVUlDb2xvciBVSUZvbnQgVUlBcHBsaWNhdGlvbiBOU05vdEZvdW5kIE5TTm90aWZpY2F0aW9uQ2VudGVyIE5TTm90aWZpY2F0aW9uIFVJTG9jYWxOb3RpZmljYXRpb24gTlNCdW5kbGUgTlNGaWxlTWFuYWdlciBOU1RpbWVJbnRlcnZhbCBOU0RhdGUgTlNDYWxlbmRhciBOU1VzZXJEZWZhdWx0cyBVSVdpbmRvdyBOU1JhbmdlIE5TQXJyYXkgTlNFcnJvciBOU1VSTFJlcXVlc3QgTlNVUkxDb25uZWN0aW9uIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gTVBNb3ZpZVBsYXllckNvbnRyb2xsZXIgZGlzcGF0Y2hfb25jZV90IGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hfc3luYyBkaXNwYXRjaF9hc3luYyBkaXNwYXRjaF9vbmNlIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLGEuUVNNLHtjTjoic3RyaW5nIixiOiInIixlOiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIsYjoiI2ltcG9ydCIsZToiJCIsYzpbe2NOOiJ0aXRsZSIsYjonIicsZTonIid9LHtjTjoidGl0bGUiLGI6IjwiLGU6Ij4ifV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIn0se2NOOiJjbGFzcyIsYldLOnRydWUsZToiKHt8JCkiLGs6ImludGVyZmFjZSBjbGFzcyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiIsYzpbe2NOOiJpZCIsYjphLlVJUn1dfSx7Y046InZhcmlhYmxlIixiOiJcXC4iK2EuVUlSLHI6MH1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY29mZmVlc2NyaXB0PWZ1bmN0aW9uKGMpe3ZhciBiPXtrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSBuZXcgZG8gcmV0dXJuIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB0aHJvdyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBkZWJ1Z2dlciBzdXBlciB0aGVuIHVubGVzcyB1bnRpbCBsb29wIG9mIGJ5IHdoZW4gYW5kIG9yIGlzIGlzbnQgbm90IixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIHllcyBubyBvbiBvZmYiLHJlc2VydmVkOiJjYXNlIGRlZmF1bHQgZnVuY3Rpb24gdmFyIHZvaWQgd2l0aCBjb25zdCBsZXQgZW51bSBleHBvcnQgaW1wb3J0IG5hdGl2ZSBfX2hhc1Byb3AgX19leHRlbmRzIF9fc2xpY2UgX19iaW5kIF9faW5kZXhPZiIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGV4cG9ydHMgZ2xvYmFsIHdpbmRvdyBkb2N1bWVudCJ9O3ZhciBhPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiO3ZhciBmPXtjTjoidGl0bGUiLGI6YX07dmFyIGU9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsazpiLH07dmFyIGQ9W2MuQk5NLGMuaW5oZXJpdChjLkNOTSx7c3RhcnRzOntlOiIoXFxzKi8pPyIscjowfX0pLHtjTjoic3RyaW5nIixiOiInJyciLGU6IicnJyIsYzpbYy5CRV19LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltjLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciIiInLGU6JyIiIicsYzpbYy5CRSxlXX0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2MuQkUsZV0scjowfSx7Y046InJlZ2V4cCIsYjoiLy8vIixlOiIvLy8iLGM6W2MuSENNXX0se2NOOiJyZWdleHAiLGI6Ii8vW2dpbV0qIixyOjB9LHtjTjoicmVnZXhwIixiOiIvXFxTKFxcXFwufFteXFxuXSkqPy9bZ2ltXSooPz1cXHN8XFxXfCQpIn0se2NOOiJwcm9wZXJ0eSIsYjoiQCIrYX0se2I6ImAiLGU6ImAiLGVCOnRydWUsZUU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9XTtlLmM9ZDtyZXR1cm57azpiLGM6ZC5jb25jYXQoW3tjTjoiY29tbWVudCIsYjoiIyMjIixlOiIjIyMifSxjLkhDTSx7Y046ImZ1bmN0aW9uIixiOiIoIithKyJcXHMqPVxccyopPyhcXCguKlxcKSk/XFxzKlstPV0+IixlOiJbLT1dPiIsckI6dHJ1ZSxjOltmLHtjTjoicGFyYW1zIixiOiJcXCgiLHJCOnRydWUsYzpbe2I6L1woLyxlOi9cKS8sazpiLGM6WyJzZWxmIl0uY29uY2F0KGQpfV19XX0se2NOOiJjbGFzcyIsYldLOnRydWUsazoiY2xhc3MiLGU6IiQiLGk6Ils6XFxbXFxdXSIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMiLGVXOnRydWUsaToiOiIsYzpbZl19LGZdfSx7Y046ImF0dHJpYnV0ZSIsYjphKyI6IixlOiI6IixyQjp0cnVlLGVFOnRydWV9XSl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5uZ2lueD1mdW5jdGlvbihiKXt2YXIgYz1be2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkKyJ9LHtjTjoidmFyaWFibGUiLGI6IlxcJHsiLGU6In0ifSx7Y046InZhcmlhYmxlIixiOiJbXFwkXFxAXSIrYi5VSVJ9XTt2YXIgYT17ZVc6dHJ1ZSxsOiJbYS16L19dKyIsazp7YnVpbHRfaW46Im9uIG9mZiB5ZXMgbm8gdHJ1ZSBmYWxzZSBub25lIGJsb2NrZWQgZGVidWcgaW5mbyBub3RpY2Ugd2FybiBlcnJvciBjcml0IHNlbGVjdCBicmVhayBsYXN0IHBlcm1hbmVudCByZWRpcmVjdCBrcXVldWUgcnRzaWcgZXBvbGwgcG9sbCAvZGV2L3BvbGwifSxyOjAsaToiPT4iLGM6W2IuSENNLHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbYi5CRV0uY29uY2F0KGMpLHI6MH0se2NOOiJ1cmwiLGI6IihbYS16XSspOi8iLGU6IlxccyIsZVc6dHJ1ZSxlRTp0cnVlfSx7Y046InJlZ2V4cCIsYjoiXFxzXFxeIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6In5cXCo/XFxzKyIsZToiXFxzfHt8OyIsckU6dHJ1ZSxjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoicmVnZXhwIixiOiJcXCooXFwuW2EtelxcLV0rKSsiLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IihbYS16XFwtXStcXC4pK1xcKiIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046Im51bWJlciIsYjoiXFxiXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30oOlxcZHsxLDV9KT9cXGIifSx7Y046Im51bWJlciIsYjoiXFxiXFxkK1trS21NZ0dkc2hkd3ldKlxcYiIscjowfV0uY29uY2F0KGMpfTtyZXR1cm57YzpbYi5IQ00se2I6Yi5VSVIrIlxccyIsZToiO3x7IixyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6Yi5VSVIsc3RhcnRzOmF9XSxyOjB9XSxpOiJbXlxcc1xcfV0ifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuanNvbj1mdW5jdGlvbihhKXt2YXIgZT17bGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIn07dmFyIGQ9W2EuUVNNLGEuQ05NXTt2YXIgYz17Y046InZhbHVlIixlOiIsIixlVzp0cnVlLGVFOnRydWUsYzpkLGs6ZX07dmFyIGI9e2I6InsiLGU6In0iLGM6W3tjTjoiYXR0cmlidXRlIixiOidcXHMqIicsZTonIlxccyo6XFxzKicsZUI6dHJ1ZSxlRTp0cnVlLGM6W2EuQkVdLGk6IlxcbiIsc3RhcnRzOmN9XSxpOiJcXFMifTt2YXIgZj17YjoiXFxbIixlOiJcXF0iLGM6W2EuaW5oZXJpdChjLHtjTjpudWxsfSldLGk6IlxcUyJ9O2Quc3BsaWNlKGQubGVuZ3RoLDAsYixmKTtyZXR1cm57YzpkLGs6ZSxpOiJcXFMifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuYXBhY2hlPWZ1bmN0aW9uKGEpe3ZhciBiPXtjTjoibnVtYmVyIixiOiJbXFwkJV1cXGQrIn07cmV0dXJue2NJOnRydWUsYzpbYS5IQ00se2NOOiJ0YWciLGI6IjwvPyIsZToiPiJ9LHtjTjoia2V5d29yZCIsYjovXHcrLyxyOjAsazp7Y29tbW9uOiJvcmRlciBkZW55IGFsbG93IHNldGVudiByZXdyaXRlcnVsZSByZXdyaXRlZW5naW5lIHJld3JpdGVjb25kIGRvY3VtZW50cm9vdCBzZXRoYW5kbGVyIGVycm9yZG9jdW1lbnQgbG9hZG1vZHVsZSBvcHRpb25zIGhlYWRlciBsaXN0ZW4gc2VydmVycm9vdCBzZXJ2ZXJuYW1lIn0sc3RhcnRzOntlOi8kLyxyOjAsazp7bGl0ZXJhbDoib24gb2ZmIGFsbCJ9LGM6W3tjTjoic3FicmFja2V0IixiOiJcXHNcXFsiLGU6IlxcXSQifSx7Y046ImNicmFja2V0IixiOiJbXFwkJV1cXHsiLGU6IlxcfSIsYzpbInNlbGYiLGJdfSxiLGEuUVNNXX19XSxpOi9cUy99fShobGpzKTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImZhbHNlIGludCBmbG9hdCB3aGlsZSBwcml2YXRlIGNoYXIgY2F0Y2ggZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mIGR5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3Qgc3RydWN0IGZvciBzdGF0aWNfY2FzdHwxMCB1bmlvbiBuYW1lc3BhY2UgdW5zaWduZWQgbG9uZyB0aHJvdyB2b2xhdGlsZSBzdGF0aWMgcHJvdGVjdGVkIGJvb2wgdGVtcGxhdGUgbXV0YWJsZSBpZiBwdWJsaWMgZnJpZW5kIGRvIHJldHVybiBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgbmV3IGV4dGVybiB1c2luZyB0cnVlIGNsYXNzIGFzbSBjYXNlIHR5cGVpZCBzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgZGVsZXRlIGFsaWdub2YgY2hhcjE2X3QgY2hhcjMyX3QgY29uc3RleHByIGRlY2x0eXBlIG5vZXhjZXB0IG51bGxwdHIgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgX0Jvb2wgY29tcGxleCIsYnVpbHRfaW46InN0ZCBzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0cmluZ3N0cmVhbSBpc3RyaW5nc3RyZWFtIG9zdHJpbmdzdHJlYW0gYXV0b19wdHIgZGVxdWUgbGlzdCBxdWV1ZSBzdGFjayB2ZWN0b3IgbWFwIHNldCBiaXRzZXQgbXVsdGlzZXQgbXVsdGltYXAgdW5vcmRlcmVkX3NldCB1bm9yZGVyZWRfbWFwIHVub3JkZXJlZF9tdWx0aXNldCB1bm9yZGVyZWRfbXVsdGltYXAgYXJyYXkgc2hhcmVkX3B0ciJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJ1xcXFw/LiIsZToiJyIsaToiLiJ9LHtjTjoibnVtYmVyIixiOiJcXGIoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykodXxVfGx8THx1bHxVTHxmfEYpIn0sYS5DTk0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGM6W3tiOiI8IixlOiI+IixpOiJcXG4ifSxhLkNMQ01dfSx7Y046InN0bF9jb250YWluZXIiLGI6IlxcYihkZXF1ZXxsaXN0fHF1ZXVlfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsZToiPiIsazpiLHI6MTAsYzpbInNlbGYiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFrZWZpbGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6YS5CRX07cmV0dXJue2M6W2EuSENNLHtiOi9eXHcrXHMqXFcqPS8sckI6dHJ1ZSxyOjAsc3RhcnRzOntjTjoiY29uc3RhbnQiLGU6L1xzKlxXKj0vLGVFOnRydWUsc3RhcnRzOntlOi8kLyxyOjAsYzpbYl0sfX19LHtjTjoidGl0bGUiLGI6L15bXHddKzpccyokL30se2NOOiJwaG9ueSIsYjovXlwuUEhPTlk6LyxlOi8kLyxrOiIuUEhPTlkiLGw6L1tcLlx3XSsvfSx7YjovXlx0Ky8sZTovJC8sYzpbYS5RU00sYl19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmdvPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIiLGNvbnN0YW50OiJ0cnVlIGZhbHNlIGlvdGEgbmlsIix0eXBlbmFtZToiYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUiLGJ1aWx0X2luOiJhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIn0se2NOOiJudW1iZXIiLGI6IlteYS16QS1aXzAtOV0oXFwtfFxcKyk/XFxkKyhcXC5cXGQrfFxcL1xcZCspPygoZHxlfGZ8bHxzKShcXCt8XFwtKT9cXGQrKT8iLHI6MH0sYS5DTk1dfX0oaGxqcyk7UEsHCBVZbU72dQAA9nUAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHN0YXRpY1xsaWJcanF1ZXJ5LmZvcm0ubWluLmpzLyohCiAqIGpRdWVyeSBGb3JtIFBsdWdpbgogKiB2ZXJzaW9uOiAzLjQ2LjAtMjAxMy4xMS4yMQogKiBSZXF1aXJlcyBqUXVlcnkgdjEuNSBvciBsYXRlcgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTS4gQWxzdXAKICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9mb3JtLwogKiBQcm9qZWN0IHJlcG9zaXRvcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxzdXAvZm9ybQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcy4KICogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtI2NvcHlyaWdodC1hbmQtbGljZW5zZQogKi8KKGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoWyJqcXVlcnkiXSxhKX1lbHNle2EoKHR5cGVvZihqUXVlcnkpIT0idW5kZWZpbmVkIik/alF1ZXJ5OndpbmRvdy5aZXB0byl9fShmdW5jdGlvbihmKXt2YXIgYz17fTtjLmZpbGVhcGk9ZigiPGlucHV0IHR5cGU9J2ZpbGUnLz4iKS5nZXQoMCkuZmlsZXMhPT11bmRlZmluZWQ7Yy5mb3JtZGF0YT13aW5kb3cuRm9ybURhdGEhPT11bmRlZmluZWQ7dmFyIGU9ISFmLmZuLnByb3A7Zi5mbi5hdHRyMj1mdW5jdGlvbigpe2lmKCFlKXtyZXR1cm4gdGhpcy5hdHRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZz10aGlzLnByb3AuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKChnJiZnLmpxdWVyeSl8fHR5cGVvZiBnPT09InN0cmluZyIpe3JldHVybiBnfXJldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmLmZuLmFqYXhTdWJtaXQ9ZnVuY3Rpb24oail7aWYoIXRoaXMubGVuZ3RoKXtkKCJhamF4U3VibWl0OiBza2lwcGluZyBzdWJtaXQgcHJvY2VzcyAtIG5vIGVsZW1lbnQgc2VsZWN0ZWQiKTtyZXR1cm4gdGhpc312YXIgaSxDLG0sbz10aGlzO2lmKHR5cGVvZiBqPT0iZnVuY3Rpb24iKXtqPXtzdWNjZXNzOmp9fWVsc2V7aWYoaj09PXVuZGVmaW5lZCl7aj17fX19aT1qLnR5cGV8fHRoaXMuYXR0cjIoIm1ldGhvZCIpO0M9ai51cmx8fHRoaXMuYXR0cjIoImFjdGlvbiIpO209KHR5cGVvZiBDPT09InN0cmluZyIpP2YudHJpbShDKToiIjttPW18fHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIjtpZihtKXttPShtLm1hdGNoKC9eKFteI10rKS8pfHxbXSlbMV19aj1mLmV4dGVuZCh0cnVlLHt1cmw6bSxzdWNjZXNzOmYuYWpheFNldHRpbmdzLnN1Y2Nlc3MsdHlwZTppfHxmLmFqYXhTZXR0aW5ncy50eXBlLGlmcmFtZVNyYzovXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZnx8IiIpPyJqYXZhc2NyaXB0OmZhbHNlIjoiYWJvdXQ6YmxhbmsifSxqKTt2YXIgdT17fTt0aGlzLnRyaWdnZXIoImZvcm0tcHJlLXNlcmlhbGl6ZSIsW3RoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXByZS1zZXJpYWxpemUgdHJpZ2dlciIpO3JldHVybiB0aGlzfWlmKGouYmVmb3JlU2VyaWFsaXplJiZqLmJlZm9yZVNlcmlhbGl6ZSh0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTZXJpYWxpemUgY2FsbGJhY2siKTtyZXR1cm4gdGhpc312YXIgbj1qLnRyYWRpdGlvbmFsO2lmKG49PT11bmRlZmluZWQpe249Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWx9dmFyIHM9W107dmFyIEUsRj10aGlzLmZvcm1Ub0FycmF5KGouc2VtYW50aWMscyk7aWYoai5kYXRhKXtqLmV4dHJhRGF0YT1qLmRhdGE7RT1mLnBhcmFtKGouZGF0YSxuKX1pZihqLmJlZm9yZVN1Ym1pdCYmai5iZWZvcmVTdWJtaXQoRix0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTdWJtaXQgY2FsbGJhY2siKTtyZXR1cm4gdGhpc310aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LXZhbGlkYXRlIixbRix0aGlzLGosdV0pO2lmKHUudmV0byl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IHZldG9lZCB2aWEgZm9ybS1zdWJtaXQtdmFsaWRhdGUgdHJpZ2dlciIpO3JldHVybiB0aGlzfXZhciB5PWYucGFyYW0oRixuKTtpZihFKXt5PSh5Pyh5KyImIitFKTpFKX1pZihqLnR5cGUudG9VcHBlckNhc2UoKT09IkdFVCIpe2oudXJsKz0oai51cmwuaW5kZXhPZigiPyIpPj0wPyImIjoiPyIpK3k7ai5kYXRhPW51bGx9ZWxzZXtqLmRhdGE9eX12YXIgSD1bXTtpZihqLnJlc2V0Rm9ybSl7SC5wdXNoKGZ1bmN0aW9uKCl7by5yZXNldEZvcm0oKX0pfWlmKGouY2xlYXJGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLmNsZWFyRm9ybShqLmluY2x1ZGVIaWRkZW4pfSl9aWYoIWouZGF0YVR5cGUmJmoudGFyZ2V0KXt2YXIgbD1qLnN1Y2Nlc3N8fGZ1bmN0aW9uKCl7fTtILnB1c2goZnVuY3Rpb24ocSl7dmFyIGs9ai5yZXBsYWNlVGFyZ2V0PyJyZXBsYWNlV2l0aCI6Imh0bWwiO2Yoai50YXJnZXQpW2tdKHEpLmVhY2gobCxhcmd1bWVudHMpfSl9ZWxzZXtpZihqLnN1Y2Nlc3Mpe0gucHVzaChqLnN1Y2Nlc3MpfX1qLnN1Y2Nlc3M9ZnVuY3Rpb24oSyxxLEwpe3ZhciBKPWouY29udGV4dHx8dGhpcztmb3IodmFyIEk9MCxrPUgubGVuZ3RoO0k8aztJKyspe0hbSV0uYXBwbHkoSixbSyxxLEx8fG8sb10pfX07aWYoai5lcnJvcil7dmFyIHo9ai5lcnJvcjtqLmVycm9yPWZ1bmN0aW9uKEosayxxKXt2YXIgST1qLmNvbnRleHR8fHRoaXM7ei5hcHBseShJLFtKLGsscSxvXSl9fWlmKGouY29tcGxldGUpe3ZhciBoPWouY29tcGxldGU7ai5jb21wbGV0ZT1mdW5jdGlvbihJLGspe3ZhciBxPWouY29udGV4dHx8dGhpcztoLmFwcGx5KHEsW0ksayxvXSl9fXZhciBEPWYoImlucHV0W3R5cGU9ZmlsZV06ZW5hYmxlZCIsdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcykudmFsKCkhPT0iIn0pO3ZhciBwPUQubGVuZ3RoPjA7dmFyIEI9Im11bHRpcGFydC9mb3JtLWRhdGEiO3ZhciB4PShvLmF0dHIoImVuY3R5cGUiKT09Qnx8by5hdHRyKCJlbmNvZGluZyIpPT1CKTt2YXIgdz1jLmZpbGVhcGkmJmMuZm9ybWRhdGE7ZCgiZmlsZUFQSSA6Iit3KTt2YXIgcj0ocHx8eCkmJiF3O3ZhciB2O2lmKGouaWZyYW1lIT09ZmFsc2UmJihqLmlmcmFtZXx8cikpe2lmKGouY2xvc2VLZWVwQWxpdmUpe2YuZ2V0KGouY2xvc2VLZWVwQWxpdmUsZnVuY3Rpb24oKXt2PUcoRil9KX1lbHNle3Y9RyhGKX19ZWxzZXtpZigocHx8eCkmJncpe3Y9dChGKX1lbHNle3Y9Zi5hamF4KGopfX1vLnJlbW92ZURhdGEoImpxeGhyIikuZGF0YSgianF4aHIiLHYpO2Zvcih2YXIgQT0wO0E8cy5sZW5ndGg7QSsrKXtzW0FdPW51bGx9dGhpcy50cmlnZ2VyKCJmb3JtLXN1Ym1pdC1ub3RpZnkiLFt0aGlzLGpdKTtyZXR1cm4gdGhpcztmdW5jdGlvbiBnKEspe3ZhciBMPWYucGFyYW0oSyxqLnRyYWRpdGlvbmFsKS5zcGxpdCgiJiIpO3ZhciBxPUwubGVuZ3RoO3ZhciBrPVtdO3ZhciBKLEk7Zm9yKEo9MDtKPHE7SisrKXtMW0pdPUxbSl0ucmVwbGFjZSgvXCsvZywiICIpO0k9TFtKXS5zcGxpdCgiPSIpO2sucHVzaChbZGVjb2RlVVJJQ29tcG9uZW50KElbMF0pLGRlY29kZVVSSUNvbXBvbmVudChJWzFdKV0pfXJldHVybiBrfWZ1bmN0aW9uIHQocSl7dmFyIGs9bmV3IEZvcm1EYXRhKCk7Zm9yKHZhciBJPTA7STxxLmxlbmd0aDtJKyspe2suYXBwZW5kKHFbSV0ubmFtZSxxW0ldLnZhbHVlKX1pZihqLmV4dHJhRGF0YSl7dmFyIEw9ZyhqLmV4dHJhRGF0YSk7Zm9yKEk9MDtJPEwubGVuZ3RoO0krKyl7aWYoTFtJXSl7ay5hcHBlbmQoTFtJXVswXSxMW0ldWzFdKX19fWouZGF0YT1udWxsO3ZhciBLPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaix7Y29udGVudFR5cGU6ZmFsc2UscHJvY2Vzc0RhdGE6ZmFsc2UsY2FjaGU6ZmFsc2UsdHlwZTppfHwiUE9TVCJ9KTtpZihqLnVwbG9hZFByb2dyZXNzKXtLLnhocj1mdW5jdGlvbigpe3ZhciBNPWYuYWpheFNldHRpbmdzLnhocigpO2lmKE0udXBsb2FkKXtNLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oUSl7dmFyIFA9MDt2YXIgTj1RLmxvYWRlZHx8US5wb3NpdGlvbjt2YXIgTz1RLnRvdGFsO2lmKFEubGVuZ3RoQ29tcHV0YWJsZSl7UD1NYXRoLmNlaWwoTi9PKjEwMCl9ai51cGxvYWRQcm9ncmVzcyhRLE4sTyxQKX0sZmFsc2UpfXJldHVybiBNfX1LLmRhdGE9bnVsbDt2YXIgSj1LLmJlZm9yZVNlbmQ7Sy5iZWZvcmVTZW5kPWZ1bmN0aW9uKE4sTSl7aWYoai5mb3JtRGF0YSl7TS5kYXRhPWouZm9ybURhdGF9ZWxzZXtNLmRhdGE9a31pZihKKXtKLmNhbGwodGhpcyxOLE0pfX07cmV0dXJuIGYuYWpheChLKX1mdW5jdGlvbiBHKGFmKXt2YXIgTD1vWzBdLEssYWIsVixhZCxZLE4sUSxPLFAsWixhYyxUO3ZhciBhaT1mLkRlZmVycmVkKCk7YWkuYWJvcnQ9ZnVuY3Rpb24oYWope08uYWJvcnQoYWopfTtpZihhZil7Zm9yKGFiPTA7YWI8cy5sZW5ndGg7YWIrKyl7Sz1mKHNbYWJdKTtpZihlKXtLLnByb3AoImRpc2FibGVkIixmYWxzZSl9ZWxzZXtLLnJlbW92ZUF0dHIoImRpc2FibGVkIil9fX1WPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaik7Vi5jb250ZXh0PVYuY29udGV4dHx8VjtZPSJqcUZvcm1JTyIrKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtpZihWLmlmcmFtZVRhcmdldCl7Tj1mKFYuaWZyYW1lVGFyZ2V0KTtaPU4uYXR0cjIoIm5hbWUiKTtpZighWil7Ti5hdHRyMigibmFtZSIsWSl9ZWxzZXtZPVp9fWVsc2V7Tj1mKCc8aWZyYW1lIG5hbWU9IicrWSsnIiBzcmM9IicrVi5pZnJhbWVTcmMrJyIgLz4nKTtOLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6Ii0xMDAwcHgiLGxlZnQ6Ii0xMDAwcHgifSl9UT1OWzBdO089e2Fib3J0ZWQ6MCxyZXNwb25zZVRleHQ6bnVsbCxyZXNwb25zZVhNTDpudWxsLHN0YXR1czowLHN0YXR1c1RleHQ6Im4vYSIsZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbigpe30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbigpe30sYWJvcnQ6ZnVuY3Rpb24oYWope3ZhciBhaz0oYWo9PT0idGltZW91dCI/InRpbWVvdXQiOiJhYm9ydGVkIik7ZCgiYWJvcnRpbmcgdXBsb2FkLi4uICIrYWspO3RoaXMuYWJvcnRlZD0xO3RyeXtpZihRLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQpe1EuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgiU3RvcCIpfX1jYXRjaChhbCl7fU4uYXR0cigic3JjIixWLmlmcmFtZVNyYyk7Ty5lcnJvcj1haztpZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYWssYWopfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixha10pfWlmKFYuY29tcGxldGUpe1YuY29tcGxldGUuY2FsbChWLmNvbnRleHQsTyxhayl9fX07YWQ9Vi5nbG9iYWw7aWYoYWQmJjA9PT1mLmFjdGl2ZSsrKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTZW5kIixbTyxWXSl9aWYoVi5iZWZvcmVTZW5kJiZWLmJlZm9yZVNlbmQuY2FsbChWLmNvbnRleHQsTyxWKT09PWZhbHNlKXtpZihWLmdsb2JhbCl7Zi5hY3RpdmUtLX1haS5yZWplY3QoKTtyZXR1cm4gYWl9aWYoTy5hYm9ydGVkKXthaS5yZWplY3QoKTtyZXR1cm4gYWl9UD1MLmNsaztpZihQKXtaPVAubmFtZTtpZihaJiYhUC5kaXNhYmxlZCl7Vi5leHRyYURhdGE9Vi5leHRyYURhdGF8fHt9O1YuZXh0cmFEYXRhW1pdPVAudmFsdWU7aWYoUC50eXBlPT0iaW1hZ2UiKXtWLmV4dHJhRGF0YVtaKyIueCJdPUwuY2xrX3g7Vi5leHRyYURhdGFbWisiLnkiXT1MLmNsa195fX19dmFyIFU9MTt2YXIgUj0yO2Z1bmN0aW9uIFMoYWwpe3ZhciBhaz1udWxsO3RyeXtpZihhbC5jb250ZW50V2luZG93KXthaz1hbC5jb250ZW50V2luZG93LmRvY3VtZW50fX1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudFdpbmRvdyBkb2N1bWVudDogIithail9aWYoYWspe3JldHVybiBha310cnl7YWs9YWwuY29udGVudERvY3VtZW50P2FsLmNvbnRlbnREb2N1bWVudDphbC5kb2N1bWVudH1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudERvY3VtZW50OiAiK2FqKTthaz1hbC5kb2N1bWVudH1yZXR1cm4gYWt9dmFyIEo9ZigibWV0YVtuYW1lPWNzcmYtdG9rZW5dIikuYXR0cigiY29udGVudCIpO3ZhciBJPWYoIm1ldGFbbmFtZT1jc3JmLXBhcmFtXSIpLmF0dHIoImNvbnRlbnQiKTtpZihJJiZKKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbSV09Sn1mdW5jdGlvbiBhYSgpe3ZhciBhbD1vLmF0dHIyKCJ0YXJnZXQiKSxhaj1vLmF0dHIyKCJhY3Rpb24iKTtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixZKTtpZighaXx8L3Bvc3QvaS50ZXN0KGkpKXtMLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwiUE9TVCIpfWlmKGFqIT1WLnVybCl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsVi51cmwpfWlmKCFWLnNraXBFbmNvZGluZ092ZXJyaWRlJiYoIWl8fC9wb3N0L2kudGVzdChpKSkpe28uYXR0cih7ZW5jb2Rpbmc6Im11bHRpcGFydC9mb3JtLWRhdGEiLGVuY3R5cGU6Im11bHRpcGFydC9mb3JtLWRhdGEifSl9aWYoVi50aW1lb3V0KXtUPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthYz10cnVlO1goVSl9LFYudGltZW91dCl9ZnVuY3Rpb24gYW0oKXt0cnl7dmFyIGFxPVMoUSkucmVhZHlTdGF0ZTtkKCJzdGF0ZSA9ICIrYXEpO2lmKGFxJiZhcS50b0xvd2VyQ2FzZSgpPT0idW5pbml0aWFsaXplZCIpe3NldFRpbWVvdXQoYW0sNTApfX1jYXRjaChhcil7ZCgiU2VydmVyIGFib3J0OiAiLGFyLCIgKCIsYXIubmFtZSwiKSIpO1goUik7aWYoVCl7Y2xlYXJUaW1lb3V0KFQpfVQ9dW5kZWZpbmVkfX12YXIgYWs9W107dHJ5e2lmKFYuZXh0cmFEYXRhKXtmb3IodmFyIGFwIGluIFYuZXh0cmFEYXRhKXtpZihWLmV4dHJhRGF0YS5oYXNPd25Qcm9wZXJ0eShhcCkpe2lmKGYuaXNQbGFpbk9iamVjdChWLmV4dHJhRGF0YVthcF0pJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoIm5hbWUiKSYmVi5leHRyYURhdGFbYXBdLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrVi5leHRyYURhdGFbYXBdLm5hbWUrJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXS52YWx1ZSkuYXBwZW5kVG8oTClbMF0pfWVsc2V7YWsucHVzaChmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInK2FwKyciPicpLnZhbChWLmV4dHJhRGF0YVthcF0pLmFwcGVuZFRvKEwpWzBdKX19fX1pZighVi5pZnJhbWVUYXJnZXQpe04uYXBwZW5kVG8oImJvZHkiKX1pZihRLmF0dGFjaEV2ZW50KXtRLmF0dGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX1zZXRUaW1lb3V0KGFtLDE1KTt0cnl7TC5zdWJtaXQoKX1jYXRjaChhbil7dmFyIGFvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5zdWJtaXQ7YW8uYXBwbHkoTCl9fWZpbmFsbHl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsYWopO2lmKGFsKXtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixhbCl9ZWxzZXtvLnJlbW92ZUF0dHIoInRhcmdldCIpfWYoYWspLnJlbW92ZSgpfX1pZihWLmZvcmNlU3luYyl7YWEoKX1lbHNle3NldFRpbWVvdXQoYWEsMTApfXZhciBhZyxhaCxhZT01MCxNO2Z1bmN0aW9uIFgoYXApe2lmKE8uYWJvcnRlZHx8TSl7cmV0dXJufWFoPVMoUSk7aWYoIWFoKXtkKCJjYW5ub3QgYWNjZXNzIHJlc3BvbnNlIGRvY3VtZW50Iik7YXA9Un1pZihhcD09PVUmJk8pe08uYWJvcnQoInRpbWVvdXQiKTthaS5yZWplY3QoTywidGltZW91dCIpO3JldHVybn1lbHNle2lmKGFwPT1SJiZPKXtPLmFib3J0KCJzZXJ2ZXIgYWJvcnQiKTthaS5yZWplY3QoTywiZXJyb3IiLCJzZXJ2ZXIgYWJvcnQiKTtyZXR1cm59fWlmKCFhaHx8YWgubG9jYXRpb24uaHJlZj09Vi5pZnJhbWVTcmMpe2lmKCFhYyl7cmV0dXJufX1pZihRLmRldGFjaEV2ZW50KXtRLmRldGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX12YXIgYW49InN1Y2Nlc3MiLGFyO3RyeXtpZihhYyl7dGhyb3cidGltZW91dCJ9dmFyIGFtPVYuZGF0YVR5cGU9PSJ4bWwifHxhaC5YTUxEb2N1bWVudHx8Zi5pc1hNTERvYyhhaCk7ZCgiaXNYbWw9IithbSk7aWYoIWFtJiZ3aW5kb3cub3BlcmEmJihhaC5ib2R5PT09bnVsbHx8IWFoLmJvZHkuaW5uZXJIVE1MKSl7aWYoLS1hZSl7ZCgicmVxdWVpbmcgb25Mb2FkIGNhbGxiYWNrLCBET00gbm90IGF2YWlsYWJsZSIpO3NldFRpbWVvdXQoWCwyNTApO3JldHVybn19dmFyIGF0PWFoLmJvZHk/YWguYm9keTphaC5kb2N1bWVudEVsZW1lbnQ7Ty5yZXNwb25zZVRleHQ9YXQ/YXQuaW5uZXJIVE1MOm51bGw7Ty5yZXNwb25zZVhNTD1haC5YTUxEb2N1bWVudD9haC5YTUxEb2N1bWVudDphaDtpZihhbSl7Vi5kYXRhVHlwZT0ieG1sIn1PLmdldFJlc3BvbnNlSGVhZGVyPWZ1bmN0aW9uKGF3KXt2YXIgYXY9eyJjb250ZW50LXR5cGUiOlYuZGF0YVR5cGV9O3JldHVybiBhdlthdy50b0xvd2VyQ2FzZSgpXX07aWYoYXQpe08uc3RhdHVzPU51bWJlcihhdC5nZXRBdHRyaWJ1dGUoInN0YXR1cyIpKXx8Ty5zdGF0dXM7Ty5zdGF0dXNUZXh0PWF0LmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxPLnN0YXR1c1RleHR9dmFyIGFqPShWLmRhdGFUeXBlfHwiIikudG9Mb3dlckNhc2UoKTt2YXIgYXE9Lyhqc29ufHNjcmlwdHx0ZXh0KS8udGVzdChhaik7aWYoYXF8fFYudGV4dGFyZWEpe3ZhciBhbz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGV4dGFyZWEiKVswXTtpZihhbyl7Ty5yZXNwb25zZVRleHQ9YW8udmFsdWU7Ty5zdGF0dXM9TnVtYmVyKGFvLmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YW8uZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH1lbHNle2lmKGFxKXt2YXIgYWs9YWguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpWzBdO3ZhciBhdT1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKGFrKXtPLnJlc3BvbnNlVGV4dD1hay50ZXh0Q29udGVudD9hay50ZXh0Q29udGVudDphay5pbm5lclRleHR9ZWxzZXtpZihhdSl7Ty5yZXNwb25zZVRleHQ9YXUudGV4dENvbnRlbnQ/YXUudGV4dENvbnRlbnQ6YXUuaW5uZXJUZXh0fX19fX1lbHNle2lmKGFqPT0ieG1sIiYmIU8ucmVzcG9uc2VYTUwmJk8ucmVzcG9uc2VUZXh0KXtPLnJlc3BvbnNlWE1MPVcoTy5yZXNwb25zZVRleHQpfX10cnl7YWc9ayhPLGFqLFYpfWNhdGNoKGFsKXthbj0icGFyc2VyZXJyb3IiO08uZXJyb3I9YXI9KGFsfHxhbil9fWNhdGNoKGFsKXtkKCJlcnJvciBjYXVnaHQ6ICIsYWwpO2FuPSJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX1pZihPLmFib3J0ZWQpe2QoInVwbG9hZCBhYm9ydGVkIik7YW49bnVsbH1pZihPLnN0YXR1cyl7YW49KE8uc3RhdHVzPj0yMDAmJk8uc3RhdHVzPDMwMHx8Ty5zdGF0dXM9PT0zMDQpPyJzdWNjZXNzIjoiZXJyb3IifWlmKGFuPT09InN1Y2Nlc3MiKXtpZihWLnN1Y2Nlc3Mpe1Yuc3VjY2Vzcy5jYWxsKFYuY29udGV4dCxhZywic3VjY2VzcyIsTyl9YWkucmVzb2x2ZShPLnJlc3BvbnNlVGV4dCwic3VjY2VzcyIsTyk7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN1Y2Nlc3MiLFtPLFZdKX19ZWxzZXtpZihhbil7aWYoYXI9PT11bmRlZmluZWQpe2FyPU8uc3RhdHVzVGV4dH1pZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYW4sYXIpfWFpLnJlamVjdChPLCJlcnJvciIsYXIpO2lmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixhcl0pfX19aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbTyxWXSl9aWYoYWQmJiEtLWYuYWN0aXZlKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFuKX1NPXRydWU7aWYoVi50aW1lb3V0KXtjbGVhclRpbWVvdXQoVCl9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFWLmlmcmFtZVRhcmdldCl7Ti5yZW1vdmUoKX1lbHNle04uYXR0cigic3JjIixWLmlmcmFtZVNyYyl9Ty5yZXNwb25zZVhNTD1udWxsfSwxMDApfXZhciBXPWYucGFyc2VYTUx8fGZ1bmN0aW9uKGFqLGFrKXtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7YWs9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKTthay5hc3luYz0iZmFsc2UiO2FrLmxvYWRYTUwoYWopfWVsc2V7YWs9KG5ldyBET01QYXJzZXIoKSkucGFyc2VGcm9tU3RyaW5nKGFqLCJ0ZXh0L3htbCIpfXJldHVybihhayYmYWsuZG9jdW1lbnRFbGVtZW50JiZhay5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUhPSJwYXJzZXJlcnJvciIpP2FrOm51bGx9O3ZhciBxPWYucGFyc2VKU09OfHxmdW5jdGlvbihhail7cmV0dXJuIHdpbmRvd1siZXZhbCJdKCIoIithaisiKSIpfTt2YXIgaz1mdW5jdGlvbihhbyxhbSxhbCl7dmFyIGFrPWFvLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKXx8IiIsYWo9YW09PT0ieG1sInx8IWFtJiZhay5pbmRleE9mKCJ4bWwiKT49MCxhbj1haj9hby5yZXNwb25zZVhNTDphby5yZXNwb25zZVRleHQ7aWYoYWomJmFuLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZT09PSJwYXJzZXJlcnJvciIpe2lmKGYuZXJyb3Ipe2YuZXJyb3IoInBhcnNlcmVycm9yIil9fWlmKGFsJiZhbC5kYXRhRmlsdGVyKXthbj1hbC5kYXRhRmlsdGVyKGFuLGFtKX1pZih0eXBlb2YgYW49PT0ic3RyaW5nIil7aWYoYW09PT0ianNvbiJ8fCFhbSYmYWsuaW5kZXhPZigianNvbiIpPj0wKXthbj1xKGFuKX1lbHNle2lmKGFtPT09InNjcmlwdCJ8fCFhbSYmYWsuaW5kZXhPZigiamF2YXNjcmlwdCIpPj0wKXtmLmdsb2JhbEV2YWwoYW4pfX19cmV0dXJuIGFufTtyZXR1cm4gYWl9fTtmLmZuLmFqYXhGb3JtPWZ1bmN0aW9uKGcpe2c9Z3x8e307Zy5kZWxlZ2F0aW9uPWcuZGVsZWdhdGlvbiYmZi5pc0Z1bmN0aW9uKGYuZm4ub24pO2lmKCFnLmRlbGVnYXRpb24mJnRoaXMubGVuZ3RoPT09MCl7dmFyIGg9e3M6dGhpcy5zZWxlY3RvcixjOnRoaXMuY29udGV4dH07aWYoIWYuaXNSZWFkeSYmaC5zKXtkKCJET00gbm90IHJlYWR5LCBxdWV1aW5nIGFqYXhGb3JtIik7ZihmdW5jdGlvbigpe2YoaC5zLGguYykuYWpheEZvcm0oZyl9KTtyZXR1cm4gdGhpc31kKCJ0ZXJtaW5hdGluZzsgemVybyBlbGVtZW50cyBmb3VuZCBieSBzZWxlY3RvciIrKGYuaXNSZWFkeT8iIjoiIChET00gbm90IHJlYWR5KSIpKTtyZXR1cm4gdGhpc31pZihnLmRlbGVnYXRpb24pe2YoZG9jdW1lbnQpLm9mZigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGIpLm9mZigiY2xpY2suZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYSkub24oInN1Ym1pdC5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGIpLm9uKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGEpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIixnLGIpLmJpbmQoImNsaWNrLmZvcm0tcGx1Z2luIixnLGEpfTtmdW5jdGlvbiBiKGgpe3ZhciBnPWguZGF0YTtpZighaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aC5wcmV2ZW50RGVmYXVsdCgpO2YoaC50YXJnZXQpLmFqYXhTdWJtaXQoZyl9fWZ1bmN0aW9uIGEoayl7dmFyIGo9ay50YXJnZXQ7dmFyIGg9ZihqKTtpZighKGguaXMoIlt0eXBlPXN1Ym1pdF0sW3R5cGU9aW1hZ2VdIikpKXt2YXIgZz1oLmNsb3Nlc3QoIlt0eXBlPXN1Ym1pdF0iKTtpZihnLmxlbmd0aD09PTApe3JldHVybn1qPWdbMF19dmFyIGk9dGhpcztpLmNsaz1qO2lmKGoudHlwZT09ImltYWdlIil7aWYoay5vZmZzZXRYIT09dW5kZWZpbmVkKXtpLmNsa194PWsub2Zmc2V0WDtpLmNsa195PWsub2Zmc2V0WX1lbHNle2lmKHR5cGVvZiBmLmZuLm9mZnNldD09ImZ1bmN0aW9uIil7dmFyIGw9aC5vZmZzZXQoKTtpLmNsa194PWsucGFnZVgtbC5sZWZ0O2kuY2xrX3k9ay5wYWdlWS1sLnRvcH1lbHNle2kuY2xrX3g9ay5wYWdlWC1qLm9mZnNldExlZnQ7aS5jbGtfeT1rLnBhZ2VZLWoub2Zmc2V0VG9wfX19c2V0VGltZW91dChmdW5jdGlvbigpe2kuY2xrPWkuY2xrX3g9aS5jbGtfeT1udWxsfSwxMDApfWYuZm4uYWpheEZvcm1VbmJpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoInN1Ym1pdC5mb3JtLXBsdWdpbiBjbGljay5mb3JtLXBsdWdpbiIpfTtmLmZuLmZvcm1Ub0FycmF5PWZ1bmN0aW9uKHgsZyl7dmFyIHc9W107aWYodGhpcy5sZW5ndGg9PT0wKXtyZXR1cm4gd312YXIgbD10aGlzWzBdO3ZhciBwPXg/bC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOmwuZWxlbWVudHM7aWYoIXApe3JldHVybiB3fXZhciByLHEsbyx5LG0sdCxrO2ZvcihyPTAsdD1wLmxlbmd0aDtyPHQ7cisrKXttPXBbcl07bz1tLm5hbWU7aWYoIW98fG0uZGlzYWJsZWQpe2NvbnRpbnVlfWlmKHgmJmwuY2xrJiZtLnR5cGU9PSJpbWFnZSIpe2lmKGwuY2xrPT1tKXt3LnB1c2goe25hbWU6byx2YWx1ZTpmKG0pLnZhbCgpLHR5cGU6bS50eXBlfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfWNvbnRpbnVlfXk9Zi5maWVsZFZhbHVlKG0sdHJ1ZSk7aWYoeSYmeS5jb25zdHJ1Y3Rvcj09QXJyYXkpe2lmKGcpe2cucHVzaChtKX1mb3IocT0wLGs9eS5sZW5ndGg7cTxrO3ErKyl7dy5wdXNoKHtuYW1lOm8sdmFsdWU6eVtxXX0pfX1lbHNle2lmKGMuZmlsZWFwaSYmbS50eXBlPT0iZmlsZSIpe2lmKGcpe2cucHVzaChtKX12YXIgaD1tLmZpbGVzO2lmKGgubGVuZ3RoKXtmb3IocT0wO3E8aC5sZW5ndGg7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTpoW3FdLHR5cGU6bS50eXBlfSl9fWVsc2V7dy5wdXNoKHtuYW1lOm8sdmFsdWU6IiIsdHlwZTptLnR5cGV9KX19ZWxzZXtpZih5IT09bnVsbCYmdHlwZW9mIHkhPSJ1bmRlZmluZWQiKXtpZihnKXtnLnB1c2gobSl9dy5wdXNoKHtuYW1lOm8sdmFsdWU6eSx0eXBlOm0udHlwZSxyZXF1aXJlZDptLnJlcXVpcmVkfSl9fX19aWYoIXgmJmwuY2xrKXt2YXIgcz1mKGwuY2xrKSx1PXNbMF07bz11Lm5hbWU7aWYobyYmIXUuZGlzYWJsZWQmJnUudHlwZT09ImltYWdlIil7dy5wdXNoKHtuYW1lOm8sdmFsdWU6cy52YWwoKX0pO3cucHVzaCh7bmFtZTpvKyIueCIsdmFsdWU6bC5jbGtfeH0se25hbWU6bysiLnkiLHZhbHVlOmwuY2xrX3l9KX19cmV0dXJuIHd9O2YuZm4uZm9ybVNlcmlhbGl6ZT1mdW5jdGlvbihnKXtyZXR1cm4gZi5wYXJhbSh0aGlzLmZvcm1Ub0FycmF5KGcpKX07Zi5mbi5maWVsZFNlcmlhbGl6ZT1mdW5jdGlvbihoKXt2YXIgZz1bXTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5hbWU7aWYoIW0pe3JldHVybn12YXIgaz1mLmZpZWxkVmFsdWUodGhpcyxoKTtpZihrJiZrLmNvbnN0cnVjdG9yPT1BcnJheSl7Zm9yKHZhciBsPTAsaj1rLmxlbmd0aDtsPGo7bCsrKXtnLnB1c2goe25hbWU6bSx2YWx1ZTprW2xdfSl9fWVsc2V7aWYoayE9PW51bGwmJnR5cGVvZiBrIT0idW5kZWZpbmVkIil7Zy5wdXNoKHtuYW1lOnRoaXMubmFtZSx2YWx1ZTprfSl9fX0pO3JldHVybiBmLnBhcmFtKGcpfTtmLmZuLmZpZWxkVmFsdWU9ZnVuY3Rpb24obSl7Zm9yKHZhciBsPVtdLGo9MCxnPXRoaXMubGVuZ3RoO2o8ZztqKyspe3ZhciBrPXRoaXNbal07dmFyIGg9Zi5maWVsZFZhbHVlKGssbSk7aWYoaD09PW51bGx8fHR5cGVvZiBoPT0idW5kZWZpbmVkInx8KGguY29uc3RydWN0b3I9PUFycmF5JiYhaC5sZW5ndGgpKXtjb250aW51ZX1pZihoLmNvbnN0cnVjdG9yPT1BcnJheSl7Zi5tZXJnZShsLGgpfWVsc2V7bC5wdXNoKGgpfX1yZXR1cm4gbH07Zi5maWVsZFZhbHVlPWZ1bmN0aW9uKGcsbyl7dmFyIGo9Zy5uYW1lLHU9Zy50eXBlLHc9Zy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYobz09PXVuZGVmaW5lZCl7bz10cnVlfWlmKG8mJighanx8Zy5kaXNhYmxlZHx8dT09InJlc2V0Inx8dT09ImJ1dHRvbiJ8fCh1PT0iY2hlY2tib3gifHx1PT0icmFkaW8iKSYmIWcuY2hlY2tlZHx8KHU9PSJzdWJtaXQifHx1PT0iaW1hZ2UiKSYmZy5mb3JtJiZnLmZvcm0uY2xrIT1nfHx3PT0ic2VsZWN0IiYmZy5zZWxlY3RlZEluZGV4PT0tMSkpe3JldHVybiBudWxsfWlmKHc9PSJzZWxlY3QiKXt2YXIgcD1nLnNlbGVjdGVkSW5kZXg7aWYocDwwKXtyZXR1cm4gbnVsbH12YXIgcj1bXSxoPWcub3B0aW9uczt2YXIgbD0odT09InNlbGVjdC1vbmUiKTt2YXIgcT0obD9wKzE6aC5sZW5ndGgpO2Zvcih2YXIgaz0obD9wOjApO2s8cTtrKyspe3ZhciBtPWhba107aWYobS5zZWxlY3RlZCl7dmFyIHM9bS52YWx1ZTtpZighcyl7cz0obS5hdHRyaWJ1dGVzJiZtLmF0dHJpYnV0ZXMudmFsdWUmJiEobS5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZCkpP20udGV4dDptLnZhbHVlfWlmKGwpe3JldHVybiBzfXIucHVzaChzKX19cmV0dXJuIHJ9cmV0dXJuIGYoZykudmFsKCl9O2YuZm4uY2xlYXJGb3JtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKCJpbnB1dCxzZWxlY3QsdGV4dGFyZWEiLHRoaXMpLmNsZWFyRmllbGRzKGcpfSl9O2YuZm4uY2xlYXJGaWVsZHM9Zi5mbi5jbGVhcklucHV0cz1mdW5jdGlvbihnKXt2YXIgaD0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy50eXBlLGk9dGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoaC50ZXN0KGopfHxpPT0idGV4dGFyZWEiKXt0aGlzLnZhbHVlPSIifWVsc2V7aWYoaj09ImNoZWNrYm94Inx8aj09InJhZGlvIil7dGhpcy5jaGVja2VkPWZhbHNlfWVsc2V7aWYoaT09InNlbGVjdCIpe3RoaXMuc2VsZWN0ZWRJbmRleD0tMX1lbHNle2lmKGo9PSJmaWxlIil7aWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpe2YodGhpcykucmVwbGFjZVdpdGgoZih0aGlzKS5jbG9uZSh0cnVlKSl9ZWxzZXtmKHRoaXMpLnZhbCgiIil9fWVsc2V7aWYoZyl7aWYoKGc9PT10cnVlJiYvaGlkZGVuLy50ZXN0KGopKXx8KHR5cGVvZiBnPT0ic3RyaW5nIiYmZih0aGlzKS5pcyhnKSkpe3RoaXMudmFsdWU9IiJ9fX19fX19KX07Zi5mbi5yZXNldEZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMucmVzZXQ9PSJmdW5jdGlvbiJ8fCh0eXBlb2YgdGhpcy5yZXNldD09Im9iamVjdCImJiF0aGlzLnJlc2V0Lm5vZGVUeXBlKSl7dGhpcy5yZXNldCgpfX0pfTtmLmZuLmVuYWJsZT1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9IWd9KX07Zi5mbi5zZWxlY3RlZD1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXRoaXMudHlwZTtpZihoPT0iY2hlY2tib3gifHxoPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9Z31lbHNle2lmKHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ib3B0aW9uIil7dmFyIGk9Zih0aGlzKS5wYXJlbnQoInNlbGVjdCIpO2lmKGcmJmlbMF0mJmlbMF0udHlwZT09InNlbGVjdC1vbmUiKXtpLmZpbmQoIm9wdGlvbiIpLnNlbGVjdGVkKGZhbHNlKX10aGlzLnNlbGVjdGVkPWd9fX0pfTtmLmZuLmFqYXhTdWJtaXQuZGVidWc9ZmFsc2U7ZnVuY3Rpb24gZCgpe2lmKCFmLmZuLmFqYXhTdWJtaXQuZGVidWcpe3JldHVybn12YXIgZz0iW2pxdWVyeS5mb3JtXSAiK0FycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKTtpZih3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nKXt3aW5kb3cuY29uc29sZS5sb2coZyl9ZWxzZXtpZih3aW5kb3cub3BlcmEmJndpbmRvdy5vcGVyYS5wb3N0RXJyb3Ipe3dpbmRvdy5vcGVyYS5wb3N0RXJyb3IoZyl9fX19KSk7UEsHCHYQEAGjPgAAoz4AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xsaWJcbWFya2VkLm1pbi5qcyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9e30sdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5ydWxlcz1hLm5vcm1hbCx0aGlzLm9wdGlvbnMuZ2ZtJiYodGhpcy5ydWxlcz10aGlzLm9wdGlvbnMudGFibGVzP2EudGFibGVzOmEuZ2ZtKX1mdW5jdGlvbiB0KGUsdCl7aWYodGhpcy5vcHRpb25zPXR8fGguZGVmYXVsdHMsdGhpcy5saW5rcz1lLHRoaXMucnVsZXM9dS5ub3JtYWwsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBuLCF0aGlzLmxpbmtzKXRocm93IG5ldyBFcnJvcigiVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4iKTt0aGlzLm9wdGlvbnMuZ2ZtP3RoaXMucnVsZXM9dGhpcy5vcHRpb25zLmJyZWFrcz91LmJyZWFrczp1LmdmbTp0aGlzLm9wdGlvbnMucGVkYW50aWMmJih0aGlzLnJ1bGVzPXUucGVkYW50aWMpfWZ1bmN0aW9uIG4oKXt9ZnVuY3Rpb24gcihlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlLnJlcGxhY2UodD8vJi9nOi8mKD8hIz9cdys7KS9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCImIzM5OyIpfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZT1lLnNvdXJjZSx0PXR8fCIiLGZ1bmN0aW9uIG4ocixzKXtyZXR1cm4gcj8ocz1zLnNvdXJjZXx8cyxzPXMucmVwbGFjZSgvKF58W15cW10pXF4vZywiJDEiKSxlPWUucmVwbGFjZShyLHMpLG4pOm5ldyBSZWdFeHAoZSx0KX19ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdCxuLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt0PWFyZ3VtZW50c1tyXTtmb3IobiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX1yZXR1cm4gZX1mdW5jdGlvbiBoKHQsbixpKXtpZihpfHwiZnVuY3Rpb24iPT10eXBlb2Ygbil7aXx8KGk9bixuPW51bGwpLG49byh7fSxoLmRlZmF1bHRzLG58fHt9KTt2YXIgbCxhLHU9bi5oaWdobGlnaHQscD0wO3RyeXtsPWUubGV4KHQsbil9Y2F0Y2goYyl7cmV0dXJuIGkoYyl9YT1sLmxlbmd0aDt2YXIgZz1mdW5jdGlvbigpe3ZhciBlLHQ7dHJ5e2U9ci5wYXJzZShsLG4pfWNhdGNoKHMpe3Q9c31yZXR1cm4gbi5oaWdobGlnaHQ9dSx0P2kodCk6aShudWxsLGUpfTtpZighdXx8dS5sZW5ndGg8MylyZXR1cm4gZygpO2lmKGRlbGV0ZSBuLmhpZ2hsaWdodCwhYSlyZXR1cm4gZygpO2Zvcig7cDxsLmxlbmd0aDtwKyspIWZ1bmN0aW9uKGUpe3JldHVybiJjb2RlIiE9PWUudHlwZT8tLWF8fGcoKTp1KGUudGV4dCxlLmxhbmcsZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09bnx8bj09PWUudGV4dD8tLWF8fGcoKTooZS50ZXh0PW4sZS5lc2NhcGVkPSEwLC0tYXx8ZygpLHZvaWQgMCl9KX0obFtwXSl9ZWxzZSB0cnl7cmV0dXJuIG4mJihuPW8oe30saC5kZWZhdWx0cyxuKSksci5wYXJzZShlLmxleCh0LG4pLG4pfWNhdGNoKGMpe2lmKGMubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGpqL21hcmtlZC4iLChufHxoLmRlZmF1bHRzKS5zaWxlbnQpcmV0dXJuIjxwPkFuIGVycm9yIG9jY3VyZWQ6PC9wPjxwcmU+IitzKGMubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7dGhyb3cgY319dmFyIGE9e25ld2xpbmU6L15cbisvLGNvZGU6L14oIHs0fVteXG5dK1xuKikrLyxmZW5jZXM6bCxocjovXiggKlstKl9dKXszLH0gKig/OlxuK3wkKS8saGVhZGluZzovXiAqKCN7MSw2fSkgKihbXlxuXSs/KSAqIyogKig/OlxuK3wkKS8sbnB0YWJsZTpsLGxoZWFkaW5nOi9eKFteXG5dKylcbiAqKD18LSl7Mix9ICooPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oICo+W15cbl0rKFxuW15cbl0rKSpcbiopKy8sbGlzdDovXiggKikoYnVsbCkgW1xzXFNdKz8oPzpocnxcbnsyLH0oPyEgKSg/IVwxYnVsbCApXG4qfFxzKiQpLyxodG1sOi9eICooPzpjb21tZW50fGNsb3NlZHxjbG9zaW5nKSAqKD86XG57Mix9fFxzKiQpLyxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogK1siKF0oW15cbl0rKVsiKV0pPyAqKD86XG4rfCQpLyx0YWJsZTpsLHBhcmFncmFwaDovXigoPzpbXlxuXStcbj8oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8dGFnfGRlZikpKylcbiovLHRleHQ6L15bXlxuXSsvfTthLmJ1bGxldD0vKD86WyorLV18XGQrXC4pLyxhLml0ZW09L14oICopKGJ1bGwpIFteXG5dKig/OlxuKD8hXDFidWxsIClbXlxuXSopKi8sYS5pdGVtPWkoYS5pdGVtLCJnbSIpKC9idWxsL2csYS5idWxsZXQpKCksYS5saXN0PWkoYS5saXN0KSgvYnVsbC9nLGEuYnVsbGV0KSgiaHIiLC9cbisoPz0oPzogKlstKl9dKXszLH0gKig/OlxuK3wkKSkvKSgpLGEuX3RhZz0iKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6L3xAKVxcYiIsYS5odG1sPWkoYS5odG1sKSgiY29tbWVudCIsLzwhLS1bXHNcU10qPy0tPi8pKCJjbG9zZWQiLC88KHRhZylbXHNcU10rPzxcL1wxPi8pKCJjbG9zaW5nIiwvPHRhZyg/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPl0pKj8+LykoL3RhZy9nLGEuX3RhZykoKSxhLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiaHIiLGEuaHIpKCJoZWFkaW5nIixhLmhlYWRpbmcpKCJsaGVhZGluZyIsYS5saGVhZGluZykoImJsb2NrcXVvdGUiLGEuYmxvY2txdW90ZSkoInRhZyIsIjwiK2EuX3RhZykoImRlZiIsYS5kZWYpKCksYS5ub3JtYWw9byh7fSxhKSxhLmdmbT1vKHt9LGEubm9ybWFsLHtmZW5jZXM6L14gKihgezMsfXx+ezMsfSkgKihcUyspPyAqXG4oW1xzXFNdKz8pXHMqXDEgKig/OlxuK3wkKS8scGFyYWdyYXBoOi9eL30pLGEuZ2ZtLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiKD8hIiwiKD8hIithLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMiIpKyJ8IithLmxpc3Quc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMyIpKyJ8IikoKSxhLnRhYmxlcz1vKHt9LGEuZ2ZtLHtucHRhYmxlOi9eICooXFMuKlx8LiopXG4gKihbLTpdKyAqXHxbLXwgOl0qKVxuKCg/Oi4qXHwuKig/OlxufCQpKSopXG4qLyx0YWJsZTovXiAqXHwoLispXG4gKlx8KCAqWy06XStbLXwgOl0qKVxuKCg/OiAqXHwuKig/OlxufCQpKSopXG4qL30pLGUucnVsZXM9YSxlLmxleD1mdW5jdGlvbih0LG4pe3ZhciByPW5ldyBlKG4pO3JldHVybiByLmxleCh0KX0sZS5wcm90b3R5cGUubGV4PWZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9cdTAwYTAvZywiICIpLnJlcGxhY2UoL1x1MjQyNC9nLCJcbiIpLHRoaXMudG9rZW4oZSwhMCl9LGUucHJvdG90eXBlLnRva2VuPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIscyxpLGwsbyxoLHUscCxlPWUucmVwbGFjZSgvXiArJC9nbSwiIik7ZTspaWYoKHM9dGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoZSkpJiYoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksc1swXS5sZW5ndGg+MSYmdGhpcy50b2tlbnMucHVzaCh7dHlwZToic3BhY2UifSkpLHM9dGhpcy5ydWxlcy5jb2RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCkscz1zWzBdLnJlcGxhY2UoL14gezR9L2dtLCIiKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9zOnMucmVwbGFjZSgvXG4rJC8sIiIpfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuZmVuY2VzLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiY29kZSIsbGFuZzpzWzJdLHRleHQ6c1szXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDpzWzFdLmxlbmd0aCx0ZXh0OnNbMl19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMubnB0YWJsZS5leGVjKGUpKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLG89e3R5cGU6InRhYmxlIixoZWFkZXI6c1sxXS5yZXBsYWNlKC9eICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksYWxpZ246c1syXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGNlbGxzOnNbM10ucmVwbGFjZSgvXG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnNwbGl0KC8gKlx8ICovKTt0aGlzLnRva2Vucy5wdXNoKG8pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmxoZWFkaW5nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiaGVhZGluZyIsZGVwdGg6Ij0iPT09c1syXT8xOjIsdGV4dDpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaHIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJociJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9zdGFydCJ9KSxzPXNbMF0ucmVwbGFjZSgvXiAqPiA/L2dtLCIiKSx0aGlzLnRva2VuKHMsdCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9lbmQifSk7ZWxzZSBpZihzPXRoaXMucnVsZXMubGlzdC5leGVjKGUpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksaT1zWzJdLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3Rfc3RhcnQiLG9yZGVyZWQ6aS5sZW5ndGg+MX0pLHM9c1swXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pLG49ITEscD1zLmxlbmd0aCx1PTA7cD51O3UrKylvPXNbdV0saD1vLmxlbmd0aCxvPW8ucmVwbGFjZSgvXiAqKFsqKy1dfFxkK1wuKSArLywiIiksfm8uaW5kZXhPZigiXG4gIikmJihoLT1vLmxlbmd0aCxvPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9vLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpOm8ucmVwbGFjZShuZXcgUmVnRXhwKCJeIHsxLCIraCsifSIsImdtIiksIiIpKSx0aGlzLm9wdGlvbnMuc21hcnRMaXN0cyYmdSE9PXAtMSYmKGw9YS5idWxsZXQuZXhlYyhzW3UrMV0pWzBdLGk9PT1sfHxpLmxlbmd0aD4xJiZsLmxlbmd0aD4xfHwoZT1zLnNsaWNlKHUrMSkuam9pbigiXG4iKStlLHU9cC0xKSkscj1ufHwvXG5cbig/IVxzKiQpLy50ZXN0KG8pLHUhPT1wLTEmJihuPSJcbiI9PT1vLmNoYXJBdChvLmxlbmd0aC0xKSxyfHwocj1uKSksdGhpcy50b2tlbnMucHVzaCh7dHlwZTpyPyJsb29zZV9pdGVtX3N0YXJ0IjoibGlzdF9pdGVtX3N0YXJ0In0pLHRoaXMudG9rZW4obywhMSksdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9pdGVtX2VuZCJ9KTt0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2VuZCJ9KX1lbHNlIGlmKHM9dGhpcy5ydWxlcy5odG1sLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InBhcmFncmFwaCI6Imh0bWwiLHByZToicHJlIj09PXNbMV18fCJzY3JpcHQiPT09c1sxXXx8InN0eWxlIj09PXNbMV0sdGV4dDpzWzBdfSk7ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLmRlZi5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5saW5rc1tzWzFdLnRvTG93ZXJDYXNlKCldPXtocmVmOnNbMl0sdGl0bGU6c1szXX07ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC8oPzogKlx8ICopP1xuJC8sIiIpLnNwbGl0KCJcbiIpfSx1PTA7dTxvLmFsaWduLmxlbmd0aDt1Kyspby5hbGlnblt1XT0vXiAqLSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChvLmFsaWduW3VdKT8ibGVmdCI6bnVsbDtmb3IodT0wO3U8by5jZWxscy5sZW5ndGg7dSsrKW8uY2VsbHNbdV09by5jZWxsc1t1XS5yZXBsYWNlKC9eICpcfCAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJwYXJhZ3JhcGgiLHRleHQ6IlxuIj09PXNbMV0uY2hhckF0KHNbMV0ubGVuZ3RoLTEpP3NbMV0uc2xpY2UoMCwtMSk6c1sxXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJ0ZXh0Iix0ZXh0OnNbMF19KTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gdGhpcy50b2tlbnN9O3ZhciB1PXtlc2NhcGU6L15cXChbXFxgKnt9XFtcXSgpIytcLS4hXz5dKS8sYXV0b2xpbms6L148KFteID5dKyhAfDpcLylbXiA+XSspPi8sdXJsOmwsdGFnOi9ePCEtLVtcc1xTXSo/LS0+fF48XC8/XHcrKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vLGxpbms6L14hP1xbKGluc2lkZSlcXVwoaHJlZlwpLyxyZWZsaW5rOi9eIT9cWyhpbnNpZGUpXF1ccypcWyhbXlxdXSopXF0vLG5vbGluazovXiE/XFsoKD86XFtbXlxdXSpcXXxbXlxbXF1dKSopXF0vLHN0cm9uZzovXl9fKFtcc1xTXSs/KV9fKD8hXyl8XlwqXCooW1xzXFNdKz8pXCpcKig/IVwqKS8sZW06L15cYl8oKD86X198W1xzXFNdKSs/KV9cYnxeXCooKD86XCpcKnxbXHNcU10pKz8pXCooPyFcKikvLGNvZGU6L14oYCspXHMqKFtcc1xTXSo/W15gXSlccypcMSg/IWApLyxicjovXiB7Mix9XG4oPyFccyokKS8sZGVsOmwsdGV4dDovXltcc1xTXSs/KD89W1xcPCFcW18qYF18IHsyLH1cbnwkKS99O3UuX2luc2lkZT0vKD86XFtbXlxdXSpcXXxbXlxbXF1dfFxdKD89W15cW10qXF0pKSovLHUuX2hyZWY9L1xzKjw/KFtcc1xTXSo/KT4/KD86XHMrWyciXShbXHNcU10qPylbJyJdKT9ccyovLHUubGluaz1pKHUubGluaykoImluc2lkZSIsdS5faW5zaWRlKSgiaHJlZiIsdS5faHJlZikoKSx1LnJlZmxpbms9aSh1LnJlZmxpbmspKCJpbnNpZGUiLHUuX2luc2lkZSkoKSx1Lm5vcm1hbD1vKHt9LHUpLHUucGVkYW50aWM9byh7fSx1Lm5vcm1hbCx7c3Ryb25nOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW06L15fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pfF5cKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopL30pLHUuZ2ZtPW8oe30sdS5ub3JtYWwse2VzY2FwZTppKHUuZXNjYXBlKSgiXSkiLCJ+fF0pIikoKSx1cmw6L14oaHR0cHM/OlwvXC9bXlxzPF0rW148Liw6OyInKVxdXHNdKS8sZGVsOi9efn4oPz1cUykoW1xzXFNdKj9cUyl+fi8sdGV4dDppKHUudGV4dCkoIl18Iiwifl18IikoInwiLCJ8aHR0cHM/Oi8vfCIpKCl9KSx1LmJyZWFrcz1vKHt9LHUuZ2ZtLHticjppKHUuYnIpKCJ7Mix9IiwiKiIpKCksdGV4dDppKHUuZ2ZtLnRleHQpKCJ7Mix9IiwiKiIpKCl9KSx0LnJ1bGVzPXUsdC5vdXRwdXQ9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzPW5ldyB0KG4scik7cmV0dXJuIHMub3V0cHV0KGUpfSx0LnByb3RvdHlwZS5vdXRwdXQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpLGw9IiI7ZTspaWYoaT10aGlzLnJ1bGVzLmVzY2FwZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPWlbMV07ZWxzZSBpZihpPXRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSwiQCI9PT1pWzJdPyhuPSI6Ij09PWlbMV0uY2hhckF0KDYpP3RoaXMubWFuZ2xlKGlbMV0uc3Vic3RyaW5nKDcpKTp0aGlzLm1hbmdsZShpWzFdKSxyPXRoaXMubWFuZ2xlKCJtYWlsdG86Iikrbik6KG49cyhpWzFdKSxyPW4pLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudXJsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbj1zKGlbMV0pLHI9bixsKz10aGlzLnJlbmRlcmVyLmxpbmsocixudWxsLG4pO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRhZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3B0aW9ucy5zYW5pdGl6ZT9zKGlbMF0pOmlbMF07ZWxzZSBpZihpPXRoaXMucnVsZXMubGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3V0cHV0TGluayhpLHtocmVmOmlbMl0sdGl0bGU6aVszXX0pO2Vsc2UgaWYoKGk9dGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoZSkpfHwoaT10aGlzLnJ1bGVzLm5vbGluay5leGVjKGUpKSl7aWYoZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdD0oaVsyXXx8aVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSx0PXRoaXMubGlua3NbdC50b0xvd2VyQ2FzZSgpXSwhdHx8IXQuaHJlZil7bCs9aVswXS5jaGFyQXQoMCksZT1pWzBdLnN1YnN0cmluZygxKStlO2NvbnRpbnVlfWwrPXRoaXMub3V0cHV0TGluayhpLHQpfWVsc2UgaWYoaT10aGlzLnJ1bGVzLnN0cm9uZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuc3Ryb25nKHRoaXMub3V0cHV0KGlbMl18fGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5lbS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZW0odGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmNvZGVzcGFuKHMoaVsyXSwhMCkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmJyLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5icigpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmRlbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZGVsKHRoaXMub3V0cHV0KGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy50ZXh0LmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9cyh0aGlzLnNtYXJ0eXBhbnRzKGlbMF0pKTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gbH0sdC5wcm90b3R5cGUub3V0cHV0TGluaz1mdW5jdGlvbihlLHQpe3ZhciBuPXModC5ocmVmKSxyPXQudGl0bGU/cyh0LnRpdGxlKTpudWxsO3JldHVybiIhIiE9PWVbMF0uY2hhckF0KDApP3RoaXMucmVuZGVyZXIubGluayhuLHIsdGhpcy5vdXRwdXQoZVsxXSkpOnRoaXMucmVuZGVyZXIuaW1hZ2UobixyLHMoZVsxXSkpfSx0LnByb3RvdHlwZS5zbWFydHlwYW50cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2UucmVwbGFjZSgvLS0vZywi4oCUIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMeKAmCIpLnJlcGxhY2UoLycvZywi4oCZIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQx4oCcIikucmVwbGFjZSgvIi9nLCLigJ0iKS5yZXBsYWNlKC9cLnszfS9nLCLigKYiKTplfSx0LnByb3RvdHlwZS5tYW5nbGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiIscj1lLmxlbmd0aCxzPTA7cj5zO3MrKyl0PWUuY2hhckNvZGVBdChzKSxNYXRoLnJhbmRvbSgpPi41JiYodD0ieCIrdC50b1N0cmluZygxNikpLG4rPSImIyIrdCsiOyI7cmV0dXJuIG59LG4ucHJvdG90eXBlLmNvZGU9ZnVuY3Rpb24oZSx0LG4scil7aWYocj1yfHx7fSxyLmhpZ2hsaWdodCl7dmFyIGk9ci5oaWdobGlnaHQoZSx0KTtudWxsIT1pJiZpIT09ZSYmKG49ITAsZT1pKX1yZXR1cm4gdD8nPHByZT48Y29kZSBjbGFzcz0iJytyLmxhbmdQcmVmaXgrdCsnIj4nKyhuP2U6cyhlKSkrIlxuPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhuP2U6cyhlLCEwKSkrIlxuPC9jb2RlPjwvcHJlPiJ9LG4ucHJvdG90eXBlLmJsb2NrcXVvdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIjxibG9ja3F1b3RlPlxuIitlKyI8L2Jsb2NrcXVvdGU+XG4ifSxuLnByb3RvdHlwZS5odG1sPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxuLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aCIrdCsnIGlkPSInK3IuaGVhZGVyUHJlZml4K24udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlx3XSsvZywiLSIpKyciPicrZSsiPC9oIit0KyI+XG4ifSxuLnByb3RvdHlwZS5ocj1mdW5jdGlvbigpe3JldHVybiI8aHI+XG4ifSxuLnByb3RvdHlwZS5saXN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dD8ib2wiOiJ1bCI7cmV0dXJuIjwiK24rIj5cbiIrZSsiPC8iK24rIj5cbiJ9LG4ucHJvdG90eXBlLmxpc3RpdGVtPWZ1bmN0aW9uKGUpe3JldHVybiI8bGk+IitlKyI8L2xpPlxuIn0sbi5wcm90b3R5cGUucGFyYWdyYXBoPWZ1bmN0aW9uKGUpe3JldHVybiI8cD4iK2UrIjwvcD5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrZSsiPC90aGVhZD5cbiIrIjx0Ym9keT5cbiIrdCsiPC90Ym9keT5cbiIrIjwvdGFibGU+XG4ifSxuLnByb3RvdHlwZS50YWJsZXJvdz1mdW5jdGlvbihlKXtyZXR1cm4iPHRyPlxuIitlKyI8L3RyPlxuIn0sbi5wcm90b3R5cGUudGFibGVjZWxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5oZWFkZXI/InRoIjoidGQiLHI9dC5hbGlnbj8iPCIrbisnIHN0eWxlPSJ0ZXh0LWFsaWduOicrdC5hbGlnbisnIj4nOiI8IituKyI+IjtyZXR1cm4gcitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUuc3Ryb25nPWZ1bmN0aW9uKGUpe3JldHVybiI8c3Ryb25nPiIrZSsiPC9zdHJvbmc+In0sbi5wcm90b3R5cGUuZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxlbT4iK2UrIjwvZW0+In0sbi5wcm90b3R5cGUuY29kZXNwYW49ZnVuY3Rpb24oZSl7cmV0dXJuIjxjb2RlPiIrZSsiPC9jb2RlPiJ9LG4ucHJvdG90eXBlLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIjxicj4ifSxuLnByb3RvdHlwZS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIjxkZWw+IitlKyI8L2RlbD4ifSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0nPGEgaHJlZj0iJytlKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+IituKyI8L2E+In0sbi5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8aW1nIHNyYz0iJytlKyciIGFsdD0iJytuKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+In0sci5wYXJzZT1mdW5jdGlvbihlLHQsbil7dmFyIHM9bmV3IHIodCxuKTtyZXR1cm4gcy5wYXJzZShlKX0sci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7dGhpcy5pbmxpbmU9bmV3IHQoZS5saW5rcyx0aGlzLm9wdGlvbnMsdGhpcy5yZW5kZXJlciksdGhpcy50b2tlbnM9ZS5yZXZlcnNlKCk7Zm9yKHZhciBuPSIiO3RoaXMubmV4dCgpOyluKz10aGlzLnRvaygpO3JldHVybiBufSxyLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW49dGhpcy50b2tlbnMucG9wKCl9LHIucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdfHwwfSxyLnByb3RvdHlwZS5wYXJzZVRleHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy50b2tlbi50ZXh0OyJ0ZXh0Ij09PXRoaXMucGVlaygpLnR5cGU7KWUrPSJcbiIrdGhpcy5uZXh0KCkudGV4dDtyZXR1cm4gdGhpcy5pbmxpbmUub3V0cHV0KGUpfSxyLnByb3RvdHlwZS50b2s9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy50b2tlbi50eXBlKXtjYXNlInNwYWNlIjpyZXR1cm4iIjtjYXNlImhyIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpO2Nhc2UiaGVhZGluZyI6cmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSx0aGlzLnRva2VuLmRlcHRoLHRoaXMudG9rZW4udGV4dCx0aGlzLm9wdGlvbnMpO2Nhc2UiY29kZSI6cmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsdGhpcy50b2tlbi5sYW5nLHRoaXMudG9rZW4uZXNjYXBlZCx0aGlzLm9wdGlvbnMpO2Nhc2UidGFibGUiOnZhciBlLHQsbixyLHMsaT0iIixsPSIiO2ZvcihuPSIiLGU9MDtlPHRoaXMudG9rZW4uaGVhZGVyLmxlbmd0aDtlKyspcj17aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19LG4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLmhlYWRlcltlXSkse2hlYWRlcjohMCxhbGlnbjp0aGlzLnRva2VuLmFsaWduW2VdfSk7Zm9yKGkrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobiksZT0wO2U8dGhpcy50b2tlbi5jZWxscy5sZW5ndGg7ZSsrKXtmb3IodD10aGlzLnRva2VuLmNlbGxzW2VdLG49IiIscz0wO3M8dC5sZW5ndGg7cysrKW4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0W3NdKSx7aGVhZGVyOiExLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bc119KTtsKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KG4pfXJldHVybiB0aGlzLnJlbmRlcmVyLnRhYmxlKGksbCk7Y2FzZSJibG9ja3F1b3RlX3N0YXJ0Ijpmb3IodmFyIGw9IiI7ImJsb2NrcXVvdGVfZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShsKTtjYXNlImxpc3Rfc3RhcnQiOmZvcih2YXIgbD0iIixvPXRoaXMudG9rZW4ub3JkZXJlZDsibGlzdF9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0KGwsbyk7Y2FzZSJsaXN0X2l0ZW1fc3RhcnQiOmZvcih2YXIgbD0iIjsibGlzdF9pdGVtX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz0idGV4dCI9PT10aGlzLnRva2VuLnR5cGU/dGhpcy5wYXJzZVRleHQoKTp0aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGwpO2Nhc2UibG9vc2VfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJodG1sIjp2YXIgaD10aGlzLnRva2VuLnByZXx8dGhpcy5vcHRpb25zLnBlZGFudGljP3RoaXMudG9rZW4udGV4dDp0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KTtyZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKGgpO2Nhc2UicGFyYWdyYXBoIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCkpO2Nhc2UidGV4dCI6cmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VUZXh0KCkpfX0sbC5leGVjPWwsaC5vcHRpb25zPWguc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gbyhoLmRlZmF1bHRzLGUpLGh9LGguZGVmYXVsdHM9e2dmbTohMCx0YWJsZXM6ITAsYnJlYWtzOiExLHBlZGFudGljOiExLHNhbml0aXplOiExLHNtYXJ0TGlzdHM6ITEsc2lsZW50OiExLGhpZ2hsaWdodDpudWxsLGxhbmdQcmVmaXg6ImxhbmctIixzbWFydHlwYW50czohMSxoZWFkZXJQcmVmaXg6IiIscmVuZGVyZXI6bmV3IG59LGguUGFyc2VyPXIsaC5wYXJzZXI9ci5wYXJzZSxoLlJlbmRlcmVyPW4saC5MZXhlcj1lLGgubGV4ZXI9ZS5sZXgsaC5JbmxpbmVMZXhlcj10LGguaW5saW5lTGV4ZXI9dC5vdXRwdXQsaC5wYXJzZT1oLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1oOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTp0aGlzLm1hcmtlZD1ofS5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fCgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6Z2xvYmFsKX0oKSk7UEsHCEL6TGpTOQAAUzkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHN0YXRpY1xsaWJcdmFsaWRhdGUubWluLmpzLyoKICogdmFsaWRhdGUuanMgMS4zCiAqIENvcHlyaWdodCAoYykgMjAxMyBSaWNrIEhhcnJpc29uLCBodHRwOi8vcmlja2hhcnJpc29uLm1lCiAqIHZhbGlkYXRlLmpzIGlzIG9wZW4gc291cmNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqIFBvcnRpb25zIG9mIHZhbGlkYXRlLmpzIGFyZSBpbnNwaXJlZCBieSBDb2RlSWduaXRlci4KICogaHR0cDovL3JpY2toYXJyaXNvbi5naXRodWIuY29tL3ZhbGlkYXRlLmpzCiAqLwoKKGZ1bmN0aW9uKHEscixtKXt2YXIgcz17cmVxdWlyZWQ6IlRoZSAlcyBmaWVsZCBpcyByZXF1aXJlZC4iLG1hdGNoZXM6IlRoZSAlcyBmaWVsZCBkb2VzIG5vdCBtYXRjaCB0aGUgJXMgZmllbGQuIiwiZGVmYXVsdCI6IlRoZSAlcyBmaWVsZCBpcyBzdGlsbCBzZXQgdG8gZGVmYXVsdCwgcGxlYXNlIGNoYW5nZS4iLHZhbGlkX2VtYWlsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iLHZhbGlkX2VtYWlsczoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhbGwgdmFsaWQgZW1haWwgYWRkcmVzc2VzLiIsbWluX2xlbmd0aDoiVGhlICVzIGZpZWxkIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixtYXhfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBub3QgZXhjZWVkICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZXhhY3RfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBleGFjdGx5ICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZ3JlYXRlcl90aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAlcy4iLGxlc3NfdGhhbjoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBsZXNzIHRoYW4gJXMuIixhbHBoYToiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzLiIsYWxwaGFfbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycy4iLGFscGhhX2Rhc2g6IlRoZSAlcyBmaWVsZCBtdXN0IG9ubHkgY29udGFpbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBhbmQgZGFzaGVzLiIsbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5IG51bWJlcnMuIixpbnRlZ2VyOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFuIGludGVnZXIuIixkZWNpbWFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgZGVjaW1hbCBudW1iZXIuIixpc19uYXR1cmFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgcG9zaXRpdmUgbnVtYmVycy4iLGlzX25hdHVyYWxfbm9femVybzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4iLHZhbGlkX2lwOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgSVAuIix2YWxpZF9iYXNlNjQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBiYXNlNjQgc3RyaW5nLiIsdmFsaWRfY3JlZGl0X2NhcmQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIuIixpc19maWxlX3R5cGU6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSAlcyBmaWxlcy4iLHZhbGlkX3VybDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIFVSTC4ifSx0PWZ1bmN0aW9uKGEpe30sdT0vXiguKz8pXFsoLispXF0kLyxoPS9eWzAtOV0rJC8sdj0vXlwtP1swLTldKyQvLGs9L15cLT9bMC05XSpcLj9bMC05XSskLyxwPS9eW2EtekEtWjAtOS4hIyQlJmFtcDsnKitcLVwvPT9cXl9ge3x9flwtXStAW2EtekEtWjAtOVwtXSsoPzpcLlthLXpBLVowLTlcLV0rKSokLyx3PS9eW2Etel0rJC9pLHg9L15bYS16MC05XSskL2kseT0vXlthLXowLTlfXC1dKyQvaSx6PS9eWzAtOV0rJC9pLEE9L15bMS05XVswLTldKiQvaSxCPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KSQvaSxDPS9bXmEtekEtWjAtOVwvXCs9XS9pLEQ9L15bXGRcLVxzXSskLyxFPS9eKChodHRwfGh0dHBzKTpcL1wvKFx3Kzp7MCwxfVx3KkApPyhcUyspfCkoOlswLTldKyk/KFwvfFwvKFtcdyMhOi4/Kz0mJUAhXC1cL10pKT8kLyxlPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbGxiYWNrPWN8fHQ7dGhpcy5lcnJvcnM9W107dGhpcy5maWVsZHM9e307dGhpcy5mb3JtPXRoaXMuX2Zvcm1CeU5hbWVPck5vZGUoYSl8fHt9O3RoaXMubWVzc2FnZXM9e307dGhpcy5oYW5kbGVycz17fTthPTA7Zm9yKGM9Yi5sZW5ndGg7YTxjO2ErKyl7dmFyIGQ9YlthXTtpZigoZC5uYW1lfHxkLm5hbWVzKSYmZC5ydWxlcylpZihkLm5hbWVzKWZvcih2YXIgbD0wO2w8ZC5uYW1lcy5sZW5ndGg7bCsrKXRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lc1tsXSk7ZWxzZSB0aGlzLl9hZGRGaWVsZChkLGQubmFtZSl9dmFyIGc9dGhpcy5mb3JtLm9uc3VibWl0O3RoaXMuZm9ybS5vbnN1Ym1pdD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7dHJ5e3JldHVybiBhLl92YWxpZGF0ZUZvcm0oYikmJihnPT09bXx8ZygpKX1jYXRjaChjKXt9fX0odGhpcyl9LG49ZnVuY3Rpb24oYSxiKXt2YXIgYztpZigwPGEubGVuZ3RoJiYoInJhZGlvIj09PWFbMF0udHlwZXx8ImNoZWNrYm94Ij09PWFbMF0udHlwZSkpZm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoYVtjXS5jaGVja2VkKXJldHVybiBhW2NdW2JdfWVsc2UgcmV0dXJuIGFbYl19O2UucHJvdG90eXBlLnNldE1lc3NhZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLm1lc3NhZ2VzW2FdPWI7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLnJlZ2lzdGVyQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXthJiYoInN0cmluZyI9PT10eXBlb2YgYSYmYiYmImZ1bmN0aW9uIj09PXR5cGVvZiBiKSYmKHRoaXMuaGFuZGxlcnNbYV09Yik7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLl9mb3JtQnlOYW1lT3JOb2RlPWZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiPT09dHlwZW9mIGE/YTpyLmZvcm1zW2FdfTtlLnByb3RvdHlwZS5fYWRkRmllbGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmZpZWxkc1tiXT17bmFtZTpiLGRpc3BsYXk6YS5kaXNwbGF5fHxiLHJ1bGVzOmEucnVsZXMsaWQ6bnVsbCx0eXBlOm51bGwsdmFsdWU6bnVsbCxjaGVja2VkOm51bGx9fTtlLnByb3RvdHlwZS5fdmFsaWRhdGVGb3JtPWZ1bmN0aW9uKGEpe3RoaXMuZXJyb3JzPVtdO2Zvcih2YXIgYiBpbiB0aGlzLmZpZWxkcylpZih0aGlzLmZpZWxkcy5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGM9dGhpcy5maWVsZHNbYl18fHt9LGQ9dGhpcy5mb3JtW2MubmFtZV07ZCYmZCE9PW0mJihjLmlkPW4oZCwiaWQiKSxjLnR5cGU9MDxkLmxlbmd0aD9kWzBdLnR5cGU6ZC50eXBlLGMudmFsdWU9bihkLCJ2YWx1ZSIpLGMuY2hlY2tlZD1uKGQsImNoZWNrZWQiKSx0aGlzLl92YWxpZGF0ZUZpZWxkKGMpKX0iZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuY2FsbGJhY2smJnRoaXMuY2FsbGJhY2sodGhpcy5lcnJvcnMsYSk7MDx0aGlzLmVycm9ycy5sZW5ndGgmJihhJiZhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTpldmVudCYmKGV2ZW50LnJldHVyblZhbHVlPSExKSk7cmV0dXJuITB9O2UucHJvdG90eXBlLl92YWxpZGF0ZUZpZWxkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLnJ1bGVzLnNwbGl0KCJ8IiksYz1hLnJ1bGVzLmluZGV4T2YoInJlcXVpcmVkIiksZD0hYS52YWx1ZXx8IiI9PT1hLnZhbHVlfHxhLnZhbHVlPT09bSxsPTAsZz1iLmxlbmd0aDtsPGc7bCsrKXt2YXIgZj1iW2xdLGU9bnVsbCxoPSExLGs9dS5leGVjKGYpO2lmKC0xIT09Y3x8LTEhPT1mLmluZGV4T2YoIiFjYWxsYmFja18iKXx8IWQpaWYoayYmKGY9a1sxXSxlPWtbMl0pLCIhIj09PWYuY2hhckF0KDApJiYoZj1mLnN1YnN0cmluZygxLGYubGVuZ3RoKSksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLl9ob29rc1tmXT90aGlzLl9ob29rc1tmXS5hcHBseSh0aGlzLFthLGVdKXx8KGg9ITApOiJjYWxsYmFja18iPT09Zi5zdWJzdHJpbmcoMCw5KSYmKGY9Zi5zdWJzdHJpbmcoOSxmLmxlbmd0aCksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmhhbmRsZXJzW2ZdJiYhMT09PXRoaXMuaGFuZGxlcnNbZl0uYXBwbHkodGhpcyxbYS52YWx1ZSxlXSkmJihoPSEwKSksaCl7Yj10aGlzLm1lc3NhZ2VzW2ZdfHxzW2ZdO2M9IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aXRoIHRoZSAiK2EuZGlzcGxheSsiIGZpZWxkLiI7YiYmKGM9Yi5yZXBsYWNlKCIlcyIsYS5kaXNwbGF5KSxlJiYoYz1jLnJlcGxhY2UoIiVzIix0aGlzLmZpZWxkc1tlXT90aGlzLmZpZWxkc1tlXS5kaXNwbGF5OmUpKSk7dGhpcy5lcnJvcnMucHVzaCh7aWQ6YS5pZCxuYW1lOmEubmFtZSxtZXNzYWdlOmMscnVsZTpmfSk7YnJlYWt9fX07ZS5wcm90b3R5cGUuX2hvb2tzPXtyZXF1aXJlZDpmdW5jdGlvbihhKXt2YXIgYj1hLnZhbHVlO3JldHVybiJjaGVja2JveCI9PT1hLnR5cGV8fCJyYWRpbyI9PT1hLnR5cGU/ITA9PT1hLmNoZWNrZWQ6bnVsbCE9PWImJiIiIT09Yn0sImRlZmF1bHQiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUhPT1ifSxtYXRjaGVzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5mb3JtW2JdO3JldHVybiBjP2EudmFsdWU9PT1jLnZhbHVlOiExfSx2YWxpZF9lbWFpbDpmdW5jdGlvbihhKXtyZXR1cm4gcC50ZXN0KGEudmFsdWUpfSx2YWxpZF9lbWFpbHM6ZnVuY3Rpb24oYSl7YT1hLnZhbHVlLnNwbGl0KCIsIik7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspaWYoIXAudGVzdChhW2JdKSlyZXR1cm4hMTtyZXR1cm4hMH0sbWluX2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg+PXBhcnNlSW50KGIsMTApOiExfSxtYXhfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aDw9cGFyc2VJbnQoYiwxMCk6ITF9LGV4YWN0X2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg9PT1wYXJzZUludChiLDEwKTohMX0sZ3JlYXRlcl90aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPnBhcnNlRmxvYXQoYik6ITF9LGxlc3NfdGhhbjpmdW5jdGlvbihhLGIpe3JldHVybiBrLnRlc3QoYS52YWx1ZSk/cGFyc2VGbG9hdChhLnZhbHVlKTxwYXJzZUZsb2F0KGIpOiExfSxhbHBoYTpmdW5jdGlvbihhKXtyZXR1cm4gdy50ZXN0KGEudmFsdWUpfSxhbHBoYV9udW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiB4LnRlc3QoYS52YWx1ZSl9LGFscGhhX2Rhc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHkudGVzdChhLnZhbHVlKX0sbnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4gaC50ZXN0KGEudmFsdWUpfSxpbnRlZ2VyOmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoYS52YWx1ZSl9LGRlY2ltYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGsudGVzdChhLnZhbHVlKX0saXNfbmF0dXJhbDpmdW5jdGlvbihhKXtyZXR1cm4gei50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsX25vX3plcm86ZnVuY3Rpb24oYSl7cmV0dXJuIEEudGVzdChhLnZhbHVlKX0sdmFsaWRfaXA6ZnVuY3Rpb24oYSl7cmV0dXJuIEIudGVzdChhLnZhbHVlKX0sdmFsaWRfYmFzZTY0OmZ1bmN0aW9uKGEpe3JldHVybiBDLnRlc3QoYS52YWx1ZSl9LHZhbGlkX3VybDpmdW5jdGlvbihhKXtyZXR1cm4gRS50ZXN0KGEudmFsdWUpfSx2YWxpZF9jcmVkaXRfY2FyZDpmdW5jdGlvbihhKXtpZighRC50ZXN0KGEudmFsdWUpKXJldHVybiExO3ZhciBiPTAsYz0wLGQ9ITE7YT1hLnZhbHVlLnJlcGxhY2UoL1xEL2csIiIpO2Zvcih2YXIgZT1hLmxlbmd0aC0xOzA8PWU7ZS0tKWM9YS5jaGFyQXQoZSksYz1wYXJzZUludChjLDEwKSxkJiY5PChjKj0yKSYmKGMtPTkpLGIrPWMsZD0hZDtyZXR1cm4gMD09PWIlMTB9LGlzX2ZpbGVfdHlwZTpmdW5jdGlvbihhLGIpe2lmKCJmaWxlIiE9PWEudHlwZSlyZXR1cm4hMDt2YXIgYz1hLnZhbHVlLnN1YnN0cihhLnZhbHVlLmxhc3RJbmRleE9mKCIuIikrMSksZD1iLnNwbGl0KCIsIiksZT0hMSxnPTAsZj1kLmxlbmd0aDtmb3IoZztnPGY7ZysrKWM9PWRbZ10mJihlPSEwKTtyZXR1cm4gZX19O3EuRm9ybVZhbGlkYXRvcj1lfSkod2luZG93LGRvY3VtZW50KTsKUEsHCGaMH8QzGAAAMxgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAABQAAAHZpZXcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHZpZXdcYWRtaW4vUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcYWRtaW5cYXJ0aWNsZXMuaHRtbDx1bCBpZD0iYXJ0aWNsZS1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj4NCiAgICA8bGk+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5re75Yqg5paH56ugPC9hPg0KICAgIDwvbGk+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj48aDQgY2xhc3M9ImlubGluZS1ibG9jayB0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0YXJnZXQ9Il9ibGFuayI+e3suVGl0bGV9fTwvYT48L2g0Pnt7aWYgbmUgLlN0YXR1cyAicHVibGlzaCJ9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGJsIHN0YXR1cyI+6I2J56i/PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9InNsdWciPnt7LlNsdWd9fTwvc3Bhbj57e2lmIGVxIC5Jc0NvbW1lbnQgZmFsc2V9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iaXMtY29tbWVudCI+PGkgY2xhc3M9ImZhLWNvbW1lbnRzIGZhIj48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50Ij57ey5Db21tZW50TnVtfX0gLyB7ey5IaXRzfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJlZGl0IGxibCBsYmwtZ3JlZW4iIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPue8lui+kTwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBsYmwgbGJsLXJlZCIgaHJlZj0iL2FkbWluL2FydGljbGUve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+5Yig6ZmkPC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKCIuZGVsIikub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBpZihjb25maXJtKCLliKDpmaTmlofnq6DlsIbkvb/nm7jlhbPlhoXlrrnlpLHmlYjvvIHnoa7orqTvvJ8iKSl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAidXJsIjoiL2FkbWluL2FydGljbGUvIitpZCsiLyIsDQogICAgICAgICAgICAgICAgInR5cGUiOiJkZWxldGUiLA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suWIoOmZpCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0NCiAgICB9KTsNCjwvc2NyaXB0PlBLBwgfwp6+rgYAAK4GAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAB2aWV3XGFkbWluXGNtZC9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblxjbWRcYmFja3VwLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIGNsZWFyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSBsZWZ0Ij7lpIfku73mlbDmja48L2gxPg0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSBsZWZ0IiBpZD0iYmFja3VwLWJ0biI+5aSH5Lu9PC9idXR0b24+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJiYWNrdXAtbGlzdCI+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZVRpbWUgLk1vZFRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19IDxhIGNsYXNzPSJsaW5rIiBocmVmPSIvY21kL2JhY2t1cC9maWxlP2ZpbGU9e3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluayI+PC9pPjwvYT48L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJzaXplIj57e0ZpbGVTaXplIC5TaXplfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiIHJlbD0ie3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlLW8iPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHR5cGU6ICJwb3N0IiwNCiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLWxvYWRpbmciPuWkh+S7veS4rS4uPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5oaWRlKCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5iYWNrdXAtbG9hZGluZycpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNtZC1saXN0JykucHJlcGVuZCgnPGxpIGNsYXNzPSJiYWNrdXAtcmVzdWx0Ij7liJrliJrlpIfku73liLAgJyArIGpzb24uZmlsZSArICc8L2xpPicpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuc2hvdygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmRlbCcpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgdXJsOiAiL2NtZC9iYWNrdXAvP2ZpbGU9IiArICQodGhpcykuYXR0cigicmVsIiksDQogICAgICAgICAgICAgICAgdHlwZTogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGF0KS5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcIt5vmyUcHAABHBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxjbWRcbG9nLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSI+6ZSZ6K+v5pel5b+XPC9oMT4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9ImxvZy1saXN0Ij57e3JhbmdlIC5Mb2dzfX0NCiAgICA8bGkgY2xhc3M9ImxvZyByZWxhdGl2ZSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGlubGluZS1ibG9jayI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSBpbmxpbmUtYmxvY2siPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHByZSBjbGFzcz0idGV4dCI+e3suVGV4dH19PC9wcmU+DQogICAgICAgIDxhIGNsYXNzPSJyZW1vdmUgYWJzb2x1dGUiIGhyZWY9Ii9jbWQvbG9ncy8/ZmlsZT17ey5OYW1lfX0iPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlbW92ZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLnoa7orqTliKDpmaTorrDlvZUiKSkgew0KICAgICAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZToiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiR0aGlzLmF0dHIoImhyZWYiKSwNCiAgICAgICAgICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwjesGBYGQQAABkEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAAB2aWV3XGFkbWluXGNtZFxtZXNzYWdlLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSI+5raI5oGv6K6w5b2VPC9oMT4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9Im1lc3NhZ2UtbGlzdCI+e3tyYW5nZSAuTWVzc2FnZXN9fQ0KICAgIDxsaSBjbGFzcz0ibWVzc2FnZSByZWxhdGl2ZSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxkaXYgY2xhc3M9ImRhdGEiPnt7SHRtbCAuRGF0YX19PC9kaXY+DQogICAgPC9saT57e2VuZH19DQo8L3VsPlBLBwjJmMidRgEAAEYBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXGNvbW1lbnRzLmh0bWw8ZGl2IGlkPSJjb21tZW50LWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAiPnt7cmFuZ2UgLkNvbW1lbnRzfX0NCiAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSJ7ey5BdXRob3J9fSIvPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtZW1haWwiPnt7LkVtYWlsfX08L3NwYW4+e3tpZiAuR2V0Q29udGVudH19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5Ae3suR2V0Q29udGVudC5UaXRsZX19PC9zcGFuPnt7ZWxzZX19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5A5peg5pWIPC9zcGFuPnt7ZW5kfX17e2lmIG5lIC5TdGF0dXMgImFwcHJvdmVkIn19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtY2hlY2siIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWuoeaguCI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45LitPC9hPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Zue5aSNIj48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtZGVsIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaQiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pnt7ZW5kfX0NCiAgICA8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGFjdGlvbj0iL2FkbWluL2NvbW1lbnRzLyIgY2xhc3M9ImZvcm0gY2xlYXIgbGVmdCIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQgbGVmdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiIGlkPSJjb21tZW50LXN1Ym1pdCI+5Zue5aSN6K+E6K66PC9idXR0b24+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJjb21tZW50LWNsb3NlIj7lhbPpl63lm57lpI08L2J1dHRvbj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIGlkPSJjb21tZW50LXBhcmVudCIgbmFtZT0icGlkIi8+DQogICAgPC9mb3JtPg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6K+E6K665bCG5L2/55u45YWz5YaF5a655peg5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5Yig6Zmk5aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtY2hlY2snKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5a6h5qC45ZCO5q2k5L2c6ICF5bCG5LiN5YaN5qCH6K6w5a6h5qC4ISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAicHV0IiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlrqHmoLjlpLHotKUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuYy1yZXBseScpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC0nK2lkKS5hcHBlbmQoJCgnI2NvbW1lbnQtZm9ybScpLmRldGFjaCgpLnNob3coKSk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suWbnuWkjSIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9jb21tZW50cy8iOw0KICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgYWxlcnQoIuWbnuWkjeWksei0pSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtY2xvc2UnKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuaGlkZSgpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIQJgI7+0PAADtDwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAdmlld1xhZG1pblxlZGl0X2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiIHZhbHVlPSJ7ey5BcnRpY2xlLlRpdGxlfX0iLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij57e0h0bWwgLkFydGljbGUuVGV4dH19PC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiIHZhbHVlPSJ7ey5BcnRpY2xlLlNsdWd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuagh+etvjwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0idGFnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWciIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTmoIfnrb4iIHZhbHVlPSJ7ey5BcnRpY2xlLlRhZ1N0cmluZ319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuQXJ0aWNsZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLkFydGljbGUuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLkFydGljbGUuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCEuc6fFtDQAAbQ0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcYWRtaW5cZWRpdF9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIiB2YWx1ZT0ie3suUGFnZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5QYWdlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suUGFnZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCJ7e2lmIGVxIC5QYWdlLlN0YXR1cyAicHVibGlzaCJ9fSBzZWxlY3RlZHt7ZW5kfX0+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQie3tpZiBlcSAuUGFnZS5TdGF0dXMgImRyYWZ0In19IHNlbGVjdGVke3tlbmR9fT7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0NvbW1lbnQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzTGlua2VkIGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuW3suS/neWtmO+8jOWOu+afpeeci++8n+i/mOaYr+e7p+e7ree8lui+kSIpKSB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9wYWdlcy8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcItngyMuMNAADjDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxmaWxlcy5odG1sPHVsIGlkPSJmaWxlcy1saXN0IiBjbGFzcz0iYWRtaW4gY29udGFpbmVyOTYwIHBhZ2VyIj4NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlcy1idG4tbGkiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgIDwvbGk+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaSBjbGFzcz0iZmlsZSIgaWQ9ImZpbGUte3suSWR9fSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ1cGxvYWQtdGltZSI+e3tEYXRlSW50NjQgLlVwbG9hZFRpbWUgIk1NLkREIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iL3t7LlVybH19IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Ii97ey5Vcmx9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmstc3F1YXJlIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIGZhZGUtb3V0IiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaTpmYTku7YiPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQogICAge3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9maWxlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIGluaXRVcGxvYWQoIiNhdHRhY2gtc2hvdyIpOw0KICAgICAgICAkKCIuZGVsIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWIoOmZpOmZhOS7tuebuOWFs+mTvuaOpeS8muWkseaViCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgInVybCI6ICIvYWRtaW4vZmlsZXMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgInN1Y2Nlc3MiOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNmaWxlLScraWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIYsWb+uwGAADsBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAdmlld1xhZG1pblxob21lLmh0bWw8ZGl2IGNsYXNzPSJhZG1pbiBjb250YWluZXIgY2xlYXIiIGlkPSJkYXNoYm9hcmQiPg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS01IGxlZnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ3ZWxjb21lIj4NCiAgICAgICAgICAgIDxoND5XZWxjb21lPC9oND4NCiAgICAgICAgICAgIDxwPuasoui/juWbnuadpe+8jCA8c3Ryb25nPnt7LlVzZXIuTmlja319PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0icXVpY2stbGluayI+DQogICAgICAgICAgICA8aDQ+5b+r6YCf6ZO+5o6lPC9oND4NCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mkrDlhpnmlofnq6A8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLyI+5p+l55yL5ZKM5a6h5qC46K+E6K66PC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyI+5L+u5pS56YWN572uPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wcm9maWxlLyI+5pu05paw5Liq5Lq66LWE5paZPC9hPjwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtMiBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHkiPg0KICAgICAgICAgICAgPGg0PuacgOaWsOa0u+WKqDwvaDQ+e3tyYW5nZSAuTWVzc2FnZXN9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXNnIHJlbGF0aXZlIHt7LlR5cGV9fSI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhIj57e0h0bWwgLkRhdGF9fTwvZGl2Pg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJyZWFkIGFic29sdXRlIiBocmVmPSIvYWRtaW4vbWVzc2FnZS9yZWFkP2lkPXt7LklkfX0iIHJlbD0ie3suSWR9fSI+PGkgY2xhc3M9ImZhIGZhLWNoZWNrIj48L2k+PC9hPg0KICAgICAgICAgICAgPC9kaXY+e3tlbmR9fXt7aWYgbHQgKGxlbiAuTWVzc2FnZXMpIDF9fQ0KICAgICAgICAgICAgPHA+5rKh5pyJ5paw55qE5rS75Yqo5L+h5oGvPC9wPg0KICAgICAgICAgICAge3tlbmR9fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtNCByaWdodCI+DQogICAgICAgIDxkaXYgY2xhc3M9InN0YXRzIj4NCiAgICAgICAgICAgIDxoND7mlbDmja7nu5/orqE8L2g0Pg0KICAgICAgICAgICAgPHA+5bey57uP5Y+R5biD5paH56ugIDxzcGFuIGNsYXNzPSJsYmwgbGJsLXJlZCI+e3suU3RhdGlzLkFydGljbGVzfX08L3NwYW4+IOevh++8jA0KICAgICAgICAgICAg6aG16Z2iIDxzcGFuIGNsYXNzPSJsYmwgbGJsLXJlZCI+e3suU3RhdGlzLlBhZ2VzfX08L3NwYW4+IOS4qu+8jCA8YnIvPg0KICAgICAgICAgICAg5pS25Yiw6K+E6K66IDxzcGFuIGNsYXNzPSJsYmwgbGJsLWJsdWUiPnt7LlN0YXRpcy5Db21tZW50c319PC9zcGFuPiDmrKHvvIwNCiAgICAgICAgICAgIOS4iuS8oCA8c3BhbiBjbGFzcz0ibGJsIGxibC1ncmVlbiI+e3suU3RhdGlzLkZpbGVzfX08L3NwYW4+IOS4qumZhOS7tjwvcD4NCiAgICAgICAgICAgIDxwPuW9k+WJjeeoi+W6j+eJiOacrO+8mjxzdHJvbmc+e3suU3RhdGlzLlZlcnNpb259fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im9mZmljZSI+DQogICAgICAgICAgICA8aDQ+5a6Y5pa55raI5oGvPC9oND4NCiAgICAgICAgICAgIDxwPui/mOayoeaciea2iOaBrzwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQo8L2Rpdj4NCjxzY3JpcHQ+DQogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsNCiAgICAgICAkKCIucmVhZCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgJC5wb3N0KCR0aGlzLmF0dHIoImhyZWYiKSxmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgJHRoaXMucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgfSk7DQogICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICB9KTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwj0lNzmIAkAACAJAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXGxvZ2luLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+55m75b2VIC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+DQogICAgICAgICNsb2dpbi1mb3Jtew0KICAgICAgICAgICAgd2lkdGg6IDI4MHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG87DQogICAgICAgIH0NCiAgICAgICAgI2xvZ2luLWZvcm0gaDF7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4Ow0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGZvcm0gaWQ9ImxvZ2luLWZvcm0iIGNsYXNzPSJmb3JtIGZvcm0tdmVydGljYWwiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0IiBuYW1lPSJsb2dpbi1mb3JtIj4NCiAgICA8aDE+55m75b2VIC0gRnhoLkdvPC9oMT4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nlKjmiLflkI08L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InVzZXIiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idXNlciIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0icGFzc3dvcmQiPueUqOaIt+WvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IiBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InBhc3N3b3JkIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJwYXNzd29yZC1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPueZuyDlvZU8L2J1dHRvbj4NCiAgICA8c3BhbiBjbGFzcz0idGlwIj7pu5jorqTorrDkvY/nmbvpmYYz5aSpPC9zcGFuPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jZG4uc3RhdGljZmlsZS5vcmcvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS5mb3JtLzMuNDYvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi92YWxpZGF0ZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJsb2dpbi1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJ1c2VyIiwicnVsZXMiOiJhbHBoYV9udW1lcmljfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6InBhc3N3b3JkIiwicnVsZXMiOiJyZXF1aXJlZHxtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjbG9naW4tZm9ybScpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIueZu+W9lemUmeivr++8jOivt+ajgOafpeeUqOaIt+aIluWvhueggSIpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwjW4HhikAgAAJAIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXHBhZ2VzLmh0bWw8dWwgaWQ9ImFydGljbGUtbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+DQogICAgPGxpPg0KICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIiBocmVmPSIvYWRtaW4vcGFnZS93cml0ZS8iPua3u+WKoOmhtemdojwvYT4NCiAgICA8L2xpPnt7cmFuZ2UgLlBhZ2VzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+PGg0IGNsYXNzPSJpbmxpbmUtYmxvY2sgdGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LlRpdGxlfX08L2E+PC9oND57e2lmIG5lIC5TdGF0dXMgInB1Ymxpc2gifX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxibCBzdGF0dXMiPuiNieeovzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJzbHVnIj57ey5TbHVnfX08L3NwYW4+e3tpZiBlcSAuSXNDb21tZW50IGZhbHNlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImlzLWNvbW1lbnQiPjxpIGNsYXNzPSJmYS1jb21tZW50cyBmYSI+PC9pPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudCI+e3suQ29tbWVudE51bX19IC8ge3suSGl0c319PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vcGFnZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk6aG16Z2i5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9wYWdlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIqCtGRpwGAACcBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxwYXNzd29yZC5odG1sPGZvcm0gaWQ9InBhc3N3b3JkIiBjbGFzcz0iZm9ybSBmb3JtLWFsaWduIGNsZWFyIiBhY3Rpb249IiMiIG5hbWU9InBhc3N3b3JkLWZvcm0iIG1ldGhvZD0icG9zdCI+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ib2xkIj7ml6flr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im9sZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im9sZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPumqjOivgeaXp+WvhueggTwvc3Bhbj48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ib2xkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im5ldyI+5paw5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJuZXciIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJuZXciIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuZXctaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0iY29uZmlybSI+56Gu6K6k5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImNvbmZpcm0taW52YWxpZCI+56Gu6K6k5a+G56CB5LiN5Yy56YWNPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInBhc3N3b3JkLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6Im9sZCIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmV3IiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJjb25maXJtIiwicnVsZXMiOiJyZXF1aXJlZHxtYXRjaGVzW25ld10ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwYXNzd29yZCcpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIbnEngU8HAABPBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xhZG1pblxwbHVnaW4uaHRtbDx1bCBpZD0icGx1Z2luLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPnt7cmFuZ2UgLlBsdWdpbnN9fQ0KICAgIDxsaSBjbGFzcz0iY2xlYXIiPnt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQgbGJsIGFjdGl2ZSBsYmwtZ3JlZW4iPiZuYnNwOzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGxlZnQiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24gbGVmdCI+e3suVmVyc2lvbn19PC9zcGFuPnt7aWYgLkhhc1NldHRpbmd9fQ0KICAgICAgICA8YSBjbGFzcz0ic2V0dGluZyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy97ey5LZXl9fS8iPumAiemhuTwvYT57e2VuZH19e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8YSBjbGFzcz0iZGVhY3RpdmF0ZSBsYmwgbGJsLXJlZCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5bCB5Y2wPC9hPnt7ZWxzZX19DQogICAgICAgIDxhIGNsYXNzPSJhY3RpdmF0ZSBsYmwgbGJsLWJsdWUgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPua/gOa0uzwvYT57e2VuZH19DQogICAgICAgIDxwIGNsYXNzPSJkZXNjIGxlZnQiPnt7LkRlc2N9fTwvcD4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIuZGVhY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJkZWFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoea/gOa0uyIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlsIHljbDlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgiLmFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoeWwgeWNsCIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLmv4DmtLvlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCE9wWaFiBgAAYgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAHZpZXdcYWRtaW5ccGx1Z2luX3NldHRpbmcuaHRtbDxmb3JtIGlkPSJwbHVnaW4tc2V0dGluZy1mb3JtIiBjbGFzcz0iZm9ybSBjb250YWluZXI5NjAgYWRtaW4iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICB7e0h0bWwgLkZvcm19fQ0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICAgICAgICAkKCcjcGx1Z2luLXNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIjoi5L+d5a2Y5aSx6LSlIik7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwg0K3PVOAEAADgBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHByb2ZpbGUuaHRtbDxmb3JtIGlkPSJwcm9maWxlIiBjbGFzcz0iYWRtaW4gZm9ybSBjbGVhciBmb3JtLWFsaWduIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0icHJvZmlsZS1mb3JtIj4NCiAgICA8ZGl2IGNsYXNzPSJhdmF0YXIgZ3JpZC0xLTQgbGVmdCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7ey5Vc2VyLkF2YXRhcn19IiBhbHQ9Int7LlVzZXIuTmlja319IiBjbGFzcz0iZmllbGQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBmaWVsZCBpbmxpbmUtYmxvY2siPuWktOWDj+eUsSA8YSBocmVmPSJodHRwOi8vZ3JhdmF0YXIuY29tLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm8tZm9sbG93Ij5HcmF2YXRhcjwvYT4g5o+Q5L6bPC9zcGFuPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tcmVkIGlubGluZS1ibG9jayIgaHJlZj0iL2FkbWluL3Bhc3N3b3JkLyI+5L+u5pS55a+G56CBPC9hPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaW5mbyByaWdodCBncmlkLTMtNCI+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nmbvlvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiB2YWx1ZT0ie3suVXNlci5OYW1lfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+55m75b2V55qE55So5oi35ZCNPC9zcGFuPjxici8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ibmljayI+5pi156ewPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ibmljayIgdHlwZT0idGV4dCIgbmFtZT0ibmljayIgdmFsdWU9Int7LlVzZXIuTmlja319IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuaYvuekuuWcqOWJjeWPsOeahOensOWRvDwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5pY2staW52YWxpZCI+5pi156ew6ZW/5bqmMi0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZW1haWwiPumCrueusTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImVtYWlsIiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHZhbHVlPSJ7ey5Vc2VyLkVtYWlsfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6IGU57O76YKu566x77yM5Y2B5YiG6YeN6KaB77yBPC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iZW1haWwtaW52YWxpZCI+6YKu566x5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1cmwiPue9keWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVybCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHZhbHVlPSJ7ey5Vc2VyLlVybH19IiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1cmwtaW52YWxpZCI+572R5Z2A5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBiaW8iIG5hbWU9ImJpbyIgaWQ9ImJpbyI+e3suVXNlci5CaW99fTwvdGV4dGFyZWE+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwcm9maWxlLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmljayIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiZW1haWwiLCJydWxlcyI6InZhbGlkX2VtYWlsIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJ1cmwiLCJydWxlcyI6InZhbGlkX3VybCJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Byb2ZpbGUnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCB+PoV8CDAAAAgwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cc2V0dGluZy5odG1sPHVsIGlkPSJzZXR0aW5nLW5hdiIgY2xhc3M9ImNvbnRhaW5lciB0ZXh0LWNlbnRlciI+DQogICAgPGxpPjxhIGhyZWY9IiNnZW5lcmFsIj7ln7rmnKw8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iI25hdiI+5a+86IiqPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9IiNjdXN0b20iPuiHquWumuS5iTwvYT48L2xpPg0KPC91bD4NCjxkaXYgaWQ9InNldHRpbmctcGFuZWxzIiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICA8Zm9ybSBpZD0ic2V0dGluZy1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nLyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS11cmwiPuermeeCueWcsOWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdXJsIiBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InNpdGVfdXJsIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdXJsYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS10aXRsZSI+56uZ54K55Li75qCH6aKYPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aXRsZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1zdWItdGl0bGUiPuermeeCueWJr+agh+mimDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtc3ViLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3N1Yl90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3N1Yl90aXRsZWB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUta2V5d29yZHMiPk1ldGHlhbPplK7lrZc8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLWtleXdvcmRzIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2tleXdvcmRzIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1kZXNjIj5NZXRh56uZ54K55LuL57uNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1kZXNjIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2Rlc2NyaXB0aW9uIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iYXJ0aWNsZS1zaXplIj7ljZXpobXmlofnq6DliJfooajmlbA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJhcnRpY2xlLXNpemUiIGNsYXNzPSJpcHQiIHR5cGU9Im51bWJlciIgbmFtZT0iYXJ0aWNsZV9zaXplIiB2YWx1ZT0ie3tTZXR0aW5nIGBhcnRpY2xlX3NpemVgfX0iIG1heD0iMTAiIG1pbj0iMyIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGhlbWUiPuS4u+mimOebruW9leWQjTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdGhlbWUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfdGhlbWUiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdGhlbWVgfX0iLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS4u+mimOWNs+aMh+WQkeeahOaooeadv+ebruW9le+8jOWFt+S9k+WGheWuueivt+WPguiAgyBkZWZhdWx0IOebruW9le+8iOWNsyBkZWZhdWx0IOS4u+mimO+8iTwvc3Bhbj4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNpdGVfdGhlbWVfZGVmIiB2YWx1ZT0iZGVmYXVsdCIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImdvLW1hcmtkb3duIj5Hb+a4suafk01hcmtkb3duPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iZ28tbWFya2Rvd24iIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9ImVuYWJsZV9nb19tYXJrZG93biIgdmFsdWU9Int7U2V0dGluZyBgZW5hYmxlX2dvX21hcmtkb3duYH19Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7pu5jorqTlhbPpl63vvIzkvb/nlKjliY3nq69tYXJrZWQuanPmuLLmn5PvvIzloat0cnVl5pe25byA5ZCvPC9zcGFuPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duX2RlZiIgdmFsdWU9ImZhbHNlIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHA+DQogICAgICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Zvcm0+DQogICAgPGZvcm0gaWQ9InNldHRpbmctbmF2LWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybSBmb3JtLWFsaWduIHNldHRpbmctcGFuZWwiIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvbmF2LyIgbWV0aG9kPSJwb3N0Ij57e3JhbmdlIC5OYXZpZ2F0b3JzfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7mjpLluo88L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgb3JkZXIiIHR5cGU9Im51bWJlciIgbmFtZT0ib3JkZXIiIHZhbHVlPSJ7ey5PcmRlcn19Ii8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPuaWh+acrDwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCB0ZXh0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0ZXh0IiB2YWx1ZT0ie3suVGV4dH19IiByZXF1aXJlZD0icmVxdWlyZWQiLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5qCH6aKYPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgdmFsdWU9Int7LlRpdGxlfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+6ZO+5o6lPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IGxpbmsiIHR5cGU9InRleHQiIG5hbWU9ImxpbmsiIHZhbHVlPSJ7ey5MaW5rfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiIHJlbD0iI25hdi1pdGVtIj7mt7vliqDkuIDpobk8L2E+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0ibmF2LWl0ZW0iPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5o6S5bqPPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IG9yZGVyIiB0eXBlPSJudW1iZXIiIG5hbWU9Im9yZGVyIiB2YWx1ZT0iMSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5paH5pysPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRleHQiIHR5cGU9InRleHQiIG5hbWU9InRleHQiIHZhbHVlPSIiIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5qCH6aKYPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgdmFsdWU9IiIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+6ZO+5o6lPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IGxpbmsiIHR5cGU9InRleHQiIG5hbWU9ImxpbmsiIHZhbHVlPSIiIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9zY3JpcHQ+DQogICAgPC9mb3JtPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWN1c3RvbS1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nL2N1c3RvbS8iIG1ldGhvZD0icG9zdCI+e3tyYW5nZSAkaywkdiA6PSAuQ3VzdG9tfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHZhbHVlPSJ7eyRrfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7JHZ9fSIvPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiIHJlbD0iI2N1c3RvbS1pdGVtIj7mt7vliqDkuIDpobk8L2E+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kvb/nlKjlh73mlbDoh6rlrprkuYnphY3nva7vvIzpnIDopoHliqDliY3nvIAiY18i77yM5aaCR2V0U2V0dGluZygiY19rZXkiKTwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjdXN0b20taXRlbSI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSLlrZfmrrXlkI0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSLlrZfmrrXlgLwiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvc2NyaXB0Pg0KICAgIDwvZm9ybT4NCjwvZGl2Pg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnl0b29scy8xLjIuNy9qcXVlcnkudG9vbHMubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNzZXR0aW5nLW5hdicpLnRhYnMoIi5zZXR0aW5nLXBhbmVsIik7DQogICAgICAgICQoJy5zZXR0aW5nLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIiA6IGpzb24ubXNnKTsNCiAgICAgICAgfSkub24oImNsaWNrIiwiLmFkZCIsZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLnByZXBlbmQoJCgkKHRoaXMpLmF0dHIoInJlbCIpKS5odG1sKCkpOw0KICAgICAgICB9KS5vbigiY2xpY2siLCIuZGVsIixmdW5jdGlvbihlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGlmKGNvbmZpcm0oIuimgeWIoOmZpOi/memhue+8nyIpKXsNCiAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcICEOLExAZAAAQGQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xhZG1pblx3cml0ZV9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ5paH56ug5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5qCH562+PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJ0YWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InRhZyIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOagh+etviIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoIj7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCI+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgIDwvcD4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIvsp0fCEMAAAhDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblx3cml0ZV9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ6aG16Z2i5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL3BhZ2VzLyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCHJbVWl8DAAAfAwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHZpZXdcYWRtaW4ubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPnt7LlRpdGxlfX0gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvYWRtaW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgICA8aDMgY2xhc3M9ImxvZ28gbGVmdCI+RnhoLkdvIC0gPHNwYW4+e3suVGl0bGV9fTwvc3Bhbj48L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJuYXYgbGVmdCByZWxhdGl2ZSI+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGFzaGJvYXJkIGxlZnQiIGhyZWY9Ii9hZG1pbi8iPjxpIGNsYXNzPSJmYSBmYS1kYXNoYm9hcmQiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iYXJ0aWNsZSBsZWZ0IiBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvIiB0aXRsZT0i5paH56ugIj48aSBjbGFzcz0iZmEgZmEtY29weSI+PC9pPjwvYT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGFnZXMgbGVmdCIgaHJlZj0iL2FkbWluL3BhZ2VzLyIgdGl0bGU9IueLrOeri+mhtemdoiI+PGkgY2xhc3M9ImZhIGZhLXBhc3RlIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImNvbW1lbnRzIGxlZnQiIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iIHRpdGxlPSLor4TorroiPjxpIGNsYXNzPSJmYSBmYS1jb21tZW50cyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJmaWxlcyBsZWZ0IiBocmVmPSIvYWRtaW4vZmlsZXMvIiB0aXRsZT0i5aqS5L2T5paH5Lu2Ij48aSBjbGFzcz0iZmEgZmEtaW5ib3giPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGx1Z2lucyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy8iIHRpdGxlPSLmj5Lku7YiPjxpIGNsYXNzPSJmYSBmYS1nZWFycyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyIgdGl0bGU9Iuiuvue9riI+PGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPjwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxhIGNsYXNzPSJvdXQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii9sb2dvdXQvIiB0aXRsZT0i6YCA5Ye6Ij48aSBjbGFzcz0iZmEgZmEtcG93ZXItb2ZmIGZhLWxnIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0icHJvZmlsZSBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIiB0aXRsZT0i5oiRIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImZyb250IG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Iuafpeeci+e9keermSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+DQogICAgPC9kaXY+DQo8L2Rpdj4NCntAQ29udGVudH0NCjxkaXYgaWQ9ImZvb3RlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgIDxwIGNsYXNzPSJsaW5rcyB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgIDxhIGNsYXNzPSJzdGF0IiBocmVmPSIvY21kL21lc3NhZ2UvIj7mtojmga88L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJiYWNrdXAiIGhyZWY9Ii9jbWQvYmFja3VwLyI+5aSH5Lu9PC9hPg0KICAgICAgICAgICA8YSBjbGFzcz0iZXJyIiBocmVmPSIvY21kL2xvZ3MvIj7ml6Xlv5c8L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJzeXMiIGhyZWY9IiMiPuezu+e7nzwvYT4NCiAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJjcCB0ZXh0LWNlbnRlciI+UHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9wPg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCNn4qlTBCAAAwQgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAADwAAAHZpZXdcY21kLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT57ey5UaXRsZX19IC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NtZC5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5IGNsYXNzPSJjbWQiPg0Ke0BDb250ZW50fQ0KPHAgY2xhc3M9ImJhY2siPjxhIGhyZWY9ImphdmFzY3JpcHQ6aGlzdG9yeS5iYWNrKCkiPkJhY2s8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwgKfcgAzgEAAM4BAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAB2aWV3XGRlZmF1bHQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcZGVmYXVsdFxhcnRpY2xlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIge3suQXJ0aWNsZS5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjb250ZW50IG1hcmtkb3duIj57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj4NCiAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXJlIHdlaWJvIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIGZhLWxnIj48L2k+PC9zcGFuPnt7aWYgLlVzZXJ9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImF1dGhvciBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+e3suVXNlci5OaWNrfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj57e2lmIC5UYWdTdHJpbmd9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS10YWdzIj48L2k+e3suVGFnU3RyaW5nfX08L3NwYW4+e3tlbmR9fQ0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZpZXdzIGlubGluZS1ibG9jayByaWdodCI+6ZiF6K+7Jm5ic3A7Jm5ic3A7PHNwYW4+e3suSGl0c319PC9zcGFuPiZuYnNwOyZuYnNwO+asoTwvc3Bhbj4NCiAgICAgICAgPC9wPnt7ZW5kfX0NCiAgICA8L2FydGljbGU+DQogICAge3tIdG1sIC5Db21tZW50SHRtbH19DQo8L2Rpdj5QSwcIwLg0iLcDAAC3AwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xkZWZhdWx0XGNvbW1lbnQuaHRtbDxkaXYgaWQ9ImNvbW1lbnQiPg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiBsZWZ0Ij4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIGMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj57e2VuZH19e3tlbmR9fQ0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtc2hvdyIgY2xhc3M9InRleHQtY2VudGVyIj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gZW5hYmxlIj7lj5Hooajor4Torro8L2J1dHRvbj57e2Vsc2V9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXJlZCI+5pys5paH5YWz6Zet5LqG6K+E6K66PC9idXR0b24+e3tlbmR9fQ0KICAgIDwvZGl2Pnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBjbGFzcz0iaGlkZSBjbGVhciB0ZXh0LWNlbnRlciBmb3JtIiBhY3Rpb249Ii9jb21tZW50L3t7LkNvbnRlbnQuSWR9fS8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mbyBsZWZ0IHRleHQtcmlnaHQiPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0gYy1hdmF0YXItZmllbGQiPg0KICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIG51bGwiIHNyYz0iL3N0YXRpYy9pbWcvc2l0ZS5wbmciIGFsdD0iIiBpZD0iY29tbWVudC1hdmF0YXIiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibm90LW1lIGJsb2NrIiBocmVmPSIjIj7kuI3mmK/miJE/PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvLWZpZWxkcyBoaWRlIj4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuensOWRvCIgaWQ9ImNvbW1lbnQtYXV0aG9yIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpgq7nrrEiIGlkPSJjb21tZW50LWVtYWlsIi8+IDwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0idXJsIiBwbGFjZWhvbGRlcj0i572R5Z2AIiBpZD0iY29tbWVudC11cmwiLz48L3A+DQogICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjb21tZW50LXBhcmVudCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgbmFtZT0icGlkIi8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtY29udGVudCB0ZXh0LWxlZnQgcmlnaHQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGNhbmNlbC1yZXBseSIgdHlwZT0iYnV0dG9uIj7lj5bmtojlm57lpI08L2J1dHRvbj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9mb3JtPnt7ZW5kfX0NCiAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjb21tZW50LXRwbCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSIiIGFsdD0iIi8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSBjLWF1dGhvciIgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPk5vdzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0iIj48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNoZWNrIj48aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUiPjwvaT7lrqHmoLjkuK3vvIzliLfmlrDlkI7pmpDol488L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+PC9zZWN0aW9uPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9zY3JpcHQ+DQo8L2Rpdj5QSwcIb65vVOIMAADiDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAdmlld1xkZWZhdWx0XGVycm9yL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAB2aWV3XGRlZmF1bHRcZXJyb3JcZXJyb3IuaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7plJnor6/mj5DnpLo8L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT5ib2R5e21hcmdpbjogNDBweCAxMDBweH08L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8aDI+5oKo6K6/6Zeu55qE6aG16Z2i5q2j5Zyo5omT556M552hPC9oMj48YnIvPg0KPHA+56iL5bqP5ZGY5q2j5Zyo5Yqq5Yqb5ZSk6YaS77yM6K+356iN5YCZ6K6/6ZeuLi4uPC9wPg0KPHA+PGEgaHJlZj0iLyI+6L+U5Zue6aaW6aG1PC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIE4RGUngBAAB4AQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAdmlld1xkZWZhdWx0XGVycm9yXG5vdGZvdW5kLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouemu+WutuWHuui1sDwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWbm+WkhOWvu+aJvu+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCJD51MB1AQAAdQEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcZGVmYXVsdFxob21lLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3Mvc3R5bGUuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRpdGxlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0gLSBSU1MgMi4wIiBocmVmPSIvcnNzLnhtbCIvPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGhlYWRlciBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7e1NldHRpbmcgYGNfaG9tZV9hdmF0YXJgfX0iIGFsdD0ic2l0ZSIgaWQ9ImhlYWRlci1pbWciLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCI+PGEgaHJlZj0iLyI+e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC9hPjwvaDE+DQogICAgICAgIDxoNCBpZD0iaGVhZGVyLXN1YiI+e3tTZXR0aW5nICJzaXRlX3N1Yl90aXRsZSJ9fTwvaDQ+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxuYXYgaWQ9Im5hdiIgY2xhc3M9ImNsZWFyIHRleHQtY2VudGVyIj4NCiAgICA8dWw+e3tyYW5nZSBOYXZpZ2F0b3J9fQ0KICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGV4dH19PC9hPjwvbGk+e3tlbmR9fQ0KICAgIDwvdWw+DQo8L25hdj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxwPg0KICAgICAgICA8YSBjbGFzcz0id2VpYm8iIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfd2VpYm9gfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtd2VpYm8iPjwvaT5XZWlibzwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImdpdCIgaHJlZj0ie3tTZXR0aW5nIGBjX2Zvb3Rlcl9naXRodWJgfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZ2l0aHViIj48L2k+R2l0SHViPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZW1haWwiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZW1haWxgfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZW52ZWxvcGUiPjwvaT5FbWFpbDwvYT4NCiAgICAgICAgPGEgY2xhc3M9InJzcyIgaHJlZj0iL3Jzcy54bWwiIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtcnNzIj48L2k+UlNTPC9hPnt7U2V0dGluZyBgY19mb290ZXJfZ2FgIHwgSHRtbH19DQogICAgPC9wPg0KICAgIDxzcGFuPkdvIMKpIDIwMTQgQWxsIHJpZ2h0cyByZXNlcnZlZC4gUHJvdWRseSBwdWJsaXNoZWQgd2l0aCBGeGguR28uPC9zcGFuPg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcI5rtrtDcJAAA3CQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xkZWZhdWx0XGluZGV4Lmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5JZH19Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBsZWZ0IHRleHQtY2VudGVyIj57e2lmIGd0IC5Db21tZW50TnVtIDB9fQ0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PHN0cm9uZz57ey5Db21tZW50TnVtfX0g4oSDPC9zdHJvbmc+PC9hPjwvcD57e2VuZH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyI+PGkgY2xhc3M9ImZhIGZhLWV5ZSI+PC9pPjxzdHJvbmc+e3suSGl0c319IOKEiTwvc3Ryb25nPjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyYXkgdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT48c3Ryb25nPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1haW4iPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuU3VtbWFyeX19PC9zZWN0aW9uPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0aG9yIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT57ey5Vc2VyLk5pY2t9fTwvc3Bhbj57e2VuZH19e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXRhZ3MiPjwvaT57ey5UYWdTdHJpbmd9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlubGluZS1ibG9jayByZWFkIHJpZ2h0IiBocmVmPSJ7ey5MaW5rfX0iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT7nu6fnu63pmIXor7s8L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvYXJ0aWNsZT57e2VuZH19DQogICAgPGRpdiBjbGFzcz0icGFnZXIgdGV4dC1jZW50ZXIiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxhIGhyZWY9Ii9wL3t7Ln19LyIgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPnt7Ln19PC9hPnt7ZW5kfX0NCiAgICA8L2Rpdj4NCjwvZGl2PlBLBwipLoBo5wUAAOcFAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGRlZmF1bHRccGFnZS5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIiBpZD0iYXJ0aWNsZS1JZCI+e3t3aXRoIC5QYWdlfX0NCiAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idmlld3MgaW5saW5lLWJsb2NrIHJpZ2h0Ij7pmIXor7smbmJzcDsmbmJzcDs8c3Bhbj57ey5IaXRzfX08L3NwYW4+Jm5ic3A7Jm5ic3A75qyhPC9zcGFuPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgIDwvYXJ0aWNsZT4NCjwvZGl2PlBLBwhcAM7dBAMAAAQDAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAB2aWV3XGxpbmcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xhcnRpY2xlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIgYXJ0aWNsZS1zaW5nbGUgcmVsYXRpdmUge3suQXJ0aWNsZS5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIGFic29sdXRlIj57ey5IaXRzfX08L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJ0aW1lLWluZm8iPnt7aWYgLlVzZXJ9fTxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDt7e2VuZH195Y+R6KGo5LqOJm5ic3A7Jm5ic3A7Jm5ic3A7e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIllZWVkg5bm0IE1NIOaciCBERCDml6UifX08L3A+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPuagh+etvu+8mnt7LlRhZ1N0cmluZ319PC9zcGFuPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCBrCnX1tAwAAbQMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0icmVsYXRpdmUiPg0KICAgIDxoNCBpZD0iY29tbWVudC10aXRsZSI+5paH56ug6K+E6K66PC9oND4NCiAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+e3suQ29udGVudC5Db21tZW50TnVtfX08L2E+PC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIGNsZWFyIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkgbGJsIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LklkfX0iPuWbnuWkjTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHA+PGEgY2xhc3M9ImMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9ImMtdGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NIOaciCBERCDml6UgSEgg5pe2IG1tIOWIhiJ9fTwvc3Bhbj48L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2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PTEuMCwgdXNlci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvbGluZy5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIgY2xhc3M9ImxlZnQiLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCIgY2xhc3M9ImxlZnQiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiIGNsYXNzPSJsZWZ0Ij57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4NCiAgICAgICAgPG5hdiBpZD0ibmF2IiBjbGFzcz0icmlnaHQiPg0KICAgICAgICAgICAgPHVsPnt7cmFuZ2UgTmF2aWdhdG9yfX0NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGV4dH19PC9hPjwvbGk+e3tlbmR9fQ0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9uYXY+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCBjbGVhciI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0Ij5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0icmlnaHQiPlByb3VkbHkgcHVibGlzaGVkIHdpdGggRnhoLkdvLjwvc3Bhbj4NCiAgICA8L2Rpdj4NCiAgICA8YSBpZD0iZ28tdG9wIiBocmVmPSIjIiBjbGFzcz0ibGJsIGhpZGUgbGJsLWJsdWUiIHRpdGxlPSLlm57liLDpobbpg6giPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy11cCBmYS1sZyI+PC9pPjwvYT4NCiAgICB7e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KPC9mb290ZXI+DQo8c2Ny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" \ No newline at end of file +const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnt3aWR0aDoxMDAwcHg7bWFyZ2luLXRvcDoyNHB4O21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNzZXR0aW5nLW5hdiBsaXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCAxMnB4fSNzZXR0aW5nLW5hdiBsaSBhe3BhZGRpbmc6M3B4IDEwcHh9CiNzZXR0aW5nLW5hdiBsaSBhOmhvdmVyLCNzZXR0aW5nLW5hdiBsaSBhLmN1cnJlbnR7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzAwNWI5Yn0KLnNldHRpbmctcGFuZWx7ZGlzcGxheTpub25lfQouc2V0dGluZy1mb3Jte3dpZHRoOjgyMHB4O21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfS5zZXR0aW5nLWZvcm0gLmlwdHt3aWR0aDo0ODBweH0KLnNldHRpbmctZm9ybSAuaW52YWxpZHttYXJnaW4tbGVmdDo3NXB4fQouc2V0dGluZy1mb3JtIGxhYmVse21pbi13aWR0aDoxMGVtfQouc2V0dGluZy1mb3JtIC50aXAuYmxvY2t7bWFyZ2luLWxlZnQ6MTJlbX0KI3NldHRpbmctY3VzdG9tLWZvcm17d2lkdGg6MTAwMHB4fSNzZXR0aW5nLWN1c3RvbS1mb3JtIGlucHV0LmtleXt3aWR0aDoyNTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQudmFsdWV7d2lkdGg6NjUwcHh9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5pdGVte21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojc2V0dGluZy1jdXN0b20tZm9ybSAuZGVse21hcmdpbi1sZWZ0OjEycHg7Y29sb3I6I2U2NDM0Nn0KI3NldHRpbmctY3VzdG9tLWZvcm0gLnRpcHttYXJnaW4tbGVmdDowfQojc2V0dGluZy1uYXYtZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctbmF2LWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLW5hdi1mb3JtIHNwYW4ubGFiZWx7bWFyZ2luLXJpZ2h0OjZweH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQub3JkZXJ7d2lkdGg6Mi41ZW07bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0LnRleHR7d2lkdGg6ODBweDttaW4td2lkdGg6MH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQudGl0bGV7d2lkdGg6MTUwcHg7bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0Lmxpbmt7d2lkdGg6MzQwcHh9CiNzZXR0aW5nLW5hdi1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jbnQsI2NvbW1lbnQtbGlzdCAuYy1lbWFpbHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWxpc3QgLmMtc2VjdGlvbnttYXgtd2lkdGg6ODMwcHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2ssI2NvbW1lbnQtbGlzdCAuYy1kZWx7Y29sb3I6I2U2NDM0Nn0jY29tbWVudC1saXN0IC5jLWNoZWNrIC5mYSwjY29tbWVudC1saXN0IC5jLWRlbCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjazpob3ZlciwjY29tbWVudC1saXN0IC5jLWRlbDpob3Zlcntjb2xvcjojYWEzOTNjfQojY29tbWVudC1mb3Jte3BhZGRpbmctdG9wOjEycHg7ZGlzcGxheTpub25lO21hcmdpbi1sZWZ0OjcycHh9I2NvbW1lbnQtZm9ybSAuYnRue21hcmdpbi1yaWdodDoyNHB4fQojY29tbWVudC1jb250ZW50e3dpZHRoOjUwMHB4O2hlaWdodDo4MHB4O21hcmdpbi1yaWdodDoyNHB4fQojZmlsZXMtbGlzdCBsaS5maWxle21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZmlsZXMtbGlzdCBsaS5maWxlPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNmaWxlcy1saXN0IGxpLmZpbGU6aG92ZXIgLmRlbHtvcGFjaXR5OjEgIWltcG9ydGFudH0KI2ZpbGVzLWxpc3QgLnVwbG9hZC10aW1le2NvbG9yOiM5OTk7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2ZpbGVzLWxpc3QgLmRlbHtjb2xvcjojZTY0MzQ2fQojZmlsZXMtbGlzdCAuZmlsZS1wcm9ncmVzc3twYWRkaW5nOjAgMTJweDtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMik7Y29sb3I6IzY2Njtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNzLmVycntiYWNrZ3JvdW5kOnJnYmEoMjU1LDY4LDcxLDAuMik7Y29sb3I6I2FhMzkzY30KI2ZpbGVzLWxpc3QgLnNpemV7d2lkdGg6NGVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfQojcGx1Z2luLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxNnB4O3BhZGRpbmctYm90dG9tOjE2cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3BsdWdpbi1saXN0IGxpIC5kZXNje21hcmdpbi1ib3R0b206MDt3aWR0aDo5OSU7Y29sb3I6Izk5OX0KI3BsdWdpbi1saXN0IGxpIGEubGJse3BhZGRpbmc6MCA4cHg7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC52ZXJzaW9ue2NvbG9yOiM1MDc2NTA7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC5uYW1le2ZvbnQtc2l6ZToxNnB4fQojcGx1Z2luLWxpc3QgbGkgLmFjdGl2ZXt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O21hcmdpbi1yaWdodDoxNnB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjEwcHh9CiNwbHVnaW4tbGlzdCBsaSAuc2V0dGluZ3ttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBwLml0ZW17Y2xlYXI6Ym90aH0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gbGFiZWx7ZmxvYXQ6bGVmdDttaW4td2lkdGg6NmVtO3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luLXJpZ2h0OjJlbX0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gLnRpdGxle3BhZGRpbmctdG9wOjA7bWFyZ2luLWJvdHRvbToxOHB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBpbnB1dC5pcHR7d2lkdGg6NjAwcHh9CiNkYXNoYm9hcmQgLmdyaWQtMS01e21hcmdpbi1yaWdodDoyJX0KI2Rhc2hib2FyZCAucXVpY2stbGluayBsaXtsaXN0LXN0eWxlOmluc2lkZSBkaXNjO21hcmdpbi1ib3R0b206NnB4O3BhZGRpbmctYm90dG9tOjZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2Rhc2hib2FyZCAuc3RhdHMgLmxibHtwYWRkaW5nOjFweCA1cHg7bWFyZ2luOjAgM3B4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNne3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZzpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMDYpfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2c6aG92ZXIgLnJlYWR7b3BhY2l0eToxfQpQSwcIHMaB8VMyAABTMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGNzc1xjbWQuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Ci5jbWR7bWFyZ2luOjI0cHggNDhweH0KLmNtZC1oZWFkZXJ7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtYnRue21hcmdpbjoxMHB4IDAgMCAzMHB4fQouY21kLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtbGlzdCBsaXtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlO2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2JhY2t1cC1saXN0IGxpPnNwYW4sI2JhY2t1cC1saXN0IGxpPmF7bWFyZ2luLXJpZ2h0OjE2cHh9CiNiYWNrdXAtbGlzdCBsaSAuZGVse2NvbG9yOiNlNjQzNDY7b3BhY2l0eTowfQojYmFja3VwLWxpc3QgbGkgLmxpbmt7bWFyZ2luLWxlZnQ6MTJweH0KI2JhY2t1cC1saXN0IGxpOmhvdmVyIC5kZWx7b3BhY2l0eToxfQojbWVzc2FnZS1saXN0IC5tZXNzYWdle3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI21lc3NhZ2UtbGlzdCAubWVzc2FnZTpob3ZlciAucmVhZHtvcGFjaXR5OjF9CiNsb2ctbGlzdCAubG9ne2ZvbnQtc2l6ZToxMnB4fQojbG9nLWxpc3QgLm5hbWV7bWFyZ2luLXJpZ2h0OjEuNWVtO2ZvbnQtd2VpZ2h0OmJvbGR9CiNsb2ctbGlzdCAudGltZSwjbG9nLWxpc3QgLm5hbWV7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2xvZy1saXN0IC50ZXh0e2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbDtjb2xvcjojNjY2O3BhZGRpbmc6OHB4IDEycHg7YmFja2dyb3VuZDojZjNmM2YzfQojbG9nLWxpc3QgLnJlbW92ZXt0b3A6MDtyaWdodDoxMnB4O2NvbG9yOiNlNjQzNDZ9ClBLBwjSN8QbLxoAAC8aAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAABzdGF0aWNcY3NzXGNvZGVtaXJyb3IuY3NzLyogQkFTSUNTICovCgouQ29kZU1pcnJvciB7CiAgICAvKiBTZXQgaGVpZ2h0LCB3aWR0aCwgYm9yZGVycywgYW5kIGdsb2JhbCBmb250IHByb3BlcnRpZXMgaGVyZSAqLwogICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiTWljcm9zb2Z0IFlhSGVpIiwgIkNvdXJpZXIgTmV3IiwgQXJpYWw7CiAgICBoZWlnaHQ6IDY2MHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgYm9yZGVyOjFweCBzb2xpZCAjOTk5Owp9CgouQ29kZU1pcnJvci1zY3JvbGwgewogICAgLyogU2V0IHNjcm9sbGluZyBiZWhhdmlvdXIgaGVyZSAqLwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi8qIFBBRERJTkcgKi8KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIHBhZGRpbmc6IDRweCAwOyAvKiBWZXJ0aWNhbCBwYWRkaW5nIGFyb3VuZCBjb250ZW50ICovCn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICBwYWRkaW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KfQoKLyogR1VUVEVSICovCgouQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLkNvZGVNaXJyb3ItbGluZW51bWJlcnMgewp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIHBhZGRpbmc6IDAgM3B4IDAgNXB4OwogICAgbWluLXdpZHRoOiAyMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBjb2xvcjogIzU1NTsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4Owp9CgovKiBDVVJTT1IgKi8KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogICAgei1pbmRleDogMzsKfQoKLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7Cn0KCi5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB3aWR0aDogYXV0bzsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6ICM3ZTc7CiAgICB6LWluZGV4OiAxOwp9CgovKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHsKfQoKLmNtLXRhYiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi8qIERFRkFVTFQgVEhFTUUgKi8KCi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQgewogICAgY29sb3I6ICM3MDg7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWF0b20gewogICAgY29sb3I6ICMyMTk7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7CiAgICBjb2xvcjogIzE2NDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tZGVmIHsKICAgIGNvbG9yOiAjMDBmOwp9CgouY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZSB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICMwNWE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTMgewogICAgY29sb3I6ICMwODU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5IHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3IgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHsKICAgIGNvbG9yOiAjYTUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1zdHJpbmcgewogICAgY29sb3I6ICNhMTE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0yIHsKICAgIGNvbG9yOiAjZjUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1tZXRhIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW4gewogICAgY29sb3I6ICMzMGE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICM5OTc7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7CiAgICBjb2xvcjogIzE3MDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIgewogICAgY29sb3I6IGJsdWU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1b3RlIHsKICAgIGNvbG9yOiAjMDkwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1ociB7CiAgICBjb2xvcjogIzk5OTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbGluayB7CiAgICBjb2xvcjogIzAwYzsKfQoKLmNtLW5lZ2F0aXZlIHsKICAgIGNvbG9yOiAjZDQ0Owp9CgouY20tcG9zaXRpdmUgewogICAgY29sb3I6ICMyOTI7Cn0KCi5jbS1oZWFkZXIsIC5jbS1zdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5jbS1lbSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5jbS1saW5rIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7CiAgICBjb2xvcjogI2YwMDsKfQoKLmNtLWludmFsaWRjaGFyIHsKICAgIGNvbG9yOiAjZjAwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjMGYwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjZjIyOwp9CgouQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogI2U4ZjJmZjsKfQoKLyogU1RPUCAqLwoKLyogVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGNvbnRhaW5zIHN0eWxlcyByZWxhdGVkIHRvIHRoZSBtZWNoYW5pY3Mgb2YKICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwoKLkNvZGVNaXJyb3IgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciAqLwogICAgbWFyZ2luLWJvdHRvbTogLTMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IC0zMHB4OwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CgouQ29kZU1pcnJvci1zaXplciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcKICAgYmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZAogICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA2OwogICAgZGlzcGxheTogbm9uZTsKfQoKLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7CiAgICByaWdodDogMDsKICAgIHRvcDogMDsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKfQoKLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgb3ZlcmZsb3cteDogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGxlZnQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHRvcDogMDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgei1pbmRleDogMzsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIG1hcmdpbi1ib3R0b206IC0zMnB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgLyogSGFjayB0byBtYWtlIElFNyBiZWhhdmUgKi8KICAgICp6b29tOiAxOwogICAgKmRpc3BsYXk6IGlubGluZTsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB6LWluZGV4OiA0Owp9CgouQ29kZU1pcnJvci1saW5lcyB7CiAgICBjdXJzb3I6IHRleHQ7Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovCiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLXdpZHRoOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgIG1hcmdpbjogMDsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICB6LWluZGV4OiAyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7Cn0KCi5Db2RlTWlycm9yLXdyYXAgcHJlIHsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKfQoKLkNvZGVNaXJyb3ItY29kZSBwcmUgewogICAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7CiAgICB3aWR0aDogLW1vei1maXQtY29udGVudDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogYXV0bzsKfQoKLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgei1pbmRleDogMDsKfQoKLkNvZGVNaXJyb3ItbGluZXdpZGdldCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi5Db2RlTWlycm9yLXdpZGdldCB7Cn0KCi5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7Cn0KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogMDsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogI2Q5ZDlkOTsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDdkNGYwOwp9CgouY20tc2VhcmNoaW5nIHsKICAgIGJhY2tncm91bmQ6ICNmZmE7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAuNCk7Cn0KCi8qIElFNyBoYWNrIHRvIHByZXZlbnQgaXQgZnJvbSByZXR1cm5pbmcgZnVubnkgb2Zmc2V0VG9wcyBvbiB0aGUgc3BhbnMgKi8KLkNvZGVNaXJyb3Igc3BhbiB7CiAgICAqdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwp9CgpAbWVkaWEgcHJpbnQgewogICAgLyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KICAgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQp9CgouY20tcy1iYXNlMTYtZGFyay5Db2RlTWlycm9yIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogIzIwMjAyMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBib3JkZXItcmlnaHQ6IDBweDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItbGluZW51bWJlciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2IwYjBiMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICM4ZjU1MzY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXRvbSB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1udW1iZXIgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWtleXdvcmQgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tc3RyaW5nIHsKICAgIGNvbG9yOiAjZjRiZjc1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICM2YTlmYjU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZGVmIHsKICAgIGNvbG9yOiAjZDI4NDQ1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICNlMGUwZTA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdGFnIHsKICAgIGNvbG9yOiAjYWM0MTQyOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWxpbmsgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZXJyb3IgewogICAgYmFja2dyb3VuZDogI2FjNDE0MjsKICAgIGNvbG9yOiAjYjBiMGIwOwp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogIzJGMkYyRiAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQpQSwcIIwM1gk4gAABOIAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAc3RhdGljXGNzc1xjb21tb24uY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH1oZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfWZpZWxkc2V0LGltZ3tib3JkZXI6MH1hZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfW9sLHVse2xpc3Qtc3R5bGU6bm9uZX1jYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9cTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfWFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfXN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH1zdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1sZWdlbmR7Y29sb3I6IzAwMH1odG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn1he3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifXB7bWFyZ2luLWJvdHRvbToxOHB4fWgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfWgxe2ZvbnQtc2l6ZToyOHB4fWgye2ZvbnQtc2l6ZToyNHB4fWgze2ZvbnQtc2l6ZToyMXB4fWg0e2ZvbnQtc2l6ZToxOXB4fWg1e2ZvbnQtc2l6ZToxNnB4fWg2e2ZvbnQtc2l6ZToxNHB4fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5sZWZ0e2Zsb2F0OmxlZnR9LnJpZ2h0e2Zsb2F0OnJpZ2h0fS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0udmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmZhZGUtb3V0e29wYWNpdHk6MH0uaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uY29udGFpbmVye3dpZHRoOjEyMDBweDttYXJnaW46YXV0b30uY29udGFpbmVyOTYwe3dpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmctYm90dG9tOjEycHh9Lm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fVBLBwh7vP2MJhQAACYUAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAABzdGF0aWNcY3NzXGhpZ2hsaWdodC5jc3MvKg0KDQpTdW5idXJzdC1saWtlIHN0eWxlIChjKSBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+DQoNCiovDQoNCnByZSBjb2RlIHsNCiAgICBkaXNwbGF5OiBibG9jazsgcGFkZGluZzogMC41ZW07DQogICAgYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmOGY4Zjg7DQp9DQoNCnByZSAuY29tbWVudCwNCnByZSAudGVtcGxhdGVfY29tbWVudCwNCnByZSAuamF2YWRvYyB7DQogICAgY29sb3I6ICNhZWFlYWU7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmtleXdvcmQsDQpwcmUgLnJ1YnkgLmZ1bmN0aW9uIC5rZXl3b3JkLA0KcHJlIC5yZXF1ZXN0LA0KcHJlIC5zdGF0dXMsDQpwcmUgLm5naW54IC50aXRsZSB7DQogICAgY29sb3I6ICNFMjg5NjQ7DQp9DQoNCnByZSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnN1YiAua2V5d29yZCwNCnByZSAubWV0aG9kLA0KcHJlIC5saXN0IC50aXRsZSB7DQogICAgY29sb3I6ICM5OUNGNTA7DQp9DQoNCnByZSAuc3RyaW5nLA0KcHJlIC50YWcgLnZhbHVlLA0KcHJlIC5jZGF0YSwNCnByZSAuZmlsdGVyIC5hcmd1bWVudCwNCnByZSAuYXR0cl9zZWxlY3RvciwNCnByZSAuYXBhY2hlIC5jYnJhY2tldCwNCnByZSAuZGF0ZSwNCnByZSAudGV4IC5jb21tYW5kLA0KcHJlIC5jb2ZmZWVzY3JpcHQgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICM2NUIwNDI7DQp9DQoNCnByZSAuc3Vic3Qgew0KICAgIGNvbG9yOiAjREFFRkEzOw0KfQ0KDQpwcmUgLnJlZ2V4cCB7DQogICAgY29sb3I6ICNFOUMwNjI7DQp9DQoNCnByZSAudGl0bGUsDQpwcmUgLnN1YiAuaWRlbnRpZmllciwNCnByZSAucGksDQpwcmUgLnRhZywNCnByZSAudGFnIC5rZXl3b3JkLA0KcHJlIC5kZWNvcmF0b3IsDQpwcmUgLnNoZWJhbmcsDQpwcmUgLnByb21wdCB7DQogICAgY29sb3I6ICM4OUJERkY7DQp9DQoNCnByZSAuY2xhc3MgLnRpdGxlLA0KcHJlIC5oYXNrZWxsIC50eXBlLA0KcHJlIC5zbWFsbHRhbGsgLmNsYXNzLA0KcHJlIC5qYXZhZG9jdGFnLA0KcHJlIC55YXJkb2N0YWcsDQpwcmUgLnBocGRvYyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCnByZSAuc3ltYm9sLA0KcHJlIC5ydWJ5IC5zeW1ib2wgLnN0cmluZywNCnByZSAubnVtYmVyIHsNCiAgICBjb2xvcjogIzMzODdDQzsNCn0NCg0KcHJlIC5wYXJhbXMsDQpwcmUgLnZhcmlhYmxlLA0KcHJlIC5jbG9qdXJlIC5hdHRyaWJ1dGUgew0KICAgIGNvbG9yOiAjM0U4N0UzOw0KfQ0KDQpwcmUgLmNzcyAudGFnLA0KcHJlIC5ydWxlcyAucHJvcGVydHksDQpwcmUgLnBzZXVkbywNCnByZSAudGV4IC5zcGVjaWFsIHsNCiAgICBjb2xvcjogI0NEQTg2OTsNCn0NCg0KcHJlIC5jc3MgLmNsYXNzIHsNCiAgICBjb2xvcjogIzlCNzAzRjsNCn0NCg0KcHJlIC5ydWxlcyAua2V5d29yZCB7DQogICAgY29sb3I6ICNDNUFGNzU7DQp9DQoNCnByZSAucnVsZXMgLnZhbHVlIHsNCiAgICBjb2xvcjogI0NGNkE0QzsNCn0NCg0KcHJlIC5jc3MgLmlkIHsNCiAgICBjb2xvcjogIzhCOThBQjsNCn0NCg0KcHJlIC5hbm5vdGF0aW9uLA0KcHJlIC5hcGFjaGUgLnNxYnJhY2tldCwNCnByZSAubmdpbnggLmJ1aWx0X2luIHsNCiAgICBjb2xvcjogIzlCODU5RDsNCn0NCg0KcHJlIC5wcmVwcm9jZXNzb3IsDQpwcmUgLnByYWdtYSB7DQogICAgY29sb3I6ICM4OTk2QTg7DQp9DQoNCnByZSAuaGV4Y29sb3IsDQpwcmUgLmNzcyAudmFsdWUgLm51bWJlciB7DQogICAgY29sb3I6ICNERDdCM0I7DQp9DQoNCnByZSAuY3NzIC5mdW5jdGlvbiB7DQogICAgY29sb3I6ICNEQUQwODU7DQp9DQoNCnByZSAuZGlmZiAuaGVhZGVyLA0KcHJlIC5jaHVuaywNCnByZSAudGV4IC5mb3JtdWxhIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEUyMjMxOw0KICAgIGNvbG9yOiAjRjhGOEY4Ow0KICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCn0NCg0KcHJlIC5kaWZmIC5jaGFuZ2Ugew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0QTQxMEQ7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuYWRkaXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTNCMjI7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuZGVsZXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0MjBFMDk7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuY29mZmVlc2NyaXB0IC5qYXZhc2NyaXB0LA0KcHJlIC5qYXZhc2NyaXB0IC54bWwsDQpwcmUgLnRleCAuZm9ybXVsYSwNCnByZSAueG1sIC5qYXZhc2NyaXB0LA0KcHJlIC54bWwgLnZic2NyaXB0LA0KcHJlIC54bWwgLmNzcywNCnByZSAueG1sIC5jZGF0YSB7DQogICAgb3BhY2l0eTogMC41Ow0KfQ0KDQpwcmUgLmdvIC50eXBlbmFtZXsNCiAgICBjb2xvcjogI2ZmYmM1NDsNCn1QSwcIw2jj3l0JAABdCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAc3RhdGljXGNzc1xsaW5nLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDojZjNmM2YzfQojaGVhZGVye2JhY2tncm91bmQ6IzAwOTNjNDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzo0MHB4IDAgNDhweCAwO2NvbG9yOiNmYmZiZmJ9I2hlYWRlciBhOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy1tb3otdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy13ZWJraXQtdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzfQojaGVhZGVyLWltZ3t3aWR0aDo5NnB4O2hlaWdodDo5NnB4O2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe2xpbmUtaGVpZ2h0Ojk0cHg7Y29sb3I6I2ZiZmJmYjtwYWRkaW5nOjA7bWFyZ2luLWxlZnQ6MjRweH0jaGVhZGVyLWggYXtjb2xvcjojZmJmYmZifQojaGVhZGVyLXN1Yntjb2xvcjojZjNmM2YzO21hcmdpbi1sZWZ0OjEuMmVtO2ZvbnQtc2l6ZToxNnB4fQojbmF2e2xpbmUtaGVpZ2h0OjkwcHh9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O21hcmdpbi1sZWZ0OjQ0cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiNmM2YzZjM7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNmb290ZXJ7cGFkZGluZzozMHB4IDQwcHg7Y29sb3I6Izk5OX0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2dvLXRvcHtib3R0b206NTBweDtyaWdodDo0MHB4O3Bvc2l0aW9uOmZpeGVkO2NvbG9yOiNmZmY7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjhweDtvcGFjaXR5Oi40fQojYXJ0aWNsZS1jb250YWluZXJ7aGVpZ2h0OjEwMCV9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHN7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjM2cHg7LW1vei1ib3JkZXItcmFkaXVzOjM2cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjM2cHg7bGluZS1oZWlnaHQ6NTZweDtmb250LXNpemU6MjRweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDo0MHB4O21hcmdpbi1sZWZ0OjhweDtib3JkZXI6NnB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHMgYXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzOmhvdmVye2JveC1zaGFkb3c6MCAwIDRweCAjNjY2Oy1tb3otYm94LXNoYWRvdzowIDAgNHB4ICM2NjY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA0cHggIzY2Nn0KI2FydGljbGUtY29udGFpbmVyIC52aWV3c3t0b3A6MTRweDtsZWZ0OjA7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6MzBweDstbW96LWJvcmRlci1yYWRpdXM6MzBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzBweDtwYWRkaW5nOjA7Ym9yZGVyOjRweCBzb2xpZCAjZmZmO2JveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy1tb3otYm94LXNoYWRvdzowIDAgMnB4ICM5OTk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggIzk5OX0KI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjExNnB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxMXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjojZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2M3B4O2xlZnQ6LTIycHh9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbiAudGl0bGV7Zm9udC1zaXplOjI4cHg7cGFkZGluZy1ib3R0b206MjRweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aW1lLWluZm97Y29sb3I6Izk5OTttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZy1ib3R0b206MjBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZDt0ZXh0LWluZGVudDoxZW07Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIGFydGljbGV7bWFyZ2luLWJvdHRvbTo1MHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWlue21hcmdpbi1sZWZ0OjB9I2FydGljbGUtY29udGFpbmVyIC5hcnRpY2xlLXNpbmdsZSAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tZXRhe3JpZ2h0OjQ0cHg7dG9wOi0zNnB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC52aWV3c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDtib3JkZXI6NnB4IHNvbGlkICNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAudGFne2NvbG9yOiM5OTl9CiNhcnRpY2xlLXBhZ2Vye21hcmdpbi1sZWZ0OjExNnB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVte21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojOTk5O3BhZGRpbmc6MTJweCAxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweH0jYXJ0aWNsZS1wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kOiMwMDc5YmN9CiNjb21tZW50e2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNjb21tZW50IC5tZXRhe3JpZ2h0Oi0yNHB4O3RvcDotMzBweH0jY29tbWVudCAubWV0YSAuY29tbWVudHN7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjB9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbTozMnB4fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnttYXJnaW4tcmlnaHQ6MThweDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHh9CiNjb21tZW50LWxpc3QgLmMtbWV0YSBwe21hcmdpbi1ib3R0b206MH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTpibG9ja30jY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9yOmhvdmVye2NvbG9yOiMwMDViOWJ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseXtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2RkZDtwYWRkaW5nOjNweCAxMHB4fSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9CiNjb21tZW50LWxpc3QgLmMtY29udGVudHtwYWRkaW5nLXRvcDo0cHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2t7Zm9udC1zaXplOjEzcHg7Y29sb3I6I2U2NDM0NjttYXJnaW4tbGVmdDoxMnB4fQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtc2hvd3ttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LXRpdGxle21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0bzttYXJnaW4tYm90dG9tOjMwcHh9I2NvbW1lbnQtZm9ybSAuYy1pbmZve3dpZHRoOjI2JX0jY29tbWVudC1mb3JtIC5jLWluZm8gLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MH0KI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjcwJX0KI2NvbW1lbnQtZm9ybSAuYy1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O21hcmdpbi10b3A6NnB4O3dpZHRoOjUwcHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b319QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDowfSAjYXJ0aWNsZS1jb250YWluZXIgLm1ldGF7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW46YmVmb3Jle2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9ICNuYXYsI2hlYWRlci1oe2xpbmUtaGVpZ2h0OjUwcHh9ICNmb290ZXIgc3BhbntmbG9hdDpub25lO3RleHQtYWxpZ246Y2VudGVyfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaHttYXJnaW4tbGVmdDowfSAjaGVhZGVyLWltZ3tkaXNwbGF5Om5vbmV9ICNjb21tZW50LWZvcm17d2lkdGg6MTAwJX0gI25hdntmbG9hdDpsZWZ0fSNuYXYgbGl7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NDRweH19ClBLBwjPw+rWnCoAAJwqAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXHN0eWxlLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9iZy5wbmciKSByZXBlYXR9CiNoZWFkZXJ7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9oZWFkZXIuZ2lmIikgcmVwZWF0ICM0YzcyOTg7bWluLXdpZHRoOjEyMHB4O3BhZGRpbmc6MzBweCAwO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjUwcHg7LW1vei1ib3JkZXItcmFkaXVzOjUwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwcHh9CiNoZWFkZXItaHtwYWRkaW5nLXRvcDoyNHB4O2ZvbnQtc2l6ZTozMnB4fSNoZWFkZXItaCBhe2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0KI25hdntoZWlnaHQ6NTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym94LXNoYWRvdzowIDAgMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O3BhZGRpbmc6MCAxOHB4fSNuYXYgbGkgYXtmb250LXNpemU6MTZweDtjb2xvcjojMzMzO3BhZGRpbmc6MCAzMnB4O2Rpc3BsYXk6YmxvY2t9I25hdiBsaSBhOmhvdmVye2JvcmRlci1ib3R0b206NHB4IHNvbGlkICMwMDc5YmN9CiNuYXYuZml4ZWR7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTt0b3A6MH0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2Zvb3Rlcntjb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6IzFjMjQyOTtwYWRkaW5nOjI0cHggMH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsZXR0ZXItc3BhY2luZzoxcHh9I2Zvb3RlciBwIGF7Y29sb3I6I2NjYzttYXJnaW46MCAxNnB4fSNmb290ZXIgcCBhOmhvdmVye2NvbG9yOiNmYmZiZmJ9CiNmb290ZXIgcCBhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXt3aWR0aDoxMDhweDtsaW5lLWhlaWdodDoyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnZpZXdzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnRpbWV7Y29sb3I6I2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIGF7Y29sb3I6I2ZmZn0jYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTQwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZXtwYWRkaW5nOjhweCAxNnB4O2JhY2tncm91bmQtY29sb3I6IzRjNzI5ODtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjJweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoycHh9I2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxlIGF7Y29sb3I6I2VlZX0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxOHB4IDI0cHggMjRweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZve21hcmdpbi1ib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoycHg7Y29sb3I6Izk5OX0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLmZhe21hcmdpbi1yaWdodDo4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuc2hhcmUgLmZhe21hcmdpbi1yaWdodDowfQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+KntwYWRkaW5nOjZweCAxOHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+c3Bhbntib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmlnaHR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJpZ2h0Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZHtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC50aW1lLCNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAudmlld3Mgc3Bhbntmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjQ4cHh9CiNjb21tZW50e21hcmdpbi10b3A6LTI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjI0cHg7YmFja2dyb3VuZDojZmZmfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0b30jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxOHB4O3BhZGRpbmctYm90dG9tOjE4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1yZXBseXtjb2xvcjojOTk5fSNjb21tZW50LWxpc3QgLmMtcmVwbHk6aG92ZXJ7Y29sb3I6IzMzM30KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3J7Zm9udC1zaXplOjEzcHh9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhe21hcmdpbi1yaWdodDo2cHh9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YS5sZWZ0e2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI25hdiBsaXtwYWRkaW5nOjAgMTBweH0gI2hlYWRlci1pbWd7ZmxvYXQ6bGVmdDt3aWR0aDo2NHB4O2hlaWdodDo2NHB4fSAjaGVhZGVyLWh7cGFkZGluZzoxN3B4IDA7Zm9udC1zaXplOjI0cHh9ICNoZWFkZXItc3Vie2Rpc3BsYXk6bm9uZX0gI2FydGljbGUtY29udGFpbmVyIC50YWcsI2FydGljbGUtY29udGFpbmVyIC50aW1le2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjY29tbWVudC1saXN0IC5jLWF2YXRhcntkaXNwbGF5Om5vbmV9fQpQSwcIqnrsLo0oAACNKAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGZhdmljb24uaWNvAAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAAAACzfgfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N+B9uzfgfbs34H27N+B9uzfgfbs34H27N9B9uzfgfbs34H27N9B9uzfgfbs34H27N+B9uzfgfbsnwH1q96B8etfhittZNKkLqCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qDDf+6hhf/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+6gQj/uYEI/7mCCP+6gQj/uoII/7qCCP+5gQj/uYEI/7mCCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qCCP+5gQj/uYEI/7qBCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6ggj/uoEI/7qCCP+6ggj/uoEI/7qCCP+6gQj/uoEI/7mBCP+5gQj/uYIH/7mCB/+5ggf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/vIQF/7yEBf+7gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8gwX/vIQF/7yEBf+8gwX/vIQG/7yEBv/AhwP/wIYD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIcE/8CHBP/AhgP/wIYC/8WJAv/FiQH/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WKAv/FiQH/xYoD/8ePDv/Mmif/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yZMX/9avU//hwHX/6dKf//Pnzf/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uNAP/LoD3/8uvd/v79+v7//////////sqOAP7KjQD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44B/8uOAP/LjgD/y40A/8qOAP/LjgD/y44A/8uOAf/LjgH/y44A/8uOAP/LjgD/y44A/8uOAf/KjQD/y48G/9i5c//6+fX+/v///v7+/v/+/v7+yo4A/sqNAP/LjgD/y44A/8qOAP/KjgD/yo4A/8qOAP/LjgD/y44A/8qOAP/LjgD/y44A/8qNAP/LjQD/y44B/8mNAf/HjQj/yo4D/8qNAP/LjQD/yo0A/8qNAP/KjQD/y48C/9CaG//fvnH/9e/g//7+/v7////+/v7+//7+/v7LjgH6y44A/8qNAP/LjgD/y44B/8qOAP/KjgD/yo4A/8uOAP/KjgD/yo4A/8uOAP/LjgH/yo4A/8qNAP/JjAD/x5o0/8Gref+oi0j/zaZO/8WYMP/PnzH/1qY5/9qwT//iwnf/8N+5//v48v/+/v///v7+/////////////v7+/7ySMr67ihn/zJIM/8qOAP/KjQD/yo0A/8qNAP/KjgD/yo4A/8qOAP/KjQD/yo0A/8qNAP/LjgH/0JkY/8mjTf/Qxq3/5eXm/6alo//p5t//xL6x/+Hayf758+P++/bs//38+f/////+/////v7+/v/+/v7////////////+/v7/lZONlJmPef/mzpn/4L1q/9mtSP/UozL/0Zsf/8+WE//PlRH/z5UR/8+XF//Tnyj/2atD/+G/cf/t27P/0MzE/8PDw/7q6ur+tra2/ujo6P60tLX+2tvb/v39/f7+///+/v7+//////7////+/v7+//7+/v/////+/////v////6XlpaVkpKT//b29f/9+/f/+fTn//bt1//y5MX/8N+4/+7csv/v3LP/8eG7//Xpzv/58+T/9/Xy/8nJyv+vr6//paSk/729vf+UlJT/ubm5/6enp/+xsbH/0dHR//z8/P///////v7+//7+/v/+/v7//v7+/////////////v7+/6mpqZiRkZH/8vLy/////v/+/v7//////////////////v7+//7+/v/+/v///v/////////h4eD/urm5/+/v7//s7Oz/19fX/8bGxv/e3t7/9fX1/+rq6/+4uLj/8fHx///////+/v7+//////7+/v/+/v7////////////+/v7/m5ubZ4ODg/Dt7e3///////////7///7+/v7+//7+/v7//v7+/v7+/vn5+f729vb++vr6/ufn6P+3t7f/7e3t//j4+P7d3d3+2NjY/vLy8v7+/v7+2NjY/r6+vv74+Pj+//////////7////+/v7+//7+/v/////+/////v////41NTUjcXFx2Obm5v/////+/////v/////+/v7//////+/v7/7Q0ND/vr6+/rq6uv6+vr7/0dHR/s/Pz/6srKz/Z2dn/isrK/8jIyP/W1tb/6urq/+9vb3+5OTk/uXl5f/a2tr/39/f/vDw8P79/f3//////v7+/v7//////////o2NjSd1dXXa29vb//////7////+//////7+/v/h4eH/tbW1/srKyv/j4+P+5+fn/uPj4//Jycn+vr6+/re3t/8sLCz+AAAA/wAAAP8GBgb/hoaG/9fX1/6+vr7+vLy8/8HBwf++vr7+ubm5/sfHx//x8fH+/////v/////////+4ODgJISEhNnFxcX///////////7/////5+fn/7W1tf/k5OT///////////7//////////v7+/v7g4OD/tra2/66urv9ubm7/WVlZ/4ODg/+7u7v/vr6+/+Tk5P76+vr//f39//z8/P7w8PD/ysrK/7e3t//w8PD///////////+Hh4eAXV1d8aOjo////////////vv7+//BwcH/wcHB/62trf/Gxsb/+vr6///////+/v7//v7+/v/////W1tb/xMTE//b29v/29vb/3d3d/76+vv/k5OT/8fHx//7+/v/+/v7//v7+/v/////9/f3/zc3N/8PDw//7+/v//////4aGhviWlpb/i4uL//f39///////7u7u/6urq/9SUlL/ExMT/2dnZ//R0dH//f39//7+/v////////////Ly8v+4uLj/7+/v//r6+v/AwMD/nJyc/1RUVP9ubm7/3Nzc//7+/v/////+/v7+///////09PT/t7e3/+vr6///////7+/v/+zs7P98fHz/2NjY/v////7n5+f/k5OT/xYWFv8FBQX/Nzc3/5mZmf/7+/v//v7+//////7/////+vr6/8PDw//n5+f/8/Pz/6ysrP85OTn/AAAA/0VFRf6YmJj/9fX1//////7+/v7///////39/f/ExMT/3t7e////////////0dHR/zMzM/+Xl5f//////+fn5/+zs7P/aGho/xcXF/86Ojr/yMjI//7+/v/+/v7////////////4+Pj/vb29/+vr6//w8PD/s7Oz/0xMTP8AAAD/Dg4O/oKCgv/6+vr//////v7+/v///////v7+/8fHx//c3Nz///////////+4uLj/GRkZ/z8/P/7f39/+9vb2/r29vf/b29v+xMTE/tvb2//9/f3+/v7+/v////7////+/////uXl5f65ubn+9vb2//Pz8/++vr7/wcHB/nJycv5+fn7+4ODg///////+/v7+/v7+/v/////4+Pj+vLy8/ubm5v/////+/////vHx8f+ysrL/hYWF/ouLi/709PT/1NTU/729vf/5+fn+//////7+/v7////+//////////729vb+vb29/9bW1v///////f39/8fHx//Ozs7/+fn5/vz8/P7///////////////7////+/////9/f3/65ubn++Pj4/+7u7v7Jycn/+Pj4/v/////y8vL+iIiI/pubm//09PT/yMjI/729vf7n5+f/+vr6/vz8/P76+vr/5+fn/r29vf7Jycn/+vr6////////////8PDw/7e3t//Y2Nj+/f39/v///////////////v////7p6en/t7e3/uLi4v/x8fH/jo6O/nNzc+WQkJD+o6Oj/6CgoP5+fn76Tk5O4ZycnPvh4eH/1tbW/r29vf/AwMD/wcHB/76+vv+5ubn+1tbW/vr6+v//////////////////////6enp/7m5uf7Dw8P+39/f/+jo6P/k5OT+zMzM/7a2tv/d3d3+6urq/4ODg/9wcHD/q6urP3BwcGZFRUVpSkpKZ4WFhV+MjIw4bW1tm3d3d+utra3/2NjY/+Tk5P7l5eX/6enp//b29v7////////////////+/v7/////////////////9fX1/9bW1v/CwsL/vb29/8HBwf/R0dH/5OTk/8bGxv99fX3zY2Njzmtra9IREREA////AP///wC8vLwAAAAAAAAAAADOzs4LdnZ2RW1tbaN7e3vrmZmZ/7e3t//X19f/6Ojo//Dw8P/29vb/+vr6//39/f////////////////////////////f39//q6ur/3d3d/re3t/+Ojo7+fHx84IeHh3K8vLwXcHBwHcPDwwCAgIAAICAgAD8/PwCYmJgAxsbGAJeXlwH///8AysrKDampqVN9fX2OcHBwxXt7e/d3d3f1gYGB+ZGRkfyjo6P7s7Oz+7+/v/vFxcX7xsbG+8DAwPuzs7P7nJyc/IGBgfp4eHj6cXFxzImJiYu+vr48////BaqqqgH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAAAAAABQSwcIqXMT8L4QAAC+EAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAc3RhdGljXGltZy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAc3RhdGljXGltZ1xiZy5wbmeJUE5HDQoaCgAAAA1JSERSAAAAlgAAAJYIAgAAALNj5rUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI2RTRGQ0JFNTVBQUUyMTE5NzAwQjU5OUUyOTNFQTA3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA5NzBGM0NFQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA5NzBGM0NEQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkFBQkJFQTE4RkI1RTIxMUJCRTNBQkY0MzkzOEFFQkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7MjgrrAAAoI0lEQVR42uzd7ZJkR5GtYXVSwP1fKCMQzBwDhHR2aXU/9SoKww5Dbh2Eqn60VWdl7ozwiPCP5cs9Pn399TePx+Nvf/vbp0+fvvvuu1//+td//etfX15ert9/9atfffvtt9dfr99/85vf/OUvf7l+/+qrr/bf6yPXX/fL9dm97frlevH6+PUQL17/7nXv2ZOvX66v2+t78/X7vvf777+/Hnu9sjdc/90brhevv16/XK9cX3H9vmFvYNdfr/fvT9cr11+/++Hn+uX60/X6XtyT98F96vr3+uD1y/XKNfjrndcrvnRjvl7xkevFSWNvuP7dmwntesj1huudE8Uefpec//CHP00EG4ShXL9sthvH3jO5TxbXv3vEZrvvuD5y/fcaxPVfs90b9inj/uqHnwndwycmw9jH9+aN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w3a6wnOpCa4gdQeJQJeeiFsXYlc2FYcbyN0V27XTaTOuRTqGnrcDXNUp4qRkMkYWjkUv7LUnjkZBT5fz/xVgAMwCMiX3lhRvAAAAAElFTkSuQmCCUEsHCJuj1O/zKwAA8ysAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHN0YXRpY1xpbWdcaGVhZGVyLmdpZkdJRjg5YWQAZACzAABNdJpJbZJOdZxIbJBJbpJMc5lKb5RMcphKcJVLcZYAAAAAAAAAAAAAAAAAAAAAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjAxNUFBQzE1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjAxNUFBQzI1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFCRjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgc3RSZWY6ZG9jdW1lbnRJRD0i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Ow0KICAgIHRvcEJ1dHRvbigpOw0KICAgIHJlbmRlck1hcmtkb3duKCk7DQogICAgaW5pdENvbW1lbnQoKTsNCn0pOw0KDQpmdW5jdGlvbiBmaXhIZWFkZXIoKSB7DQogICAgdmFyICRuYXYgPSAkKCcjbmF2Jyk7DQogICAgdmFyIHRvcCA9ICRuYXYub2Zmc2V0KCkudG9wOw0KICAgIGNvbnNvbGUubG9nKHRvcCk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkbmF2LmFkZENsYXNzKCJmaXhlZCIpLnJlbW92ZUNsYXNzKCJ0ZXh0LWNlbnRlciIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG5hdi5yZW1vdmVDbGFzcygiZml4ZWQiKS5hZGRDbGFzcygidGV4dC1jZW50ZXIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiB0b3BCdXR0b24oKSB7DQogICAgdmFyIHRvcCA9ICQoJyNuYXYnKS5vZmZzZXQoKS50b3A7DQogICAgdmFyICR0b3AgPSAkKCcjZ28tdG9wJyk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkdG9wLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdG9wLmFkZENsYXNzKCdoaWRlJyk7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkdG9wLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiAwfSwgNTAwKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pDQp9DQoNCmZ1bmN0aW9uIHJlbmRlck1hcmtkb3duKCkgew0KICAgIHZhciAkbWQgPSAkKCcubWFya2Rvd24nKTsNCiAgICAkbWQuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAkKGl0ZW0pLmh0bWwobWFya2VkKCQoaXRlbSkuaHRtbCgpLnJlcGxhY2UoLyZndDsvZywgJz4nKSkpOw0KICAgIH0pOw0KICAgIHZhciBjb2RlID0gJG1kLmZpbmQoJ3ByZSBjb2RlJyk7DQogICAgaWYgKGNvZGUubGVuZ3RoKSB7DQogICAgICAgICQoIjxsaW5rPiIpLmF0dHIoeyByZWw6ICJzdHlsZXNoZWV0IiwgdHlwZTogInRleHQvY3NzIiwgaHJlZjogIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MifSkuYXBwZW5kVG8oImhlYWQiKTsNCiAgICAgICAgJC5nZXRTY3JpcHQoIi9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBjb2RlLmVhY2goZnVuY3Rpb24gKGksIGl0ZW0pIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGl0ZW0pDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBpbml0Q29tbWVudCgpIHsNCiAgICB2YXIgJGxpc3QgPSAkKCcjY29tbWVudC1saXN0Jyk7DQogICAgaWYgKCEkbGlzdC5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpIHsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXV0aG9yJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF1dGhvciIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtZW1haWwiKSk7DQogICAgICAgICQoJyNjb21tZW50LXVybCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC11cmwiKSk7DQogICAgICAgICQoJyNjb21tZW50LWF2YXRhcicpLmF0dHIoInNyYyIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF2YXRhciIpKTsNCiAgICAgICAgJCgnLmMtYXZhdGFyJykucmVtb3ZlQ2xhc3MoIm51bGwiKTsNCiAgICB9DQogICAgJCgnI2NvbW1lbnQtY29udGVudCcpLm9uKCJmb2N1cyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKCQoJy5jLWF2YXRhcicpLmhhc0NsYXNzKCJudWxsIikpIHsNCiAgICAgICAgICAgICQoJy5jLWF2YXRhci1maWVsZCcpLnJlbW92ZSgpOw0KICAgICAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJCgnLm5vdC1tZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICQoJy5jLWluZm8tZmllbGRzJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LXNob3cnKS5vbigiY2xpY2siLCAiLmVuYWJsZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgiI2NvbW1lbnQtc2hvdyIpLnJlbW92ZSgpOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICB9KTsNCiAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdXRob3IiLCAkKCcjY29tbWVudC1hdXRob3InKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1lbWFpbCIsICQoJyNjb21tZW50LWVtYWlsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtdXJsIiwgJCgnI2NvbW1lbnQtdXJsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtYXZhdGFyIiwganNvbi5jb21tZW50LmF2YXRhcik7DQogICAgICAgICAgICB2YXIgdHBsID0gJCgkKCcjY29tbWVudC10cGwnKS5odG1sKCkpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF2YXRhciIpLmF0dHIoInNyYyIsIGpzb24uY29tbWVudC5hdmF0YXIpLmF0dHIoImFsdCIsIGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF1dGhvciIpLmF0dHIoImhyZWYiLCBqc29uLmNvbW1lbnQudXJsKS50ZXh0KGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXJlcGx5IikuYXR0cigicmVsIiwganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIHRwbC5maW5kKCIuYy1jb250ZW50IikuaHRtbChqc29uLmNvbW1lbnQuY29udGVudCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnBhcmVudF9tZCkgew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikuaHRtbChtYXJrZWQoanNvbi5jb21tZW50LnBhcmVudF9tZCkpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtcC1tZCIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHBsLmF0dHIoImlkIiwgImNvbW1lbnQtIiArIGpzb24uY29tbWVudC5pZCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnN0YXR1cyA9PSAiYXBwcm92ZWQiKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbGlzdC5hcHBlbmQodHBsKTsNCiAgICAgICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhbGVydCgi5o+Q5Lqk5aSx6LSlISIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJGxpc3Qub24oImNsaWNrIiwgIi5jLXJlcGx5IiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgdmFyIHBjID0gJCgnI2NvbW1lbnQtJyArIGlkKTsNCiAgICAgICAgdmFyIG1kID0gIj4gQCIgKyBwYy5maW5kKCIuYy1hdXRob3IiKS50ZXh0KCkgKyAiXG5cbiI7DQogICAgICAgIG1kICs9ICI+ICIgKyBwYy5maW5kKCIuYy1jb250ZW50IikuaHRtbCgpICsgIlxuIjsNCiAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLmJlZm9yZSgnPGRpdiBjbGFzcz0icmVwbHktbWQgbWFya2Rvd24iPicgKyBtYXJrZWQobWQpICsgJzwvZGl2PicpOw0KICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICBpZiAoJCgnI2NvbW1lbnQtc2hvdycpLmxlbmd0aCkgew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtc2hvdyAuZW5hYmxlJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICAgICAgfQ0KICAgICAgICAkKCcuY2FuY2VsLXJlcGx5Jykuc2hvdygpOw0KICAgICAgICB2YXIgdG9wID0gJCgnI2NvbW1lbnQtZm9ybScpLm9mZnNldCgpLnRvcDsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiB0b3B9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnLmNhbmNlbC1yZXBseScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlcGx5LW1kJykucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCn0NClBLBwge4R5ydRIAAHUSAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcanNcdXBsb2FkLmpzZnVuY3Rpb24gaW5pdFVwbG9hZChwKSB7DQogICAgJCgnI2F0dGFjaC1zaG93Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLnRyaWdnZXIoImNsaWNrIik7DQogICAgfSk7DQogICAgJCgnI2F0dGFjaC11cGxvYWQnKS5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoY29uZmlybSgi56uL5Y2z5LiK5LygPyIpKSB7DQogICAgICAgICAgICB2YXIgYmFyID0gJCgnPHAgY2xhc3M9ImZpbGUtcHJvZ3Jlc3MgaW5saW5lLWJsb2NrIj4wJTwvcD4nKTsNCiAgICAgICAgICAgICQoJyNhdHRhY2gtZm9ybScpLmFqYXhTdWJtaXQoew0KICAgICAgICAgICAgICAgICJiZWZvcmVTdWJtaXQiOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQocCkuYmVmb3JlKGJhcik7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAidXBsb2FkUHJvZ3Jlc3MiOiBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCB0b3RhbCwgcGVyY2VudENvbXBsZXRlKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBwZXJjZW50VmFsID0gcGVyY2VudENvbXBsZXRlICsgJyUnOw0KICAgICAgICAgICAgICAgICAgICBiYXIuY3NzKCJ3aWR0aCIsIHBlcmNlbnRWYWwpLmh0bWwocGVyY2VudFZhbCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKGpzb24ubXNnKS5hZGRDbGFzcygiZXJyIik7DQogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXIucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDAwKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKCIvIiArIGpzb24uZmlsZS5VcmwgKyAiJm5ic3A7Jm5ic3A7Jm5ic3A7KEAiICsganNvbi5maWxlLk5hbWUgKyAiKSIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudmFsKCIiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICQodGhpcykudmFsKCIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfVBLBwiIiRf79gQAAPYEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcbGliL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAACEAAABzdGF0aWNcbGliXGNvZGVtaXJyb3ItbW9kZS5taW4uanMhZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9L14oXHMqKShbKistXXwoXGQrKVwuKShccyopLyxlPSIqKy0iO0NvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0PWZ1bmN0aW9uKHIpe3ZhciBuLGk9ci5nZXRDdXJzb3IoKSxvPXIuZ2V0U3RhdGVBZnRlcihpLmxpbmUpLmxpc3QhPT0hMTtpZighb3x8IShuPXIuZ2V0TGluZShpLmxpbmUpLm1hdGNoKHQpKSlyZXR1cm4gci5leGVjQ29tbWFuZCgibmV3bGluZUFuZEluZGVudCIpLHZvaWQgMDt2YXIgbD1uWzFdLGE9bls0XSxzPWUuaW5kZXhPZihuWzJdKT49MD9uWzJdOnBhcnNlSW50KG5bM10sMTApKzErIi4iO3IucmVwbGFjZVNlbGVjdGlvbigiXG4iK2wrcythLCJlbmQiKX19KCksQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4gZS5mPWUuaW5saW5lPXIscih0LGUpfWZ1bmN0aW9uIG4odCxlLHIpe3JldHVybiBlLmY9ZS5ibG9jaz1yLHIodCxlKX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LmxpbmtUaXRsZT0hMSx0LmVtPSExLHQuc3Ryb25nPSExLHQucXVvdGU9MCxnfHx0LmYhPWx8fCh0LmY9Yyx0LmJsb2NrPW8pLHQudHJhaWxpbmdTcGFjZT0wLHQudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsdC50aGlzTGluZUhhc0NvbnRlbnQ9ITEsbnVsbH1mdW5jdGlvbiBvKHQsaSl7dmFyIG89aS5saXN0IT09ITE7aS5saXN0IT09ITEmJmkuaW5kZW50YXRpb25EaWZmPj0wPyhpLmluZGVudGF0aW9uRGlmZjw0JiYoaS5pbmRlbnRhdGlvbi09aS5pbmRlbnRhdGlvbkRpZmYpLGkubGlzdD1udWxsKTppLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbj4wPyhpLmxpc3Q9bnVsbCxpLmxpc3REZXB0aD1NYXRoLmZsb29yKGkuaW5kZW50YXRpb24vNCkpOmkubGlzdCE9PSExJiYoaS5saXN0PSExLGkubGlzdERlcHRoPTApO3ZhciBsPW51bGw7aWYoaS5pbmRlbnRhdGlvbkRpZmY+PTQpcmV0dXJuIGkuaW5kZW50YXRpb24tPTQsdC5za2lwVG9FbmQoKSxrO2lmKHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDtpZihsPXQubWF0Y2goUikpaS5oZWFkZXI9bFswXS5sZW5ndGg8PTY/bFswXS5sZW5ndGg6NjtlbHNlIGlmKGkucHJldkxpbmVIYXNDb250ZW50JiYobD10Lm1hdGNoKEcpKSlpLmhlYWRlcj0iPSI9PWxbMF0uY2hhckF0KDApPzE6MjtlbHNlIGlmKHQuZWF0KCI+IikpZm9yKGkuaW5kZW50YXRpb24rKyxpLnF1b3RlPTEsdC5lYXRTcGFjZSgpO3QuZWF0KCI+Iik7KXQuZWF0U3BhY2UoKSxpLnF1b3RlKys7ZWxzZXtpZigiWyI9PT10LnBlZWsoKSlyZXR1cm4gcih0LGksaCk7aWYodC5tYXRjaChJLCEwKSlyZXR1cm4gQTtpZihpLnByZXZMaW5lSGFzQ29udGVudCYmIW98fCF0Lm1hdGNoKFAsITApJiYhdC5tYXRjaChGLCEwKSl7aWYoZS5mZW5jZWRDb2RlQmxvY2tzJiZ0Lm1hdGNoKC9eYGBgKFtcdysjXSopLywhMCkpcmV0dXJuIGkubG9jYWxNb2RlPXgoUmVnRXhwLiQxKSxpLmxvY2FsTW9kZSYmKGkubG9jYWxTdGF0ZT1pLmxvY2FsTW9kZS5zdGFydFN0YXRlKCkpLG4odCxpLGEpLGt9ZWxzZSBpLmluZGVudGF0aW9uKz00LGkubGlzdD0hMCxpLmxpc3REZXB0aCsrLGUudGFza0xpc3RzJiZ0Lm1hdGNoKEIsITEpJiYoaS50YXNrTGlzdD0hMCl9cmV0dXJuIHIodCxpLGkuaW5saW5lKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9di50b2tlbih0LGUuaHRtbFN0YXRlKTtyZXR1cm4gZyYmInRhZyI9PT1yJiYib3BlblRhZyIhPT1lLmh0bWxTdGF0ZS50eXBlJiYhZS5odG1sU3RhdGUuY29udGV4dCYmKGUuZj1jLGUuYmxvY2s9byksZS5tZF9pbnNpZGUmJi0xIT10LmN1cnJlbnQoKS5pbmRleE9mKCI+IikmJihlLmY9YyxlLmJsb2NrPW8sZS5odG1sU3RhdGUuY29udGV4dD12b2lkIDApLHJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LnNvbCgpJiZ0Lm1hdGNoKC9eYGBgLywhMCk/KGUubG9jYWxNb2RlPWUubG9jYWxTdGF0ZT1udWxsLGUuZj1jLGUuYmxvY2s9byxrKTplLmxvY2FsTW9kZT9lLmxvY2FsTW9kZS50b2tlbih0LGUubG9jYWxTdGF0ZSk6KHQuc2tpcFRvRW5kKCksayl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1bXTtpZih0LnRhc2tPcGVuKXJldHVybiJtZXRhIjtpZih0LnRhc2tDbG9zZWQpcmV0dXJuInByb3BlcnR5IjtpZih0LnN0cm9uZyYmZS5wdXNoKHopLHQuZW0mJmUucHVzaChFKSx0LmxpbmtUZXh0JiZlLnB1c2goTyksdC5jb2RlJiZlLnB1c2goayksdC5oZWFkZXImJihlLnB1c2goQyksZS5wdXNoKEMrdC5oZWFkZXIpKSx0LnF1b3RlJiZlLnB1c2godC5xdW90ZSUyP3c6TCksdC5saXN0IT09ITEpe3ZhciByPSh0Lmxpc3REZXB0aC0xKSUzO3I/MT09PXI/ZS5wdXNoKE0pOmUucHVzaChUKTplLnB1c2goUyl9cmV0dXJuIHQudHJhaWxpbmdTcGFjZU5ld0xpbmU/ZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS1uZXctbGluZSIpOnQudHJhaWxpbmdTcGFjZSYmZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS0iKyh0LnRyYWlsaW5nU3BhY2UlMj8iYSI6ImIiKSksZS5sZW5ndGg/ZS5qb2luKCIgIik6bnVsbH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQubWF0Y2goXywhMCk/cyhlKTp2b2lkIDB9ZnVuY3Rpb24gYyh0LGkpe3ZhciBvPWkudGV4dCh0LGkpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgbylyZXR1cm4gbztpZihpLmxpc3QpcmV0dXJuIGkubGlzdD1udWxsLHMoaSk7aWYoaS50YXNrTGlzdCl7dmFyIGE9IngiIT09dC5tYXRjaChCLCEwKVsxXTtyZXR1cm4gYT9pLnRhc2tPcGVuPSEwOmkudGFza0Nsb3NlZD0hMCxpLnRhc2tMaXN0PSExLHMoaSl9aS50YXNrT3Blbj0hMSxpLnRhc2tDbG9zZWQ9ITE7dmFyIHU9dC5zb2woKSxjPXQubmV4dCgpO2lmKCJcXCI9PT1jKXJldHVybiB0Lm5leHQoKSxzKGkpO2lmKGkubGlua1RpdGxlKXtpLmxpbmtUaXRsZT0hMTt2YXIgaD1jOyIoIj09PWMmJihoPSIpIiksaD0oaCsiIikucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csIlxcJDEiKTt2YXIgZD0iXlxccyooPzpbXiIraCsiXFxcXF0rfFxcXFxcXFxcfFxcXFwuKSIraDtpZih0Lm1hdGNoKG5ldyBSZWdFeHAoZCksITApKXJldHVybiBXfWlmKCJgIj09PWMpe3ZhciBwPXMoaSksZz10LnBvczt0LmVhdFdoaWxlKCJgIik7dmFyIHY9MSt0LnBvcy1nO3JldHVybiBpLmNvZGU/dj09PWI/KGkuY29kZT0hMSxwKTpzKGkpOihiPXYsaS5jb2RlPSEwLHMoaSkpfWlmKGkuY29kZSlyZXR1cm4gcyhpKTtpZigiISI9PT1jJiZ0Lm1hdGNoKC9cW1teXF1dKlxdID8oPzpcKHxcWykvLCExKSlyZXR1cm4gdC5tYXRjaCgvXFtbXlxdXSpcXS8pLGkuaW5saW5lPWkuZj1mLE47aWYoIlsiPT09YyYmdC5tYXRjaCgvLipcXShcKHwgP1xbKS8sITEpKXJldHVybiBpLmxpbmtUZXh0PSEwLHMoaSk7aWYoIl0iPT09YyYmaS5saW5rVGV4dCl7dmFyIHk9cyhpKTtyZXR1cm4gaS5saW5rVGV4dD0hMSxpLmlubGluZT1pLmY9Zix5fWlmKCI8Ij09PWMmJnQubWF0Y2goL14oaHR0cHM/fGZ0cHM/KTpcL1wvKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEgsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXltePiBcXF0rQCg/OlteXFw+XXxcXC4pKz4vLCExKSlyZXR1cm4gcih0LGksbShELCI+IikpO2lmKCI8Ij09PWMmJnQubWF0Y2goL15cdy8sITEpKXtpZigtMSE9dC5zdHJpbmcuaW5kZXhPZigiPiIpKXt2YXIgeD10LnN0cmluZy5zdWJzdHJpbmcoMSx0LnN0cmluZy5pbmRleE9mKCI+IikpOy9tYXJrZG93blxzKj1ccyooJ3wiKXswLDF9MSgnfCIpezAsMX0vLnRlc3QoeCkmJihpLm1kX2luc2lkZT0hMCl9cmV0dXJuIHQuYmFja1VwKDEpLG4odCxpLGwpfWlmKCI8Ij09PWMmJnQubWF0Y2goL15cL1x3Kj8+LykpcmV0dXJuIGkubWRfaW5zaWRlPSExLCJ0YWciO3ZhciBDPSExO2lmKCFlLnVuZGVyc2NvcmVzQnJlYWtXb3JkcyYmIl8iPT09YyYmIl8iIT09dC5wZWVrKCkmJnQubWF0Y2goLyhcdykvLCExKSl7dmFyIGs9dC5wb3MtMjtpZihrPj0wKXt2YXIgdz10LnN0cmluZy5jaGFyQXQoayk7Il8iIT09dyYmdy5tYXRjaCgvKFx3KS8sITEpJiYoQz0hMCl9fXZhciBwPXMoaSk7aWYoIioiPT09Y3x8Il8iPT09YyYmIUMpaWYodSYmIiAiPT09dC5wZWVrKCkpO2Vsc2V7aWYoaS5zdHJvbmc9PT1jJiZ0LmVhdChjKSlyZXR1cm4gaS5zdHJvbmc9ITEscDtpZighaS5zdHJvbmcmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz1jLHMoaSk7aWYoaS5lbT09PWMpcmV0dXJuIGkuZW09ITEscDtpZighaS5lbSlyZXR1cm4gaS5lbT1jLHMoaSl9ZWxzZSBpZigiICI9PT1jJiYodC5lYXQoIioiKXx8dC5lYXQoIl8iKSkpe2lmKCIgIj09PXQucGVlaygpKXJldHVybiBzKGkpO3QuYmFja1VwKDEpfXJldHVybiIgIj09PWMmJih0Lm1hdGNoKC8gKyQvLCExKT9pLnRyYWlsaW5nU3BhY2UrKzppLnRyYWlsaW5nU3BhY2UmJihpLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSEwKSkscyhpKX1mdW5jdGlvbiBmKHQsZSl7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3ZhciBuPXQubmV4dCgpO3JldHVybiIoIj09PW58fCJbIj09PW4/cih0LGUsbShXLCIoIj09PW4/IikiOiJdIikpOiJlcnJvciJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0Lm1hdGNoKC9eW15cXV0qXF06LywhMCk/KGUuZj1kLE8pOnIodCxlLGMpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdC5lYXRTcGFjZSgpP251bGw6KHQubWF0Y2goL15bXlxzXSsvLCEwKSx2b2lkIDA9PT10LnBlZWsoKT9lLmxpbmtUaXRsZT0hMDp0Lm1hdGNoKC9eKD86XHMrKD86Iig/OlteIlxcXXxcXFxcfFxcLikrInwnKD86W14nXFxdfFxcXFx8XFwuKSsnfFwoKD86W14pXFxdfFxcXFx8XFwuKStcKSkpPy8sITApLGUuZj1lLmlubGluZT1jLFcpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIFZbdF18fCh0PSh0KyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpLFZbdF09bmV3IFJlZ0V4cCgiXig/OlteXFxcXF18XFxcXC4pKj8oIit0KyIpIikpLFZbdF19ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIHI9cnx8YyxmdW5jdGlvbihuLGkpe3JldHVybiBuLm1hdGNoKHAoZSkpLGkuaW5saW5lPWkuZj1yLHR9fXZhciBnPUNvZGVNaXJyb3IubW9kZXMuaGFzT3duUHJvcGVydHkoInhtbCIpLHY9Q29kZU1pcnJvci5nZXRNb2RlKHQsZz97bmFtZToieG1sIixodG1sTW9kZTohMH06InRleHQvcGxhaW4iKSx5PXtodG1sOiJodG1sbWl4ZWQiLGpzOiJqYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uIixjOiJ0ZXh0L3gtY3NyYyIsImMrKyI6InRleHQveC1jKytzcmMiLGphdmE6InRleHQveC1qYXZhIixjc2hhcnA6InRleHQveC1jc2hhcnAiLCJjIyI6InRleHQveC1jc2hhcnAiLHNjYWxhOiJ0ZXh0L3gtc2NhbGEifSx4PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9e30sbz1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5tb2RlcylDb2RlTWlycm9yLm1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZvLnB1c2gobCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyluW29bZV1dPW9bZV07dmFyIGE9W107Zm9yKHZhciBsIGluIENvZGVNaXJyb3IubWltZU1vZGVzKUNvZGVNaXJyb3IubWltZU1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZhLnB1c2goe21pbWU6bCxtb2RlOkNvZGVNaXJyb3IubWltZU1vZGVzW2xdfSk7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylyPWFbZV0ubWltZSxpW3JdPWFbZV0ubWltZTtmb3IodmFyIHMgaW4geSkoeVtzXWluIG58fHlbc11pbiBpKSYmKG5bc109eVtzXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdP0NvZGVNaXJyb3IuZ2V0TW9kZSh0LG5bZV0pOm51bGx9fSgpO3ZvaWQgMD09PWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYoZS51bmRlcnNjb3Jlc0JyZWFrV29yZHM9ITApLHZvaWQgMD09PWUuZmVuY2VkQ29kZUJsb2NrcyYmKGUuZmVuY2VkQ29kZUJsb2Nrcz0hMSksdm9pZCAwPT09ZS50YXNrTGlzdHMmJihlLnRhc2tMaXN0cz0hMSk7dmFyIGI9MCxDPSJoZWFkZXIiLGs9ImNvbW1lbnQiLHc9ImF0b20iLEw9Im51bWJlciIsUz0idmFyaWFibGUtMiIsTT0idmFyaWFibGUtMyIsVD0ia2V5d29yZCIsQT0iaHIiLE49InRhZyIsSD0ibGluayIsRD0ibGluayIsTz0ibGluayIsVz0ic3RyaW5nIixFPSJlbSIsej0ic3Ryb25nIixJPS9eKFsqXC09X10pKD86XHMqXDEpezIsfVxzKiQvLFA9L15bKlwtK11ccysvLEY9L15bMC05XStcLlxzKy8sQj0vXlxbKHh8IClcXSg/PVxzKS8sUj0vXiMrLyxHPS9eKD86XD17MSx9fC17MSx9KSQvLF89L15bXiFcW1xdKl9cXDw+YCAiJyhdKy8sVj1bXTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybntmOm8scHJldkxpbmVIYXNDb250ZW50OiExLHRoaXNMaW5lSGFzQ29udGVudDohMSxibG9jazpvLGh0bWxTdGF0ZTpDb2RlTWlycm9yLnN0YXJ0U3RhdGUodiksaW5kZW50YXRpb246MCxpbmxpbmU6Yyx0ZXh0OnUsbGlua1RleHQ6ITEsbGlua1RpdGxlOiExLGVtOiExLHN0cm9uZzohMSxoZWFkZXI6MCx0YXNrTGlzdDohMSxsaXN0OiExLGxpc3REZXB0aDowLHF1b3RlOjAsdHJhaWxpbmdTcGFjZTowLHRyYWlsaW5nU3BhY2VOZXdMaW5lOiExfX0sY29weVN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybntmOnQuZixwcmV2TGluZUhhc0NvbnRlbnQ6dC5wcmV2TGluZUhhc0NvbnRlbnQsdGhpc0xpbmVIYXNDb250ZW50OnQudGhpc0xpbmVIYXNDb250ZW50LGJsb2NrOnQuYmxvY2ssaHRtbFN0YXRlOkNvZGVNaXJyb3IuY29weVN0YXRlKHYsdC5odG1sU3RhdGUpLGluZGVudGF0aW9uOnQuaW5kZW50YXRpb24sbG9jYWxNb2RlOnQubG9jYWxNb2RlLGxvY2FsU3RhdGU6dC5sb2NhbE1vZGU/Q29kZU1pcnJvci5jb3B5U3RhdGUodC5sb2NhbE1vZGUsdC5sb2NhbFN0YXRlKTpudWxsLGlubGluZTp0LmlubGluZSx0ZXh0OnQudGV4dCxsaW5rVGl0bGU6dC5saW5rVGl0bGUsZW06dC5lbSxzdHJvbmc6dC5zdHJvbmcsaGVhZGVyOnQuaGVhZGVyLHRhc2tMaXN0OnQudGFza0xpc3QsbGlzdDp0Lmxpc3QsbGlzdERlcHRoOnQubGlzdERlcHRoLHF1b3RlOnQucXVvdGUsdHJhaWxpbmdTcGFjZTp0LnRyYWlsaW5nU3BhY2UsdHJhaWxpbmdTcGFjZU5ld0xpbmU6dC50cmFpbGluZ1NwYWNlTmV3TGluZSxtZF9pbnNpZGU6dC5tZF9pbnNpZGV9fSx0b2tlbjpmdW5jdGlvbih0LGUpe2lmKHQuc29sKCkpe2lmKHQubWF0Y2goL15ccyokLywhMCkpcmV0dXJuIGUucHJldkxpbmVIYXNDb250ZW50PSExLGkoZSk7ZS5wcmV2TGluZUhhc0NvbnRlbnQ9ZS50aGlzTGluZUhhc0NvbnRlbnQsZS50aGlzTGluZUhhc0NvbnRlbnQ9ITAsZS5oZWFkZXI9MCxlLnRhc2tMaXN0PSExLGUuY29kZT0hMSxlLnRyYWlsaW5nU3BhY2U9MCxlLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSExLGUuZj1lLmJsb2NrO3ZhciByPXQubWF0Y2goL15ccyovLCEwKVswXS5yZXBsYWNlKC9cdC9nLCIgICAgIikubGVuZ3RoLG49NCpNYXRoLmZsb29yKChyLWUuaW5kZW50YXRpb24pLzQpO24+NCYmKG49NCk7dmFyIG89ZS5pbmRlbnRhdGlvbituO2lmKGUuaW5kZW50YXRpb25EaWZmPW8tZS5pbmRlbnRhdGlvbixlLmluZGVudGF0aW9uPW8scj4wKXJldHVybiBudWxsfXJldHVybiBlLmYodCxlKX0sYmxhbmtMaW5lOmksZ2V0VHlwZTpzfX0sInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LW1hcmtkb3duIiwibWFya2Rvd24iKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4gZS50b2tlbml6ZT1yLHIodCxlKX12YXIgaT10Lm5leHQoKTtpZigiPCI9PWkpe2lmKHQuZWF0KCIhIikpcmV0dXJuIHQuZWF0KCJbIik/dC5tYXRjaCgiQ0RBVEFbIik/cihvKCJhdG9tIiwiXV0+IikpOm51bGw6dC5tYXRjaCgiLS0iKT9yKG8oImNvbW1lbnQiLCItLT4iKSk6dC5tYXRjaCgiRE9DVFlQRSIsITAsITApPyh0LmVhdFdoaWxlKC9bXHdcLl9cLV0vKSxyKGwoMSkpKTpudWxsO2lmKHQuZWF0KCI/IikpcmV0dXJuIHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLGUudG9rZW5pemU9bygibWV0YSIsIj8+IiksIm1ldGEiO3ZhciBhPXQuZWF0KCIvIik7eD0iIjtmb3IodmFyIHM7cz10LmVhdCgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7KXgrPXM7cmV0dXJuIHg/KGI9YT8iY2xvc2VUYWciOiJvcGVuVGFnIixlLnRva2VuaXplPW4sInRhZyIpOiJ0YWcgZXJyb3IifWlmKCImIj09aSl7dmFyIHU7cmV0dXJuIHU9dC5lYXQoIiMiKT90LmVhdCgieCIpP3QuZWF0V2hpbGUoL1thLWZBLUZcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXGRdLykmJnQuZWF0KCI7Iik6dC5lYXRXaGlsZSgvW1x3XC5cLTpdLykmJnQuZWF0KCI7IiksdT8iYXRvbSI6ImVycm9yIn1yZXR1cm4gdC5lYXRXaGlsZSgvW14mPF0vKSxudWxsfWZ1bmN0aW9uIG4odCxlKXt2YXIgbj10Lm5leHQoKTtpZigiPiI9PW58fCIvIj09biYmdC5lYXQoIj4iKSlyZXR1cm4gZS50b2tlbml6ZT1yLGI9Ij4iPT1uPyJlbmRUYWciOiJzZWxmY2xvc2VUYWciLCJ0YWciO2lmKCI9Ij09bilyZXR1cm4gYj0iZXF1YWxzIixudWxsO2lmKCI8Ij09bil7ZS50b2tlbml6ZT1yO3ZhciBvPWUudG9rZW5pemUodCxlKTtyZXR1cm4gbz9vKyIgZXJyb3IiOiJlcnJvciJ9cmV0dXJuL1tcJ1wiXS8udGVzdChuKT8oZS50b2tlbml6ZT1pKG4pLGUuc3RyaW5nU3RhcnRDb2w9dC5jb2x1bW4oKSxlLnRva2VuaXplKHQsZSkpOih0LmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKSwid29yZCIpfWZ1bmN0aW9uIGkodCl7dmFyIGU9ZnVuY3Rpb24oZSxyKXtmb3IoOyFlLmVvbCgpOylpZihlLm5leHQoKT09dCl7ci50b2tlbml6ZT1uO2JyZWFrfXJldHVybiJzdHJpbmcifTtyZXR1cm4gZS5pc0luQXR0cmlidXRlPSEwLGV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcig7IW4uZW9sKCk7KXtpZihuLm1hdGNoKGUpKXtpLnRva2VuaXplPXI7YnJlYWt9bi5uZXh0KCl9cmV0dXJuIHR9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpO251bGwhPShpPWUubmV4dCgpKTspe2lmKCI8Ij09aSlyZXR1cm4gbi50b2tlbml6ZT1sKHQrMSksbi50b2tlbml6ZShlLG4pO2lmKCI+Ij09aSl7aWYoMT09dCl7bi50b2tlbml6ZT1yO2JyZWFrfXJldHVybiBuLnRva2VuaXplPWwodC0xKSxuLnRva2VuaXplKGUsbil9fXJldHVybiJtZXRhIn19ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTE7dD49MDt0LS0pQy5jYy5wdXNoKGFyZ3VtZW50c1t0XSl9ZnVuY3Rpb24gcygpe3JldHVybiBhLmFwcGx5KG51bGwsYXJndW1lbnRzKSwhMH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9VC5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0KXx8Qy5jb250ZXh0JiZDLmNvbnRleHQubm9JbmRlbnQ7Qy5jb250ZXh0PXtwcmV2OkMuY29udGV4dCx0YWdOYW1lOnQsaW5kZW50OkMuaW5kZW50ZWQsc3RhcnRPZkxpbmU6ZSxub0luZGVudDpyfX1mdW5jdGlvbiBjKCl7Qy5jb250ZXh0JiYoQy5jb250ZXh0PUMuY29udGV4dC5wcmV2KX1mdW5jdGlvbiBmKHQpe2lmKCJvcGVuVGFnIj09dClyZXR1cm4gQy50YWdOYW1lPXgsQy50YWdTdGFydD1rLmNvbHVtbigpLHMobSxoKEMuc3RhcnRPZkxpbmUpKTtpZigiY2xvc2VUYWciPT10KXt2YXIgZT0hMTtyZXR1cm4gQy5jb250ZXh0P0MuY29udGV4dC50YWdOYW1lIT14JiYoVC5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KEMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiZjKCksZT0hQy5jb250ZXh0fHxDLmNvbnRleHQudGFnTmFtZSE9eCk6ZT0hMCxlJiYodz0iZXJyb3IiKSxzKGQoZSkpfXJldHVybiBzKCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9Qy50YWdOYW1lO3JldHVybiBDLnRhZ05hbWU9Qy50YWdTdGFydD1udWxsLCJzZWxmY2xvc2VUYWciPT1lfHwiZW5kVGFnIj09ZSYmVC5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkoci50b0xvd2VyQ2FzZSgpKT8ocChyLnRvTG93ZXJDYXNlKCkpLHMoKSk6ImVuZFRhZyI9PWU/KHAoci50b0xvd2VyQ2FzZSgpKSx1KHIsdCkscygpKTpzKCl9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiYodz0iZXJyb3IiKSwiZW5kVGFnIj09ZT8oYygpLHMoKSk6KHc9ImVycm9yIixzKGFyZ3VtZW50cy5jYWxsZWUpKX19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU7Oyl7aWYoIUMuY29udGV4dClyZXR1cm47aWYoZT1DLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCFULmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShlKXx8IVQuY29udGV4dEdyYWJiZXJzW2VdLmhhc093blByb3BlcnR5KHQpKXJldHVybjtjKCl9fWZ1bmN0aW9uIG0odCl7cmV0dXJuIndvcmQiPT10Pyh3PSJhdHRyaWJ1dGUiLHMoZyxtKSk6ImVuZFRhZyI9PXR8fCJzZWxmY2xvc2VUYWciPT10P2EoKToodz0iZXJyb3IiLHMobSkpfWZ1bmN0aW9uIGcodCl7aWYoImVxdWFscyI9PXQpcmV0dXJuIHModixtKTtpZihULmFsbG93TWlzc2luZyl7aWYoIndvcmQiPT10KXJldHVybiB3PSJhdHRyaWJ1dGUiLHMoZyxtKX1lbHNlIHc9ImVycm9yIjtyZXR1cm4iZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOnMoKX1mdW5jdGlvbiB2KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6IndvcmQiPT10JiZULmFsbG93VW5xdW90ZWQ/KHc9InN0cmluZyIscygpKToodz0iZXJyb3IiLCJlbmRUYWciPT10fHwic2VsZkNsb3NlVGFnIj09dD9hKCk6cygpKX1mdW5jdGlvbiB5KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6YSgpfXZhciB4LGIsQyxrLHcsTD10LmluZGVudFVuaXQsUz1lLm11bHRpbGluZVRhZ0luZGVudEZhY3Rvcnx8MSxNPWUubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZ3x8ITAsVD1lLmh0bWxNb2RlP3thdXRvU2VsZkNsb3NlcnM6e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxmcmFtZTohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxpbXBsaWNpdGx5Q2xvc2VkOntkZDohMCxsaTohMCxvcHRncm91cDohMCxvcHRpb246ITAscDohMCxycDohMCxydDohMCx0Ym9keTohMCx0ZDohMCx0Zm9vdDohMCx0aDohMCx0cjohMH0sY29udGV4dEdyYWJiZXJzOntkZDp7ZGQ6ITAsZHQ6ITB9LGR0OntkZDohMCxkdDohMH0sbGk6e2xpOiEwfSxvcHRpb246e29wdGlvbjohMCxvcHRncm91cDohMH0sb3B0Z3JvdXA6e29wdGdyb3VwOiEwfSxwOnthZGRyZXNzOiEwLGFydGljbGU6ITAsYXNpZGU6ITAsYmxvY2txdW90ZTohMCxkaXI6ITAsZGl2OiEwLGRsOiEwLGZpZWxkc2V0OiEwLGZvb3RlcjohMCxmb3JtOiEwLGgxOiEwLGgyOiEwLGgzOiEwLGg0OiEwLGg1OiEwLGg2OiEwLGhlYWRlcjohMCxoZ3JvdXA6ITAsaHI6ITAsbWVudTohMCxuYXY6ITAsb2w6ITAscDohMCxwcmU6ITAsc2VjdGlvbjohMCx0YWJsZTohMCx1bDohMH0scnA6e3JwOiEwLHJ0OiEwfSxydDp7cnA6ITAscnQ6ITB9LHRib2R5Ont0Ym9keTohMCx0Zm9vdDohMH0sdGQ6e3RkOiEwLHRoOiEwfSx0Zm9vdDp7dGJvZHk6ITB9LHRoOnt0ZDohMCx0aDohMH0sdGhlYWQ6e3Rib2R5OiEwLHRmb290OiEwfSx0cjp7dHI6ITB9fSxkb05vdEluZGVudDp7cHJlOiEwfSxhbGxvd1VucXVvdGVkOiEwLGFsbG93TWlzc2luZzohMH06e2F1dG9TZWxmQ2xvc2Vyczp7fSxpbXBsaWNpdGx5Q2xvc2VkOnt9LGNvbnRleHRHcmFiYmVyczp7fSxkb05vdEluZGVudDp7fSxhbGxvd1VucXVvdGVkOiExLGFsbG93TWlzc2luZzohMX0sQT1lLmFsaWduQ0RBVEE7cmV0dXJue3N0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57dG9rZW5pemU6cixjYzpbXSxpbmRlbnRlZDowLHN0YXJ0T2ZMaW5lOiEwLHRhZ05hbWU6bnVsbCx0YWdTdGFydDpudWxsLGNvbnRleHQ6bnVsbH19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYoIWUudGFnTmFtZSYmdC5zb2woKSYmKGUuc3RhcnRPZkxpbmU9ITAsZS5pbmRlbnRlZD10LmluZGVudGF0aW9uKCkpLHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDt3PWI9eD1udWxsO3ZhciByPWUudG9rZW5pemUodCxlKTtpZihlLnR5cGU9Yiwocnx8YikmJiJjb21tZW50IiE9cilmb3IoQz1lLGs9dDs7KXt2YXIgbj1lLmNjLnBvcCgpfHxmO2lmKG4oYnx8cikpYnJlYWt9cmV0dXJuIGUuc3RhcnRPZkxpbmU9ITEsdyYmKHI9ImVycm9yIj09dz9yKyIgZXJyb3IiOncpLHJ9LGluZGVudDpmdW5jdGlvbih0LGUsaSl7dmFyIG89dC5jb250ZXh0O2lmKHQudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSlyZXR1cm4gdC5zdHJpbmdTdGFydENvbCsxO2lmKHQudG9rZW5pemUhPW4mJnQudG9rZW5pemUhPXJ8fG8mJm8ubm9JbmRlbnQpcmV0dXJuIGk/aS5tYXRjaCgvXihccyopLylbMF0ubGVuZ3RoOjA7aWYodC50YWdOYW1lKXJldHVybiBNP3QudGFnU3RhcnQrdC50YWdOYW1lLmxlbmd0aCsyOnQudGFnU3RhcnQrTCpTO2lmKEEmJi88IVxbQ0RBVEFcWy8udGVzdChlKSlyZXR1cm4gMDtmb3IobyYmL148XC8vLnRlc3QoZSkmJihvPW8ucHJldik7byYmIW8uc3RhcnRPZkxpbmU7KW89by5wcmV2O3JldHVybiBvP28uaW5kZW50K0w6MH0sZWxlY3RyaWNDaGFyczoiLyIsYmxvY2tDb21tZW50U3RhcnQ6IjwhLS0iLGJsb2NrQ29tbWVudEVuZDoiLS0+Iixjb25maWd1cmF0aW9uOmUuaHRtbE1vZGU/Imh0bWwiOiJ4bWwiLGhlbHBlclR5cGU6ZS5odG1sTW9kZT8iaHRtbCI6InhtbCJ9fSksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIsInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwieG1sIiksQ29kZU1pcnJvci5taW1lTW9kZXMuaGFzT3duUHJvcGVydHkoInRleHQvaHRtbCIpfHxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIse25hbWU6InhtbCIsaHRtbE1vZGU6ITB9KTtQSwcIk9YPXYgyAACIMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAc3RhdGljXGxpYlxjb2RlbWlycm9yLm1pbi5qc3dpbmRvdy5Db2RlTWlycm9yPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQocixuKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQocixuKTt0aGlzLm9wdGlvbnM9bj1ufHx7fTtmb3IodmFyIGkgaW4gYW8pIW4uaGFzT3duUHJvcGVydHkoaSkmJmFvLmhhc093blByb3BlcnR5KGkpJiYobltpXT1hb1tpXSk7aChuKTt2YXIgbz0ic3RyaW5nIj09dHlwZW9mIG4udmFsdWU/MDpuLnZhbHVlLmZpcnN0LGw9dGhpcy5kaXNwbGF5PWUocixvKTtsLndyYXBwZXIuQ29kZU1pcnJvcj10aGlzLHUodGhpcyksbi5hdXRvZm9jdXMmJiFWaSYmcGUodGhpcyksdGhpcy5zdGF0ZT17a2V5TWFwczpbXSxvdmVybGF5czpbXSxtb2RlR2VuOjAsb3ZlcndyaXRlOiExLGZvY3VzZWQ6ITEsc3VwcHJlc3NFZGl0czohMSxwYXN0ZUluY29taW5nOiExLGRyYWdnaW5nVGV4dDohMSxoaWdobGlnaHQ6bmV3ICRufSxzKHRoaXMpLG4ubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIpO3ZhciBhPW4udmFsdWU7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcgd28obi52YWx1ZSxuLm1vZGUpKSxsZSh0aGlzLHBuKSh0aGlzLGEpLEFpJiZzZXRUaW1lb3V0KGlpKGRlLHRoaXMsITApLDIwKSxtZSh0aGlzKTt2YXIgYzt0cnl7Yz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0fWNhdGNoKGYpe31jfHxuLmF1dG9mb2N1cyYmIVZpP3NldFRpbWVvdXQoaWkoRWUsdGhpcyksMjApOnplKHRoaXMpLGxlKHRoaXMsZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gc28pc28ucHJvcGVydHlJc0VudW1lcmFibGUodCkmJnNvW3RdKHRoaXMsblt0XSx1byk7Zm9yKHZhciBlPTA7ZTxwby5sZW5ndGg7KytlKXBvW2VdKHRoaXMpfSkoKX1mdW5jdGlvbiBlKHQsZSl7dmFyIHI9e30sbj1yLmlucHV0PXNpKCJ0ZXh0YXJlYSIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lOyBmb250LXNpemU6IDRweDsiKTtyZXR1cm4gV2k/bi5zdHlsZS53aWR0aD0iMTAwMHB4IjpuLnNldEF0dHJpYnV0ZSgid3JhcCIsIm9mZiIpLEdpJiYobi5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwiZmFsc2UiKSxyLmlucHV0RGl2PXNpKCJkaXYiLFtuXSxudWxsLCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIpLHIuc2Nyb2xsYmFySD1zaSgiZGl2Iixbc2koImRpdiIsbnVsbCxudWxsLCJoZWlnaHQ6IDFweCIpXSwiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIiksci5zY3JvbGxiYXJWPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiAxcHgiKV0sIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpLHIuc2Nyb2xsYmFyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpLHIuZ3V0dGVyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpLHIubGluZURpdj1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWNvZGUiKSxyLnNlbGVjdGlvbkRpdj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSIpLHIuY3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIiksci5vdGhlckN1cnNvcj1zaSgiZGl2IiwiwqAiLCJDb2RlTWlycm9yLWN1cnNvciBDb2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpLHIubWVhc3VyZT1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLW1lYXN1cmUiKSxyLmxpbmVTcGFjZT1zaSgiZGl2Iixbci5tZWFzdXJlLHIuc2VsZWN0aW9uRGl2LHIubGluZURpdixyLmN1cnNvcixyLm90aGVyQ3Vyc29yXSxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKSxyLm1vdmVyPXNpKCJkaXYiLFtzaSgiZGl2Iixbci5saW5lU3BhY2VdLCJDb2RlTWlycm9yLWxpbmVzIildLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpLHIuc2l6ZXI9c2koImRpdiIsW3IubW92ZXJdLCJDb2RlTWlycm9yLXNpemVyIiksci5oZWlnaHRGb3JjZXI9c2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIitUbysicHg7IHdpZHRoOiAxcHg7Iiksci5ndXR0ZXJzPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVycyIpLHIubGluZUd1dHRlcj1udWxsLHIuc2Nyb2xsZXI9c2koImRpdiIsW3Iuc2l6ZXIsci5oZWlnaHRGb3JjZXIsci5ndXR0ZXJzXSwiQ29kZU1pcnJvci1zY3JvbGwiKSxyLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCItMSIpLHIud3JhcHBlcj1zaSgiZGl2Iixbci5pbnB1dERpdixyLnNjcm9sbGJhckgsci5zY3JvbGxiYXJWLHIuc2Nyb2xsYmFyRmlsbGVyLHIuZ3V0dGVyRmlsbGVyLHIuc2Nyb2xsZXJdLCJDb2RlTWlycm9yIiksSGkmJihyLmd1dHRlcnMuc3R5bGUuekluZGV4PS0xLHIuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0PTApLHQuYXBwZW5kQ2hpbGQ/dC5hcHBlbmRDaGlsZChyLndyYXBwZXIpOnQoci53cmFwcGVyKSxHaSYmKG4uc3R5bGUud2lkdGg9IjBweCIpLFdpfHwoci5zY3JvbGxlci5kcmFnZ2FibGU9ITApLEZpPyhyLmlucHV0RGl2LnN0eWxlLmhlaWdodD0iMXB4IixyLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIpOkhpJiYoci5zY3JvbGxiYXJILnN0eWxlLm1pbldpZHRoPXIuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aD0iMThweCIpLHIudmlld09mZnNldD1yLmxhc3RTaXplQz0wLHIuc2hvd2luZ0Zyb209ci5zaG93aW5nVG89ZSxyLmxpbmVOdW1XaWR0aD1yLmxpbmVOdW1Jbm5lcldpZHRoPXIubGluZU51bUNoYXJzPW51bGwsci5wcmV2SW5wdXQ9IiIsci5hbGlnbldpZGdldHM9ITEsci5wb2xsaW5nRmFzdD0hMSxyLnBvbGw9bmV3ICRuLHIuY2FjaGVkQ2hhcldpZHRoPXIuY2FjaGVkVGV4dEhlaWdodD1udWxsLHIubWVhc3VyZUxpbmVDYWNoZT1bXSxyLm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCxyLmluYWNjdXJhdGVTZWxlY3Rpb249ITEsci5tYXhMaW5lPW51bGwsci5tYXhMaW5lTGVuZ3RoPTAsci5tYXhMaW5lQ2hhbmdlZD0hMSxyLndoZWVsRFg9ci53aGVlbERZPXIud2hlZWxTdGFydFg9ci53aGVlbFN0YXJ0WT1udWxsLHJ9ZnVuY3Rpb24gcihlKXtlLmRvYy5tb2RlPXQuZ2V0TW9kZShlLm9wdGlvbnMsZS5kb2MubW9kZU9wdGlvbiksZS5kb2MuaXRlcihmdW5jdGlvbih0KXt0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKX0pLGUuZG9jLmZyb250aWVyPWUuZG9jLmZpcnN0LFcoZSwxMDApLGUuc3RhdGUubW9kZUdlbisrLGUuY3VyT3AmJnVlKGUpfWZ1bmN0aW9uIG4odCl7dC5vcHRpb25zLmxpbmVXcmFwcGluZz8odC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIsdC5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoPSIiKToodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci13cmFwIiwiIiksZih0KSksbyh0KSx1ZSh0KSxfKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkKHQpfSwxMDApfWZ1bmN0aW9uIGkodCl7dmFyIGU9cmUodC5kaXNwbGF5KSxyPXQub3B0aW9ucy5saW5lV3JhcHBpbmcsbj1yJiZNYXRoLm1heCg1LHQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC9uZSh0LmRpc3BsYXkpLTMpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gVnIodC5kb2MsaSk/MDpyPyhNYXRoLmNlaWwoaS50ZXh0Lmxlbmd0aC9uKXx8MSkqZTplfX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQuZG9jLHI9aSh0KTtlLml0ZXIoZnVuY3Rpb24odCl7dmFyIGU9cih0KTtlIT10LmhlaWdodCYmeW4odCxlKX0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dm9bdC5vcHRpb25zLmtleU1hcF0scj1lLnN0eWxlO3QuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20ta2V5bWFwLVxTKy9nLCIiKSsocj8iIGNtLWtleW1hcC0iK3I6IiIpLHQuc3RhdGUuZGlzYWJsZUlucHV0PWUuZGlzYWJsZUlucHV0fWZ1bmN0aW9uIHModCl7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCIiKSt0Lm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XHMpXHMqL2csIiBjbS1zLSIpLF8odCl9ZnVuY3Rpb24gYSh0KXt1KHQpLHVlKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtnKHQpfSwyMCl9ZnVuY3Rpb24gdSh0KXt2YXIgZT10LmRpc3BsYXkuZ3V0dGVycyxyPXQub3B0aW9ucy5ndXR0ZXJzO2FpKGUpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dLG89ZS5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlciAiK2kpKTsiQ29kZU1pcnJvci1saW5lbnVtYmVycyI9PWkmJih0LmRpc3BsYXkubGluZUd1dHRlcj1vLG8uc3R5bGUud2lkdGg9KHQuZGlzcGxheS5saW5lTnVtV2lkdGh8fDEpKyJweCIpfWUuc3R5bGUuZGlzcGxheT1uPyIiOiJub25lIn1mdW5jdGlvbiBjKHQsZSl7aWYoMD09ZS5oZWlnaHQpcmV0dXJuIDA7Zm9yKHZhciByLG49ZS50ZXh0Lmxlbmd0aCxpPWU7cj1ScihpKTspe3ZhciBvPXIuZmluZCgpO2k9Z24odCxvLmZyb20ubGluZSksbis9by5mcm9tLmNoLW8udG8uY2h9Zm9yKGk9ZTtyPUJyKGkpOyl7dmFyIG89ci5maW5kKCk7bi09aS50ZXh0Lmxlbmd0aC1vLmZyb20uY2gsaT1nbih0LG8udG8ubGluZSksbis9aS50ZXh0Lmxlbmd0aC1vLnRvLmNofXJldHVybiBufWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2M7ZS5tYXhMaW5lPWduKHIsci5maXJzdCksZS5tYXhMaW5lTGVuZ3RoPWMocixlLm1heExpbmUpLGUubWF4TGluZUNoYW5nZWQ9ITAsci5pdGVyKGZ1bmN0aW9uKHQpe3ZhciBuPWMocix0KTtuPmUubWF4TGluZUxlbmd0aCYmKGUubWF4TGluZUxlbmd0aD1uLGUubWF4TGluZT10KX0pfWZ1bmN0aW9uIGgodCl7dmFyIGU9dGkodC5ndXR0ZXJzLCJDb2RlTWlycm9yLWxpbmVudW1iZXJzIik7LTE9PWUmJnQubGluZU51bWJlcnM/dC5ndXR0ZXJzPXQuZ3V0dGVycy5jb25jYXQoWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0pOmU+LTEmJiF0LmxpbmVOdW1iZXJzJiYodC5ndXR0ZXJzPXQuZ3V0dGVycy5zbGljZSgwKSx0Lmd1dHRlcnMuc3BsaWNlKGUsMSkpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2MuaGVpZ2h0LG49citGKGUpO2Uuc2l6ZXIuc3R5bGUubWluSGVpZ2h0PWUuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcD1uKyJweCIsZS5ndXR0ZXJzLnN0eWxlLmhlaWdodD1NYXRoLm1heChuLGUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LVRvKSsicHgiO3ZhciBpPU1hdGgubWF4KG4sZS5zY3JvbGxlci5zY3JvbGxIZWlnaHQpLG89ZS5zY3JvbGxlci5zY3JvbGxXaWR0aD5lLnNjcm9sbGVyLmNsaWVudFdpZHRoKzEsbD1pPmUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KzE7bD8oZS5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhclYuc3R5bGUuYm90dG9tPW8/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9aS1lLnNjcm9sbGVyLmNsaWVudEhlaWdodCtlLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KyJweCIpOihlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9IjAiKSxvPyhlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFySC5zdHlsZS5yaWdodD1sP2RpKGUubWVhc3VyZSkrInB4IjoiMCIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9ZS5zY3JvbGxlci5zY3JvbGxXaWR0aC1lLnNjcm9sbGVyLmNsaWVudFdpZHRoK2Uuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCsicHgiKTooZS5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXk9IiIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjAiKSxvJiZsPyhlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoPWRpKGUubWVhc3VyZSkrInB4Iik6ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixvJiZ0Lm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXImJnQub3B0aW9ucy5maXhlZEd1dHRlcj8oZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodD1kaShlLm1lYXN1cmUpKyJweCIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGg9ZS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCIpOmUuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXk9IiIsUGkmJjA9PT1kaShlLm1lYXN1cmUpJiYoZS5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPWUuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQ9Umk/IjE4cHgiOiIxMnB4IixlLnNjcm9sbGJhclYuc3R5bGUucG9pbnRlckV2ZW50cz1lLnNjcm9sbGJhckguc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXQuc2Nyb2xsZXIuc2Nyb2xsVG9wLGk9dC53cmFwcGVyLmNsaWVudEhlaWdodDsibnVtYmVyIj09dHlwZW9mIHI/bj1yOnImJihuPXIudG9wLGk9ci5ib3R0b20tci50b3ApLG49TWF0aC5mbG9vcihuLUkodCkpO3ZhciBvPU1hdGguY2VpbChuK2kpO3JldHVybntmcm9tOnhuKGUsbiksdG86eG4oZSxvKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10LmRpc3BsYXk7aWYoZS5hbGlnbldpZGdldHN8fGUuZ3V0dGVycy5maXJzdENoaWxkJiZ0Lm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgcj15KGUpLWUuc2Nyb2xsZXIuc2Nyb2xsTGVmdCt0LmRvYy5zY3JvbGxMZWZ0LG49ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGk9cisicHgiLG89ZS5saW5lRGl2LmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpaWYoby5hbGlnbmFibGUpZm9yKHZhciBsPTAscz1vLmFsaWduYWJsZTtsPHMubGVuZ3RoOysrbClzW2xdLnN0eWxlLmxlZnQ9aTt0Lm9wdGlvbnMuZml4ZWRHdXR0ZXImJihlLmd1dHRlcnMuc3R5bGUubGVmdD1yK24rInB4Iil9fWZ1bmN0aW9uIG0odCl7aWYoIXQub3B0aW9ucy5saW5lTnVtYmVycylyZXR1cm4hMTt2YXIgZT10LmRvYyxyPXYodC5vcHRpb25zLGUuZmlyc3QrZS5zaXplLTEpLG49dC5kaXNwbGF5O2lmKHIubGVuZ3RoIT1uLmxpbmVOdW1DaGFycyl7dmFyIGk9bi5tZWFzdXJlLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzaSgiZGl2IixyKV0sIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSksbz1pLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsbD1pLm9mZnNldFdpZHRoLW87cmV0dXJuIG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD0iIixuLmxpbmVOdW1Jbm5lcldpZHRoPU1hdGgubWF4KG8sbi5saW5lR3V0dGVyLm9mZnNldFdpZHRoLWwpLG4ubGluZU51bVdpZHRoPW4ubGluZU51bUlubmVyV2lkdGgrbCxuLmxpbmVOdW1DaGFycz1uLmxpbmVOdW1Jbm5lcldpZHRoP3IubGVuZ3RoOi0xLG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD1uLmxpbmVOdW1XaWR0aCsicHgiLCEwfXJldHVybiExfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gU3RyaW5nKHQubGluZU51bWJlckZvcm1hdHRlcihlK3QuZmlyc3RMaW5lTnVtYmVyKSl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZmkodC5zY3JvbGxlcikubGVmdC1maSh0LnNpemVyKS5sZWZ0fWZ1bmN0aW9uIGIodCxlLHIsbil7Zm9yKHZhciBpLG89dC5kaXNwbGF5LnNob3dpbmdGcm9tLGw9dC5kaXNwbGF5LnNob3dpbmdUbyxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLGE9ITA7O2E9ITEpe3ZhciB1PXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtpZigheCh0LGUscyxuKSlicmVhaztpZihpPSEwLGU9W10sQSh0KSxkKHQpLGEmJnQub3B0aW9ucy5saW5lV3JhcHBpbmcmJnUhPXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCluPSEwO2Vsc2UgaWYobj0hMSxyJiYocj1NYXRoLm1pbih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIm51bWJlciI9PXR5cGVvZiByP3I6ci50b3ApKSxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLHMuZnJvbT49dC5kaXNwbGF5LnNob3dpbmdGcm9tJiZzLnRvPD10LmRpc3BsYXkuc2hvd2luZ1RvKWJyZWFrfXJldHVybiBpJiYoVW4odCwidXBkYXRlIix0KSwodC5kaXNwbGF5LnNob3dpbmdGcm9tIT1vfHx0LmRpc3BsYXkuc2hvd2luZ1RvIT1sKSYmVW4odCwidmlld3BvcnRDaGFuZ2UiLHQsdC5kaXNwbGF5LnNob3dpbmdGcm9tLHQuZGlzcGxheS5zaG93aW5nVG8pKSxpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9dC5kaXNwbGF5LG89dC5kb2M7aWYoIWkud3JhcHBlci5jbGllbnRXaWR0aClyZXR1cm4gaS5zaG93aW5nRnJvbT1pLnNob3dpbmdUbz1vLmZpcnN0LGkudmlld09mZnNldD0wLHZvaWQgMDtpZighKCFuJiYwPT1lLmxlbmd0aCYmci5mcm9tPmkuc2hvd2luZ0Zyb20mJnIudG88aS5zaG93aW5nVG8pKXttKHQpJiYoZT1be2Zyb206by5maXJzdCx0bzpvLmZpcnN0K28uc2l6ZX1dKTt2YXIgbD1pLnNpemVyLnN0eWxlLm1hcmdpbkxlZnQ9aS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCI7aS5zY3JvbGxiYXJILnN0eWxlLmxlZnQ9dC5vcHRpb25zLmZpeGVkR3V0dGVyP2w6IjAiO3ZhciBzPTEvMDtpZih0Lm9wdGlvbnMubGluZU51bWJlcnMpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpZVthXS5kaWZmJiZlW2FdLmZyb208cyYmKHM9ZVthXS5mcm9tKTt2YXIgdT1vLmZpcnN0K28uc2l6ZSxjPU1hdGgubWF4KHIuZnJvbS10Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4sby5maXJzdCksZj1NYXRoLm1pbih1LHIudG8rdC5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtpZihpLnNob3dpbmdGcm9tPGMmJmMtaS5zaG93aW5nRnJvbTwyMCYmKGM9TWF0aC5tYXgoby5maXJzdCxpLnNob3dpbmdGcm9tKSksaS5zaG93aW5nVG8+ZiYmaS5zaG93aW5nVG8tZjwyMCYmKGY9TWF0aC5taW4odSxpLnNob3dpbmdUbykpLFFpKWZvcihjPWJuKEdyKG8sZ24obyxjKSkpO3U+ZiYmVnIobyxnbihvLGYpKTspKytmO3ZhciBoPVt7ZnJvbTpNYXRoLm1heChpLnNob3dpbmdGcm9tLG8uZmlyc3QpLHRvOk1hdGgubWluKGkuc2hvd2luZ1RvLHUpfV07aWYoaD1oWzBdLmZyb20+PWhbMF0udG8/W106TChoLGUpLFFpKWZvcih2YXIgYT0wO2E8aC5sZW5ndGg7KythKWZvcih2YXIgZCxwPWhbYV07ZD1CcihnbihvLHAudG8tMSkpOyl7dmFyIGc9ZC5maW5kKCkuZnJvbS5saW5lO2lmKCEoZz5wLmZyb20pKXtoLnNwbGljZShhLS0sMSk7YnJlYWt9cC50bz1nfWZvcih2YXIgdj0wLGE9MDthPGgubGVuZ3RoOysrYSl7dmFyIHA9aFthXTtwLmZyb208YyYmKHAuZnJvbT1jKSxwLnRvPmYmJihwLnRvPWYpLHAuZnJvbT49cC50bz9oLnNwbGljZShhLS0sMSk6dis9cC50by1wLmZyb219aWYoIW4mJnY9PWYtYyYmYz09aS5zaG93aW5nRnJvbSYmZj09aS5zaG93aW5nVG8pcmV0dXJuIHcodCksdm9pZCAwO2guc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmZyb20tZS5mcm9tfSk7dHJ5e3ZhciB5PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYil7fS43KihmLWMpPnYmJihpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIpLFModCxjLGYsaCxzKSxpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0iIix5JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT15JiZ5Lm9mZnNldEhlaWdodCYmeS5mb2N1cygpO3ZhciB4PWMhPWkuc2hvd2luZ0Zyb218fGYhPWkuc2hvd2luZ1RvfHxpLmxhc3RTaXplQyE9aS53cmFwcGVyLmNsaWVudEhlaWdodDtyZXR1cm4geCYmKGkubGFzdFNpemVDPWkud3JhcHBlci5jbGllbnRIZWlnaHQsVyh0LDQwMCkpLGkuc2hvd2luZ0Zyb209YyxpLnNob3dpbmdUbz1mLEModCksdyh0KSwhMH19ZnVuY3Rpb24gQyh0KXtmb3IodmFyIGUscj10LmRpc3BsYXksbj1yLmxpbmVEaXYub2Zmc2V0VG9wLGk9ci5saW5lRGl2LmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpaWYoaS5saW5lT2JqKXtpZihIaSl7dmFyIG89aS5vZmZzZXRUb3AraS5vZmZzZXRIZWlnaHQ7ZT1vLW4sbj1vfWVsc2V7dmFyIGw9ZmkoaSk7ZT1sLmJvdHRvbS1sLnRvcH12YXIgcz1pLmxpbmVPYmouaGVpZ2h0LWU7aWYoMj5lJiYoZT1yZShyKSkscz4uMDAxfHwtLjAwMT5zKXt5bihpLmxpbmVPYmosZSk7dmFyIGE9aS5saW5lT2JqLndpZGdldHM7aWYoYSlmb3IodmFyIHU9MDt1PGEubGVuZ3RoOysrdSlhW3VdLmhlaWdodD1hW3VdLm5vZGUub2Zmc2V0SGVpZ2h0fX19ZnVuY3Rpb24gdyh0KXt2YXIgZT10LmRpc3BsYXkudmlld09mZnNldD1Dbih0LGduKHQuZG9jLHQuZGlzcGxheS5zaG93aW5nRnJvbSkpO3QuZGlzcGxheS5tb3Zlci5zdHlsZS50b3A9ZSsicHgifWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RofHwwO24+cjsrK3Ipe2Zvcih2YXIgaT1lW3JdLG89W10sbD1pLmRpZmZ8fDAscz0wLGE9dC5sZW5ndGg7YT5zOysrcyl7dmFyIHU9dFtzXTtpLnRvPD11LmZyb20mJmkuZGlmZj9vLnB1c2goe2Zyb206dS5mcm9tK2wsdG86dS50bytsfSk6aS50bzw9dS5mcm9tfHxpLmZyb20+PXUudG8/by5wdXNoKHUpOihpLmZyb20+dS5mcm9tJiZvLnB1c2goe2Zyb206dS5mcm9tLHRvOmkuZnJvbX0pLGkudG88dS50byYmby5wdXNoKHtmcm9tOmkudG8rbCx0bzp1LnRvK2x9KSl9dD1vfXJldHVybiB0fWZ1bmN0aW9uIGsodCl7Zm9yKHZhciBlPXQuZGlzcGxheSxyPXt9LG49e30saT1lLmd1dHRlcnMuZmlyc3RDaGlsZCxvPTA7aTtpPWkubmV4dFNpYmxpbmcsKytvKXJbdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0TGVmdCxuW3Qub3B0aW9ucy5ndXR0ZXJzW29dXT1pLm9mZnNldFdpZHRoO3JldHVybntmaXhlZFBvczp5KGUpLGd1dHRlclRvdGFsV2lkdGg6ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGd1dHRlckxlZnQ6cixndXR0ZXJXaWR0aDpuLHdyYXBwZXJXaWR0aDplLndyYXBwZXIuY2xpZW50V2lkdGh9fWZ1bmN0aW9uIFModCxlLHIsbixpKXtmdW5jdGlvbiBvKGUpe3ZhciByPWUubmV4dFNpYmxpbmc7cmV0dXJuIFdpJiZLaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD09ZT8oZS5zdHlsZS5kaXNwbGF5PSJub25lIixlLmxpbmVPYmo9bnVsbCk6ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLHJ9dmFyIGw9ayh0KSxzPXQuZGlzcGxheSxhPXQub3B0aW9ucy5saW5lTnVtYmVycztuLmxlbmd0aHx8V2kmJnQuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXR8fGFpKHMubGluZURpdik7dmFyIHU9cy5saW5lRGl2LGM9dS5maXJzdENoaWxkLGY9bi5zaGlmdCgpLGg9ZTtmb3IodC5kb2MuaXRlcihlLHIsZnVuY3Rpb24oZSl7aWYoZiYmZi50bz09aCYmKGY9bi5zaGlmdCgpKSxWcih0LmRvYyxlKSl7aWYoMCE9ZS5oZWlnaHQmJnluKGUsMCksZS53aWRnZXRzJiZjJiZjLnByZXZpb3VzU2libGluZylmb3IodmFyIHI9MDtyPGUud2lkZ2V0cy5sZW5ndGg7KytyKXt2YXIgcz1lLndpZGdldHNbcl07aWYocy5zaG93SWZIaWRkZW4pe3ZhciBkPWMucHJldmlvdXNTaWJsaW5nO2lmKC9wcmUvaS50ZXN0KGQubm9kZU5hbWUpKXt2YXIgcD1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpO2QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocCxkKSxwLmFwcGVuZENoaWxkKGQpLGQ9cH12YXIgZz1kLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzLm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKSk7cy5oYW5kbGVNb3VzZUV2ZW50c3x8KGcuaWdub3JlRXZlbnRzPSEwKSxUKHMsZyxkLGwpfX19ZWxzZSBpZihmJiZmLmZyb208PWgmJmYudG8+aCl7Zm9yKDtjLmxpbmVPYmohPWU7KWM9byhjKTthJiZoPj1pJiZjLmxpbmVOdW1iZXImJmNpKGMubGluZU51bWJlcix2KHQub3B0aW9ucyxoKSksYz1jLm5leHRTaWJsaW5nfWVsc2V7aWYoZS53aWRnZXRzKWZvcih2YXIgbSx5PTAsYj1jO2ImJjIwPnk7Kyt5LGI9Yi5uZXh0U2libGluZylpZihiLmxpbmVPYmo9PWUmJi9kaXYvaS50ZXN0KGIubm9kZU5hbWUpKXttPWI7YnJlYWt9dmFyIHg9TSh0LGUsaCxsLG0pO2lmKHghPW0pdS5pbnNlcnRCZWZvcmUoeCxjKTtlbHNle2Zvcig7YyE9bTspYz1vKGMpO2M9Yy5uZXh0U2libGluZ314LmxpbmVPYmo9ZX0rK2h9KTtjOyljPW8oYyl9ZnVuY3Rpb24gTSh0LGUscixuLGkpe3ZhciBvLGw9cm4odCxlKSxzPWwucHJlLGE9ZS5ndXR0ZXJNYXJrZXJzLHU9dC5kaXNwbGF5LGM9bC5iZ0NsYXNzP2wuYmdDbGFzcysiICIrKGUuYmdDbGFzc3x8IiIpOmUuYmdDbGFzcztpZighKHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YXx8Y3x8ZS53cmFwQ2xhc3N8fGUud2lkZ2V0cykpcmV0dXJuIHM7aWYoaSl7aS5hbGlnbmFibGU9bnVsbDtmb3IodmFyIGYsaD0hMCxkPTAscD1udWxsLGc9aS5maXJzdENoaWxkO2c7Zz1mKWlmKGY9Zy5uZXh0U2libGluZywvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChnLmNsYXNzTmFtZSkpe2Zvcih2YXIgbT0wO208ZS53aWRnZXRzLmxlbmd0aDsrK20pe3ZhciB5PWUud2lkZ2V0c1ttXTtpZih5Lm5vZGU9PWcuZmlyc3RDaGlsZCl7eS5hYm92ZXx8cHx8KHA9ZyksVCh5LGcsaSxuKSwrK2Q7YnJlYWt9fWlmKG09PWUud2lkZ2V0cy5sZW5ndGgpe2g9ITE7YnJlYWt9fWVsc2UgaS5yZW1vdmVDaGlsZChnKTtpLmluc2VydEJlZm9yZShzLHApLGgmJmQ9PWUud2lkZ2V0cy5sZW5ndGgmJihvPWksaS5jbGFzc05hbWU9ZS53cmFwQ2xhc3N8fCIiKX1pZihvfHwobz1zaSgiZGl2IixudWxsLGUud3JhcENsYXNzLCJwb3NpdGlvbjogcmVsYXRpdmUiKSxvLmFwcGVuZENoaWxkKHMpKSxjJiZvLmluc2VydEJlZm9yZShzaSgiZGl2IixudWxsLGMrIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIiksby5maXJzdENoaWxkKSx0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEpe3ZhciBiPW8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiKyh0Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bi5maXhlZFBvczotbi5ndXR0ZXJUb3RhbFdpZHRoKSsicHgiKSxvLmZpcnN0Q2hpbGQpO2lmKHQub3B0aW9ucy5maXhlZEd1dHRlciYmKG8uYWxpZ25hYmxlfHwoby5hbGlnbmFibGU9W10pKS5wdXNoKGIpLCF0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEmJmFbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXXx8KG8ubGluZU51bWJlcj1iLmFwcGVuZENoaWxkKHNpKCJkaXYiLHYodC5vcHRpb25zLHIpLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIituLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSsicHg7IHdpZHRoOiAiK3UubGluZU51bUlubmVyV2lkdGgrInB4IikpKSxhKWZvcih2YXIgeD0wO3g8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysreCl7dmFyIEM9dC5vcHRpb25zLmd1dHRlcnNbeF0sdz1hLmhhc093blByb3BlcnR5KEMpJiZhW0NdO3cmJmIuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3ddLCJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFtDXSsicHg7IHdpZHRoOiAiK24uZ3V0dGVyV2lkdGhbQ10rInB4IikpfX1pZihIaSYmKG8uc3R5bGUuekluZGV4PTIpLGUud2lkZ2V0cyYmbyE9aSlmb3IodmFyIG09MCxMPWUud2lkZ2V0czttPEwubGVuZ3RoOysrbSl7dmFyIHk9TFttXSxrPXNpKCJkaXYiLFt5Lm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTt5LmhhbmRsZU1vdXNlRXZlbnRzfHwoay5pZ25vcmVFdmVudHM9ITApLFQoeSxrLG8sbikseS5hYm92ZT9vLmluc2VydEJlZm9yZShrLHQub3B0aW9ucy5saW5lTnVtYmVycyYmMCE9ZS5oZWlnaHQ/YjpzKTpvLmFwcGVuZENoaWxkKGspLFVuKHksInJlZHJhdyIpfXJldHVybiBvfWZ1bmN0aW9uIFQodCxlLHIsbil7aWYodC5ub0hTY3JvbGwpeyhyLmFsaWduYWJsZXx8KHIuYWxpZ25hYmxlPVtdKSkucHVzaChlKTt2YXIgaT1uLndyYXBwZXJXaWR0aDtlLnN0eWxlLmxlZnQ9bi5maXhlZFBvcysicHgiLHQuY292ZXJHdXR0ZXJ8fChpLT1uLmd1dHRlclRvdGFsV2lkdGgsZS5zdHlsZS5wYWRkaW5nTGVmdD1uLmd1dHRlclRvdGFsV2lkdGgrInB4IiksZS5zdHlsZS53aWR0aD1pKyJweCJ9dC5jb3Zlckd1dHRlciYmKGUuc3R5bGUuekluZGV4PTUsZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHQubm9IU2Nyb2xsfHwoZS5zdHlsZS5tYXJnaW5MZWZ0PS1uLmd1dHRlclRvdGFsV2lkdGgrInB4IikpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5kaXNwbGF5LHI9amUodC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvKTtpZihyfHx0Lm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3Rpbmc/SCh0KTplLmN1cnNvci5zdHlsZS5kaXNwbGF5PWUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIscj9lLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSJub25lIjpOKHQpLHQub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKXt2YXIgbj1RKHQsdC5kb2Muc2VsLmhlYWQsImRpdiIpLGk9ZmkoZS53cmFwcGVyKSxvPWZpKGUubGluZURpdik7ZS5pbnB1dERpdi5zdHlsZS50b3A9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50SGVpZ2h0LTEwLG4udG9wK28udG9wLWkudG9wKSkrInB4IixlLmlucHV0RGl2LnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50V2lkdGgtMTAsbi5sZWZ0K28ubGVmdC1pLmxlZnQpKSsicHgifX1mdW5jdGlvbiBIKHQpe3ZhciBlPXQuZGlzcGxheSxyPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2Iik7ZS5jdXJzb3Iuc3R5bGUubGVmdD1yLmxlZnQrInB4IixlLmN1cnNvci5zdHlsZS50b3A9ci50b3ArInB4IixlLmN1cnNvci5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxyLmJvdHRvbS1yLnRvcCkqdC5vcHRpb25zLmN1cnNvckhlaWdodCsicHgiLGUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5vdGhlcj8oZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLGUub3RoZXJDdXJzb3Iuc3R5bGUubGVmdD1yLm90aGVyLmxlZnQrInB4IixlLm90aGVyQ3Vyc29yLnN0eWxlLnRvcD1yLm90aGVyLnRvcCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0PS44NSooci5vdGhlci5ib3R0b20tci5vdGhlci50b3ApKyJweCIpOmUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZnVuY3Rpb24gTih0KXtmdW5jdGlvbiBlKHQsZSxyLG4pezA+ZSYmKGU9MCksbC5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLXNlbGVjdGVkIiwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiK3QrInB4OyB0b3A6ICIrZSsicHg7IHdpZHRoOiAiKyhudWxsPT1yP3MtdDpyKSsicHg7IGhlaWdodDogIisobi1lKSsicHgiKSl9ZnVuY3Rpb24gcihyLG4sbyl7ZnVuY3Rpb24gbChlLG4pe3JldHVybiBxKHQsWWUocixlKSwiZGl2IixmLG4pfXZhciB1LGMsZj1nbihpLHIpLGg9Zi50ZXh0Lmxlbmd0aDtyZXR1cm4gZ2kod24oZiksbnx8MCxudWxsPT1vP2g6byxmdW5jdGlvbih0LHIsaSl7dmFyIGYsZCxwLGc9bCh0LCJsZWZ0Iik7aWYodD09cilmPWcsZD1wPWcubGVmdDtlbHNle2lmKGY9bChyLTEsInJpZ2h0IiksInJ0bCI9PWkpe3ZhciBtPWc7Zz1mLGY9bX1kPWcubGVmdCxwPWYucmlnaHR9bnVsbD09biYmMD09dCYmKGQ9YSksZi50b3AtZy50b3A+MyYmKGUoZCxnLnRvcCxudWxsLGcuYm90dG9tKSxkPWEsZy5ib3R0b208Zi50b3AmJmUoZCxnLmJvdHRvbSxudWxsLGYudG9wKSksbnVsbD09byYmcj09aCYmKHA9cyksKCF1fHxnLnRvcDx1LnRvcHx8Zy50b3A9PXUudG9wJiZnLmxlZnQ8dS5sZWZ0KSYmKHU9ZyksKCFjfHxmLmJvdHRvbT5jLmJvdHRvbXx8Zi5ib3R0b209PWMuYm90dG9tJiZmLnJpZ2h0PmMucmlnaHQpJiYoYz1mKSxhKzE+ZCYmKGQ9YSksZShkLGYudG9wLHAtZCxmLmJvdHRvbSl9KSx7c3RhcnQ6dSxlbmQ6Y319dmFyIG49dC5kaXNwbGF5LGk9dC5kb2Msbz10LmRvYy5zZWwsbD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscz1uLmxpbmVTcGFjZS5vZmZzZXRXaWR0aCxhPVAodC5kaXNwbGF5KTtpZihvLmZyb20ubGluZT09by50by5saW5lKXIoby5mcm9tLmxpbmUsby5mcm9tLmNoLG8udG8uY2gpO2Vsc2V7dmFyIHU9Z24oaSxvLmZyb20ubGluZSksYz1nbihpLG8udG8ubGluZSksZj1HcihpLHUpPT1HcihpLGMpLGg9cihvLmZyb20ubGluZSxvLmZyb20uY2gsZj91LnRleHQubGVuZ3RoOm51bGwpLmVuZCxkPXIoby50by5saW5lLGY/MDpudWxsLG8udG8uY2gpLnN0YXJ0O2YmJihoLnRvcDxkLnRvcC0yPyhlKGgucmlnaHQsaC50b3AsbnVsbCxoLmJvdHRvbSksZShhLGQudG9wLGQubGVmdCxkLmJvdHRvbSkpOmUoaC5yaWdodCxoLnRvcCxkLmxlZnQtaC5yaWdodCxoLmJvdHRvbSkpLGguYm90dG9tPGQudG9wJiZlKGEsaC5ib3R0b20sbnVsbCxkLnRvcCl9dWkobi5zZWxlY3Rpb25EaXYsbCksbi5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheT0iIn1mdW5jdGlvbiBEKHQpe2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIGU9dC5kaXNwbGF5O2NsZWFySW50ZXJ2YWwoZS5ibGlua2VyKTt2YXIgcj0hMDtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0iIix0Lm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlPjAmJihlLmJsaW5rZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0ocj0hcik/IiI6ImhpZGRlbiJ9LHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpKX19ZnVuY3Rpb24gVyh0LGUpe3QuZG9jLm1vZGUuc3RhcnRTdGF0ZSYmdC5kb2MuZnJvbnRpZXI8dC5kaXNwbGF5LnNob3dpbmdUbyYmdC5zdGF0ZS5oaWdobGlnaHQuc2V0KGUsaWkoTyx0KSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmRvYztpZihlLmZyb250aWVyPGUuZmlyc3QmJihlLmZyb250aWVyPWUuZmlyc3QpLCEoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdUbykpe3ZhciByLG49K25ldyBEYXRlK3Qub3B0aW9ucy53b3JrVGltZSxpPWJyKGUubW9kZSx6KHQsZS5mcm9udGllcikpLG89W107ZS5pdGVyKGUuZnJvbnRpZXIsTWF0aC5taW4oZS5maXJzdCtlLnNpemUsdC5kaXNwbGF5LnNob3dpbmdUbys1MDApLGZ1bmN0aW9uKGwpe2lmKGUuZnJvbnRpZXI+PXQuZGlzcGxheS5zaG93aW5nRnJvbSl7dmFyIHM9bC5zdHlsZXM7bC5zdHlsZXM9UXIodCxsLGksITApO2Zvcih2YXIgYT0hc3x8cy5sZW5ndGghPWwuc3R5bGVzLmxlbmd0aCx1PTA7IWEmJnU8cy5sZW5ndGg7Kyt1KWE9c1t1XSE9bC5zdHlsZXNbdV07YSYmKHImJnIuZW5kPT1lLmZyb250aWVyP3IuZW5kKys6by5wdXNoKHI9e3N0YXJ0OmUuZnJvbnRpZXIsZW5kOmUuZnJvbnRpZXIrMX0pKSxsLnN0YXRlQWZ0ZXI9YnIoZS5tb2RlLGkpfWVsc2UgdG4odCxsLnRleHQsaSksbC5zdGF0ZUFmdGVyPTA9PWUuZnJvbnRpZXIlNT9icihlLm1vZGUsaSk6bnVsbDtyZXR1cm4rK2UuZnJvbnRpZXIsK25ldyBEYXRlPm4/KFcodCx0Lm9wdGlvbnMud29ya0RlbGF5KSwhMCk6dm9pZCAwfSksby5sZW5ndGgmJmxlKHQsZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoOysrdCl1ZSh0aGlzLG9bdF0uc3RhcnQsb1t0XS5lbmQpfSkoKX19ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuLGksbz10LmRvYyxsPXI/LTE6ZS0odC5kb2MubW9kZS5pbm5lck1vZGU/MWUzOjEwMCkscz1lO3M+bDstLXMpe2lmKHM8PW8uZmlyc3QpcmV0dXJuIG8uZmlyc3Q7dmFyIGE9Z24obyxzLTEpO2lmKGEuc3RhdGVBZnRlciYmKCFyfHxzPD1vLmZyb250aWVyKSlyZXR1cm4gczt2YXIgdT1abihhLnRleHQsbnVsbCx0Lm9wdGlvbnMudGFiU2l6ZSk7KG51bGw9PWl8fG4+dSkmJihpPXMtMSxuPXUpfXJldHVybiBpfWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXQuZG9jLGk9dC5kaXNwbGF5O2lmKCFuLm1vZGUuc3RhcnRTdGF0ZSlyZXR1cm4hMDt2YXIgbz1FKHQsZSxyKSxsPW8+bi5maXJzdCYmZ24obixvLTEpLnN0YXRlQWZ0ZXI7cmV0dXJuIGw9bD9icihuLm1vZGUsbCk6eHIobi5tb2RlKSxuLml0ZXIobyxlLGZ1bmN0aW9uKHIpe3RuKHQsci50ZXh0LGwpO3ZhciBzPW89PWUtMXx8MD09byU1fHxvPj1pLnNob3dpbmdGcm9tJiZvPGkuc2hvd2luZ1RvO3Iuc3RhdGVBZnRlcj1zP2JyKG4ubW9kZSxsKTpudWxsLCsrb30pLHImJihuLmZyb250aWVyPW8pLGx9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5saW5lU3BhY2Uub2Zmc2V0VG9wfWZ1bmN0aW9uIEYodCl7cmV0dXJuIHQubW92ZXIub2Zmc2V0SGVpZ2h0LXQubGluZVNwYWNlLm9mZnNldEhlaWdodH1mdW5jdGlvbiBQKHQpe3ZhciBlPXVpKHQubWVhc3VyZSxzaSgicHJlIixudWxsLG51bGwsInRleHQtYWxpZ246IGxlZnQiKSkuYXBwZW5kQ2hpbGQoc2koInNwYW4iLCJ4IikpO3JldHVybiBlLm9mZnNldExlZnR9ZnVuY3Rpb24gUih0LGUscixuLGkpe3ZhciBvPS0xO2lmKG49bnx8Vih0LGUpLG4uY3J1ZGUpe3ZhciBsPW4ubGVmdCtyKm4ud2lkdGg7cmV0dXJue2xlZnQ6bCxyaWdodDpsK24ud2lkdGgsdG9wOm4udG9wLGJvdHRvbTpuLmJvdHRvbX19Zm9yKHZhciBzPXI7O3MrPW8pe3ZhciBhPW5bc107aWYoYSlicmVhazswPm8mJjA9PXMmJihvPTEpfXJldHVybiBpPXM+cj8ibGVmdCI6cj5zPyJyaWdodCI6aSwibGVmdCI9PWkmJmEubGVmdFNpZGU/YT1hLmxlZnRTaWRlOiJyaWdodCI9PWkmJmEucmlnaHRTaWRlJiYoYT1hLnJpZ2h0U2lkZSkse2xlZnQ6cj5zP2EucmlnaHQ6YS5sZWZ0LHJpZ2h0OnM+cj9hLmxlZnQ6YS5yaWdodCx0b3A6YS50b3AsYm90dG9tOmEuYm90dG9tfX1mdW5jdGlvbiBCKHQsZSl7Zm9yKHZhciByPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtpZihpLnRleHQ9PWUudGV4dCYmaS5tYXJrZWRTcGFucz09ZS5tYXJrZWRTcGFucyYmdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoPT1pLndpZHRoJiZpLmNsYXNzZXM9PWUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzcylyZXR1cm4gaX19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPUIodCxlKTtyJiYoci50ZXh0PXIubWVhc3VyZT1yLm1hcmtlZFNwYW5zPW51bGwpfWZ1bmN0aW9uIFYodCxlKXt2YXIgcj1CKHQsZSk7aWYocilyZXR1cm4gci5tZWFzdXJlO3ZhciBuPUsodCxlKSxpPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG89e3RleHQ6ZS50ZXh0LHdpZHRoOnQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCxtYXJrZWRTcGFuczplLm1hcmtlZFNwYW5zLG1lYXN1cmU6bixjbGFzc2VzOmUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzc307cmV0dXJuIDE2PT1pLmxlbmd0aD9pWysrdC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3MlMTZdPW86aS5wdXNoKG8pLG59ZnVuY3Rpb24gSyh0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9dC50b3AtcC50b3Ascj10LmJvdHRvbS1wLnRvcDtyPnYmJihyPXYpLDA+ZSYmKGU9MCk7Zm9yKHZhciBuPWcubGVuZ3RoLTI7bj49MDtuLT0yKXt2YXIgaT1nW25dLG89Z1tuKzFdO2lmKCEoaT5yfHxlPm8pJiYoZT49aSYmbz49cnx8aT49ZSYmcj49b3x8TWF0aC5taW4ocixvKS1NYXRoLm1heChlLGkpPj1yLWU+PjEpKXtnW25dPU1hdGgubWluKGUsaSksZ1tuKzFdPU1hdGgubWF4KHIsbyk7YnJlYWt9fXJldHVybiAwPm4mJihuPWcubGVuZ3RoLGcucHVzaChlLHIpKSx7bGVmdDp0LmxlZnQtcC5sZWZ0LHJpZ2h0OnQucmlnaHQtcC5sZWZ0LHRvcDpuLGJvdHRvbTpudWxsfX1mdW5jdGlvbiBuKHQpe3QuYm90dG9tPWdbdC50b3ArMV0sdC50b3A9Z1t0LnRvcF19aWYoIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFUodCxlKTt2YXIgaT10LmRpc3BsYXksbz1uaShlLnRleHQubGVuZ3RoKSxsPXJuKHQsZSxvLCEwKS5wcmU7aWYoQWkmJiFIaSYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmwuY2hpbGROb2Rlcy5sZW5ndGg+MTAwKXtmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MTAsdT1sLmNoaWxkTm9kZXMubGVuZ3RoLGM9MCxmPU1hdGguY2VpbCh1L2EpO2Y+YzsrK2Mpe2Zvcih2YXIgaD1zaSgiZGl2IixudWxsLG51bGwsImRpc3BsYXk6IGlubGluZS1ibG9jayIpLGQ9MDthPmQmJnU7KytkKWguYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKSwtLXU7cy5hcHBlbmRDaGlsZChoKX1sLmFwcGVuZENoaWxkKHMpfXVpKGkubWVhc3VyZSxsKTt2YXIgcD1maShpLmxpbmVEaXYpLGc9W10sbT1uaShlLnRleHQubGVuZ3RoKSx2PWwub2Zmc2V0SGVpZ2h0O05pJiZpLm1lYXN1cmUuZmlyc3QhPWwmJnVpKGkubWVhc3VyZSxsKTtmb3IodmFyIHksYz0wO2M8by5sZW5ndGg7KytjKWlmKHk9b1tjXSl7dmFyIGI9eSx4PW51bGw7aWYoL1xiQ29kZU1pcnJvci13aWRnZXRcYi8udGVzdCh5LmNsYXNzTmFtZSkmJnkuZ2V0Q2xpZW50UmVjdHMpezE9PXkuZmlyc3RDaGlsZC5ub2RlVHlwZSYmKGI9eS5maXJzdENoaWxkKTt2YXIgQz1iLmdldENsaWVudFJlY3RzKCk7Qy5sZW5ndGg+MSYmKHg9bVtjXT1yKENbMF0pLHgucmlnaHRTaWRlPXIoQ1tDLmxlbmd0aC0xXSkpfXh8fCh4PW1bY109cihmaShiKSkpLHkubWVhc3VyZVJpZ2h0JiYoeC5yaWdodD1maSh5Lm1lYXN1cmVSaWdodCkubGVmdCkseS5sZWZ0U2lkZSYmKHgubGVmdFNpZGU9cihmaSh5LmxlZnRTaWRlKSkpfWFpKHQuZGlzcGxheS5tZWFzdXJlKTtmb3IodmFyIHksYz0wO2M8bS5sZW5ndGg7KytjKSh5PW1bY10pJiYobih5KSx5LmxlZnRTaWRlJiZuKHkubGVmdFNpZGUpLHkucmlnaHRTaWRlJiZuKHkucmlnaHRTaWRlKSk7cmV0dXJuIG19ZnVuY3Rpb24gVSh0LGUpe3ZhciByPW5ldyBibyhlLnRleHQuc2xpY2UoMCwxMDApLG51bGwpO2UudGV4dENsYXNzJiYoci50ZXh0Q2xhc3M9ZS50ZXh0Q2xhc3MpO3ZhciBuPUsodCxyKSxpPVIodCxyLDAsbiwibGVmdCIpLG89Uih0LHIsOTksbiwicmlnaHQiKTtyZXR1cm57Y3J1ZGU6ITAsdG9wOmkudG9wLGxlZnQ6aS5sZWZ0LGJvdHRvbTppLmJvdHRvbSx3aWR0aDooby5yaWdodC1pLmxlZnQpLzEwMH19ZnVuY3Rpb24gWCh0LGUpe3ZhciByPSExO2lmKGUubWFya2VkU3BhbnMpZm9yKHZhciBuPTA7bjxlLm1hcmtlZFNwYW5zOysrbil7dmFyIGk9ZS5tYXJrZWRTcGFuc1tuXTshaS5jb2xsYXBzZWR8fG51bGwhPWkudG8mJmkudG8hPWUudGV4dC5sZW5ndGh8fChyPSEwKX12YXIgbz0hciYmQih0LGUpO2lmKG98fGUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFIodCxlLGUudGV4dC5sZW5ndGgsbyYmby5tZWFzdXJlLCJyaWdodCIpLnJpZ2h0O3ZhciBsPXJuKHQsZSxudWxsLCEwKS5wcmUscz1sLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSk7cmV0dXJuIHVpKHQuZGlzcGxheS5tZWFzdXJlLGwpLGZpKHMpLnJpZ2h0LWZpKHQuZGlzcGxheS5saW5lRGl2KS5sZWZ0fWZ1bmN0aW9uIF8odCl7dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zPTAsdC5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aD10LmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodD1udWxsLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fCh0LmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApLHQuZGlzcGxheS5saW5lTnVtQ2hhcnM9bnVsbH1mdW5jdGlvbiBZKCl7cmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBqKCl7cmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wfWZ1bmN0aW9uICQodCxlLHIsbil7aWYoZS53aWRnZXRzKWZvcih2YXIgaT0wO2k8ZS53aWRnZXRzLmxlbmd0aDsrK2kpaWYoZS53aWRnZXRzW2ldLmFib3ZlKXt2YXIgbz1ZcihlLndpZGdldHNbaV0pO3IudG9wKz1vLHIuYm90dG9tKz1vfWlmKCJsaW5lIj09bilyZXR1cm4gcjtufHwobj0ibG9jYWwiKTt2YXIgbD1Dbih0LGUpO2lmKCJsb2NhbCI9PW4/bCs9SSh0LmRpc3BsYXkpOmwtPXQuZGlzcGxheS52aWV3T2Zmc2V0LCJwYWdlIj09bnx8IndpbmRvdyI9PW4pe3ZhciBzPWZpKHQuZGlzcGxheS5saW5lU3BhY2UpO2wrPXMudG9wKygid2luZG93Ij09bj8wOmooKSk7dmFyIGE9cy5sZWZ0Kygid2luZG93Ij09bj8wOlkoKSk7ci5sZWZ0Kz1hLHIucmlnaHQrPWF9cmV0dXJuIHIudG9wKz1sLHIuYm90dG9tKz1sLHJ9ZnVuY3Rpb24gWih0LGUscil7aWYoImRpdiI9PXIpcmV0dXJuIGU7dmFyIG49ZS5sZWZ0LGk9ZS50b3A7aWYoInBhZ2UiPT1yKW4tPVkoKSxpLT1qKCk7ZWxzZSBpZigibG9jYWwiPT1yfHwhcil7dmFyIG89ZmkodC5kaXNwbGF5LnNpemVyKTtuKz1vLmxlZnQsaSs9by50b3B9dmFyIGw9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7cmV0dXJue2xlZnQ6bi1sLmxlZnQsdG9wOmktbC50b3B9fWZ1bmN0aW9uIHEodCxlLHIsbixpKXtyZXR1cm4gbnx8KG49Z24odC5kb2MsZS5saW5lKSksJCh0LG4sUih0LG4sZS5jaCxudWxsLGkpLHIpfWZ1bmN0aW9uIFEodCxlLHIsbixpKXtmdW5jdGlvbiBvKGUsbyl7dmFyIGw9Uih0LG4sZSxpLG8/InJpZ2h0IjoibGVmdCIpO3JldHVybiBvP2wubGVmdD1sLnJpZ2h0OmwucmlnaHQ9bC5sZWZ0LCQodCxuLGwscil9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXNbZV0sbj1yLmxldmVsJTI7cmV0dXJuIHQ9PW1pKHIpJiZlJiZyLmxldmVsPHNbZS0xXS5sZXZlbD8ocj1zWy0tZV0sdD12aShyKS0oci5sZXZlbCUyPzA6MSksbj0hMCk6dD09dmkocikmJmU8cy5sZW5ndGgtMSYmci5sZXZlbDxzW2UrMV0ubGV2ZWwmJihyPXNbKytlXSx0PW1pKHIpLXIubGV2ZWwlMixuPSExKSxuJiZ0PT1yLnRvJiZ0PnIuZnJvbT9vKHQtMSk6byh0LG4pfW49bnx8Z24odC5kb2MsZS5saW5lKSxpfHwoaT1WKHQsbikpO3ZhciBzPXduKG4pLGE9ZS5jaDtpZighcylyZXR1cm4gbyhhKTt2YXIgdT1MaShzLGEpLGM9bChhLHUpO3JldHVybiBudWxsIT1SbyYmKGMub3RoZXI9bChhLFJvKSksY31mdW5jdGlvbiBKKHQsZSxyLG4pe3ZhciBpPW5ldyBZZSh0LGUpO3JldHVybiBpLnhSZWw9bixyJiYoaS5vdXRzaWRlPSEwKSxpfWZ1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj10LmRvYztpZihyKz10LmRpc3BsYXkudmlld09mZnNldCwwPnIpcmV0dXJuIEoobi5maXJzdCwwLCEwLC0xKTt2YXIgaT14bihuLHIpLG89bi5maXJzdCtuLnNpemUtMTtpZihpPm8pcmV0dXJuIEoobi5maXJzdCtuLnNpemUtMSxnbihuLG8pLnRleHQubGVuZ3RoLCEwLDEpO2ZvcigwPmUmJihlPTApOzspe3ZhciBsPWduKG4saSkscz1lZSh0LGwsaSxlLHIpLGE9QnIobCksdT1hJiZhLmZpbmQoKTtpZighYXx8IShzLmNoPnUuZnJvbS5jaHx8cy5jaD09dS5mcm9tLmNoJiZzLnhSZWw+MCkpcmV0dXJuIHM7aT11LnRvLmxpbmV9fWZ1bmN0aW9uIGVlKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyhuKXt2YXIgaT1RKHQsWWUocixuKSwibGluZSIsZSx1KTtyZXR1cm4gcz0hMCxsPmkuYm90dG9tP2kubGVmdC1hOmw8aS50b3A/aS5sZWZ0K2E6KHM9ITEsaS5sZWZ0KX12YXIgbD1pLUNuKHQsZSkscz0hMSxhPTIqdC5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgsdT1WKHQsZSksYz13bihlKSxmPWUudGV4dC5sZW5ndGgsaD15aShlKSxkPWJpKGUpLHA9byhoKSxnPXMsbT1vKGQpLHY9cztpZihuPm0pcmV0dXJuIEoocixkLHYsMSk7Zm9yKDs7KXtpZihjP2Q9PWh8fGQ9PVNpKGUsaCwxKToxPj1kLWgpe2Zvcih2YXIgeT1wPm58fG0tbj49bi1wP2g6ZCxiPW4tKHk9PWg/cDptKTtEby50ZXN0KGUudGV4dC5jaGFyQXQoeSkpOykrK3k7dmFyIHg9SihyLHkseT09aD9nOnYsMD5iPy0xOmI/MTowKTtyZXR1cm4geH12YXIgQz1NYXRoLmNlaWwoZi8yKSx3PWgrQztpZihjKXt3PWg7Zm9yKHZhciBMPTA7Qz5MOysrTCl3PVNpKGUsdywxKX12YXIgaz1vKHcpO2s+bj8oZD13LG09aywodj1zKSYmKG0rPTFlMyksZj1DKTooaD13LHA9ayxnPXMsZi09Qyl9fWZ1bmN0aW9uIHJlKHQpe2lmKG51bGwhPXQuY2FjaGVkVGV4dEhlaWdodClyZXR1cm4gdC5jYWNoZWRUZXh0SGVpZ2h0O2lmKG51bGw9PV9pKXtfaT1zaSgicHJlIik7Zm9yKHZhciBlPTA7NDk+ZTsrK2UpX2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSksX2kuYXBwZW5kQ2hpbGQoc2koImJyIikpO19pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IikpfXVpKHQubWVhc3VyZSxfaSk7dmFyIHI9X2kub2Zmc2V0SGVpZ2h0LzUwO3JldHVybiByPjMmJih0LmNhY2hlZFRleHRIZWlnaHQ9ciksYWkodC5tZWFzdXJlKSxyfHwxfWZ1bmN0aW9uIG5lKHQpe2lmKG51bGwhPXQuY2FjaGVkQ2hhcldpZHRoKXJldHVybiB0LmNhY2hlZENoYXJXaWR0aDt2YXIgZT1zaSgic3BhbiIsIngiKSxyPXNpKCJwcmUiLFtlXSk7dWkodC5tZWFzdXJlLHIpO3ZhciBuPWUub2Zmc2V0V2lkdGg7cmV0dXJuIG4+MiYmKHQuY2FjaGVkQ2hhcldpZHRoPW4pLG58fDEwfWZ1bmN0aW9uIGllKHQpe3QuY3VyT3A9e2NoYW5nZXM6W10sZm9yY2VVcGRhdGU6ITEsdXBkYXRlSW5wdXQ6bnVsbCx1c2VyU2VsQ2hhbmdlOm51bGwsdGV4dENoYW5nZWQ6bnVsbCxzZWxlY3Rpb25DaGFuZ2VkOiExLGN1cnNvckFjdGl2aXR5OiExLHVwZGF0ZU1heExpbmU6ITEsdXBkYXRlU2Nyb2xsUG9zOiExLGlkOisrSml9LE1vKyt8fChTbz1bXSl9ZnVuY3Rpb24gb2UodCl7dmFyIGU9dC5jdXJPcCxyPXQuZG9jLG49dC5kaXNwbGF5O2lmKHQuY3VyT3A9bnVsbCxlLnVwZGF0ZU1heExpbmUmJmYodCksbi5tYXhMaW5lQ2hhbmdlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJm4ubWF4TGluZSl7dmFyIGk9WCh0LG4ubWF4TGluZSk7bi5zaXplci5zdHlsZS5taW5XaWR0aD1NYXRoLm1heCgwLGkrMytUbykrInB4IixuLm1heExpbmVDaGFuZ2VkPSExO3ZhciBvPU1hdGgubWF4KDAsbi5zaXplci5vZmZzZXRMZWZ0K24uc2l6ZXIub2Zmc2V0V2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCk7bzxyLnNjcm9sbExlZnQmJiFlLnVwZGF0ZVNjcm9sbFBvcyYmTWUodCxNYXRoLm1pbihuLnNjcm9sbGVyLnNjcm9sbExlZnQsbyksITApfXZhciBsLHM7aWYoZS51cGRhdGVTY3JvbGxQb3MpbD1lLnVwZGF0ZVNjcm9sbFBvcztlbHNlIGlmKGUuc2VsZWN0aW9uQ2hhbmdlZCYmbi5zY3JvbGxlci5jbGllbnRIZWlnaHQpe3ZhciBhPVEodCxyLnNlbC5oZWFkKTtsPXVyKHQsYS5sZWZ0LGEudG9wLGEubGVmdCxhLmJvdHRvbSl9aWYoKGUuY2hhbmdlcy5sZW5ndGh8fGUuZm9yY2VVcGRhdGV8fGwmJm51bGwhPWwuc2Nyb2xsVG9wKSYmKHM9Yih0LGUuY2hhbmdlcyxsJiZsLnNjcm9sbFRvcCxlLmZvcmNlVXBkYXRlKSx0LmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0JiYodC5kb2Muc2Nyb2xsVG9wPXQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApKSwhcyYmZS5zZWxlY3Rpb25DaGFuZ2VkJiZBKHQpLGUudXBkYXRlU2Nyb2xsUG9zKXt2YXIgdT1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LW4uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LGwuc2Nyb2xsVG9wKSksYz1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCxsLnNjcm9sbExlZnQpKTtuLnNjcm9sbGVyLnNjcm9sbFRvcD1uLnNjcm9sbGJhclYuc2Nyb2xsVG9wPXIuc2Nyb2xsVG9wPXUsbi5zY3JvbGxlci5zY3JvbGxMZWZ0PW4uc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PXIuc2Nyb2xsTGVmdD1jLGcodCksZS5zY3JvbGxUb1BvcyYmc3IodCxRZSh0LmRvYyxlLnNjcm9sbFRvUG9zLmZyb20pLFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MudG8pLGUuc2Nyb2xsVG9Qb3MubWFyZ2luKX1lbHNlIGwmJmxyKHQpO2Uuc2VsZWN0aW9uQ2hhbmdlZCYmRCh0KSx0LnN0YXRlLmZvY3VzZWQmJmUudXBkYXRlSW5wdXQmJmRlKHQsZS51c2VyU2VsQ2hhbmdlKTt2YXIgaD1lLm1heWJlSGlkZGVuTWFya2VycyxkPWUubWF5YmVVbmhpZGRlbk1hcmtlcnM7aWYoaClmb3IodmFyIHA9MDtwPGgubGVuZ3RoOysrcCloW3BdLmxpbmVzLmxlbmd0aHx8S24oaFtwXSwiaGlkZSIpO2lmKGQpZm9yKHZhciBwPTA7cDxkLmxlbmd0aDsrK3ApZFtwXS5saW5lcy5sZW5ndGgmJktuKGRbcF0sInVuaGlkZSIpO3ZhciBtO2lmKC0tTW98fChtPVNvLFNvPW51bGwpLGUudGV4dENoYW5nZWQmJktuKHQsImNoYW5nZSIsdCxlLnRleHRDaGFuZ2VkKSxlLmN1cnNvckFjdGl2aXR5JiZLbih0LCJjdXJzb3JBY3Rpdml0eSIsdCksbSlmb3IodmFyIHA9MDtwPG0ubGVuZ3RoOysrcCltW3BdKCl9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10fHx0aGlzLG49IXIuY3VyT3A7biYmaWUocik7dHJ5e3ZhciBpPWUuYXBwbHkocixhcmd1bWVudHMpfWZpbmFsbHl7biYmb2Uocil9cmV0dXJuIGl9fWZ1bmN0aW9uIHNlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5jbSYmIXRoaXMuY20uY3VyT3A7ciYmaWUodGhpcy5jbSk7dHJ5e2U9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtyJiZvZSh0aGlzLmNtKX1yZXR1cm4gZX19ZnVuY3Rpb24gYWUodCxlKXt2YXIgcixuPSF0LmN1ck9wO24mJmllKHQpO3RyeXtyPWUoKX1maW5hbGx5e24mJm9lKHQpfXJldHVybiByfWZ1bmN0aW9uIHVlKHQsZSxyLG4pe251bGw9PWUmJihlPXQuZG9jLmZpcnN0KSxudWxsPT1yJiYocj10LmRvYy5maXJzdCt0LmRvYy5zaXplKSx0LmN1ck9wLmNoYW5nZXMucHVzaCh7ZnJvbTplLHRvOnIsZGlmZjpufSl9ZnVuY3Rpb24gY2UodCl7dC5kaXNwbGF5LnBvbGxpbmdGYXN0fHx0LmRpc3BsYXkucG9sbC5zZXQodC5vcHRpb25zLnBvbGxJbnRlcnZhbCxmdW5jdGlvbigpe2hlKHQpLHQuc3RhdGUuZm9jdXNlZCYmY2UodCl9KX1mdW5jdGlvbiBmZSh0KXtmdW5jdGlvbiBlKCl7dmFyIG49aGUodCk7bnx8cj8odC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExLGNlKHQpKToocj0hMCx0LmRpc3BsYXkucG9sbC5zZXQoNjAsZSkpfXZhciByPSExO3QuZGlzcGxheS5wb2xsaW5nRmFzdD0hMCx0LmRpc3BsYXkucG9sbC5zZXQoMjAsZSl9ZnVuY3Rpb24gaGUodCl7dmFyIGU9dC5kaXNwbGF5LmlucHV0LHI9dC5kaXNwbGF5LnByZXZJbnB1dCxuPXQuZG9jLGk9bi5zZWw7aWYoIXQuc3RhdGUuZm9jdXNlZHx8SW8oZSl8fGdlKHQpfHx0LnN0YXRlLmRpc2FibGVJbnB1dClyZXR1cm4hMTt0LnN0YXRlLnBhc3RlSW5jb21pbmcmJnQuc3RhdGUuZmFrZWRMYXN0Q2hhciYmKGUudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxlLnZhbHVlLmxlbmd0aC0xKSx0LnN0YXRlLmZha2VkTGFzdENoYXI9ITEpO3ZhciBvPWUudmFsdWU7aWYobz09ciYmamUoaS5mcm9tLGkudG8pKXJldHVybiExO2lmKEFpJiYhTmkmJnQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj09PW8pcmV0dXJuIGRlKHQsITApLCExO3ZhciBsPSF0LmN1ck9wO2wmJmllKHQpLGkuc2hpZnQ9ITE7Zm9yKHZhciBzPTAsYT1NYXRoLm1pbihyLmxlbmd0aCxvLmxlbmd0aCk7YT5zJiZyLmNoYXJDb2RlQXQocyk9PW8uY2hhckNvZGVBdChzKTspKytzO3ZhciB1PWkuZnJvbSxjPWkudG87czxyLmxlbmd0aD91PVllKHUubGluZSx1LmNoLShyLmxlbmd0aC1zKSk6dC5zdGF0ZS5vdmVyd3JpdGUmJmplKHUsYykmJiF0LnN0YXRlLnBhc3RlSW5jb21pbmcmJihjPVllKGMubGluZSxNYXRoLm1pbihnbihuLGMubGluZSkudGV4dC5sZW5ndGgsYy5jaCsoby5sZW5ndGgtcykpKSk7dmFyIGY9dC5jdXJPcC51cGRhdGVJbnB1dCxoPXtmcm9tOnUsdG86Yyx0ZXh0OnpvKG8uc2xpY2UocykpLG9yaWdpbjp0LnN0YXRlLnBhc3RlSW5jb21pbmc/InBhc3RlIjoiK2lucHV0In07cmV0dXJuIEJlKHQuZG9jLGgsImVuZCIpLHQuY3VyT3AudXBkYXRlSW5wdXQ9ZixVbih0LCJpbnB1dFJlYWQiLHQsaCksby5sZW5ndGg+MWUzfHxvLmluZGV4T2YoIlxuIik+LTE/ZS52YWx1ZT10LmRpc3BsYXkucHJldklucHV0PSIiOnQuZGlzcGxheS5wcmV2SW5wdXQ9byxsJiZvZSh0KSx0LnN0YXRlLnBhc3RlSW5jb21pbmc9ITEsITB9ZnVuY3Rpb24gZGUodCxlKXt2YXIgcixuLGk9dC5kb2M7aWYoamUoaS5zZWwuZnJvbSxpLnNlbC50bykpZSYmKHQuZGlzcGxheS5wcmV2SW5wdXQ9dC5kaXNwbGF5LmlucHV0LnZhbHVlPSIiLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCkpO2Vsc2V7dC5kaXNwbGF5LnByZXZJbnB1dD0iIixyPUZvJiYoaS5zZWwudG8ubGluZS1pLnNlbC5mcm9tLmxpbmU+MTAwfHwobj10LmdldFNlbGVjdGlvbigpKS5sZW5ndGg+MWUzKTt2YXIgbz1yPyItIjpufHx0LmdldFNlbGVjdGlvbigpO3QuZGlzcGxheS5pbnB1dC52YWx1ZT1vLHQuc3RhdGUuZm9jdXNlZCYmSm4odC5kaXNwbGF5LmlucHV0KSxBaSYmIU5pJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW8pfXQuZGlzcGxheS5pbmFjY3VyYXRlU2VsZWN0aW9uPXJ9ZnVuY3Rpb24gcGUodCl7Im5vY3Vyc29yIj09dC5vcHRpb25zLnJlYWRPbmx5fHxWaSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09dC5kaXNwbGF5LmlucHV0fHx0LmRpc3BsYXkuaW5wdXQuZm9jdXMoKX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gdC5vcHRpb25zLnJlYWRPbmx5fHx0LmRvYy5jYW50RWRpdH1mdW5jdGlvbiBtZSh0KXtmdW5jdGlvbiBlKCl7dC5zdGF0ZS5mb2N1c2VkJiZzZXRUaW1lb3V0KGlpKHBlLHQpLDApfWZ1bmN0aW9uIHIoKXtudWxsPT1zJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz1udWxsLGwuY2FjaGVkQ2hhcldpZHRoPWwuY2FjaGVkVGV4dEhlaWdodD1Pbz1udWxsLF8odCksYWUodCxpaSh1ZSx0KSl9LDEwMCkpfWZ1bmN0aW9uIG4oKXtmb3IodmFyIHQ9bC53cmFwcGVyLnBhcmVudE5vZGU7dCYmdCE9ZG9jdW1lbnQuYm9keTt0PXQucGFyZW50Tm9kZSk7dD9zZXRUaW1lb3V0KG4sNWUzKTpWbih3aW5kb3csInJlc2l6ZSIscil9ZnVuY3Rpb24gaShlKXtYbih0LGUpfHx0Lm9wdGlvbnMub25EcmFnRXZlbnQmJnQub3B0aW9ucy5vbkRyYWdFdmVudCh0LEVuKGUpKXx8UG4oZSl9ZnVuY3Rpb24gbygpe2wuaW5hY2N1cmF0ZVNlbGVjdGlvbiYmKGwucHJldklucHV0PSIiLGwuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxsLmlucHV0LnZhbHVlPXQuZ2V0U2VsZWN0aW9uKCksSm4obC5pbnB1dCkpfXZhciBsPXQuZGlzcGxheTtHbihsLnNjcm9sbGVyLCJtb3VzZWRvd24iLGxlKHQsYmUpKSxBaT9HbihsLnNjcm9sbGVyLCJkYmxjbGljayIsbGUodCxmdW5jdGlvbihlKXtpZighWG4odCxlKSl7dmFyIHI9eWUodCxlKTtpZihyJiYhd2UodCxlKSYmIXZlKHQuZGlzcGxheSxlKSl7em4oZSk7dmFyIG49bXIoZ24odC5kb2Msci5saW5lKS50ZXh0LHIpO2VyKHQuZG9jLG4uZnJvbSxuLnRvKX19fSkpOkduKGwuc2Nyb2xsZXIsImRibGNsaWNrIixmdW5jdGlvbihlKXtYbih0LGUpfHx6bihlKX0pLEduKGwubGluZVNwYWNlLCJzZWxlY3RzdGFydCIsZnVuY3Rpb24odCl7dmUobCx0KXx8em4odCl9KSxaaXx8R24obC5zY3JvbGxlciwiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe0llKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJihTZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsVG9wKSxNZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwhMCksS24odCwic2Nyb2xsIix0KSl9KSxHbihsLnNjcm9sbGJhclYsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmU2UodCxsLnNjcm9sbGJhclYuc2Nyb2xsVG9wKX0pLEduKGwuc2Nyb2xsYmFySCwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZNZSh0LGwuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KX0pLEduKGwuc2Nyb2xsZXIsIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGUpe1RlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJET01Nb3VzZVNjcm9sbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsYmFySCwibW91c2Vkb3duIixlKSxHbihsLnNjcm9sbGJhclYsIm1vdXNlZG93biIsZSksR24obC53cmFwcGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC53cmFwcGVyLnNjcm9sbFRvcD1sLndyYXBwZXIuc2Nyb2xsTGVmdD0wfSk7dmFyIHM7R24od2luZG93LCJyZXNpemUiLHIpLHNldFRpbWVvdXQobiw1ZTMpLEduKGwuaW5wdXQsImtleXVwIixsZSh0LGZ1bmN0aW9uKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbktleUV2ZW50JiZ0Lm9wdGlvbnMub25LZXlFdmVudCh0LEVuKGUpKXx8MTY9PWUua2V5Q29kZSYmKHQuZG9jLnNlbC5zaGlmdD0hMSl9KSksR24obC5pbnB1dCwiaW5wdXQiLGZ1bmN0aW9uKCl7QWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW51bGwpLGZlKHQpfSksR24obC5pbnB1dCwia2V5ZG93biIsbGUodCxXZSkpLEduKGwuaW5wdXQsImtleXByZXNzIixsZSh0LE9lKSksR24obC5pbnB1dCwiZm9jdXMiLGlpKEVlLHQpKSxHbihsLmlucHV0LCJibHVyIixpaSh6ZSx0KSksdC5vcHRpb25zLmRyYWdEcm9wJiYoR24obC5zY3JvbGxlciwiZHJhZ3N0YXJ0IixmdW5jdGlvbihlKXtrZSh0LGUpfSksR24obC5zY3JvbGxlciwiZHJhZ2VudGVyIixpKSxHbihsLnNjcm9sbGVyLCJkcmFnb3ZlciIsaSksR24obC5zY3JvbGxlciwiZHJvcCIsbGUodCxMZSkpKSxHbihsLnNjcm9sbGVyLCJwYXN0ZSIsZnVuY3Rpb24oZSl7dmUobCxlKXx8KHBlKHQpLGZlKHQpKX0pLEduKGwuaW5wdXQsInBhc3RlIixmdW5jdGlvbigpe2lmKFdpJiYhdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYhKG5ldyBEYXRlLXQuc3RhdGUubGFzdE1pZGRsZURvd248MjAwKSl7dmFyIGU9bC5pbnB1dC5zZWxlY3Rpb25TdGFydCxyPWwuaW5wdXQuc2VsZWN0aW9uRW5kO2wuaW5wdXQudmFsdWUrPSIkIixsLmlucHV0LnNlbGVjdGlvblN0YXJ0PWUsbC5pbnB1dC5zZWxlY3Rpb25FbmQ9cix0LnN0YXRlLmZha2VkTGFzdENoYXI9ITB9dC5zdGF0ZS5wYXN0ZUluY29taW5nPSEwLGZlKHQpfSksR24obC5pbnB1dCwiY3V0IixvKSxHbihsLmlucHV0LCJjb3B5IixvKSxGaSYmR24obC5zaXplciwibW91c2V1cCIsZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0JiZsLmlucHV0LmJsdXIoKSxwZSh0KX0pfWZ1bmN0aW9uIHZlKHQsZSl7Zm9yKHZhciByPVJuKGUpO3IhPXQud3JhcHBlcjtyPXIucGFyZW50Tm9kZSlpZighcnx8ci5pZ25vcmVFdmVudHN8fHIucGFyZW50Tm9kZT09dC5zaXplciYmciE9dC5tb3ZlcilyZXR1cm4hMH1mdW5jdGlvbiB5ZSh0LGUscil7dmFyIG49dC5kaXNwbGF5O2lmKCFyKXt2YXIgaT1SbihlKTtpZihpPT1uLnNjcm9sbGJhckh8fGk9PW4uc2Nyb2xsYmFySC5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhclZ8fGk9PW4uc2Nyb2xsYmFyVi5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhckZpbGxlcnx8aT09bi5ndXR0ZXJGaWxsZXIpcmV0dXJuIG51bGx9dmFyIG8sbCxzPWZpKG4ubGluZVNwYWNlKTt0cnl7bz1lLmNsaWVudFgsbD1lLmNsaWVudFl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9cmV0dXJuIHRlKHQsby1zLmxlZnQsbC1zLnRvcCl9ZnVuY3Rpb24gYmUodCl7ZnVuY3Rpb24gZSh0KXtpZighamUodix0KSl7aWYodj10LCJzaW5nbGUiPT1jKXJldHVybiBlcihpLmRvYyxRZShsLGEpLHQpLHZvaWQgMDsKaWYoZz1RZShsLGcpLG09UWUobCxtKSwiZG91YmxlIj09Yyl7dmFyIGU9bXIoZ24obCx0LmxpbmUpLnRleHQsdCk7JGUodCxnKT9lcihpLmRvYyxlLmZyb20sbSk6ZXIoaS5kb2MsZyxlLnRvKX1lbHNlInRyaXBsZSI9PWMmJigkZSh0LGcpP2VyKGkuZG9jLG0sUWUobCxZZSh0LmxpbmUsMCkpKTplcihpLmRvYyxnLFFlKGwsWWUodC5saW5lKzEsMCkpKSl9fWZ1bmN0aW9uIHIodCl7dmFyIG49KytiLHM9eWUoaSx0LCEwKTtpZihzKWlmKGplKHMsaCkpe3ZhciBhPXQuY2xpZW50WTx5LnRvcD8tMjA6dC5jbGllbnRZPnkuYm90dG9tPzIwOjA7YSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmKG8uc2Nyb2xsZXIuc2Nyb2xsVG9wKz1hLHIodCkpfSksNTApfWVsc2V7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKSxoPXMsZShzKTt2YXIgdT1wKG8sbCk7KHMubGluZT49dS50b3x8cy5saW5lPHUuZnJvbSkmJnNldFRpbWVvdXQobGUoaSxmdW5jdGlvbigpe2I9PW4mJnIodCl9KSwxNTApfX1mdW5jdGlvbiBuKHQpe2I9MS8wLHpuKHQpLHBlKGkpLFZuKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLFZuKGRvY3VtZW50LCJtb3VzZXVwIixDKX1pZighWG4odGhpcyx0KSl7dmFyIGk9dGhpcyxvPWkuZGlzcGxheSxsPWkuZG9jLHM9bC5zZWw7aWYocy5zaGlmdD10LnNoaWZ0S2V5LHZlKG8sdCkpcmV0dXJuIFdpfHwoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe28uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwfSwxMDApKSx2b2lkIDA7aWYoIXdlKGksdCkpe3ZhciBhPXllKGksdCk7c3dpdGNoKEJuKHQpKXtjYXNlIDM6cmV0dXJuIFppJiZJZS5jYWxsKGksaSx0KSx2b2lkIDA7Y2FzZSAyOnJldHVybiBXaSYmKGkuc3RhdGUubGFzdE1pZGRsZURvd249K25ldyBEYXRlKSxhJiZlcihpLmRvYyxhKSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx6bih0KSx2b2lkIDB9aWYoIWEpcmV0dXJuIFJuKHQpPT1vLnNjcm9sbGVyJiZ6bih0KSx2b2lkIDA7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKTt2YXIgdT0rbmV3IERhdGUsYz0ic2luZ2xlIjtpZihqaSYmamkudGltZT51LTQwMCYmamUoamkucG9zLGEpKWM9InRyaXBsZSIsem4odCksc2V0VGltZW91dChpaShwZSxpKSwyMCksdnIoaSxhLmxpbmUpO2Vsc2UgaWYoWWkmJllpLnRpbWU+dS00MDAmJmplKFlpLnBvcyxhKSl7Yz0iZG91YmxlIixqaT17dGltZTp1LHBvczphfSx6bih0KTt2YXIgZj1tcihnbihsLGEubGluZSkudGV4dCxhKTtlcihpLmRvYyxmLmZyb20sZi50byl9ZWxzZSBZaT17dGltZTp1LHBvczphfTt2YXIgaD1hO2lmKGkub3B0aW9ucy5kcmFnRHJvcCYmV28mJiFnZShpKSYmIWplKHMuZnJvbSxzLnRvKSYmISRlKGEscy5mcm9tKSYmISRlKHMudG8sYSkmJiJzaW5nbGUiPT1jKXt2YXIgZD1sZShpLGZ1bmN0aW9uKGUpe1dpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEpLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PSExLFZuKGRvY3VtZW50LCJtb3VzZXVwIixkKSxWbihvLnNjcm9sbGVyLCJkcm9wIixkKSxNYXRoLmFicyh0LmNsaWVudFgtZS5jbGllbnRYKStNYXRoLmFicyh0LmNsaWVudFktZS5jbGllbnRZKTwxMCYmKHpuKGUpLGVyKGkuZG9jLGEpLHBlKGkpKX0pO3JldHVybiBXaSYmKG8uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwKSxpLnN0YXRlLmRyYWdnaW5nVGV4dD1kLG8uc2Nyb2xsZXIuZHJhZ0Ryb3AmJm8uc2Nyb2xsZXIuZHJhZ0Ryb3AoKSxHbihkb2N1bWVudCwibW91c2V1cCIsZCksR24oby5zY3JvbGxlciwiZHJvcCIsZCksdm9pZCAwfXpuKHQpLCJzaW5nbGUiPT1jJiZlcihpLmRvYyxRZShsLGEpKTt2YXIgZz1zLmZyb20sbT1zLnRvLHY9YSx5PWZpKG8ud3JhcHBlciksYj0wLHg9bGUoaSxmdW5jdGlvbih0KXtBaXx8Qm4odCk/cih0KTpuKHQpfSksQz1sZShpLG4pO0duKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixDKX19fWZ1bmN0aW9uIHhlKHQsZSxyLG4saSl7dHJ5e3ZhciBvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4hMX1pZihvPj1NYXRoLmZsb29yKGZpKHQuZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpcmV0dXJuITE7biYmem4oZSk7dmFyIHM9dC5kaXNwbGF5LGE9Zmkocy5saW5lRGl2KTtpZihsPmEuYm90dG9tfHwhWW4odCxyKSlyZXR1cm4gRm4oZSk7bC09YS50b3Atcy52aWV3T2Zmc2V0O2Zvcih2YXIgdT0wO3U8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysrdSl7dmFyIGM9cy5ndXR0ZXJzLmNoaWxkTm9kZXNbdV07aWYoYyYmZmkoYykucmlnaHQ+PW8pe3ZhciBmPXhuKHQuZG9jLGwpLGg9dC5vcHRpb25zLmd1dHRlcnNbdV07cmV0dXJuIGkodCxyLHQsZixoLGUpLEZuKGUpfX19ZnVuY3Rpb24gQ2UodCxlKXtyZXR1cm4gWW4odCwiZ3V0dGVyQ29udGV4dE1lbnUiKT94ZSh0LGUsImd1dHRlckNvbnRleHRNZW51IiwhMSxLbik6ITF9ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4geGUodCxlLCJndXR0ZXJDbGljayIsITAsVW4pfWZ1bmN0aW9uIExlKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHx2ZShlLmRpc3BsYXksdCl8fGUub3B0aW9ucy5vbkRyYWdFdmVudCYmZS5vcHRpb25zLm9uRHJhZ0V2ZW50KGUsRW4odCkpKSl7em4odCksQWkmJih0bz0rbmV3IERhdGUpO3ZhciByPXllKGUsdCwhMCksbj10LmRhdGFUcmFuc2Zlci5maWxlcztpZihyJiYhZ2UoZSkpaWYobiYmbi5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIGk9bi5sZW5ndGgsbz1BcnJheShpKSxsPTAscz1mdW5jdGlvbih0LG4pe3ZhciBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPWZ1bmN0aW9uKCl7b1tuXT1zLnJlc3VsdCwrK2w9PWkmJihyPVFlKGUuZG9jLHIpLEJlKGUuZG9jLHtmcm9tOnIsdG86cix0ZXh0OnpvKG8uam9pbigiXG4iKSksb3JpZ2luOiJwYXN0ZSJ9LCJhcm91bmQiKSl9LHMucmVhZEFzVGV4dCh0KX0sYT0wO2k+YTsrK2EpcyhuW2FdLGEpO2Vsc2V7aWYoZS5zdGF0ZS5kcmFnZ2luZ1RleHQmJiEkZShyLGUuZG9jLnNlbC5mcm9tKSYmISRlKGUuZG9jLnNlbC50byxyKSlyZXR1cm4gZS5zdGF0ZS5kcmFnZ2luZ1RleHQodCksc2V0VGltZW91dChpaShwZSxlKSwyMCksdm9pZCAwO3RyeXt2YXIgbz10LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7aWYobyl7dmFyIHU9ZS5kb2Muc2VsLmZyb20sYz1lLmRvYy5zZWwudG87bnIoZS5kb2MscixyKSxlLnN0YXRlLmRyYWdnaW5nVGV4dCYmX2UoZS5kb2MsIiIsdSxjLCJwYXN0ZSIpLGUucmVwbGFjZVNlbGVjdGlvbihvLG51bGwsInBhc3RlIikscGUoZSl9fWNhdGNoKHQpe319fX1mdW5jdGlvbiBrZSh0LGUpe2lmKEFpJiYoIXQuc3RhdGUuZHJhZ2dpbmdUZXh0fHwrbmV3IERhdGUtdG88MTAwKSlyZXR1cm4gUG4oZSksdm9pZCAwO2lmKCFYbih0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt2YXIgcj10LmdldFNlbGVjdGlvbigpO2lmKGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLHIpLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSYmIUlpKXt2YXIgbj1zaSgiaW1nIixudWxsLG51bGwsInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyIpO24uc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSIsemkmJihuLndpZHRoPW4uaGVpZ2h0PTEsdC5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQobiksbi5fdG9wPW4ub2Zmc2V0VG9wKSxlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UobiwwLDApLHppJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9fX1mdW5jdGlvbiBTZSh0LGUpe01hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1lKTwyfHwodC5kb2Muc2Nyb2xsVG9wPWUsVGl8fGIodCxbXSxlKSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT1lJiYodC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ZSksVGkmJmIodCxbXSksVyh0LDEwMCkpfWZ1bmN0aW9uIE1lKHQsZSxyKXsocj9lPT10LmRvYy5zY3JvbGxMZWZ0Ok1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtZSk8Mil8fChlPU1hdGgubWluKGUsdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoLXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCksdC5kb2Muc2Nyb2xsTGVmdD1lLGcodCksdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0IT1lJiYodC5kaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdD1lKSl9ZnVuY3Rpb24gVGUodCxlKXt2YXIgcj1lLndoZWVsRGVsdGFYLG49ZS53aGVlbERlbHRhWTtudWxsPT1yJiZlLmRldGFpbCYmZS5heGlzPT1lLkhPUklaT05UQUxfQVhJUyYmKHI9ZS5kZXRhaWwpLG51bGw9PW4mJmUuZGV0YWlsJiZlLmF4aXM9PWUuVkVSVElDQUxfQVhJUz9uPWUuZGV0YWlsOm51bGw9PW4mJihuPWUud2hlZWxEZWx0YSk7dmFyIGk9dC5kaXNwbGF5LG89aS5zY3JvbGxlcjtpZihyJiZvLnNjcm9sbFdpZHRoPm8uY2xpZW50V2lkdGh8fG4mJm8uc2Nyb2xsSGVpZ2h0Pm8uY2xpZW50SGVpZ2h0KXtpZihuJiZLaSYmV2kpZm9yKHZhciBsPWUudGFyZ2V0O2whPW87bD1sLnBhcmVudE5vZGUpaWYobC5saW5lT2JqKXt0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PWw7YnJlYWt9aWYociYmIVRpJiYhemkmJm51bGwhPXJvKXJldHVybiBuJiZTZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxUb3ArbipybyxvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodCkpKSxNZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxMZWZ0K3Iqcm8sby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoKSkpLHpuKGUpLGkud2hlZWxTdGFydFg9bnVsbCx2b2lkIDA7aWYobiYmbnVsbCE9cm8pe3ZhciBzPW4qcm8sYT10LmRvYy5zY3JvbGxUb3AsdT1hK2kud3JhcHBlci5jbGllbnRIZWlnaHQ7MD5zP2E9TWF0aC5tYXgoMCxhK3MtNTApOnU9TWF0aC5taW4odC5kb2MuaGVpZ2h0LHUrcys1MCksYih0LFtdLHt0b3A6YSxib3R0b206dX0pfTIwPmVvJiYobnVsbD09aS53aGVlbFN0YXJ0WD8oaS53aGVlbFN0YXJ0WD1vLnNjcm9sbExlZnQsaS53aGVlbFN0YXJ0WT1vLnNjcm9sbFRvcCxpLndoZWVsRFg9cixpLndoZWVsRFk9bixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYobnVsbCE9aS53aGVlbFN0YXJ0WCl7dmFyIHQ9by5zY3JvbGxMZWZ0LWkud2hlZWxTdGFydFgsZT1vLnNjcm9sbFRvcC1pLndoZWVsU3RhcnRZLHI9ZSYmaS53aGVlbERZJiZlL2kud2hlZWxEWXx8dCYmaS53aGVlbERYJiZ0L2kud2hlZWxEWDtpLndoZWVsU3RhcnRYPWkud2hlZWxTdGFydFk9bnVsbCxyJiYocm89KHJvKmVvK3IpLyhlbysxKSwrK2VvKX19LDIwMCkpOihpLndoZWVsRFgrPXIsaS53aGVlbERZKz1uKSl9fWZ1bmN0aW9uIEFlKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPW1vW2VdLCFlKSlyZXR1cm4hMTt0LmRpc3BsYXkucG9sbGluZ0Zhc3QmJmhlKHQpJiYodC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExKTt2YXIgbj10LmRvYyxpPW4uc2VsLnNoaWZ0LG89ITE7dHJ5e2dlKHQpJiYodC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSEwKSxyJiYobi5zZWwuc2hpZnQ9ITEpLG89ZSh0KSE9QW99ZmluYWxseXtuLnNlbC5zaGlmdD1pLHQuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gb31mdW5jdGlvbiBIZSh0KXt2YXIgZT10LnN0YXRlLmtleU1hcHMuc2xpY2UoMCk7cmV0dXJuIHQub3B0aW9ucy5leHRyYUtleXMmJmUucHVzaCh0Lm9wdGlvbnMuZXh0cmFLZXlzKSxlLnB1c2godC5vcHRpb25zLmtleU1hcCksZX1mdW5jdGlvbiBOZSh0LGUpe3ZhciByPUNyKHQub3B0aW9ucy5rZXlNYXApLG49ci5hdXRvO2NsZWFyVGltZW91dChubyksbiYmIUxyKGUpJiYobm89c2V0VGltZW91dChmdW5jdGlvbigpe0NyKHQub3B0aW9ucy5rZXlNYXApPT1yJiYodC5vcHRpb25zLmtleU1hcD1uLmNhbGw/bi5jYWxsKG51bGwsdCk6bixsKHQpKX0sNTApKTt2YXIgaT1rcihlLCEwKSxvPSExO2lmKCFpKXJldHVybiExO3ZhciBzPUhlKHQpO3JldHVybiBvPWUuc2hpZnRLZXk/d3IoIlNoaWZ0LSIraSxzLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSl8fHdyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiBlPy9eZ29bQS1aXS8udGVzdChlKTplLm1vdGlvbik/QWUodCxlKTp2b2lkIDB9KTp3cihpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSl9KSxvJiYoem4oZSksRCh0KSxOaSYmKGUub2xkS2V5Q29kZT1lLmtleUNvZGUsZS5rZXlDb2RlPTApLFVuKHQsImtleUhhbmRsZWQiLHQsaSxlKSksb31mdW5jdGlvbiBEZSh0LGUscil7dmFyIG49d3IoIiciK3IrIiciLEhlKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSk7cmV0dXJuIG4mJih6bihlKSxEKHQpLFVuKHQsImtleUhhbmRsZWQiLHQsIiciK3IrIiciLGUpKSxufWZ1bmN0aW9uIFdlKHQpe3ZhciBlPXRoaXM7aWYoZS5zdGF0ZS5mb2N1c2VkfHxFZShlKSwhKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe0FpJiYyNz09dC5rZXlDb2RlJiYodC5yZXR1cm5WYWx1ZT0hMSk7dmFyIHI9dC5rZXlDb2RlO2UuZG9jLnNlbC5zaGlmdD0xNj09cnx8dC5zaGlmdEtleTt2YXIgbj1OZShlLHQpO3ppJiYob289bj9yOm51bGwsIW4mJjg4PT1yJiYhRm8mJihLaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmZS5yZXBsYWNlU2VsZWN0aW9uKCIiKSl9fWZ1bmN0aW9uIE9lKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHxlLm9wdGlvbnMub25LZXlFdmVudCYmZS5vcHRpb25zLm9uS2V5RXZlbnQoZSxFbih0KSkpKXt2YXIgcj10LmtleUNvZGUsbj10LmNoYXJDb2RlO2lmKHppJiZyPT1vbylyZXR1cm4gb289bnVsbCx6bih0KSx2b2lkIDA7aWYoISh6aSYmKCF0LndoaWNofHx0LndoaWNoPDEwKXx8RmkpfHwhTmUoZSx0KSl7dmFyIGk9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1uP3I6bik7dGhpcy5vcHRpb25zLmVsZWN0cmljQ2hhcnMmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycyYmdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50JiYhZ2UodGhpcykmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGkpPi0xJiZzZXRUaW1lb3V0KGxlKGUsZnVuY3Rpb24oKXtocihlLGUuZG9jLnNlbC50by5saW5lLCJzbWFydCIpfSksNzUpLERlKGUsdCxpKXx8KEFpJiYhTmkmJihlLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUoZSkpfX19ZnVuY3Rpb24gRWUodCl7Im5vY3Vyc29yIiE9dC5vcHRpb25zLnJlYWRPbmx5JiYodC5zdGF0ZS5mb2N1c2VkfHwoS24odCwiZm9jdXMiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMCwtMT09dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pJiYodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3ItZm9jdXNlZCIpLHQuY3VyT3B8fChkZSh0LCEwKSxXaSYmc2V0VGltZW91dChpaShkZSx0LCEwKSwwKSkpLGNlKHQpLEQodCkpfWZ1bmN0aW9uIHplKHQpe3Quc3RhdGUuZm9jdXNlZCYmKEtuKHQsImJsdXIiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMSx0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCIiKSksY2xlYXJJbnRlcnZhbCh0LmRpc3BsYXkuYmxpbmtlciksc2V0VGltZW91dChmdW5jdGlvbigpe3Quc3RhdGUuZm9jdXNlZHx8KHQuZG9jLnNlbC5zaGlmdD0hMSl9LDE1MCl9ZnVuY3Rpb24gSWUodCxlKXtmdW5jdGlvbiByKCl7aWYobnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7dmFyIHQ9aS5pbnB1dC52YWx1ZT0i4oCLIisoamUoby5mcm9tLG8udG8pPyIiOmkuaW5wdXQudmFsdWUpO2kucHJldklucHV0PSLigIsiLGkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9MSxpLmlucHV0LnNlbGVjdGlvbkVuZD10Lmxlbmd0aH19ZnVuY3Rpb24gbigpe2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9dSxOaSYmKGkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9aS5zY3JvbGxlci5zY3JvbGxUb3A9cyksY2UodCksbnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7KCFBaXx8TmkpJiZyKCksY2xlYXJUaW1lb3V0KGlvKTt2YXIgZT0wLG49ZnVuY3Rpb24oKXsiICI9PWkucHJldklucHV0JiYwPT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0P2xlKHQsbW8uc2VsZWN0QWxsKSh0KTplKys8MTA/aW89c2V0VGltZW91dChuLDUwMCk6ZGUodCl9O2lvPXNldFRpbWVvdXQobiwyMDApfX1pZighWG4odCxlLCJjb250ZXh0bWVudSIpKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYy5zZWw7aWYoIXZlKGksZSkmJiFDZSh0LGUpKXt2YXIgbD15ZSh0LGUpLHM9aS5zY3JvbGxlci5zY3JvbGxUb3A7aWYobCYmIXppKXt2YXIgYT10Lm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51O2EmJihqZShvLmZyb20sby50byl8fCRlKGwsby5mcm9tKXx8ISRlKGwsby50bykpJiZsZSh0LG5yKSh0LmRvYyxsLGwpO3ZhciB1PWkuaW5wdXQuc3R5bGUuY3NzVGV4dDtpZihpLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5pbnB1dC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIisoZS5jbGllbnRZLTUpKyJweDsgbGVmdDogIisoZS5jbGllbnRYLTUpKyJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogd2hpdGU7IG91dGxpbmU6IG5vbmU7IisiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IC1tcy1vcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTsiLHBlKHQpLGRlKHQsITApLGplKG8uZnJvbSxvLnRvKSYmKGkuaW5wdXQudmFsdWU9aS5wcmV2SW5wdXQ9IiAiKSxBaSYmIU5pJiZyKCksWmkpe1BuKGUpO3ZhciBjPWZ1bmN0aW9uKCl7Vm4od2luZG93LCJtb3VzZXVwIixjKSxzZXRUaW1lb3V0KG4sMjApfTtHbih3aW5kb3csIm1vdXNldXAiLGMpfWVsc2Ugc2V0VGltZW91dChuLDUwKX19fX1mdW5jdGlvbiBGZSh0LGUscil7aWYoISRlKGUuZnJvbSxyKSlyZXR1cm4gUWUodCxyKTt2YXIgbj1lLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSk7aWYoci5saW5lPmUudG8ubGluZStuKXt2YXIgaT1yLmxpbmUtbixvPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGk+bz9ZZShvLGduKHQsbykudGV4dC5sZW5ndGgpOkplKHIsZ24odCxpKS50ZXh0Lmxlbmd0aCl9aWYoci5saW5lPT1lLnRvLmxpbmUrbilyZXR1cm4gSmUocixRbihlLnRleHQpLmxlbmd0aCsoMT09ZS50ZXh0Lmxlbmd0aD9lLmZyb20uY2g6MCkrZ24odCxlLnRvLmxpbmUpLnRleHQubGVuZ3RoLWUudG8uY2gpO3ZhciBsPXIubGluZS1lLmZyb20ubGluZTtyZXR1cm4gSmUocixlLnRleHRbbF0ubGVuZ3RoKyhsPzA6ZS5mcm9tLmNoKSl9ZnVuY3Rpb24gUGUodCxlLHIpe2lmKHImJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm57YW5jaG9yOkZlKHQsZSxyLmFuY2hvciksaGVhZDpGZSh0LGUsci5oZWFkKX07aWYoInN0YXJ0Ij09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOmUuZnJvbX07dmFyIG49bG8oZSk7aWYoImFyb3VuZCI9PXIpcmV0dXJue2FuY2hvcjplLmZyb20saGVhZDpufTtpZigiZW5kIj09cilyZXR1cm57YW5jaG9yOm4saGVhZDpufTt2YXIgaT1mdW5jdGlvbih0KXtpZigkZSh0LGUuZnJvbSkpcmV0dXJuIHQ7aWYoISRlKGUudG8sdCkpcmV0dXJuIG47dmFyIHI9dC5saW5lK2UudGV4dC5sZW5ndGgtKGUudG8ubGluZS1lLmZyb20ubGluZSktMSxpPXQuY2g7cmV0dXJuIHQubGluZT09ZS50by5saW5lJiYoaSs9bi5jaC1lLnRvLmNoKSxZZShyLGkpfTtyZXR1cm57YW5jaG9yOmkodC5zZWwuYW5jaG9yKSxoZWFkOmkodC5zZWwuaGVhZCl9fWZ1bmN0aW9uIFJlKHQsZSxyKXt2YXIgbj17Y2FuY2VsZWQ6ITEsZnJvbTplLmZyb20sdG86ZS50byx0ZXh0OmUudGV4dCxvcmlnaW46ZS5vcmlnaW4sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxlZD0hMH19O3JldHVybiByJiYobi51cGRhdGU9ZnVuY3Rpb24oZSxyLG4saSl7ZSYmKHRoaXMuZnJvbT1RZSh0LGUpKSxyJiYodGhpcy50bz1RZSh0LHIpKSxuJiYodGhpcy50ZXh0PW4pLHZvaWQgMCE9PWkmJih0aGlzLm9yaWdpbj1pKX0pLEtuKHQsImJlZm9yZUNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVDaGFuZ2UiLHQuY20sbiksbi5jYW5jZWxlZD9udWxsOntmcm9tOm4uZnJvbSx0bzpuLnRvLHRleHQ6bi50ZXh0LG9yaWdpbjpuLm9yaWdpbn19ZnVuY3Rpb24gQmUodCxlLHIsbil7aWYodC5jbSl7aWYoIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sQmUpKHQsZSxyLG4pO2lmKHQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cylyZXR1cm59aWYoIShZbih0LCJiZWZvcmVDaGFuZ2UiKXx8dC5jbSYmWW4odC5jbSwiYmVmb3JlQ2hhbmdlIikpfHwoZT1SZSh0LGUsITApKSl7dmFyIGk9cWkmJiFuJiZGcih0LGUuZnJvbSxlLnRvKTtpZihpKXtmb3IodmFyIG89aS5sZW5ndGgtMTtvPj0xOy0tbylHZSh0LHtmcm9tOmlbb10uZnJvbSx0bzppW29dLnRvLHRleHQ6WyIiXX0pO2kubGVuZ3RoJiZHZSh0LHtmcm9tOmlbMF0uZnJvbSx0bzppWzBdLnRvLHRleHQ6ZS50ZXh0fSxyKX1lbHNlIEdlKHQsZSxyKX19ZnVuY3Rpb24gR2UodCxlLHIpe2lmKDEhPWUudGV4dC5sZW5ndGh8fCIiIT1lLnRleHRbMF18fCFqZShlLmZyb20sZS50bykpe3ZhciBuPVBlKHQsZSxyKTtNbih0LGUsbix0LmNtP3QuY20uY3VyT3AuaWQ6MC8wKSxVZSh0LGUsbix6cih0LGUpKTt2YXIgaT1bXTtkbih0LGZ1bmN0aW9uKHQscil7cnx8LTEhPXRpKGksdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxlKSxpLnB1c2godC5oaXN0b3J5KSksVWUodCxlLG51bGwsenIodCxlKSl9KX19ZnVuY3Rpb24gVmUodCxlKXtpZighdC5jbXx8IXQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cyl7dmFyIHI9dC5oaXN0b3J5LG49KCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLnBvcCgpO2lmKG4pe3ZhciBpPXtjaGFuZ2VzOltdLGFuY2hvckJlZm9yZTpuLmFuY2hvckFmdGVyLGhlYWRCZWZvcmU6bi5oZWFkQWZ0ZXIsYW5jaG9yQWZ0ZXI6bi5hbmNob3JCZWZvcmUsaGVhZEFmdGVyOm4uaGVhZEJlZm9yZSxnZW5lcmF0aW9uOnIuZ2VuZXJhdGlvbn07KCJ1bmRvIj09ZT9yLnVuZG9uZTpyLmRvbmUpLnB1c2goaSksci5nZW5lcmF0aW9uPW4uZ2VuZXJhdGlvbnx8KytyLm1heEdlbmVyYXRpb247Zm9yKHZhciBvPVluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSxsPW4uY2hhbmdlcy5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHM9bi5jaGFuZ2VzW2xdO2lmKHMub3JpZ2luPWUsbyYmIVJlKHQscywhMSkpcmV0dXJuKCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLmxlbmd0aD0wLHZvaWQgMDtpLmNoYW5nZXMucHVzaChTbih0LHMpKTt2YXIgYT1sP1BlKHQscyxudWxsKTp7YW5jaG9yOm4uYW5jaG9yQmVmb3JlLGhlYWQ6bi5oZWFkQmVmb3JlfTtVZSh0LHMsYSxJcih0LHMpKTt2YXIgdT1bXTtkbih0LGZ1bmN0aW9uKHQsZSl7ZXx8LTEhPXRpKHUsdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxzKSx1LnB1c2godC5oaXN0b3J5KSksVWUodCxzLG51bGwsSXIodCxzKSl9KX19fX1mdW5jdGlvbiBLZSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIFllKHQubGluZStlLHQuY2gpfXQuZmlyc3QrPWUsdC5jbSYmdWUodC5jbSx0LmZpcnN0LHQuZmlyc3QsZSksdC5zZWwuaGVhZD1yKHQuc2VsLmhlYWQpLHQuc2VsLmFuY2hvcj1yKHQuc2VsLmFuY2hvciksdC5zZWwuZnJvbT1yKHQuc2VsLmZyb20pLHQuc2VsLnRvPXIodC5zZWwudG8pfWZ1bmN0aW9uIFVlKHQsZSxyLG4pe2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFVlKSh0LGUscixuKTtpZihlLnRvLmxpbmU8dC5maXJzdClyZXR1cm4gS2UodCxlLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSkpLHZvaWQgMDtpZighKGUuZnJvbS5saW5lPnQubGFzdExpbmUoKSkpe2lmKGUuZnJvbS5saW5lPHQuZmlyc3Qpe3ZhciBpPWUudGV4dC5sZW5ndGgtMS0odC5maXJzdC1lLmZyb20ubGluZSk7S2UodCxpKSxlPXtmcm9tOlllKHQuZmlyc3QsMCksdG86WWUoZS50by5saW5lK2ksZS50by5jaCksdGV4dDpbUW4oZS50ZXh0KV0sb3JpZ2luOmUub3JpZ2lufX12YXIgbz10Lmxhc3RMaW5lKCk7ZS50by5saW5lPm8mJihlPXtmcm9tOmUuZnJvbSx0bzpZZShvLGduKHQsbykudGV4dC5sZW5ndGgpLHRleHQ6W2UudGV4dFswXV0sb3JpZ2luOmUub3JpZ2lufSksZS5yZW1vdmVkPW1uKHQsZS5mcm9tLGUudG8pLHJ8fChyPVBlKHQsZSxudWxsKSksdC5jbT9YZSh0LmNtLGUsbixyKTpjbih0LGUsbixyKX19ZnVuY3Rpb24gWGUodCxlLHIsbil7dmFyIG89dC5kb2MsbD10LmRpc3BsYXkscz1lLmZyb20sYT1lLnRvLHU9ITEsZj1zLmxpbmU7dC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGY9Ym4oR3IobyxnbihvLHMubGluZSkpKSxvLml0ZXIoZixhLmxpbmUrMSxmdW5jdGlvbih0KXtyZXR1cm4gdD09bC5tYXhMaW5lPyh1PSEwLCEwKTp2b2lkIDB9KSksJGUoby5zZWwuaGVhZCxlLmZyb20pfHwkZShlLnRvLG8uc2VsLmhlYWQpfHwodC5jdXJPcC5jdXJzb3JBY3Rpdml0eT0hMCksY24obyxlLHIsbixpKHQpKSx0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoby5pdGVyKGYscy5saW5lK2UudGV4dC5sZW5ndGgsZnVuY3Rpb24odCl7dmFyIGU9YyhvLHQpO2U+bC5tYXhMaW5lTGVuZ3RoJiYobC5tYXhMaW5lPXQsbC5tYXhMaW5lTGVuZ3RoPWUsbC5tYXhMaW5lQ2hhbmdlZD0hMCx1PSExKX0pLHUmJih0LmN1ck9wLnVwZGF0ZU1heExpbmU9ITApKSxvLmZyb250aWVyPU1hdGgubWluKG8uZnJvbnRpZXIscy5saW5lKSxXKHQsNDAwKTt2YXIgaD1lLnRleHQubGVuZ3RoLShhLmxpbmUtcy5saW5lKS0xO2lmKHVlKHQscy5saW5lLGEubGluZSsxLGgpLFluKHQsImNoYW5nZSIpKXt2YXIgZD17ZnJvbTpzLHRvOmEsdGV4dDplLnRleHQscmVtb3ZlZDplLnJlbW92ZWQsb3JpZ2luOmUub3JpZ2lufTtpZih0LmN1ck9wLnRleHRDaGFuZ2VkKXtmb3IodmFyIHA9dC5jdXJPcC50ZXh0Q2hhbmdlZDtwLm5leHQ7cD1wLm5leHQpO3AubmV4dD1kfWVsc2UgdC5jdXJPcC50ZXh0Q2hhbmdlZD1kfX1mdW5jdGlvbiBfZSh0LGUscixuLGkpe2lmKG58fChuPXIpLCRlKG4scikpe3ZhciBvPW47bj1yLHI9b30ic3RyaW5nIj09dHlwZW9mIGUmJihlPXpvKGUpKSxCZSh0LHtmcm9tOnIsdG86bix0ZXh0OmUsb3JpZ2luOml9LG51bGwpfWZ1bmN0aW9uIFllKHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBZZT8odGhpcy5saW5lPXQsdGhpcy5jaD1lLHZvaWQgMCk6bmV3IFllKHQsZSl9ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gdC5saW5lPT1lLmxpbmUmJnQuY2g9PWUuY2h9ZnVuY3Rpb24gJGUodCxlKXtyZXR1cm4gdC5saW5lPGUubGluZXx8dC5saW5lPT1lLmxpbmUmJnQuY2g8ZS5jaH1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gWWUodC5saW5lLHQuY2gpfWZ1bmN0aW9uIHFlKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQuZmlyc3QsTWF0aC5taW4oZSx0LmZpcnN0K3Quc2l6ZS0xKSl9ZnVuY3Rpb24gUWUodCxlKXtpZihlLmxpbmU8dC5maXJzdClyZXR1cm4gWWUodC5maXJzdCwwKTt2YXIgcj10LmZpcnN0K3Quc2l6ZS0xO3JldHVybiBlLmxpbmU+cj9ZZShyLGduKHQscikudGV4dC5sZW5ndGgpOkplKGUsZ24odCxlLmxpbmUpLnRleHQubGVuZ3RoKX1mdW5jdGlvbiBKZSh0LGUpe3ZhciByPXQuY2g7cmV0dXJuIG51bGw9PXJ8fHI+ZT9ZZSh0LmxpbmUsZSk6MD5yP1llKHQubGluZSwwKTp0fWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJuIGU+PXQuZmlyc3QmJmU8dC5maXJzdCt0LnNpemV9ZnVuY3Rpb24gZXIodCxlLHIsbil7aWYodC5zZWwuc2hpZnR8fHQuc2VsLmV4dGVuZCl7dmFyIGk9dC5zZWwuYW5jaG9yO2lmKHIpe3ZhciBvPSRlKGUsaSk7byE9JGUocixpKT8oaT1lLGU9cik6byE9JGUoZSxyKSYmKGU9cil9bnIodCxpLGUsbil9ZWxzZSBucih0LGUscnx8ZSxuKTt0LmNtJiYodC5jbS5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwKX1mdW5jdGlvbiBycih0LGUscil7dmFyIG49e2FuY2hvcjplLGhlYWQ6cn07cmV0dXJuIEtuKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLHQuY20sbiksbi5hbmNob3I9UWUodCxuLmFuY2hvciksbi5oZWFkPVFlKHQsbi5oZWFkKSxufWZ1bmN0aW9uIG5yKHQsZSxyLG4saSl7aWYoIWkmJlluKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSl7dmFyIG89cnIodCxlLHIpO3I9by5oZWFkLGU9by5hbmNob3J9dmFyIGw9dC5zZWw7aWYobC5nb2FsQ29sdW1uPW51bGwsbnVsbD09biYmKG49JGUocixsLmhlYWQpPy0xOjEpLChpfHwhamUoZSxsLmFuY2hvcikpJiYoZT1vcih0LGUsbiwicHVzaCIhPWkpKSwoaXx8IWplKHIsbC5oZWFkKSkmJihyPW9yKHQscixuLCJwdXNoIiE9aSkpLCFqZShsLmFuY2hvcixlKXx8IWplKGwuaGVhZCxyKSl7bC5hbmNob3I9ZSxsLmhlYWQ9cjt2YXIgcz0kZShyLGUpO2wuZnJvbT1zP3I6ZSxsLnRvPXM/ZTpyLHQuY20mJih0LmNtLmN1ck9wLnVwZGF0ZUlucHV0PXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD10LmNtLmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxVbih0LCJjdXJzb3JBY3Rpdml0eSIsdCl9fWZ1bmN0aW9uIGlyKHQpe25yKHQuZG9jLHQuZG9jLnNlbC5mcm9tLHQuZG9jLnNlbC50byxudWxsLCJwdXNoIil9ZnVuY3Rpb24gb3IodCxlLHIsbil7dmFyIGk9ITEsbz1lLGw9cnx8MTt0LmNhbnRFZGl0PSExO3Q6Zm9yKDs7KXt2YXIgcz1nbih0LG8ubGluZSk7aWYocy5tYXJrZWRTcGFucylmb3IodmFyIGE9MDthPHMubWFya2VkU3BhbnMubGVuZ3RoOysrYSl7dmFyIHU9cy5tYXJrZWRTcGFuc1thXSxjPXUubWFya2VyO2lmKChudWxsPT11LmZyb218fChjLmluY2x1c2l2ZUxlZnQ/dS5mcm9tPD1vLmNoOnUuZnJvbTxvLmNoKSkmJihudWxsPT11LnRvfHwoYy5pbmNsdXNpdmVSaWdodD91LnRvPj1vLmNoOnUudG8+by5jaCkpKXtpZihuJiYoS24oYywiYmVmb3JlQ3Vyc29yRW50ZXIiKSxjLmV4cGxpY2l0bHlDbGVhcmVkKSl7aWYocy5tYXJrZWRTcGFucyl7LS1hO2NvbnRpbnVlfWJyZWFrfWlmKCFjLmF0b21pYyljb250aW51ZTt2YXIgZj1jLmZpbmQoKVswPmw/ImZyb20iOiJ0byJdO2lmKGplKGYsbykmJihmLmNoKz1sLGYuY2g8MD9mPWYubGluZT50LmZpcnN0P1FlKHQsWWUoZi5saW5lLTEpKTpudWxsOmYuY2g+cy50ZXh0Lmxlbmd0aCYmKGY9Zi5saW5lPHQuZmlyc3QrdC5zaXplLTE/WWUoZi5saW5lKzEsMCk6bnVsbCksIWYpKXtpZihpKXJldHVybiBuPyh0LmNhbnRFZGl0PSEwLFllKHQuZmlyc3QsMCkpOm9yKHQsZSxyLCEwKTtpPSEwLGY9ZSxsPS1sfW89Zjtjb250aW51ZSB0fX1yZXR1cm4gb319ZnVuY3Rpb24gbHIodCl7dmFyIGU9c3IodCx0LmRvYy5zZWwuaGVhZCxudWxsLHQub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pO2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIHI9dC5kaXNwbGF5LG49Zmkoci5zaXplciksaT1udWxsO2lmKGUudG9wK24udG9wPDA/aT0hMDplLmJvdHRvbStuLnRvcD4od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmKGk9ITEpLG51bGwhPWkmJiFCaSl7dmFyIG89Im5vbmUiPT1yLmN1cnNvci5zdHlsZS5kaXNwbGF5O28mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLHIuY3Vyc29yLnN0eWxlLmxlZnQ9ZS5sZWZ0KyJweCIsci5jdXJzb3Iuc3R5bGUudG9wPWUudG9wLXIudmlld09mZnNldCsicHgiKSxyLmN1cnNvci5zY3JvbGxJbnRvVmlldyhpKSxvJiYoci5jdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19ZnVuY3Rpb24gc3IodCxlLHIsbil7Zm9yKG51bGw9PW4mJihuPTApOzspe3ZhciBpPSExLG89USh0LGUpLGw9ciYmciE9ZT9RKHQscik6byxzPXVyKHQsTWF0aC5taW4oby5sZWZ0LGwubGVmdCksTWF0aC5taW4oby50b3AsbC50b3ApLW4sTWF0aC5tYXgoby5sZWZ0LGwubGVmdCksTWF0aC5tYXgoby5ib3R0b20sbC5ib3R0b20pK24pLGE9dC5kb2Muc2Nyb2xsVG9wLHU9dC5kb2Muc2Nyb2xsTGVmdDtpZihudWxsIT1zLnNjcm9sbFRvcCYmKFNlKHQscy5zY3JvbGxUb3ApLE1hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1hKT4xJiYoaT0hMCkpLG51bGwhPXMuc2Nyb2xsTGVmdCYmKE1lKHQscy5zY3JvbGxMZWZ0KSxNYXRoLmFicyh0LmRvYy5zY3JvbGxMZWZ0LXUpPjEmJihpPSEwKSksIWkpcmV0dXJuIG99fWZ1bmN0aW9uIGFyKHQsZSxyLG4saSl7dmFyIG89dXIodCxlLHIsbixpKTtudWxsIT1vLnNjcm9sbFRvcCYmU2UodCxvLnNjcm9sbFRvcCksbnVsbCE9by5zY3JvbGxMZWZ0JiZNZSh0LG8uc2Nyb2xsTGVmdCl9ZnVuY3Rpb24gdXIodCxlLHIsbixpKXt2YXIgbz10LmRpc3BsYXksbD1yZSh0LmRpc3BsYXkpOzA+ciYmKHI9MCk7dmFyIHM9by5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8sYT1vLnNjcm9sbGVyLnNjcm9sbFRvcCx1PXt9LGM9dC5kb2MuaGVpZ2h0K0YobyksZj1sPnIsaD1pPmMtbDtpZihhPnIpdS5zY3JvbGxUb3A9Zj8wOnI7ZWxzZSBpZihpPmErcyl7dmFyIGQ9TWF0aC5taW4ociwoaD9jOmkpLXMpO2QhPWEmJih1LnNjcm9sbFRvcD1kKX12YXIgcD1vLnNjcm9sbGVyLmNsaWVudFdpZHRoLVRvLGc9by5zY3JvbGxlci5zY3JvbGxMZWZ0O2UrPW8uZ3V0dGVycy5vZmZzZXRXaWR0aCxuKz1vLmd1dHRlcnMub2Zmc2V0V2lkdGg7dmFyIG09by5ndXR0ZXJzLm9mZnNldFdpZHRoLHY9bSsxMD5lO3JldHVybiBnK20+ZXx8dj8odiYmKGU9MCksdS5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsZS0xMC1tKSk6bj5wK2ctMyYmKHUuc2Nyb2xsTGVmdD1uKzEwLXApLHV9ZnVuY3Rpb24gY3IodCxlLHIpe3QuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0Om51bGw9PWU/dC5kb2Muc2Nyb2xsTGVmdDplLHNjcm9sbFRvcDpudWxsPT1yP3QuZG9jLnNjcm9sbFRvcDpyfX1mdW5jdGlvbiBmcih0LGUscil7dmFyIG49dC5jdXJPcC51cGRhdGVTY3JvbGxQb3N8fCh0LmN1ck9wLnVwZGF0ZVNjcm9sbFBvcz17c2Nyb2xsTGVmdDp0LmRvYy5zY3JvbGxMZWZ0LHNjcm9sbFRvcDp0LmRvYy5zY3JvbGxUb3B9KSxpPXQuZGlzcGxheS5zY3JvbGxlcjtuLnNjcm9sbFRvcD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsSGVpZ2h0LWkuY2xpZW50SGVpZ2h0LG4uc2Nyb2xsVG9wK3IpKSxuLnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihpLnNjcm9sbFdpZHRoLWkuY2xpZW50V2lkdGgsbi5zY3JvbGxMZWZ0K2UpKX1mdW5jdGlvbiBocih0LGUscixuKXt2YXIgaT10LmRvYztpZihudWxsPT1yJiYocj0iYWRkIiksInNtYXJ0Ij09cilpZih0LmRvYy5tb2RlLmluZGVudCl2YXIgbz16KHQsZSk7ZWxzZSByPSJwcmV2Ijt2YXIgbCxzPXQub3B0aW9ucy50YWJTaXplLGE9Z24oaSxlKSx1PVpuKGEudGV4dCxudWxsLHMpLGM9YS50ZXh0Lm1hdGNoKC9eXHMqLylbMF07aWYoInNtYXJ0Ij09ciYmKGw9dC5kb2MubW9kZS5pbmRlbnQobyxhLnRleHQuc2xpY2UoYy5sZW5ndGgpLGEudGV4dCksbD09QW8pKXtpZighbilyZXR1cm47cj0icHJldiJ9InByZXYiPT1yP2w9ZT5pLmZpcnN0P1puKGduKGksZS0xKS50ZXh0LG51bGwscyk6MDoiYWRkIj09cj9sPXUrdC5vcHRpb25zLmluZGVudFVuaXQ6InN1YnRyYWN0Ij09cj9sPXUtdC5vcHRpb25zLmluZGVudFVuaXQ6Im51bWJlciI9PXR5cGVvZiByJiYobD11K3IpLGw9TWF0aC5tYXgoMCxsKTt2YXIgZj0iIixoPTA7aWYodC5vcHRpb25zLmluZGVudFdpdGhUYWJzKWZvcih2YXIgZD1NYXRoLmZsb29yKGwvcyk7ZDstLWQpaCs9cyxmKz0iCSI7bD5oJiYoZis9cW4obC1oKSksZiE9Yz9fZSh0LmRvYyxmLFllKGUsMCksWWUoZSxjLmxlbmd0aCksIitpbnB1dCIpOmkuc2VsLmhlYWQubGluZT09ZSYmaS5zZWwuaGVhZC5jaDxjLmxlbmd0aCYmbnIoaSxZZShlLGMubGVuZ3RoKSxZZShlLGMubGVuZ3RoKSwxKSxhLnN0YXRlQWZ0ZXI9bnVsbH1mdW5jdGlvbiBkcih0LGUscil7dmFyIG49ZSxpPWUsbz10LmRvYztyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/aT1nbihvLHFlKG8sZSkpOm49Ym4oZSksbnVsbD09bj9udWxsOnIoaSxuKT8odWUodCxuLG4rMSksaSk6bnVsbH1mdW5jdGlvbiBwcih0LGUscixuLGkpe2Z1bmN0aW9uIG8oKXt2YXIgZT1zK3I7cmV0dXJuIGU8dC5maXJzdHx8ZT49dC5maXJzdCt0LnNpemU/Zj0hMToocz1lLGM9Z24odCxlKSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT0oaT9TaTpNaSkoYyxhLHIsITApO2lmKG51bGw9PWUpe2lmKHR8fCFvKCkpcmV0dXJuIGY9ITE7YT1pPygwPnI/Ymk6eWkpKGMpOjA+cj9jLnRleHQubGVuZ3RoOjB9ZWxzZSBhPWU7cmV0dXJuITB9dmFyIHM9ZS5saW5lLGE9ZS5jaCx1PXIsYz1nbih0LHMpLGY9ITA7aWYoImNoYXIiPT1uKWwoKTtlbHNlIGlmKCJjb2x1bW4iPT1uKWwoITApO2Vsc2UgaWYoIndvcmQiPT1ufHwiZ3JvdXAiPT1uKWZvcih2YXIgaD1udWxsLGQ9Imdyb3VwIj09bixwPSEwOyEoMD5yKXx8bCghcCk7cD0hMSl7dmFyIGc9Yy50ZXh0LmNoYXJBdChhKXx8IlxuIixtPW9pKGcpPyJ3IjpkPy9ccy8udGVzdChnKT9udWxsOiJwIjpudWxsO2lmKGgmJmghPW0pezA+ciYmKHI9MSxsKCkpO2JyZWFrfWlmKG0mJihoPW0pLHI+MCYmIWwoIXApKWJyZWFrfXZhciB2PW9yKHQsWWUocyxhKSx1LCEwKTtyZXR1cm4gZnx8KHYuaGl0U2lkZT0hMCksdn1mdW5jdGlvbiBncih0LGUscixuKXt2YXIgaSxvPXQuZG9jLGw9ZS5sZWZ0O2lmKCJwYWdlIj09bil7dmFyIHM9TWF0aC5taW4odC5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7aT1lLnRvcCtyKihzLSgwPnI/MS41Oi41KSpyZSh0LmRpc3BsYXkpKX1lbHNlImxpbmUiPT1uJiYoaT1yPjA/ZS5ib3R0b20rMzplLnRvcC0zKTtmb3IoOzspe3ZhciBhPXRlKHQsbCxpKTtpZighYS5vdXRzaWRlKWJyZWFrO2lmKDA+cj8wPj1pOmk+PW8uaGVpZ2h0KXthLmhpdFNpZGU9ITA7YnJlYWt9aSs9NSpyfXJldHVybiBhfWZ1bmN0aW9uIG1yKHQsZSl7dmFyIHI9ZS5jaCxuPWUuY2g7aWYodCl7KGUueFJlbDwwfHxuPT10Lmxlbmd0aCkmJnI/LS1yOisrbjtmb3IodmFyIGk9dC5jaGFyQXQociksbz1vaShpKT9vaTovXHMvLnRlc3QoaSk/ZnVuY3Rpb24odCl7cmV0dXJuL1xzLy50ZXN0KHQpfTpmdW5jdGlvbih0KXtyZXR1cm4hL1xzLy50ZXN0KHQpJiYhb2kodCl9O3I+MCYmbyh0LmNoYXJBdChyLTEpKTspLS1yO2Zvcig7bjx0Lmxlbmd0aCYmbyh0LmNoYXJBdChuKSk7KSsrbn1yZXR1cm57ZnJvbTpZZShlLmxpbmUsciksdG86WWUoZS5saW5lLG4pfX1mdW5jdGlvbiB2cih0LGUpe2VyKHQuZG9jLFllKGUsMCksUWUodC5kb2MsWWUoZSsxLDApKSl9ZnVuY3Rpb24geXIoZSxyLG4saSl7dC5kZWZhdWx0c1tlXT1yLG4mJihzb1tlXT1pP2Z1bmN0aW9uKHQsZSxyKXtyIT11byYmbih0LGUscil9Om4pfWZ1bmN0aW9uIGJyKHQsZSl7aWYoZT09PSEwKXJldHVybiBlO2lmKHQuY29weVN0YXRlKXJldHVybiB0LmNvcHlTdGF0ZShlKTt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpIGluc3RhbmNlb2YgQXJyYXkmJihpPWkuY29uY2F0KFtdKSkscltuXT1pfXJldHVybiByfWZ1bmN0aW9uIHhyKHQsZSxyKXtyZXR1cm4gdC5zdGFydFN0YXRlP3Quc3RhcnRTdGF0ZShlLHIpOiEwfWZ1bmN0aW9uIENyKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD92b1t0XTp0fWZ1bmN0aW9uIHdyKHQsZSxyKXtmdW5jdGlvbiBuKGUpe2U9Q3IoZSk7dmFyIGk9ZVt0XTtpZihpPT09ITEpcmV0dXJuInN0b3AiO2lmKG51bGwhPWkmJnIoaSkpcmV0dXJuITA7aWYoZS5ub2ZhbGx0aHJvdWdoKXJldHVybiJzdG9wIjt2YXIgbz1lLmZhbGx0aHJvdWdoO2lmKG51bGw9PW8pcmV0dXJuITE7aWYoIltvYmplY3QgQXJyYXldIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKXJldHVybiBuKG8pO2Zvcih2YXIgbD0wLHM9by5sZW5ndGg7cz5sOysrbCl7dmFyIGE9bihvW2xdKTtpZihhKXJldHVybiBhfXJldHVybiExfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgbz1uKGVbaV0pO2lmKG8pcmV0dXJuInN0b3AiIT1vfX1mdW5jdGlvbiBMcih0KXt2YXIgZT1Qb1t0LmtleUNvZGVdO3JldHVybiJDdHJsIj09ZXx8IkFsdCI9PWV8fCJTaGlmdCI9PWV8fCJNb2QiPT1lfWZ1bmN0aW9uIGtyKHQsZSl7aWYoemkmJjM0PT10LmtleUNvZGUmJnRbImNoYXIiXSlyZXR1cm4hMTt2YXIgcj1Qb1t0LmtleUNvZGVdO3JldHVybiBudWxsPT1yfHx0LmFsdEdyYXBoS2V5PyExOih0LmFsdEtleSYmKHI9IkFsdC0iK3IpLCgkaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmKHI9IkN0cmwtIityKSwoJGk/dC5jdHJsS2V5OnQubWV0YUtleSkmJihyPSJDbWQtIityKSwhZSYmdC5zaGlmdEtleSYmKHI9IlNoaWZ0LSIrcikscil9ZnVuY3Rpb24gU3IodCxlKXt0aGlzLnBvcz10aGlzLnN0YXJ0PTAsdGhpcy5zdHJpbmc9dCx0aGlzLnRhYlNpemU9ZXx8OCx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5sYXN0Q29sdW1uVmFsdWU9MH1mdW5jdGlvbiBNcih0LGUpe3RoaXMubGluZXM9W10sdGhpcy50eXBlPWUsdGhpcy5kb2M9dH1mdW5jdGlvbiBUcih0LGUscixuLGkpe2lmKG4mJm4uc2hhcmVkKXJldHVybiBIcih0LGUscixuLGkpO2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFRyKSh0LGUscixuLGkpO3ZhciBvPW5ldyBNcih0LGkpO2lmKCRlKHIsZSl8fGplKGUscikmJiJyYW5nZSI9PWkmJighbi5pbmNsdXNpdmVMZWZ0fHwhbi5pbmNsdXNpdmVSaWdodCkpcmV0dXJuIG87biYmcmkobixvKSxvLnJlcGxhY2VkV2l0aCYmKG8uY29sbGFwc2VkPSEwLG8ucmVwbGFjZWRXaXRoPXNpKCJzcGFuIixbby5yZXBsYWNlZFdpdGhdLCJDb2RlTWlycm9yLXdpZGdldCIpLG4uaGFuZGxlTW91c2VFdmVudHN8fChvLnJlcGxhY2VkV2l0aC5pZ25vcmVFdmVudHM9ITApKSxvLmNvbGxhcHNlZCYmKFFpPSEwKSxvLmFkZFRvSGlzdG9yeSYmTW4odCx7ZnJvbTplLHRvOnIsb3JpZ2luOiJtYXJrVGV4dCJ9LHtoZWFkOnQuc2VsLmhlYWQsYW5jaG9yOnQuc2VsLmFuY2hvcn0sMC8wKTt2YXIgbCxzLGEsdT1lLmxpbmUsYz0wLGY9dC5jbTtpZih0Lml0ZXIodSxyLmxpbmUrMSxmdW5jdGlvbihuKXtmJiZvLmNvbGxhcHNlZCYmIWYub3B0aW9ucy5saW5lV3JhcHBpbmcmJkdyKHQsbik9PWYuZGlzcGxheS5tYXhMaW5lJiYoYT0hMCk7dmFyIGk9e2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpvfTtjKz1uLnRleHQubGVuZ3RoLHU9PWUubGluZSYmKGkuZnJvbT1lLmNoLGMtPWUuY2gpLHU9PXIubGluZSYmKGkudG89ci5jaCxjLT1uLnRleHQubGVuZ3RoLXIuY2gpLG8uY29sbGFwc2VkJiYodT09ci5saW5lJiYocz1QcihuLHIuY2gpKSx1PT1lLmxpbmU/bD1QcihuLGUuY2gpOnluKG4sMCkpLFdyKG4saSksKyt1fSksby5jb2xsYXBzZWQmJnQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24oZSl7VnIodCxlKSYmeW4oZSwwKX0pLG8uY2xlYXJPbkVudGVyJiZHbihvLCJiZWZvcmVDdXJzb3JFbnRlciIsZnVuY3Rpb24oKXtvLmNsZWFyKCl9KSxvLnJlYWRPbmx5JiYocWk9ITAsKHQuaGlzdG9yeS5kb25lLmxlbmd0aHx8dC5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpJiZ0LmNsZWFySGlzdG9yeSgpKSxvLmNvbGxhcHNlZCl7aWYobCE9cyl0aHJvdyBuZXcgRXJyb3IoIkluc2VydGluZyBjb2xsYXBzZWQgbWFya2VyIG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpO28uc2l6ZT1jLG8uYXRvbWljPSEwfXJldHVybiBmJiYoYSYmKGYuY3VyT3AudXBkYXRlTWF4TGluZT0hMCksKG8uY2xhc3NOYW1lfHxvLnRpdGxlfHxvLnN0YXJ0U3R5bGV8fG8uZW5kU3R5bGV8fG8uY29sbGFwc2VkKSYmdWUoZixlLmxpbmUsci5saW5lKzEpLG8uYXRvbWljJiZpcihmKSksb31mdW5jdGlvbiBBcih0LGUpe3RoaXMubWFya2Vycz10LHRoaXMucHJpbWFyeT1lO2Zvcih2YXIgcj0wLG49dGhpcztyPHQubGVuZ3RoOysrcil0W3JdLnBhcmVudD10aGlzLEduKHRbcl0sImNsZWFyIixmdW5jdGlvbigpe24uY2xlYXIoKX0pfWZ1bmN0aW9uIEhyKHQsZSxyLG4saSl7bj1yaShuKSxuLnNoYXJlZD0hMTt2YXIgbz1bVHIodCxlLHIsbixpKV0sbD1vWzBdLHM9bi5yZXBsYWNlZFdpdGg7cmV0dXJuIGRuKHQsZnVuY3Rpb24odCl7cyYmKG4ucmVwbGFjZWRXaXRoPXMuY2xvbmVOb2RlKCEwKSksby5wdXNoKFRyKHQsUWUodCxlKSxRZSh0LHIpLG4saSkpO2Zvcih2YXIgYT0wO2E8dC5saW5rZWQubGVuZ3RoOysrYSlpZih0LmxpbmtlZFthXS5pc1BhcmVudClyZXR1cm47bD1RbihvKX0pLG5ldyBBcihvLGwpfWZ1bmN0aW9uIE5yKHQsZSl7aWYodClmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtpZihuLm1hcmtlcj09ZSlyZXR1cm4gbn19ZnVuY3Rpb24gRHIodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXRbbl0hPWUmJihyfHwocj1bXSkpLnB1c2godFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gV3IodCxlKXt0Lm1hcmtlZFNwYW5zPXQubWFya2VkU3BhbnM/dC5tYXJrZWRTcGFucy5jb25jYXQoW2VdKTpbZV0sZS5tYXJrZXIuYXR0YWNoTGluZSh0KX1mdW5jdGlvbiBPcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTtpZihzfHwobC5pbmNsdXNpdmVMZWZ0JiZsLmluY2x1c2l2ZVJpZ2h0fHwiYm9va21hcmsiPT1sLnR5cGUpJiZvLmZyb209PWUmJighcnx8IW8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7KG58fChuPVtdKSkucHVzaCh7ZnJvbTpvLmZyb20sdG86YT9udWxsOm8udG8sbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24gRXIodCxlLHIpe2lmKHQpZm9yKHZhciBuLGk9MDtpPHQubGVuZ3RoOysraSl7dmFyIG89dFtpXSxsPW8ubWFya2VyLHM9bnVsbD09by50b3x8KGwuaW5jbHVzaXZlUmlnaHQ/by50bz49ZTpvLnRvPmUpO2lmKHN8fCJib29rbWFyayI9PWwudHlwZSYmby5mcm9tPT1lJiYoIXJ8fG8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOmE/bnVsbDpvLmZyb20tZSx0bzpudWxsPT1vLnRvP251bGw6by50by1lLG1hcmtlcjpsfSl9fXJldHVybiBufWZ1bmN0aW9uIHpyKHQsZSl7dmFyIHI9dHIodCxlLmZyb20ubGluZSkmJmduKHQsZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zLG49dHIodCxlLnRvLmxpbmUpJiZnbih0LGUudG8ubGluZSkubWFya2VkU3BhbnM7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPWUuZnJvbS5jaCxvPWUudG8uY2gsbD1qZShlLmZyb20sZS50bykscz1PcihyLGksbCksYT1FcihuLG8sbCksdT0xPT1lLnRleHQubGVuZ3RoLGM9UW4oZS50ZXh0KS5sZW5ndGgrKHU/aTowKTtpZihzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKXt2YXIgaD1zW2ZdO2lmKG51bGw9PWgudG8pe3ZhciBkPU5yKGEsaC5tYXJrZXIpO2Q/dSYmKGgudG89bnVsbD09ZC50bz9udWxsOmQudG8rYyk6aC50bz1pfX1pZihhKWZvcih2YXIgZj0wO2Y8YS5sZW5ndGg7KytmKXt2YXIgaD1hW2ZdO2lmKG51bGwhPWgudG8mJihoLnRvKz1jKSxudWxsPT1oLmZyb20pe3ZhciBkPU5yKHMsaC5tYXJrZXIpO2R8fChoLmZyb209Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpKX1lbHNlIGguZnJvbSs9Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpfWlmKHUmJnMpe2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGwhPXNbZl0uZnJvbSYmc1tmXS5mcm9tPT1zW2ZdLnRvJiYiYm9va21hcmsiIT1zW2ZdLm1hcmtlci50eXBlJiZzLnNwbGljZShmLS0sMSk7cy5sZW5ndGh8fChzPW51bGwpfXZhciBwPVtzXTtpZighdSl7dmFyIGcsbT1lLnRleHQubGVuZ3RoLTI7aWYobT4wJiZzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGw9PXNbZl0udG8mJihnfHwoZz1bXSkpLnB1c2goe2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpzW2ZdLm1hcmtlcn0pO2Zvcih2YXIgZj0wO20+ZjsrK2YpcC5wdXNoKGcpO3AucHVzaChhKX1yZXR1cm4gcH1mdW5jdGlvbiBJcih0LGUpe3ZhciByPUFuKHQsZSksbj16cih0LGUpO2lmKCFyKXJldHVybiBuO2lmKCFuKXJldHVybiByO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgbz1yW2ldLGw9bltpXTtpZihvJiZsKXQ6Zm9yKHZhciBzPTA7czxsLmxlbmd0aDsrK3Mpe2Zvcih2YXIgYT1sW3NdLHU9MDt1PG8ubGVuZ3RoOysrdSlpZihvW3VdLm1hcmtlcj09YS5tYXJrZXIpY29udGludWUgdDtvLnB1c2goYSl9ZWxzZSBsJiYocltpXT1sKX1yZXR1cm4gcn1mdW5jdGlvbiBGcih0LGUscil7dmFyIG49bnVsbDtpZih0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe2lmKHQubWFya2VkU3BhbnMpZm9yKHZhciBlPTA7ZTx0Lm1hcmtlZFNwYW5zLmxlbmd0aDsrK2Upe3ZhciByPXQubWFya2VkU3BhbnNbZV0ubWFya2VyOyFyLnJlYWRPbmx5fHxuJiYtMSE9dGkobixyKXx8KG58fChuPVtdKSkucHVzaChyKX19KSwhbilyZXR1cm4gbnVsbDtmb3IodmFyIGk9W3tmcm9tOmUsdG86cn1dLG89MDtvPG4ubGVuZ3RoOysrbylmb3IodmFyIGw9bltvXSxzPWwuZmluZCgpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIHU9aVthXTtpZighJGUodS50byxzLmZyb20pJiYhJGUocy50byx1LmZyb20pKXt2YXIgYz1bYSwxXTsoJGUodS5mcm9tLHMuZnJvbSl8fCFsLmluY2x1c2l2ZUxlZnQmJmplKHUuZnJvbSxzLmZyb20pKSYmYy5wdXNoKHtmcm9tOnUuZnJvbSx0bzpzLmZyb219KSwoJGUocy50byx1LnRvKXx8IWwuaW5jbHVzaXZlUmlnaHQmJmplKHUudG8scy50bykpJiZjLnB1c2goe2Zyb206cy50byx0bzp1LnRvfSksaS5zcGxpY2UuYXBwbHkoaSxjKSxhKz1jLmxlbmd0aC0xfX1yZXR1cm4gaX1mdW5jdGlvbiBQcih0LGUpe3ZhciByLG49UWkmJnQubWFya2VkU3BhbnM7aWYobilmb3IodmFyIGksbz0wO288bi5sZW5ndGg7KytvKWk9bltvXSxpLm1hcmtlci5jb2xsYXBzZWQmJihudWxsPT1pLmZyb218fGkuZnJvbTxlKSYmKG51bGw9PWkudG98fGkudG8+ZSkmJighcnx8ci53aWR0aDxpLm1hcmtlci53aWR0aCkmJihyPWkubWFya2VyKTtyZXR1cm4gcn1mdW5jdGlvbiBScih0KXtyZXR1cm4gUHIodCwtMSl9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIFByKHQsdC50ZXh0Lmxlbmd0aCsxKX1mdW5jdGlvbiBHcih0LGUpe2Zvcih2YXIgcjtyPVJyKGUpOyllPWduKHQsci5maW5kKCkuZnJvbS5saW5lKTtyZXR1cm4gZX1mdW5jdGlvbiBWcih0LGUpe3ZhciByPVFpJiZlLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuLGk9MDtpPHIubGVuZ3RoOysraSlpZihuPXJbaV0sbi5tYXJrZXIuY29sbGFwc2VkKXtpZihudWxsPT1uLmZyb20pcmV0dXJuITA7aWYoIW4ubWFya2VyLnJlcGxhY2VkV2l0aCYmMD09bi5mcm9tJiZuLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZLcih0LGUsbikpcmV0dXJuITB9fWZ1bmN0aW9uIEtyKHQsZSxyKXtpZihudWxsPT1yLnRvKXt2YXIgbj1yLm1hcmtlci5maW5kKCkudG8saT1nbih0LG4ubGluZSk7cmV0dXJuIEtyKHQsaSxOcihpLm1hcmtlZFNwYW5zLHIubWFya2VyKSl9aWYoci5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJnIudG89PWUudGV4dC5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBvLGw9MDtsPGUubWFya2VkU3BhbnMubGVuZ3RoOysrbClpZihvPWUubWFya2VkU3BhbnNbbF0sby5tYXJrZXIuY29sbGFwc2VkJiYhby5tYXJrZXIucmVwbGFjZWRXaXRoJiZvLmZyb209PXIudG8mJihvLm1hcmtlci5pbmNsdXNpdmVMZWZ0fHxyLm1hcmtlci5pbmNsdXNpdmVSaWdodCkmJktyKHQsZSxvKSlyZXR1cm4hMH1mdW5jdGlvbiBVcih0KXt2YXIgZT10Lm1hcmtlZFNwYW5zO2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmRldGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1udWxsfX1mdW5jdGlvbiBYcih0LGUpe2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmF0dGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1lfX1mdW5jdGlvbiBfcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT0hdGhpcy5jbS5jdXJPcDtlJiZpZSh0aGlzLmNtKTt0cnl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtlJiZvZSh0aGlzLmNtKX1yZXR1cm4gcn19ZnVuY3Rpb24gWXIodCl7cmV0dXJuIG51bGwhPXQuaGVpZ2h0P3QuaGVpZ2h0Oih0Lm5vZGUucGFyZW50Tm9kZSYmMT09dC5ub2RlLnBhcmVudE5vZGUubm9kZVR5cGV8fHVpKHQuY20uZGlzcGxheS5tZWFzdXJlLHNpKCJkaXYiLFt0Lm5vZGVdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpKSx0LmhlaWdodD10Lm5vZGUub2Zmc2V0SGVpZ2h0KX1mdW5jdGlvbiBqcih0LGUscixuKXt2YXIgaT1uZXcgeW8odCxyLG4pO3JldHVybiBpLm5vSFNjcm9sbCYmKHQuZGlzcGxheS5hbGlnbldpZGdldHM9ITApLGRyKHQsZSxmdW5jdGlvbihlKXt2YXIgcj1lLndpZGdldHN8fChlLndpZGdldHM9W10pO2lmKG51bGw9PWkuaW5zZXJ0QXQ/ci5wdXNoKGkpOnIuc3BsaWNlKE1hdGgubWluKHIubGVuZ3RoLTEsTWF0aC5tYXgoMCxpLmluc2VydEF0KSksMCxpKSxpLmxpbmU9ZSwhVnIodC5kb2MsZSl8fGkuc2hvd0lmSGlkZGVuKXt2YXIgbj1Dbih0LGUpPHQuZG9jLnNjcm9sbFRvcDt5bihlLGUuaGVpZ2h0K1lyKGkpKSxuJiZmcih0LDAsaS5oZWlnaHQpfXJldHVybiEwfSksaX1mdW5jdGlvbiAkcih0LGUscixuKXt0LnRleHQ9ZSx0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKSxudWxsIT10Lm9yZGVyJiYodC5vcmRlcj1udWxsKSxVcih0KSxYcih0LHIpO3ZhciBpPW4/bih0KToxO2khPXQuaGVpZ2h0JiZ5bih0LGkpfWZ1bmN0aW9uIFpyKHQpe3QucGFyZW50PW51bGwsVXIodCl9ZnVuY3Rpb24gcXIodCxlLHIsbixpLG8pe3ZhciBsPXIuZmxhdHRlblNwYW5zO251bGw9PWwmJihsPXQub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciBzLGE9MCx1PW51bGwsYz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKCIiPT1lJiZyLmJsYW5rTGluZSYmci5ibGFua0xpbmUobik7IWMuZW9sKCk7KWMucG9zPnQub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGg/KGw9ITEsbyYmdG4odCxlLG4sYy5wb3MpLGMucG9zPWUubGVuZ3RoLHM9bnVsbCk6cz1yLnRva2VuKGMsbiksbCYmdT09c3x8KGE8Yy5zdGFydCYmaShjLnN0YXJ0LHUpLGE9Yy5zdGFydCx1PXMpLGMuc3RhcnQ9Yy5wb3M7Zm9yKDthPGMucG9zOyl7dmFyIGY9TWF0aC5taW4oYy5wb3MsYSs1ZTQpO2koZix1KSxhPWZ9fWZ1bmN0aW9uIFFyKHQsZSxyLG4pe3ZhciBpPVt0LnN0YXRlLm1vZGVHZW5dO3FyKHQsZS50ZXh0LHQuZG9jLm1vZGUscixmdW5jdGlvbih0LGUpe2kucHVzaCh0LGUpfSxuKTtmb3IodmFyIG89MDtvPHQuc3RhdGUub3ZlcmxheXMubGVuZ3RoOysrbyl7dmFyIGw9dC5zdGF0ZS5vdmVybGF5c1tvXSxzPTEsYT0wO3FyKHQsZS50ZXh0LGwubW9kZSwhMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1zO3Q+YTspe3ZhciBuPWlbc107bj50JiZpLnNwbGljZShzLDEsdCxpW3MrMV0sbikscys9MixhPU1hdGgubWluKHQsbil9aWYoZSlpZihsLm9wYXF1ZSlpLnNwbGljZShyLHMtcix0LGUpLHM9cisyO2Vsc2UgZm9yKDtzPnI7cis9Mil7dmFyIG89aVtyKzFdO2lbcisxXT1vP28rIiAiK2U6ZX19KX1yZXR1cm4gaX1mdW5jdGlvbiBKcih0LGUpe3JldHVybiBlLnN0eWxlcyYmZS5zdHlsZXNbMF09PXQuc3RhdGUubW9kZUdlbnx8KGUuc3R5bGVzPVFyKHQsZSxlLnN0YXRlQWZ0ZXI9eih0LGJuKGUpKSkpLGUuc3R5bGVzfWZ1bmN0aW9uIHRuKHQsZSxyLG4pe3ZhciBpPXQuZG9jLm1vZGUsbz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKG8uc3RhcnQ9by5wb3M9bnx8MCwiIj09ZSYmaS5ibGFua0xpbmUmJmkuYmxhbmtMaW5lKHIpOyFvLmVvbCgpJiZvLnBvczw9dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aDspaS50b2tlbihvLHIpLG8uc3RhcnQ9by5wb3N9ZnVuY3Rpb24gZW4odCxlKXtpZighdClyZXR1cm4gbnVsbDtmb3IoOzspe3ZhciByPXQubWF0Y2goLyg/Ol58XHMpbGluZS0oYmFja2dyb3VuZC0pPyhcUyspLyk7aWYoIXIpYnJlYWs7dD10LnNsaWNlKDAsci5pbmRleCkrdC5zbGljZShyLmluZGV4K3JbMF0ubGVuZ3RoKTt2YXIgbj1yWzFdPyJiZ0NsYXNzIjoidGV4dENsYXNzIjtudWxsPT1lW25dP2Vbbl09clsyXTpuZXcgUmVnRXhwKCIoPzpefHMpIityWzJdKyIoPzokfHMpIikudGVzdChlW25dKXx8KGVbbl0rPSIgIityWzJdKX1yZXR1cm4geG9bdF18fCh4b1t0XT0iY20tIit0LnJlcGxhY2UoLyArL2csIiBjbS0iKSl9ZnVuY3Rpb24gcm4odCxlLHIsbil7Zm9yKHZhciBpLG89ZSxsPSEwO2k9UnIobyk7KW89Z24odC5kb2MsaS5maW5kKCkuZnJvbS5saW5lKTt2YXIgcz17cHJlOnNpKCJwcmUiKSxjb2w6MCxwb3M6MCxtZWFzdXJlOm51bGwsbWVhc3VyZWRTb21ldGhpbmc6ITEsY206dCxjb3B5V2lkZ2V0czpufTtkb3tvLnRleHQmJihsPSExKSxzLm1lYXN1cmU9bz09ZSYmcixzLnBvcz0wLHMuYWRkVG9rZW49cy5tZWFzdXJlP2xuOm9uLChBaXx8V2kpJiZ0LmdldE9wdGlvbigibGluZVdyYXBwaW5nIikmJihzLmFkZFRva2VuPXNuKHMuYWRkVG9rZW4pKTt2YXIgYT11bihvLHMsSnIodCxvKSk7ciYmbz09ZSYmIXMubWVhc3VyZWRTb21ldGhpbmcmJihyWzBdPXMucHJlLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSkscy5tZWFzdXJlZFNvbWV0aGluZz0hMCksYSYmKG89Z24odC5kb2MsYS50by5saW5lKSl9d2hpbGUoYSk7IXJ8fHMubWVhc3VyZWRTb21ldGhpbmd8fHJbMF18fChyWzBdPXMucHJlLmFwcGVuZENoaWxkKGw/c2koInNwYW4iLCLCoCIpOnBpKHQuZGlzcGxheS5tZWFzdXJlKSkpLHMucHJlLmZpcnN0Q2hpbGR8fFZyKHQuZG9jLGUpfHxzLnByZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiwqAiKSk7dmFyIHU7aWYociYmKEFpfHxEaSkmJih1PXduKG8pKSl7dmFyIGM9dS5sZW5ndGgtMTt1W2NdLmZyb209PXVbY10udG8mJi0tYzt2YXIgZj11W2NdLGg9dVtjLTFdO2lmKGYuZnJvbSsxPT1mLnRvJiZoJiZmLmxldmVsPGgubGV2ZWwpe3ZhciBkPXJbcy5wb3MtMV07ZCYmZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkLm1lYXN1cmVSaWdodD1waSh0LmRpc3BsYXkubWVhc3VyZSksZC5uZXh0U2libGluZyl9fXZhciBwPXMudGV4dENsYXNzP3MudGV4dENsYXNzKyIgIisoZS50ZXh0Q2xhc3N8fCIiKTplLnRleHRDbGFzcztyZXR1cm4gcCYmKHMucHJlLmNsYXNzTmFtZT1wKSxLbih0LCJyZW5kZXJMaW5lIix0LGUscy5wcmUpLHN9ZnVuY3Rpb24gbm4odCl7dmFyIGU9c2koInNwYW4iLCLigKIiLCJjbS1pbnZhbGlkY2hhciIpO3JldHVybiBlLnRpdGxlPSJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNiksZX1mdW5jdGlvbiBvbih0LGUscixuLGksbyl7aWYoZSl7dmFyIGw9dC5jbS5vcHRpb25zLnNwZWNpYWxDaGFycztpZihsLnRlc3QoZSkpZm9yKHZhciBzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxhPTA7Oyl7bC5sYXN0SW5kZXg9YTt2YXIgdT1sLmV4ZWMoZSksYz11P3UuaW5kZXgtYTplLmxlbmd0aC1hO2lmKGMmJihzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuc2xpY2UoYSxhK2MpKSksdC5jb2wrPWMpLCF1KWJyZWFrO2lmKGErPWMrMSwiCSI9PXVbMF0pe3ZhciBmPXQuY20ub3B0aW9ucy50YWJTaXplLGg9Zi10LmNvbCVmO3MuYXBwZW5kQ2hpbGQoc2koInNwYW4iLHFuKGgpLCJjbS10YWIiKSksdC5jb2wrPWh9ZWxzZXt2YXIgZD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcih1WzBdKTtzLmFwcGVuZENoaWxkKGQpLHQuY29sKz0xfX1lbHNle3QuY29sKz1lLmxlbmd0aDt2YXIgcz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX1pZihyfHxufHxpfHx0Lm1lYXN1cmUpe3ZhciBwPXJ8fCIiO24mJihwKz1uKSxpJiYocCs9aSk7dmFyIGQ9c2koInNwYW4iLFtzXSxwKTtyZXR1cm4gbyYmKGQudGl0bGU9byksdC5wcmUuYXBwZW5kQ2hpbGQoZCl9dC5wcmUuYXBwZW5kQ2hpbGQocyl9fWZ1bmN0aW9uIGxuKHQsZSxyLG4saSl7Zm9yKHZhciBvPXQuY20ub3B0aW9ucy5saW5lV3JhcHBpbmcsbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgcz1lLmNoYXJBdChsKSxhPTA9PWw7cz49Iu2ggCImJiLtr78iPnMmJmw8ZS5sZW5ndGgtMT8ocz1lLnNsaWNlKGwsbCsyKSwrK2wpOmwmJm8mJmhpKGUsbCkmJnQucHJlLmFwcGVuZENoaWxkKHNpKCJ3YnIiKSk7dmFyIHU9dC5tZWFzdXJlW3QucG9zXSxjPXQubWVhc3VyZVt0LnBvc109b24odCxzLHIsYSYmbixsPT1lLmxlbmd0aC0xJiZpKTt1JiYoYy5sZWZ0U2lkZT11LmxlZnRTaWRlfHx1KSxBaSYmbyYmIiAiPT1zJiZsJiYhL1xzLy50ZXN0KGUuY2hhckF0KGwtMSkpJiZsPGUubGVuZ3RoLTEmJiEvXHMvLnRlc3QoZS5jaGFyQXQobCsxKSkmJihjLnN0eWxlLndoaXRlU3BhY2U9Im5vcm1hbCIpLHQucG9zKz1zLmxlbmd0aH1lLmxlbmd0aCYmKHQubWVhc3VyZWRTb21ldGhpbmc9ITApfWZ1bmN0aW9uIHNuKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlPSIgIixyPTA7cjx0Lmxlbmd0aC0yOysrcillKz1yJTI/IiAiOiLCoCI7cmV0dXJuIGUrPSIgIn1yZXR1cm4gZnVuY3Rpb24ocixuLGksbyxsLHMpe3JldHVybiB0KHIsbi5yZXBsYWNlKC8gezMsfS9nLGUpLGksbyxsLHMpfX1mdW5jdGlvbiBhbih0LGUscixuKXt2YXIgaT0hbiYmci5yZXBsYWNlZFdpdGg7aWYoaSYmKHQuY29weVdpZGdldHMmJihpPWkuY2xvbmVOb2RlKCEwKSksdC5wcmUuYXBwZW5kQ2hpbGQoaSksdC5tZWFzdXJlKSl7aWYoZSl0Lm1lYXN1cmVbdC5wb3NdPWk7ZWxzZXt2YXIgbz1waSh0LmNtLmRpc3BsYXkubWVhc3VyZSk7aWYoImJvb2ttYXJrIiE9ci50eXBlfHxyLmluc2VydExlZnQpe2lmKHQubWVhc3VyZVt0LnBvc10pcmV0dXJuO3QubWVhc3VyZVt0LnBvc109dC5wcmUuaW5zZXJ0QmVmb3JlKG8saSl9ZWxzZSB0Lm1lYXN1cmVbdC5wb3NdPXQucHJlLmFwcGVuZENoaWxkKG8pfXQubWVhc3VyZWRTb21ldGhpbmc9ITB9dC5wb3MrPWV9ZnVuY3Rpb24gdW4odCxlLHIpe3ZhciBuPXQubWFya2VkU3BhbnMsaT10LnRleHQsbz0wO2lmKG4pZm9yKHZhciBsLHMsYSx1LGMsZixoPWkubGVuZ3RoLGQ9MCxwPTEsZz0iIixtPTA7Oyl7aWYobT09ZCl7cz1hPXU9Yz0iIixmPW51bGwsbT0xLzA7Zm9yKHZhciB2PVtdLHk9MDt5PG4ubGVuZ3RoOysreSl7dmFyIGI9blt5XSx4PWIubWFya2VyO2IuZnJvbTw9ZCYmKG51bGw9PWIudG98fGIudG8+ZCk/KG51bGwhPWIudG8mJm0+Yi50byYmKG09Yi50byxhPSIiKSx4LmNsYXNzTmFtZSYmKHMrPSIgIit4LmNsYXNzTmFtZSkseC5zdGFydFN0eWxlJiZiLmZyb209PWQmJih1Kz0iICIreC5zdGFydFN0eWxlKSx4LmVuZFN0eWxlJiZiLnRvPT1tJiYoYSs9IiAiK3guZW5kU3R5bGUpLHgudGl0bGUmJiFjJiYoYz14LnRpdGxlKSx4LmNvbGxhcHNlZCYmKCFmfHxmLm1hcmtlci5zaXplPHguc2l6ZSkmJihmPWIpKTpiLmZyb20+ZCYmbT5iLmZyb20mJihtPWIuZnJvbSksImJvb2ttYXJrIj09eC50eXBlJiZiLmZyb209PWQmJngucmVwbGFjZWRXaXRoJiZ2LnB1c2goeCkKfWlmKGYmJihmLmZyb218fDApPT1kJiYoYW4oZSwobnVsbD09Zi50bz9oOmYudG8pLWQsZi5tYXJrZXIsbnVsbD09Zi5mcm9tKSxudWxsPT1mLnRvKSlyZXR1cm4gZi5tYXJrZXIuZmluZCgpO2lmKCFmJiZ2Lmxlbmd0aClmb3IodmFyIHk9MDt5PHYubGVuZ3RoOysreSlhbihlLDAsdlt5XSl9aWYoZD49aClicmVhaztmb3IodmFyIEM9TWF0aC5taW4oaCxtKTs7KXtpZihnKXt2YXIgdz1kK2cubGVuZ3RoO2lmKCFmKXt2YXIgTD13PkM/Zy5zbGljZSgwLEMtZCk6ZztlLmFkZFRva2VuKGUsTCxsP2wrczpzLHUsZCtMLmxlbmd0aD09bT9hOiIiLGMpfWlmKHc+PUMpe2c9Zy5zbGljZShDLWQpLGQ9QzticmVha31kPXcsdT0iIn1nPWkuc2xpY2UobyxvPXJbcCsrXSksbD1lbihyW3ArK10sZSl9fWVsc2UgZm9yKHZhciBwPTE7cDxyLmxlbmd0aDtwKz0yKWUuYWRkVG9rZW4oZSxpLnNsaWNlKG8sbz1yW3BdKSxlbihyW3ArMV0sZSkpfWZ1bmN0aW9uIGNuKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gcj9yW3RdOm51bGx9ZnVuY3Rpb24gbCh0LHIsbil7JHIodCxyLG4saSksVW4odCwiY2hhbmdlIix0LGUpfXZhciBzPWUuZnJvbSxhPWUudG8sdT1lLnRleHQsYz1nbih0LHMubGluZSksZj1nbih0LGEubGluZSksaD1Rbih1KSxkPW8odS5sZW5ndGgtMSkscD1hLmxpbmUtcy5saW5lO2lmKDAhPXMuY2h8fDAhPWEuY2h8fCIiIT1ofHx0LmNtJiYhdC5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSlpZihjPT1mKWlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKStoK2MudGV4dC5zbGljZShhLmNoKSxkKTtlbHNle2Zvcih2YXIgZz1bXSxtPTEsdj11Lmxlbmd0aC0xO3Y+bTsrK20pZy5wdXNoKG5ldyBibyh1W21dLG8obSksaSkpO2cucHVzaChuZXcgYm8oaCtjLnRleHQuc2xpY2UoYS5jaCksZCxpKSksbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK3VbMF0sbygwKSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZSBpZigxPT11Lmxlbmd0aClsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXStmLnRleHQuc2xpY2UoYS5jaCksbygwKSksdC5yZW1vdmUocy5saW5lKzEscCk7ZWxzZXtsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSxsKGYsaCtmLnRleHQuc2xpY2UoYS5jaCksZCk7Zm9yKHZhciBtPTEsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7cD4xJiZ0LnJlbW92ZShzLmxpbmUrMSxwLTEpLHQuaW5zZXJ0KHMubGluZSsxLGcpfWVsc2V7Zm9yKHZhciBtPTAsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7bChmLGYudGV4dCxkKSxwJiZ0LnJlbW92ZShzLmxpbmUscCksZy5sZW5ndGgmJnQuaW5zZXJ0KHMubGluZSxnKX1Vbih0LCJjaGFuZ2UiLHQsZSksbnIodCxuLmFuY2hvcixuLmhlYWQsbnVsbCwhMCl9ZnVuY3Rpb24gZm4odCl7dGhpcy5saW5lcz10LHRoaXMucGFyZW50PW51bGw7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPTA7cj5lOysrZSl0W2VdLnBhcmVudD10aGlzLG4rPXRbZV0uaGVpZ2h0O3RoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gaG4odCl7dGhpcy5jaGlsZHJlbj10O2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10Lmxlbmd0aDtpPm47KytuKXt2YXIgbz10W25dO2UrPW8uY2h1bmtTaXplKCkscis9by5oZWlnaHQsby5wYXJlbnQ9dGhpc310aGlzLnNpemU9ZSx0aGlzLmhlaWdodD1yLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24gZG4odCxlLHIpe2Z1bmN0aW9uIG4odCxpLG8pe2lmKHQubGlua2VkKWZvcih2YXIgbD0wO2w8dC5saW5rZWQubGVuZ3RoOysrbCl7dmFyIHM9dC5saW5rZWRbbF07aWYocy5kb2MhPWkpe3ZhciBhPW8mJnMuc2hhcmVkSGlzdDsoIXJ8fGEpJiYoZShzLmRvYyxhKSxuKHMuZG9jLHQsYSkpfX19bih0LG51bGwsITApfWZ1bmN0aW9uIHBuKHQsZSl7aWYoZS5jbSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuIik7dC5kb2M9ZSxlLmNtPXQsbyh0KSxyKHQpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fGYodCksdC5vcHRpb25zLm1vZGU9ZS5tb2RlT3B0aW9uLHVlKHQpfWZ1bmN0aW9uIGduKHQsZSl7Zm9yKGUtPXQuZmlyc3Q7IXQubGluZXM7KWZvcih2YXIgcj0wOzsrK3Ipe3ZhciBuPXQuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+ZSl7dD1uO2JyZWFrfWUtPWl9cmV0dXJuIHQubGluZXNbZV19ZnVuY3Rpb24gbW4odCxlLHIpe3ZhciBuPVtdLGk9ZS5saW5lO3JldHVybiB0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe3ZhciBvPXQudGV4dDtpPT1yLmxpbmUmJihvPW8uc2xpY2UoMCxyLmNoKSksaT09ZS5saW5lJiYobz1vLnNsaWNlKGUuY2gpKSxuLnB1c2gobyksKytpfSksbn1mdW5jdGlvbiB2bih0LGUscil7dmFyIG49W107cmV0dXJuIHQuaXRlcihlLHIsZnVuY3Rpb24odCl7bi5wdXNoKHQudGV4dCl9KSxufWZ1bmN0aW9uIHluKHQsZSl7Zm9yKHZhciByPWUtdC5oZWlnaHQsbj10O247bj1uLnBhcmVudCluLmhlaWdodCs9cn1mdW5jdGlvbiBibih0KXtpZihudWxsPT10LnBhcmVudClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQscj10aShlLmxpbmVzLHQpLG49ZS5wYXJlbnQ7bjtlPW4sbj1uLnBhcmVudClmb3IodmFyIGk9MDtuLmNoaWxkcmVuW2ldIT1lOysraSlyKz1uLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpO3JldHVybiByK2UuZmlyc3R9ZnVuY3Rpb24geG4odCxlKXt2YXIgcj10LmZpcnN0O3Q6ZG97Zm9yKHZhciBuPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10LmNoaWxkcmVuW25dLGw9by5oZWlnaHQ7aWYobD5lKXt0PW87Y29udGludWUgdH1lLT1sLHIrPW8uY2h1bmtTaXplKCl9cmV0dXJuIHJ9d2hpbGUoIXQubGluZXMpO2Zvcih2YXIgbj0wLGk9dC5saW5lcy5sZW5ndGg7aT5uOysrbil7dmFyIHM9dC5saW5lc1tuXSxhPXMuaGVpZ2h0O2lmKGE+ZSlicmVhaztlLT1hfXJldHVybiByK259ZnVuY3Rpb24gQ24odCxlKXtlPUdyKHQuZG9jLGUpO2Zvcih2YXIgcj0wLG49ZS5wYXJlbnQsaT0wO2k8bi5saW5lcy5sZW5ndGg7KytpKXt2YXIgbz1uLmxpbmVzW2ldO2lmKG89PWUpYnJlYWs7cis9by5oZWlnaHR9Zm9yKHZhciBsPW4ucGFyZW50O2w7bj1sLGw9bi5wYXJlbnQpZm9yKHZhciBpPTA7aTxsLmNoaWxkcmVuLmxlbmd0aDsrK2kpe3ZhciBzPWwuY2hpbGRyZW5baV07aWYocz09bilicmVhaztyKz1zLmhlaWdodH1yZXR1cm4gcn1mdW5jdGlvbiB3bih0KXt2YXIgZT10Lm9yZGVyO3JldHVybiBudWxsPT1lJiYoZT10Lm9yZGVyPUJvKHQudGV4dCkpLGV9ZnVuY3Rpb24gTG4odCl7cmV0dXJue2RvbmU6W10sdW5kb25lOltdLHVuZG9EZXB0aDoxLzAsbGFzdFRpbWU6MCxsYXN0T3A6bnVsbCxsYXN0T3JpZ2luOm51bGwsZ2VuZXJhdGlvbjp0fHwxLG1heEdlbmVyYXRpb246dHx8MX19ZnVuY3Rpb24ga24odCxlLHIsbil7dmFyIGk9ZVsic3BhbnNfIit0LmlkXSxvPTA7dC5pdGVyKE1hdGgubWF4KHQuZmlyc3QsciksTWF0aC5taW4odC5maXJzdCt0LnNpemUsbiksZnVuY3Rpb24ocil7ci5tYXJrZWRTcGFucyYmKChpfHwoaT1lWyJzcGFuc18iK3QuaWRdPXt9KSlbb109ci5tYXJrZWRTcGFucyksKytvfSl9ZnVuY3Rpb24gU24odCxlKXt2YXIgcj17bGluZTplLmZyb20ubGluZSxjaDplLmZyb20uY2h9LG49e2Zyb206cix0bzpsbyhlKSx0ZXh0Om1uKHQsZS5mcm9tLGUudG8pfTtyZXR1cm4ga24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKSxkbih0LGZ1bmN0aW9uKHQpe2tuKHQsbixlLmZyb20ubGluZSxlLnRvLmxpbmUrMSl9LCEwKSxufWZ1bmN0aW9uIE1uKHQsZSxyLG4pe3ZhciBpPXQuaGlzdG9yeTtpLnVuZG9uZS5sZW5ndGg9MDt2YXIgbz0rbmV3IERhdGUsbD1RbihpLmRvbmUpO2lmKGwmJihpLmxhc3RPcD09bnx8aS5sYXN0T3JpZ2luPT1lLm9yaWdpbiYmZS5vcmlnaW4mJigiKyI9PWUub3JpZ2luLmNoYXJBdCgwKSYmdC5jbSYmaS5sYXN0VGltZT5vLXQuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheXx8IioiPT1lLm9yaWdpbi5jaGFyQXQoMCkpKSl7dmFyIHM9UW4obC5jaGFuZ2VzKTtqZShlLmZyb20sZS50bykmJmplKGUuZnJvbSxzLnRvKT9zLnRvPWxvKGUpOmwuY2hhbmdlcy5wdXNoKFNuKHQsZSkpLGwuYW5jaG9yQWZ0ZXI9ci5hbmNob3IsbC5oZWFkQWZ0ZXI9ci5oZWFkfWVsc2UgZm9yKGw9e2NoYW5nZXM6W1NuKHQsZSldLGdlbmVyYXRpb246aS5nZW5lcmF0aW9uLGFuY2hvckJlZm9yZTp0LnNlbC5hbmNob3IsaGVhZEJlZm9yZTp0LnNlbC5oZWFkLGFuY2hvckFmdGVyOnIuYW5jaG9yLGhlYWRBZnRlcjpyLmhlYWR9LGkuZG9uZS5wdXNoKGwpLGkuZ2VuZXJhdGlvbj0rK2kubWF4R2VuZXJhdGlvbjtpLmRvbmUubGVuZ3RoPmkudW5kb0RlcHRoOylpLmRvbmUuc2hpZnQoKTtpLmxhc3RUaW1lPW8saS5sYXN0T3A9bixpLmxhc3RPcmlnaW49ZS5vcmlnaW59ZnVuY3Rpb24gVG4odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlLHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLm1hcmtlci5leHBsaWNpdGx5Q2xlYXJlZD9lfHwoZT10LnNsaWNlKDAscikpOmUmJmUucHVzaCh0W3JdKTtyZXR1cm4gZT9lLmxlbmd0aD9lOm51bGw6dH1mdW5jdGlvbiBBbih0LGUpe3ZhciByPWVbInNwYW5zXyIrdC5pZF07aWYoIXIpcmV0dXJuIG51bGw7Zm9yKHZhciBuPTAsaT1bXTtuPGUudGV4dC5sZW5ndGg7KytuKWkucHVzaChUbihyW25dKSk7cmV0dXJuIGl9ZnVuY3Rpb24gSG4odCxlKXtmb3IodmFyIHI9MCxuPVtdO3I8dC5sZW5ndGg7KytyKXt2YXIgaT10W3JdLG89aS5jaGFuZ2VzLGw9W107bi5wdXNoKHtjaGFuZ2VzOmwsYW5jaG9yQmVmb3JlOmkuYW5jaG9yQmVmb3JlLGhlYWRCZWZvcmU6aS5oZWFkQmVmb3JlLGFuY2hvckFmdGVyOmkuYW5jaG9yQWZ0ZXIsaGVhZEFmdGVyOmkuaGVhZEFmdGVyfSk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDsrK3Mpe3ZhciBhLHU9b1tzXTtpZihsLnB1c2goe2Zyb206dS5mcm9tLHRvOnUudG8sdGV4dDp1LnRleHR9KSxlKWZvcih2YXIgYyBpbiB1KShhPWMubWF0Y2goL15zcGFuc18oXGQrKSQvKSkmJnRpKGUsTnVtYmVyKGFbMV0pKT4tMSYmKFFuKGwpW2NdPXVbY10sZGVsZXRlIHVbY10pfX1yZXR1cm4gbn1mdW5jdGlvbiBObih0LGUscixuKXtyPHQubGluZT90LmxpbmUrPW46ZTx0LmxpbmUmJih0LmxpbmU9ZSx0LmNoPTApfWZ1bmN0aW9uIERuKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXtmb3IodmFyIG89dFtpXSxsPSEwLHM9MDtzPG8uY2hhbmdlcy5sZW5ndGg7KytzKXt2YXIgYT1vLmNoYW5nZXNbc107aWYoby5jb3BpZWR8fChhLmZyb209WmUoYS5mcm9tKSxhLnRvPVplKGEudG8pKSxyPGEuZnJvbS5saW5lKWEuZnJvbS5saW5lKz1uLGEudG8ubGluZSs9bjtlbHNlIGlmKGU8PWEudG8ubGluZSl7bD0hMTticmVha319by5jb3BpZWR8fChvLmFuY2hvckJlZm9yZT1aZShvLmFuY2hvckJlZm9yZSksby5oZWFkQmVmb3JlPVplKG8uaGVhZEJlZm9yZSksby5hbmNob3JBZnRlcj1aZShvLmFuY2hvckFmdGVyKSxvLnJlYWRBZnRlcj1aZShvLmhlYWRBZnRlciksby5jb3BpZWQ9ITApLGw/KE5uKG8uYW5jaG9yQmVmb3JlKSxObihvLmhlYWRCZWZvcmUpLE5uKG8uYW5jaG9yQWZ0ZXIpLE5uKG8uaGVhZEFmdGVyKSk6KHQuc3BsaWNlKDAsaSsxKSxpPTApfX1mdW5jdGlvbiBXbih0LGUpe3ZhciByPWUuZnJvbS5saW5lLG49ZS50by5saW5lLGk9ZS50ZXh0Lmxlbmd0aC0obi1yKS0xO0RuKHQuZG9uZSxyLG4saSksRG4odC51bmRvbmUscixuLGkpfWZ1bmN0aW9uIE9uKCl7UG4odGhpcyl9ZnVuY3Rpb24gRW4odCl7cmV0dXJuIHQuc3RvcHx8KHQuc3RvcD1PbiksdH1mdW5jdGlvbiB6bih0KXt0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIEluKHQpe3Quc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gRm4odCl7cmV0dXJuIG51bGwhPXQuZGVmYXVsdFByZXZlbnRlZD90LmRlZmF1bHRQcmV2ZW50ZWQ6MD09dC5yZXR1cm5WYWx1ZX1mdW5jdGlvbiBQbih0KXt6bih0KSxJbih0KX1mdW5jdGlvbiBSbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudH1mdW5jdGlvbiBCbih0KXt2YXIgZT10LndoaWNoO3JldHVybiBudWxsPT1lJiYoMSZ0LmJ1dHRvbj9lPTE6MiZ0LmJ1dHRvbj9lPTM6NCZ0LmJ1dHRvbiYmKGU9MikpLEtpJiZ0LmN0cmxLZXkmJjE9PWUmJihlPTMpLGV9ZnVuY3Rpb24gR24odCxlLHIpe2lmKHQuYWRkRXZlbnRMaXN0ZW5lcil0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuYXR0YWNoRXZlbnQpdC5hdHRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVyc3x8KHQuX2hhbmRsZXJzPXt9KSxpPW5bZV18fChuW2VdPVtdKTtpLnB1c2gocil9fWZ1bmN0aW9uIFZuKHQsZSxyKXtpZih0LnJlbW92ZUV2ZW50TGlzdGVuZXIpdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMSk7ZWxzZSBpZih0LmRldGFjaEV2ZW50KXQuZGV0YWNoRXZlbnQoIm9uIitlLHIpO2Vsc2V7dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKCFuKXJldHVybjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoOysraSlpZihuW2ldPT1yKXtuLnNwbGljZShpLDEpO2JyZWFrfX19ZnVuY3Rpb24gS24odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYocilmb3IodmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLGk9MDtpPHIubGVuZ3RoOysraSlyW2ldLmFwcGx5KG51bGwsbil9ZnVuY3Rpb24gVW4odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxpKX19dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKG4pe3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtTb3x8KCsrTW8sU289W10sc2V0VGltZW91dChfbiwwKSk7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDsrK28pU28ucHVzaChyKG5bb10pKX19ZnVuY3Rpb24gWG4odCxlLHIpe3JldHVybiBLbih0LHJ8fGUudHlwZSx0LGUpLEZuKGUpfHxlLmNvZGVtaXJyb3JJZ25vcmV9ZnVuY3Rpb24gX24oKXstLU1vO3ZhciB0PVNvO1NvPW51bGw7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2UpdFtlXSgpfWZ1bmN0aW9uIFluKHQsZSl7dmFyIHI9dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO3JldHVybiByJiZyLmxlbmd0aD4wfWZ1bmN0aW9uIGpuKHQpe3QucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7R24odGhpcyx0LGUpfSx0LnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXtWbih0aGlzLHQsZSl9fWZ1bmN0aW9uICRuKCl7dGhpcy5pZD1udWxsfWZ1bmN0aW9uIFpuKHQsZSxyLG4saSl7bnVsbD09ZSYmKGU9dC5zZWFyY2goL1teXHNcdTAwYTBdLyksLTE9PWUmJihlPXQubGVuZ3RoKSk7Zm9yKHZhciBvPW58fDAsbD1pfHwwO2U+bzsrK28pIgkiPT10LmNoYXJBdChvKT9sKz1yLWwlcjorK2w7cmV0dXJuIGx9ZnVuY3Rpb24gcW4odCl7Zm9yKDtIby5sZW5ndGg8PXQ7KUhvLnB1c2goUW4oSG8pKyIgIik7cmV0dXJuIEhvW3RdfWZ1bmN0aW9uIFFuKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfWZ1bmN0aW9uIEpuKHQpe2lmKEdpKXQuc2VsZWN0aW9uU3RhcnQ9MCx0LnNlbGVjdGlvbkVuZD10LnZhbHVlLmxlbmd0aDtlbHNlIHRyeXt0LnNlbGVjdCgpfWNhdGNoKGUpe319ZnVuY3Rpb24gdGkodCxlKXtpZih0LmluZGV4T2YpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO24+cjsrK3IpaWYodFtyXT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBlaSh0LGUpe2Z1bmN0aW9uIHIoKXt9ci5wcm90b3R5cGU9dDt2YXIgbj1uZXcgcjtyZXR1cm4gZSYmcmkoZSxuKSxufWZ1bmN0aW9uIHJpKHQsZSl7ZXx8KGU9e30pO2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT1bXSxyPTA7dD5yOysrcillLnB1c2godm9pZCAwKTtyZXR1cm4gZX1mdW5jdGlvbiBpaSh0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gb2kodCl7cmV0dXJuL1x3Ly50ZXN0KHQpfHx0PiLCgCImJih0LnRvVXBwZXJDYXNlKCkhPXQudG9Mb3dlckNhc2UoKXx8Tm8udGVzdCh0KSl9ZnVuY3Rpb24gbGkodCl7Zm9yKHZhciBlIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzaSh0LGUscixuKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO2lmKHImJihpLmNsYXNzTmFtZT1yKSxuJiYoaS5zdHlsZS5jc3NUZXh0PW4pLCJzdHJpbmciPT10eXBlb2YgZSljaShpLGUpO2Vsc2UgaWYoZSlmb3IodmFyIG89MDtvPGUubGVuZ3RoOysrbylpLmFwcGVuZENoaWxkKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGFpKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMubGVuZ3RoO2U+MDstLWUpdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3JldHVybiB0fWZ1bmN0aW9uIHVpKHQsZSl7cmV0dXJuIGFpKHQpLmFwcGVuZENoaWxkKGUpfWZ1bmN0aW9uIGNpKHQsZSl7Tmk/KHQuaW5uZXJIVE1MPSIiLHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpKTp0LnRleHRDb250ZW50PWV9ZnVuY3Rpb24gZmkodCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4hMX1mdW5jdGlvbiBkaSh0KXtpZihudWxsIT1PbylyZXR1cm4gT287dmFyIGU9c2koImRpdiIsbnVsbCxudWxsLCJ3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxvdy14OiBzY3JvbGwiKTtyZXR1cm4gdWkodCxlKSxlLm9mZnNldFdpZHRoJiYoT289ZS5vZmZzZXRIZWlnaHQtZS5jbGllbnRIZWlnaHQpLE9vfHwwfWZ1bmN0aW9uIHBpKHQpe2lmKG51bGw9PUVvKXt2YXIgZT1zaSgic3BhbiIsIuKAiyIpO3VpKHQsc2koInNwYW4iLFtlLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IildKSksMCE9dC5maXJzdENoaWxkLm9mZnNldEhlaWdodCYmKEVvPWUub2Zmc2V0V2lkdGg8PTEmJmUub2Zmc2V0SGVpZ2h0PjImJiFIaSl9cmV0dXJuIEVvP3NpKCJzcGFuIiwi4oCLIik6c2koInNwYW4iLCLCoCIsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgiKX1mdW5jdGlvbiBnaSh0LGUscixuKXtpZighdClyZXR1cm4gbihlLHIsImx0ciIpO2Zvcih2YXIgaT0hMSxvPTA7bzx0Lmxlbmd0aDsrK28pe3ZhciBsPXRbb107KGwuZnJvbTxyJiZsLnRvPmV8fGU9PXImJmwudG89PWUpJiYobihNYXRoLm1heChsLmZyb20sZSksTWF0aC5taW4obC50byxyKSwxPT1sLmxldmVsPyJydGwiOiJsdHIiKSxpPSEwKX1pfHxuKGUsciwibHRyIil9ZnVuY3Rpb24gbWkodCl7cmV0dXJuIHQubGV2ZWwlMj90LnRvOnQuZnJvbX1mdW5jdGlvbiB2aSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QuZnJvbTp0LnRvfWZ1bmN0aW9uIHlpKHQpe3ZhciBlPXduKHQpO3JldHVybiBlP21pKGVbMF0pOjB9ZnVuY3Rpb24gYmkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/dmkoUW4oZSkpOnQudGV4dC5sZW5ndGh9ZnVuY3Rpb24geGkodCxlKXt2YXIgcj1nbih0LmRvYyxlKSxuPUdyKHQuZG9jLHIpO24hPXImJihlPWJuKG4pKTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP2JpKG4pOnlpKG4pOjA7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gQ2kodCxlKXtmb3IodmFyIHIsbjtyPUJyKG49Z24odC5kb2MsZSkpOyllPXIuZmluZCgpLnRvLmxpbmU7dmFyIGk9d24obiksbz1pP2lbMF0ubGV2ZWwlMj95aShuKTpiaShuKTpuLnRleHQubGVuZ3RoO3JldHVybiBZZShlLG8pfWZ1bmN0aW9uIHdpKHQsZSxyKXt2YXIgbj10WzBdLmxldmVsO3JldHVybiBlPT1uPyEwOnI9PW4/ITE6cj5lfWZ1bmN0aW9uIExpKHQsZSl7Zm9yKHZhciByLG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXTtpZihpLmZyb208ZSYmaS50bz5lKXJldHVybiBSbz1udWxsLG47aWYoaS5mcm9tPT1lfHxpLnRvPT1lKXtpZihudWxsIT1yKXJldHVybiB3aSh0LGkubGV2ZWwsdFtyXS5sZXZlbCk/KFJvPXIsbik6KFJvPW4scik7cj1ufX1yZXR1cm4gUm89bnVsbCxyfWZ1bmN0aW9uIGtpKHQsZSxyLG4pe2lmKCFuKXJldHVybiBlK3I7ZG8gZSs9cjt3aGlsZShlPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChlKSkpO3JldHVybiBlfWZ1bmN0aW9uIFNpKHQsZSxyLG4pe3ZhciBpPXduKHQpO2lmKCFpKXJldHVybiBNaSh0LGUscixuKTtmb3IodmFyIG89TGkoaSxlKSxsPWlbb10scz1raSh0LGUsbC5sZXZlbCUyPy1yOnIsbik7Oyl7aWYocz5sLmZyb20mJnM8bC50bylyZXR1cm4gcztpZihzPT1sLmZyb218fHM9PWwudG8pcmV0dXJuIExpKGkscyk9PW8/czoobD1pW28rPXJdLHI+MD09bC5sZXZlbCUyP2wudG86bC5mcm9tKTtpZihsPWlbbys9cl0sIWwpcmV0dXJuIG51bGw7cz1yPjA9PWwubGV2ZWwlMj9raSh0LGwudG8sLTEsbik6a2kodCxsLmZyb20sMSxuKX19ZnVuY3Rpb24gTWkodCxlLHIsbil7dmFyIGk9ZStyO2lmKG4pZm9yKDtpPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChpKSk7KWkrPXI7cmV0dXJuIDA+aXx8aT50LnRleHQubGVuZ3RoP251bGw6aX12YXIgVGk9L2dlY2tvXC9cZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQWk9L01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSGk9QWkmJihudWxsPT1kb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw4KSxOaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDkpLERpPS9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFdpPS9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxPaT1XaSYmL1F0XC9cZCtcLlxkKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxFaT0vQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksemk9L09wZXJhXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSWk9L0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLEZpPS9LSFRNTFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFBpPS9NYWMgT1MgWCAxXGRcRChbNy05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFJpPS9NYWMgT1MgWCAxXGRcRChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEJpPS9QaGFudG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksR2k9L0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvTW9iaWxlXC9cdysvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksVmk9R2l8fC9BbmRyb2lkfHdlYk9TfEJsYWNrQmVycnl8T3BlcmEgTWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxLaT1HaXx8L01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFVpPS93aW4vaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksWGk9emkmJm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cLyhcZCpcLlxkKikvKTtYaSYmKFhpPU51bWJlcihYaVsxXSkpLFhpJiZYaT49MTUmJih6aT0hMSxXaT0hMCk7dmFyIF9pLFlpLGppLCRpPUtpJiYoT2l8fHppJiYobnVsbD09WGl8fDEyLjExPlhpKSksWmk9VGl8fEFpJiYhTmkscWk9ITEsUWk9ITEsSmk9MCx0bz0wLGVvPTAscm89bnVsbDtBaT9ybz0tLjUzOlRpP3JvPTE1OkVpP3JvPS0uNzpJaSYmKHJvPS0xLzMpO3ZhciBubyxpbyxvbz1udWxsLGxvPXQuY2hhbmdlRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQ/WWUodC5mcm9tLmxpbmUrdC50ZXh0Lmxlbmd0aC0xLFFuKHQudGV4dCkubGVuZ3RoKygxPT10LnRleHQubGVuZ3RoP3QuZnJvbS5jaDowKSk6dC50b307dC5Qb3M9WWUsdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsZm9jdXM6ZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKSxwZSh0aGlzKSxmZSh0aGlzKX0sc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHRpb25zLG49clt0XTsoclt0XSE9ZXx8Im1vZGUiPT10KSYmKHJbdF09ZSxzby5oYXNPd25Qcm9wZXJ0eSh0KSYmbGUodGhpcyxzb1t0XSkodGhpcyxlLG4pKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnNbdF19LGdldERvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY30sYWRkS2V5TWFwOmZ1bmN0aW9uKHQsZSl7dGhpcy5zdGF0ZS5rZXlNYXBzW2U/InB1c2giOiJ1bnNoaWZ0Il0odCl9LHJlbW92ZUtleU1hcDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdGF0ZS5rZXlNYXBzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT10fHwic3RyaW5nIiE9dHlwZW9mIGVbcl0mJmVbcl0ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSwhMH0sYWRkT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKGUscil7dmFyIG49ZS50b2tlbj9lOnQuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsZSk7aWYobi5zdGFydFN0YXRlKXRocm93IG5ldyBFcnJvcigiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKTt0aGlzLnN0YXRlLm92ZXJsYXlzLnB1c2goe21vZGU6bixtb2RlU3BlYzplLG9wYXF1ZTpyJiZyLm9wYXF1ZX0pLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpfSkscmVtb3ZlT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLm92ZXJsYXlzLHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG49ZVtyXS5tb2RlU3BlYztpZihuPT10fHwic3RyaW5nIj09dHlwZW9mIHQmJm4ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSx0aGlzLnN0YXRlLm1vZGVHZW4rKyx1ZSh0aGlzKSx2b2lkIDB9fSksaW5kZW50TGluZTpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXsic3RyaW5nIiE9dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZSYmKGU9bnVsbD09ZT90aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQ/InNtYXJ0IjoicHJldiI6ZT8iYWRkIjoic3VidHJhY3QiKSx0cih0aGlzLmRvYyx0KSYmaHIodGhpcyx0LGUscil9KSxpbmRlbnRTZWxlY3Rpb246bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRvYy5zZWw7aWYoamUoZS5mcm9tLGUudG8pKXJldHVybiBocih0aGlzLGUuZnJvbS5saW5lLHQpO2Zvcih2YXIgcj1lLnRvLmxpbmUtKGUudG8uY2g/MDoxKSxuPWUuZnJvbS5saW5lO3I+PW47KytuKWhyKHRoaXMsbix0KX0pLGdldFRva2VuQXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYzt0PVFlKHIsdCk7Zm9yKHZhciBuPXoodGhpcyx0LmxpbmUsZSksaT10aGlzLmRvYy5tb2RlLG89Z24ocix0LmxpbmUpLGw9bmV3IFNyKG8udGV4dCx0aGlzLm9wdGlvbnMudGFiU2l6ZSk7bC5wb3M8dC5jaCYmIWwuZW9sKCk7KXtsLnN0YXJ0PWwucG9zO3ZhciBzPWkudG9rZW4obCxuKX1yZXR1cm57c3RhcnQ6bC5zdGFydCxlbmQ6bC5wb3Msc3RyaW5nOmwuY3VycmVudCgpLGNsYXNzTmFtZTpzfHxudWxsLHR5cGU6c3x8bnVsbCxzdGF0ZTpufX0sZ2V0VG9rZW5UeXBlQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLmRvYyx0KTt2YXIgZT1Kcih0aGlzLGduKHRoaXMuZG9jLHQubGluZSkpLHI9MCxuPShlLmxlbmd0aC0xKS8yLGk9dC5jaDtpZigwPT1pKXJldHVybiBlWzJdO2Zvcig7Oyl7dmFyIG89cituPj4xO2lmKChvP2VbMipvLTFdOjApPj1pKW49bztlbHNle2lmKCEoZVsyKm8rMV08aSkpcmV0dXJuIGVbMipvKzJdO3I9bysxfX19LGdldE1vZGVBdDpmdW5jdGlvbihlKXt2YXIgcj10aGlzLmRvYy5tb2RlO3JldHVybiByLmlubmVyTW9kZT90LmlubmVyTW9kZShyLHRoaXMuZ2V0VG9rZW5BdChlKS5zdGF0ZSkubW9kZTpyfSxnZXRIZWxwZXI6ZnVuY3Rpb24odCxlKXtpZihnby5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHI9Z29bZV0sbj10aGlzLmdldE1vZGVBdCh0KTtyZXR1cm4gbltlXSYmcltuW2VdXXx8bi5oZWxwZXJUeXBlJiZyW24uaGVscGVyVHlwZV18fHJbbi5uYW1lXX19LGdldFN0YXRlQWZ0ZXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYztyZXR1cm4gdD1xZShyLG51bGw9PXQ/ci5maXJzdCtyLnNpemUtMTp0KSx6KHRoaXMsdCsxLGUpfSxjdXJzb3JDb29yZHM6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyZXR1cm4gcj1udWxsPT10P24uaGVhZDoib2JqZWN0Ij09dHlwZW9mIHQ/UWUodGhpcy5kb2MsdCk6dD9uLmZyb206bi50byxRKHRoaXMscixlfHwicGFnZSIpfSxjaGFyQ29vcmRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHEodGhpcyxRZSh0aGlzLmRvYyx0KSxlfHwicGFnZSIpfSxjb29yZHNDaGFyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHQsZXx8InBhZ2UiKSx0ZSh0aGlzLHQubGVmdCx0LnRvcCl9LGxpbmVBdEhlaWdodDpmdW5jdGlvbih0LGUpe3JldHVybiB0PVoodGhpcyx7dG9wOnQsbGVmdDowfSxlfHwicGFnZSIpLnRvcCx4bih0aGlzLmRvYyx0K3RoaXMuZGlzcGxheS52aWV3T2Zmc2V0KX0saGVpZ2h0QXRMaW5lOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ITEsbj10aGlzLmRvYy5maXJzdCt0aGlzLmRvYy5zaXplLTE7dDx0aGlzLmRvYy5maXJzdD90PXRoaXMuZG9jLmZpcnN0OnQ+biYmKHQ9bixyPSEwKTt2YXIgaT1nbih0aGlzLmRvYyx0KTtyZXR1cm4gJCh0aGlzLGduKHRoaXMuZG9jLHQpLHt0b3A6MCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wKyhyP2kuaGVpZ2h0OjApfSxkZWZhdWx0VGV4dEhlaWdodDpmdW5jdGlvbigpe3JldHVybiByZSh0aGlzLmRpc3BsYXkpfSxkZWZhdWx0Q2hhcldpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5lKHRoaXMuZGlzcGxheSl9LHNldEd1dHRlck1hcmtlcjpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ3V0dGVyTWFya2Vyc3x8KHQuZ3V0dGVyTWFya2Vycz17fSk7cmV0dXJuIG5bZV09ciwhciYmbGkobikmJih0Lmd1dHRlck1hcmtlcnM9bnVsbCksITB9KX0pLGNsZWFyR3V0dGVyOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZG9jLG49ci5maXJzdDtyLml0ZXIoZnVuY3Rpb24ocil7ci5ndXR0ZXJNYXJrZXJzJiZyLmd1dHRlck1hcmtlcnNbdF0mJihyLmd1dHRlck1hcmtlcnNbdF09bnVsbCx1ZShlLG4sbisxKSxsaShyLmd1dHRlck1hcmtlcnMpJiYoci5ndXR0ZXJNYXJrZXJzPW51bGwpKSwrK259KX0pLGFkZExpbmVDbGFzczpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPSJ0ZXh0Ij09ZT8idGV4dENsYXNzIjoiYmFja2dyb3VuZCI9PWU/ImJnQ2xhc3MiOiJ3cmFwQ2xhc3MiO2lmKHRbbl0pe2lmKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIrcisiKD86JHxcXHMpIikudGVzdCh0W25dKSlyZXR1cm4hMTt0W25dKz0iICIrcn1lbHNlIHRbbl09cjtyZXR1cm4hMH0pfSkscmVtb3ZlTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyIsaT10W25dO2lmKCFpKXJldHVybiExO2lmKG51bGw9PXIpdFtuXT1udWxsO2Vsc2V7dmFyIG89aS5tYXRjaChuZXcgUmVnRXhwKCIoPzpefFxccyspIityKyIoPzokfFxccyspIikpO2lmKCFvKXJldHVybiExO3ZhciBsPW8uaW5kZXgrb1swXS5sZW5ndGg7dFtuXT1pLnNsaWNlKDAsby5pbmRleCkrKG8uaW5kZXgmJmwhPWkubGVuZ3RoPyIgIjoiIikraS5zbGljZShsKXx8bnVsbH1yZXR1cm4hMH0pfSksYWRkTGluZVdpZGdldDpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4ganIodGhpcyx0LGUscil9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKHQpe3QuY2xlYXIoKX0sbGluZUluZm86ZnVuY3Rpb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZighdHIodGhpcy5kb2MsdCkpcmV0dXJuIG51bGw7dmFyIGU9dDtpZih0PWduKHRoaXMuZG9jLHQpLCF0KXJldHVybiBudWxsfWVsc2V7dmFyIGU9Ym4odCk7aWYobnVsbD09ZSlyZXR1cm4gbnVsbH1yZXR1cm57bGluZTplLGhhbmRsZTp0LHRleHQ6dC50ZXh0LGd1dHRlck1hcmtlcnM6dC5ndXR0ZXJNYXJrZXJzLHRleHRDbGFzczp0LnRleHRDbGFzcyxiZ0NsYXNzOnQuYmdDbGFzcyx3cmFwQ2xhc3M6dC53cmFwQ2xhc3Msd2lkZ2V0czp0LndpZGdldHN9fSxnZXRWaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZGlzcGxheS5zaG93aW5nRnJvbSx0bzp0aGlzLmRpc3BsYXkuc2hvd2luZ1RvfX0sYWRkV2lkZ2V0OmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89dGhpcy5kaXNwbGF5O3Q9USh0aGlzLFFlKHRoaXMuZG9jLHQpKTt2YXIgbD10LmJvdHRvbSxzPXQubGVmdDtpZihlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zaXplci5hcHBlbmRDaGlsZChlKSwib3ZlciI9PW4pbD10LnRvcDtlbHNlIGlmKCJhYm92ZSI9PW58fCJuZWFyIj09bil7dmFyIGE9TWF0aC5tYXgoby53cmFwcGVyLmNsaWVudEhlaWdodCx0aGlzLmRvYy5oZWlnaHQpLHU9TWF0aC5tYXgoby5zaXplci5jbGllbnRXaWR0aCxvLmxpbmVTcGFjZS5jbGllbnRXaWR0aCk7KCJhYm92ZSI9PW58fHQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PmEpJiZ0LnRvcD5lLm9mZnNldEhlaWdodD9sPXQudG9wLWUub2Zmc2V0SGVpZ2h0OnQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PD1hJiYobD10LmJvdHRvbSkscytlLm9mZnNldFdpZHRoPnUmJihzPXUtZS5vZmZzZXRXaWR0aCl9ZS5zdHlsZS50b3A9bCsicHgiLGUuc3R5bGUubGVmdD1lLnN0eWxlLnJpZ2h0PSIiLCJyaWdodCI9PWk/KHM9by5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoLGUuc3R5bGUucmlnaHQ9IjBweCIpOigibGVmdCI9PWk/cz0wOiJtaWRkbGUiPT1pJiYocz0oby5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoKS8yKSxlLnN0eWxlLmxlZnQ9cysicHgiKSxyJiZhcih0aGlzLHMsbCxzK2Uub2Zmc2V0V2lkdGgsbCtlLm9mZnNldEhlaWdodCl9LHRyaWdnZXJPbktleURvd246bGUobnVsbCxXZSksZXhlY0NvbW1hbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG1vW3RdKHRoaXMpfSxmaW5kUG9zSDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBvPTAsbD1RZSh0aGlzLmRvYyx0KTtlPm8mJihsPXByKHRoaXMuZG9jLGwsaSxyLG4pLCFsLmhpdFNpZGUpOysrbyk7cmV0dXJuIGx9LG1vdmVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyPW4uc2hpZnR8fG4uZXh0ZW5kfHxqZShuLmZyb20sbi50byk/cHIodGhpcy5kb2Msbi5oZWFkLHQsZSx0aGlzLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTowPnQ/bi5mcm9tOm4udG8sZXIodGhpcy5kb2MscixyLHQpfSksZGVsZXRlSDpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsO2plKHIuZnJvbSxyLnRvKT9fZSh0aGlzLmRvYywiIixyLmZyb20scHIodGhpcy5kb2Msci5oZWFkLHQsZSwhMSksIitkZWxldGUiKTpfZSh0aGlzLmRvYywiIixyLmZyb20sci50bywiK2RlbGV0ZSIpLHRoaXMuY3VyT3AudXNlclNlbENoYW5nZT0hMH0pLGZpbmRQb3NWOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTEsbz1uOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBsPTAscz1RZSh0aGlzLmRvYyx0KTtlPmw7KytsKXt2YXIgYT1RKHRoaXMscywiZGl2Iik7aWYobnVsbD09bz9vPWEubGVmdDphLmxlZnQ9byxzPWdyKHRoaXMsYSxpLHIpLHMuaGl0U2lkZSlicmVha31yZXR1cm4gc30sbW92ZVY6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jLnNlbCxuPVEodGhpcyxyLmhlYWQsImRpdiIpO251bGwhPXIuZ29hbENvbHVtbiYmKG4ubGVmdD1yLmdvYWxDb2x1bW4pO3ZhciBpPWdyKHRoaXMsbix0LGUpOyJwYWdlIj09ZSYmZnIodGhpcywwLHEodGhpcyxpLCJkaXYiKS50b3Atbi50b3ApLGVyKHRoaXMuZG9jLGksaSx0KSxyLmdvYWxDb2x1bW49bi5sZWZ0fSksdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpeyhudWxsPT10fHx0IT10aGlzLnN0YXRlLm92ZXJ3cml0ZSkmJigodGhpcy5zdGF0ZS5vdmVyd3JpdGU9IXRoaXMuc3RhdGUub3ZlcndyaXRlKT90aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI6dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWU9dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itb3ZlcndyaXRlIiwiIikpfSxoYXNGb2N1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmZvY3VzZWR9LHNjcm9sbFRvOmxlKG51bGwsZnVuY3Rpb24odCxlKXtjcih0aGlzLHQsZSl9KSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kaXNwbGF5LnNjcm9sbGVyLGU9VG87cmV0dXJue2xlZnQ6dC5zY3JvbGxMZWZ0LHRvcDp0LnNjcm9sbFRvcCxoZWlnaHQ6dC5zY3JvbGxIZWlnaHQtZSx3aWR0aDp0LnNjcm9sbFdpZHRoLWUsY2xpZW50SGVpZ2h0OnQuY2xpZW50SGVpZ2h0LWUsY2xpZW50V2lkdGg6dC5jbGllbnRXaWR0aC1lfX0sc2Nyb2xsSW50b1ZpZXc6bGUobnVsbCxmdW5jdGlvbih0LGUpe251bGw9PXQ/dD17ZnJvbTp0aGlzLmRvYy5zZWwuaGVhZCx0bzpudWxsfToibnVtYmVyIj09dHlwZW9mIHQ/dD17ZnJvbTpZZSh0LDApLHRvOm51bGx9Om51bGw9PXQuZnJvbSYmKHQ9e2Zyb206dCx0bzpudWxsfSksdC50b3x8KHQudG89dC5mcm9tKSxlfHwoZT0wKTt2YXIgcj10O251bGwhPXQuZnJvbS5saW5lJiYodGhpcy5jdXJPcC5zY3JvbGxUb1Bvcz17ZnJvbTp0LmZyb20sdG86dC50byxtYXJnaW46ZX0scj17ZnJvbTpRKHRoaXMsdC5mcm9tKSx0bzpRKHRoaXMsdC50byl9KTt2YXIgbj11cih0aGlzLE1hdGgubWluKHIuZnJvbS5sZWZ0LHIudG8ubGVmdCksTWF0aC5taW4oci5mcm9tLnRvcCxyLnRvLnRvcCktZSxNYXRoLm1heChyLmZyb20ucmlnaHQsci50by5yaWdodCksTWF0aC5tYXgoci5mcm9tLmJvdHRvbSxyLnRvLmJvdHRvbSkrZSk7Y3IodGhpcyxuLnNjcm9sbExlZnQsbi5zY3JvbGxUb3ApfSksc2V0U2l6ZTpsZShudWxsLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fC9eXGQrJC8udGVzdChTdHJpbmcodCkpP3QrInB4Ijp0fW51bGwhPXQmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aD1yKHQpKSxudWxsIT1lJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0PXIoZSkpLHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dGhpcy5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCksdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMH0pLG9wZXJhdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gYWUodGhpcyx0KX0scmVmcmVzaDpsZShudWxsLGZ1bmN0aW9uKCl7dmFyIHQ9bnVsbD09dGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7Xyh0aGlzKSxjcih0aGlzLHRoaXMuZG9jLnNjcm9sbExlZnQsdGhpcy5kb2Muc2Nyb2xsVG9wKSx1ZSh0aGlzKSx0JiZvKHRoaXMpfSksc3dhcERvYzpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jO3JldHVybiBlLmNtPW51bGwscG4odGhpcyx0KSxfKHRoaXMpLGRlKHRoaXMsITApLGNyKHRoaXMsdC5zY3JvbGxMZWZ0LHQuc2Nyb2xsVG9wKSxVbih0aGlzLCJzd2FwRG9jIix0aGlzLGUpLGV9KSxnZXRJbnB1dEZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dH0sZ2V0V3JhcHBlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXJ9LGdldFNjcm9sbGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXJ9LGdldEd1dHRlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnN9fSxqbih0KTt2YXIgc289dC5vcHRpb25IYW5kbGVycz17fSxhbz10LmRlZmF1bHRzPXt9LHVvPXQuSW5pdD17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ29kZU1pcnJvci5Jbml0In19O3lyKCJ2YWx1ZSIsIiIsZnVuY3Rpb24odCxlKXt0LnNldFZhbHVlKGUpfSwhMCkseXIoIm1vZGUiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRvYy5tb2RlT3B0aW9uPWUscih0KX0sITApLHlyKCJpbmRlbnRVbml0IiwyLHIsITApLHlyKCJpbmRlbnRXaXRoVGFicyIsITEpLHlyKCJzbWFydEluZGVudCIsITApLHlyKCJ0YWJTaXplIiw0LGZ1bmN0aW9uKHQpe3IodCksXyh0KSx1ZSh0KX0sITApLHlyKCJzcGVjaWFsQ2hhcnMiLC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVmZWZmXS9nLGZ1bmN0aW9uKHQsZSl7dC5vcHRpb25zLnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKGUuc291cmNlKyhlLnRlc3QoIgkiKT8iIjoifAkiKSwiZyIpLHQucmVmcmVzaCgpfSwhMCkseXIoInNwZWNpYWxDaGFyUGxhY2Vob2xkZXIiLG5uLGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSwhMCkseXIoImVsZWN0cmljQ2hhcnMiLCEwKSx5cigicnRsTW92ZVZpc3VhbGx5IiwhVWkpLHlyKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCEwKSx5cigidGhlbWUiLCJkZWZhdWx0IixmdW5jdGlvbih0KXtzKHQpLGEodCl9LCEwKSx5cigia2V5TWFwIiwiZGVmYXVsdCIsbCkseXIoImV4dHJhS2V5cyIsbnVsbCkseXIoIm9uS2V5RXZlbnQiLG51bGwpLHlyKCJvbkRyYWdFdmVudCIsbnVsbCkseXIoImxpbmVXcmFwcGluZyIsITEsbiwhMCkseXIoImd1dHRlcnMiLFtdLGZ1bmN0aW9uKHQpe2godC5vcHRpb25zKSxhKHQpfSwhMCkseXIoImZpeGVkR3V0dGVyIiwhMCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQ9ZT95KHQuZGlzcGxheSkrInB4IjoiMCIsdC5yZWZyZXNoKCl9LCEwKSx5cigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIiLCExLGQsITApLHlyKCJsaW5lTnVtYmVycyIsITEsZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZmlyc3RMaW5lTnVtYmVyIiwxLGEsITApLHlyKCJsaW5lTnVtYmVyRm9ybWF0dGVyIixmdW5jdGlvbih0KXtyZXR1cm4gdH0sYSwhMCkseXIoInNob3dDdXJzb3JXaGVuU2VsZWN0aW5nIiwhMSxBLCEwKSx5cigicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51IiwhMCkseXIoInJlYWRPbmx5IiwhMSxmdW5jdGlvbih0LGUpeyJub2N1cnNvciI9PWU/KHplKHQpLHQuZGlzcGxheS5pbnB1dC5ibHVyKCksdC5kaXNwbGF5LmRpc2FibGVkPSEwKToodC5kaXNwbGF5LmRpc2FibGVkPSExLGV8fGRlKHQsITApKX0pLHlyKCJkcmFnRHJvcCIsITApLHlyKCJjdXJzb3JCbGlua1JhdGUiLDUzMCkseXIoImN1cnNvclNjcm9sbE1hcmdpbiIsMCkseXIoImN1cnNvckhlaWdodCIsMSkseXIoIndvcmtUaW1lIiwxMDApLHlyKCJ3b3JrRGVsYXkiLDEwMCkseXIoImZsYXR0ZW5TcGFucyIsITApLHlyKCJwb2xsSW50ZXJ2YWwiLDEwMCkseXIoInVuZG9EZXB0aCIsNDAsZnVuY3Rpb24odCxlKXt0LmRvYy5oaXN0b3J5LnVuZG9EZXB0aD1lfSkseXIoImhpc3RvcnlFdmVudERlbGF5Iiw1MDApLHlyKCJ2aWV3cG9ydE1hcmdpbiIsMTAsZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigibWF4SGlnaGxpZ2h0TGVuZ3RoIiwxZTQsZnVuY3Rpb24odCl7cih0KSx0LnJlZnJlc2goKX0sITApLHlyKCJjcnVkZU1lYXN1cmluZ0Zyb20iLDFlNCkseXIoIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCEwLGZ1bmN0aW9uKHQsZSl7ZXx8KHQuZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3A9dC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQ9MCl9KSx5cigidGFiaW5kZXgiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRpc3BsYXkuaW5wdXQudGFiSW5kZXg9ZXx8IiJ9KSx5cigiYXV0b2ZvY3VzIixudWxsKTt2YXIgY289dC5tb2Rlcz17fSxmbz10Lm1pbWVNb2Rlcz17fTt0LmRlZmluZU1vZGU9ZnVuY3Rpb24oZSxyKXtpZih0LmRlZmF1bHRzLm1vZGV8fCJudWxsIj09ZXx8KHQuZGVmYXVsdHMubW9kZT1lKSxhcmd1bWVudHMubGVuZ3RoPjIpe3IuZGVwZW5kZW5jaWVzPVtdO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDsrK24pci5kZXBlbmRlbmNpZXMucHVzaChhcmd1bWVudHNbbl0pfWNvW2VdPXJ9LHQuZGVmaW5lTUlNRT1mdW5jdGlvbih0LGUpe2ZvW3RdPWV9LHQucmVzb2x2ZU1vZGU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiZmby5oYXNPd25Qcm9wZXJ0eShlKSllPWZvW2VdO2Vsc2UgaWYoZSYmInN0cmluZyI9PXR5cGVvZiBlLm5hbWUmJmZvLmhhc093blByb3BlcnR5KGUubmFtZSkpe3ZhciByPWZvW2UubmFtZV07ZT1laShyLGUpLGUubmFtZT1yLm5hbWV9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUmJi9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChlKSlyZXR1cm4gdC5yZXNvbHZlTW9kZSgiYXBwbGljYXRpb24veG1sIik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3tuYW1lOmV9OmV8fHtuYW1lOiJudWxsIn19LHQuZ2V0TW9kZT1mdW5jdGlvbihlLHIpe3ZhciByPXQucmVzb2x2ZU1vZGUociksbj1jb1tyLm5hbWVdO2lmKCFuKXJldHVybiB0LmdldE1vZGUoZSwidGV4dC9wbGFpbiIpO3ZhciBpPW4oZSxyKTtpZihoby5oYXNPd25Qcm9wZXJ0eShyLm5hbWUpKXt2YXIgbz1ob1tyLm5hbWVdO2Zvcih2YXIgbCBpbiBvKW8uaGFzT3duUHJvcGVydHkobCkmJihpLmhhc093blByb3BlcnR5KGwpJiYoaVsiXyIrbF09aVtsXSksaVtsXT1vW2xdKX1yZXR1cm4gaS5uYW1lPXIubmFtZSxpfSx0LmRlZmluZU1vZGUoIm51bGwiLGZ1bmN0aW9uKCl7cmV0dXJue3Rva2VuOmZ1bmN0aW9uKHQpe3Quc2tpcFRvRW5kKCl9fX0pLHQuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsIm51bGwiKTt2YXIgaG89dC5tb2RlRXh0ZW5zaW9ucz17fTt0LmV4dGVuZE1vZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1oby5oYXNPd25Qcm9wZXJ0eSh0KT9ob1t0XTpob1t0XT17fTtyaShlLHIpfSx0LmRlZmluZUV4dGVuc2lvbj1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlW2VdPXJ9LHQuZGVmaW5lRG9jRXh0ZW5zaW9uPWZ1bmN0aW9uKHQsZSl7d28ucHJvdG90eXBlW3RdPWV9LHQuZGVmaW5lT3B0aW9uPXlyO3ZhciBwbz1bXTt0LmRlZmluZUluaXRIb29rPWZ1bmN0aW9uKHQpe3BvLnB1c2godCl9O3ZhciBnbz10LmhlbHBlcnM9e307dC5yZWdpc3RlckhlbHBlcj1mdW5jdGlvbihlLHIsbil7Z28uaGFzT3duUHJvcGVydHkoZSl8fChnb1tlXT10W2VdPXt9KSxnb1tlXVtyXT1ufSx0LmlzV29yZENoYXI9b2ksdC5jb3B5U3RhdGU9YnIsdC5zdGFydFN0YXRlPXhyLHQuaW5uZXJNb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKDt0LmlubmVyTW9kZTspe3ZhciByPXQuaW5uZXJNb2RlKGUpO2lmKCFyfHxyLm1vZGU9PXQpYnJlYWs7ZT1yLnN0YXRlLHQ9ci5tb2RlfXJldHVybiByfHx7bW9kZTp0LHN0YXRlOmV9fTt2YXIgbW89dC5jb21tYW5kcz17c2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3Quc2V0U2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCksWWUodC5sYXN0TGluZSgpKSl9LGtpbGxMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCEwKSxyPXQuZ2V0Q3Vyc29yKCExKSxuPSFqZShlLHIpO258fHQuZ2V0TGluZShlLmxpbmUpLmxlbmd0aCE9ZS5jaD90LnJlcGxhY2VSYW5nZSgiIixlLG4/cjpZZShlLmxpbmUpLCIrZGVsZXRlIik6dC5yZXBsYWNlUmFuZ2UoIiIsZSxZZShlLmxpbmUrMSwwKSwiK2RlbGV0ZSIpfSxkZWxldGVMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkubGluZTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLDApLFllKGUpLCIrZGVsZXRlIil9LGRlbExpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCk7dC5yZXBsYWNlUmFuZ2UoIiIsWWUoZS5saW5lLDApLGUsIitkZWxldGUiKX0sdW5kbzpmdW5jdGlvbih0KXt0LnVuZG8oKX0scmVkbzpmdW5jdGlvbih0KXt0LnJlZG8oKX0sZ29Eb2NTdGFydDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0LmZpcnN0TGluZSgpLDApKX0sZ29Eb2NFbmQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oWWUodC5sYXN0TGluZSgpKSl9LGdvTGluZVN0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKHhpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVN0YXJ0U21hcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXhpKHQsZS5saW5lKSxuPXQuZ2V0TGluZUhhbmRsZShyLmxpbmUpLGk9d24obik7aWYoaSYmMCE9aVswXS5sZXZlbCl0LmV4dGVuZFNlbGVjdGlvbihyKTtlbHNle3ZhciBvPU1hdGgubWF4KDAsbi50ZXh0LnNlYXJjaCgvXFMvKSksbD1lLmxpbmU9PXIubGluZSYmZS5jaDw9byYmZS5jaDt0LmV4dGVuZFNlbGVjdGlvbihZZShyLmxpbmUsbD8wOm8pKX19LGdvTGluZUVuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihDaSh0LHQuZ2V0Q3Vyc29yKCkubGluZSkpfSxnb0xpbmVSaWdodDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OnQuZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoKzEwMCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lTGVmdDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OjAsdG9wOmV9LCJkaXYiKSl9LGdvTGluZVVwOmZ1bmN0aW9uKHQpe3QubW92ZVYoLTEsImxpbmUiKX0sZ29MaW5lRG93bjpmdW5jdGlvbih0KXt0Lm1vdmVWKDEsImxpbmUiKX0sZ29QYWdlVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwicGFnZSIpfSxnb1BhZ2VEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwicGFnZSIpfSxnb0NoYXJMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNoYXIiKX0sZ29DaGFyUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJjaGFyIil9LGdvQ29sdW1uTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJjb2x1bW4iKX0sZ29Db2x1bW5SaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNvbHVtbiIpfSxnb1dvcmRMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsIndvcmQiKX0sZ29Hcm91cFJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiZ3JvdXAiKX0sZ29Hcm91cExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiZ3JvdXAiKX0sZ29Xb3JkUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJ3b3JkIil9LGRlbENoYXJCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJjaGFyIil9LGRlbENoYXJBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwiY2hhciIpfSxkZWxXb3JkQmVmb3JlOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgtMSwid29yZCIpfSxkZWxXb3JkQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsIndvcmQiKX0sZGVsR3JvdXBCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJncm91cCIpfSxkZWxHcm91cEFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJncm91cCIpfSxpbmRlbnRBdXRvOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpfSxpbmRlbnRNb3JlOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKX0saW5kZW50TGVzczpmdW5jdGlvbih0KXt0LmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKX0saW5zZXJ0VGFiOmZ1bmN0aW9uKHQpe3QucmVwbGFjZVNlbGVjdGlvbigiCSIsImVuZCIsIitpbnB1dCIpfSxkZWZhdWx0VGFiOmZ1bmN0aW9uKHQpe3Quc29tZXRoaW5nU2VsZWN0ZWQoKT90LmluZGVudFNlbGVjdGlvbigiYWRkIik6dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LHRyYW5zcG9zZUNoYXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkscj10LmdldExpbmUoZS5saW5lKTtlLmNoPjAmJmUuY2g8ci5sZW5ndGgtMSYmdC5yZXBsYWNlUmFuZ2Uoci5jaGFyQXQoZS5jaCkrci5jaGFyQXQoZS5jaC0xKSxZZShlLmxpbmUsZS5jaC0xKSxZZShlLmxpbmUsZS5jaCsxKSl9LG5ld2xpbmVBbmRJbmRlbnQ6ZnVuY3Rpb24odCl7bGUodCxmdW5jdGlvbigpe3QucmVwbGFjZVNlbGVjdGlvbigiXG4iLCJlbmQiLCIraW5wdXQiKSx0LmluZGVudExpbmUodC5nZXRDdXJzb3IoKS5saW5lLG51bGwsITApfSkoKX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpe3QudG9nZ2xlT3ZlcndyaXRlKCl9fSx2bz10LmtleU1hcD17fTt2by5iYXNpYz17TGVmdDoiZ29DaGFyTGVmdCIsUmlnaHQ6ImdvQ2hhclJpZ2h0IixVcDoiZ29MaW5lVXAiLERvd246ImdvTGluZURvd24iLEVuZDoiZ29MaW5lRW5kIixIb21lOiJnb0xpbmVTdGFydFNtYXJ0IixQYWdlVXA6ImdvUGFnZVVwIixQYWdlRG93bjoiZ29QYWdlRG93biIsRGVsZXRlOiJkZWxDaGFyQWZ0ZXIiLEJhY2tzcGFjZToiZGVsQ2hhckJlZm9yZSIsIlNoaWZ0LUJhY2tzcGFjZSI6ImRlbENoYXJCZWZvcmUiLFRhYjoiZGVmYXVsdFRhYiIsIlNoaWZ0LVRhYiI6ImluZGVudEF1dG8iLEVudGVyOiJuZXdsaW5lQW5kSW5kZW50IixJbnNlcnQ6InRvZ2dsZU92ZXJ3cml0ZSJ9LHZvLnBjRGVmYXVsdD17IkN0cmwtQSI6InNlbGVjdEFsbCIsIkN0cmwtRCI6ImRlbGV0ZUxpbmUiLCJDdHJsLVoiOiJ1bmRvIiwiU2hpZnQtQ3RybC1aIjoicmVkbyIsIkN0cmwtWSI6InJlZG8iLCJDdHJsLUhvbWUiOiJnb0RvY1N0YXJ0IiwiQWx0LVVwIjoiZ29Eb2NTdGFydCIsIkN0cmwtRW5kIjoiZ29Eb2NFbmQiLCJDdHJsLURvd24iOiJnb0RvY0VuZCIsIkN0cmwtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQ3RybC1SaWdodCI6ImdvR3JvdXBSaWdodCIsIkFsdC1MZWZ0IjoiZ29MaW5lU3RhcnQiLCJBbHQtUmlnaHQiOiJnb0xpbmVFbmQiLCJDdHJsLUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ3RybC1TIjoic2F2ZSIsIkN0cmwtRiI6ImZpbmQiLCJDdHJsLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUN0cmwtRyI6ImZpbmRQcmV2IiwiU2hpZnQtQ3RybC1GIjoicmVwbGFjZSIsIlNoaWZ0LUN0cmwtUiI6InJlcGxhY2VBbGwiLCJDdHJsLVsiOiJpbmRlbnRMZXNzIiwiQ3RybC1dIjoiaW5kZW50TW9yZSIsZmFsbHRocm91Z2g6ImJhc2ljIn0sdm8ubWFjRGVmYXVsdD17IkNtZC1BIjoic2VsZWN0QWxsIiwiQ21kLUQiOiJkZWxldGVMaW5lIiwiQ21kLVoiOiJ1bmRvIiwiU2hpZnQtQ21kLVoiOiJyZWRvIiwiQ21kLVkiOiJyZWRvIiwiQ21kLVVwIjoiZ29Eb2NTdGFydCIsIkNtZC1FbmQiOiJnb0RvY0VuZCIsIkNtZC1Eb3duIjoiZ29Eb2NFbmQiLCJBbHQtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQWx0LVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQ21kLUxlZnQiOiJnb0xpbmVTdGFydCIsIkNtZC1SaWdodCI6ImdvTGluZUVuZCIsIkFsdC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQWZ0ZXIiLCJBbHQtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkNtZC1TIjoic2F2ZSIsIkNtZC1GIjoiZmluZCIsIkNtZC1HIjoiZmluZE5leHQiLCJTaGlmdC1DbWQtRyI6ImZpbmRQcmV2IiwiQ21kLUFsdC1GIjoicmVwbGFjZSIsIlNoaWZ0LUNtZC1BbHQtRiI6InJlcGxhY2VBbGwiLCJDbWQtWyI6ImluZGVudExlc3MiLCJDbWQtXSI6ImluZGVudE1vcmUiLCJDbWQtQmFja3NwYWNlIjoiZGVsTGluZUxlZnQiLGZhbGx0aHJvdWdoOlsiYmFzaWMiLCJlbWFjc3kiXX0sdm9bImRlZmF1bHQiXT1LaT92by5tYWNEZWZhdWx0OnZvLnBjRGVmYXVsdCx2by5lbWFjc3k9eyJDdHJsLUYiOiJnb0NoYXJSaWdodCIsIkN0cmwtQiI6ImdvQ2hhckxlZnQiLCJDdHJsLVAiOiJnb0xpbmVVcCIsIkN0cmwtTiI6ImdvTGluZURvd24iLCJBbHQtRiI6ImdvV29yZFJpZ2h0IiwiQWx0LUIiOiJnb1dvcmRMZWZ0IiwiQ3RybC1BIjoiZ29MaW5lU3RhcnQiLCJDdHJsLUUiOiJnb0xpbmVFbmQiLCJDdHJsLVYiOiJnb1BhZ2VEb3duIiwiU2hpZnQtQ3RybC1WIjoiZ29QYWdlVXAiLCJDdHJsLUQiOiJkZWxDaGFyQWZ0ZXIiLCJDdHJsLUgiOiJkZWxDaGFyQmVmb3JlIiwiQWx0LUQiOiJkZWxXb3JkQWZ0ZXIiLCJBbHQtQmFja3NwYWNlIjoiZGVsV29yZEJlZm9yZSIsIkN0cmwtSyI6ImtpbGxMaW5lIiwiQ3RybC1UIjoidHJhbnNwb3NlQ2hhcnMifSx0Lmxvb2t1cEtleT13cix0LmlzTW9kaWZpZXJLZXk9THIsdC5rZXlOYW1lPWtyLHQuZnJvbVRleHRBcmVhPWZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe2UudmFsdWU9dS5nZXRWYWx1ZSgpfWlmKHJ8fChyPXt9KSxyLnZhbHVlPWUudmFsdWUsIXIudGFiaW5kZXgmJmUudGFiaW5kZXgmJihyLnRhYmluZGV4PWUudGFiaW5kZXgpLCFyLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyJiYoci5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyKSxudWxsPT1yLmF1dG9mb2N1cyl7dmFyIGk9ZG9jdW1lbnQuYm9keTt0cnl7aT1kb2N1bWVudC5hY3RpdmVFbGVtZW50fWNhdGNoKG8pe31yLmF1dG9mb2N1cz1pPT1lfHxudWxsIT1lLmdldEF0dHJpYnV0ZSgiYXV0b2ZvY3VzIikmJmk9PWRvY3VtZW50LmJvZHl9aWYoZS5mb3JtJiYoR24oZS5mb3JtLCJzdWJtaXQiLG4pLCFyLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpKXt2YXIgbD1lLmZvcm0scz1sLnN1Ym1pdDt0cnl7dmFyIGE9bC5zdWJtaXQ9ZnVuY3Rpb24oKXtuKCksbC5zdWJtaXQ9cyxsLnN1Ym1pdCgpLGwuc3VibWl0PWF9fWNhdGNoKG8pe319ZS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgdT10KGZ1bmN0aW9uKHQpe2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlLm5leHRTaWJsaW5nKX0scik7cmV0dXJuIHUuc2F2ZT1uLHUuZ2V0VGV4dEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sdS50b1RleHRBcmVhPWZ1bmN0aW9uKCl7bigpLGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1LmdldFdyYXBwZXJFbGVtZW50KCkpLGUuc3R5bGUuZGlzcGxheT0iIixlLmZvcm0mJihWbihlLmZvcm0sInN1Ym1pdCIsbiksImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9ybS5zdWJtaXQmJihlLmZvcm0uc3VibWl0PXMpKX0sdX0sU3IucHJvdG90eXBlPXtlb2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuc3RyaW5nLmxlbmd0aH0sc29sOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMucG9zfSxwZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyl8fHZvaWQgMH0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGg/dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOnZvaWQgMH0sZWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXZhciByPWU9PXQ7ZWxzZSB2YXIgcj1lJiYodC50ZXN0P3QudGVzdChlKTp0KGUpKTtyZXR1cm4gcj8oKyt0aGlzLnBvcyxlKTp2b2lkIDB9LGVhdFdoaWxlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmVhdCh0KTspO3JldHVybiB0aGlzLnBvcz5lfSxlYXRTcGFjZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBvczsvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTspKyt0aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M+dH0sc2tpcFRvRW5kOmZ1bmN0aW9uKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofSxza2lwVG86ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuaW5kZXhPZih0LHRoaXMucG9zKTtyZXR1cm4gZT4tMT8odGhpcy5wb3M9ZSwhMCk6dm9pZCAwfSxiYWNrVXA6ZnVuY3Rpb24odCl7dGhpcy5wb3MtPXR9LGNvbHVtbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPVpuKHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlfSxpbmRlbnRhdGlvbjpmdW5jdGlvbigpe3JldHVybiBabih0aGlzLnN0cmluZyxudWxsLHRoaXMudGFiU2l6ZSl9LG1hdGNoOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBuPXRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaCh0KTtyZXR1cm4gbiYmbi5pbmRleD4wP251bGw6KG4mJmUhPT0hMSYmKHRoaXMucG9zKz1uWzBdLmxlbmd0aCksbil9dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIHI/dC50b0xvd2VyQ2FzZSgpOnR9LG89dGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLHQubGVuZ3RoKTtyZXR1cm4gaShvKT09aSh0KT8oZSE9PSExJiYodGhpcy5wb3MrPXQubGVuZ3RoKSwhMCk6dm9pZCAwfSxjdXJyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5wb3MpfX0sdC5TdHJpbmdTdHJlYW09U3IsdC5UZXh0TWFya2VyPU1yLGpuKE1yKSxNci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dmFyIHQ9dGhpcy5kb2MuY20sZT10JiYhdC5jdXJPcDtpZihlJiZpZSh0KSxZbih0aGlzLCJjbGVhciIpKXt2YXIgcj10aGlzLmZpbmQoKTtyJiZVbih0aGlzLCJjbGVhciIsci5mcm9tLHIudG8pfWZvcih2YXIgbj1udWxsLGk9bnVsbCxvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBsPXRoaXMubGluZXNbb10scz1OcihsLm1hcmtlZFNwYW5zLHRoaXMpO251bGwhPXMudG8mJihpPWJuKGwpKSxsLm1hcmtlZFNwYW5zPURyKGwubWFya2VkU3BhbnMscyksbnVsbCE9cy5mcm9tP249Ym4obCk6dGhpcy5jb2xsYXBzZWQmJiFWcih0aGlzLmRvYyxsKSYmdCYmeW4obCxyZSh0LmRpc3BsYXkpKX1pZih0JiZ0aGlzLmNvbGxhcHNlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcpZm9yKHZhciBvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBhPUdyKHQuZG9jLHRoaXMubGluZXNbb10pLHU9Yyh0LmRvYyxhKTt1PnQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYodC5kaXNwbGF5Lm1heExpbmU9YSx0LmRpc3BsYXkubWF4TGluZUxlbmd0aD11LHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCl9bnVsbCE9biYmdCYmdWUodCxuLGkrMSksdGhpcy5saW5lcy5sZW5ndGg9MCx0aGlzLmV4cGxpY2l0bHlDbGVhcmVkPSEwLHRoaXMuYXRvbWljJiZ0aGlzLmRvYy5jYW50RWRpdCYmKHRoaXMuZG9jLmNhbnRFZGl0PSExLHQmJmlyKHQpKSxlJiZvZSh0KX19LE1yLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscj0wO3I8dGhpcy5saW5lcy5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmxpbmVzW3JdLGk9TnIobi5tYXJrZWRTcGFucyx0aGlzKTtpZihudWxsIT1pLmZyb218fG51bGwhPWkudG8pe3ZhciBvPWJuKG4pO251bGwhPWkuZnJvbSYmKHQ9WWUobyxpLmZyb20pKSxudWxsIT1pLnRvJiYoZT1ZZShvLGkudG8pKX19cmV0dXJuImJvb2ttYXJrIj09dGhpcy50eXBlP3Q6dCYme2Zyb206dCx0bzplfX0sTXIucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZpbmQoKSxlPXRoaXMuZG9jLmNtO2lmKHQmJmUpeyJib29rbWFyayIhPXRoaXMudHlwZSYmKHQ9dC5mcm9tKTt2YXIgcj1nbih0aGlzLmRvYyx0LmxpbmUpO2lmKEcoZSxyKSx0LmxpbmU+PWUuZGlzcGxheS5zaG93aW5nRnJvbSYmdC5saW5lPGUuZGlzcGxheS5zaG93aW5nVG8pe2Zvcih2YXIgbj1lLmRpc3BsYXkubGluZURpdi5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKWlmKG4ubGluZU9iaj09cil7bi5vZmZzZXRIZWlnaHQhPXIuaGVpZ2h0JiZ5bihyLG4ub2Zmc2V0SGVpZ2h0KTsKYnJlYWt9YWUoZSxmdW5jdGlvbigpe2UuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD1lLmN1ck9wLmZvcmNlVXBkYXRlPWUuY3VyT3AudXBkYXRlTWF4TGluZT0hMH0pfX19LE1yLnByb3RvdHlwZS5hdHRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wO2UubWF5YmVIaWRkZW5NYXJrZXJzJiYtMSE9dGkoZS5tYXliZUhpZGRlbk1hcmtlcnMsdGhpcyl8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzfHwoZS5tYXliZVVuaGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcyl9dGhpcy5saW5lcy5wdXNoKHQpfSxNci5wcm90b3R5cGUuZGV0YWNoTGluZT1mdW5jdGlvbih0KXtpZih0aGlzLmxpbmVzLnNwbGljZSh0aSh0aGlzLmxpbmVzLHQpLDEpLCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wOyhlLm1heWJlSGlkZGVuTWFya2Vyc3x8KGUubWF5YmVIaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX19LHQuU2hhcmVkVGV4dE1hcmtlcj1BcixqbihBciksQXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3RoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITA7Zm9yKHZhciB0PTA7dDx0aGlzLm1hcmtlcnMubGVuZ3RoOysrdCl0aGlzLm1hcmtlcnNbdF0uY2xlYXIoKTtVbih0aGlzLCJjbGVhciIpfX0sQXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoKX07dmFyIHlvPXQuTGluZVdpZGdldD1mdW5jdGlvbih0LGUscil7aWYocilmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodGhpc1tuXT1yW25dKTt0aGlzLmNtPXQsdGhpcy5ub2RlPWV9O2puKHlvKSx5by5wcm90b3R5cGUuY2xlYXI9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxpbmUud2lkZ2V0cyxlPWJuKHRoaXMubGluZSk7aWYobnVsbCE9ZSYmdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdFtyXT09dGhpcyYmdC5zcGxpY2Uoci0tLDEpO3QubGVuZ3RofHwodGhpcy5saW5lLndpZGdldHM9bnVsbCk7dmFyIG49Q24odGhpcy5jbSx0aGlzLmxpbmUpPHRoaXMuY20uZG9jLnNjcm9sbFRvcDt5bih0aGlzLmxpbmUsTWF0aC5tYXgoMCx0aGlzLmxpbmUuaGVpZ2h0LVlyKHRoaXMpKSksbiYmZnIodGhpcy5jbSwwLC10aGlzLmhlaWdodCksdWUodGhpcy5jbSxlLGUrMSl9fSkseW8ucHJvdG90eXBlLmNoYW5nZWQ9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhlaWdodDt0aGlzLmhlaWdodD1udWxsO3ZhciBlPVlyKHRoaXMpLXQ7aWYoZSl7eW4odGhpcy5saW5lLHRoaXMubGluZS5oZWlnaHQrZSk7dmFyIHI9Ym4odGhpcy5saW5lKTt1ZSh0aGlzLmNtLHIscisxKX19KTt2YXIgYm89dC5MaW5lPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCxYcih0aGlzLGUpLHRoaXMuaGVpZ2h0PXI/cih0aGlzKToxfTtqbihibyksYm8ucHJvdG90eXBlLmxpbmVObz1mdW5jdGlvbigpe3JldHVybiBibih0aGlzKX07dmFyIHhvPXt9O2ZuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZXMubGVuZ3RofSxyZW1vdmVJbm5lcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LG49dCtlO24+cjsrK3Ipe3ZhciBpPXRoaXMubGluZXNbcl07dGhpcy5oZWlnaHQtPWkuaGVpZ2h0LFpyKGkpLFVuKGksImRlbGV0ZSIpfXRoaXMubGluZXMuc3BsaWNlKHQsZSl9LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe3Quc3BsaWNlLmFwcGx5KHQsW3QubGVuZ3RoLDBdLmNvbmNhdCh0aGlzLmxpbmVzKSl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmhlaWdodCs9cix0aGlzLmxpbmVzPXRoaXMubGluZXMuc2xpY2UoMCx0KS5jb25jYXQoZSkuY29uY2F0KHRoaXMubGluZXMuc2xpY2UodCkpO2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7aT5uOysrbillW25dLnBhcmVudD10aGlzfSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQrZTtuPnQ7Kyt0KWlmKHIodGhpcy5saW5lc1t0XSkpcmV0dXJuITB9fSxobi5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5zaXplLT1lO2Zvcih2YXIgcj0wO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmNoaWxkcmVuW3JdLGk9bi5jaHVua1NpemUoKTtpZihpPnQpe3ZhciBvPU1hdGgubWluKGUsaS10KSxsPW4uaGVpZ2h0O2lmKG4ucmVtb3ZlSW5uZXIodCxvKSx0aGlzLmhlaWdodC09bC1uLmhlaWdodCxpPT1vJiYodGhpcy5jaGlsZHJlbi5zcGxpY2Uoci0tLDEpLG4ucGFyZW50PW51bGwpLDA9PShlLT1vKSlicmVhazt0PTB9ZWxzZSB0LT1pfWlmKHRoaXMuc2l6ZS1lPDI1KXt2YXIgcz1bXTt0aGlzLmNvbGxhcHNlKHMpLHRoaXMuY2hpbGRyZW49W25ldyBmbihzKV0sdGhpcy5jaGlsZHJlblswXS5wYXJlbnQ9dGhpc319LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7cj5lOysrZSl0aGlzLmNoaWxkcmVuW2VdLmNvbGxhcHNlKHQpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbih0LGUscil7dGhpcy5zaXplKz1lLmxlbmd0aCx0aGlzLmhlaWdodCs9cjtmb3IodmFyIG49MCxpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRoaXMuY2hpbGRyZW5bbl0sbD1vLmNodW5rU2l6ZSgpO2lmKGw+PXQpe2lmKG8uaW5zZXJ0SW5uZXIodCxlLHIpLG8ubGluZXMmJm8ubGluZXMubGVuZ3RoPjUwKXtmb3IoO28ubGluZXMubGVuZ3RoPjUwOyl7dmFyIHM9by5saW5lcy5zcGxpY2Uoby5saW5lcy5sZW5ndGgtMjUsMjUpLGE9bmV3IGZuKHMpO28uaGVpZ2h0LT1hLmhlaWdodCx0aGlzLmNoaWxkcmVuLnNwbGljZShuKzEsMCxhKSxhLnBhcmVudD10aGlzfXRoaXMubWF5YmVTcGlsbCgpfWJyZWFrfXQtPWx9fSxtYXliZVNwaWxsOmZ1bmN0aW9uKCl7aWYoISh0aGlzLmNoaWxkcmVuLmxlbmd0aDw9MTApKXt2YXIgdD10aGlzO2Rve3ZhciBlPXQuY2hpbGRyZW4uc3BsaWNlKHQuY2hpbGRyZW4ubGVuZ3RoLTUsNSkscj1uZXcgaG4oZSk7aWYodC5wYXJlbnQpe3Quc2l6ZS09ci5zaXplLHQuaGVpZ2h0LT1yLmhlaWdodDt2YXIgbj10aSh0LnBhcmVudC5jaGlsZHJlbix0KTt0LnBhcmVudC5jaGlsZHJlbi5zcGxpY2UobisxLDAscil9ZWxzZXt2YXIgaT1uZXcgaG4odC5jaGlsZHJlbik7aS5wYXJlbnQ9dCx0LmNoaWxkcmVuPVtpLHJdLHQ9aX1yLnBhcmVudD10LnBhcmVudH13aGlsZSh0LmNoaWxkcmVuLmxlbmd0aD4xMCk7dC5wYXJlbnQubWF5YmVTcGlsbCgpfX0saXRlck46ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD50KXt2YXIgcz1NYXRoLm1pbihlLGwtdCk7aWYoby5pdGVyTih0LHMscikpcmV0dXJuITA7aWYoMD09KGUtPXMpKWJyZWFrO3Q9MH1lbHNlIHQtPWx9fX07dmFyIENvPTAsd289dC5Eb2M9ZnVuY3Rpb24odCxlLHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHdvKSlyZXR1cm4gbmV3IHdvKHQsZSxyKTtudWxsPT1yJiYocj0wKSxobi5jYWxsKHRoaXMsW25ldyBmbihbbmV3IGJvKCIiLG51bGwpXSldKSx0aGlzLmZpcnN0PXIsdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5jYW50RWRpdD0hMSx0aGlzLmhpc3Rvcnk9TG4oKSx0aGlzLmNsZWFuR2VuZXJhdGlvbj0xLHRoaXMuZnJvbnRpZXI9cjt2YXIgbj1ZZShyLDApO3RoaXMuc2VsPXtmcm9tOm4sdG86bixoZWFkOm4sYW5jaG9yOm4sc2hpZnQ6ITEsZXh0ZW5kOiExLGdvYWxDb2x1bW46bnVsbH0sdGhpcy5pZD0rK0NvLHRoaXMubW9kZU9wdGlvbj1lLCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9em8odCkpLGNuKHRoaXMse2Zyb206bix0bzpuLHRleHQ6dH0sbnVsbCx7aGVhZDpuLGFuY2hvcjpufSl9O3dvLnByb3RvdHlwZT1laShobi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOndvLGl0ZXI6ZnVuY3Rpb24odCxlLHIpe3I/dGhpcy5pdGVyTih0LXRoaXMuZmlyc3QsZS10LHIpOnRoaXMuaXRlck4odGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSx0KX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9ZS5sZW5ndGg7aT5uOysrbilyKz1lW25dLmhlaWdodDt0aGlzLmluc2VydElubmVyKHQtdGhpcy5maXJzdCxlLHIpfSxyZW1vdmU6ZnVuY3Rpb24odCxlKXt0aGlzLnJlbW92ZUlubmVyKHQtdGhpcy5maXJzdCxlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKTtyZXR1cm4gdD09PSExP2U6ZS5qb2luKHR8fCJcbiIpfSxzZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1ZZSh0aGlzLmZpcnN0LDApLHI9dGhpcy5maXJzdCt0aGlzLnNpemUtMTtCZSh0aGlzLHtmcm9tOmUsdG86WWUocixnbih0aGlzLHIpLnRleHQubGVuZ3RoKSx0ZXh0OnpvKHQpLG9yaWdpbjoic2V0VmFsdWUifSx7aGVhZDplLGFuY2hvcjplfSwhMCl9LHJlcGxhY2VSYW5nZTpmdW5jdGlvbih0LGUscixuKXtlPVFlKHRoaXMsZSkscj1yP1FlKHRoaXMscik6ZSxfZSh0aGlzLHQsZSxyLG4pfSxnZXRSYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49bW4odGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSkpO3JldHVybiByPT09ITE/bjpuLmpvaW4ocnx8IlxuIil9LGdldExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMaW5lSGFuZGxlKHQpO3JldHVybiBlJiZlLnRleHR9LHNldExpbmU6ZnVuY3Rpb24odCxlKXt0cih0aGlzLHQpJiZfZSh0aGlzLGUsWWUodCwwKSxRZSh0aGlzLFllKHQpKSl9LHJlbW92ZUxpbmU6ZnVuY3Rpb24odCl7dD9fZSh0aGlzLCIiLFFlKHRoaXMsWWUodC0xKSksUWUodGhpcyxZZSh0KSkpOl9lKHRoaXMsIiIsWWUoMCwwKSxRZSh0aGlzLFllKDEsMCkpKX0sZ2V0TGluZUhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdHIodGhpcyx0KT9nbih0aGlzLHQpOnZvaWQgMH0sZ2V0TGluZU51bWJlcjpmdW5jdGlvbih0KXtyZXR1cm4gYm4odCl9LGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJih0PWduKHRoaXMsdCkpLEdyKHRoaXMsdCl9LGxpbmVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LGZpcnN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0fSxsYXN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0K3RoaXMuc2l6ZS0xfSxjbGlwUG9zOmZ1bmN0aW9uKHQpe3JldHVybiBRZSh0aGlzLHQpfSxnZXRDdXJzb3I6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLnNlbDtyZXR1cm4gZT1udWxsPT10fHwiaGVhZCI9PXQ/ci5oZWFkOiJhbmNob3IiPT10P3IuYW5jaG9yOiJlbmQiPT10fHx0PT09ITE/ci50bzpyLmZyb20sWmUoZSl9LHNvbWV0aGluZ1NlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWplKHRoaXMuc2VsLmhlYWQsdGhpcy5zZWwuYW5jaG9yKX0sc2V0Q3Vyc29yOnNlKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1RZSh0aGlzLCJudW1iZXIiPT10eXBlb2YgdD9ZZSh0LGV8fDApOnQpO3I/ZXIodGhpcyxuKTpucih0aGlzLG4sbil9KSxzZXRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe25yKHRoaXMsUWUodGhpcyx0KSxRZSh0aGlzLGV8fHQpLHIpfSksZXh0ZW5kU2VsZWN0aW9uOnNlKGZ1bmN0aW9uKHQsZSxyKXtlcih0aGlzLFFlKHRoaXMsdCksZSYmUWUodGhpcyxlKSxyKX0pLGdldFNlbGVjdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRSYW5nZSh0aGlzLnNlbC5mcm9tLHRoaXMuc2VsLnRvLHQpfSxyZXBsYWNlU2VsZWN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtCZSh0aGlzLHtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8sdGV4dDp6byh0KSxvcmlnaW46cn0sZXx8ImFyb3VuZCIpfSx1bmRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywidW5kbyIpfSkscmVkbzpzZShmdW5jdGlvbigpe1ZlKHRoaXMsInJlZG8iKX0pLHNldEV4dGVuZGluZzpmdW5jdGlvbih0KXt0aGlzLnNlbC5leHRlbmQ9dH0saGlzdG9yeVNpemU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhpc3Rvcnk7cmV0dXJue3VuZG86dC5kb25lLmxlbmd0aCxyZWRvOnQudW5kb25lLmxlbmd0aH19LGNsZWFySGlzdG9yeTpmdW5jdGlvbigpe3RoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbil9LG1hcmtDbGVhbjpmdW5jdGlvbigpe3RoaXMuY2xlYW5HZW5lcmF0aW9uPXRoaXMuY2hhbmdlR2VuZXJhdGlvbigpfSxjaGFuZ2VHZW5lcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGlzdG9yeS5sYXN0T3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCx0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbn0saXNDbGVhbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb249PSh0fHx0aGlzLmNsZWFuR2VuZXJhdGlvbil9LGdldEhpc3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpIbih0aGlzLmhpc3RvcnkuZG9uZSksdW5kb25lOkhuKHRoaXMuaGlzdG9yeS51bmRvbmUpfX0sc2V0SGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmhpc3Rvcnk9TG4odGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO2UuZG9uZT10LmRvbmUuc2xpY2UoMCksZS51bmRvbmU9dC51bmRvbmUuc2xpY2UoMCl9LG1hcmtUZXh0OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVHIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSksciwicmFuZ2UiKX0sc2V0Qm9va21hcms6ZnVuY3Rpb24odCxlKXt2YXIgcj17cmVwbGFjZWRXaXRoOmUmJihudWxsPT1lLm5vZGVUeXBlP2Uud2lkZ2V0OmUpLGluc2VydExlZnQ6ZSYmZS5pbnNlcnRMZWZ0fTtyZXR1cm4gdD1RZSh0aGlzLHQpLFRyKHRoaXMsdCx0LHIsImJvb2ttYXJrIil9LGZpbmRNYXJrc0F0OmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT1bXSxyPWduKHRoaXMsdC5saW5lKS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dOyhudWxsPT1pLmZyb218fGkuZnJvbTw9dC5jaCkmJihudWxsPT1pLnRvfHxpLnRvPj10LmNoKSYmZS5wdXNoKGkubWFya2VyLnBhcmVudHx8aS5tYXJrZXIpfXJldHVybiBlfSxnZXRBbGxNYXJrczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLml0ZXIoZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKW51bGwhPXJbbl0uZnJvbSYmdC5wdXNoKHJbbl0ubWFya2VyKX0pLHR9LHBvc0Zyb21JbmRleDpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihuKXt2YXIgaT1uLnRleHQubGVuZ3RoKzE7cmV0dXJuIGk+dD8oZT10LCEwKToodC09aSwrK3Isdm9pZCAwKX0pLFFlKHRoaXMsWWUocixlKSl9LGluZGV4RnJvbVBvczpmdW5jdGlvbih0KXt0PVFlKHRoaXMsdCk7dmFyIGU9dC5jaDtyZXR1cm4gdC5saW5lPHRoaXMuZmlyc3R8fHQuY2g8MD8wOih0aGlzLml0ZXIodGhpcy5maXJzdCx0LmxpbmUsZnVuY3Rpb24odCl7ZSs9dC50ZXh0Lmxlbmd0aCsxfSksZSl9LGNvcHk6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHdvKHZuKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSksdGhpcy5tb2RlT3B0aW9uLHRoaXMuZmlyc3QpO3JldHVybiBlLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCxlLnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0LGUuc2VsPXtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8saGVhZDp0aGlzLnNlbC5oZWFkLGFuY2hvcjp0aGlzLnNlbC5hbmNob3Isc2hpZnQ6dGhpcy5zZWwuc2hpZnQsZXh0ZW5kOiExLGdvYWxDb2x1bW46dGhpcy5zZWwuZ29hbENvbHVtbn0sdCYmKGUuaGlzdG9yeS51bmRvRGVwdGg9dGhpcy5oaXN0b3J5LnVuZG9EZXB0aCxlLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpKSxlfSxsaW5rZWREb2M6ZnVuY3Rpb24odCl7dHx8KHQ9e30pO3ZhciBlPXRoaXMuZmlyc3Qscj10aGlzLmZpcnN0K3RoaXMuc2l6ZTtudWxsIT10LmZyb20mJnQuZnJvbT5lJiYoZT10LmZyb20pLG51bGwhPXQudG8mJnQudG88ciYmKHI9dC50byk7dmFyIG49bmV3IHdvKHZuKHRoaXMsZSxyKSx0Lm1vZGV8fHRoaXMubW9kZU9wdGlvbixlKTtyZXR1cm4gdC5zaGFyZWRIaXN0JiYobi5oaXN0b3J5PXRoaXMuaGlzdG9yeSksKHRoaXMubGlua2VkfHwodGhpcy5saW5rZWQ9W10pKS5wdXNoKHtkb2M6bixzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH0pLG4ubGlua2VkPVt7ZG9jOnRoaXMsaXNQYXJlbnQ6ITAsc2hhcmVkSGlzdDp0LnNoYXJlZEhpc3R9XSxufSx1bmxpbmtEb2M6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQmJihlPWUuZG9jKSx0aGlzLmxpbmtlZClmb3IodmFyIHI9MDtyPHRoaXMubGlua2VkLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGlua2VkW3JdO2lmKG4uZG9jPT1lKXt0aGlzLmxpbmtlZC5zcGxpY2UociwxKSxlLnVubGlua0RvYyh0aGlzKTticmVha319aWYoZS5oaXN0b3J5PT10aGlzLmhpc3Rvcnkpe3ZhciBpPVtlLmlkXTtkbihlLGZ1bmN0aW9uKHQpe2kucHVzaCh0LmlkKX0sITApLGUuaGlzdG9yeT1MbigpLGUuaGlzdG9yeS5kb25lPUhuKHRoaXMuaGlzdG9yeS5kb25lLGkpLGUuaGlzdG9yeS51bmRvbmU9SG4odGhpcy5oaXN0b3J5LnVuZG9uZSxpKX19LGl0ZXJMaW5rZWREb2NzOmZ1bmN0aW9uKHQpe2RuKHRoaXMsdCl9LGdldE1vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxnZXRFZGl0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbX19KSx3by5wcm90b3R5cGUuZWFjaExpbmU9d28ucHJvdG90eXBlLml0ZXI7dmFyIExvPSJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IiLnNwbGl0KCIgIik7Zm9yKHZhciBrbyBpbiB3by5wcm90b3R5cGUpd28ucHJvdG90eXBlLmhhc093blByb3BlcnR5KGtvKSYmdGkoTG8sa28pPDAmJih0LnByb3RvdHlwZVtrb109ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcy5kb2MsYXJndW1lbnRzKX19KHdvLnByb3RvdHlwZVtrb10pKTtqbih3byksdC5lX3N0b3A9UG4sdC5lX3ByZXZlbnREZWZhdWx0PXpuLHQuZV9zdG9wUHJvcGFnYXRpb249SW47dmFyIFNvLE1vPTA7dC5vbj1Hbix0Lm9mZj1Wbix0LnNpZ25hbD1Lbjt2YXIgVG89MzAsQW89dC5QYXNzPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLlBhc3MifX07JG4ucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodGhpcy5pZCksdGhpcy5pZD1zZXRUaW1lb3V0KGUsdCl9fSx0LmNvdW50Q29sdW1uPVpuO3ZhciBIbz1bIiJdLE5vPS9bXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLyxEbz0vW1x1MDMwMC1cdTAzNkZcdTA0ODMtXHUwNDg3XHUwNDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0LVx1MDVDNVx1MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEItXHUwNjVGXHUwNjcwXHUwNkQ2LVx1MDZEQ1x1MDZERi1cdTA2RTRcdTA2RTctXHUwNkU4XHUwNkVBLVx1MDZFRFx1QTY2Rlx1MURDMOKAk1x1MURGRlx1MjBEMOKAk1x1MjBGRlx1QTY3MC1cdUE2NzJcdUE2NzQtXHVBNjdEXHVBNjlGXHVkYzAwLVx1ZGZmZlx1RkUyMOKAk1x1RkUyRl0vO3QucmVwbGFjZUdldFJlY3Q9ZnVuY3Rpb24odCl7Zmk9dH07dmFyIFdvPWZ1bmN0aW9uKCl7aWYoTmkpcmV0dXJuITE7dmFyIHQ9c2koImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gdHx8ImRyYWdEcm9wImluIHR9KCk7VGk/aGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzY9PXQuY2hhckNvZGVBdChlLTEpJiYzOT09dC5jaGFyQ29kZUF0KGUpfTpJaSYmIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3JldHVybi9cLVteIFwtP118XD9bXiAhXCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfTpXaSYmL0Nocm9tZVwvKD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk/aGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZS0xKTtyZXR1cm4gcj49ODIwOCYmODIxMj49cn06V2kmJihoaT1mdW5jdGlvbih0LGUpe2lmKGU+MSYmNDU9PXQuY2hhckNvZGVBdChlLTEpKXtpZigvXHcvLnRlc3QodC5jaGFyQXQoZS0yKSkmJi9bXlwtP1wuXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITA7aWYoZT4yJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1tcZFwuLF0vLnRlc3QodC5jaGFyQXQoZSkpKXJldHVybiExfXJldHVybi9bfiEjJSYqKT0rfVxdXFx8XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZbXHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfSk7dmFyIE9vLEVvLHpvPTMhPSJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9W10sbj10Lmxlbmd0aDtuPj1lOyl7dmFyIGk9dC5pbmRleE9mKCJcbiIsZSk7LTE9PWkmJihpPXQubGVuZ3RoKTt2YXIgbz10LnNsaWNlKGUsIlxyIj09dC5jaGFyQXQoaS0xKT9pLTE6aSksbD1vLmluZGV4T2YoIlxyIik7LTEhPWw/KHIucHVzaChvLnNsaWNlKDAsbCkpLGUrPWwrMSk6KHIucHVzaChvKSxlPWkrMSl9cmV0dXJuIHJ9OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KC9cclxuP3xcbi8pfTt0LnNwbGl0TGluZXM9em87dmFyIElvPXdpbmRvdy5nZXRTZWxlY3Rpb24/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LnNlbGVjdGlvblN0YXJ0IT10LnNlbGVjdGlvbkVuZH1jYXRjaChlKXtyZXR1cm4hMX19OmZ1bmN0aW9uKHQpe3RyeXt2YXIgZT10Lm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCl9Y2F0Y2gocil7fXJldHVybiBlJiZlLnBhcmVudEVsZW1lbnQoKT09dD8wIT1lLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLGUpOiExfSxGbz1mdW5jdGlvbigpe3ZhciB0PXNpKCJkaXYiKTtyZXR1cm4ib25jb3B5ImluIHQ/ITA6KHQuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCJyZXR1cm47IiksImZ1bmN0aW9uIj09dHlwZW9mIHQub25jb3B5KX0oKSxQbz17MzoiRW50ZXIiLDg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkN0cmwiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjIiwzMjoiU3BhY2UiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJMZWZ0IiwzODoiVXAiLDM5OiJSaWdodCIsNDA6IkRvd24iLDQ0OiJQcmludFNjcm4iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDU5OiI7Iiw5MToiTW9kIiw5MjoiTW9kIiw5MzoiTW9kIiwxMDk6Ii0iLDEwNzoiPSIsMTI3OiJEZWxldGUiLDE4NjoiOyIsMTg3OiI9IiwxODg6IiwiLDE4OToiLSIsMTkwOiIuIiwxOTE6Ii8iLDE5MjoiYCIsMjE5OiJbIiwyMjA6IlxcIiwyMjE6Il0iLDIyMjoiJyIsNjMyNzY6IlBhZ2VVcCIsNjMyNzc6IlBhZ2VEb3duIiw2MzI3NToiRW5kIiw2MzI3MzoiSG9tZSIsNjMyMzQ6IkxlZnQiLDYzMjMyOiJVcCIsNjMyMzU6IlJpZ2h0Iiw2MzIzMzoiRG93biIsNjMzMDI6Ikluc2VydCIsNjMyNzI6IkRlbGV0ZSJ9O3Qua2V5TmFtZXM9UG8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDsxMD50O3QrKylQb1t0KzQ4XT1TdHJpbmcodCk7Zm9yKHZhciB0PTY1OzkwPj10O3QrKylQb1t0XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2Zvcih2YXIgdD0xOzEyPj10O3QrKylQb1t0KzExMV09UG9bdCs2MzIzNV09IkYiK3R9KCk7dmFyIFJvLEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gMjU1Pj10P2UuY2hhckF0KHQpOnQ+PTE0MjQmJjE1MjQ+PXQ/IlIiOnQ+PTE1MzYmJjE3OTE+PXQ/ci5jaGFyQXQodC0xNTM2KTp0Pj0xNzkyJiYyMjIwPj10PyJyIjoiTCJ9dmFyIGU9ImJiYmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJzc3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTEwiLHI9InJycnJycnJycnJycixyTk5tbW1tbW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tcnJycnJycm5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbW1tbW1tTm1tbW1ycnJycnJycnJycnJycnJycnIiLG49L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLyxpPS9bc3R3Tl0vLG89L1tMUnJdLyxsPS9bTGIxbl0vLHM9L1sxbl0vLGE9IkwiO3JldHVybiBmdW5jdGlvbihlKXtpZighbi50ZXN0KGUpKXJldHVybiExO2Zvcih2YXIgcix1PWUubGVuZ3RoLGM9W10sZj0wO3U+ZjsrK2YpYy5wdXNoKHI9dChlLmNoYXJDb2RlQXQoZikpKTtmb3IodmFyIGY9MCxoPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsibSI9PXI/Y1tmXT1oOmg9cn1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiMSI9PXImJiJyIj09ZD9jW2ZdPSJuIjpvLnRlc3QocikmJihkPXIsInIiPT1yJiYoY1tmXT0iUiIpKX1mb3IodmFyIGY9MSxoPWNbMF07dS0xPmY7KytmKXt2YXIgcj1jW2ZdOyIrIj09ciYmIjEiPT1oJiYiMSI9PWNbZisxXT9jW2ZdPSIxIjoiLCIhPXJ8fGghPWNbZisxXXx8IjEiIT1oJiYibiIhPWh8fChjW2ZdPWgpLGg9cn1mb3IodmFyIGY9MDt1PmY7KytmKXt2YXIgcj1jW2ZdO2lmKCIsIj09ciljW2ZdPSJOIjtlbHNlIGlmKCIlIj09cil7Zm9yKHZhciBwPWYrMTt1PnAmJiIlIj09Y1twXTsrK3ApO2Zvcih2YXIgZz1mJiYiISI9PWNbZi0xXXx8dS0xPnAmJiIxIj09Y1twXT8iMSI6Ik4iLG09ZjtwPm07KyttKWNbbV09ZztmPXAtMX19Zm9yKHZhciBmPTAsZD1hO3U+ZjsrK2Ype3ZhciByPWNbZl07IkwiPT1kJiYiMSI9PXI/Y1tmXT0iTCI6by50ZXN0KHIpJiYoZD1yKX1mb3IodmFyIGY9MDt1PmY7KytmKWlmKGkudGVzdChjW2ZdKSl7Zm9yKHZhciBwPWYrMTt1PnAmJmkudGVzdChjW3BdKTsrK3ApO2Zvcih2YXIgdj0iTCI9PShmP2NbZi0xXTphKSx5PSJMIj09KHUtMT5wP2NbcF06YSksZz12fHx5PyJMIjoiUiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfWZvcih2YXIgYix4PVtdLGY9MDt1PmY7KWlmKGwudGVzdChjW2ZdKSl7dmFyIEM9Zjtmb3IoKytmO3U+ZiYmbC50ZXN0KGNbZl0pOysrZik7eC5wdXNoKHtmcm9tOkMsdG86ZixsZXZlbDowfSl9ZWxzZXt2YXIgdz1mLEw9eC5sZW5ndGg7Zm9yKCsrZjt1PmYmJiJMIiE9Y1tmXTsrK2YpO2Zvcih2YXIgbT13O2Y+bTspaWYocy50ZXN0KGNbbV0pKXttPncmJnguc3BsaWNlKEwsMCx7ZnJvbTp3LHRvOm0sbGV2ZWw6MX0pO3ZhciBrPW07Zm9yKCsrbTtmPm0mJnMudGVzdChjW21dKTsrK20pO3guc3BsaWNlKEwsMCx7ZnJvbTprLHRvOm0sbGV2ZWw6Mn0pLHc9bX1lbHNlKyttO2Y+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86ZixsZXZlbDoxfSl9cmV0dXJuIDE9PXhbMF0ubGV2ZWwmJihiPWUubWF0Y2goL15ccysvKSkmJih4WzBdLmZyb209YlswXS5sZW5ndGgseC51bnNoaWZ0KHtmcm9tOjAsdG86YlswXS5sZW5ndGgsbGV2ZWw6MH0pKSwxPT1Rbih4KS5sZXZlbCYmKGI9ZS5tYXRjaCgvXHMrJC8pKSYmKFFuKHgpLnRvLT1iWzBdLmxlbmd0aCx4LnB1c2goe2Zyb206dS1iWzBdLmxlbmd0aCx0bzp1LGxldmVsOjB9KSkseFswXS5sZXZlbCE9UW4oeCkubGV2ZWwmJngucHVzaCh7ZnJvbTp1LHRvOnUsbGV2ZWw6eFswXS5sZXZlbH0pLHh9fSgpO3JldHVybiB0LnZlcnNpb249IjMuMjAuMCIsdH0oKTtQSwcIxlyRsL+vAQC/rwEAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAc3RhdGljXGxpYlxoaWdobGlnaHQubWluLmpzdmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChvKXtyZXR1cm4gby5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gYihwKXtmb3IodmFyIG89cC5maXJzdENoaWxkO287bz1vLm5leHRTaWJsaW5nKXtpZihvLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJDT0RFIil7cmV0dXJuIG99aWYoIShvLm5vZGVUeXBlPT0zJiZvLm5vZGVWYWx1ZS5tYXRjaCgvXHMrLykpKXticmVha319fWZ1bmN0aW9uIGgocCxvKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHAuY2hpbGROb2RlcyxmdW5jdGlvbihxKXtpZihxLm5vZGVUeXBlPT0zKXtyZXR1cm4gbz9xLm5vZGVWYWx1ZS5yZXBsYWNlKC9cbi9nLCIiKTpxLm5vZGVWYWx1ZX1pZihxLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJCUiIpe3JldHVybiJcbiJ9cmV0dXJuIGgocSxvKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIGEocSl7dmFyIHA9KHEuY2xhc3NOYW1lKyIgIisocS5wYXJlbnROb2RlP3EucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIpKS5zcGxpdCgvXHMrLyk7cD1wLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIil9KTtmb3IodmFyIG89MDtvPHAubGVuZ3RoO28rKyl7aWYoZVtwW29dXXx8cFtvXT09Im5vLWhpZ2hsaWdodCIpe3JldHVybiBwW29dfX19ZnVuY3Rpb24gYyhxKXt2YXIgbz1bXTsoZnVuY3Rpb24gcChyLHMpe2Zvcih2YXIgdD1yLmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpe2lmKHQubm9kZVR5cGU9PTMpe3MrPXQubm9kZVZhbHVlLmxlbmd0aH1lbHNle2lmKHQubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cys9MX1lbHNle2lmKHQubm9kZVR5cGU9PTEpe28ucHVzaCh7ZXZlbnQ6InN0YXJ0IixvZmZzZXQ6cyxub2RlOnR9KTtzPXAodCxzKTtvLnB1c2goe2V2ZW50OiJzdG9wIixvZmZzZXQ6cyxub2RlOnR9KX19fX1yZXR1cm4gc30pKHEsMCk7cmV0dXJuIG99ZnVuY3Rpb24gaihwLHIsdil7dmFyIHE9MDt2YXIgeT0iIjt2YXIgcz1bXTtmdW5jdGlvbiB1KCl7aWYoIXAubGVuZ3RofHwhci5sZW5ndGgpe3JldHVybiBwLmxlbmd0aD9wOnJ9aWYocFswXS5vZmZzZXQhPXJbMF0ub2Zmc2V0KXtyZXR1cm4ocFswXS5vZmZzZXQ8clswXS5vZmZzZXQpP3A6cn1yZXR1cm4gclswXS5ldmVudD09InN0YXJ0Ij9wOnJ9ZnVuY3Rpb24gdChBKXtmdW5jdGlvbiB6KEIpe3JldHVybiIgIitCLm5vZGVOYW1lKyc9IicrbChCLnZhbHVlKSsnIid9eSs9IjwiK0Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKStBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoQS5hdHRyaWJ1dGVzLHopLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB4KHope3krPSI8LyIrei5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKyI+In1mdW5jdGlvbiBvKHopeyh6LmV2ZW50PT0ic3RhcnQiP3Q6eCkoei5ub2RlKX13aGlsZShwLmxlbmd0aHx8ci5sZW5ndGgpe3ZhciB3PXUoKTt5Kz1sKHYuc3Vic3RyKHEsd1swXS5vZmZzZXQtcSkpO3E9d1swXS5vZmZzZXQ7aWYodz09cCl7cy5yZXZlcnNlKCkuZm9yRWFjaCh4KTtkb3tvKHcuc3BsaWNlKDAsMSlbMF0pO3c9dSgpfXdoaWxlKHc9PXAmJncubGVuZ3RoJiZ3WzBdLm9mZnNldD09cSk7cy5yZXZlcnNlKCkuZm9yRWFjaCh0KX1lbHNle2lmKHdbMF0uZXZlbnQ9PSJzdGFydCIpe3MucHVzaCh3WzBdLm5vZGUpfWVsc2V7cy5wb3AoKX1vKHcuc3BsaWNlKDAsMSlbMF0pfX1yZXR1cm4geStsKHYuc3Vic3RyKHEpKX1mdW5jdGlvbiBmKHIpe2Z1bmN0aW9uIG8ocyl7cmV0dXJuKHMmJnMuc291cmNlKXx8c31mdW5jdGlvbiBwKHQscyl7cmV0dXJuIFJlZ0V4cChvKHQpLCJtIisoci5jST8iaSI6IiIpKyhzPyJnIjoiIikpfWZ1bmN0aW9uIHEoeix4KXtpZih6LmNvbXBpbGVkKXtyZXR1cm59ei5jb21waWxlZD10cnVlO3ZhciB1PVtdO2lmKHouayl7dmFyIHM9e307ZnVuY3Rpb24gQShCLHQpe2lmKHIuY0kpe3Q9dC50b0xvd2VyQ2FzZSgpfXQuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBEPUMuc3BsaXQoInwiKTtzW0RbMF1dPVtCLERbMV0/TnVtYmVyKERbMV0pOjFdO3UucHVzaChEWzBdKX0pfXoubFI9cCh6Lmx8fCJcXGIiK2hsanMuSVIrIlxcYig/IVxcLikiLHRydWUpO2lmKHR5cGVvZiB6Lms9PSJzdHJpbmciKXtBKCJrZXl3b3JkIix6LmspfWVsc2V7Zm9yKHZhciB5IGluIHouayl7aWYoIXouay5oYXNPd25Qcm9wZXJ0eSh5KSl7Y29udGludWV9QSh5LHoua1t5XSl9fXouaz1zfWlmKHgpe2lmKHouYldLKXt6LmI9IlxcYigiK3Uuam9pbigifCIpKyIpXFxiKD8hXFwuKVxccyoifXouYlI9cCh6LmI/ei5iOiJcXEJ8XFxiIik7aWYoIXouZSYmIXouZVcpe3ouZT0iXFxCfFxcYiJ9aWYoei5lKXt6LmVSPXAoei5lKX16LnRFPW8oei5lKXx8IiI7aWYoei5lVyYmeC50RSl7ei50RSs9KHouZT8ifCI6IiIpK3gudEV9fWlmKHouaSl7ei5pUj1wKHouaSl9aWYoei5yPT09dW5kZWZpbmVkKXt6LnI9MX1pZighei5jKXt6LmM9W119Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7aWYoei5jW3ddPT0ic2VsZiIpe3ouY1t3XT16fXEoei5jW3ddLHopfWlmKHouc3RhcnRzKXtxKHouc3RhcnRzLHgpfXZhciB2PVtdO2Zvcih2YXIgdz0wO3c8ei5jLmxlbmd0aDt3Kyspe3YucHVzaChvKHouY1t3XS5iKSl9aWYoei50RSl7di5wdXNoKG8oei50RSkpfWlmKHouaSl7di5wdXNoKG8oei5pKSl9ei50PXYubGVuZ3RoP3Aodi5qb2luKCJ8IiksdHJ1ZSk6e2V4ZWM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9fX1xKHIpfWZ1bmN0aW9uIGQoRSxHLEMsTSl7ZnVuY3Rpb24gbyhyLFApe2Zvcih2YXIgTz0wO088UC5jLmxlbmd0aDtPKyspe3ZhciBOPVAuY1tPXS5iUi5leGVjKHIpO2lmKE4mJk4uaW5kZXg9PTApe3JldHVybiBQLmNbT119fX1mdW5jdGlvbiBzKE4scil7aWYoTi5lJiZOLmVSLnRlc3Qocikpe3JldHVybiBOfWlmKE4uZVcpe3JldHVybiBzKE4ucGFyZW50LHIpfX1mdW5jdGlvbiB0KHIsTil7cmV0dXJuICFDJiZOLmkmJk4uaVIudGVzdChyKX1mdW5jdGlvbiB5KE8scil7dmFyIE49SC5jST9yWzBdLnRvTG93ZXJDYXNlKCk6clswXTtyZXR1cm4gTy5rLmhhc093blByb3BlcnR5KE4pJiZPLmtbTl19ZnVuY3Rpb24gSSgpe3ZhciBOPWwodyk7aWYoIUIuayl7cmV0dXJuIE59dmFyIHI9IiI7dmFyIFE9MDtCLmxSLmxhc3RJbmRleD0wO3ZhciBPPUIubFIuZXhlYyhOKTt3aGlsZShPKXtyKz1OLnN1YnN0cihRLE8uaW5kZXgtUSk7dmFyIFA9eShCLE8pO2lmKFApe3YrPVBbMV07cis9JzxzcGFuIGNsYXNzPSInK1BbMF0rJyI+JytPWzBdKyI8L3NwYW4+In1lbHNle3IrPU9bMF19UT1CLmxSLmxhc3RJbmRleDtPPUIubFIuZXhlYyhOKX1yZXR1cm4gcitOLnN1YnN0cihRKX1mdW5jdGlvbiB6KCl7aWYoQi5zTCYmIWVbQi5zTF0pe3JldHVybiBsKHcpfXZhciBOPUIuc3ViTGFuZ3VhZ2VNb2RlPT0iY29udGludW91cyI/Qi50b3A6dW5kZWZpbmVkO3ZhciByPUIuc0w/ZChCLnNMLHcsdHJ1ZSxOKTpnKHcpO2lmKEIucj4wKXt2Kz1yLmtleXdvcmRfY291bnQ7QSs9ci5yfUIudG9wPXIudG9wO3JldHVybic8c3BhbiBjbGFzcz0iJytyLmxhbmd1YWdlKyciPicrci52YWx1ZSsiPC9zcGFuPiJ9ZnVuY3Rpb24gTCgpe3JldHVybiBCLnNMIT09dW5kZWZpbmVkP3ooKTpJKCl9ZnVuY3Rpb24gSyhPLHIpe3ZhciBOPU8uY04/JzxzcGFuIGNsYXNzPSInK08uY04rJyI+JzoiIjtpZihPLnJCKXt4Kz1OO3c9IiJ9ZWxzZXtpZihPLmVCKXt4Kz1sKHIpK047dz0iIn1lbHNle3grPU47dz1yfX1CPU9iamVjdC5jcmVhdGUoTyx7cGFyZW50Ont2YWx1ZTpCfX0pfWZ1bmN0aW9uIEQoTixyKXt3Kz1OO2lmKHI9PT11bmRlZmluZWQpe3grPUwoKTtyZXR1cm4gMH12YXIgUD1vKHIsQik7aWYoUCl7eCs9TCgpO0soUCxyKTtyZXR1cm4gUC5yQj8wOnIubGVuZ3RofXZhciBRPXMoQixyKTtpZihRKXt2YXIgTz1CO2lmKCEoTy5yRXx8Ty5lRSkpe3crPXJ9eCs9TCgpO2Rve2lmKEIuY04pe3grPSI8L3NwYW4+In1BKz1CLnI7Qj1CLnBhcmVudH13aGlsZShCIT1RLnBhcmVudCk7aWYoTy5lRSl7eCs9bChyKX13PSIiO2lmKFEuc3RhcnRzKXtLKFEuc3RhcnRzLCIiKX1yZXR1cm4gTy5yRT8wOnIubGVuZ3RofWlmKHQocixCKSl7dGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtICInK3IrJyIgZm9yIG1vZGUgIicrKEIuY058fCI8dW5uYW1lZD4iKSsnIicpfXcrPXI7cmV0dXJuIHIubGVuZ3RofHwxfXZhciBIPWVbRV07aWYoIUgpe3Rocm93IG5ldyBFcnJvcignVW5rbm93biBsYW5ndWFnZTogIicrRSsnIicpfWYoSCk7dmFyIEI9TXx8SDt2YXIgeD0iIjtmb3IodmFyIEY9QjtGIT1IO0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3g9JzxzcGFuIGNsYXNzPSInK0YuY04rJyI+Jyt4fX12YXIgdz0iIjt2YXIgQT0wO3ZhciB2PTA7dHJ5e3ZhciB1LHEscD0wO3doaWxlKHRydWUpe0IudC5sYXN0SW5kZXg9cDt1PUIudC5leGVjKEcpO2lmKCF1KXticmVha31xPUQoRy5zdWJzdHIocCx1LmluZGV4LXApLHVbMF0pO3A9dS5pbmRleCtxfUQoRy5zdWJzdHIocCkpO2Zvcih2YXIgRj1CO0YucGFyZW50O0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3grPSI8L3NwYW4+In19cmV0dXJue3I6QSxrZXl3b3JkX2NvdW50OnYsdmFsdWU6eCxsYW5ndWFnZTpFLHRvcDpCfX1jYXRjaChKKXtpZihKLm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpIT0tMSl7cmV0dXJue3I6MCxrZXl3b3JkX2NvdW50OjAsdmFsdWU6bChHKX19ZWxzZXt0aHJvdyBKfX19ZnVuY3Rpb24gZyhzKXt2YXIgbz17a2V5d29yZF9jb3VudDowLHI6MCx2YWx1ZTpsKHMpfTt2YXIgcT1vO2Zvcih2YXIgcCBpbiBlKXtpZighZS5oYXNPd25Qcm9wZXJ0eShwKSl7Y29udGludWV9dmFyIHI9ZChwLHMsZmFsc2UpO3IubGFuZ3VhZ2U9cDtpZihyLmtleXdvcmRfY291bnQrci5yPnEua2V5d29yZF9jb3VudCtxLnIpe3E9cn1pZihyLmtleXdvcmRfY291bnQrci5yPm8ua2V5d29yZF9jb3VudCtvLnIpe3E9bztvPXJ9fWlmKHEubGFuZ3VhZ2Upe28uc2Vjb25kX2Jlc3Q9cX1yZXR1cm4gb31mdW5jdGlvbiBpKHEscCxvKXtpZihwKXtxPXEucmVwbGFjZSgvXigoPFtePl0rPnxcdCkrKS9nbSxmdW5jdGlvbihyLHYsdSx0KXtyZXR1cm4gdi5yZXBsYWNlKC9cdC9nLHApfSl9aWYobyl7cT1xLnJlcGxhY2UoL1xuL2csIjxicj4iKX1yZXR1cm4gcX1mdW5jdGlvbiBtKHIsdSxwKXt2YXIgdj1oKHIscCk7dmFyIHQ9YShyKTtpZih0PT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJufXZhciB3PXQ/ZCh0LHYsdHJ1ZSk6Zyh2KTt0PXcubGFuZ3VhZ2U7dmFyIG89YyhyKTtpZihvLmxlbmd0aCl7dmFyIHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIik7cS5pbm5lckhUTUw9dy52YWx1ZTt3LnZhbHVlPWoobyxjKHEpLHYpfXcudmFsdWU9aSh3LnZhbHVlLHUscCk7dmFyIHM9ci5jbGFzc05hbWU7aWYoIXMubWF0Y2goIihcXHN8XikobGFuZ3VhZ2UtKT8iK3QrIihcXHN8JCkiKSl7cz1zPyhzKyIgIit0KTp0fXIuaW5uZXJIVE1MPXcudmFsdWU7ci5jbGFzc05hbWU9cztyLnJlc3VsdD17bGFuZ3VhZ2U6dCxrdzp3LmtleXdvcmRfY291bnQscmU6dy5yfTtpZih3LnNlY29uZF9iZXN0KXtyLnNlY29uZF9iZXN0PXtsYW5ndWFnZTp3LnNlY29uZF9iZXN0Lmxhbmd1YWdlLGt3Oncuc2Vjb25kX2Jlc3Qua2V5d29yZF9jb3VudCxyZTp3LnNlY29uZF9iZXN0LnJ9fX1mdW5jdGlvbiBuKCl7aWYobi5jYWxsZWQpe3JldHVybn1uLmNhbGxlZD10cnVlO0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIiksYikuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24obyl7bShvLGhsanMudGFiUmVwbGFjZSl9KX1mdW5jdGlvbiBrKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLG4sZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixuLGZhbHNlKX12YXIgZT17fTt0aGlzLkxBTkdVQUdFUz1lO3RoaXMuaGlnaGxpZ2h0PWQ7dGhpcy5oaWdobGlnaHRBdXRvPWc7dGhpcy5maXhNYXJrdXA9aTt0aGlzLmhpZ2hsaWdodEJsb2NrPW07dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW47dGhpcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPWs7dGhpcy5JUj0iW2EtekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSIoXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcYlxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bLStdP1xcZCspPykiO3RoaXMuQk5SPSJcXGIoMGJbMDFdKykiO3RoaXMuUlNSPSIhfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFwqfFxcKj18XFwrfFxcKz18LHxcXC58LXwtPXwvfC89fDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXD98XFxbfFxce3xcXCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iO3RoaXMuQkU9e2I6IlxcXFxbXFxzXFxTXSIscjowfTt0aGlzLkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlt0aGlzLkJFXSxyOjB9O3RoaXMuUVNNPXtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5DTENNPXtjTjoiY29tbWVudCIsYjoiLy8iLGU6IiQifTt0aGlzLkNCTENMTT17Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8ifTt0aGlzLkhDTT17Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQifTt0aGlzLk5NPXtjTjoibnVtYmVyIixiOnRoaXMuTlIscjowfTt0aGlzLkNOTT17Y046Im51bWJlciIsYjp0aGlzLkNOUixyOjB9O3RoaXMuQk5NPXtjTjoibnVtYmVyIixiOnRoaXMuQk5SLHI6MH07dGhpcy5SRUdFWFBfTU9ERT17Y046InJlZ2V4cCIsYjovXC8vLGU6L1wvW2dpbV0qLyxpOi9cbi8sYzpbdGhpcy5CRSx7YjovXFsvLGU6L1xdLyxyOjAsYzpbdGhpcy5CRV19XX07dGhpcy5pbmhlcml0PWZ1bmN0aW9uKHEscil7dmFyIG89e307Zm9yKHZhciBwIGluIHEpe29bcF09cVtwXX1pZihyKXtmb3IodmFyIHAgaW4gcil7b1twXT1yW3BdfX1yZXR1cm4gb319KCk7aGxqcy5MQU5HVUFHRVMuYmFzaD1mdW5jdGlvbihhKXt2YXIgYz17Y046InZhcmlhYmxlIixiOi9cJFtcd1xkI0BdW1x3XGRfXSovfTt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFx7KC4qPylcfS99O3ZhciBlPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOlthLkJFLGMsYix7Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfV0scjowfTt2YXIgZD17Y046InN0cmluZyIsYjovJy8sZTovJy8scjowfTtyZXR1cm57bDovLT9bYS16XSsvLGs6e2tleXdvcmQ6ImlmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciBicmVhayBjb250aW51ZSB3aGlsZSBpbiBkbyBkb25lIGV4aXQgcmV0dXJuIHNldCBkZWNsYXJlIGNhc2UgZXNhYyBleHBvcnQgZXhlYyIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSIsYnVpbHRfaW46InByaW50ZiBlY2hvIHJlYWQgY2QgcHdkIHB1c2hkIHBvcGQgZGlycyBsZXQgZXZhbCB1bnNldCB0eXBlc2V0IHJlYWRvbmx5IGdldG9wdHMgc291cmNlIHNob3B0IGNhbGxlciB0eXBlIGhhc2ggYmluZCBoZWxwIHN1ZG8iLG9wZXJhdG9yOiItbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEifSxjOlt7Y046InNoZWJhbmciLGI6L14jIVteXG5dK3NoXHMqJC8scjoxMH0se2NOOiJmdW5jdGlvbiIsYjovXHdbXHdcZF9dKlxzKlwoXHMqXClccypcey8sckI6dHJ1ZSxjOlt7Y046InRpdGxlIixiOi9cd1tcd1xkX10qL31dLHI6MH0sYS5IQ00sYS5OTSxlLGQsYyxiXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmNzPWZ1bmN0aW9uKGEpe3JldHVybntrOiJhYnN0cmFjdCBhcyBiYXNlIGJvb2wgYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2hlY2tlZCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWNpbWFsIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmFsc2UgZmluYWxseSBmaXhlZCBmbG9hdCBmb3IgZm9yZWFjaCBnb3RvIGlmIGltcGxpY2l0IGluIGludCBpbnRlcmZhY2UgaW50ZXJuYWwgaXMgbG9jayBsb25nIG5hbWVzcGFjZSBuZXcgbnVsbCBvYmplY3Qgb3BlcmF0b3Igb3V0IG92ZXJyaWRlIHBhcmFtcyBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmVhZG9ubHkgcmVmIHJldHVybiBzYnl0ZSBzZWFsZWQgc2hvcnQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVpbnQgdWxvbmcgdW5jaGVja2VkIHVuc2FmZSB1c2hvcnQgdXNpbmcgdmlydHVhbCB2b2xhdGlsZSB2b2lkIHdoaWxlIGFzeW5jIGF3YWl0IGFzY2VuZGluZyBkZXNjZW5kaW5nIGZyb20gZ2V0IGdyb3VwIGludG8gam9pbiBsZXQgb3JkZXJieSBwYXJ0aWFsIHNlbGVjdCBzZXQgdmFsdWUgdmFyIHdoZXJlIHlpZWxkIixjOlt7Y046ImNvbW1lbnQiLGI6Ii8vLyIsZToiJCIsckI6dHJ1ZSxjOlt7Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+In0se2NOOiJ4bWxEb2NUYWciLGI6IjwvPyIsZToiPiJ9XX0sYS5DTENNLGEuQ0JMQ0xNLHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIixrOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSByZWdpb24gZW5kcmVnaW9uIHByYWdtYSBjaGVja3N1bSJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIicsYzpbe2I6JyIiJ31dfSxhLkFTTSxhLlFTTSxhLkNOTV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5ydWJ5PWZ1bmN0aW9uKGUpe3ZhciBhPSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGo9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBnPXtrZXl3b3JkOiJhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyBpZiBCRUdJTiByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuIG5leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgbmlsIGVsc2UgYnJlYWsgdW5kZWYgbm90IHN1cGVyIGNsYXNzIGNhc2UgcmVxdWlyZSB5aWVsZCBhbGlhcyB3aGlsZSBlbnN1cmUgZWxzaWYgb3IgaW5jbHVkZSJ9O3ZhciBjPXtjTjoieWFyZG9jdGFnIixiOiJAW0EtWmEtel0rIn07dmFyIGs9W3tjTjoiY29tbWVudCIsYjoiIyIsZToiJCIsYzpbY119LHtjTjoiY29tbWVudCIsYjoiXlxcPWJlZ2luIixlOiJeXFw9ZW5kIixjOltjXSxyOjEwfSx7Y046ImNvbW1lbnQiLGI6Il5fX0VORF9fIixlOiJcXG4kIn1dO3ZhciBkPXtjTjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6YSxrOmd9O3ZhciBpPVtlLkJFLGRdO3ZhciBiPVt7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6aSxyOjB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXCgiLGU6IlxcKSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddP3siLGU6In0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddPzwiLGU6Ij4iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LyIsZToiLyIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPy0iLGU6Ii0iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFx8IixlOiJcXHwiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjovXEJcPyhcXFxkezEsM318XFx4W0EtRmEtZjAtOV17MSwyfXxcXHVbQS1GYS1mMC05XXs0fXxcXD9cUylcYi99XTt2YXIgaD17Y046ImZ1bmN0aW9uIixiV0s6dHJ1ZSxlOiIgfCR8OyIsazoiZGVmIixjOlt7Y046InRpdGxlIixiOmosbDphLGs6Z30se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixsOmEsazpnfV0uY29uY2F0KGspfTt2YXIgZj1rLmNvbmNhdChiLmNvbmNhdChbe2NOOiJjbGFzcyIsYldLOnRydWUsZToiJHw7IixrOiJjbGFzcyBtb2R1bGUiLGM6W3tjTjoidGl0bGUiLGI6IltBLVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixyOjB9LHtjTjoiaW5oZXJpdGFuY2UiLGI6IjxcXHMqIixjOlt7Y046InBhcmVudCIsYjoiKCIrZS5JUisiOjopPyIrZS5JUn1dfV0uY29uY2F0KGspfSxoLHtjTjoiY29uc3RhbnQiLGI6Iig6Oik/KFxcYltBLVpdXFx3Kig6Oik/KSsiLHI6MH0se2NOOiJzeW1ib2wiLGI6IjoiLGM6Yi5jb25jYXQoW3tiOmp9XSkscjowfSx7Y046InN5bWJvbCIsYjphKyI6IixyOjB9LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtjTjoidmFyaWFibGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSJ9LHtiOiIoIitlLlJTUisiKVxccyoiLGM6ay5jb25jYXQoW3tjTjoicmVnZXhwIixiOiIvIixlOiIvW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlcnsiLGU6In1bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyXFwoIixlOiJcXClbYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyISIsZToiIVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXFsiLGU6IlxcXVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfV0pLHI6MH1dKSk7ZC5jPWY7aC5jWzFdLmM9ZjtyZXR1cm57bDphLGs6ZyxjOmZ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5kaWZmPWZ1bmN0aW9uKGEpe3JldHVybntjOlt7Y046ImNodW5rIixiOiJeXFxAXFxAICtcXC1cXGQrLFxcZCsgK1xcK1xcZCssXFxkKyArXFxAXFxAJCIscjoxMH0se2NOOiJjaHVuayIsYjoiXlxcKlxcKlxcKiArXFxkKyxcXGQrICtcXCpcXCpcXCpcXCokIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwtXFwtXFwtICtcXGQrLFxcZCsgK1xcLVxcLVxcLVxcLSQiLHI6MTB9LHtjTjoiaGVhZGVyIixiOiJJbmRleDogIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Ij09PT09IixlOiI9PT09PSQifSx7Y046ImhlYWRlciIsYjoiXlxcLVxcLVxcLSIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwqezN9ICIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwrXFwrXFwrIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6IlxcKns1fSIsZToiXFwqezV9JCJ9LHtjTjoiYWRkaXRpb24iLGI6Il5cXCsiLGU6IiQifSx7Y046ImRlbGV0aW9uIixiOiJeXFwtIixlOiIkIn0se2NOOiJjaGFuZ2UiLGI6Il5cXCEiLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PWZ1bmN0aW9uKGEpe3JldHVybntrOntrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5In0sYzpbYS5BU00sYS5RU00sYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLHtiOiIoIithLlJTUisifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsazoicmV0dXJuIHRocm93IGNhc2UiLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlJFR0VYUF9NT0RFLHtiOi88LyxlOi8+Oy8sc0w6InhtbCJ9XSxyOjB9LHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6L3svLGs6ImZ1bmN0aW9uIixjOlt7Y046InRpdGxlIixiOi9bQS1aYS16JF9dWzAtOUEtWmEteiRfXSovfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxjOlthLkNMQ00sYS5DQkxDTE1dLGk6L1siJ1woXS99XSxpOi9cW3wlL31dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMueG1sPWZ1bmN0aW9uKGEpe3ZhciBjPSJbQS1aYS16MC05XFwuXzotXSsiO3ZhciBiPXtlVzp0cnVlLHI6MCxjOlt7Y046ImF0dHJpYnV0ZSIsYjpjLHI6MH0se2I6Jz0iJyxyQjp0cnVlLGU6JyInLGM6W3tjTjoidmFsdWUiLGI6JyInLGVXOnRydWV9XX0se2I6Ij0nIixyQjp0cnVlLGU6IiciLGM6W3tjTjoidmFsdWUiLGI6IiciLGVXOnRydWV9XX0se2I6Ij0iLGM6W3tjTjoidmFsdWUiLGI6IlteXFxzLz5dKyJ9XX1dfTtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSx7Y046ImRvY3R5cGUiLGI6IjwhRE9DVFlQRSIsZToiPiIscjoxMCxjOlt7YjoiXFxbIixlOiJcXF0ifV19LHtjTjoiY29tbWVudCIsYjoiPCEtLSIsZToiLS0+IixyOjEwfSx7Y046ImNkYXRhIixiOiI8XFwhXFxbQ0RBVEFcXFsiLGU6IlxcXVxcXT4iLHI6MTB9LHtjTjoidGFnIixiOiI8c3R5bGUoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InN0eWxlIn0sYzpbYl0sc3RhcnRzOntlOiI8L3N0eWxlPiIsckU6dHJ1ZSxzTDoiY3NzIn19LHtjTjoidGFnIixiOiI8c2NyaXB0KD89XFxzfD58JCkiLGU6Ij4iLGs6e3RpdGxlOiJzY3JpcHQifSxjOltiXSxzdGFydHM6e2U6IjxcL3NjcmlwdD4iLHJFOnRydWUsc0w6ImphdmFzY3JpcHQifX0se2I6IjwlIixlOiIlPiIsc0w6InZic2NyaXB0In0se2NOOiJ0YWciLGI6IjwvPyIsZToiLz8+IixyOjAsYzpbe2NOOiJ0aXRsZSIsYjoiW14gLz48XSsifSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFya2Rvd249ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiaGVhZGVyIixiOiJeI3sxLDN9IixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il4uKz9cXG5bPS1dezIsfSQifSx7YjoiPCIsZToiPiIsc0w6InhtbCIscjowfSx7Y046ImJ1bGxldCIsYjoiXihbKistXXwoXFxkK1xcLikpXFxzKyJ9LHtjTjoic3Ryb25nIixiOiJbKl9dezJ9Lis/WypfXXsyfSJ9LHtjTjoiZW1waGFzaXMiLGI6IlxcKi4rP1xcKiJ9LHtjTjoiZW1waGFzaXMiLGI6Il8uKz9fIixyOjB9LHtjTjoiYmxvY2txdW90ZSIsYjoiXj5cXHMrIixlOiIkIn0se2NOOiJjb2RlIixiOiJgLis/YCJ9LHtjTjoiY29kZSIsYjoiXiAgICAiLGU6IiQiLHI6MH0se2NOOiJob3Jpem9udGFsX3J1bGUiLGI6Il4tezMsfSIsZToiJCJ9LHtiOiJcXFsuKz9cXF1cXCguKz9cXCkiLHJCOnRydWUsYzpbe2NOOiJsaW5rX2xhYmVsIixiOiJcXFsuK1xcXSJ9LHtjTjoibGlua191cmwiLGI6IlxcKCIsZToiXFwpIixlQjp0cnVlLGVFOnRydWV9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3NzPWZ1bmN0aW9uKGEpe3ZhciBiPSJbYS16QS1aLV1bYS16QS1aMC05Xy1dKiI7dmFyIGM9e2NOOiJmdW5jdGlvbiIsYjpiKyJcXCgiLGU6IlxcKSIsYzpbInNlbGYiLGEuTk0sYS5BU00sYS5RU01dfTtyZXR1cm57Y0k6dHJ1ZSxpOiJbPS98J10iLGM6W2EuQ0JMQ0xNLHtjTjoiaWQiLGI6IlxcI1tBLVphLXowLTlfLV0rIn0se2NOOiJjbGFzcyIsYjoiXFwuW0EtWmEtejAtOV8tXSsiLHI6MH0se2NOOiJhdHRyX3NlbGVjdG9yIixiOiJcXFsiLGU6IlxcXSIsaToiJCJ9LHtjTjoicHNldWRvIixiOiI6KDopP1thLXpBLVowLTlcXF9cXC1cXCtcXChcXClcXFwiXFwnXSsifSx7Y046ImF0X3J1bGUiLGI6IkAoZm9udC1mYWNlfHBhZ2UpIixsOiJbYS16LV0rIixrOiJmb250LWZhY2UgcGFnZSJ9LHtjTjoiYXRfcnVsZSIsYjoiQCIsZToiW3s7XSIsYzpbe2NOOiJrZXl3b3JkIixiOi9cUysvfSx7YjovXHMvLGVXOnRydWUsZUU6dHJ1ZSxyOjAsYzpbYyxhLkFTTSxhLlFTTSxhLk5NXX1dfSx7Y046InRhZyIsYjpiLHI6MH0se2NOOiJydWxlcyIsYjoieyIsZToifSIsaToiW15cXHNdIixyOjAsYzpbYS5DQkxDTE0se2NOOiJydWxlIixiOiJbXlxcc10iLHJCOnRydWUsZToiOyIsZVc6dHJ1ZSxjOlt7Y046ImF0dHJpYnV0ZSIsYjoiW0EtWlxcX1xcLlxcLV0rIixlOiI6IixlRTp0cnVlLGk6IlteXFxzXSIsc3RhcnRzOntjTjoidmFsdWUiLGVXOnRydWUsZUU6dHJ1ZSxjOltjLGEuTk0sYS5RU00sYS5BU00sYS5DQkxDTE0se2NOOiJoZXhjb2xvciIsYjoiI1swLTlBLUZhLWZdKyJ9LHtjTjoiaW1wb3J0YW50IixiOiIhaW1wb3J0YW50In1dfX1dfV19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmh0dHA9ZnVuY3Rpb24oYSl7cmV0dXJue2k6IlxcUyIsYzpbe2NOOiJzdGF0dXMiLGI6Il5IVFRQL1swLTlcXC5dKyIsZToiJCIsYzpbe2NOOiJudW1iZXIiLGI6IlxcYlxcZHszfVxcYiJ9XX0se2NOOiJyZXF1ZXN0IixiOiJeW0EtWl0rICguKj8pIEhUVFAvWzAtOVxcLl0rJCIsckI6dHJ1ZSxlOiIkIixjOlt7Y046InN0cmluZyIsYjoiICIsZToiICIsZUI6dHJ1ZSxlRTp0cnVlfV19LHtjTjoiYXR0cmlidXRlIixiOiJeXFx3IixlOiI6ICIsZUU6dHJ1ZSxpOiJcXG58XFxzfD0iLHN0YXJ0czp7Y046InN0cmluZyIsZToiJCJ9fSx7YjoiXFxuXFxuIixzdGFydHM6e3NMOiIiLGVXOnRydWV9fV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhPWZ1bmN0aW9uKGEpe3JldHVybntrOiJmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0IGZvciB0cnVlIHdoaWxlIGxvbmcgdGhyb3cgc3RyaWN0ZnAgZmluYWxseSBwcm90ZWN0ZWQgaW1wb3J0IG5hdGl2ZSBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgYnJlYWsgdHJhbnNpZW50IG5ldyBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyIsYzpbe2NOOiJqYXZhZG9jIixiOiIvXFwqXFwqIixlOiJcXCovIixjOlt7Y046ImphdmFkb2N0YWciLGI6IihefFxccylAW0EtWmEtel0rIn1dLHI6MTB9LGEuQ0xDTSxhLkNCTENMTSxhLkFTTSxhLlFTTSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyBpbnRlcmZhY2UiLGVFOnRydWUsaToiOiIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMgaW1wbGVtZW50cyIscjoxMH0se2NOOiJ0aXRsZSIsYjphLlVJUn1dfSxhLkNOTSx7Y046ImFubm90YXRpb24iLGI6IkBbQS1aYS16XSsifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5waHA9ZnVuY3Rpb24oYSl7dmFyIGU9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkK1thLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSoifTt2YXIgYj1bYS5pbmhlcml0KGEuQVNNLHtpOm51bGx9KSxhLmluaGVyaXQoYS5RU00se2k6bnVsbH0pLHtjTjoic3RyaW5nIixiOidiIicsZTonIicsYzpbYS5CRV19LHtjTjoic3RyaW5nIixiOiJiJyIsZToiJyIsYzpbYS5CRV19XTt2YXIgYz1bYS5CTk0sYS5DTk1dO3ZhciBkPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3JldHVybntjSTp0cnVlLGw6YS5VSVIsazoiYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciB3aGlsZSBpc3NldCBwdWJsaWMgcHJvdGVjdGVkIGV4aXQgZm9yZWFjaCB0aHJvdyBlbHNlaWYgaW5jbHVkZSBfX0ZJTEVfXyBlbXB0eSByZXF1aXJlX29uY2UgZG8geG9yIHJldHVybiBpbXBsZW1lbnRzIHBhcmVudCBjbG9uZSB1c2UgX19DTEFTU19fIF9fTElORV9fIGVsc2UgYnJlYWsgcHJpbnQgZXZhbCBuZXcgY2F0Y2ggX19NRVRIT0RfXyBjYXNlIGV4Y2VwdGlvbiBkZWZhdWx0IGRpZSByZXF1aXJlIF9fRlVOQ1RJT05fXyBlbmRkZWNsYXJlIGZpbmFsIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSBlbmRmb3IgZW5kaWYgZGVjbGFyZSB1bnNldCB0cnVlIGZhbHNlIG5hbWVzcGFjZSB0cmFpdCBnb3RvIGluc3RhbmNlb2YgaW5zdGVhZG9mIF9fRElSX18gX19OQU1FU1BBQ0VfXyB5aWVsZCBmaW5hbGx5IixjOlthLkNMQ00sYS5IQ00se2NOOiJjb21tZW50IixiOiIvXFwqIixlOiJcXCovIixjOlt7Y046InBocGRvYyIsYjoiXFxzQFtBLVphLXpdKyJ9XX0se2NOOiJjb21tZW50IixiOiJfX2hhbHRfY29tcGlsZXIuKz87IixlVzp0cnVlLGs6Il9faGFsdF9jb21waWxlciIsbDphLlVJUn0se2NOOiJzdHJpbmciLGI6Ijw8PFsnXCJdP1xcdytbJ1wiXT8kIixlOiJeXFx3KzsiLGM6W2EuQkVdfSx7Y046InByZXByb2Nlc3NvciIsYjoiPFxcP3BocCIscjoxMH0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IlxcPz4ifSxlLHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6InsiLGs6ImZ1bmN0aW9uIixpOiJcXCR8XFxbfCUiLGM6W2Qse2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic2VsZiIsZSxhLkNCTENMTV0uY29uY2F0KGIpLmNvbmNhdChjKX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyIsaToiWzpcXChcXCRdIixjOlt7YldLOnRydWUsZVc6dHJ1ZSxrOiJleHRlbmRzIixjOltkXX0sZF19LHtiOiI9PiJ9XS5jb25jYXQoYikuY29uY2F0KGMpfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucHl0aG9uPWZ1bmN0aW9uKGEpe3ZhciBmPXtjTjoicHJvbXB0IixiOi9eKD4+PnxcLlwuXC4pIC99O3ZhciBjPVt7Y046InN0cmluZyIsYjovKHV8Yik/cj8nJycvLGU6LycnJy8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fGIpP3I/IiIiLyxlOi8iIiIvLGM6W2ZdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKScvLGU6LycvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKSIvLGU6LyIvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8oYnxiciknLyxlOi8nLyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6LyhifGJyKSIvLGU6LyIvLGM6W2EuQkVdfV0uY29uY2F0KFthLkFTTSxhLlFTTV0pO3ZhciBlPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3ZhciBkPXtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6WyJzZWxmIixhLkNOTSxmXS5jb25jYXQoYyl9O3ZhciBiPXtiV0s6dHJ1ZSxlOi86LyxpOi9bJHs9O1xuXS8sYzpbZSxkXSxyOjEwfTtyZXR1cm57azp7a2V5d29yZDoiYW5kIGVsaWYgaXMgZ2xvYmFsIGFzIGluIGlmIGZyb20gcmFpc2UgZm9yIGV4Y2VwdCBmaW5hbGx5IHByaW50IGltcG9ydCBwYXNzIHJldHVybiBleGVjIGVsc2UgYnJlYWsgbm90IHdpdGggY2xhc3MgYXNzZXJ0IHlpZWxkIHRyeSB3aGlsZSBjb250aW51ZSBkZWwgb3IgZGVmIGxhbWJkYSBub25sb2NhbHwxMCBOb25lIFRydWUgRmFsc2UiLGJ1aWx0X2luOiJFbGxpcHNpcyBOb3RJbXBsZW1lbnRlZCJ9LGk6Lyg8XC98LT58XD8pLyxjOmMuY29uY2F0KFtmLGEuSENNLGEuaW5oZXJpdChiLHtjTjoiZnVuY3Rpb24iLGs6ImRlZiJ9KSxhLmluaGVyaXQoYix7Y046ImNsYXNzIixrOiJjbGFzcyJ9KSxhLkNOTSx7Y046ImRlY29yYXRvciIsYjovQC8sZTovJC99LHtiOi9cYihwcmludHxleGVjKVwoL31dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnNxbD1mdW5jdGlvbihhKXtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046Im9wZXJhdG9yIixiOiIoYmVnaW58ZW5kfHN0YXJ0fGNvbW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxyZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNlfHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hfGdyYW50KVxcYig/ITopIixlOiI7IixlVzp0cnVlLGs6e2tleXdvcmQ6ImFsbCBwYXJ0aWFsIGdsb2JhbCBtb250aCBjdXJyZW50X3RpbWVzdGFtcCB1c2luZyBnbyByZXZva2Ugc21hbGxpbnQgaW5kaWNhdG9yIGVuZC1leGVjIGRpc2Nvbm5lY3Qgem9uZSB3aXRoIGNoYXJhY3RlciBhc3NlcnRpb24gdG8gYWRkIGN1cnJlbnRfdXNlciB1c2FnZSBpbnB1dCBsb2NhbCBhbHRlciBtYXRjaCBjb2xsYXRlIHJlYWwgdGhlbiByb2xsYmFjayBnZXQgcmVhZCB0aW1lc3RhbXAgc2Vzc2lvbl91c2VyIG5vdCBpbnRlZ2VyIGJpdCB1bmlxdWUgZGF5IG1pbnV0ZSBkZXNjIGluc2VydCBleGVjdXRlIGxpa2UgaWxpa2V8MiBsZXZlbCBkZWNpbWFsIGRyb3AgY29udGludWUgaXNvbGF0aW9uIGZvdW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvbWFpbiByaWdodCBuYXRpb25hbCBzb21lIG1vZHVsZSB0cmFuc2FjdGlvbiByZWxhdGl2ZSBzZWNvbmQgY29ubmVjdCBlc2NhcGUgY2xvc2Ugc3lzdGVtX3VzZXIgZm9yIGRlZmVycmVkIHNlY3Rpb24gY2FzdCBjdXJyZW50IHNxbHN0YXRlIGFsbG9jYXRlIGludGVyc2VjdCBkZWFsbG9jYXRlIG51bWVyaWMgcHVibGljIHByZXNlcnZlIGZ1bGwgZ290byBpbml0aWFsbHkgYXNjIG5vIGtleSBvdXRwdXQgY29sbGF0aW9uIGdyb3VwIGJ5IHVuaW9uIHNlc3Npb24gYm90aCBsYXN0IGxhbmd1YWdlIGNvbnN0cmFpbnQgY29sdW1uIG9mIHNwYWNlIGZvcmVpZ24gZGVmZXJyYWJsZSBwcmlvciBjb25uZWN0aW9uIHVua25vd24gYWN0aW9uIGNvbW1pdCB2aWV3IG9yIGZpcnN0IGludG8gZmxvYXQgeWVhciBwcmltYXJ5IGNhc2NhZGVkIGV4Y2VwdCByZXN0cmljdCBzZXQgcmVmZXJlbmNlcyBuYW1lcyB0YWJsZSBvdXRlciBvcGVuIHNlbGVjdCBzaXplIGFyZSByb3dzIGZyb20gcHJlcGFyZSBkaXN0aW5jdCBsZWFkaW5nIGNyZWF0ZSBvbmx5IG5leHQgaW5uZXIgYXV0aG9yaXphdGlvbiBzY2hlbWEgY29ycmVzcG9uZGluZyBvcHRpb24gZGVjbGFyZSBwcmVjaXNpb24gaW1tZWRpYXRlIGVsc2UgdGltZXpvbmVfbWludXRlIGV4dGVybmFsIHZhcnlpbmcgdHJhbnNsYXRpb24gdHJ1ZSBjYXNlIGV4Y2VwdGlvbiBqb2luIGhvdXIgZGVmYXVsdCBkb3VibGUgc2Nyb2xsIHZhbHVlIGN1cnNvciBkZXNjcmlwdG9yIHZhbHVlcyBkZWMgZmV0Y2ggcHJvY2VkdXJlIGRlbGV0ZSBhbmQgZmFsc2UgaW50IGlzIGRlc2NyaWJlIGNoYXIgYXMgYXQgaW4gdmFyY2hhciBudWxsIHRyYWlsaW5nIGFueSBhYnNvbHV0ZSBjdXJyZW50X3RpbWUgZW5kIGdyYW50IHByaXZpbGVnZXMgd2hlbiBjcm9zcyBjaGVjayB3cml0ZSBjdXJyZW50X2RhdGUgcGFkIGJlZ2luIHRlbXBvcmFyeSBleGVjIHRpbWUgdXBkYXRlIGNhdGFsb2cgdXNlciBzcWwgZGF0ZSBvbiBpZGVudGl0eSB0aW1lem9uZV9ob3VyIG5hdHVyYWwgd2hlbmV2ZXIgaW50ZXJ2YWwgd29yayBvcmRlciBjYXNjYWRlIGRpYWdub3N0aWNzIG5jaGFyIGhhdmluZyBsZWZ0IGNhbGwgZG8gaGFuZGxlciBsb2FkIHJlcGxhY2UgdHJ1bmNhdGUgc3RhcnQgbG9jayBzaG93IHByYWdtYSBleGlzdHMgbnVtYmVyIHRyaWdnZXIgaWYgYmVmb3JlIGFmdGVyIGVhY2ggcm93IixhZ2dyZWdhdGU6ImNvdW50IHN1bSBtaW4gbWF4IGF2ZyJ9LGM6W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOlthLkJFLHtiOiInJyJ9XSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlthLkJFLHtiOiciIid9XSxyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlthLkJFXX0sYS5DTk1dfSxhLkNCTENMTSx7Y046ImNvbW1lbnQiLGI6Ii0tIixlOiIkIn1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaW5pPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGk6IlteXFxzXSIsYzpbe2NOOiJjb21tZW50IixiOiI7IixlOiIkIn0se2NOOiJ0aXRsZSIsYjoiXlxcWyIsZToiXFxdIn0se2NOOiJzZXR0aW5nIixiOiJeW2EtejAtOVxcW1xcXV8tXStbIFxcdF0qPVsgXFx0XSoiLGU6IiQiLGM6W3tjTjoidmFsdWUiLGVXOnRydWUsazoib24gb2ZmIHRydWUgZmFsc2UgeWVzIG5vIixjOlthLlFTTSxhLk5NXSxyOjB9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucGVybD1mdW5jdGlvbihlKXt2YXIgYT0iZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjIG1hIHN5c3dyaXRlIHRyIHNlbmQgdW1hc2sgc3lzb3BlbiBzaG13cml0ZSB2ZWMgcXggdXRpbWUgbG9jYWwgb2N0IHNlbWN0bCBsb2NhbHRpbWUgcmVhZHBpcGUgZG8gcmV0dXJuIGZvcm1hdCByZWFkIHNwcmludGYgZGJtb3BlbiBwb3AgZ2V0cGdycCBub3QgZ2V0cHduYW0gcmV3aW5kZGlyIHFxZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50IHNodXRkb3duIGR1bXAgY2hvbXAgY29ubmVjdCBnZXRzb2NrbmFtZSBkaWUgc29ja2V0cGFpciBjbG9zZSBmbG9jayBleGlzdHMgaW5kZXggc2htZ2V0c3ViIGZvciBlbmRwd2VudCByZWRvIGxzdGF0IG1zZ2N0bCBzZXRwZ3JwIGFicyBleGl0IHNlbGVjdCBwcmludCByZWYgZ2V0aG9zdGJ5YWRkciB1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCBnZXRwZWVybmFtZSByZWN2IGxvZyBzZXRzb2Nrb3B0IGNvcyBsYXN0IHJldmVyc2UgZ2V0aG9zdGJ5bmFtZSBnZXRncm5hbSBzdHVkeSBmb3JtbGluZSBlbmRob3N0ZW50IHRpbWVzIGNob3AgbGVuZ3RoIGdldGhvc3RlbnQgZ2V0bmV0ZW50IHBhY2sgZ2V0cHJvdG9lbnQgZ2V0c2VydmJ5bmFtZSByYW5kIG1rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgZ2V0c29ja29wdCBnZXRwcmlvcml0eSByaW5kZXggd2FudGFycmF5IGhleCBzeXN0ZW0gZ2V0c2VydmJ5cG9ydCBlbmRzZXJ2ZW50IGludCBjaHIgdW50aWUgcm1kaXIgcHJvdG90eXBlIHRlbGwgbGlzdGVuIGZvcmsgc2htcmVhZCB1Y2ZpcnN0IHNldHByb3RvZW50IGVsc2Ugc3lzc2VlayBsaW5rIGdldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciBsY2ZpcnN0IHVudGlsIHdhcm4gd2hpbGUgdmFsdWVzIHNoaWZ0IHRlbGxkaXIgZ2V0cHd1aWQgbXkgZ2V0cHJvdG9ieW51bWJlciBkZWxldGUgYW5kIHNvcnQgdWMgZGVmaW5lZCBzcmFuZCBhY2NlcHQgcGFja2FnZSBzZWVrZGlyIGdldHByb3RvYnluYW1lIHNlbW9wIG91ciByZW5hbWUgc2VlayBpZiBxfDAgY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoIHRpZSBzaW4gbXNnZ2V0IG1hcCBzdGF0IGdldGxvZ2luIHVubGVzcyBlbHNpZiB0cnVuY2F0ZSBleGVjIGtleXMgZ2xvYiB0aWVkIGNsb3NlZGlyaW9jdGwgc29ja2V0IHJlYWRsaW5rIGV2YWwgeG9yIHJlYWRsaW5lIGJpbm1vZGUgc2V0c2VydmVudCBlb2Ygb3JkIGJpbmQgYWxhcm0gcGlwZSBhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbiI7dmFyIGQ9e2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToiXFx9IixrOmEscjoxMH07dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkIn07dmFyIGk9e2NOOiJ2YXJpYWJsZSIsYjoiW1xcJFxcJVxcQFxcKl0oXFxeXFx3XFxifCNcXHcrKFxcOlxcOlxcdyspKnxbXlxcc1xcd3tdfHtcXHcrfXxcXHcrKFxcOlxcOlxcdyopKikifTt2YXIgZj1bZS5CRSxkLGIsaV07dmFyIGg9e2I6Ii0+IixjOlt7YjplLklSfSx7YjoieyIsZToifSJ9XX07dmFyIGc9e2NOOiJjb21tZW50IixiOiJeKF9fRU5EX198X19EQVRBX18pIixlOiJcXG4kIixyOjV9O3ZhciBjPVtiLGksZS5IQ00sZyx7Y046ImNvbW1lbnQiLGI6Il5cXD1cXHciLGU6IlxcPWN1dCIsZVc6dHJ1ZX0saCx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFwoIixlOiJcXCkiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxceyIsZToiXFx9IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx8IixlOiJcXHwiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InF3XFxzK3EiLGU6InEiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltlLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOmYscjowfSx7Y046InN0cmluZyIsYjoiYCIsZToiYCIsYzpbZS5CRV19LHtjTjoic3RyaW5nIixiOiJ7XFx3K30iLHI6MH0se2NOOiJzdHJpbmciLGI6Ii0/XFx3K1xccypcXD1cXD4iLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2I6IigiK2UuUlNSKyJ8XFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxiKVxccyoiLGs6InNwbGl0IHJldHVybiBwcmludCByZXZlcnNlIGdyZXAiLHI6MCxjOltlLkhDTSxnLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2UuQkVdLHI6MH1dfSx7Y046InN1YiIsYldLOnRydWUsZToiKFxccypcXCguKj9cXCkpP1s7e10iLGs6InN1YiIscjo1fSx7Y046Im9wZXJhdG9yIixiOiItXFx3XFxiIixyOjB9XTtkLmM9YztoLmNbMV0uYz1jO3JldHVybntrOmEsYzpjfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMub2JqZWN0aXZlYz1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgc2l6ZW9mIHR5cGVkZWYgY29uc3Qgc3RydWN0IGZvciB1bmlvbiB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCBtdXRhYmxlIGlmIHB1YmxpYyBkbyByZXR1cm4gZ290byB2b2lkIGVudW0gZWxzZSBicmVhayBleHRlcm4gYXNtIGNhc2Ugc2hvcnQgZGVmYXVsdCBkb3VibGUgdGhyb3cgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSByZWFkb25seSBhc3NpZ24gcHJvcGVydHkgc2VsZiBzeW5jaHJvbml6ZWQgZW5kIHN5bnRoZXNpemUgaWQgb3B0aW9uYWwgcmVxdWlyZWQgbm9uYXRvbWljIHN1cGVyIHVuaWNoYXIgZmluYWxseSBkeW5hbWljIElCT3V0bGV0IElCQWN0aW9uIHNlbGVjdG9yIHN0cm9uZyB3ZWFrIHJlYWRvbmx5IixsaXRlcmFsOiJmYWxzZSB0cnVlIEZBTFNFIFRSVUUgbmlsIFlFUyBOTyBOVUxMIixidWlsdF9pbjoiTlNTdHJpbmcgTlNEaWN0aW9uYXJ5IENHUmVjdCBDR1BvaW50IFVJQnV0dG9uIFVJTGFiZWwgVUlUZXh0VmlldyBVSVdlYlZpZXcgTUtNYXBWaWV3IFVJU2VnbWVudGVkQ29udHJvbCBOU09iamVjdCBVSVRhYmxlVmlld0RlbGVnYXRlIFVJVGFibGVWaWV3RGF0YVNvdXJjZSBOU1RocmVhZCBVSUFjdGl2aXR5SW5kaWNhdG9yIFVJVGFiYmFyIFVJVG9vbEJhciBVSUJhckJ1dHRvbkl0ZW0gVUlJbWFnZVZpZXcgTlNBdXRvcmVsZWFzZVBvb2wgVUlUYWJsZVZpZXcgQk9PTCBOU0ludGVnZXIgQ0dGbG9hdCBOU0V4Y2VwdGlvbiBOU0xvZyBOU011dGFibGVTdHJpbmcgTlNNdXRhYmxlQXJyYXkgTlNNdXRhYmxlRGljdGlvbmFyeSBOU1VSTCBOU0luZGV4UGF0aCBDR1NpemUgVUlUYWJsZVZpZXdDZWxsIFVJVmlldyBVSVZpZXdDb250cm9sbGVyIFVJTmF2aWdhdGlvbkJhciBVSU5hdmlnYXRpb25Db250cm9sbGVyIFVJVGFiQmFyQ29udHJvbGxlciBVSVBvcG92ZXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXJEZWxlZ2F0ZSBVSUltYWdlIE5TTnVtYmVyIFVJU2VhcmNoQmFyIE5TRmV0Y2hlZFJlc3VsdHNDb250cm9sbGVyIE5TRmV0Y2hlZFJlc3VsdHNDaGFuZ2VUeXBlIFVJU2Nyb2xsVmlldyBVSVNjcm9sbFZpZXdEZWxlZ2F0ZSBVSUVkZ2VJbnNldHMgVUlDb2xvciBVSUZvbnQgVUlBcHBsaWNhdGlvbiBOU05vdEZvdW5kIE5TTm90aWZpY2F0aW9uQ2VudGVyIE5TTm90aWZpY2F0aW9uIFVJTG9jYWxOb3RpZmljYXRpb24gTlNCdW5kbGUgTlNGaWxlTWFuYWdlciBOU1RpbWVJbnRlcnZhbCBOU0RhdGUgTlNDYWxlbmRhciBOU1VzZXJEZWZhdWx0cyBVSVdpbmRvdyBOU1JhbmdlIE5TQXJyYXkgTlNFcnJvciBOU1VSTFJlcXVlc3QgTlNVUkxDb25uZWN0aW9uIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gTVBNb3ZpZVBsYXllckNvbnRyb2xsZXIgZGlzcGF0Y2hfb25jZV90IGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hfc3luYyBkaXNwYXRjaF9hc3luYyBkaXNwYXRjaF9vbmNlIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLGEuUVNNLHtjTjoic3RyaW5nIixiOiInIixlOiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIsYjoiI2ltcG9ydCIsZToiJCIsYzpbe2NOOiJ0aXRsZSIsYjonIicsZTonIid9LHtjTjoidGl0bGUiLGI6IjwiLGU6Ij4ifV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIn0se2NOOiJjbGFzcyIsYldLOnRydWUsZToiKHt8JCkiLGs6ImludGVyZmFjZSBjbGFzcyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiIsYzpbe2NOOiJpZCIsYjphLlVJUn1dfSx7Y046InZhcmlhYmxlIixiOiJcXC4iK2EuVUlSLHI6MH1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY29mZmVlc2NyaXB0PWZ1bmN0aW9uKGMpe3ZhciBiPXtrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSBuZXcgZG8gcmV0dXJuIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB0aHJvdyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBkZWJ1Z2dlciBzdXBlciB0aGVuIHVubGVzcyB1bnRpbCBsb29wIG9mIGJ5IHdoZW4gYW5kIG9yIGlzIGlzbnQgbm90IixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIHllcyBubyBvbiBvZmYiLHJlc2VydmVkOiJjYXNlIGRlZmF1bHQgZnVuY3Rpb24gdmFyIHZvaWQgd2l0aCBjb25zdCBsZXQgZW51bSBleHBvcnQgaW1wb3J0IG5hdGl2ZSBfX2hhc1Byb3AgX19leHRlbmRzIF9fc2xpY2UgX19iaW5kIF9faW5kZXhPZiIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGV4cG9ydHMgZ2xvYmFsIHdpbmRvdyBkb2N1bWVudCJ9O3ZhciBhPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiO3ZhciBmPXtjTjoidGl0bGUiLGI6YX07dmFyIGU9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsazpiLH07dmFyIGQ9W2MuQk5NLGMuaW5oZXJpdChjLkNOTSx7c3RhcnRzOntlOiIoXFxzKi8pPyIscjowfX0pLHtjTjoic3RyaW5nIixiOiInJyciLGU6IicnJyIsYzpbYy5CRV19LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltjLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciIiInLGU6JyIiIicsYzpbYy5CRSxlXX0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2MuQkUsZV0scjowfSx7Y046InJlZ2V4cCIsYjoiLy8vIixlOiIvLy8iLGM6W2MuSENNXX0se2NOOiJyZWdleHAiLGI6Ii8vW2dpbV0qIixyOjB9LHtjTjoicmVnZXhwIixiOiIvXFxTKFxcXFwufFteXFxuXSkqPy9bZ2ltXSooPz1cXHN8XFxXfCQpIn0se2NOOiJwcm9wZXJ0eSIsYjoiQCIrYX0se2I6ImAiLGU6ImAiLGVCOnRydWUsZUU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9XTtlLmM9ZDtyZXR1cm57azpiLGM6ZC5jb25jYXQoW3tjTjoiY29tbWVudCIsYjoiIyMjIixlOiIjIyMifSxjLkhDTSx7Y046ImZ1bmN0aW9uIixiOiIoIithKyJcXHMqPVxccyopPyhcXCguKlxcKSk/XFxzKlstPV0+IixlOiJbLT1dPiIsckI6dHJ1ZSxjOltmLHtjTjoicGFyYW1zIixiOiJcXCgiLHJCOnRydWUsYzpbe2I6L1woLyxlOi9cKS8sazpiLGM6WyJzZWxmIl0uY29uY2F0KGQpfV19XX0se2NOOiJjbGFzcyIsYldLOnRydWUsazoiY2xhc3MiLGU6IiQiLGk6Ils6XFxbXFxdXSIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMiLGVXOnRydWUsaToiOiIsYzpbZl19LGZdfSx7Y046ImF0dHJpYnV0ZSIsYjphKyI6IixlOiI6IixyQjp0cnVlLGVFOnRydWV9XSl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5uZ2lueD1mdW5jdGlvbihiKXt2YXIgYz1be2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkKyJ9LHtjTjoidmFyaWFibGUiLGI6IlxcJHsiLGU6In0ifSx7Y046InZhcmlhYmxlIixiOiJbXFwkXFxAXSIrYi5VSVJ9XTt2YXIgYT17ZVc6dHJ1ZSxsOiJbYS16L19dKyIsazp7YnVpbHRfaW46Im9uIG9mZiB5ZXMgbm8gdHJ1ZSBmYWxzZSBub25lIGJsb2NrZWQgZGVidWcgaW5mbyBub3RpY2Ugd2FybiBlcnJvciBjcml0IHNlbGVjdCBicmVhayBsYXN0IHBlcm1hbmVudCByZWRpcmVjdCBrcXVldWUgcnRzaWcgZXBvbGwgcG9sbCAvZGV2L3BvbGwifSxyOjAsaToiPT4iLGM6W2IuSENNLHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbYi5CRV0uY29uY2F0KGMpLHI6MH0se2NOOiJ1cmwiLGI6IihbYS16XSspOi8iLGU6IlxccyIsZVc6dHJ1ZSxlRTp0cnVlfSx7Y046InJlZ2V4cCIsYjoiXFxzXFxeIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6In5cXCo/XFxzKyIsZToiXFxzfHt8OyIsckU6dHJ1ZSxjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoicmVnZXhwIixiOiJcXCooXFwuW2EtelxcLV0rKSsiLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IihbYS16XFwtXStcXC4pK1xcKiIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046Im51bWJlciIsYjoiXFxiXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30oOlxcZHsxLDV9KT9cXGIifSx7Y046Im51bWJlciIsYjoiXFxiXFxkK1trS21NZ0dkc2hkd3ldKlxcYiIscjowfV0uY29uY2F0KGMpfTtyZXR1cm57YzpbYi5IQ00se2I6Yi5VSVIrIlxccyIsZToiO3x7IixyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6Yi5VSVIsc3RhcnRzOmF9XSxyOjB9XSxpOiJbXlxcc1xcfV0ifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuanNvbj1mdW5jdGlvbihhKXt2YXIgZT17bGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIn07dmFyIGQ9W2EuUVNNLGEuQ05NXTt2YXIgYz17Y046InZhbHVlIixlOiIsIixlVzp0cnVlLGVFOnRydWUsYzpkLGs6ZX07dmFyIGI9e2I6InsiLGU6In0iLGM6W3tjTjoiYXR0cmlidXRlIixiOidcXHMqIicsZTonIlxccyo6XFxzKicsZUI6dHJ1ZSxlRTp0cnVlLGM6W2EuQkVdLGk6IlxcbiIsc3RhcnRzOmN9XSxpOiJcXFMifTt2YXIgZj17YjoiXFxbIixlOiJcXF0iLGM6W2EuaW5oZXJpdChjLHtjTjpudWxsfSldLGk6IlxcUyJ9O2Quc3BsaWNlKGQubGVuZ3RoLDAsYixmKTtyZXR1cm57YzpkLGs6ZSxpOiJcXFMifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuYXBhY2hlPWZ1bmN0aW9uKGEpe3ZhciBiPXtjTjoibnVtYmVyIixiOiJbXFwkJV1cXGQrIn07cmV0dXJue2NJOnRydWUsYzpbYS5IQ00se2NOOiJ0YWciLGI6IjwvPyIsZToiPiJ9LHtjTjoia2V5d29yZCIsYjovXHcrLyxyOjAsazp7Y29tbW9uOiJvcmRlciBkZW55IGFsbG93IHNldGVudiByZXdyaXRlcnVsZSByZXdyaXRlZW5naW5lIHJld3JpdGVjb25kIGRvY3VtZW50cm9vdCBzZXRoYW5kbGVyIGVycm9yZG9jdW1lbnQgbG9hZG1vZHVsZSBvcHRpb25zIGhlYWRlciBsaXN0ZW4gc2VydmVycm9vdCBzZXJ2ZXJuYW1lIn0sc3RhcnRzOntlOi8kLyxyOjAsazp7bGl0ZXJhbDoib24gb2ZmIGFsbCJ9LGM6W3tjTjoic3FicmFja2V0IixiOiJcXHNcXFsiLGU6IlxcXSQifSx7Y046ImNicmFja2V0IixiOiJbXFwkJV1cXHsiLGU6IlxcfSIsYzpbInNlbGYiLGJdfSxiLGEuUVNNXX19XSxpOi9cUy99fShobGpzKTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImZhbHNlIGludCBmbG9hdCB3aGlsZSBwcml2YXRlIGNoYXIgY2F0Y2ggZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mIGR5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3Qgc3RydWN0IGZvciBzdGF0aWNfY2FzdHwxMCB1bmlvbiBuYW1lc3BhY2UgdW5zaWduZWQgbG9uZyB0aHJvdyB2b2xhdGlsZSBzdGF0aWMgcHJvdGVjdGVkIGJvb2wgdGVtcGxhdGUgbXV0YWJsZSBpZiBwdWJsaWMgZnJpZW5kIGRvIHJldHVybiBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgbmV3IGV4dGVybiB1c2luZyB0cnVlIGNsYXNzIGFzbSBjYXNlIHR5cGVpZCBzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgZGVsZXRlIGFsaWdub2YgY2hhcjE2X3QgY2hhcjMyX3QgY29uc3RleHByIGRlY2x0eXBlIG5vZXhjZXB0IG51bGxwdHIgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgX0Jvb2wgY29tcGxleCIsYnVpbHRfaW46InN0ZCBzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0cmluZ3N0cmVhbSBpc3RyaW5nc3RyZWFtIG9zdHJpbmdzdHJlYW0gYXV0b19wdHIgZGVxdWUgbGlzdCBxdWV1ZSBzdGFjayB2ZWN0b3IgbWFwIHNldCBiaXRzZXQgbXVsdGlzZXQgbXVsdGltYXAgdW5vcmRlcmVkX3NldCB1bm9yZGVyZWRfbWFwIHVub3JkZXJlZF9tdWx0aXNldCB1bm9yZGVyZWRfbXVsdGltYXAgYXJyYXkgc2hhcmVkX3B0ciJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJ1xcXFw/LiIsZToiJyIsaToiLiJ9LHtjTjoibnVtYmVyIixiOiJcXGIoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykodXxVfGx8THx1bHxVTHxmfEYpIn0sYS5DTk0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGM6W3tiOiI8IixlOiI+IixpOiJcXG4ifSxhLkNMQ01dfSx7Y046InN0bF9jb250YWluZXIiLGI6IlxcYihkZXF1ZXxsaXN0fHF1ZXVlfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsZToiPiIsazpiLHI6MTAsYzpbInNlbGYiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFrZWZpbGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6YS5CRX07cmV0dXJue2M6W2EuSENNLHtiOi9eXHcrXHMqXFcqPS8sckI6dHJ1ZSxyOjAsc3RhcnRzOntjTjoiY29uc3RhbnQiLGU6L1xzKlxXKj0vLGVFOnRydWUsc3RhcnRzOntlOi8kLyxyOjAsYzpbYl0sfX19LHtjTjoidGl0bGUiLGI6L15bXHddKzpccyokL30se2NOOiJwaG9ueSIsYjovXlwuUEhPTlk6LyxlOi8kLyxrOiIuUEhPTlkiLGw6L1tcLlx3XSsvfSx7YjovXlx0Ky8sZTovJC8sYzpbYS5RU00sYl19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmdvPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIiLGNvbnN0YW50OiJ0cnVlIGZhbHNlIGlvdGEgbmlsIix0eXBlbmFtZToiYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUiLGJ1aWx0X2luOiJhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIn0se2NOOiJudW1iZXIiLGI6IlteYS16QS1aXzAtOV0oXFwtfFxcKyk/XFxkKyhcXC5cXGQrfFxcL1xcZCspPygoZHxlfGZ8bHxzKShcXCt8XFwtKT9cXGQrKT8iLHI6MH0sYS5DTk1dfX0oaGxqcyk7UEsHCBVZbU72dQAA9nUAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHN0YXRpY1xsaWJcanF1ZXJ5LmZvcm0ubWluLmpzLyohCiAqIGpRdWVyeSBGb3JtIFBsdWdpbgogKiB2ZXJzaW9uOiAzLjQ2LjAtMjAxMy4xMS4yMQogKiBSZXF1aXJlcyBqUXVlcnkgdjEuNSBvciBsYXRlcgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTS4gQWxzdXAKICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9mb3JtLwogKiBQcm9qZWN0IHJlcG9zaXRvcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxzdXAvZm9ybQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcy4KICogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtI2NvcHlyaWdodC1hbmQtbGljZW5zZQogKi8KKGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoWyJqcXVlcnkiXSxhKX1lbHNle2EoKHR5cGVvZihqUXVlcnkpIT0idW5kZWZpbmVkIik/alF1ZXJ5OndpbmRvdy5aZXB0byl9fShmdW5jdGlvbihmKXt2YXIgYz17fTtjLmZpbGVhcGk9ZigiPGlucHV0IHR5cGU9J2ZpbGUnLz4iKS5nZXQoMCkuZmlsZXMhPT11bmRlZmluZWQ7Yy5mb3JtZGF0YT13aW5kb3cuRm9ybURhdGEhPT11bmRlZmluZWQ7dmFyIGU9ISFmLmZuLnByb3A7Zi5mbi5hdHRyMj1mdW5jdGlvbigpe2lmKCFlKXtyZXR1cm4gdGhpcy5hdHRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZz10aGlzLnByb3AuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKChnJiZnLmpxdWVyeSl8fHR5cGVvZiBnPT09InN0cmluZyIpe3JldHVybiBnfXJldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmLmZuLmFqYXhTdWJtaXQ9ZnVuY3Rpb24oail7aWYoIXRoaXMubGVuZ3RoKXtkKCJhamF4U3VibWl0OiBza2lwcGluZyBzdWJtaXQgcHJvY2VzcyAtIG5vIGVsZW1lbnQgc2VsZWN0ZWQiKTtyZXR1cm4gdGhpc312YXIgaSxDLG0sbz10aGlzO2lmKHR5cGVvZiBqPT0iZnVuY3Rpb24iKXtqPXtzdWNjZXNzOmp9fWVsc2V7aWYoaj09PXVuZGVmaW5lZCl7aj17fX19aT1qLnR5cGV8fHRoaXMuYXR0cjIoIm1ldGhvZCIpO0M9ai51cmx8fHRoaXMuYXR0cjIoImFjdGlvbiIpO209KHR5cGVvZiBDPT09InN0cmluZyIpP2YudHJpbShDKToiIjttPW18fHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIjtpZihtKXttPShtLm1hdGNoKC9eKFteI10rKS8pfHxbXSlbMV19aj1mLmV4dGVuZCh0cnVlLHt1cmw6bSxzdWNjZXNzOmYuYWpheFNldHRpbmdzLnN1Y2Nlc3MsdHlwZTppfHxmLmFqYXhTZXR0aW5ncy50eXBlLGlmcmFtZVNyYzovXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZnx8IiIpPyJqYXZhc2NyaXB0OmZhbHNlIjoiYWJvdXQ6YmxhbmsifSxqKTt2YXIgdT17fTt0aGlzLnRyaWdnZXIoImZvcm0tcHJlLXNlcmlhbGl6ZSIsW3RoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXByZS1zZXJpYWxpemUgdHJpZ2dlciIpO3JldHVybiB0aGlzfWlmKGouYmVmb3JlU2VyaWFsaXplJiZqLmJlZm9yZVNlcmlhbGl6ZSh0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTZXJpYWxpemUgY2FsbGJhY2siKTtyZXR1cm4gdGhpc312YXIgbj1qLnRyYWRpdGlvbmFsO2lmKG49PT11bmRlZmluZWQpe249Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWx9dmFyIHM9W107dmFyIEUsRj10aGlzLmZvcm1Ub0FycmF5KGouc2VtYW50aWMscyk7aWYoai5kYXRhKXtqLmV4dHJhRGF0YT1qLmRhdGE7RT1mLnBhcmFtKGouZGF0YSxuKX1pZihqLmJlZm9yZVN1Ym1pdCYmai5iZWZvcmVTdWJtaXQoRix0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTdWJtaXQgY2FsbGJhY2siKTtyZXR1cm4gdGhpc310aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LXZhbGlkYXRlIixbRix0aGlzLGosdV0pO2lmKHUudmV0byl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IHZldG9lZCB2aWEgZm9ybS1zdWJtaXQtdmFsaWRhdGUgdHJpZ2dlciIpO3JldHVybiB0aGlzfXZhciB5PWYucGFyYW0oRixuKTtpZihFKXt5PSh5Pyh5KyImIitFKTpFKX1pZihqLnR5cGUudG9VcHBlckNhc2UoKT09IkdFVCIpe2oudXJsKz0oai51cmwuaW5kZXhPZigiPyIpPj0wPyImIjoiPyIpK3k7ai5kYXRhPW51bGx9ZWxzZXtqLmRhdGE9eX12YXIgSD1bXTtpZihqLnJlc2V0Rm9ybSl7SC5wdXNoKGZ1bmN0aW9uKCl7by5yZXNldEZvcm0oKX0pfWlmKGouY2xlYXJGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLmNsZWFyRm9ybShqLmluY2x1ZGVIaWRkZW4pfSl9aWYoIWouZGF0YVR5cGUmJmoudGFyZ2V0KXt2YXIgbD1qLnN1Y2Nlc3N8fGZ1bmN0aW9uKCl7fTtILnB1c2goZnVuY3Rpb24ocSl7dmFyIGs9ai5yZXBsYWNlVGFyZ2V0PyJyZXBsYWNlV2l0aCI6Imh0bWwiO2Yoai50YXJnZXQpW2tdKHEpLmVhY2gobCxhcmd1bWVudHMpfSl9ZWxzZXtpZihqLnN1Y2Nlc3Mpe0gucHVzaChqLnN1Y2Nlc3MpfX1qLnN1Y2Nlc3M9ZnVuY3Rpb24oSyxxLEwpe3ZhciBKPWouY29udGV4dHx8dGhpcztmb3IodmFyIEk9MCxrPUgubGVuZ3RoO0k8aztJKyspe0hbSV0uYXBwbHkoSixbSyxxLEx8fG8sb10pfX07aWYoai5lcnJvcil7dmFyIHo9ai5lcnJvcjtqLmVycm9yPWZ1bmN0aW9uKEosayxxKXt2YXIgST1qLmNvbnRleHR8fHRoaXM7ei5hcHBseShJLFtKLGsscSxvXSl9fWlmKGouY29tcGxldGUpe3ZhciBoPWouY29tcGxldGU7ai5jb21wbGV0ZT1mdW5jdGlvbihJLGspe3ZhciBxPWouY29udGV4dHx8dGhpcztoLmFwcGx5KHEsW0ksayxvXSl9fXZhciBEPWYoImlucHV0W3R5cGU9ZmlsZV06ZW5hYmxlZCIsdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcykudmFsKCkhPT0iIn0pO3ZhciBwPUQubGVuZ3RoPjA7dmFyIEI9Im11bHRpcGFydC9mb3JtLWRhdGEiO3ZhciB4PShvLmF0dHIoImVuY3R5cGUiKT09Qnx8by5hdHRyKCJlbmNvZGluZyIpPT1CKTt2YXIgdz1jLmZpbGVhcGkmJmMuZm9ybWRhdGE7ZCgiZmlsZUFQSSA6Iit3KTt2YXIgcj0ocHx8eCkmJiF3O3ZhciB2O2lmKGouaWZyYW1lIT09ZmFsc2UmJihqLmlmcmFtZXx8cikpe2lmKGouY2xvc2VLZWVwQWxpdmUpe2YuZ2V0KGouY2xvc2VLZWVwQWxpdmUsZnVuY3Rpb24oKXt2PUcoRil9KX1lbHNle3Y9RyhGKX19ZWxzZXtpZigocHx8eCkmJncpe3Y9dChGKX1lbHNle3Y9Zi5hamF4KGopfX1vLnJlbW92ZURhdGEoImpxeGhyIikuZGF0YSgianF4aHIiLHYpO2Zvcih2YXIgQT0wO0E8cy5sZW5ndGg7QSsrKXtzW0FdPW51bGx9dGhpcy50cmlnZ2VyKCJmb3JtLXN1Ym1pdC1ub3RpZnkiLFt0aGlzLGpdKTtyZXR1cm4gdGhpcztmdW5jdGlvbiBnKEspe3ZhciBMPWYucGFyYW0oSyxqLnRyYWRpdGlvbmFsKS5zcGxpdCgiJiIpO3ZhciBxPUwubGVuZ3RoO3ZhciBrPVtdO3ZhciBKLEk7Zm9yKEo9MDtKPHE7SisrKXtMW0pdPUxbSl0ucmVwbGFjZSgvXCsvZywiICIpO0k9TFtKXS5zcGxpdCgiPSIpO2sucHVzaChbZGVjb2RlVVJJQ29tcG9uZW50KElbMF0pLGRlY29kZVVSSUNvbXBvbmVudChJWzFdKV0pfXJldHVybiBrfWZ1bmN0aW9uIHQocSl7dmFyIGs9bmV3IEZvcm1EYXRhKCk7Zm9yKHZhciBJPTA7STxxLmxlbmd0aDtJKyspe2suYXBwZW5kKHFbSV0ubmFtZSxxW0ldLnZhbHVlKX1pZihqLmV4dHJhRGF0YSl7dmFyIEw9ZyhqLmV4dHJhRGF0YSk7Zm9yKEk9MDtJPEwubGVuZ3RoO0krKyl7aWYoTFtJXSl7ay5hcHBlbmQoTFtJXVswXSxMW0ldWzFdKX19fWouZGF0YT1udWxsO3ZhciBLPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaix7Y29udGVudFR5cGU6ZmFsc2UscHJvY2Vzc0RhdGE6ZmFsc2UsY2FjaGU6ZmFsc2UsdHlwZTppfHwiUE9TVCJ9KTtpZihqLnVwbG9hZFByb2dyZXNzKXtLLnhocj1mdW5jdGlvbigpe3ZhciBNPWYuYWpheFNldHRpbmdzLnhocigpO2lmKE0udXBsb2FkKXtNLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oUSl7dmFyIFA9MDt2YXIgTj1RLmxvYWRlZHx8US5wb3NpdGlvbjt2YXIgTz1RLnRvdGFsO2lmKFEubGVuZ3RoQ29tcHV0YWJsZSl7UD1NYXRoLmNlaWwoTi9PKjEwMCl9ai51cGxvYWRQcm9ncmVzcyhRLE4sTyxQKX0sZmFsc2UpfXJldHVybiBNfX1LLmRhdGE9bnVsbDt2YXIgSj1LLmJlZm9yZVNlbmQ7Sy5iZWZvcmVTZW5kPWZ1bmN0aW9uKE4sTSl7aWYoai5mb3JtRGF0YSl7TS5kYXRhPWouZm9ybURhdGF9ZWxzZXtNLmRhdGE9a31pZihKKXtKLmNhbGwodGhpcyxOLE0pfX07cmV0dXJuIGYuYWpheChLKX1mdW5jdGlvbiBHKGFmKXt2YXIgTD1vWzBdLEssYWIsVixhZCxZLE4sUSxPLFAsWixhYyxUO3ZhciBhaT1mLkRlZmVycmVkKCk7YWkuYWJvcnQ9ZnVuY3Rpb24oYWope08uYWJvcnQoYWopfTtpZihhZil7Zm9yKGFiPTA7YWI8cy5sZW5ndGg7YWIrKyl7Sz1mKHNbYWJdKTtpZihlKXtLLnByb3AoImRpc2FibGVkIixmYWxzZSl9ZWxzZXtLLnJlbW92ZUF0dHIoImRpc2FibGVkIil9fX1WPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaik7Vi5jb250ZXh0PVYuY29udGV4dHx8VjtZPSJqcUZvcm1JTyIrKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtpZihWLmlmcmFtZVRhcmdldCl7Tj1mKFYuaWZyYW1lVGFyZ2V0KTtaPU4uYXR0cjIoIm5hbWUiKTtpZighWil7Ti5hdHRyMigibmFtZSIsWSl9ZWxzZXtZPVp9fWVsc2V7Tj1mKCc8aWZyYW1lIG5hbWU9IicrWSsnIiBzcmM9IicrVi5pZnJhbWVTcmMrJyIgLz4nKTtOLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6Ii0xMDAwcHgiLGxlZnQ6Ii0xMDAwcHgifSl9UT1OWzBdO089e2Fib3J0ZWQ6MCxyZXNwb25zZVRleHQ6bnVsbCxyZXNwb25zZVhNTDpudWxsLHN0YXR1czowLHN0YXR1c1RleHQ6Im4vYSIsZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbigpe30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbigpe30sYWJvcnQ6ZnVuY3Rpb24oYWope3ZhciBhaz0oYWo9PT0idGltZW91dCI/InRpbWVvdXQiOiJhYm9ydGVkIik7ZCgiYWJvcnRpbmcgdXBsb2FkLi4uICIrYWspO3RoaXMuYWJvcnRlZD0xO3RyeXtpZihRLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQpe1EuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgiU3RvcCIpfX1jYXRjaChhbCl7fU4uYXR0cigic3JjIixWLmlmcmFtZVNyYyk7Ty5lcnJvcj1haztpZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYWssYWopfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixha10pfWlmKFYuY29tcGxldGUpe1YuY29tcGxldGUuY2FsbChWLmNvbnRleHQsTyxhayl9fX07YWQ9Vi5nbG9iYWw7aWYoYWQmJjA9PT1mLmFjdGl2ZSsrKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTZW5kIixbTyxWXSl9aWYoVi5iZWZvcmVTZW5kJiZWLmJlZm9yZVNlbmQuY2FsbChWLmNvbnRleHQsTyxWKT09PWZhbHNlKXtpZihWLmdsb2JhbCl7Zi5hY3RpdmUtLX1haS5yZWplY3QoKTtyZXR1cm4gYWl9aWYoTy5hYm9ydGVkKXthaS5yZWplY3QoKTtyZXR1cm4gYWl9UD1MLmNsaztpZihQKXtaPVAubmFtZTtpZihaJiYhUC5kaXNhYmxlZCl7Vi5leHRyYURhdGE9Vi5leHRyYURhdGF8fHt9O1YuZXh0cmFEYXRhW1pdPVAudmFsdWU7aWYoUC50eXBlPT0iaW1hZ2UiKXtWLmV4dHJhRGF0YVtaKyIueCJdPUwuY2xrX3g7Vi5leHRyYURhdGFbWisiLnkiXT1MLmNsa195fX19dmFyIFU9MTt2YXIgUj0yO2Z1bmN0aW9uIFMoYWwpe3ZhciBhaz1udWxsO3RyeXtpZihhbC5jb250ZW50V2luZG93KXthaz1hbC5jb250ZW50V2luZG93LmRvY3VtZW50fX1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudFdpbmRvdyBkb2N1bWVudDogIithail9aWYoYWspe3JldHVybiBha310cnl7YWs9YWwuY29udGVudERvY3VtZW50P2FsLmNvbnRlbnREb2N1bWVudDphbC5kb2N1bWVudH1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudERvY3VtZW50OiAiK2FqKTthaz1hbC5kb2N1bWVudH1yZXR1cm4gYWt9dmFyIEo9ZigibWV0YVtuYW1lPWNzcmYtdG9rZW5dIikuYXR0cigiY29udGVudCIpO3ZhciBJPWYoIm1ldGFbbmFtZT1jc3JmLXBhcmFtXSIpLmF0dHIoImNvbnRlbnQiKTtpZihJJiZKKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbSV09Sn1mdW5jdGlvbiBhYSgpe3ZhciBhbD1vLmF0dHIyKCJ0YXJnZXQiKSxhaj1vLmF0dHIyKCJhY3Rpb24iKTtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixZKTtpZighaXx8L3Bvc3QvaS50ZXN0KGkpKXtMLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwiUE9TVCIpfWlmKGFqIT1WLnVybCl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsVi51cmwpfWlmKCFWLnNraXBFbmNvZGluZ092ZXJyaWRlJiYoIWl8fC9wb3N0L2kudGVzdChpKSkpe28uYXR0cih7ZW5jb2Rpbmc6Im11bHRpcGFydC9mb3JtLWRhdGEiLGVuY3R5cGU6Im11bHRpcGFydC9mb3JtLWRhdGEifSl9aWYoVi50aW1lb3V0KXtUPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthYz10cnVlO1goVSl9LFYudGltZW91dCl9ZnVuY3Rpb24gYW0oKXt0cnl7dmFyIGFxPVMoUSkucmVhZHlTdGF0ZTtkKCJzdGF0ZSA9ICIrYXEpO2lmKGFxJiZhcS50b0xvd2VyQ2FzZSgpPT0idW5pbml0aWFsaXplZCIpe3NldFRpbWVvdXQoYW0sNTApfX1jYXRjaChhcil7ZCgiU2VydmVyIGFib3J0OiAiLGFyLCIgKCIsYXIubmFtZSwiKSIpO1goUik7aWYoVCl7Y2xlYXJUaW1lb3V0KFQpfVQ9dW5kZWZpbmVkfX12YXIgYWs9W107dHJ5e2lmKFYuZXh0cmFEYXRhKXtmb3IodmFyIGFwIGluIFYuZXh0cmFEYXRhKXtpZihWLmV4dHJhRGF0YS5oYXNPd25Qcm9wZXJ0eShhcCkpe2lmKGYuaXNQbGFpbk9iamVjdChWLmV4dHJhRGF0YVthcF0pJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoIm5hbWUiKSYmVi5leHRyYURhdGFbYXBdLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrVi5leHRyYURhdGFbYXBdLm5hbWUrJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXS52YWx1ZSkuYXBwZW5kVG8oTClbMF0pfWVsc2V7YWsucHVzaChmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInK2FwKyciPicpLnZhbChWLmV4dHJhRGF0YVthcF0pLmFwcGVuZFRvKEwpWzBdKX19fX1pZighVi5pZnJhbWVUYXJnZXQpe04uYXBwZW5kVG8oImJvZHkiKX1pZihRLmF0dGFjaEV2ZW50KXtRLmF0dGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX1zZXRUaW1lb3V0KGFtLDE1KTt0cnl7TC5zdWJtaXQoKX1jYXRjaChhbil7dmFyIGFvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5zdWJtaXQ7YW8uYXBwbHkoTCl9fWZpbmFsbHl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsYWopO2lmKGFsKXtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixhbCl9ZWxzZXtvLnJlbW92ZUF0dHIoInRhcmdldCIpfWYoYWspLnJlbW92ZSgpfX1pZihWLmZvcmNlU3luYyl7YWEoKX1lbHNle3NldFRpbWVvdXQoYWEsMTApfXZhciBhZyxhaCxhZT01MCxNO2Z1bmN0aW9uIFgoYXApe2lmKE8uYWJvcnRlZHx8TSl7cmV0dXJufWFoPVMoUSk7aWYoIWFoKXtkKCJjYW5ub3QgYWNjZXNzIHJlc3BvbnNlIGRvY3VtZW50Iik7YXA9Un1pZihhcD09PVUmJk8pe08uYWJvcnQoInRpbWVvdXQiKTthaS5yZWplY3QoTywidGltZW91dCIpO3JldHVybn1lbHNle2lmKGFwPT1SJiZPKXtPLmFib3J0KCJzZXJ2ZXIgYWJvcnQiKTthaS5yZWplY3QoTywiZXJyb3IiLCJzZXJ2ZXIgYWJvcnQiKTtyZXR1cm59fWlmKCFhaHx8YWgubG9jYXRpb24uaHJlZj09Vi5pZnJhbWVTcmMpe2lmKCFhYyl7cmV0dXJufX1pZihRLmRldGFjaEV2ZW50KXtRLmRldGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX12YXIgYW49InN1Y2Nlc3MiLGFyO3RyeXtpZihhYyl7dGhyb3cidGltZW91dCJ9dmFyIGFtPVYuZGF0YVR5cGU9PSJ4bWwifHxhaC5YTUxEb2N1bWVudHx8Zi5pc1hNTERvYyhhaCk7ZCgiaXNYbWw9IithbSk7aWYoIWFtJiZ3aW5kb3cub3BlcmEmJihhaC5ib2R5PT09bnVsbHx8IWFoLmJvZHkuaW5uZXJIVE1MKSl7aWYoLS1hZSl7ZCgicmVxdWVpbmcgb25Mb2FkIGNhbGxiYWNrLCBET00gbm90IGF2YWlsYWJsZSIpO3NldFRpbWVvdXQoWCwyNTApO3JldHVybn19dmFyIGF0PWFoLmJvZHk/YWguYm9keTphaC5kb2N1bWVudEVsZW1lbnQ7Ty5yZXNwb25zZVRleHQ9YXQ/YXQuaW5uZXJIVE1MOm51bGw7Ty5yZXNwb25zZVhNTD1haC5YTUxEb2N1bWVudD9haC5YTUxEb2N1bWVudDphaDtpZihhbSl7Vi5kYXRhVHlwZT0ieG1sIn1PLmdldFJlc3BvbnNlSGVhZGVyPWZ1bmN0aW9uKGF3KXt2YXIgYXY9eyJjb250ZW50LXR5cGUiOlYuZGF0YVR5cGV9O3JldHVybiBhdlthdy50b0xvd2VyQ2FzZSgpXX07aWYoYXQpe08uc3RhdHVzPU51bWJlcihhdC5nZXRBdHRyaWJ1dGUoInN0YXR1cyIpKXx8Ty5zdGF0dXM7Ty5zdGF0dXNUZXh0PWF0LmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxPLnN0YXR1c1RleHR9dmFyIGFqPShWLmRhdGFUeXBlfHwiIikudG9Mb3dlckNhc2UoKTt2YXIgYXE9Lyhqc29ufHNjcmlwdHx0ZXh0KS8udGVzdChhaik7aWYoYXF8fFYudGV4dGFyZWEpe3ZhciBhbz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGV4dGFyZWEiKVswXTtpZihhbyl7Ty5yZXNwb25zZVRleHQ9YW8udmFsdWU7Ty5zdGF0dXM9TnVtYmVyKGFvLmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YW8uZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH1lbHNle2lmKGFxKXt2YXIgYWs9YWguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpWzBdO3ZhciBhdT1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKGFrKXtPLnJlc3BvbnNlVGV4dD1hay50ZXh0Q29udGVudD9hay50ZXh0Q29udGVudDphay5pbm5lclRleHR9ZWxzZXtpZihhdSl7Ty5yZXNwb25zZVRleHQ9YXUudGV4dENvbnRlbnQ/YXUudGV4dENvbnRlbnQ6YXUuaW5uZXJUZXh0fX19fX1lbHNle2lmKGFqPT0ieG1sIiYmIU8ucmVzcG9uc2VYTUwmJk8ucmVzcG9uc2VUZXh0KXtPLnJlc3BvbnNlWE1MPVcoTy5yZXNwb25zZVRleHQpfX10cnl7YWc9ayhPLGFqLFYpfWNhdGNoKGFsKXthbj0icGFyc2VyZXJyb3IiO08uZXJyb3I9YXI9KGFsfHxhbil9fWNhdGNoKGFsKXtkKCJlcnJvciBjYXVnaHQ6ICIsYWwpO2FuPSJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX1pZihPLmFib3J0ZWQpe2QoInVwbG9hZCBhYm9ydGVkIik7YW49bnVsbH1pZihPLnN0YXR1cyl7YW49KE8uc3RhdHVzPj0yMDAmJk8uc3RhdHVzPDMwMHx8Ty5zdGF0dXM9PT0zMDQpPyJzdWNjZXNzIjoiZXJyb3IifWlmKGFuPT09InN1Y2Nlc3MiKXtpZihWLnN1Y2Nlc3Mpe1Yuc3VjY2Vzcy5jYWxsKFYuY29udGV4dCxhZywic3VjY2VzcyIsTyl9YWkucmVzb2x2ZShPLnJlc3BvbnNlVGV4dCwic3VjY2VzcyIsTyk7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN1Y2Nlc3MiLFtPLFZdKX19ZWxzZXtpZihhbil7aWYoYXI9PT11bmRlZmluZWQpe2FyPU8uc3RhdHVzVGV4dH1pZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYW4sYXIpfWFpLnJlamVjdChPLCJlcnJvciIsYXIpO2lmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixhcl0pfX19aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbTyxWXSl9aWYoYWQmJiEtLWYuYWN0aXZlKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFuKX1NPXRydWU7aWYoVi50aW1lb3V0KXtjbGVhclRpbWVvdXQoVCl9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFWLmlmcmFtZVRhcmdldCl7Ti5yZW1vdmUoKX1lbHNle04uYXR0cigic3JjIixWLmlmcmFtZVNyYyl9Ty5yZXNwb25zZVhNTD1udWxsfSwxMDApfXZhciBXPWYucGFyc2VYTUx8fGZ1bmN0aW9uKGFqLGFrKXtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7YWs9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKTthay5hc3luYz0iZmFsc2UiO2FrLmxvYWRYTUwoYWopfWVsc2V7YWs9KG5ldyBET01QYXJzZXIoKSkucGFyc2VGcm9tU3RyaW5nKGFqLCJ0ZXh0L3htbCIpfXJldHVybihhayYmYWsuZG9jdW1lbnRFbGVtZW50JiZhay5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUhPSJwYXJzZXJlcnJvciIpP2FrOm51bGx9O3ZhciBxPWYucGFyc2VKU09OfHxmdW5jdGlvbihhail7cmV0dXJuIHdpbmRvd1siZXZhbCJdKCIoIithaisiKSIpfTt2YXIgaz1mdW5jdGlvbihhbyxhbSxhbCl7dmFyIGFrPWFvLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKXx8IiIsYWo9YW09PT0ieG1sInx8IWFtJiZhay5pbmRleE9mKCJ4bWwiKT49MCxhbj1haj9hby5yZXNwb25zZVhNTDphby5yZXNwb25zZVRleHQ7aWYoYWomJmFuLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZT09PSJwYXJzZXJlcnJvciIpe2lmKGYuZXJyb3Ipe2YuZXJyb3IoInBhcnNlcmVycm9yIil9fWlmKGFsJiZhbC5kYXRhRmlsdGVyKXthbj1hbC5kYXRhRmlsdGVyKGFuLGFtKX1pZih0eXBlb2YgYW49PT0ic3RyaW5nIil7aWYoYW09PT0ianNvbiJ8fCFhbSYmYWsuaW5kZXhPZigianNvbiIpPj0wKXthbj1xKGFuKX1lbHNle2lmKGFtPT09InNjcmlwdCJ8fCFhbSYmYWsuaW5kZXhPZigiamF2YXNjcmlwdCIpPj0wKXtmLmdsb2JhbEV2YWwoYW4pfX19cmV0dXJuIGFufTtyZXR1cm4gYWl9fTtmLmZuLmFqYXhGb3JtPWZ1bmN0aW9uKGcpe2c9Z3x8e307Zy5kZWxlZ2F0aW9uPWcuZGVsZWdhdGlvbiYmZi5pc0Z1bmN0aW9uKGYuZm4ub24pO2lmKCFnLmRlbGVnYXRpb24mJnRoaXMubGVuZ3RoPT09MCl7dmFyIGg9e3M6dGhpcy5zZWxlY3RvcixjOnRoaXMuY29udGV4dH07aWYoIWYuaXNSZWFkeSYmaC5zKXtkKCJET00gbm90IHJlYWR5LCBxdWV1aW5nIGFqYXhGb3JtIik7ZihmdW5jdGlvbigpe2YoaC5zLGguYykuYWpheEZvcm0oZyl9KTtyZXR1cm4gdGhpc31kKCJ0ZXJtaW5hdGluZzsgemVybyBlbGVtZW50cyBmb3VuZCBieSBzZWxlY3RvciIrKGYuaXNSZWFkeT8iIjoiIChET00gbm90IHJlYWR5KSIpKTtyZXR1cm4gdGhpc31pZihnLmRlbGVnYXRpb24pe2YoZG9jdW1lbnQpLm9mZigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGIpLm9mZigiY2xpY2suZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYSkub24oInN1Ym1pdC5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGIpLm9uKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGEpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIixnLGIpLmJpbmQoImNsaWNrLmZvcm0tcGx1Z2luIixnLGEpfTtmdW5jdGlvbiBiKGgpe3ZhciBnPWguZGF0YTtpZighaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aC5wcmV2ZW50RGVmYXVsdCgpO2YoaC50YXJnZXQpLmFqYXhTdWJtaXQoZyl9fWZ1bmN0aW9uIGEoayl7dmFyIGo9ay50YXJnZXQ7dmFyIGg9ZihqKTtpZighKGguaXMoIlt0eXBlPXN1Ym1pdF0sW3R5cGU9aW1hZ2VdIikpKXt2YXIgZz1oLmNsb3Nlc3QoIlt0eXBlPXN1Ym1pdF0iKTtpZihnLmxlbmd0aD09PTApe3JldHVybn1qPWdbMF19dmFyIGk9dGhpcztpLmNsaz1qO2lmKGoudHlwZT09ImltYWdlIil7aWYoay5vZmZzZXRYIT09dW5kZWZpbmVkKXtpLmNsa194PWsub2Zmc2V0WDtpLmNsa195PWsub2Zmc2V0WX1lbHNle2lmKHR5cGVvZiBmLmZuLm9mZnNldD09ImZ1bmN0aW9uIil7dmFyIGw9aC5vZmZzZXQoKTtpLmNsa194PWsucGFnZVgtbC5sZWZ0O2kuY2xrX3k9ay5wYWdlWS1sLnRvcH1lbHNle2kuY2xrX3g9ay5wYWdlWC1qLm9mZnNldExlZnQ7aS5jbGtfeT1rLnBhZ2VZLWoub2Zmc2V0VG9wfX19c2V0VGltZW91dChmdW5jdGlvbigpe2kuY2xrPWkuY2xrX3g9aS5jbGtfeT1udWxsfSwxMDApfWYuZm4uYWpheEZvcm1VbmJpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoInN1Ym1pdC5mb3JtLXBsdWdpbiBjbGljay5mb3JtLXBsdWdpbiIpfTtmLmZuLmZvcm1Ub0FycmF5PWZ1bmN0aW9uKHgsZyl7dmFyIHc9W107aWYodGhpcy5sZW5ndGg9PT0wKXtyZXR1cm4gd312YXIgbD10aGlzWzBdO3ZhciBwPXg/bC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOmwuZWxlbWVudHM7aWYoIXApe3JldHVybiB3fXZhciByLHEsbyx5LG0sdCxrO2ZvcihyPTAsdD1wLmxlbmd0aDtyPHQ7cisrKXttPXBbcl07bz1tLm5hbWU7aWYoIW98fG0uZGlzYWJsZWQpe2NvbnRpbnVlfWlmKHgmJmwuY2xrJiZtLnR5cGU9PSJpbWFnZSIpe2lmKGwuY2xrPT1tKXt3LnB1c2goe25hbWU6byx2YWx1ZTpmKG0pLnZhbCgpLHR5cGU6bS50eXBlfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfWNvbnRpbnVlfXk9Zi5maWVsZFZhbHVlKG0sdHJ1ZSk7aWYoeSYmeS5jb25zdHJ1Y3Rvcj09QXJyYXkpe2lmKGcpe2cucHVzaChtKX1mb3IocT0wLGs9eS5sZW5ndGg7cTxrO3ErKyl7dy5wdXNoKHtuYW1lOm8sdmFsdWU6eVtxXX0pfX1lbHNle2lmKGMuZmlsZWFwaSYmbS50eXBlPT0iZmlsZSIpe2lmKGcpe2cucHVzaChtKX12YXIgaD1tLmZpbGVzO2lmKGgubGVuZ3RoKXtmb3IocT0wO3E8aC5sZW5ndGg7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTpoW3FdLHR5cGU6bS50eXBlfSl9fWVsc2V7dy5wdXNoKHtuYW1lOm8sdmFsdWU6IiIsdHlwZTptLnR5cGV9KX19ZWxzZXtpZih5IT09bnVsbCYmdHlwZW9mIHkhPSJ1bmRlZmluZWQiKXtpZihnKXtnLnB1c2gobSl9dy5wdXNoKHtuYW1lOm8sdmFsdWU6eSx0eXBlOm0udHlwZSxyZXF1aXJlZDptLnJlcXVpcmVkfSl9fX19aWYoIXgmJmwuY2xrKXt2YXIgcz1mKGwuY2xrKSx1PXNbMF07bz11Lm5hbWU7aWYobyYmIXUuZGlzYWJsZWQmJnUudHlwZT09ImltYWdlIil7dy5wdXNoKHtuYW1lOm8sdmFsdWU6cy52YWwoKX0pO3cucHVzaCh7bmFtZTpvKyIueCIsdmFsdWU6bC5jbGtfeH0se25hbWU6bysiLnkiLHZhbHVlOmwuY2xrX3l9KX19cmV0dXJuIHd9O2YuZm4uZm9ybVNlcmlhbGl6ZT1mdW5jdGlvbihnKXtyZXR1cm4gZi5wYXJhbSh0aGlzLmZvcm1Ub0FycmF5KGcpKX07Zi5mbi5maWVsZFNlcmlhbGl6ZT1mdW5jdGlvbihoKXt2YXIgZz1bXTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5hbWU7aWYoIW0pe3JldHVybn12YXIgaz1mLmZpZWxkVmFsdWUodGhpcyxoKTtpZihrJiZrLmNvbnN0cnVjdG9yPT1BcnJheSl7Zm9yKHZhciBsPTAsaj1rLmxlbmd0aDtsPGo7bCsrKXtnLnB1c2goe25hbWU6bSx2YWx1ZTprW2xdfSl9fWVsc2V7aWYoayE9PW51bGwmJnR5cGVvZiBrIT0idW5kZWZpbmVkIil7Zy5wdXNoKHtuYW1lOnRoaXMubmFtZSx2YWx1ZTprfSl9fX0pO3JldHVybiBmLnBhcmFtKGcpfTtmLmZuLmZpZWxkVmFsdWU9ZnVuY3Rpb24obSl7Zm9yKHZhciBsPVtdLGo9MCxnPXRoaXMubGVuZ3RoO2o8ZztqKyspe3ZhciBrPXRoaXNbal07dmFyIGg9Zi5maWVsZFZhbHVlKGssbSk7aWYoaD09PW51bGx8fHR5cGVvZiBoPT0idW5kZWZpbmVkInx8KGguY29uc3RydWN0b3I9PUFycmF5JiYhaC5sZW5ndGgpKXtjb250aW51ZX1pZihoLmNvbnN0cnVjdG9yPT1BcnJheSl7Zi5tZXJnZShsLGgpfWVsc2V7bC5wdXNoKGgpfX1yZXR1cm4gbH07Zi5maWVsZFZhbHVlPWZ1bmN0aW9uKGcsbyl7dmFyIGo9Zy5uYW1lLHU9Zy50eXBlLHc9Zy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYobz09PXVuZGVmaW5lZCl7bz10cnVlfWlmKG8mJighanx8Zy5kaXNhYmxlZHx8dT09InJlc2V0Inx8dT09ImJ1dHRvbiJ8fCh1PT0iY2hlY2tib3gifHx1PT0icmFkaW8iKSYmIWcuY2hlY2tlZHx8KHU9PSJzdWJtaXQifHx1PT0iaW1hZ2UiKSYmZy5mb3JtJiZnLmZvcm0uY2xrIT1nfHx3PT0ic2VsZWN0IiYmZy5zZWxlY3RlZEluZGV4PT0tMSkpe3JldHVybiBudWxsfWlmKHc9PSJzZWxlY3QiKXt2YXIgcD1nLnNlbGVjdGVkSW5kZXg7aWYocDwwKXtyZXR1cm4gbnVsbH12YXIgcj1bXSxoPWcub3B0aW9uczt2YXIgbD0odT09InNlbGVjdC1vbmUiKTt2YXIgcT0obD9wKzE6aC5sZW5ndGgpO2Zvcih2YXIgaz0obD9wOjApO2s8cTtrKyspe3ZhciBtPWhba107aWYobS5zZWxlY3RlZCl7dmFyIHM9bS52YWx1ZTtpZighcyl7cz0obS5hdHRyaWJ1dGVzJiZtLmF0dHJpYnV0ZXMudmFsdWUmJiEobS5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZCkpP20udGV4dDptLnZhbHVlfWlmKGwpe3JldHVybiBzfXIucHVzaChzKX19cmV0dXJuIHJ9cmV0dXJuIGYoZykudmFsKCl9O2YuZm4uY2xlYXJGb3JtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKCJpbnB1dCxzZWxlY3QsdGV4dGFyZWEiLHRoaXMpLmNsZWFyRmllbGRzKGcpfSl9O2YuZm4uY2xlYXJGaWVsZHM9Zi5mbi5jbGVhcklucHV0cz1mdW5jdGlvbihnKXt2YXIgaD0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy50eXBlLGk9dGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoaC50ZXN0KGopfHxpPT0idGV4dGFyZWEiKXt0aGlzLnZhbHVlPSIifWVsc2V7aWYoaj09ImNoZWNrYm94Inx8aj09InJhZGlvIil7dGhpcy5jaGVja2VkPWZhbHNlfWVsc2V7aWYoaT09InNlbGVjdCIpe3RoaXMuc2VsZWN0ZWRJbmRleD0tMX1lbHNle2lmKGo9PSJmaWxlIil7aWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpe2YodGhpcykucmVwbGFjZVdpdGgoZih0aGlzKS5jbG9uZSh0cnVlKSl9ZWxzZXtmKHRoaXMpLnZhbCgiIil9fWVsc2V7aWYoZyl7aWYoKGc9PT10cnVlJiYvaGlkZGVuLy50ZXN0KGopKXx8KHR5cGVvZiBnPT0ic3RyaW5nIiYmZih0aGlzKS5pcyhnKSkpe3RoaXMudmFsdWU9IiJ9fX19fX19KX07Zi5mbi5yZXNldEZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMucmVzZXQ9PSJmdW5jdGlvbiJ8fCh0eXBlb2YgdGhpcy5yZXNldD09Im9iamVjdCImJiF0aGlzLnJlc2V0Lm5vZGVUeXBlKSl7dGhpcy5yZXNldCgpfX0pfTtmLmZuLmVuYWJsZT1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9IWd9KX07Zi5mbi5zZWxlY3RlZD1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXRoaXMudHlwZTtpZihoPT0iY2hlY2tib3gifHxoPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9Z31lbHNle2lmKHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ib3B0aW9uIil7dmFyIGk9Zih0aGlzKS5wYXJlbnQoInNlbGVjdCIpO2lmKGcmJmlbMF0mJmlbMF0udHlwZT09InNlbGVjdC1vbmUiKXtpLmZpbmQoIm9wdGlvbiIpLnNlbGVjdGVkKGZhbHNlKX10aGlzLnNlbGVjdGVkPWd9fX0pfTtmLmZuLmFqYXhTdWJtaXQuZGVidWc9ZmFsc2U7ZnVuY3Rpb24gZCgpe2lmKCFmLmZuLmFqYXhTdWJtaXQuZGVidWcpe3JldHVybn12YXIgZz0iW2pxdWVyeS5mb3JtXSAiK0FycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKTtpZih3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nKXt3aW5kb3cuY29uc29sZS5sb2coZyl9ZWxzZXtpZih3aW5kb3cub3BlcmEmJndpbmRvdy5vcGVyYS5wb3N0RXJyb3Ipe3dpbmRvdy5vcGVyYS5wb3N0RXJyb3IoZyl9fX19KSk7UEsHCHYQEAGjPgAAoz4AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xsaWJcbWFya2VkLm1pbi5qcyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9e30sdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5ydWxlcz1hLm5vcm1hbCx0aGlzLm9wdGlvbnMuZ2ZtJiYodGhpcy5ydWxlcz10aGlzLm9wdGlvbnMudGFibGVzP2EudGFibGVzOmEuZ2ZtKX1mdW5jdGlvbiB0KGUsdCl7aWYodGhpcy5vcHRpb25zPXR8fGguZGVmYXVsdHMsdGhpcy5saW5rcz1lLHRoaXMucnVsZXM9dS5ub3JtYWwsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBuLCF0aGlzLmxpbmtzKXRocm93IG5ldyBFcnJvcigiVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4iKTt0aGlzLm9wdGlvbnMuZ2ZtP3RoaXMucnVsZXM9dGhpcy5vcHRpb25zLmJyZWFrcz91LmJyZWFrczp1LmdmbTp0aGlzLm9wdGlvbnMucGVkYW50aWMmJih0aGlzLnJ1bGVzPXUucGVkYW50aWMpfWZ1bmN0aW9uIG4oKXt9ZnVuY3Rpb24gcihlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlLnJlcGxhY2UodD8vJi9nOi8mKD8hIz9cdys7KS9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCImIzM5OyIpfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZT1lLnNvdXJjZSx0PXR8fCIiLGZ1bmN0aW9uIG4ocixzKXtyZXR1cm4gcj8ocz1zLnNvdXJjZXx8cyxzPXMucmVwbGFjZSgvKF58W15cW10pXF4vZywiJDEiKSxlPWUucmVwbGFjZShyLHMpLG4pOm5ldyBSZWdFeHAoZSx0KX19ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdCxuLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt0PWFyZ3VtZW50c1tyXTtmb3IobiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX1yZXR1cm4gZX1mdW5jdGlvbiBoKHQsbixpKXtpZihpfHwiZnVuY3Rpb24iPT10eXBlb2Ygbil7aXx8KGk9bixuPW51bGwpLG49byh7fSxoLmRlZmF1bHRzLG58fHt9KTt2YXIgbCxhLHU9bi5oaWdobGlnaHQscD0wO3RyeXtsPWUubGV4KHQsbil9Y2F0Y2goYyl7cmV0dXJuIGkoYyl9YT1sLmxlbmd0aDt2YXIgZz1mdW5jdGlvbigpe3ZhciBlLHQ7dHJ5e2U9ci5wYXJzZShsLG4pfWNhdGNoKHMpe3Q9c31yZXR1cm4gbi5oaWdobGlnaHQ9dSx0P2kodCk6aShudWxsLGUpfTtpZighdXx8dS5sZW5ndGg8MylyZXR1cm4gZygpO2lmKGRlbGV0ZSBuLmhpZ2hsaWdodCwhYSlyZXR1cm4gZygpO2Zvcig7cDxsLmxlbmd0aDtwKyspIWZ1bmN0aW9uKGUpe3JldHVybiJjb2RlIiE9PWUudHlwZT8tLWF8fGcoKTp1KGUudGV4dCxlLmxhbmcsZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09bnx8bj09PWUudGV4dD8tLWF8fGcoKTooZS50ZXh0PW4sZS5lc2NhcGVkPSEwLC0tYXx8ZygpLHZvaWQgMCl9KX0obFtwXSl9ZWxzZSB0cnl7cmV0dXJuIG4mJihuPW8oe30saC5kZWZhdWx0cyxuKSksci5wYXJzZShlLmxleCh0LG4pLG4pfWNhdGNoKGMpe2lmKGMubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGpqL21hcmtlZC4iLChufHxoLmRlZmF1bHRzKS5zaWxlbnQpcmV0dXJuIjxwPkFuIGVycm9yIG9jY3VyZWQ6PC9wPjxwcmU+IitzKGMubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7dGhyb3cgY319dmFyIGE9e25ld2xpbmU6L15cbisvLGNvZGU6L14oIHs0fVteXG5dK1xuKikrLyxmZW5jZXM6bCxocjovXiggKlstKl9dKXszLH0gKig/OlxuK3wkKS8saGVhZGluZzovXiAqKCN7MSw2fSkgKihbXlxuXSs/KSAqIyogKig/OlxuK3wkKS8sbnB0YWJsZTpsLGxoZWFkaW5nOi9eKFteXG5dKylcbiAqKD18LSl7Mix9ICooPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oICo+W15cbl0rKFxuW15cbl0rKSpcbiopKy8sbGlzdDovXiggKikoYnVsbCkgW1xzXFNdKz8oPzpocnxcbnsyLH0oPyEgKSg/IVwxYnVsbCApXG4qfFxzKiQpLyxodG1sOi9eICooPzpjb21tZW50fGNsb3NlZHxjbG9zaW5nKSAqKD86XG57Mix9fFxzKiQpLyxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogK1siKF0oW15cbl0rKVsiKV0pPyAqKD86XG4rfCQpLyx0YWJsZTpsLHBhcmFncmFwaDovXigoPzpbXlxuXStcbj8oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8dGFnfGRlZikpKylcbiovLHRleHQ6L15bXlxuXSsvfTthLmJ1bGxldD0vKD86WyorLV18XGQrXC4pLyxhLml0ZW09L14oICopKGJ1bGwpIFteXG5dKig/OlxuKD8hXDFidWxsIClbXlxuXSopKi8sYS5pdGVtPWkoYS5pdGVtLCJnbSIpKC9idWxsL2csYS5idWxsZXQpKCksYS5saXN0PWkoYS5saXN0KSgvYnVsbC9nLGEuYnVsbGV0KSgiaHIiLC9cbisoPz0oPzogKlstKl9dKXszLH0gKig/OlxuK3wkKSkvKSgpLGEuX3RhZz0iKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6L3xAKVxcYiIsYS5odG1sPWkoYS5odG1sKSgiY29tbWVudCIsLzwhLS1bXHNcU10qPy0tPi8pKCJjbG9zZWQiLC88KHRhZylbXHNcU10rPzxcL1wxPi8pKCJjbG9zaW5nIiwvPHRhZyg/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPl0pKj8+LykoL3RhZy9nLGEuX3RhZykoKSxhLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiaHIiLGEuaHIpKCJoZWFkaW5nIixhLmhlYWRpbmcpKCJsaGVhZGluZyIsYS5saGVhZGluZykoImJsb2NrcXVvdGUiLGEuYmxvY2txdW90ZSkoInRhZyIsIjwiK2EuX3RhZykoImRlZiIsYS5kZWYpKCksYS5ub3JtYWw9byh7fSxhKSxhLmdmbT1vKHt9LGEubm9ybWFsLHtmZW5jZXM6L14gKihgezMsfXx+ezMsfSkgKihcUyspPyAqXG4oW1xzXFNdKz8pXHMqXDEgKig/OlxuK3wkKS8scGFyYWdyYXBoOi9eL30pLGEuZ2ZtLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiKD8hIiwiKD8hIithLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMiIpKyJ8IithLmxpc3Quc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMyIpKyJ8IikoKSxhLnRhYmxlcz1vKHt9LGEuZ2ZtLHtucHRhYmxlOi9eICooXFMuKlx8LiopXG4gKihbLTpdKyAqXHxbLXwgOl0qKVxuKCg/Oi4qXHwuKig/OlxufCQpKSopXG4qLyx0YWJsZTovXiAqXHwoLispXG4gKlx8KCAqWy06XStbLXwgOl0qKVxuKCg/OiAqXHwuKig/OlxufCQpKSopXG4qL30pLGUucnVsZXM9YSxlLmxleD1mdW5jdGlvbih0LG4pe3ZhciByPW5ldyBlKG4pO3JldHVybiByLmxleCh0KX0sZS5wcm90b3R5cGUubGV4PWZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9cdTAwYTAvZywiICIpLnJlcGxhY2UoL1x1MjQyNC9nLCJcbiIpLHRoaXMudG9rZW4oZSwhMCl9LGUucHJvdG90eXBlLnRva2VuPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIscyxpLGwsbyxoLHUscCxlPWUucmVwbGFjZSgvXiArJC9nbSwiIik7ZTspaWYoKHM9dGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoZSkpJiYoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksc1swXS5sZW5ndGg+MSYmdGhpcy50b2tlbnMucHVzaCh7dHlwZToic3BhY2UifSkpLHM9dGhpcy5ydWxlcy5jb2RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCkscz1zWzBdLnJlcGxhY2UoL14gezR9L2dtLCIiKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9zOnMucmVwbGFjZSgvXG4rJC8sIiIpfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuZmVuY2VzLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiY29kZSIsbGFuZzpzWzJdLHRleHQ6c1szXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDpzWzFdLmxlbmd0aCx0ZXh0OnNbMl19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMubnB0YWJsZS5leGVjKGUpKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLG89e3R5cGU6InRhYmxlIixoZWFkZXI6c1sxXS5yZXBsYWNlKC9eICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksYWxpZ246c1syXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGNlbGxzOnNbM10ucmVwbGFjZSgvXG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnNwbGl0KC8gKlx8ICovKTt0aGlzLnRva2Vucy5wdXNoKG8pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmxoZWFkaW5nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiaGVhZGluZyIsZGVwdGg6Ij0iPT09c1syXT8xOjIsdGV4dDpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaHIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJociJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9zdGFydCJ9KSxzPXNbMF0ucmVwbGFjZSgvXiAqPiA/L2dtLCIiKSx0aGlzLnRva2VuKHMsdCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9lbmQifSk7ZWxzZSBpZihzPXRoaXMucnVsZXMubGlzdC5leGVjKGUpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksaT1zWzJdLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3Rfc3RhcnQiLG9yZGVyZWQ6aS5sZW5ndGg+MX0pLHM9c1swXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pLG49ITEscD1zLmxlbmd0aCx1PTA7cD51O3UrKylvPXNbdV0saD1vLmxlbmd0aCxvPW8ucmVwbGFjZSgvXiAqKFsqKy1dfFxkK1wuKSArLywiIiksfm8uaW5kZXhPZigiXG4gIikmJihoLT1vLmxlbmd0aCxvPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9vLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpOm8ucmVwbGFjZShuZXcgUmVnRXhwKCJeIHsxLCIraCsifSIsImdtIiksIiIpKSx0aGlzLm9wdGlvbnMuc21hcnRMaXN0cyYmdSE9PXAtMSYmKGw9YS5idWxsZXQuZXhlYyhzW3UrMV0pWzBdLGk9PT1sfHxpLmxlbmd0aD4xJiZsLmxlbmd0aD4xfHwoZT1zLnNsaWNlKHUrMSkuam9pbigiXG4iKStlLHU9cC0xKSkscj1ufHwvXG5cbig/IVxzKiQpLy50ZXN0KG8pLHUhPT1wLTEmJihuPSJcbiI9PT1vLmNoYXJBdChvLmxlbmd0aC0xKSxyfHwocj1uKSksdGhpcy50b2tlbnMucHVzaCh7dHlwZTpyPyJsb29zZV9pdGVtX3N0YXJ0IjoibGlzdF9pdGVtX3N0YXJ0In0pLHRoaXMudG9rZW4obywhMSksdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9pdGVtX2VuZCJ9KTt0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2VuZCJ9KX1lbHNlIGlmKHM9dGhpcy5ydWxlcy5odG1sLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InBhcmFncmFwaCI6Imh0bWwiLHByZToicHJlIj09PXNbMV18fCJzY3JpcHQiPT09c1sxXXx8InN0eWxlIj09PXNbMV0sdGV4dDpzWzBdfSk7ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLmRlZi5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5saW5rc1tzWzFdLnRvTG93ZXJDYXNlKCldPXtocmVmOnNbMl0sdGl0bGU6c1szXX07ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC8oPzogKlx8ICopP1xuJC8sIiIpLnNwbGl0KCJcbiIpfSx1PTA7dTxvLmFsaWduLmxlbmd0aDt1Kyspby5hbGlnblt1XT0vXiAqLSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChvLmFsaWduW3VdKT8ibGVmdCI6bnVsbDtmb3IodT0wO3U8by5jZWxscy5sZW5ndGg7dSsrKW8uY2VsbHNbdV09by5jZWxsc1t1XS5yZXBsYWNlKC9eICpcfCAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJwYXJhZ3JhcGgiLHRleHQ6IlxuIj09PXNbMV0uY2hhckF0KHNbMV0ubGVuZ3RoLTEpP3NbMV0uc2xpY2UoMCwtMSk6c1sxXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJ0ZXh0Iix0ZXh0OnNbMF19KTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gdGhpcy50b2tlbnN9O3ZhciB1PXtlc2NhcGU6L15cXChbXFxgKnt9XFtcXSgpIytcLS4hXz5dKS8sYXV0b2xpbms6L148KFteID5dKyhAfDpcLylbXiA+XSspPi8sdXJsOmwsdGFnOi9ePCEtLVtcc1xTXSo/LS0+fF48XC8/XHcrKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vLGxpbms6L14hP1xbKGluc2lkZSlcXVwoaHJlZlwpLyxyZWZsaW5rOi9eIT9cWyhpbnNpZGUpXF1ccypcWyhbXlxdXSopXF0vLG5vbGluazovXiE/XFsoKD86XFtbXlxdXSpcXXxbXlxbXF1dKSopXF0vLHN0cm9uZzovXl9fKFtcc1xTXSs/KV9fKD8hXyl8XlwqXCooW1xzXFNdKz8pXCpcKig/IVwqKS8sZW06L15cYl8oKD86X198W1xzXFNdKSs/KV9cYnxeXCooKD86XCpcKnxbXHNcU10pKz8pXCooPyFcKikvLGNvZGU6L14oYCspXHMqKFtcc1xTXSo/W15gXSlccypcMSg/IWApLyxicjovXiB7Mix9XG4oPyFccyokKS8sZGVsOmwsdGV4dDovXltcc1xTXSs/KD89W1xcPCFcW18qYF18IHsyLH1cbnwkKS99O3UuX2luc2lkZT0vKD86XFtbXlxdXSpcXXxbXlxbXF1dfFxdKD89W15cW10qXF0pKSovLHUuX2hyZWY9L1xzKjw/KFtcc1xTXSo/KT4/KD86XHMrWyciXShbXHNcU10qPylbJyJdKT9ccyovLHUubGluaz1pKHUubGluaykoImluc2lkZSIsdS5faW5zaWRlKSgiaHJlZiIsdS5faHJlZikoKSx1LnJlZmxpbms9aSh1LnJlZmxpbmspKCJpbnNpZGUiLHUuX2luc2lkZSkoKSx1Lm5vcm1hbD1vKHt9LHUpLHUucGVkYW50aWM9byh7fSx1Lm5vcm1hbCx7c3Ryb25nOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW06L15fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pfF5cKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopL30pLHUuZ2ZtPW8oe30sdS5ub3JtYWwse2VzY2FwZTppKHUuZXNjYXBlKSgiXSkiLCJ+fF0pIikoKSx1cmw6L14oaHR0cHM/OlwvXC9bXlxzPF0rW148Liw6OyInKVxdXHNdKS8sZGVsOi9efn4oPz1cUykoW1xzXFNdKj9cUyl+fi8sdGV4dDppKHUudGV4dCkoIl18Iiwifl18IikoInwiLCJ8aHR0cHM/Oi8vfCIpKCl9KSx1LmJyZWFrcz1vKHt9LHUuZ2ZtLHticjppKHUuYnIpKCJ7Mix9IiwiKiIpKCksdGV4dDppKHUuZ2ZtLnRleHQpKCJ7Mix9IiwiKiIpKCl9KSx0LnJ1bGVzPXUsdC5vdXRwdXQ9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzPW5ldyB0KG4scik7cmV0dXJuIHMub3V0cHV0KGUpfSx0LnByb3RvdHlwZS5vdXRwdXQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpLGw9IiI7ZTspaWYoaT10aGlzLnJ1bGVzLmVzY2FwZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPWlbMV07ZWxzZSBpZihpPXRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSwiQCI9PT1pWzJdPyhuPSI6Ij09PWlbMV0uY2hhckF0KDYpP3RoaXMubWFuZ2xlKGlbMV0uc3Vic3RyaW5nKDcpKTp0aGlzLm1hbmdsZShpWzFdKSxyPXRoaXMubWFuZ2xlKCJtYWlsdG86Iikrbik6KG49cyhpWzFdKSxyPW4pLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudXJsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbj1zKGlbMV0pLHI9bixsKz10aGlzLnJlbmRlcmVyLmxpbmsocixudWxsLG4pO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRhZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3B0aW9ucy5zYW5pdGl6ZT9zKGlbMF0pOmlbMF07ZWxzZSBpZihpPXRoaXMucnVsZXMubGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3V0cHV0TGluayhpLHtocmVmOmlbMl0sdGl0bGU6aVszXX0pO2Vsc2UgaWYoKGk9dGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoZSkpfHwoaT10aGlzLnJ1bGVzLm5vbGluay5leGVjKGUpKSl7aWYoZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdD0oaVsyXXx8aVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSx0PXRoaXMubGlua3NbdC50b0xvd2VyQ2FzZSgpXSwhdHx8IXQuaHJlZil7bCs9aVswXS5jaGFyQXQoMCksZT1pWzBdLnN1YnN0cmluZygxKStlO2NvbnRpbnVlfWwrPXRoaXMub3V0cHV0TGluayhpLHQpfWVsc2UgaWYoaT10aGlzLnJ1bGVzLnN0cm9uZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuc3Ryb25nKHRoaXMub3V0cHV0KGlbMl18fGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5lbS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZW0odGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmNvZGVzcGFuKHMoaVsyXSwhMCkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmJyLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5icigpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmRlbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZGVsKHRoaXMub3V0cHV0KGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy50ZXh0LmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9cyh0aGlzLnNtYXJ0eXBhbnRzKGlbMF0pKTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gbH0sdC5wcm90b3R5cGUub3V0cHV0TGluaz1mdW5jdGlvbihlLHQpe3ZhciBuPXModC5ocmVmKSxyPXQudGl0bGU/cyh0LnRpdGxlKTpudWxsO3JldHVybiIhIiE9PWVbMF0uY2hhckF0KDApP3RoaXMucmVuZGVyZXIubGluayhuLHIsdGhpcy5vdXRwdXQoZVsxXSkpOnRoaXMucmVuZGVyZXIuaW1hZ2UobixyLHMoZVsxXSkpfSx0LnByb3RvdHlwZS5zbWFydHlwYW50cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2UucmVwbGFjZSgvLS0vZywi4oCUIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMeKAmCIpLnJlcGxhY2UoLycvZywi4oCZIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQx4oCcIikucmVwbGFjZSgvIi9nLCLigJ0iKS5yZXBsYWNlKC9cLnszfS9nLCLigKYiKTplfSx0LnByb3RvdHlwZS5tYW5nbGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiIscj1lLmxlbmd0aCxzPTA7cj5zO3MrKyl0PWUuY2hhckNvZGVBdChzKSxNYXRoLnJhbmRvbSgpPi41JiYodD0ieCIrdC50b1N0cmluZygxNikpLG4rPSImIyIrdCsiOyI7cmV0dXJuIG59LG4ucHJvdG90eXBlLmNvZGU9ZnVuY3Rpb24oZSx0LG4scil7aWYocj1yfHx7fSxyLmhpZ2hsaWdodCl7dmFyIGk9ci5oaWdobGlnaHQoZSx0KTtudWxsIT1pJiZpIT09ZSYmKG49ITAsZT1pKX1yZXR1cm4gdD8nPHByZT48Y29kZSBjbGFzcz0iJytyLmxhbmdQcmVmaXgrdCsnIj4nKyhuP2U6cyhlKSkrIlxuPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhuP2U6cyhlLCEwKSkrIlxuPC9jb2RlPjwvcHJlPiJ9LG4ucHJvdG90eXBlLmJsb2NrcXVvdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIjxibG9ja3F1b3RlPlxuIitlKyI8L2Jsb2NrcXVvdGU+XG4ifSxuLnByb3RvdHlwZS5odG1sPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxuLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aCIrdCsnIGlkPSInK3IuaGVhZGVyUHJlZml4K24udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlx3XSsvZywiLSIpKyciPicrZSsiPC9oIit0KyI+XG4ifSxuLnByb3RvdHlwZS5ocj1mdW5jdGlvbigpe3JldHVybiI8aHI+XG4ifSxuLnByb3RvdHlwZS5saXN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dD8ib2wiOiJ1bCI7cmV0dXJuIjwiK24rIj5cbiIrZSsiPC8iK24rIj5cbiJ9LG4ucHJvdG90eXBlLmxpc3RpdGVtPWZ1bmN0aW9uKGUpe3JldHVybiI8bGk+IitlKyI8L2xpPlxuIn0sbi5wcm90b3R5cGUucGFyYWdyYXBoPWZ1bmN0aW9uKGUpe3JldHVybiI8cD4iK2UrIjwvcD5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrZSsiPC90aGVhZD5cbiIrIjx0Ym9keT5cbiIrdCsiPC90Ym9keT5cbiIrIjwvdGFibGU+XG4ifSxuLnByb3RvdHlwZS50YWJsZXJvdz1mdW5jdGlvbihlKXtyZXR1cm4iPHRyPlxuIitlKyI8L3RyPlxuIn0sbi5wcm90b3R5cGUudGFibGVjZWxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5oZWFkZXI/InRoIjoidGQiLHI9dC5hbGlnbj8iPCIrbisnIHN0eWxlPSJ0ZXh0LWFsaWduOicrdC5hbGlnbisnIj4nOiI8IituKyI+IjtyZXR1cm4gcitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUuc3Ryb25nPWZ1bmN0aW9uKGUpe3JldHVybiI8c3Ryb25nPiIrZSsiPC9zdHJvbmc+In0sbi5wcm90b3R5cGUuZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxlbT4iK2UrIjwvZW0+In0sbi5wcm90b3R5cGUuY29kZXNwYW49ZnVuY3Rpb24oZSl7cmV0dXJuIjxjb2RlPiIrZSsiPC9jb2RlPiJ9LG4ucHJvdG90eXBlLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIjxicj4ifSxuLnByb3RvdHlwZS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIjxkZWw+IitlKyI8L2RlbD4ifSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0nPGEgaHJlZj0iJytlKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+IituKyI8L2E+In0sbi5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8aW1nIHNyYz0iJytlKyciIGFsdD0iJytuKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+In0sci5wYXJzZT1mdW5jdGlvbihlLHQsbil7dmFyIHM9bmV3IHIodCxuKTtyZXR1cm4gcy5wYXJzZShlKX0sci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7dGhpcy5pbmxpbmU9bmV3IHQoZS5saW5rcyx0aGlzLm9wdGlvbnMsdGhpcy5yZW5kZXJlciksdGhpcy50b2tlbnM9ZS5yZXZlcnNlKCk7Zm9yKHZhciBuPSIiO3RoaXMubmV4dCgpOyluKz10aGlzLnRvaygpO3JldHVybiBufSxyLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW49dGhpcy50b2tlbnMucG9wKCl9LHIucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdfHwwfSxyLnByb3RvdHlwZS5wYXJzZVRleHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy50b2tlbi50ZXh0OyJ0ZXh0Ij09PXRoaXMucGVlaygpLnR5cGU7KWUrPSJcbiIrdGhpcy5uZXh0KCkudGV4dDtyZXR1cm4gdGhpcy5pbmxpbmUub3V0cHV0KGUpfSxyLnByb3RvdHlwZS50b2s9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy50b2tlbi50eXBlKXtjYXNlInNwYWNlIjpyZXR1cm4iIjtjYXNlImhyIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpO2Nhc2UiaGVhZGluZyI6cmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSx0aGlzLnRva2VuLmRlcHRoLHRoaXMudG9rZW4udGV4dCx0aGlzLm9wdGlvbnMpO2Nhc2UiY29kZSI6cmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsdGhpcy50b2tlbi5sYW5nLHRoaXMudG9rZW4uZXNjYXBlZCx0aGlzLm9wdGlvbnMpO2Nhc2UidGFibGUiOnZhciBlLHQsbixyLHMsaT0iIixsPSIiO2ZvcihuPSIiLGU9MDtlPHRoaXMudG9rZW4uaGVhZGVyLmxlbmd0aDtlKyspcj17aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19LG4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLmhlYWRlcltlXSkse2hlYWRlcjohMCxhbGlnbjp0aGlzLnRva2VuLmFsaWduW2VdfSk7Zm9yKGkrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobiksZT0wO2U8dGhpcy50b2tlbi5jZWxscy5sZW5ndGg7ZSsrKXtmb3IodD10aGlzLnRva2VuLmNlbGxzW2VdLG49IiIscz0wO3M8dC5sZW5ndGg7cysrKW4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0W3NdKSx7aGVhZGVyOiExLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bc119KTtsKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KG4pfXJldHVybiB0aGlzLnJlbmRlcmVyLnRhYmxlKGksbCk7Y2FzZSJibG9ja3F1b3RlX3N0YXJ0Ijpmb3IodmFyIGw9IiI7ImJsb2NrcXVvdGVfZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShsKTtjYXNlImxpc3Rfc3RhcnQiOmZvcih2YXIgbD0iIixvPXRoaXMudG9rZW4ub3JkZXJlZDsibGlzdF9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0KGwsbyk7Y2FzZSJsaXN0X2l0ZW1fc3RhcnQiOmZvcih2YXIgbD0iIjsibGlzdF9pdGVtX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz0idGV4dCI9PT10aGlzLnRva2VuLnR5cGU/dGhpcy5wYXJzZVRleHQoKTp0aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGwpO2Nhc2UibG9vc2VfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJodG1sIjp2YXIgaD10aGlzLnRva2VuLnByZXx8dGhpcy5vcHRpb25zLnBlZGFudGljP3RoaXMudG9rZW4udGV4dDp0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KTtyZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKGgpO2Nhc2UicGFyYWdyYXBoIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCkpO2Nhc2UidGV4dCI6cmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VUZXh0KCkpfX0sbC5leGVjPWwsaC5vcHRpb25zPWguc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gbyhoLmRlZmF1bHRzLGUpLGh9LGguZGVmYXVsdHM9e2dmbTohMCx0YWJsZXM6ITAsYnJlYWtzOiExLHBlZGFudGljOiExLHNhbml0aXplOiExLHNtYXJ0TGlzdHM6ITEsc2lsZW50OiExLGhpZ2hsaWdodDpudWxsLGxhbmdQcmVmaXg6ImxhbmctIixzbWFydHlwYW50czohMSxoZWFkZXJQcmVmaXg6IiIscmVuZGVyZXI6bmV3IG59LGguUGFyc2VyPXIsaC5wYXJzZXI9ci5wYXJzZSxoLlJlbmRlcmVyPW4saC5MZXhlcj1lLGgubGV4ZXI9ZS5sZXgsaC5JbmxpbmVMZXhlcj10LGguaW5saW5lTGV4ZXI9dC5vdXRwdXQsaC5wYXJzZT1oLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1oOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTp0aGlzLm1hcmtlZD1ofS5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fCgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6Z2xvYmFsKX0oKSk7UEsHCEL6TGpTOQAAUzkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHN0YXRpY1xsaWJcdmFsaWRhdGUubWluLmpzLyoKICogdmFsaWRhdGUuanMgMS4zCiAqIENvcHlyaWdodCAoYykgMjAxMyBSaWNrIEhhcnJpc29uLCBodHRwOi8vcmlja2hhcnJpc29uLm1lCiAqIHZhbGlkYXRlLmpzIGlzIG9wZW4gc291cmNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqIFBvcnRpb25zIG9mIHZhbGlkYXRlLmpzIGFyZSBpbnNwaXJlZCBieSBDb2RlSWduaXRlci4KICogaHR0cDovL3JpY2toYXJyaXNvbi5naXRodWIuY29tL3ZhbGlkYXRlLmpzCiAqLwoKKGZ1bmN0aW9uKHEscixtKXt2YXIgcz17cmVxdWlyZWQ6IlRoZSAlcyBmaWVsZCBpcyByZXF1aXJlZC4iLG1hdGNoZXM6IlRoZSAlcyBmaWVsZCBkb2VzIG5vdCBtYXRjaCB0aGUgJXMgZmllbGQuIiwiZGVmYXVsdCI6IlRoZSAlcyBmaWVsZCBpcyBzdGlsbCBzZXQgdG8gZGVmYXVsdCwgcGxlYXNlIGNoYW5nZS4iLHZhbGlkX2VtYWlsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iLHZhbGlkX2VtYWlsczoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhbGwgdmFsaWQgZW1haWwgYWRkcmVzc2VzLiIsbWluX2xlbmd0aDoiVGhlICVzIGZpZWxkIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixtYXhfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBub3QgZXhjZWVkICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZXhhY3RfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBleGFjdGx5ICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZ3JlYXRlcl90aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAlcy4iLGxlc3NfdGhhbjoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBsZXNzIHRoYW4gJXMuIixhbHBoYToiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzLiIsYWxwaGFfbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycy4iLGFscGhhX2Rhc2g6IlRoZSAlcyBmaWVsZCBtdXN0IG9ubHkgY29udGFpbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBhbmQgZGFzaGVzLiIsbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5IG51bWJlcnMuIixpbnRlZ2VyOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFuIGludGVnZXIuIixkZWNpbWFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgZGVjaW1hbCBudW1iZXIuIixpc19uYXR1cmFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgcG9zaXRpdmUgbnVtYmVycy4iLGlzX25hdHVyYWxfbm9femVybzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4iLHZhbGlkX2lwOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgSVAuIix2YWxpZF9iYXNlNjQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBiYXNlNjQgc3RyaW5nLiIsdmFsaWRfY3JlZGl0X2NhcmQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIuIixpc19maWxlX3R5cGU6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSAlcyBmaWxlcy4iLHZhbGlkX3VybDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIFVSTC4ifSx0PWZ1bmN0aW9uKGEpe30sdT0vXiguKz8pXFsoLispXF0kLyxoPS9eWzAtOV0rJC8sdj0vXlwtP1swLTldKyQvLGs9L15cLT9bMC05XSpcLj9bMC05XSskLyxwPS9eW2EtekEtWjAtOS4hIyQlJmFtcDsnKitcLVwvPT9cXl9ge3x9flwtXStAW2EtekEtWjAtOVwtXSsoPzpcLlthLXpBLVowLTlcLV0rKSokLyx3PS9eW2Etel0rJC9pLHg9L15bYS16MC05XSskL2kseT0vXlthLXowLTlfXC1dKyQvaSx6PS9eWzAtOV0rJC9pLEE9L15bMS05XVswLTldKiQvaSxCPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KSQvaSxDPS9bXmEtekEtWjAtOVwvXCs9XS9pLEQ9L15bXGRcLVxzXSskLyxFPS9eKChodHRwfGh0dHBzKTpcL1wvKFx3Kzp7MCwxfVx3KkApPyhcUyspfCkoOlswLTldKyk/KFwvfFwvKFtcdyMhOi4/Kz0mJUAhXC1cL10pKT8kLyxlPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbGxiYWNrPWN8fHQ7dGhpcy5lcnJvcnM9W107dGhpcy5maWVsZHM9e307dGhpcy5mb3JtPXRoaXMuX2Zvcm1CeU5hbWVPck5vZGUoYSl8fHt9O3RoaXMubWVzc2FnZXM9e307dGhpcy5oYW5kbGVycz17fTthPTA7Zm9yKGM9Yi5sZW5ndGg7YTxjO2ErKyl7dmFyIGQ9YlthXTtpZigoZC5uYW1lfHxkLm5hbWVzKSYmZC5ydWxlcylpZihkLm5hbWVzKWZvcih2YXIgbD0wO2w8ZC5uYW1lcy5sZW5ndGg7bCsrKXRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lc1tsXSk7ZWxzZSB0aGlzLl9hZGRGaWVsZChkLGQubmFtZSl9dmFyIGc9dGhpcy5mb3JtLm9uc3VibWl0O3RoaXMuZm9ybS5vbnN1Ym1pdD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7dHJ5e3JldHVybiBhLl92YWxpZGF0ZUZvcm0oYikmJihnPT09bXx8ZygpKX1jYXRjaChjKXt9fX0odGhpcyl9LG49ZnVuY3Rpb24oYSxiKXt2YXIgYztpZigwPGEubGVuZ3RoJiYoInJhZGlvIj09PWFbMF0udHlwZXx8ImNoZWNrYm94Ij09PWFbMF0udHlwZSkpZm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoYVtjXS5jaGVja2VkKXJldHVybiBhW2NdW2JdfWVsc2UgcmV0dXJuIGFbYl19O2UucHJvdG90eXBlLnNldE1lc3NhZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLm1lc3NhZ2VzW2FdPWI7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLnJlZ2lzdGVyQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXthJiYoInN0cmluZyI9PT10eXBlb2YgYSYmYiYmImZ1bmN0aW9uIj09PXR5cGVvZiBiKSYmKHRoaXMuaGFuZGxlcnNbYV09Yik7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLl9mb3JtQnlOYW1lT3JOb2RlPWZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiPT09dHlwZW9mIGE/YTpyLmZvcm1zW2FdfTtlLnByb3RvdHlwZS5fYWRkRmllbGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmZpZWxkc1tiXT17bmFtZTpiLGRpc3BsYXk6YS5kaXNwbGF5fHxiLHJ1bGVzOmEucnVsZXMsaWQ6bnVsbCx0eXBlOm51bGwsdmFsdWU6bnVsbCxjaGVja2VkOm51bGx9fTtlLnByb3RvdHlwZS5fdmFsaWRhdGVGb3JtPWZ1bmN0aW9uKGEpe3RoaXMuZXJyb3JzPVtdO2Zvcih2YXIgYiBpbiB0aGlzLmZpZWxkcylpZih0aGlzLmZpZWxkcy5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGM9dGhpcy5maWVsZHNbYl18fHt9LGQ9dGhpcy5mb3JtW2MubmFtZV07ZCYmZCE9PW0mJihjLmlkPW4oZCwiaWQiKSxjLnR5cGU9MDxkLmxlbmd0aD9kWzBdLnR5cGU6ZC50eXBlLGMudmFsdWU9bihkLCJ2YWx1ZSIpLGMuY2hlY2tlZD1uKGQsImNoZWNrZWQiKSx0aGlzLl92YWxpZGF0ZUZpZWxkKGMpKX0iZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuY2FsbGJhY2smJnRoaXMuY2FsbGJhY2sodGhpcy5lcnJvcnMsYSk7MDx0aGlzLmVycm9ycy5sZW5ndGgmJihhJiZhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTpldmVudCYmKGV2ZW50LnJldHVyblZhbHVlPSExKSk7cmV0dXJuITB9O2UucHJvdG90eXBlLl92YWxpZGF0ZUZpZWxkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLnJ1bGVzLnNwbGl0KCJ8IiksYz1hLnJ1bGVzLmluZGV4T2YoInJlcXVpcmVkIiksZD0hYS52YWx1ZXx8IiI9PT1hLnZhbHVlfHxhLnZhbHVlPT09bSxsPTAsZz1iLmxlbmd0aDtsPGc7bCsrKXt2YXIgZj1iW2xdLGU9bnVsbCxoPSExLGs9dS5leGVjKGYpO2lmKC0xIT09Y3x8LTEhPT1mLmluZGV4T2YoIiFjYWxsYmFja18iKXx8IWQpaWYoayYmKGY9a1sxXSxlPWtbMl0pLCIhIj09PWYuY2hhckF0KDApJiYoZj1mLnN1YnN0cmluZygxLGYubGVuZ3RoKSksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLl9ob29rc1tmXT90aGlzLl9ob29rc1tmXS5hcHBseSh0aGlzLFthLGVdKXx8KGg9ITApOiJjYWxsYmFja18iPT09Zi5zdWJzdHJpbmcoMCw5KSYmKGY9Zi5zdWJzdHJpbmcoOSxmLmxlbmd0aCksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmhhbmRsZXJzW2ZdJiYhMT09PXRoaXMuaGFuZGxlcnNbZl0uYXBwbHkodGhpcyxbYS52YWx1ZSxlXSkmJihoPSEwKSksaCl7Yj10aGlzLm1lc3NhZ2VzW2ZdfHxzW2ZdO2M9IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aXRoIHRoZSAiK2EuZGlzcGxheSsiIGZpZWxkLiI7YiYmKGM9Yi5yZXBsYWNlKCIlcyIsYS5kaXNwbGF5KSxlJiYoYz1jLnJlcGxhY2UoIiVzIix0aGlzLmZpZWxkc1tlXT90aGlzLmZpZWxkc1tlXS5kaXNwbGF5OmUpKSk7dGhpcy5lcnJvcnMucHVzaCh7aWQ6YS5pZCxuYW1lOmEubmFtZSxtZXNzYWdlOmMscnVsZTpmfSk7YnJlYWt9fX07ZS5wcm90b3R5cGUuX2hvb2tzPXtyZXF1aXJlZDpmdW5jdGlvbihhKXt2YXIgYj1hLnZhbHVlO3JldHVybiJjaGVja2JveCI9PT1hLnR5cGV8fCJyYWRpbyI9PT1hLnR5cGU/ITA9PT1hLmNoZWNrZWQ6bnVsbCE9PWImJiIiIT09Yn0sImRlZmF1bHQiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUhPT1ifSxtYXRjaGVzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5mb3JtW2JdO3JldHVybiBjP2EudmFsdWU9PT1jLnZhbHVlOiExfSx2YWxpZF9lbWFpbDpmdW5jdGlvbihhKXtyZXR1cm4gcC50ZXN0KGEudmFsdWUpfSx2YWxpZF9lbWFpbHM6ZnVuY3Rpb24oYSl7YT1hLnZhbHVlLnNwbGl0KCIsIik7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspaWYoIXAudGVzdChhW2JdKSlyZXR1cm4hMTtyZXR1cm4hMH0sbWluX2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg+PXBhcnNlSW50KGIsMTApOiExfSxtYXhfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aDw9cGFyc2VJbnQoYiwxMCk6ITF9LGV4YWN0X2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg9PT1wYXJzZUludChiLDEwKTohMX0sZ3JlYXRlcl90aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPnBhcnNlRmxvYXQoYik6ITF9LGxlc3NfdGhhbjpmdW5jdGlvbihhLGIpe3JldHVybiBrLnRlc3QoYS52YWx1ZSk/cGFyc2VGbG9hdChhLnZhbHVlKTxwYXJzZUZsb2F0KGIpOiExfSxhbHBoYTpmdW5jdGlvbihhKXtyZXR1cm4gdy50ZXN0KGEudmFsdWUpfSxhbHBoYV9udW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiB4LnRlc3QoYS52YWx1ZSl9LGFscGhhX2Rhc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHkudGVzdChhLnZhbHVlKX0sbnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4gaC50ZXN0KGEudmFsdWUpfSxpbnRlZ2VyOmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoYS52YWx1ZSl9LGRlY2ltYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGsudGVzdChhLnZhbHVlKX0saXNfbmF0dXJhbDpmdW5jdGlvbihhKXtyZXR1cm4gei50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsX25vX3plcm86ZnVuY3Rpb24oYSl7cmV0dXJuIEEudGVzdChhLnZhbHVlKX0sdmFsaWRfaXA6ZnVuY3Rpb24oYSl7cmV0dXJuIEIudGVzdChhLnZhbHVlKX0sdmFsaWRfYmFzZTY0OmZ1bmN0aW9uKGEpe3JldHVybiBDLnRlc3QoYS52YWx1ZSl9LHZhbGlkX3VybDpmdW5jdGlvbihhKXtyZXR1cm4gRS50ZXN0KGEudmFsdWUpfSx2YWxpZF9jcmVkaXRfY2FyZDpmdW5jdGlvbihhKXtpZighRC50ZXN0KGEudmFsdWUpKXJldHVybiExO3ZhciBiPTAsYz0wLGQ9ITE7YT1hLnZhbHVlLnJlcGxhY2UoL1xEL2csIiIpO2Zvcih2YXIgZT1hLmxlbmd0aC0xOzA8PWU7ZS0tKWM9YS5jaGFyQXQoZSksYz1wYXJzZUludChjLDEwKSxkJiY5PChjKj0yKSYmKGMtPTkpLGIrPWMsZD0hZDtyZXR1cm4gMD09PWIlMTB9LGlzX2ZpbGVfdHlwZTpmdW5jdGlvbihhLGIpe2lmKCJmaWxlIiE9PWEudHlwZSlyZXR1cm4hMDt2YXIgYz1hLnZhbHVlLnN1YnN0cihhLnZhbHVlLmxhc3RJbmRleE9mKCIuIikrMSksZD1iLnNwbGl0KCIsIiksZT0hMSxnPTAsZj1kLmxlbmd0aDtmb3IoZztnPGY7ZysrKWM9PWRbZ10mJihlPSEwKTtyZXR1cm4gZX19O3EuRm9ybVZhbGlkYXRvcj1lfSkod2luZG93LGRvY3VtZW50KTsKUEsHCGaMH8QzGAAAMxgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAABQAAAHZpZXcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHZpZXdcYWRtaW4vUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcYWRtaW5cYXJ0aWNsZXMuaHRtbDx1bCBpZD0iYXJ0aWNsZS1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj4NCiAgICA8bGk+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5re75Yqg5paH56ugPC9hPg0KICAgIDwvbGk+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj48aDQgY2xhc3M9ImlubGluZS1ibG9jayB0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0YXJnZXQ9Il9ibGFuayI+e3suVGl0bGV9fTwvYT48L2g0Pnt7aWYgbmUgLlN0YXR1cyAicHVibGlzaCJ9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGJsIHN0YXR1cyI+6I2J56i/PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9InNsdWciPnt7LlNsdWd9fTwvc3Bhbj57e2lmIGVxIC5Jc0NvbW1lbnQgZmFsc2V9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iaXMtY29tbWVudCI+PGkgY2xhc3M9ImZhLWNvbW1lbnRzIGZhIj48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50Ij57ey5Db21tZW50TnVtfX0gLyB7ey5IaXRzfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJlZGl0IGxibCBsYmwtZ3JlZW4iIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPue8lui+kTwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBsYmwgbGJsLXJlZCIgaHJlZj0iL2FkbWluL2FydGljbGUve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+5Yig6ZmkPC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKCIuZGVsIikub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBpZihjb25maXJtKCLliKDpmaTmlofnq6DlsIbkvb/nm7jlhbPlhoXlrrnlpLHmlYjvvIHnoa7orqTvvJ8iKSl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAidXJsIjoiL2FkbWluL2FydGljbGUvIitpZCsiLyIsDQogICAgICAgICAgICAgICAgInR5cGUiOiJkZWxldGUiLA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suWIoOmZpCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0NCiAgICB9KTsNCjwvc2NyaXB0PlBLBwgfwp6+rgYAAK4GAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAB2aWV3XGFkbWluXGNtZC9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblxjbWRcYmFja3VwLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIGNsZWFyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSBsZWZ0Ij7lpIfku73mlbDmja48L2gxPg0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSBsZWZ0IiBpZD0iYmFja3VwLWJ0biI+5aSH5Lu9PC9idXR0b24+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJiYWNrdXAtbGlzdCI+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZVRpbWUgLk1vZFRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19IDxhIGNsYXNzPSJsaW5rIiBocmVmPSIvY21kL2JhY2t1cC9maWxlP2ZpbGU9e3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluayI+PC9pPjwvYT48L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJzaXplIj57e0ZpbGVTaXplIC5TaXplfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiIHJlbD0ie3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlLW8iPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHR5cGU6ICJwb3N0IiwNCiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLWxvYWRpbmciPuWkh+S7veS4rS4uPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5oaWRlKCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5iYWNrdXAtbG9hZGluZycpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNtZC1saXN0JykucHJlcGVuZCgnPGxpIGNsYXNzPSJiYWNrdXAtcmVzdWx0Ij7liJrliJrlpIfku73liLAgJyArIGpzb24uZmlsZSArICc8L2xpPicpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuc2hvdygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmRlbCcpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgdXJsOiAiL2NtZC9iYWNrdXAvP2ZpbGU9IiArICQodGhpcykuYXR0cigicmVsIiksDQogICAgICAgICAgICAgICAgdHlwZTogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGF0KS5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcIt5vmyUcHAABHBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxjbWRcbG9nLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSI+6ZSZ6K+v5pel5b+XPC9oMT4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9ImxvZy1saXN0Ij57e3JhbmdlIC5Mb2dzfX0NCiAgICA8bGkgY2xhc3M9ImxvZyByZWxhdGl2ZSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGlubGluZS1ibG9jayI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSBpbmxpbmUtYmxvY2siPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHByZSBjbGFzcz0idGV4dCI+e3suVGV4dH19PC9wcmU+DQogICAgICAgIDxhIGNsYXNzPSJyZW1vdmUgYWJzb2x1dGUiIGhyZWY9Ii9jbWQvbG9ncy8/ZmlsZT17ey5OYW1lfX0iPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlbW92ZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLnoa7orqTliKDpmaTorrDlvZUiKSkgew0KICAgICAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZToiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiR0aGlzLmF0dHIoImhyZWYiKSwNCiAgICAgICAgICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwjesGBYGQQAABkEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAAB2aWV3XGFkbWluXGNtZFxtZXNzYWdlLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSI+5raI5oGv6K6w5b2VPC9oMT4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9Im1lc3NhZ2UtbGlzdCI+e3tyYW5nZSAuTWVzc2FnZXN9fQ0KICAgIDxsaSBjbGFzcz0ibWVzc2FnZSByZWxhdGl2ZSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxkaXYgY2xhc3M9ImRhdGEiPnt7SHRtbCAuRGF0YX19PC9kaXY+DQogICAgPC9saT57e2VuZH19DQo8L3VsPlBLBwjJmMidRgEAAEYBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXGNvbW1lbnRzLmh0bWw8ZGl2IGlkPSJjb21tZW50LWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAiPnt7cmFuZ2UgLkNvbW1lbnRzfX0NCiAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSJ7ey5BdXRob3J9fSIvPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtZW1haWwiPnt7LkVtYWlsfX08L3NwYW4+e3tpZiAuR2V0Q29udGVudH19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5Ae3suR2V0Q29udGVudC5UaXRsZX19PC9zcGFuPnt7ZWxzZX19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5A5peg5pWIPC9zcGFuPnt7ZW5kfX17e2lmIG5lIC5TdGF0dXMgImFwcHJvdmVkIn19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtY2hlY2siIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWuoeaguCI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45LitPC9hPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Zue5aSNIj48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtZGVsIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaQiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pnt7ZW5kfX0NCiAgICA8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGFjdGlvbj0iL2FkbWluL2NvbW1lbnRzLyIgY2xhc3M9ImZvcm0gY2xlYXIgbGVmdCIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQgbGVmdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiIGlkPSJjb21tZW50LXN1Ym1pdCI+5Zue5aSN6K+E6K66PC9idXR0b24+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJjb21tZW50LWNsb3NlIj7lhbPpl63lm57lpI08L2J1dHRvbj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIGlkPSJjb21tZW50LXBhcmVudCIgbmFtZT0icGlkIi8+DQogICAgPC9mb3JtPg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6K+E6K665bCG5L2/55u45YWz5YaF5a655peg5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5Yig6Zmk5aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtY2hlY2snKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5a6h5qC45ZCO5q2k5L2c6ICF5bCG5LiN5YaN5qCH6K6w5a6h5qC4ISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAicHV0IiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlrqHmoLjlpLHotKUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuYy1yZXBseScpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC0nK2lkKS5hcHBlbmQoJCgnI2NvbW1lbnQtZm9ybScpLmRldGFjaCgpLnNob3coKSk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suWbnuWkjSIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9jb21tZW50cy8iOw0KICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgYWxlcnQoIuWbnuWkjeWksei0pSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtY2xvc2UnKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuaGlkZSgpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIQJgI7+0PAADtDwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAdmlld1xhZG1pblxlZGl0X2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiIHZhbHVlPSJ7ey5BcnRpY2xlLlRpdGxlfX0iLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij57e0h0bWwgLkFydGljbGUuVGV4dH19PC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiIHZhbHVlPSJ7ey5BcnRpY2xlLlNsdWd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuagh+etvjwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0idGFnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWciIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTmoIfnrb4iIHZhbHVlPSJ7ey5BcnRpY2xlLlRhZ1N0cmluZ319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuQXJ0aWNsZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLkFydGljbGUuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLkFydGljbGUuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCEuc6fFtDQAAbQ0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcYWRtaW5cZWRpdF9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIiB2YWx1ZT0ie3suUGFnZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5QYWdlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suUGFnZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCJ7e2lmIGVxIC5QYWdlLlN0YXR1cyAicHVibGlzaCJ9fSBzZWxlY3RlZHt7ZW5kfX0+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQie3tpZiBlcSAuUGFnZS5TdGF0dXMgImRyYWZ0In19IHNlbGVjdGVke3tlbmR9fT7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0NvbW1lbnQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzTGlua2VkIGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuW3suS/neWtmO+8jOWOu+afpeeci++8n+i/mOaYr+e7p+e7ree8lui+kSIpKSB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9wYWdlcy8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcItngyMuMNAADjDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxmaWxlcy5odG1sPHVsIGlkPSJmaWxlcy1saXN0IiBjbGFzcz0iYWRtaW4gY29udGFpbmVyOTYwIHBhZ2VyIj4NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlcy1idG4tbGkiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgIDwvbGk+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaSBjbGFzcz0iZmlsZSIgaWQ9ImZpbGUte3suSWR9fSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ1cGxvYWQtdGltZSI+e3tEYXRlSW50NjQgLlVwbG9hZFRpbWUgIk1NLkREIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iL3t7LlVybH19IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Ii97ey5Vcmx9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmstc3F1YXJlIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIGZhZGUtb3V0IiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaTpmYTku7YiPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQogICAge3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9maWxlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIGluaXRVcGxvYWQoIiNhdHRhY2gtc2hvdyIpOw0KICAgICAgICAkKCIuZGVsIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWIoOmZpOmZhOS7tuebuOWFs+mTvuaOpeS8muWkseaViCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgInVybCI6ICIvYWRtaW4vZmlsZXMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgInN1Y2Nlc3MiOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNmaWxlLScraWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIYsWb+uwGAADsBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAdmlld1xhZG1pblxob21lLmh0bWw8ZGl2IGNsYXNzPSJhZG1pbiBjb250YWluZXIgY2xlYXIiIGlkPSJkYXNoYm9hcmQiPg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS01IGxlZnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ3ZWxjb21lIj4NCiAgICAgICAgICAgIDxoND5XZWxjb21lPC9oND4NCiAgICAgICAgICAgIDxwPuasoui/juWbnuadpe+8jCA8c3Ryb25nPnt7LlVzZXIuTmlja319PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0icXVpY2stbGluayI+DQogICAgICAgICAgICA8aDQ+5b+r6YCf6ZO+5o6lPC9oND4NCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mkrDlhpnmlofnq6A8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLyI+5p+l55yL5ZKM5a6h5qC46K+E6K66PC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyI+5L+u5pS56YWN572uPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wcm9maWxlLyI+5pu05paw5Liq5Lq66LWE5paZPC9hPjwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtMiBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHkiPg0KICAgICAgICAgICAgPGg0PuacgOaWsOa0u+WKqDwvaDQ+e3tyYW5nZSAuTWVzc2FnZXN9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXNnIHJlbGF0aXZlIHt7LlR5cGV9fSI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhIj57e0h0bWwgLkRhdGF9fTwvZGl2Pg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJyZWFkIGFic29sdXRlIiBocmVmPSIvYWRtaW4vbWVzc2FnZS9yZWFkP2lkPXt7LklkfX0iIHJlbD0ie3suSWR9fSI+PGkgY2xhc3M9ImZhIGZhLWNoZWNrIj48L2k+PC9hPg0KICAgICAgICAgICAgPC9kaXY+e3tlbmR9fXt7aWYgbHQgKGxlbiAuTWVzc2FnZXMpIDF9fQ0KICAgICAgICAgICAgPHA+5rKh5pyJ5paw55qE5rS75Yqo5L+h5oGvPC9wPg0KICAgICAgICAgICAge3tlbmR9fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtNCByaWdodCI+DQogICAgICAgIDxkaXYgY2xhc3M9InN0YXRzIj4NCiAgICAgICAgICAgIDxoND7mlbDmja7nu5/orqE8L2g0Pg0KICAgICAgICAgICAgPHA+5bey57uP5Y+R5biD5paH56ugIDxzcGFuIGNsYXNzPSJsYmwgbGJsLXJlZCI+e3suU3RhdGlzLkFydGljbGVzfX08L3NwYW4+IOevh++8jA0KICAgICAgICAgICAg6aG16Z2iIDxzcGFuIGNsYXNzPSJsYmwgbGJsLXJlZCI+e3suU3RhdGlzLlBhZ2VzfX08L3NwYW4+IOS4qu+8jCA8YnIvPg0KICAgICAgICAgICAg5pS25Yiw6K+E6K66IDxzcGFuIGNsYXNzPSJsYmwgbGJsLWJsdWUiPnt7LlN0YXRpcy5Db21tZW50c319PC9zcGFuPiDmrKHvvIwNCiAgICAgICAgICAgIOS4iuS8oCA8c3BhbiBjbGFzcz0ibGJsIGxibC1ncmVlbiI+e3suU3RhdGlzLkZpbGVzfX08L3NwYW4+IOS4qumZhOS7tjwvcD4NCiAgICAgICAgICAgIDxwPuW9k+WJjeeoi+W6j+eJiOacrO+8mjxzdHJvbmc+e3suU3RhdGlzLlZlcnNpb259fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im9mZmljZSI+DQogICAgICAgICAgICA8aDQ+5a6Y5pa55raI5oGvPC9oND4NCiAgICAgICAgICAgIDxwPui/mOayoeaciea2iOaBrzwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQo8L2Rpdj4NCjxzY3JpcHQ+DQogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsNCiAgICAgICAkKCIucmVhZCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgJC5wb3N0KCR0aGlzLmF0dHIoImhyZWYiKSxmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgJHRoaXMucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgfSk7DQogICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICB9KTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwj0lNzmIAkAACAJAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXGxvZ2luLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+55m75b2VIC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+DQogICAgICAgICNsb2dpbi1mb3Jtew0KICAgICAgICAgICAgd2lkdGg6IDI4MHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG87DQogICAgICAgIH0NCiAgICAgICAgI2xvZ2luLWZvcm0gaDF7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4Ow0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGZvcm0gaWQ9ImxvZ2luLWZvcm0iIGNsYXNzPSJmb3JtIGZvcm0tdmVydGljYWwiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0IiBuYW1lPSJsb2dpbi1mb3JtIj4NCiAgICA8aDE+55m75b2VIC0gRnhoLkdvPC9oMT4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nlKjmiLflkI08L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InVzZXIiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idXNlciIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0icGFzc3dvcmQiPueUqOaIt+WvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IiBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InBhc3N3b3JkIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJwYXNzd29yZC1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPueZuyDlvZU8L2J1dHRvbj4NCiAgICA8c3BhbiBjbGFzcz0idGlwIj7pu5jorqTorrDkvY/nmbvpmYYz5aSpPC9zcGFuPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jZG4uc3RhdGljZmlsZS5vcmcvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS5mb3JtLzMuNDYvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi92YWxpZGF0ZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJsb2dpbi1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJ1c2VyIiwicnVsZXMiOiJhbHBoYV9udW1lcmljfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6InBhc3N3b3JkIiwicnVsZXMiOiJyZXF1aXJlZHxtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjbG9naW4tZm9ybScpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIueZu+W9lemUmeivr++8jOivt+ajgOafpeeUqOaIt+aIluWvhueggSIpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwjW4HhikAgAAJAIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXHBhZ2VzLmh0bWw8dWwgaWQ9ImFydGljbGUtbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+DQogICAgPGxpPg0KICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIiBocmVmPSIvYWRtaW4vcGFnZS93cml0ZS8iPua3u+WKoOmhtemdojwvYT4NCiAgICA8L2xpPnt7cmFuZ2UgLlBhZ2VzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+PGg0IGNsYXNzPSJpbmxpbmUtYmxvY2sgdGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LlRpdGxlfX08L2E+PC9oND57e2lmIG5lIC5TdGF0dXMgInB1Ymxpc2gifX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxibCBzdGF0dXMiPuiNieeovzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJzbHVnIj57ey5TbHVnfX08L3NwYW4+e3tpZiBlcSAuSXNDb21tZW50IGZhbHNlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImlzLWNvbW1lbnQiPjxpIGNsYXNzPSJmYS1jb21tZW50cyBmYSI+PC9pPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudCI+e3suQ29tbWVudE51bX19IC8ge3suSGl0c319PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vcGFnZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk6aG16Z2i5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9wYWdlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIqCtGRpwGAACcBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxwYXNzd29yZC5odG1sPGZvcm0gaWQ9InBhc3N3b3JkIiBjbGFzcz0iZm9ybSBmb3JtLWFsaWduIGNsZWFyIiBhY3Rpb249IiMiIG5hbWU9InBhc3N3b3JkLWZvcm0iIG1ldGhvZD0icG9zdCI+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ib2xkIj7ml6flr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im9sZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im9sZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPumqjOivgeaXp+WvhueggTwvc3Bhbj48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ib2xkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im5ldyI+5paw5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJuZXciIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJuZXciIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuZXctaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0iY29uZmlybSI+56Gu6K6k5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImNvbmZpcm0taW52YWxpZCI+56Gu6K6k5a+G56CB5LiN5Yy56YWNPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInBhc3N3b3JkLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6Im9sZCIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmV3IiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJjb25maXJtIiwicnVsZXMiOiJyZXF1aXJlZHxtYXRjaGVzW25ld10ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwYXNzd29yZCcpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIbnEngU8HAABPBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xhZG1pblxwbHVnaW4uaHRtbDx1bCBpZD0icGx1Z2luLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPnt7cmFuZ2UgLlBsdWdpbnN9fQ0KICAgIDxsaSBjbGFzcz0iY2xlYXIiPnt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQgbGJsIGFjdGl2ZSBsYmwtZ3JlZW4iPiZuYnNwOzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGxlZnQiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24gbGVmdCI+e3suVmVyc2lvbn19PC9zcGFuPnt7aWYgLkhhc1NldHRpbmd9fQ0KICAgICAgICA8YSBjbGFzcz0ic2V0dGluZyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy97ey5LZXl9fS8iPumAiemhuTwvYT57e2VuZH19e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8YSBjbGFzcz0iZGVhY3RpdmF0ZSBsYmwgbGJsLXJlZCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5bCB5Y2wPC9hPnt7ZWxzZX19DQogICAgICAgIDxhIGNsYXNzPSJhY3RpdmF0ZSBsYmwgbGJsLWJsdWUgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPua/gOa0uzwvYT57e2VuZH19DQogICAgICAgIDxwIGNsYXNzPSJkZXNjIGxlZnQiPnt7LkRlc2N9fTwvcD4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIuZGVhY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJkZWFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoea/gOa0uyIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlsIHljbDlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgiLmFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoeWwgeWNsCIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLmv4DmtLvlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCE9wWaFiBgAAYgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAHZpZXdcYWRtaW5ccGx1Z2luX3NldHRpbmcuaHRtbDxmb3JtIGlkPSJwbHVnaW4tc2V0dGluZy1mb3JtIiBjbGFzcz0iZm9ybSBjb250YWluZXI5NjAgYWRtaW4iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICB7e0h0bWwgLkZvcm19fQ0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICAgICAgICAkKCcjcGx1Z2luLXNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIjoi5L+d5a2Y5aSx6LSlIik7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwg0K3PVOAEAADgBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHByb2ZpbGUuaHRtbDxmb3JtIGlkPSJwcm9maWxlIiBjbGFzcz0iYWRtaW4gZm9ybSBjbGVhciBmb3JtLWFsaWduIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0icHJvZmlsZS1mb3JtIj4NCiAgICA8ZGl2IGNsYXNzPSJhdmF0YXIgZ3JpZC0xLTQgbGVmdCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7ey5Vc2VyLkF2YXRhcn19IiBhbHQ9Int7LlVzZXIuTmlja319IiBjbGFzcz0iZmllbGQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBmaWVsZCBpbmxpbmUtYmxvY2siPuWktOWDj+eUsSA8YSBocmVmPSJodHRwOi8vZ3JhdmF0YXIuY29tLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm8tZm9sbG93Ij5HcmF2YXRhcjwvYT4g5o+Q5L6bPC9zcGFuPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tcmVkIGlubGluZS1ibG9jayIgaHJlZj0iL2FkbWluL3Bhc3N3b3JkLyI+5L+u5pS55a+G56CBPC9hPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaW5mbyByaWdodCBncmlkLTMtNCI+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nmbvlvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiB2YWx1ZT0ie3suVXNlci5OYW1lfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+55m75b2V55qE55So5oi35ZCNPC9zcGFuPjxici8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ibmljayI+5pi156ewPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ibmljayIgdHlwZT0idGV4dCIgbmFtZT0ibmljayIgdmFsdWU9Int7LlVzZXIuTmlja319IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuaYvuekuuWcqOWJjeWPsOeahOensOWRvDwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5pY2staW52YWxpZCI+5pi156ew6ZW/5bqmMi0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZW1haWwiPumCrueusTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImVtYWlsIiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHZhbHVlPSJ7ey5Vc2VyLkVtYWlsfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6IGU57O76YKu566x77yM5Y2B5YiG6YeN6KaB77yBPC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iZW1haWwtaW52YWxpZCI+6YKu566x5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1cmwiPue9keWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVybCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHZhbHVlPSJ7ey5Vc2VyLlVybH19IiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1cmwtaW52YWxpZCI+572R5Z2A5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBiaW8iIG5hbWU9ImJpbyIgaWQ9ImJpbyI+e3suVXNlci5CaW99fTwvdGV4dGFyZWE+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwcm9maWxlLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmljayIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiZW1haWwiLCJydWxlcyI6InZhbGlkX2VtYWlsIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJ1cmwiLCJydWxlcyI6InZhbGlkX3VybCJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Byb2ZpbGUnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCB+PoV8CDAAAAgwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cc2V0dGluZy5odG1sPHVsIGlkPSJzZXR0aW5nLW5hdiIgY2xhc3M9ImNvbnRhaW5lciB0ZXh0LWNlbnRlciI+DQogICAgPGxpPjxhIGhyZWY9IiNnZW5lcmFsIj7ln7rmnKw8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iI25hdiI+5a+86IiqPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9IiNjdXN0b20iPuiHquWumuS5iTwvYT48L2xpPg0KPC91bD4NCjxkaXYgaWQ9InNldHRpbmctcGFuZWxzIiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICA8Zm9ybSBpZD0ic2V0dGluZy1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nLyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS11cmwiPuermeeCueWcsOWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdXJsIiBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InNpdGVfdXJsIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdXJsYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS10aXRsZSI+56uZ54K55Li75qCH6aKYPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aXRsZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1zdWItdGl0bGUiPuermeeCueWJr+agh+mimDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtc3ViLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3N1Yl90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3N1Yl90aXRsZWB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUta2V5d29yZHMiPk1ldGHlhbPplK7lrZc8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLWtleXdvcmRzIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2tleXdvcmRzIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1kZXNjIj5NZXRh56uZ54K55LuL57uNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1kZXNjIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2Rlc2NyaXB0aW9uIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iYXJ0aWNsZS1zaXplIj7ljZXpobXmlofnq6DliJfooajmlbA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJhcnRpY2xlLXNpemUiIGNsYXNzPSJpcHQiIHR5cGU9Im51bWJlciIgbmFtZT0iYXJ0aWNsZV9zaXplIiB2YWx1ZT0ie3tTZXR0aW5nIGBhcnRpY2xlX3NpemVgfX0iIG1heD0iMTAiIG1pbj0iMyIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGhlbWUiPuS4u+mimOebruW9leWQjTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdGhlbWUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfdGhlbWUiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdGhlbWVgfX0iLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS4u+mimOWNs+aMh+WQkeeahOaooeadv+ebruW9le+8jOWFt+S9k+WGheWuueivt+WPguiAgyBkZWZhdWx0IOebruW9le+8iOWNsyBkZWZhdWx0IOS4u+mimO+8iTwvc3Bhbj4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNpdGVfdGhlbWVfZGVmIiB2YWx1ZT0iZGVmYXVsdCIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImdvLW1hcmtkb3duIj5Hb+a4suafk01hcmtkb3duPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iZ28tbWFya2Rvd24iIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9ImVuYWJsZV9nb19tYXJrZG93biIgdmFsdWU9Int7U2V0dGluZyBgZW5hYmxlX2dvX21hcmtkb3duYH19Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7pu5jorqTlhbPpl63vvIzkvb/nlKjliY3nq69tYXJrZWQuanPmuLLmn5PvvIzloat0cnVl5pe25byA5ZCvPC9zcGFuPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duX2RlZiIgdmFsdWU9ImZhbHNlIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHA+DQogICAgICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Zvcm0+DQogICAgPGZvcm0gaWQ9InNldHRpbmctbmF2LWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybSBmb3JtLWFsaWduIHNldHRpbmctcGFuZWwiIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvbmF2LyIgbWV0aG9kPSJwb3N0Ij57e3JhbmdlIC5OYXZpZ2F0b3JzfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7mjpLluo88L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgb3JkZXIiIHR5cGU9Im51bWJlciIgbmFtZT0ib3JkZXIiIHZhbHVlPSJ7ey5PcmRlcn19Ii8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPuaWh+acrDwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCB0ZXh0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0ZXh0IiB2YWx1ZT0ie3suVGV4dH19IiByZXF1aXJlZD0icmVxdWlyZWQiLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5qCH6aKYPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgdmFsdWU9Int7LlRpdGxlfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+6ZO+5o6lPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IGxpbmsiIHR5cGU9InRleHQiIG5hbWU9ImxpbmsiIHZhbHVlPSJ7ey5MaW5rfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiIHJlbD0iI25hdi1pdGVtIj7mt7vliqDkuIDpobk8L2E+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0ibmF2LWl0ZW0iPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5o6S5bqPPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IG9yZGVyIiB0eXBlPSJudW1iZXIiIG5hbWU9Im9yZGVyIiB2YWx1ZT0iMSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5paH5pysPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRleHQiIHR5cGU9InRleHQiIG5hbWU9InRleHQiIHZhbHVlPSIiIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5qCH6aKYPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgdmFsdWU9IiIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+6ZO+5o6lPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IGxpbmsiIHR5cGU9InRleHQiIG5hbWU9ImxpbmsiIHZhbHVlPSIiIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9zY3JpcHQ+DQogICAgPC9mb3JtPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWN1c3RvbS1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nL2N1c3RvbS8iIG1ldGhvZD0icG9zdCI+e3tyYW5nZSAkaywkdiA6PSAuQ3VzdG9tfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHZhbHVlPSJ7eyRrfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7JHZ9fSIvPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiIHJlbD0iI2N1c3RvbS1pdGVtIj7mt7vliqDkuIDpobk8L2E+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kvb/nlKjlh73mlbDoh6rlrprkuYnphY3nva7vvIzpnIDopoHliqDliY3nvIAiY18i77yM5aaCR2V0U2V0dGluZygiY19rZXkiKTwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjdXN0b20taXRlbSI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSLlrZfmrrXlkI0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSLlrZfmrrXlgLwiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvc2NyaXB0Pg0KICAgIDwvZm9ybT4NCjwvZGl2Pg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnl0b29scy8xLjIuNy9qcXVlcnkudG9vbHMubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNzZXR0aW5nLW5hdicpLnRhYnMoIi5zZXR0aW5nLXBhbmVsIik7DQogICAgICAgICQoJy5zZXR0aW5nLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIiA6IGpzb24ubXNnKTsNCiAgICAgICAgfSkub24oImNsaWNrIiwiLmFkZCIsZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLnByZXBlbmQoJCgkKHRoaXMpLmF0dHIoInJlbCIpKS5odG1sKCkpOw0KICAgICAgICB9KS5vbigiY2xpY2siLCIuZGVsIixmdW5jdGlvbihlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGlmKGNvbmZpcm0oIuimgeWIoOmZpOi/memhue+8nyIpKXsNCiAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcICEOLExAZAAAQGQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xhZG1pblx3cml0ZV9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ5paH56ug5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5qCH562+PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJ0YWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InRhZyIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOagh+etviIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoIj7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCI+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgIDwvcD4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIvsp0fCEMAAAhDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblx3cml0ZV9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ6aG16Z2i5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL3BhZ2VzLyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCHJbVWl8DAAAfAwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHZpZXdcYWRtaW4ubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPnt7LlRpdGxlfX0gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvYWRtaW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgICA8aDMgY2xhc3M9ImxvZ28gbGVmdCI+RnhoLkdvIC0gPHNwYW4+e3suVGl0bGV9fTwvc3Bhbj48L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJuYXYgbGVmdCByZWxhdGl2ZSI+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGFzaGJvYXJkIGxlZnQiIGhyZWY9Ii9hZG1pbi8iPjxpIGNsYXNzPSJmYSBmYS1kYXNoYm9hcmQiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iYXJ0aWNsZSBsZWZ0IiBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvIiB0aXRsZT0i5paH56ugIj48aSBjbGFzcz0iZmEgZmEtY29weSI+PC9pPjwvYT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGFnZXMgbGVmdCIgaHJlZj0iL2FkbWluL3BhZ2VzLyIgdGl0bGU9IueLrOeri+mhtemdoiI+PGkgY2xhc3M9ImZhIGZhLXBhc3RlIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImNvbW1lbnRzIGxlZnQiIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iIHRpdGxlPSLor4TorroiPjxpIGNsYXNzPSJmYSBmYS1jb21tZW50cyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJmaWxlcyBsZWZ0IiBocmVmPSIvYWRtaW4vZmlsZXMvIiB0aXRsZT0i5aqS5L2T5paH5Lu2Ij48aSBjbGFzcz0iZmEgZmEtaW5ib3giPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGx1Z2lucyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy8iIHRpdGxlPSLmj5Lku7YiPjxpIGNsYXNzPSJmYSBmYS1nZWFycyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyIgdGl0bGU9Iuiuvue9riI+PGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPjwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxhIGNsYXNzPSJvdXQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii9sb2dvdXQvIiB0aXRsZT0i6YCA5Ye6Ij48aSBjbGFzcz0iZmEgZmEtcG93ZXItb2ZmIGZhLWxnIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0icHJvZmlsZSBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIiB0aXRsZT0i5oiRIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImZyb250IG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Iuafpeeci+e9keermSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+DQogICAgPC9kaXY+DQo8L2Rpdj4NCntAQ29udGVudH0NCjxkaXYgaWQ9ImZvb3RlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgIDxwIGNsYXNzPSJsaW5rcyB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgIDxhIGNsYXNzPSJzdGF0IiBocmVmPSIvY21kL21lc3NhZ2UvIj7mtojmga88L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJiYWNrdXAiIGhyZWY9Ii9jbWQvYmFja3VwLyI+5aSH5Lu9PC9hPg0KICAgICAgICAgICA8YSBjbGFzcz0iZXJyIiBocmVmPSIvY21kL2xvZ3MvIj7ml6Xlv5c8L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJzeXMiIGhyZWY9IiMiPuezu+e7nzwvYT4NCiAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJjcCB0ZXh0LWNlbnRlciI+UHJvdWRseSBQb3dlcmVkIGJ5IEZ4aC5HbzwvcD4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwjKwp1dvAgAALwIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAB2aWV3XGNtZC5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+e3suVGl0bGV9fSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jbWQuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keSBjbGFzcz0iY21kIj4NCntAQ29udGVudH0NCjxwIGNsYXNzPSJiYWNrIj48YSBocmVmPSJqYXZhc2NyaXB0Omhpc3RvcnkuYmFjaygpIj5CYWNrPC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcICn3IAM4BAADOAQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAdmlld1xkZWZhdWx0L1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGRlZmF1bHRcYXJ0aWNsZS5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LkFydGljbGUuU3RhdHVzfX0iIGlkPSJhcnRpY2xlLXt7LkFydGljbGUuSWR9fSI+e3t3aXRoIC5BcnRpY2xlfX0NCiAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWcgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdGFncyI+PC9pPnt7LlRhZ1N0cmluZ319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2aWV3cyBpbmxpbmUtYmxvY2sgcmlnaHQiPumYheivuyZuYnNwOyZuYnNwOzxzcGFuPnt7LkhpdHN9fTwvc3Bhbj4mbmJzcDsmbmJzcDvmrKE8L3NwYW4+DQogICAgICAgIDwvcD57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCMC4NIi3AwAAtwMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcZGVmYXVsdFxjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50Ij4NCiAgICA8ZGl2IGlkPSJjb21tZW50LWxpc3QiPnt7cmFuZ2UgLkNvbW1lbnRzfX17e2lmIC5Jc1ZhbGlkfX0NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciIgaWQ9ImNvbW1lbnQte3suSWR9fSI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9Int7LkF1dGhvcn19Ii8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSBjLWF1dGhvcnt7aWYgLklzQWRtaW59fSBhZG1pbnt7ZW5kfX0iIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+e3suQXV0aG9yfX17e2lmIC5Jc0FkbWlufX0mbmJzcDsmbmJzcDsoYWRtaW4pe3tlbmR9fTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9Int7LklkfX0iPjxpIGNsYXNzPSJmYSBmYS1xdW90ZS1yaWdodCI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+e3tlbmR9fXt7ZW5kfX0NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LXNob3ciIGNsYXNzPSJ0ZXh0LWNlbnRlciI+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGVuYWJsZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+e3tlbHNlfX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1yZWQiPuacrOaWh+WFs+mXreS6huivhOiuujwvYnV0dG9uPnt7ZW5kfX0NCiAgICA8L2Rpdj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgY2xhc3M9ImhpZGUgY2xlYXIgdGV4dC1jZW50ZXIgZm9ybSIgYWN0aW9uPSIvY29tbWVudC97ey5Db250ZW50LklkfX0vIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8gbGVmdCB0ZXh0LXJpZ2h0Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIGMtYXZhdGFyLWZpZWxkIj4NCiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBudWxsIiBzcmM9Ii9zdGF0aWMvaW1nL3NpdGUucG5nIiBhbHQ9IiIgaWQ9ImNvbW1lbnQtYXZhdGFyIi8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5vdC1tZSBibG9jayIgaHJlZj0iIyI+5LiN5piv5oiRPzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mby1maWVsZHMgaGlkZSI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLnp7DlkbwiIGlkPSJjb21tZW50LWF1dGhvciIvPjwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6YKu566xIiBpZD0iY29tbWVudC1lbWFpbCIvPiA8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgcGxhY2Vob2xkZXI9Iue9keWdgCIgaWQ9ImNvbW1lbnQtdXJsIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY29tbWVudC1wYXJlbnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIG5hbWU9InBpZCIvPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWNvbnRlbnQgdGV4dC1sZWZ0IHJpZ2h0Ij4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuWPkeihqOivhOiuujwvYnV0dG9uPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGJsIGxibC1ncmVlbiBjYW5jZWwtcmVwbHkiIHR5cGU9ImJ1dHRvbiI+5Y+W5raI5Zue5aSNPC9idXR0b24+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZm9ybT57e2VuZH19DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY29tbWVudC10cGwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0iIiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3IiIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT5Ob3c8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9IiI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jaGVjayI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45Lit77yM5Yi35paw5ZCO6ZqQ6JePPC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPjwvc2VjdGlvbj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvc2NyaXB0Pg0KPC9kaXY+UEsHCG+ub1TiDAAA4gwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHZpZXdcZGVmYXVsdFxlcnJvci9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xkZWZhdWx0XGVycm9yXGVycm9yLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouato+WcqOaJk+eejOedoTwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWKquWKm+WUpOmGku+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCBOERlJ4AQAAeAEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHZpZXdcZGVmYXVsdFxlcnJvclxub3Rmb3VuZC5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPumUmeivr+aPkOekujwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPmJvZHl7bWFyZ2luOiA0MHB4IDEwMHB4fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoMj7mgqjorr/pl67nmoTpobXpnaLnprvlrrblh7rotbA8L2gyPjxici8+DQo8cD7nqIvluo/lkZjmraPlnKjlm5vlpITlr7vmib7vvIzor7fnqI3lgJnorr/pl64uLi48L3A+DQo8cD48YSBocmVmPSIvIj7ov5Tlm57pppbpobU8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwiQ+dTAdQEAAHUBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGRlZmF1bHRcaG9tZS5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iLz4NCiAgICA8dGl0bGU+e3tpZiAuVGl0bGV9fXt7LlRpdGxlfX0gLSB7e2VuZH19e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC90aXRsZT4NCiAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRnhoR28gQmxvZyIgLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL3N0eWxlLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19IC0gUlNTIDIuMCIgaHJlZj0iL3Jzcy54bWwiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIi8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8bmF2IGlkPSJuYXYiIGNsYXNzPSJjbGVhciB0ZXh0LWNlbnRlciI+DQogICAgPHVsPnt7cmFuZ2UgTmF2aWdhdG9yfX0NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRleHR9fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KPC9uYXY+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8cD4NCiAgICAgICAgPGEgY2xhc3M9IndlaWJvIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX3dlaWJvYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIj48L2k+V2VpYm88L2E+DQogICAgICAgIDxhIGNsYXNzPSJnaXQiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZ2l0aHViYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWdpdGh1YiI+PC9pPkdpdEh1YjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImVtYWlsIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX2VtYWlsYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlIj48L2k+RW1haWw8L2E+DQogICAgICAgIDxhIGNsYXNzPSJyc3MiIGhyZWY9Ii9yc3MueG1sIiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXJzcyI+PC9pPlJTUzwvYT57e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KICAgIDwvcD4NCiAgICA8c3Bhbj5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuIFByb3VkbHkgUG93ZXJlZCBieSBGeGguR28uPC9zcGFuPg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIC1vrljMJAAAzCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xkZWZhdWx0XGluZGV4Lmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5JZH19Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBsZWZ0IHRleHQtY2VudGVyIj57e2lmIGd0IC5Db21tZW50TnVtIDB9fQ0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PHN0cm9uZz57ey5Db21tZW50TnVtfX0g4oSDPC9zdHJvbmc+PC9hPjwvcD57e2VuZH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyI+PGkgY2xhc3M9ImZhIGZhLWV5ZSI+PC9pPjxzdHJvbmc+e3suSGl0c319IOKEiTwvc3Ryb25nPjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyYXkgdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT48c3Ryb25nPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1haW4iPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuU3VtbWFyeX19PC9zZWN0aW9uPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0aG9yIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT57ey5Vc2VyLk5pY2t9fTwvc3Bhbj57e2VuZH19e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXRhZ3MiPjwvaT57ey5UYWdTdHJpbmd9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlubGluZS1ibG9jayByZWFkIHJpZ2h0IiBocmVmPSJ7ey5MaW5rfX0iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT7nu6fnu63pmIXor7s8L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvYXJ0aWNsZT57e2VuZH19DQogICAgPGRpdiBjbGFzcz0icGFnZXIgdGV4dC1jZW50ZXIiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxhIGhyZWY9Ii9wL3t7Ln19LyIgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPnt7Ln19PC9hPnt7ZW5kfX0NCiAgICA8L2Rpdj4NCjwvZGl2PlBLBwipLoBo5wUAAOcFAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGRlZmF1bHRccGFnZS5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIiBpZD0iYXJ0aWNsZS1JZCI+e3t3aXRoIC5QYWdlfX0NCiAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idmlld3MgaW5saW5lLWJsb2NrIHJpZ2h0Ij7pmIXor7smbmJzcDsmbmJzcDs8c3Bhbj57ey5IaXRzfX08L3NwYW4+Jm5ic3A7Jm5ic3A75qyhPC9zcGFuPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgIDwvYXJ0aWNsZT4NCjwvZGl2PlBLBwhcAM7dBAMAAAQDAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAB2aWV3XGxpbmcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xhcnRpY2xlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIgYXJ0aWNsZS1zaW5nbGUgcmVsYXRpdmUge3suQXJ0aWNsZS5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIGFic29sdXRlIj57ey5IaXRzfX08L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJ0aW1lLWluZm8iPnt7aWYgLlVzZXJ9fTxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDt7e2VuZH195Y+R6KGo5LqOJm5ic3A7Jm5ic3A7Jm5ic3A7e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIllZWVkg5bm0IE1NIOaciCBERCDml6UifX08L3A+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPuagh+etvu+8mnt7LlRhZ1N0cmluZ319PC9zcGFuPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCBrCnX1tAwAAbQMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0icmVsYXRpdmUiPg0KICAgIDxoNCBpZD0iY29tbWVudC10aXRsZSI+5paH56ug6K+E6K66PC9oND4NCiAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+e3suQ29udGVudC5Db21tZW50TnVtfX08L2E+PC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIGNsZWFyIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkgbGJsIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LklkfX0iPuWbnuWkjTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHA+PGEgY2xhc3M9ImMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9ImMtdGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NIOaciCBERCDml6UgSEgg5pe2IG1tIOWIhiJ9fTwvc3Bhbj48L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEgY2xlYXIiPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSBsYmwgcmlnaHQiIGhyZWY9IiMiIHJlbD0iIj7lm57lpI08L2E+DQogICAgICAgICAgICAgICAgICAgIDxwPjxhIGNsYXNzPSJjLWF1dGhvciAiIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj5Ob3c8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jaGVjayI+5a6h5qC45Lit77yM5Yi35paw5ZCO6ZqQ6JePPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+PC9zZWN0aW9uPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9zY3JpcHQ+DQo8L2Rpdj5QSwcIaaBHopUNAACVDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAdmlld1xsaW5nXGVycm9yL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGxpbmdcZXJyb3JcZXJyb3IuaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7plJnor6/mj5DnpLo8L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT5ib2R5e21hcmdpbjogNDBweCAxMDBweH08L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8aDI+5oKo6K6/6Zeu55qE6aG16Z2i5q2j5Zyo5omT556M552hPC9oMj48YnIvPg0KPHA+56iL5bqP5ZGY5q2j5Zyo5Yqq5Yqb5ZSk6YaS77yM6K+356iN5YCZ6K6/6ZeuLi4uPC9wPg0KPHA+PGEgaHJlZj0iLyI+6L+U5Zue6aaW6aG1PC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIE4RGUngBAAB4AQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xsaW5nXGVycm9yXG5vdGZvdW5kLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouemu+WutuWHuui1sDwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWbm+WkhOWvu+aJvu+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCJD51MB1AQAAdQEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcbGluZ1xob21lLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvbGluZy5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIgY2xhc3M9ImxlZnQiLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCIgY2xhc3M9ImxlZnQiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiIGNsYXNzPSJsZWZ0Ij57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4NCiAgICAgICAgPG5hdiBpZD0ibmF2IiBjbGFzcz0icmlnaHQiPg0KICAgICAgICAgICAgPHVsPnt7cmFuZ2UgTmF2aWdhdG9yfX0NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGV4dH19PC9hPjwvbGk+e3tlbmR9fQ0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9uYXY+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCBjbGVhciI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0Ij5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0icmlnaHQiPlByb3VkbHkgUG93ZXJlZCBieSBGeGguR28uPC9zcGFuPg0KICAgIDwvZGl2Pg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KICAgIHt7U2V0dGluZyBgY19mb290ZXJfZ2FgIHwgSHRtbH19DQo8L2Zvb3Rlcj4NCjxzY3JpcHQgc3JjPSIvc3Rh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" \ No newline at end of file diff --git a/app/handler/admin.go b/app/handler/admin.go index 3b91315..ebaf47c 100644 --- a/app/handler/admin.go +++ b/app/handler/admin.go @@ -1,10 +1,10 @@ package handler import ( - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/model" "github.com/fuxiaohei/GoBlog/app/plugin" "github.com/fuxiaohei/GoBlog/app/utils" + "github.com/fuxiaohei/GoInk" "strconv" "strings" ) @@ -335,7 +335,7 @@ func AdminComments(context *GoInk.Context) { return } page := context.IntOr("page", 1) - comments, pager := model.GetCommentList(page, 6) + comments, pager := model.GetCommentList(page, 10) context.Layout("admin") context.Render("admin/comments", map[string]interface{}{ "Title": "评论", diff --git a/app/handler/cmd.go b/app/handler/cmd.go index 45c97b3..90b5447 100644 --- a/app/handler/cmd.go +++ b/app/handler/cmd.go @@ -1,9 +1,9 @@ package handler import ( - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/cmd" "github.com/fuxiaohei/GoBlog/app/model" + "github.com/fuxiaohei/GoInk" ) func CmdBackup(context *GoInk.Context) { diff --git a/app/handler/func.go b/app/handler/func.go index 89246ed..a48b8a8 100644 --- a/app/handler/func.go +++ b/app/handler/func.go @@ -1,8 +1,8 @@ package handler import ( - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/model" + "github.com/fuxiaohei/GoInk" "path" ) diff --git a/app/handler/home.go b/app/handler/home.go index 28a13a5..a570fee 100644 --- a/app/handler/home.go +++ b/app/handler/home.go @@ -1,9 +1,9 @@ package handler import ( - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/model" "github.com/fuxiaohei/GoBlog/app/utils" + "github.com/fuxiaohei/GoInk" "strconv" "strings" ) @@ -71,7 +71,7 @@ func Article(context *GoInk.Context) { id, _ := strconv.Atoi(context.Param("id")) slug := context.Param("slug") article := model.GetContentById(id) - if article == nil{ + if article == nil { context.Redirect("/") return } @@ -91,7 +91,7 @@ func Page(context *GoInk.Context) { id, _ := strconv.Atoi(context.Param("id")) slug := context.Param("slug") article := model.GetContentById(id) - if article == nil || article.Status != "publish"{ + if article == nil || article.Status != "publish" { context.Redirect("/") return } @@ -110,7 +110,7 @@ func Page(context *GoInk.Context) { func TopPage(context *GoInk.Context) { slug := context.Param("slug") page := model.GetContentBySlug(slug) - if page == nil || page.Status != "publish"{ + if page == nil || page.Status != "publish" { context.Redirect("/") return } @@ -155,6 +155,6 @@ func Comment(context *GoInk.Context) { co.IsAdmin = false model.CreateComment(cid, co) Json(context, true).Set("comment", co.ToJson()).End() - model.CreateMessage("comment",co) + model.CreateMessage("comment", co) context.Do("comment_created", co) } diff --git a/app/handler/rss.go b/app/handler/rss.go index 9305a89..5440bc3 100644 --- a/app/handler/rss.go +++ b/app/handler/rss.go @@ -1,9 +1,9 @@ package handler import ( - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/model" "github.com/fuxiaohei/GoBlog/app/utils" + "github.com/fuxiaohei/GoInk" "github.com/gorilla/feeds" "path" "time" diff --git a/app/handler/upload.go b/app/handler/upload.go index 28297d3..fc09511 100644 --- a/app/handler/upload.go +++ b/app/handler/upload.go @@ -1,8 +1,8 @@ package handler import ( - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/model" + "github.com/fuxiaohei/GoInk" "io/ioutil" "net/http" "os" diff --git a/app/model/file.go b/app/model/file.go index 14f898b..b4087fe 100644 --- a/app/model/file.go +++ b/app/model/file.go @@ -37,7 +37,7 @@ func CreateFile(f *File) *File { } func CreateFilePath(dir string, f *File) string { - os.MkdirAll(dir,os.ModePerm) + os.MkdirAll(dir, os.ModePerm) name := utils.DateInt64(utils.Now(), "YYYYMMDDHHmmss") name += strconv.Itoa(Storage.TimeInc(10)) + path.Ext(f.Name) return path.Join(dir, name) diff --git a/app/model/locker.go b/app/model/locker.go index 0b6ad1e..ad96f86 100644 --- a/app/model/locker.go +++ b/app/model/locker.go @@ -4,6 +4,6 @@ import "sync" var locker sync.Mutex -func init(){ +func init() { locker = sync.Mutex{} } diff --git a/app/model/setting.go b/app/model/setting.go index d853c33..3a9ec69 100644 --- a/app/model/setting.go +++ b/app/model/setting.go @@ -75,7 +75,7 @@ func SetNavigators(order []string, text []string, title []string, link []string) SyncNavigators() } -func SyncNavigators(){ +func SyncNavigators() { Storage.Set("navigators", navigators) SortNavigators() } diff --git a/app/model/token.go b/app/model/token.go index ddfd9b7..637fb5f 100644 --- a/app/model/token.go +++ b/app/model/token.go @@ -2,8 +2,8 @@ package model import ( "fmt" - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/utils" + "github.com/fuxiaohei/GoInk" ) var tokens map[string]*Token diff --git a/app/model/user.go b/app/model/user.go index af66365..93d8648 100644 --- a/app/model/user.go +++ b/app/model/user.go @@ -42,7 +42,7 @@ func (u *User) ChangeEmail(email string) bool { // change user password. func (u *User) ChangePassword(pwd string) { - u.Password = utils.Sha1(pwd+"xxxxx") + u.Password = utils.Sha1(pwd + "xxxxx") } // get a user by given id. diff --git a/app/plugin/email.go b/app/plugin/email.go index aff0aab..bd6ed0b 100644 --- a/app/plugin/email.go +++ b/app/plugin/email.go @@ -4,8 +4,8 @@ import ( "bytes" "encoding/base64" "fmt" - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/model" + "github.com/fuxiaohei/GoInk" "html/template" "net/mail" "net/smtp" diff --git a/app/plugin/hello.go b/app/plugin/hello.go index fd8ca75..f37194b 100644 --- a/app/plugin/hello.go +++ b/app/plugin/hello.go @@ -2,7 +2,7 @@ package plugin import ( "fmt" - "github.com/fuxiaohei/GoBlog/GoInk" + "github.com/fuxiaohei/GoInk" "time" ) @@ -77,6 +77,6 @@ func (p *HelloPlugin) Form() string { return "" } -func (p *HelloPlugin) SetSetting(settings map[string]string){ +func (p *HelloPlugin) SetSetting(settings map[string]string) { } diff --git a/app/plugin/plugin.go b/app/plugin/plugin.go index cc4af08..ca05650 100644 --- a/app/plugin/plugin.go +++ b/app/plugin/plugin.go @@ -1,8 +1,8 @@ package plugin import ( - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/model" + "github.com/fuxiaohei/GoInk" ) type PluginInterface interface { diff --git a/app/upgrade/v20140130.go b/app/upgrade/v20140130.go index 15dfc20..0455564 100644 --- a/app/upgrade/v20140130.go +++ b/app/upgrade/v20140130.go @@ -1,10 +1,10 @@ package upgrade import ( - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/cmd" "github.com/fuxiaohei/GoBlog/app/model" "github.com/fuxiaohei/GoBlog/app/plugin" + "github.com/fuxiaohei/GoInk" "os" "path" ) @@ -22,7 +22,7 @@ func upgrade_20140130(app *GoInk.App) bool { model.SetSetting("enable_go_markdown_def", "false") model.SetSetting("site_theme", "default") model.SetSetting("site_theme_def", "default") - model.SetSetting("c_home_avatar","/static/img/site.png") + model.SetSetting("c_home_avatar", "/static/img/site.png") model.SyncSettings() // init plugin diff --git a/app/upgrade/v20140131.go b/app/upgrade/v20140131.go index 4518c93..d09270c 100644 --- a/app/upgrade/v20140131.go +++ b/app/upgrade/v20140131.go @@ -1,8 +1,8 @@ package upgrade import ( - "github.com/fuxiaohei/GoBlog/GoInk" "github.com/fuxiaohei/GoBlog/app/cmd" + "github.com/fuxiaohei/GoInk" "os" "path" ) @@ -27,6 +27,5 @@ func upgrade_20140131(app *GoInk.App) bool { os.RemoveAll(path.Join(app.Get("view_dir"), "ling")) cmd.ExtractBundleBytes() - return true } diff --git a/app/upgrade/v20140209.go b/app/upgrade/v20140209.go index 876650b..8482a05 100644 --- a/app/upgrade/v20140209.go +++ b/app/upgrade/v20140209.go @@ -2,7 +2,7 @@ package upgrade import ( "github.com/fuxiaohei/GoBlog/app/cmd" - "github.com/fuxiaohei/GoBlog/GoInk" + "github.com/fuxiaohei/GoInk" ) func init() { diff --git a/app/utils/html.go b/app/utils/html.go index 25427b0..5cff30b 100644 --- a/app/utils/html.go +++ b/app/utils/html.go @@ -1,10 +1,10 @@ package utils import ( - "regexp" - "strings" "github.com/russross/blackfriday" "html/template" + "regexp" + "strings" ) func Html2str(html string) string { diff --git a/app/utils/pager.go b/app/utils/pager.go index 8eb59e9..4e2ab36 100644 --- a/app/utils/pager.go +++ b/app/utils/pager.go @@ -22,7 +22,7 @@ func NewPager(page, size, total int) *Pager { p.Current = page p.Size = size p.Total = total - p.Pages = total/size + p.Pages = total / size if total%size > 0 { p.Pages += 1 } From aa64298d76f1e54a2687fa88ea881335c6cccb17 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sun, 9 Feb 2014 20:31:49 +0800 Subject: [PATCH 25/82] move admin layout and cmd layout to admin view --- app/handler/admin.go | 26 +++++++++++++------------- app/handler/cmd.go | 6 +++--- view/{ => admin}/admin.layout | 0 view/{ => admin}/cmd.layout | 0 4 files changed, 16 insertions(+), 16 deletions(-) rename view/{ => admin}/admin.layout (100%) rename view/{ => admin}/cmd.layout (100%) diff --git a/app/handler/admin.go b/app/handler/admin.go index ebaf47c..7966e55 100644 --- a/app/handler/admin.go +++ b/app/handler/admin.go @@ -12,7 +12,7 @@ import ( func Admin(context *GoInk.Context) { uid, _ := strconv.Atoi(context.Cookie("token-user")) user := model.GetUserById(uid) - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/home", map[string]interface{}{ "Title": "控制台", "Statis": model.NewStatis(), @@ -42,7 +42,7 @@ func AdminProfile(context *GoInk.Context) { context.Do("profile_update", user) return } - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/profile", map[string]interface{}{ "Title": "个性资料", "User": user, @@ -63,7 +63,7 @@ func AdminPassword(context *GoInk.Context) { context.Do("password_update", user) return } - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/password", map[string]interface{}{ "Title": "修改密码", //"User":user, @@ -72,7 +72,7 @@ func AdminPassword(context *GoInk.Context) { func AdminArticle(context *GoInk.Context) { articles, pager := model.GetArticleList(context.Int("page"), 10) - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/articles", map[string]interface{}{ "Title": "文章", "Articles": articles, @@ -110,7 +110,7 @@ func ArticleWrite(context *GoInk.Context) { //c.Type = "article" return } - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/write_article", map[string]interface{}{ "Title": "撰写文章", }) @@ -149,7 +149,7 @@ func ArticleEdit(context *GoInk.Context) { //c.Type = "article" return } - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/edit_article", map[string]interface{}{ "Title": "编辑文章", "Article": c, @@ -186,7 +186,7 @@ func PageWrite(context *GoInk.Context) { context.Do("page_created", c) return } - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/write_page", map[string]interface{}{ "Title": "撰写页面", }) @@ -194,7 +194,7 @@ func PageWrite(context *GoInk.Context) { func AdminPage(context *GoInk.Context) { pages, pager := model.GetPageList(context.Int("page"), 10) - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/pages", map[string]interface{}{ "Title": "页面", "Pages": pages, @@ -235,7 +235,7 @@ func PageEdit(context *GoInk.Context) { //c.Type = "article" return } - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/edit_page", map[string]interface{}{ "Title": "编辑文章", "Page": c, @@ -258,7 +258,7 @@ func AdminSetting(context *GoInk.Context) { context.Do("setting_saved") return } - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/setting", map[string]interface{}{ "Title": "配置", "Custom": model.GetCustomSettings(), @@ -336,7 +336,7 @@ func AdminComments(context *GoInk.Context) { } page := context.IntOr("page", 1) comments, pager := model.GetCommentList(page, 10) - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/comments", map[string]interface{}{ "Title": "评论", "Comments": comments, @@ -369,7 +369,7 @@ func AdminPlugin(context *GoInk.Context) { Json(context, false).End() return } - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/plugin", map[string]interface{}{ "Title": "插件", "Plugins": plugin.GetPlugins(), @@ -393,7 +393,7 @@ func PluginSetting(context *GoInk.Context) { context.Do("plugin_setting_saved", p) return } - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/plugin_setting", map[string]interface{}{ "Title": "插件 - " + p.Name(), "Form": p.Form(), diff --git a/app/handler/cmd.go b/app/handler/cmd.go index 90b5447..7071a97 100644 --- a/app/handler/cmd.go +++ b/app/handler/cmd.go @@ -29,7 +29,7 @@ func CmdBackup(context *GoInk.Context) { return } files, _ := cmd.GetBackupFiles() - context.Layout("cmd") + context.Layout("admin/cmd") context.Render("admin/cmd/backup", map[string]interface{}{ "Files": files, "Title": "备份", @@ -43,7 +43,7 @@ func CmdBackupFile(context *GoInk.Context) { } func CmdMessage(context *GoInk.Context) { - context.Layout("cmd") + context.Layout("admin/cmd") context.Render("admin/cmd/message", map[string]interface{}{ "Title": "消息", "Messages": model.GetMessages(), @@ -56,7 +56,7 @@ func CmdLogs(context *GoInk.Context) { Json(context, true).End() return } - context.Layout("cmd") + context.Layout("admin/cmd") context.Render("admin/cmd/log", map[string]interface{}{ "Title": "日志", "Logs": cmd.GetLogs(context.App()), diff --git a/view/admin.layout b/view/admin/admin.layout similarity index 100% rename from view/admin.layout rename to view/admin/admin.layout diff --git a/view/cmd.layout b/view/admin/cmd.layout similarity index 100% rename from view/cmd.layout rename to view/admin/cmd.layout From 4c626f4e0e0e80fe23edbb922084b6a8faa165d5 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sun, 9 Feb 2014 22:03:13 +0800 Subject: [PATCH 26/82] finish plugin enhancement, update upgrade script --- app/app.go | 2 +- app/handler/admin.go | 2 +- app/model/setting.go | 20 ++++++++++++++++++++ app/plugin/hello.go | 3 +++ app/plugin/plugin.go | 34 +++++++++++++++++++++++++++++++--- app/upgrade/v20140209.go | 17 ++++++++++++++++- 6 files changed, 72 insertions(+), 6 deletions(-) diff --git a/app/app.go b/app/app.go index ca3efbf..31b7e39 100644 --- a/app/app.go +++ b/app/app.go @@ -195,7 +195,7 @@ func registerAdminHandler() { func registerCmdHandler() { App.Route("GET,POST,DELETE", "/cmd/backup/", handler.Auth, handler.CmdBackup) - App.Get("/cmd/backup/file", handler.Auth, handler.CmdBackupFile) + App.Get("/cmd/backup/file/", handler.Auth, handler.CmdBackupFile) App.Route("GET,POST,DELETE", "/cmd/message/", handler.Auth, handler.CmdMessage) App.Route("GET,DELETE", "/cmd/logs/", handler.Auth, handler.CmdLogs) diff --git a/app/handler/admin.go b/app/handler/admin.go index 7966e55..9da842e 100644 --- a/app/handler/admin.go +++ b/app/handler/admin.go @@ -354,7 +354,7 @@ func AdminPlugin(context *GoInk.Context) { pln := context.String("plugin") if action == "activate" { plugin.Activate(pln) - go plugin.Update(context.App()) + plugin.Update(context.App()) Json(context, true).End() context.Do("plugin_activated", pln) return diff --git a/app/model/setting.go b/app/model/setting.go index 3a9ec69..2fd2064 100644 --- a/app/model/setting.go +++ b/app/model/setting.go @@ -75,6 +75,26 @@ func SetNavigators(order []string, text []string, title []string, link []string) SyncNavigators() } +func DefaultNavigators() { + n := new(navItem) + n.Order = 1 + n.Text = "文章" + n.Title = "文章" + n.Link = "/" + n2 := new(navItem) + n2.Order = 2 + n2.Text = "关于" + n2.Title = "关于" + n2.Link = "/about-me.html" + n3 := new(navItem) + n3.Order = 3 + n3.Text = "好友" + n3.Title = "好友" + n3.Link = "/friends.html" + navigators = []*navItem{n, n2, n3} + Storage.Set("navigators", navigators) +} + func SyncNavigators() { Storage.Set("navigators", navigators) SortNavigators() diff --git a/app/plugin/hello.go b/app/plugin/hello.go index f37194b..a1978a6 100644 --- a/app/plugin/hello.go +++ b/app/plugin/hello.go @@ -53,6 +53,9 @@ func (p *HelloPlugin) Activate() { }) } Handler("hello_plugin", fn, false) + /*Route("hello_handler", "GET", "/hello/", func(context *GoInk.Context) { + context.Body = []byte("Hello!") + })*/ p.isHandlerRegistered = true p.isActive = true } diff --git a/app/plugin/plugin.go b/app/plugin/plugin.go index ca05650..106a0e6 100644 --- a/app/plugin/plugin.go +++ b/app/plugin/plugin.go @@ -22,12 +22,19 @@ type PluginInterface interface { ToStorage() map[string]interface{} } +type pluginRoute struct { + Method string + Pattern string + Handler GoInk.Handler +} + var ( pluginStorage map[string]map[string]interface{} pluginMap map[string]PluginInterface middleHandler map[string]GoInk.Handler interHandler map[string]GoInk.Handler usedHandler map[string]map[string]bool + routeHandler map[string]pluginRoute ) func init() { @@ -37,10 +44,12 @@ func init() { //pluginMap = make(map[string]PluginInterface) pluginStorage = make(map[string]map[string]interface{}) middleHandler = make(map[string]GoInk.Handler) + routeHandler = make(map[string]pluginRoute) interHandler = make(map[string]GoInk.Handler) usedHandler = make(map[string]map[string]bool) usedHandler["middle"] = make(map[string]bool) usedHandler["inter"] = make(map[string]bool) + usedHandler["route"] = make(map[string]bool) } func Init() { @@ -88,11 +97,19 @@ func Handler(name string, h GoInk.Handler, inter bool) { } } -func Handlers() map[string]map[string]GoInk.Handler { +func Route(name string, method string, pattern string, handler GoInk.Handler) { + pr := pluginRoute{} + pr.Method = method + pr.Handler = handler + pr.Pattern = pattern + routeHandler[name] = pr +} + +func Handlers() (map[string]map[string]GoInk.Handler, map[string]pluginRoute) { m := make(map[string]map[string]GoInk.Handler) m["middle"] = middleHandler m["inter"] = interHandler - return m + return m, routeHandler } func GetPlugins() map[string]PluginInterface { @@ -128,7 +145,18 @@ func Deactivate(name string) { } func Update(app *GoInk.App) { - pluginHandlers := Handlers() + pluginHandlers, routeHandlers := Handlers() + + if len(routeHandlers) > 0 { + for n, h := range routeHandlers { + if usedHandler["route"][n] { + continue + } + app.Route(h.Method, h.Pattern, h.Handler) + usedHandler["route"][n] = true + } + } + if len(pluginHandlers["middle"]) > 0 { for n, h := range pluginHandlers["middle"] { if usedHandler["middle"][n] { diff --git a/app/upgrade/v20140209.go b/app/upgrade/v20140209.go index 8482a05..b127952 100644 --- a/app/upgrade/v20140209.go +++ b/app/upgrade/v20140209.go @@ -2,7 +2,10 @@ package upgrade import ( "github.com/fuxiaohei/GoBlog/app/cmd" + "github.com/fuxiaohei/GoBlog/app/model" "github.com/fuxiaohei/GoInk" + "os" + "path" ) func init() { @@ -10,5 +13,17 @@ func init() { } func upgrade_20140209(app *GoInk.App) bool { - return false + // clean template + vDir := app.Get("view_dir") + os.Remove(path.Join(vDir, "admin.layout")) + os.Remove(path.Join(vDir, "cmd.layout")) + + // write default menu setting + model.DefaultNavigators() + + // write message storage + model.Storage.Set("messages",[]*model.Message{}) + + cmd.ExtractBundleBytes() + return true } From e2395b7dc1cd12cb5a3afe290c4b2bb0ddb44ee6 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sun, 9 Feb 2014 22:03:39 +0800 Subject: [PATCH 27/82] update zip bytes --- app/cmd/zip.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/cmd/zip.go b/app/cmd/zip.go index dee29e9..f218a4e 100644 --- a/app/cmd/zip.go +++ b/app/cmd/zip.go @@ -1,2 +1,2 @@ package cmd -const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnt3aWR0aDoxMDAwcHg7bWFyZ2luLXRvcDoyNHB4O21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNzZXR0aW5nLW5hdiBsaXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCAxMnB4fSNzZXR0aW5nLW5hdiBsaSBhe3BhZGRpbmc6M3B4IDEwcHh9CiNzZXR0aW5nLW5hdiBsaSBhOmhvdmVyLCNzZXR0aW5nLW5hdiBsaSBhLmN1cnJlbnR7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzAwNWI5Yn0KLnNldHRpbmctcGFuZWx7ZGlzcGxheTpub25lfQouc2V0dGluZy1mb3Jte3dpZHRoOjgyMHB4O21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfS5zZXR0aW5nLWZvcm0gLmlwdHt3aWR0aDo0ODBweH0KLnNldHRpbmctZm9ybSAuaW52YWxpZHttYXJnaW4tbGVmdDo3NXB4fQouc2V0dGluZy1mb3JtIGxhYmVse21pbi13aWR0aDoxMGVtfQouc2V0dGluZy1mb3JtIC50aXAuYmxvY2t7bWFyZ2luLWxlZnQ6MTJlbX0KI3NldHRpbmctY3VzdG9tLWZvcm17d2lkdGg6MTAwMHB4fSNzZXR0aW5nLWN1c3RvbS1mb3JtIGlucHV0LmtleXt3aWR0aDoyNTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQudmFsdWV7d2lkdGg6NjUwcHh9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5pdGVte21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojc2V0dGluZy1jdXN0b20tZm9ybSAuZGVse21hcmdpbi1sZWZ0OjEycHg7Y29sb3I6I2U2NDM0Nn0KI3NldHRpbmctY3VzdG9tLWZvcm0gLnRpcHttYXJnaW4tbGVmdDowfQojc2V0dGluZy1uYXYtZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctbmF2LWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLW5hdi1mb3JtIHNwYW4ubGFiZWx7bWFyZ2luLXJpZ2h0OjZweH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQub3JkZXJ7d2lkdGg6Mi41ZW07bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0LnRleHR7d2lkdGg6ODBweDttaW4td2lkdGg6MH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQudGl0bGV7d2lkdGg6MTUwcHg7bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0Lmxpbmt7d2lkdGg6MzQwcHh9CiNzZXR0aW5nLW5hdi1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jbnQsI2NvbW1lbnQtbGlzdCAuYy1lbWFpbHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWxpc3QgLmMtc2VjdGlvbnttYXgtd2lkdGg6ODMwcHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2ssI2NvbW1lbnQtbGlzdCAuYy1kZWx7Y29sb3I6I2U2NDM0Nn0jY29tbWVudC1saXN0IC5jLWNoZWNrIC5mYSwjY29tbWVudC1saXN0IC5jLWRlbCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjazpob3ZlciwjY29tbWVudC1saXN0IC5jLWRlbDpob3Zlcntjb2xvcjojYWEzOTNjfQojY29tbWVudC1mb3Jte3BhZGRpbmctdG9wOjEycHg7ZGlzcGxheTpub25lO21hcmdpbi1sZWZ0OjcycHh9I2NvbW1lbnQtZm9ybSAuYnRue21hcmdpbi1yaWdodDoyNHB4fQojY29tbWVudC1jb250ZW50e3dpZHRoOjUwMHB4O2hlaWdodDo4MHB4O21hcmdpbi1yaWdodDoyNHB4fQojZmlsZXMtbGlzdCBsaS5maWxle21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZmlsZXMtbGlzdCBsaS5maWxlPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNmaWxlcy1saXN0IGxpLmZpbGU6aG92ZXIgLmRlbHtvcGFjaXR5OjEgIWltcG9ydGFudH0KI2ZpbGVzLWxpc3QgLnVwbG9hZC10aW1le2NvbG9yOiM5OTk7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2ZpbGVzLWxpc3QgLmRlbHtjb2xvcjojZTY0MzQ2fQojZmlsZXMtbGlzdCAuZmlsZS1wcm9ncmVzc3twYWRkaW5nOjAgMTJweDtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMik7Y29sb3I6IzY2Njtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNzLmVycntiYWNrZ3JvdW5kOnJnYmEoMjU1LDY4LDcxLDAuMik7Y29sb3I6I2FhMzkzY30KI2ZpbGVzLWxpc3QgLnNpemV7d2lkdGg6NGVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfQojcGx1Z2luLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxNnB4O3BhZGRpbmctYm90dG9tOjE2cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3BsdWdpbi1saXN0IGxpIC5kZXNje21hcmdpbi1ib3R0b206MDt3aWR0aDo5OSU7Y29sb3I6Izk5OX0KI3BsdWdpbi1saXN0IGxpIGEubGJse3BhZGRpbmc6MCA4cHg7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC52ZXJzaW9ue2NvbG9yOiM1MDc2NTA7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC5uYW1le2ZvbnQtc2l6ZToxNnB4fQojcGx1Z2luLWxpc3QgbGkgLmFjdGl2ZXt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O21hcmdpbi1yaWdodDoxNnB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjEwcHh9CiNwbHVnaW4tbGlzdCBsaSAuc2V0dGluZ3ttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBwLml0ZW17Y2xlYXI6Ym90aH0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gbGFiZWx7ZmxvYXQ6bGVmdDttaW4td2lkdGg6NmVtO3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luLXJpZ2h0OjJlbX0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gLnRpdGxle3BhZGRpbmctdG9wOjA7bWFyZ2luLWJvdHRvbToxOHB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBpbnB1dC5pcHR7d2lkdGg6NjAwcHh9CiNkYXNoYm9hcmQgLmdyaWQtMS01e21hcmdpbi1yaWdodDoyJX0KI2Rhc2hib2FyZCAucXVpY2stbGluayBsaXtsaXN0LXN0eWxlOmluc2lkZSBkaXNjO21hcmdpbi1ib3R0b206NnB4O3BhZGRpbmctYm90dG9tOjZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2Rhc2hib2FyZCAuc3RhdHMgLmxibHtwYWRkaW5nOjFweCA1cHg7bWFyZ2luOjAgM3B4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNne3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZzpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMDYpfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2c6aG92ZXIgLnJlYWR7b3BhY2l0eToxfQpQSwcIHMaB8VMyAABTMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGNzc1xjbWQuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Ci5jbWR7bWFyZ2luOjI0cHggNDhweH0KLmNtZC1oZWFkZXJ7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtYnRue21hcmdpbjoxMHB4IDAgMCAzMHB4fQouY21kLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtbGlzdCBsaXtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlO2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2JhY2t1cC1saXN0IGxpPnNwYW4sI2JhY2t1cC1saXN0IGxpPmF7bWFyZ2luLXJpZ2h0OjE2cHh9CiNiYWNrdXAtbGlzdCBsaSAuZGVse2NvbG9yOiNlNjQzNDY7b3BhY2l0eTowfQojYmFja3VwLWxpc3QgbGkgLmxpbmt7bWFyZ2luLWxlZnQ6MTJweH0KI2JhY2t1cC1saXN0IGxpOmhvdmVyIC5kZWx7b3BhY2l0eToxfQojbWVzc2FnZS1saXN0IC5tZXNzYWdle3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI21lc3NhZ2UtbGlzdCAubWVzc2FnZTpob3ZlciAucmVhZHtvcGFjaXR5OjF9CiNsb2ctbGlzdCAubG9ne2ZvbnQtc2l6ZToxMnB4fQojbG9nLWxpc3QgLm5hbWV7bWFyZ2luLXJpZ2h0OjEuNWVtO2ZvbnQtd2VpZ2h0OmJvbGR9CiNsb2ctbGlzdCAudGltZSwjbG9nLWxpc3QgLm5hbWV7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2xvZy1saXN0IC50ZXh0e2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbDtjb2xvcjojNjY2O3BhZGRpbmc6OHB4IDEycHg7YmFja2dyb3VuZDojZjNmM2YzfQojbG9nLWxpc3QgLnJlbW92ZXt0b3A6MDtyaWdodDoxMnB4O2NvbG9yOiNlNjQzNDZ9ClBLBwjSN8QbLxoAAC8aAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAABzdGF0aWNcY3NzXGNvZGVtaXJyb3IuY3NzLyogQkFTSUNTICovCgouQ29kZU1pcnJvciB7CiAgICAvKiBTZXQgaGVpZ2h0LCB3aWR0aCwgYm9yZGVycywgYW5kIGdsb2JhbCBmb250IHByb3BlcnRpZXMgaGVyZSAqLwogICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiTWljcm9zb2Z0IFlhSGVpIiwgIkNvdXJpZXIgTmV3IiwgQXJpYWw7CiAgICBoZWlnaHQ6IDY2MHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgYm9yZGVyOjFweCBzb2xpZCAjOTk5Owp9CgouQ29kZU1pcnJvci1zY3JvbGwgewogICAgLyogU2V0IHNjcm9sbGluZyBiZWhhdmlvdXIgaGVyZSAqLwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi8qIFBBRERJTkcgKi8KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIHBhZGRpbmc6IDRweCAwOyAvKiBWZXJ0aWNhbCBwYWRkaW5nIGFyb3VuZCBjb250ZW50ICovCn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICBwYWRkaW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KfQoKLyogR1VUVEVSICovCgouQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLkNvZGVNaXJyb3ItbGluZW51bWJlcnMgewp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIHBhZGRpbmc6IDAgM3B4IDAgNXB4OwogICAgbWluLXdpZHRoOiAyMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBjb2xvcjogIzU1NTsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4Owp9CgovKiBDVVJTT1IgKi8KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogICAgei1pbmRleDogMzsKfQoKLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7Cn0KCi5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB3aWR0aDogYXV0bzsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6ICM3ZTc7CiAgICB6LWluZGV4OiAxOwp9CgovKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHsKfQoKLmNtLXRhYiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi8qIERFRkFVTFQgVEhFTUUgKi8KCi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQgewogICAgY29sb3I6ICM3MDg7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWF0b20gewogICAgY29sb3I6ICMyMTk7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7CiAgICBjb2xvcjogIzE2NDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tZGVmIHsKICAgIGNvbG9yOiAjMDBmOwp9CgouY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZSB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICMwNWE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTMgewogICAgY29sb3I6ICMwODU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5IHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3IgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHsKICAgIGNvbG9yOiAjYTUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1zdHJpbmcgewogICAgY29sb3I6ICNhMTE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0yIHsKICAgIGNvbG9yOiAjZjUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1tZXRhIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW4gewogICAgY29sb3I6ICMzMGE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICM5OTc7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7CiAgICBjb2xvcjogIzE3MDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIgewogICAgY29sb3I6IGJsdWU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1b3RlIHsKICAgIGNvbG9yOiAjMDkwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1ociB7CiAgICBjb2xvcjogIzk5OTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbGluayB7CiAgICBjb2xvcjogIzAwYzsKfQoKLmNtLW5lZ2F0aXZlIHsKICAgIGNvbG9yOiAjZDQ0Owp9CgouY20tcG9zaXRpdmUgewogICAgY29sb3I6ICMyOTI7Cn0KCi5jbS1oZWFkZXIsIC5jbS1zdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5jbS1lbSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5jbS1saW5rIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7CiAgICBjb2xvcjogI2YwMDsKfQoKLmNtLWludmFsaWRjaGFyIHsKICAgIGNvbG9yOiAjZjAwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjMGYwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjZjIyOwp9CgouQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogI2U4ZjJmZjsKfQoKLyogU1RPUCAqLwoKLyogVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGNvbnRhaW5zIHN0eWxlcyByZWxhdGVkIHRvIHRoZSBtZWNoYW5pY3Mgb2YKICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwoKLkNvZGVNaXJyb3IgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciAqLwogICAgbWFyZ2luLWJvdHRvbTogLTMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IC0zMHB4OwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CgouQ29kZU1pcnJvci1zaXplciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcKICAgYmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZAogICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA2OwogICAgZGlzcGxheTogbm9uZTsKfQoKLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7CiAgICByaWdodDogMDsKICAgIHRvcDogMDsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKfQoKLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgb3ZlcmZsb3cteDogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGxlZnQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHRvcDogMDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgei1pbmRleDogMzsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIG1hcmdpbi1ib3R0b206IC0zMnB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgLyogSGFjayB0byBtYWtlIElFNyBiZWhhdmUgKi8KICAgICp6b29tOiAxOwogICAgKmRpc3BsYXk6IGlubGluZTsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB6LWluZGV4OiA0Owp9CgouQ29kZU1pcnJvci1saW5lcyB7CiAgICBjdXJzb3I6IHRleHQ7Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovCiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLXdpZHRoOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgIG1hcmdpbjogMDsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICB6LWluZGV4OiAyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7Cn0KCi5Db2RlTWlycm9yLXdyYXAgcHJlIHsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKfQoKLkNvZGVNaXJyb3ItY29kZSBwcmUgewogICAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7CiAgICB3aWR0aDogLW1vei1maXQtY29udGVudDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogYXV0bzsKfQoKLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgei1pbmRleDogMDsKfQoKLkNvZGVNaXJyb3ItbGluZXdpZGdldCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi5Db2RlTWlycm9yLXdpZGdldCB7Cn0KCi5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7Cn0KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogMDsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogI2Q5ZDlkOTsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDdkNGYwOwp9CgouY20tc2VhcmNoaW5nIHsKICAgIGJhY2tncm91bmQ6ICNmZmE7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAuNCk7Cn0KCi8qIElFNyBoYWNrIHRvIHByZXZlbnQgaXQgZnJvbSByZXR1cm5pbmcgZnVubnkgb2Zmc2V0VG9wcyBvbiB0aGUgc3BhbnMgKi8KLkNvZGVNaXJyb3Igc3BhbiB7CiAgICAqdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwp9CgpAbWVkaWEgcHJpbnQgewogICAgLyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KICAgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQp9CgouY20tcy1iYXNlMTYtZGFyay5Db2RlTWlycm9yIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogIzIwMjAyMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBib3JkZXItcmlnaHQ6IDBweDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItbGluZW51bWJlciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2IwYjBiMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICM4ZjU1MzY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXRvbSB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1udW1iZXIgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWtleXdvcmQgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tc3RyaW5nIHsKICAgIGNvbG9yOiAjZjRiZjc1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICM2YTlmYjU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZGVmIHsKICAgIGNvbG9yOiAjZDI4NDQ1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICNlMGUwZTA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdGFnIHsKICAgIGNvbG9yOiAjYWM0MTQyOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWxpbmsgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZXJyb3IgewogICAgYmFja2dyb3VuZDogI2FjNDE0MjsKICAgIGNvbG9yOiAjYjBiMGIwOwp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogIzJGMkYyRiAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQpQSwcIIwM1gk4gAABOIAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAc3RhdGljXGNzc1xjb21tb24uY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH1oZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfWZpZWxkc2V0LGltZ3tib3JkZXI6MH1hZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfW9sLHVse2xpc3Qtc3R5bGU6bm9uZX1jYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9cTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfWFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfXN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH1zdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1sZWdlbmR7Y29sb3I6IzAwMH1odG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn1he3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifXB7bWFyZ2luLWJvdHRvbToxOHB4fWgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfWgxe2ZvbnQtc2l6ZToyOHB4fWgye2ZvbnQtc2l6ZToyNHB4fWgze2ZvbnQtc2l6ZToyMXB4fWg0e2ZvbnQtc2l6ZToxOXB4fWg1e2ZvbnQtc2l6ZToxNnB4fWg2e2ZvbnQtc2l6ZToxNHB4fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5sZWZ0e2Zsb2F0OmxlZnR9LnJpZ2h0e2Zsb2F0OnJpZ2h0fS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0udmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmZhZGUtb3V0e29wYWNpdHk6MH0uaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uY29udGFpbmVye3dpZHRoOjEyMDBweDttYXJnaW46YXV0b30uY29udGFpbmVyOTYwe3dpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmctYm90dG9tOjEycHh9Lm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fVBLBwh7vP2MJhQAACYUAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAABzdGF0aWNcY3NzXGhpZ2hsaWdodC5jc3MvKg0KDQpTdW5idXJzdC1saWtlIHN0eWxlIChjKSBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+DQoNCiovDQoNCnByZSBjb2RlIHsNCiAgICBkaXNwbGF5OiBibG9jazsgcGFkZGluZzogMC41ZW07DQogICAgYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmOGY4Zjg7DQp9DQoNCnByZSAuY29tbWVudCwNCnByZSAudGVtcGxhdGVfY29tbWVudCwNCnByZSAuamF2YWRvYyB7DQogICAgY29sb3I6ICNhZWFlYWU7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmtleXdvcmQsDQpwcmUgLnJ1YnkgLmZ1bmN0aW9uIC5rZXl3b3JkLA0KcHJlIC5yZXF1ZXN0LA0KcHJlIC5zdGF0dXMsDQpwcmUgLm5naW54IC50aXRsZSB7DQogICAgY29sb3I6ICNFMjg5NjQ7DQp9DQoNCnByZSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnN1YiAua2V5d29yZCwNCnByZSAubWV0aG9kLA0KcHJlIC5saXN0IC50aXRsZSB7DQogICAgY29sb3I6ICM5OUNGNTA7DQp9DQoNCnByZSAuc3RyaW5nLA0KcHJlIC50YWcgLnZhbHVlLA0KcHJlIC5jZGF0YSwNCnByZSAuZmlsdGVyIC5hcmd1bWVudCwNCnByZSAuYXR0cl9zZWxlY3RvciwNCnByZSAuYXBhY2hlIC5jYnJhY2tldCwNCnByZSAuZGF0ZSwNCnByZSAudGV4IC5jb21tYW5kLA0KcHJlIC5jb2ZmZWVzY3JpcHQgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICM2NUIwNDI7DQp9DQoNCnByZSAuc3Vic3Qgew0KICAgIGNvbG9yOiAjREFFRkEzOw0KfQ0KDQpwcmUgLnJlZ2V4cCB7DQogICAgY29sb3I6ICNFOUMwNjI7DQp9DQoNCnByZSAudGl0bGUsDQpwcmUgLnN1YiAuaWRlbnRpZmllciwNCnByZSAucGksDQpwcmUgLnRhZywNCnByZSAudGFnIC5rZXl3b3JkLA0KcHJlIC5kZWNvcmF0b3IsDQpwcmUgLnNoZWJhbmcsDQpwcmUgLnByb21wdCB7DQogICAgY29sb3I6ICM4OUJERkY7DQp9DQoNCnByZSAuY2xhc3MgLnRpdGxlLA0KcHJlIC5oYXNrZWxsIC50eXBlLA0KcHJlIC5zbWFsbHRhbGsgLmNsYXNzLA0KcHJlIC5qYXZhZG9jdGFnLA0KcHJlIC55YXJkb2N0YWcsDQpwcmUgLnBocGRvYyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCnByZSAuc3ltYm9sLA0KcHJlIC5ydWJ5IC5zeW1ib2wgLnN0cmluZywNCnByZSAubnVtYmVyIHsNCiAgICBjb2xvcjogIzMzODdDQzsNCn0NCg0KcHJlIC5wYXJhbXMsDQpwcmUgLnZhcmlhYmxlLA0KcHJlIC5jbG9qdXJlIC5hdHRyaWJ1dGUgew0KICAgIGNvbG9yOiAjM0U4N0UzOw0KfQ0KDQpwcmUgLmNzcyAudGFnLA0KcHJlIC5ydWxlcyAucHJvcGVydHksDQpwcmUgLnBzZXVkbywNCnByZSAudGV4IC5zcGVjaWFsIHsNCiAgICBjb2xvcjogI0NEQTg2OTsNCn0NCg0KcHJlIC5jc3MgLmNsYXNzIHsNCiAgICBjb2xvcjogIzlCNzAzRjsNCn0NCg0KcHJlIC5ydWxlcyAua2V5d29yZCB7DQogICAgY29sb3I6ICNDNUFGNzU7DQp9DQoNCnByZSAucnVsZXMgLnZhbHVlIHsNCiAgICBjb2xvcjogI0NGNkE0QzsNCn0NCg0KcHJlIC5jc3MgLmlkIHsNCiAgICBjb2xvcjogIzhCOThBQjsNCn0NCg0KcHJlIC5hbm5vdGF0aW9uLA0KcHJlIC5hcGFjaGUgLnNxYnJhY2tldCwNCnByZSAubmdpbnggLmJ1aWx0X2luIHsNCiAgICBjb2xvcjogIzlCODU5RDsNCn0NCg0KcHJlIC5wcmVwcm9jZXNzb3IsDQpwcmUgLnByYWdtYSB7DQogICAgY29sb3I6ICM4OTk2QTg7DQp9DQoNCnByZSAuaGV4Y29sb3IsDQpwcmUgLmNzcyAudmFsdWUgLm51bWJlciB7DQogICAgY29sb3I6ICNERDdCM0I7DQp9DQoNCnByZSAuY3NzIC5mdW5jdGlvbiB7DQogICAgY29sb3I6ICNEQUQwODU7DQp9DQoNCnByZSAuZGlmZiAuaGVhZGVyLA0KcHJlIC5jaHVuaywNCnByZSAudGV4IC5mb3JtdWxhIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEUyMjMxOw0KICAgIGNvbG9yOiAjRjhGOEY4Ow0KICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCn0NCg0KcHJlIC5kaWZmIC5jaGFuZ2Ugew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0QTQxMEQ7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuYWRkaXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTNCMjI7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuZGVsZXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0MjBFMDk7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuY29mZmVlc2NyaXB0IC5qYXZhc2NyaXB0LA0KcHJlIC5qYXZhc2NyaXB0IC54bWwsDQpwcmUgLnRleCAuZm9ybXVsYSwNCnByZSAueG1sIC5qYXZhc2NyaXB0LA0KcHJlIC54bWwgLnZic2NyaXB0LA0KcHJlIC54bWwgLmNzcywNCnByZSAueG1sIC5jZGF0YSB7DQogICAgb3BhY2l0eTogMC41Ow0KfQ0KDQpwcmUgLmdvIC50eXBlbmFtZXsNCiAgICBjb2xvcjogI2ZmYmM1NDsNCn1QSwcIw2jj3l0JAABdCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAc3RhdGljXGNzc1xsaW5nLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDojZjNmM2YzfQojaGVhZGVye2JhY2tncm91bmQ6IzAwOTNjNDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzo0MHB4IDAgNDhweCAwO2NvbG9yOiNmYmZiZmJ9I2hlYWRlciBhOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy1tb3otdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy13ZWJraXQtdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzfQojaGVhZGVyLWltZ3t3aWR0aDo5NnB4O2hlaWdodDo5NnB4O2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe2xpbmUtaGVpZ2h0Ojk0cHg7Y29sb3I6I2ZiZmJmYjtwYWRkaW5nOjA7bWFyZ2luLWxlZnQ6MjRweH0jaGVhZGVyLWggYXtjb2xvcjojZmJmYmZifQojaGVhZGVyLXN1Yntjb2xvcjojZjNmM2YzO21hcmdpbi1sZWZ0OjEuMmVtO2ZvbnQtc2l6ZToxNnB4fQojbmF2e2xpbmUtaGVpZ2h0OjkwcHh9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O21hcmdpbi1sZWZ0OjQ0cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiNmM2YzZjM7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNmb290ZXJ7cGFkZGluZzozMHB4IDQwcHg7Y29sb3I6Izk5OX0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2dvLXRvcHtib3R0b206NTBweDtyaWdodDo0MHB4O3Bvc2l0aW9uOmZpeGVkO2NvbG9yOiNmZmY7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjhweDtvcGFjaXR5Oi40fQojYXJ0aWNsZS1jb250YWluZXJ7aGVpZ2h0OjEwMCV9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHN7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjM2cHg7LW1vei1ib3JkZXItcmFkaXVzOjM2cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjM2cHg7bGluZS1oZWlnaHQ6NTZweDtmb250LXNpemU6MjRweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDo0MHB4O21hcmdpbi1sZWZ0OjhweDtib3JkZXI6NnB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHMgYXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzOmhvdmVye2JveC1zaGFkb3c6MCAwIDRweCAjNjY2Oy1tb3otYm94LXNoYWRvdzowIDAgNHB4ICM2NjY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA0cHggIzY2Nn0KI2FydGljbGUtY29udGFpbmVyIC52aWV3c3t0b3A6MTRweDtsZWZ0OjA7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6MzBweDstbW96LWJvcmRlci1yYWRpdXM6MzBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzBweDtwYWRkaW5nOjA7Ym9yZGVyOjRweCBzb2xpZCAjZmZmO2JveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy1tb3otYm94LXNoYWRvdzowIDAgMnB4ICM5OTk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggIzk5OX0KI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjExNnB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxMXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjojZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2M3B4O2xlZnQ6LTIycHh9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbiAudGl0bGV7Zm9udC1zaXplOjI4cHg7cGFkZGluZy1ib3R0b206MjRweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aW1lLWluZm97Y29sb3I6Izk5OTttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZy1ib3R0b206MjBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZDt0ZXh0LWluZGVudDoxZW07Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIGFydGljbGV7bWFyZ2luLWJvdHRvbTo1MHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWlue21hcmdpbi1sZWZ0OjB9I2FydGljbGUtY29udGFpbmVyIC5hcnRpY2xlLXNpbmdsZSAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tZXRhe3JpZ2h0OjQ0cHg7dG9wOi0zNnB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC52aWV3c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDtib3JkZXI6NnB4IHNvbGlkICNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAudGFne2NvbG9yOiM5OTl9CiNhcnRpY2xlLXBhZ2Vye21hcmdpbi1sZWZ0OjExNnB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVte21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojOTk5O3BhZGRpbmc6MTJweCAxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweH0jYXJ0aWNsZS1wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kOiMwMDc5YmN9CiNjb21tZW50e2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNjb21tZW50IC5tZXRhe3JpZ2h0Oi0yNHB4O3RvcDotMzBweH0jY29tbWVudCAubWV0YSAuY29tbWVudHN7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjB9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbTozMnB4fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnttYXJnaW4tcmlnaHQ6MThweDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHh9CiNjb21tZW50LWxpc3QgLmMtbWV0YSBwe21hcmdpbi1ib3R0b206MH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTpibG9ja30jY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9yOmhvdmVye2NvbG9yOiMwMDViOWJ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseXtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2RkZDtwYWRkaW5nOjNweCAxMHB4fSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9CiNjb21tZW50LWxpc3QgLmMtY29udGVudHtwYWRkaW5nLXRvcDo0cHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2t7Zm9udC1zaXplOjEzcHg7Y29sb3I6I2U2NDM0NjttYXJnaW4tbGVmdDoxMnB4fQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtc2hvd3ttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LXRpdGxle21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0bzttYXJnaW4tYm90dG9tOjMwcHh9I2NvbW1lbnQtZm9ybSAuYy1pbmZve3dpZHRoOjI2JX0jY29tbWVudC1mb3JtIC5jLWluZm8gLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MH0KI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjcwJX0KI2NvbW1lbnQtZm9ybSAuYy1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O21hcmdpbi10b3A6NnB4O3dpZHRoOjUwcHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b319QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDowfSAjYXJ0aWNsZS1jb250YWluZXIgLm1ldGF7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW46YmVmb3Jle2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9ICNuYXYsI2hlYWRlci1oe2xpbmUtaGVpZ2h0OjUwcHh9ICNmb290ZXIgc3BhbntmbG9hdDpub25lO3RleHQtYWxpZ246Y2VudGVyfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaHttYXJnaW4tbGVmdDowfSAjaGVhZGVyLWltZ3tkaXNwbGF5Om5vbmV9ICNjb21tZW50LWZvcm17d2lkdGg6MTAwJX0gI25hdntmbG9hdDpsZWZ0fSNuYXYgbGl7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NDRweH19ClBLBwjPw+rWnCoAAJwqAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXHN0eWxlLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9iZy5wbmciKSByZXBlYXR9CiNoZWFkZXJ7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9oZWFkZXIuZ2lmIikgcmVwZWF0ICM0YzcyOTg7bWluLXdpZHRoOjEyMHB4O3BhZGRpbmc6MzBweCAwO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjUwcHg7LW1vei1ib3JkZXItcmFkaXVzOjUwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwcHh9CiNoZWFkZXItaHtwYWRkaW5nLXRvcDoyNHB4O2ZvbnQtc2l6ZTozMnB4fSNoZWFkZXItaCBhe2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0KI25hdntoZWlnaHQ6NTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym94LXNoYWRvdzowIDAgMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O3BhZGRpbmc6MCAxOHB4fSNuYXYgbGkgYXtmb250LXNpemU6MTZweDtjb2xvcjojMzMzO3BhZGRpbmc6MCAzMnB4O2Rpc3BsYXk6YmxvY2t9I25hdiBsaSBhOmhvdmVye2JvcmRlci1ib3R0b206NHB4IHNvbGlkICMwMDc5YmN9CiNuYXYuZml4ZWR7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTt0b3A6MH0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2Zvb3Rlcntjb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6IzFjMjQyOTtwYWRkaW5nOjI0cHggMH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsZXR0ZXItc3BhY2luZzoxcHh9I2Zvb3RlciBwIGF7Y29sb3I6I2NjYzttYXJnaW46MCAxNnB4fSNmb290ZXIgcCBhOmhvdmVye2NvbG9yOiNmYmZiZmJ9CiNmb290ZXIgcCBhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXt3aWR0aDoxMDhweDtsaW5lLWhlaWdodDoyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnZpZXdzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnRpbWV7Y29sb3I6I2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIGF7Y29sb3I6I2ZmZn0jYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTQwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZXtwYWRkaW5nOjhweCAxNnB4O2JhY2tncm91bmQtY29sb3I6IzRjNzI5ODtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjJweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoycHh9I2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxlIGF7Y29sb3I6I2VlZX0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxOHB4IDI0cHggMjRweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZve21hcmdpbi1ib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoycHg7Y29sb3I6Izk5OX0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLmZhe21hcmdpbi1yaWdodDo4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuc2hhcmUgLmZhe21hcmdpbi1yaWdodDowfQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+KntwYWRkaW5nOjZweCAxOHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+c3Bhbntib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmlnaHR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJpZ2h0Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZHtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC50aW1lLCNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAudmlld3Mgc3Bhbntmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjQ4cHh9CiNjb21tZW50e21hcmdpbi10b3A6LTI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjI0cHg7YmFja2dyb3VuZDojZmZmfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0b30jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxOHB4O3BhZGRpbmctYm90dG9tOjE4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1yZXBseXtjb2xvcjojOTk5fSNjb21tZW50LWxpc3QgLmMtcmVwbHk6aG92ZXJ7Y29sb3I6IzMzM30KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3J7Zm9udC1zaXplOjEzcHh9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhe21hcmdpbi1yaWdodDo2cHh9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YS5sZWZ0e2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI25hdiBsaXtwYWRkaW5nOjAgMTBweH0gI2hlYWRlci1pbWd7ZmxvYXQ6bGVmdDt3aWR0aDo2NHB4O2hlaWdodDo2NHB4fSAjaGVhZGVyLWh7cGFkZGluZzoxN3B4IDA7Zm9udC1zaXplOjI0cHh9ICNoZWFkZXItc3Vie2Rpc3BsYXk6bm9uZX0gI2FydGljbGUtY29udGFpbmVyIC50YWcsI2FydGljbGUtY29udGFpbmVyIC50aW1le2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjY29tbWVudC1saXN0IC5jLWF2YXRhcntkaXNwbGF5Om5vbmV9fQpQSwcIqnrsLo0oAACNKAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGZhdmljb24uaWNvAAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAAAACzfgfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N+B9uzfgfbs34H27N+B9uzfgfbs34H27N9B9uzfgfbs34H27N9B9uzfgfbs34H27N+B9uzfgfbsnwH1q96B8etfhittZNKkLqCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qDDf+6hhf/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+6gQj/uYEI/7mCCP+6gQj/uoII/7qCCP+5gQj/uYEI/7mCCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qCCP+5gQj/uYEI/7qBCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6ggj/uoEI/7qCCP+6ggj/uoEI/7qCCP+6gQj/uoEI/7mBCP+5gQj/uYIH/7mCB/+5ggf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/vIQF/7yEBf+7gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8gwX/vIQF/7yEBf+8gwX/vIQG/7yEBv/AhwP/wIYD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIcE/8CHBP/AhgP/wIYC/8WJAv/FiQH/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WKAv/FiQH/xYoD/8ePDv/Mmif/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yZMX/9avU//hwHX/6dKf//Pnzf/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uNAP/LoD3/8uvd/v79+v7//////////sqOAP7KjQD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44B/8uOAP/LjgD/y40A/8qOAP/LjgD/y44A/8uOAf/LjgH/y44A/8uOAP/LjgD/y44A/8uOAf/KjQD/y48G/9i5c//6+fX+/v///v7+/v/+/v7+yo4A/sqNAP/LjgD/y44A/8qOAP/KjgD/yo4A/8qOAP/LjgD/y44A/8qOAP/LjgD/y44A/8qNAP/LjQD/y44B/8mNAf/HjQj/yo4D/8qNAP/LjQD/yo0A/8qNAP/KjQD/y48C/9CaG//fvnH/9e/g//7+/v7////+/v7+//7+/v7LjgH6y44A/8qNAP/LjgD/y44B/8qOAP/KjgD/yo4A/8uOAP/KjgD/yo4A/8uOAP/LjgH/yo4A/8qNAP/JjAD/x5o0/8Gref+oi0j/zaZO/8WYMP/PnzH/1qY5/9qwT//iwnf/8N+5//v48v/+/v///v7+/////////////v7+/7ySMr67ihn/zJIM/8qOAP/KjQD/yo0A/8qNAP/KjgD/yo4A/8qOAP/KjQD/yo0A/8qNAP/LjgH/0JkY/8mjTf/Qxq3/5eXm/6alo//p5t//xL6x/+Hayf758+P++/bs//38+f/////+/////v7+/v/+/v7////////////+/v7/lZONlJmPef/mzpn/4L1q/9mtSP/UozL/0Zsf/8+WE//PlRH/z5UR/8+XF//Tnyj/2atD/+G/cf/t27P/0MzE/8PDw/7q6ur+tra2/ujo6P60tLX+2tvb/v39/f7+///+/v7+//////7////+/v7+//7+/v/////+/////v////6XlpaVkpKT//b29f/9+/f/+fTn//bt1//y5MX/8N+4/+7csv/v3LP/8eG7//Xpzv/58+T/9/Xy/8nJyv+vr6//paSk/729vf+UlJT/ubm5/6enp/+xsbH/0dHR//z8/P///////v7+//7+/v/+/v7//v7+/////////////v7+/6mpqZiRkZH/8vLy/////v/+/v7//////////////////v7+//7+/v/+/v///v/////////h4eD/urm5/+/v7//s7Oz/19fX/8bGxv/e3t7/9fX1/+rq6/+4uLj/8fHx///////+/v7+//////7+/v/+/v7////////////+/v7/m5ubZ4ODg/Dt7e3///////////7///7+/v7+//7+/v7//v7+/v7+/vn5+f729vb++vr6/ufn6P+3t7f/7e3t//j4+P7d3d3+2NjY/vLy8v7+/v7+2NjY/r6+vv74+Pj+//////////7////+/v7+//7+/v/////+/////v////41NTUjcXFx2Obm5v/////+/////v/////+/v7//////+/v7/7Q0ND/vr6+/rq6uv6+vr7/0dHR/s/Pz/6srKz/Z2dn/isrK/8jIyP/W1tb/6urq/+9vb3+5OTk/uXl5f/a2tr/39/f/vDw8P79/f3//////v7+/v7//////////o2NjSd1dXXa29vb//////7////+//////7+/v/h4eH/tbW1/srKyv/j4+P+5+fn/uPj4//Jycn+vr6+/re3t/8sLCz+AAAA/wAAAP8GBgb/hoaG/9fX1/6+vr7+vLy8/8HBwf++vr7+ubm5/sfHx//x8fH+/////v/////////+4ODgJISEhNnFxcX///////////7/////5+fn/7W1tf/k5OT///////////7//////////v7+/v7g4OD/tra2/66urv9ubm7/WVlZ/4ODg/+7u7v/vr6+/+Tk5P76+vr//f39//z8/P7w8PD/ysrK/7e3t//w8PD///////////+Hh4eAXV1d8aOjo////////////vv7+//BwcH/wcHB/62trf/Gxsb/+vr6///////+/v7//v7+/v/////W1tb/xMTE//b29v/29vb/3d3d/76+vv/k5OT/8fHx//7+/v/+/v7//v7+/v/////9/f3/zc3N/8PDw//7+/v//////4aGhviWlpb/i4uL//f39///////7u7u/6urq/9SUlL/ExMT/2dnZ//R0dH//f39//7+/v////////////Ly8v+4uLj/7+/v//r6+v/AwMD/nJyc/1RUVP9ubm7/3Nzc//7+/v/////+/v7+///////09PT/t7e3/+vr6///////7+/v/+zs7P98fHz/2NjY/v////7n5+f/k5OT/xYWFv8FBQX/Nzc3/5mZmf/7+/v//v7+//////7/////+vr6/8PDw//n5+f/8/Pz/6ysrP85OTn/AAAA/0VFRf6YmJj/9fX1//////7+/v7///////39/f/ExMT/3t7e////////////0dHR/zMzM/+Xl5f//////+fn5/+zs7P/aGho/xcXF/86Ojr/yMjI//7+/v/+/v7////////////4+Pj/vb29/+vr6//w8PD/s7Oz/0xMTP8AAAD/Dg4O/oKCgv/6+vr//////v7+/v///////v7+/8fHx//c3Nz///////////+4uLj/GRkZ/z8/P/7f39/+9vb2/r29vf/b29v+xMTE/tvb2//9/f3+/v7+/v////7////+/////uXl5f65ubn+9vb2//Pz8/++vr7/wcHB/nJycv5+fn7+4ODg///////+/v7+/v7+/v/////4+Pj+vLy8/ubm5v/////+/////vHx8f+ysrL/hYWF/ouLi/709PT/1NTU/729vf/5+fn+//////7+/v7////+//////////729vb+vb29/9bW1v///////f39/8fHx//Ozs7/+fn5/vz8/P7///////////////7////+/////9/f3/65ubn++Pj4/+7u7v7Jycn/+Pj4/v/////y8vL+iIiI/pubm//09PT/yMjI/729vf7n5+f/+vr6/vz8/P76+vr/5+fn/r29vf7Jycn/+vr6////////////8PDw/7e3t//Y2Nj+/f39/v///////////////v////7p6en/t7e3/uLi4v/x8fH/jo6O/nNzc+WQkJD+o6Oj/6CgoP5+fn76Tk5O4ZycnPvh4eH/1tbW/r29vf/AwMD/wcHB/76+vv+5ubn+1tbW/vr6+v//////////////////////6enp/7m5uf7Dw8P+39/f/+jo6P/k5OT+zMzM/7a2tv/d3d3+6urq/4ODg/9wcHD/q6urP3BwcGZFRUVpSkpKZ4WFhV+MjIw4bW1tm3d3d+utra3/2NjY/+Tk5P7l5eX/6enp//b29v7////////////////+/v7/////////////////9fX1/9bW1v/CwsL/vb29/8HBwf/R0dH/5OTk/8bGxv99fX3zY2Njzmtra9IREREA////AP///wC8vLwAAAAAAAAAAADOzs4LdnZ2RW1tbaN7e3vrmZmZ/7e3t//X19f/6Ojo//Dw8P/29vb/+vr6//39/f////////////////////////////f39//q6ur/3d3d/re3t/+Ojo7+fHx84IeHh3K8vLwXcHBwHcPDwwCAgIAAICAgAD8/PwCYmJgAxsbGAJeXlwH///8AysrKDampqVN9fX2OcHBwxXt7e/d3d3f1gYGB+ZGRkfyjo6P7s7Oz+7+/v/vFxcX7xsbG+8DAwPuzs7P7nJyc/IGBgfp4eHj6cXFxzImJiYu+vr48////BaqqqgH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAAAAAABQSwcIqXMT8L4QAAC+EAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAc3RhdGljXGltZy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAc3RhdGljXGltZ1xiZy5wbmeJUE5HDQoaCgAAAA1JSERSAAAAlgAAAJYIAgAAALNj5rUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI2RTRGQ0JFNTVBQUUyMTE5NzAwQjU5OUUyOTNFQTA3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA5NzBGM0NFQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA5NzBGM0NEQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkFBQkJFQTE4RkI1RTIxMUJCRTNBQkY0MzkzOEFFQkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7MjgrrAAAoI0lEQVR42uzd7ZJkR5GtYXVSwP1fKCMQzBwDhHR2aXU/9SoKww5Dbh2Eqn60VWdl7ozwiPCP5cs9Pn399TePx+Nvf/vbp0+fvvvuu1//+td//etfX15ert9/9atfffvtt9dfr99/85vf/OUvf7l+/+qrr/bf6yPXX/fL9dm97frlevH6+PUQL17/7nXv2ZOvX66v2+t78/X7vvf777+/Hnu9sjdc/90brhevv16/XK9cX3H9vmFvYNdfr/fvT9cr11+/++Hn+uX60/X6XtyT98F96vr3+uD1y/XKNfjrndcrvnRjvl7xkevFSWNvuP7dmwntesj1huudE8Uefpec//CHP00EG4ShXL9sthvH3jO5TxbXv3vEZrvvuD5y/fcaxPVfs90b9inj/uqHnwndwycmw9jH9+aN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w3a6wnOpCa4gdQeJQJeeiFsXYlc2FYcbyN0V27XTaTOuRTqGnrcDXNUp4qRkMkYWjkUv7LUnjkZBT5fz/xVgAMwCMiX3lhRvAAAAAElFTkSuQmCCUEsHCJuj1O/zKwAA8ysAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHN0YXRpY1xpbWdcaGVhZGVyLmdpZkdJRjg5YWQAZACzAABNdJpJbZJOdZxIbJBJbpJMc5lKb5RMcphKcJVLcZYAAAAAAAAAAAAAAAAAAAAAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjAxNUFBQzE1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjAxNUFBQzI1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFCRjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgc3RSZWY6ZG9jdW1lbnRJRD0i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Ow0KICAgIHRvcEJ1dHRvbigpOw0KICAgIHJlbmRlck1hcmtkb3duKCk7DQogICAgaW5pdENvbW1lbnQoKTsNCn0pOw0KDQpmdW5jdGlvbiBmaXhIZWFkZXIoKSB7DQogICAgdmFyICRuYXYgPSAkKCcjbmF2Jyk7DQogICAgdmFyIHRvcCA9ICRuYXYub2Zmc2V0KCkudG9wOw0KICAgIGNvbnNvbGUubG9nKHRvcCk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkbmF2LmFkZENsYXNzKCJmaXhlZCIpLnJlbW92ZUNsYXNzKCJ0ZXh0LWNlbnRlciIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG5hdi5yZW1vdmVDbGFzcygiZml4ZWQiKS5hZGRDbGFzcygidGV4dC1jZW50ZXIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiB0b3BCdXR0b24oKSB7DQogICAgdmFyIHRvcCA9ICQoJyNuYXYnKS5vZmZzZXQoKS50b3A7DQogICAgdmFyICR0b3AgPSAkKCcjZ28tdG9wJyk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkdG9wLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdG9wLmFkZENsYXNzKCdoaWRlJyk7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkdG9wLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiAwfSwgNTAwKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pDQp9DQoNCmZ1bmN0aW9uIHJlbmRlck1hcmtkb3duKCkgew0KICAgIHZhciAkbWQgPSAkKCcubWFya2Rvd24nKTsNCiAgICAkbWQuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAkKGl0ZW0pLmh0bWwobWFya2VkKCQoaXRlbSkuaHRtbCgpLnJlcGxhY2UoLyZndDsvZywgJz4nKSkpOw0KICAgIH0pOw0KICAgIHZhciBjb2RlID0gJG1kLmZpbmQoJ3ByZSBjb2RlJyk7DQogICAgaWYgKGNvZGUubGVuZ3RoKSB7DQogICAgICAgICQoIjxsaW5rPiIpLmF0dHIoeyByZWw6ICJzdHlsZXNoZWV0IiwgdHlwZTogInRleHQvY3NzIiwgaHJlZjogIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MifSkuYXBwZW5kVG8oImhlYWQiKTsNCiAgICAgICAgJC5nZXRTY3JpcHQoIi9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBjb2RlLmVhY2goZnVuY3Rpb24gKGksIGl0ZW0pIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGl0ZW0pDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBpbml0Q29tbWVudCgpIHsNCiAgICB2YXIgJGxpc3QgPSAkKCcjY29tbWVudC1saXN0Jyk7DQogICAgaWYgKCEkbGlzdC5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpIHsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXV0aG9yJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF1dGhvciIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtZW1haWwiKSk7DQogICAgICAgICQoJyNjb21tZW50LXVybCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC11cmwiKSk7DQogICAgICAgICQoJyNjb21tZW50LWF2YXRhcicpLmF0dHIoInNyYyIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF2YXRhciIpKTsNCiAgICAgICAgJCgnLmMtYXZhdGFyJykucmVtb3ZlQ2xhc3MoIm51bGwiKTsNCiAgICB9DQogICAgJCgnI2NvbW1lbnQtY29udGVudCcpLm9uKCJmb2N1cyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKCQoJy5jLWF2YXRhcicpLmhhc0NsYXNzKCJudWxsIikpIHsNCiAgICAgICAgICAgICQoJy5jLWF2YXRhci1maWVsZCcpLnJlbW92ZSgpOw0KICAgICAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJCgnLm5vdC1tZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICQoJy5jLWluZm8tZmllbGRzJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LXNob3cnKS5vbigiY2xpY2siLCAiLmVuYWJsZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgiI2NvbW1lbnQtc2hvdyIpLnJlbW92ZSgpOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICB9KTsNCiAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdXRob3IiLCAkKCcjY29tbWVudC1hdXRob3InKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1lbWFpbCIsICQoJyNjb21tZW50LWVtYWlsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtdXJsIiwgJCgnI2NvbW1lbnQtdXJsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtYXZhdGFyIiwganNvbi5jb21tZW50LmF2YXRhcik7DQogICAgICAgICAgICB2YXIgdHBsID0gJCgkKCcjY29tbWVudC10cGwnKS5odG1sKCkpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF2YXRhciIpLmF0dHIoInNyYyIsIGpzb24uY29tbWVudC5hdmF0YXIpLmF0dHIoImFsdCIsIGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF1dGhvciIpLmF0dHIoImhyZWYiLCBqc29uLmNvbW1lbnQudXJsKS50ZXh0KGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXJlcGx5IikuYXR0cigicmVsIiwganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIHRwbC5maW5kKCIuYy1jb250ZW50IikuaHRtbChqc29uLmNvbW1lbnQuY29udGVudCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnBhcmVudF9tZCkgew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikuaHRtbChtYXJrZWQoanNvbi5jb21tZW50LnBhcmVudF9tZCkpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtcC1tZCIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHBsLmF0dHIoImlkIiwgImNvbW1lbnQtIiArIGpzb24uY29tbWVudC5pZCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnN0YXR1cyA9PSAiYXBwcm92ZWQiKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbGlzdC5hcHBlbmQodHBsKTsNCiAgICAgICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhbGVydCgi5o+Q5Lqk5aSx6LSlISIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJGxpc3Qub24oImNsaWNrIiwgIi5jLXJlcGx5IiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgdmFyIHBjID0gJCgnI2NvbW1lbnQtJyArIGlkKTsNCiAgICAgICAgdmFyIG1kID0gIj4gQCIgKyBwYy5maW5kKCIuYy1hdXRob3IiKS50ZXh0KCkgKyAiXG5cbiI7DQogICAgICAgIG1kICs9ICI+ICIgKyBwYy5maW5kKCIuYy1jb250ZW50IikuaHRtbCgpICsgIlxuIjsNCiAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLmJlZm9yZSgnPGRpdiBjbGFzcz0icmVwbHktbWQgbWFya2Rvd24iPicgKyBtYXJrZWQobWQpICsgJzwvZGl2PicpOw0KICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICBpZiAoJCgnI2NvbW1lbnQtc2hvdycpLmxlbmd0aCkgew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtc2hvdyAuZW5hYmxlJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICAgICAgfQ0KICAgICAgICAkKCcuY2FuY2VsLXJlcGx5Jykuc2hvdygpOw0KICAgICAgICB2YXIgdG9wID0gJCgnI2NvbW1lbnQtZm9ybScpLm9mZnNldCgpLnRvcDsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiB0b3B9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnLmNhbmNlbC1yZXBseScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlcGx5LW1kJykucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCn0NClBLBwge4R5ydRIAAHUSAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcanNcdXBsb2FkLmpzZnVuY3Rpb24gaW5pdFVwbG9hZChwKSB7DQogICAgJCgnI2F0dGFjaC1zaG93Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLnRyaWdnZXIoImNsaWNrIik7DQogICAgfSk7DQogICAgJCgnI2F0dGFjaC11cGxvYWQnKS5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoY29uZmlybSgi56uL5Y2z5LiK5LygPyIpKSB7DQogICAgICAgICAgICB2YXIgYmFyID0gJCgnPHAgY2xhc3M9ImZpbGUtcHJvZ3Jlc3MgaW5saW5lLWJsb2NrIj4wJTwvcD4nKTsNCiAgICAgICAgICAgICQoJyNhdHRhY2gtZm9ybScpLmFqYXhTdWJtaXQoew0KICAgICAgICAgICAgICAgICJiZWZvcmVTdWJtaXQiOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQocCkuYmVmb3JlKGJhcik7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAidXBsb2FkUHJvZ3Jlc3MiOiBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCB0b3RhbCwgcGVyY2VudENvbXBsZXRlKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBwZXJjZW50VmFsID0gcGVyY2VudENvbXBsZXRlICsgJyUnOw0KICAgICAgICAgICAgICAgICAgICBiYXIuY3NzKCJ3aWR0aCIsIHBlcmNlbnRWYWwpLmh0bWwocGVyY2VudFZhbCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKGpzb24ubXNnKS5hZGRDbGFzcygiZXJyIik7DQogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXIucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDAwKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKCIvIiArIGpzb24uZmlsZS5VcmwgKyAiJm5ic3A7Jm5ic3A7Jm5ic3A7KEAiICsganNvbi5maWxlLk5hbWUgKyAiKSIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudmFsKCIiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICQodGhpcykudmFsKCIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfVBLBwiIiRf79gQAAPYEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcbGliL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAACEAAABzdGF0aWNcbGliXGNvZGVtaXJyb3ItbW9kZS5taW4uanMhZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9L14oXHMqKShbKistXXwoXGQrKVwuKShccyopLyxlPSIqKy0iO0NvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0PWZ1bmN0aW9uKHIpe3ZhciBuLGk9ci5nZXRDdXJzb3IoKSxvPXIuZ2V0U3RhdGVBZnRlcihpLmxpbmUpLmxpc3QhPT0hMTtpZighb3x8IShuPXIuZ2V0TGluZShpLmxpbmUpLm1hdGNoKHQpKSlyZXR1cm4gci5leGVjQ29tbWFuZCgibmV3bGluZUFuZEluZGVudCIpLHZvaWQgMDt2YXIgbD1uWzFdLGE9bls0XSxzPWUuaW5kZXhPZihuWzJdKT49MD9uWzJdOnBhcnNlSW50KG5bM10sMTApKzErIi4iO3IucmVwbGFjZVNlbGVjdGlvbigiXG4iK2wrcythLCJlbmQiKX19KCksQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4gZS5mPWUuaW5saW5lPXIscih0LGUpfWZ1bmN0aW9uIG4odCxlLHIpe3JldHVybiBlLmY9ZS5ibG9jaz1yLHIodCxlKX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LmxpbmtUaXRsZT0hMSx0LmVtPSExLHQuc3Ryb25nPSExLHQucXVvdGU9MCxnfHx0LmYhPWx8fCh0LmY9Yyx0LmJsb2NrPW8pLHQudHJhaWxpbmdTcGFjZT0wLHQudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsdC50aGlzTGluZUhhc0NvbnRlbnQ9ITEsbnVsbH1mdW5jdGlvbiBvKHQsaSl7dmFyIG89aS5saXN0IT09ITE7aS5saXN0IT09ITEmJmkuaW5kZW50YXRpb25EaWZmPj0wPyhpLmluZGVudGF0aW9uRGlmZjw0JiYoaS5pbmRlbnRhdGlvbi09aS5pbmRlbnRhdGlvbkRpZmYpLGkubGlzdD1udWxsKTppLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbj4wPyhpLmxpc3Q9bnVsbCxpLmxpc3REZXB0aD1NYXRoLmZsb29yKGkuaW5kZW50YXRpb24vNCkpOmkubGlzdCE9PSExJiYoaS5saXN0PSExLGkubGlzdERlcHRoPTApO3ZhciBsPW51bGw7aWYoaS5pbmRlbnRhdGlvbkRpZmY+PTQpcmV0dXJuIGkuaW5kZW50YXRpb24tPTQsdC5za2lwVG9FbmQoKSxrO2lmKHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDtpZihsPXQubWF0Y2goUikpaS5oZWFkZXI9bFswXS5sZW5ndGg8PTY/bFswXS5sZW5ndGg6NjtlbHNlIGlmKGkucHJldkxpbmVIYXNDb250ZW50JiYobD10Lm1hdGNoKEcpKSlpLmhlYWRlcj0iPSI9PWxbMF0uY2hhckF0KDApPzE6MjtlbHNlIGlmKHQuZWF0KCI+IikpZm9yKGkuaW5kZW50YXRpb24rKyxpLnF1b3RlPTEsdC5lYXRTcGFjZSgpO3QuZWF0KCI+Iik7KXQuZWF0U3BhY2UoKSxpLnF1b3RlKys7ZWxzZXtpZigiWyI9PT10LnBlZWsoKSlyZXR1cm4gcih0LGksaCk7aWYodC5tYXRjaChJLCEwKSlyZXR1cm4gQTtpZihpLnByZXZMaW5lSGFzQ29udGVudCYmIW98fCF0Lm1hdGNoKFAsITApJiYhdC5tYXRjaChGLCEwKSl7aWYoZS5mZW5jZWRDb2RlQmxvY2tzJiZ0Lm1hdGNoKC9eYGBgKFtcdysjXSopLywhMCkpcmV0dXJuIGkubG9jYWxNb2RlPXgoUmVnRXhwLiQxKSxpLmxvY2FsTW9kZSYmKGkubG9jYWxTdGF0ZT1pLmxvY2FsTW9kZS5zdGFydFN0YXRlKCkpLG4odCxpLGEpLGt9ZWxzZSBpLmluZGVudGF0aW9uKz00LGkubGlzdD0hMCxpLmxpc3REZXB0aCsrLGUudGFza0xpc3RzJiZ0Lm1hdGNoKEIsITEpJiYoaS50YXNrTGlzdD0hMCl9cmV0dXJuIHIodCxpLGkuaW5saW5lKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9di50b2tlbih0LGUuaHRtbFN0YXRlKTtyZXR1cm4gZyYmInRhZyI9PT1yJiYib3BlblRhZyIhPT1lLmh0bWxTdGF0ZS50eXBlJiYhZS5odG1sU3RhdGUuY29udGV4dCYmKGUuZj1jLGUuYmxvY2s9byksZS5tZF9pbnNpZGUmJi0xIT10LmN1cnJlbnQoKS5pbmRleE9mKCI+IikmJihlLmY9YyxlLmJsb2NrPW8sZS5odG1sU3RhdGUuY29udGV4dD12b2lkIDApLHJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LnNvbCgpJiZ0Lm1hdGNoKC9eYGBgLywhMCk/KGUubG9jYWxNb2RlPWUubG9jYWxTdGF0ZT1udWxsLGUuZj1jLGUuYmxvY2s9byxrKTplLmxvY2FsTW9kZT9lLmxvY2FsTW9kZS50b2tlbih0LGUubG9jYWxTdGF0ZSk6KHQuc2tpcFRvRW5kKCksayl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1bXTtpZih0LnRhc2tPcGVuKXJldHVybiJtZXRhIjtpZih0LnRhc2tDbG9zZWQpcmV0dXJuInByb3BlcnR5IjtpZih0LnN0cm9uZyYmZS5wdXNoKHopLHQuZW0mJmUucHVzaChFKSx0LmxpbmtUZXh0JiZlLnB1c2goTyksdC5jb2RlJiZlLnB1c2goayksdC5oZWFkZXImJihlLnB1c2goQyksZS5wdXNoKEMrdC5oZWFkZXIpKSx0LnF1b3RlJiZlLnB1c2godC5xdW90ZSUyP3c6TCksdC5saXN0IT09ITEpe3ZhciByPSh0Lmxpc3REZXB0aC0xKSUzO3I/MT09PXI/ZS5wdXNoKE0pOmUucHVzaChUKTplLnB1c2goUyl9cmV0dXJuIHQudHJhaWxpbmdTcGFjZU5ld0xpbmU/ZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS1uZXctbGluZSIpOnQudHJhaWxpbmdTcGFjZSYmZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS0iKyh0LnRyYWlsaW5nU3BhY2UlMj8iYSI6ImIiKSksZS5sZW5ndGg/ZS5qb2luKCIgIik6bnVsbH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQubWF0Y2goXywhMCk/cyhlKTp2b2lkIDB9ZnVuY3Rpb24gYyh0LGkpe3ZhciBvPWkudGV4dCh0LGkpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgbylyZXR1cm4gbztpZihpLmxpc3QpcmV0dXJuIGkubGlzdD1udWxsLHMoaSk7aWYoaS50YXNrTGlzdCl7dmFyIGE9IngiIT09dC5tYXRjaChCLCEwKVsxXTtyZXR1cm4gYT9pLnRhc2tPcGVuPSEwOmkudGFza0Nsb3NlZD0hMCxpLnRhc2tMaXN0PSExLHMoaSl9aS50YXNrT3Blbj0hMSxpLnRhc2tDbG9zZWQ9ITE7dmFyIHU9dC5zb2woKSxjPXQubmV4dCgpO2lmKCJcXCI9PT1jKXJldHVybiB0Lm5leHQoKSxzKGkpO2lmKGkubGlua1RpdGxlKXtpLmxpbmtUaXRsZT0hMTt2YXIgaD1jOyIoIj09PWMmJihoPSIpIiksaD0oaCsiIikucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csIlxcJDEiKTt2YXIgZD0iXlxccyooPzpbXiIraCsiXFxcXF0rfFxcXFxcXFxcfFxcXFwuKSIraDtpZih0Lm1hdGNoKG5ldyBSZWdFeHAoZCksITApKXJldHVybiBXfWlmKCJgIj09PWMpe3ZhciBwPXMoaSksZz10LnBvczt0LmVhdFdoaWxlKCJgIik7dmFyIHY9MSt0LnBvcy1nO3JldHVybiBpLmNvZGU/dj09PWI/KGkuY29kZT0hMSxwKTpzKGkpOihiPXYsaS5jb2RlPSEwLHMoaSkpfWlmKGkuY29kZSlyZXR1cm4gcyhpKTtpZigiISI9PT1jJiZ0Lm1hdGNoKC9cW1teXF1dKlxdID8oPzpcKHxcWykvLCExKSlyZXR1cm4gdC5tYXRjaCgvXFtbXlxdXSpcXS8pLGkuaW5saW5lPWkuZj1mLE47aWYoIlsiPT09YyYmdC5tYXRjaCgvLipcXShcKHwgP1xbKS8sITEpKXJldHVybiBpLmxpbmtUZXh0PSEwLHMoaSk7aWYoIl0iPT09YyYmaS5saW5rVGV4dCl7dmFyIHk9cyhpKTtyZXR1cm4gaS5saW5rVGV4dD0hMSxpLmlubGluZT1pLmY9Zix5fWlmKCI8Ij09PWMmJnQubWF0Y2goL14oaHR0cHM/fGZ0cHM/KTpcL1wvKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEgsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXltePiBcXF0rQCg/OlteXFw+XXxcXC4pKz4vLCExKSlyZXR1cm4gcih0LGksbShELCI+IikpO2lmKCI8Ij09PWMmJnQubWF0Y2goL15cdy8sITEpKXtpZigtMSE9dC5zdHJpbmcuaW5kZXhPZigiPiIpKXt2YXIgeD10LnN0cmluZy5zdWJzdHJpbmcoMSx0LnN0cmluZy5pbmRleE9mKCI+IikpOy9tYXJrZG93blxzKj1ccyooJ3wiKXswLDF9MSgnfCIpezAsMX0vLnRlc3QoeCkmJihpLm1kX2luc2lkZT0hMCl9cmV0dXJuIHQuYmFja1VwKDEpLG4odCxpLGwpfWlmKCI8Ij09PWMmJnQubWF0Y2goL15cL1x3Kj8+LykpcmV0dXJuIGkubWRfaW5zaWRlPSExLCJ0YWciO3ZhciBDPSExO2lmKCFlLnVuZGVyc2NvcmVzQnJlYWtXb3JkcyYmIl8iPT09YyYmIl8iIT09dC5wZWVrKCkmJnQubWF0Y2goLyhcdykvLCExKSl7dmFyIGs9dC5wb3MtMjtpZihrPj0wKXt2YXIgdz10LnN0cmluZy5jaGFyQXQoayk7Il8iIT09dyYmdy5tYXRjaCgvKFx3KS8sITEpJiYoQz0hMCl9fXZhciBwPXMoaSk7aWYoIioiPT09Y3x8Il8iPT09YyYmIUMpaWYodSYmIiAiPT09dC5wZWVrKCkpO2Vsc2V7aWYoaS5zdHJvbmc9PT1jJiZ0LmVhdChjKSlyZXR1cm4gaS5zdHJvbmc9ITEscDtpZighaS5zdHJvbmcmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz1jLHMoaSk7aWYoaS5lbT09PWMpcmV0dXJuIGkuZW09ITEscDtpZighaS5lbSlyZXR1cm4gaS5lbT1jLHMoaSl9ZWxzZSBpZigiICI9PT1jJiYodC5lYXQoIioiKXx8dC5lYXQoIl8iKSkpe2lmKCIgIj09PXQucGVlaygpKXJldHVybiBzKGkpO3QuYmFja1VwKDEpfXJldHVybiIgIj09PWMmJih0Lm1hdGNoKC8gKyQvLCExKT9pLnRyYWlsaW5nU3BhY2UrKzppLnRyYWlsaW5nU3BhY2UmJihpLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSEwKSkscyhpKX1mdW5jdGlvbiBmKHQsZSl7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3ZhciBuPXQubmV4dCgpO3JldHVybiIoIj09PW58fCJbIj09PW4/cih0LGUsbShXLCIoIj09PW4/IikiOiJdIikpOiJlcnJvciJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0Lm1hdGNoKC9eW15cXV0qXF06LywhMCk/KGUuZj1kLE8pOnIodCxlLGMpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdC5lYXRTcGFjZSgpP251bGw6KHQubWF0Y2goL15bXlxzXSsvLCEwKSx2b2lkIDA9PT10LnBlZWsoKT9lLmxpbmtUaXRsZT0hMDp0Lm1hdGNoKC9eKD86XHMrKD86Iig/OlteIlxcXXxcXFxcfFxcLikrInwnKD86W14nXFxdfFxcXFx8XFwuKSsnfFwoKD86W14pXFxdfFxcXFx8XFwuKStcKSkpPy8sITApLGUuZj1lLmlubGluZT1jLFcpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIFZbdF18fCh0PSh0KyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpLFZbdF09bmV3IFJlZ0V4cCgiXig/OlteXFxcXF18XFxcXC4pKj8oIit0KyIpIikpLFZbdF19ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIHI9cnx8YyxmdW5jdGlvbihuLGkpe3JldHVybiBuLm1hdGNoKHAoZSkpLGkuaW5saW5lPWkuZj1yLHR9fXZhciBnPUNvZGVNaXJyb3IubW9kZXMuaGFzT3duUHJvcGVydHkoInhtbCIpLHY9Q29kZU1pcnJvci5nZXRNb2RlKHQsZz97bmFtZToieG1sIixodG1sTW9kZTohMH06InRleHQvcGxhaW4iKSx5PXtodG1sOiJodG1sbWl4ZWQiLGpzOiJqYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uIixjOiJ0ZXh0L3gtY3NyYyIsImMrKyI6InRleHQveC1jKytzcmMiLGphdmE6InRleHQveC1qYXZhIixjc2hhcnA6InRleHQveC1jc2hhcnAiLCJjIyI6InRleHQveC1jc2hhcnAiLHNjYWxhOiJ0ZXh0L3gtc2NhbGEifSx4PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9e30sbz1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5tb2RlcylDb2RlTWlycm9yLm1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZvLnB1c2gobCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyluW29bZV1dPW9bZV07dmFyIGE9W107Zm9yKHZhciBsIGluIENvZGVNaXJyb3IubWltZU1vZGVzKUNvZGVNaXJyb3IubWltZU1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZhLnB1c2goe21pbWU6bCxtb2RlOkNvZGVNaXJyb3IubWltZU1vZGVzW2xdfSk7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylyPWFbZV0ubWltZSxpW3JdPWFbZV0ubWltZTtmb3IodmFyIHMgaW4geSkoeVtzXWluIG58fHlbc11pbiBpKSYmKG5bc109eVtzXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdP0NvZGVNaXJyb3IuZ2V0TW9kZSh0LG5bZV0pOm51bGx9fSgpO3ZvaWQgMD09PWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYoZS51bmRlcnNjb3Jlc0JyZWFrV29yZHM9ITApLHZvaWQgMD09PWUuZmVuY2VkQ29kZUJsb2NrcyYmKGUuZmVuY2VkQ29kZUJsb2Nrcz0hMSksdm9pZCAwPT09ZS50YXNrTGlzdHMmJihlLnRhc2tMaXN0cz0hMSk7dmFyIGI9MCxDPSJoZWFkZXIiLGs9ImNvbW1lbnQiLHc9ImF0b20iLEw9Im51bWJlciIsUz0idmFyaWFibGUtMiIsTT0idmFyaWFibGUtMyIsVD0ia2V5d29yZCIsQT0iaHIiLE49InRhZyIsSD0ibGluayIsRD0ibGluayIsTz0ibGluayIsVz0ic3RyaW5nIixFPSJlbSIsej0ic3Ryb25nIixJPS9eKFsqXC09X10pKD86XHMqXDEpezIsfVxzKiQvLFA9L15bKlwtK11ccysvLEY9L15bMC05XStcLlxzKy8sQj0vXlxbKHh8IClcXSg/PVxzKS8sUj0vXiMrLyxHPS9eKD86XD17MSx9fC17MSx9KSQvLF89L15bXiFcW1xdKl9cXDw+YCAiJyhdKy8sVj1bXTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybntmOm8scHJldkxpbmVIYXNDb250ZW50OiExLHRoaXNMaW5lSGFzQ29udGVudDohMSxibG9jazpvLGh0bWxTdGF0ZTpDb2RlTWlycm9yLnN0YXJ0U3RhdGUodiksaW5kZW50YXRpb246MCxpbmxpbmU6Yyx0ZXh0OnUsbGlua1RleHQ6ITEsbGlua1RpdGxlOiExLGVtOiExLHN0cm9uZzohMSxoZWFkZXI6MCx0YXNrTGlzdDohMSxsaXN0OiExLGxpc3REZXB0aDowLHF1b3RlOjAsdHJhaWxpbmdTcGFjZTowLHRyYWlsaW5nU3BhY2VOZXdMaW5lOiExfX0sY29weVN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybntmOnQuZixwcmV2TGluZUhhc0NvbnRlbnQ6dC5wcmV2TGluZUhhc0NvbnRlbnQsdGhpc0xpbmVIYXNDb250ZW50OnQudGhpc0xpbmVIYXNDb250ZW50LGJsb2NrOnQuYmxvY2ssaHRtbFN0YXRlOkNvZGVNaXJyb3IuY29weVN0YXRlKHYsdC5odG1sU3RhdGUpLGluZGVudGF0aW9uOnQuaW5kZW50YXRpb24sbG9jYWxNb2RlOnQubG9jYWxNb2RlLGxvY2FsU3RhdGU6dC5sb2NhbE1vZGU/Q29kZU1pcnJvci5jb3B5U3RhdGUodC5sb2NhbE1vZGUsdC5sb2NhbFN0YXRlKTpudWxsLGlubGluZTp0LmlubGluZSx0ZXh0OnQudGV4dCxsaW5rVGl0bGU6dC5saW5rVGl0bGUsZW06dC5lbSxzdHJvbmc6dC5zdHJvbmcsaGVhZGVyOnQuaGVhZGVyLHRhc2tMaXN0OnQudGFza0xpc3QsbGlzdDp0Lmxpc3QsbGlzdERlcHRoOnQubGlzdERlcHRoLHF1b3RlOnQucXVvdGUsdHJhaWxpbmdTcGFjZTp0LnRyYWlsaW5nU3BhY2UsdHJhaWxpbmdTcGFjZU5ld0xpbmU6dC50cmFpbGluZ1NwYWNlTmV3TGluZSxtZF9pbnNpZGU6dC5tZF9pbnNpZGV9fSx0b2tlbjpmdW5jdGlvbih0LGUpe2lmKHQuc29sKCkpe2lmKHQubWF0Y2goL15ccyokLywhMCkpcmV0dXJuIGUucHJldkxpbmVIYXNDb250ZW50PSExLGkoZSk7ZS5wcmV2TGluZUhhc0NvbnRlbnQ9ZS50aGlzTGluZUhhc0NvbnRlbnQsZS50aGlzTGluZUhhc0NvbnRlbnQ9ITAsZS5oZWFkZXI9MCxlLnRhc2tMaXN0PSExLGUuY29kZT0hMSxlLnRyYWlsaW5nU3BhY2U9MCxlLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSExLGUuZj1lLmJsb2NrO3ZhciByPXQubWF0Y2goL15ccyovLCEwKVswXS5yZXBsYWNlKC9cdC9nLCIgICAgIikubGVuZ3RoLG49NCpNYXRoLmZsb29yKChyLWUuaW5kZW50YXRpb24pLzQpO24+NCYmKG49NCk7dmFyIG89ZS5pbmRlbnRhdGlvbituO2lmKGUuaW5kZW50YXRpb25EaWZmPW8tZS5pbmRlbnRhdGlvbixlLmluZGVudGF0aW9uPW8scj4wKXJldHVybiBudWxsfXJldHVybiBlLmYodCxlKX0sYmxhbmtMaW5lOmksZ2V0VHlwZTpzfX0sInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LW1hcmtkb3duIiwibWFya2Rvd24iKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4gZS50b2tlbml6ZT1yLHIodCxlKX12YXIgaT10Lm5leHQoKTtpZigiPCI9PWkpe2lmKHQuZWF0KCIhIikpcmV0dXJuIHQuZWF0KCJbIik/dC5tYXRjaCgiQ0RBVEFbIik/cihvKCJhdG9tIiwiXV0+IikpOm51bGw6dC5tYXRjaCgiLS0iKT9yKG8oImNvbW1lbnQiLCItLT4iKSk6dC5tYXRjaCgiRE9DVFlQRSIsITAsITApPyh0LmVhdFdoaWxlKC9bXHdcLl9cLV0vKSxyKGwoMSkpKTpudWxsO2lmKHQuZWF0KCI/IikpcmV0dXJuIHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLGUudG9rZW5pemU9bygibWV0YSIsIj8+IiksIm1ldGEiO3ZhciBhPXQuZWF0KCIvIik7eD0iIjtmb3IodmFyIHM7cz10LmVhdCgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7KXgrPXM7cmV0dXJuIHg/KGI9YT8iY2xvc2VUYWciOiJvcGVuVGFnIixlLnRva2VuaXplPW4sInRhZyIpOiJ0YWcgZXJyb3IifWlmKCImIj09aSl7dmFyIHU7cmV0dXJuIHU9dC5lYXQoIiMiKT90LmVhdCgieCIpP3QuZWF0V2hpbGUoL1thLWZBLUZcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXGRdLykmJnQuZWF0KCI7Iik6dC5lYXRXaGlsZSgvW1x3XC5cLTpdLykmJnQuZWF0KCI7IiksdT8iYXRvbSI6ImVycm9yIn1yZXR1cm4gdC5lYXRXaGlsZSgvW14mPF0vKSxudWxsfWZ1bmN0aW9uIG4odCxlKXt2YXIgbj10Lm5leHQoKTtpZigiPiI9PW58fCIvIj09biYmdC5lYXQoIj4iKSlyZXR1cm4gZS50b2tlbml6ZT1yLGI9Ij4iPT1uPyJlbmRUYWciOiJzZWxmY2xvc2VUYWciLCJ0YWciO2lmKCI9Ij09bilyZXR1cm4gYj0iZXF1YWxzIixudWxsO2lmKCI8Ij09bil7ZS50b2tlbml6ZT1yO3ZhciBvPWUudG9rZW5pemUodCxlKTtyZXR1cm4gbz9vKyIgZXJyb3IiOiJlcnJvciJ9cmV0dXJuL1tcJ1wiXS8udGVzdChuKT8oZS50b2tlbml6ZT1pKG4pLGUuc3RyaW5nU3RhcnRDb2w9dC5jb2x1bW4oKSxlLnRva2VuaXplKHQsZSkpOih0LmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKSwid29yZCIpfWZ1bmN0aW9uIGkodCl7dmFyIGU9ZnVuY3Rpb24oZSxyKXtmb3IoOyFlLmVvbCgpOylpZihlLm5leHQoKT09dCl7ci50b2tlbml6ZT1uO2JyZWFrfXJldHVybiJzdHJpbmcifTtyZXR1cm4gZS5pc0luQXR0cmlidXRlPSEwLGV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcig7IW4uZW9sKCk7KXtpZihuLm1hdGNoKGUpKXtpLnRva2VuaXplPXI7YnJlYWt9bi5uZXh0KCl9cmV0dXJuIHR9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpO251bGwhPShpPWUubmV4dCgpKTspe2lmKCI8Ij09aSlyZXR1cm4gbi50b2tlbml6ZT1sKHQrMSksbi50b2tlbml6ZShlLG4pO2lmKCI+Ij09aSl7aWYoMT09dCl7bi50b2tlbml6ZT1yO2JyZWFrfXJldHVybiBuLnRva2VuaXplPWwodC0xKSxuLnRva2VuaXplKGUsbil9fXJldHVybiJtZXRhIn19ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTE7dD49MDt0LS0pQy5jYy5wdXNoKGFyZ3VtZW50c1t0XSl9ZnVuY3Rpb24gcygpe3JldHVybiBhLmFwcGx5KG51bGwsYXJndW1lbnRzKSwhMH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9VC5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0KXx8Qy5jb250ZXh0JiZDLmNvbnRleHQubm9JbmRlbnQ7Qy5jb250ZXh0PXtwcmV2OkMuY29udGV4dCx0YWdOYW1lOnQsaW5kZW50OkMuaW5kZW50ZWQsc3RhcnRPZkxpbmU6ZSxub0luZGVudDpyfX1mdW5jdGlvbiBjKCl7Qy5jb250ZXh0JiYoQy5jb250ZXh0PUMuY29udGV4dC5wcmV2KX1mdW5jdGlvbiBmKHQpe2lmKCJvcGVuVGFnIj09dClyZXR1cm4gQy50YWdOYW1lPXgsQy50YWdTdGFydD1rLmNvbHVtbigpLHMobSxoKEMuc3RhcnRPZkxpbmUpKTtpZigiY2xvc2VUYWciPT10KXt2YXIgZT0hMTtyZXR1cm4gQy5jb250ZXh0P0MuY29udGV4dC50YWdOYW1lIT14JiYoVC5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KEMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiZjKCksZT0hQy5jb250ZXh0fHxDLmNvbnRleHQudGFnTmFtZSE9eCk6ZT0hMCxlJiYodz0iZXJyb3IiKSxzKGQoZSkpfXJldHVybiBzKCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9Qy50YWdOYW1lO3JldHVybiBDLnRhZ05hbWU9Qy50YWdTdGFydD1udWxsLCJzZWxmY2xvc2VUYWciPT1lfHwiZW5kVGFnIj09ZSYmVC5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkoci50b0xvd2VyQ2FzZSgpKT8ocChyLnRvTG93ZXJDYXNlKCkpLHMoKSk6ImVuZFRhZyI9PWU/KHAoci50b0xvd2VyQ2FzZSgpKSx1KHIsdCkscygpKTpzKCl9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiYodz0iZXJyb3IiKSwiZW5kVGFnIj09ZT8oYygpLHMoKSk6KHc9ImVycm9yIixzKGFyZ3VtZW50cy5jYWxsZWUpKX19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU7Oyl7aWYoIUMuY29udGV4dClyZXR1cm47aWYoZT1DLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCFULmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShlKXx8IVQuY29udGV4dEdyYWJiZXJzW2VdLmhhc093blByb3BlcnR5KHQpKXJldHVybjtjKCl9fWZ1bmN0aW9uIG0odCl7cmV0dXJuIndvcmQiPT10Pyh3PSJhdHRyaWJ1dGUiLHMoZyxtKSk6ImVuZFRhZyI9PXR8fCJzZWxmY2xvc2VUYWciPT10P2EoKToodz0iZXJyb3IiLHMobSkpfWZ1bmN0aW9uIGcodCl7aWYoImVxdWFscyI9PXQpcmV0dXJuIHModixtKTtpZihULmFsbG93TWlzc2luZyl7aWYoIndvcmQiPT10KXJldHVybiB3PSJhdHRyaWJ1dGUiLHMoZyxtKX1lbHNlIHc9ImVycm9yIjtyZXR1cm4iZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOnMoKX1mdW5jdGlvbiB2KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6IndvcmQiPT10JiZULmFsbG93VW5xdW90ZWQ/KHc9InN0cmluZyIscygpKToodz0iZXJyb3IiLCJlbmRUYWciPT10fHwic2VsZkNsb3NlVGFnIj09dD9hKCk6cygpKX1mdW5jdGlvbiB5KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6YSgpfXZhciB4LGIsQyxrLHcsTD10LmluZGVudFVuaXQsUz1lLm11bHRpbGluZVRhZ0luZGVudEZhY3Rvcnx8MSxNPWUubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZ3x8ITAsVD1lLmh0bWxNb2RlP3thdXRvU2VsZkNsb3NlcnM6e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxmcmFtZTohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxpbXBsaWNpdGx5Q2xvc2VkOntkZDohMCxsaTohMCxvcHRncm91cDohMCxvcHRpb246ITAscDohMCxycDohMCxydDohMCx0Ym9keTohMCx0ZDohMCx0Zm9vdDohMCx0aDohMCx0cjohMH0sY29udGV4dEdyYWJiZXJzOntkZDp7ZGQ6ITAsZHQ6ITB9LGR0OntkZDohMCxkdDohMH0sbGk6e2xpOiEwfSxvcHRpb246e29wdGlvbjohMCxvcHRncm91cDohMH0sb3B0Z3JvdXA6e29wdGdyb3VwOiEwfSxwOnthZGRyZXNzOiEwLGFydGljbGU6ITAsYXNpZGU6ITAsYmxvY2txdW90ZTohMCxkaXI6ITAsZGl2OiEwLGRsOiEwLGZpZWxkc2V0OiEwLGZvb3RlcjohMCxmb3JtOiEwLGgxOiEwLGgyOiEwLGgzOiEwLGg0OiEwLGg1OiEwLGg2OiEwLGhlYWRlcjohMCxoZ3JvdXA6ITAsaHI6ITAsbWVudTohMCxuYXY6ITAsb2w6ITAscDohMCxwcmU6ITAsc2VjdGlvbjohMCx0YWJsZTohMCx1bDohMH0scnA6e3JwOiEwLHJ0OiEwfSxydDp7cnA6ITAscnQ6ITB9LHRib2R5Ont0Ym9keTohMCx0Zm9vdDohMH0sdGQ6e3RkOiEwLHRoOiEwfSx0Zm9vdDp7dGJvZHk6ITB9LHRoOnt0ZDohMCx0aDohMH0sdGhlYWQ6e3Rib2R5OiEwLHRmb290OiEwfSx0cjp7dHI6ITB9fSxkb05vdEluZGVudDp7cHJlOiEwfSxhbGxvd1VucXVvdGVkOiEwLGFsbG93TWlzc2luZzohMH06e2F1dG9TZWxmQ2xvc2Vyczp7fSxpbXBsaWNpdGx5Q2xvc2VkOnt9LGNvbnRleHRHcmFiYmVyczp7fSxkb05vdEluZGVudDp7fSxhbGxvd1VucXVvdGVkOiExLGFsbG93TWlzc2luZzohMX0sQT1lLmFsaWduQ0RBVEE7cmV0dXJue3N0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57dG9rZW5pemU6cixjYzpbXSxpbmRlbnRlZDowLHN0YXJ0T2ZMaW5lOiEwLHRhZ05hbWU6bnVsbCx0YWdTdGFydDpudWxsLGNvbnRleHQ6bnVsbH19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYoIWUudGFnTmFtZSYmdC5zb2woKSYmKGUuc3RhcnRPZkxpbmU9ITAsZS5pbmRlbnRlZD10LmluZGVudGF0aW9uKCkpLHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDt3PWI9eD1udWxsO3ZhciByPWUudG9rZW5pemUodCxlKTtpZihlLnR5cGU9Yiwocnx8YikmJiJjb21tZW50IiE9cilmb3IoQz1lLGs9dDs7KXt2YXIgbj1lLmNjLnBvcCgpfHxmO2lmKG4oYnx8cikpYnJlYWt9cmV0dXJuIGUuc3RhcnRPZkxpbmU9ITEsdyYmKHI9ImVycm9yIj09dz9yKyIgZXJyb3IiOncpLHJ9LGluZGVudDpmdW5jdGlvbih0LGUsaSl7dmFyIG89dC5jb250ZXh0O2lmKHQudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSlyZXR1cm4gdC5zdHJpbmdTdGFydENvbCsxO2lmKHQudG9rZW5pemUhPW4mJnQudG9rZW5pemUhPXJ8fG8mJm8ubm9JbmRlbnQpcmV0dXJuIGk/aS5tYXRjaCgvXihccyopLylbMF0ubGVuZ3RoOjA7aWYodC50YWdOYW1lKXJldHVybiBNP3QudGFnU3RhcnQrdC50YWdOYW1lLmxlbmd0aCsyOnQudGFnU3RhcnQrTCpTO2lmKEEmJi88IVxbQ0RBVEFcWy8udGVzdChlKSlyZXR1cm4gMDtmb3IobyYmL148XC8vLnRlc3QoZSkmJihvPW8ucHJldik7byYmIW8uc3RhcnRPZkxpbmU7KW89by5wcmV2O3JldHVybiBvP28uaW5kZW50K0w6MH0sZWxlY3RyaWNDaGFyczoiLyIsYmxvY2tDb21tZW50U3RhcnQ6IjwhLS0iLGJsb2NrQ29tbWVudEVuZDoiLS0+Iixjb25maWd1cmF0aW9uOmUuaHRtbE1vZGU/Imh0bWwiOiJ4bWwiLGhlbHBlclR5cGU6ZS5odG1sTW9kZT8iaHRtbCI6InhtbCJ9fSksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIsInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwieG1sIiksQ29kZU1pcnJvci5taW1lTW9kZXMuaGFzT3duUHJvcGVydHkoInRleHQvaHRtbCIpfHxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIse25hbWU6InhtbCIsaHRtbE1vZGU6ITB9KTtQSwcIk9YPXYgyAACIMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAc3RhdGljXGxpYlxjb2RlbWlycm9yLm1pbi5qc3dpbmRvdy5Db2RlTWlycm9yPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQocixuKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQocixuKTt0aGlzLm9wdGlvbnM9bj1ufHx7fTtmb3IodmFyIGkgaW4gYW8pIW4uaGFzT3duUHJvcGVydHkoaSkmJmFvLmhhc093blByb3BlcnR5KGkpJiYobltpXT1hb1tpXSk7aChuKTt2YXIgbz0ic3RyaW5nIj09dHlwZW9mIG4udmFsdWU/MDpuLnZhbHVlLmZpcnN0LGw9dGhpcy5kaXNwbGF5PWUocixvKTtsLndyYXBwZXIuQ29kZU1pcnJvcj10aGlzLHUodGhpcyksbi5hdXRvZm9jdXMmJiFWaSYmcGUodGhpcyksdGhpcy5zdGF0ZT17a2V5TWFwczpbXSxvdmVybGF5czpbXSxtb2RlR2VuOjAsb3ZlcndyaXRlOiExLGZvY3VzZWQ6ITEsc3VwcHJlc3NFZGl0czohMSxwYXN0ZUluY29taW5nOiExLGRyYWdnaW5nVGV4dDohMSxoaWdobGlnaHQ6bmV3ICRufSxzKHRoaXMpLG4ubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIpO3ZhciBhPW4udmFsdWU7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcgd28obi52YWx1ZSxuLm1vZGUpKSxsZSh0aGlzLHBuKSh0aGlzLGEpLEFpJiZzZXRUaW1lb3V0KGlpKGRlLHRoaXMsITApLDIwKSxtZSh0aGlzKTt2YXIgYzt0cnl7Yz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0fWNhdGNoKGYpe31jfHxuLmF1dG9mb2N1cyYmIVZpP3NldFRpbWVvdXQoaWkoRWUsdGhpcyksMjApOnplKHRoaXMpLGxlKHRoaXMsZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gc28pc28ucHJvcGVydHlJc0VudW1lcmFibGUodCkmJnNvW3RdKHRoaXMsblt0XSx1byk7Zm9yKHZhciBlPTA7ZTxwby5sZW5ndGg7KytlKXBvW2VdKHRoaXMpfSkoKX1mdW5jdGlvbiBlKHQsZSl7dmFyIHI9e30sbj1yLmlucHV0PXNpKCJ0ZXh0YXJlYSIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lOyBmb250LXNpemU6IDRweDsiKTtyZXR1cm4gV2k/bi5zdHlsZS53aWR0aD0iMTAwMHB4IjpuLnNldEF0dHJpYnV0ZSgid3JhcCIsIm9mZiIpLEdpJiYobi5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwiZmFsc2UiKSxyLmlucHV0RGl2PXNpKCJkaXYiLFtuXSxudWxsLCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIpLHIuc2Nyb2xsYmFySD1zaSgiZGl2Iixbc2koImRpdiIsbnVsbCxudWxsLCJoZWlnaHQ6IDFweCIpXSwiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIiksci5zY3JvbGxiYXJWPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiAxcHgiKV0sIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpLHIuc2Nyb2xsYmFyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpLHIuZ3V0dGVyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpLHIubGluZURpdj1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWNvZGUiKSxyLnNlbGVjdGlvbkRpdj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSIpLHIuY3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIiksci5vdGhlckN1cnNvcj1zaSgiZGl2IiwiwqAiLCJDb2RlTWlycm9yLWN1cnNvciBDb2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpLHIubWVhc3VyZT1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLW1lYXN1cmUiKSxyLmxpbmVTcGFjZT1zaSgiZGl2Iixbci5tZWFzdXJlLHIuc2VsZWN0aW9uRGl2LHIubGluZURpdixyLmN1cnNvcixyLm90aGVyQ3Vyc29yXSxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKSxyLm1vdmVyPXNpKCJkaXYiLFtzaSgiZGl2Iixbci5saW5lU3BhY2VdLCJDb2RlTWlycm9yLWxpbmVzIildLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpLHIuc2l6ZXI9c2koImRpdiIsW3IubW92ZXJdLCJDb2RlTWlycm9yLXNpemVyIiksci5oZWlnaHRGb3JjZXI9c2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIitUbysicHg7IHdpZHRoOiAxcHg7Iiksci5ndXR0ZXJzPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVycyIpLHIubGluZUd1dHRlcj1udWxsLHIuc2Nyb2xsZXI9c2koImRpdiIsW3Iuc2l6ZXIsci5oZWlnaHRGb3JjZXIsci5ndXR0ZXJzXSwiQ29kZU1pcnJvci1zY3JvbGwiKSxyLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCItMSIpLHIud3JhcHBlcj1zaSgiZGl2Iixbci5pbnB1dERpdixyLnNjcm9sbGJhckgsci5zY3JvbGxiYXJWLHIuc2Nyb2xsYmFyRmlsbGVyLHIuZ3V0dGVyRmlsbGVyLHIuc2Nyb2xsZXJdLCJDb2RlTWlycm9yIiksSGkmJihyLmd1dHRlcnMuc3R5bGUuekluZGV4PS0xLHIuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0PTApLHQuYXBwZW5kQ2hpbGQ/dC5hcHBlbmRDaGlsZChyLndyYXBwZXIpOnQoci53cmFwcGVyKSxHaSYmKG4uc3R5bGUud2lkdGg9IjBweCIpLFdpfHwoci5zY3JvbGxlci5kcmFnZ2FibGU9ITApLEZpPyhyLmlucHV0RGl2LnN0eWxlLmhlaWdodD0iMXB4IixyLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIpOkhpJiYoci5zY3JvbGxiYXJILnN0eWxlLm1pbldpZHRoPXIuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aD0iMThweCIpLHIudmlld09mZnNldD1yLmxhc3RTaXplQz0wLHIuc2hvd2luZ0Zyb209ci5zaG93aW5nVG89ZSxyLmxpbmVOdW1XaWR0aD1yLmxpbmVOdW1Jbm5lcldpZHRoPXIubGluZU51bUNoYXJzPW51bGwsci5wcmV2SW5wdXQ9IiIsci5hbGlnbldpZGdldHM9ITEsci5wb2xsaW5nRmFzdD0hMSxyLnBvbGw9bmV3ICRuLHIuY2FjaGVkQ2hhcldpZHRoPXIuY2FjaGVkVGV4dEhlaWdodD1udWxsLHIubWVhc3VyZUxpbmVDYWNoZT1bXSxyLm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCxyLmluYWNjdXJhdGVTZWxlY3Rpb249ITEsci5tYXhMaW5lPW51bGwsci5tYXhMaW5lTGVuZ3RoPTAsci5tYXhMaW5lQ2hhbmdlZD0hMSxyLndoZWVsRFg9ci53aGVlbERZPXIud2hlZWxTdGFydFg9ci53aGVlbFN0YXJ0WT1udWxsLHJ9ZnVuY3Rpb24gcihlKXtlLmRvYy5tb2RlPXQuZ2V0TW9kZShlLm9wdGlvbnMsZS5kb2MubW9kZU9wdGlvbiksZS5kb2MuaXRlcihmdW5jdGlvbih0KXt0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKX0pLGUuZG9jLmZyb250aWVyPWUuZG9jLmZpcnN0LFcoZSwxMDApLGUuc3RhdGUubW9kZUdlbisrLGUuY3VyT3AmJnVlKGUpfWZ1bmN0aW9uIG4odCl7dC5vcHRpb25zLmxpbmVXcmFwcGluZz8odC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIsdC5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoPSIiKToodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci13cmFwIiwiIiksZih0KSksbyh0KSx1ZSh0KSxfKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkKHQpfSwxMDApfWZ1bmN0aW9uIGkodCl7dmFyIGU9cmUodC5kaXNwbGF5KSxyPXQub3B0aW9ucy5saW5lV3JhcHBpbmcsbj1yJiZNYXRoLm1heCg1LHQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC9uZSh0LmRpc3BsYXkpLTMpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gVnIodC5kb2MsaSk/MDpyPyhNYXRoLmNlaWwoaS50ZXh0Lmxlbmd0aC9uKXx8MSkqZTplfX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQuZG9jLHI9aSh0KTtlLml0ZXIoZnVuY3Rpb24odCl7dmFyIGU9cih0KTtlIT10LmhlaWdodCYmeW4odCxlKX0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dm9bdC5vcHRpb25zLmtleU1hcF0scj1lLnN0eWxlO3QuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20ta2V5bWFwLVxTKy9nLCIiKSsocj8iIGNtLWtleW1hcC0iK3I6IiIpLHQuc3RhdGUuZGlzYWJsZUlucHV0PWUuZGlzYWJsZUlucHV0fWZ1bmN0aW9uIHModCl7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCIiKSt0Lm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XHMpXHMqL2csIiBjbS1zLSIpLF8odCl9ZnVuY3Rpb24gYSh0KXt1KHQpLHVlKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtnKHQpfSwyMCl9ZnVuY3Rpb24gdSh0KXt2YXIgZT10LmRpc3BsYXkuZ3V0dGVycyxyPXQub3B0aW9ucy5ndXR0ZXJzO2FpKGUpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dLG89ZS5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlciAiK2kpKTsiQ29kZU1pcnJvci1saW5lbnVtYmVycyI9PWkmJih0LmRpc3BsYXkubGluZUd1dHRlcj1vLG8uc3R5bGUud2lkdGg9KHQuZGlzcGxheS5saW5lTnVtV2lkdGh8fDEpKyJweCIpfWUuc3R5bGUuZGlzcGxheT1uPyIiOiJub25lIn1mdW5jdGlvbiBjKHQsZSl7aWYoMD09ZS5oZWlnaHQpcmV0dXJuIDA7Zm9yKHZhciByLG49ZS50ZXh0Lmxlbmd0aCxpPWU7cj1ScihpKTspe3ZhciBvPXIuZmluZCgpO2k9Z24odCxvLmZyb20ubGluZSksbis9by5mcm9tLmNoLW8udG8uY2h9Zm9yKGk9ZTtyPUJyKGkpOyl7dmFyIG89ci5maW5kKCk7bi09aS50ZXh0Lmxlbmd0aC1vLmZyb20uY2gsaT1nbih0LG8udG8ubGluZSksbis9aS50ZXh0Lmxlbmd0aC1vLnRvLmNofXJldHVybiBufWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2M7ZS5tYXhMaW5lPWduKHIsci5maXJzdCksZS5tYXhMaW5lTGVuZ3RoPWMocixlLm1heExpbmUpLGUubWF4TGluZUNoYW5nZWQ9ITAsci5pdGVyKGZ1bmN0aW9uKHQpe3ZhciBuPWMocix0KTtuPmUubWF4TGluZUxlbmd0aCYmKGUubWF4TGluZUxlbmd0aD1uLGUubWF4TGluZT10KX0pfWZ1bmN0aW9uIGgodCl7dmFyIGU9dGkodC5ndXR0ZXJzLCJDb2RlTWlycm9yLWxpbmVudW1iZXJzIik7LTE9PWUmJnQubGluZU51bWJlcnM/dC5ndXR0ZXJzPXQuZ3V0dGVycy5jb25jYXQoWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0pOmU+LTEmJiF0LmxpbmVOdW1iZXJzJiYodC5ndXR0ZXJzPXQuZ3V0dGVycy5zbGljZSgwKSx0Lmd1dHRlcnMuc3BsaWNlKGUsMSkpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2MuaGVpZ2h0LG49citGKGUpO2Uuc2l6ZXIuc3R5bGUubWluSGVpZ2h0PWUuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcD1uKyJweCIsZS5ndXR0ZXJzLnN0eWxlLmhlaWdodD1NYXRoLm1heChuLGUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LVRvKSsicHgiO3ZhciBpPU1hdGgubWF4KG4sZS5zY3JvbGxlci5zY3JvbGxIZWlnaHQpLG89ZS5zY3JvbGxlci5zY3JvbGxXaWR0aD5lLnNjcm9sbGVyLmNsaWVudFdpZHRoKzEsbD1pPmUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KzE7bD8oZS5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhclYuc3R5bGUuYm90dG9tPW8/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9aS1lLnNjcm9sbGVyLmNsaWVudEhlaWdodCtlLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KyJweCIpOihlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9IjAiKSxvPyhlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFySC5zdHlsZS5yaWdodD1sP2RpKGUubWVhc3VyZSkrInB4IjoiMCIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9ZS5zY3JvbGxlci5zY3JvbGxXaWR0aC1lLnNjcm9sbGVyLmNsaWVudFdpZHRoK2Uuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCsicHgiKTooZS5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXk9IiIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjAiKSxvJiZsPyhlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoPWRpKGUubWVhc3VyZSkrInB4Iik6ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixvJiZ0Lm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXImJnQub3B0aW9ucy5maXhlZEd1dHRlcj8oZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodD1kaShlLm1lYXN1cmUpKyJweCIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGg9ZS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCIpOmUuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXk9IiIsUGkmJjA9PT1kaShlLm1lYXN1cmUpJiYoZS5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPWUuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQ9Umk/IjE4cHgiOiIxMnB4IixlLnNjcm9sbGJhclYuc3R5bGUucG9pbnRlckV2ZW50cz1lLnNjcm9sbGJhckguc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXQuc2Nyb2xsZXIuc2Nyb2xsVG9wLGk9dC53cmFwcGVyLmNsaWVudEhlaWdodDsibnVtYmVyIj09dHlwZW9mIHI/bj1yOnImJihuPXIudG9wLGk9ci5ib3R0b20tci50b3ApLG49TWF0aC5mbG9vcihuLUkodCkpO3ZhciBvPU1hdGguY2VpbChuK2kpO3JldHVybntmcm9tOnhuKGUsbiksdG86eG4oZSxvKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10LmRpc3BsYXk7aWYoZS5hbGlnbldpZGdldHN8fGUuZ3V0dGVycy5maXJzdENoaWxkJiZ0Lm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgcj15KGUpLWUuc2Nyb2xsZXIuc2Nyb2xsTGVmdCt0LmRvYy5zY3JvbGxMZWZ0LG49ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGk9cisicHgiLG89ZS5saW5lRGl2LmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpaWYoby5hbGlnbmFibGUpZm9yKHZhciBsPTAscz1vLmFsaWduYWJsZTtsPHMubGVuZ3RoOysrbClzW2xdLnN0eWxlLmxlZnQ9aTt0Lm9wdGlvbnMuZml4ZWRHdXR0ZXImJihlLmd1dHRlcnMuc3R5bGUubGVmdD1yK24rInB4Iil9fWZ1bmN0aW9uIG0odCl7aWYoIXQub3B0aW9ucy5saW5lTnVtYmVycylyZXR1cm4hMTt2YXIgZT10LmRvYyxyPXYodC5vcHRpb25zLGUuZmlyc3QrZS5zaXplLTEpLG49dC5kaXNwbGF5O2lmKHIubGVuZ3RoIT1uLmxpbmVOdW1DaGFycyl7dmFyIGk9bi5tZWFzdXJlLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzaSgiZGl2IixyKV0sIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSksbz1pLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsbD1pLm9mZnNldFdpZHRoLW87cmV0dXJuIG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD0iIixuLmxpbmVOdW1Jbm5lcldpZHRoPU1hdGgubWF4KG8sbi5saW5lR3V0dGVyLm9mZnNldFdpZHRoLWwpLG4ubGluZU51bVdpZHRoPW4ubGluZU51bUlubmVyV2lkdGgrbCxuLmxpbmVOdW1DaGFycz1uLmxpbmVOdW1Jbm5lcldpZHRoP3IubGVuZ3RoOi0xLG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD1uLmxpbmVOdW1XaWR0aCsicHgiLCEwfXJldHVybiExfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gU3RyaW5nKHQubGluZU51bWJlckZvcm1hdHRlcihlK3QuZmlyc3RMaW5lTnVtYmVyKSl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZmkodC5zY3JvbGxlcikubGVmdC1maSh0LnNpemVyKS5sZWZ0fWZ1bmN0aW9uIGIodCxlLHIsbil7Zm9yKHZhciBpLG89dC5kaXNwbGF5LnNob3dpbmdGcm9tLGw9dC5kaXNwbGF5LnNob3dpbmdUbyxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLGE9ITA7O2E9ITEpe3ZhciB1PXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtpZigheCh0LGUscyxuKSlicmVhaztpZihpPSEwLGU9W10sQSh0KSxkKHQpLGEmJnQub3B0aW9ucy5saW5lV3JhcHBpbmcmJnUhPXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCluPSEwO2Vsc2UgaWYobj0hMSxyJiYocj1NYXRoLm1pbih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIm51bWJlciI9PXR5cGVvZiByP3I6ci50b3ApKSxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLHMuZnJvbT49dC5kaXNwbGF5LnNob3dpbmdGcm9tJiZzLnRvPD10LmRpc3BsYXkuc2hvd2luZ1RvKWJyZWFrfXJldHVybiBpJiYoVW4odCwidXBkYXRlIix0KSwodC5kaXNwbGF5LnNob3dpbmdGcm9tIT1vfHx0LmRpc3BsYXkuc2hvd2luZ1RvIT1sKSYmVW4odCwidmlld3BvcnRDaGFuZ2UiLHQsdC5kaXNwbGF5LnNob3dpbmdGcm9tLHQuZGlzcGxheS5zaG93aW5nVG8pKSxpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9dC5kaXNwbGF5LG89dC5kb2M7aWYoIWkud3JhcHBlci5jbGllbnRXaWR0aClyZXR1cm4gaS5zaG93aW5nRnJvbT1pLnNob3dpbmdUbz1vLmZpcnN0LGkudmlld09mZnNldD0wLHZvaWQgMDtpZighKCFuJiYwPT1lLmxlbmd0aCYmci5mcm9tPmkuc2hvd2luZ0Zyb20mJnIudG88aS5zaG93aW5nVG8pKXttKHQpJiYoZT1be2Zyb206by5maXJzdCx0bzpvLmZpcnN0K28uc2l6ZX1dKTt2YXIgbD1pLnNpemVyLnN0eWxlLm1hcmdpbkxlZnQ9aS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCI7aS5zY3JvbGxiYXJILnN0eWxlLmxlZnQ9dC5vcHRpb25zLmZpeGVkR3V0dGVyP2w6IjAiO3ZhciBzPTEvMDtpZih0Lm9wdGlvbnMubGluZU51bWJlcnMpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpZVthXS5kaWZmJiZlW2FdLmZyb208cyYmKHM9ZVthXS5mcm9tKTt2YXIgdT1vLmZpcnN0K28uc2l6ZSxjPU1hdGgubWF4KHIuZnJvbS10Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4sby5maXJzdCksZj1NYXRoLm1pbih1LHIudG8rdC5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtpZihpLnNob3dpbmdGcm9tPGMmJmMtaS5zaG93aW5nRnJvbTwyMCYmKGM9TWF0aC5tYXgoby5maXJzdCxpLnNob3dpbmdGcm9tKSksaS5zaG93aW5nVG8+ZiYmaS5zaG93aW5nVG8tZjwyMCYmKGY9TWF0aC5taW4odSxpLnNob3dpbmdUbykpLFFpKWZvcihjPWJuKEdyKG8sZ24obyxjKSkpO3U+ZiYmVnIobyxnbihvLGYpKTspKytmO3ZhciBoPVt7ZnJvbTpNYXRoLm1heChpLnNob3dpbmdGcm9tLG8uZmlyc3QpLHRvOk1hdGgubWluKGkuc2hvd2luZ1RvLHUpfV07aWYoaD1oWzBdLmZyb20+PWhbMF0udG8/W106TChoLGUpLFFpKWZvcih2YXIgYT0wO2E8aC5sZW5ndGg7KythKWZvcih2YXIgZCxwPWhbYV07ZD1CcihnbihvLHAudG8tMSkpOyl7dmFyIGc9ZC5maW5kKCkuZnJvbS5saW5lO2lmKCEoZz5wLmZyb20pKXtoLnNwbGljZShhLS0sMSk7YnJlYWt9cC50bz1nfWZvcih2YXIgdj0wLGE9MDthPGgubGVuZ3RoOysrYSl7dmFyIHA9aFthXTtwLmZyb208YyYmKHAuZnJvbT1jKSxwLnRvPmYmJihwLnRvPWYpLHAuZnJvbT49cC50bz9oLnNwbGljZShhLS0sMSk6dis9cC50by1wLmZyb219aWYoIW4mJnY9PWYtYyYmYz09aS5zaG93aW5nRnJvbSYmZj09aS5zaG93aW5nVG8pcmV0dXJuIHcodCksdm9pZCAwO2guc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmZyb20tZS5mcm9tfSk7dHJ5e3ZhciB5PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYil7fS43KihmLWMpPnYmJihpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIpLFModCxjLGYsaCxzKSxpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0iIix5JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT15JiZ5Lm9mZnNldEhlaWdodCYmeS5mb2N1cygpO3ZhciB4PWMhPWkuc2hvd2luZ0Zyb218fGYhPWkuc2hvd2luZ1RvfHxpLmxhc3RTaXplQyE9aS53cmFwcGVyLmNsaWVudEhlaWdodDtyZXR1cm4geCYmKGkubGFzdFNpemVDPWkud3JhcHBlci5jbGllbnRIZWlnaHQsVyh0LDQwMCkpLGkuc2hvd2luZ0Zyb209YyxpLnNob3dpbmdUbz1mLEModCksdyh0KSwhMH19ZnVuY3Rpb24gQyh0KXtmb3IodmFyIGUscj10LmRpc3BsYXksbj1yLmxpbmVEaXYub2Zmc2V0VG9wLGk9ci5saW5lRGl2LmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpaWYoaS5saW5lT2JqKXtpZihIaSl7dmFyIG89aS5vZmZzZXRUb3AraS5vZmZzZXRIZWlnaHQ7ZT1vLW4sbj1vfWVsc2V7dmFyIGw9ZmkoaSk7ZT1sLmJvdHRvbS1sLnRvcH12YXIgcz1pLmxpbmVPYmouaGVpZ2h0LWU7aWYoMj5lJiYoZT1yZShyKSkscz4uMDAxfHwtLjAwMT5zKXt5bihpLmxpbmVPYmosZSk7dmFyIGE9aS5saW5lT2JqLndpZGdldHM7aWYoYSlmb3IodmFyIHU9MDt1PGEubGVuZ3RoOysrdSlhW3VdLmhlaWdodD1hW3VdLm5vZGUub2Zmc2V0SGVpZ2h0fX19ZnVuY3Rpb24gdyh0KXt2YXIgZT10LmRpc3BsYXkudmlld09mZnNldD1Dbih0LGduKHQuZG9jLHQuZGlzcGxheS5zaG93aW5nRnJvbSkpO3QuZGlzcGxheS5tb3Zlci5zdHlsZS50b3A9ZSsicHgifWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RofHwwO24+cjsrK3Ipe2Zvcih2YXIgaT1lW3JdLG89W10sbD1pLmRpZmZ8fDAscz0wLGE9dC5sZW5ndGg7YT5zOysrcyl7dmFyIHU9dFtzXTtpLnRvPD11LmZyb20mJmkuZGlmZj9vLnB1c2goe2Zyb206dS5mcm9tK2wsdG86dS50bytsfSk6aS50bzw9dS5mcm9tfHxpLmZyb20+PXUudG8/by5wdXNoKHUpOihpLmZyb20+dS5mcm9tJiZvLnB1c2goe2Zyb206dS5mcm9tLHRvOmkuZnJvbX0pLGkudG88dS50byYmby5wdXNoKHtmcm9tOmkudG8rbCx0bzp1LnRvK2x9KSl9dD1vfXJldHVybiB0fWZ1bmN0aW9uIGsodCl7Zm9yKHZhciBlPXQuZGlzcGxheSxyPXt9LG49e30saT1lLmd1dHRlcnMuZmlyc3RDaGlsZCxvPTA7aTtpPWkubmV4dFNpYmxpbmcsKytvKXJbdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0TGVmdCxuW3Qub3B0aW9ucy5ndXR0ZXJzW29dXT1pLm9mZnNldFdpZHRoO3JldHVybntmaXhlZFBvczp5KGUpLGd1dHRlclRvdGFsV2lkdGg6ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGd1dHRlckxlZnQ6cixndXR0ZXJXaWR0aDpuLHdyYXBwZXJXaWR0aDplLndyYXBwZXIuY2xpZW50V2lkdGh9fWZ1bmN0aW9uIFModCxlLHIsbixpKXtmdW5jdGlvbiBvKGUpe3ZhciByPWUubmV4dFNpYmxpbmc7cmV0dXJuIFdpJiZLaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD09ZT8oZS5zdHlsZS5kaXNwbGF5PSJub25lIixlLmxpbmVPYmo9bnVsbCk6ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLHJ9dmFyIGw9ayh0KSxzPXQuZGlzcGxheSxhPXQub3B0aW9ucy5saW5lTnVtYmVycztuLmxlbmd0aHx8V2kmJnQuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXR8fGFpKHMubGluZURpdik7dmFyIHU9cy5saW5lRGl2LGM9dS5maXJzdENoaWxkLGY9bi5zaGlmdCgpLGg9ZTtmb3IodC5kb2MuaXRlcihlLHIsZnVuY3Rpb24oZSl7aWYoZiYmZi50bz09aCYmKGY9bi5zaGlmdCgpKSxWcih0LmRvYyxlKSl7aWYoMCE9ZS5oZWlnaHQmJnluKGUsMCksZS53aWRnZXRzJiZjJiZjLnByZXZpb3VzU2libGluZylmb3IodmFyIHI9MDtyPGUud2lkZ2V0cy5sZW5ndGg7KytyKXt2YXIgcz1lLndpZGdldHNbcl07aWYocy5zaG93SWZIaWRkZW4pe3ZhciBkPWMucHJldmlvdXNTaWJsaW5nO2lmKC9wcmUvaS50ZXN0KGQubm9kZU5hbWUpKXt2YXIgcD1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpO2QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocCxkKSxwLmFwcGVuZENoaWxkKGQpLGQ9cH12YXIgZz1kLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzLm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKSk7cy5oYW5kbGVNb3VzZUV2ZW50c3x8KGcuaWdub3JlRXZlbnRzPSEwKSxUKHMsZyxkLGwpfX19ZWxzZSBpZihmJiZmLmZyb208PWgmJmYudG8+aCl7Zm9yKDtjLmxpbmVPYmohPWU7KWM9byhjKTthJiZoPj1pJiZjLmxpbmVOdW1iZXImJmNpKGMubGluZU51bWJlcix2KHQub3B0aW9ucyxoKSksYz1jLm5leHRTaWJsaW5nfWVsc2V7aWYoZS53aWRnZXRzKWZvcih2YXIgbSx5PTAsYj1jO2ImJjIwPnk7Kyt5LGI9Yi5uZXh0U2libGluZylpZihiLmxpbmVPYmo9PWUmJi9kaXYvaS50ZXN0KGIubm9kZU5hbWUpKXttPWI7YnJlYWt9dmFyIHg9TSh0LGUsaCxsLG0pO2lmKHghPW0pdS5pbnNlcnRCZWZvcmUoeCxjKTtlbHNle2Zvcig7YyE9bTspYz1vKGMpO2M9Yy5uZXh0U2libGluZ314LmxpbmVPYmo9ZX0rK2h9KTtjOyljPW8oYyl9ZnVuY3Rpb24gTSh0LGUscixuLGkpe3ZhciBvLGw9cm4odCxlKSxzPWwucHJlLGE9ZS5ndXR0ZXJNYXJrZXJzLHU9dC5kaXNwbGF5LGM9bC5iZ0NsYXNzP2wuYmdDbGFzcysiICIrKGUuYmdDbGFzc3x8IiIpOmUuYmdDbGFzcztpZighKHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YXx8Y3x8ZS53cmFwQ2xhc3N8fGUud2lkZ2V0cykpcmV0dXJuIHM7aWYoaSl7aS5hbGlnbmFibGU9bnVsbDtmb3IodmFyIGYsaD0hMCxkPTAscD1udWxsLGc9aS5maXJzdENoaWxkO2c7Zz1mKWlmKGY9Zy5uZXh0U2libGluZywvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChnLmNsYXNzTmFtZSkpe2Zvcih2YXIgbT0wO208ZS53aWRnZXRzLmxlbmd0aDsrK20pe3ZhciB5PWUud2lkZ2V0c1ttXTtpZih5Lm5vZGU9PWcuZmlyc3RDaGlsZCl7eS5hYm92ZXx8cHx8KHA9ZyksVCh5LGcsaSxuKSwrK2Q7YnJlYWt9fWlmKG09PWUud2lkZ2V0cy5sZW5ndGgpe2g9ITE7YnJlYWt9fWVsc2UgaS5yZW1vdmVDaGlsZChnKTtpLmluc2VydEJlZm9yZShzLHApLGgmJmQ9PWUud2lkZ2V0cy5sZW5ndGgmJihvPWksaS5jbGFzc05hbWU9ZS53cmFwQ2xhc3N8fCIiKX1pZihvfHwobz1zaSgiZGl2IixudWxsLGUud3JhcENsYXNzLCJwb3NpdGlvbjogcmVsYXRpdmUiKSxvLmFwcGVuZENoaWxkKHMpKSxjJiZvLmluc2VydEJlZm9yZShzaSgiZGl2IixudWxsLGMrIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIiksby5maXJzdENoaWxkKSx0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEpe3ZhciBiPW8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiKyh0Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bi5maXhlZFBvczotbi5ndXR0ZXJUb3RhbFdpZHRoKSsicHgiKSxvLmZpcnN0Q2hpbGQpO2lmKHQub3B0aW9ucy5maXhlZEd1dHRlciYmKG8uYWxpZ25hYmxlfHwoby5hbGlnbmFibGU9W10pKS5wdXNoKGIpLCF0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEmJmFbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXXx8KG8ubGluZU51bWJlcj1iLmFwcGVuZENoaWxkKHNpKCJkaXYiLHYodC5vcHRpb25zLHIpLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIituLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSsicHg7IHdpZHRoOiAiK3UubGluZU51bUlubmVyV2lkdGgrInB4IikpKSxhKWZvcih2YXIgeD0wO3g8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysreCl7dmFyIEM9dC5vcHRpb25zLmd1dHRlcnNbeF0sdz1hLmhhc093blByb3BlcnR5KEMpJiZhW0NdO3cmJmIuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3ddLCJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFtDXSsicHg7IHdpZHRoOiAiK24uZ3V0dGVyV2lkdGhbQ10rInB4IikpfX1pZihIaSYmKG8uc3R5bGUuekluZGV4PTIpLGUud2lkZ2V0cyYmbyE9aSlmb3IodmFyIG09MCxMPWUud2lkZ2V0czttPEwubGVuZ3RoOysrbSl7dmFyIHk9TFttXSxrPXNpKCJkaXYiLFt5Lm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTt5LmhhbmRsZU1vdXNlRXZlbnRzfHwoay5pZ25vcmVFdmVudHM9ITApLFQoeSxrLG8sbikseS5hYm92ZT9vLmluc2VydEJlZm9yZShrLHQub3B0aW9ucy5saW5lTnVtYmVycyYmMCE9ZS5oZWlnaHQ/YjpzKTpvLmFwcGVuZENoaWxkKGspLFVuKHksInJlZHJhdyIpfXJldHVybiBvfWZ1bmN0aW9uIFQodCxlLHIsbil7aWYodC5ub0hTY3JvbGwpeyhyLmFsaWduYWJsZXx8KHIuYWxpZ25hYmxlPVtdKSkucHVzaChlKTt2YXIgaT1uLndyYXBwZXJXaWR0aDtlLnN0eWxlLmxlZnQ9bi5maXhlZFBvcysicHgiLHQuY292ZXJHdXR0ZXJ8fChpLT1uLmd1dHRlclRvdGFsV2lkdGgsZS5zdHlsZS5wYWRkaW5nTGVmdD1uLmd1dHRlclRvdGFsV2lkdGgrInB4IiksZS5zdHlsZS53aWR0aD1pKyJweCJ9dC5jb3Zlckd1dHRlciYmKGUuc3R5bGUuekluZGV4PTUsZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHQubm9IU2Nyb2xsfHwoZS5zdHlsZS5tYXJnaW5MZWZ0PS1uLmd1dHRlclRvdGFsV2lkdGgrInB4IikpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5kaXNwbGF5LHI9amUodC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvKTtpZihyfHx0Lm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3Rpbmc/SCh0KTplLmN1cnNvci5zdHlsZS5kaXNwbGF5PWUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIscj9lLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSJub25lIjpOKHQpLHQub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKXt2YXIgbj1RKHQsdC5kb2Muc2VsLmhlYWQsImRpdiIpLGk9ZmkoZS53cmFwcGVyKSxvPWZpKGUubGluZURpdik7ZS5pbnB1dERpdi5zdHlsZS50b3A9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50SGVpZ2h0LTEwLG4udG9wK28udG9wLWkudG9wKSkrInB4IixlLmlucHV0RGl2LnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50V2lkdGgtMTAsbi5sZWZ0K28ubGVmdC1pLmxlZnQpKSsicHgifX1mdW5jdGlvbiBIKHQpe3ZhciBlPXQuZGlzcGxheSxyPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2Iik7ZS5jdXJzb3Iuc3R5bGUubGVmdD1yLmxlZnQrInB4IixlLmN1cnNvci5zdHlsZS50b3A9ci50b3ArInB4IixlLmN1cnNvci5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxyLmJvdHRvbS1yLnRvcCkqdC5vcHRpb25zLmN1cnNvckhlaWdodCsicHgiLGUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5vdGhlcj8oZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLGUub3RoZXJDdXJzb3Iuc3R5bGUubGVmdD1yLm90aGVyLmxlZnQrInB4IixlLm90aGVyQ3Vyc29yLnN0eWxlLnRvcD1yLm90aGVyLnRvcCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0PS44NSooci5vdGhlci5ib3R0b20tci5vdGhlci50b3ApKyJweCIpOmUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZnVuY3Rpb24gTih0KXtmdW5jdGlvbiBlKHQsZSxyLG4pezA+ZSYmKGU9MCksbC5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLXNlbGVjdGVkIiwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiK3QrInB4OyB0b3A6ICIrZSsicHg7IHdpZHRoOiAiKyhudWxsPT1yP3MtdDpyKSsicHg7IGhlaWdodDogIisobi1lKSsicHgiKSl9ZnVuY3Rpb24gcihyLG4sbyl7ZnVuY3Rpb24gbChlLG4pe3JldHVybiBxKHQsWWUocixlKSwiZGl2IixmLG4pfXZhciB1LGMsZj1nbihpLHIpLGg9Zi50ZXh0Lmxlbmd0aDtyZXR1cm4gZ2kod24oZiksbnx8MCxudWxsPT1vP2g6byxmdW5jdGlvbih0LHIsaSl7dmFyIGYsZCxwLGc9bCh0LCJsZWZ0Iik7aWYodD09cilmPWcsZD1wPWcubGVmdDtlbHNle2lmKGY9bChyLTEsInJpZ2h0IiksInJ0bCI9PWkpe3ZhciBtPWc7Zz1mLGY9bX1kPWcubGVmdCxwPWYucmlnaHR9bnVsbD09biYmMD09dCYmKGQ9YSksZi50b3AtZy50b3A+MyYmKGUoZCxnLnRvcCxudWxsLGcuYm90dG9tKSxkPWEsZy5ib3R0b208Zi50b3AmJmUoZCxnLmJvdHRvbSxudWxsLGYudG9wKSksbnVsbD09byYmcj09aCYmKHA9cyksKCF1fHxnLnRvcDx1LnRvcHx8Zy50b3A9PXUudG9wJiZnLmxlZnQ8dS5sZWZ0KSYmKHU9ZyksKCFjfHxmLmJvdHRvbT5jLmJvdHRvbXx8Zi5ib3R0b209PWMuYm90dG9tJiZmLnJpZ2h0PmMucmlnaHQpJiYoYz1mKSxhKzE+ZCYmKGQ9YSksZShkLGYudG9wLHAtZCxmLmJvdHRvbSl9KSx7c3RhcnQ6dSxlbmQ6Y319dmFyIG49dC5kaXNwbGF5LGk9dC5kb2Msbz10LmRvYy5zZWwsbD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscz1uLmxpbmVTcGFjZS5vZmZzZXRXaWR0aCxhPVAodC5kaXNwbGF5KTtpZihvLmZyb20ubGluZT09by50by5saW5lKXIoby5mcm9tLmxpbmUsby5mcm9tLmNoLG8udG8uY2gpO2Vsc2V7dmFyIHU9Z24oaSxvLmZyb20ubGluZSksYz1nbihpLG8udG8ubGluZSksZj1HcihpLHUpPT1HcihpLGMpLGg9cihvLmZyb20ubGluZSxvLmZyb20uY2gsZj91LnRleHQubGVuZ3RoOm51bGwpLmVuZCxkPXIoby50by5saW5lLGY/MDpudWxsLG8udG8uY2gpLnN0YXJ0O2YmJihoLnRvcDxkLnRvcC0yPyhlKGgucmlnaHQsaC50b3AsbnVsbCxoLmJvdHRvbSksZShhLGQudG9wLGQubGVmdCxkLmJvdHRvbSkpOmUoaC5yaWdodCxoLnRvcCxkLmxlZnQtaC5yaWdodCxoLmJvdHRvbSkpLGguYm90dG9tPGQudG9wJiZlKGEsaC5ib3R0b20sbnVsbCxkLnRvcCl9dWkobi5zZWxlY3Rpb25EaXYsbCksbi5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheT0iIn1mdW5jdGlvbiBEKHQpe2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIGU9dC5kaXNwbGF5O2NsZWFySW50ZXJ2YWwoZS5ibGlua2VyKTt2YXIgcj0hMDtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0iIix0Lm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlPjAmJihlLmJsaW5rZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0ocj0hcik/IiI6ImhpZGRlbiJ9LHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpKX19ZnVuY3Rpb24gVyh0LGUpe3QuZG9jLm1vZGUuc3RhcnRTdGF0ZSYmdC5kb2MuZnJvbnRpZXI8dC5kaXNwbGF5LnNob3dpbmdUbyYmdC5zdGF0ZS5oaWdobGlnaHQuc2V0KGUsaWkoTyx0KSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmRvYztpZihlLmZyb250aWVyPGUuZmlyc3QmJihlLmZyb250aWVyPWUuZmlyc3QpLCEoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdUbykpe3ZhciByLG49K25ldyBEYXRlK3Qub3B0aW9ucy53b3JrVGltZSxpPWJyKGUubW9kZSx6KHQsZS5mcm9udGllcikpLG89W107ZS5pdGVyKGUuZnJvbnRpZXIsTWF0aC5taW4oZS5maXJzdCtlLnNpemUsdC5kaXNwbGF5LnNob3dpbmdUbys1MDApLGZ1bmN0aW9uKGwpe2lmKGUuZnJvbnRpZXI+PXQuZGlzcGxheS5zaG93aW5nRnJvbSl7dmFyIHM9bC5zdHlsZXM7bC5zdHlsZXM9UXIodCxsLGksITApO2Zvcih2YXIgYT0hc3x8cy5sZW5ndGghPWwuc3R5bGVzLmxlbmd0aCx1PTA7IWEmJnU8cy5sZW5ndGg7Kyt1KWE9c1t1XSE9bC5zdHlsZXNbdV07YSYmKHImJnIuZW5kPT1lLmZyb250aWVyP3IuZW5kKys6by5wdXNoKHI9e3N0YXJ0OmUuZnJvbnRpZXIsZW5kOmUuZnJvbnRpZXIrMX0pKSxsLnN0YXRlQWZ0ZXI9YnIoZS5tb2RlLGkpfWVsc2UgdG4odCxsLnRleHQsaSksbC5zdGF0ZUFmdGVyPTA9PWUuZnJvbnRpZXIlNT9icihlLm1vZGUsaSk6bnVsbDtyZXR1cm4rK2UuZnJvbnRpZXIsK25ldyBEYXRlPm4/KFcodCx0Lm9wdGlvbnMud29ya0RlbGF5KSwhMCk6dm9pZCAwfSksby5sZW5ndGgmJmxlKHQsZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoOysrdCl1ZSh0aGlzLG9bdF0uc3RhcnQsb1t0XS5lbmQpfSkoKX19ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuLGksbz10LmRvYyxsPXI/LTE6ZS0odC5kb2MubW9kZS5pbm5lck1vZGU/MWUzOjEwMCkscz1lO3M+bDstLXMpe2lmKHM8PW8uZmlyc3QpcmV0dXJuIG8uZmlyc3Q7dmFyIGE9Z24obyxzLTEpO2lmKGEuc3RhdGVBZnRlciYmKCFyfHxzPD1vLmZyb250aWVyKSlyZXR1cm4gczt2YXIgdT1abihhLnRleHQsbnVsbCx0Lm9wdGlvbnMudGFiU2l6ZSk7KG51bGw9PWl8fG4+dSkmJihpPXMtMSxuPXUpfXJldHVybiBpfWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXQuZG9jLGk9dC5kaXNwbGF5O2lmKCFuLm1vZGUuc3RhcnRTdGF0ZSlyZXR1cm4hMDt2YXIgbz1FKHQsZSxyKSxsPW8+bi5maXJzdCYmZ24obixvLTEpLnN0YXRlQWZ0ZXI7cmV0dXJuIGw9bD9icihuLm1vZGUsbCk6eHIobi5tb2RlKSxuLml0ZXIobyxlLGZ1bmN0aW9uKHIpe3RuKHQsci50ZXh0LGwpO3ZhciBzPW89PWUtMXx8MD09byU1fHxvPj1pLnNob3dpbmdGcm9tJiZvPGkuc2hvd2luZ1RvO3Iuc3RhdGVBZnRlcj1zP2JyKG4ubW9kZSxsKTpudWxsLCsrb30pLHImJihuLmZyb250aWVyPW8pLGx9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5saW5lU3BhY2Uub2Zmc2V0VG9wfWZ1bmN0aW9uIEYodCl7cmV0dXJuIHQubW92ZXIub2Zmc2V0SGVpZ2h0LXQubGluZVNwYWNlLm9mZnNldEhlaWdodH1mdW5jdGlvbiBQKHQpe3ZhciBlPXVpKHQubWVhc3VyZSxzaSgicHJlIixudWxsLG51bGwsInRleHQtYWxpZ246IGxlZnQiKSkuYXBwZW5kQ2hpbGQoc2koInNwYW4iLCJ4IikpO3JldHVybiBlLm9mZnNldExlZnR9ZnVuY3Rpb24gUih0LGUscixuLGkpe3ZhciBvPS0xO2lmKG49bnx8Vih0LGUpLG4uY3J1ZGUpe3ZhciBsPW4ubGVmdCtyKm4ud2lkdGg7cmV0dXJue2xlZnQ6bCxyaWdodDpsK24ud2lkdGgsdG9wOm4udG9wLGJvdHRvbTpuLmJvdHRvbX19Zm9yKHZhciBzPXI7O3MrPW8pe3ZhciBhPW5bc107aWYoYSlicmVhazswPm8mJjA9PXMmJihvPTEpfXJldHVybiBpPXM+cj8ibGVmdCI6cj5zPyJyaWdodCI6aSwibGVmdCI9PWkmJmEubGVmdFNpZGU/YT1hLmxlZnRTaWRlOiJyaWdodCI9PWkmJmEucmlnaHRTaWRlJiYoYT1hLnJpZ2h0U2lkZSkse2xlZnQ6cj5zP2EucmlnaHQ6YS5sZWZ0LHJpZ2h0OnM+cj9hLmxlZnQ6YS5yaWdodCx0b3A6YS50b3AsYm90dG9tOmEuYm90dG9tfX1mdW5jdGlvbiBCKHQsZSl7Zm9yKHZhciByPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtpZihpLnRleHQ9PWUudGV4dCYmaS5tYXJrZWRTcGFucz09ZS5tYXJrZWRTcGFucyYmdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoPT1pLndpZHRoJiZpLmNsYXNzZXM9PWUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzcylyZXR1cm4gaX19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPUIodCxlKTtyJiYoci50ZXh0PXIubWVhc3VyZT1yLm1hcmtlZFNwYW5zPW51bGwpfWZ1bmN0aW9uIFYodCxlKXt2YXIgcj1CKHQsZSk7aWYocilyZXR1cm4gci5tZWFzdXJlO3ZhciBuPUsodCxlKSxpPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG89e3RleHQ6ZS50ZXh0LHdpZHRoOnQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCxtYXJrZWRTcGFuczplLm1hcmtlZFNwYW5zLG1lYXN1cmU6bixjbGFzc2VzOmUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzc307cmV0dXJuIDE2PT1pLmxlbmd0aD9pWysrdC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3MlMTZdPW86aS5wdXNoKG8pLG59ZnVuY3Rpb24gSyh0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9dC50b3AtcC50b3Ascj10LmJvdHRvbS1wLnRvcDtyPnYmJihyPXYpLDA+ZSYmKGU9MCk7Zm9yKHZhciBuPWcubGVuZ3RoLTI7bj49MDtuLT0yKXt2YXIgaT1nW25dLG89Z1tuKzFdO2lmKCEoaT5yfHxlPm8pJiYoZT49aSYmbz49cnx8aT49ZSYmcj49b3x8TWF0aC5taW4ocixvKS1NYXRoLm1heChlLGkpPj1yLWU+PjEpKXtnW25dPU1hdGgubWluKGUsaSksZ1tuKzFdPU1hdGgubWF4KHIsbyk7YnJlYWt9fXJldHVybiAwPm4mJihuPWcubGVuZ3RoLGcucHVzaChlLHIpKSx7bGVmdDp0LmxlZnQtcC5sZWZ0LHJpZ2h0OnQucmlnaHQtcC5sZWZ0LHRvcDpuLGJvdHRvbTpudWxsfX1mdW5jdGlvbiBuKHQpe3QuYm90dG9tPWdbdC50b3ArMV0sdC50b3A9Z1t0LnRvcF19aWYoIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFUodCxlKTt2YXIgaT10LmRpc3BsYXksbz1uaShlLnRleHQubGVuZ3RoKSxsPXJuKHQsZSxvLCEwKS5wcmU7aWYoQWkmJiFIaSYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmwuY2hpbGROb2Rlcy5sZW5ndGg+MTAwKXtmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MTAsdT1sLmNoaWxkTm9kZXMubGVuZ3RoLGM9MCxmPU1hdGguY2VpbCh1L2EpO2Y+YzsrK2Mpe2Zvcih2YXIgaD1zaSgiZGl2IixudWxsLG51bGwsImRpc3BsYXk6IGlubGluZS1ibG9jayIpLGQ9MDthPmQmJnU7KytkKWguYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKSwtLXU7cy5hcHBlbmRDaGlsZChoKX1sLmFwcGVuZENoaWxkKHMpfXVpKGkubWVhc3VyZSxsKTt2YXIgcD1maShpLmxpbmVEaXYpLGc9W10sbT1uaShlLnRleHQubGVuZ3RoKSx2PWwub2Zmc2V0SGVpZ2h0O05pJiZpLm1lYXN1cmUuZmlyc3QhPWwmJnVpKGkubWVhc3VyZSxsKTtmb3IodmFyIHksYz0wO2M8by5sZW5ndGg7KytjKWlmKHk9b1tjXSl7dmFyIGI9eSx4PW51bGw7aWYoL1xiQ29kZU1pcnJvci13aWRnZXRcYi8udGVzdCh5LmNsYXNzTmFtZSkmJnkuZ2V0Q2xpZW50UmVjdHMpezE9PXkuZmlyc3RDaGlsZC5ub2RlVHlwZSYmKGI9eS5maXJzdENoaWxkKTt2YXIgQz1iLmdldENsaWVudFJlY3RzKCk7Qy5sZW5ndGg+MSYmKHg9bVtjXT1yKENbMF0pLHgucmlnaHRTaWRlPXIoQ1tDLmxlbmd0aC0xXSkpfXh8fCh4PW1bY109cihmaShiKSkpLHkubWVhc3VyZVJpZ2h0JiYoeC5yaWdodD1maSh5Lm1lYXN1cmVSaWdodCkubGVmdCkseS5sZWZ0U2lkZSYmKHgubGVmdFNpZGU9cihmaSh5LmxlZnRTaWRlKSkpfWFpKHQuZGlzcGxheS5tZWFzdXJlKTtmb3IodmFyIHksYz0wO2M8bS5sZW5ndGg7KytjKSh5PW1bY10pJiYobih5KSx5LmxlZnRTaWRlJiZuKHkubGVmdFNpZGUpLHkucmlnaHRTaWRlJiZuKHkucmlnaHRTaWRlKSk7cmV0dXJuIG19ZnVuY3Rpb24gVSh0LGUpe3ZhciByPW5ldyBibyhlLnRleHQuc2xpY2UoMCwxMDApLG51bGwpO2UudGV4dENsYXNzJiYoci50ZXh0Q2xhc3M9ZS50ZXh0Q2xhc3MpO3ZhciBuPUsodCxyKSxpPVIodCxyLDAsbiwibGVmdCIpLG89Uih0LHIsOTksbiwicmlnaHQiKTtyZXR1cm57Y3J1ZGU6ITAsdG9wOmkudG9wLGxlZnQ6aS5sZWZ0LGJvdHRvbTppLmJvdHRvbSx3aWR0aDooby5yaWdodC1pLmxlZnQpLzEwMH19ZnVuY3Rpb24gWCh0LGUpe3ZhciByPSExO2lmKGUubWFya2VkU3BhbnMpZm9yKHZhciBuPTA7bjxlLm1hcmtlZFNwYW5zOysrbil7dmFyIGk9ZS5tYXJrZWRTcGFuc1tuXTshaS5jb2xsYXBzZWR8fG51bGwhPWkudG8mJmkudG8hPWUudGV4dC5sZW5ndGh8fChyPSEwKX12YXIgbz0hciYmQih0LGUpO2lmKG98fGUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFIodCxlLGUudGV4dC5sZW5ndGgsbyYmby5tZWFzdXJlLCJyaWdodCIpLnJpZ2h0O3ZhciBsPXJuKHQsZSxudWxsLCEwKS5wcmUscz1sLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSk7cmV0dXJuIHVpKHQuZGlzcGxheS5tZWFzdXJlLGwpLGZpKHMpLnJpZ2h0LWZpKHQuZGlzcGxheS5saW5lRGl2KS5sZWZ0fWZ1bmN0aW9uIF8odCl7dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zPTAsdC5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aD10LmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodD1udWxsLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fCh0LmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApLHQuZGlzcGxheS5saW5lTnVtQ2hhcnM9bnVsbH1mdW5jdGlvbiBZKCl7cmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBqKCl7cmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wfWZ1bmN0aW9uICQodCxlLHIsbil7aWYoZS53aWRnZXRzKWZvcih2YXIgaT0wO2k8ZS53aWRnZXRzLmxlbmd0aDsrK2kpaWYoZS53aWRnZXRzW2ldLmFib3ZlKXt2YXIgbz1ZcihlLndpZGdldHNbaV0pO3IudG9wKz1vLHIuYm90dG9tKz1vfWlmKCJsaW5lIj09bilyZXR1cm4gcjtufHwobj0ibG9jYWwiKTt2YXIgbD1Dbih0LGUpO2lmKCJsb2NhbCI9PW4/bCs9SSh0LmRpc3BsYXkpOmwtPXQuZGlzcGxheS52aWV3T2Zmc2V0LCJwYWdlIj09bnx8IndpbmRvdyI9PW4pe3ZhciBzPWZpKHQuZGlzcGxheS5saW5lU3BhY2UpO2wrPXMudG9wKygid2luZG93Ij09bj8wOmooKSk7dmFyIGE9cy5sZWZ0Kygid2luZG93Ij09bj8wOlkoKSk7ci5sZWZ0Kz1hLHIucmlnaHQrPWF9cmV0dXJuIHIudG9wKz1sLHIuYm90dG9tKz1sLHJ9ZnVuY3Rpb24gWih0LGUscil7aWYoImRpdiI9PXIpcmV0dXJuIGU7dmFyIG49ZS5sZWZ0LGk9ZS50b3A7aWYoInBhZ2UiPT1yKW4tPVkoKSxpLT1qKCk7ZWxzZSBpZigibG9jYWwiPT1yfHwhcil7dmFyIG89ZmkodC5kaXNwbGF5LnNpemVyKTtuKz1vLmxlZnQsaSs9by50b3B9dmFyIGw9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7cmV0dXJue2xlZnQ6bi1sLmxlZnQsdG9wOmktbC50b3B9fWZ1bmN0aW9uIHEodCxlLHIsbixpKXtyZXR1cm4gbnx8KG49Z24odC5kb2MsZS5saW5lKSksJCh0LG4sUih0LG4sZS5jaCxudWxsLGkpLHIpfWZ1bmN0aW9uIFEodCxlLHIsbixpKXtmdW5jdGlvbiBvKGUsbyl7dmFyIGw9Uih0LG4sZSxpLG8/InJpZ2h0IjoibGVmdCIpO3JldHVybiBvP2wubGVmdD1sLnJpZ2h0OmwucmlnaHQ9bC5sZWZ0LCQodCxuLGwscil9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXNbZV0sbj1yLmxldmVsJTI7cmV0dXJuIHQ9PW1pKHIpJiZlJiZyLmxldmVsPHNbZS0xXS5sZXZlbD8ocj1zWy0tZV0sdD12aShyKS0oci5sZXZlbCUyPzA6MSksbj0hMCk6dD09dmkocikmJmU8cy5sZW5ndGgtMSYmci5sZXZlbDxzW2UrMV0ubGV2ZWwmJihyPXNbKytlXSx0PW1pKHIpLXIubGV2ZWwlMixuPSExKSxuJiZ0PT1yLnRvJiZ0PnIuZnJvbT9vKHQtMSk6byh0LG4pfW49bnx8Z24odC5kb2MsZS5saW5lKSxpfHwoaT1WKHQsbikpO3ZhciBzPXduKG4pLGE9ZS5jaDtpZighcylyZXR1cm4gbyhhKTt2YXIgdT1MaShzLGEpLGM9bChhLHUpO3JldHVybiBudWxsIT1SbyYmKGMub3RoZXI9bChhLFJvKSksY31mdW5jdGlvbiBKKHQsZSxyLG4pe3ZhciBpPW5ldyBZZSh0LGUpO3JldHVybiBpLnhSZWw9bixyJiYoaS5vdXRzaWRlPSEwKSxpfWZ1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj10LmRvYztpZihyKz10LmRpc3BsYXkudmlld09mZnNldCwwPnIpcmV0dXJuIEoobi5maXJzdCwwLCEwLC0xKTt2YXIgaT14bihuLHIpLG89bi5maXJzdCtuLnNpemUtMTtpZihpPm8pcmV0dXJuIEoobi5maXJzdCtuLnNpemUtMSxnbihuLG8pLnRleHQubGVuZ3RoLCEwLDEpO2ZvcigwPmUmJihlPTApOzspe3ZhciBsPWduKG4saSkscz1lZSh0LGwsaSxlLHIpLGE9QnIobCksdT1hJiZhLmZpbmQoKTtpZighYXx8IShzLmNoPnUuZnJvbS5jaHx8cy5jaD09dS5mcm9tLmNoJiZzLnhSZWw+MCkpcmV0dXJuIHM7aT11LnRvLmxpbmV9fWZ1bmN0aW9uIGVlKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyhuKXt2YXIgaT1RKHQsWWUocixuKSwibGluZSIsZSx1KTtyZXR1cm4gcz0hMCxsPmkuYm90dG9tP2kubGVmdC1hOmw8aS50b3A/aS5sZWZ0K2E6KHM9ITEsaS5sZWZ0KX12YXIgbD1pLUNuKHQsZSkscz0hMSxhPTIqdC5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgsdT1WKHQsZSksYz13bihlKSxmPWUudGV4dC5sZW5ndGgsaD15aShlKSxkPWJpKGUpLHA9byhoKSxnPXMsbT1vKGQpLHY9cztpZihuPm0pcmV0dXJuIEoocixkLHYsMSk7Zm9yKDs7KXtpZihjP2Q9PWh8fGQ9PVNpKGUsaCwxKToxPj1kLWgpe2Zvcih2YXIgeT1wPm58fG0tbj49bi1wP2g6ZCxiPW4tKHk9PWg/cDptKTtEby50ZXN0KGUudGV4dC5jaGFyQXQoeSkpOykrK3k7dmFyIHg9SihyLHkseT09aD9nOnYsMD5iPy0xOmI/MTowKTtyZXR1cm4geH12YXIgQz1NYXRoLmNlaWwoZi8yKSx3PWgrQztpZihjKXt3PWg7Zm9yKHZhciBMPTA7Qz5MOysrTCl3PVNpKGUsdywxKX12YXIgaz1vKHcpO2s+bj8oZD13LG09aywodj1zKSYmKG0rPTFlMyksZj1DKTooaD13LHA9ayxnPXMsZi09Qyl9fWZ1bmN0aW9uIHJlKHQpe2lmKG51bGwhPXQuY2FjaGVkVGV4dEhlaWdodClyZXR1cm4gdC5jYWNoZWRUZXh0SGVpZ2h0O2lmKG51bGw9PV9pKXtfaT1zaSgicHJlIik7Zm9yKHZhciBlPTA7NDk+ZTsrK2UpX2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSksX2kuYXBwZW5kQ2hpbGQoc2koImJyIikpO19pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IikpfXVpKHQubWVhc3VyZSxfaSk7dmFyIHI9X2kub2Zmc2V0SGVpZ2h0LzUwO3JldHVybiByPjMmJih0LmNhY2hlZFRleHRIZWlnaHQ9ciksYWkodC5tZWFzdXJlKSxyfHwxfWZ1bmN0aW9uIG5lKHQpe2lmKG51bGwhPXQuY2FjaGVkQ2hhcldpZHRoKXJldHVybiB0LmNhY2hlZENoYXJXaWR0aDt2YXIgZT1zaSgic3BhbiIsIngiKSxyPXNpKCJwcmUiLFtlXSk7dWkodC5tZWFzdXJlLHIpO3ZhciBuPWUub2Zmc2V0V2lkdGg7cmV0dXJuIG4+MiYmKHQuY2FjaGVkQ2hhcldpZHRoPW4pLG58fDEwfWZ1bmN0aW9uIGllKHQpe3QuY3VyT3A9e2NoYW5nZXM6W10sZm9yY2VVcGRhdGU6ITEsdXBkYXRlSW5wdXQ6bnVsbCx1c2VyU2VsQ2hhbmdlOm51bGwsdGV4dENoYW5nZWQ6bnVsbCxzZWxlY3Rpb25DaGFuZ2VkOiExLGN1cnNvckFjdGl2aXR5OiExLHVwZGF0ZU1heExpbmU6ITEsdXBkYXRlU2Nyb2xsUG9zOiExLGlkOisrSml9LE1vKyt8fChTbz1bXSl9ZnVuY3Rpb24gb2UodCl7dmFyIGU9dC5jdXJPcCxyPXQuZG9jLG49dC5kaXNwbGF5O2lmKHQuY3VyT3A9bnVsbCxlLnVwZGF0ZU1heExpbmUmJmYodCksbi5tYXhMaW5lQ2hhbmdlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJm4ubWF4TGluZSl7dmFyIGk9WCh0LG4ubWF4TGluZSk7bi5zaXplci5zdHlsZS5taW5XaWR0aD1NYXRoLm1heCgwLGkrMytUbykrInB4IixuLm1heExpbmVDaGFuZ2VkPSExO3ZhciBvPU1hdGgubWF4KDAsbi5zaXplci5vZmZzZXRMZWZ0K24uc2l6ZXIub2Zmc2V0V2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCk7bzxyLnNjcm9sbExlZnQmJiFlLnVwZGF0ZVNjcm9sbFBvcyYmTWUodCxNYXRoLm1pbihuLnNjcm9sbGVyLnNjcm9sbExlZnQsbyksITApfXZhciBsLHM7aWYoZS51cGRhdGVTY3JvbGxQb3MpbD1lLnVwZGF0ZVNjcm9sbFBvcztlbHNlIGlmKGUuc2VsZWN0aW9uQ2hhbmdlZCYmbi5zY3JvbGxlci5jbGllbnRIZWlnaHQpe3ZhciBhPVEodCxyLnNlbC5oZWFkKTtsPXVyKHQsYS5sZWZ0LGEudG9wLGEubGVmdCxhLmJvdHRvbSl9aWYoKGUuY2hhbmdlcy5sZW5ndGh8fGUuZm9yY2VVcGRhdGV8fGwmJm51bGwhPWwuc2Nyb2xsVG9wKSYmKHM9Yih0LGUuY2hhbmdlcyxsJiZsLnNjcm9sbFRvcCxlLmZvcmNlVXBkYXRlKSx0LmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0JiYodC5kb2Muc2Nyb2xsVG9wPXQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApKSwhcyYmZS5zZWxlY3Rpb25DaGFuZ2VkJiZBKHQpLGUudXBkYXRlU2Nyb2xsUG9zKXt2YXIgdT1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LW4uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LGwuc2Nyb2xsVG9wKSksYz1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCxsLnNjcm9sbExlZnQpKTtuLnNjcm9sbGVyLnNjcm9sbFRvcD1uLnNjcm9sbGJhclYuc2Nyb2xsVG9wPXIuc2Nyb2xsVG9wPXUsbi5zY3JvbGxlci5zY3JvbGxMZWZ0PW4uc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PXIuc2Nyb2xsTGVmdD1jLGcodCksZS5zY3JvbGxUb1BvcyYmc3IodCxRZSh0LmRvYyxlLnNjcm9sbFRvUG9zLmZyb20pLFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MudG8pLGUuc2Nyb2xsVG9Qb3MubWFyZ2luKX1lbHNlIGwmJmxyKHQpO2Uuc2VsZWN0aW9uQ2hhbmdlZCYmRCh0KSx0LnN0YXRlLmZvY3VzZWQmJmUudXBkYXRlSW5wdXQmJmRlKHQsZS51c2VyU2VsQ2hhbmdlKTt2YXIgaD1lLm1heWJlSGlkZGVuTWFya2VycyxkPWUubWF5YmVVbmhpZGRlbk1hcmtlcnM7aWYoaClmb3IodmFyIHA9MDtwPGgubGVuZ3RoOysrcCloW3BdLmxpbmVzLmxlbmd0aHx8S24oaFtwXSwiaGlkZSIpO2lmKGQpZm9yKHZhciBwPTA7cDxkLmxlbmd0aDsrK3ApZFtwXS5saW5lcy5sZW5ndGgmJktuKGRbcF0sInVuaGlkZSIpO3ZhciBtO2lmKC0tTW98fChtPVNvLFNvPW51bGwpLGUudGV4dENoYW5nZWQmJktuKHQsImNoYW5nZSIsdCxlLnRleHRDaGFuZ2VkKSxlLmN1cnNvckFjdGl2aXR5JiZLbih0LCJjdXJzb3JBY3Rpdml0eSIsdCksbSlmb3IodmFyIHA9MDtwPG0ubGVuZ3RoOysrcCltW3BdKCl9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10fHx0aGlzLG49IXIuY3VyT3A7biYmaWUocik7dHJ5e3ZhciBpPWUuYXBwbHkocixhcmd1bWVudHMpfWZpbmFsbHl7biYmb2Uocil9cmV0dXJuIGl9fWZ1bmN0aW9uIHNlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5jbSYmIXRoaXMuY20uY3VyT3A7ciYmaWUodGhpcy5jbSk7dHJ5e2U9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtyJiZvZSh0aGlzLmNtKX1yZXR1cm4gZX19ZnVuY3Rpb24gYWUodCxlKXt2YXIgcixuPSF0LmN1ck9wO24mJmllKHQpO3RyeXtyPWUoKX1maW5hbGx5e24mJm9lKHQpfXJldHVybiByfWZ1bmN0aW9uIHVlKHQsZSxyLG4pe251bGw9PWUmJihlPXQuZG9jLmZpcnN0KSxudWxsPT1yJiYocj10LmRvYy5maXJzdCt0LmRvYy5zaXplKSx0LmN1ck9wLmNoYW5nZXMucHVzaCh7ZnJvbTplLHRvOnIsZGlmZjpufSl9ZnVuY3Rpb24gY2UodCl7dC5kaXNwbGF5LnBvbGxpbmdGYXN0fHx0LmRpc3BsYXkucG9sbC5zZXQodC5vcHRpb25zLnBvbGxJbnRlcnZhbCxmdW5jdGlvbigpe2hlKHQpLHQuc3RhdGUuZm9jdXNlZCYmY2UodCl9KX1mdW5jdGlvbiBmZSh0KXtmdW5jdGlvbiBlKCl7dmFyIG49aGUodCk7bnx8cj8odC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExLGNlKHQpKToocj0hMCx0LmRpc3BsYXkucG9sbC5zZXQoNjAsZSkpfXZhciByPSExO3QuZGlzcGxheS5wb2xsaW5nRmFzdD0hMCx0LmRpc3BsYXkucG9sbC5zZXQoMjAsZSl9ZnVuY3Rpb24gaGUodCl7dmFyIGU9dC5kaXNwbGF5LmlucHV0LHI9dC5kaXNwbGF5LnByZXZJbnB1dCxuPXQuZG9jLGk9bi5zZWw7aWYoIXQuc3RhdGUuZm9jdXNlZHx8SW8oZSl8fGdlKHQpfHx0LnN0YXRlLmRpc2FibGVJbnB1dClyZXR1cm4hMTt0LnN0YXRlLnBhc3RlSW5jb21pbmcmJnQuc3RhdGUuZmFrZWRMYXN0Q2hhciYmKGUudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxlLnZhbHVlLmxlbmd0aC0xKSx0LnN0YXRlLmZha2VkTGFzdENoYXI9ITEpO3ZhciBvPWUudmFsdWU7aWYobz09ciYmamUoaS5mcm9tLGkudG8pKXJldHVybiExO2lmKEFpJiYhTmkmJnQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj09PW8pcmV0dXJuIGRlKHQsITApLCExO3ZhciBsPSF0LmN1ck9wO2wmJmllKHQpLGkuc2hpZnQ9ITE7Zm9yKHZhciBzPTAsYT1NYXRoLm1pbihyLmxlbmd0aCxvLmxlbmd0aCk7YT5zJiZyLmNoYXJDb2RlQXQocyk9PW8uY2hhckNvZGVBdChzKTspKytzO3ZhciB1PWkuZnJvbSxjPWkudG87czxyLmxlbmd0aD91PVllKHUubGluZSx1LmNoLShyLmxlbmd0aC1zKSk6dC5zdGF0ZS5vdmVyd3JpdGUmJmplKHUsYykmJiF0LnN0YXRlLnBhc3RlSW5jb21pbmcmJihjPVllKGMubGluZSxNYXRoLm1pbihnbihuLGMubGluZSkudGV4dC5sZW5ndGgsYy5jaCsoby5sZW5ndGgtcykpKSk7dmFyIGY9dC5jdXJPcC51cGRhdGVJbnB1dCxoPXtmcm9tOnUsdG86Yyx0ZXh0OnpvKG8uc2xpY2UocykpLG9yaWdpbjp0LnN0YXRlLnBhc3RlSW5jb21pbmc/InBhc3RlIjoiK2lucHV0In07cmV0dXJuIEJlKHQuZG9jLGgsImVuZCIpLHQuY3VyT3AudXBkYXRlSW5wdXQ9ZixVbih0LCJpbnB1dFJlYWQiLHQsaCksby5sZW5ndGg+MWUzfHxvLmluZGV4T2YoIlxuIik+LTE/ZS52YWx1ZT10LmRpc3BsYXkucHJldklucHV0PSIiOnQuZGlzcGxheS5wcmV2SW5wdXQ9byxsJiZvZSh0KSx0LnN0YXRlLnBhc3RlSW5jb21pbmc9ITEsITB9ZnVuY3Rpb24gZGUodCxlKXt2YXIgcixuLGk9dC5kb2M7aWYoamUoaS5zZWwuZnJvbSxpLnNlbC50bykpZSYmKHQuZGlzcGxheS5wcmV2SW5wdXQ9dC5kaXNwbGF5LmlucHV0LnZhbHVlPSIiLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCkpO2Vsc2V7dC5kaXNwbGF5LnByZXZJbnB1dD0iIixyPUZvJiYoaS5zZWwudG8ubGluZS1pLnNlbC5mcm9tLmxpbmU+MTAwfHwobj10LmdldFNlbGVjdGlvbigpKS5sZW5ndGg+MWUzKTt2YXIgbz1yPyItIjpufHx0LmdldFNlbGVjdGlvbigpO3QuZGlzcGxheS5pbnB1dC52YWx1ZT1vLHQuc3RhdGUuZm9jdXNlZCYmSm4odC5kaXNwbGF5LmlucHV0KSxBaSYmIU5pJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW8pfXQuZGlzcGxheS5pbmFjY3VyYXRlU2VsZWN0aW9uPXJ9ZnVuY3Rpb24gcGUodCl7Im5vY3Vyc29yIj09dC5vcHRpb25zLnJlYWRPbmx5fHxWaSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09dC5kaXNwbGF5LmlucHV0fHx0LmRpc3BsYXkuaW5wdXQuZm9jdXMoKX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gdC5vcHRpb25zLnJlYWRPbmx5fHx0LmRvYy5jYW50RWRpdH1mdW5jdGlvbiBtZSh0KXtmdW5jdGlvbiBlKCl7dC5zdGF0ZS5mb2N1c2VkJiZzZXRUaW1lb3V0KGlpKHBlLHQpLDApfWZ1bmN0aW9uIHIoKXtudWxsPT1zJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz1udWxsLGwuY2FjaGVkQ2hhcldpZHRoPWwuY2FjaGVkVGV4dEhlaWdodD1Pbz1udWxsLF8odCksYWUodCxpaSh1ZSx0KSl9LDEwMCkpfWZ1bmN0aW9uIG4oKXtmb3IodmFyIHQ9bC53cmFwcGVyLnBhcmVudE5vZGU7dCYmdCE9ZG9jdW1lbnQuYm9keTt0PXQucGFyZW50Tm9kZSk7dD9zZXRUaW1lb3V0KG4sNWUzKTpWbih3aW5kb3csInJlc2l6ZSIscil9ZnVuY3Rpb24gaShlKXtYbih0LGUpfHx0Lm9wdGlvbnMub25EcmFnRXZlbnQmJnQub3B0aW9ucy5vbkRyYWdFdmVudCh0LEVuKGUpKXx8UG4oZSl9ZnVuY3Rpb24gbygpe2wuaW5hY2N1cmF0ZVNlbGVjdGlvbiYmKGwucHJldklucHV0PSIiLGwuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxsLmlucHV0LnZhbHVlPXQuZ2V0U2VsZWN0aW9uKCksSm4obC5pbnB1dCkpfXZhciBsPXQuZGlzcGxheTtHbihsLnNjcm9sbGVyLCJtb3VzZWRvd24iLGxlKHQsYmUpKSxBaT9HbihsLnNjcm9sbGVyLCJkYmxjbGljayIsbGUodCxmdW5jdGlvbihlKXtpZighWG4odCxlKSl7dmFyIHI9eWUodCxlKTtpZihyJiYhd2UodCxlKSYmIXZlKHQuZGlzcGxheSxlKSl7em4oZSk7dmFyIG49bXIoZ24odC5kb2Msci5saW5lKS50ZXh0LHIpO2VyKHQuZG9jLG4uZnJvbSxuLnRvKX19fSkpOkduKGwuc2Nyb2xsZXIsImRibGNsaWNrIixmdW5jdGlvbihlKXtYbih0LGUpfHx6bihlKX0pLEduKGwubGluZVNwYWNlLCJzZWxlY3RzdGFydCIsZnVuY3Rpb24odCl7dmUobCx0KXx8em4odCl9KSxaaXx8R24obC5zY3JvbGxlciwiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe0llKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJihTZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsVG9wKSxNZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwhMCksS24odCwic2Nyb2xsIix0KSl9KSxHbihsLnNjcm9sbGJhclYsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmU2UodCxsLnNjcm9sbGJhclYuc2Nyb2xsVG9wKX0pLEduKGwuc2Nyb2xsYmFySCwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZNZSh0LGwuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KX0pLEduKGwuc2Nyb2xsZXIsIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGUpe1RlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJET01Nb3VzZVNjcm9sbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsYmFySCwibW91c2Vkb3duIixlKSxHbihsLnNjcm9sbGJhclYsIm1vdXNlZG93biIsZSksR24obC53cmFwcGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC53cmFwcGVyLnNjcm9sbFRvcD1sLndyYXBwZXIuc2Nyb2xsTGVmdD0wfSk7dmFyIHM7R24od2luZG93LCJyZXNpemUiLHIpLHNldFRpbWVvdXQobiw1ZTMpLEduKGwuaW5wdXQsImtleXVwIixsZSh0LGZ1bmN0aW9uKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbktleUV2ZW50JiZ0Lm9wdGlvbnMub25LZXlFdmVudCh0LEVuKGUpKXx8MTY9PWUua2V5Q29kZSYmKHQuZG9jLnNlbC5zaGlmdD0hMSl9KSksR24obC5pbnB1dCwiaW5wdXQiLGZ1bmN0aW9uKCl7QWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW51bGwpLGZlKHQpfSksR24obC5pbnB1dCwia2V5ZG93biIsbGUodCxXZSkpLEduKGwuaW5wdXQsImtleXByZXNzIixsZSh0LE9lKSksR24obC5pbnB1dCwiZm9jdXMiLGlpKEVlLHQpKSxHbihsLmlucHV0LCJibHVyIixpaSh6ZSx0KSksdC5vcHRpb25zLmRyYWdEcm9wJiYoR24obC5zY3JvbGxlciwiZHJhZ3N0YXJ0IixmdW5jdGlvbihlKXtrZSh0LGUpfSksR24obC5zY3JvbGxlciwiZHJhZ2VudGVyIixpKSxHbihsLnNjcm9sbGVyLCJkcmFnb3ZlciIsaSksR24obC5zY3JvbGxlciwiZHJvcCIsbGUodCxMZSkpKSxHbihsLnNjcm9sbGVyLCJwYXN0ZSIsZnVuY3Rpb24oZSl7dmUobCxlKXx8KHBlKHQpLGZlKHQpKX0pLEduKGwuaW5wdXQsInBhc3RlIixmdW5jdGlvbigpe2lmKFdpJiYhdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYhKG5ldyBEYXRlLXQuc3RhdGUubGFzdE1pZGRsZURvd248MjAwKSl7dmFyIGU9bC5pbnB1dC5zZWxlY3Rpb25TdGFydCxyPWwuaW5wdXQuc2VsZWN0aW9uRW5kO2wuaW5wdXQudmFsdWUrPSIkIixsLmlucHV0LnNlbGVjdGlvblN0YXJ0PWUsbC5pbnB1dC5zZWxlY3Rpb25FbmQ9cix0LnN0YXRlLmZha2VkTGFzdENoYXI9ITB9dC5zdGF0ZS5wYXN0ZUluY29taW5nPSEwLGZlKHQpfSksR24obC5pbnB1dCwiY3V0IixvKSxHbihsLmlucHV0LCJjb3B5IixvKSxGaSYmR24obC5zaXplciwibW91c2V1cCIsZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0JiZsLmlucHV0LmJsdXIoKSxwZSh0KX0pfWZ1bmN0aW9uIHZlKHQsZSl7Zm9yKHZhciByPVJuKGUpO3IhPXQud3JhcHBlcjtyPXIucGFyZW50Tm9kZSlpZighcnx8ci5pZ25vcmVFdmVudHN8fHIucGFyZW50Tm9kZT09dC5zaXplciYmciE9dC5tb3ZlcilyZXR1cm4hMH1mdW5jdGlvbiB5ZSh0LGUscil7dmFyIG49dC5kaXNwbGF5O2lmKCFyKXt2YXIgaT1SbihlKTtpZihpPT1uLnNjcm9sbGJhckh8fGk9PW4uc2Nyb2xsYmFySC5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhclZ8fGk9PW4uc2Nyb2xsYmFyVi5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhckZpbGxlcnx8aT09bi5ndXR0ZXJGaWxsZXIpcmV0dXJuIG51bGx9dmFyIG8sbCxzPWZpKG4ubGluZVNwYWNlKTt0cnl7bz1lLmNsaWVudFgsbD1lLmNsaWVudFl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9cmV0dXJuIHRlKHQsby1zLmxlZnQsbC1zLnRvcCl9ZnVuY3Rpb24gYmUodCl7ZnVuY3Rpb24gZSh0KXtpZighamUodix0KSl7aWYodj10LCJzaW5nbGUiPT1jKXJldHVybiBlcihpLmRvYyxRZShsLGEpLHQpLHZvaWQgMDsKaWYoZz1RZShsLGcpLG09UWUobCxtKSwiZG91YmxlIj09Yyl7dmFyIGU9bXIoZ24obCx0LmxpbmUpLnRleHQsdCk7JGUodCxnKT9lcihpLmRvYyxlLmZyb20sbSk6ZXIoaS5kb2MsZyxlLnRvKX1lbHNlInRyaXBsZSI9PWMmJigkZSh0LGcpP2VyKGkuZG9jLG0sUWUobCxZZSh0LmxpbmUsMCkpKTplcihpLmRvYyxnLFFlKGwsWWUodC5saW5lKzEsMCkpKSl9fWZ1bmN0aW9uIHIodCl7dmFyIG49KytiLHM9eWUoaSx0LCEwKTtpZihzKWlmKGplKHMsaCkpe3ZhciBhPXQuY2xpZW50WTx5LnRvcD8tMjA6dC5jbGllbnRZPnkuYm90dG9tPzIwOjA7YSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmKG8uc2Nyb2xsZXIuc2Nyb2xsVG9wKz1hLHIodCkpfSksNTApfWVsc2V7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKSxoPXMsZShzKTt2YXIgdT1wKG8sbCk7KHMubGluZT49dS50b3x8cy5saW5lPHUuZnJvbSkmJnNldFRpbWVvdXQobGUoaSxmdW5jdGlvbigpe2I9PW4mJnIodCl9KSwxNTApfX1mdW5jdGlvbiBuKHQpe2I9MS8wLHpuKHQpLHBlKGkpLFZuKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLFZuKGRvY3VtZW50LCJtb3VzZXVwIixDKX1pZighWG4odGhpcyx0KSl7dmFyIGk9dGhpcyxvPWkuZGlzcGxheSxsPWkuZG9jLHM9bC5zZWw7aWYocy5zaGlmdD10LnNoaWZ0S2V5LHZlKG8sdCkpcmV0dXJuIFdpfHwoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe28uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwfSwxMDApKSx2b2lkIDA7aWYoIXdlKGksdCkpe3ZhciBhPXllKGksdCk7c3dpdGNoKEJuKHQpKXtjYXNlIDM6cmV0dXJuIFppJiZJZS5jYWxsKGksaSx0KSx2b2lkIDA7Y2FzZSAyOnJldHVybiBXaSYmKGkuc3RhdGUubGFzdE1pZGRsZURvd249K25ldyBEYXRlKSxhJiZlcihpLmRvYyxhKSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx6bih0KSx2b2lkIDB9aWYoIWEpcmV0dXJuIFJuKHQpPT1vLnNjcm9sbGVyJiZ6bih0KSx2b2lkIDA7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKTt2YXIgdT0rbmV3IERhdGUsYz0ic2luZ2xlIjtpZihqaSYmamkudGltZT51LTQwMCYmamUoamkucG9zLGEpKWM9InRyaXBsZSIsem4odCksc2V0VGltZW91dChpaShwZSxpKSwyMCksdnIoaSxhLmxpbmUpO2Vsc2UgaWYoWWkmJllpLnRpbWU+dS00MDAmJmplKFlpLnBvcyxhKSl7Yz0iZG91YmxlIixqaT17dGltZTp1LHBvczphfSx6bih0KTt2YXIgZj1tcihnbihsLGEubGluZSkudGV4dCxhKTtlcihpLmRvYyxmLmZyb20sZi50byl9ZWxzZSBZaT17dGltZTp1LHBvczphfTt2YXIgaD1hO2lmKGkub3B0aW9ucy5kcmFnRHJvcCYmV28mJiFnZShpKSYmIWplKHMuZnJvbSxzLnRvKSYmISRlKGEscy5mcm9tKSYmISRlKHMudG8sYSkmJiJzaW5nbGUiPT1jKXt2YXIgZD1sZShpLGZ1bmN0aW9uKGUpe1dpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEpLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PSExLFZuKGRvY3VtZW50LCJtb3VzZXVwIixkKSxWbihvLnNjcm9sbGVyLCJkcm9wIixkKSxNYXRoLmFicyh0LmNsaWVudFgtZS5jbGllbnRYKStNYXRoLmFicyh0LmNsaWVudFktZS5jbGllbnRZKTwxMCYmKHpuKGUpLGVyKGkuZG9jLGEpLHBlKGkpKX0pO3JldHVybiBXaSYmKG8uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwKSxpLnN0YXRlLmRyYWdnaW5nVGV4dD1kLG8uc2Nyb2xsZXIuZHJhZ0Ryb3AmJm8uc2Nyb2xsZXIuZHJhZ0Ryb3AoKSxHbihkb2N1bWVudCwibW91c2V1cCIsZCksR24oby5zY3JvbGxlciwiZHJvcCIsZCksdm9pZCAwfXpuKHQpLCJzaW5nbGUiPT1jJiZlcihpLmRvYyxRZShsLGEpKTt2YXIgZz1zLmZyb20sbT1zLnRvLHY9YSx5PWZpKG8ud3JhcHBlciksYj0wLHg9bGUoaSxmdW5jdGlvbih0KXtBaXx8Qm4odCk/cih0KTpuKHQpfSksQz1sZShpLG4pO0duKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixDKX19fWZ1bmN0aW9uIHhlKHQsZSxyLG4saSl7dHJ5e3ZhciBvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4hMX1pZihvPj1NYXRoLmZsb29yKGZpKHQuZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpcmV0dXJuITE7biYmem4oZSk7dmFyIHM9dC5kaXNwbGF5LGE9Zmkocy5saW5lRGl2KTtpZihsPmEuYm90dG9tfHwhWW4odCxyKSlyZXR1cm4gRm4oZSk7bC09YS50b3Atcy52aWV3T2Zmc2V0O2Zvcih2YXIgdT0wO3U8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysrdSl7dmFyIGM9cy5ndXR0ZXJzLmNoaWxkTm9kZXNbdV07aWYoYyYmZmkoYykucmlnaHQ+PW8pe3ZhciBmPXhuKHQuZG9jLGwpLGg9dC5vcHRpb25zLmd1dHRlcnNbdV07cmV0dXJuIGkodCxyLHQsZixoLGUpLEZuKGUpfX19ZnVuY3Rpb24gQ2UodCxlKXtyZXR1cm4gWW4odCwiZ3V0dGVyQ29udGV4dE1lbnUiKT94ZSh0LGUsImd1dHRlckNvbnRleHRNZW51IiwhMSxLbik6ITF9ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4geGUodCxlLCJndXR0ZXJDbGljayIsITAsVW4pfWZ1bmN0aW9uIExlKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHx2ZShlLmRpc3BsYXksdCl8fGUub3B0aW9ucy5vbkRyYWdFdmVudCYmZS5vcHRpb25zLm9uRHJhZ0V2ZW50KGUsRW4odCkpKSl7em4odCksQWkmJih0bz0rbmV3IERhdGUpO3ZhciByPXllKGUsdCwhMCksbj10LmRhdGFUcmFuc2Zlci5maWxlcztpZihyJiYhZ2UoZSkpaWYobiYmbi5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIGk9bi5sZW5ndGgsbz1BcnJheShpKSxsPTAscz1mdW5jdGlvbih0LG4pe3ZhciBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPWZ1bmN0aW9uKCl7b1tuXT1zLnJlc3VsdCwrK2w9PWkmJihyPVFlKGUuZG9jLHIpLEJlKGUuZG9jLHtmcm9tOnIsdG86cix0ZXh0OnpvKG8uam9pbigiXG4iKSksb3JpZ2luOiJwYXN0ZSJ9LCJhcm91bmQiKSl9LHMucmVhZEFzVGV4dCh0KX0sYT0wO2k+YTsrK2EpcyhuW2FdLGEpO2Vsc2V7aWYoZS5zdGF0ZS5kcmFnZ2luZ1RleHQmJiEkZShyLGUuZG9jLnNlbC5mcm9tKSYmISRlKGUuZG9jLnNlbC50byxyKSlyZXR1cm4gZS5zdGF0ZS5kcmFnZ2luZ1RleHQodCksc2V0VGltZW91dChpaShwZSxlKSwyMCksdm9pZCAwO3RyeXt2YXIgbz10LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7aWYobyl7dmFyIHU9ZS5kb2Muc2VsLmZyb20sYz1lLmRvYy5zZWwudG87bnIoZS5kb2MscixyKSxlLnN0YXRlLmRyYWdnaW5nVGV4dCYmX2UoZS5kb2MsIiIsdSxjLCJwYXN0ZSIpLGUucmVwbGFjZVNlbGVjdGlvbihvLG51bGwsInBhc3RlIikscGUoZSl9fWNhdGNoKHQpe319fX1mdW5jdGlvbiBrZSh0LGUpe2lmKEFpJiYoIXQuc3RhdGUuZHJhZ2dpbmdUZXh0fHwrbmV3IERhdGUtdG88MTAwKSlyZXR1cm4gUG4oZSksdm9pZCAwO2lmKCFYbih0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt2YXIgcj10LmdldFNlbGVjdGlvbigpO2lmKGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLHIpLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSYmIUlpKXt2YXIgbj1zaSgiaW1nIixudWxsLG51bGwsInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyIpO24uc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSIsemkmJihuLndpZHRoPW4uaGVpZ2h0PTEsdC5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQobiksbi5fdG9wPW4ub2Zmc2V0VG9wKSxlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UobiwwLDApLHppJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9fX1mdW5jdGlvbiBTZSh0LGUpe01hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1lKTwyfHwodC5kb2Muc2Nyb2xsVG9wPWUsVGl8fGIodCxbXSxlKSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT1lJiYodC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ZSksVGkmJmIodCxbXSksVyh0LDEwMCkpfWZ1bmN0aW9uIE1lKHQsZSxyKXsocj9lPT10LmRvYy5zY3JvbGxMZWZ0Ok1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtZSk8Mil8fChlPU1hdGgubWluKGUsdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoLXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCksdC5kb2Muc2Nyb2xsTGVmdD1lLGcodCksdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0IT1lJiYodC5kaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdD1lKSl9ZnVuY3Rpb24gVGUodCxlKXt2YXIgcj1lLndoZWVsRGVsdGFYLG49ZS53aGVlbERlbHRhWTtudWxsPT1yJiZlLmRldGFpbCYmZS5heGlzPT1lLkhPUklaT05UQUxfQVhJUyYmKHI9ZS5kZXRhaWwpLG51bGw9PW4mJmUuZGV0YWlsJiZlLmF4aXM9PWUuVkVSVElDQUxfQVhJUz9uPWUuZGV0YWlsOm51bGw9PW4mJihuPWUud2hlZWxEZWx0YSk7dmFyIGk9dC5kaXNwbGF5LG89aS5zY3JvbGxlcjtpZihyJiZvLnNjcm9sbFdpZHRoPm8uY2xpZW50V2lkdGh8fG4mJm8uc2Nyb2xsSGVpZ2h0Pm8uY2xpZW50SGVpZ2h0KXtpZihuJiZLaSYmV2kpZm9yKHZhciBsPWUudGFyZ2V0O2whPW87bD1sLnBhcmVudE5vZGUpaWYobC5saW5lT2JqKXt0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PWw7YnJlYWt9aWYociYmIVRpJiYhemkmJm51bGwhPXJvKXJldHVybiBuJiZTZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxUb3ArbipybyxvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodCkpKSxNZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxMZWZ0K3Iqcm8sby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoKSkpLHpuKGUpLGkud2hlZWxTdGFydFg9bnVsbCx2b2lkIDA7aWYobiYmbnVsbCE9cm8pe3ZhciBzPW4qcm8sYT10LmRvYy5zY3JvbGxUb3AsdT1hK2kud3JhcHBlci5jbGllbnRIZWlnaHQ7MD5zP2E9TWF0aC5tYXgoMCxhK3MtNTApOnU9TWF0aC5taW4odC5kb2MuaGVpZ2h0LHUrcys1MCksYih0LFtdLHt0b3A6YSxib3R0b206dX0pfTIwPmVvJiYobnVsbD09aS53aGVlbFN0YXJ0WD8oaS53aGVlbFN0YXJ0WD1vLnNjcm9sbExlZnQsaS53aGVlbFN0YXJ0WT1vLnNjcm9sbFRvcCxpLndoZWVsRFg9cixpLndoZWVsRFk9bixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYobnVsbCE9aS53aGVlbFN0YXJ0WCl7dmFyIHQ9by5zY3JvbGxMZWZ0LWkud2hlZWxTdGFydFgsZT1vLnNjcm9sbFRvcC1pLndoZWVsU3RhcnRZLHI9ZSYmaS53aGVlbERZJiZlL2kud2hlZWxEWXx8dCYmaS53aGVlbERYJiZ0L2kud2hlZWxEWDtpLndoZWVsU3RhcnRYPWkud2hlZWxTdGFydFk9bnVsbCxyJiYocm89KHJvKmVvK3IpLyhlbysxKSwrK2VvKX19LDIwMCkpOihpLndoZWVsRFgrPXIsaS53aGVlbERZKz1uKSl9fWZ1bmN0aW9uIEFlKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPW1vW2VdLCFlKSlyZXR1cm4hMTt0LmRpc3BsYXkucG9sbGluZ0Zhc3QmJmhlKHQpJiYodC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExKTt2YXIgbj10LmRvYyxpPW4uc2VsLnNoaWZ0LG89ITE7dHJ5e2dlKHQpJiYodC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSEwKSxyJiYobi5zZWwuc2hpZnQ9ITEpLG89ZSh0KSE9QW99ZmluYWxseXtuLnNlbC5zaGlmdD1pLHQuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gb31mdW5jdGlvbiBIZSh0KXt2YXIgZT10LnN0YXRlLmtleU1hcHMuc2xpY2UoMCk7cmV0dXJuIHQub3B0aW9ucy5leHRyYUtleXMmJmUucHVzaCh0Lm9wdGlvbnMuZXh0cmFLZXlzKSxlLnB1c2godC5vcHRpb25zLmtleU1hcCksZX1mdW5jdGlvbiBOZSh0LGUpe3ZhciByPUNyKHQub3B0aW9ucy5rZXlNYXApLG49ci5hdXRvO2NsZWFyVGltZW91dChubyksbiYmIUxyKGUpJiYobm89c2V0VGltZW91dChmdW5jdGlvbigpe0NyKHQub3B0aW9ucy5rZXlNYXApPT1yJiYodC5vcHRpb25zLmtleU1hcD1uLmNhbGw/bi5jYWxsKG51bGwsdCk6bixsKHQpKX0sNTApKTt2YXIgaT1rcihlLCEwKSxvPSExO2lmKCFpKXJldHVybiExO3ZhciBzPUhlKHQpO3JldHVybiBvPWUuc2hpZnRLZXk/d3IoIlNoaWZ0LSIraSxzLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSl8fHdyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiBlPy9eZ29bQS1aXS8udGVzdChlKTplLm1vdGlvbik/QWUodCxlKTp2b2lkIDB9KTp3cihpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSl9KSxvJiYoem4oZSksRCh0KSxOaSYmKGUub2xkS2V5Q29kZT1lLmtleUNvZGUsZS5rZXlDb2RlPTApLFVuKHQsImtleUhhbmRsZWQiLHQsaSxlKSksb31mdW5jdGlvbiBEZSh0LGUscil7dmFyIG49d3IoIiciK3IrIiciLEhlKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSk7cmV0dXJuIG4mJih6bihlKSxEKHQpLFVuKHQsImtleUhhbmRsZWQiLHQsIiciK3IrIiciLGUpKSxufWZ1bmN0aW9uIFdlKHQpe3ZhciBlPXRoaXM7aWYoZS5zdGF0ZS5mb2N1c2VkfHxFZShlKSwhKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe0FpJiYyNz09dC5rZXlDb2RlJiYodC5yZXR1cm5WYWx1ZT0hMSk7dmFyIHI9dC5rZXlDb2RlO2UuZG9jLnNlbC5zaGlmdD0xNj09cnx8dC5zaGlmdEtleTt2YXIgbj1OZShlLHQpO3ppJiYob289bj9yOm51bGwsIW4mJjg4PT1yJiYhRm8mJihLaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmZS5yZXBsYWNlU2VsZWN0aW9uKCIiKSl9fWZ1bmN0aW9uIE9lKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHxlLm9wdGlvbnMub25LZXlFdmVudCYmZS5vcHRpb25zLm9uS2V5RXZlbnQoZSxFbih0KSkpKXt2YXIgcj10LmtleUNvZGUsbj10LmNoYXJDb2RlO2lmKHppJiZyPT1vbylyZXR1cm4gb289bnVsbCx6bih0KSx2b2lkIDA7aWYoISh6aSYmKCF0LndoaWNofHx0LndoaWNoPDEwKXx8RmkpfHwhTmUoZSx0KSl7dmFyIGk9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1uP3I6bik7dGhpcy5vcHRpb25zLmVsZWN0cmljQ2hhcnMmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycyYmdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50JiYhZ2UodGhpcykmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGkpPi0xJiZzZXRUaW1lb3V0KGxlKGUsZnVuY3Rpb24oKXtocihlLGUuZG9jLnNlbC50by5saW5lLCJzbWFydCIpfSksNzUpLERlKGUsdCxpKXx8KEFpJiYhTmkmJihlLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUoZSkpfX19ZnVuY3Rpb24gRWUodCl7Im5vY3Vyc29yIiE9dC5vcHRpb25zLnJlYWRPbmx5JiYodC5zdGF0ZS5mb2N1c2VkfHwoS24odCwiZm9jdXMiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMCwtMT09dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pJiYodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3ItZm9jdXNlZCIpLHQuY3VyT3B8fChkZSh0LCEwKSxXaSYmc2V0VGltZW91dChpaShkZSx0LCEwKSwwKSkpLGNlKHQpLEQodCkpfWZ1bmN0aW9uIHplKHQpe3Quc3RhdGUuZm9jdXNlZCYmKEtuKHQsImJsdXIiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMSx0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCIiKSksY2xlYXJJbnRlcnZhbCh0LmRpc3BsYXkuYmxpbmtlciksc2V0VGltZW91dChmdW5jdGlvbigpe3Quc3RhdGUuZm9jdXNlZHx8KHQuZG9jLnNlbC5zaGlmdD0hMSl9LDE1MCl9ZnVuY3Rpb24gSWUodCxlKXtmdW5jdGlvbiByKCl7aWYobnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7dmFyIHQ9aS5pbnB1dC52YWx1ZT0i4oCLIisoamUoby5mcm9tLG8udG8pPyIiOmkuaW5wdXQudmFsdWUpO2kucHJldklucHV0PSLigIsiLGkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9MSxpLmlucHV0LnNlbGVjdGlvbkVuZD10Lmxlbmd0aH19ZnVuY3Rpb24gbigpe2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9dSxOaSYmKGkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9aS5zY3JvbGxlci5zY3JvbGxUb3A9cyksY2UodCksbnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7KCFBaXx8TmkpJiZyKCksY2xlYXJUaW1lb3V0KGlvKTt2YXIgZT0wLG49ZnVuY3Rpb24oKXsiICI9PWkucHJldklucHV0JiYwPT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0P2xlKHQsbW8uc2VsZWN0QWxsKSh0KTplKys8MTA/aW89c2V0VGltZW91dChuLDUwMCk6ZGUodCl9O2lvPXNldFRpbWVvdXQobiwyMDApfX1pZighWG4odCxlLCJjb250ZXh0bWVudSIpKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYy5zZWw7aWYoIXZlKGksZSkmJiFDZSh0LGUpKXt2YXIgbD15ZSh0LGUpLHM9aS5zY3JvbGxlci5zY3JvbGxUb3A7aWYobCYmIXppKXt2YXIgYT10Lm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51O2EmJihqZShvLmZyb20sby50byl8fCRlKGwsby5mcm9tKXx8ISRlKGwsby50bykpJiZsZSh0LG5yKSh0LmRvYyxsLGwpO3ZhciB1PWkuaW5wdXQuc3R5bGUuY3NzVGV4dDtpZihpLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5pbnB1dC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIisoZS5jbGllbnRZLTUpKyJweDsgbGVmdDogIisoZS5jbGllbnRYLTUpKyJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogd2hpdGU7IG91dGxpbmU6IG5vbmU7IisiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IC1tcy1vcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTsiLHBlKHQpLGRlKHQsITApLGplKG8uZnJvbSxvLnRvKSYmKGkuaW5wdXQudmFsdWU9aS5wcmV2SW5wdXQ9IiAiKSxBaSYmIU5pJiZyKCksWmkpe1BuKGUpO3ZhciBjPWZ1bmN0aW9uKCl7Vm4od2luZG93LCJtb3VzZXVwIixjKSxzZXRUaW1lb3V0KG4sMjApfTtHbih3aW5kb3csIm1vdXNldXAiLGMpfWVsc2Ugc2V0VGltZW91dChuLDUwKX19fX1mdW5jdGlvbiBGZSh0LGUscil7aWYoISRlKGUuZnJvbSxyKSlyZXR1cm4gUWUodCxyKTt2YXIgbj1lLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSk7aWYoci5saW5lPmUudG8ubGluZStuKXt2YXIgaT1yLmxpbmUtbixvPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGk+bz9ZZShvLGduKHQsbykudGV4dC5sZW5ndGgpOkplKHIsZ24odCxpKS50ZXh0Lmxlbmd0aCl9aWYoci5saW5lPT1lLnRvLmxpbmUrbilyZXR1cm4gSmUocixRbihlLnRleHQpLmxlbmd0aCsoMT09ZS50ZXh0Lmxlbmd0aD9lLmZyb20uY2g6MCkrZ24odCxlLnRvLmxpbmUpLnRleHQubGVuZ3RoLWUudG8uY2gpO3ZhciBsPXIubGluZS1lLmZyb20ubGluZTtyZXR1cm4gSmUocixlLnRleHRbbF0ubGVuZ3RoKyhsPzA6ZS5mcm9tLmNoKSl9ZnVuY3Rpb24gUGUodCxlLHIpe2lmKHImJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm57YW5jaG9yOkZlKHQsZSxyLmFuY2hvciksaGVhZDpGZSh0LGUsci5oZWFkKX07aWYoInN0YXJ0Ij09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOmUuZnJvbX07dmFyIG49bG8oZSk7aWYoImFyb3VuZCI9PXIpcmV0dXJue2FuY2hvcjplLmZyb20saGVhZDpufTtpZigiZW5kIj09cilyZXR1cm57YW5jaG9yOm4saGVhZDpufTt2YXIgaT1mdW5jdGlvbih0KXtpZigkZSh0LGUuZnJvbSkpcmV0dXJuIHQ7aWYoISRlKGUudG8sdCkpcmV0dXJuIG47dmFyIHI9dC5saW5lK2UudGV4dC5sZW5ndGgtKGUudG8ubGluZS1lLmZyb20ubGluZSktMSxpPXQuY2g7cmV0dXJuIHQubGluZT09ZS50by5saW5lJiYoaSs9bi5jaC1lLnRvLmNoKSxZZShyLGkpfTtyZXR1cm57YW5jaG9yOmkodC5zZWwuYW5jaG9yKSxoZWFkOmkodC5zZWwuaGVhZCl9fWZ1bmN0aW9uIFJlKHQsZSxyKXt2YXIgbj17Y2FuY2VsZWQ6ITEsZnJvbTplLmZyb20sdG86ZS50byx0ZXh0OmUudGV4dCxvcmlnaW46ZS5vcmlnaW4sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxlZD0hMH19O3JldHVybiByJiYobi51cGRhdGU9ZnVuY3Rpb24oZSxyLG4saSl7ZSYmKHRoaXMuZnJvbT1RZSh0LGUpKSxyJiYodGhpcy50bz1RZSh0LHIpKSxuJiYodGhpcy50ZXh0PW4pLHZvaWQgMCE9PWkmJih0aGlzLm9yaWdpbj1pKX0pLEtuKHQsImJlZm9yZUNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVDaGFuZ2UiLHQuY20sbiksbi5jYW5jZWxlZD9udWxsOntmcm9tOm4uZnJvbSx0bzpuLnRvLHRleHQ6bi50ZXh0LG9yaWdpbjpuLm9yaWdpbn19ZnVuY3Rpb24gQmUodCxlLHIsbil7aWYodC5jbSl7aWYoIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sQmUpKHQsZSxyLG4pO2lmKHQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cylyZXR1cm59aWYoIShZbih0LCJiZWZvcmVDaGFuZ2UiKXx8dC5jbSYmWW4odC5jbSwiYmVmb3JlQ2hhbmdlIikpfHwoZT1SZSh0LGUsITApKSl7dmFyIGk9cWkmJiFuJiZGcih0LGUuZnJvbSxlLnRvKTtpZihpKXtmb3IodmFyIG89aS5sZW5ndGgtMTtvPj0xOy0tbylHZSh0LHtmcm9tOmlbb10uZnJvbSx0bzppW29dLnRvLHRleHQ6WyIiXX0pO2kubGVuZ3RoJiZHZSh0LHtmcm9tOmlbMF0uZnJvbSx0bzppWzBdLnRvLHRleHQ6ZS50ZXh0fSxyKX1lbHNlIEdlKHQsZSxyKX19ZnVuY3Rpb24gR2UodCxlLHIpe2lmKDEhPWUudGV4dC5sZW5ndGh8fCIiIT1lLnRleHRbMF18fCFqZShlLmZyb20sZS50bykpe3ZhciBuPVBlKHQsZSxyKTtNbih0LGUsbix0LmNtP3QuY20uY3VyT3AuaWQ6MC8wKSxVZSh0LGUsbix6cih0LGUpKTt2YXIgaT1bXTtkbih0LGZ1bmN0aW9uKHQscil7cnx8LTEhPXRpKGksdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxlKSxpLnB1c2godC5oaXN0b3J5KSksVWUodCxlLG51bGwsenIodCxlKSl9KX19ZnVuY3Rpb24gVmUodCxlKXtpZighdC5jbXx8IXQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cyl7dmFyIHI9dC5oaXN0b3J5LG49KCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLnBvcCgpO2lmKG4pe3ZhciBpPXtjaGFuZ2VzOltdLGFuY2hvckJlZm9yZTpuLmFuY2hvckFmdGVyLGhlYWRCZWZvcmU6bi5oZWFkQWZ0ZXIsYW5jaG9yQWZ0ZXI6bi5hbmNob3JCZWZvcmUsaGVhZEFmdGVyOm4uaGVhZEJlZm9yZSxnZW5lcmF0aW9uOnIuZ2VuZXJhdGlvbn07KCJ1bmRvIj09ZT9yLnVuZG9uZTpyLmRvbmUpLnB1c2goaSksci5nZW5lcmF0aW9uPW4uZ2VuZXJhdGlvbnx8KytyLm1heEdlbmVyYXRpb247Zm9yKHZhciBvPVluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSxsPW4uY2hhbmdlcy5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHM9bi5jaGFuZ2VzW2xdO2lmKHMub3JpZ2luPWUsbyYmIVJlKHQscywhMSkpcmV0dXJuKCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLmxlbmd0aD0wLHZvaWQgMDtpLmNoYW5nZXMucHVzaChTbih0LHMpKTt2YXIgYT1sP1BlKHQscyxudWxsKTp7YW5jaG9yOm4uYW5jaG9yQmVmb3JlLGhlYWQ6bi5oZWFkQmVmb3JlfTtVZSh0LHMsYSxJcih0LHMpKTt2YXIgdT1bXTtkbih0LGZ1bmN0aW9uKHQsZSl7ZXx8LTEhPXRpKHUsdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxzKSx1LnB1c2godC5oaXN0b3J5KSksVWUodCxzLG51bGwsSXIodCxzKSl9KX19fX1mdW5jdGlvbiBLZSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIFllKHQubGluZStlLHQuY2gpfXQuZmlyc3QrPWUsdC5jbSYmdWUodC5jbSx0LmZpcnN0LHQuZmlyc3QsZSksdC5zZWwuaGVhZD1yKHQuc2VsLmhlYWQpLHQuc2VsLmFuY2hvcj1yKHQuc2VsLmFuY2hvciksdC5zZWwuZnJvbT1yKHQuc2VsLmZyb20pLHQuc2VsLnRvPXIodC5zZWwudG8pfWZ1bmN0aW9uIFVlKHQsZSxyLG4pe2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFVlKSh0LGUscixuKTtpZihlLnRvLmxpbmU8dC5maXJzdClyZXR1cm4gS2UodCxlLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSkpLHZvaWQgMDtpZighKGUuZnJvbS5saW5lPnQubGFzdExpbmUoKSkpe2lmKGUuZnJvbS5saW5lPHQuZmlyc3Qpe3ZhciBpPWUudGV4dC5sZW5ndGgtMS0odC5maXJzdC1lLmZyb20ubGluZSk7S2UodCxpKSxlPXtmcm9tOlllKHQuZmlyc3QsMCksdG86WWUoZS50by5saW5lK2ksZS50by5jaCksdGV4dDpbUW4oZS50ZXh0KV0sb3JpZ2luOmUub3JpZ2lufX12YXIgbz10Lmxhc3RMaW5lKCk7ZS50by5saW5lPm8mJihlPXtmcm9tOmUuZnJvbSx0bzpZZShvLGduKHQsbykudGV4dC5sZW5ndGgpLHRleHQ6W2UudGV4dFswXV0sb3JpZ2luOmUub3JpZ2lufSksZS5yZW1vdmVkPW1uKHQsZS5mcm9tLGUudG8pLHJ8fChyPVBlKHQsZSxudWxsKSksdC5jbT9YZSh0LmNtLGUsbixyKTpjbih0LGUsbixyKX19ZnVuY3Rpb24gWGUodCxlLHIsbil7dmFyIG89dC5kb2MsbD10LmRpc3BsYXkscz1lLmZyb20sYT1lLnRvLHU9ITEsZj1zLmxpbmU7dC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGY9Ym4oR3IobyxnbihvLHMubGluZSkpKSxvLml0ZXIoZixhLmxpbmUrMSxmdW5jdGlvbih0KXtyZXR1cm4gdD09bC5tYXhMaW5lPyh1PSEwLCEwKTp2b2lkIDB9KSksJGUoby5zZWwuaGVhZCxlLmZyb20pfHwkZShlLnRvLG8uc2VsLmhlYWQpfHwodC5jdXJPcC5jdXJzb3JBY3Rpdml0eT0hMCksY24obyxlLHIsbixpKHQpKSx0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoby5pdGVyKGYscy5saW5lK2UudGV4dC5sZW5ndGgsZnVuY3Rpb24odCl7dmFyIGU9YyhvLHQpO2U+bC5tYXhMaW5lTGVuZ3RoJiYobC5tYXhMaW5lPXQsbC5tYXhMaW5lTGVuZ3RoPWUsbC5tYXhMaW5lQ2hhbmdlZD0hMCx1PSExKX0pLHUmJih0LmN1ck9wLnVwZGF0ZU1heExpbmU9ITApKSxvLmZyb250aWVyPU1hdGgubWluKG8uZnJvbnRpZXIscy5saW5lKSxXKHQsNDAwKTt2YXIgaD1lLnRleHQubGVuZ3RoLShhLmxpbmUtcy5saW5lKS0xO2lmKHVlKHQscy5saW5lLGEubGluZSsxLGgpLFluKHQsImNoYW5nZSIpKXt2YXIgZD17ZnJvbTpzLHRvOmEsdGV4dDplLnRleHQscmVtb3ZlZDplLnJlbW92ZWQsb3JpZ2luOmUub3JpZ2lufTtpZih0LmN1ck9wLnRleHRDaGFuZ2VkKXtmb3IodmFyIHA9dC5jdXJPcC50ZXh0Q2hhbmdlZDtwLm5leHQ7cD1wLm5leHQpO3AubmV4dD1kfWVsc2UgdC5jdXJPcC50ZXh0Q2hhbmdlZD1kfX1mdW5jdGlvbiBfZSh0LGUscixuLGkpe2lmKG58fChuPXIpLCRlKG4scikpe3ZhciBvPW47bj1yLHI9b30ic3RyaW5nIj09dHlwZW9mIGUmJihlPXpvKGUpKSxCZSh0LHtmcm9tOnIsdG86bix0ZXh0OmUsb3JpZ2luOml9LG51bGwpfWZ1bmN0aW9uIFllKHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBZZT8odGhpcy5saW5lPXQsdGhpcy5jaD1lLHZvaWQgMCk6bmV3IFllKHQsZSl9ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gdC5saW5lPT1lLmxpbmUmJnQuY2g9PWUuY2h9ZnVuY3Rpb24gJGUodCxlKXtyZXR1cm4gdC5saW5lPGUubGluZXx8dC5saW5lPT1lLmxpbmUmJnQuY2g8ZS5jaH1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gWWUodC5saW5lLHQuY2gpfWZ1bmN0aW9uIHFlKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQuZmlyc3QsTWF0aC5taW4oZSx0LmZpcnN0K3Quc2l6ZS0xKSl9ZnVuY3Rpb24gUWUodCxlKXtpZihlLmxpbmU8dC5maXJzdClyZXR1cm4gWWUodC5maXJzdCwwKTt2YXIgcj10LmZpcnN0K3Quc2l6ZS0xO3JldHVybiBlLmxpbmU+cj9ZZShyLGduKHQscikudGV4dC5sZW5ndGgpOkplKGUsZ24odCxlLmxpbmUpLnRleHQubGVuZ3RoKX1mdW5jdGlvbiBKZSh0LGUpe3ZhciByPXQuY2g7cmV0dXJuIG51bGw9PXJ8fHI+ZT9ZZSh0LmxpbmUsZSk6MD5yP1llKHQubGluZSwwKTp0fWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJuIGU+PXQuZmlyc3QmJmU8dC5maXJzdCt0LnNpemV9ZnVuY3Rpb24gZXIodCxlLHIsbil7aWYodC5zZWwuc2hpZnR8fHQuc2VsLmV4dGVuZCl7dmFyIGk9dC5zZWwuYW5jaG9yO2lmKHIpe3ZhciBvPSRlKGUsaSk7byE9JGUocixpKT8oaT1lLGU9cik6byE9JGUoZSxyKSYmKGU9cil9bnIodCxpLGUsbil9ZWxzZSBucih0LGUscnx8ZSxuKTt0LmNtJiYodC5jbS5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwKX1mdW5jdGlvbiBycih0LGUscil7dmFyIG49e2FuY2hvcjplLGhlYWQ6cn07cmV0dXJuIEtuKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLHQuY20sbiksbi5hbmNob3I9UWUodCxuLmFuY2hvciksbi5oZWFkPVFlKHQsbi5oZWFkKSxufWZ1bmN0aW9uIG5yKHQsZSxyLG4saSl7aWYoIWkmJlluKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSl7dmFyIG89cnIodCxlLHIpO3I9by5oZWFkLGU9by5hbmNob3J9dmFyIGw9dC5zZWw7aWYobC5nb2FsQ29sdW1uPW51bGwsbnVsbD09biYmKG49JGUocixsLmhlYWQpPy0xOjEpLChpfHwhamUoZSxsLmFuY2hvcikpJiYoZT1vcih0LGUsbiwicHVzaCIhPWkpKSwoaXx8IWplKHIsbC5oZWFkKSkmJihyPW9yKHQscixuLCJwdXNoIiE9aSkpLCFqZShsLmFuY2hvcixlKXx8IWplKGwuaGVhZCxyKSl7bC5hbmNob3I9ZSxsLmhlYWQ9cjt2YXIgcz0kZShyLGUpO2wuZnJvbT1zP3I6ZSxsLnRvPXM/ZTpyLHQuY20mJih0LmNtLmN1ck9wLnVwZGF0ZUlucHV0PXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD10LmNtLmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxVbih0LCJjdXJzb3JBY3Rpdml0eSIsdCl9fWZ1bmN0aW9uIGlyKHQpe25yKHQuZG9jLHQuZG9jLnNlbC5mcm9tLHQuZG9jLnNlbC50byxudWxsLCJwdXNoIil9ZnVuY3Rpb24gb3IodCxlLHIsbil7dmFyIGk9ITEsbz1lLGw9cnx8MTt0LmNhbnRFZGl0PSExO3Q6Zm9yKDs7KXt2YXIgcz1nbih0LG8ubGluZSk7aWYocy5tYXJrZWRTcGFucylmb3IodmFyIGE9MDthPHMubWFya2VkU3BhbnMubGVuZ3RoOysrYSl7dmFyIHU9cy5tYXJrZWRTcGFuc1thXSxjPXUubWFya2VyO2lmKChudWxsPT11LmZyb218fChjLmluY2x1c2l2ZUxlZnQ/dS5mcm9tPD1vLmNoOnUuZnJvbTxvLmNoKSkmJihudWxsPT11LnRvfHwoYy5pbmNsdXNpdmVSaWdodD91LnRvPj1vLmNoOnUudG8+by5jaCkpKXtpZihuJiYoS24oYywiYmVmb3JlQ3Vyc29yRW50ZXIiKSxjLmV4cGxpY2l0bHlDbGVhcmVkKSl7aWYocy5tYXJrZWRTcGFucyl7LS1hO2NvbnRpbnVlfWJyZWFrfWlmKCFjLmF0b21pYyljb250aW51ZTt2YXIgZj1jLmZpbmQoKVswPmw/ImZyb20iOiJ0byJdO2lmKGplKGYsbykmJihmLmNoKz1sLGYuY2g8MD9mPWYubGluZT50LmZpcnN0P1FlKHQsWWUoZi5saW5lLTEpKTpudWxsOmYuY2g+cy50ZXh0Lmxlbmd0aCYmKGY9Zi5saW5lPHQuZmlyc3QrdC5zaXplLTE/WWUoZi5saW5lKzEsMCk6bnVsbCksIWYpKXtpZihpKXJldHVybiBuPyh0LmNhbnRFZGl0PSEwLFllKHQuZmlyc3QsMCkpOm9yKHQsZSxyLCEwKTtpPSEwLGY9ZSxsPS1sfW89Zjtjb250aW51ZSB0fX1yZXR1cm4gb319ZnVuY3Rpb24gbHIodCl7dmFyIGU9c3IodCx0LmRvYy5zZWwuaGVhZCxudWxsLHQub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pO2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIHI9dC5kaXNwbGF5LG49Zmkoci5zaXplciksaT1udWxsO2lmKGUudG9wK24udG9wPDA/aT0hMDplLmJvdHRvbStuLnRvcD4od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmKGk9ITEpLG51bGwhPWkmJiFCaSl7dmFyIG89Im5vbmUiPT1yLmN1cnNvci5zdHlsZS5kaXNwbGF5O28mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLHIuY3Vyc29yLnN0eWxlLmxlZnQ9ZS5sZWZ0KyJweCIsci5jdXJzb3Iuc3R5bGUudG9wPWUudG9wLXIudmlld09mZnNldCsicHgiKSxyLmN1cnNvci5zY3JvbGxJbnRvVmlldyhpKSxvJiYoci5jdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19ZnVuY3Rpb24gc3IodCxlLHIsbil7Zm9yKG51bGw9PW4mJihuPTApOzspe3ZhciBpPSExLG89USh0LGUpLGw9ciYmciE9ZT9RKHQscik6byxzPXVyKHQsTWF0aC5taW4oby5sZWZ0LGwubGVmdCksTWF0aC5taW4oby50b3AsbC50b3ApLW4sTWF0aC5tYXgoby5sZWZ0LGwubGVmdCksTWF0aC5tYXgoby5ib3R0b20sbC5ib3R0b20pK24pLGE9dC5kb2Muc2Nyb2xsVG9wLHU9dC5kb2Muc2Nyb2xsTGVmdDtpZihudWxsIT1zLnNjcm9sbFRvcCYmKFNlKHQscy5zY3JvbGxUb3ApLE1hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1hKT4xJiYoaT0hMCkpLG51bGwhPXMuc2Nyb2xsTGVmdCYmKE1lKHQscy5zY3JvbGxMZWZ0KSxNYXRoLmFicyh0LmRvYy5zY3JvbGxMZWZ0LXUpPjEmJihpPSEwKSksIWkpcmV0dXJuIG99fWZ1bmN0aW9uIGFyKHQsZSxyLG4saSl7dmFyIG89dXIodCxlLHIsbixpKTtudWxsIT1vLnNjcm9sbFRvcCYmU2UodCxvLnNjcm9sbFRvcCksbnVsbCE9by5zY3JvbGxMZWZ0JiZNZSh0LG8uc2Nyb2xsTGVmdCl9ZnVuY3Rpb24gdXIodCxlLHIsbixpKXt2YXIgbz10LmRpc3BsYXksbD1yZSh0LmRpc3BsYXkpOzA+ciYmKHI9MCk7dmFyIHM9by5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8sYT1vLnNjcm9sbGVyLnNjcm9sbFRvcCx1PXt9LGM9dC5kb2MuaGVpZ2h0K0YobyksZj1sPnIsaD1pPmMtbDtpZihhPnIpdS5zY3JvbGxUb3A9Zj8wOnI7ZWxzZSBpZihpPmErcyl7dmFyIGQ9TWF0aC5taW4ociwoaD9jOmkpLXMpO2QhPWEmJih1LnNjcm9sbFRvcD1kKX12YXIgcD1vLnNjcm9sbGVyLmNsaWVudFdpZHRoLVRvLGc9by5zY3JvbGxlci5zY3JvbGxMZWZ0O2UrPW8uZ3V0dGVycy5vZmZzZXRXaWR0aCxuKz1vLmd1dHRlcnMub2Zmc2V0V2lkdGg7dmFyIG09by5ndXR0ZXJzLm9mZnNldFdpZHRoLHY9bSsxMD5lO3JldHVybiBnK20+ZXx8dj8odiYmKGU9MCksdS5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsZS0xMC1tKSk6bj5wK2ctMyYmKHUuc2Nyb2xsTGVmdD1uKzEwLXApLHV9ZnVuY3Rpb24gY3IodCxlLHIpe3QuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0Om51bGw9PWU/dC5kb2Muc2Nyb2xsTGVmdDplLHNjcm9sbFRvcDpudWxsPT1yP3QuZG9jLnNjcm9sbFRvcDpyfX1mdW5jdGlvbiBmcih0LGUscil7dmFyIG49dC5jdXJPcC51cGRhdGVTY3JvbGxQb3N8fCh0LmN1ck9wLnVwZGF0ZVNjcm9sbFBvcz17c2Nyb2xsTGVmdDp0LmRvYy5zY3JvbGxMZWZ0LHNjcm9sbFRvcDp0LmRvYy5zY3JvbGxUb3B9KSxpPXQuZGlzcGxheS5zY3JvbGxlcjtuLnNjcm9sbFRvcD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsSGVpZ2h0LWkuY2xpZW50SGVpZ2h0LG4uc2Nyb2xsVG9wK3IpKSxuLnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihpLnNjcm9sbFdpZHRoLWkuY2xpZW50V2lkdGgsbi5zY3JvbGxMZWZ0K2UpKX1mdW5jdGlvbiBocih0LGUscixuKXt2YXIgaT10LmRvYztpZihudWxsPT1yJiYocj0iYWRkIiksInNtYXJ0Ij09cilpZih0LmRvYy5tb2RlLmluZGVudCl2YXIgbz16KHQsZSk7ZWxzZSByPSJwcmV2Ijt2YXIgbCxzPXQub3B0aW9ucy50YWJTaXplLGE9Z24oaSxlKSx1PVpuKGEudGV4dCxudWxsLHMpLGM9YS50ZXh0Lm1hdGNoKC9eXHMqLylbMF07aWYoInNtYXJ0Ij09ciYmKGw9dC5kb2MubW9kZS5pbmRlbnQobyxhLnRleHQuc2xpY2UoYy5sZW5ndGgpLGEudGV4dCksbD09QW8pKXtpZighbilyZXR1cm47cj0icHJldiJ9InByZXYiPT1yP2w9ZT5pLmZpcnN0P1puKGduKGksZS0xKS50ZXh0LG51bGwscyk6MDoiYWRkIj09cj9sPXUrdC5vcHRpb25zLmluZGVudFVuaXQ6InN1YnRyYWN0Ij09cj9sPXUtdC5vcHRpb25zLmluZGVudFVuaXQ6Im51bWJlciI9PXR5cGVvZiByJiYobD11K3IpLGw9TWF0aC5tYXgoMCxsKTt2YXIgZj0iIixoPTA7aWYodC5vcHRpb25zLmluZGVudFdpdGhUYWJzKWZvcih2YXIgZD1NYXRoLmZsb29yKGwvcyk7ZDstLWQpaCs9cyxmKz0iCSI7bD5oJiYoZis9cW4obC1oKSksZiE9Yz9fZSh0LmRvYyxmLFllKGUsMCksWWUoZSxjLmxlbmd0aCksIitpbnB1dCIpOmkuc2VsLmhlYWQubGluZT09ZSYmaS5zZWwuaGVhZC5jaDxjLmxlbmd0aCYmbnIoaSxZZShlLGMubGVuZ3RoKSxZZShlLGMubGVuZ3RoKSwxKSxhLnN0YXRlQWZ0ZXI9bnVsbH1mdW5jdGlvbiBkcih0LGUscil7dmFyIG49ZSxpPWUsbz10LmRvYztyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/aT1nbihvLHFlKG8sZSkpOm49Ym4oZSksbnVsbD09bj9udWxsOnIoaSxuKT8odWUodCxuLG4rMSksaSk6bnVsbH1mdW5jdGlvbiBwcih0LGUscixuLGkpe2Z1bmN0aW9uIG8oKXt2YXIgZT1zK3I7cmV0dXJuIGU8dC5maXJzdHx8ZT49dC5maXJzdCt0LnNpemU/Zj0hMToocz1lLGM9Z24odCxlKSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT0oaT9TaTpNaSkoYyxhLHIsITApO2lmKG51bGw9PWUpe2lmKHR8fCFvKCkpcmV0dXJuIGY9ITE7YT1pPygwPnI/Ymk6eWkpKGMpOjA+cj9jLnRleHQubGVuZ3RoOjB9ZWxzZSBhPWU7cmV0dXJuITB9dmFyIHM9ZS5saW5lLGE9ZS5jaCx1PXIsYz1nbih0LHMpLGY9ITA7aWYoImNoYXIiPT1uKWwoKTtlbHNlIGlmKCJjb2x1bW4iPT1uKWwoITApO2Vsc2UgaWYoIndvcmQiPT1ufHwiZ3JvdXAiPT1uKWZvcih2YXIgaD1udWxsLGQ9Imdyb3VwIj09bixwPSEwOyEoMD5yKXx8bCghcCk7cD0hMSl7dmFyIGc9Yy50ZXh0LmNoYXJBdChhKXx8IlxuIixtPW9pKGcpPyJ3IjpkPy9ccy8udGVzdChnKT9udWxsOiJwIjpudWxsO2lmKGgmJmghPW0pezA+ciYmKHI9MSxsKCkpO2JyZWFrfWlmKG0mJihoPW0pLHI+MCYmIWwoIXApKWJyZWFrfXZhciB2PW9yKHQsWWUocyxhKSx1LCEwKTtyZXR1cm4gZnx8KHYuaGl0U2lkZT0hMCksdn1mdW5jdGlvbiBncih0LGUscixuKXt2YXIgaSxvPXQuZG9jLGw9ZS5sZWZ0O2lmKCJwYWdlIj09bil7dmFyIHM9TWF0aC5taW4odC5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7aT1lLnRvcCtyKihzLSgwPnI/MS41Oi41KSpyZSh0LmRpc3BsYXkpKX1lbHNlImxpbmUiPT1uJiYoaT1yPjA/ZS5ib3R0b20rMzplLnRvcC0zKTtmb3IoOzspe3ZhciBhPXRlKHQsbCxpKTtpZighYS5vdXRzaWRlKWJyZWFrO2lmKDA+cj8wPj1pOmk+PW8uaGVpZ2h0KXthLmhpdFNpZGU9ITA7YnJlYWt9aSs9NSpyfXJldHVybiBhfWZ1bmN0aW9uIG1yKHQsZSl7dmFyIHI9ZS5jaCxuPWUuY2g7aWYodCl7KGUueFJlbDwwfHxuPT10Lmxlbmd0aCkmJnI/LS1yOisrbjtmb3IodmFyIGk9dC5jaGFyQXQociksbz1vaShpKT9vaTovXHMvLnRlc3QoaSk/ZnVuY3Rpb24odCl7cmV0dXJuL1xzLy50ZXN0KHQpfTpmdW5jdGlvbih0KXtyZXR1cm4hL1xzLy50ZXN0KHQpJiYhb2kodCl9O3I+MCYmbyh0LmNoYXJBdChyLTEpKTspLS1yO2Zvcig7bjx0Lmxlbmd0aCYmbyh0LmNoYXJBdChuKSk7KSsrbn1yZXR1cm57ZnJvbTpZZShlLmxpbmUsciksdG86WWUoZS5saW5lLG4pfX1mdW5jdGlvbiB2cih0LGUpe2VyKHQuZG9jLFllKGUsMCksUWUodC5kb2MsWWUoZSsxLDApKSl9ZnVuY3Rpb24geXIoZSxyLG4saSl7dC5kZWZhdWx0c1tlXT1yLG4mJihzb1tlXT1pP2Z1bmN0aW9uKHQsZSxyKXtyIT11byYmbih0LGUscil9Om4pfWZ1bmN0aW9uIGJyKHQsZSl7aWYoZT09PSEwKXJldHVybiBlO2lmKHQuY29weVN0YXRlKXJldHVybiB0LmNvcHlTdGF0ZShlKTt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpIGluc3RhbmNlb2YgQXJyYXkmJihpPWkuY29uY2F0KFtdKSkscltuXT1pfXJldHVybiByfWZ1bmN0aW9uIHhyKHQsZSxyKXtyZXR1cm4gdC5zdGFydFN0YXRlP3Quc3RhcnRTdGF0ZShlLHIpOiEwfWZ1bmN0aW9uIENyKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD92b1t0XTp0fWZ1bmN0aW9uIHdyKHQsZSxyKXtmdW5jdGlvbiBuKGUpe2U9Q3IoZSk7dmFyIGk9ZVt0XTtpZihpPT09ITEpcmV0dXJuInN0b3AiO2lmKG51bGwhPWkmJnIoaSkpcmV0dXJuITA7aWYoZS5ub2ZhbGx0aHJvdWdoKXJldHVybiJzdG9wIjt2YXIgbz1lLmZhbGx0aHJvdWdoO2lmKG51bGw9PW8pcmV0dXJuITE7aWYoIltvYmplY3QgQXJyYXldIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKXJldHVybiBuKG8pO2Zvcih2YXIgbD0wLHM9by5sZW5ndGg7cz5sOysrbCl7dmFyIGE9bihvW2xdKTtpZihhKXJldHVybiBhfXJldHVybiExfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgbz1uKGVbaV0pO2lmKG8pcmV0dXJuInN0b3AiIT1vfX1mdW5jdGlvbiBMcih0KXt2YXIgZT1Qb1t0LmtleUNvZGVdO3JldHVybiJDdHJsIj09ZXx8IkFsdCI9PWV8fCJTaGlmdCI9PWV8fCJNb2QiPT1lfWZ1bmN0aW9uIGtyKHQsZSl7aWYoemkmJjM0PT10LmtleUNvZGUmJnRbImNoYXIiXSlyZXR1cm4hMTt2YXIgcj1Qb1t0LmtleUNvZGVdO3JldHVybiBudWxsPT1yfHx0LmFsdEdyYXBoS2V5PyExOih0LmFsdEtleSYmKHI9IkFsdC0iK3IpLCgkaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmKHI9IkN0cmwtIityKSwoJGk/dC5jdHJsS2V5OnQubWV0YUtleSkmJihyPSJDbWQtIityKSwhZSYmdC5zaGlmdEtleSYmKHI9IlNoaWZ0LSIrcikscil9ZnVuY3Rpb24gU3IodCxlKXt0aGlzLnBvcz10aGlzLnN0YXJ0PTAsdGhpcy5zdHJpbmc9dCx0aGlzLnRhYlNpemU9ZXx8OCx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5sYXN0Q29sdW1uVmFsdWU9MH1mdW5jdGlvbiBNcih0LGUpe3RoaXMubGluZXM9W10sdGhpcy50eXBlPWUsdGhpcy5kb2M9dH1mdW5jdGlvbiBUcih0LGUscixuLGkpe2lmKG4mJm4uc2hhcmVkKXJldHVybiBIcih0LGUscixuLGkpO2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFRyKSh0LGUscixuLGkpO3ZhciBvPW5ldyBNcih0LGkpO2lmKCRlKHIsZSl8fGplKGUscikmJiJyYW5nZSI9PWkmJighbi5pbmNsdXNpdmVMZWZ0fHwhbi5pbmNsdXNpdmVSaWdodCkpcmV0dXJuIG87biYmcmkobixvKSxvLnJlcGxhY2VkV2l0aCYmKG8uY29sbGFwc2VkPSEwLG8ucmVwbGFjZWRXaXRoPXNpKCJzcGFuIixbby5yZXBsYWNlZFdpdGhdLCJDb2RlTWlycm9yLXdpZGdldCIpLG4uaGFuZGxlTW91c2VFdmVudHN8fChvLnJlcGxhY2VkV2l0aC5pZ25vcmVFdmVudHM9ITApKSxvLmNvbGxhcHNlZCYmKFFpPSEwKSxvLmFkZFRvSGlzdG9yeSYmTW4odCx7ZnJvbTplLHRvOnIsb3JpZ2luOiJtYXJrVGV4dCJ9LHtoZWFkOnQuc2VsLmhlYWQsYW5jaG9yOnQuc2VsLmFuY2hvcn0sMC8wKTt2YXIgbCxzLGEsdT1lLmxpbmUsYz0wLGY9dC5jbTtpZih0Lml0ZXIodSxyLmxpbmUrMSxmdW5jdGlvbihuKXtmJiZvLmNvbGxhcHNlZCYmIWYub3B0aW9ucy5saW5lV3JhcHBpbmcmJkdyKHQsbik9PWYuZGlzcGxheS5tYXhMaW5lJiYoYT0hMCk7dmFyIGk9e2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpvfTtjKz1uLnRleHQubGVuZ3RoLHU9PWUubGluZSYmKGkuZnJvbT1lLmNoLGMtPWUuY2gpLHU9PXIubGluZSYmKGkudG89ci5jaCxjLT1uLnRleHQubGVuZ3RoLXIuY2gpLG8uY29sbGFwc2VkJiYodT09ci5saW5lJiYocz1QcihuLHIuY2gpKSx1PT1lLmxpbmU/bD1QcihuLGUuY2gpOnluKG4sMCkpLFdyKG4saSksKyt1fSksby5jb2xsYXBzZWQmJnQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24oZSl7VnIodCxlKSYmeW4oZSwwKX0pLG8uY2xlYXJPbkVudGVyJiZHbihvLCJiZWZvcmVDdXJzb3JFbnRlciIsZnVuY3Rpb24oKXtvLmNsZWFyKCl9KSxvLnJlYWRPbmx5JiYocWk9ITAsKHQuaGlzdG9yeS5kb25lLmxlbmd0aHx8dC5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpJiZ0LmNsZWFySGlzdG9yeSgpKSxvLmNvbGxhcHNlZCl7aWYobCE9cyl0aHJvdyBuZXcgRXJyb3IoIkluc2VydGluZyBjb2xsYXBzZWQgbWFya2VyIG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpO28uc2l6ZT1jLG8uYXRvbWljPSEwfXJldHVybiBmJiYoYSYmKGYuY3VyT3AudXBkYXRlTWF4TGluZT0hMCksKG8uY2xhc3NOYW1lfHxvLnRpdGxlfHxvLnN0YXJ0U3R5bGV8fG8uZW5kU3R5bGV8fG8uY29sbGFwc2VkKSYmdWUoZixlLmxpbmUsci5saW5lKzEpLG8uYXRvbWljJiZpcihmKSksb31mdW5jdGlvbiBBcih0LGUpe3RoaXMubWFya2Vycz10LHRoaXMucHJpbWFyeT1lO2Zvcih2YXIgcj0wLG49dGhpcztyPHQubGVuZ3RoOysrcil0W3JdLnBhcmVudD10aGlzLEduKHRbcl0sImNsZWFyIixmdW5jdGlvbigpe24uY2xlYXIoKX0pfWZ1bmN0aW9uIEhyKHQsZSxyLG4saSl7bj1yaShuKSxuLnNoYXJlZD0hMTt2YXIgbz1bVHIodCxlLHIsbixpKV0sbD1vWzBdLHM9bi5yZXBsYWNlZFdpdGg7cmV0dXJuIGRuKHQsZnVuY3Rpb24odCl7cyYmKG4ucmVwbGFjZWRXaXRoPXMuY2xvbmVOb2RlKCEwKSksby5wdXNoKFRyKHQsUWUodCxlKSxRZSh0LHIpLG4saSkpO2Zvcih2YXIgYT0wO2E8dC5saW5rZWQubGVuZ3RoOysrYSlpZih0LmxpbmtlZFthXS5pc1BhcmVudClyZXR1cm47bD1RbihvKX0pLG5ldyBBcihvLGwpfWZ1bmN0aW9uIE5yKHQsZSl7aWYodClmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtpZihuLm1hcmtlcj09ZSlyZXR1cm4gbn19ZnVuY3Rpb24gRHIodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXRbbl0hPWUmJihyfHwocj1bXSkpLnB1c2godFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gV3IodCxlKXt0Lm1hcmtlZFNwYW5zPXQubWFya2VkU3BhbnM/dC5tYXJrZWRTcGFucy5jb25jYXQoW2VdKTpbZV0sZS5tYXJrZXIuYXR0YWNoTGluZSh0KX1mdW5jdGlvbiBPcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTtpZihzfHwobC5pbmNsdXNpdmVMZWZ0JiZsLmluY2x1c2l2ZVJpZ2h0fHwiYm9va21hcmsiPT1sLnR5cGUpJiZvLmZyb209PWUmJighcnx8IW8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7KG58fChuPVtdKSkucHVzaCh7ZnJvbTpvLmZyb20sdG86YT9udWxsOm8udG8sbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24gRXIodCxlLHIpe2lmKHQpZm9yKHZhciBuLGk9MDtpPHQubGVuZ3RoOysraSl7dmFyIG89dFtpXSxsPW8ubWFya2VyLHM9bnVsbD09by50b3x8KGwuaW5jbHVzaXZlUmlnaHQ/by50bz49ZTpvLnRvPmUpO2lmKHN8fCJib29rbWFyayI9PWwudHlwZSYmby5mcm9tPT1lJiYoIXJ8fG8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOmE/bnVsbDpvLmZyb20tZSx0bzpudWxsPT1vLnRvP251bGw6by50by1lLG1hcmtlcjpsfSl9fXJldHVybiBufWZ1bmN0aW9uIHpyKHQsZSl7dmFyIHI9dHIodCxlLmZyb20ubGluZSkmJmduKHQsZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zLG49dHIodCxlLnRvLmxpbmUpJiZnbih0LGUudG8ubGluZSkubWFya2VkU3BhbnM7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPWUuZnJvbS5jaCxvPWUudG8uY2gsbD1qZShlLmZyb20sZS50bykscz1PcihyLGksbCksYT1FcihuLG8sbCksdT0xPT1lLnRleHQubGVuZ3RoLGM9UW4oZS50ZXh0KS5sZW5ndGgrKHU/aTowKTtpZihzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKXt2YXIgaD1zW2ZdO2lmKG51bGw9PWgudG8pe3ZhciBkPU5yKGEsaC5tYXJrZXIpO2Q/dSYmKGgudG89bnVsbD09ZC50bz9udWxsOmQudG8rYyk6aC50bz1pfX1pZihhKWZvcih2YXIgZj0wO2Y8YS5sZW5ndGg7KytmKXt2YXIgaD1hW2ZdO2lmKG51bGwhPWgudG8mJihoLnRvKz1jKSxudWxsPT1oLmZyb20pe3ZhciBkPU5yKHMsaC5tYXJrZXIpO2R8fChoLmZyb209Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpKX1lbHNlIGguZnJvbSs9Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpfWlmKHUmJnMpe2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGwhPXNbZl0uZnJvbSYmc1tmXS5mcm9tPT1zW2ZdLnRvJiYiYm9va21hcmsiIT1zW2ZdLm1hcmtlci50eXBlJiZzLnNwbGljZShmLS0sMSk7cy5sZW5ndGh8fChzPW51bGwpfXZhciBwPVtzXTtpZighdSl7dmFyIGcsbT1lLnRleHQubGVuZ3RoLTI7aWYobT4wJiZzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGw9PXNbZl0udG8mJihnfHwoZz1bXSkpLnB1c2goe2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpzW2ZdLm1hcmtlcn0pO2Zvcih2YXIgZj0wO20+ZjsrK2YpcC5wdXNoKGcpO3AucHVzaChhKX1yZXR1cm4gcH1mdW5jdGlvbiBJcih0LGUpe3ZhciByPUFuKHQsZSksbj16cih0LGUpO2lmKCFyKXJldHVybiBuO2lmKCFuKXJldHVybiByO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgbz1yW2ldLGw9bltpXTtpZihvJiZsKXQ6Zm9yKHZhciBzPTA7czxsLmxlbmd0aDsrK3Mpe2Zvcih2YXIgYT1sW3NdLHU9MDt1PG8ubGVuZ3RoOysrdSlpZihvW3VdLm1hcmtlcj09YS5tYXJrZXIpY29udGludWUgdDtvLnB1c2goYSl9ZWxzZSBsJiYocltpXT1sKX1yZXR1cm4gcn1mdW5jdGlvbiBGcih0LGUscil7dmFyIG49bnVsbDtpZih0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe2lmKHQubWFya2VkU3BhbnMpZm9yKHZhciBlPTA7ZTx0Lm1hcmtlZFNwYW5zLmxlbmd0aDsrK2Upe3ZhciByPXQubWFya2VkU3BhbnNbZV0ubWFya2VyOyFyLnJlYWRPbmx5fHxuJiYtMSE9dGkobixyKXx8KG58fChuPVtdKSkucHVzaChyKX19KSwhbilyZXR1cm4gbnVsbDtmb3IodmFyIGk9W3tmcm9tOmUsdG86cn1dLG89MDtvPG4ubGVuZ3RoOysrbylmb3IodmFyIGw9bltvXSxzPWwuZmluZCgpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIHU9aVthXTtpZighJGUodS50byxzLmZyb20pJiYhJGUocy50byx1LmZyb20pKXt2YXIgYz1bYSwxXTsoJGUodS5mcm9tLHMuZnJvbSl8fCFsLmluY2x1c2l2ZUxlZnQmJmplKHUuZnJvbSxzLmZyb20pKSYmYy5wdXNoKHtmcm9tOnUuZnJvbSx0bzpzLmZyb219KSwoJGUocy50byx1LnRvKXx8IWwuaW5jbHVzaXZlUmlnaHQmJmplKHUudG8scy50bykpJiZjLnB1c2goe2Zyb206cy50byx0bzp1LnRvfSksaS5zcGxpY2UuYXBwbHkoaSxjKSxhKz1jLmxlbmd0aC0xfX1yZXR1cm4gaX1mdW5jdGlvbiBQcih0LGUpe3ZhciByLG49UWkmJnQubWFya2VkU3BhbnM7aWYobilmb3IodmFyIGksbz0wO288bi5sZW5ndGg7KytvKWk9bltvXSxpLm1hcmtlci5jb2xsYXBzZWQmJihudWxsPT1pLmZyb218fGkuZnJvbTxlKSYmKG51bGw9PWkudG98fGkudG8+ZSkmJighcnx8ci53aWR0aDxpLm1hcmtlci53aWR0aCkmJihyPWkubWFya2VyKTtyZXR1cm4gcn1mdW5jdGlvbiBScih0KXtyZXR1cm4gUHIodCwtMSl9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIFByKHQsdC50ZXh0Lmxlbmd0aCsxKX1mdW5jdGlvbiBHcih0LGUpe2Zvcih2YXIgcjtyPVJyKGUpOyllPWduKHQsci5maW5kKCkuZnJvbS5saW5lKTtyZXR1cm4gZX1mdW5jdGlvbiBWcih0LGUpe3ZhciByPVFpJiZlLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuLGk9MDtpPHIubGVuZ3RoOysraSlpZihuPXJbaV0sbi5tYXJrZXIuY29sbGFwc2VkKXtpZihudWxsPT1uLmZyb20pcmV0dXJuITA7aWYoIW4ubWFya2VyLnJlcGxhY2VkV2l0aCYmMD09bi5mcm9tJiZuLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZLcih0LGUsbikpcmV0dXJuITB9fWZ1bmN0aW9uIEtyKHQsZSxyKXtpZihudWxsPT1yLnRvKXt2YXIgbj1yLm1hcmtlci5maW5kKCkudG8saT1nbih0LG4ubGluZSk7cmV0dXJuIEtyKHQsaSxOcihpLm1hcmtlZFNwYW5zLHIubWFya2VyKSl9aWYoci5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJnIudG89PWUudGV4dC5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBvLGw9MDtsPGUubWFya2VkU3BhbnMubGVuZ3RoOysrbClpZihvPWUubWFya2VkU3BhbnNbbF0sby5tYXJrZXIuY29sbGFwc2VkJiYhby5tYXJrZXIucmVwbGFjZWRXaXRoJiZvLmZyb209PXIudG8mJihvLm1hcmtlci5pbmNsdXNpdmVMZWZ0fHxyLm1hcmtlci5pbmNsdXNpdmVSaWdodCkmJktyKHQsZSxvKSlyZXR1cm4hMH1mdW5jdGlvbiBVcih0KXt2YXIgZT10Lm1hcmtlZFNwYW5zO2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmRldGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1udWxsfX1mdW5jdGlvbiBYcih0LGUpe2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmF0dGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1lfX1mdW5jdGlvbiBfcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT0hdGhpcy5jbS5jdXJPcDtlJiZpZSh0aGlzLmNtKTt0cnl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtlJiZvZSh0aGlzLmNtKX1yZXR1cm4gcn19ZnVuY3Rpb24gWXIodCl7cmV0dXJuIG51bGwhPXQuaGVpZ2h0P3QuaGVpZ2h0Oih0Lm5vZGUucGFyZW50Tm9kZSYmMT09dC5ub2RlLnBhcmVudE5vZGUubm9kZVR5cGV8fHVpKHQuY20uZGlzcGxheS5tZWFzdXJlLHNpKCJkaXYiLFt0Lm5vZGVdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpKSx0LmhlaWdodD10Lm5vZGUub2Zmc2V0SGVpZ2h0KX1mdW5jdGlvbiBqcih0LGUscixuKXt2YXIgaT1uZXcgeW8odCxyLG4pO3JldHVybiBpLm5vSFNjcm9sbCYmKHQuZGlzcGxheS5hbGlnbldpZGdldHM9ITApLGRyKHQsZSxmdW5jdGlvbihlKXt2YXIgcj1lLndpZGdldHN8fChlLndpZGdldHM9W10pO2lmKG51bGw9PWkuaW5zZXJ0QXQ/ci5wdXNoKGkpOnIuc3BsaWNlKE1hdGgubWluKHIubGVuZ3RoLTEsTWF0aC5tYXgoMCxpLmluc2VydEF0KSksMCxpKSxpLmxpbmU9ZSwhVnIodC5kb2MsZSl8fGkuc2hvd0lmSGlkZGVuKXt2YXIgbj1Dbih0LGUpPHQuZG9jLnNjcm9sbFRvcDt5bihlLGUuaGVpZ2h0K1lyKGkpKSxuJiZmcih0LDAsaS5oZWlnaHQpfXJldHVybiEwfSksaX1mdW5jdGlvbiAkcih0LGUscixuKXt0LnRleHQ9ZSx0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKSxudWxsIT10Lm9yZGVyJiYodC5vcmRlcj1udWxsKSxVcih0KSxYcih0LHIpO3ZhciBpPW4/bih0KToxO2khPXQuaGVpZ2h0JiZ5bih0LGkpfWZ1bmN0aW9uIFpyKHQpe3QucGFyZW50PW51bGwsVXIodCl9ZnVuY3Rpb24gcXIodCxlLHIsbixpLG8pe3ZhciBsPXIuZmxhdHRlblNwYW5zO251bGw9PWwmJihsPXQub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciBzLGE9MCx1PW51bGwsYz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKCIiPT1lJiZyLmJsYW5rTGluZSYmci5ibGFua0xpbmUobik7IWMuZW9sKCk7KWMucG9zPnQub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGg/KGw9ITEsbyYmdG4odCxlLG4sYy5wb3MpLGMucG9zPWUubGVuZ3RoLHM9bnVsbCk6cz1yLnRva2VuKGMsbiksbCYmdT09c3x8KGE8Yy5zdGFydCYmaShjLnN0YXJ0LHUpLGE9Yy5zdGFydCx1PXMpLGMuc3RhcnQ9Yy5wb3M7Zm9yKDthPGMucG9zOyl7dmFyIGY9TWF0aC5taW4oYy5wb3MsYSs1ZTQpO2koZix1KSxhPWZ9fWZ1bmN0aW9uIFFyKHQsZSxyLG4pe3ZhciBpPVt0LnN0YXRlLm1vZGVHZW5dO3FyKHQsZS50ZXh0LHQuZG9jLm1vZGUscixmdW5jdGlvbih0LGUpe2kucHVzaCh0LGUpfSxuKTtmb3IodmFyIG89MDtvPHQuc3RhdGUub3ZlcmxheXMubGVuZ3RoOysrbyl7dmFyIGw9dC5zdGF0ZS5vdmVybGF5c1tvXSxzPTEsYT0wO3FyKHQsZS50ZXh0LGwubW9kZSwhMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1zO3Q+YTspe3ZhciBuPWlbc107bj50JiZpLnNwbGljZShzLDEsdCxpW3MrMV0sbikscys9MixhPU1hdGgubWluKHQsbil9aWYoZSlpZihsLm9wYXF1ZSlpLnNwbGljZShyLHMtcix0LGUpLHM9cisyO2Vsc2UgZm9yKDtzPnI7cis9Mil7dmFyIG89aVtyKzFdO2lbcisxXT1vP28rIiAiK2U6ZX19KX1yZXR1cm4gaX1mdW5jdGlvbiBKcih0LGUpe3JldHVybiBlLnN0eWxlcyYmZS5zdHlsZXNbMF09PXQuc3RhdGUubW9kZUdlbnx8KGUuc3R5bGVzPVFyKHQsZSxlLnN0YXRlQWZ0ZXI9eih0LGJuKGUpKSkpLGUuc3R5bGVzfWZ1bmN0aW9uIHRuKHQsZSxyLG4pe3ZhciBpPXQuZG9jLm1vZGUsbz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKG8uc3RhcnQ9by5wb3M9bnx8MCwiIj09ZSYmaS5ibGFua0xpbmUmJmkuYmxhbmtMaW5lKHIpOyFvLmVvbCgpJiZvLnBvczw9dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aDspaS50b2tlbihvLHIpLG8uc3RhcnQ9by5wb3N9ZnVuY3Rpb24gZW4odCxlKXtpZighdClyZXR1cm4gbnVsbDtmb3IoOzspe3ZhciByPXQubWF0Y2goLyg/Ol58XHMpbGluZS0oYmFja2dyb3VuZC0pPyhcUyspLyk7aWYoIXIpYnJlYWs7dD10LnNsaWNlKDAsci5pbmRleCkrdC5zbGljZShyLmluZGV4K3JbMF0ubGVuZ3RoKTt2YXIgbj1yWzFdPyJiZ0NsYXNzIjoidGV4dENsYXNzIjtudWxsPT1lW25dP2Vbbl09clsyXTpuZXcgUmVnRXhwKCIoPzpefHMpIityWzJdKyIoPzokfHMpIikudGVzdChlW25dKXx8KGVbbl0rPSIgIityWzJdKX1yZXR1cm4geG9bdF18fCh4b1t0XT0iY20tIit0LnJlcGxhY2UoLyArL2csIiBjbS0iKSl9ZnVuY3Rpb24gcm4odCxlLHIsbil7Zm9yKHZhciBpLG89ZSxsPSEwO2k9UnIobyk7KW89Z24odC5kb2MsaS5maW5kKCkuZnJvbS5saW5lKTt2YXIgcz17cHJlOnNpKCJwcmUiKSxjb2w6MCxwb3M6MCxtZWFzdXJlOm51bGwsbWVhc3VyZWRTb21ldGhpbmc6ITEsY206dCxjb3B5V2lkZ2V0czpufTtkb3tvLnRleHQmJihsPSExKSxzLm1lYXN1cmU9bz09ZSYmcixzLnBvcz0wLHMuYWRkVG9rZW49cy5tZWFzdXJlP2xuOm9uLChBaXx8V2kpJiZ0LmdldE9wdGlvbigibGluZVdyYXBwaW5nIikmJihzLmFkZFRva2VuPXNuKHMuYWRkVG9rZW4pKTt2YXIgYT11bihvLHMsSnIodCxvKSk7ciYmbz09ZSYmIXMubWVhc3VyZWRTb21ldGhpbmcmJihyWzBdPXMucHJlLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSkscy5tZWFzdXJlZFNvbWV0aGluZz0hMCksYSYmKG89Z24odC5kb2MsYS50by5saW5lKSl9d2hpbGUoYSk7IXJ8fHMubWVhc3VyZWRTb21ldGhpbmd8fHJbMF18fChyWzBdPXMucHJlLmFwcGVuZENoaWxkKGw/c2koInNwYW4iLCLCoCIpOnBpKHQuZGlzcGxheS5tZWFzdXJlKSkpLHMucHJlLmZpcnN0Q2hpbGR8fFZyKHQuZG9jLGUpfHxzLnByZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiwqAiKSk7dmFyIHU7aWYociYmKEFpfHxEaSkmJih1PXduKG8pKSl7dmFyIGM9dS5sZW5ndGgtMTt1W2NdLmZyb209PXVbY10udG8mJi0tYzt2YXIgZj11W2NdLGg9dVtjLTFdO2lmKGYuZnJvbSsxPT1mLnRvJiZoJiZmLmxldmVsPGgubGV2ZWwpe3ZhciBkPXJbcy5wb3MtMV07ZCYmZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkLm1lYXN1cmVSaWdodD1waSh0LmRpc3BsYXkubWVhc3VyZSksZC5uZXh0U2libGluZyl9fXZhciBwPXMudGV4dENsYXNzP3MudGV4dENsYXNzKyIgIisoZS50ZXh0Q2xhc3N8fCIiKTplLnRleHRDbGFzcztyZXR1cm4gcCYmKHMucHJlLmNsYXNzTmFtZT1wKSxLbih0LCJyZW5kZXJMaW5lIix0LGUscy5wcmUpLHN9ZnVuY3Rpb24gbm4odCl7dmFyIGU9c2koInNwYW4iLCLigKIiLCJjbS1pbnZhbGlkY2hhciIpO3JldHVybiBlLnRpdGxlPSJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNiksZX1mdW5jdGlvbiBvbih0LGUscixuLGksbyl7aWYoZSl7dmFyIGw9dC5jbS5vcHRpb25zLnNwZWNpYWxDaGFycztpZihsLnRlc3QoZSkpZm9yKHZhciBzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxhPTA7Oyl7bC5sYXN0SW5kZXg9YTt2YXIgdT1sLmV4ZWMoZSksYz11P3UuaW5kZXgtYTplLmxlbmd0aC1hO2lmKGMmJihzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuc2xpY2UoYSxhK2MpKSksdC5jb2wrPWMpLCF1KWJyZWFrO2lmKGErPWMrMSwiCSI9PXVbMF0pe3ZhciBmPXQuY20ub3B0aW9ucy50YWJTaXplLGg9Zi10LmNvbCVmO3MuYXBwZW5kQ2hpbGQoc2koInNwYW4iLHFuKGgpLCJjbS10YWIiKSksdC5jb2wrPWh9ZWxzZXt2YXIgZD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcih1WzBdKTtzLmFwcGVuZENoaWxkKGQpLHQuY29sKz0xfX1lbHNle3QuY29sKz1lLmxlbmd0aDt2YXIgcz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX1pZihyfHxufHxpfHx0Lm1lYXN1cmUpe3ZhciBwPXJ8fCIiO24mJihwKz1uKSxpJiYocCs9aSk7dmFyIGQ9c2koInNwYW4iLFtzXSxwKTtyZXR1cm4gbyYmKGQudGl0bGU9byksdC5wcmUuYXBwZW5kQ2hpbGQoZCl9dC5wcmUuYXBwZW5kQ2hpbGQocyl9fWZ1bmN0aW9uIGxuKHQsZSxyLG4saSl7Zm9yKHZhciBvPXQuY20ub3B0aW9ucy5saW5lV3JhcHBpbmcsbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgcz1lLmNoYXJBdChsKSxhPTA9PWw7cz49Iu2ggCImJiLtr78iPnMmJmw8ZS5sZW5ndGgtMT8ocz1lLnNsaWNlKGwsbCsyKSwrK2wpOmwmJm8mJmhpKGUsbCkmJnQucHJlLmFwcGVuZENoaWxkKHNpKCJ3YnIiKSk7dmFyIHU9dC5tZWFzdXJlW3QucG9zXSxjPXQubWVhc3VyZVt0LnBvc109b24odCxzLHIsYSYmbixsPT1lLmxlbmd0aC0xJiZpKTt1JiYoYy5sZWZ0U2lkZT11LmxlZnRTaWRlfHx1KSxBaSYmbyYmIiAiPT1zJiZsJiYhL1xzLy50ZXN0KGUuY2hhckF0KGwtMSkpJiZsPGUubGVuZ3RoLTEmJiEvXHMvLnRlc3QoZS5jaGFyQXQobCsxKSkmJihjLnN0eWxlLndoaXRlU3BhY2U9Im5vcm1hbCIpLHQucG9zKz1zLmxlbmd0aH1lLmxlbmd0aCYmKHQubWVhc3VyZWRTb21ldGhpbmc9ITApfWZ1bmN0aW9uIHNuKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlPSIgIixyPTA7cjx0Lmxlbmd0aC0yOysrcillKz1yJTI/IiAiOiLCoCI7cmV0dXJuIGUrPSIgIn1yZXR1cm4gZnVuY3Rpb24ocixuLGksbyxsLHMpe3JldHVybiB0KHIsbi5yZXBsYWNlKC8gezMsfS9nLGUpLGksbyxsLHMpfX1mdW5jdGlvbiBhbih0LGUscixuKXt2YXIgaT0hbiYmci5yZXBsYWNlZFdpdGg7aWYoaSYmKHQuY29weVdpZGdldHMmJihpPWkuY2xvbmVOb2RlKCEwKSksdC5wcmUuYXBwZW5kQ2hpbGQoaSksdC5tZWFzdXJlKSl7aWYoZSl0Lm1lYXN1cmVbdC5wb3NdPWk7ZWxzZXt2YXIgbz1waSh0LmNtLmRpc3BsYXkubWVhc3VyZSk7aWYoImJvb2ttYXJrIiE9ci50eXBlfHxyLmluc2VydExlZnQpe2lmKHQubWVhc3VyZVt0LnBvc10pcmV0dXJuO3QubWVhc3VyZVt0LnBvc109dC5wcmUuaW5zZXJ0QmVmb3JlKG8saSl9ZWxzZSB0Lm1lYXN1cmVbdC5wb3NdPXQucHJlLmFwcGVuZENoaWxkKG8pfXQubWVhc3VyZWRTb21ldGhpbmc9ITB9dC5wb3MrPWV9ZnVuY3Rpb24gdW4odCxlLHIpe3ZhciBuPXQubWFya2VkU3BhbnMsaT10LnRleHQsbz0wO2lmKG4pZm9yKHZhciBsLHMsYSx1LGMsZixoPWkubGVuZ3RoLGQ9MCxwPTEsZz0iIixtPTA7Oyl7aWYobT09ZCl7cz1hPXU9Yz0iIixmPW51bGwsbT0xLzA7Zm9yKHZhciB2PVtdLHk9MDt5PG4ubGVuZ3RoOysreSl7dmFyIGI9blt5XSx4PWIubWFya2VyO2IuZnJvbTw9ZCYmKG51bGw9PWIudG98fGIudG8+ZCk/KG51bGwhPWIudG8mJm0+Yi50byYmKG09Yi50byxhPSIiKSx4LmNsYXNzTmFtZSYmKHMrPSIgIit4LmNsYXNzTmFtZSkseC5zdGFydFN0eWxlJiZiLmZyb209PWQmJih1Kz0iICIreC5zdGFydFN0eWxlKSx4LmVuZFN0eWxlJiZiLnRvPT1tJiYoYSs9IiAiK3guZW5kU3R5bGUpLHgudGl0bGUmJiFjJiYoYz14LnRpdGxlKSx4LmNvbGxhcHNlZCYmKCFmfHxmLm1hcmtlci5zaXplPHguc2l6ZSkmJihmPWIpKTpiLmZyb20+ZCYmbT5iLmZyb20mJihtPWIuZnJvbSksImJvb2ttYXJrIj09eC50eXBlJiZiLmZyb209PWQmJngucmVwbGFjZWRXaXRoJiZ2LnB1c2goeCkKfWlmKGYmJihmLmZyb218fDApPT1kJiYoYW4oZSwobnVsbD09Zi50bz9oOmYudG8pLWQsZi5tYXJrZXIsbnVsbD09Zi5mcm9tKSxudWxsPT1mLnRvKSlyZXR1cm4gZi5tYXJrZXIuZmluZCgpO2lmKCFmJiZ2Lmxlbmd0aClmb3IodmFyIHk9MDt5PHYubGVuZ3RoOysreSlhbihlLDAsdlt5XSl9aWYoZD49aClicmVhaztmb3IodmFyIEM9TWF0aC5taW4oaCxtKTs7KXtpZihnKXt2YXIgdz1kK2cubGVuZ3RoO2lmKCFmKXt2YXIgTD13PkM/Zy5zbGljZSgwLEMtZCk6ZztlLmFkZFRva2VuKGUsTCxsP2wrczpzLHUsZCtMLmxlbmd0aD09bT9hOiIiLGMpfWlmKHc+PUMpe2c9Zy5zbGljZShDLWQpLGQ9QzticmVha31kPXcsdT0iIn1nPWkuc2xpY2UobyxvPXJbcCsrXSksbD1lbihyW3ArK10sZSl9fWVsc2UgZm9yKHZhciBwPTE7cDxyLmxlbmd0aDtwKz0yKWUuYWRkVG9rZW4oZSxpLnNsaWNlKG8sbz1yW3BdKSxlbihyW3ArMV0sZSkpfWZ1bmN0aW9uIGNuKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gcj9yW3RdOm51bGx9ZnVuY3Rpb24gbCh0LHIsbil7JHIodCxyLG4saSksVW4odCwiY2hhbmdlIix0LGUpfXZhciBzPWUuZnJvbSxhPWUudG8sdT1lLnRleHQsYz1nbih0LHMubGluZSksZj1nbih0LGEubGluZSksaD1Rbih1KSxkPW8odS5sZW5ndGgtMSkscD1hLmxpbmUtcy5saW5lO2lmKDAhPXMuY2h8fDAhPWEuY2h8fCIiIT1ofHx0LmNtJiYhdC5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSlpZihjPT1mKWlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKStoK2MudGV4dC5zbGljZShhLmNoKSxkKTtlbHNle2Zvcih2YXIgZz1bXSxtPTEsdj11Lmxlbmd0aC0xO3Y+bTsrK20pZy5wdXNoKG5ldyBibyh1W21dLG8obSksaSkpO2cucHVzaChuZXcgYm8oaCtjLnRleHQuc2xpY2UoYS5jaCksZCxpKSksbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK3VbMF0sbygwKSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZSBpZigxPT11Lmxlbmd0aClsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXStmLnRleHQuc2xpY2UoYS5jaCksbygwKSksdC5yZW1vdmUocy5saW5lKzEscCk7ZWxzZXtsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSxsKGYsaCtmLnRleHQuc2xpY2UoYS5jaCksZCk7Zm9yKHZhciBtPTEsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7cD4xJiZ0LnJlbW92ZShzLmxpbmUrMSxwLTEpLHQuaW5zZXJ0KHMubGluZSsxLGcpfWVsc2V7Zm9yKHZhciBtPTAsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7bChmLGYudGV4dCxkKSxwJiZ0LnJlbW92ZShzLmxpbmUscCksZy5sZW5ndGgmJnQuaW5zZXJ0KHMubGluZSxnKX1Vbih0LCJjaGFuZ2UiLHQsZSksbnIodCxuLmFuY2hvcixuLmhlYWQsbnVsbCwhMCl9ZnVuY3Rpb24gZm4odCl7dGhpcy5saW5lcz10LHRoaXMucGFyZW50PW51bGw7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPTA7cj5lOysrZSl0W2VdLnBhcmVudD10aGlzLG4rPXRbZV0uaGVpZ2h0O3RoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gaG4odCl7dGhpcy5jaGlsZHJlbj10O2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10Lmxlbmd0aDtpPm47KytuKXt2YXIgbz10W25dO2UrPW8uY2h1bmtTaXplKCkscis9by5oZWlnaHQsby5wYXJlbnQ9dGhpc310aGlzLnNpemU9ZSx0aGlzLmhlaWdodD1yLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24gZG4odCxlLHIpe2Z1bmN0aW9uIG4odCxpLG8pe2lmKHQubGlua2VkKWZvcih2YXIgbD0wO2w8dC5saW5rZWQubGVuZ3RoOysrbCl7dmFyIHM9dC5saW5rZWRbbF07aWYocy5kb2MhPWkpe3ZhciBhPW8mJnMuc2hhcmVkSGlzdDsoIXJ8fGEpJiYoZShzLmRvYyxhKSxuKHMuZG9jLHQsYSkpfX19bih0LG51bGwsITApfWZ1bmN0aW9uIHBuKHQsZSl7aWYoZS5jbSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuIik7dC5kb2M9ZSxlLmNtPXQsbyh0KSxyKHQpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fGYodCksdC5vcHRpb25zLm1vZGU9ZS5tb2RlT3B0aW9uLHVlKHQpfWZ1bmN0aW9uIGduKHQsZSl7Zm9yKGUtPXQuZmlyc3Q7IXQubGluZXM7KWZvcih2YXIgcj0wOzsrK3Ipe3ZhciBuPXQuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+ZSl7dD1uO2JyZWFrfWUtPWl9cmV0dXJuIHQubGluZXNbZV19ZnVuY3Rpb24gbW4odCxlLHIpe3ZhciBuPVtdLGk9ZS5saW5lO3JldHVybiB0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe3ZhciBvPXQudGV4dDtpPT1yLmxpbmUmJihvPW8uc2xpY2UoMCxyLmNoKSksaT09ZS5saW5lJiYobz1vLnNsaWNlKGUuY2gpKSxuLnB1c2gobyksKytpfSksbn1mdW5jdGlvbiB2bih0LGUscil7dmFyIG49W107cmV0dXJuIHQuaXRlcihlLHIsZnVuY3Rpb24odCl7bi5wdXNoKHQudGV4dCl9KSxufWZ1bmN0aW9uIHluKHQsZSl7Zm9yKHZhciByPWUtdC5oZWlnaHQsbj10O247bj1uLnBhcmVudCluLmhlaWdodCs9cn1mdW5jdGlvbiBibih0KXtpZihudWxsPT10LnBhcmVudClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQscj10aShlLmxpbmVzLHQpLG49ZS5wYXJlbnQ7bjtlPW4sbj1uLnBhcmVudClmb3IodmFyIGk9MDtuLmNoaWxkcmVuW2ldIT1lOysraSlyKz1uLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpO3JldHVybiByK2UuZmlyc3R9ZnVuY3Rpb24geG4odCxlKXt2YXIgcj10LmZpcnN0O3Q6ZG97Zm9yKHZhciBuPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10LmNoaWxkcmVuW25dLGw9by5oZWlnaHQ7aWYobD5lKXt0PW87Y29udGludWUgdH1lLT1sLHIrPW8uY2h1bmtTaXplKCl9cmV0dXJuIHJ9d2hpbGUoIXQubGluZXMpO2Zvcih2YXIgbj0wLGk9dC5saW5lcy5sZW5ndGg7aT5uOysrbil7dmFyIHM9dC5saW5lc1tuXSxhPXMuaGVpZ2h0O2lmKGE+ZSlicmVhaztlLT1hfXJldHVybiByK259ZnVuY3Rpb24gQ24odCxlKXtlPUdyKHQuZG9jLGUpO2Zvcih2YXIgcj0wLG49ZS5wYXJlbnQsaT0wO2k8bi5saW5lcy5sZW5ndGg7KytpKXt2YXIgbz1uLmxpbmVzW2ldO2lmKG89PWUpYnJlYWs7cis9by5oZWlnaHR9Zm9yKHZhciBsPW4ucGFyZW50O2w7bj1sLGw9bi5wYXJlbnQpZm9yKHZhciBpPTA7aTxsLmNoaWxkcmVuLmxlbmd0aDsrK2kpe3ZhciBzPWwuY2hpbGRyZW5baV07aWYocz09bilicmVhaztyKz1zLmhlaWdodH1yZXR1cm4gcn1mdW5jdGlvbiB3bih0KXt2YXIgZT10Lm9yZGVyO3JldHVybiBudWxsPT1lJiYoZT10Lm9yZGVyPUJvKHQudGV4dCkpLGV9ZnVuY3Rpb24gTG4odCl7cmV0dXJue2RvbmU6W10sdW5kb25lOltdLHVuZG9EZXB0aDoxLzAsbGFzdFRpbWU6MCxsYXN0T3A6bnVsbCxsYXN0T3JpZ2luOm51bGwsZ2VuZXJhdGlvbjp0fHwxLG1heEdlbmVyYXRpb246dHx8MX19ZnVuY3Rpb24ga24odCxlLHIsbil7dmFyIGk9ZVsic3BhbnNfIit0LmlkXSxvPTA7dC5pdGVyKE1hdGgubWF4KHQuZmlyc3QsciksTWF0aC5taW4odC5maXJzdCt0LnNpemUsbiksZnVuY3Rpb24ocil7ci5tYXJrZWRTcGFucyYmKChpfHwoaT1lWyJzcGFuc18iK3QuaWRdPXt9KSlbb109ci5tYXJrZWRTcGFucyksKytvfSl9ZnVuY3Rpb24gU24odCxlKXt2YXIgcj17bGluZTplLmZyb20ubGluZSxjaDplLmZyb20uY2h9LG49e2Zyb206cix0bzpsbyhlKSx0ZXh0Om1uKHQsZS5mcm9tLGUudG8pfTtyZXR1cm4ga24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKSxkbih0LGZ1bmN0aW9uKHQpe2tuKHQsbixlLmZyb20ubGluZSxlLnRvLmxpbmUrMSl9LCEwKSxufWZ1bmN0aW9uIE1uKHQsZSxyLG4pe3ZhciBpPXQuaGlzdG9yeTtpLnVuZG9uZS5sZW5ndGg9MDt2YXIgbz0rbmV3IERhdGUsbD1RbihpLmRvbmUpO2lmKGwmJihpLmxhc3RPcD09bnx8aS5sYXN0T3JpZ2luPT1lLm9yaWdpbiYmZS5vcmlnaW4mJigiKyI9PWUub3JpZ2luLmNoYXJBdCgwKSYmdC5jbSYmaS5sYXN0VGltZT5vLXQuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheXx8IioiPT1lLm9yaWdpbi5jaGFyQXQoMCkpKSl7dmFyIHM9UW4obC5jaGFuZ2VzKTtqZShlLmZyb20sZS50bykmJmplKGUuZnJvbSxzLnRvKT9zLnRvPWxvKGUpOmwuY2hhbmdlcy5wdXNoKFNuKHQsZSkpLGwuYW5jaG9yQWZ0ZXI9ci5hbmNob3IsbC5oZWFkQWZ0ZXI9ci5oZWFkfWVsc2UgZm9yKGw9e2NoYW5nZXM6W1NuKHQsZSldLGdlbmVyYXRpb246aS5nZW5lcmF0aW9uLGFuY2hvckJlZm9yZTp0LnNlbC5hbmNob3IsaGVhZEJlZm9yZTp0LnNlbC5oZWFkLGFuY2hvckFmdGVyOnIuYW5jaG9yLGhlYWRBZnRlcjpyLmhlYWR9LGkuZG9uZS5wdXNoKGwpLGkuZ2VuZXJhdGlvbj0rK2kubWF4R2VuZXJhdGlvbjtpLmRvbmUubGVuZ3RoPmkudW5kb0RlcHRoOylpLmRvbmUuc2hpZnQoKTtpLmxhc3RUaW1lPW8saS5sYXN0T3A9bixpLmxhc3RPcmlnaW49ZS5vcmlnaW59ZnVuY3Rpb24gVG4odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlLHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLm1hcmtlci5leHBsaWNpdGx5Q2xlYXJlZD9lfHwoZT10LnNsaWNlKDAscikpOmUmJmUucHVzaCh0W3JdKTtyZXR1cm4gZT9lLmxlbmd0aD9lOm51bGw6dH1mdW5jdGlvbiBBbih0LGUpe3ZhciByPWVbInNwYW5zXyIrdC5pZF07aWYoIXIpcmV0dXJuIG51bGw7Zm9yKHZhciBuPTAsaT1bXTtuPGUudGV4dC5sZW5ndGg7KytuKWkucHVzaChUbihyW25dKSk7cmV0dXJuIGl9ZnVuY3Rpb24gSG4odCxlKXtmb3IodmFyIHI9MCxuPVtdO3I8dC5sZW5ndGg7KytyKXt2YXIgaT10W3JdLG89aS5jaGFuZ2VzLGw9W107bi5wdXNoKHtjaGFuZ2VzOmwsYW5jaG9yQmVmb3JlOmkuYW5jaG9yQmVmb3JlLGhlYWRCZWZvcmU6aS5oZWFkQmVmb3JlLGFuY2hvckFmdGVyOmkuYW5jaG9yQWZ0ZXIsaGVhZEFmdGVyOmkuaGVhZEFmdGVyfSk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDsrK3Mpe3ZhciBhLHU9b1tzXTtpZihsLnB1c2goe2Zyb206dS5mcm9tLHRvOnUudG8sdGV4dDp1LnRleHR9KSxlKWZvcih2YXIgYyBpbiB1KShhPWMubWF0Y2goL15zcGFuc18oXGQrKSQvKSkmJnRpKGUsTnVtYmVyKGFbMV0pKT4tMSYmKFFuKGwpW2NdPXVbY10sZGVsZXRlIHVbY10pfX1yZXR1cm4gbn1mdW5jdGlvbiBObih0LGUscixuKXtyPHQubGluZT90LmxpbmUrPW46ZTx0LmxpbmUmJih0LmxpbmU9ZSx0LmNoPTApfWZ1bmN0aW9uIERuKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXtmb3IodmFyIG89dFtpXSxsPSEwLHM9MDtzPG8uY2hhbmdlcy5sZW5ndGg7KytzKXt2YXIgYT1vLmNoYW5nZXNbc107aWYoby5jb3BpZWR8fChhLmZyb209WmUoYS5mcm9tKSxhLnRvPVplKGEudG8pKSxyPGEuZnJvbS5saW5lKWEuZnJvbS5saW5lKz1uLGEudG8ubGluZSs9bjtlbHNlIGlmKGU8PWEudG8ubGluZSl7bD0hMTticmVha319by5jb3BpZWR8fChvLmFuY2hvckJlZm9yZT1aZShvLmFuY2hvckJlZm9yZSksby5oZWFkQmVmb3JlPVplKG8uaGVhZEJlZm9yZSksby5hbmNob3JBZnRlcj1aZShvLmFuY2hvckFmdGVyKSxvLnJlYWRBZnRlcj1aZShvLmhlYWRBZnRlciksby5jb3BpZWQ9ITApLGw/KE5uKG8uYW5jaG9yQmVmb3JlKSxObihvLmhlYWRCZWZvcmUpLE5uKG8uYW5jaG9yQWZ0ZXIpLE5uKG8uaGVhZEFmdGVyKSk6KHQuc3BsaWNlKDAsaSsxKSxpPTApfX1mdW5jdGlvbiBXbih0LGUpe3ZhciByPWUuZnJvbS5saW5lLG49ZS50by5saW5lLGk9ZS50ZXh0Lmxlbmd0aC0obi1yKS0xO0RuKHQuZG9uZSxyLG4saSksRG4odC51bmRvbmUscixuLGkpfWZ1bmN0aW9uIE9uKCl7UG4odGhpcyl9ZnVuY3Rpb24gRW4odCl7cmV0dXJuIHQuc3RvcHx8KHQuc3RvcD1PbiksdH1mdW5jdGlvbiB6bih0KXt0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIEluKHQpe3Quc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gRm4odCl7cmV0dXJuIG51bGwhPXQuZGVmYXVsdFByZXZlbnRlZD90LmRlZmF1bHRQcmV2ZW50ZWQ6MD09dC5yZXR1cm5WYWx1ZX1mdW5jdGlvbiBQbih0KXt6bih0KSxJbih0KX1mdW5jdGlvbiBSbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudH1mdW5jdGlvbiBCbih0KXt2YXIgZT10LndoaWNoO3JldHVybiBudWxsPT1lJiYoMSZ0LmJ1dHRvbj9lPTE6MiZ0LmJ1dHRvbj9lPTM6NCZ0LmJ1dHRvbiYmKGU9MikpLEtpJiZ0LmN0cmxLZXkmJjE9PWUmJihlPTMpLGV9ZnVuY3Rpb24gR24odCxlLHIpe2lmKHQuYWRkRXZlbnRMaXN0ZW5lcil0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuYXR0YWNoRXZlbnQpdC5hdHRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVyc3x8KHQuX2hhbmRsZXJzPXt9KSxpPW5bZV18fChuW2VdPVtdKTtpLnB1c2gocil9fWZ1bmN0aW9uIFZuKHQsZSxyKXtpZih0LnJlbW92ZUV2ZW50TGlzdGVuZXIpdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMSk7ZWxzZSBpZih0LmRldGFjaEV2ZW50KXQuZGV0YWNoRXZlbnQoIm9uIitlLHIpO2Vsc2V7dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKCFuKXJldHVybjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoOysraSlpZihuW2ldPT1yKXtuLnNwbGljZShpLDEpO2JyZWFrfX19ZnVuY3Rpb24gS24odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYocilmb3IodmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLGk9MDtpPHIubGVuZ3RoOysraSlyW2ldLmFwcGx5KG51bGwsbil9ZnVuY3Rpb24gVW4odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxpKX19dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKG4pe3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtTb3x8KCsrTW8sU289W10sc2V0VGltZW91dChfbiwwKSk7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDsrK28pU28ucHVzaChyKG5bb10pKX19ZnVuY3Rpb24gWG4odCxlLHIpe3JldHVybiBLbih0LHJ8fGUudHlwZSx0LGUpLEZuKGUpfHxlLmNvZGVtaXJyb3JJZ25vcmV9ZnVuY3Rpb24gX24oKXstLU1vO3ZhciB0PVNvO1NvPW51bGw7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2UpdFtlXSgpfWZ1bmN0aW9uIFluKHQsZSl7dmFyIHI9dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO3JldHVybiByJiZyLmxlbmd0aD4wfWZ1bmN0aW9uIGpuKHQpe3QucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7R24odGhpcyx0LGUpfSx0LnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXtWbih0aGlzLHQsZSl9fWZ1bmN0aW9uICRuKCl7dGhpcy5pZD1udWxsfWZ1bmN0aW9uIFpuKHQsZSxyLG4saSl7bnVsbD09ZSYmKGU9dC5zZWFyY2goL1teXHNcdTAwYTBdLyksLTE9PWUmJihlPXQubGVuZ3RoKSk7Zm9yKHZhciBvPW58fDAsbD1pfHwwO2U+bzsrK28pIgkiPT10LmNoYXJBdChvKT9sKz1yLWwlcjorK2w7cmV0dXJuIGx9ZnVuY3Rpb24gcW4odCl7Zm9yKDtIby5sZW5ndGg8PXQ7KUhvLnB1c2goUW4oSG8pKyIgIik7cmV0dXJuIEhvW3RdfWZ1bmN0aW9uIFFuKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfWZ1bmN0aW9uIEpuKHQpe2lmKEdpKXQuc2VsZWN0aW9uU3RhcnQ9MCx0LnNlbGVjdGlvbkVuZD10LnZhbHVlLmxlbmd0aDtlbHNlIHRyeXt0LnNlbGVjdCgpfWNhdGNoKGUpe319ZnVuY3Rpb24gdGkodCxlKXtpZih0LmluZGV4T2YpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO24+cjsrK3IpaWYodFtyXT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBlaSh0LGUpe2Z1bmN0aW9uIHIoKXt9ci5wcm90b3R5cGU9dDt2YXIgbj1uZXcgcjtyZXR1cm4gZSYmcmkoZSxuKSxufWZ1bmN0aW9uIHJpKHQsZSl7ZXx8KGU9e30pO2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT1bXSxyPTA7dD5yOysrcillLnB1c2godm9pZCAwKTtyZXR1cm4gZX1mdW5jdGlvbiBpaSh0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gb2kodCl7cmV0dXJuL1x3Ly50ZXN0KHQpfHx0PiLCgCImJih0LnRvVXBwZXJDYXNlKCkhPXQudG9Mb3dlckNhc2UoKXx8Tm8udGVzdCh0KSl9ZnVuY3Rpb24gbGkodCl7Zm9yKHZhciBlIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzaSh0LGUscixuKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO2lmKHImJihpLmNsYXNzTmFtZT1yKSxuJiYoaS5zdHlsZS5jc3NUZXh0PW4pLCJzdHJpbmciPT10eXBlb2YgZSljaShpLGUpO2Vsc2UgaWYoZSlmb3IodmFyIG89MDtvPGUubGVuZ3RoOysrbylpLmFwcGVuZENoaWxkKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGFpKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMubGVuZ3RoO2U+MDstLWUpdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3JldHVybiB0fWZ1bmN0aW9uIHVpKHQsZSl7cmV0dXJuIGFpKHQpLmFwcGVuZENoaWxkKGUpfWZ1bmN0aW9uIGNpKHQsZSl7Tmk/KHQuaW5uZXJIVE1MPSIiLHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpKTp0LnRleHRDb250ZW50PWV9ZnVuY3Rpb24gZmkodCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4hMX1mdW5jdGlvbiBkaSh0KXtpZihudWxsIT1PbylyZXR1cm4gT287dmFyIGU9c2koImRpdiIsbnVsbCxudWxsLCJ3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxvdy14OiBzY3JvbGwiKTtyZXR1cm4gdWkodCxlKSxlLm9mZnNldFdpZHRoJiYoT289ZS5vZmZzZXRIZWlnaHQtZS5jbGllbnRIZWlnaHQpLE9vfHwwfWZ1bmN0aW9uIHBpKHQpe2lmKG51bGw9PUVvKXt2YXIgZT1zaSgic3BhbiIsIuKAiyIpO3VpKHQsc2koInNwYW4iLFtlLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IildKSksMCE9dC5maXJzdENoaWxkLm9mZnNldEhlaWdodCYmKEVvPWUub2Zmc2V0V2lkdGg8PTEmJmUub2Zmc2V0SGVpZ2h0PjImJiFIaSl9cmV0dXJuIEVvP3NpKCJzcGFuIiwi4oCLIik6c2koInNwYW4iLCLCoCIsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgiKX1mdW5jdGlvbiBnaSh0LGUscixuKXtpZighdClyZXR1cm4gbihlLHIsImx0ciIpO2Zvcih2YXIgaT0hMSxvPTA7bzx0Lmxlbmd0aDsrK28pe3ZhciBsPXRbb107KGwuZnJvbTxyJiZsLnRvPmV8fGU9PXImJmwudG89PWUpJiYobihNYXRoLm1heChsLmZyb20sZSksTWF0aC5taW4obC50byxyKSwxPT1sLmxldmVsPyJydGwiOiJsdHIiKSxpPSEwKX1pfHxuKGUsciwibHRyIil9ZnVuY3Rpb24gbWkodCl7cmV0dXJuIHQubGV2ZWwlMj90LnRvOnQuZnJvbX1mdW5jdGlvbiB2aSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QuZnJvbTp0LnRvfWZ1bmN0aW9uIHlpKHQpe3ZhciBlPXduKHQpO3JldHVybiBlP21pKGVbMF0pOjB9ZnVuY3Rpb24gYmkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/dmkoUW4oZSkpOnQudGV4dC5sZW5ndGh9ZnVuY3Rpb24geGkodCxlKXt2YXIgcj1nbih0LmRvYyxlKSxuPUdyKHQuZG9jLHIpO24hPXImJihlPWJuKG4pKTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP2JpKG4pOnlpKG4pOjA7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gQ2kodCxlKXtmb3IodmFyIHIsbjtyPUJyKG49Z24odC5kb2MsZSkpOyllPXIuZmluZCgpLnRvLmxpbmU7dmFyIGk9d24obiksbz1pP2lbMF0ubGV2ZWwlMj95aShuKTpiaShuKTpuLnRleHQubGVuZ3RoO3JldHVybiBZZShlLG8pfWZ1bmN0aW9uIHdpKHQsZSxyKXt2YXIgbj10WzBdLmxldmVsO3JldHVybiBlPT1uPyEwOnI9PW4/ITE6cj5lfWZ1bmN0aW9uIExpKHQsZSl7Zm9yKHZhciByLG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXTtpZihpLmZyb208ZSYmaS50bz5lKXJldHVybiBSbz1udWxsLG47aWYoaS5mcm9tPT1lfHxpLnRvPT1lKXtpZihudWxsIT1yKXJldHVybiB3aSh0LGkubGV2ZWwsdFtyXS5sZXZlbCk/KFJvPXIsbik6KFJvPW4scik7cj1ufX1yZXR1cm4gUm89bnVsbCxyfWZ1bmN0aW9uIGtpKHQsZSxyLG4pe2lmKCFuKXJldHVybiBlK3I7ZG8gZSs9cjt3aGlsZShlPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChlKSkpO3JldHVybiBlfWZ1bmN0aW9uIFNpKHQsZSxyLG4pe3ZhciBpPXduKHQpO2lmKCFpKXJldHVybiBNaSh0LGUscixuKTtmb3IodmFyIG89TGkoaSxlKSxsPWlbb10scz1raSh0LGUsbC5sZXZlbCUyPy1yOnIsbik7Oyl7aWYocz5sLmZyb20mJnM8bC50bylyZXR1cm4gcztpZihzPT1sLmZyb218fHM9PWwudG8pcmV0dXJuIExpKGkscyk9PW8/czoobD1pW28rPXJdLHI+MD09bC5sZXZlbCUyP2wudG86bC5mcm9tKTtpZihsPWlbbys9cl0sIWwpcmV0dXJuIG51bGw7cz1yPjA9PWwubGV2ZWwlMj9raSh0LGwudG8sLTEsbik6a2kodCxsLmZyb20sMSxuKX19ZnVuY3Rpb24gTWkodCxlLHIsbil7dmFyIGk9ZStyO2lmKG4pZm9yKDtpPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChpKSk7KWkrPXI7cmV0dXJuIDA+aXx8aT50LnRleHQubGVuZ3RoP251bGw6aX12YXIgVGk9L2dlY2tvXC9cZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQWk9L01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSGk9QWkmJihudWxsPT1kb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw4KSxOaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDkpLERpPS9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFdpPS9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxPaT1XaSYmL1F0XC9cZCtcLlxkKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxFaT0vQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksemk9L09wZXJhXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSWk9L0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLEZpPS9LSFRNTFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFBpPS9NYWMgT1MgWCAxXGRcRChbNy05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFJpPS9NYWMgT1MgWCAxXGRcRChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEJpPS9QaGFudG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksR2k9L0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvTW9iaWxlXC9cdysvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksVmk9R2l8fC9BbmRyb2lkfHdlYk9TfEJsYWNrQmVycnl8T3BlcmEgTWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxLaT1HaXx8L01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFVpPS93aW4vaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksWGk9emkmJm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cLyhcZCpcLlxkKikvKTtYaSYmKFhpPU51bWJlcihYaVsxXSkpLFhpJiZYaT49MTUmJih6aT0hMSxXaT0hMCk7dmFyIF9pLFlpLGppLCRpPUtpJiYoT2l8fHppJiYobnVsbD09WGl8fDEyLjExPlhpKSksWmk9VGl8fEFpJiYhTmkscWk9ITEsUWk9ITEsSmk9MCx0bz0wLGVvPTAscm89bnVsbDtBaT9ybz0tLjUzOlRpP3JvPTE1OkVpP3JvPS0uNzpJaSYmKHJvPS0xLzMpO3ZhciBubyxpbyxvbz1udWxsLGxvPXQuY2hhbmdlRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQ/WWUodC5mcm9tLmxpbmUrdC50ZXh0Lmxlbmd0aC0xLFFuKHQudGV4dCkubGVuZ3RoKygxPT10LnRleHQubGVuZ3RoP3QuZnJvbS5jaDowKSk6dC50b307dC5Qb3M9WWUsdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsZm9jdXM6ZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKSxwZSh0aGlzKSxmZSh0aGlzKX0sc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHRpb25zLG49clt0XTsoclt0XSE9ZXx8Im1vZGUiPT10KSYmKHJbdF09ZSxzby5oYXNPd25Qcm9wZXJ0eSh0KSYmbGUodGhpcyxzb1t0XSkodGhpcyxlLG4pKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnNbdF19LGdldERvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY30sYWRkS2V5TWFwOmZ1bmN0aW9uKHQsZSl7dGhpcy5zdGF0ZS5rZXlNYXBzW2U/InB1c2giOiJ1bnNoaWZ0Il0odCl9LHJlbW92ZUtleU1hcDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdGF0ZS5rZXlNYXBzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT10fHwic3RyaW5nIiE9dHlwZW9mIGVbcl0mJmVbcl0ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSwhMH0sYWRkT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKGUscil7dmFyIG49ZS50b2tlbj9lOnQuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsZSk7aWYobi5zdGFydFN0YXRlKXRocm93IG5ldyBFcnJvcigiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKTt0aGlzLnN0YXRlLm92ZXJsYXlzLnB1c2goe21vZGU6bixtb2RlU3BlYzplLG9wYXF1ZTpyJiZyLm9wYXF1ZX0pLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpfSkscmVtb3ZlT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLm92ZXJsYXlzLHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG49ZVtyXS5tb2RlU3BlYztpZihuPT10fHwic3RyaW5nIj09dHlwZW9mIHQmJm4ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSx0aGlzLnN0YXRlLm1vZGVHZW4rKyx1ZSh0aGlzKSx2b2lkIDB9fSksaW5kZW50TGluZTpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXsic3RyaW5nIiE9dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZSYmKGU9bnVsbD09ZT90aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQ/InNtYXJ0IjoicHJldiI6ZT8iYWRkIjoic3VidHJhY3QiKSx0cih0aGlzLmRvYyx0KSYmaHIodGhpcyx0LGUscil9KSxpbmRlbnRTZWxlY3Rpb246bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRvYy5zZWw7aWYoamUoZS5mcm9tLGUudG8pKXJldHVybiBocih0aGlzLGUuZnJvbS5saW5lLHQpO2Zvcih2YXIgcj1lLnRvLmxpbmUtKGUudG8uY2g/MDoxKSxuPWUuZnJvbS5saW5lO3I+PW47KytuKWhyKHRoaXMsbix0KX0pLGdldFRva2VuQXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYzt0PVFlKHIsdCk7Zm9yKHZhciBuPXoodGhpcyx0LmxpbmUsZSksaT10aGlzLmRvYy5tb2RlLG89Z24ocix0LmxpbmUpLGw9bmV3IFNyKG8udGV4dCx0aGlzLm9wdGlvbnMudGFiU2l6ZSk7bC5wb3M8dC5jaCYmIWwuZW9sKCk7KXtsLnN0YXJ0PWwucG9zO3ZhciBzPWkudG9rZW4obCxuKX1yZXR1cm57c3RhcnQ6bC5zdGFydCxlbmQ6bC5wb3Msc3RyaW5nOmwuY3VycmVudCgpLGNsYXNzTmFtZTpzfHxudWxsLHR5cGU6c3x8bnVsbCxzdGF0ZTpufX0sZ2V0VG9rZW5UeXBlQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLmRvYyx0KTt2YXIgZT1Kcih0aGlzLGduKHRoaXMuZG9jLHQubGluZSkpLHI9MCxuPShlLmxlbmd0aC0xKS8yLGk9dC5jaDtpZigwPT1pKXJldHVybiBlWzJdO2Zvcig7Oyl7dmFyIG89cituPj4xO2lmKChvP2VbMipvLTFdOjApPj1pKW49bztlbHNle2lmKCEoZVsyKm8rMV08aSkpcmV0dXJuIGVbMipvKzJdO3I9bysxfX19LGdldE1vZGVBdDpmdW5jdGlvbihlKXt2YXIgcj10aGlzLmRvYy5tb2RlO3JldHVybiByLmlubmVyTW9kZT90LmlubmVyTW9kZShyLHRoaXMuZ2V0VG9rZW5BdChlKS5zdGF0ZSkubW9kZTpyfSxnZXRIZWxwZXI6ZnVuY3Rpb24odCxlKXtpZihnby5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHI9Z29bZV0sbj10aGlzLmdldE1vZGVBdCh0KTtyZXR1cm4gbltlXSYmcltuW2VdXXx8bi5oZWxwZXJUeXBlJiZyW24uaGVscGVyVHlwZV18fHJbbi5uYW1lXX19LGdldFN0YXRlQWZ0ZXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYztyZXR1cm4gdD1xZShyLG51bGw9PXQ/ci5maXJzdCtyLnNpemUtMTp0KSx6KHRoaXMsdCsxLGUpfSxjdXJzb3JDb29yZHM6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyZXR1cm4gcj1udWxsPT10P24uaGVhZDoib2JqZWN0Ij09dHlwZW9mIHQ/UWUodGhpcy5kb2MsdCk6dD9uLmZyb206bi50byxRKHRoaXMscixlfHwicGFnZSIpfSxjaGFyQ29vcmRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHEodGhpcyxRZSh0aGlzLmRvYyx0KSxlfHwicGFnZSIpfSxjb29yZHNDaGFyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHQsZXx8InBhZ2UiKSx0ZSh0aGlzLHQubGVmdCx0LnRvcCl9LGxpbmVBdEhlaWdodDpmdW5jdGlvbih0LGUpe3JldHVybiB0PVoodGhpcyx7dG9wOnQsbGVmdDowfSxlfHwicGFnZSIpLnRvcCx4bih0aGlzLmRvYyx0K3RoaXMuZGlzcGxheS52aWV3T2Zmc2V0KX0saGVpZ2h0QXRMaW5lOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ITEsbj10aGlzLmRvYy5maXJzdCt0aGlzLmRvYy5zaXplLTE7dDx0aGlzLmRvYy5maXJzdD90PXRoaXMuZG9jLmZpcnN0OnQ+biYmKHQ9bixyPSEwKTt2YXIgaT1nbih0aGlzLmRvYyx0KTtyZXR1cm4gJCh0aGlzLGduKHRoaXMuZG9jLHQpLHt0b3A6MCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wKyhyP2kuaGVpZ2h0OjApfSxkZWZhdWx0VGV4dEhlaWdodDpmdW5jdGlvbigpe3JldHVybiByZSh0aGlzLmRpc3BsYXkpfSxkZWZhdWx0Q2hhcldpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5lKHRoaXMuZGlzcGxheSl9LHNldEd1dHRlck1hcmtlcjpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ3V0dGVyTWFya2Vyc3x8KHQuZ3V0dGVyTWFya2Vycz17fSk7cmV0dXJuIG5bZV09ciwhciYmbGkobikmJih0Lmd1dHRlck1hcmtlcnM9bnVsbCksITB9KX0pLGNsZWFyR3V0dGVyOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZG9jLG49ci5maXJzdDtyLml0ZXIoZnVuY3Rpb24ocil7ci5ndXR0ZXJNYXJrZXJzJiZyLmd1dHRlck1hcmtlcnNbdF0mJihyLmd1dHRlck1hcmtlcnNbdF09bnVsbCx1ZShlLG4sbisxKSxsaShyLmd1dHRlck1hcmtlcnMpJiYoci5ndXR0ZXJNYXJrZXJzPW51bGwpKSwrK259KX0pLGFkZExpbmVDbGFzczpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPSJ0ZXh0Ij09ZT8idGV4dENsYXNzIjoiYmFja2dyb3VuZCI9PWU/ImJnQ2xhc3MiOiJ3cmFwQ2xhc3MiO2lmKHRbbl0pe2lmKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIrcisiKD86JHxcXHMpIikudGVzdCh0W25dKSlyZXR1cm4hMTt0W25dKz0iICIrcn1lbHNlIHRbbl09cjtyZXR1cm4hMH0pfSkscmVtb3ZlTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyIsaT10W25dO2lmKCFpKXJldHVybiExO2lmKG51bGw9PXIpdFtuXT1udWxsO2Vsc2V7dmFyIG89aS5tYXRjaChuZXcgUmVnRXhwKCIoPzpefFxccyspIityKyIoPzokfFxccyspIikpO2lmKCFvKXJldHVybiExO3ZhciBsPW8uaW5kZXgrb1swXS5sZW5ndGg7dFtuXT1pLnNsaWNlKDAsby5pbmRleCkrKG8uaW5kZXgmJmwhPWkubGVuZ3RoPyIgIjoiIikraS5zbGljZShsKXx8bnVsbH1yZXR1cm4hMH0pfSksYWRkTGluZVdpZGdldDpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4ganIodGhpcyx0LGUscil9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKHQpe3QuY2xlYXIoKX0sbGluZUluZm86ZnVuY3Rpb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZighdHIodGhpcy5kb2MsdCkpcmV0dXJuIG51bGw7dmFyIGU9dDtpZih0PWduKHRoaXMuZG9jLHQpLCF0KXJldHVybiBudWxsfWVsc2V7dmFyIGU9Ym4odCk7aWYobnVsbD09ZSlyZXR1cm4gbnVsbH1yZXR1cm57bGluZTplLGhhbmRsZTp0LHRleHQ6dC50ZXh0LGd1dHRlck1hcmtlcnM6dC5ndXR0ZXJNYXJrZXJzLHRleHRDbGFzczp0LnRleHRDbGFzcyxiZ0NsYXNzOnQuYmdDbGFzcyx3cmFwQ2xhc3M6dC53cmFwQ2xhc3Msd2lkZ2V0czp0LndpZGdldHN9fSxnZXRWaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZGlzcGxheS5zaG93aW5nRnJvbSx0bzp0aGlzLmRpc3BsYXkuc2hvd2luZ1RvfX0sYWRkV2lkZ2V0OmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89dGhpcy5kaXNwbGF5O3Q9USh0aGlzLFFlKHRoaXMuZG9jLHQpKTt2YXIgbD10LmJvdHRvbSxzPXQubGVmdDtpZihlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zaXplci5hcHBlbmRDaGlsZChlKSwib3ZlciI9PW4pbD10LnRvcDtlbHNlIGlmKCJhYm92ZSI9PW58fCJuZWFyIj09bil7dmFyIGE9TWF0aC5tYXgoby53cmFwcGVyLmNsaWVudEhlaWdodCx0aGlzLmRvYy5oZWlnaHQpLHU9TWF0aC5tYXgoby5zaXplci5jbGllbnRXaWR0aCxvLmxpbmVTcGFjZS5jbGllbnRXaWR0aCk7KCJhYm92ZSI9PW58fHQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PmEpJiZ0LnRvcD5lLm9mZnNldEhlaWdodD9sPXQudG9wLWUub2Zmc2V0SGVpZ2h0OnQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PD1hJiYobD10LmJvdHRvbSkscytlLm9mZnNldFdpZHRoPnUmJihzPXUtZS5vZmZzZXRXaWR0aCl9ZS5zdHlsZS50b3A9bCsicHgiLGUuc3R5bGUubGVmdD1lLnN0eWxlLnJpZ2h0PSIiLCJyaWdodCI9PWk/KHM9by5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoLGUuc3R5bGUucmlnaHQ9IjBweCIpOigibGVmdCI9PWk/cz0wOiJtaWRkbGUiPT1pJiYocz0oby5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoKS8yKSxlLnN0eWxlLmxlZnQ9cysicHgiKSxyJiZhcih0aGlzLHMsbCxzK2Uub2Zmc2V0V2lkdGgsbCtlLm9mZnNldEhlaWdodCl9LHRyaWdnZXJPbktleURvd246bGUobnVsbCxXZSksZXhlY0NvbW1hbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG1vW3RdKHRoaXMpfSxmaW5kUG9zSDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBvPTAsbD1RZSh0aGlzLmRvYyx0KTtlPm8mJihsPXByKHRoaXMuZG9jLGwsaSxyLG4pLCFsLmhpdFNpZGUpOysrbyk7cmV0dXJuIGx9LG1vdmVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyPW4uc2hpZnR8fG4uZXh0ZW5kfHxqZShuLmZyb20sbi50byk/cHIodGhpcy5kb2Msbi5oZWFkLHQsZSx0aGlzLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTowPnQ/bi5mcm9tOm4udG8sZXIodGhpcy5kb2MscixyLHQpfSksZGVsZXRlSDpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsO2plKHIuZnJvbSxyLnRvKT9fZSh0aGlzLmRvYywiIixyLmZyb20scHIodGhpcy5kb2Msci5oZWFkLHQsZSwhMSksIitkZWxldGUiKTpfZSh0aGlzLmRvYywiIixyLmZyb20sci50bywiK2RlbGV0ZSIpLHRoaXMuY3VyT3AudXNlclNlbENoYW5nZT0hMH0pLGZpbmRQb3NWOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTEsbz1uOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBsPTAscz1RZSh0aGlzLmRvYyx0KTtlPmw7KytsKXt2YXIgYT1RKHRoaXMscywiZGl2Iik7aWYobnVsbD09bz9vPWEubGVmdDphLmxlZnQ9byxzPWdyKHRoaXMsYSxpLHIpLHMuaGl0U2lkZSlicmVha31yZXR1cm4gc30sbW92ZVY6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jLnNlbCxuPVEodGhpcyxyLmhlYWQsImRpdiIpO251bGwhPXIuZ29hbENvbHVtbiYmKG4ubGVmdD1yLmdvYWxDb2x1bW4pO3ZhciBpPWdyKHRoaXMsbix0LGUpOyJwYWdlIj09ZSYmZnIodGhpcywwLHEodGhpcyxpLCJkaXYiKS50b3Atbi50b3ApLGVyKHRoaXMuZG9jLGksaSx0KSxyLmdvYWxDb2x1bW49bi5sZWZ0fSksdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpeyhudWxsPT10fHx0IT10aGlzLnN0YXRlLm92ZXJ3cml0ZSkmJigodGhpcy5zdGF0ZS5vdmVyd3JpdGU9IXRoaXMuc3RhdGUub3ZlcndyaXRlKT90aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI6dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWU9dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itb3ZlcndyaXRlIiwiIikpfSxoYXNGb2N1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmZvY3VzZWR9LHNjcm9sbFRvOmxlKG51bGwsZnVuY3Rpb24odCxlKXtjcih0aGlzLHQsZSl9KSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kaXNwbGF5LnNjcm9sbGVyLGU9VG87cmV0dXJue2xlZnQ6dC5zY3JvbGxMZWZ0LHRvcDp0LnNjcm9sbFRvcCxoZWlnaHQ6dC5zY3JvbGxIZWlnaHQtZSx3aWR0aDp0LnNjcm9sbFdpZHRoLWUsY2xpZW50SGVpZ2h0OnQuY2xpZW50SGVpZ2h0LWUsY2xpZW50V2lkdGg6dC5jbGllbnRXaWR0aC1lfX0sc2Nyb2xsSW50b1ZpZXc6bGUobnVsbCxmdW5jdGlvbih0LGUpe251bGw9PXQ/dD17ZnJvbTp0aGlzLmRvYy5zZWwuaGVhZCx0bzpudWxsfToibnVtYmVyIj09dHlwZW9mIHQ/dD17ZnJvbTpZZSh0LDApLHRvOm51bGx9Om51bGw9PXQuZnJvbSYmKHQ9e2Zyb206dCx0bzpudWxsfSksdC50b3x8KHQudG89dC5mcm9tKSxlfHwoZT0wKTt2YXIgcj10O251bGwhPXQuZnJvbS5saW5lJiYodGhpcy5jdXJPcC5zY3JvbGxUb1Bvcz17ZnJvbTp0LmZyb20sdG86dC50byxtYXJnaW46ZX0scj17ZnJvbTpRKHRoaXMsdC5mcm9tKSx0bzpRKHRoaXMsdC50byl9KTt2YXIgbj11cih0aGlzLE1hdGgubWluKHIuZnJvbS5sZWZ0LHIudG8ubGVmdCksTWF0aC5taW4oci5mcm9tLnRvcCxyLnRvLnRvcCktZSxNYXRoLm1heChyLmZyb20ucmlnaHQsci50by5yaWdodCksTWF0aC5tYXgoci5mcm9tLmJvdHRvbSxyLnRvLmJvdHRvbSkrZSk7Y3IodGhpcyxuLnNjcm9sbExlZnQsbi5zY3JvbGxUb3ApfSksc2V0U2l6ZTpsZShudWxsLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fC9eXGQrJC8udGVzdChTdHJpbmcodCkpP3QrInB4Ijp0fW51bGwhPXQmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aD1yKHQpKSxudWxsIT1lJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0PXIoZSkpLHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dGhpcy5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCksdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMH0pLG9wZXJhdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gYWUodGhpcyx0KX0scmVmcmVzaDpsZShudWxsLGZ1bmN0aW9uKCl7dmFyIHQ9bnVsbD09dGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7Xyh0aGlzKSxjcih0aGlzLHRoaXMuZG9jLnNjcm9sbExlZnQsdGhpcy5kb2Muc2Nyb2xsVG9wKSx1ZSh0aGlzKSx0JiZvKHRoaXMpfSksc3dhcERvYzpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jO3JldHVybiBlLmNtPW51bGwscG4odGhpcyx0KSxfKHRoaXMpLGRlKHRoaXMsITApLGNyKHRoaXMsdC5zY3JvbGxMZWZ0LHQuc2Nyb2xsVG9wKSxVbih0aGlzLCJzd2FwRG9jIix0aGlzLGUpLGV9KSxnZXRJbnB1dEZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dH0sZ2V0V3JhcHBlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXJ9LGdldFNjcm9sbGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXJ9LGdldEd1dHRlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnN9fSxqbih0KTt2YXIgc289dC5vcHRpb25IYW5kbGVycz17fSxhbz10LmRlZmF1bHRzPXt9LHVvPXQuSW5pdD17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ29kZU1pcnJvci5Jbml0In19O3lyKCJ2YWx1ZSIsIiIsZnVuY3Rpb24odCxlKXt0LnNldFZhbHVlKGUpfSwhMCkseXIoIm1vZGUiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRvYy5tb2RlT3B0aW9uPWUscih0KX0sITApLHlyKCJpbmRlbnRVbml0IiwyLHIsITApLHlyKCJpbmRlbnRXaXRoVGFicyIsITEpLHlyKCJzbWFydEluZGVudCIsITApLHlyKCJ0YWJTaXplIiw0LGZ1bmN0aW9uKHQpe3IodCksXyh0KSx1ZSh0KX0sITApLHlyKCJzcGVjaWFsQ2hhcnMiLC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVmZWZmXS9nLGZ1bmN0aW9uKHQsZSl7dC5vcHRpb25zLnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKGUuc291cmNlKyhlLnRlc3QoIgkiKT8iIjoifAkiKSwiZyIpLHQucmVmcmVzaCgpfSwhMCkseXIoInNwZWNpYWxDaGFyUGxhY2Vob2xkZXIiLG5uLGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSwhMCkseXIoImVsZWN0cmljQ2hhcnMiLCEwKSx5cigicnRsTW92ZVZpc3VhbGx5IiwhVWkpLHlyKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCEwKSx5cigidGhlbWUiLCJkZWZhdWx0IixmdW5jdGlvbih0KXtzKHQpLGEodCl9LCEwKSx5cigia2V5TWFwIiwiZGVmYXVsdCIsbCkseXIoImV4dHJhS2V5cyIsbnVsbCkseXIoIm9uS2V5RXZlbnQiLG51bGwpLHlyKCJvbkRyYWdFdmVudCIsbnVsbCkseXIoImxpbmVXcmFwcGluZyIsITEsbiwhMCkseXIoImd1dHRlcnMiLFtdLGZ1bmN0aW9uKHQpe2godC5vcHRpb25zKSxhKHQpfSwhMCkseXIoImZpeGVkR3V0dGVyIiwhMCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQ9ZT95KHQuZGlzcGxheSkrInB4IjoiMCIsdC5yZWZyZXNoKCl9LCEwKSx5cigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIiLCExLGQsITApLHlyKCJsaW5lTnVtYmVycyIsITEsZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZmlyc3RMaW5lTnVtYmVyIiwxLGEsITApLHlyKCJsaW5lTnVtYmVyRm9ybWF0dGVyIixmdW5jdGlvbih0KXtyZXR1cm4gdH0sYSwhMCkseXIoInNob3dDdXJzb3JXaGVuU2VsZWN0aW5nIiwhMSxBLCEwKSx5cigicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51IiwhMCkseXIoInJlYWRPbmx5IiwhMSxmdW5jdGlvbih0LGUpeyJub2N1cnNvciI9PWU/KHplKHQpLHQuZGlzcGxheS5pbnB1dC5ibHVyKCksdC5kaXNwbGF5LmRpc2FibGVkPSEwKToodC5kaXNwbGF5LmRpc2FibGVkPSExLGV8fGRlKHQsITApKX0pLHlyKCJkcmFnRHJvcCIsITApLHlyKCJjdXJzb3JCbGlua1JhdGUiLDUzMCkseXIoImN1cnNvclNjcm9sbE1hcmdpbiIsMCkseXIoImN1cnNvckhlaWdodCIsMSkseXIoIndvcmtUaW1lIiwxMDApLHlyKCJ3b3JrRGVsYXkiLDEwMCkseXIoImZsYXR0ZW5TcGFucyIsITApLHlyKCJwb2xsSW50ZXJ2YWwiLDEwMCkseXIoInVuZG9EZXB0aCIsNDAsZnVuY3Rpb24odCxlKXt0LmRvYy5oaXN0b3J5LnVuZG9EZXB0aD1lfSkseXIoImhpc3RvcnlFdmVudERlbGF5Iiw1MDApLHlyKCJ2aWV3cG9ydE1hcmdpbiIsMTAsZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigibWF4SGlnaGxpZ2h0TGVuZ3RoIiwxZTQsZnVuY3Rpb24odCl7cih0KSx0LnJlZnJlc2goKX0sITApLHlyKCJjcnVkZU1lYXN1cmluZ0Zyb20iLDFlNCkseXIoIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCEwLGZ1bmN0aW9uKHQsZSl7ZXx8KHQuZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3A9dC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQ9MCl9KSx5cigidGFiaW5kZXgiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRpc3BsYXkuaW5wdXQudGFiSW5kZXg9ZXx8IiJ9KSx5cigiYXV0b2ZvY3VzIixudWxsKTt2YXIgY289dC5tb2Rlcz17fSxmbz10Lm1pbWVNb2Rlcz17fTt0LmRlZmluZU1vZGU9ZnVuY3Rpb24oZSxyKXtpZih0LmRlZmF1bHRzLm1vZGV8fCJudWxsIj09ZXx8KHQuZGVmYXVsdHMubW9kZT1lKSxhcmd1bWVudHMubGVuZ3RoPjIpe3IuZGVwZW5kZW5jaWVzPVtdO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDsrK24pci5kZXBlbmRlbmNpZXMucHVzaChhcmd1bWVudHNbbl0pfWNvW2VdPXJ9LHQuZGVmaW5lTUlNRT1mdW5jdGlvbih0LGUpe2ZvW3RdPWV9LHQucmVzb2x2ZU1vZGU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiZmby5oYXNPd25Qcm9wZXJ0eShlKSllPWZvW2VdO2Vsc2UgaWYoZSYmInN0cmluZyI9PXR5cGVvZiBlLm5hbWUmJmZvLmhhc093blByb3BlcnR5KGUubmFtZSkpe3ZhciByPWZvW2UubmFtZV07ZT1laShyLGUpLGUubmFtZT1yLm5hbWV9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUmJi9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChlKSlyZXR1cm4gdC5yZXNvbHZlTW9kZSgiYXBwbGljYXRpb24veG1sIik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3tuYW1lOmV9OmV8fHtuYW1lOiJudWxsIn19LHQuZ2V0TW9kZT1mdW5jdGlvbihlLHIpe3ZhciByPXQucmVzb2x2ZU1vZGUociksbj1jb1tyLm5hbWVdO2lmKCFuKXJldHVybiB0LmdldE1vZGUoZSwidGV4dC9wbGFpbiIpO3ZhciBpPW4oZSxyKTtpZihoby5oYXNPd25Qcm9wZXJ0eShyLm5hbWUpKXt2YXIgbz1ob1tyLm5hbWVdO2Zvcih2YXIgbCBpbiBvKW8uaGFzT3duUHJvcGVydHkobCkmJihpLmhhc093blByb3BlcnR5KGwpJiYoaVsiXyIrbF09aVtsXSksaVtsXT1vW2xdKX1yZXR1cm4gaS5uYW1lPXIubmFtZSxpfSx0LmRlZmluZU1vZGUoIm51bGwiLGZ1bmN0aW9uKCl7cmV0dXJue3Rva2VuOmZ1bmN0aW9uKHQpe3Quc2tpcFRvRW5kKCl9fX0pLHQuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsIm51bGwiKTt2YXIgaG89dC5tb2RlRXh0ZW5zaW9ucz17fTt0LmV4dGVuZE1vZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1oby5oYXNPd25Qcm9wZXJ0eSh0KT9ob1t0XTpob1t0XT17fTtyaShlLHIpfSx0LmRlZmluZUV4dGVuc2lvbj1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlW2VdPXJ9LHQuZGVmaW5lRG9jRXh0ZW5zaW9uPWZ1bmN0aW9uKHQsZSl7d28ucHJvdG90eXBlW3RdPWV9LHQuZGVmaW5lT3B0aW9uPXlyO3ZhciBwbz1bXTt0LmRlZmluZUluaXRIb29rPWZ1bmN0aW9uKHQpe3BvLnB1c2godCl9O3ZhciBnbz10LmhlbHBlcnM9e307dC5yZWdpc3RlckhlbHBlcj1mdW5jdGlvbihlLHIsbil7Z28uaGFzT3duUHJvcGVydHkoZSl8fChnb1tlXT10W2VdPXt9KSxnb1tlXVtyXT1ufSx0LmlzV29yZENoYXI9b2ksdC5jb3B5U3RhdGU9YnIsdC5zdGFydFN0YXRlPXhyLHQuaW5uZXJNb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKDt0LmlubmVyTW9kZTspe3ZhciByPXQuaW5uZXJNb2RlKGUpO2lmKCFyfHxyLm1vZGU9PXQpYnJlYWs7ZT1yLnN0YXRlLHQ9ci5tb2RlfXJldHVybiByfHx7bW9kZTp0LHN0YXRlOmV9fTt2YXIgbW89dC5jb21tYW5kcz17c2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3Quc2V0U2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCksWWUodC5sYXN0TGluZSgpKSl9LGtpbGxMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCEwKSxyPXQuZ2V0Q3Vyc29yKCExKSxuPSFqZShlLHIpO258fHQuZ2V0TGluZShlLmxpbmUpLmxlbmd0aCE9ZS5jaD90LnJlcGxhY2VSYW5nZSgiIixlLG4/cjpZZShlLmxpbmUpLCIrZGVsZXRlIik6dC5yZXBsYWNlUmFuZ2UoIiIsZSxZZShlLmxpbmUrMSwwKSwiK2RlbGV0ZSIpfSxkZWxldGVMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkubGluZTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLDApLFllKGUpLCIrZGVsZXRlIil9LGRlbExpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCk7dC5yZXBsYWNlUmFuZ2UoIiIsWWUoZS5saW5lLDApLGUsIitkZWxldGUiKX0sdW5kbzpmdW5jdGlvbih0KXt0LnVuZG8oKX0scmVkbzpmdW5jdGlvbih0KXt0LnJlZG8oKX0sZ29Eb2NTdGFydDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0LmZpcnN0TGluZSgpLDApKX0sZ29Eb2NFbmQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oWWUodC5sYXN0TGluZSgpKSl9LGdvTGluZVN0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKHhpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVN0YXJ0U21hcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXhpKHQsZS5saW5lKSxuPXQuZ2V0TGluZUhhbmRsZShyLmxpbmUpLGk9d24obik7aWYoaSYmMCE9aVswXS5sZXZlbCl0LmV4dGVuZFNlbGVjdGlvbihyKTtlbHNle3ZhciBvPU1hdGgubWF4KDAsbi50ZXh0LnNlYXJjaCgvXFMvKSksbD1lLmxpbmU9PXIubGluZSYmZS5jaDw9byYmZS5jaDt0LmV4dGVuZFNlbGVjdGlvbihZZShyLmxpbmUsbD8wOm8pKX19LGdvTGluZUVuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihDaSh0LHQuZ2V0Q3Vyc29yKCkubGluZSkpfSxnb0xpbmVSaWdodDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OnQuZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoKzEwMCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lTGVmdDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OjAsdG9wOmV9LCJkaXYiKSl9LGdvTGluZVVwOmZ1bmN0aW9uKHQpe3QubW92ZVYoLTEsImxpbmUiKX0sZ29MaW5lRG93bjpmdW5jdGlvbih0KXt0Lm1vdmVWKDEsImxpbmUiKX0sZ29QYWdlVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwicGFnZSIpfSxnb1BhZ2VEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwicGFnZSIpfSxnb0NoYXJMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNoYXIiKX0sZ29DaGFyUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJjaGFyIil9LGdvQ29sdW1uTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJjb2x1bW4iKX0sZ29Db2x1bW5SaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNvbHVtbiIpfSxnb1dvcmRMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsIndvcmQiKX0sZ29Hcm91cFJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiZ3JvdXAiKX0sZ29Hcm91cExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiZ3JvdXAiKX0sZ29Xb3JkUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJ3b3JkIil9LGRlbENoYXJCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJjaGFyIil9LGRlbENoYXJBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwiY2hhciIpfSxkZWxXb3JkQmVmb3JlOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgtMSwid29yZCIpfSxkZWxXb3JkQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsIndvcmQiKX0sZGVsR3JvdXBCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJncm91cCIpfSxkZWxHcm91cEFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJncm91cCIpfSxpbmRlbnRBdXRvOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpfSxpbmRlbnRNb3JlOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKX0saW5kZW50TGVzczpmdW5jdGlvbih0KXt0LmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKX0saW5zZXJ0VGFiOmZ1bmN0aW9uKHQpe3QucmVwbGFjZVNlbGVjdGlvbigiCSIsImVuZCIsIitpbnB1dCIpfSxkZWZhdWx0VGFiOmZ1bmN0aW9uKHQpe3Quc29tZXRoaW5nU2VsZWN0ZWQoKT90LmluZGVudFNlbGVjdGlvbigiYWRkIik6dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LHRyYW5zcG9zZUNoYXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkscj10LmdldExpbmUoZS5saW5lKTtlLmNoPjAmJmUuY2g8ci5sZW5ndGgtMSYmdC5yZXBsYWNlUmFuZ2Uoci5jaGFyQXQoZS5jaCkrci5jaGFyQXQoZS5jaC0xKSxZZShlLmxpbmUsZS5jaC0xKSxZZShlLmxpbmUsZS5jaCsxKSl9LG5ld2xpbmVBbmRJbmRlbnQ6ZnVuY3Rpb24odCl7bGUodCxmdW5jdGlvbigpe3QucmVwbGFjZVNlbGVjdGlvbigiXG4iLCJlbmQiLCIraW5wdXQiKSx0LmluZGVudExpbmUodC5nZXRDdXJzb3IoKS5saW5lLG51bGwsITApfSkoKX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpe3QudG9nZ2xlT3ZlcndyaXRlKCl9fSx2bz10LmtleU1hcD17fTt2by5iYXNpYz17TGVmdDoiZ29DaGFyTGVmdCIsUmlnaHQ6ImdvQ2hhclJpZ2h0IixVcDoiZ29MaW5lVXAiLERvd246ImdvTGluZURvd24iLEVuZDoiZ29MaW5lRW5kIixIb21lOiJnb0xpbmVTdGFydFNtYXJ0IixQYWdlVXA6ImdvUGFnZVVwIixQYWdlRG93bjoiZ29QYWdlRG93biIsRGVsZXRlOiJkZWxDaGFyQWZ0ZXIiLEJhY2tzcGFjZToiZGVsQ2hhckJlZm9yZSIsIlNoaWZ0LUJhY2tzcGFjZSI6ImRlbENoYXJCZWZvcmUiLFRhYjoiZGVmYXVsdFRhYiIsIlNoaWZ0LVRhYiI6ImluZGVudEF1dG8iLEVudGVyOiJuZXdsaW5lQW5kSW5kZW50IixJbnNlcnQ6InRvZ2dsZU92ZXJ3cml0ZSJ9LHZvLnBjRGVmYXVsdD17IkN0cmwtQSI6InNlbGVjdEFsbCIsIkN0cmwtRCI6ImRlbGV0ZUxpbmUiLCJDdHJsLVoiOiJ1bmRvIiwiU2hpZnQtQ3RybC1aIjoicmVkbyIsIkN0cmwtWSI6InJlZG8iLCJDdHJsLUhvbWUiOiJnb0RvY1N0YXJ0IiwiQWx0LVVwIjoiZ29Eb2NTdGFydCIsIkN0cmwtRW5kIjoiZ29Eb2NFbmQiLCJDdHJsLURvd24iOiJnb0RvY0VuZCIsIkN0cmwtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQ3RybC1SaWdodCI6ImdvR3JvdXBSaWdodCIsIkFsdC1MZWZ0IjoiZ29MaW5lU3RhcnQiLCJBbHQtUmlnaHQiOiJnb0xpbmVFbmQiLCJDdHJsLUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ3RybC1TIjoic2F2ZSIsIkN0cmwtRiI6ImZpbmQiLCJDdHJsLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUN0cmwtRyI6ImZpbmRQcmV2IiwiU2hpZnQtQ3RybC1GIjoicmVwbGFjZSIsIlNoaWZ0LUN0cmwtUiI6InJlcGxhY2VBbGwiLCJDdHJsLVsiOiJpbmRlbnRMZXNzIiwiQ3RybC1dIjoiaW5kZW50TW9yZSIsZmFsbHRocm91Z2g6ImJhc2ljIn0sdm8ubWFjRGVmYXVsdD17IkNtZC1BIjoic2VsZWN0QWxsIiwiQ21kLUQiOiJkZWxldGVMaW5lIiwiQ21kLVoiOiJ1bmRvIiwiU2hpZnQtQ21kLVoiOiJyZWRvIiwiQ21kLVkiOiJyZWRvIiwiQ21kLVVwIjoiZ29Eb2NTdGFydCIsIkNtZC1FbmQiOiJnb0RvY0VuZCIsIkNtZC1Eb3duIjoiZ29Eb2NFbmQiLCJBbHQtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQWx0LVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQ21kLUxlZnQiOiJnb0xpbmVTdGFydCIsIkNtZC1SaWdodCI6ImdvTGluZUVuZCIsIkFsdC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQWZ0ZXIiLCJBbHQtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkNtZC1TIjoic2F2ZSIsIkNtZC1GIjoiZmluZCIsIkNtZC1HIjoiZmluZE5leHQiLCJTaGlmdC1DbWQtRyI6ImZpbmRQcmV2IiwiQ21kLUFsdC1GIjoicmVwbGFjZSIsIlNoaWZ0LUNtZC1BbHQtRiI6InJlcGxhY2VBbGwiLCJDbWQtWyI6ImluZGVudExlc3MiLCJDbWQtXSI6ImluZGVudE1vcmUiLCJDbWQtQmFja3NwYWNlIjoiZGVsTGluZUxlZnQiLGZhbGx0aHJvdWdoOlsiYmFzaWMiLCJlbWFjc3kiXX0sdm9bImRlZmF1bHQiXT1LaT92by5tYWNEZWZhdWx0OnZvLnBjRGVmYXVsdCx2by5lbWFjc3k9eyJDdHJsLUYiOiJnb0NoYXJSaWdodCIsIkN0cmwtQiI6ImdvQ2hhckxlZnQiLCJDdHJsLVAiOiJnb0xpbmVVcCIsIkN0cmwtTiI6ImdvTGluZURvd24iLCJBbHQtRiI6ImdvV29yZFJpZ2h0IiwiQWx0LUIiOiJnb1dvcmRMZWZ0IiwiQ3RybC1BIjoiZ29MaW5lU3RhcnQiLCJDdHJsLUUiOiJnb0xpbmVFbmQiLCJDdHJsLVYiOiJnb1BhZ2VEb3duIiwiU2hpZnQtQ3RybC1WIjoiZ29QYWdlVXAiLCJDdHJsLUQiOiJkZWxDaGFyQWZ0ZXIiLCJDdHJsLUgiOiJkZWxDaGFyQmVmb3JlIiwiQWx0LUQiOiJkZWxXb3JkQWZ0ZXIiLCJBbHQtQmFja3NwYWNlIjoiZGVsV29yZEJlZm9yZSIsIkN0cmwtSyI6ImtpbGxMaW5lIiwiQ3RybC1UIjoidHJhbnNwb3NlQ2hhcnMifSx0Lmxvb2t1cEtleT13cix0LmlzTW9kaWZpZXJLZXk9THIsdC5rZXlOYW1lPWtyLHQuZnJvbVRleHRBcmVhPWZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe2UudmFsdWU9dS5nZXRWYWx1ZSgpfWlmKHJ8fChyPXt9KSxyLnZhbHVlPWUudmFsdWUsIXIudGFiaW5kZXgmJmUudGFiaW5kZXgmJihyLnRhYmluZGV4PWUudGFiaW5kZXgpLCFyLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyJiYoci5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyKSxudWxsPT1yLmF1dG9mb2N1cyl7dmFyIGk9ZG9jdW1lbnQuYm9keTt0cnl7aT1kb2N1bWVudC5hY3RpdmVFbGVtZW50fWNhdGNoKG8pe31yLmF1dG9mb2N1cz1pPT1lfHxudWxsIT1lLmdldEF0dHJpYnV0ZSgiYXV0b2ZvY3VzIikmJmk9PWRvY3VtZW50LmJvZHl9aWYoZS5mb3JtJiYoR24oZS5mb3JtLCJzdWJtaXQiLG4pLCFyLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpKXt2YXIgbD1lLmZvcm0scz1sLnN1Ym1pdDt0cnl7dmFyIGE9bC5zdWJtaXQ9ZnVuY3Rpb24oKXtuKCksbC5zdWJtaXQ9cyxsLnN1Ym1pdCgpLGwuc3VibWl0PWF9fWNhdGNoKG8pe319ZS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgdT10KGZ1bmN0aW9uKHQpe2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlLm5leHRTaWJsaW5nKX0scik7cmV0dXJuIHUuc2F2ZT1uLHUuZ2V0VGV4dEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sdS50b1RleHRBcmVhPWZ1bmN0aW9uKCl7bigpLGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1LmdldFdyYXBwZXJFbGVtZW50KCkpLGUuc3R5bGUuZGlzcGxheT0iIixlLmZvcm0mJihWbihlLmZvcm0sInN1Ym1pdCIsbiksImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9ybS5zdWJtaXQmJihlLmZvcm0uc3VibWl0PXMpKX0sdX0sU3IucHJvdG90eXBlPXtlb2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuc3RyaW5nLmxlbmd0aH0sc29sOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMucG9zfSxwZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyl8fHZvaWQgMH0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGg/dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOnZvaWQgMH0sZWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXZhciByPWU9PXQ7ZWxzZSB2YXIgcj1lJiYodC50ZXN0P3QudGVzdChlKTp0KGUpKTtyZXR1cm4gcj8oKyt0aGlzLnBvcyxlKTp2b2lkIDB9LGVhdFdoaWxlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmVhdCh0KTspO3JldHVybiB0aGlzLnBvcz5lfSxlYXRTcGFjZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBvczsvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTspKyt0aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M+dH0sc2tpcFRvRW5kOmZ1bmN0aW9uKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofSxza2lwVG86ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuaW5kZXhPZih0LHRoaXMucG9zKTtyZXR1cm4gZT4tMT8odGhpcy5wb3M9ZSwhMCk6dm9pZCAwfSxiYWNrVXA6ZnVuY3Rpb24odCl7dGhpcy5wb3MtPXR9LGNvbHVtbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPVpuKHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlfSxpbmRlbnRhdGlvbjpmdW5jdGlvbigpe3JldHVybiBabih0aGlzLnN0cmluZyxudWxsLHRoaXMudGFiU2l6ZSl9LG1hdGNoOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBuPXRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaCh0KTtyZXR1cm4gbiYmbi5pbmRleD4wP251bGw6KG4mJmUhPT0hMSYmKHRoaXMucG9zKz1uWzBdLmxlbmd0aCksbil9dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIHI/dC50b0xvd2VyQ2FzZSgpOnR9LG89dGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLHQubGVuZ3RoKTtyZXR1cm4gaShvKT09aSh0KT8oZSE9PSExJiYodGhpcy5wb3MrPXQubGVuZ3RoKSwhMCk6dm9pZCAwfSxjdXJyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5wb3MpfX0sdC5TdHJpbmdTdHJlYW09U3IsdC5UZXh0TWFya2VyPU1yLGpuKE1yKSxNci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dmFyIHQ9dGhpcy5kb2MuY20sZT10JiYhdC5jdXJPcDtpZihlJiZpZSh0KSxZbih0aGlzLCJjbGVhciIpKXt2YXIgcj10aGlzLmZpbmQoKTtyJiZVbih0aGlzLCJjbGVhciIsci5mcm9tLHIudG8pfWZvcih2YXIgbj1udWxsLGk9bnVsbCxvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBsPXRoaXMubGluZXNbb10scz1OcihsLm1hcmtlZFNwYW5zLHRoaXMpO251bGwhPXMudG8mJihpPWJuKGwpKSxsLm1hcmtlZFNwYW5zPURyKGwubWFya2VkU3BhbnMscyksbnVsbCE9cy5mcm9tP249Ym4obCk6dGhpcy5jb2xsYXBzZWQmJiFWcih0aGlzLmRvYyxsKSYmdCYmeW4obCxyZSh0LmRpc3BsYXkpKX1pZih0JiZ0aGlzLmNvbGxhcHNlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcpZm9yKHZhciBvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBhPUdyKHQuZG9jLHRoaXMubGluZXNbb10pLHU9Yyh0LmRvYyxhKTt1PnQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYodC5kaXNwbGF5Lm1heExpbmU9YSx0LmRpc3BsYXkubWF4TGluZUxlbmd0aD11LHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCl9bnVsbCE9biYmdCYmdWUodCxuLGkrMSksdGhpcy5saW5lcy5sZW5ndGg9MCx0aGlzLmV4cGxpY2l0bHlDbGVhcmVkPSEwLHRoaXMuYXRvbWljJiZ0aGlzLmRvYy5jYW50RWRpdCYmKHRoaXMuZG9jLmNhbnRFZGl0PSExLHQmJmlyKHQpKSxlJiZvZSh0KX19LE1yLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscj0wO3I8dGhpcy5saW5lcy5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmxpbmVzW3JdLGk9TnIobi5tYXJrZWRTcGFucyx0aGlzKTtpZihudWxsIT1pLmZyb218fG51bGwhPWkudG8pe3ZhciBvPWJuKG4pO251bGwhPWkuZnJvbSYmKHQ9WWUobyxpLmZyb20pKSxudWxsIT1pLnRvJiYoZT1ZZShvLGkudG8pKX19cmV0dXJuImJvb2ttYXJrIj09dGhpcy50eXBlP3Q6dCYme2Zyb206dCx0bzplfX0sTXIucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZpbmQoKSxlPXRoaXMuZG9jLmNtO2lmKHQmJmUpeyJib29rbWFyayIhPXRoaXMudHlwZSYmKHQ9dC5mcm9tKTt2YXIgcj1nbih0aGlzLmRvYyx0LmxpbmUpO2lmKEcoZSxyKSx0LmxpbmU+PWUuZGlzcGxheS5zaG93aW5nRnJvbSYmdC5saW5lPGUuZGlzcGxheS5zaG93aW5nVG8pe2Zvcih2YXIgbj1lLmRpc3BsYXkubGluZURpdi5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKWlmKG4ubGluZU9iaj09cil7bi5vZmZzZXRIZWlnaHQhPXIuaGVpZ2h0JiZ5bihyLG4ub2Zmc2V0SGVpZ2h0KTsKYnJlYWt9YWUoZSxmdW5jdGlvbigpe2UuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD1lLmN1ck9wLmZvcmNlVXBkYXRlPWUuY3VyT3AudXBkYXRlTWF4TGluZT0hMH0pfX19LE1yLnByb3RvdHlwZS5hdHRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wO2UubWF5YmVIaWRkZW5NYXJrZXJzJiYtMSE9dGkoZS5tYXliZUhpZGRlbk1hcmtlcnMsdGhpcyl8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzfHwoZS5tYXliZVVuaGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcyl9dGhpcy5saW5lcy5wdXNoKHQpfSxNci5wcm90b3R5cGUuZGV0YWNoTGluZT1mdW5jdGlvbih0KXtpZih0aGlzLmxpbmVzLnNwbGljZSh0aSh0aGlzLmxpbmVzLHQpLDEpLCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wOyhlLm1heWJlSGlkZGVuTWFya2Vyc3x8KGUubWF5YmVIaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX19LHQuU2hhcmVkVGV4dE1hcmtlcj1BcixqbihBciksQXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3RoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITA7Zm9yKHZhciB0PTA7dDx0aGlzLm1hcmtlcnMubGVuZ3RoOysrdCl0aGlzLm1hcmtlcnNbdF0uY2xlYXIoKTtVbih0aGlzLCJjbGVhciIpfX0sQXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoKX07dmFyIHlvPXQuTGluZVdpZGdldD1mdW5jdGlvbih0LGUscil7aWYocilmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodGhpc1tuXT1yW25dKTt0aGlzLmNtPXQsdGhpcy5ub2RlPWV9O2puKHlvKSx5by5wcm90b3R5cGUuY2xlYXI9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxpbmUud2lkZ2V0cyxlPWJuKHRoaXMubGluZSk7aWYobnVsbCE9ZSYmdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdFtyXT09dGhpcyYmdC5zcGxpY2Uoci0tLDEpO3QubGVuZ3RofHwodGhpcy5saW5lLndpZGdldHM9bnVsbCk7dmFyIG49Q24odGhpcy5jbSx0aGlzLmxpbmUpPHRoaXMuY20uZG9jLnNjcm9sbFRvcDt5bih0aGlzLmxpbmUsTWF0aC5tYXgoMCx0aGlzLmxpbmUuaGVpZ2h0LVlyKHRoaXMpKSksbiYmZnIodGhpcy5jbSwwLC10aGlzLmhlaWdodCksdWUodGhpcy5jbSxlLGUrMSl9fSkseW8ucHJvdG90eXBlLmNoYW5nZWQ9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhlaWdodDt0aGlzLmhlaWdodD1udWxsO3ZhciBlPVlyKHRoaXMpLXQ7aWYoZSl7eW4odGhpcy5saW5lLHRoaXMubGluZS5oZWlnaHQrZSk7dmFyIHI9Ym4odGhpcy5saW5lKTt1ZSh0aGlzLmNtLHIscisxKX19KTt2YXIgYm89dC5MaW5lPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCxYcih0aGlzLGUpLHRoaXMuaGVpZ2h0PXI/cih0aGlzKToxfTtqbihibyksYm8ucHJvdG90eXBlLmxpbmVObz1mdW5jdGlvbigpe3JldHVybiBibih0aGlzKX07dmFyIHhvPXt9O2ZuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZXMubGVuZ3RofSxyZW1vdmVJbm5lcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LG49dCtlO24+cjsrK3Ipe3ZhciBpPXRoaXMubGluZXNbcl07dGhpcy5oZWlnaHQtPWkuaGVpZ2h0LFpyKGkpLFVuKGksImRlbGV0ZSIpfXRoaXMubGluZXMuc3BsaWNlKHQsZSl9LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe3Quc3BsaWNlLmFwcGx5KHQsW3QubGVuZ3RoLDBdLmNvbmNhdCh0aGlzLmxpbmVzKSl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmhlaWdodCs9cix0aGlzLmxpbmVzPXRoaXMubGluZXMuc2xpY2UoMCx0KS5jb25jYXQoZSkuY29uY2F0KHRoaXMubGluZXMuc2xpY2UodCkpO2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7aT5uOysrbillW25dLnBhcmVudD10aGlzfSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQrZTtuPnQ7Kyt0KWlmKHIodGhpcy5saW5lc1t0XSkpcmV0dXJuITB9fSxobi5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5zaXplLT1lO2Zvcih2YXIgcj0wO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmNoaWxkcmVuW3JdLGk9bi5jaHVua1NpemUoKTtpZihpPnQpe3ZhciBvPU1hdGgubWluKGUsaS10KSxsPW4uaGVpZ2h0O2lmKG4ucmVtb3ZlSW5uZXIodCxvKSx0aGlzLmhlaWdodC09bC1uLmhlaWdodCxpPT1vJiYodGhpcy5jaGlsZHJlbi5zcGxpY2Uoci0tLDEpLG4ucGFyZW50PW51bGwpLDA9PShlLT1vKSlicmVhazt0PTB9ZWxzZSB0LT1pfWlmKHRoaXMuc2l6ZS1lPDI1KXt2YXIgcz1bXTt0aGlzLmNvbGxhcHNlKHMpLHRoaXMuY2hpbGRyZW49W25ldyBmbihzKV0sdGhpcy5jaGlsZHJlblswXS5wYXJlbnQ9dGhpc319LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7cj5lOysrZSl0aGlzLmNoaWxkcmVuW2VdLmNvbGxhcHNlKHQpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbih0LGUscil7dGhpcy5zaXplKz1lLmxlbmd0aCx0aGlzLmhlaWdodCs9cjtmb3IodmFyIG49MCxpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRoaXMuY2hpbGRyZW5bbl0sbD1vLmNodW5rU2l6ZSgpO2lmKGw+PXQpe2lmKG8uaW5zZXJ0SW5uZXIodCxlLHIpLG8ubGluZXMmJm8ubGluZXMubGVuZ3RoPjUwKXtmb3IoO28ubGluZXMubGVuZ3RoPjUwOyl7dmFyIHM9by5saW5lcy5zcGxpY2Uoby5saW5lcy5sZW5ndGgtMjUsMjUpLGE9bmV3IGZuKHMpO28uaGVpZ2h0LT1hLmhlaWdodCx0aGlzLmNoaWxkcmVuLnNwbGljZShuKzEsMCxhKSxhLnBhcmVudD10aGlzfXRoaXMubWF5YmVTcGlsbCgpfWJyZWFrfXQtPWx9fSxtYXliZVNwaWxsOmZ1bmN0aW9uKCl7aWYoISh0aGlzLmNoaWxkcmVuLmxlbmd0aDw9MTApKXt2YXIgdD10aGlzO2Rve3ZhciBlPXQuY2hpbGRyZW4uc3BsaWNlKHQuY2hpbGRyZW4ubGVuZ3RoLTUsNSkscj1uZXcgaG4oZSk7aWYodC5wYXJlbnQpe3Quc2l6ZS09ci5zaXplLHQuaGVpZ2h0LT1yLmhlaWdodDt2YXIgbj10aSh0LnBhcmVudC5jaGlsZHJlbix0KTt0LnBhcmVudC5jaGlsZHJlbi5zcGxpY2UobisxLDAscil9ZWxzZXt2YXIgaT1uZXcgaG4odC5jaGlsZHJlbik7aS5wYXJlbnQ9dCx0LmNoaWxkcmVuPVtpLHJdLHQ9aX1yLnBhcmVudD10LnBhcmVudH13aGlsZSh0LmNoaWxkcmVuLmxlbmd0aD4xMCk7dC5wYXJlbnQubWF5YmVTcGlsbCgpfX0saXRlck46ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD50KXt2YXIgcz1NYXRoLm1pbihlLGwtdCk7aWYoby5pdGVyTih0LHMscikpcmV0dXJuITA7aWYoMD09KGUtPXMpKWJyZWFrO3Q9MH1lbHNlIHQtPWx9fX07dmFyIENvPTAsd289dC5Eb2M9ZnVuY3Rpb24odCxlLHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHdvKSlyZXR1cm4gbmV3IHdvKHQsZSxyKTtudWxsPT1yJiYocj0wKSxobi5jYWxsKHRoaXMsW25ldyBmbihbbmV3IGJvKCIiLG51bGwpXSldKSx0aGlzLmZpcnN0PXIsdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5jYW50RWRpdD0hMSx0aGlzLmhpc3Rvcnk9TG4oKSx0aGlzLmNsZWFuR2VuZXJhdGlvbj0xLHRoaXMuZnJvbnRpZXI9cjt2YXIgbj1ZZShyLDApO3RoaXMuc2VsPXtmcm9tOm4sdG86bixoZWFkOm4sYW5jaG9yOm4sc2hpZnQ6ITEsZXh0ZW5kOiExLGdvYWxDb2x1bW46bnVsbH0sdGhpcy5pZD0rK0NvLHRoaXMubW9kZU9wdGlvbj1lLCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9em8odCkpLGNuKHRoaXMse2Zyb206bix0bzpuLHRleHQ6dH0sbnVsbCx7aGVhZDpuLGFuY2hvcjpufSl9O3dvLnByb3RvdHlwZT1laShobi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOndvLGl0ZXI6ZnVuY3Rpb24odCxlLHIpe3I/dGhpcy5pdGVyTih0LXRoaXMuZmlyc3QsZS10LHIpOnRoaXMuaXRlck4odGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSx0KX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9ZS5sZW5ndGg7aT5uOysrbilyKz1lW25dLmhlaWdodDt0aGlzLmluc2VydElubmVyKHQtdGhpcy5maXJzdCxlLHIpfSxyZW1vdmU6ZnVuY3Rpb24odCxlKXt0aGlzLnJlbW92ZUlubmVyKHQtdGhpcy5maXJzdCxlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKTtyZXR1cm4gdD09PSExP2U6ZS5qb2luKHR8fCJcbiIpfSxzZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1ZZSh0aGlzLmZpcnN0LDApLHI9dGhpcy5maXJzdCt0aGlzLnNpemUtMTtCZSh0aGlzLHtmcm9tOmUsdG86WWUocixnbih0aGlzLHIpLnRleHQubGVuZ3RoKSx0ZXh0OnpvKHQpLG9yaWdpbjoic2V0VmFsdWUifSx7aGVhZDplLGFuY2hvcjplfSwhMCl9LHJlcGxhY2VSYW5nZTpmdW5jdGlvbih0LGUscixuKXtlPVFlKHRoaXMsZSkscj1yP1FlKHRoaXMscik6ZSxfZSh0aGlzLHQsZSxyLG4pfSxnZXRSYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49bW4odGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSkpO3JldHVybiByPT09ITE/bjpuLmpvaW4ocnx8IlxuIil9LGdldExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMaW5lSGFuZGxlKHQpO3JldHVybiBlJiZlLnRleHR9LHNldExpbmU6ZnVuY3Rpb24odCxlKXt0cih0aGlzLHQpJiZfZSh0aGlzLGUsWWUodCwwKSxRZSh0aGlzLFllKHQpKSl9LHJlbW92ZUxpbmU6ZnVuY3Rpb24odCl7dD9fZSh0aGlzLCIiLFFlKHRoaXMsWWUodC0xKSksUWUodGhpcyxZZSh0KSkpOl9lKHRoaXMsIiIsWWUoMCwwKSxRZSh0aGlzLFllKDEsMCkpKX0sZ2V0TGluZUhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdHIodGhpcyx0KT9nbih0aGlzLHQpOnZvaWQgMH0sZ2V0TGluZU51bWJlcjpmdW5jdGlvbih0KXtyZXR1cm4gYm4odCl9LGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJih0PWduKHRoaXMsdCkpLEdyKHRoaXMsdCl9LGxpbmVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LGZpcnN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0fSxsYXN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0K3RoaXMuc2l6ZS0xfSxjbGlwUG9zOmZ1bmN0aW9uKHQpe3JldHVybiBRZSh0aGlzLHQpfSxnZXRDdXJzb3I6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLnNlbDtyZXR1cm4gZT1udWxsPT10fHwiaGVhZCI9PXQ/ci5oZWFkOiJhbmNob3IiPT10P3IuYW5jaG9yOiJlbmQiPT10fHx0PT09ITE/ci50bzpyLmZyb20sWmUoZSl9LHNvbWV0aGluZ1NlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWplKHRoaXMuc2VsLmhlYWQsdGhpcy5zZWwuYW5jaG9yKX0sc2V0Q3Vyc29yOnNlKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1RZSh0aGlzLCJudW1iZXIiPT10eXBlb2YgdD9ZZSh0LGV8fDApOnQpO3I/ZXIodGhpcyxuKTpucih0aGlzLG4sbil9KSxzZXRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe25yKHRoaXMsUWUodGhpcyx0KSxRZSh0aGlzLGV8fHQpLHIpfSksZXh0ZW5kU2VsZWN0aW9uOnNlKGZ1bmN0aW9uKHQsZSxyKXtlcih0aGlzLFFlKHRoaXMsdCksZSYmUWUodGhpcyxlKSxyKX0pLGdldFNlbGVjdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRSYW5nZSh0aGlzLnNlbC5mcm9tLHRoaXMuc2VsLnRvLHQpfSxyZXBsYWNlU2VsZWN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtCZSh0aGlzLHtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8sdGV4dDp6byh0KSxvcmlnaW46cn0sZXx8ImFyb3VuZCIpfSx1bmRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywidW5kbyIpfSkscmVkbzpzZShmdW5jdGlvbigpe1ZlKHRoaXMsInJlZG8iKX0pLHNldEV4dGVuZGluZzpmdW5jdGlvbih0KXt0aGlzLnNlbC5leHRlbmQ9dH0saGlzdG9yeVNpemU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhpc3Rvcnk7cmV0dXJue3VuZG86dC5kb25lLmxlbmd0aCxyZWRvOnQudW5kb25lLmxlbmd0aH19LGNsZWFySGlzdG9yeTpmdW5jdGlvbigpe3RoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbil9LG1hcmtDbGVhbjpmdW5jdGlvbigpe3RoaXMuY2xlYW5HZW5lcmF0aW9uPXRoaXMuY2hhbmdlR2VuZXJhdGlvbigpfSxjaGFuZ2VHZW5lcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGlzdG9yeS5sYXN0T3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCx0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbn0saXNDbGVhbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb249PSh0fHx0aGlzLmNsZWFuR2VuZXJhdGlvbil9LGdldEhpc3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpIbih0aGlzLmhpc3RvcnkuZG9uZSksdW5kb25lOkhuKHRoaXMuaGlzdG9yeS51bmRvbmUpfX0sc2V0SGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmhpc3Rvcnk9TG4odGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO2UuZG9uZT10LmRvbmUuc2xpY2UoMCksZS51bmRvbmU9dC51bmRvbmUuc2xpY2UoMCl9LG1hcmtUZXh0OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVHIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSksciwicmFuZ2UiKX0sc2V0Qm9va21hcms6ZnVuY3Rpb24odCxlKXt2YXIgcj17cmVwbGFjZWRXaXRoOmUmJihudWxsPT1lLm5vZGVUeXBlP2Uud2lkZ2V0OmUpLGluc2VydExlZnQ6ZSYmZS5pbnNlcnRMZWZ0fTtyZXR1cm4gdD1RZSh0aGlzLHQpLFRyKHRoaXMsdCx0LHIsImJvb2ttYXJrIil9LGZpbmRNYXJrc0F0OmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT1bXSxyPWduKHRoaXMsdC5saW5lKS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dOyhudWxsPT1pLmZyb218fGkuZnJvbTw9dC5jaCkmJihudWxsPT1pLnRvfHxpLnRvPj10LmNoKSYmZS5wdXNoKGkubWFya2VyLnBhcmVudHx8aS5tYXJrZXIpfXJldHVybiBlfSxnZXRBbGxNYXJrczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLml0ZXIoZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKW51bGwhPXJbbl0uZnJvbSYmdC5wdXNoKHJbbl0ubWFya2VyKX0pLHR9LHBvc0Zyb21JbmRleDpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihuKXt2YXIgaT1uLnRleHQubGVuZ3RoKzE7cmV0dXJuIGk+dD8oZT10LCEwKToodC09aSwrK3Isdm9pZCAwKX0pLFFlKHRoaXMsWWUocixlKSl9LGluZGV4RnJvbVBvczpmdW5jdGlvbih0KXt0PVFlKHRoaXMsdCk7dmFyIGU9dC5jaDtyZXR1cm4gdC5saW5lPHRoaXMuZmlyc3R8fHQuY2g8MD8wOih0aGlzLml0ZXIodGhpcy5maXJzdCx0LmxpbmUsZnVuY3Rpb24odCl7ZSs9dC50ZXh0Lmxlbmd0aCsxfSksZSl9LGNvcHk6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHdvKHZuKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSksdGhpcy5tb2RlT3B0aW9uLHRoaXMuZmlyc3QpO3JldHVybiBlLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCxlLnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0LGUuc2VsPXtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8saGVhZDp0aGlzLnNlbC5oZWFkLGFuY2hvcjp0aGlzLnNlbC5hbmNob3Isc2hpZnQ6dGhpcy5zZWwuc2hpZnQsZXh0ZW5kOiExLGdvYWxDb2x1bW46dGhpcy5zZWwuZ29hbENvbHVtbn0sdCYmKGUuaGlzdG9yeS51bmRvRGVwdGg9dGhpcy5oaXN0b3J5LnVuZG9EZXB0aCxlLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpKSxlfSxsaW5rZWREb2M6ZnVuY3Rpb24odCl7dHx8KHQ9e30pO3ZhciBlPXRoaXMuZmlyc3Qscj10aGlzLmZpcnN0K3RoaXMuc2l6ZTtudWxsIT10LmZyb20mJnQuZnJvbT5lJiYoZT10LmZyb20pLG51bGwhPXQudG8mJnQudG88ciYmKHI9dC50byk7dmFyIG49bmV3IHdvKHZuKHRoaXMsZSxyKSx0Lm1vZGV8fHRoaXMubW9kZU9wdGlvbixlKTtyZXR1cm4gdC5zaGFyZWRIaXN0JiYobi5oaXN0b3J5PXRoaXMuaGlzdG9yeSksKHRoaXMubGlua2VkfHwodGhpcy5saW5rZWQ9W10pKS5wdXNoKHtkb2M6bixzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH0pLG4ubGlua2VkPVt7ZG9jOnRoaXMsaXNQYXJlbnQ6ITAsc2hhcmVkSGlzdDp0LnNoYXJlZEhpc3R9XSxufSx1bmxpbmtEb2M6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQmJihlPWUuZG9jKSx0aGlzLmxpbmtlZClmb3IodmFyIHI9MDtyPHRoaXMubGlua2VkLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGlua2VkW3JdO2lmKG4uZG9jPT1lKXt0aGlzLmxpbmtlZC5zcGxpY2UociwxKSxlLnVubGlua0RvYyh0aGlzKTticmVha319aWYoZS5oaXN0b3J5PT10aGlzLmhpc3Rvcnkpe3ZhciBpPVtlLmlkXTtkbihlLGZ1bmN0aW9uKHQpe2kucHVzaCh0LmlkKX0sITApLGUuaGlzdG9yeT1MbigpLGUuaGlzdG9yeS5kb25lPUhuKHRoaXMuaGlzdG9yeS5kb25lLGkpLGUuaGlzdG9yeS51bmRvbmU9SG4odGhpcy5oaXN0b3J5LnVuZG9uZSxpKX19LGl0ZXJMaW5rZWREb2NzOmZ1bmN0aW9uKHQpe2RuKHRoaXMsdCl9LGdldE1vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxnZXRFZGl0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbX19KSx3by5wcm90b3R5cGUuZWFjaExpbmU9d28ucHJvdG90eXBlLml0ZXI7dmFyIExvPSJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IiLnNwbGl0KCIgIik7Zm9yKHZhciBrbyBpbiB3by5wcm90b3R5cGUpd28ucHJvdG90eXBlLmhhc093blByb3BlcnR5KGtvKSYmdGkoTG8sa28pPDAmJih0LnByb3RvdHlwZVtrb109ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcy5kb2MsYXJndW1lbnRzKX19KHdvLnByb3RvdHlwZVtrb10pKTtqbih3byksdC5lX3N0b3A9UG4sdC5lX3ByZXZlbnREZWZhdWx0PXpuLHQuZV9zdG9wUHJvcGFnYXRpb249SW47dmFyIFNvLE1vPTA7dC5vbj1Hbix0Lm9mZj1Wbix0LnNpZ25hbD1Lbjt2YXIgVG89MzAsQW89dC5QYXNzPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLlBhc3MifX07JG4ucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodGhpcy5pZCksdGhpcy5pZD1zZXRUaW1lb3V0KGUsdCl9fSx0LmNvdW50Q29sdW1uPVpuO3ZhciBIbz1bIiJdLE5vPS9bXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLyxEbz0vW1x1MDMwMC1cdTAzNkZcdTA0ODMtXHUwNDg3XHUwNDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0LVx1MDVDNVx1MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEItXHUwNjVGXHUwNjcwXHUwNkQ2LVx1MDZEQ1x1MDZERi1cdTA2RTRcdTA2RTctXHUwNkU4XHUwNkVBLVx1MDZFRFx1QTY2Rlx1MURDMOKAk1x1MURGRlx1MjBEMOKAk1x1MjBGRlx1QTY3MC1cdUE2NzJcdUE2NzQtXHVBNjdEXHVBNjlGXHVkYzAwLVx1ZGZmZlx1RkUyMOKAk1x1RkUyRl0vO3QucmVwbGFjZUdldFJlY3Q9ZnVuY3Rpb24odCl7Zmk9dH07dmFyIFdvPWZ1bmN0aW9uKCl7aWYoTmkpcmV0dXJuITE7dmFyIHQ9c2koImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gdHx8ImRyYWdEcm9wImluIHR9KCk7VGk/aGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzY9PXQuY2hhckNvZGVBdChlLTEpJiYzOT09dC5jaGFyQ29kZUF0KGUpfTpJaSYmIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3JldHVybi9cLVteIFwtP118XD9bXiAhXCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfTpXaSYmL0Nocm9tZVwvKD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk/aGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZS0xKTtyZXR1cm4gcj49ODIwOCYmODIxMj49cn06V2kmJihoaT1mdW5jdGlvbih0LGUpe2lmKGU+MSYmNDU9PXQuY2hhckNvZGVBdChlLTEpKXtpZigvXHcvLnRlc3QodC5jaGFyQXQoZS0yKSkmJi9bXlwtP1wuXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITA7aWYoZT4yJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1tcZFwuLF0vLnRlc3QodC5jaGFyQXQoZSkpKXJldHVybiExfXJldHVybi9bfiEjJSYqKT0rfVxdXFx8XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZbXHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfSk7dmFyIE9vLEVvLHpvPTMhPSJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9W10sbj10Lmxlbmd0aDtuPj1lOyl7dmFyIGk9dC5pbmRleE9mKCJcbiIsZSk7LTE9PWkmJihpPXQubGVuZ3RoKTt2YXIgbz10LnNsaWNlKGUsIlxyIj09dC5jaGFyQXQoaS0xKT9pLTE6aSksbD1vLmluZGV4T2YoIlxyIik7LTEhPWw/KHIucHVzaChvLnNsaWNlKDAsbCkpLGUrPWwrMSk6KHIucHVzaChvKSxlPWkrMSl9cmV0dXJuIHJ9OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KC9cclxuP3xcbi8pfTt0LnNwbGl0TGluZXM9em87dmFyIElvPXdpbmRvdy5nZXRTZWxlY3Rpb24/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LnNlbGVjdGlvblN0YXJ0IT10LnNlbGVjdGlvbkVuZH1jYXRjaChlKXtyZXR1cm4hMX19OmZ1bmN0aW9uKHQpe3RyeXt2YXIgZT10Lm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCl9Y2F0Y2gocil7fXJldHVybiBlJiZlLnBhcmVudEVsZW1lbnQoKT09dD8wIT1lLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLGUpOiExfSxGbz1mdW5jdGlvbigpe3ZhciB0PXNpKCJkaXYiKTtyZXR1cm4ib25jb3B5ImluIHQ/ITA6KHQuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCJyZXR1cm47IiksImZ1bmN0aW9uIj09dHlwZW9mIHQub25jb3B5KX0oKSxQbz17MzoiRW50ZXIiLDg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkN0cmwiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjIiwzMjoiU3BhY2UiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJMZWZ0IiwzODoiVXAiLDM5OiJSaWdodCIsNDA6IkRvd24iLDQ0OiJQcmludFNjcm4iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDU5OiI7Iiw5MToiTW9kIiw5MjoiTW9kIiw5MzoiTW9kIiwxMDk6Ii0iLDEwNzoiPSIsMTI3OiJEZWxldGUiLDE4NjoiOyIsMTg3OiI9IiwxODg6IiwiLDE4OToiLSIsMTkwOiIuIiwxOTE6Ii8iLDE5MjoiYCIsMjE5OiJbIiwyMjA6IlxcIiwyMjE6Il0iLDIyMjoiJyIsNjMyNzY6IlBhZ2VVcCIsNjMyNzc6IlBhZ2VEb3duIiw2MzI3NToiRW5kIiw2MzI3MzoiSG9tZSIsNjMyMzQ6IkxlZnQiLDYzMjMyOiJVcCIsNjMyMzU6IlJpZ2h0Iiw2MzIzMzoiRG93biIsNjMzMDI6Ikluc2VydCIsNjMyNzI6IkRlbGV0ZSJ9O3Qua2V5TmFtZXM9UG8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDsxMD50O3QrKylQb1t0KzQ4XT1TdHJpbmcodCk7Zm9yKHZhciB0PTY1OzkwPj10O3QrKylQb1t0XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2Zvcih2YXIgdD0xOzEyPj10O3QrKylQb1t0KzExMV09UG9bdCs2MzIzNV09IkYiK3R9KCk7dmFyIFJvLEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gMjU1Pj10P2UuY2hhckF0KHQpOnQ+PTE0MjQmJjE1MjQ+PXQ/IlIiOnQ+PTE1MzYmJjE3OTE+PXQ/ci5jaGFyQXQodC0xNTM2KTp0Pj0xNzkyJiYyMjIwPj10PyJyIjoiTCJ9dmFyIGU9ImJiYmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJzc3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTEwiLHI9InJycnJycnJycnJycixyTk5tbW1tbW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tcnJycnJycm5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbW1tbW1tTm1tbW1ycnJycnJycnJycnJycnJycnIiLG49L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLyxpPS9bc3R3Tl0vLG89L1tMUnJdLyxsPS9bTGIxbl0vLHM9L1sxbl0vLGE9IkwiO3JldHVybiBmdW5jdGlvbihlKXtpZighbi50ZXN0KGUpKXJldHVybiExO2Zvcih2YXIgcix1PWUubGVuZ3RoLGM9W10sZj0wO3U+ZjsrK2YpYy5wdXNoKHI9dChlLmNoYXJDb2RlQXQoZikpKTtmb3IodmFyIGY9MCxoPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsibSI9PXI/Y1tmXT1oOmg9cn1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiMSI9PXImJiJyIj09ZD9jW2ZdPSJuIjpvLnRlc3QocikmJihkPXIsInIiPT1yJiYoY1tmXT0iUiIpKX1mb3IodmFyIGY9MSxoPWNbMF07dS0xPmY7KytmKXt2YXIgcj1jW2ZdOyIrIj09ciYmIjEiPT1oJiYiMSI9PWNbZisxXT9jW2ZdPSIxIjoiLCIhPXJ8fGghPWNbZisxXXx8IjEiIT1oJiYibiIhPWh8fChjW2ZdPWgpLGg9cn1mb3IodmFyIGY9MDt1PmY7KytmKXt2YXIgcj1jW2ZdO2lmKCIsIj09ciljW2ZdPSJOIjtlbHNlIGlmKCIlIj09cil7Zm9yKHZhciBwPWYrMTt1PnAmJiIlIj09Y1twXTsrK3ApO2Zvcih2YXIgZz1mJiYiISI9PWNbZi0xXXx8dS0xPnAmJiIxIj09Y1twXT8iMSI6Ik4iLG09ZjtwPm07KyttKWNbbV09ZztmPXAtMX19Zm9yKHZhciBmPTAsZD1hO3U+ZjsrK2Ype3ZhciByPWNbZl07IkwiPT1kJiYiMSI9PXI/Y1tmXT0iTCI6by50ZXN0KHIpJiYoZD1yKX1mb3IodmFyIGY9MDt1PmY7KytmKWlmKGkudGVzdChjW2ZdKSl7Zm9yKHZhciBwPWYrMTt1PnAmJmkudGVzdChjW3BdKTsrK3ApO2Zvcih2YXIgdj0iTCI9PShmP2NbZi0xXTphKSx5PSJMIj09KHUtMT5wP2NbcF06YSksZz12fHx5PyJMIjoiUiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfWZvcih2YXIgYix4PVtdLGY9MDt1PmY7KWlmKGwudGVzdChjW2ZdKSl7dmFyIEM9Zjtmb3IoKytmO3U+ZiYmbC50ZXN0KGNbZl0pOysrZik7eC5wdXNoKHtmcm9tOkMsdG86ZixsZXZlbDowfSl9ZWxzZXt2YXIgdz1mLEw9eC5sZW5ndGg7Zm9yKCsrZjt1PmYmJiJMIiE9Y1tmXTsrK2YpO2Zvcih2YXIgbT13O2Y+bTspaWYocy50ZXN0KGNbbV0pKXttPncmJnguc3BsaWNlKEwsMCx7ZnJvbTp3LHRvOm0sbGV2ZWw6MX0pO3ZhciBrPW07Zm9yKCsrbTtmPm0mJnMudGVzdChjW21dKTsrK20pO3guc3BsaWNlKEwsMCx7ZnJvbTprLHRvOm0sbGV2ZWw6Mn0pLHc9bX1lbHNlKyttO2Y+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86ZixsZXZlbDoxfSl9cmV0dXJuIDE9PXhbMF0ubGV2ZWwmJihiPWUubWF0Y2goL15ccysvKSkmJih4WzBdLmZyb209YlswXS5sZW5ndGgseC51bnNoaWZ0KHtmcm9tOjAsdG86YlswXS5sZW5ndGgsbGV2ZWw6MH0pKSwxPT1Rbih4KS5sZXZlbCYmKGI9ZS5tYXRjaCgvXHMrJC8pKSYmKFFuKHgpLnRvLT1iWzBdLmxlbmd0aCx4LnB1c2goe2Zyb206dS1iWzBdLmxlbmd0aCx0bzp1LGxldmVsOjB9KSkseFswXS5sZXZlbCE9UW4oeCkubGV2ZWwmJngucHVzaCh7ZnJvbTp1LHRvOnUsbGV2ZWw6eFswXS5sZXZlbH0pLHh9fSgpO3JldHVybiB0LnZlcnNpb249IjMuMjAuMCIsdH0oKTtQSwcIxlyRsL+vAQC/rwEAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAc3RhdGljXGxpYlxoaWdobGlnaHQubWluLmpzdmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChvKXtyZXR1cm4gby5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gYihwKXtmb3IodmFyIG89cC5maXJzdENoaWxkO287bz1vLm5leHRTaWJsaW5nKXtpZihvLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJDT0RFIil7cmV0dXJuIG99aWYoIShvLm5vZGVUeXBlPT0zJiZvLm5vZGVWYWx1ZS5tYXRjaCgvXHMrLykpKXticmVha319fWZ1bmN0aW9uIGgocCxvKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHAuY2hpbGROb2RlcyxmdW5jdGlvbihxKXtpZihxLm5vZGVUeXBlPT0zKXtyZXR1cm4gbz9xLm5vZGVWYWx1ZS5yZXBsYWNlKC9cbi9nLCIiKTpxLm5vZGVWYWx1ZX1pZihxLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJCUiIpe3JldHVybiJcbiJ9cmV0dXJuIGgocSxvKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIGEocSl7dmFyIHA9KHEuY2xhc3NOYW1lKyIgIisocS5wYXJlbnROb2RlP3EucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIpKS5zcGxpdCgvXHMrLyk7cD1wLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIil9KTtmb3IodmFyIG89MDtvPHAubGVuZ3RoO28rKyl7aWYoZVtwW29dXXx8cFtvXT09Im5vLWhpZ2hsaWdodCIpe3JldHVybiBwW29dfX19ZnVuY3Rpb24gYyhxKXt2YXIgbz1bXTsoZnVuY3Rpb24gcChyLHMpe2Zvcih2YXIgdD1yLmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpe2lmKHQubm9kZVR5cGU9PTMpe3MrPXQubm9kZVZhbHVlLmxlbmd0aH1lbHNle2lmKHQubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cys9MX1lbHNle2lmKHQubm9kZVR5cGU9PTEpe28ucHVzaCh7ZXZlbnQ6InN0YXJ0IixvZmZzZXQ6cyxub2RlOnR9KTtzPXAodCxzKTtvLnB1c2goe2V2ZW50OiJzdG9wIixvZmZzZXQ6cyxub2RlOnR9KX19fX1yZXR1cm4gc30pKHEsMCk7cmV0dXJuIG99ZnVuY3Rpb24gaihwLHIsdil7dmFyIHE9MDt2YXIgeT0iIjt2YXIgcz1bXTtmdW5jdGlvbiB1KCl7aWYoIXAubGVuZ3RofHwhci5sZW5ndGgpe3JldHVybiBwLmxlbmd0aD9wOnJ9aWYocFswXS5vZmZzZXQhPXJbMF0ub2Zmc2V0KXtyZXR1cm4ocFswXS5vZmZzZXQ8clswXS5vZmZzZXQpP3A6cn1yZXR1cm4gclswXS5ldmVudD09InN0YXJ0Ij9wOnJ9ZnVuY3Rpb24gdChBKXtmdW5jdGlvbiB6KEIpe3JldHVybiIgIitCLm5vZGVOYW1lKyc9IicrbChCLnZhbHVlKSsnIid9eSs9IjwiK0Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKStBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoQS5hdHRyaWJ1dGVzLHopLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB4KHope3krPSI8LyIrei5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKyI+In1mdW5jdGlvbiBvKHopeyh6LmV2ZW50PT0ic3RhcnQiP3Q6eCkoei5ub2RlKX13aGlsZShwLmxlbmd0aHx8ci5sZW5ndGgpe3ZhciB3PXUoKTt5Kz1sKHYuc3Vic3RyKHEsd1swXS5vZmZzZXQtcSkpO3E9d1swXS5vZmZzZXQ7aWYodz09cCl7cy5yZXZlcnNlKCkuZm9yRWFjaCh4KTtkb3tvKHcuc3BsaWNlKDAsMSlbMF0pO3c9dSgpfXdoaWxlKHc9PXAmJncubGVuZ3RoJiZ3WzBdLm9mZnNldD09cSk7cy5yZXZlcnNlKCkuZm9yRWFjaCh0KX1lbHNle2lmKHdbMF0uZXZlbnQ9PSJzdGFydCIpe3MucHVzaCh3WzBdLm5vZGUpfWVsc2V7cy5wb3AoKX1vKHcuc3BsaWNlKDAsMSlbMF0pfX1yZXR1cm4geStsKHYuc3Vic3RyKHEpKX1mdW5jdGlvbiBmKHIpe2Z1bmN0aW9uIG8ocyl7cmV0dXJuKHMmJnMuc291cmNlKXx8c31mdW5jdGlvbiBwKHQscyl7cmV0dXJuIFJlZ0V4cChvKHQpLCJtIisoci5jST8iaSI6IiIpKyhzPyJnIjoiIikpfWZ1bmN0aW9uIHEoeix4KXtpZih6LmNvbXBpbGVkKXtyZXR1cm59ei5jb21waWxlZD10cnVlO3ZhciB1PVtdO2lmKHouayl7dmFyIHM9e307ZnVuY3Rpb24gQShCLHQpe2lmKHIuY0kpe3Q9dC50b0xvd2VyQ2FzZSgpfXQuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBEPUMuc3BsaXQoInwiKTtzW0RbMF1dPVtCLERbMV0/TnVtYmVyKERbMV0pOjFdO3UucHVzaChEWzBdKX0pfXoubFI9cCh6Lmx8fCJcXGIiK2hsanMuSVIrIlxcYig/IVxcLikiLHRydWUpO2lmKHR5cGVvZiB6Lms9PSJzdHJpbmciKXtBKCJrZXl3b3JkIix6LmspfWVsc2V7Zm9yKHZhciB5IGluIHouayl7aWYoIXouay5oYXNPd25Qcm9wZXJ0eSh5KSl7Y29udGludWV9QSh5LHoua1t5XSl9fXouaz1zfWlmKHgpe2lmKHouYldLKXt6LmI9IlxcYigiK3Uuam9pbigifCIpKyIpXFxiKD8hXFwuKVxccyoifXouYlI9cCh6LmI/ei5iOiJcXEJ8XFxiIik7aWYoIXouZSYmIXouZVcpe3ouZT0iXFxCfFxcYiJ9aWYoei5lKXt6LmVSPXAoei5lKX16LnRFPW8oei5lKXx8IiI7aWYoei5lVyYmeC50RSl7ei50RSs9KHouZT8ifCI6IiIpK3gudEV9fWlmKHouaSl7ei5pUj1wKHouaSl9aWYoei5yPT09dW5kZWZpbmVkKXt6LnI9MX1pZighei5jKXt6LmM9W119Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7aWYoei5jW3ddPT0ic2VsZiIpe3ouY1t3XT16fXEoei5jW3ddLHopfWlmKHouc3RhcnRzKXtxKHouc3RhcnRzLHgpfXZhciB2PVtdO2Zvcih2YXIgdz0wO3c8ei5jLmxlbmd0aDt3Kyspe3YucHVzaChvKHouY1t3XS5iKSl9aWYoei50RSl7di5wdXNoKG8oei50RSkpfWlmKHouaSl7di5wdXNoKG8oei5pKSl9ei50PXYubGVuZ3RoP3Aodi5qb2luKCJ8IiksdHJ1ZSk6e2V4ZWM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9fX1xKHIpfWZ1bmN0aW9uIGQoRSxHLEMsTSl7ZnVuY3Rpb24gbyhyLFApe2Zvcih2YXIgTz0wO088UC5jLmxlbmd0aDtPKyspe3ZhciBOPVAuY1tPXS5iUi5leGVjKHIpO2lmKE4mJk4uaW5kZXg9PTApe3JldHVybiBQLmNbT119fX1mdW5jdGlvbiBzKE4scil7aWYoTi5lJiZOLmVSLnRlc3Qocikpe3JldHVybiBOfWlmKE4uZVcpe3JldHVybiBzKE4ucGFyZW50LHIpfX1mdW5jdGlvbiB0KHIsTil7cmV0dXJuICFDJiZOLmkmJk4uaVIudGVzdChyKX1mdW5jdGlvbiB5KE8scil7dmFyIE49SC5jST9yWzBdLnRvTG93ZXJDYXNlKCk6clswXTtyZXR1cm4gTy5rLmhhc093blByb3BlcnR5KE4pJiZPLmtbTl19ZnVuY3Rpb24gSSgpe3ZhciBOPWwodyk7aWYoIUIuayl7cmV0dXJuIE59dmFyIHI9IiI7dmFyIFE9MDtCLmxSLmxhc3RJbmRleD0wO3ZhciBPPUIubFIuZXhlYyhOKTt3aGlsZShPKXtyKz1OLnN1YnN0cihRLE8uaW5kZXgtUSk7dmFyIFA9eShCLE8pO2lmKFApe3YrPVBbMV07cis9JzxzcGFuIGNsYXNzPSInK1BbMF0rJyI+JytPWzBdKyI8L3NwYW4+In1lbHNle3IrPU9bMF19UT1CLmxSLmxhc3RJbmRleDtPPUIubFIuZXhlYyhOKX1yZXR1cm4gcitOLnN1YnN0cihRKX1mdW5jdGlvbiB6KCl7aWYoQi5zTCYmIWVbQi5zTF0pe3JldHVybiBsKHcpfXZhciBOPUIuc3ViTGFuZ3VhZ2VNb2RlPT0iY29udGludW91cyI/Qi50b3A6dW5kZWZpbmVkO3ZhciByPUIuc0w/ZChCLnNMLHcsdHJ1ZSxOKTpnKHcpO2lmKEIucj4wKXt2Kz1yLmtleXdvcmRfY291bnQ7QSs9ci5yfUIudG9wPXIudG9wO3JldHVybic8c3BhbiBjbGFzcz0iJytyLmxhbmd1YWdlKyciPicrci52YWx1ZSsiPC9zcGFuPiJ9ZnVuY3Rpb24gTCgpe3JldHVybiBCLnNMIT09dW5kZWZpbmVkP3ooKTpJKCl9ZnVuY3Rpb24gSyhPLHIpe3ZhciBOPU8uY04/JzxzcGFuIGNsYXNzPSInK08uY04rJyI+JzoiIjtpZihPLnJCKXt4Kz1OO3c9IiJ9ZWxzZXtpZihPLmVCKXt4Kz1sKHIpK047dz0iIn1lbHNle3grPU47dz1yfX1CPU9iamVjdC5jcmVhdGUoTyx7cGFyZW50Ont2YWx1ZTpCfX0pfWZ1bmN0aW9uIEQoTixyKXt3Kz1OO2lmKHI9PT11bmRlZmluZWQpe3grPUwoKTtyZXR1cm4gMH12YXIgUD1vKHIsQik7aWYoUCl7eCs9TCgpO0soUCxyKTtyZXR1cm4gUC5yQj8wOnIubGVuZ3RofXZhciBRPXMoQixyKTtpZihRKXt2YXIgTz1CO2lmKCEoTy5yRXx8Ty5lRSkpe3crPXJ9eCs9TCgpO2Rve2lmKEIuY04pe3grPSI8L3NwYW4+In1BKz1CLnI7Qj1CLnBhcmVudH13aGlsZShCIT1RLnBhcmVudCk7aWYoTy5lRSl7eCs9bChyKX13PSIiO2lmKFEuc3RhcnRzKXtLKFEuc3RhcnRzLCIiKX1yZXR1cm4gTy5yRT8wOnIubGVuZ3RofWlmKHQocixCKSl7dGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtICInK3IrJyIgZm9yIG1vZGUgIicrKEIuY058fCI8dW5uYW1lZD4iKSsnIicpfXcrPXI7cmV0dXJuIHIubGVuZ3RofHwxfXZhciBIPWVbRV07aWYoIUgpe3Rocm93IG5ldyBFcnJvcignVW5rbm93biBsYW5ndWFnZTogIicrRSsnIicpfWYoSCk7dmFyIEI9TXx8SDt2YXIgeD0iIjtmb3IodmFyIEY9QjtGIT1IO0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3g9JzxzcGFuIGNsYXNzPSInK0YuY04rJyI+Jyt4fX12YXIgdz0iIjt2YXIgQT0wO3ZhciB2PTA7dHJ5e3ZhciB1LHEscD0wO3doaWxlKHRydWUpe0IudC5sYXN0SW5kZXg9cDt1PUIudC5leGVjKEcpO2lmKCF1KXticmVha31xPUQoRy5zdWJzdHIocCx1LmluZGV4LXApLHVbMF0pO3A9dS5pbmRleCtxfUQoRy5zdWJzdHIocCkpO2Zvcih2YXIgRj1CO0YucGFyZW50O0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3grPSI8L3NwYW4+In19cmV0dXJue3I6QSxrZXl3b3JkX2NvdW50OnYsdmFsdWU6eCxsYW5ndWFnZTpFLHRvcDpCfX1jYXRjaChKKXtpZihKLm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpIT0tMSl7cmV0dXJue3I6MCxrZXl3b3JkX2NvdW50OjAsdmFsdWU6bChHKX19ZWxzZXt0aHJvdyBKfX19ZnVuY3Rpb24gZyhzKXt2YXIgbz17a2V5d29yZF9jb3VudDowLHI6MCx2YWx1ZTpsKHMpfTt2YXIgcT1vO2Zvcih2YXIgcCBpbiBlKXtpZighZS5oYXNPd25Qcm9wZXJ0eShwKSl7Y29udGludWV9dmFyIHI9ZChwLHMsZmFsc2UpO3IubGFuZ3VhZ2U9cDtpZihyLmtleXdvcmRfY291bnQrci5yPnEua2V5d29yZF9jb3VudCtxLnIpe3E9cn1pZihyLmtleXdvcmRfY291bnQrci5yPm8ua2V5d29yZF9jb3VudCtvLnIpe3E9bztvPXJ9fWlmKHEubGFuZ3VhZ2Upe28uc2Vjb25kX2Jlc3Q9cX1yZXR1cm4gb31mdW5jdGlvbiBpKHEscCxvKXtpZihwKXtxPXEucmVwbGFjZSgvXigoPFtePl0rPnxcdCkrKS9nbSxmdW5jdGlvbihyLHYsdSx0KXtyZXR1cm4gdi5yZXBsYWNlKC9cdC9nLHApfSl9aWYobyl7cT1xLnJlcGxhY2UoL1xuL2csIjxicj4iKX1yZXR1cm4gcX1mdW5jdGlvbiBtKHIsdSxwKXt2YXIgdj1oKHIscCk7dmFyIHQ9YShyKTtpZih0PT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJufXZhciB3PXQ/ZCh0LHYsdHJ1ZSk6Zyh2KTt0PXcubGFuZ3VhZ2U7dmFyIG89YyhyKTtpZihvLmxlbmd0aCl7dmFyIHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIik7cS5pbm5lckhUTUw9dy52YWx1ZTt3LnZhbHVlPWoobyxjKHEpLHYpfXcudmFsdWU9aSh3LnZhbHVlLHUscCk7dmFyIHM9ci5jbGFzc05hbWU7aWYoIXMubWF0Y2goIihcXHN8XikobGFuZ3VhZ2UtKT8iK3QrIihcXHN8JCkiKSl7cz1zPyhzKyIgIit0KTp0fXIuaW5uZXJIVE1MPXcudmFsdWU7ci5jbGFzc05hbWU9cztyLnJlc3VsdD17bGFuZ3VhZ2U6dCxrdzp3LmtleXdvcmRfY291bnQscmU6dy5yfTtpZih3LnNlY29uZF9iZXN0KXtyLnNlY29uZF9iZXN0PXtsYW5ndWFnZTp3LnNlY29uZF9iZXN0Lmxhbmd1YWdlLGt3Oncuc2Vjb25kX2Jlc3Qua2V5d29yZF9jb3VudCxyZTp3LnNlY29uZF9iZXN0LnJ9fX1mdW5jdGlvbiBuKCl7aWYobi5jYWxsZWQpe3JldHVybn1uLmNhbGxlZD10cnVlO0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIiksYikuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24obyl7bShvLGhsanMudGFiUmVwbGFjZSl9KX1mdW5jdGlvbiBrKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLG4sZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixuLGZhbHNlKX12YXIgZT17fTt0aGlzLkxBTkdVQUdFUz1lO3RoaXMuaGlnaGxpZ2h0PWQ7dGhpcy5oaWdobGlnaHRBdXRvPWc7dGhpcy5maXhNYXJrdXA9aTt0aGlzLmhpZ2hsaWdodEJsb2NrPW07dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW47dGhpcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPWs7dGhpcy5JUj0iW2EtekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSIoXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcYlxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bLStdP1xcZCspPykiO3RoaXMuQk5SPSJcXGIoMGJbMDFdKykiO3RoaXMuUlNSPSIhfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFwqfFxcKj18XFwrfFxcKz18LHxcXC58LXwtPXwvfC89fDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXD98XFxbfFxce3xcXCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iO3RoaXMuQkU9e2I6IlxcXFxbXFxzXFxTXSIscjowfTt0aGlzLkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlt0aGlzLkJFXSxyOjB9O3RoaXMuUVNNPXtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5DTENNPXtjTjoiY29tbWVudCIsYjoiLy8iLGU6IiQifTt0aGlzLkNCTENMTT17Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8ifTt0aGlzLkhDTT17Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQifTt0aGlzLk5NPXtjTjoibnVtYmVyIixiOnRoaXMuTlIscjowfTt0aGlzLkNOTT17Y046Im51bWJlciIsYjp0aGlzLkNOUixyOjB9O3RoaXMuQk5NPXtjTjoibnVtYmVyIixiOnRoaXMuQk5SLHI6MH07dGhpcy5SRUdFWFBfTU9ERT17Y046InJlZ2V4cCIsYjovXC8vLGU6L1wvW2dpbV0qLyxpOi9cbi8sYzpbdGhpcy5CRSx7YjovXFsvLGU6L1xdLyxyOjAsYzpbdGhpcy5CRV19XX07dGhpcy5pbmhlcml0PWZ1bmN0aW9uKHEscil7dmFyIG89e307Zm9yKHZhciBwIGluIHEpe29bcF09cVtwXX1pZihyKXtmb3IodmFyIHAgaW4gcil7b1twXT1yW3BdfX1yZXR1cm4gb319KCk7aGxqcy5MQU5HVUFHRVMuYmFzaD1mdW5jdGlvbihhKXt2YXIgYz17Y046InZhcmlhYmxlIixiOi9cJFtcd1xkI0BdW1x3XGRfXSovfTt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFx7KC4qPylcfS99O3ZhciBlPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOlthLkJFLGMsYix7Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfV0scjowfTt2YXIgZD17Y046InN0cmluZyIsYjovJy8sZTovJy8scjowfTtyZXR1cm57bDovLT9bYS16XSsvLGs6e2tleXdvcmQ6ImlmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciBicmVhayBjb250aW51ZSB3aGlsZSBpbiBkbyBkb25lIGV4aXQgcmV0dXJuIHNldCBkZWNsYXJlIGNhc2UgZXNhYyBleHBvcnQgZXhlYyIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSIsYnVpbHRfaW46InByaW50ZiBlY2hvIHJlYWQgY2QgcHdkIHB1c2hkIHBvcGQgZGlycyBsZXQgZXZhbCB1bnNldCB0eXBlc2V0IHJlYWRvbmx5IGdldG9wdHMgc291cmNlIHNob3B0IGNhbGxlciB0eXBlIGhhc2ggYmluZCBoZWxwIHN1ZG8iLG9wZXJhdG9yOiItbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEifSxjOlt7Y046InNoZWJhbmciLGI6L14jIVteXG5dK3NoXHMqJC8scjoxMH0se2NOOiJmdW5jdGlvbiIsYjovXHdbXHdcZF9dKlxzKlwoXHMqXClccypcey8sckI6dHJ1ZSxjOlt7Y046InRpdGxlIixiOi9cd1tcd1xkX10qL31dLHI6MH0sYS5IQ00sYS5OTSxlLGQsYyxiXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmNzPWZ1bmN0aW9uKGEpe3JldHVybntrOiJhYnN0cmFjdCBhcyBiYXNlIGJvb2wgYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2hlY2tlZCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWNpbWFsIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmFsc2UgZmluYWxseSBmaXhlZCBmbG9hdCBmb3IgZm9yZWFjaCBnb3RvIGlmIGltcGxpY2l0IGluIGludCBpbnRlcmZhY2UgaW50ZXJuYWwgaXMgbG9jayBsb25nIG5hbWVzcGFjZSBuZXcgbnVsbCBvYmplY3Qgb3BlcmF0b3Igb3V0IG92ZXJyaWRlIHBhcmFtcyBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmVhZG9ubHkgcmVmIHJldHVybiBzYnl0ZSBzZWFsZWQgc2hvcnQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVpbnQgdWxvbmcgdW5jaGVja2VkIHVuc2FmZSB1c2hvcnQgdXNpbmcgdmlydHVhbCB2b2xhdGlsZSB2b2lkIHdoaWxlIGFzeW5jIGF3YWl0IGFzY2VuZGluZyBkZXNjZW5kaW5nIGZyb20gZ2V0IGdyb3VwIGludG8gam9pbiBsZXQgb3JkZXJieSBwYXJ0aWFsIHNlbGVjdCBzZXQgdmFsdWUgdmFyIHdoZXJlIHlpZWxkIixjOlt7Y046ImNvbW1lbnQiLGI6Ii8vLyIsZToiJCIsckI6dHJ1ZSxjOlt7Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+In0se2NOOiJ4bWxEb2NUYWciLGI6IjwvPyIsZToiPiJ9XX0sYS5DTENNLGEuQ0JMQ0xNLHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIixrOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSByZWdpb24gZW5kcmVnaW9uIHByYWdtYSBjaGVja3N1bSJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIicsYzpbe2I6JyIiJ31dfSxhLkFTTSxhLlFTTSxhLkNOTV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5ydWJ5PWZ1bmN0aW9uKGUpe3ZhciBhPSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGo9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBnPXtrZXl3b3JkOiJhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyBpZiBCRUdJTiByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuIG5leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgbmlsIGVsc2UgYnJlYWsgdW5kZWYgbm90IHN1cGVyIGNsYXNzIGNhc2UgcmVxdWlyZSB5aWVsZCBhbGlhcyB3aGlsZSBlbnN1cmUgZWxzaWYgb3IgaW5jbHVkZSJ9O3ZhciBjPXtjTjoieWFyZG9jdGFnIixiOiJAW0EtWmEtel0rIn07dmFyIGs9W3tjTjoiY29tbWVudCIsYjoiIyIsZToiJCIsYzpbY119LHtjTjoiY29tbWVudCIsYjoiXlxcPWJlZ2luIixlOiJeXFw9ZW5kIixjOltjXSxyOjEwfSx7Y046ImNvbW1lbnQiLGI6Il5fX0VORF9fIixlOiJcXG4kIn1dO3ZhciBkPXtjTjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6YSxrOmd9O3ZhciBpPVtlLkJFLGRdO3ZhciBiPVt7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6aSxyOjB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXCgiLGU6IlxcKSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddP3siLGU6In0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddPzwiLGU6Ij4iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LyIsZToiLyIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPy0iLGU6Ii0iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFx8IixlOiJcXHwiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjovXEJcPyhcXFxkezEsM318XFx4W0EtRmEtZjAtOV17MSwyfXxcXHVbQS1GYS1mMC05XXs0fXxcXD9cUylcYi99XTt2YXIgaD17Y046ImZ1bmN0aW9uIixiV0s6dHJ1ZSxlOiIgfCR8OyIsazoiZGVmIixjOlt7Y046InRpdGxlIixiOmosbDphLGs6Z30se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixsOmEsazpnfV0uY29uY2F0KGspfTt2YXIgZj1rLmNvbmNhdChiLmNvbmNhdChbe2NOOiJjbGFzcyIsYldLOnRydWUsZToiJHw7IixrOiJjbGFzcyBtb2R1bGUiLGM6W3tjTjoidGl0bGUiLGI6IltBLVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixyOjB9LHtjTjoiaW5oZXJpdGFuY2UiLGI6IjxcXHMqIixjOlt7Y046InBhcmVudCIsYjoiKCIrZS5JUisiOjopPyIrZS5JUn1dfV0uY29uY2F0KGspfSxoLHtjTjoiY29uc3RhbnQiLGI6Iig6Oik/KFxcYltBLVpdXFx3Kig6Oik/KSsiLHI6MH0se2NOOiJzeW1ib2wiLGI6IjoiLGM6Yi5jb25jYXQoW3tiOmp9XSkscjowfSx7Y046InN5bWJvbCIsYjphKyI6IixyOjB9LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtjTjoidmFyaWFibGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSJ9LHtiOiIoIitlLlJTUisiKVxccyoiLGM6ay5jb25jYXQoW3tjTjoicmVnZXhwIixiOiIvIixlOiIvW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlcnsiLGU6In1bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyXFwoIixlOiJcXClbYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyISIsZToiIVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXFsiLGU6IlxcXVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfV0pLHI6MH1dKSk7ZC5jPWY7aC5jWzFdLmM9ZjtyZXR1cm57bDphLGs6ZyxjOmZ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5kaWZmPWZ1bmN0aW9uKGEpe3JldHVybntjOlt7Y046ImNodW5rIixiOiJeXFxAXFxAICtcXC1cXGQrLFxcZCsgK1xcK1xcZCssXFxkKyArXFxAXFxAJCIscjoxMH0se2NOOiJjaHVuayIsYjoiXlxcKlxcKlxcKiArXFxkKyxcXGQrICtcXCpcXCpcXCpcXCokIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwtXFwtXFwtICtcXGQrLFxcZCsgK1xcLVxcLVxcLVxcLSQiLHI6MTB9LHtjTjoiaGVhZGVyIixiOiJJbmRleDogIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Ij09PT09IixlOiI9PT09PSQifSx7Y046ImhlYWRlciIsYjoiXlxcLVxcLVxcLSIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwqezN9ICIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwrXFwrXFwrIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6IlxcKns1fSIsZToiXFwqezV9JCJ9LHtjTjoiYWRkaXRpb24iLGI6Il5cXCsiLGU6IiQifSx7Y046ImRlbGV0aW9uIixiOiJeXFwtIixlOiIkIn0se2NOOiJjaGFuZ2UiLGI6Il5cXCEiLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PWZ1bmN0aW9uKGEpe3JldHVybntrOntrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5In0sYzpbYS5BU00sYS5RU00sYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLHtiOiIoIithLlJTUisifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsazoicmV0dXJuIHRocm93IGNhc2UiLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlJFR0VYUF9NT0RFLHtiOi88LyxlOi8+Oy8sc0w6InhtbCJ9XSxyOjB9LHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6L3svLGs6ImZ1bmN0aW9uIixjOlt7Y046InRpdGxlIixiOi9bQS1aYS16JF9dWzAtOUEtWmEteiRfXSovfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxjOlthLkNMQ00sYS5DQkxDTE1dLGk6L1siJ1woXS99XSxpOi9cW3wlL31dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMueG1sPWZ1bmN0aW9uKGEpe3ZhciBjPSJbQS1aYS16MC05XFwuXzotXSsiO3ZhciBiPXtlVzp0cnVlLHI6MCxjOlt7Y046ImF0dHJpYnV0ZSIsYjpjLHI6MH0se2I6Jz0iJyxyQjp0cnVlLGU6JyInLGM6W3tjTjoidmFsdWUiLGI6JyInLGVXOnRydWV9XX0se2I6Ij0nIixyQjp0cnVlLGU6IiciLGM6W3tjTjoidmFsdWUiLGI6IiciLGVXOnRydWV9XX0se2I6Ij0iLGM6W3tjTjoidmFsdWUiLGI6IlteXFxzLz5dKyJ9XX1dfTtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSx7Y046ImRvY3R5cGUiLGI6IjwhRE9DVFlQRSIsZToiPiIscjoxMCxjOlt7YjoiXFxbIixlOiJcXF0ifV19LHtjTjoiY29tbWVudCIsYjoiPCEtLSIsZToiLS0+IixyOjEwfSx7Y046ImNkYXRhIixiOiI8XFwhXFxbQ0RBVEFcXFsiLGU6IlxcXVxcXT4iLHI6MTB9LHtjTjoidGFnIixiOiI8c3R5bGUoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InN0eWxlIn0sYzpbYl0sc3RhcnRzOntlOiI8L3N0eWxlPiIsckU6dHJ1ZSxzTDoiY3NzIn19LHtjTjoidGFnIixiOiI8c2NyaXB0KD89XFxzfD58JCkiLGU6Ij4iLGs6e3RpdGxlOiJzY3JpcHQifSxjOltiXSxzdGFydHM6e2U6IjxcL3NjcmlwdD4iLHJFOnRydWUsc0w6ImphdmFzY3JpcHQifX0se2I6IjwlIixlOiIlPiIsc0w6InZic2NyaXB0In0se2NOOiJ0YWciLGI6IjwvPyIsZToiLz8+IixyOjAsYzpbe2NOOiJ0aXRsZSIsYjoiW14gLz48XSsifSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFya2Rvd249ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiaGVhZGVyIixiOiJeI3sxLDN9IixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il4uKz9cXG5bPS1dezIsfSQifSx7YjoiPCIsZToiPiIsc0w6InhtbCIscjowfSx7Y046ImJ1bGxldCIsYjoiXihbKistXXwoXFxkK1xcLikpXFxzKyJ9LHtjTjoic3Ryb25nIixiOiJbKl9dezJ9Lis/WypfXXsyfSJ9LHtjTjoiZW1waGFzaXMiLGI6IlxcKi4rP1xcKiJ9LHtjTjoiZW1waGFzaXMiLGI6Il8uKz9fIixyOjB9LHtjTjoiYmxvY2txdW90ZSIsYjoiXj5cXHMrIixlOiIkIn0se2NOOiJjb2RlIixiOiJgLis/YCJ9LHtjTjoiY29kZSIsYjoiXiAgICAiLGU6IiQiLHI6MH0se2NOOiJob3Jpem9udGFsX3J1bGUiLGI6Il4tezMsfSIsZToiJCJ9LHtiOiJcXFsuKz9cXF1cXCguKz9cXCkiLHJCOnRydWUsYzpbe2NOOiJsaW5rX2xhYmVsIixiOiJcXFsuK1xcXSJ9LHtjTjoibGlua191cmwiLGI6IlxcKCIsZToiXFwpIixlQjp0cnVlLGVFOnRydWV9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3NzPWZ1bmN0aW9uKGEpe3ZhciBiPSJbYS16QS1aLV1bYS16QS1aMC05Xy1dKiI7dmFyIGM9e2NOOiJmdW5jdGlvbiIsYjpiKyJcXCgiLGU6IlxcKSIsYzpbInNlbGYiLGEuTk0sYS5BU00sYS5RU01dfTtyZXR1cm57Y0k6dHJ1ZSxpOiJbPS98J10iLGM6W2EuQ0JMQ0xNLHtjTjoiaWQiLGI6IlxcI1tBLVphLXowLTlfLV0rIn0se2NOOiJjbGFzcyIsYjoiXFwuW0EtWmEtejAtOV8tXSsiLHI6MH0se2NOOiJhdHRyX3NlbGVjdG9yIixiOiJcXFsiLGU6IlxcXSIsaToiJCJ9LHtjTjoicHNldWRvIixiOiI6KDopP1thLXpBLVowLTlcXF9cXC1cXCtcXChcXClcXFwiXFwnXSsifSx7Y046ImF0X3J1bGUiLGI6IkAoZm9udC1mYWNlfHBhZ2UpIixsOiJbYS16LV0rIixrOiJmb250LWZhY2UgcGFnZSJ9LHtjTjoiYXRfcnVsZSIsYjoiQCIsZToiW3s7XSIsYzpbe2NOOiJrZXl3b3JkIixiOi9cUysvfSx7YjovXHMvLGVXOnRydWUsZUU6dHJ1ZSxyOjAsYzpbYyxhLkFTTSxhLlFTTSxhLk5NXX1dfSx7Y046InRhZyIsYjpiLHI6MH0se2NOOiJydWxlcyIsYjoieyIsZToifSIsaToiW15cXHNdIixyOjAsYzpbYS5DQkxDTE0se2NOOiJydWxlIixiOiJbXlxcc10iLHJCOnRydWUsZToiOyIsZVc6dHJ1ZSxjOlt7Y046ImF0dHJpYnV0ZSIsYjoiW0EtWlxcX1xcLlxcLV0rIixlOiI6IixlRTp0cnVlLGk6IlteXFxzXSIsc3RhcnRzOntjTjoidmFsdWUiLGVXOnRydWUsZUU6dHJ1ZSxjOltjLGEuTk0sYS5RU00sYS5BU00sYS5DQkxDTE0se2NOOiJoZXhjb2xvciIsYjoiI1swLTlBLUZhLWZdKyJ9LHtjTjoiaW1wb3J0YW50IixiOiIhaW1wb3J0YW50In1dfX1dfV19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmh0dHA9ZnVuY3Rpb24oYSl7cmV0dXJue2k6IlxcUyIsYzpbe2NOOiJzdGF0dXMiLGI6Il5IVFRQL1swLTlcXC5dKyIsZToiJCIsYzpbe2NOOiJudW1iZXIiLGI6IlxcYlxcZHszfVxcYiJ9XX0se2NOOiJyZXF1ZXN0IixiOiJeW0EtWl0rICguKj8pIEhUVFAvWzAtOVxcLl0rJCIsckI6dHJ1ZSxlOiIkIixjOlt7Y046InN0cmluZyIsYjoiICIsZToiICIsZUI6dHJ1ZSxlRTp0cnVlfV19LHtjTjoiYXR0cmlidXRlIixiOiJeXFx3IixlOiI6ICIsZUU6dHJ1ZSxpOiJcXG58XFxzfD0iLHN0YXJ0czp7Y046InN0cmluZyIsZToiJCJ9fSx7YjoiXFxuXFxuIixzdGFydHM6e3NMOiIiLGVXOnRydWV9fV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhPWZ1bmN0aW9uKGEpe3JldHVybntrOiJmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0IGZvciB0cnVlIHdoaWxlIGxvbmcgdGhyb3cgc3RyaWN0ZnAgZmluYWxseSBwcm90ZWN0ZWQgaW1wb3J0IG5hdGl2ZSBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgYnJlYWsgdHJhbnNpZW50IG5ldyBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyIsYzpbe2NOOiJqYXZhZG9jIixiOiIvXFwqXFwqIixlOiJcXCovIixjOlt7Y046ImphdmFkb2N0YWciLGI6IihefFxccylAW0EtWmEtel0rIn1dLHI6MTB9LGEuQ0xDTSxhLkNCTENMTSxhLkFTTSxhLlFTTSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyBpbnRlcmZhY2UiLGVFOnRydWUsaToiOiIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMgaW1wbGVtZW50cyIscjoxMH0se2NOOiJ0aXRsZSIsYjphLlVJUn1dfSxhLkNOTSx7Y046ImFubm90YXRpb24iLGI6IkBbQS1aYS16XSsifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5waHA9ZnVuY3Rpb24oYSl7dmFyIGU9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkK1thLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSoifTt2YXIgYj1bYS5pbmhlcml0KGEuQVNNLHtpOm51bGx9KSxhLmluaGVyaXQoYS5RU00se2k6bnVsbH0pLHtjTjoic3RyaW5nIixiOidiIicsZTonIicsYzpbYS5CRV19LHtjTjoic3RyaW5nIixiOiJiJyIsZToiJyIsYzpbYS5CRV19XTt2YXIgYz1bYS5CTk0sYS5DTk1dO3ZhciBkPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3JldHVybntjSTp0cnVlLGw6YS5VSVIsazoiYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciB3aGlsZSBpc3NldCBwdWJsaWMgcHJvdGVjdGVkIGV4aXQgZm9yZWFjaCB0aHJvdyBlbHNlaWYgaW5jbHVkZSBfX0ZJTEVfXyBlbXB0eSByZXF1aXJlX29uY2UgZG8geG9yIHJldHVybiBpbXBsZW1lbnRzIHBhcmVudCBjbG9uZSB1c2UgX19DTEFTU19fIF9fTElORV9fIGVsc2UgYnJlYWsgcHJpbnQgZXZhbCBuZXcgY2F0Y2ggX19NRVRIT0RfXyBjYXNlIGV4Y2VwdGlvbiBkZWZhdWx0IGRpZSByZXF1aXJlIF9fRlVOQ1RJT05fXyBlbmRkZWNsYXJlIGZpbmFsIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSBlbmRmb3IgZW5kaWYgZGVjbGFyZSB1bnNldCB0cnVlIGZhbHNlIG5hbWVzcGFjZSB0cmFpdCBnb3RvIGluc3RhbmNlb2YgaW5zdGVhZG9mIF9fRElSX18gX19OQU1FU1BBQ0VfXyB5aWVsZCBmaW5hbGx5IixjOlthLkNMQ00sYS5IQ00se2NOOiJjb21tZW50IixiOiIvXFwqIixlOiJcXCovIixjOlt7Y046InBocGRvYyIsYjoiXFxzQFtBLVphLXpdKyJ9XX0se2NOOiJjb21tZW50IixiOiJfX2hhbHRfY29tcGlsZXIuKz87IixlVzp0cnVlLGs6Il9faGFsdF9jb21waWxlciIsbDphLlVJUn0se2NOOiJzdHJpbmciLGI6Ijw8PFsnXCJdP1xcdytbJ1wiXT8kIixlOiJeXFx3KzsiLGM6W2EuQkVdfSx7Y046InByZXByb2Nlc3NvciIsYjoiPFxcP3BocCIscjoxMH0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IlxcPz4ifSxlLHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6InsiLGs6ImZ1bmN0aW9uIixpOiJcXCR8XFxbfCUiLGM6W2Qse2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic2VsZiIsZSxhLkNCTENMTV0uY29uY2F0KGIpLmNvbmNhdChjKX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyIsaToiWzpcXChcXCRdIixjOlt7YldLOnRydWUsZVc6dHJ1ZSxrOiJleHRlbmRzIixjOltkXX0sZF19LHtiOiI9PiJ9XS5jb25jYXQoYikuY29uY2F0KGMpfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucHl0aG9uPWZ1bmN0aW9uKGEpe3ZhciBmPXtjTjoicHJvbXB0IixiOi9eKD4+PnxcLlwuXC4pIC99O3ZhciBjPVt7Y046InN0cmluZyIsYjovKHV8Yik/cj8nJycvLGU6LycnJy8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fGIpP3I/IiIiLyxlOi8iIiIvLGM6W2ZdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKScvLGU6LycvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKSIvLGU6LyIvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8oYnxiciknLyxlOi8nLyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6LyhifGJyKSIvLGU6LyIvLGM6W2EuQkVdfV0uY29uY2F0KFthLkFTTSxhLlFTTV0pO3ZhciBlPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3ZhciBkPXtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6WyJzZWxmIixhLkNOTSxmXS5jb25jYXQoYyl9O3ZhciBiPXtiV0s6dHJ1ZSxlOi86LyxpOi9bJHs9O1xuXS8sYzpbZSxkXSxyOjEwfTtyZXR1cm57azp7a2V5d29yZDoiYW5kIGVsaWYgaXMgZ2xvYmFsIGFzIGluIGlmIGZyb20gcmFpc2UgZm9yIGV4Y2VwdCBmaW5hbGx5IHByaW50IGltcG9ydCBwYXNzIHJldHVybiBleGVjIGVsc2UgYnJlYWsgbm90IHdpdGggY2xhc3MgYXNzZXJ0IHlpZWxkIHRyeSB3aGlsZSBjb250aW51ZSBkZWwgb3IgZGVmIGxhbWJkYSBub25sb2NhbHwxMCBOb25lIFRydWUgRmFsc2UiLGJ1aWx0X2luOiJFbGxpcHNpcyBOb3RJbXBsZW1lbnRlZCJ9LGk6Lyg8XC98LT58XD8pLyxjOmMuY29uY2F0KFtmLGEuSENNLGEuaW5oZXJpdChiLHtjTjoiZnVuY3Rpb24iLGs6ImRlZiJ9KSxhLmluaGVyaXQoYix7Y046ImNsYXNzIixrOiJjbGFzcyJ9KSxhLkNOTSx7Y046ImRlY29yYXRvciIsYjovQC8sZTovJC99LHtiOi9cYihwcmludHxleGVjKVwoL31dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnNxbD1mdW5jdGlvbihhKXtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046Im9wZXJhdG9yIixiOiIoYmVnaW58ZW5kfHN0YXJ0fGNvbW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxyZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNlfHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hfGdyYW50KVxcYig/ITopIixlOiI7IixlVzp0cnVlLGs6e2tleXdvcmQ6ImFsbCBwYXJ0aWFsIGdsb2JhbCBtb250aCBjdXJyZW50X3RpbWVzdGFtcCB1c2luZyBnbyByZXZva2Ugc21hbGxpbnQgaW5kaWNhdG9yIGVuZC1leGVjIGRpc2Nvbm5lY3Qgem9uZSB3aXRoIGNoYXJhY3RlciBhc3NlcnRpb24gdG8gYWRkIGN1cnJlbnRfdXNlciB1c2FnZSBpbnB1dCBsb2NhbCBhbHRlciBtYXRjaCBjb2xsYXRlIHJlYWwgdGhlbiByb2xsYmFjayBnZXQgcmVhZCB0aW1lc3RhbXAgc2Vzc2lvbl91c2VyIG5vdCBpbnRlZ2VyIGJpdCB1bmlxdWUgZGF5IG1pbnV0ZSBkZXNjIGluc2VydCBleGVjdXRlIGxpa2UgaWxpa2V8MiBsZXZlbCBkZWNpbWFsIGRyb3AgY29udGludWUgaXNvbGF0aW9uIGZvdW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvbWFpbiByaWdodCBuYXRpb25hbCBzb21lIG1vZHVsZSB0cmFuc2FjdGlvbiByZWxhdGl2ZSBzZWNvbmQgY29ubmVjdCBlc2NhcGUgY2xvc2Ugc3lzdGVtX3VzZXIgZm9yIGRlZmVycmVkIHNlY3Rpb24gY2FzdCBjdXJyZW50IHNxbHN0YXRlIGFsbG9jYXRlIGludGVyc2VjdCBkZWFsbG9jYXRlIG51bWVyaWMgcHVibGljIHByZXNlcnZlIGZ1bGwgZ290byBpbml0aWFsbHkgYXNjIG5vIGtleSBvdXRwdXQgY29sbGF0aW9uIGdyb3VwIGJ5IHVuaW9uIHNlc3Npb24gYm90aCBsYXN0IGxhbmd1YWdlIGNvbnN0cmFpbnQgY29sdW1uIG9mIHNwYWNlIGZvcmVpZ24gZGVmZXJyYWJsZSBwcmlvciBjb25uZWN0aW9uIHVua25vd24gYWN0aW9uIGNvbW1pdCB2aWV3IG9yIGZpcnN0IGludG8gZmxvYXQgeWVhciBwcmltYXJ5IGNhc2NhZGVkIGV4Y2VwdCByZXN0cmljdCBzZXQgcmVmZXJlbmNlcyBuYW1lcyB0YWJsZSBvdXRlciBvcGVuIHNlbGVjdCBzaXplIGFyZSByb3dzIGZyb20gcHJlcGFyZSBkaXN0aW5jdCBsZWFkaW5nIGNyZWF0ZSBvbmx5IG5leHQgaW5uZXIgYXV0aG9yaXphdGlvbiBzY2hlbWEgY29ycmVzcG9uZGluZyBvcHRpb24gZGVjbGFyZSBwcmVjaXNpb24gaW1tZWRpYXRlIGVsc2UgdGltZXpvbmVfbWludXRlIGV4dGVybmFsIHZhcnlpbmcgdHJhbnNsYXRpb24gdHJ1ZSBjYXNlIGV4Y2VwdGlvbiBqb2luIGhvdXIgZGVmYXVsdCBkb3VibGUgc2Nyb2xsIHZhbHVlIGN1cnNvciBkZXNjcmlwdG9yIHZhbHVlcyBkZWMgZmV0Y2ggcHJvY2VkdXJlIGRlbGV0ZSBhbmQgZmFsc2UgaW50IGlzIGRlc2NyaWJlIGNoYXIgYXMgYXQgaW4gdmFyY2hhciBudWxsIHRyYWlsaW5nIGFueSBhYnNvbHV0ZSBjdXJyZW50X3RpbWUgZW5kIGdyYW50IHByaXZpbGVnZXMgd2hlbiBjcm9zcyBjaGVjayB3cml0ZSBjdXJyZW50X2RhdGUgcGFkIGJlZ2luIHRlbXBvcmFyeSBleGVjIHRpbWUgdXBkYXRlIGNhdGFsb2cgdXNlciBzcWwgZGF0ZSBvbiBpZGVudGl0eSB0aW1lem9uZV9ob3VyIG5hdHVyYWwgd2hlbmV2ZXIgaW50ZXJ2YWwgd29yayBvcmRlciBjYXNjYWRlIGRpYWdub3N0aWNzIG5jaGFyIGhhdmluZyBsZWZ0IGNhbGwgZG8gaGFuZGxlciBsb2FkIHJlcGxhY2UgdHJ1bmNhdGUgc3RhcnQgbG9jayBzaG93IHByYWdtYSBleGlzdHMgbnVtYmVyIHRyaWdnZXIgaWYgYmVmb3JlIGFmdGVyIGVhY2ggcm93IixhZ2dyZWdhdGU6ImNvdW50IHN1bSBtaW4gbWF4IGF2ZyJ9LGM6W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOlthLkJFLHtiOiInJyJ9XSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlthLkJFLHtiOiciIid9XSxyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlthLkJFXX0sYS5DTk1dfSxhLkNCTENMTSx7Y046ImNvbW1lbnQiLGI6Ii0tIixlOiIkIn1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaW5pPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGk6IlteXFxzXSIsYzpbe2NOOiJjb21tZW50IixiOiI7IixlOiIkIn0se2NOOiJ0aXRsZSIsYjoiXlxcWyIsZToiXFxdIn0se2NOOiJzZXR0aW5nIixiOiJeW2EtejAtOVxcW1xcXV8tXStbIFxcdF0qPVsgXFx0XSoiLGU6IiQiLGM6W3tjTjoidmFsdWUiLGVXOnRydWUsazoib24gb2ZmIHRydWUgZmFsc2UgeWVzIG5vIixjOlthLlFTTSxhLk5NXSxyOjB9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucGVybD1mdW5jdGlvbihlKXt2YXIgYT0iZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjIG1hIHN5c3dyaXRlIHRyIHNlbmQgdW1hc2sgc3lzb3BlbiBzaG13cml0ZSB2ZWMgcXggdXRpbWUgbG9jYWwgb2N0IHNlbWN0bCBsb2NhbHRpbWUgcmVhZHBpcGUgZG8gcmV0dXJuIGZvcm1hdCByZWFkIHNwcmludGYgZGJtb3BlbiBwb3AgZ2V0cGdycCBub3QgZ2V0cHduYW0gcmV3aW5kZGlyIHFxZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50IHNodXRkb3duIGR1bXAgY2hvbXAgY29ubmVjdCBnZXRzb2NrbmFtZSBkaWUgc29ja2V0cGFpciBjbG9zZSBmbG9jayBleGlzdHMgaW5kZXggc2htZ2V0c3ViIGZvciBlbmRwd2VudCByZWRvIGxzdGF0IG1zZ2N0bCBzZXRwZ3JwIGFicyBleGl0IHNlbGVjdCBwcmludCByZWYgZ2V0aG9zdGJ5YWRkciB1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCBnZXRwZWVybmFtZSByZWN2IGxvZyBzZXRzb2Nrb3B0IGNvcyBsYXN0IHJldmVyc2UgZ2V0aG9zdGJ5bmFtZSBnZXRncm5hbSBzdHVkeSBmb3JtbGluZSBlbmRob3N0ZW50IHRpbWVzIGNob3AgbGVuZ3RoIGdldGhvc3RlbnQgZ2V0bmV0ZW50IHBhY2sgZ2V0cHJvdG9lbnQgZ2V0c2VydmJ5bmFtZSByYW5kIG1rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgZ2V0c29ja29wdCBnZXRwcmlvcml0eSByaW5kZXggd2FudGFycmF5IGhleCBzeXN0ZW0gZ2V0c2VydmJ5cG9ydCBlbmRzZXJ2ZW50IGludCBjaHIgdW50aWUgcm1kaXIgcHJvdG90eXBlIHRlbGwgbGlzdGVuIGZvcmsgc2htcmVhZCB1Y2ZpcnN0IHNldHByb3RvZW50IGVsc2Ugc3lzc2VlayBsaW5rIGdldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciBsY2ZpcnN0IHVudGlsIHdhcm4gd2hpbGUgdmFsdWVzIHNoaWZ0IHRlbGxkaXIgZ2V0cHd1aWQgbXkgZ2V0cHJvdG9ieW51bWJlciBkZWxldGUgYW5kIHNvcnQgdWMgZGVmaW5lZCBzcmFuZCBhY2NlcHQgcGFja2FnZSBzZWVrZGlyIGdldHByb3RvYnluYW1lIHNlbW9wIG91ciByZW5hbWUgc2VlayBpZiBxfDAgY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoIHRpZSBzaW4gbXNnZ2V0IG1hcCBzdGF0IGdldGxvZ2luIHVubGVzcyBlbHNpZiB0cnVuY2F0ZSBleGVjIGtleXMgZ2xvYiB0aWVkIGNsb3NlZGlyaW9jdGwgc29ja2V0IHJlYWRsaW5rIGV2YWwgeG9yIHJlYWRsaW5lIGJpbm1vZGUgc2V0c2VydmVudCBlb2Ygb3JkIGJpbmQgYWxhcm0gcGlwZSBhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbiI7dmFyIGQ9e2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToiXFx9IixrOmEscjoxMH07dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkIn07dmFyIGk9e2NOOiJ2YXJpYWJsZSIsYjoiW1xcJFxcJVxcQFxcKl0oXFxeXFx3XFxifCNcXHcrKFxcOlxcOlxcdyspKnxbXlxcc1xcd3tdfHtcXHcrfXxcXHcrKFxcOlxcOlxcdyopKikifTt2YXIgZj1bZS5CRSxkLGIsaV07dmFyIGg9e2I6Ii0+IixjOlt7YjplLklSfSx7YjoieyIsZToifSJ9XX07dmFyIGc9e2NOOiJjb21tZW50IixiOiJeKF9fRU5EX198X19EQVRBX18pIixlOiJcXG4kIixyOjV9O3ZhciBjPVtiLGksZS5IQ00sZyx7Y046ImNvbW1lbnQiLGI6Il5cXD1cXHciLGU6IlxcPWN1dCIsZVc6dHJ1ZX0saCx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFwoIixlOiJcXCkiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxceyIsZToiXFx9IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx8IixlOiJcXHwiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InF3XFxzK3EiLGU6InEiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltlLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOmYscjowfSx7Y046InN0cmluZyIsYjoiYCIsZToiYCIsYzpbZS5CRV19LHtjTjoic3RyaW5nIixiOiJ7XFx3K30iLHI6MH0se2NOOiJzdHJpbmciLGI6Ii0/XFx3K1xccypcXD1cXD4iLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2I6IigiK2UuUlNSKyJ8XFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxiKVxccyoiLGs6InNwbGl0IHJldHVybiBwcmludCByZXZlcnNlIGdyZXAiLHI6MCxjOltlLkhDTSxnLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2UuQkVdLHI6MH1dfSx7Y046InN1YiIsYldLOnRydWUsZToiKFxccypcXCguKj9cXCkpP1s7e10iLGs6InN1YiIscjo1fSx7Y046Im9wZXJhdG9yIixiOiItXFx3XFxiIixyOjB9XTtkLmM9YztoLmNbMV0uYz1jO3JldHVybntrOmEsYzpjfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMub2JqZWN0aXZlYz1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgc2l6ZW9mIHR5cGVkZWYgY29uc3Qgc3RydWN0IGZvciB1bmlvbiB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCBtdXRhYmxlIGlmIHB1YmxpYyBkbyByZXR1cm4gZ290byB2b2lkIGVudW0gZWxzZSBicmVhayBleHRlcm4gYXNtIGNhc2Ugc2hvcnQgZGVmYXVsdCBkb3VibGUgdGhyb3cgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSByZWFkb25seSBhc3NpZ24gcHJvcGVydHkgc2VsZiBzeW5jaHJvbml6ZWQgZW5kIHN5bnRoZXNpemUgaWQgb3B0aW9uYWwgcmVxdWlyZWQgbm9uYXRvbWljIHN1cGVyIHVuaWNoYXIgZmluYWxseSBkeW5hbWljIElCT3V0bGV0IElCQWN0aW9uIHNlbGVjdG9yIHN0cm9uZyB3ZWFrIHJlYWRvbmx5IixsaXRlcmFsOiJmYWxzZSB0cnVlIEZBTFNFIFRSVUUgbmlsIFlFUyBOTyBOVUxMIixidWlsdF9pbjoiTlNTdHJpbmcgTlNEaWN0aW9uYXJ5IENHUmVjdCBDR1BvaW50IFVJQnV0dG9uIFVJTGFiZWwgVUlUZXh0VmlldyBVSVdlYlZpZXcgTUtNYXBWaWV3IFVJU2VnbWVudGVkQ29udHJvbCBOU09iamVjdCBVSVRhYmxlVmlld0RlbGVnYXRlIFVJVGFibGVWaWV3RGF0YVNvdXJjZSBOU1RocmVhZCBVSUFjdGl2aXR5SW5kaWNhdG9yIFVJVGFiYmFyIFVJVG9vbEJhciBVSUJhckJ1dHRvbkl0ZW0gVUlJbWFnZVZpZXcgTlNBdXRvcmVsZWFzZVBvb2wgVUlUYWJsZVZpZXcgQk9PTCBOU0ludGVnZXIgQ0dGbG9hdCBOU0V4Y2VwdGlvbiBOU0xvZyBOU011dGFibGVTdHJpbmcgTlNNdXRhYmxlQXJyYXkgTlNNdXRhYmxlRGljdGlvbmFyeSBOU1VSTCBOU0luZGV4UGF0aCBDR1NpemUgVUlUYWJsZVZpZXdDZWxsIFVJVmlldyBVSVZpZXdDb250cm9sbGVyIFVJTmF2aWdhdGlvbkJhciBVSU5hdmlnYXRpb25Db250cm9sbGVyIFVJVGFiQmFyQ29udHJvbGxlciBVSVBvcG92ZXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXJEZWxlZ2F0ZSBVSUltYWdlIE5TTnVtYmVyIFVJU2VhcmNoQmFyIE5TRmV0Y2hlZFJlc3VsdHNDb250cm9sbGVyIE5TRmV0Y2hlZFJlc3VsdHNDaGFuZ2VUeXBlIFVJU2Nyb2xsVmlldyBVSVNjcm9sbFZpZXdEZWxlZ2F0ZSBVSUVkZ2VJbnNldHMgVUlDb2xvciBVSUZvbnQgVUlBcHBsaWNhdGlvbiBOU05vdEZvdW5kIE5TTm90aWZpY2F0aW9uQ2VudGVyIE5TTm90aWZpY2F0aW9uIFVJTG9jYWxOb3RpZmljYXRpb24gTlNCdW5kbGUgTlNGaWxlTWFuYWdlciBOU1RpbWVJbnRlcnZhbCBOU0RhdGUgTlNDYWxlbmRhciBOU1VzZXJEZWZhdWx0cyBVSVdpbmRvdyBOU1JhbmdlIE5TQXJyYXkgTlNFcnJvciBOU1VSTFJlcXVlc3QgTlNVUkxDb25uZWN0aW9uIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gTVBNb3ZpZVBsYXllckNvbnRyb2xsZXIgZGlzcGF0Y2hfb25jZV90IGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hfc3luYyBkaXNwYXRjaF9hc3luYyBkaXNwYXRjaF9vbmNlIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLGEuUVNNLHtjTjoic3RyaW5nIixiOiInIixlOiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIsYjoiI2ltcG9ydCIsZToiJCIsYzpbe2NOOiJ0aXRsZSIsYjonIicsZTonIid9LHtjTjoidGl0bGUiLGI6IjwiLGU6Ij4ifV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIn0se2NOOiJjbGFzcyIsYldLOnRydWUsZToiKHt8JCkiLGs6ImludGVyZmFjZSBjbGFzcyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiIsYzpbe2NOOiJpZCIsYjphLlVJUn1dfSx7Y046InZhcmlhYmxlIixiOiJcXC4iK2EuVUlSLHI6MH1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY29mZmVlc2NyaXB0PWZ1bmN0aW9uKGMpe3ZhciBiPXtrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSBuZXcgZG8gcmV0dXJuIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB0aHJvdyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBkZWJ1Z2dlciBzdXBlciB0aGVuIHVubGVzcyB1bnRpbCBsb29wIG9mIGJ5IHdoZW4gYW5kIG9yIGlzIGlzbnQgbm90IixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIHllcyBubyBvbiBvZmYiLHJlc2VydmVkOiJjYXNlIGRlZmF1bHQgZnVuY3Rpb24gdmFyIHZvaWQgd2l0aCBjb25zdCBsZXQgZW51bSBleHBvcnQgaW1wb3J0IG5hdGl2ZSBfX2hhc1Byb3AgX19leHRlbmRzIF9fc2xpY2UgX19iaW5kIF9faW5kZXhPZiIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGV4cG9ydHMgZ2xvYmFsIHdpbmRvdyBkb2N1bWVudCJ9O3ZhciBhPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiO3ZhciBmPXtjTjoidGl0bGUiLGI6YX07dmFyIGU9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsazpiLH07dmFyIGQ9W2MuQk5NLGMuaW5oZXJpdChjLkNOTSx7c3RhcnRzOntlOiIoXFxzKi8pPyIscjowfX0pLHtjTjoic3RyaW5nIixiOiInJyciLGU6IicnJyIsYzpbYy5CRV19LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltjLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciIiInLGU6JyIiIicsYzpbYy5CRSxlXX0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2MuQkUsZV0scjowfSx7Y046InJlZ2V4cCIsYjoiLy8vIixlOiIvLy8iLGM6W2MuSENNXX0se2NOOiJyZWdleHAiLGI6Ii8vW2dpbV0qIixyOjB9LHtjTjoicmVnZXhwIixiOiIvXFxTKFxcXFwufFteXFxuXSkqPy9bZ2ltXSooPz1cXHN8XFxXfCQpIn0se2NOOiJwcm9wZXJ0eSIsYjoiQCIrYX0se2I6ImAiLGU6ImAiLGVCOnRydWUsZUU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9XTtlLmM9ZDtyZXR1cm57azpiLGM6ZC5jb25jYXQoW3tjTjoiY29tbWVudCIsYjoiIyMjIixlOiIjIyMifSxjLkhDTSx7Y046ImZ1bmN0aW9uIixiOiIoIithKyJcXHMqPVxccyopPyhcXCguKlxcKSk/XFxzKlstPV0+IixlOiJbLT1dPiIsckI6dHJ1ZSxjOltmLHtjTjoicGFyYW1zIixiOiJcXCgiLHJCOnRydWUsYzpbe2I6L1woLyxlOi9cKS8sazpiLGM6WyJzZWxmIl0uY29uY2F0KGQpfV19XX0se2NOOiJjbGFzcyIsYldLOnRydWUsazoiY2xhc3MiLGU6IiQiLGk6Ils6XFxbXFxdXSIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMiLGVXOnRydWUsaToiOiIsYzpbZl19LGZdfSx7Y046ImF0dHJpYnV0ZSIsYjphKyI6IixlOiI6IixyQjp0cnVlLGVFOnRydWV9XSl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5uZ2lueD1mdW5jdGlvbihiKXt2YXIgYz1be2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkKyJ9LHtjTjoidmFyaWFibGUiLGI6IlxcJHsiLGU6In0ifSx7Y046InZhcmlhYmxlIixiOiJbXFwkXFxAXSIrYi5VSVJ9XTt2YXIgYT17ZVc6dHJ1ZSxsOiJbYS16L19dKyIsazp7YnVpbHRfaW46Im9uIG9mZiB5ZXMgbm8gdHJ1ZSBmYWxzZSBub25lIGJsb2NrZWQgZGVidWcgaW5mbyBub3RpY2Ugd2FybiBlcnJvciBjcml0IHNlbGVjdCBicmVhayBsYXN0IHBlcm1hbmVudCByZWRpcmVjdCBrcXVldWUgcnRzaWcgZXBvbGwgcG9sbCAvZGV2L3BvbGwifSxyOjAsaToiPT4iLGM6W2IuSENNLHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbYi5CRV0uY29uY2F0KGMpLHI6MH0se2NOOiJ1cmwiLGI6IihbYS16XSspOi8iLGU6IlxccyIsZVc6dHJ1ZSxlRTp0cnVlfSx7Y046InJlZ2V4cCIsYjoiXFxzXFxeIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6In5cXCo/XFxzKyIsZToiXFxzfHt8OyIsckU6dHJ1ZSxjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoicmVnZXhwIixiOiJcXCooXFwuW2EtelxcLV0rKSsiLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IihbYS16XFwtXStcXC4pK1xcKiIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046Im51bWJlciIsYjoiXFxiXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30oOlxcZHsxLDV9KT9cXGIifSx7Y046Im51bWJlciIsYjoiXFxiXFxkK1trS21NZ0dkc2hkd3ldKlxcYiIscjowfV0uY29uY2F0KGMpfTtyZXR1cm57YzpbYi5IQ00se2I6Yi5VSVIrIlxccyIsZToiO3x7IixyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6Yi5VSVIsc3RhcnRzOmF9XSxyOjB9XSxpOiJbXlxcc1xcfV0ifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuanNvbj1mdW5jdGlvbihhKXt2YXIgZT17bGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIn07dmFyIGQ9W2EuUVNNLGEuQ05NXTt2YXIgYz17Y046InZhbHVlIixlOiIsIixlVzp0cnVlLGVFOnRydWUsYzpkLGs6ZX07dmFyIGI9e2I6InsiLGU6In0iLGM6W3tjTjoiYXR0cmlidXRlIixiOidcXHMqIicsZTonIlxccyo6XFxzKicsZUI6dHJ1ZSxlRTp0cnVlLGM6W2EuQkVdLGk6IlxcbiIsc3RhcnRzOmN9XSxpOiJcXFMifTt2YXIgZj17YjoiXFxbIixlOiJcXF0iLGM6W2EuaW5oZXJpdChjLHtjTjpudWxsfSldLGk6IlxcUyJ9O2Quc3BsaWNlKGQubGVuZ3RoLDAsYixmKTtyZXR1cm57YzpkLGs6ZSxpOiJcXFMifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuYXBhY2hlPWZ1bmN0aW9uKGEpe3ZhciBiPXtjTjoibnVtYmVyIixiOiJbXFwkJV1cXGQrIn07cmV0dXJue2NJOnRydWUsYzpbYS5IQ00se2NOOiJ0YWciLGI6IjwvPyIsZToiPiJ9LHtjTjoia2V5d29yZCIsYjovXHcrLyxyOjAsazp7Y29tbW9uOiJvcmRlciBkZW55IGFsbG93IHNldGVudiByZXdyaXRlcnVsZSByZXdyaXRlZW5naW5lIHJld3JpdGVjb25kIGRvY3VtZW50cm9vdCBzZXRoYW5kbGVyIGVycm9yZG9jdW1lbnQgbG9hZG1vZHVsZSBvcHRpb25zIGhlYWRlciBsaXN0ZW4gc2VydmVycm9vdCBzZXJ2ZXJuYW1lIn0sc3RhcnRzOntlOi8kLyxyOjAsazp7bGl0ZXJhbDoib24gb2ZmIGFsbCJ9LGM6W3tjTjoic3FicmFja2V0IixiOiJcXHNcXFsiLGU6IlxcXSQifSx7Y046ImNicmFja2V0IixiOiJbXFwkJV1cXHsiLGU6IlxcfSIsYzpbInNlbGYiLGJdfSxiLGEuUVNNXX19XSxpOi9cUy99fShobGpzKTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImZhbHNlIGludCBmbG9hdCB3aGlsZSBwcml2YXRlIGNoYXIgY2F0Y2ggZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mIGR5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3Qgc3RydWN0IGZvciBzdGF0aWNfY2FzdHwxMCB1bmlvbiBuYW1lc3BhY2UgdW5zaWduZWQgbG9uZyB0aHJvdyB2b2xhdGlsZSBzdGF0aWMgcHJvdGVjdGVkIGJvb2wgdGVtcGxhdGUgbXV0YWJsZSBpZiBwdWJsaWMgZnJpZW5kIGRvIHJldHVybiBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgbmV3IGV4dGVybiB1c2luZyB0cnVlIGNsYXNzIGFzbSBjYXNlIHR5cGVpZCBzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgZGVsZXRlIGFsaWdub2YgY2hhcjE2X3QgY2hhcjMyX3QgY29uc3RleHByIGRlY2x0eXBlIG5vZXhjZXB0IG51bGxwdHIgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgX0Jvb2wgY29tcGxleCIsYnVpbHRfaW46InN0ZCBzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0cmluZ3N0cmVhbSBpc3RyaW5nc3RyZWFtIG9zdHJpbmdzdHJlYW0gYXV0b19wdHIgZGVxdWUgbGlzdCBxdWV1ZSBzdGFjayB2ZWN0b3IgbWFwIHNldCBiaXRzZXQgbXVsdGlzZXQgbXVsdGltYXAgdW5vcmRlcmVkX3NldCB1bm9yZGVyZWRfbWFwIHVub3JkZXJlZF9tdWx0aXNldCB1bm9yZGVyZWRfbXVsdGltYXAgYXJyYXkgc2hhcmVkX3B0ciJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJ1xcXFw/LiIsZToiJyIsaToiLiJ9LHtjTjoibnVtYmVyIixiOiJcXGIoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykodXxVfGx8THx1bHxVTHxmfEYpIn0sYS5DTk0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGM6W3tiOiI8IixlOiI+IixpOiJcXG4ifSxhLkNMQ01dfSx7Y046InN0bF9jb250YWluZXIiLGI6IlxcYihkZXF1ZXxsaXN0fHF1ZXVlfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsZToiPiIsazpiLHI6MTAsYzpbInNlbGYiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFrZWZpbGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6YS5CRX07cmV0dXJue2M6W2EuSENNLHtiOi9eXHcrXHMqXFcqPS8sckI6dHJ1ZSxyOjAsc3RhcnRzOntjTjoiY29uc3RhbnQiLGU6L1xzKlxXKj0vLGVFOnRydWUsc3RhcnRzOntlOi8kLyxyOjAsYzpbYl0sfX19LHtjTjoidGl0bGUiLGI6L15bXHddKzpccyokL30se2NOOiJwaG9ueSIsYjovXlwuUEhPTlk6LyxlOi8kLyxrOiIuUEhPTlkiLGw6L1tcLlx3XSsvfSx7YjovXlx0Ky8sZTovJC8sYzpbYS5RU00sYl19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmdvPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIiLGNvbnN0YW50OiJ0cnVlIGZhbHNlIGlvdGEgbmlsIix0eXBlbmFtZToiYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUiLGJ1aWx0X2luOiJhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIn0se2NOOiJudW1iZXIiLGI6IlteYS16QS1aXzAtOV0oXFwtfFxcKyk/XFxkKyhcXC5cXGQrfFxcL1xcZCspPygoZHxlfGZ8bHxzKShcXCt8XFwtKT9cXGQrKT8iLHI6MH0sYS5DTk1dfX0oaGxqcyk7UEsHCBVZbU72dQAA9nUAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHN0YXRpY1xsaWJcanF1ZXJ5LmZvcm0ubWluLmpzLyohCiAqIGpRdWVyeSBGb3JtIFBsdWdpbgogKiB2ZXJzaW9uOiAzLjQ2LjAtMjAxMy4xMS4yMQogKiBSZXF1aXJlcyBqUXVlcnkgdjEuNSBvciBsYXRlcgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTS4gQWxzdXAKICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9mb3JtLwogKiBQcm9qZWN0IHJlcG9zaXRvcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxzdXAvZm9ybQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcy4KICogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtI2NvcHlyaWdodC1hbmQtbGljZW5zZQogKi8KKGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoWyJqcXVlcnkiXSxhKX1lbHNle2EoKHR5cGVvZihqUXVlcnkpIT0idW5kZWZpbmVkIik/alF1ZXJ5OndpbmRvdy5aZXB0byl9fShmdW5jdGlvbihmKXt2YXIgYz17fTtjLmZpbGVhcGk9ZigiPGlucHV0IHR5cGU9J2ZpbGUnLz4iKS5nZXQoMCkuZmlsZXMhPT11bmRlZmluZWQ7Yy5mb3JtZGF0YT13aW5kb3cuRm9ybURhdGEhPT11bmRlZmluZWQ7dmFyIGU9ISFmLmZuLnByb3A7Zi5mbi5hdHRyMj1mdW5jdGlvbigpe2lmKCFlKXtyZXR1cm4gdGhpcy5hdHRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZz10aGlzLnByb3AuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKChnJiZnLmpxdWVyeSl8fHR5cGVvZiBnPT09InN0cmluZyIpe3JldHVybiBnfXJldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmLmZuLmFqYXhTdWJtaXQ9ZnVuY3Rpb24oail7aWYoIXRoaXMubGVuZ3RoKXtkKCJhamF4U3VibWl0OiBza2lwcGluZyBzdWJtaXQgcHJvY2VzcyAtIG5vIGVsZW1lbnQgc2VsZWN0ZWQiKTtyZXR1cm4gdGhpc312YXIgaSxDLG0sbz10aGlzO2lmKHR5cGVvZiBqPT0iZnVuY3Rpb24iKXtqPXtzdWNjZXNzOmp9fWVsc2V7aWYoaj09PXVuZGVmaW5lZCl7aj17fX19aT1qLnR5cGV8fHRoaXMuYXR0cjIoIm1ldGhvZCIpO0M9ai51cmx8fHRoaXMuYXR0cjIoImFjdGlvbiIpO209KHR5cGVvZiBDPT09InN0cmluZyIpP2YudHJpbShDKToiIjttPW18fHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIjtpZihtKXttPShtLm1hdGNoKC9eKFteI10rKS8pfHxbXSlbMV19aj1mLmV4dGVuZCh0cnVlLHt1cmw6bSxzdWNjZXNzOmYuYWpheFNldHRpbmdzLnN1Y2Nlc3MsdHlwZTppfHxmLmFqYXhTZXR0aW5ncy50eXBlLGlmcmFtZVNyYzovXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZnx8IiIpPyJqYXZhc2NyaXB0OmZhbHNlIjoiYWJvdXQ6YmxhbmsifSxqKTt2YXIgdT17fTt0aGlzLnRyaWdnZXIoImZvcm0tcHJlLXNlcmlhbGl6ZSIsW3RoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXByZS1zZXJpYWxpemUgdHJpZ2dlciIpO3JldHVybiB0aGlzfWlmKGouYmVmb3JlU2VyaWFsaXplJiZqLmJlZm9yZVNlcmlhbGl6ZSh0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTZXJpYWxpemUgY2FsbGJhY2siKTtyZXR1cm4gdGhpc312YXIgbj1qLnRyYWRpdGlvbmFsO2lmKG49PT11bmRlZmluZWQpe249Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWx9dmFyIHM9W107dmFyIEUsRj10aGlzLmZvcm1Ub0FycmF5KGouc2VtYW50aWMscyk7aWYoai5kYXRhKXtqLmV4dHJhRGF0YT1qLmRhdGE7RT1mLnBhcmFtKGouZGF0YSxuKX1pZihqLmJlZm9yZVN1Ym1pdCYmai5iZWZvcmVTdWJtaXQoRix0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTdWJtaXQgY2FsbGJhY2siKTtyZXR1cm4gdGhpc310aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LXZhbGlkYXRlIixbRix0aGlzLGosdV0pO2lmKHUudmV0byl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IHZldG9lZCB2aWEgZm9ybS1zdWJtaXQtdmFsaWRhdGUgdHJpZ2dlciIpO3JldHVybiB0aGlzfXZhciB5PWYucGFyYW0oRixuKTtpZihFKXt5PSh5Pyh5KyImIitFKTpFKX1pZihqLnR5cGUudG9VcHBlckNhc2UoKT09IkdFVCIpe2oudXJsKz0oai51cmwuaW5kZXhPZigiPyIpPj0wPyImIjoiPyIpK3k7ai5kYXRhPW51bGx9ZWxzZXtqLmRhdGE9eX12YXIgSD1bXTtpZihqLnJlc2V0Rm9ybSl7SC5wdXNoKGZ1bmN0aW9uKCl7by5yZXNldEZvcm0oKX0pfWlmKGouY2xlYXJGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLmNsZWFyRm9ybShqLmluY2x1ZGVIaWRkZW4pfSl9aWYoIWouZGF0YVR5cGUmJmoudGFyZ2V0KXt2YXIgbD1qLnN1Y2Nlc3N8fGZ1bmN0aW9uKCl7fTtILnB1c2goZnVuY3Rpb24ocSl7dmFyIGs9ai5yZXBsYWNlVGFyZ2V0PyJyZXBsYWNlV2l0aCI6Imh0bWwiO2Yoai50YXJnZXQpW2tdKHEpLmVhY2gobCxhcmd1bWVudHMpfSl9ZWxzZXtpZihqLnN1Y2Nlc3Mpe0gucHVzaChqLnN1Y2Nlc3MpfX1qLnN1Y2Nlc3M9ZnVuY3Rpb24oSyxxLEwpe3ZhciBKPWouY29udGV4dHx8dGhpcztmb3IodmFyIEk9MCxrPUgubGVuZ3RoO0k8aztJKyspe0hbSV0uYXBwbHkoSixbSyxxLEx8fG8sb10pfX07aWYoai5lcnJvcil7dmFyIHo9ai5lcnJvcjtqLmVycm9yPWZ1bmN0aW9uKEosayxxKXt2YXIgST1qLmNvbnRleHR8fHRoaXM7ei5hcHBseShJLFtKLGsscSxvXSl9fWlmKGouY29tcGxldGUpe3ZhciBoPWouY29tcGxldGU7ai5jb21wbGV0ZT1mdW5jdGlvbihJLGspe3ZhciBxPWouY29udGV4dHx8dGhpcztoLmFwcGx5KHEsW0ksayxvXSl9fXZhciBEPWYoImlucHV0W3R5cGU9ZmlsZV06ZW5hYmxlZCIsdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcykudmFsKCkhPT0iIn0pO3ZhciBwPUQubGVuZ3RoPjA7dmFyIEI9Im11bHRpcGFydC9mb3JtLWRhdGEiO3ZhciB4PShvLmF0dHIoImVuY3R5cGUiKT09Qnx8by5hdHRyKCJlbmNvZGluZyIpPT1CKTt2YXIgdz1jLmZpbGVhcGkmJmMuZm9ybWRhdGE7ZCgiZmlsZUFQSSA6Iit3KTt2YXIgcj0ocHx8eCkmJiF3O3ZhciB2O2lmKGouaWZyYW1lIT09ZmFsc2UmJihqLmlmcmFtZXx8cikpe2lmKGouY2xvc2VLZWVwQWxpdmUpe2YuZ2V0KGouY2xvc2VLZWVwQWxpdmUsZnVuY3Rpb24oKXt2PUcoRil9KX1lbHNle3Y9RyhGKX19ZWxzZXtpZigocHx8eCkmJncpe3Y9dChGKX1lbHNle3Y9Zi5hamF4KGopfX1vLnJlbW92ZURhdGEoImpxeGhyIikuZGF0YSgianF4aHIiLHYpO2Zvcih2YXIgQT0wO0E8cy5sZW5ndGg7QSsrKXtzW0FdPW51bGx9dGhpcy50cmlnZ2VyKCJmb3JtLXN1Ym1pdC1ub3RpZnkiLFt0aGlzLGpdKTtyZXR1cm4gdGhpcztmdW5jdGlvbiBnKEspe3ZhciBMPWYucGFyYW0oSyxqLnRyYWRpdGlvbmFsKS5zcGxpdCgiJiIpO3ZhciBxPUwubGVuZ3RoO3ZhciBrPVtdO3ZhciBKLEk7Zm9yKEo9MDtKPHE7SisrKXtMW0pdPUxbSl0ucmVwbGFjZSgvXCsvZywiICIpO0k9TFtKXS5zcGxpdCgiPSIpO2sucHVzaChbZGVjb2RlVVJJQ29tcG9uZW50KElbMF0pLGRlY29kZVVSSUNvbXBvbmVudChJWzFdKV0pfXJldHVybiBrfWZ1bmN0aW9uIHQocSl7dmFyIGs9bmV3IEZvcm1EYXRhKCk7Zm9yKHZhciBJPTA7STxxLmxlbmd0aDtJKyspe2suYXBwZW5kKHFbSV0ubmFtZSxxW0ldLnZhbHVlKX1pZihqLmV4dHJhRGF0YSl7dmFyIEw9ZyhqLmV4dHJhRGF0YSk7Zm9yKEk9MDtJPEwubGVuZ3RoO0krKyl7aWYoTFtJXSl7ay5hcHBlbmQoTFtJXVswXSxMW0ldWzFdKX19fWouZGF0YT1udWxsO3ZhciBLPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaix7Y29udGVudFR5cGU6ZmFsc2UscHJvY2Vzc0RhdGE6ZmFsc2UsY2FjaGU6ZmFsc2UsdHlwZTppfHwiUE9TVCJ9KTtpZihqLnVwbG9hZFByb2dyZXNzKXtLLnhocj1mdW5jdGlvbigpe3ZhciBNPWYuYWpheFNldHRpbmdzLnhocigpO2lmKE0udXBsb2FkKXtNLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oUSl7dmFyIFA9MDt2YXIgTj1RLmxvYWRlZHx8US5wb3NpdGlvbjt2YXIgTz1RLnRvdGFsO2lmKFEubGVuZ3RoQ29tcHV0YWJsZSl7UD1NYXRoLmNlaWwoTi9PKjEwMCl9ai51cGxvYWRQcm9ncmVzcyhRLE4sTyxQKX0sZmFsc2UpfXJldHVybiBNfX1LLmRhdGE9bnVsbDt2YXIgSj1LLmJlZm9yZVNlbmQ7Sy5iZWZvcmVTZW5kPWZ1bmN0aW9uKE4sTSl7aWYoai5mb3JtRGF0YSl7TS5kYXRhPWouZm9ybURhdGF9ZWxzZXtNLmRhdGE9a31pZihKKXtKLmNhbGwodGhpcyxOLE0pfX07cmV0dXJuIGYuYWpheChLKX1mdW5jdGlvbiBHKGFmKXt2YXIgTD1vWzBdLEssYWIsVixhZCxZLE4sUSxPLFAsWixhYyxUO3ZhciBhaT1mLkRlZmVycmVkKCk7YWkuYWJvcnQ9ZnVuY3Rpb24oYWope08uYWJvcnQoYWopfTtpZihhZil7Zm9yKGFiPTA7YWI8cy5sZW5ndGg7YWIrKyl7Sz1mKHNbYWJdKTtpZihlKXtLLnByb3AoImRpc2FibGVkIixmYWxzZSl9ZWxzZXtLLnJlbW92ZUF0dHIoImRpc2FibGVkIil9fX1WPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaik7Vi5jb250ZXh0PVYuY29udGV4dHx8VjtZPSJqcUZvcm1JTyIrKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtpZihWLmlmcmFtZVRhcmdldCl7Tj1mKFYuaWZyYW1lVGFyZ2V0KTtaPU4uYXR0cjIoIm5hbWUiKTtpZighWil7Ti5hdHRyMigibmFtZSIsWSl9ZWxzZXtZPVp9fWVsc2V7Tj1mKCc8aWZyYW1lIG5hbWU9IicrWSsnIiBzcmM9IicrVi5pZnJhbWVTcmMrJyIgLz4nKTtOLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6Ii0xMDAwcHgiLGxlZnQ6Ii0xMDAwcHgifSl9UT1OWzBdO089e2Fib3J0ZWQ6MCxyZXNwb25zZVRleHQ6bnVsbCxyZXNwb25zZVhNTDpudWxsLHN0YXR1czowLHN0YXR1c1RleHQ6Im4vYSIsZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbigpe30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbigpe30sYWJvcnQ6ZnVuY3Rpb24oYWope3ZhciBhaz0oYWo9PT0idGltZW91dCI/InRpbWVvdXQiOiJhYm9ydGVkIik7ZCgiYWJvcnRpbmcgdXBsb2FkLi4uICIrYWspO3RoaXMuYWJvcnRlZD0xO3RyeXtpZihRLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQpe1EuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgiU3RvcCIpfX1jYXRjaChhbCl7fU4uYXR0cigic3JjIixWLmlmcmFtZVNyYyk7Ty5lcnJvcj1haztpZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYWssYWopfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixha10pfWlmKFYuY29tcGxldGUpe1YuY29tcGxldGUuY2FsbChWLmNvbnRleHQsTyxhayl9fX07YWQ9Vi5nbG9iYWw7aWYoYWQmJjA9PT1mLmFjdGl2ZSsrKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTZW5kIixbTyxWXSl9aWYoVi5iZWZvcmVTZW5kJiZWLmJlZm9yZVNlbmQuY2FsbChWLmNvbnRleHQsTyxWKT09PWZhbHNlKXtpZihWLmdsb2JhbCl7Zi5hY3RpdmUtLX1haS5yZWplY3QoKTtyZXR1cm4gYWl9aWYoTy5hYm9ydGVkKXthaS5yZWplY3QoKTtyZXR1cm4gYWl9UD1MLmNsaztpZihQKXtaPVAubmFtZTtpZihaJiYhUC5kaXNhYmxlZCl7Vi5leHRyYURhdGE9Vi5leHRyYURhdGF8fHt9O1YuZXh0cmFEYXRhW1pdPVAudmFsdWU7aWYoUC50eXBlPT0iaW1hZ2UiKXtWLmV4dHJhRGF0YVtaKyIueCJdPUwuY2xrX3g7Vi5leHRyYURhdGFbWisiLnkiXT1MLmNsa195fX19dmFyIFU9MTt2YXIgUj0yO2Z1bmN0aW9uIFMoYWwpe3ZhciBhaz1udWxsO3RyeXtpZihhbC5jb250ZW50V2luZG93KXthaz1hbC5jb250ZW50V2luZG93LmRvY3VtZW50fX1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudFdpbmRvdyBkb2N1bWVudDogIithail9aWYoYWspe3JldHVybiBha310cnl7YWs9YWwuY29udGVudERvY3VtZW50P2FsLmNvbnRlbnREb2N1bWVudDphbC5kb2N1bWVudH1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudERvY3VtZW50OiAiK2FqKTthaz1hbC5kb2N1bWVudH1yZXR1cm4gYWt9dmFyIEo9ZigibWV0YVtuYW1lPWNzcmYtdG9rZW5dIikuYXR0cigiY29udGVudCIpO3ZhciBJPWYoIm1ldGFbbmFtZT1jc3JmLXBhcmFtXSIpLmF0dHIoImNvbnRlbnQiKTtpZihJJiZKKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbSV09Sn1mdW5jdGlvbiBhYSgpe3ZhciBhbD1vLmF0dHIyKCJ0YXJnZXQiKSxhaj1vLmF0dHIyKCJhY3Rpb24iKTtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixZKTtpZighaXx8L3Bvc3QvaS50ZXN0KGkpKXtMLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwiUE9TVCIpfWlmKGFqIT1WLnVybCl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsVi51cmwpfWlmKCFWLnNraXBFbmNvZGluZ092ZXJyaWRlJiYoIWl8fC9wb3N0L2kudGVzdChpKSkpe28uYXR0cih7ZW5jb2Rpbmc6Im11bHRpcGFydC9mb3JtLWRhdGEiLGVuY3R5cGU6Im11bHRpcGFydC9mb3JtLWRhdGEifSl9aWYoVi50aW1lb3V0KXtUPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthYz10cnVlO1goVSl9LFYudGltZW91dCl9ZnVuY3Rpb24gYW0oKXt0cnl7dmFyIGFxPVMoUSkucmVhZHlTdGF0ZTtkKCJzdGF0ZSA9ICIrYXEpO2lmKGFxJiZhcS50b0xvd2VyQ2FzZSgpPT0idW5pbml0aWFsaXplZCIpe3NldFRpbWVvdXQoYW0sNTApfX1jYXRjaChhcil7ZCgiU2VydmVyIGFib3J0OiAiLGFyLCIgKCIsYXIubmFtZSwiKSIpO1goUik7aWYoVCl7Y2xlYXJUaW1lb3V0KFQpfVQ9dW5kZWZpbmVkfX12YXIgYWs9W107dHJ5e2lmKFYuZXh0cmFEYXRhKXtmb3IodmFyIGFwIGluIFYuZXh0cmFEYXRhKXtpZihWLmV4dHJhRGF0YS5oYXNPd25Qcm9wZXJ0eShhcCkpe2lmKGYuaXNQbGFpbk9iamVjdChWLmV4dHJhRGF0YVthcF0pJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoIm5hbWUiKSYmVi5leHRyYURhdGFbYXBdLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrVi5leHRyYURhdGFbYXBdLm5hbWUrJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXS52YWx1ZSkuYXBwZW5kVG8oTClbMF0pfWVsc2V7YWsucHVzaChmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInK2FwKyciPicpLnZhbChWLmV4dHJhRGF0YVthcF0pLmFwcGVuZFRvKEwpWzBdKX19fX1pZighVi5pZnJhbWVUYXJnZXQpe04uYXBwZW5kVG8oImJvZHkiKX1pZihRLmF0dGFjaEV2ZW50KXtRLmF0dGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX1zZXRUaW1lb3V0KGFtLDE1KTt0cnl7TC5zdWJtaXQoKX1jYXRjaChhbil7dmFyIGFvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5zdWJtaXQ7YW8uYXBwbHkoTCl9fWZpbmFsbHl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsYWopO2lmKGFsKXtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixhbCl9ZWxzZXtvLnJlbW92ZUF0dHIoInRhcmdldCIpfWYoYWspLnJlbW92ZSgpfX1pZihWLmZvcmNlU3luYyl7YWEoKX1lbHNle3NldFRpbWVvdXQoYWEsMTApfXZhciBhZyxhaCxhZT01MCxNO2Z1bmN0aW9uIFgoYXApe2lmKE8uYWJvcnRlZHx8TSl7cmV0dXJufWFoPVMoUSk7aWYoIWFoKXtkKCJjYW5ub3QgYWNjZXNzIHJlc3BvbnNlIGRvY3VtZW50Iik7YXA9Un1pZihhcD09PVUmJk8pe08uYWJvcnQoInRpbWVvdXQiKTthaS5yZWplY3QoTywidGltZW91dCIpO3JldHVybn1lbHNle2lmKGFwPT1SJiZPKXtPLmFib3J0KCJzZXJ2ZXIgYWJvcnQiKTthaS5yZWplY3QoTywiZXJyb3IiLCJzZXJ2ZXIgYWJvcnQiKTtyZXR1cm59fWlmKCFhaHx8YWgubG9jYXRpb24uaHJlZj09Vi5pZnJhbWVTcmMpe2lmKCFhYyl7cmV0dXJufX1pZihRLmRldGFjaEV2ZW50KXtRLmRldGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX12YXIgYW49InN1Y2Nlc3MiLGFyO3RyeXtpZihhYyl7dGhyb3cidGltZW91dCJ9dmFyIGFtPVYuZGF0YVR5cGU9PSJ4bWwifHxhaC5YTUxEb2N1bWVudHx8Zi5pc1hNTERvYyhhaCk7ZCgiaXNYbWw9IithbSk7aWYoIWFtJiZ3aW5kb3cub3BlcmEmJihhaC5ib2R5PT09bnVsbHx8IWFoLmJvZHkuaW5uZXJIVE1MKSl7aWYoLS1hZSl7ZCgicmVxdWVpbmcgb25Mb2FkIGNhbGxiYWNrLCBET00gbm90IGF2YWlsYWJsZSIpO3NldFRpbWVvdXQoWCwyNTApO3JldHVybn19dmFyIGF0PWFoLmJvZHk/YWguYm9keTphaC5kb2N1bWVudEVsZW1lbnQ7Ty5yZXNwb25zZVRleHQ9YXQ/YXQuaW5uZXJIVE1MOm51bGw7Ty5yZXNwb25zZVhNTD1haC5YTUxEb2N1bWVudD9haC5YTUxEb2N1bWVudDphaDtpZihhbSl7Vi5kYXRhVHlwZT0ieG1sIn1PLmdldFJlc3BvbnNlSGVhZGVyPWZ1bmN0aW9uKGF3KXt2YXIgYXY9eyJjb250ZW50LXR5cGUiOlYuZGF0YVR5cGV9O3JldHVybiBhdlthdy50b0xvd2VyQ2FzZSgpXX07aWYoYXQpe08uc3RhdHVzPU51bWJlcihhdC5nZXRBdHRyaWJ1dGUoInN0YXR1cyIpKXx8Ty5zdGF0dXM7Ty5zdGF0dXNUZXh0PWF0LmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxPLnN0YXR1c1RleHR9dmFyIGFqPShWLmRhdGFUeXBlfHwiIikudG9Mb3dlckNhc2UoKTt2YXIgYXE9Lyhqc29ufHNjcmlwdHx0ZXh0KS8udGVzdChhaik7aWYoYXF8fFYudGV4dGFyZWEpe3ZhciBhbz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGV4dGFyZWEiKVswXTtpZihhbyl7Ty5yZXNwb25zZVRleHQ9YW8udmFsdWU7Ty5zdGF0dXM9TnVtYmVyKGFvLmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YW8uZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH1lbHNle2lmKGFxKXt2YXIgYWs9YWguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpWzBdO3ZhciBhdT1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKGFrKXtPLnJlc3BvbnNlVGV4dD1hay50ZXh0Q29udGVudD9hay50ZXh0Q29udGVudDphay5pbm5lclRleHR9ZWxzZXtpZihhdSl7Ty5yZXNwb25zZVRleHQ9YXUudGV4dENvbnRlbnQ/YXUudGV4dENvbnRlbnQ6YXUuaW5uZXJUZXh0fX19fX1lbHNle2lmKGFqPT0ieG1sIiYmIU8ucmVzcG9uc2VYTUwmJk8ucmVzcG9uc2VUZXh0KXtPLnJlc3BvbnNlWE1MPVcoTy5yZXNwb25zZVRleHQpfX10cnl7YWc9ayhPLGFqLFYpfWNhdGNoKGFsKXthbj0icGFyc2VyZXJyb3IiO08uZXJyb3I9YXI9KGFsfHxhbil9fWNhdGNoKGFsKXtkKCJlcnJvciBjYXVnaHQ6ICIsYWwpO2FuPSJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX1pZihPLmFib3J0ZWQpe2QoInVwbG9hZCBhYm9ydGVkIik7YW49bnVsbH1pZihPLnN0YXR1cyl7YW49KE8uc3RhdHVzPj0yMDAmJk8uc3RhdHVzPDMwMHx8Ty5zdGF0dXM9PT0zMDQpPyJzdWNjZXNzIjoiZXJyb3IifWlmKGFuPT09InN1Y2Nlc3MiKXtpZihWLnN1Y2Nlc3Mpe1Yuc3VjY2Vzcy5jYWxsKFYuY29udGV4dCxhZywic3VjY2VzcyIsTyl9YWkucmVzb2x2ZShPLnJlc3BvbnNlVGV4dCwic3VjY2VzcyIsTyk7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN1Y2Nlc3MiLFtPLFZdKX19ZWxzZXtpZihhbil7aWYoYXI9PT11bmRlZmluZWQpe2FyPU8uc3RhdHVzVGV4dH1pZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYW4sYXIpfWFpLnJlamVjdChPLCJlcnJvciIsYXIpO2lmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixhcl0pfX19aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbTyxWXSl9aWYoYWQmJiEtLWYuYWN0aXZlKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFuKX1NPXRydWU7aWYoVi50aW1lb3V0KXtjbGVhclRpbWVvdXQoVCl9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFWLmlmcmFtZVRhcmdldCl7Ti5yZW1vdmUoKX1lbHNle04uYXR0cigic3JjIixWLmlmcmFtZVNyYyl9Ty5yZXNwb25zZVhNTD1udWxsfSwxMDApfXZhciBXPWYucGFyc2VYTUx8fGZ1bmN0aW9uKGFqLGFrKXtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7YWs9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKTthay5hc3luYz0iZmFsc2UiO2FrLmxvYWRYTUwoYWopfWVsc2V7YWs9KG5ldyBET01QYXJzZXIoKSkucGFyc2VGcm9tU3RyaW5nKGFqLCJ0ZXh0L3htbCIpfXJldHVybihhayYmYWsuZG9jdW1lbnRFbGVtZW50JiZhay5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUhPSJwYXJzZXJlcnJvciIpP2FrOm51bGx9O3ZhciBxPWYucGFyc2VKU09OfHxmdW5jdGlvbihhail7cmV0dXJuIHdpbmRvd1siZXZhbCJdKCIoIithaisiKSIpfTt2YXIgaz1mdW5jdGlvbihhbyxhbSxhbCl7dmFyIGFrPWFvLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKXx8IiIsYWo9YW09PT0ieG1sInx8IWFtJiZhay5pbmRleE9mKCJ4bWwiKT49MCxhbj1haj9hby5yZXNwb25zZVhNTDphby5yZXNwb25zZVRleHQ7aWYoYWomJmFuLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZT09PSJwYXJzZXJlcnJvciIpe2lmKGYuZXJyb3Ipe2YuZXJyb3IoInBhcnNlcmVycm9yIil9fWlmKGFsJiZhbC5kYXRhRmlsdGVyKXthbj1hbC5kYXRhRmlsdGVyKGFuLGFtKX1pZih0eXBlb2YgYW49PT0ic3RyaW5nIil7aWYoYW09PT0ianNvbiJ8fCFhbSYmYWsuaW5kZXhPZigianNvbiIpPj0wKXthbj1xKGFuKX1lbHNle2lmKGFtPT09InNjcmlwdCJ8fCFhbSYmYWsuaW5kZXhPZigiamF2YXNjcmlwdCIpPj0wKXtmLmdsb2JhbEV2YWwoYW4pfX19cmV0dXJuIGFufTtyZXR1cm4gYWl9fTtmLmZuLmFqYXhGb3JtPWZ1bmN0aW9uKGcpe2c9Z3x8e307Zy5kZWxlZ2F0aW9uPWcuZGVsZWdhdGlvbiYmZi5pc0Z1bmN0aW9uKGYuZm4ub24pO2lmKCFnLmRlbGVnYXRpb24mJnRoaXMubGVuZ3RoPT09MCl7dmFyIGg9e3M6dGhpcy5zZWxlY3RvcixjOnRoaXMuY29udGV4dH07aWYoIWYuaXNSZWFkeSYmaC5zKXtkKCJET00gbm90IHJlYWR5LCBxdWV1aW5nIGFqYXhGb3JtIik7ZihmdW5jdGlvbigpe2YoaC5zLGguYykuYWpheEZvcm0oZyl9KTtyZXR1cm4gdGhpc31kKCJ0ZXJtaW5hdGluZzsgemVybyBlbGVtZW50cyBmb3VuZCBieSBzZWxlY3RvciIrKGYuaXNSZWFkeT8iIjoiIChET00gbm90IHJlYWR5KSIpKTtyZXR1cm4gdGhpc31pZihnLmRlbGVnYXRpb24pe2YoZG9jdW1lbnQpLm9mZigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGIpLm9mZigiY2xpY2suZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYSkub24oInN1Ym1pdC5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGIpLm9uKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGEpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIixnLGIpLmJpbmQoImNsaWNrLmZvcm0tcGx1Z2luIixnLGEpfTtmdW5jdGlvbiBiKGgpe3ZhciBnPWguZGF0YTtpZighaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aC5wcmV2ZW50RGVmYXVsdCgpO2YoaC50YXJnZXQpLmFqYXhTdWJtaXQoZyl9fWZ1bmN0aW9uIGEoayl7dmFyIGo9ay50YXJnZXQ7dmFyIGg9ZihqKTtpZighKGguaXMoIlt0eXBlPXN1Ym1pdF0sW3R5cGU9aW1hZ2VdIikpKXt2YXIgZz1oLmNsb3Nlc3QoIlt0eXBlPXN1Ym1pdF0iKTtpZihnLmxlbmd0aD09PTApe3JldHVybn1qPWdbMF19dmFyIGk9dGhpcztpLmNsaz1qO2lmKGoudHlwZT09ImltYWdlIil7aWYoay5vZmZzZXRYIT09dW5kZWZpbmVkKXtpLmNsa194PWsub2Zmc2V0WDtpLmNsa195PWsub2Zmc2V0WX1lbHNle2lmKHR5cGVvZiBmLmZuLm9mZnNldD09ImZ1bmN0aW9uIil7dmFyIGw9aC5vZmZzZXQoKTtpLmNsa194PWsucGFnZVgtbC5sZWZ0O2kuY2xrX3k9ay5wYWdlWS1sLnRvcH1lbHNle2kuY2xrX3g9ay5wYWdlWC1qLm9mZnNldExlZnQ7aS5jbGtfeT1rLnBhZ2VZLWoub2Zmc2V0VG9wfX19c2V0VGltZW91dChmdW5jdGlvbigpe2kuY2xrPWkuY2xrX3g9aS5jbGtfeT1udWxsfSwxMDApfWYuZm4uYWpheEZvcm1VbmJpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoInN1Ym1pdC5mb3JtLXBsdWdpbiBjbGljay5mb3JtLXBsdWdpbiIpfTtmLmZuLmZvcm1Ub0FycmF5PWZ1bmN0aW9uKHgsZyl7dmFyIHc9W107aWYodGhpcy5sZW5ndGg9PT0wKXtyZXR1cm4gd312YXIgbD10aGlzWzBdO3ZhciBwPXg/bC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOmwuZWxlbWVudHM7aWYoIXApe3JldHVybiB3fXZhciByLHEsbyx5LG0sdCxrO2ZvcihyPTAsdD1wLmxlbmd0aDtyPHQ7cisrKXttPXBbcl07bz1tLm5hbWU7aWYoIW98fG0uZGlzYWJsZWQpe2NvbnRpbnVlfWlmKHgmJmwuY2xrJiZtLnR5cGU9PSJpbWFnZSIpe2lmKGwuY2xrPT1tKXt3LnB1c2goe25hbWU6byx2YWx1ZTpmKG0pLnZhbCgpLHR5cGU6bS50eXBlfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfWNvbnRpbnVlfXk9Zi5maWVsZFZhbHVlKG0sdHJ1ZSk7aWYoeSYmeS5jb25zdHJ1Y3Rvcj09QXJyYXkpe2lmKGcpe2cucHVzaChtKX1mb3IocT0wLGs9eS5sZW5ndGg7cTxrO3ErKyl7dy5wdXNoKHtuYW1lOm8sdmFsdWU6eVtxXX0pfX1lbHNle2lmKGMuZmlsZWFwaSYmbS50eXBlPT0iZmlsZSIpe2lmKGcpe2cucHVzaChtKX12YXIgaD1tLmZpbGVzO2lmKGgubGVuZ3RoKXtmb3IocT0wO3E8aC5sZW5ndGg7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTpoW3FdLHR5cGU6bS50eXBlfSl9fWVsc2V7dy5wdXNoKHtuYW1lOm8sdmFsdWU6IiIsdHlwZTptLnR5cGV9KX19ZWxzZXtpZih5IT09bnVsbCYmdHlwZW9mIHkhPSJ1bmRlZmluZWQiKXtpZihnKXtnLnB1c2gobSl9dy5wdXNoKHtuYW1lOm8sdmFsdWU6eSx0eXBlOm0udHlwZSxyZXF1aXJlZDptLnJlcXVpcmVkfSl9fX19aWYoIXgmJmwuY2xrKXt2YXIgcz1mKGwuY2xrKSx1PXNbMF07bz11Lm5hbWU7aWYobyYmIXUuZGlzYWJsZWQmJnUudHlwZT09ImltYWdlIil7dy5wdXNoKHtuYW1lOm8sdmFsdWU6cy52YWwoKX0pO3cucHVzaCh7bmFtZTpvKyIueCIsdmFsdWU6bC5jbGtfeH0se25hbWU6bysiLnkiLHZhbHVlOmwuY2xrX3l9KX19cmV0dXJuIHd9O2YuZm4uZm9ybVNlcmlhbGl6ZT1mdW5jdGlvbihnKXtyZXR1cm4gZi5wYXJhbSh0aGlzLmZvcm1Ub0FycmF5KGcpKX07Zi5mbi5maWVsZFNlcmlhbGl6ZT1mdW5jdGlvbihoKXt2YXIgZz1bXTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5hbWU7aWYoIW0pe3JldHVybn12YXIgaz1mLmZpZWxkVmFsdWUodGhpcyxoKTtpZihrJiZrLmNvbnN0cnVjdG9yPT1BcnJheSl7Zm9yKHZhciBsPTAsaj1rLmxlbmd0aDtsPGo7bCsrKXtnLnB1c2goe25hbWU6bSx2YWx1ZTprW2xdfSl9fWVsc2V7aWYoayE9PW51bGwmJnR5cGVvZiBrIT0idW5kZWZpbmVkIil7Zy5wdXNoKHtuYW1lOnRoaXMubmFtZSx2YWx1ZTprfSl9fX0pO3JldHVybiBmLnBhcmFtKGcpfTtmLmZuLmZpZWxkVmFsdWU9ZnVuY3Rpb24obSl7Zm9yKHZhciBsPVtdLGo9MCxnPXRoaXMubGVuZ3RoO2o8ZztqKyspe3ZhciBrPXRoaXNbal07dmFyIGg9Zi5maWVsZFZhbHVlKGssbSk7aWYoaD09PW51bGx8fHR5cGVvZiBoPT0idW5kZWZpbmVkInx8KGguY29uc3RydWN0b3I9PUFycmF5JiYhaC5sZW5ndGgpKXtjb250aW51ZX1pZihoLmNvbnN0cnVjdG9yPT1BcnJheSl7Zi5tZXJnZShsLGgpfWVsc2V7bC5wdXNoKGgpfX1yZXR1cm4gbH07Zi5maWVsZFZhbHVlPWZ1bmN0aW9uKGcsbyl7dmFyIGo9Zy5uYW1lLHU9Zy50eXBlLHc9Zy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYobz09PXVuZGVmaW5lZCl7bz10cnVlfWlmKG8mJighanx8Zy5kaXNhYmxlZHx8dT09InJlc2V0Inx8dT09ImJ1dHRvbiJ8fCh1PT0iY2hlY2tib3gifHx1PT0icmFkaW8iKSYmIWcuY2hlY2tlZHx8KHU9PSJzdWJtaXQifHx1PT0iaW1hZ2UiKSYmZy5mb3JtJiZnLmZvcm0uY2xrIT1nfHx3PT0ic2VsZWN0IiYmZy5zZWxlY3RlZEluZGV4PT0tMSkpe3JldHVybiBudWxsfWlmKHc9PSJzZWxlY3QiKXt2YXIgcD1nLnNlbGVjdGVkSW5kZXg7aWYocDwwKXtyZXR1cm4gbnVsbH12YXIgcj1bXSxoPWcub3B0aW9uczt2YXIgbD0odT09InNlbGVjdC1vbmUiKTt2YXIgcT0obD9wKzE6aC5sZW5ndGgpO2Zvcih2YXIgaz0obD9wOjApO2s8cTtrKyspe3ZhciBtPWhba107aWYobS5zZWxlY3RlZCl7dmFyIHM9bS52YWx1ZTtpZighcyl7cz0obS5hdHRyaWJ1dGVzJiZtLmF0dHJpYnV0ZXMudmFsdWUmJiEobS5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZCkpP20udGV4dDptLnZhbHVlfWlmKGwpe3JldHVybiBzfXIucHVzaChzKX19cmV0dXJuIHJ9cmV0dXJuIGYoZykudmFsKCl9O2YuZm4uY2xlYXJGb3JtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKCJpbnB1dCxzZWxlY3QsdGV4dGFyZWEiLHRoaXMpLmNsZWFyRmllbGRzKGcpfSl9O2YuZm4uY2xlYXJGaWVsZHM9Zi5mbi5jbGVhcklucHV0cz1mdW5jdGlvbihnKXt2YXIgaD0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy50eXBlLGk9dGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoaC50ZXN0KGopfHxpPT0idGV4dGFyZWEiKXt0aGlzLnZhbHVlPSIifWVsc2V7aWYoaj09ImNoZWNrYm94Inx8aj09InJhZGlvIil7dGhpcy5jaGVja2VkPWZhbHNlfWVsc2V7aWYoaT09InNlbGVjdCIpe3RoaXMuc2VsZWN0ZWRJbmRleD0tMX1lbHNle2lmKGo9PSJmaWxlIil7aWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpe2YodGhpcykucmVwbGFjZVdpdGgoZih0aGlzKS5jbG9uZSh0cnVlKSl9ZWxzZXtmKHRoaXMpLnZhbCgiIil9fWVsc2V7aWYoZyl7aWYoKGc9PT10cnVlJiYvaGlkZGVuLy50ZXN0KGopKXx8KHR5cGVvZiBnPT0ic3RyaW5nIiYmZih0aGlzKS5pcyhnKSkpe3RoaXMudmFsdWU9IiJ9fX19fX19KX07Zi5mbi5yZXNldEZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMucmVzZXQ9PSJmdW5jdGlvbiJ8fCh0eXBlb2YgdGhpcy5yZXNldD09Im9iamVjdCImJiF0aGlzLnJlc2V0Lm5vZGVUeXBlKSl7dGhpcy5yZXNldCgpfX0pfTtmLmZuLmVuYWJsZT1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9IWd9KX07Zi5mbi5zZWxlY3RlZD1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXRoaXMudHlwZTtpZihoPT0iY2hlY2tib3gifHxoPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9Z31lbHNle2lmKHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ib3B0aW9uIil7dmFyIGk9Zih0aGlzKS5wYXJlbnQoInNlbGVjdCIpO2lmKGcmJmlbMF0mJmlbMF0udHlwZT09InNlbGVjdC1vbmUiKXtpLmZpbmQoIm9wdGlvbiIpLnNlbGVjdGVkKGZhbHNlKX10aGlzLnNlbGVjdGVkPWd9fX0pfTtmLmZuLmFqYXhTdWJtaXQuZGVidWc9ZmFsc2U7ZnVuY3Rpb24gZCgpe2lmKCFmLmZuLmFqYXhTdWJtaXQuZGVidWcpe3JldHVybn12YXIgZz0iW2pxdWVyeS5mb3JtXSAiK0FycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKTtpZih3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nKXt3aW5kb3cuY29uc29sZS5sb2coZyl9ZWxzZXtpZih3aW5kb3cub3BlcmEmJndpbmRvdy5vcGVyYS5wb3N0RXJyb3Ipe3dpbmRvdy5vcGVyYS5wb3N0RXJyb3IoZyl9fX19KSk7UEsHCHYQEAGjPgAAoz4AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xsaWJcbWFya2VkLm1pbi5qcyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9e30sdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5ydWxlcz1hLm5vcm1hbCx0aGlzLm9wdGlvbnMuZ2ZtJiYodGhpcy5ydWxlcz10aGlzLm9wdGlvbnMudGFibGVzP2EudGFibGVzOmEuZ2ZtKX1mdW5jdGlvbiB0KGUsdCl7aWYodGhpcy5vcHRpb25zPXR8fGguZGVmYXVsdHMsdGhpcy5saW5rcz1lLHRoaXMucnVsZXM9dS5ub3JtYWwsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBuLCF0aGlzLmxpbmtzKXRocm93IG5ldyBFcnJvcigiVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4iKTt0aGlzLm9wdGlvbnMuZ2ZtP3RoaXMucnVsZXM9dGhpcy5vcHRpb25zLmJyZWFrcz91LmJyZWFrczp1LmdmbTp0aGlzLm9wdGlvbnMucGVkYW50aWMmJih0aGlzLnJ1bGVzPXUucGVkYW50aWMpfWZ1bmN0aW9uIG4oKXt9ZnVuY3Rpb24gcihlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlLnJlcGxhY2UodD8vJi9nOi8mKD8hIz9cdys7KS9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCImIzM5OyIpfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZT1lLnNvdXJjZSx0PXR8fCIiLGZ1bmN0aW9uIG4ocixzKXtyZXR1cm4gcj8ocz1zLnNvdXJjZXx8cyxzPXMucmVwbGFjZSgvKF58W15cW10pXF4vZywiJDEiKSxlPWUucmVwbGFjZShyLHMpLG4pOm5ldyBSZWdFeHAoZSx0KX19ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdCxuLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt0PWFyZ3VtZW50c1tyXTtmb3IobiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX1yZXR1cm4gZX1mdW5jdGlvbiBoKHQsbixpKXtpZihpfHwiZnVuY3Rpb24iPT10eXBlb2Ygbil7aXx8KGk9bixuPW51bGwpLG49byh7fSxoLmRlZmF1bHRzLG58fHt9KTt2YXIgbCxhLHU9bi5oaWdobGlnaHQscD0wO3RyeXtsPWUubGV4KHQsbil9Y2F0Y2goYyl7cmV0dXJuIGkoYyl9YT1sLmxlbmd0aDt2YXIgZz1mdW5jdGlvbigpe3ZhciBlLHQ7dHJ5e2U9ci5wYXJzZShsLG4pfWNhdGNoKHMpe3Q9c31yZXR1cm4gbi5oaWdobGlnaHQ9dSx0P2kodCk6aShudWxsLGUpfTtpZighdXx8dS5sZW5ndGg8MylyZXR1cm4gZygpO2lmKGRlbGV0ZSBuLmhpZ2hsaWdodCwhYSlyZXR1cm4gZygpO2Zvcig7cDxsLmxlbmd0aDtwKyspIWZ1bmN0aW9uKGUpe3JldHVybiJjb2RlIiE9PWUudHlwZT8tLWF8fGcoKTp1KGUudGV4dCxlLmxhbmcsZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09bnx8bj09PWUudGV4dD8tLWF8fGcoKTooZS50ZXh0PW4sZS5lc2NhcGVkPSEwLC0tYXx8ZygpLHZvaWQgMCl9KX0obFtwXSl9ZWxzZSB0cnl7cmV0dXJuIG4mJihuPW8oe30saC5kZWZhdWx0cyxuKSksci5wYXJzZShlLmxleCh0LG4pLG4pfWNhdGNoKGMpe2lmKGMubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGpqL21hcmtlZC4iLChufHxoLmRlZmF1bHRzKS5zaWxlbnQpcmV0dXJuIjxwPkFuIGVycm9yIG9jY3VyZWQ6PC9wPjxwcmU+IitzKGMubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7dGhyb3cgY319dmFyIGE9e25ld2xpbmU6L15cbisvLGNvZGU6L14oIHs0fVteXG5dK1xuKikrLyxmZW5jZXM6bCxocjovXiggKlstKl9dKXszLH0gKig/OlxuK3wkKS8saGVhZGluZzovXiAqKCN7MSw2fSkgKihbXlxuXSs/KSAqIyogKig/OlxuK3wkKS8sbnB0YWJsZTpsLGxoZWFkaW5nOi9eKFteXG5dKylcbiAqKD18LSl7Mix9ICooPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oICo+W15cbl0rKFxuW15cbl0rKSpcbiopKy8sbGlzdDovXiggKikoYnVsbCkgW1xzXFNdKz8oPzpocnxcbnsyLH0oPyEgKSg/IVwxYnVsbCApXG4qfFxzKiQpLyxodG1sOi9eICooPzpjb21tZW50fGNsb3NlZHxjbG9zaW5nKSAqKD86XG57Mix9fFxzKiQpLyxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogK1siKF0oW15cbl0rKVsiKV0pPyAqKD86XG4rfCQpLyx0YWJsZTpsLHBhcmFncmFwaDovXigoPzpbXlxuXStcbj8oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8dGFnfGRlZikpKylcbiovLHRleHQ6L15bXlxuXSsvfTthLmJ1bGxldD0vKD86WyorLV18XGQrXC4pLyxhLml0ZW09L14oICopKGJ1bGwpIFteXG5dKig/OlxuKD8hXDFidWxsIClbXlxuXSopKi8sYS5pdGVtPWkoYS5pdGVtLCJnbSIpKC9idWxsL2csYS5idWxsZXQpKCksYS5saXN0PWkoYS5saXN0KSgvYnVsbC9nLGEuYnVsbGV0KSgiaHIiLC9cbisoPz0oPzogKlstKl9dKXszLH0gKig/OlxuK3wkKSkvKSgpLGEuX3RhZz0iKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6L3xAKVxcYiIsYS5odG1sPWkoYS5odG1sKSgiY29tbWVudCIsLzwhLS1bXHNcU10qPy0tPi8pKCJjbG9zZWQiLC88KHRhZylbXHNcU10rPzxcL1wxPi8pKCJjbG9zaW5nIiwvPHRhZyg/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPl0pKj8+LykoL3RhZy9nLGEuX3RhZykoKSxhLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiaHIiLGEuaHIpKCJoZWFkaW5nIixhLmhlYWRpbmcpKCJsaGVhZGluZyIsYS5saGVhZGluZykoImJsb2NrcXVvdGUiLGEuYmxvY2txdW90ZSkoInRhZyIsIjwiK2EuX3RhZykoImRlZiIsYS5kZWYpKCksYS5ub3JtYWw9byh7fSxhKSxhLmdmbT1vKHt9LGEubm9ybWFsLHtmZW5jZXM6L14gKihgezMsfXx+ezMsfSkgKihcUyspPyAqXG4oW1xzXFNdKz8pXHMqXDEgKig/OlxuK3wkKS8scGFyYWdyYXBoOi9eL30pLGEuZ2ZtLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiKD8hIiwiKD8hIithLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMiIpKyJ8IithLmxpc3Quc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMyIpKyJ8IikoKSxhLnRhYmxlcz1vKHt9LGEuZ2ZtLHtucHRhYmxlOi9eICooXFMuKlx8LiopXG4gKihbLTpdKyAqXHxbLXwgOl0qKVxuKCg/Oi4qXHwuKig/OlxufCQpKSopXG4qLyx0YWJsZTovXiAqXHwoLispXG4gKlx8KCAqWy06XStbLXwgOl0qKVxuKCg/OiAqXHwuKig/OlxufCQpKSopXG4qL30pLGUucnVsZXM9YSxlLmxleD1mdW5jdGlvbih0LG4pe3ZhciByPW5ldyBlKG4pO3JldHVybiByLmxleCh0KX0sZS5wcm90b3R5cGUubGV4PWZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9cdTAwYTAvZywiICIpLnJlcGxhY2UoL1x1MjQyNC9nLCJcbiIpLHRoaXMudG9rZW4oZSwhMCl9LGUucHJvdG90eXBlLnRva2VuPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIscyxpLGwsbyxoLHUscCxlPWUucmVwbGFjZSgvXiArJC9nbSwiIik7ZTspaWYoKHM9dGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoZSkpJiYoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksc1swXS5sZW5ndGg+MSYmdGhpcy50b2tlbnMucHVzaCh7dHlwZToic3BhY2UifSkpLHM9dGhpcy5ydWxlcy5jb2RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCkscz1zWzBdLnJlcGxhY2UoL14gezR9L2dtLCIiKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9zOnMucmVwbGFjZSgvXG4rJC8sIiIpfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuZmVuY2VzLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiY29kZSIsbGFuZzpzWzJdLHRleHQ6c1szXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDpzWzFdLmxlbmd0aCx0ZXh0OnNbMl19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMubnB0YWJsZS5leGVjKGUpKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLG89e3R5cGU6InRhYmxlIixoZWFkZXI6c1sxXS5yZXBsYWNlKC9eICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksYWxpZ246c1syXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGNlbGxzOnNbM10ucmVwbGFjZSgvXG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnNwbGl0KC8gKlx8ICovKTt0aGlzLnRva2Vucy5wdXNoKG8pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmxoZWFkaW5nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiaGVhZGluZyIsZGVwdGg6Ij0iPT09c1syXT8xOjIsdGV4dDpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaHIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJociJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9zdGFydCJ9KSxzPXNbMF0ucmVwbGFjZSgvXiAqPiA/L2dtLCIiKSx0aGlzLnRva2VuKHMsdCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9lbmQifSk7ZWxzZSBpZihzPXRoaXMucnVsZXMubGlzdC5leGVjKGUpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksaT1zWzJdLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3Rfc3RhcnQiLG9yZGVyZWQ6aS5sZW5ndGg+MX0pLHM9c1swXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pLG49ITEscD1zLmxlbmd0aCx1PTA7cD51O3UrKylvPXNbdV0saD1vLmxlbmd0aCxvPW8ucmVwbGFjZSgvXiAqKFsqKy1dfFxkK1wuKSArLywiIiksfm8uaW5kZXhPZigiXG4gIikmJihoLT1vLmxlbmd0aCxvPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9vLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpOm8ucmVwbGFjZShuZXcgUmVnRXhwKCJeIHsxLCIraCsifSIsImdtIiksIiIpKSx0aGlzLm9wdGlvbnMuc21hcnRMaXN0cyYmdSE9PXAtMSYmKGw9YS5idWxsZXQuZXhlYyhzW3UrMV0pWzBdLGk9PT1sfHxpLmxlbmd0aD4xJiZsLmxlbmd0aD4xfHwoZT1zLnNsaWNlKHUrMSkuam9pbigiXG4iKStlLHU9cC0xKSkscj1ufHwvXG5cbig/IVxzKiQpLy50ZXN0KG8pLHUhPT1wLTEmJihuPSJcbiI9PT1vLmNoYXJBdChvLmxlbmd0aC0xKSxyfHwocj1uKSksdGhpcy50b2tlbnMucHVzaCh7dHlwZTpyPyJsb29zZV9pdGVtX3N0YXJ0IjoibGlzdF9pdGVtX3N0YXJ0In0pLHRoaXMudG9rZW4obywhMSksdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9pdGVtX2VuZCJ9KTt0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2VuZCJ9KX1lbHNlIGlmKHM9dGhpcy5ydWxlcy5odG1sLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InBhcmFncmFwaCI6Imh0bWwiLHByZToicHJlIj09PXNbMV18fCJzY3JpcHQiPT09c1sxXXx8InN0eWxlIj09PXNbMV0sdGV4dDpzWzBdfSk7ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLmRlZi5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5saW5rc1tzWzFdLnRvTG93ZXJDYXNlKCldPXtocmVmOnNbMl0sdGl0bGU6c1szXX07ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC8oPzogKlx8ICopP1xuJC8sIiIpLnNwbGl0KCJcbiIpfSx1PTA7dTxvLmFsaWduLmxlbmd0aDt1Kyspby5hbGlnblt1XT0vXiAqLSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChvLmFsaWduW3VdKT8ibGVmdCI6bnVsbDtmb3IodT0wO3U8by5jZWxscy5sZW5ndGg7dSsrKW8uY2VsbHNbdV09by5jZWxsc1t1XS5yZXBsYWNlKC9eICpcfCAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJwYXJhZ3JhcGgiLHRleHQ6IlxuIj09PXNbMV0uY2hhckF0KHNbMV0ubGVuZ3RoLTEpP3NbMV0uc2xpY2UoMCwtMSk6c1sxXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJ0ZXh0Iix0ZXh0OnNbMF19KTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gdGhpcy50b2tlbnN9O3ZhciB1PXtlc2NhcGU6L15cXChbXFxgKnt9XFtcXSgpIytcLS4hXz5dKS8sYXV0b2xpbms6L148KFteID5dKyhAfDpcLylbXiA+XSspPi8sdXJsOmwsdGFnOi9ePCEtLVtcc1xTXSo/LS0+fF48XC8/XHcrKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vLGxpbms6L14hP1xbKGluc2lkZSlcXVwoaHJlZlwpLyxyZWZsaW5rOi9eIT9cWyhpbnNpZGUpXF1ccypcWyhbXlxdXSopXF0vLG5vbGluazovXiE/XFsoKD86XFtbXlxdXSpcXXxbXlxbXF1dKSopXF0vLHN0cm9uZzovXl9fKFtcc1xTXSs/KV9fKD8hXyl8XlwqXCooW1xzXFNdKz8pXCpcKig/IVwqKS8sZW06L15cYl8oKD86X198W1xzXFNdKSs/KV9cYnxeXCooKD86XCpcKnxbXHNcU10pKz8pXCooPyFcKikvLGNvZGU6L14oYCspXHMqKFtcc1xTXSo/W15gXSlccypcMSg/IWApLyxicjovXiB7Mix9XG4oPyFccyokKS8sZGVsOmwsdGV4dDovXltcc1xTXSs/KD89W1xcPCFcW18qYF18IHsyLH1cbnwkKS99O3UuX2luc2lkZT0vKD86XFtbXlxdXSpcXXxbXlxbXF1dfFxdKD89W15cW10qXF0pKSovLHUuX2hyZWY9L1xzKjw/KFtcc1xTXSo/KT4/KD86XHMrWyciXShbXHNcU10qPylbJyJdKT9ccyovLHUubGluaz1pKHUubGluaykoImluc2lkZSIsdS5faW5zaWRlKSgiaHJlZiIsdS5faHJlZikoKSx1LnJlZmxpbms9aSh1LnJlZmxpbmspKCJpbnNpZGUiLHUuX2luc2lkZSkoKSx1Lm5vcm1hbD1vKHt9LHUpLHUucGVkYW50aWM9byh7fSx1Lm5vcm1hbCx7c3Ryb25nOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW06L15fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pfF5cKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopL30pLHUuZ2ZtPW8oe30sdS5ub3JtYWwse2VzY2FwZTppKHUuZXNjYXBlKSgiXSkiLCJ+fF0pIikoKSx1cmw6L14oaHR0cHM/OlwvXC9bXlxzPF0rW148Liw6OyInKVxdXHNdKS8sZGVsOi9efn4oPz1cUykoW1xzXFNdKj9cUyl+fi8sdGV4dDppKHUudGV4dCkoIl18Iiwifl18IikoInwiLCJ8aHR0cHM/Oi8vfCIpKCl9KSx1LmJyZWFrcz1vKHt9LHUuZ2ZtLHticjppKHUuYnIpKCJ7Mix9IiwiKiIpKCksdGV4dDppKHUuZ2ZtLnRleHQpKCJ7Mix9IiwiKiIpKCl9KSx0LnJ1bGVzPXUsdC5vdXRwdXQ9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzPW5ldyB0KG4scik7cmV0dXJuIHMub3V0cHV0KGUpfSx0LnByb3RvdHlwZS5vdXRwdXQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpLGw9IiI7ZTspaWYoaT10aGlzLnJ1bGVzLmVzY2FwZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPWlbMV07ZWxzZSBpZihpPXRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSwiQCI9PT1pWzJdPyhuPSI6Ij09PWlbMV0uY2hhckF0KDYpP3RoaXMubWFuZ2xlKGlbMV0uc3Vic3RyaW5nKDcpKTp0aGlzLm1hbmdsZShpWzFdKSxyPXRoaXMubWFuZ2xlKCJtYWlsdG86Iikrbik6KG49cyhpWzFdKSxyPW4pLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudXJsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbj1zKGlbMV0pLHI9bixsKz10aGlzLnJlbmRlcmVyLmxpbmsocixudWxsLG4pO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRhZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3B0aW9ucy5zYW5pdGl6ZT9zKGlbMF0pOmlbMF07ZWxzZSBpZihpPXRoaXMucnVsZXMubGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3V0cHV0TGluayhpLHtocmVmOmlbMl0sdGl0bGU6aVszXX0pO2Vsc2UgaWYoKGk9dGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoZSkpfHwoaT10aGlzLnJ1bGVzLm5vbGluay5leGVjKGUpKSl7aWYoZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdD0oaVsyXXx8aVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSx0PXRoaXMubGlua3NbdC50b0xvd2VyQ2FzZSgpXSwhdHx8IXQuaHJlZil7bCs9aVswXS5jaGFyQXQoMCksZT1pWzBdLnN1YnN0cmluZygxKStlO2NvbnRpbnVlfWwrPXRoaXMub3V0cHV0TGluayhpLHQpfWVsc2UgaWYoaT10aGlzLnJ1bGVzLnN0cm9uZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuc3Ryb25nKHRoaXMub3V0cHV0KGlbMl18fGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5lbS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZW0odGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmNvZGVzcGFuKHMoaVsyXSwhMCkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmJyLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5icigpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmRlbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZGVsKHRoaXMub3V0cHV0KGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy50ZXh0LmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9cyh0aGlzLnNtYXJ0eXBhbnRzKGlbMF0pKTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gbH0sdC5wcm90b3R5cGUub3V0cHV0TGluaz1mdW5jdGlvbihlLHQpe3ZhciBuPXModC5ocmVmKSxyPXQudGl0bGU/cyh0LnRpdGxlKTpudWxsO3JldHVybiIhIiE9PWVbMF0uY2hhckF0KDApP3RoaXMucmVuZGVyZXIubGluayhuLHIsdGhpcy5vdXRwdXQoZVsxXSkpOnRoaXMucmVuZGVyZXIuaW1hZ2UobixyLHMoZVsxXSkpfSx0LnByb3RvdHlwZS5zbWFydHlwYW50cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2UucmVwbGFjZSgvLS0vZywi4oCUIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMeKAmCIpLnJlcGxhY2UoLycvZywi4oCZIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQx4oCcIikucmVwbGFjZSgvIi9nLCLigJ0iKS5yZXBsYWNlKC9cLnszfS9nLCLigKYiKTplfSx0LnByb3RvdHlwZS5tYW5nbGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiIscj1lLmxlbmd0aCxzPTA7cj5zO3MrKyl0PWUuY2hhckNvZGVBdChzKSxNYXRoLnJhbmRvbSgpPi41JiYodD0ieCIrdC50b1N0cmluZygxNikpLG4rPSImIyIrdCsiOyI7cmV0dXJuIG59LG4ucHJvdG90eXBlLmNvZGU9ZnVuY3Rpb24oZSx0LG4scil7aWYocj1yfHx7fSxyLmhpZ2hsaWdodCl7dmFyIGk9ci5oaWdobGlnaHQoZSx0KTtudWxsIT1pJiZpIT09ZSYmKG49ITAsZT1pKX1yZXR1cm4gdD8nPHByZT48Y29kZSBjbGFzcz0iJytyLmxhbmdQcmVmaXgrdCsnIj4nKyhuP2U6cyhlKSkrIlxuPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhuP2U6cyhlLCEwKSkrIlxuPC9jb2RlPjwvcHJlPiJ9LG4ucHJvdG90eXBlLmJsb2NrcXVvdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIjxibG9ja3F1b3RlPlxuIitlKyI8L2Jsb2NrcXVvdGU+XG4ifSxuLnByb3RvdHlwZS5odG1sPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxuLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aCIrdCsnIGlkPSInK3IuaGVhZGVyUHJlZml4K24udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlx3XSsvZywiLSIpKyciPicrZSsiPC9oIit0KyI+XG4ifSxuLnByb3RvdHlwZS5ocj1mdW5jdGlvbigpe3JldHVybiI8aHI+XG4ifSxuLnByb3RvdHlwZS5saXN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dD8ib2wiOiJ1bCI7cmV0dXJuIjwiK24rIj5cbiIrZSsiPC8iK24rIj5cbiJ9LG4ucHJvdG90eXBlLmxpc3RpdGVtPWZ1bmN0aW9uKGUpe3JldHVybiI8bGk+IitlKyI8L2xpPlxuIn0sbi5wcm90b3R5cGUucGFyYWdyYXBoPWZ1bmN0aW9uKGUpe3JldHVybiI8cD4iK2UrIjwvcD5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrZSsiPC90aGVhZD5cbiIrIjx0Ym9keT5cbiIrdCsiPC90Ym9keT5cbiIrIjwvdGFibGU+XG4ifSxuLnByb3RvdHlwZS50YWJsZXJvdz1mdW5jdGlvbihlKXtyZXR1cm4iPHRyPlxuIitlKyI8L3RyPlxuIn0sbi5wcm90b3R5cGUudGFibGVjZWxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5oZWFkZXI/InRoIjoidGQiLHI9dC5hbGlnbj8iPCIrbisnIHN0eWxlPSJ0ZXh0LWFsaWduOicrdC5hbGlnbisnIj4nOiI8IituKyI+IjtyZXR1cm4gcitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUuc3Ryb25nPWZ1bmN0aW9uKGUpe3JldHVybiI8c3Ryb25nPiIrZSsiPC9zdHJvbmc+In0sbi5wcm90b3R5cGUuZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxlbT4iK2UrIjwvZW0+In0sbi5wcm90b3R5cGUuY29kZXNwYW49ZnVuY3Rpb24oZSl7cmV0dXJuIjxjb2RlPiIrZSsiPC9jb2RlPiJ9LG4ucHJvdG90eXBlLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIjxicj4ifSxuLnByb3RvdHlwZS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIjxkZWw+IitlKyI8L2RlbD4ifSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0nPGEgaHJlZj0iJytlKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+IituKyI8L2E+In0sbi5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8aW1nIHNyYz0iJytlKyciIGFsdD0iJytuKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+In0sci5wYXJzZT1mdW5jdGlvbihlLHQsbil7dmFyIHM9bmV3IHIodCxuKTtyZXR1cm4gcy5wYXJzZShlKX0sci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7dGhpcy5pbmxpbmU9bmV3IHQoZS5saW5rcyx0aGlzLm9wdGlvbnMsdGhpcy5yZW5kZXJlciksdGhpcy50b2tlbnM9ZS5yZXZlcnNlKCk7Zm9yKHZhciBuPSIiO3RoaXMubmV4dCgpOyluKz10aGlzLnRvaygpO3JldHVybiBufSxyLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW49dGhpcy50b2tlbnMucG9wKCl9LHIucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdfHwwfSxyLnByb3RvdHlwZS5wYXJzZVRleHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy50b2tlbi50ZXh0OyJ0ZXh0Ij09PXRoaXMucGVlaygpLnR5cGU7KWUrPSJcbiIrdGhpcy5uZXh0KCkudGV4dDtyZXR1cm4gdGhpcy5pbmxpbmUub3V0cHV0KGUpfSxyLnByb3RvdHlwZS50b2s9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy50b2tlbi50eXBlKXtjYXNlInNwYWNlIjpyZXR1cm4iIjtjYXNlImhyIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpO2Nhc2UiaGVhZGluZyI6cmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSx0aGlzLnRva2VuLmRlcHRoLHRoaXMudG9rZW4udGV4dCx0aGlzLm9wdGlvbnMpO2Nhc2UiY29kZSI6cmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsdGhpcy50b2tlbi5sYW5nLHRoaXMudG9rZW4uZXNjYXBlZCx0aGlzLm9wdGlvbnMpO2Nhc2UidGFibGUiOnZhciBlLHQsbixyLHMsaT0iIixsPSIiO2ZvcihuPSIiLGU9MDtlPHRoaXMudG9rZW4uaGVhZGVyLmxlbmd0aDtlKyspcj17aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19LG4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLmhlYWRlcltlXSkse2hlYWRlcjohMCxhbGlnbjp0aGlzLnRva2VuLmFsaWduW2VdfSk7Zm9yKGkrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobiksZT0wO2U8dGhpcy50b2tlbi5jZWxscy5sZW5ndGg7ZSsrKXtmb3IodD10aGlzLnRva2VuLmNlbGxzW2VdLG49IiIscz0wO3M8dC5sZW5ndGg7cysrKW4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0W3NdKSx7aGVhZGVyOiExLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bc119KTtsKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KG4pfXJldHVybiB0aGlzLnJlbmRlcmVyLnRhYmxlKGksbCk7Y2FzZSJibG9ja3F1b3RlX3N0YXJ0Ijpmb3IodmFyIGw9IiI7ImJsb2NrcXVvdGVfZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShsKTtjYXNlImxpc3Rfc3RhcnQiOmZvcih2YXIgbD0iIixvPXRoaXMudG9rZW4ub3JkZXJlZDsibGlzdF9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0KGwsbyk7Y2FzZSJsaXN0X2l0ZW1fc3RhcnQiOmZvcih2YXIgbD0iIjsibGlzdF9pdGVtX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz0idGV4dCI9PT10aGlzLnRva2VuLnR5cGU/dGhpcy5wYXJzZVRleHQoKTp0aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGwpO2Nhc2UibG9vc2VfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJodG1sIjp2YXIgaD10aGlzLnRva2VuLnByZXx8dGhpcy5vcHRpb25zLnBlZGFudGljP3RoaXMudG9rZW4udGV4dDp0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KTtyZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKGgpO2Nhc2UicGFyYWdyYXBoIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCkpO2Nhc2UidGV4dCI6cmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VUZXh0KCkpfX0sbC5leGVjPWwsaC5vcHRpb25zPWguc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gbyhoLmRlZmF1bHRzLGUpLGh9LGguZGVmYXVsdHM9e2dmbTohMCx0YWJsZXM6ITAsYnJlYWtzOiExLHBlZGFudGljOiExLHNhbml0aXplOiExLHNtYXJ0TGlzdHM6ITEsc2lsZW50OiExLGhpZ2hsaWdodDpudWxsLGxhbmdQcmVmaXg6ImxhbmctIixzbWFydHlwYW50czohMSxoZWFkZXJQcmVmaXg6IiIscmVuZGVyZXI6bmV3IG59LGguUGFyc2VyPXIsaC5wYXJzZXI9ci5wYXJzZSxoLlJlbmRlcmVyPW4saC5MZXhlcj1lLGgubGV4ZXI9ZS5sZXgsaC5JbmxpbmVMZXhlcj10LGguaW5saW5lTGV4ZXI9dC5vdXRwdXQsaC5wYXJzZT1oLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1oOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTp0aGlzLm1hcmtlZD1ofS5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fCgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6Z2xvYmFsKX0oKSk7UEsHCEL6TGpTOQAAUzkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHN0YXRpY1xsaWJcdmFsaWRhdGUubWluLmpzLyoKICogdmFsaWRhdGUuanMgMS4zCiAqIENvcHlyaWdodCAoYykgMjAxMyBSaWNrIEhhcnJpc29uLCBodHRwOi8vcmlja2hhcnJpc29uLm1lCiAqIHZhbGlkYXRlLmpzIGlzIG9wZW4gc291cmNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqIFBvcnRpb25zIG9mIHZhbGlkYXRlLmpzIGFyZSBpbnNwaXJlZCBieSBDb2RlSWduaXRlci4KICogaHR0cDovL3JpY2toYXJyaXNvbi5naXRodWIuY29tL3ZhbGlkYXRlLmpzCiAqLwoKKGZ1bmN0aW9uKHEscixtKXt2YXIgcz17cmVxdWlyZWQ6IlRoZSAlcyBmaWVsZCBpcyByZXF1aXJlZC4iLG1hdGNoZXM6IlRoZSAlcyBmaWVsZCBkb2VzIG5vdCBtYXRjaCB0aGUgJXMgZmllbGQuIiwiZGVmYXVsdCI6IlRoZSAlcyBmaWVsZCBpcyBzdGlsbCBzZXQgdG8gZGVmYXVsdCwgcGxlYXNlIGNoYW5nZS4iLHZhbGlkX2VtYWlsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iLHZhbGlkX2VtYWlsczoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhbGwgdmFsaWQgZW1haWwgYWRkcmVzc2VzLiIsbWluX2xlbmd0aDoiVGhlICVzIGZpZWxkIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixtYXhfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBub3QgZXhjZWVkICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZXhhY3RfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBleGFjdGx5ICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZ3JlYXRlcl90aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAlcy4iLGxlc3NfdGhhbjoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBsZXNzIHRoYW4gJXMuIixhbHBoYToiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzLiIsYWxwaGFfbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycy4iLGFscGhhX2Rhc2g6IlRoZSAlcyBmaWVsZCBtdXN0IG9ubHkgY29udGFpbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBhbmQgZGFzaGVzLiIsbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5IG51bWJlcnMuIixpbnRlZ2VyOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFuIGludGVnZXIuIixkZWNpbWFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgZGVjaW1hbCBudW1iZXIuIixpc19uYXR1cmFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgcG9zaXRpdmUgbnVtYmVycy4iLGlzX25hdHVyYWxfbm9femVybzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4iLHZhbGlkX2lwOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgSVAuIix2YWxpZF9iYXNlNjQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBiYXNlNjQgc3RyaW5nLiIsdmFsaWRfY3JlZGl0X2NhcmQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIuIixpc19maWxlX3R5cGU6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSAlcyBmaWxlcy4iLHZhbGlkX3VybDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIFVSTC4ifSx0PWZ1bmN0aW9uKGEpe30sdT0vXiguKz8pXFsoLispXF0kLyxoPS9eWzAtOV0rJC8sdj0vXlwtP1swLTldKyQvLGs9L15cLT9bMC05XSpcLj9bMC05XSskLyxwPS9eW2EtekEtWjAtOS4hIyQlJmFtcDsnKitcLVwvPT9cXl9ge3x9flwtXStAW2EtekEtWjAtOVwtXSsoPzpcLlthLXpBLVowLTlcLV0rKSokLyx3PS9eW2Etel0rJC9pLHg9L15bYS16MC05XSskL2kseT0vXlthLXowLTlfXC1dKyQvaSx6PS9eWzAtOV0rJC9pLEE9L15bMS05XVswLTldKiQvaSxCPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KSQvaSxDPS9bXmEtekEtWjAtOVwvXCs9XS9pLEQ9L15bXGRcLVxzXSskLyxFPS9eKChodHRwfGh0dHBzKTpcL1wvKFx3Kzp7MCwxfVx3KkApPyhcUyspfCkoOlswLTldKyk/KFwvfFwvKFtcdyMhOi4/Kz0mJUAhXC1cL10pKT8kLyxlPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbGxiYWNrPWN8fHQ7dGhpcy5lcnJvcnM9W107dGhpcy5maWVsZHM9e307dGhpcy5mb3JtPXRoaXMuX2Zvcm1CeU5hbWVPck5vZGUoYSl8fHt9O3RoaXMubWVzc2FnZXM9e307dGhpcy5oYW5kbGVycz17fTthPTA7Zm9yKGM9Yi5sZW5ndGg7YTxjO2ErKyl7dmFyIGQ9YlthXTtpZigoZC5uYW1lfHxkLm5hbWVzKSYmZC5ydWxlcylpZihkLm5hbWVzKWZvcih2YXIgbD0wO2w8ZC5uYW1lcy5sZW5ndGg7bCsrKXRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lc1tsXSk7ZWxzZSB0aGlzLl9hZGRGaWVsZChkLGQubmFtZSl9dmFyIGc9dGhpcy5mb3JtLm9uc3VibWl0O3RoaXMuZm9ybS5vbnN1Ym1pdD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7dHJ5e3JldHVybiBhLl92YWxpZGF0ZUZvcm0oYikmJihnPT09bXx8ZygpKX1jYXRjaChjKXt9fX0odGhpcyl9LG49ZnVuY3Rpb24oYSxiKXt2YXIgYztpZigwPGEubGVuZ3RoJiYoInJhZGlvIj09PWFbMF0udHlwZXx8ImNoZWNrYm94Ij09PWFbMF0udHlwZSkpZm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoYVtjXS5jaGVja2VkKXJldHVybiBhW2NdW2JdfWVsc2UgcmV0dXJuIGFbYl19O2UucHJvdG90eXBlLnNldE1lc3NhZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLm1lc3NhZ2VzW2FdPWI7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLnJlZ2lzdGVyQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXthJiYoInN0cmluZyI9PT10eXBlb2YgYSYmYiYmImZ1bmN0aW9uIj09PXR5cGVvZiBiKSYmKHRoaXMuaGFuZGxlcnNbYV09Yik7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLl9mb3JtQnlOYW1lT3JOb2RlPWZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiPT09dHlwZW9mIGE/YTpyLmZvcm1zW2FdfTtlLnByb3RvdHlwZS5fYWRkRmllbGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmZpZWxkc1tiXT17bmFtZTpiLGRpc3BsYXk6YS5kaXNwbGF5fHxiLHJ1bGVzOmEucnVsZXMsaWQ6bnVsbCx0eXBlOm51bGwsdmFsdWU6bnVsbCxjaGVja2VkOm51bGx9fTtlLnByb3RvdHlwZS5fdmFsaWRhdGVGb3JtPWZ1bmN0aW9uKGEpe3RoaXMuZXJyb3JzPVtdO2Zvcih2YXIgYiBpbiB0aGlzLmZpZWxkcylpZih0aGlzLmZpZWxkcy5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGM9dGhpcy5maWVsZHNbYl18fHt9LGQ9dGhpcy5mb3JtW2MubmFtZV07ZCYmZCE9PW0mJihjLmlkPW4oZCwiaWQiKSxjLnR5cGU9MDxkLmxlbmd0aD9kWzBdLnR5cGU6ZC50eXBlLGMudmFsdWU9bihkLCJ2YWx1ZSIpLGMuY2hlY2tlZD1uKGQsImNoZWNrZWQiKSx0aGlzLl92YWxpZGF0ZUZpZWxkKGMpKX0iZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuY2FsbGJhY2smJnRoaXMuY2FsbGJhY2sodGhpcy5lcnJvcnMsYSk7MDx0aGlzLmVycm9ycy5sZW5ndGgmJihhJiZhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTpldmVudCYmKGV2ZW50LnJldHVyblZhbHVlPSExKSk7cmV0dXJuITB9O2UucHJvdG90eXBlLl92YWxpZGF0ZUZpZWxkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLnJ1bGVzLnNwbGl0KCJ8IiksYz1hLnJ1bGVzLmluZGV4T2YoInJlcXVpcmVkIiksZD0hYS52YWx1ZXx8IiI9PT1hLnZhbHVlfHxhLnZhbHVlPT09bSxsPTAsZz1iLmxlbmd0aDtsPGc7bCsrKXt2YXIgZj1iW2xdLGU9bnVsbCxoPSExLGs9dS5leGVjKGYpO2lmKC0xIT09Y3x8LTEhPT1mLmluZGV4T2YoIiFjYWxsYmFja18iKXx8IWQpaWYoayYmKGY9a1sxXSxlPWtbMl0pLCIhIj09PWYuY2hhckF0KDApJiYoZj1mLnN1YnN0cmluZygxLGYubGVuZ3RoKSksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLl9ob29rc1tmXT90aGlzLl9ob29rc1tmXS5hcHBseSh0aGlzLFthLGVdKXx8KGg9ITApOiJjYWxsYmFja18iPT09Zi5zdWJzdHJpbmcoMCw5KSYmKGY9Zi5zdWJzdHJpbmcoOSxmLmxlbmd0aCksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmhhbmRsZXJzW2ZdJiYhMT09PXRoaXMuaGFuZGxlcnNbZl0uYXBwbHkodGhpcyxbYS52YWx1ZSxlXSkmJihoPSEwKSksaCl7Yj10aGlzLm1lc3NhZ2VzW2ZdfHxzW2ZdO2M9IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aXRoIHRoZSAiK2EuZGlzcGxheSsiIGZpZWxkLiI7YiYmKGM9Yi5yZXBsYWNlKCIlcyIsYS5kaXNwbGF5KSxlJiYoYz1jLnJlcGxhY2UoIiVzIix0aGlzLmZpZWxkc1tlXT90aGlzLmZpZWxkc1tlXS5kaXNwbGF5OmUpKSk7dGhpcy5lcnJvcnMucHVzaCh7aWQ6YS5pZCxuYW1lOmEubmFtZSxtZXNzYWdlOmMscnVsZTpmfSk7YnJlYWt9fX07ZS5wcm90b3R5cGUuX2hvb2tzPXtyZXF1aXJlZDpmdW5jdGlvbihhKXt2YXIgYj1hLnZhbHVlO3JldHVybiJjaGVja2JveCI9PT1hLnR5cGV8fCJyYWRpbyI9PT1hLnR5cGU/ITA9PT1hLmNoZWNrZWQ6bnVsbCE9PWImJiIiIT09Yn0sImRlZmF1bHQiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUhPT1ifSxtYXRjaGVzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5mb3JtW2JdO3JldHVybiBjP2EudmFsdWU9PT1jLnZhbHVlOiExfSx2YWxpZF9lbWFpbDpmdW5jdGlvbihhKXtyZXR1cm4gcC50ZXN0KGEudmFsdWUpfSx2YWxpZF9lbWFpbHM6ZnVuY3Rpb24oYSl7YT1hLnZhbHVlLnNwbGl0KCIsIik7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspaWYoIXAudGVzdChhW2JdKSlyZXR1cm4hMTtyZXR1cm4hMH0sbWluX2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg+PXBhcnNlSW50KGIsMTApOiExfSxtYXhfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aDw9cGFyc2VJbnQoYiwxMCk6ITF9LGV4YWN0X2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg9PT1wYXJzZUludChiLDEwKTohMX0sZ3JlYXRlcl90aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPnBhcnNlRmxvYXQoYik6ITF9LGxlc3NfdGhhbjpmdW5jdGlvbihhLGIpe3JldHVybiBrLnRlc3QoYS52YWx1ZSk/cGFyc2VGbG9hdChhLnZhbHVlKTxwYXJzZUZsb2F0KGIpOiExfSxhbHBoYTpmdW5jdGlvbihhKXtyZXR1cm4gdy50ZXN0KGEudmFsdWUpfSxhbHBoYV9udW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiB4LnRlc3QoYS52YWx1ZSl9LGFscGhhX2Rhc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHkudGVzdChhLnZhbHVlKX0sbnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4gaC50ZXN0KGEudmFsdWUpfSxpbnRlZ2VyOmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoYS52YWx1ZSl9LGRlY2ltYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGsudGVzdChhLnZhbHVlKX0saXNfbmF0dXJhbDpmdW5jdGlvbihhKXtyZXR1cm4gei50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsX25vX3plcm86ZnVuY3Rpb24oYSl7cmV0dXJuIEEudGVzdChhLnZhbHVlKX0sdmFsaWRfaXA6ZnVuY3Rpb24oYSl7cmV0dXJuIEIudGVzdChhLnZhbHVlKX0sdmFsaWRfYmFzZTY0OmZ1bmN0aW9uKGEpe3JldHVybiBDLnRlc3QoYS52YWx1ZSl9LHZhbGlkX3VybDpmdW5jdGlvbihhKXtyZXR1cm4gRS50ZXN0KGEudmFsdWUpfSx2YWxpZF9jcmVkaXRfY2FyZDpmdW5jdGlvbihhKXtpZighRC50ZXN0KGEudmFsdWUpKXJldHVybiExO3ZhciBiPTAsYz0wLGQ9ITE7YT1hLnZhbHVlLnJlcGxhY2UoL1xEL2csIiIpO2Zvcih2YXIgZT1hLmxlbmd0aC0xOzA8PWU7ZS0tKWM9YS5jaGFyQXQoZSksYz1wYXJzZUludChjLDEwKSxkJiY5PChjKj0yKSYmKGMtPTkpLGIrPWMsZD0hZDtyZXR1cm4gMD09PWIlMTB9LGlzX2ZpbGVfdHlwZTpmdW5jdGlvbihhLGIpe2lmKCJmaWxlIiE9PWEudHlwZSlyZXR1cm4hMDt2YXIgYz1hLnZhbHVlLnN1YnN0cihhLnZhbHVlLmxhc3RJbmRleE9mKCIuIikrMSksZD1iLnNwbGl0KCIsIiksZT0hMSxnPTAsZj1kLmxlbmd0aDtmb3IoZztnPGY7ZysrKWM9PWRbZ10mJihlPSEwKTtyZXR1cm4gZX19O3EuRm9ybVZhbGlkYXRvcj1lfSkod2luZG93LGRvY3VtZW50KTsKUEsHCGaMH8QzGAAAMxgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAABQAAAHZpZXcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHZpZXdcYWRtaW4vUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcYWRtaW5cYXJ0aWNsZXMuaHRtbDx1bCBpZD0iYXJ0aWNsZS1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj4NCiAgICA8bGk+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5re75Yqg5paH56ugPC9hPg0KICAgIDwvbGk+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj48aDQgY2xhc3M9ImlubGluZS1ibG9jayB0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0YXJnZXQ9Il9ibGFuayI+e3suVGl0bGV9fTwvYT48L2g0Pnt7aWYgbmUgLlN0YXR1cyAicHVibGlzaCJ9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGJsIHN0YXR1cyI+6I2J56i/PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9InNsdWciPnt7LlNsdWd9fTwvc3Bhbj57e2lmIGVxIC5Jc0NvbW1lbnQgZmFsc2V9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iaXMtY29tbWVudCI+PGkgY2xhc3M9ImZhLWNvbW1lbnRzIGZhIj48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50Ij57ey5Db21tZW50TnVtfX0gLyB7ey5IaXRzfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJlZGl0IGxibCBsYmwtZ3JlZW4iIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPue8lui+kTwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBsYmwgbGJsLXJlZCIgaHJlZj0iL2FkbWluL2FydGljbGUve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+5Yig6ZmkPC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKCIuZGVsIikub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBpZihjb25maXJtKCLliKDpmaTmlofnq6DlsIbkvb/nm7jlhbPlhoXlrrnlpLHmlYjvvIHnoa7orqTvvJ8iKSl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAidXJsIjoiL2FkbWluL2FydGljbGUvIitpZCsiLyIsDQogICAgICAgICAgICAgICAgInR5cGUiOiJkZWxldGUiLA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suWIoOmZpCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0NCiAgICB9KTsNCjwvc2NyaXB0PlBLBwgfwp6+rgYAAK4GAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAB2aWV3XGFkbWluXGNtZC9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblxjbWRcYmFja3VwLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIGNsZWFyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSBsZWZ0Ij7lpIfku73mlbDmja48L2gxPg0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSBsZWZ0IiBpZD0iYmFja3VwLWJ0biI+5aSH5Lu9PC9idXR0b24+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJiYWNrdXAtbGlzdCI+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZVRpbWUgLk1vZFRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19IDxhIGNsYXNzPSJsaW5rIiBocmVmPSIvY21kL2JhY2t1cC9maWxlP2ZpbGU9e3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluayI+PC9pPjwvYT48L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJzaXplIj57e0ZpbGVTaXplIC5TaXplfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiIHJlbD0ie3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlLW8iPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHR5cGU6ICJwb3N0IiwNCiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLWxvYWRpbmciPuWkh+S7veS4rS4uPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5oaWRlKCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5iYWNrdXAtbG9hZGluZycpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNtZC1saXN0JykucHJlcGVuZCgnPGxpIGNsYXNzPSJiYWNrdXAtcmVzdWx0Ij7liJrliJrlpIfku73liLAgJyArIGpzb24uZmlsZSArICc8L2xpPicpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuc2hvdygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmRlbCcpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgdXJsOiAiL2NtZC9iYWNrdXAvP2ZpbGU9IiArICQodGhpcykuYXR0cigicmVsIiksDQogICAgICAgICAgICAgICAgdHlwZTogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGF0KS5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcIt5vmyUcHAABHBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxjbWRcbG9nLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSI+6ZSZ6K+v5pel5b+XPC9oMT4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9ImxvZy1saXN0Ij57e3JhbmdlIC5Mb2dzfX0NCiAgICA8bGkgY2xhc3M9ImxvZyByZWxhdGl2ZSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGlubGluZS1ibG9jayI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSBpbmxpbmUtYmxvY2siPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHByZSBjbGFzcz0idGV4dCI+e3suVGV4dH19PC9wcmU+DQogICAgICAgIDxhIGNsYXNzPSJyZW1vdmUgYWJzb2x1dGUiIGhyZWY9Ii9jbWQvbG9ncy8/ZmlsZT17ey5OYW1lfX0iPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlbW92ZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLnoa7orqTliKDpmaTorrDlvZUiKSkgew0KICAgICAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZToiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiR0aGlzLmF0dHIoImhyZWYiKSwNCiAgICAgICAgICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwjesGBYGQQAABkEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAAB2aWV3XGFkbWluXGNtZFxtZXNzYWdlLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSI+5raI5oGv6K6w5b2VPC9oMT4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9Im1lc3NhZ2UtbGlzdCI+e3tyYW5nZSAuTWVzc2FnZXN9fQ0KICAgIDxsaSBjbGFzcz0ibWVzc2FnZSByZWxhdGl2ZSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxkaXYgY2xhc3M9ImRhdGEiPnt7SHRtbCAuRGF0YX19PC9kaXY+DQogICAgPC9saT57e2VuZH19DQo8L3VsPlBLBwjJmMidRgEAAEYBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXGNvbW1lbnRzLmh0bWw8ZGl2IGlkPSJjb21tZW50LWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAiPnt7cmFuZ2UgLkNvbW1lbnRzfX0NCiAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSJ7ey5BdmF0YXJ9fSIgYWx0PSJ7ey5BdXRob3J9fSIvPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEiPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3J7e2lmIC5Jc0FkbWlufX0gYWRtaW57e2VuZH19IiBocmVmPSJ7ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LkF1dGhvcn19e3tpZiAuSXNBZG1pbn19Jm5ic3A7Jm5ic3A7KGFkbWluKXt7ZW5kfX08L2E+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtZW1haWwiPnt7LkVtYWlsfX08L3NwYW4+e3tpZiAuR2V0Q29udGVudH19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5Ae3suR2V0Q29udGVudC5UaXRsZX19PC9zcGFuPnt7ZWxzZX19DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtY250Ij5A5peg5pWIPC9zcGFuPnt7ZW5kfX17e2lmIG5lIC5TdGF0dXMgImFwcHJvdmVkIn19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtY2hlY2siIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWuoeaguCI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45LitPC9hPnt7ZW5kfX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Zue5aSNIj48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtZGVsIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaQiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pnt7ZW5kfX0NCiAgICA8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGFjdGlvbj0iL2FkbWluL2NvbW1lbnRzLyIgY2xhc3M9ImZvcm0gY2xlYXIgbGVmdCIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQgbGVmdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiIGlkPSJjb21tZW50LXN1Ym1pdCI+5Zue5aSN6K+E6K66PC9idXR0b24+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJjb21tZW50LWNsb3NlIj7lhbPpl63lm57lpI08L2J1dHRvbj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIGlkPSJjb21tZW50LXBhcmVudCIgbmFtZT0icGlkIi8+DQogICAgPC9mb3JtPg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6K+E6K665bCG5L2/55u45YWz5YaF5a655peg5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5Yig6Zmk5aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtY2hlY2snKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5a6h5qC45ZCO5q2k5L2c6ICF5bCG5LiN5YaN5qCH6K6w5a6h5qC4ISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICB0eXBlOiAicHV0IiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FkbWluL2NvbW1lbnRzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjY29tbWVudC0nICsgaWQpLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlrqHmoLjlpLHotKUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuYy1yZXBseScpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC0nK2lkKS5hcHBlbmQoJCgnI2NvbW1lbnQtZm9ybScpLmRldGFjaCgpLnNob3coKSk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suWbnuWkjSIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9jb21tZW50cy8iOw0KICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgYWxlcnQoIuWbnuWkjeWksei0pSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtY2xvc2UnKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKCcjY29tbWVudC1mb3JtJykuaGlkZSgpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIQJgI7+0PAADtDwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAdmlld1xhZG1pblxlZGl0X2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiIHZhbHVlPSJ7ey5BcnRpY2xlLlRpdGxlfX0iLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij57e0h0bWwgLkFydGljbGUuVGV4dH19PC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiIHZhbHVlPSJ7ey5BcnRpY2xlLlNsdWd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuagh+etvjwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0idGFnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWciIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTmoIfnrb4iIHZhbHVlPSJ7ey5BcnRpY2xlLlRhZ1N0cmluZ319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuQXJ0aWNsZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLkFydGljbGUuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLkFydGljbGUuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCEuc6fFtDQAAbQ0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcYWRtaW5cZWRpdF9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIiB2YWx1ZT0ie3suUGFnZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5QYWdlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suUGFnZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCJ7e2lmIGVxIC5QYWdlLlN0YXR1cyAicHVibGlzaCJ9fSBzZWxlY3RlZHt7ZW5kfX0+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQie3tpZiBlcSAuUGFnZS5TdGF0dXMgImRyYWZ0In19IHNlbGVjdGVke3tlbmR9fT7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0NvbW1lbnQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzTGlua2VkIGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuW3suS/neWtmO+8jOWOu+afpeeci++8n+i/mOaYr+e7p+e7ree8lui+kSIpKSB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9wYWdlcy8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcItngyMuMNAADjDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxmaWxlcy5odG1sPHVsIGlkPSJmaWxlcy1saXN0IiBjbGFzcz0iYWRtaW4gY29udGFpbmVyOTYwIHBhZ2VyIj4NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlcy1idG4tbGkiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgIDwvbGk+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaSBjbGFzcz0iZmlsZSIgaWQ9ImZpbGUte3suSWR9fSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ1cGxvYWQtdGltZSI+e3tEYXRlSW50NjQgLlVwbG9hZFRpbWUgIk1NLkREIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iL3t7LlVybH19IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Ii97ey5Vcmx9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmstc3F1YXJlIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIGZhZGUtb3V0IiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLliKDpmaTpmYTku7YiPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQogICAge3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9maWxlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIGluaXRVcGxvYWQoIiNhdHRhY2gtc2hvdyIpOw0KICAgICAgICAkKCIuZGVsIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWIoOmZpOmZhOS7tuebuOWFs+mTvuaOpeS8muWkseaViCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgInVybCI6ICIvYWRtaW4vZmlsZXMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgInN1Y2Nlc3MiOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNmaWxlLScraWQpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIYsWb+uwGAADsBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAdmlld1xhZG1pblxob21lLmh0bWw8ZGl2IGNsYXNzPSJhZG1pbiBjb250YWluZXIgY2xlYXIiIGlkPSJkYXNoYm9hcmQiPg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS01IGxlZnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ3ZWxjb21lIj4NCiAgICAgICAgICAgIDxoND5XZWxjb21lPC9oND4NCiAgICAgICAgICAgIDxwPuasoui/juWbnuadpe+8jCA8c3Ryb25nPnt7LlVzZXIuTmlja319PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0icXVpY2stbGluayI+DQogICAgICAgICAgICA8aDQ+5b+r6YCf6ZO+5o6lPC9oND4NCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2FydGljbGUvd3JpdGUvIj7mkrDlhpnmlofnq6A8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL2NvbW1lbnRzLyI+5p+l55yL5ZKM5a6h5qC46K+E6K66PC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyI+5L+u5pS56YWN572uPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wcm9maWxlLyI+5pu05paw5Liq5Lq66LWE5paZPC9hPjwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtMiBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHkiPg0KICAgICAgICAgICAgPGg0PuacgOaWsOa0u+WKqDwvaDQ+e3tyYW5nZSAuTWVzc2FnZXN9fQ0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXNnIHJlbGF0aXZlIHt7LlR5cGV9fSI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhIj57e0h0bWwgLkRhdGF9fTwvZGl2Pg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJyZWFkIGFic29sdXRlIiBocmVmPSIvYWRtaW4vbWVzc2FnZS9yZWFkP2lkPXt7LklkfX0iIHJlbD0ie3suSWR9fSI+PGkgY2xhc3M9ImZhIGZhLWNoZWNrIj48L2k+PC9hPg0KICAgICAgICAgICAgPC9kaXY+e3tlbmR9fXt7aWYgbHQgKGxlbiAuTWVzc2FnZXMpIDF9fQ0KICAgICAgICAgICAgPHA+5rKh5pyJ5paw55qE5rS75Yqo5L+h5oGvPC9wPg0KICAgICAgICAgICAge3tlbmR9fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtNCByaWdodCI+DQogICAgICAgIDxkaXYgY2xhc3M9InN0YXRzIj4NCiAgICAgICAgICAgIDxoND7mlbDmja7nu5/orqE8L2g0Pg0KICAgICAgICAgICAgPHA+5bey57uP5Y+R5biD5paH56ugIDxzcGFuIGNsYXNzPSJsYmwgbGJsLXJlZCI+e3suU3RhdGlzLkFydGljbGVzfX08L3NwYW4+IOevh++8jA0KICAgICAgICAgICAg6aG16Z2iIDxzcGFuIGNsYXNzPSJsYmwgbGJsLXJlZCI+e3suU3RhdGlzLlBhZ2VzfX08L3NwYW4+IOS4qu+8jCA8YnIvPg0KICAgICAgICAgICAg5pS25Yiw6K+E6K66IDxzcGFuIGNsYXNzPSJsYmwgbGJsLWJsdWUiPnt7LlN0YXRpcy5Db21tZW50c319PC9zcGFuPiDmrKHvvIwNCiAgICAgICAgICAgIOS4iuS8oCA8c3BhbiBjbGFzcz0ibGJsIGxibC1ncmVlbiI+e3suU3RhdGlzLkZpbGVzfX08L3NwYW4+IOS4qumZhOS7tjwvcD4NCiAgICAgICAgICAgIDxwPuW9k+WJjeeoi+W6j+eJiOacrO+8mjxzdHJvbmc+e3suU3RhdGlzLlZlcnNpb259fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im9mZmljZSI+DQogICAgICAgICAgICA8aDQ+5a6Y5pa55raI5oGvPC9oND4NCiAgICAgICAgICAgIDxwPui/mOayoeaciea2iOaBrzwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQo8L2Rpdj4NCjxzY3JpcHQ+DQogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsNCiAgICAgICAkKCIucmVhZCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgJC5wb3N0KCR0aGlzLmF0dHIoImhyZWYiKSxmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgJHRoaXMucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgfSk7DQogICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICB9KTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwj0lNzmIAkAACAJAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXGxvZ2luLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+55m75b2VIC0gRnhoLkdvPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+DQogICAgICAgICNsb2dpbi1mb3Jtew0KICAgICAgICAgICAgd2lkdGg6IDI4MHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG87DQogICAgICAgIH0NCiAgICAgICAgI2xvZ2luLWZvcm0gaDF7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4Ow0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGZvcm0gaWQ9ImxvZ2luLWZvcm0iIGNsYXNzPSJmb3JtIGZvcm0tdmVydGljYWwiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0IiBuYW1lPSJsb2dpbi1mb3JtIj4NCiAgICA8aDE+55m75b2VIC0gRnhoLkdvPC9oMT4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nlKjmiLflkI08L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InVzZXIiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idXNlciIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0icGFzc3dvcmQiPueUqOaIt+WvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IiBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InBhc3N3b3JkIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJwYXNzd29yZC1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPueZuyDlvZU8L2J1dHRvbj4NCiAgICA8c3BhbiBjbGFzcz0idGlwIj7pu5jorqTorrDkvY/nmbvpmYYz5aSpPC9zcGFuPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jZG4uc3RhdGljZmlsZS5vcmcvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS5mb3JtLzMuNDYvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi92YWxpZGF0ZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJsb2dpbi1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJ1c2VyIiwicnVsZXMiOiJhbHBoYV9udW1lcmljfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6InBhc3N3b3JkIiwicnVsZXMiOiJyZXF1aXJlZHxtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjbG9naW4tZm9ybScpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIueZu+W9lemUmeivr++8jOivt+ajgOafpeeUqOaIt+aIluWvhueggSIpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwjW4HhikAgAAJAIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXHBhZ2VzLmh0bWw8dWwgaWQ9ImFydGljbGUtbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+DQogICAgPGxpPg0KICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIiBocmVmPSIvYWRtaW4vcGFnZS93cml0ZS8iPua3u+WKoOmhtemdojwvYT4NCiAgICA8L2xpPnt7cmFuZ2UgLlBhZ2VzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+PGg0IGNsYXNzPSJpbmxpbmUtYmxvY2sgdGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LlRpdGxlfX08L2E+PC9oND57e2lmIG5lIC5TdGF0dXMgInB1Ymxpc2gifX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxibCBzdGF0dXMiPuiNieeovzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJzbHVnIj57ey5TbHVnfX08L3NwYW4+e3tpZiBlcSAuSXNDb21tZW50IGZhbHNlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImlzLWNvbW1lbnQiPjxpIGNsYXNzPSJmYS1jb21tZW50cyBmYSI+PC9pPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudCI+e3suQ29tbWVudE51bX19IC8ge3suSGl0c319PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vcGFnZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk6aG16Z2i5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9wYWdlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIqCtGRpwGAACcBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAdmlld1xhZG1pblxwYXNzd29yZC5odG1sPGZvcm0gaWQ9InBhc3N3b3JkIiBjbGFzcz0iZm9ybSBmb3JtLWFsaWduIGNsZWFyIiBhY3Rpb249IiMiIG5hbWU9InBhc3N3b3JkLWZvcm0iIG1ldGhvZD0icG9zdCI+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ib2xkIj7ml6flr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im9sZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im9sZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPumqjOivgeaXp+WvhueggTwvc3Bhbj48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ib2xkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im5ldyI+5paw5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJuZXciIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJuZXciIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuZXctaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0iY29uZmlybSI+56Gu6K6k5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImNvbmZpcm0taW52YWxpZCI+56Gu6K6k5a+G56CB5LiN5Yy56YWNPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInBhc3N3b3JkLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6Im9sZCIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmV3IiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJjb25maXJtIiwicnVsZXMiOiJyZXF1aXJlZHxtYXRjaGVzW25ld10ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwYXNzd29yZCcpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIbnEngU8HAABPBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAdmlld1xhZG1pblxwbHVnaW4uaHRtbDx1bCBpZD0icGx1Z2luLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPnt7cmFuZ2UgLlBsdWdpbnN9fQ0KICAgIDxsaSBjbGFzcz0iY2xlYXIiPnt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQgbGJsIGFjdGl2ZSBsYmwtZ3JlZW4iPiZuYnNwOzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGxlZnQiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb24gbGVmdCI+e3suVmVyc2lvbn19PC9zcGFuPnt7aWYgLkhhc1NldHRpbmd9fQ0KICAgICAgICA8YSBjbGFzcz0ic2V0dGluZyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy97ey5LZXl9fS8iPumAiemhuTwvYT57e2VuZH19e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8YSBjbGFzcz0iZGVhY3RpdmF0ZSBsYmwgbGJsLXJlZCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5bCB5Y2wPC9hPnt7ZWxzZX19DQogICAgICAgIDxhIGNsYXNzPSJhY3RpdmF0ZSBsYmwgbGJsLWJsdWUgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPua/gOa0uzwvYT57e2VuZH19DQogICAgICAgIDxwIGNsYXNzPSJkZXNjIGxlZnQiPnt7LkRlc2N9fTwvcD4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIuZGVhY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJkZWFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoea/gOa0uyIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlsIHljbDlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KTsNCiAgICAgICAgJCgiLmFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImFjdGl2YXRlIiwNCiAgICAgICAgICAgICAgICAicGx1Z2luIjogcA0KICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCJjbGljayIpLnRleHQoIuS4i+asoeWwgeWNsCIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLmv4DmtLvlpLHotKUiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCE9wWaFiBgAAYgYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAHZpZXdcYWRtaW5ccGx1Z2luX3NldHRpbmcuaHRtbDxmb3JtIGlkPSJwbHVnaW4tc2V0dGluZy1mb3JtIiBjbGFzcz0iZm9ybSBjb250YWluZXI5NjAgYWRtaW4iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICB7e0h0bWwgLkZvcm19fQ0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICAgICAgICAkKCcjcGx1Z2luLXNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIjoi5L+d5a2Y5aSx6LSlIik7DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwg0K3PVOAEAADgBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHByb2ZpbGUuaHRtbDxmb3JtIGlkPSJwcm9maWxlIiBjbGFzcz0iYWRtaW4gZm9ybSBjbGVhciBmb3JtLWFsaWduIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0icHJvZmlsZS1mb3JtIj4NCiAgICA8ZGl2IGNsYXNzPSJhdmF0YXIgZ3JpZC0xLTQgbGVmdCB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxpbWcgc3JjPSJ7ey5Vc2VyLkF2YXRhcn19IiBhbHQ9Int7LlVzZXIuTmlja319IiBjbGFzcz0iZmllbGQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBmaWVsZCBpbmxpbmUtYmxvY2siPuWktOWDj+eUsSA8YSBocmVmPSJodHRwOi8vZ3JhdmF0YXIuY29tLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm8tZm9sbG93Ij5HcmF2YXRhcjwvYT4g5o+Q5L6bPC9zcGFuPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tcmVkIGlubGluZS1ibG9jayIgaHJlZj0iL2FkbWluL3Bhc3N3b3JkLyI+5L+u5pS55a+G56CBPC9hPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaW5mbyByaWdodCBncmlkLTMtNCI+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1c2VyIj7nmbvlvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiB2YWx1ZT0ie3suVXNlci5OYW1lfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+55m75b2V55qE55So5oi35ZCNPC9zcGFuPjxici8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXNlci1pbnZhbGlkIj7nlKjmiLflkI3kuLrlrZfmr40r5pWw5a2X77yM6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ibmljayI+5pi156ewPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ibmljayIgdHlwZT0idGV4dCIgbmFtZT0ibmljayIgdmFsdWU9Int7LlVzZXIuTmlja319IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuaYvuekuuWcqOWJjeWPsOeahOensOWRvDwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5pY2staW52YWxpZCI+5pi156ew6ZW/5bqmMi0yMOS4quWtl+espjwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZW1haWwiPumCrueusTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImVtYWlsIiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHZhbHVlPSJ7ey5Vc2VyLkVtYWlsfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6IGU57O76YKu566x77yM5Y2B5YiG6YeN6KaB77yBPC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iZW1haWwtaW52YWxpZCI+6YKu566x5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJ1cmwiPue9keWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVybCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHZhbHVlPSJ7ey5Vc2VyLlVybH19IiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1cmwtaW52YWxpZCI+572R5Z2A5qC85byP6ZSZ6K+vPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBiaW8iIG5hbWU9ImJpbyIgaWQ9ImJpbyI+e3suVXNlci5CaW99fTwvdGV4dGFyZWE+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjkv67mlLk8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwcm9maWxlLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoibmljayIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiZW1haWwiLCJydWxlcyI6InZhbGlkX2VtYWlsIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJ1cmwiLCJydWxlcyI6InZhbGlkX3VybCJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Byb2ZpbGUnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCB+PoV8CDAAAAgwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cc2V0dGluZy5odG1sPHVsIGlkPSJzZXR0aW5nLW5hdiIgY2xhc3M9ImNvbnRhaW5lciB0ZXh0LWNlbnRlciI+DQogICAgPGxpPjxhIGhyZWY9IiNnZW5lcmFsIj7ln7rmnKw8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iI25hdiI+5a+86IiqPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9IiNjdXN0b20iPuiHquWumuS5iTwvYT48L2xpPg0KPC91bD4NCjxkaXYgaWQ9InNldHRpbmctcGFuZWxzIiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICA8Zm9ybSBpZD0ic2V0dGluZy1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nLyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS11cmwiPuermeeCueWcsOWdgDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdXJsIiBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InNpdGVfdXJsIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdXJsYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS10aXRsZSI+56uZ54K55Li75qCH6aKYPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aXRsZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1zdWItdGl0bGUiPuermeeCueWJr+agh+mimDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtc3ViLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3N1Yl90aXRsZSIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3N1Yl90aXRsZWB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUta2V5d29yZHMiPk1ldGHlhbPplK7lrZc8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLWtleXdvcmRzIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2tleXdvcmRzIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1kZXNjIj5NZXRh56uZ54K55LuL57uNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1kZXNjIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX2Rlc2NyaXB0aW9uIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iYXJ0aWNsZS1zaXplIj7ljZXpobXmlofnq6DliJfooajmlbA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJhcnRpY2xlLXNpemUiIGNsYXNzPSJpcHQiIHR5cGU9Im51bWJlciIgbmFtZT0iYXJ0aWNsZV9zaXplIiB2YWx1ZT0ie3tTZXR0aW5nIGBhcnRpY2xlX3NpemVgfX0iIG1heD0iMTAiIG1pbj0iMyIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGhlbWUiPuS4u+mimOebruW9leWQjTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdGhlbWUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfdGhlbWUiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdGhlbWVgfX0iLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS4u+mimOWNs+aMh+WQkeeahOaooeadv+ebruW9le+8jOWFt+S9k+WGheWuueivt+WPguiAgyBkZWZhdWx0IOebruW9le+8iOWNsyBkZWZhdWx0IOS4u+mimO+8iTwvc3Bhbj4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNpdGVfdGhlbWVfZGVmIiB2YWx1ZT0iZGVmYXVsdCIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImdvLW1hcmtkb3duIj5Hb+a4suafk01hcmtkb3duPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iZ28tbWFya2Rvd24iIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9ImVuYWJsZV9nb19tYXJrZG93biIgdmFsdWU9Int7U2V0dGluZyBgZW5hYmxlX2dvX21hcmtkb3duYH19Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7pu5jorqTlhbPpl63vvIzkvb/nlKjliY3nq69tYXJrZWQuanPmuLLmn5PvvIzloat0cnVl5pe25byA5ZCvPC9zcGFuPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duX2RlZiIgdmFsdWU9ImZhbHNlIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHA+DQogICAgICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Zvcm0+DQogICAgPGZvcm0gaWQ9InNldHRpbmctbmF2LWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybSBmb3JtLWFsaWduIHNldHRpbmctcGFuZWwiIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvbmF2LyIgbWV0aG9kPSJwb3N0Ij57e3JhbmdlIC5OYXZpZ2F0b3JzfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7mjpLluo88L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgb3JkZXIiIHR5cGU9Im51bWJlciIgbmFtZT0ib3JkZXIiIHZhbHVlPSJ7ey5PcmRlcn19Ii8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPuaWh+acrDwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCB0ZXh0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0ZXh0IiB2YWx1ZT0ie3suVGV4dH19IiByZXF1aXJlZD0icmVxdWlyZWQiLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5qCH6aKYPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgdmFsdWU9Int7LlRpdGxlfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+6ZO+5o6lPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IGxpbmsiIHR5cGU9InRleHQiIG5hbWU9ImxpbmsiIHZhbHVlPSJ7ey5MaW5rfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiIHJlbD0iI25hdi1pdGVtIj7mt7vliqDkuIDpobk8L2E+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0ibmF2LWl0ZW0iPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5o6S5bqPPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IG9yZGVyIiB0eXBlPSJudW1iZXIiIG5hbWU9Im9yZGVyIiB2YWx1ZT0iMSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5paH5pysPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRleHQiIHR5cGU9InRleHQiIG5hbWU9InRleHQiIHZhbHVlPSIiIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5qCH6aKYPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgdmFsdWU9IiIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+6ZO+5o6lPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IGxpbmsiIHR5cGU9InRleHQiIG5hbWU9ImxpbmsiIHZhbHVlPSIiIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9zY3JpcHQ+DQogICAgPC9mb3JtPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWN1c3RvbS1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nL2N1c3RvbS8iIG1ldGhvZD0icG9zdCI+e3tyYW5nZSAkaywkdiA6PSAuQ3VzdG9tfX0NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHZhbHVlPSJ7eyRrfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7JHZ9fSIvPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2YPC9idXR0b24+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ncmVlbiBhZGQiIGhyZWY9IiMiIHJlbD0iI2N1c3RvbS1pdGVtIj7mt7vliqDkuIDpobk8L2E+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kvb/nlKjlh73mlbDoh6rlrprkuYnphY3nva7vvIzpnIDopoHliqDliY3nvIAiY18i77yM5aaCR2V0U2V0dGluZygiY19rZXkiKTwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjdXN0b20taXRlbSI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQga2V5IiB0eXBlPSJ0ZXh0IiBuYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSLlrZfmrrXlkI0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSLlrZfmrrXlgLwiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvc2NyaXB0Pg0KICAgIDwvZm9ybT4NCjwvZGl2Pg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnl0b29scy8xLjIuNy9qcXVlcnkudG9vbHMubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNzZXR0aW5nLW5hdicpLnRhYnMoIi5zZXR0aW5nLXBhbmVsIik7DQogICAgICAgICQoJy5zZXR0aW5nLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgYWxlcnQoanNvbi5yZXMgPyAi5bey5L+d5a2YIiA6IGpzb24ubXNnKTsNCiAgICAgICAgfSkub24oImNsaWNrIiwiLmFkZCIsZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLnByZXBlbmQoJCgkKHRoaXMpLmF0dHIoInJlbCIpKS5odG1sKCkpOw0KICAgICAgICB9KS5vbigiY2xpY2siLCIuZGVsIixmdW5jdGlvbihlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGlmKGNvbmZpcm0oIuimgeWIoOmZpOi/memhue+8nyIpKXsNCiAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcICEOLExAZAAAQGQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xhZG1pblx3cml0ZV9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ5paH56ug5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5qCH562+PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJ0YWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InRhZyIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOagh+etviIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoIj7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCI+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQogICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgIDwvcD4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vYXJ0aWNsZXMvIjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIvsp0fCEMAAAhDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblx3cml0ZV9wYWdlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i6aG16Z2i5qCH6aKYIi8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+5pKw5YaZ6aG16Z2i5YaF5a6577yM5pSv5oyBYG1hcmtkb3duYOivreazlemrmOS6rjwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6aG16Z2i55qE5ZSv5LiA6ZO+5o6lIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+572u6aG26ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJsaW5rIiBpZD0iaXMtbGluayI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL3BhZ2VzLyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCHJbVWl8DAAAfAwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAHZpZXdcYWRtaW4ubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPnt7LlRpdGxlfX0gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvYWRtaW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgICA8aDMgY2xhc3M9ImxvZ28gbGVmdCI+RnhoLkdvIC0gPHNwYW4+e3suVGl0bGV9fTwvc3Bhbj48L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJuYXYgbGVmdCByZWxhdGl2ZSI+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGFzaGJvYXJkIGxlZnQiIGhyZWY9Ii9hZG1pbi8iPjxpIGNsYXNzPSJmYSBmYS1kYXNoYm9hcmQiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iYXJ0aWNsZSBsZWZ0IiBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvIiB0aXRsZT0i5paH56ugIj48aSBjbGFzcz0iZmEgZmEtY29weSI+PC9pPjwvYT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGFnZXMgbGVmdCIgaHJlZj0iL2FkbWluL3BhZ2VzLyIgdGl0bGU9IueLrOeri+mhtemdoiI+PGkgY2xhc3M9ImZhIGZhLXBhc3RlIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImNvbW1lbnRzIGxlZnQiIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iIHRpdGxlPSLor4TorroiPjxpIGNsYXNzPSJmYSBmYS1jb21tZW50cyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJmaWxlcyBsZWZ0IiBocmVmPSIvYWRtaW4vZmlsZXMvIiB0aXRsZT0i5aqS5L2T5paH5Lu2Ij48aSBjbGFzcz0iZmEgZmEtaW5ib3giPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGx1Z2lucyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy8iIHRpdGxlPSLmj5Lku7YiPjxpIGNsYXNzPSJmYSBmYS1nZWFycyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyIgdGl0bGU9Iuiuvue9riI+PGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPjwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxhIGNsYXNzPSJvdXQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii9sb2dvdXQvIiB0aXRsZT0i6YCA5Ye6Ij48aSBjbGFzcz0iZmEgZmEtcG93ZXItb2ZmIGZhLWxnIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0icHJvZmlsZSBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIiB0aXRsZT0i5oiRIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImZyb250IG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Iuafpeeci+e9keermSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+DQogICAgPC9kaXY+DQo8L2Rpdj4NCntAQ29udGVudH0NCjxkaXYgaWQ9ImZvb3RlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgIDxwIGNsYXNzPSJsaW5rcyB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgIDxhIGNsYXNzPSJzdGF0IiBocmVmPSIvY21kL21lc3NhZ2UvIj7mtojmga88L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJiYWNrdXAiIGhyZWY9Ii9jbWQvYmFja3VwLyI+5aSH5Lu9PC9hPg0KICAgICAgICAgICA8YSBjbGFzcz0iZXJyIiBocmVmPSIvY21kL2xvZ3MvIj7ml6Xlv5c8L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJzeXMiIGhyZWY9IiMiPuezu+e7nzwvYT4NCiAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJjcCB0ZXh0LWNlbnRlciI+UHJvdWRseSBQb3dlcmVkIGJ5IEZ4aC5HbzwvcD4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwjKwp1dvAgAALwIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAB2aWV3XGNtZC5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+e3suVGl0bGV9fSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jbWQuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keSBjbGFzcz0iY21kIj4NCntAQ29udGVudH0NCjxwIGNsYXNzPSJiYWNrIj48YSBocmVmPSJqYXZhc2NyaXB0Omhpc3RvcnkuYmFjaygpIj5CYWNrPC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcICn3IAM4BAADOAQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAdmlld1xkZWZhdWx0L1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGRlZmF1bHRcYXJ0aWNsZS5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LkFydGljbGUuU3RhdHVzfX0iIGlkPSJhcnRpY2xlLXt7LkFydGljbGUuSWR9fSI+e3t3aXRoIC5BcnRpY2xlfX0NCiAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWcgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdGFncyI+PC9pPnt7LlRhZ1N0cmluZ319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2aWV3cyBpbmxpbmUtYmxvY2sgcmlnaHQiPumYheivuyZuYnNwOyZuYnNwOzxzcGFuPnt7LkhpdHN9fTwvc3Bhbj4mbmJzcDsmbmJzcDvmrKE8L3NwYW4+DQogICAgICAgIDwvcD57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCMC4NIi3AwAAtwMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAHZpZXdcZGVmYXVsdFxjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50Ij4NCiAgICA8ZGl2IGlkPSJjb21tZW50LWxpc3QiPnt7cmFuZ2UgLkNvbW1lbnRzfX17e2lmIC5Jc1ZhbGlkfX0NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciIgaWQ9ImNvbW1lbnQte3suSWR9fSI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9Int7LkF1dGhvcn19Ii8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSBjLWF1dGhvcnt7aWYgLklzQWRtaW59fSBhZG1pbnt7ZW5kfX0iIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+e3suQXV0aG9yfX17e2lmIC5Jc0FkbWlufX0mbmJzcDsmbmJzcDsoYWRtaW4pe3tlbmR9fTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9Int7LklkfX0iPjxpIGNsYXNzPSJmYSBmYS1xdW90ZS1yaWdodCI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+e3tlbmR9fXt7ZW5kfX0NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LXNob3ciIGNsYXNzPSJ0ZXh0LWNlbnRlciI+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGVuYWJsZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+e3tlbHNlfX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1yZWQiPuacrOaWh+WFs+mXreS6huivhOiuujwvYnV0dG9uPnt7ZW5kfX0NCiAgICA8L2Rpdj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgY2xhc3M9ImhpZGUgY2xlYXIgdGV4dC1jZW50ZXIgZm9ybSIgYWN0aW9uPSIvY29tbWVudC97ey5Db250ZW50LklkfX0vIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8gbGVmdCB0ZXh0LXJpZ2h0Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIGMtYXZhdGFyLWZpZWxkIj4NCiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBudWxsIiBzcmM9Ii9zdGF0aWMvaW1nL3NpdGUucG5nIiBhbHQ9IiIgaWQ9ImNvbW1lbnQtYXZhdGFyIi8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5vdC1tZSBibG9jayIgaHJlZj0iIyI+5LiN5piv5oiRPzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mby1maWVsZHMgaGlkZSI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLnp7DlkbwiIGlkPSJjb21tZW50LWF1dGhvciIvPjwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6YKu566xIiBpZD0iY29tbWVudC1lbWFpbCIvPiA8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgcGxhY2Vob2xkZXI9Iue9keWdgCIgaWQ9ImNvbW1lbnQtdXJsIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY29tbWVudC1wYXJlbnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIG5hbWU9InBpZCIvPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWNvbnRlbnQgdGV4dC1sZWZ0IHJpZ2h0Ij4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuWPkeihqOivhOiuujwvYnV0dG9uPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGJsIGxibC1ncmVlbiBjYW5jZWwtcmVwbHkiIHR5cGU9ImJ1dHRvbiI+5Y+W5raI5Zue5aSNPC9idXR0b24+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZm9ybT57e2VuZH19DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY29tbWVudC10cGwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0iIiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3IiIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT5Ob3c8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9IiI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jaGVjayI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45Lit77yM5Yi35paw5ZCO6ZqQ6JePPC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPjwvc2VjdGlvbj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvc2NyaXB0Pg0KPC9kaXY+UEsHCG+ub1TiDAAA4gwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHZpZXdcZGVmYXVsdFxlcnJvci9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xkZWZhdWx0XGVycm9yXGVycm9yLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouato+WcqOaJk+eejOedoTwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWKquWKm+WUpOmGku+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCBOERlJ4AQAAeAEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHZpZXdcZGVmYXVsdFxlcnJvclxub3Rmb3VuZC5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPumUmeivr+aPkOekujwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPmJvZHl7bWFyZ2luOiA0MHB4IDEwMHB4fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoMj7mgqjorr/pl67nmoTpobXpnaLnprvlrrblh7rotbA8L2gyPjxici8+DQo8cD7nqIvluo/lkZjmraPlnKjlm5vlpITlr7vmib7vvIzor7fnqI3lgJnorr/pl64uLi48L3A+DQo8cD48YSBocmVmPSIvIj7ov5Tlm57pppbpobU8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwiQ+dTAdQEAAHUBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGRlZmF1bHRcaG9tZS5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iLz4NCiAgICA8dGl0bGU+e3tpZiAuVGl0bGV9fXt7LlRpdGxlfX0gLSB7e2VuZH19e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC90aXRsZT4NCiAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRnhoR28gQmxvZyIgLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL3N0eWxlLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19IC0gUlNTIDIuMCIgaHJlZj0iL3Jzcy54bWwiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIi8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8bmF2IGlkPSJuYXYiIGNsYXNzPSJjbGVhciB0ZXh0LWNlbnRlciI+DQogICAgPHVsPnt7cmFuZ2UgTmF2aWdhdG9yfX0NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRleHR9fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KPC9uYXY+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8cD4NCiAgICAgICAgPGEgY2xhc3M9IndlaWJvIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX3dlaWJvYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIj48L2k+V2VpYm88L2E+DQogICAgICAgIDxhIGNsYXNzPSJnaXQiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZ2l0aHViYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWdpdGh1YiI+PC9pPkdpdEh1YjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImVtYWlsIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX2VtYWlsYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlIj48L2k+RW1haWw8L2E+DQogICAgICAgIDxhIGNsYXNzPSJyc3MiIGhyZWY9Ii9yc3MueG1sIiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXJzcyI+PC9pPlJTUzwvYT57e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KICAgIDwvcD4NCiAgICA8c3Bhbj5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuIFByb3VkbHkgUG93ZXJlZCBieSBGeGguR28uPC9zcGFuPg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIC1vrljMJAAAzCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xkZWZhdWx0XGluZGV4Lmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5JZH19Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBsZWZ0IHRleHQtY2VudGVyIj57e2lmIGd0IC5Db21tZW50TnVtIDB9fQ0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PHN0cm9uZz57ey5Db21tZW50TnVtfX0g4oSDPC9zdHJvbmc+PC9hPjwvcD57e2VuZH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyI+PGkgY2xhc3M9ImZhIGZhLWV5ZSI+PC9pPjxzdHJvbmc+e3suSGl0c319IOKEiTwvc3Ryb25nPjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyYXkgdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT48c3Ryb25nPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1haW4iPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuU3VtbWFyeX19PC9zZWN0aW9uPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0aG9yIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT57ey5Vc2VyLk5pY2t9fTwvc3Bhbj57e2VuZH19e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXRhZ3MiPjwvaT57ey5UYWdTdHJpbmd9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlubGluZS1ibG9jayByZWFkIHJpZ2h0IiBocmVmPSJ7ey5MaW5rfX0iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT7nu6fnu63pmIXor7s8L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvYXJ0aWNsZT57e2VuZH19DQogICAgPGRpdiBjbGFzcz0icGFnZXIgdGV4dC1jZW50ZXIiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxhIGhyZWY9Ii9wL3t7Ln19LyIgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPnt7Ln19PC9hPnt7ZW5kfX0NCiAgICA8L2Rpdj4NCjwvZGl2PlBLBwipLoBo5wUAAOcFAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGRlZmF1bHRccGFnZS5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIiBpZD0iYXJ0aWNsZS1JZCI+e3t3aXRoIC5QYWdlfX0NCiAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idmlld3MgaW5saW5lLWJsb2NrIHJpZ2h0Ij7pmIXor7smbmJzcDsmbmJzcDs8c3Bhbj57ey5IaXRzfX08L3NwYW4+Jm5ic3A7Jm5ic3A75qyhPC9zcGFuPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgIDwvYXJ0aWNsZT4NCjwvZGl2PlBLBwhcAM7dBAMAAAQDAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAB2aWV3XGxpbmcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xhcnRpY2xlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIgYXJ0aWNsZS1zaW5nbGUgcmVsYXRpdmUge3suQXJ0aWNsZS5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIGFic29sdXRlIj57ey5IaXRzfX08L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJ0aW1lLWluZm8iPnt7aWYgLlVzZXJ9fTxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDt7e2VuZH195Y+R6KGo5LqOJm5ic3A7Jm5ic3A7Jm5ic3A7e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIllZWVkg5bm0IE1NIOaciCBERCDml6UifX08L3A+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPuagh+etvu+8mnt7LlRhZ1N0cmluZ319PC9zcGFuPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCBrCnX1tAwAAbQMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0icmVsYXRpdmUiPg0KICAgIDxoNCBpZD0iY29tbWVudC10aXRsZSI+5paH56ug6K+E6K66PC9oND4NCiAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+e3suQ29udGVudC5Db21tZW50TnVtfX08L2E+PC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIGNsZWFyIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkgbGJsIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LklkfX0iPuWbnuWkjTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHA+PGEgY2xhc3M9ImMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9ImMtdGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NIOaciCBERCDml6UgSEgg5pe2IG1tIOWIhiJ9fTwvc3Bhbj48L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJj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ci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvbGluZy5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIgY2xhc3M9ImxlZnQiLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCIgY2xhc3M9ImxlZnQiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiIGNsYXNzPSJsZWZ0Ij57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4NCiAgICAgICAgPG5hdiBpZD0ibmF2IiBjbGFzcz0icmlnaHQiPg0KICAgICAgICAgICAgPHVsPnt7cmFuZ2UgTmF2aWdhdG9yfX0NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGV4dH19PC9hPjwvbGk+e3tlbmR9fQ0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9uYXY+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCBjbGVhciI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0Ij5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0icmlnaHQiPlByb3VkbHkgUG93ZXJlZCBieSBGeGguR28uPC9zcGFuPg0KICAgIDwvZGl2Pg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KICAgIHt7U2V0dGluZyBgY19mb290ZXJfZ2FgIHwgSHRtbH19DQo8L2Zvb3Rlcj4NCjxzY3JpcHQgc3JjPSIvc3Rh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" \ No newline at end of file +const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnt3aWR0aDoxMDAwcHg7bWFyZ2luLXRvcDoyNHB4O21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNzZXR0aW5nLW5hdiBsaXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCAxMnB4fSNzZXR0aW5nLW5hdiBsaSBhe3BhZGRpbmc6M3B4IDEwcHh9CiNzZXR0aW5nLW5hdiBsaSBhOmhvdmVyLCNzZXR0aW5nLW5hdiBsaSBhLmN1cnJlbnR7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzAwNWI5Yn0KLnNldHRpbmctcGFuZWx7ZGlzcGxheTpub25lfQouc2V0dGluZy1mb3Jte3dpZHRoOjgyMHB4O21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfS5zZXR0aW5nLWZvcm0gLmlwdHt3aWR0aDo0ODBweH0KLnNldHRpbmctZm9ybSAuaW52YWxpZHttYXJnaW4tbGVmdDo3NXB4fQouc2V0dGluZy1mb3JtIGxhYmVse21pbi13aWR0aDoxMGVtfQouc2V0dGluZy1mb3JtIC50aXAuYmxvY2t7bWFyZ2luLWxlZnQ6MTJlbX0KI3NldHRpbmctY3VzdG9tLWZvcm17d2lkdGg6MTAwMHB4fSNzZXR0aW5nLWN1c3RvbS1mb3JtIGlucHV0LmtleXt3aWR0aDoyNTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQudmFsdWV7d2lkdGg6NjUwcHh9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5pdGVte21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojc2V0dGluZy1jdXN0b20tZm9ybSAuZGVse21hcmdpbi1sZWZ0OjEycHg7Y29sb3I6I2U2NDM0Nn0KI3NldHRpbmctY3VzdG9tLWZvcm0gLnRpcHttYXJnaW4tbGVmdDowfQojc2V0dGluZy1uYXYtZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctbmF2LWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLW5hdi1mb3JtIHNwYW4ubGFiZWx7bWFyZ2luLXJpZ2h0OjZweH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQub3JkZXJ7d2lkdGg6Mi41ZW07bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0LnRleHR7d2lkdGg6ODBweDttaW4td2lkdGg6MH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQudGl0bGV7d2lkdGg6MTUwcHg7bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0Lmxpbmt7d2lkdGg6MzQwcHh9CiNzZXR0aW5nLW5hdi1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jbnQsI2NvbW1lbnQtbGlzdCAuYy1lbWFpbHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWxpc3QgLmMtc2VjdGlvbnttYXgtd2lkdGg6ODMwcHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2ssI2NvbW1lbnQtbGlzdCAuYy1kZWx7Y29sb3I6I2U2NDM0Nn0jY29tbWVudC1saXN0IC5jLWNoZWNrIC5mYSwjY29tbWVudC1saXN0IC5jLWRlbCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjazpob3ZlciwjY29tbWVudC1saXN0IC5jLWRlbDpob3Zlcntjb2xvcjojYWEzOTNjfQojY29tbWVudC1mb3Jte3BhZGRpbmctdG9wOjEycHg7ZGlzcGxheTpub25lO21hcmdpbi1sZWZ0OjcycHh9I2NvbW1lbnQtZm9ybSAuYnRue21hcmdpbi1yaWdodDoyNHB4fQojY29tbWVudC1jb250ZW50e3dpZHRoOjUwMHB4O2hlaWdodDo4MHB4O21hcmdpbi1yaWdodDoyNHB4fQojZmlsZXMtbGlzdCBsaS5maWxle21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZmlsZXMtbGlzdCBsaS5maWxlPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNmaWxlcy1saXN0IGxpLmZpbGU6aG92ZXIgLmRlbHtvcGFjaXR5OjEgIWltcG9ydGFudH0KI2ZpbGVzLWxpc3QgLnVwbG9hZC10aW1le2NvbG9yOiM5OTk7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2ZpbGVzLWxpc3QgLmRlbHtjb2xvcjojZTY0MzQ2fQojZmlsZXMtbGlzdCAuZmlsZS1wcm9ncmVzc3twYWRkaW5nOjAgMTJweDtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMik7Y29sb3I6IzY2Njtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNzLmVycntiYWNrZ3JvdW5kOnJnYmEoMjU1LDY4LDcxLDAuMik7Y29sb3I6I2FhMzkzY30KI2ZpbGVzLWxpc3QgLnNpemV7d2lkdGg6NGVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfQojcGx1Z2luLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxNnB4O3BhZGRpbmctYm90dG9tOjE2cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3BsdWdpbi1saXN0IGxpIC5kZXNje21hcmdpbi1ib3R0b206MDt3aWR0aDo5OSU7Y29sb3I6Izk5OX0KI3BsdWdpbi1saXN0IGxpIGEubGJse3BhZGRpbmc6MCA4cHg7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC52ZXJzaW9ue2NvbG9yOiM1MDc2NTA7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC5uYW1le2ZvbnQtc2l6ZToxNnB4fQojcGx1Z2luLWxpc3QgbGkgLmFjdGl2ZXt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O21hcmdpbi1yaWdodDoxNnB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjEwcHh9CiNwbHVnaW4tbGlzdCBsaSAuc2V0dGluZ3ttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBwLml0ZW17Y2xlYXI6Ym90aH0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gbGFiZWx7ZmxvYXQ6bGVmdDttaW4td2lkdGg6NmVtO3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luLXJpZ2h0OjJlbX0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gLnRpdGxle3BhZGRpbmctdG9wOjA7bWFyZ2luLWJvdHRvbToxOHB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBpbnB1dC5pcHR7d2lkdGg6NjAwcHh9CiNkYXNoYm9hcmQgLmdyaWQtMS01e21hcmdpbi1yaWdodDoyJX0KI2Rhc2hib2FyZCAucXVpY2stbGluayBsaXtsaXN0LXN0eWxlOmluc2lkZSBkaXNjO21hcmdpbi1ib3R0b206NnB4O3BhZGRpbmctYm90dG9tOjZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2Rhc2hib2FyZCAuc3RhdHMgLmxibHtwYWRkaW5nOjFweCA1cHg7bWFyZ2luOjAgM3B4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNne3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZzpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMDYpfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2c6aG92ZXIgLnJlYWR7b3BhY2l0eToxfQpQSwcIHMaB8VMyAABTMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGNzc1xjbWQuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Ci5jbWR7bWFyZ2luOjI0cHggNDhweH0KLmNtZC1oZWFkZXJ7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtYnRue21hcmdpbjoxMHB4IDAgMCAzMHB4fQouY21kLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtbGlzdCBsaXtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlO2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2JhY2t1cC1saXN0IGxpPnNwYW4sI2JhY2t1cC1saXN0IGxpPmF7bWFyZ2luLXJpZ2h0OjE2cHh9CiNiYWNrdXAtbGlzdCBsaSAuZGVse2NvbG9yOiNlNjQzNDY7b3BhY2l0eTowfQojYmFja3VwLWxpc3QgbGkgLmxpbmt7bWFyZ2luLWxlZnQ6MTJweH0KI2JhY2t1cC1saXN0IGxpOmhvdmVyIC5kZWx7b3BhY2l0eToxfQojbWVzc2FnZS1saXN0IC5tZXNzYWdle3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI21lc3NhZ2UtbGlzdCAubWVzc2FnZTpob3ZlciAucmVhZHtvcGFjaXR5OjF9CiNsb2ctbGlzdCAubG9ne2ZvbnQtc2l6ZToxMnB4fQojbG9nLWxpc3QgLm5hbWV7bWFyZ2luLXJpZ2h0OjEuNWVtO2ZvbnQtd2VpZ2h0OmJvbGR9CiNsb2ctbGlzdCAudGltZSwjbG9nLWxpc3QgLm5hbWV7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2xvZy1saXN0IC50ZXh0e2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbDtjb2xvcjojNjY2O3BhZGRpbmc6OHB4IDEycHg7YmFja2dyb3VuZDojZjNmM2YzfQojbG9nLWxpc3QgLnJlbW92ZXt0b3A6MDtyaWdodDoxMnB4O2NvbG9yOiNlNjQzNDZ9ClBLBwjSN8QbLxoAAC8aAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAABzdGF0aWNcY3NzXGNvZGVtaXJyb3IuY3NzLyogQkFTSUNTICovCgouQ29kZU1pcnJvciB7CiAgICAvKiBTZXQgaGVpZ2h0LCB3aWR0aCwgYm9yZGVycywgYW5kIGdsb2JhbCBmb250IHByb3BlcnRpZXMgaGVyZSAqLwogICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiTWljcm9zb2Z0IFlhSGVpIiwgIkNvdXJpZXIgTmV3IiwgQXJpYWw7CiAgICBoZWlnaHQ6IDY2MHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgYm9yZGVyOjFweCBzb2xpZCAjOTk5Owp9CgouQ29kZU1pcnJvci1zY3JvbGwgewogICAgLyogU2V0IHNjcm9sbGluZyBiZWhhdmlvdXIgaGVyZSAqLwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi8qIFBBRERJTkcgKi8KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIHBhZGRpbmc6IDRweCAwOyAvKiBWZXJ0aWNhbCBwYWRkaW5nIGFyb3VuZCBjb250ZW50ICovCn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICBwYWRkaW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KfQoKLyogR1VUVEVSICovCgouQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLkNvZGVNaXJyb3ItbGluZW51bWJlcnMgewp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIHBhZGRpbmc6IDAgM3B4IDAgNXB4OwogICAgbWluLXdpZHRoOiAyMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBjb2xvcjogIzU1NTsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4Owp9CgovKiBDVVJTT1IgKi8KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogICAgei1pbmRleDogMzsKfQoKLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7Cn0KCi5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB3aWR0aDogYXV0bzsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6ICM3ZTc7CiAgICB6LWluZGV4OiAxOwp9CgovKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHsKfQoKLmNtLXRhYiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi8qIERFRkFVTFQgVEhFTUUgKi8KCi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQgewogICAgY29sb3I6ICM3MDg7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWF0b20gewogICAgY29sb3I6ICMyMTk7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7CiAgICBjb2xvcjogIzE2NDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tZGVmIHsKICAgIGNvbG9yOiAjMDBmOwp9CgouY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZSB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICMwNWE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTMgewogICAgY29sb3I6ICMwODU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5IHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3IgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHsKICAgIGNvbG9yOiAjYTUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1zdHJpbmcgewogICAgY29sb3I6ICNhMTE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0yIHsKICAgIGNvbG9yOiAjZjUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1tZXRhIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW4gewogICAgY29sb3I6ICMzMGE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICM5OTc7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7CiAgICBjb2xvcjogIzE3MDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIgewogICAgY29sb3I6IGJsdWU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1b3RlIHsKICAgIGNvbG9yOiAjMDkwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1ociB7CiAgICBjb2xvcjogIzk5OTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbGluayB7CiAgICBjb2xvcjogIzAwYzsKfQoKLmNtLW5lZ2F0aXZlIHsKICAgIGNvbG9yOiAjZDQ0Owp9CgouY20tcG9zaXRpdmUgewogICAgY29sb3I6ICMyOTI7Cn0KCi5jbS1oZWFkZXIsIC5jbS1zdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5jbS1lbSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5jbS1saW5rIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7CiAgICBjb2xvcjogI2YwMDsKfQoKLmNtLWludmFsaWRjaGFyIHsKICAgIGNvbG9yOiAjZjAwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjMGYwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjZjIyOwp9CgouQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogI2U4ZjJmZjsKfQoKLyogU1RPUCAqLwoKLyogVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGNvbnRhaW5zIHN0eWxlcyByZWxhdGVkIHRvIHRoZSBtZWNoYW5pY3Mgb2YKICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwoKLkNvZGVNaXJyb3IgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciAqLwogICAgbWFyZ2luLWJvdHRvbTogLTMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IC0zMHB4OwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CgouQ29kZU1pcnJvci1zaXplciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcKICAgYmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZAogICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA2OwogICAgZGlzcGxheTogbm9uZTsKfQoKLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7CiAgICByaWdodDogMDsKICAgIHRvcDogMDsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKfQoKLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgb3ZlcmZsb3cteDogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGxlZnQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHRvcDogMDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgei1pbmRleDogMzsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIG1hcmdpbi1ib3R0b206IC0zMnB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgLyogSGFjayB0byBtYWtlIElFNyBiZWhhdmUgKi8KICAgICp6b29tOiAxOwogICAgKmRpc3BsYXk6IGlubGluZTsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB6LWluZGV4OiA0Owp9CgouQ29kZU1pcnJvci1saW5lcyB7CiAgICBjdXJzb3I6IHRleHQ7Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovCiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLXdpZHRoOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgIG1hcmdpbjogMDsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICB6LWluZGV4OiAyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7Cn0KCi5Db2RlTWlycm9yLXdyYXAgcHJlIHsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKfQoKLkNvZGVNaXJyb3ItY29kZSBwcmUgewogICAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7CiAgICB3aWR0aDogLW1vei1maXQtY29udGVudDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogYXV0bzsKfQoKLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgei1pbmRleDogMDsKfQoKLkNvZGVNaXJyb3ItbGluZXdpZGdldCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi5Db2RlTWlycm9yLXdpZGdldCB7Cn0KCi5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7Cn0KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogMDsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogI2Q5ZDlkOTsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDdkNGYwOwp9CgouY20tc2VhcmNoaW5nIHsKICAgIGJhY2tncm91bmQ6ICNmZmE7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAuNCk7Cn0KCi8qIElFNyBoYWNrIHRvIHByZXZlbnQgaXQgZnJvbSByZXR1cm5pbmcgZnVubnkgb2Zmc2V0VG9wcyBvbiB0aGUgc3BhbnMgKi8KLkNvZGVNaXJyb3Igc3BhbiB7CiAgICAqdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwp9CgpAbWVkaWEgcHJpbnQgewogICAgLyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KICAgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQp9CgouY20tcy1iYXNlMTYtZGFyay5Db2RlTWlycm9yIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogIzIwMjAyMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBib3JkZXItcmlnaHQ6IDBweDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItbGluZW51bWJlciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2IwYjBiMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICM4ZjU1MzY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXRvbSB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1udW1iZXIgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWtleXdvcmQgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tc3RyaW5nIHsKICAgIGNvbG9yOiAjZjRiZjc1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICM2YTlmYjU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZGVmIHsKICAgIGNvbG9yOiAjZDI4NDQ1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICNlMGUwZTA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdGFnIHsKICAgIGNvbG9yOiAjYWM0MTQyOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWxpbmsgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZXJyb3IgewogICAgYmFja2dyb3VuZDogI2FjNDE0MjsKICAgIGNvbG9yOiAjYjBiMGIwOwp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogIzJGMkYyRiAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQpQSwcIIwM1gk4gAABOIAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAc3RhdGljXGNzc1xjb21tb24uY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH1oZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfWZpZWxkc2V0LGltZ3tib3JkZXI6MH1hZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfW9sLHVse2xpc3Qtc3R5bGU6bm9uZX1jYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9cTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfWFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfXN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH1zdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1sZWdlbmR7Y29sb3I6IzAwMH1odG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn1he3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifXB7bWFyZ2luLWJvdHRvbToxOHB4fWgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfWgxe2ZvbnQtc2l6ZToyOHB4fWgye2ZvbnQtc2l6ZToyNHB4fWgze2ZvbnQtc2l6ZToyMXB4fWg0e2ZvbnQtc2l6ZToxOXB4fWg1e2ZvbnQtc2l6ZToxNnB4fWg2e2ZvbnQtc2l6ZToxNHB4fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5sZWZ0e2Zsb2F0OmxlZnR9LnJpZ2h0e2Zsb2F0OnJpZ2h0fS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0udmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmZhZGUtb3V0e29wYWNpdHk6MH0uaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uY29udGFpbmVye3dpZHRoOjEyMDBweDttYXJnaW46YXV0b30uY29udGFpbmVyOTYwe3dpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmctYm90dG9tOjEycHh9Lm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fVBLBwh7vP2MJhQAACYUAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAABzdGF0aWNcY3NzXGhpZ2hsaWdodC5jc3MvKg0KDQpTdW5idXJzdC1saWtlIHN0eWxlIChjKSBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+DQoNCiovDQoNCnByZSBjb2RlIHsNCiAgICBkaXNwbGF5OiBibG9jazsgcGFkZGluZzogMC41ZW07DQogICAgYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmOGY4Zjg7DQp9DQoNCnByZSAuY29tbWVudCwNCnByZSAudGVtcGxhdGVfY29tbWVudCwNCnByZSAuamF2YWRvYyB7DQogICAgY29sb3I6ICNhZWFlYWU7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmtleXdvcmQsDQpwcmUgLnJ1YnkgLmZ1bmN0aW9uIC5rZXl3b3JkLA0KcHJlIC5yZXF1ZXN0LA0KcHJlIC5zdGF0dXMsDQpwcmUgLm5naW54IC50aXRsZSB7DQogICAgY29sb3I6ICNFMjg5NjQ7DQp9DQoNCnByZSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnN1YiAua2V5d29yZCwNCnByZSAubWV0aG9kLA0KcHJlIC5saXN0IC50aXRsZSB7DQogICAgY29sb3I6ICM5OUNGNTA7DQp9DQoNCnByZSAuc3RyaW5nLA0KcHJlIC50YWcgLnZhbHVlLA0KcHJlIC5jZGF0YSwNCnByZSAuZmlsdGVyIC5hcmd1bWVudCwNCnByZSAuYXR0cl9zZWxlY3RvciwNCnByZSAuYXBhY2hlIC5jYnJhY2tldCwNCnByZSAuZGF0ZSwNCnByZSAudGV4IC5jb21tYW5kLA0KcHJlIC5jb2ZmZWVzY3JpcHQgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICM2NUIwNDI7DQp9DQoNCnByZSAuc3Vic3Qgew0KICAgIGNvbG9yOiAjREFFRkEzOw0KfQ0KDQpwcmUgLnJlZ2V4cCB7DQogICAgY29sb3I6ICNFOUMwNjI7DQp9DQoNCnByZSAudGl0bGUsDQpwcmUgLnN1YiAuaWRlbnRpZmllciwNCnByZSAucGksDQpwcmUgLnRhZywNCnByZSAudGFnIC5rZXl3b3JkLA0KcHJlIC5kZWNvcmF0b3IsDQpwcmUgLnNoZWJhbmcsDQpwcmUgLnByb21wdCB7DQogICAgY29sb3I6ICM4OUJERkY7DQp9DQoNCnByZSAuY2xhc3MgLnRpdGxlLA0KcHJlIC5oYXNrZWxsIC50eXBlLA0KcHJlIC5zbWFsbHRhbGsgLmNsYXNzLA0KcHJlIC5qYXZhZG9jdGFnLA0KcHJlIC55YXJkb2N0YWcsDQpwcmUgLnBocGRvYyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCnByZSAuc3ltYm9sLA0KcHJlIC5ydWJ5IC5zeW1ib2wgLnN0cmluZywNCnByZSAubnVtYmVyIHsNCiAgICBjb2xvcjogIzMzODdDQzsNCn0NCg0KcHJlIC5wYXJhbXMsDQpwcmUgLnZhcmlhYmxlLA0KcHJlIC5jbG9qdXJlIC5hdHRyaWJ1dGUgew0KICAgIGNvbG9yOiAjM0U4N0UzOw0KfQ0KDQpwcmUgLmNzcyAudGFnLA0KcHJlIC5ydWxlcyAucHJvcGVydHksDQpwcmUgLnBzZXVkbywNCnByZSAudGV4IC5zcGVjaWFsIHsNCiAgICBjb2xvcjogI0NEQTg2OTsNCn0NCg0KcHJlIC5jc3MgLmNsYXNzIHsNCiAgICBjb2xvcjogIzlCNzAzRjsNCn0NCg0KcHJlIC5ydWxlcyAua2V5d29yZCB7DQogICAgY29sb3I6ICNDNUFGNzU7DQp9DQoNCnByZSAucnVsZXMgLnZhbHVlIHsNCiAgICBjb2xvcjogI0NGNkE0QzsNCn0NCg0KcHJlIC5jc3MgLmlkIHsNCiAgICBjb2xvcjogIzhCOThBQjsNCn0NCg0KcHJlIC5hbm5vdGF0aW9uLA0KcHJlIC5hcGFjaGUgLnNxYnJhY2tldCwNCnByZSAubmdpbnggLmJ1aWx0X2luIHsNCiAgICBjb2xvcjogIzlCODU5RDsNCn0NCg0KcHJlIC5wcmVwcm9jZXNzb3IsDQpwcmUgLnByYWdtYSB7DQogICAgY29sb3I6ICM4OTk2QTg7DQp9DQoNCnByZSAuaGV4Y29sb3IsDQpwcmUgLmNzcyAudmFsdWUgLm51bWJlciB7DQogICAgY29sb3I6ICNERDdCM0I7DQp9DQoNCnByZSAuY3NzIC5mdW5jdGlvbiB7DQogICAgY29sb3I6ICNEQUQwODU7DQp9DQoNCnByZSAuZGlmZiAuaGVhZGVyLA0KcHJlIC5jaHVuaywNCnByZSAudGV4IC5mb3JtdWxhIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEUyMjMxOw0KICAgIGNvbG9yOiAjRjhGOEY4Ow0KICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCn0NCg0KcHJlIC5kaWZmIC5jaGFuZ2Ugew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0QTQxMEQ7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuYWRkaXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTNCMjI7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuZGVsZXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0MjBFMDk7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuY29mZmVlc2NyaXB0IC5qYXZhc2NyaXB0LA0KcHJlIC5qYXZhc2NyaXB0IC54bWwsDQpwcmUgLnRleCAuZm9ybXVsYSwNCnByZSAueG1sIC5qYXZhc2NyaXB0LA0KcHJlIC54bWwgLnZic2NyaXB0LA0KcHJlIC54bWwgLmNzcywNCnByZSAueG1sIC5jZGF0YSB7DQogICAgb3BhY2l0eTogMC41Ow0KfQ0KDQpwcmUgLmdvIC50eXBlbmFtZXsNCiAgICBjb2xvcjogI2ZmYmM1NDsNCn1QSwcIw2jj3l0JAABdCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAc3RhdGljXGNzc1xsaW5nLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDojZjNmM2YzfQojaGVhZGVye2JhY2tncm91bmQ6IzAwOTNjNDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzo0MHB4IDAgNDhweCAwO2NvbG9yOiNmYmZiZmJ9I2hlYWRlciBhOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy1tb3otdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy13ZWJraXQtdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzfQojaGVhZGVyLWltZ3t3aWR0aDo5NnB4O2hlaWdodDo5NnB4O2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe2xpbmUtaGVpZ2h0Ojk0cHg7Y29sb3I6I2ZiZmJmYjtwYWRkaW5nOjA7bWFyZ2luLWxlZnQ6MjRweH0jaGVhZGVyLWggYXtjb2xvcjojZmJmYmZifQojaGVhZGVyLXN1Yntjb2xvcjojZjNmM2YzO21hcmdpbi1sZWZ0OjEuMmVtO2ZvbnQtc2l6ZToxNnB4fQojbmF2e2xpbmUtaGVpZ2h0OjkwcHh9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O21hcmdpbi1sZWZ0OjQ0cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiNmM2YzZjM7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNmb290ZXJ7cGFkZGluZzozMHB4IDQwcHg7Y29sb3I6Izk5OX0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2dvLXRvcHtib3R0b206NTBweDtyaWdodDo0MHB4O3Bvc2l0aW9uOmZpeGVkO2NvbG9yOiNmZmY7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjhweDtvcGFjaXR5Oi40fQojYXJ0aWNsZS1jb250YWluZXJ7aGVpZ2h0OjEwMCV9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHN7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjM2cHg7LW1vei1ib3JkZXItcmFkaXVzOjM2cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjM2cHg7bGluZS1oZWlnaHQ6NTZweDtmb250LXNpemU6MjRweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDo0MHB4O21hcmdpbi1sZWZ0OjhweDtib3JkZXI6NnB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHMgYXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzOmhvdmVye2JveC1zaGFkb3c6MCAwIDRweCAjNjY2Oy1tb3otYm94LXNoYWRvdzowIDAgNHB4ICM2NjY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA0cHggIzY2Nn0KI2FydGljbGUtY29udGFpbmVyIC52aWV3c3t0b3A6MTRweDtsZWZ0OjA7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6MzBweDstbW96LWJvcmRlci1yYWRpdXM6MzBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzBweDtwYWRkaW5nOjA7Ym9yZGVyOjRweCBzb2xpZCAjZmZmO2JveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy1tb3otYm94LXNoYWRvdzowIDAgMnB4ICM5OTk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggIzk5OX0KI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjExNnB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxMXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjojZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2M3B4O2xlZnQ6LTIycHh9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbiAudGl0bGV7Zm9udC1zaXplOjI4cHg7cGFkZGluZy1ib3R0b206MjRweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aW1lLWluZm97Y29sb3I6Izk5OTttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZy1ib3R0b206MjBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZDt0ZXh0LWluZGVudDoxZW07Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIGFydGljbGV7bWFyZ2luLWJvdHRvbTo1MHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWlue21hcmdpbi1sZWZ0OjB9I2FydGljbGUtY29udGFpbmVyIC5hcnRpY2xlLXNpbmdsZSAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tZXRhe3JpZ2h0OjQ0cHg7dG9wOi0zNnB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC52aWV3c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDtib3JkZXI6NnB4IHNvbGlkICNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAudGFne2NvbG9yOiM5OTl9CiNhcnRpY2xlLXBhZ2Vye21hcmdpbi1sZWZ0OjExNnB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVte21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojOTk5O3BhZGRpbmc6MTJweCAxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweH0jYXJ0aWNsZS1wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kOiMwMDc5YmN9CiNjb21tZW50e2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNjb21tZW50IC5tZXRhe3JpZ2h0Oi0yNHB4O3RvcDotMzBweH0jY29tbWVudCAubWV0YSAuY29tbWVudHN7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjB9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbTozMnB4fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnttYXJnaW4tcmlnaHQ6MThweDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHh9CiNjb21tZW50LWxpc3QgLmMtbWV0YSBwe21hcmdpbi1ib3R0b206MH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTpibG9ja30jY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9yOmhvdmVye2NvbG9yOiMwMDViOWJ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseXtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2RkZDtwYWRkaW5nOjNweCAxMHB4fSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9CiNjb21tZW50LWxpc3QgLmMtY29udGVudHtwYWRkaW5nLXRvcDo0cHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2t7Zm9udC1zaXplOjEzcHg7Y29sb3I6I2U2NDM0NjttYXJnaW4tbGVmdDoxMnB4fQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtc2hvd3ttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LXRpdGxle21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0bzttYXJnaW4tYm90dG9tOjMwcHh9I2NvbW1lbnQtZm9ybSAuYy1pbmZve3dpZHRoOjI2JX0jY29tbWVudC1mb3JtIC5jLWluZm8gLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MH0KI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjcwJX0KI2NvbW1lbnQtZm9ybSAuYy1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O21hcmdpbi10b3A6NnB4O3dpZHRoOjUwcHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b319QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDowfSAjYXJ0aWNsZS1jb250YWluZXIgLm1ldGF7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW46YmVmb3Jle2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9ICNuYXYsI2hlYWRlci1oe2xpbmUtaGVpZ2h0OjUwcHh9ICNmb290ZXIgc3BhbntmbG9hdDpub25lO3RleHQtYWxpZ246Y2VudGVyfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaHttYXJnaW4tbGVmdDowfSAjaGVhZGVyLWltZ3tkaXNwbGF5Om5vbmV9ICNjb21tZW50LWZvcm17d2lkdGg6MTAwJX0gI25hdntmbG9hdDpsZWZ0fSNuYXYgbGl7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NDRweH19ClBLBwjPw+rWnCoAAJwqAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXHN0eWxlLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9iZy5wbmciKSByZXBlYXR9CiNoZWFkZXJ7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9oZWFkZXIuZ2lmIikgcmVwZWF0ICM0YzcyOTg7bWluLXdpZHRoOjEyMHB4O3BhZGRpbmc6MzBweCAwO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjUwcHg7LW1vei1ib3JkZXItcmFkaXVzOjUwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwcHh9CiNoZWFkZXItaHtwYWRkaW5nLXRvcDoyNHB4O2ZvbnQtc2l6ZTozMnB4fSNoZWFkZXItaCBhe2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0KI25hdntoZWlnaHQ6NTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym94LXNoYWRvdzowIDAgMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O3BhZGRpbmc6MCAxOHB4fSNuYXYgbGkgYXtmb250LXNpemU6MTZweDtjb2xvcjojMzMzO3BhZGRpbmc6MCAzMnB4O2Rpc3BsYXk6YmxvY2t9I25hdiBsaSBhOmhvdmVye2JvcmRlci1ib3R0b206NHB4IHNvbGlkICMwMDc5YmN9CiNuYXYuZml4ZWR7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTt0b3A6MH0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2Zvb3Rlcntjb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6IzFjMjQyOTtwYWRkaW5nOjI0cHggMH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsZXR0ZXItc3BhY2luZzoxcHh9I2Zvb3RlciBwIGF7Y29sb3I6I2NjYzttYXJnaW46MCAxNnB4fSNmb290ZXIgcCBhOmhvdmVye2NvbG9yOiNmYmZiZmJ9CiNmb290ZXIgcCBhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXt3aWR0aDoxMDhweDtsaW5lLWhlaWdodDoyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnZpZXdzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnRpbWV7Y29sb3I6I2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIGF7Y29sb3I6I2ZmZn0jYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTQwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZXtwYWRkaW5nOjhweCAxNnB4O2JhY2tncm91bmQtY29sb3I6IzRjNzI5ODtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjJweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoycHh9I2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxlIGF7Y29sb3I6I2VlZX0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxOHB4IDI0cHggMjRweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZve21hcmdpbi1ib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoycHg7Y29sb3I6Izk5OX0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLmZhe21hcmdpbi1yaWdodDo4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuc2hhcmUgLmZhe21hcmdpbi1yaWdodDowfQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+KntwYWRkaW5nOjZweCAxOHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+c3Bhbntib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmlnaHR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJpZ2h0Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZHtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC50aW1lLCNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAudmlld3Mgc3Bhbntmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjQ4cHh9CiNjb21tZW50e21hcmdpbi10b3A6LTI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjI0cHg7YmFja2dyb3VuZDojZmZmfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0b30jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxOHB4O3BhZGRpbmctYm90dG9tOjE4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1yZXBseXtjb2xvcjojOTk5fSNjb21tZW50LWxpc3QgLmMtcmVwbHk6aG92ZXJ7Y29sb3I6IzMzM30KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3J7Zm9udC1zaXplOjEzcHh9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhe21hcmdpbi1yaWdodDo2cHh9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YS5sZWZ0e2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI25hdiBsaXtwYWRkaW5nOjAgMTBweH0gI2hlYWRlci1pbWd7ZmxvYXQ6bGVmdDt3aWR0aDo2NHB4O2hlaWdodDo2NHB4fSAjaGVhZGVyLWh7cGFkZGluZzoxN3B4IDA7Zm9udC1zaXplOjI0cHh9ICNoZWFkZXItc3Vie2Rpc3BsYXk6bm9uZX0gI2FydGljbGUtY29udGFpbmVyIC50YWcsI2FydGljbGUtY29udGFpbmVyIC50aW1le2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjY29tbWVudC1saXN0IC5jLWF2YXRhcntkaXNwbGF5Om5vbmV9fQpQSwcIqnrsLo0oAACNKAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGZhdmljb24uaWNvAAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAAAACzfgfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N+B9uzfgfbs34H27N+B9uzfgfbs34H27N9B9uzfgfbs34H27N9B9uzfgfbs34H27N+B9uzfgfbsnwH1q96B8etfhittZNKkLqCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qDDf+6hhf/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+6gQj/uYEI/7mCCP+6gQj/uoII/7qCCP+5gQj/uYEI/7mCCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qCCP+5gQj/uYEI/7qBCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6ggj/uoEI/7qCCP+6ggj/uoEI/7qCCP+6gQj/uoEI/7mBCP+5gQj/uYIH/7mCB/+5ggf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/vIQF/7yEBf+7gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8gwX/vIQF/7yEBf+8gwX/vIQG/7yEBv/AhwP/wIYD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIcE/8CHBP/AhgP/wIYC/8WJAv/FiQH/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WKAv/FiQH/xYoD/8ePDv/Mmif/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yZMX/9avU//hwHX/6dKf//Pnzf/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uNAP/LoD3/8uvd/v79+v7//////////sqOAP7KjQD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44B/8uOAP/LjgD/y40A/8qOAP/LjgD/y44A/8uOAf/LjgH/y44A/8uOAP/LjgD/y44A/8uOAf/KjQD/y48G/9i5c//6+fX+/v///v7+/v/+/v7+yo4A/sqNAP/LjgD/y44A/8qOAP/KjgD/yo4A/8qOAP/LjgD/y44A/8qOAP/LjgD/y44A/8qNAP/LjQD/y44B/8mNAf/HjQj/yo4D/8qNAP/LjQD/yo0A/8qNAP/KjQD/y48C/9CaG//fvnH/9e/g//7+/v7////+/v7+//7+/v7LjgH6y44A/8qNAP/LjgD/y44B/8qOAP/KjgD/yo4A/8uOAP/KjgD/yo4A/8uOAP/LjgH/yo4A/8qNAP/JjAD/x5o0/8Gref+oi0j/zaZO/8WYMP/PnzH/1qY5/9qwT//iwnf/8N+5//v48v/+/v///v7+/////////////v7+/7ySMr67ihn/zJIM/8qOAP/KjQD/yo0A/8qNAP/KjgD/yo4A/8qOAP/KjQD/yo0A/8qNAP/LjgH/0JkY/8mjTf/Qxq3/5eXm/6alo//p5t//xL6x/+Hayf758+P++/bs//38+f/////+/////v7+/v/+/v7////////////+/v7/lZONlJmPef/mzpn/4L1q/9mtSP/UozL/0Zsf/8+WE//PlRH/z5UR/8+XF//Tnyj/2atD/+G/cf/t27P/0MzE/8PDw/7q6ur+tra2/ujo6P60tLX+2tvb/v39/f7+///+/v7+//////7////+/v7+//7+/v/////+/////v////6XlpaVkpKT//b29f/9+/f/+fTn//bt1//y5MX/8N+4/+7csv/v3LP/8eG7//Xpzv/58+T/9/Xy/8nJyv+vr6//paSk/729vf+UlJT/ubm5/6enp/+xsbH/0dHR//z8/P///////v7+//7+/v/+/v7//v7+/////////////v7+/6mpqZiRkZH/8vLy/////v/+/v7//////////////////v7+//7+/v/+/v///v/////////h4eD/urm5/+/v7//s7Oz/19fX/8bGxv/e3t7/9fX1/+rq6/+4uLj/8fHx///////+/v7+//////7+/v/+/v7////////////+/v7/m5ubZ4ODg/Dt7e3///////////7///7+/v7+//7+/v7//v7+/v7+/vn5+f729vb++vr6/ufn6P+3t7f/7e3t//j4+P7d3d3+2NjY/vLy8v7+/v7+2NjY/r6+vv74+Pj+//////////7////+/v7+//7+/v/////+/////v////41NTUjcXFx2Obm5v/////+/////v/////+/v7//////+/v7/7Q0ND/vr6+/rq6uv6+vr7/0dHR/s/Pz/6srKz/Z2dn/isrK/8jIyP/W1tb/6urq/+9vb3+5OTk/uXl5f/a2tr/39/f/vDw8P79/f3//////v7+/v7//////////o2NjSd1dXXa29vb//////7////+//////7+/v/h4eH/tbW1/srKyv/j4+P+5+fn/uPj4//Jycn+vr6+/re3t/8sLCz+AAAA/wAAAP8GBgb/hoaG/9fX1/6+vr7+vLy8/8HBwf++vr7+ubm5/sfHx//x8fH+/////v/////////+4ODgJISEhNnFxcX///////////7/////5+fn/7W1tf/k5OT///////////7//////////v7+/v7g4OD/tra2/66urv9ubm7/WVlZ/4ODg/+7u7v/vr6+/+Tk5P76+vr//f39//z8/P7w8PD/ysrK/7e3t//w8PD///////////+Hh4eAXV1d8aOjo////////////vv7+//BwcH/wcHB/62trf/Gxsb/+vr6///////+/v7//v7+/v/////W1tb/xMTE//b29v/29vb/3d3d/76+vv/k5OT/8fHx//7+/v/+/v7//v7+/v/////9/f3/zc3N/8PDw//7+/v//////4aGhviWlpb/i4uL//f39///////7u7u/6urq/9SUlL/ExMT/2dnZ//R0dH//f39//7+/v////////////Ly8v+4uLj/7+/v//r6+v/AwMD/nJyc/1RUVP9ubm7/3Nzc//7+/v/////+/v7+///////09PT/t7e3/+vr6///////7+/v/+zs7P98fHz/2NjY/v////7n5+f/k5OT/xYWFv8FBQX/Nzc3/5mZmf/7+/v//v7+//////7/////+vr6/8PDw//n5+f/8/Pz/6ysrP85OTn/AAAA/0VFRf6YmJj/9fX1//////7+/v7///////39/f/ExMT/3t7e////////////0dHR/zMzM/+Xl5f//////+fn5/+zs7P/aGho/xcXF/86Ojr/yMjI//7+/v/+/v7////////////4+Pj/vb29/+vr6//w8PD/s7Oz/0xMTP8AAAD/Dg4O/oKCgv/6+vr//////v7+/v///////v7+/8fHx//c3Nz///////////+4uLj/GRkZ/z8/P/7f39/+9vb2/r29vf/b29v+xMTE/tvb2//9/f3+/v7+/v////7////+/////uXl5f65ubn+9vb2//Pz8/++vr7/wcHB/nJycv5+fn7+4ODg///////+/v7+/v7+/v/////4+Pj+vLy8/ubm5v/////+/////vHx8f+ysrL/hYWF/ouLi/709PT/1NTU/729vf/5+fn+//////7+/v7////+//////////729vb+vb29/9bW1v///////f39/8fHx//Ozs7/+fn5/vz8/P7///////////////7////+/////9/f3/65ubn++Pj4/+7u7v7Jycn/+Pj4/v/////y8vL+iIiI/pubm//09PT/yMjI/729vf7n5+f/+vr6/vz8/P76+vr/5+fn/r29vf7Jycn/+vr6////////////8PDw/7e3t//Y2Nj+/f39/v///////////////v////7p6en/t7e3/uLi4v/x8fH/jo6O/nNzc+WQkJD+o6Oj/6CgoP5+fn76Tk5O4ZycnPvh4eH/1tbW/r29vf/AwMD/wcHB/76+vv+5ubn+1tbW/vr6+v//////////////////////6enp/7m5uf7Dw8P+39/f/+jo6P/k5OT+zMzM/7a2tv/d3d3+6urq/4ODg/9wcHD/q6urP3BwcGZFRUVpSkpKZ4WFhV+MjIw4bW1tm3d3d+utra3/2NjY/+Tk5P7l5eX/6enp//b29v7////////////////+/v7/////////////////9fX1/9bW1v/CwsL/vb29/8HBwf/R0dH/5OTk/8bGxv99fX3zY2Njzmtra9IREREA////AP///wC8vLwAAAAAAAAAAADOzs4LdnZ2RW1tbaN7e3vrmZmZ/7e3t//X19f/6Ojo//Dw8P/29vb/+vr6//39/f////////////////////////////f39//q6ur/3d3d/re3t/+Ojo7+fHx84IeHh3K8vLwXcHBwHcPDwwCAgIAAICAgAD8/PwCYmJgAxsbGAJeXlwH///8AysrKDampqVN9fX2OcHBwxXt7e/d3d3f1gYGB+ZGRkfyjo6P7s7Oz+7+/v/vFxcX7xsbG+8DAwPuzs7P7nJyc/IGBgfp4eHj6cXFxzImJiYu+vr48////BaqqqgH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAAAAAABQSwcIqXMT8L4QAAC+EAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAc3RhdGljXGltZy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAc3RhdGljXGltZ1xiZy5wbmeJUE5HDQoaCgAAAA1JSERSAAAAlgAAAJYIAgAAALNj5rUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI2RTRGQ0JFNTVBQUUyMTE5NzAwQjU5OUUyOTNFQTA3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA5NzBGM0NFQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA5NzBGM0NEQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkFBQkJFQTE4RkI1RTIxMUJCRTNBQkY0MzkzOEFFQkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7MjgrrAAAoI0lEQVR42uzd7ZJkR5GtYXVSwP1fKCMQzBwDhHR2aXU/9SoKww5Dbh2Eqn60VWdl7ozwiPCP5cs9Pn399TePx+Nvf/vbp0+fvvvuu1//+td//etfX15ert9/9atfffvtt9dfr99/85vf/OUvf7l+/+qrr/bf6yPXX/fL9dm97frlevH6+PUQL17/7nXv2ZOvX66v2+t78/X7vvf777+/Hnu9sjdc/90brhevv16/XK9cX3H9vmFvYNdfr/fvT9cr11+/++Hn+uX60/X6XtyT98F96vr3+uD1y/XKNfjrndcrvnRjvl7xkevFSWNvuP7dmwntesj1huudE8Uefpec//CHP00EG4ShXL9sthvH3jO5TxbXv3vEZrvvuD5y/fcaxPVfs90b9inj/uqHnwndwycmw9jH9+aN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w3a6wnOpCa4gdQeJQJeeiFsXYlc2FYcbyN0V27XTaTOuRTqGnrcDXNUp4qRkMkYWjkUv7LUnjkZBT5fz/xVgAMwCMiX3lhRvAAAAAElFTkSuQmCCUEsHCJuj1O/zKwAA8ysAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHN0YXRpY1xpbWdcaGVhZGVyLmdpZkdJRjg5YWQAZACzAABNdJpJbZJOdZxIbJBJbpJMc5lKb5RMcphKcJVLcZYAAAAAAAAAAAAAAAAAAAAAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjAxNUFBQzE1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjAxNUFBQzI1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFCRjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgc3RSZWY6ZG9jdW1lbnRJRD0i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Ow0KICAgIHRvcEJ1dHRvbigpOw0KICAgIHJlbmRlck1hcmtkb3duKCk7DQogICAgaW5pdENvbW1lbnQoKTsNCn0pOw0KDQpmdW5jdGlvbiBmaXhIZWFkZXIoKSB7DQogICAgdmFyICRuYXYgPSAkKCcjbmF2Jyk7DQogICAgdmFyIHRvcCA9ICRuYXYub2Zmc2V0KCkudG9wOw0KICAgIGNvbnNvbGUubG9nKHRvcCk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkbmF2LmFkZENsYXNzKCJmaXhlZCIpLnJlbW92ZUNsYXNzKCJ0ZXh0LWNlbnRlciIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG5hdi5yZW1vdmVDbGFzcygiZml4ZWQiKS5hZGRDbGFzcygidGV4dC1jZW50ZXIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiB0b3BCdXR0b24oKSB7DQogICAgdmFyIHRvcCA9ICQoJyNuYXYnKS5vZmZzZXQoKS50b3A7DQogICAgdmFyICR0b3AgPSAkKCcjZ28tdG9wJyk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkdG9wLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdG9wLmFkZENsYXNzKCdoaWRlJyk7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkdG9wLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiAwfSwgNTAwKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pDQp9DQoNCmZ1bmN0aW9uIHJlbmRlck1hcmtkb3duKCkgew0KICAgIHZhciAkbWQgPSAkKCcubWFya2Rvd24nKTsNCiAgICAkbWQuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAkKGl0ZW0pLmh0bWwobWFya2VkKCQoaXRlbSkuaHRtbCgpLnJlcGxhY2UoLyZndDsvZywgJz4nKSkpOw0KICAgIH0pOw0KICAgIHZhciBjb2RlID0gJG1kLmZpbmQoJ3ByZSBjb2RlJyk7DQogICAgaWYgKGNvZGUubGVuZ3RoKSB7DQogICAgICAgICQoIjxsaW5rPiIpLmF0dHIoeyByZWw6ICJzdHlsZXNoZWV0IiwgdHlwZTogInRleHQvY3NzIiwgaHJlZjogIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MifSkuYXBwZW5kVG8oImhlYWQiKTsNCiAgICAgICAgJC5nZXRTY3JpcHQoIi9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBjb2RlLmVhY2goZnVuY3Rpb24gKGksIGl0ZW0pIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGl0ZW0pDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBpbml0Q29tbWVudCgpIHsNCiAgICB2YXIgJGxpc3QgPSAkKCcjY29tbWVudC1saXN0Jyk7DQogICAgaWYgKCEkbGlzdC5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpIHsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXV0aG9yJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF1dGhvciIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtZW1haWwiKSk7DQogICAgICAgICQoJyNjb21tZW50LXVybCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC11cmwiKSk7DQogICAgICAgICQoJyNjb21tZW50LWF2YXRhcicpLmF0dHIoInNyYyIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF2YXRhciIpKTsNCiAgICAgICAgJCgnLmMtYXZhdGFyJykucmVtb3ZlQ2xhc3MoIm51bGwiKTsNCiAgICB9DQogICAgJCgnI2NvbW1lbnQtY29udGVudCcpLm9uKCJmb2N1cyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKCQoJy5jLWF2YXRhcicpLmhhc0NsYXNzKCJudWxsIikpIHsNCiAgICAgICAgICAgICQoJy5jLWF2YXRhci1maWVsZCcpLnJlbW92ZSgpOw0KICAgICAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJCgnLm5vdC1tZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICQoJy5jLWluZm8tZmllbGRzJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LXNob3cnKS5vbigiY2xpY2siLCAiLmVuYWJsZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgiI2NvbW1lbnQtc2hvdyIpLnJlbW92ZSgpOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICB9KTsNCiAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdXRob3IiLCAkKCcjY29tbWVudC1hdXRob3InKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1lbWFpbCIsICQoJyNjb21tZW50LWVtYWlsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtdXJsIiwgJCgnI2NvbW1lbnQtdXJsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtYXZhdGFyIiwganNvbi5jb21tZW50LmF2YXRhcik7DQogICAgICAgICAgICB2YXIgdHBsID0gJCgkKCcjY29tbWVudC10cGwnKS5odG1sKCkpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF2YXRhciIpLmF0dHIoInNyYyIsIGpzb24uY29tbWVudC5hdmF0YXIpLmF0dHIoImFsdCIsIGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF1dGhvciIpLmF0dHIoImhyZWYiLCBqc29uLmNvbW1lbnQudXJsKS50ZXh0KGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXJlcGx5IikuYXR0cigicmVsIiwganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIHRwbC5maW5kKCIuYy1jb250ZW50IikuaHRtbChqc29uLmNvbW1lbnQuY29udGVudCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnBhcmVudF9tZCkgew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikuaHRtbChtYXJrZWQoanNvbi5jb21tZW50LnBhcmVudF9tZCkpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtcC1tZCIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHBsLmF0dHIoImlkIiwgImNvbW1lbnQtIiArIGpzb24uY29tbWVudC5pZCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnN0YXR1cyA9PSAiYXBwcm92ZWQiKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbGlzdC5hcHBlbmQodHBsKTsNCiAgICAgICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhbGVydCgi5o+Q5Lqk5aSx6LSlISIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJGxpc3Qub24oImNsaWNrIiwgIi5jLXJlcGx5IiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgdmFyIHBjID0gJCgnI2NvbW1lbnQtJyArIGlkKTsNCiAgICAgICAgdmFyIG1kID0gIj4gQCIgKyBwYy5maW5kKCIuYy1hdXRob3IiKS50ZXh0KCkgKyAiXG5cbiI7DQogICAgICAgIG1kICs9ICI+ICIgKyBwYy5maW5kKCIuYy1jb250ZW50IikuaHRtbCgpICsgIlxuIjsNCiAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLmJlZm9yZSgnPGRpdiBjbGFzcz0icmVwbHktbWQgbWFya2Rvd24iPicgKyBtYXJrZWQobWQpICsgJzwvZGl2PicpOw0KICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICBpZiAoJCgnI2NvbW1lbnQtc2hvdycpLmxlbmd0aCkgew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtc2hvdyAuZW5hYmxlJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICAgICAgfQ0KICAgICAgICAkKCcuY2FuY2VsLXJlcGx5Jykuc2hvdygpOw0KICAgICAgICB2YXIgdG9wID0gJCgnI2NvbW1lbnQtZm9ybScpLm9mZnNldCgpLnRvcDsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiB0b3B9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnLmNhbmNlbC1yZXBseScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlcGx5LW1kJykucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCn0NClBLBwge4R5ydRIAAHUSAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcanNcdXBsb2FkLmpzZnVuY3Rpb24gaW5pdFVwbG9hZChwKSB7DQogICAgJCgnI2F0dGFjaC1zaG93Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLnRyaWdnZXIoImNsaWNrIik7DQogICAgfSk7DQogICAgJCgnI2F0dGFjaC11cGxvYWQnKS5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoY29uZmlybSgi56uL5Y2z5LiK5LygPyIpKSB7DQogICAgICAgICAgICB2YXIgYmFyID0gJCgnPHAgY2xhc3M9ImZpbGUtcHJvZ3Jlc3MgaW5saW5lLWJsb2NrIj4wJTwvcD4nKTsNCiAgICAgICAgICAgICQoJyNhdHRhY2gtZm9ybScpLmFqYXhTdWJtaXQoew0KICAgICAgICAgICAgICAgICJiZWZvcmVTdWJtaXQiOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQocCkuYmVmb3JlKGJhcik7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAidXBsb2FkUHJvZ3Jlc3MiOiBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCB0b3RhbCwgcGVyY2VudENvbXBsZXRlKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBwZXJjZW50VmFsID0gcGVyY2VudENvbXBsZXRlICsgJyUnOw0KICAgICAgICAgICAgICAgICAgICBiYXIuY3NzKCJ3aWR0aCIsIHBlcmNlbnRWYWwpLmh0bWwocGVyY2VudFZhbCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKGpzb24ubXNnKS5hZGRDbGFzcygiZXJyIik7DQogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXIucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDAwKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKCIvIiArIGpzb24uZmlsZS5VcmwgKyAiJm5ic3A7Jm5ic3A7Jm5ic3A7KEAiICsganNvbi5maWxlLk5hbWUgKyAiKSIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudmFsKCIiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICQodGhpcykudmFsKCIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfVBLBwiIiRf79gQAAPYEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcbGliL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAACEAAABzdGF0aWNcbGliXGNvZGVtaXJyb3ItbW9kZS5taW4uanMhZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9L14oXHMqKShbKistXXwoXGQrKVwuKShccyopLyxlPSIqKy0iO0NvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0PWZ1bmN0aW9uKHIpe3ZhciBuLGk9ci5nZXRDdXJzb3IoKSxvPXIuZ2V0U3RhdGVBZnRlcihpLmxpbmUpLmxpc3QhPT0hMTtpZighb3x8IShuPXIuZ2V0TGluZShpLmxpbmUpLm1hdGNoKHQpKSlyZXR1cm4gci5leGVjQ29tbWFuZCgibmV3bGluZUFuZEluZGVudCIpLHZvaWQgMDt2YXIgbD1uWzFdLGE9bls0XSxzPWUuaW5kZXhPZihuWzJdKT49MD9uWzJdOnBhcnNlSW50KG5bM10sMTApKzErIi4iO3IucmVwbGFjZVNlbGVjdGlvbigiXG4iK2wrcythLCJlbmQiKX19KCksQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4gZS5mPWUuaW5saW5lPXIscih0LGUpfWZ1bmN0aW9uIG4odCxlLHIpe3JldHVybiBlLmY9ZS5ibG9jaz1yLHIodCxlKX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LmxpbmtUaXRsZT0hMSx0LmVtPSExLHQuc3Ryb25nPSExLHQucXVvdGU9MCxnfHx0LmYhPWx8fCh0LmY9Yyx0LmJsb2NrPW8pLHQudHJhaWxpbmdTcGFjZT0wLHQudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsdC50aGlzTGluZUhhc0NvbnRlbnQ9ITEsbnVsbH1mdW5jdGlvbiBvKHQsaSl7dmFyIG89aS5saXN0IT09ITE7aS5saXN0IT09ITEmJmkuaW5kZW50YXRpb25EaWZmPj0wPyhpLmluZGVudGF0aW9uRGlmZjw0JiYoaS5pbmRlbnRhdGlvbi09aS5pbmRlbnRhdGlvbkRpZmYpLGkubGlzdD1udWxsKTppLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbj4wPyhpLmxpc3Q9bnVsbCxpLmxpc3REZXB0aD1NYXRoLmZsb29yKGkuaW5kZW50YXRpb24vNCkpOmkubGlzdCE9PSExJiYoaS5saXN0PSExLGkubGlzdERlcHRoPTApO3ZhciBsPW51bGw7aWYoaS5pbmRlbnRhdGlvbkRpZmY+PTQpcmV0dXJuIGkuaW5kZW50YXRpb24tPTQsdC5za2lwVG9FbmQoKSxrO2lmKHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDtpZihsPXQubWF0Y2goUikpaS5oZWFkZXI9bFswXS5sZW5ndGg8PTY/bFswXS5sZW5ndGg6NjtlbHNlIGlmKGkucHJldkxpbmVIYXNDb250ZW50JiYobD10Lm1hdGNoKEcpKSlpLmhlYWRlcj0iPSI9PWxbMF0uY2hhckF0KDApPzE6MjtlbHNlIGlmKHQuZWF0KCI+IikpZm9yKGkuaW5kZW50YXRpb24rKyxpLnF1b3RlPTEsdC5lYXRTcGFjZSgpO3QuZWF0KCI+Iik7KXQuZWF0U3BhY2UoKSxpLnF1b3RlKys7ZWxzZXtpZigiWyI9PT10LnBlZWsoKSlyZXR1cm4gcih0LGksaCk7aWYodC5tYXRjaChJLCEwKSlyZXR1cm4gQTtpZihpLnByZXZMaW5lSGFzQ29udGVudCYmIW98fCF0Lm1hdGNoKFAsITApJiYhdC5tYXRjaChGLCEwKSl7aWYoZS5mZW5jZWRDb2RlQmxvY2tzJiZ0Lm1hdGNoKC9eYGBgKFtcdysjXSopLywhMCkpcmV0dXJuIGkubG9jYWxNb2RlPXgoUmVnRXhwLiQxKSxpLmxvY2FsTW9kZSYmKGkubG9jYWxTdGF0ZT1pLmxvY2FsTW9kZS5zdGFydFN0YXRlKCkpLG4odCxpLGEpLGt9ZWxzZSBpLmluZGVudGF0aW9uKz00LGkubGlzdD0hMCxpLmxpc3REZXB0aCsrLGUudGFza0xpc3RzJiZ0Lm1hdGNoKEIsITEpJiYoaS50YXNrTGlzdD0hMCl9cmV0dXJuIHIodCxpLGkuaW5saW5lKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9di50b2tlbih0LGUuaHRtbFN0YXRlKTtyZXR1cm4gZyYmInRhZyI9PT1yJiYib3BlblRhZyIhPT1lLmh0bWxTdGF0ZS50eXBlJiYhZS5odG1sU3RhdGUuY29udGV4dCYmKGUuZj1jLGUuYmxvY2s9byksZS5tZF9pbnNpZGUmJi0xIT10LmN1cnJlbnQoKS5pbmRleE9mKCI+IikmJihlLmY9YyxlLmJsb2NrPW8sZS5odG1sU3RhdGUuY29udGV4dD12b2lkIDApLHJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LnNvbCgpJiZ0Lm1hdGNoKC9eYGBgLywhMCk/KGUubG9jYWxNb2RlPWUubG9jYWxTdGF0ZT1udWxsLGUuZj1jLGUuYmxvY2s9byxrKTplLmxvY2FsTW9kZT9lLmxvY2FsTW9kZS50b2tlbih0LGUubG9jYWxTdGF0ZSk6KHQuc2tpcFRvRW5kKCksayl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1bXTtpZih0LnRhc2tPcGVuKXJldHVybiJtZXRhIjtpZih0LnRhc2tDbG9zZWQpcmV0dXJuInByb3BlcnR5IjtpZih0LnN0cm9uZyYmZS5wdXNoKHopLHQuZW0mJmUucHVzaChFKSx0LmxpbmtUZXh0JiZlLnB1c2goTyksdC5jb2RlJiZlLnB1c2goayksdC5oZWFkZXImJihlLnB1c2goQyksZS5wdXNoKEMrdC5oZWFkZXIpKSx0LnF1b3RlJiZlLnB1c2godC5xdW90ZSUyP3c6TCksdC5saXN0IT09ITEpe3ZhciByPSh0Lmxpc3REZXB0aC0xKSUzO3I/MT09PXI/ZS5wdXNoKE0pOmUucHVzaChUKTplLnB1c2goUyl9cmV0dXJuIHQudHJhaWxpbmdTcGFjZU5ld0xpbmU/ZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS1uZXctbGluZSIpOnQudHJhaWxpbmdTcGFjZSYmZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS0iKyh0LnRyYWlsaW5nU3BhY2UlMj8iYSI6ImIiKSksZS5sZW5ndGg/ZS5qb2luKCIgIik6bnVsbH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQubWF0Y2goXywhMCk/cyhlKTp2b2lkIDB9ZnVuY3Rpb24gYyh0LGkpe3ZhciBvPWkudGV4dCh0LGkpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgbylyZXR1cm4gbztpZihpLmxpc3QpcmV0dXJuIGkubGlzdD1udWxsLHMoaSk7aWYoaS50YXNrTGlzdCl7dmFyIGE9IngiIT09dC5tYXRjaChCLCEwKVsxXTtyZXR1cm4gYT9pLnRhc2tPcGVuPSEwOmkudGFza0Nsb3NlZD0hMCxpLnRhc2tMaXN0PSExLHMoaSl9aS50YXNrT3Blbj0hMSxpLnRhc2tDbG9zZWQ9ITE7dmFyIHU9dC5zb2woKSxjPXQubmV4dCgpO2lmKCJcXCI9PT1jKXJldHVybiB0Lm5leHQoKSxzKGkpO2lmKGkubGlua1RpdGxlKXtpLmxpbmtUaXRsZT0hMTt2YXIgaD1jOyIoIj09PWMmJihoPSIpIiksaD0oaCsiIikucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csIlxcJDEiKTt2YXIgZD0iXlxccyooPzpbXiIraCsiXFxcXF0rfFxcXFxcXFxcfFxcXFwuKSIraDtpZih0Lm1hdGNoKG5ldyBSZWdFeHAoZCksITApKXJldHVybiBXfWlmKCJgIj09PWMpe3ZhciBwPXMoaSksZz10LnBvczt0LmVhdFdoaWxlKCJgIik7dmFyIHY9MSt0LnBvcy1nO3JldHVybiBpLmNvZGU/dj09PWI/KGkuY29kZT0hMSxwKTpzKGkpOihiPXYsaS5jb2RlPSEwLHMoaSkpfWlmKGkuY29kZSlyZXR1cm4gcyhpKTtpZigiISI9PT1jJiZ0Lm1hdGNoKC9cW1teXF1dKlxdID8oPzpcKHxcWykvLCExKSlyZXR1cm4gdC5tYXRjaCgvXFtbXlxdXSpcXS8pLGkuaW5saW5lPWkuZj1mLE47aWYoIlsiPT09YyYmdC5tYXRjaCgvLipcXShcKHwgP1xbKS8sITEpKXJldHVybiBpLmxpbmtUZXh0PSEwLHMoaSk7aWYoIl0iPT09YyYmaS5saW5rVGV4dCl7dmFyIHk9cyhpKTtyZXR1cm4gaS5saW5rVGV4dD0hMSxpLmlubGluZT1pLmY9Zix5fWlmKCI8Ij09PWMmJnQubWF0Y2goL14oaHR0cHM/fGZ0cHM/KTpcL1wvKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEgsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXltePiBcXF0rQCg/OlteXFw+XXxcXC4pKz4vLCExKSlyZXR1cm4gcih0LGksbShELCI+IikpO2lmKCI8Ij09PWMmJnQubWF0Y2goL15cdy8sITEpKXtpZigtMSE9dC5zdHJpbmcuaW5kZXhPZigiPiIpKXt2YXIgeD10LnN0cmluZy5zdWJzdHJpbmcoMSx0LnN0cmluZy5pbmRleE9mKCI+IikpOy9tYXJrZG93blxzKj1ccyooJ3wiKXswLDF9MSgnfCIpezAsMX0vLnRlc3QoeCkmJihpLm1kX2luc2lkZT0hMCl9cmV0dXJuIHQuYmFja1VwKDEpLG4odCxpLGwpfWlmKCI8Ij09PWMmJnQubWF0Y2goL15cL1x3Kj8+LykpcmV0dXJuIGkubWRfaW5zaWRlPSExLCJ0YWciO3ZhciBDPSExO2lmKCFlLnVuZGVyc2NvcmVzQnJlYWtXb3JkcyYmIl8iPT09YyYmIl8iIT09dC5wZWVrKCkmJnQubWF0Y2goLyhcdykvLCExKSl7dmFyIGs9dC5wb3MtMjtpZihrPj0wKXt2YXIgdz10LnN0cmluZy5jaGFyQXQoayk7Il8iIT09dyYmdy5tYXRjaCgvKFx3KS8sITEpJiYoQz0hMCl9fXZhciBwPXMoaSk7aWYoIioiPT09Y3x8Il8iPT09YyYmIUMpaWYodSYmIiAiPT09dC5wZWVrKCkpO2Vsc2V7aWYoaS5zdHJvbmc9PT1jJiZ0LmVhdChjKSlyZXR1cm4gaS5zdHJvbmc9ITEscDtpZighaS5zdHJvbmcmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz1jLHMoaSk7aWYoaS5lbT09PWMpcmV0dXJuIGkuZW09ITEscDtpZighaS5lbSlyZXR1cm4gaS5lbT1jLHMoaSl9ZWxzZSBpZigiICI9PT1jJiYodC5lYXQoIioiKXx8dC5lYXQoIl8iKSkpe2lmKCIgIj09PXQucGVlaygpKXJldHVybiBzKGkpO3QuYmFja1VwKDEpfXJldHVybiIgIj09PWMmJih0Lm1hdGNoKC8gKyQvLCExKT9pLnRyYWlsaW5nU3BhY2UrKzppLnRyYWlsaW5nU3BhY2UmJihpLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSEwKSkscyhpKX1mdW5jdGlvbiBmKHQsZSl7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3ZhciBuPXQubmV4dCgpO3JldHVybiIoIj09PW58fCJbIj09PW4/cih0LGUsbShXLCIoIj09PW4/IikiOiJdIikpOiJlcnJvciJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0Lm1hdGNoKC9eW15cXV0qXF06LywhMCk/KGUuZj1kLE8pOnIodCxlLGMpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdC5lYXRTcGFjZSgpP251bGw6KHQubWF0Y2goL15bXlxzXSsvLCEwKSx2b2lkIDA9PT10LnBlZWsoKT9lLmxpbmtUaXRsZT0hMDp0Lm1hdGNoKC9eKD86XHMrKD86Iig/OlteIlxcXXxcXFxcfFxcLikrInwnKD86W14nXFxdfFxcXFx8XFwuKSsnfFwoKD86W14pXFxdfFxcXFx8XFwuKStcKSkpPy8sITApLGUuZj1lLmlubGluZT1jLFcpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIFZbdF18fCh0PSh0KyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpLFZbdF09bmV3IFJlZ0V4cCgiXig/OlteXFxcXF18XFxcXC4pKj8oIit0KyIpIikpLFZbdF19ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIHI9cnx8YyxmdW5jdGlvbihuLGkpe3JldHVybiBuLm1hdGNoKHAoZSkpLGkuaW5saW5lPWkuZj1yLHR9fXZhciBnPUNvZGVNaXJyb3IubW9kZXMuaGFzT3duUHJvcGVydHkoInhtbCIpLHY9Q29kZU1pcnJvci5nZXRNb2RlKHQsZz97bmFtZToieG1sIixodG1sTW9kZTohMH06InRleHQvcGxhaW4iKSx5PXtodG1sOiJodG1sbWl4ZWQiLGpzOiJqYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uIixjOiJ0ZXh0L3gtY3NyYyIsImMrKyI6InRleHQveC1jKytzcmMiLGphdmE6InRleHQveC1qYXZhIixjc2hhcnA6InRleHQveC1jc2hhcnAiLCJjIyI6InRleHQveC1jc2hhcnAiLHNjYWxhOiJ0ZXh0L3gtc2NhbGEifSx4PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9e30sbz1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5tb2RlcylDb2RlTWlycm9yLm1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZvLnB1c2gobCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyluW29bZV1dPW9bZV07dmFyIGE9W107Zm9yKHZhciBsIGluIENvZGVNaXJyb3IubWltZU1vZGVzKUNvZGVNaXJyb3IubWltZU1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZhLnB1c2goe21pbWU6bCxtb2RlOkNvZGVNaXJyb3IubWltZU1vZGVzW2xdfSk7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylyPWFbZV0ubWltZSxpW3JdPWFbZV0ubWltZTtmb3IodmFyIHMgaW4geSkoeVtzXWluIG58fHlbc11pbiBpKSYmKG5bc109eVtzXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdP0NvZGVNaXJyb3IuZ2V0TW9kZSh0LG5bZV0pOm51bGx9fSgpO3ZvaWQgMD09PWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYoZS51bmRlcnNjb3Jlc0JyZWFrV29yZHM9ITApLHZvaWQgMD09PWUuZmVuY2VkQ29kZUJsb2NrcyYmKGUuZmVuY2VkQ29kZUJsb2Nrcz0hMSksdm9pZCAwPT09ZS50YXNrTGlzdHMmJihlLnRhc2tMaXN0cz0hMSk7dmFyIGI9MCxDPSJoZWFkZXIiLGs9ImNvbW1lbnQiLHc9ImF0b20iLEw9Im51bWJlciIsUz0idmFyaWFibGUtMiIsTT0idmFyaWFibGUtMyIsVD0ia2V5d29yZCIsQT0iaHIiLE49InRhZyIsSD0ibGluayIsRD0ibGluayIsTz0ibGluayIsVz0ic3RyaW5nIixFPSJlbSIsej0ic3Ryb25nIixJPS9eKFsqXC09X10pKD86XHMqXDEpezIsfVxzKiQvLFA9L15bKlwtK11ccysvLEY9L15bMC05XStcLlxzKy8sQj0vXlxbKHh8IClcXSg/PVxzKS8sUj0vXiMrLyxHPS9eKD86XD17MSx9fC17MSx9KSQvLF89L15bXiFcW1xdKl9cXDw+YCAiJyhdKy8sVj1bXTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybntmOm8scHJldkxpbmVIYXNDb250ZW50OiExLHRoaXNMaW5lSGFzQ29udGVudDohMSxibG9jazpvLGh0bWxTdGF0ZTpDb2RlTWlycm9yLnN0YXJ0U3RhdGUodiksaW5kZW50YXRpb246MCxpbmxpbmU6Yyx0ZXh0OnUsbGlua1RleHQ6ITEsbGlua1RpdGxlOiExLGVtOiExLHN0cm9uZzohMSxoZWFkZXI6MCx0YXNrTGlzdDohMSxsaXN0OiExLGxpc3REZXB0aDowLHF1b3RlOjAsdHJhaWxpbmdTcGFjZTowLHRyYWlsaW5nU3BhY2VOZXdMaW5lOiExfX0sY29weVN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybntmOnQuZixwcmV2TGluZUhhc0NvbnRlbnQ6dC5wcmV2TGluZUhhc0NvbnRlbnQsdGhpc0xpbmVIYXNDb250ZW50OnQudGhpc0xpbmVIYXNDb250ZW50LGJsb2NrOnQuYmxvY2ssaHRtbFN0YXRlOkNvZGVNaXJyb3IuY29weVN0YXRlKHYsdC5odG1sU3RhdGUpLGluZGVudGF0aW9uOnQuaW5kZW50YXRpb24sbG9jYWxNb2RlOnQubG9jYWxNb2RlLGxvY2FsU3RhdGU6dC5sb2NhbE1vZGU/Q29kZU1pcnJvci5jb3B5U3RhdGUodC5sb2NhbE1vZGUsdC5sb2NhbFN0YXRlKTpudWxsLGlubGluZTp0LmlubGluZSx0ZXh0OnQudGV4dCxsaW5rVGl0bGU6dC5saW5rVGl0bGUsZW06dC5lbSxzdHJvbmc6dC5zdHJvbmcsaGVhZGVyOnQuaGVhZGVyLHRhc2tMaXN0OnQudGFza0xpc3QsbGlzdDp0Lmxpc3QsbGlzdERlcHRoOnQubGlzdERlcHRoLHF1b3RlOnQucXVvdGUsdHJhaWxpbmdTcGFjZTp0LnRyYWlsaW5nU3BhY2UsdHJhaWxpbmdTcGFjZU5ld0xpbmU6dC50cmFpbGluZ1NwYWNlTmV3TGluZSxtZF9pbnNpZGU6dC5tZF9pbnNpZGV9fSx0b2tlbjpmdW5jdGlvbih0LGUpe2lmKHQuc29sKCkpe2lmKHQubWF0Y2goL15ccyokLywhMCkpcmV0dXJuIGUucHJldkxpbmVIYXNDb250ZW50PSExLGkoZSk7ZS5wcmV2TGluZUhhc0NvbnRlbnQ9ZS50aGlzTGluZUhhc0NvbnRlbnQsZS50aGlzTGluZUhhc0NvbnRlbnQ9ITAsZS5oZWFkZXI9MCxlLnRhc2tMaXN0PSExLGUuY29kZT0hMSxlLnRyYWlsaW5nU3BhY2U9MCxlLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSExLGUuZj1lLmJsb2NrO3ZhciByPXQubWF0Y2goL15ccyovLCEwKVswXS5yZXBsYWNlKC9cdC9nLCIgICAgIikubGVuZ3RoLG49NCpNYXRoLmZsb29yKChyLWUuaW5kZW50YXRpb24pLzQpO24+NCYmKG49NCk7dmFyIG89ZS5pbmRlbnRhdGlvbituO2lmKGUuaW5kZW50YXRpb25EaWZmPW8tZS5pbmRlbnRhdGlvbixlLmluZGVudGF0aW9uPW8scj4wKXJldHVybiBudWxsfXJldHVybiBlLmYodCxlKX0sYmxhbmtMaW5lOmksZ2V0VHlwZTpzfX0sInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LW1hcmtkb3duIiwibWFya2Rvd24iKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4gZS50b2tlbml6ZT1yLHIodCxlKX12YXIgaT10Lm5leHQoKTtpZigiPCI9PWkpe2lmKHQuZWF0KCIhIikpcmV0dXJuIHQuZWF0KCJbIik/dC5tYXRjaCgiQ0RBVEFbIik/cihvKCJhdG9tIiwiXV0+IikpOm51bGw6dC5tYXRjaCgiLS0iKT9yKG8oImNvbW1lbnQiLCItLT4iKSk6dC5tYXRjaCgiRE9DVFlQRSIsITAsITApPyh0LmVhdFdoaWxlKC9bXHdcLl9cLV0vKSxyKGwoMSkpKTpudWxsO2lmKHQuZWF0KCI/IikpcmV0dXJuIHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLGUudG9rZW5pemU9bygibWV0YSIsIj8+IiksIm1ldGEiO3ZhciBhPXQuZWF0KCIvIik7eD0iIjtmb3IodmFyIHM7cz10LmVhdCgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7KXgrPXM7cmV0dXJuIHg/KGI9YT8iY2xvc2VUYWciOiJvcGVuVGFnIixlLnRva2VuaXplPW4sInRhZyIpOiJ0YWcgZXJyb3IifWlmKCImIj09aSl7dmFyIHU7cmV0dXJuIHU9dC5lYXQoIiMiKT90LmVhdCgieCIpP3QuZWF0V2hpbGUoL1thLWZBLUZcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXGRdLykmJnQuZWF0KCI7Iik6dC5lYXRXaGlsZSgvW1x3XC5cLTpdLykmJnQuZWF0KCI7IiksdT8iYXRvbSI6ImVycm9yIn1yZXR1cm4gdC5lYXRXaGlsZSgvW14mPF0vKSxudWxsfWZ1bmN0aW9uIG4odCxlKXt2YXIgbj10Lm5leHQoKTtpZigiPiI9PW58fCIvIj09biYmdC5lYXQoIj4iKSlyZXR1cm4gZS50b2tlbml6ZT1yLGI9Ij4iPT1uPyJlbmRUYWciOiJzZWxmY2xvc2VUYWciLCJ0YWciO2lmKCI9Ij09bilyZXR1cm4gYj0iZXF1YWxzIixudWxsO2lmKCI8Ij09bil7ZS50b2tlbml6ZT1yO3ZhciBvPWUudG9rZW5pemUodCxlKTtyZXR1cm4gbz9vKyIgZXJyb3IiOiJlcnJvciJ9cmV0dXJuL1tcJ1wiXS8udGVzdChuKT8oZS50b2tlbml6ZT1pKG4pLGUuc3RyaW5nU3RhcnRDb2w9dC5jb2x1bW4oKSxlLnRva2VuaXplKHQsZSkpOih0LmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKSwid29yZCIpfWZ1bmN0aW9uIGkodCl7dmFyIGU9ZnVuY3Rpb24oZSxyKXtmb3IoOyFlLmVvbCgpOylpZihlLm5leHQoKT09dCl7ci50b2tlbml6ZT1uO2JyZWFrfXJldHVybiJzdHJpbmcifTtyZXR1cm4gZS5pc0luQXR0cmlidXRlPSEwLGV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcig7IW4uZW9sKCk7KXtpZihuLm1hdGNoKGUpKXtpLnRva2VuaXplPXI7YnJlYWt9bi5uZXh0KCl9cmV0dXJuIHR9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpO251bGwhPShpPWUubmV4dCgpKTspe2lmKCI8Ij09aSlyZXR1cm4gbi50b2tlbml6ZT1sKHQrMSksbi50b2tlbml6ZShlLG4pO2lmKCI+Ij09aSl7aWYoMT09dCl7bi50b2tlbml6ZT1yO2JyZWFrfXJldHVybiBuLnRva2VuaXplPWwodC0xKSxuLnRva2VuaXplKGUsbil9fXJldHVybiJtZXRhIn19ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTE7dD49MDt0LS0pQy5jYy5wdXNoKGFyZ3VtZW50c1t0XSl9ZnVuY3Rpb24gcygpe3JldHVybiBhLmFwcGx5KG51bGwsYXJndW1lbnRzKSwhMH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9VC5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0KXx8Qy5jb250ZXh0JiZDLmNvbnRleHQubm9JbmRlbnQ7Qy5jb250ZXh0PXtwcmV2OkMuY29udGV4dCx0YWdOYW1lOnQsaW5kZW50OkMuaW5kZW50ZWQsc3RhcnRPZkxpbmU6ZSxub0luZGVudDpyfX1mdW5jdGlvbiBjKCl7Qy5jb250ZXh0JiYoQy5jb250ZXh0PUMuY29udGV4dC5wcmV2KX1mdW5jdGlvbiBmKHQpe2lmKCJvcGVuVGFnIj09dClyZXR1cm4gQy50YWdOYW1lPXgsQy50YWdTdGFydD1rLmNvbHVtbigpLHMobSxoKEMuc3RhcnRPZkxpbmUpKTtpZigiY2xvc2VUYWciPT10KXt2YXIgZT0hMTtyZXR1cm4gQy5jb250ZXh0P0MuY29udGV4dC50YWdOYW1lIT14JiYoVC5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KEMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiZjKCksZT0hQy5jb250ZXh0fHxDLmNvbnRleHQudGFnTmFtZSE9eCk6ZT0hMCxlJiYodz0iZXJyb3IiKSxzKGQoZSkpfXJldHVybiBzKCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9Qy50YWdOYW1lO3JldHVybiBDLnRhZ05hbWU9Qy50YWdTdGFydD1udWxsLCJzZWxmY2xvc2VUYWciPT1lfHwiZW5kVGFnIj09ZSYmVC5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkoci50b0xvd2VyQ2FzZSgpKT8ocChyLnRvTG93ZXJDYXNlKCkpLHMoKSk6ImVuZFRhZyI9PWU/KHAoci50b0xvd2VyQ2FzZSgpKSx1KHIsdCkscygpKTpzKCl9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiYodz0iZXJyb3IiKSwiZW5kVGFnIj09ZT8oYygpLHMoKSk6KHc9ImVycm9yIixzKGFyZ3VtZW50cy5jYWxsZWUpKX19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU7Oyl7aWYoIUMuY29udGV4dClyZXR1cm47aWYoZT1DLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCFULmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShlKXx8IVQuY29udGV4dEdyYWJiZXJzW2VdLmhhc093blByb3BlcnR5KHQpKXJldHVybjtjKCl9fWZ1bmN0aW9uIG0odCl7cmV0dXJuIndvcmQiPT10Pyh3PSJhdHRyaWJ1dGUiLHMoZyxtKSk6ImVuZFRhZyI9PXR8fCJzZWxmY2xvc2VUYWciPT10P2EoKToodz0iZXJyb3IiLHMobSkpfWZ1bmN0aW9uIGcodCl7aWYoImVxdWFscyI9PXQpcmV0dXJuIHModixtKTtpZihULmFsbG93TWlzc2luZyl7aWYoIndvcmQiPT10KXJldHVybiB3PSJhdHRyaWJ1dGUiLHMoZyxtKX1lbHNlIHc9ImVycm9yIjtyZXR1cm4iZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOnMoKX1mdW5jdGlvbiB2KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6IndvcmQiPT10JiZULmFsbG93VW5xdW90ZWQ/KHc9InN0cmluZyIscygpKToodz0iZXJyb3IiLCJlbmRUYWciPT10fHwic2VsZkNsb3NlVGFnIj09dD9hKCk6cygpKX1mdW5jdGlvbiB5KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6YSgpfXZhciB4LGIsQyxrLHcsTD10LmluZGVudFVuaXQsUz1lLm11bHRpbGluZVRhZ0luZGVudEZhY3Rvcnx8MSxNPWUubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZ3x8ITAsVD1lLmh0bWxNb2RlP3thdXRvU2VsZkNsb3NlcnM6e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxmcmFtZTohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxpbXBsaWNpdGx5Q2xvc2VkOntkZDohMCxsaTohMCxvcHRncm91cDohMCxvcHRpb246ITAscDohMCxycDohMCxydDohMCx0Ym9keTohMCx0ZDohMCx0Zm9vdDohMCx0aDohMCx0cjohMH0sY29udGV4dEdyYWJiZXJzOntkZDp7ZGQ6ITAsZHQ6ITB9LGR0OntkZDohMCxkdDohMH0sbGk6e2xpOiEwfSxvcHRpb246e29wdGlvbjohMCxvcHRncm91cDohMH0sb3B0Z3JvdXA6e29wdGdyb3VwOiEwfSxwOnthZGRyZXNzOiEwLGFydGljbGU6ITAsYXNpZGU6ITAsYmxvY2txdW90ZTohMCxkaXI6ITAsZGl2OiEwLGRsOiEwLGZpZWxkc2V0OiEwLGZvb3RlcjohMCxmb3JtOiEwLGgxOiEwLGgyOiEwLGgzOiEwLGg0OiEwLGg1OiEwLGg2OiEwLGhlYWRlcjohMCxoZ3JvdXA6ITAsaHI6ITAsbWVudTohMCxuYXY6ITAsb2w6ITAscDohMCxwcmU6ITAsc2VjdGlvbjohMCx0YWJsZTohMCx1bDohMH0scnA6e3JwOiEwLHJ0OiEwfSxydDp7cnA6ITAscnQ6ITB9LHRib2R5Ont0Ym9keTohMCx0Zm9vdDohMH0sdGQ6e3RkOiEwLHRoOiEwfSx0Zm9vdDp7dGJvZHk6ITB9LHRoOnt0ZDohMCx0aDohMH0sdGhlYWQ6e3Rib2R5OiEwLHRmb290OiEwfSx0cjp7dHI6ITB9fSxkb05vdEluZGVudDp7cHJlOiEwfSxhbGxvd1VucXVvdGVkOiEwLGFsbG93TWlzc2luZzohMH06e2F1dG9TZWxmQ2xvc2Vyczp7fSxpbXBsaWNpdGx5Q2xvc2VkOnt9LGNvbnRleHRHcmFiYmVyczp7fSxkb05vdEluZGVudDp7fSxhbGxvd1VucXVvdGVkOiExLGFsbG93TWlzc2luZzohMX0sQT1lLmFsaWduQ0RBVEE7cmV0dXJue3N0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57dG9rZW5pemU6cixjYzpbXSxpbmRlbnRlZDowLHN0YXJ0T2ZMaW5lOiEwLHRhZ05hbWU6bnVsbCx0YWdTdGFydDpudWxsLGNvbnRleHQ6bnVsbH19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYoIWUudGFnTmFtZSYmdC5zb2woKSYmKGUuc3RhcnRPZkxpbmU9ITAsZS5pbmRlbnRlZD10LmluZGVudGF0aW9uKCkpLHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDt3PWI9eD1udWxsO3ZhciByPWUudG9rZW5pemUodCxlKTtpZihlLnR5cGU9Yiwocnx8YikmJiJjb21tZW50IiE9cilmb3IoQz1lLGs9dDs7KXt2YXIgbj1lLmNjLnBvcCgpfHxmO2lmKG4oYnx8cikpYnJlYWt9cmV0dXJuIGUuc3RhcnRPZkxpbmU9ITEsdyYmKHI9ImVycm9yIj09dz9yKyIgZXJyb3IiOncpLHJ9LGluZGVudDpmdW5jdGlvbih0LGUsaSl7dmFyIG89dC5jb250ZXh0O2lmKHQudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSlyZXR1cm4gdC5zdHJpbmdTdGFydENvbCsxO2lmKHQudG9rZW5pemUhPW4mJnQudG9rZW5pemUhPXJ8fG8mJm8ubm9JbmRlbnQpcmV0dXJuIGk/aS5tYXRjaCgvXihccyopLylbMF0ubGVuZ3RoOjA7aWYodC50YWdOYW1lKXJldHVybiBNP3QudGFnU3RhcnQrdC50YWdOYW1lLmxlbmd0aCsyOnQudGFnU3RhcnQrTCpTO2lmKEEmJi88IVxbQ0RBVEFcWy8udGVzdChlKSlyZXR1cm4gMDtmb3IobyYmL148XC8vLnRlc3QoZSkmJihvPW8ucHJldik7byYmIW8uc3RhcnRPZkxpbmU7KW89by5wcmV2O3JldHVybiBvP28uaW5kZW50K0w6MH0sZWxlY3RyaWNDaGFyczoiLyIsYmxvY2tDb21tZW50U3RhcnQ6IjwhLS0iLGJsb2NrQ29tbWVudEVuZDoiLS0+Iixjb25maWd1cmF0aW9uOmUuaHRtbE1vZGU/Imh0bWwiOiJ4bWwiLGhlbHBlclR5cGU6ZS5odG1sTW9kZT8iaHRtbCI6InhtbCJ9fSksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIsInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwieG1sIiksQ29kZU1pcnJvci5taW1lTW9kZXMuaGFzT3duUHJvcGVydHkoInRleHQvaHRtbCIpfHxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIse25hbWU6InhtbCIsaHRtbE1vZGU6ITB9KTtQSwcIk9YPXYgyAACIMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAc3RhdGljXGxpYlxjb2RlbWlycm9yLm1pbi5qc3dpbmRvdy5Db2RlTWlycm9yPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQocixuKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQocixuKTt0aGlzLm9wdGlvbnM9bj1ufHx7fTtmb3IodmFyIGkgaW4gYW8pIW4uaGFzT3duUHJvcGVydHkoaSkmJmFvLmhhc093blByb3BlcnR5KGkpJiYobltpXT1hb1tpXSk7aChuKTt2YXIgbz0ic3RyaW5nIj09dHlwZW9mIG4udmFsdWU/MDpuLnZhbHVlLmZpcnN0LGw9dGhpcy5kaXNwbGF5PWUocixvKTtsLndyYXBwZXIuQ29kZU1pcnJvcj10aGlzLHUodGhpcyksbi5hdXRvZm9jdXMmJiFWaSYmcGUodGhpcyksdGhpcy5zdGF0ZT17a2V5TWFwczpbXSxvdmVybGF5czpbXSxtb2RlR2VuOjAsb3ZlcndyaXRlOiExLGZvY3VzZWQ6ITEsc3VwcHJlc3NFZGl0czohMSxwYXN0ZUluY29taW5nOiExLGRyYWdnaW5nVGV4dDohMSxoaWdobGlnaHQ6bmV3ICRufSxzKHRoaXMpLG4ubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIpO3ZhciBhPW4udmFsdWU7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcgd28obi52YWx1ZSxuLm1vZGUpKSxsZSh0aGlzLHBuKSh0aGlzLGEpLEFpJiZzZXRUaW1lb3V0KGlpKGRlLHRoaXMsITApLDIwKSxtZSh0aGlzKTt2YXIgYzt0cnl7Yz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0fWNhdGNoKGYpe31jfHxuLmF1dG9mb2N1cyYmIVZpP3NldFRpbWVvdXQoaWkoRWUsdGhpcyksMjApOnplKHRoaXMpLGxlKHRoaXMsZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gc28pc28ucHJvcGVydHlJc0VudW1lcmFibGUodCkmJnNvW3RdKHRoaXMsblt0XSx1byk7Zm9yKHZhciBlPTA7ZTxwby5sZW5ndGg7KytlKXBvW2VdKHRoaXMpfSkoKX1mdW5jdGlvbiBlKHQsZSl7dmFyIHI9e30sbj1yLmlucHV0PXNpKCJ0ZXh0YXJlYSIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lOyBmb250LXNpemU6IDRweDsiKTtyZXR1cm4gV2k/bi5zdHlsZS53aWR0aD0iMTAwMHB4IjpuLnNldEF0dHJpYnV0ZSgid3JhcCIsIm9mZiIpLEdpJiYobi5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwiZmFsc2UiKSxyLmlucHV0RGl2PXNpKCJkaXYiLFtuXSxudWxsLCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIpLHIuc2Nyb2xsYmFySD1zaSgiZGl2Iixbc2koImRpdiIsbnVsbCxudWxsLCJoZWlnaHQ6IDFweCIpXSwiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIiksci5zY3JvbGxiYXJWPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiAxcHgiKV0sIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpLHIuc2Nyb2xsYmFyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpLHIuZ3V0dGVyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpLHIubGluZURpdj1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWNvZGUiKSxyLnNlbGVjdGlvbkRpdj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSIpLHIuY3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIiksci5vdGhlckN1cnNvcj1zaSgiZGl2IiwiwqAiLCJDb2RlTWlycm9yLWN1cnNvciBDb2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpLHIubWVhc3VyZT1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLW1lYXN1cmUiKSxyLmxpbmVTcGFjZT1zaSgiZGl2Iixbci5tZWFzdXJlLHIuc2VsZWN0aW9uRGl2LHIubGluZURpdixyLmN1cnNvcixyLm90aGVyQ3Vyc29yXSxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKSxyLm1vdmVyPXNpKCJkaXYiLFtzaSgiZGl2Iixbci5saW5lU3BhY2VdLCJDb2RlTWlycm9yLWxpbmVzIildLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpLHIuc2l6ZXI9c2koImRpdiIsW3IubW92ZXJdLCJDb2RlTWlycm9yLXNpemVyIiksci5oZWlnaHRGb3JjZXI9c2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIitUbysicHg7IHdpZHRoOiAxcHg7Iiksci5ndXR0ZXJzPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVycyIpLHIubGluZUd1dHRlcj1udWxsLHIuc2Nyb2xsZXI9c2koImRpdiIsW3Iuc2l6ZXIsci5oZWlnaHRGb3JjZXIsci5ndXR0ZXJzXSwiQ29kZU1pcnJvci1zY3JvbGwiKSxyLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCItMSIpLHIud3JhcHBlcj1zaSgiZGl2Iixbci5pbnB1dERpdixyLnNjcm9sbGJhckgsci5zY3JvbGxiYXJWLHIuc2Nyb2xsYmFyRmlsbGVyLHIuZ3V0dGVyRmlsbGVyLHIuc2Nyb2xsZXJdLCJDb2RlTWlycm9yIiksSGkmJihyLmd1dHRlcnMuc3R5bGUuekluZGV4PS0xLHIuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0PTApLHQuYXBwZW5kQ2hpbGQ/dC5hcHBlbmRDaGlsZChyLndyYXBwZXIpOnQoci53cmFwcGVyKSxHaSYmKG4uc3R5bGUud2lkdGg9IjBweCIpLFdpfHwoci5zY3JvbGxlci5kcmFnZ2FibGU9ITApLEZpPyhyLmlucHV0RGl2LnN0eWxlLmhlaWdodD0iMXB4IixyLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIpOkhpJiYoci5zY3JvbGxiYXJILnN0eWxlLm1pbldpZHRoPXIuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aD0iMThweCIpLHIudmlld09mZnNldD1yLmxhc3RTaXplQz0wLHIuc2hvd2luZ0Zyb209ci5zaG93aW5nVG89ZSxyLmxpbmVOdW1XaWR0aD1yLmxpbmVOdW1Jbm5lcldpZHRoPXIubGluZU51bUNoYXJzPW51bGwsci5wcmV2SW5wdXQ9IiIsci5hbGlnbldpZGdldHM9ITEsci5wb2xsaW5nRmFzdD0hMSxyLnBvbGw9bmV3ICRuLHIuY2FjaGVkQ2hhcldpZHRoPXIuY2FjaGVkVGV4dEhlaWdodD1udWxsLHIubWVhc3VyZUxpbmVDYWNoZT1bXSxyLm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCxyLmluYWNjdXJhdGVTZWxlY3Rpb249ITEsci5tYXhMaW5lPW51bGwsci5tYXhMaW5lTGVuZ3RoPTAsci5tYXhMaW5lQ2hhbmdlZD0hMSxyLndoZWVsRFg9ci53aGVlbERZPXIud2hlZWxTdGFydFg9ci53aGVlbFN0YXJ0WT1udWxsLHJ9ZnVuY3Rpb24gcihlKXtlLmRvYy5tb2RlPXQuZ2V0TW9kZShlLm9wdGlvbnMsZS5kb2MubW9kZU9wdGlvbiksZS5kb2MuaXRlcihmdW5jdGlvbih0KXt0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKX0pLGUuZG9jLmZyb250aWVyPWUuZG9jLmZpcnN0LFcoZSwxMDApLGUuc3RhdGUubW9kZUdlbisrLGUuY3VyT3AmJnVlKGUpfWZ1bmN0aW9uIG4odCl7dC5vcHRpb25zLmxpbmVXcmFwcGluZz8odC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIsdC5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoPSIiKToodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci13cmFwIiwiIiksZih0KSksbyh0KSx1ZSh0KSxfKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkKHQpfSwxMDApfWZ1bmN0aW9uIGkodCl7dmFyIGU9cmUodC5kaXNwbGF5KSxyPXQub3B0aW9ucy5saW5lV3JhcHBpbmcsbj1yJiZNYXRoLm1heCg1LHQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC9uZSh0LmRpc3BsYXkpLTMpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gVnIodC5kb2MsaSk/MDpyPyhNYXRoLmNlaWwoaS50ZXh0Lmxlbmd0aC9uKXx8MSkqZTplfX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQuZG9jLHI9aSh0KTtlLml0ZXIoZnVuY3Rpb24odCl7dmFyIGU9cih0KTtlIT10LmhlaWdodCYmeW4odCxlKX0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dm9bdC5vcHRpb25zLmtleU1hcF0scj1lLnN0eWxlO3QuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20ta2V5bWFwLVxTKy9nLCIiKSsocj8iIGNtLWtleW1hcC0iK3I6IiIpLHQuc3RhdGUuZGlzYWJsZUlucHV0PWUuZGlzYWJsZUlucHV0fWZ1bmN0aW9uIHModCl7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCIiKSt0Lm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XHMpXHMqL2csIiBjbS1zLSIpLF8odCl9ZnVuY3Rpb24gYSh0KXt1KHQpLHVlKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtnKHQpfSwyMCl9ZnVuY3Rpb24gdSh0KXt2YXIgZT10LmRpc3BsYXkuZ3V0dGVycyxyPXQub3B0aW9ucy5ndXR0ZXJzO2FpKGUpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dLG89ZS5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlciAiK2kpKTsiQ29kZU1pcnJvci1saW5lbnVtYmVycyI9PWkmJih0LmRpc3BsYXkubGluZUd1dHRlcj1vLG8uc3R5bGUud2lkdGg9KHQuZGlzcGxheS5saW5lTnVtV2lkdGh8fDEpKyJweCIpfWUuc3R5bGUuZGlzcGxheT1uPyIiOiJub25lIn1mdW5jdGlvbiBjKHQsZSl7aWYoMD09ZS5oZWlnaHQpcmV0dXJuIDA7Zm9yKHZhciByLG49ZS50ZXh0Lmxlbmd0aCxpPWU7cj1ScihpKTspe3ZhciBvPXIuZmluZCgpO2k9Z24odCxvLmZyb20ubGluZSksbis9by5mcm9tLmNoLW8udG8uY2h9Zm9yKGk9ZTtyPUJyKGkpOyl7dmFyIG89ci5maW5kKCk7bi09aS50ZXh0Lmxlbmd0aC1vLmZyb20uY2gsaT1nbih0LG8udG8ubGluZSksbis9aS50ZXh0Lmxlbmd0aC1vLnRvLmNofXJldHVybiBufWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2M7ZS5tYXhMaW5lPWduKHIsci5maXJzdCksZS5tYXhMaW5lTGVuZ3RoPWMocixlLm1heExpbmUpLGUubWF4TGluZUNoYW5nZWQ9ITAsci5pdGVyKGZ1bmN0aW9uKHQpe3ZhciBuPWMocix0KTtuPmUubWF4TGluZUxlbmd0aCYmKGUubWF4TGluZUxlbmd0aD1uLGUubWF4TGluZT10KX0pfWZ1bmN0aW9uIGgodCl7dmFyIGU9dGkodC5ndXR0ZXJzLCJDb2RlTWlycm9yLWxpbmVudW1iZXJzIik7LTE9PWUmJnQubGluZU51bWJlcnM/dC5ndXR0ZXJzPXQuZ3V0dGVycy5jb25jYXQoWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0pOmU+LTEmJiF0LmxpbmVOdW1iZXJzJiYodC5ndXR0ZXJzPXQuZ3V0dGVycy5zbGljZSgwKSx0Lmd1dHRlcnMuc3BsaWNlKGUsMSkpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2MuaGVpZ2h0LG49citGKGUpO2Uuc2l6ZXIuc3R5bGUubWluSGVpZ2h0PWUuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcD1uKyJweCIsZS5ndXR0ZXJzLnN0eWxlLmhlaWdodD1NYXRoLm1heChuLGUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LVRvKSsicHgiO3ZhciBpPU1hdGgubWF4KG4sZS5zY3JvbGxlci5zY3JvbGxIZWlnaHQpLG89ZS5zY3JvbGxlci5zY3JvbGxXaWR0aD5lLnNjcm9sbGVyLmNsaWVudFdpZHRoKzEsbD1pPmUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KzE7bD8oZS5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhclYuc3R5bGUuYm90dG9tPW8/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9aS1lLnNjcm9sbGVyLmNsaWVudEhlaWdodCtlLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KyJweCIpOihlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9IjAiKSxvPyhlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFySC5zdHlsZS5yaWdodD1sP2RpKGUubWVhc3VyZSkrInB4IjoiMCIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9ZS5zY3JvbGxlci5zY3JvbGxXaWR0aC1lLnNjcm9sbGVyLmNsaWVudFdpZHRoK2Uuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCsicHgiKTooZS5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXk9IiIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjAiKSxvJiZsPyhlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoPWRpKGUubWVhc3VyZSkrInB4Iik6ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixvJiZ0Lm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXImJnQub3B0aW9ucy5maXhlZEd1dHRlcj8oZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodD1kaShlLm1lYXN1cmUpKyJweCIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGg9ZS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCIpOmUuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXk9IiIsUGkmJjA9PT1kaShlLm1lYXN1cmUpJiYoZS5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPWUuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQ9Umk/IjE4cHgiOiIxMnB4IixlLnNjcm9sbGJhclYuc3R5bGUucG9pbnRlckV2ZW50cz1lLnNjcm9sbGJhckguc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXQuc2Nyb2xsZXIuc2Nyb2xsVG9wLGk9dC53cmFwcGVyLmNsaWVudEhlaWdodDsibnVtYmVyIj09dHlwZW9mIHI/bj1yOnImJihuPXIudG9wLGk9ci5ib3R0b20tci50b3ApLG49TWF0aC5mbG9vcihuLUkodCkpO3ZhciBvPU1hdGguY2VpbChuK2kpO3JldHVybntmcm9tOnhuKGUsbiksdG86eG4oZSxvKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10LmRpc3BsYXk7aWYoZS5hbGlnbldpZGdldHN8fGUuZ3V0dGVycy5maXJzdENoaWxkJiZ0Lm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgcj15KGUpLWUuc2Nyb2xsZXIuc2Nyb2xsTGVmdCt0LmRvYy5zY3JvbGxMZWZ0LG49ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGk9cisicHgiLG89ZS5saW5lRGl2LmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpaWYoby5hbGlnbmFibGUpZm9yKHZhciBsPTAscz1vLmFsaWduYWJsZTtsPHMubGVuZ3RoOysrbClzW2xdLnN0eWxlLmxlZnQ9aTt0Lm9wdGlvbnMuZml4ZWRHdXR0ZXImJihlLmd1dHRlcnMuc3R5bGUubGVmdD1yK24rInB4Iil9fWZ1bmN0aW9uIG0odCl7aWYoIXQub3B0aW9ucy5saW5lTnVtYmVycylyZXR1cm4hMTt2YXIgZT10LmRvYyxyPXYodC5vcHRpb25zLGUuZmlyc3QrZS5zaXplLTEpLG49dC5kaXNwbGF5O2lmKHIubGVuZ3RoIT1uLmxpbmVOdW1DaGFycyl7dmFyIGk9bi5tZWFzdXJlLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzaSgiZGl2IixyKV0sIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSksbz1pLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsbD1pLm9mZnNldFdpZHRoLW87cmV0dXJuIG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD0iIixuLmxpbmVOdW1Jbm5lcldpZHRoPU1hdGgubWF4KG8sbi5saW5lR3V0dGVyLm9mZnNldFdpZHRoLWwpLG4ubGluZU51bVdpZHRoPW4ubGluZU51bUlubmVyV2lkdGgrbCxuLmxpbmVOdW1DaGFycz1uLmxpbmVOdW1Jbm5lcldpZHRoP3IubGVuZ3RoOi0xLG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD1uLmxpbmVOdW1XaWR0aCsicHgiLCEwfXJldHVybiExfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gU3RyaW5nKHQubGluZU51bWJlckZvcm1hdHRlcihlK3QuZmlyc3RMaW5lTnVtYmVyKSl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZmkodC5zY3JvbGxlcikubGVmdC1maSh0LnNpemVyKS5sZWZ0fWZ1bmN0aW9uIGIodCxlLHIsbil7Zm9yKHZhciBpLG89dC5kaXNwbGF5LnNob3dpbmdGcm9tLGw9dC5kaXNwbGF5LnNob3dpbmdUbyxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLGE9ITA7O2E9ITEpe3ZhciB1PXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtpZigheCh0LGUscyxuKSlicmVhaztpZihpPSEwLGU9W10sQSh0KSxkKHQpLGEmJnQub3B0aW9ucy5saW5lV3JhcHBpbmcmJnUhPXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCluPSEwO2Vsc2UgaWYobj0hMSxyJiYocj1NYXRoLm1pbih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIm51bWJlciI9PXR5cGVvZiByP3I6ci50b3ApKSxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLHMuZnJvbT49dC5kaXNwbGF5LnNob3dpbmdGcm9tJiZzLnRvPD10LmRpc3BsYXkuc2hvd2luZ1RvKWJyZWFrfXJldHVybiBpJiYoVW4odCwidXBkYXRlIix0KSwodC5kaXNwbGF5LnNob3dpbmdGcm9tIT1vfHx0LmRpc3BsYXkuc2hvd2luZ1RvIT1sKSYmVW4odCwidmlld3BvcnRDaGFuZ2UiLHQsdC5kaXNwbGF5LnNob3dpbmdGcm9tLHQuZGlzcGxheS5zaG93aW5nVG8pKSxpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9dC5kaXNwbGF5LG89dC5kb2M7aWYoIWkud3JhcHBlci5jbGllbnRXaWR0aClyZXR1cm4gaS5zaG93aW5nRnJvbT1pLnNob3dpbmdUbz1vLmZpcnN0LGkudmlld09mZnNldD0wLHZvaWQgMDtpZighKCFuJiYwPT1lLmxlbmd0aCYmci5mcm9tPmkuc2hvd2luZ0Zyb20mJnIudG88aS5zaG93aW5nVG8pKXttKHQpJiYoZT1be2Zyb206by5maXJzdCx0bzpvLmZpcnN0K28uc2l6ZX1dKTt2YXIgbD1pLnNpemVyLnN0eWxlLm1hcmdpbkxlZnQ9aS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCI7aS5zY3JvbGxiYXJILnN0eWxlLmxlZnQ9dC5vcHRpb25zLmZpeGVkR3V0dGVyP2w6IjAiO3ZhciBzPTEvMDtpZih0Lm9wdGlvbnMubGluZU51bWJlcnMpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpZVthXS5kaWZmJiZlW2FdLmZyb208cyYmKHM9ZVthXS5mcm9tKTt2YXIgdT1vLmZpcnN0K28uc2l6ZSxjPU1hdGgubWF4KHIuZnJvbS10Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4sby5maXJzdCksZj1NYXRoLm1pbih1LHIudG8rdC5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtpZihpLnNob3dpbmdGcm9tPGMmJmMtaS5zaG93aW5nRnJvbTwyMCYmKGM9TWF0aC5tYXgoby5maXJzdCxpLnNob3dpbmdGcm9tKSksaS5zaG93aW5nVG8+ZiYmaS5zaG93aW5nVG8tZjwyMCYmKGY9TWF0aC5taW4odSxpLnNob3dpbmdUbykpLFFpKWZvcihjPWJuKEdyKG8sZ24obyxjKSkpO3U+ZiYmVnIobyxnbihvLGYpKTspKytmO3ZhciBoPVt7ZnJvbTpNYXRoLm1heChpLnNob3dpbmdGcm9tLG8uZmlyc3QpLHRvOk1hdGgubWluKGkuc2hvd2luZ1RvLHUpfV07aWYoaD1oWzBdLmZyb20+PWhbMF0udG8/W106TChoLGUpLFFpKWZvcih2YXIgYT0wO2E8aC5sZW5ndGg7KythKWZvcih2YXIgZCxwPWhbYV07ZD1CcihnbihvLHAudG8tMSkpOyl7dmFyIGc9ZC5maW5kKCkuZnJvbS5saW5lO2lmKCEoZz5wLmZyb20pKXtoLnNwbGljZShhLS0sMSk7YnJlYWt9cC50bz1nfWZvcih2YXIgdj0wLGE9MDthPGgubGVuZ3RoOysrYSl7dmFyIHA9aFthXTtwLmZyb208YyYmKHAuZnJvbT1jKSxwLnRvPmYmJihwLnRvPWYpLHAuZnJvbT49cC50bz9oLnNwbGljZShhLS0sMSk6dis9cC50by1wLmZyb219aWYoIW4mJnY9PWYtYyYmYz09aS5zaG93aW5nRnJvbSYmZj09aS5zaG93aW5nVG8pcmV0dXJuIHcodCksdm9pZCAwO2guc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmZyb20tZS5mcm9tfSk7dHJ5e3ZhciB5PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYil7fS43KihmLWMpPnYmJihpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIpLFModCxjLGYsaCxzKSxpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0iIix5JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT15JiZ5Lm9mZnNldEhlaWdodCYmeS5mb2N1cygpO3ZhciB4PWMhPWkuc2hvd2luZ0Zyb218fGYhPWkuc2hvd2luZ1RvfHxpLmxhc3RTaXplQyE9aS53cmFwcGVyLmNsaWVudEhlaWdodDtyZXR1cm4geCYmKGkubGFzdFNpemVDPWkud3JhcHBlci5jbGllbnRIZWlnaHQsVyh0LDQwMCkpLGkuc2hvd2luZ0Zyb209YyxpLnNob3dpbmdUbz1mLEModCksdyh0KSwhMH19ZnVuY3Rpb24gQyh0KXtmb3IodmFyIGUscj10LmRpc3BsYXksbj1yLmxpbmVEaXYub2Zmc2V0VG9wLGk9ci5saW5lRGl2LmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpaWYoaS5saW5lT2JqKXtpZihIaSl7dmFyIG89aS5vZmZzZXRUb3AraS5vZmZzZXRIZWlnaHQ7ZT1vLW4sbj1vfWVsc2V7dmFyIGw9ZmkoaSk7ZT1sLmJvdHRvbS1sLnRvcH12YXIgcz1pLmxpbmVPYmouaGVpZ2h0LWU7aWYoMj5lJiYoZT1yZShyKSkscz4uMDAxfHwtLjAwMT5zKXt5bihpLmxpbmVPYmosZSk7dmFyIGE9aS5saW5lT2JqLndpZGdldHM7aWYoYSlmb3IodmFyIHU9MDt1PGEubGVuZ3RoOysrdSlhW3VdLmhlaWdodD1hW3VdLm5vZGUub2Zmc2V0SGVpZ2h0fX19ZnVuY3Rpb24gdyh0KXt2YXIgZT10LmRpc3BsYXkudmlld09mZnNldD1Dbih0LGduKHQuZG9jLHQuZGlzcGxheS5zaG93aW5nRnJvbSkpO3QuZGlzcGxheS5tb3Zlci5zdHlsZS50b3A9ZSsicHgifWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RofHwwO24+cjsrK3Ipe2Zvcih2YXIgaT1lW3JdLG89W10sbD1pLmRpZmZ8fDAscz0wLGE9dC5sZW5ndGg7YT5zOysrcyl7dmFyIHU9dFtzXTtpLnRvPD11LmZyb20mJmkuZGlmZj9vLnB1c2goe2Zyb206dS5mcm9tK2wsdG86dS50bytsfSk6aS50bzw9dS5mcm9tfHxpLmZyb20+PXUudG8/by5wdXNoKHUpOihpLmZyb20+dS5mcm9tJiZvLnB1c2goe2Zyb206dS5mcm9tLHRvOmkuZnJvbX0pLGkudG88dS50byYmby5wdXNoKHtmcm9tOmkudG8rbCx0bzp1LnRvK2x9KSl9dD1vfXJldHVybiB0fWZ1bmN0aW9uIGsodCl7Zm9yKHZhciBlPXQuZGlzcGxheSxyPXt9LG49e30saT1lLmd1dHRlcnMuZmlyc3RDaGlsZCxvPTA7aTtpPWkubmV4dFNpYmxpbmcsKytvKXJbdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0TGVmdCxuW3Qub3B0aW9ucy5ndXR0ZXJzW29dXT1pLm9mZnNldFdpZHRoO3JldHVybntmaXhlZFBvczp5KGUpLGd1dHRlclRvdGFsV2lkdGg6ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGd1dHRlckxlZnQ6cixndXR0ZXJXaWR0aDpuLHdyYXBwZXJXaWR0aDplLndyYXBwZXIuY2xpZW50V2lkdGh9fWZ1bmN0aW9uIFModCxlLHIsbixpKXtmdW5jdGlvbiBvKGUpe3ZhciByPWUubmV4dFNpYmxpbmc7cmV0dXJuIFdpJiZLaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD09ZT8oZS5zdHlsZS5kaXNwbGF5PSJub25lIixlLmxpbmVPYmo9bnVsbCk6ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLHJ9dmFyIGw9ayh0KSxzPXQuZGlzcGxheSxhPXQub3B0aW9ucy5saW5lTnVtYmVycztuLmxlbmd0aHx8V2kmJnQuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXR8fGFpKHMubGluZURpdik7dmFyIHU9cy5saW5lRGl2LGM9dS5maXJzdENoaWxkLGY9bi5zaGlmdCgpLGg9ZTtmb3IodC5kb2MuaXRlcihlLHIsZnVuY3Rpb24oZSl7aWYoZiYmZi50bz09aCYmKGY9bi5zaGlmdCgpKSxWcih0LmRvYyxlKSl7aWYoMCE9ZS5oZWlnaHQmJnluKGUsMCksZS53aWRnZXRzJiZjJiZjLnByZXZpb3VzU2libGluZylmb3IodmFyIHI9MDtyPGUud2lkZ2V0cy5sZW5ndGg7KytyKXt2YXIgcz1lLndpZGdldHNbcl07aWYocy5zaG93SWZIaWRkZW4pe3ZhciBkPWMucHJldmlvdXNTaWJsaW5nO2lmKC9wcmUvaS50ZXN0KGQubm9kZU5hbWUpKXt2YXIgcD1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpO2QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocCxkKSxwLmFwcGVuZENoaWxkKGQpLGQ9cH12YXIgZz1kLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzLm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKSk7cy5oYW5kbGVNb3VzZUV2ZW50c3x8KGcuaWdub3JlRXZlbnRzPSEwKSxUKHMsZyxkLGwpfX19ZWxzZSBpZihmJiZmLmZyb208PWgmJmYudG8+aCl7Zm9yKDtjLmxpbmVPYmohPWU7KWM9byhjKTthJiZoPj1pJiZjLmxpbmVOdW1iZXImJmNpKGMubGluZU51bWJlcix2KHQub3B0aW9ucyxoKSksYz1jLm5leHRTaWJsaW5nfWVsc2V7aWYoZS53aWRnZXRzKWZvcih2YXIgbSx5PTAsYj1jO2ImJjIwPnk7Kyt5LGI9Yi5uZXh0U2libGluZylpZihiLmxpbmVPYmo9PWUmJi9kaXYvaS50ZXN0KGIubm9kZU5hbWUpKXttPWI7YnJlYWt9dmFyIHg9TSh0LGUsaCxsLG0pO2lmKHghPW0pdS5pbnNlcnRCZWZvcmUoeCxjKTtlbHNle2Zvcig7YyE9bTspYz1vKGMpO2M9Yy5uZXh0U2libGluZ314LmxpbmVPYmo9ZX0rK2h9KTtjOyljPW8oYyl9ZnVuY3Rpb24gTSh0LGUscixuLGkpe3ZhciBvLGw9cm4odCxlKSxzPWwucHJlLGE9ZS5ndXR0ZXJNYXJrZXJzLHU9dC5kaXNwbGF5LGM9bC5iZ0NsYXNzP2wuYmdDbGFzcysiICIrKGUuYmdDbGFzc3x8IiIpOmUuYmdDbGFzcztpZighKHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YXx8Y3x8ZS53cmFwQ2xhc3N8fGUud2lkZ2V0cykpcmV0dXJuIHM7aWYoaSl7aS5hbGlnbmFibGU9bnVsbDtmb3IodmFyIGYsaD0hMCxkPTAscD1udWxsLGc9aS5maXJzdENoaWxkO2c7Zz1mKWlmKGY9Zy5uZXh0U2libGluZywvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChnLmNsYXNzTmFtZSkpe2Zvcih2YXIgbT0wO208ZS53aWRnZXRzLmxlbmd0aDsrK20pe3ZhciB5PWUud2lkZ2V0c1ttXTtpZih5Lm5vZGU9PWcuZmlyc3RDaGlsZCl7eS5hYm92ZXx8cHx8KHA9ZyksVCh5LGcsaSxuKSwrK2Q7YnJlYWt9fWlmKG09PWUud2lkZ2V0cy5sZW5ndGgpe2g9ITE7YnJlYWt9fWVsc2UgaS5yZW1vdmVDaGlsZChnKTtpLmluc2VydEJlZm9yZShzLHApLGgmJmQ9PWUud2lkZ2V0cy5sZW5ndGgmJihvPWksaS5jbGFzc05hbWU9ZS53cmFwQ2xhc3N8fCIiKX1pZihvfHwobz1zaSgiZGl2IixudWxsLGUud3JhcENsYXNzLCJwb3NpdGlvbjogcmVsYXRpdmUiKSxvLmFwcGVuZENoaWxkKHMpKSxjJiZvLmluc2VydEJlZm9yZShzaSgiZGl2IixudWxsLGMrIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIiksby5maXJzdENoaWxkKSx0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEpe3ZhciBiPW8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiKyh0Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bi5maXhlZFBvczotbi5ndXR0ZXJUb3RhbFdpZHRoKSsicHgiKSxvLmZpcnN0Q2hpbGQpO2lmKHQub3B0aW9ucy5maXhlZEd1dHRlciYmKG8uYWxpZ25hYmxlfHwoby5hbGlnbmFibGU9W10pKS5wdXNoKGIpLCF0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEmJmFbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXXx8KG8ubGluZU51bWJlcj1iLmFwcGVuZENoaWxkKHNpKCJkaXYiLHYodC5vcHRpb25zLHIpLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIituLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSsicHg7IHdpZHRoOiAiK3UubGluZU51bUlubmVyV2lkdGgrInB4IikpKSxhKWZvcih2YXIgeD0wO3g8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysreCl7dmFyIEM9dC5vcHRpb25zLmd1dHRlcnNbeF0sdz1hLmhhc093blByb3BlcnR5KEMpJiZhW0NdO3cmJmIuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3ddLCJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFtDXSsicHg7IHdpZHRoOiAiK24uZ3V0dGVyV2lkdGhbQ10rInB4IikpfX1pZihIaSYmKG8uc3R5bGUuekluZGV4PTIpLGUud2lkZ2V0cyYmbyE9aSlmb3IodmFyIG09MCxMPWUud2lkZ2V0czttPEwubGVuZ3RoOysrbSl7dmFyIHk9TFttXSxrPXNpKCJkaXYiLFt5Lm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTt5LmhhbmRsZU1vdXNlRXZlbnRzfHwoay5pZ25vcmVFdmVudHM9ITApLFQoeSxrLG8sbikseS5hYm92ZT9vLmluc2VydEJlZm9yZShrLHQub3B0aW9ucy5saW5lTnVtYmVycyYmMCE9ZS5oZWlnaHQ/YjpzKTpvLmFwcGVuZENoaWxkKGspLFVuKHksInJlZHJhdyIpfXJldHVybiBvfWZ1bmN0aW9uIFQodCxlLHIsbil7aWYodC5ub0hTY3JvbGwpeyhyLmFsaWduYWJsZXx8KHIuYWxpZ25hYmxlPVtdKSkucHVzaChlKTt2YXIgaT1uLndyYXBwZXJXaWR0aDtlLnN0eWxlLmxlZnQ9bi5maXhlZFBvcysicHgiLHQuY292ZXJHdXR0ZXJ8fChpLT1uLmd1dHRlclRvdGFsV2lkdGgsZS5zdHlsZS5wYWRkaW5nTGVmdD1uLmd1dHRlclRvdGFsV2lkdGgrInB4IiksZS5zdHlsZS53aWR0aD1pKyJweCJ9dC5jb3Zlckd1dHRlciYmKGUuc3R5bGUuekluZGV4PTUsZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHQubm9IU2Nyb2xsfHwoZS5zdHlsZS5tYXJnaW5MZWZ0PS1uLmd1dHRlclRvdGFsV2lkdGgrInB4IikpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5kaXNwbGF5LHI9amUodC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvKTtpZihyfHx0Lm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3Rpbmc/SCh0KTplLmN1cnNvci5zdHlsZS5kaXNwbGF5PWUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIscj9lLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSJub25lIjpOKHQpLHQub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKXt2YXIgbj1RKHQsdC5kb2Muc2VsLmhlYWQsImRpdiIpLGk9ZmkoZS53cmFwcGVyKSxvPWZpKGUubGluZURpdik7ZS5pbnB1dERpdi5zdHlsZS50b3A9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50SGVpZ2h0LTEwLG4udG9wK28udG9wLWkudG9wKSkrInB4IixlLmlucHV0RGl2LnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50V2lkdGgtMTAsbi5sZWZ0K28ubGVmdC1pLmxlZnQpKSsicHgifX1mdW5jdGlvbiBIKHQpe3ZhciBlPXQuZGlzcGxheSxyPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2Iik7ZS5jdXJzb3Iuc3R5bGUubGVmdD1yLmxlZnQrInB4IixlLmN1cnNvci5zdHlsZS50b3A9ci50b3ArInB4IixlLmN1cnNvci5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxyLmJvdHRvbS1yLnRvcCkqdC5vcHRpb25zLmN1cnNvckhlaWdodCsicHgiLGUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5vdGhlcj8oZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLGUub3RoZXJDdXJzb3Iuc3R5bGUubGVmdD1yLm90aGVyLmxlZnQrInB4IixlLm90aGVyQ3Vyc29yLnN0eWxlLnRvcD1yLm90aGVyLnRvcCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0PS44NSooci5vdGhlci5ib3R0b20tci5vdGhlci50b3ApKyJweCIpOmUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZnVuY3Rpb24gTih0KXtmdW5jdGlvbiBlKHQsZSxyLG4pezA+ZSYmKGU9MCksbC5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLXNlbGVjdGVkIiwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiK3QrInB4OyB0b3A6ICIrZSsicHg7IHdpZHRoOiAiKyhudWxsPT1yP3MtdDpyKSsicHg7IGhlaWdodDogIisobi1lKSsicHgiKSl9ZnVuY3Rpb24gcihyLG4sbyl7ZnVuY3Rpb24gbChlLG4pe3JldHVybiBxKHQsWWUocixlKSwiZGl2IixmLG4pfXZhciB1LGMsZj1nbihpLHIpLGg9Zi50ZXh0Lmxlbmd0aDtyZXR1cm4gZ2kod24oZiksbnx8MCxudWxsPT1vP2g6byxmdW5jdGlvbih0LHIsaSl7dmFyIGYsZCxwLGc9bCh0LCJsZWZ0Iik7aWYodD09cilmPWcsZD1wPWcubGVmdDtlbHNle2lmKGY9bChyLTEsInJpZ2h0IiksInJ0bCI9PWkpe3ZhciBtPWc7Zz1mLGY9bX1kPWcubGVmdCxwPWYucmlnaHR9bnVsbD09biYmMD09dCYmKGQ9YSksZi50b3AtZy50b3A+MyYmKGUoZCxnLnRvcCxudWxsLGcuYm90dG9tKSxkPWEsZy5ib3R0b208Zi50b3AmJmUoZCxnLmJvdHRvbSxudWxsLGYudG9wKSksbnVsbD09byYmcj09aCYmKHA9cyksKCF1fHxnLnRvcDx1LnRvcHx8Zy50b3A9PXUudG9wJiZnLmxlZnQ8dS5sZWZ0KSYmKHU9ZyksKCFjfHxmLmJvdHRvbT5jLmJvdHRvbXx8Zi5ib3R0b209PWMuYm90dG9tJiZmLnJpZ2h0PmMucmlnaHQpJiYoYz1mKSxhKzE+ZCYmKGQ9YSksZShkLGYudG9wLHAtZCxmLmJvdHRvbSl9KSx7c3RhcnQ6dSxlbmQ6Y319dmFyIG49dC5kaXNwbGF5LGk9dC5kb2Msbz10LmRvYy5zZWwsbD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscz1uLmxpbmVTcGFjZS5vZmZzZXRXaWR0aCxhPVAodC5kaXNwbGF5KTtpZihvLmZyb20ubGluZT09by50by5saW5lKXIoby5mcm9tLmxpbmUsby5mcm9tLmNoLG8udG8uY2gpO2Vsc2V7dmFyIHU9Z24oaSxvLmZyb20ubGluZSksYz1nbihpLG8udG8ubGluZSksZj1HcihpLHUpPT1HcihpLGMpLGg9cihvLmZyb20ubGluZSxvLmZyb20uY2gsZj91LnRleHQubGVuZ3RoOm51bGwpLmVuZCxkPXIoby50by5saW5lLGY/MDpudWxsLG8udG8uY2gpLnN0YXJ0O2YmJihoLnRvcDxkLnRvcC0yPyhlKGgucmlnaHQsaC50b3AsbnVsbCxoLmJvdHRvbSksZShhLGQudG9wLGQubGVmdCxkLmJvdHRvbSkpOmUoaC5yaWdodCxoLnRvcCxkLmxlZnQtaC5yaWdodCxoLmJvdHRvbSkpLGguYm90dG9tPGQudG9wJiZlKGEsaC5ib3R0b20sbnVsbCxkLnRvcCl9dWkobi5zZWxlY3Rpb25EaXYsbCksbi5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheT0iIn1mdW5jdGlvbiBEKHQpe2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIGU9dC5kaXNwbGF5O2NsZWFySW50ZXJ2YWwoZS5ibGlua2VyKTt2YXIgcj0hMDtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0iIix0Lm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlPjAmJihlLmJsaW5rZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0ocj0hcik/IiI6ImhpZGRlbiJ9LHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpKX19ZnVuY3Rpb24gVyh0LGUpe3QuZG9jLm1vZGUuc3RhcnRTdGF0ZSYmdC5kb2MuZnJvbnRpZXI8dC5kaXNwbGF5LnNob3dpbmdUbyYmdC5zdGF0ZS5oaWdobGlnaHQuc2V0KGUsaWkoTyx0KSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmRvYztpZihlLmZyb250aWVyPGUuZmlyc3QmJihlLmZyb250aWVyPWUuZmlyc3QpLCEoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdUbykpe3ZhciByLG49K25ldyBEYXRlK3Qub3B0aW9ucy53b3JrVGltZSxpPWJyKGUubW9kZSx6KHQsZS5mcm9udGllcikpLG89W107ZS5pdGVyKGUuZnJvbnRpZXIsTWF0aC5taW4oZS5maXJzdCtlLnNpemUsdC5kaXNwbGF5LnNob3dpbmdUbys1MDApLGZ1bmN0aW9uKGwpe2lmKGUuZnJvbnRpZXI+PXQuZGlzcGxheS5zaG93aW5nRnJvbSl7dmFyIHM9bC5zdHlsZXM7bC5zdHlsZXM9UXIodCxsLGksITApO2Zvcih2YXIgYT0hc3x8cy5sZW5ndGghPWwuc3R5bGVzLmxlbmd0aCx1PTA7IWEmJnU8cy5sZW5ndGg7Kyt1KWE9c1t1XSE9bC5zdHlsZXNbdV07YSYmKHImJnIuZW5kPT1lLmZyb250aWVyP3IuZW5kKys6by5wdXNoKHI9e3N0YXJ0OmUuZnJvbnRpZXIsZW5kOmUuZnJvbnRpZXIrMX0pKSxsLnN0YXRlQWZ0ZXI9YnIoZS5tb2RlLGkpfWVsc2UgdG4odCxsLnRleHQsaSksbC5zdGF0ZUFmdGVyPTA9PWUuZnJvbnRpZXIlNT9icihlLm1vZGUsaSk6bnVsbDtyZXR1cm4rK2UuZnJvbnRpZXIsK25ldyBEYXRlPm4/KFcodCx0Lm9wdGlvbnMud29ya0RlbGF5KSwhMCk6dm9pZCAwfSksby5sZW5ndGgmJmxlKHQsZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoOysrdCl1ZSh0aGlzLG9bdF0uc3RhcnQsb1t0XS5lbmQpfSkoKX19ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuLGksbz10LmRvYyxsPXI/LTE6ZS0odC5kb2MubW9kZS5pbm5lck1vZGU/MWUzOjEwMCkscz1lO3M+bDstLXMpe2lmKHM8PW8uZmlyc3QpcmV0dXJuIG8uZmlyc3Q7dmFyIGE9Z24obyxzLTEpO2lmKGEuc3RhdGVBZnRlciYmKCFyfHxzPD1vLmZyb250aWVyKSlyZXR1cm4gczt2YXIgdT1abihhLnRleHQsbnVsbCx0Lm9wdGlvbnMudGFiU2l6ZSk7KG51bGw9PWl8fG4+dSkmJihpPXMtMSxuPXUpfXJldHVybiBpfWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXQuZG9jLGk9dC5kaXNwbGF5O2lmKCFuLm1vZGUuc3RhcnRTdGF0ZSlyZXR1cm4hMDt2YXIgbz1FKHQsZSxyKSxsPW8+bi5maXJzdCYmZ24obixvLTEpLnN0YXRlQWZ0ZXI7cmV0dXJuIGw9bD9icihuLm1vZGUsbCk6eHIobi5tb2RlKSxuLml0ZXIobyxlLGZ1bmN0aW9uKHIpe3RuKHQsci50ZXh0LGwpO3ZhciBzPW89PWUtMXx8MD09byU1fHxvPj1pLnNob3dpbmdGcm9tJiZvPGkuc2hvd2luZ1RvO3Iuc3RhdGVBZnRlcj1zP2JyKG4ubW9kZSxsKTpudWxsLCsrb30pLHImJihuLmZyb250aWVyPW8pLGx9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5saW5lU3BhY2Uub2Zmc2V0VG9wfWZ1bmN0aW9uIEYodCl7cmV0dXJuIHQubW92ZXIub2Zmc2V0SGVpZ2h0LXQubGluZVNwYWNlLm9mZnNldEhlaWdodH1mdW5jdGlvbiBQKHQpe3ZhciBlPXVpKHQubWVhc3VyZSxzaSgicHJlIixudWxsLG51bGwsInRleHQtYWxpZ246IGxlZnQiKSkuYXBwZW5kQ2hpbGQoc2koInNwYW4iLCJ4IikpO3JldHVybiBlLm9mZnNldExlZnR9ZnVuY3Rpb24gUih0LGUscixuLGkpe3ZhciBvPS0xO2lmKG49bnx8Vih0LGUpLG4uY3J1ZGUpe3ZhciBsPW4ubGVmdCtyKm4ud2lkdGg7cmV0dXJue2xlZnQ6bCxyaWdodDpsK24ud2lkdGgsdG9wOm4udG9wLGJvdHRvbTpuLmJvdHRvbX19Zm9yKHZhciBzPXI7O3MrPW8pe3ZhciBhPW5bc107aWYoYSlicmVhazswPm8mJjA9PXMmJihvPTEpfXJldHVybiBpPXM+cj8ibGVmdCI6cj5zPyJyaWdodCI6aSwibGVmdCI9PWkmJmEubGVmdFNpZGU/YT1hLmxlZnRTaWRlOiJyaWdodCI9PWkmJmEucmlnaHRTaWRlJiYoYT1hLnJpZ2h0U2lkZSkse2xlZnQ6cj5zP2EucmlnaHQ6YS5sZWZ0LHJpZ2h0OnM+cj9hLmxlZnQ6YS5yaWdodCx0b3A6YS50b3AsYm90dG9tOmEuYm90dG9tfX1mdW5jdGlvbiBCKHQsZSl7Zm9yKHZhciByPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtpZihpLnRleHQ9PWUudGV4dCYmaS5tYXJrZWRTcGFucz09ZS5tYXJrZWRTcGFucyYmdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoPT1pLndpZHRoJiZpLmNsYXNzZXM9PWUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzcylyZXR1cm4gaX19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPUIodCxlKTtyJiYoci50ZXh0PXIubWVhc3VyZT1yLm1hcmtlZFNwYW5zPW51bGwpfWZ1bmN0aW9uIFYodCxlKXt2YXIgcj1CKHQsZSk7aWYocilyZXR1cm4gci5tZWFzdXJlO3ZhciBuPUsodCxlKSxpPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG89e3RleHQ6ZS50ZXh0LHdpZHRoOnQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCxtYXJrZWRTcGFuczplLm1hcmtlZFNwYW5zLG1lYXN1cmU6bixjbGFzc2VzOmUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzc307cmV0dXJuIDE2PT1pLmxlbmd0aD9pWysrdC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3MlMTZdPW86aS5wdXNoKG8pLG59ZnVuY3Rpb24gSyh0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9dC50b3AtcC50b3Ascj10LmJvdHRvbS1wLnRvcDtyPnYmJihyPXYpLDA+ZSYmKGU9MCk7Zm9yKHZhciBuPWcubGVuZ3RoLTI7bj49MDtuLT0yKXt2YXIgaT1nW25dLG89Z1tuKzFdO2lmKCEoaT5yfHxlPm8pJiYoZT49aSYmbz49cnx8aT49ZSYmcj49b3x8TWF0aC5taW4ocixvKS1NYXRoLm1heChlLGkpPj1yLWU+PjEpKXtnW25dPU1hdGgubWluKGUsaSksZ1tuKzFdPU1hdGgubWF4KHIsbyk7YnJlYWt9fXJldHVybiAwPm4mJihuPWcubGVuZ3RoLGcucHVzaChlLHIpKSx7bGVmdDp0LmxlZnQtcC5sZWZ0LHJpZ2h0OnQucmlnaHQtcC5sZWZ0LHRvcDpuLGJvdHRvbTpudWxsfX1mdW5jdGlvbiBuKHQpe3QuYm90dG9tPWdbdC50b3ArMV0sdC50b3A9Z1t0LnRvcF19aWYoIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFUodCxlKTt2YXIgaT10LmRpc3BsYXksbz1uaShlLnRleHQubGVuZ3RoKSxsPXJuKHQsZSxvLCEwKS5wcmU7aWYoQWkmJiFIaSYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmwuY2hpbGROb2Rlcy5sZW5ndGg+MTAwKXtmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MTAsdT1sLmNoaWxkTm9kZXMubGVuZ3RoLGM9MCxmPU1hdGguY2VpbCh1L2EpO2Y+YzsrK2Mpe2Zvcih2YXIgaD1zaSgiZGl2IixudWxsLG51bGwsImRpc3BsYXk6IGlubGluZS1ibG9jayIpLGQ9MDthPmQmJnU7KytkKWguYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKSwtLXU7cy5hcHBlbmRDaGlsZChoKX1sLmFwcGVuZENoaWxkKHMpfXVpKGkubWVhc3VyZSxsKTt2YXIgcD1maShpLmxpbmVEaXYpLGc9W10sbT1uaShlLnRleHQubGVuZ3RoKSx2PWwub2Zmc2V0SGVpZ2h0O05pJiZpLm1lYXN1cmUuZmlyc3QhPWwmJnVpKGkubWVhc3VyZSxsKTtmb3IodmFyIHksYz0wO2M8by5sZW5ndGg7KytjKWlmKHk9b1tjXSl7dmFyIGI9eSx4PW51bGw7aWYoL1xiQ29kZU1pcnJvci13aWRnZXRcYi8udGVzdCh5LmNsYXNzTmFtZSkmJnkuZ2V0Q2xpZW50UmVjdHMpezE9PXkuZmlyc3RDaGlsZC5ub2RlVHlwZSYmKGI9eS5maXJzdENoaWxkKTt2YXIgQz1iLmdldENsaWVudFJlY3RzKCk7Qy5sZW5ndGg+MSYmKHg9bVtjXT1yKENbMF0pLHgucmlnaHRTaWRlPXIoQ1tDLmxlbmd0aC0xXSkpfXh8fCh4PW1bY109cihmaShiKSkpLHkubWVhc3VyZVJpZ2h0JiYoeC5yaWdodD1maSh5Lm1lYXN1cmVSaWdodCkubGVmdCkseS5sZWZ0U2lkZSYmKHgubGVmdFNpZGU9cihmaSh5LmxlZnRTaWRlKSkpfWFpKHQuZGlzcGxheS5tZWFzdXJlKTtmb3IodmFyIHksYz0wO2M8bS5sZW5ndGg7KytjKSh5PW1bY10pJiYobih5KSx5LmxlZnRTaWRlJiZuKHkubGVmdFNpZGUpLHkucmlnaHRTaWRlJiZuKHkucmlnaHRTaWRlKSk7cmV0dXJuIG19ZnVuY3Rpb24gVSh0LGUpe3ZhciByPW5ldyBibyhlLnRleHQuc2xpY2UoMCwxMDApLG51bGwpO2UudGV4dENsYXNzJiYoci50ZXh0Q2xhc3M9ZS50ZXh0Q2xhc3MpO3ZhciBuPUsodCxyKSxpPVIodCxyLDAsbiwibGVmdCIpLG89Uih0LHIsOTksbiwicmlnaHQiKTtyZXR1cm57Y3J1ZGU6ITAsdG9wOmkudG9wLGxlZnQ6aS5sZWZ0LGJvdHRvbTppLmJvdHRvbSx3aWR0aDooby5yaWdodC1pLmxlZnQpLzEwMH19ZnVuY3Rpb24gWCh0LGUpe3ZhciByPSExO2lmKGUubWFya2VkU3BhbnMpZm9yKHZhciBuPTA7bjxlLm1hcmtlZFNwYW5zOysrbil7dmFyIGk9ZS5tYXJrZWRTcGFuc1tuXTshaS5jb2xsYXBzZWR8fG51bGwhPWkudG8mJmkudG8hPWUudGV4dC5sZW5ndGh8fChyPSEwKX12YXIgbz0hciYmQih0LGUpO2lmKG98fGUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFIodCxlLGUudGV4dC5sZW5ndGgsbyYmby5tZWFzdXJlLCJyaWdodCIpLnJpZ2h0O3ZhciBsPXJuKHQsZSxudWxsLCEwKS5wcmUscz1sLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSk7cmV0dXJuIHVpKHQuZGlzcGxheS5tZWFzdXJlLGwpLGZpKHMpLnJpZ2h0LWZpKHQuZGlzcGxheS5saW5lRGl2KS5sZWZ0fWZ1bmN0aW9uIF8odCl7dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zPTAsdC5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aD10LmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodD1udWxsLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fCh0LmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApLHQuZGlzcGxheS5saW5lTnVtQ2hhcnM9bnVsbH1mdW5jdGlvbiBZKCl7cmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBqKCl7cmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wfWZ1bmN0aW9uICQodCxlLHIsbil7aWYoZS53aWRnZXRzKWZvcih2YXIgaT0wO2k8ZS53aWRnZXRzLmxlbmd0aDsrK2kpaWYoZS53aWRnZXRzW2ldLmFib3ZlKXt2YXIgbz1ZcihlLndpZGdldHNbaV0pO3IudG9wKz1vLHIuYm90dG9tKz1vfWlmKCJsaW5lIj09bilyZXR1cm4gcjtufHwobj0ibG9jYWwiKTt2YXIgbD1Dbih0LGUpO2lmKCJsb2NhbCI9PW4/bCs9SSh0LmRpc3BsYXkpOmwtPXQuZGlzcGxheS52aWV3T2Zmc2V0LCJwYWdlIj09bnx8IndpbmRvdyI9PW4pe3ZhciBzPWZpKHQuZGlzcGxheS5saW5lU3BhY2UpO2wrPXMudG9wKygid2luZG93Ij09bj8wOmooKSk7dmFyIGE9cy5sZWZ0Kygid2luZG93Ij09bj8wOlkoKSk7ci5sZWZ0Kz1hLHIucmlnaHQrPWF9cmV0dXJuIHIudG9wKz1sLHIuYm90dG9tKz1sLHJ9ZnVuY3Rpb24gWih0LGUscil7aWYoImRpdiI9PXIpcmV0dXJuIGU7dmFyIG49ZS5sZWZ0LGk9ZS50b3A7aWYoInBhZ2UiPT1yKW4tPVkoKSxpLT1qKCk7ZWxzZSBpZigibG9jYWwiPT1yfHwhcil7dmFyIG89ZmkodC5kaXNwbGF5LnNpemVyKTtuKz1vLmxlZnQsaSs9by50b3B9dmFyIGw9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7cmV0dXJue2xlZnQ6bi1sLmxlZnQsdG9wOmktbC50b3B9fWZ1bmN0aW9uIHEodCxlLHIsbixpKXtyZXR1cm4gbnx8KG49Z24odC5kb2MsZS5saW5lKSksJCh0LG4sUih0LG4sZS5jaCxudWxsLGkpLHIpfWZ1bmN0aW9uIFEodCxlLHIsbixpKXtmdW5jdGlvbiBvKGUsbyl7dmFyIGw9Uih0LG4sZSxpLG8/InJpZ2h0IjoibGVmdCIpO3JldHVybiBvP2wubGVmdD1sLnJpZ2h0OmwucmlnaHQ9bC5sZWZ0LCQodCxuLGwscil9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXNbZV0sbj1yLmxldmVsJTI7cmV0dXJuIHQ9PW1pKHIpJiZlJiZyLmxldmVsPHNbZS0xXS5sZXZlbD8ocj1zWy0tZV0sdD12aShyKS0oci5sZXZlbCUyPzA6MSksbj0hMCk6dD09dmkocikmJmU8cy5sZW5ndGgtMSYmci5sZXZlbDxzW2UrMV0ubGV2ZWwmJihyPXNbKytlXSx0PW1pKHIpLXIubGV2ZWwlMixuPSExKSxuJiZ0PT1yLnRvJiZ0PnIuZnJvbT9vKHQtMSk6byh0LG4pfW49bnx8Z24odC5kb2MsZS5saW5lKSxpfHwoaT1WKHQsbikpO3ZhciBzPXduKG4pLGE9ZS5jaDtpZighcylyZXR1cm4gbyhhKTt2YXIgdT1MaShzLGEpLGM9bChhLHUpO3JldHVybiBudWxsIT1SbyYmKGMub3RoZXI9bChhLFJvKSksY31mdW5jdGlvbiBKKHQsZSxyLG4pe3ZhciBpPW5ldyBZZSh0LGUpO3JldHVybiBpLnhSZWw9bixyJiYoaS5vdXRzaWRlPSEwKSxpfWZ1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj10LmRvYztpZihyKz10LmRpc3BsYXkudmlld09mZnNldCwwPnIpcmV0dXJuIEoobi5maXJzdCwwLCEwLC0xKTt2YXIgaT14bihuLHIpLG89bi5maXJzdCtuLnNpemUtMTtpZihpPm8pcmV0dXJuIEoobi5maXJzdCtuLnNpemUtMSxnbihuLG8pLnRleHQubGVuZ3RoLCEwLDEpO2ZvcigwPmUmJihlPTApOzspe3ZhciBsPWduKG4saSkscz1lZSh0LGwsaSxlLHIpLGE9QnIobCksdT1hJiZhLmZpbmQoKTtpZighYXx8IShzLmNoPnUuZnJvbS5jaHx8cy5jaD09dS5mcm9tLmNoJiZzLnhSZWw+MCkpcmV0dXJuIHM7aT11LnRvLmxpbmV9fWZ1bmN0aW9uIGVlKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyhuKXt2YXIgaT1RKHQsWWUocixuKSwibGluZSIsZSx1KTtyZXR1cm4gcz0hMCxsPmkuYm90dG9tP2kubGVmdC1hOmw8aS50b3A/aS5sZWZ0K2E6KHM9ITEsaS5sZWZ0KX12YXIgbD1pLUNuKHQsZSkscz0hMSxhPTIqdC5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgsdT1WKHQsZSksYz13bihlKSxmPWUudGV4dC5sZW5ndGgsaD15aShlKSxkPWJpKGUpLHA9byhoKSxnPXMsbT1vKGQpLHY9cztpZihuPm0pcmV0dXJuIEoocixkLHYsMSk7Zm9yKDs7KXtpZihjP2Q9PWh8fGQ9PVNpKGUsaCwxKToxPj1kLWgpe2Zvcih2YXIgeT1wPm58fG0tbj49bi1wP2g6ZCxiPW4tKHk9PWg/cDptKTtEby50ZXN0KGUudGV4dC5jaGFyQXQoeSkpOykrK3k7dmFyIHg9SihyLHkseT09aD9nOnYsMD5iPy0xOmI/MTowKTtyZXR1cm4geH12YXIgQz1NYXRoLmNlaWwoZi8yKSx3PWgrQztpZihjKXt3PWg7Zm9yKHZhciBMPTA7Qz5MOysrTCl3PVNpKGUsdywxKX12YXIgaz1vKHcpO2s+bj8oZD13LG09aywodj1zKSYmKG0rPTFlMyksZj1DKTooaD13LHA9ayxnPXMsZi09Qyl9fWZ1bmN0aW9uIHJlKHQpe2lmKG51bGwhPXQuY2FjaGVkVGV4dEhlaWdodClyZXR1cm4gdC5jYWNoZWRUZXh0SGVpZ2h0O2lmKG51bGw9PV9pKXtfaT1zaSgicHJlIik7Zm9yKHZhciBlPTA7NDk+ZTsrK2UpX2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSksX2kuYXBwZW5kQ2hpbGQoc2koImJyIikpO19pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IikpfXVpKHQubWVhc3VyZSxfaSk7dmFyIHI9X2kub2Zmc2V0SGVpZ2h0LzUwO3JldHVybiByPjMmJih0LmNhY2hlZFRleHRIZWlnaHQ9ciksYWkodC5tZWFzdXJlKSxyfHwxfWZ1bmN0aW9uIG5lKHQpe2lmKG51bGwhPXQuY2FjaGVkQ2hhcldpZHRoKXJldHVybiB0LmNhY2hlZENoYXJXaWR0aDt2YXIgZT1zaSgic3BhbiIsIngiKSxyPXNpKCJwcmUiLFtlXSk7dWkodC5tZWFzdXJlLHIpO3ZhciBuPWUub2Zmc2V0V2lkdGg7cmV0dXJuIG4+MiYmKHQuY2FjaGVkQ2hhcldpZHRoPW4pLG58fDEwfWZ1bmN0aW9uIGllKHQpe3QuY3VyT3A9e2NoYW5nZXM6W10sZm9yY2VVcGRhdGU6ITEsdXBkYXRlSW5wdXQ6bnVsbCx1c2VyU2VsQ2hhbmdlOm51bGwsdGV4dENoYW5nZWQ6bnVsbCxzZWxlY3Rpb25DaGFuZ2VkOiExLGN1cnNvckFjdGl2aXR5OiExLHVwZGF0ZU1heExpbmU6ITEsdXBkYXRlU2Nyb2xsUG9zOiExLGlkOisrSml9LE1vKyt8fChTbz1bXSl9ZnVuY3Rpb24gb2UodCl7dmFyIGU9dC5jdXJPcCxyPXQuZG9jLG49dC5kaXNwbGF5O2lmKHQuY3VyT3A9bnVsbCxlLnVwZGF0ZU1heExpbmUmJmYodCksbi5tYXhMaW5lQ2hhbmdlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJm4ubWF4TGluZSl7dmFyIGk9WCh0LG4ubWF4TGluZSk7bi5zaXplci5zdHlsZS5taW5XaWR0aD1NYXRoLm1heCgwLGkrMytUbykrInB4IixuLm1heExpbmVDaGFuZ2VkPSExO3ZhciBvPU1hdGgubWF4KDAsbi5zaXplci5vZmZzZXRMZWZ0K24uc2l6ZXIub2Zmc2V0V2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCk7bzxyLnNjcm9sbExlZnQmJiFlLnVwZGF0ZVNjcm9sbFBvcyYmTWUodCxNYXRoLm1pbihuLnNjcm9sbGVyLnNjcm9sbExlZnQsbyksITApfXZhciBsLHM7aWYoZS51cGRhdGVTY3JvbGxQb3MpbD1lLnVwZGF0ZVNjcm9sbFBvcztlbHNlIGlmKGUuc2VsZWN0aW9uQ2hhbmdlZCYmbi5zY3JvbGxlci5jbGllbnRIZWlnaHQpe3ZhciBhPVEodCxyLnNlbC5oZWFkKTtsPXVyKHQsYS5sZWZ0LGEudG9wLGEubGVmdCxhLmJvdHRvbSl9aWYoKGUuY2hhbmdlcy5sZW5ndGh8fGUuZm9yY2VVcGRhdGV8fGwmJm51bGwhPWwuc2Nyb2xsVG9wKSYmKHM9Yih0LGUuY2hhbmdlcyxsJiZsLnNjcm9sbFRvcCxlLmZvcmNlVXBkYXRlKSx0LmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0JiYodC5kb2Muc2Nyb2xsVG9wPXQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApKSwhcyYmZS5zZWxlY3Rpb25DaGFuZ2VkJiZBKHQpLGUudXBkYXRlU2Nyb2xsUG9zKXt2YXIgdT1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LW4uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LGwuc2Nyb2xsVG9wKSksYz1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCxsLnNjcm9sbExlZnQpKTtuLnNjcm9sbGVyLnNjcm9sbFRvcD1uLnNjcm9sbGJhclYuc2Nyb2xsVG9wPXIuc2Nyb2xsVG9wPXUsbi5zY3JvbGxlci5zY3JvbGxMZWZ0PW4uc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PXIuc2Nyb2xsTGVmdD1jLGcodCksZS5zY3JvbGxUb1BvcyYmc3IodCxRZSh0LmRvYyxlLnNjcm9sbFRvUG9zLmZyb20pLFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MudG8pLGUuc2Nyb2xsVG9Qb3MubWFyZ2luKX1lbHNlIGwmJmxyKHQpO2Uuc2VsZWN0aW9uQ2hhbmdlZCYmRCh0KSx0LnN0YXRlLmZvY3VzZWQmJmUudXBkYXRlSW5wdXQmJmRlKHQsZS51c2VyU2VsQ2hhbmdlKTt2YXIgaD1lLm1heWJlSGlkZGVuTWFya2VycyxkPWUubWF5YmVVbmhpZGRlbk1hcmtlcnM7aWYoaClmb3IodmFyIHA9MDtwPGgubGVuZ3RoOysrcCloW3BdLmxpbmVzLmxlbmd0aHx8S24oaFtwXSwiaGlkZSIpO2lmKGQpZm9yKHZhciBwPTA7cDxkLmxlbmd0aDsrK3ApZFtwXS5saW5lcy5sZW5ndGgmJktuKGRbcF0sInVuaGlkZSIpO3ZhciBtO2lmKC0tTW98fChtPVNvLFNvPW51bGwpLGUudGV4dENoYW5nZWQmJktuKHQsImNoYW5nZSIsdCxlLnRleHRDaGFuZ2VkKSxlLmN1cnNvckFjdGl2aXR5JiZLbih0LCJjdXJzb3JBY3Rpdml0eSIsdCksbSlmb3IodmFyIHA9MDtwPG0ubGVuZ3RoOysrcCltW3BdKCl9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10fHx0aGlzLG49IXIuY3VyT3A7biYmaWUocik7dHJ5e3ZhciBpPWUuYXBwbHkocixhcmd1bWVudHMpfWZpbmFsbHl7biYmb2Uocil9cmV0dXJuIGl9fWZ1bmN0aW9uIHNlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5jbSYmIXRoaXMuY20uY3VyT3A7ciYmaWUodGhpcy5jbSk7dHJ5e2U9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtyJiZvZSh0aGlzLmNtKX1yZXR1cm4gZX19ZnVuY3Rpb24gYWUodCxlKXt2YXIgcixuPSF0LmN1ck9wO24mJmllKHQpO3RyeXtyPWUoKX1maW5hbGx5e24mJm9lKHQpfXJldHVybiByfWZ1bmN0aW9uIHVlKHQsZSxyLG4pe251bGw9PWUmJihlPXQuZG9jLmZpcnN0KSxudWxsPT1yJiYocj10LmRvYy5maXJzdCt0LmRvYy5zaXplKSx0LmN1ck9wLmNoYW5nZXMucHVzaCh7ZnJvbTplLHRvOnIsZGlmZjpufSl9ZnVuY3Rpb24gY2UodCl7dC5kaXNwbGF5LnBvbGxpbmdGYXN0fHx0LmRpc3BsYXkucG9sbC5zZXQodC5vcHRpb25zLnBvbGxJbnRlcnZhbCxmdW5jdGlvbigpe2hlKHQpLHQuc3RhdGUuZm9jdXNlZCYmY2UodCl9KX1mdW5jdGlvbiBmZSh0KXtmdW5jdGlvbiBlKCl7dmFyIG49aGUodCk7bnx8cj8odC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExLGNlKHQpKToocj0hMCx0LmRpc3BsYXkucG9sbC5zZXQoNjAsZSkpfXZhciByPSExO3QuZGlzcGxheS5wb2xsaW5nRmFzdD0hMCx0LmRpc3BsYXkucG9sbC5zZXQoMjAsZSl9ZnVuY3Rpb24gaGUodCl7dmFyIGU9dC5kaXNwbGF5LmlucHV0LHI9dC5kaXNwbGF5LnByZXZJbnB1dCxuPXQuZG9jLGk9bi5zZWw7aWYoIXQuc3RhdGUuZm9jdXNlZHx8SW8oZSl8fGdlKHQpfHx0LnN0YXRlLmRpc2FibGVJbnB1dClyZXR1cm4hMTt0LnN0YXRlLnBhc3RlSW5jb21pbmcmJnQuc3RhdGUuZmFrZWRMYXN0Q2hhciYmKGUudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxlLnZhbHVlLmxlbmd0aC0xKSx0LnN0YXRlLmZha2VkTGFzdENoYXI9ITEpO3ZhciBvPWUudmFsdWU7aWYobz09ciYmamUoaS5mcm9tLGkudG8pKXJldHVybiExO2lmKEFpJiYhTmkmJnQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj09PW8pcmV0dXJuIGRlKHQsITApLCExO3ZhciBsPSF0LmN1ck9wO2wmJmllKHQpLGkuc2hpZnQ9ITE7Zm9yKHZhciBzPTAsYT1NYXRoLm1pbihyLmxlbmd0aCxvLmxlbmd0aCk7YT5zJiZyLmNoYXJDb2RlQXQocyk9PW8uY2hhckNvZGVBdChzKTspKytzO3ZhciB1PWkuZnJvbSxjPWkudG87czxyLmxlbmd0aD91PVllKHUubGluZSx1LmNoLShyLmxlbmd0aC1zKSk6dC5zdGF0ZS5vdmVyd3JpdGUmJmplKHUsYykmJiF0LnN0YXRlLnBhc3RlSW5jb21pbmcmJihjPVllKGMubGluZSxNYXRoLm1pbihnbihuLGMubGluZSkudGV4dC5sZW5ndGgsYy5jaCsoby5sZW5ndGgtcykpKSk7dmFyIGY9dC5jdXJPcC51cGRhdGVJbnB1dCxoPXtmcm9tOnUsdG86Yyx0ZXh0OnpvKG8uc2xpY2UocykpLG9yaWdpbjp0LnN0YXRlLnBhc3RlSW5jb21pbmc/InBhc3RlIjoiK2lucHV0In07cmV0dXJuIEJlKHQuZG9jLGgsImVuZCIpLHQuY3VyT3AudXBkYXRlSW5wdXQ9ZixVbih0LCJpbnB1dFJlYWQiLHQsaCksby5sZW5ndGg+MWUzfHxvLmluZGV4T2YoIlxuIik+LTE/ZS52YWx1ZT10LmRpc3BsYXkucHJldklucHV0PSIiOnQuZGlzcGxheS5wcmV2SW5wdXQ9byxsJiZvZSh0KSx0LnN0YXRlLnBhc3RlSW5jb21pbmc9ITEsITB9ZnVuY3Rpb24gZGUodCxlKXt2YXIgcixuLGk9dC5kb2M7aWYoamUoaS5zZWwuZnJvbSxpLnNlbC50bykpZSYmKHQuZGlzcGxheS5wcmV2SW5wdXQ9dC5kaXNwbGF5LmlucHV0LnZhbHVlPSIiLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCkpO2Vsc2V7dC5kaXNwbGF5LnByZXZJbnB1dD0iIixyPUZvJiYoaS5zZWwudG8ubGluZS1pLnNlbC5mcm9tLmxpbmU+MTAwfHwobj10LmdldFNlbGVjdGlvbigpKS5sZW5ndGg+MWUzKTt2YXIgbz1yPyItIjpufHx0LmdldFNlbGVjdGlvbigpO3QuZGlzcGxheS5pbnB1dC52YWx1ZT1vLHQuc3RhdGUuZm9jdXNlZCYmSm4odC5kaXNwbGF5LmlucHV0KSxBaSYmIU5pJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW8pfXQuZGlzcGxheS5pbmFjY3VyYXRlU2VsZWN0aW9uPXJ9ZnVuY3Rpb24gcGUodCl7Im5vY3Vyc29yIj09dC5vcHRpb25zLnJlYWRPbmx5fHxWaSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09dC5kaXNwbGF5LmlucHV0fHx0LmRpc3BsYXkuaW5wdXQuZm9jdXMoKX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gdC5vcHRpb25zLnJlYWRPbmx5fHx0LmRvYy5jYW50RWRpdH1mdW5jdGlvbiBtZSh0KXtmdW5jdGlvbiBlKCl7dC5zdGF0ZS5mb2N1c2VkJiZzZXRUaW1lb3V0KGlpKHBlLHQpLDApfWZ1bmN0aW9uIHIoKXtudWxsPT1zJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz1udWxsLGwuY2FjaGVkQ2hhcldpZHRoPWwuY2FjaGVkVGV4dEhlaWdodD1Pbz1udWxsLF8odCksYWUodCxpaSh1ZSx0KSl9LDEwMCkpfWZ1bmN0aW9uIG4oKXtmb3IodmFyIHQ9bC53cmFwcGVyLnBhcmVudE5vZGU7dCYmdCE9ZG9jdW1lbnQuYm9keTt0PXQucGFyZW50Tm9kZSk7dD9zZXRUaW1lb3V0KG4sNWUzKTpWbih3aW5kb3csInJlc2l6ZSIscil9ZnVuY3Rpb24gaShlKXtYbih0LGUpfHx0Lm9wdGlvbnMub25EcmFnRXZlbnQmJnQub3B0aW9ucy5vbkRyYWdFdmVudCh0LEVuKGUpKXx8UG4oZSl9ZnVuY3Rpb24gbygpe2wuaW5hY2N1cmF0ZVNlbGVjdGlvbiYmKGwucHJldklucHV0PSIiLGwuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxsLmlucHV0LnZhbHVlPXQuZ2V0U2VsZWN0aW9uKCksSm4obC5pbnB1dCkpfXZhciBsPXQuZGlzcGxheTtHbihsLnNjcm9sbGVyLCJtb3VzZWRvd24iLGxlKHQsYmUpKSxBaT9HbihsLnNjcm9sbGVyLCJkYmxjbGljayIsbGUodCxmdW5jdGlvbihlKXtpZighWG4odCxlKSl7dmFyIHI9eWUodCxlKTtpZihyJiYhd2UodCxlKSYmIXZlKHQuZGlzcGxheSxlKSl7em4oZSk7dmFyIG49bXIoZ24odC5kb2Msci5saW5lKS50ZXh0LHIpO2VyKHQuZG9jLG4uZnJvbSxuLnRvKX19fSkpOkduKGwuc2Nyb2xsZXIsImRibGNsaWNrIixmdW5jdGlvbihlKXtYbih0LGUpfHx6bihlKX0pLEduKGwubGluZVNwYWNlLCJzZWxlY3RzdGFydCIsZnVuY3Rpb24odCl7dmUobCx0KXx8em4odCl9KSxaaXx8R24obC5zY3JvbGxlciwiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe0llKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJihTZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsVG9wKSxNZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwhMCksS24odCwic2Nyb2xsIix0KSl9KSxHbihsLnNjcm9sbGJhclYsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmU2UodCxsLnNjcm9sbGJhclYuc2Nyb2xsVG9wKX0pLEduKGwuc2Nyb2xsYmFySCwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZNZSh0LGwuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KX0pLEduKGwuc2Nyb2xsZXIsIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGUpe1RlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJET01Nb3VzZVNjcm9sbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsYmFySCwibW91c2Vkb3duIixlKSxHbihsLnNjcm9sbGJhclYsIm1vdXNlZG93biIsZSksR24obC53cmFwcGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC53cmFwcGVyLnNjcm9sbFRvcD1sLndyYXBwZXIuc2Nyb2xsTGVmdD0wfSk7dmFyIHM7R24od2luZG93LCJyZXNpemUiLHIpLHNldFRpbWVvdXQobiw1ZTMpLEduKGwuaW5wdXQsImtleXVwIixsZSh0LGZ1bmN0aW9uKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbktleUV2ZW50JiZ0Lm9wdGlvbnMub25LZXlFdmVudCh0LEVuKGUpKXx8MTY9PWUua2V5Q29kZSYmKHQuZG9jLnNlbC5zaGlmdD0hMSl9KSksR24obC5pbnB1dCwiaW5wdXQiLGZ1bmN0aW9uKCl7QWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW51bGwpLGZlKHQpfSksR24obC5pbnB1dCwia2V5ZG93biIsbGUodCxXZSkpLEduKGwuaW5wdXQsImtleXByZXNzIixsZSh0LE9lKSksR24obC5pbnB1dCwiZm9jdXMiLGlpKEVlLHQpKSxHbihsLmlucHV0LCJibHVyIixpaSh6ZSx0KSksdC5vcHRpb25zLmRyYWdEcm9wJiYoR24obC5zY3JvbGxlciwiZHJhZ3N0YXJ0IixmdW5jdGlvbihlKXtrZSh0LGUpfSksR24obC5zY3JvbGxlciwiZHJhZ2VudGVyIixpKSxHbihsLnNjcm9sbGVyLCJkcmFnb3ZlciIsaSksR24obC5zY3JvbGxlciwiZHJvcCIsbGUodCxMZSkpKSxHbihsLnNjcm9sbGVyLCJwYXN0ZSIsZnVuY3Rpb24oZSl7dmUobCxlKXx8KHBlKHQpLGZlKHQpKX0pLEduKGwuaW5wdXQsInBhc3RlIixmdW5jdGlvbigpe2lmKFdpJiYhdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYhKG5ldyBEYXRlLXQuc3RhdGUubGFzdE1pZGRsZURvd248MjAwKSl7dmFyIGU9bC5pbnB1dC5zZWxlY3Rpb25TdGFydCxyPWwuaW5wdXQuc2VsZWN0aW9uRW5kO2wuaW5wdXQudmFsdWUrPSIkIixsLmlucHV0LnNlbGVjdGlvblN0YXJ0PWUsbC5pbnB1dC5zZWxlY3Rpb25FbmQ9cix0LnN0YXRlLmZha2VkTGFzdENoYXI9ITB9dC5zdGF0ZS5wYXN0ZUluY29taW5nPSEwLGZlKHQpfSksR24obC5pbnB1dCwiY3V0IixvKSxHbihsLmlucHV0LCJjb3B5IixvKSxGaSYmR24obC5zaXplciwibW91c2V1cCIsZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0JiZsLmlucHV0LmJsdXIoKSxwZSh0KX0pfWZ1bmN0aW9uIHZlKHQsZSl7Zm9yKHZhciByPVJuKGUpO3IhPXQud3JhcHBlcjtyPXIucGFyZW50Tm9kZSlpZighcnx8ci5pZ25vcmVFdmVudHN8fHIucGFyZW50Tm9kZT09dC5zaXplciYmciE9dC5tb3ZlcilyZXR1cm4hMH1mdW5jdGlvbiB5ZSh0LGUscil7dmFyIG49dC5kaXNwbGF5O2lmKCFyKXt2YXIgaT1SbihlKTtpZihpPT1uLnNjcm9sbGJhckh8fGk9PW4uc2Nyb2xsYmFySC5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhclZ8fGk9PW4uc2Nyb2xsYmFyVi5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhckZpbGxlcnx8aT09bi5ndXR0ZXJGaWxsZXIpcmV0dXJuIG51bGx9dmFyIG8sbCxzPWZpKG4ubGluZVNwYWNlKTt0cnl7bz1lLmNsaWVudFgsbD1lLmNsaWVudFl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9cmV0dXJuIHRlKHQsby1zLmxlZnQsbC1zLnRvcCl9ZnVuY3Rpb24gYmUodCl7ZnVuY3Rpb24gZSh0KXtpZighamUodix0KSl7aWYodj10LCJzaW5nbGUiPT1jKXJldHVybiBlcihpLmRvYyxRZShsLGEpLHQpLHZvaWQgMDsKaWYoZz1RZShsLGcpLG09UWUobCxtKSwiZG91YmxlIj09Yyl7dmFyIGU9bXIoZ24obCx0LmxpbmUpLnRleHQsdCk7JGUodCxnKT9lcihpLmRvYyxlLmZyb20sbSk6ZXIoaS5kb2MsZyxlLnRvKX1lbHNlInRyaXBsZSI9PWMmJigkZSh0LGcpP2VyKGkuZG9jLG0sUWUobCxZZSh0LmxpbmUsMCkpKTplcihpLmRvYyxnLFFlKGwsWWUodC5saW5lKzEsMCkpKSl9fWZ1bmN0aW9uIHIodCl7dmFyIG49KytiLHM9eWUoaSx0LCEwKTtpZihzKWlmKGplKHMsaCkpe3ZhciBhPXQuY2xpZW50WTx5LnRvcD8tMjA6dC5jbGllbnRZPnkuYm90dG9tPzIwOjA7YSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmKG8uc2Nyb2xsZXIuc2Nyb2xsVG9wKz1hLHIodCkpfSksNTApfWVsc2V7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKSxoPXMsZShzKTt2YXIgdT1wKG8sbCk7KHMubGluZT49dS50b3x8cy5saW5lPHUuZnJvbSkmJnNldFRpbWVvdXQobGUoaSxmdW5jdGlvbigpe2I9PW4mJnIodCl9KSwxNTApfX1mdW5jdGlvbiBuKHQpe2I9MS8wLHpuKHQpLHBlKGkpLFZuKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLFZuKGRvY3VtZW50LCJtb3VzZXVwIixDKX1pZighWG4odGhpcyx0KSl7dmFyIGk9dGhpcyxvPWkuZGlzcGxheSxsPWkuZG9jLHM9bC5zZWw7aWYocy5zaGlmdD10LnNoaWZ0S2V5LHZlKG8sdCkpcmV0dXJuIFdpfHwoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe28uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwfSwxMDApKSx2b2lkIDA7aWYoIXdlKGksdCkpe3ZhciBhPXllKGksdCk7c3dpdGNoKEJuKHQpKXtjYXNlIDM6cmV0dXJuIFppJiZJZS5jYWxsKGksaSx0KSx2b2lkIDA7Y2FzZSAyOnJldHVybiBXaSYmKGkuc3RhdGUubGFzdE1pZGRsZURvd249K25ldyBEYXRlKSxhJiZlcihpLmRvYyxhKSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx6bih0KSx2b2lkIDB9aWYoIWEpcmV0dXJuIFJuKHQpPT1vLnNjcm9sbGVyJiZ6bih0KSx2b2lkIDA7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKTt2YXIgdT0rbmV3IERhdGUsYz0ic2luZ2xlIjtpZihqaSYmamkudGltZT51LTQwMCYmamUoamkucG9zLGEpKWM9InRyaXBsZSIsem4odCksc2V0VGltZW91dChpaShwZSxpKSwyMCksdnIoaSxhLmxpbmUpO2Vsc2UgaWYoWWkmJllpLnRpbWU+dS00MDAmJmplKFlpLnBvcyxhKSl7Yz0iZG91YmxlIixqaT17dGltZTp1LHBvczphfSx6bih0KTt2YXIgZj1tcihnbihsLGEubGluZSkudGV4dCxhKTtlcihpLmRvYyxmLmZyb20sZi50byl9ZWxzZSBZaT17dGltZTp1LHBvczphfTt2YXIgaD1hO2lmKGkub3B0aW9ucy5kcmFnRHJvcCYmV28mJiFnZShpKSYmIWplKHMuZnJvbSxzLnRvKSYmISRlKGEscy5mcm9tKSYmISRlKHMudG8sYSkmJiJzaW5nbGUiPT1jKXt2YXIgZD1sZShpLGZ1bmN0aW9uKGUpe1dpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEpLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PSExLFZuKGRvY3VtZW50LCJtb3VzZXVwIixkKSxWbihvLnNjcm9sbGVyLCJkcm9wIixkKSxNYXRoLmFicyh0LmNsaWVudFgtZS5jbGllbnRYKStNYXRoLmFicyh0LmNsaWVudFktZS5jbGllbnRZKTwxMCYmKHpuKGUpLGVyKGkuZG9jLGEpLHBlKGkpKX0pO3JldHVybiBXaSYmKG8uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwKSxpLnN0YXRlLmRyYWdnaW5nVGV4dD1kLG8uc2Nyb2xsZXIuZHJhZ0Ryb3AmJm8uc2Nyb2xsZXIuZHJhZ0Ryb3AoKSxHbihkb2N1bWVudCwibW91c2V1cCIsZCksR24oby5zY3JvbGxlciwiZHJvcCIsZCksdm9pZCAwfXpuKHQpLCJzaW5nbGUiPT1jJiZlcihpLmRvYyxRZShsLGEpKTt2YXIgZz1zLmZyb20sbT1zLnRvLHY9YSx5PWZpKG8ud3JhcHBlciksYj0wLHg9bGUoaSxmdW5jdGlvbih0KXtBaXx8Qm4odCk/cih0KTpuKHQpfSksQz1sZShpLG4pO0duKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixDKX19fWZ1bmN0aW9uIHhlKHQsZSxyLG4saSl7dHJ5e3ZhciBvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4hMX1pZihvPj1NYXRoLmZsb29yKGZpKHQuZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpcmV0dXJuITE7biYmem4oZSk7dmFyIHM9dC5kaXNwbGF5LGE9Zmkocy5saW5lRGl2KTtpZihsPmEuYm90dG9tfHwhWW4odCxyKSlyZXR1cm4gRm4oZSk7bC09YS50b3Atcy52aWV3T2Zmc2V0O2Zvcih2YXIgdT0wO3U8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysrdSl7dmFyIGM9cy5ndXR0ZXJzLmNoaWxkTm9kZXNbdV07aWYoYyYmZmkoYykucmlnaHQ+PW8pe3ZhciBmPXhuKHQuZG9jLGwpLGg9dC5vcHRpb25zLmd1dHRlcnNbdV07cmV0dXJuIGkodCxyLHQsZixoLGUpLEZuKGUpfX19ZnVuY3Rpb24gQ2UodCxlKXtyZXR1cm4gWW4odCwiZ3V0dGVyQ29udGV4dE1lbnUiKT94ZSh0LGUsImd1dHRlckNvbnRleHRNZW51IiwhMSxLbik6ITF9ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4geGUodCxlLCJndXR0ZXJDbGljayIsITAsVW4pfWZ1bmN0aW9uIExlKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHx2ZShlLmRpc3BsYXksdCl8fGUub3B0aW9ucy5vbkRyYWdFdmVudCYmZS5vcHRpb25zLm9uRHJhZ0V2ZW50KGUsRW4odCkpKSl7em4odCksQWkmJih0bz0rbmV3IERhdGUpO3ZhciByPXllKGUsdCwhMCksbj10LmRhdGFUcmFuc2Zlci5maWxlcztpZihyJiYhZ2UoZSkpaWYobiYmbi5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIGk9bi5sZW5ndGgsbz1BcnJheShpKSxsPTAscz1mdW5jdGlvbih0LG4pe3ZhciBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPWZ1bmN0aW9uKCl7b1tuXT1zLnJlc3VsdCwrK2w9PWkmJihyPVFlKGUuZG9jLHIpLEJlKGUuZG9jLHtmcm9tOnIsdG86cix0ZXh0OnpvKG8uam9pbigiXG4iKSksb3JpZ2luOiJwYXN0ZSJ9LCJhcm91bmQiKSl9LHMucmVhZEFzVGV4dCh0KX0sYT0wO2k+YTsrK2EpcyhuW2FdLGEpO2Vsc2V7aWYoZS5zdGF0ZS5kcmFnZ2luZ1RleHQmJiEkZShyLGUuZG9jLnNlbC5mcm9tKSYmISRlKGUuZG9jLnNlbC50byxyKSlyZXR1cm4gZS5zdGF0ZS5kcmFnZ2luZ1RleHQodCksc2V0VGltZW91dChpaShwZSxlKSwyMCksdm9pZCAwO3RyeXt2YXIgbz10LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7aWYobyl7dmFyIHU9ZS5kb2Muc2VsLmZyb20sYz1lLmRvYy5zZWwudG87bnIoZS5kb2MscixyKSxlLnN0YXRlLmRyYWdnaW5nVGV4dCYmX2UoZS5kb2MsIiIsdSxjLCJwYXN0ZSIpLGUucmVwbGFjZVNlbGVjdGlvbihvLG51bGwsInBhc3RlIikscGUoZSl9fWNhdGNoKHQpe319fX1mdW5jdGlvbiBrZSh0LGUpe2lmKEFpJiYoIXQuc3RhdGUuZHJhZ2dpbmdUZXh0fHwrbmV3IERhdGUtdG88MTAwKSlyZXR1cm4gUG4oZSksdm9pZCAwO2lmKCFYbih0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt2YXIgcj10LmdldFNlbGVjdGlvbigpO2lmKGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLHIpLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSYmIUlpKXt2YXIgbj1zaSgiaW1nIixudWxsLG51bGwsInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyIpO24uc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSIsemkmJihuLndpZHRoPW4uaGVpZ2h0PTEsdC5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQobiksbi5fdG9wPW4ub2Zmc2V0VG9wKSxlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UobiwwLDApLHppJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9fX1mdW5jdGlvbiBTZSh0LGUpe01hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1lKTwyfHwodC5kb2Muc2Nyb2xsVG9wPWUsVGl8fGIodCxbXSxlKSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT1lJiYodC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ZSksVGkmJmIodCxbXSksVyh0LDEwMCkpfWZ1bmN0aW9uIE1lKHQsZSxyKXsocj9lPT10LmRvYy5zY3JvbGxMZWZ0Ok1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtZSk8Mil8fChlPU1hdGgubWluKGUsdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoLXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCksdC5kb2Muc2Nyb2xsTGVmdD1lLGcodCksdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0IT1lJiYodC5kaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdD1lKSl9ZnVuY3Rpb24gVGUodCxlKXt2YXIgcj1lLndoZWVsRGVsdGFYLG49ZS53aGVlbERlbHRhWTtudWxsPT1yJiZlLmRldGFpbCYmZS5heGlzPT1lLkhPUklaT05UQUxfQVhJUyYmKHI9ZS5kZXRhaWwpLG51bGw9PW4mJmUuZGV0YWlsJiZlLmF4aXM9PWUuVkVSVElDQUxfQVhJUz9uPWUuZGV0YWlsOm51bGw9PW4mJihuPWUud2hlZWxEZWx0YSk7dmFyIGk9dC5kaXNwbGF5LG89aS5zY3JvbGxlcjtpZihyJiZvLnNjcm9sbFdpZHRoPm8uY2xpZW50V2lkdGh8fG4mJm8uc2Nyb2xsSGVpZ2h0Pm8uY2xpZW50SGVpZ2h0KXtpZihuJiZLaSYmV2kpZm9yKHZhciBsPWUudGFyZ2V0O2whPW87bD1sLnBhcmVudE5vZGUpaWYobC5saW5lT2JqKXt0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PWw7YnJlYWt9aWYociYmIVRpJiYhemkmJm51bGwhPXJvKXJldHVybiBuJiZTZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxUb3ArbipybyxvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodCkpKSxNZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxMZWZ0K3Iqcm8sby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoKSkpLHpuKGUpLGkud2hlZWxTdGFydFg9bnVsbCx2b2lkIDA7aWYobiYmbnVsbCE9cm8pe3ZhciBzPW4qcm8sYT10LmRvYy5zY3JvbGxUb3AsdT1hK2kud3JhcHBlci5jbGllbnRIZWlnaHQ7MD5zP2E9TWF0aC5tYXgoMCxhK3MtNTApOnU9TWF0aC5taW4odC5kb2MuaGVpZ2h0LHUrcys1MCksYih0LFtdLHt0b3A6YSxib3R0b206dX0pfTIwPmVvJiYobnVsbD09aS53aGVlbFN0YXJ0WD8oaS53aGVlbFN0YXJ0WD1vLnNjcm9sbExlZnQsaS53aGVlbFN0YXJ0WT1vLnNjcm9sbFRvcCxpLndoZWVsRFg9cixpLndoZWVsRFk9bixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYobnVsbCE9aS53aGVlbFN0YXJ0WCl7dmFyIHQ9by5zY3JvbGxMZWZ0LWkud2hlZWxTdGFydFgsZT1vLnNjcm9sbFRvcC1pLndoZWVsU3RhcnRZLHI9ZSYmaS53aGVlbERZJiZlL2kud2hlZWxEWXx8dCYmaS53aGVlbERYJiZ0L2kud2hlZWxEWDtpLndoZWVsU3RhcnRYPWkud2hlZWxTdGFydFk9bnVsbCxyJiYocm89KHJvKmVvK3IpLyhlbysxKSwrK2VvKX19LDIwMCkpOihpLndoZWVsRFgrPXIsaS53aGVlbERZKz1uKSl9fWZ1bmN0aW9uIEFlKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPW1vW2VdLCFlKSlyZXR1cm4hMTt0LmRpc3BsYXkucG9sbGluZ0Zhc3QmJmhlKHQpJiYodC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExKTt2YXIgbj10LmRvYyxpPW4uc2VsLnNoaWZ0LG89ITE7dHJ5e2dlKHQpJiYodC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSEwKSxyJiYobi5zZWwuc2hpZnQ9ITEpLG89ZSh0KSE9QW99ZmluYWxseXtuLnNlbC5zaGlmdD1pLHQuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gb31mdW5jdGlvbiBIZSh0KXt2YXIgZT10LnN0YXRlLmtleU1hcHMuc2xpY2UoMCk7cmV0dXJuIHQub3B0aW9ucy5leHRyYUtleXMmJmUucHVzaCh0Lm9wdGlvbnMuZXh0cmFLZXlzKSxlLnB1c2godC5vcHRpb25zLmtleU1hcCksZX1mdW5jdGlvbiBOZSh0LGUpe3ZhciByPUNyKHQub3B0aW9ucy5rZXlNYXApLG49ci5hdXRvO2NsZWFyVGltZW91dChubyksbiYmIUxyKGUpJiYobm89c2V0VGltZW91dChmdW5jdGlvbigpe0NyKHQub3B0aW9ucy5rZXlNYXApPT1yJiYodC5vcHRpb25zLmtleU1hcD1uLmNhbGw/bi5jYWxsKG51bGwsdCk6bixsKHQpKX0sNTApKTt2YXIgaT1rcihlLCEwKSxvPSExO2lmKCFpKXJldHVybiExO3ZhciBzPUhlKHQpO3JldHVybiBvPWUuc2hpZnRLZXk/d3IoIlNoaWZ0LSIraSxzLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSl8fHdyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiBlPy9eZ29bQS1aXS8udGVzdChlKTplLm1vdGlvbik/QWUodCxlKTp2b2lkIDB9KTp3cihpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSl9KSxvJiYoem4oZSksRCh0KSxOaSYmKGUub2xkS2V5Q29kZT1lLmtleUNvZGUsZS5rZXlDb2RlPTApLFVuKHQsImtleUhhbmRsZWQiLHQsaSxlKSksb31mdW5jdGlvbiBEZSh0LGUscil7dmFyIG49d3IoIiciK3IrIiciLEhlKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSk7cmV0dXJuIG4mJih6bihlKSxEKHQpLFVuKHQsImtleUhhbmRsZWQiLHQsIiciK3IrIiciLGUpKSxufWZ1bmN0aW9uIFdlKHQpe3ZhciBlPXRoaXM7aWYoZS5zdGF0ZS5mb2N1c2VkfHxFZShlKSwhKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe0FpJiYyNz09dC5rZXlDb2RlJiYodC5yZXR1cm5WYWx1ZT0hMSk7dmFyIHI9dC5rZXlDb2RlO2UuZG9jLnNlbC5zaGlmdD0xNj09cnx8dC5zaGlmdEtleTt2YXIgbj1OZShlLHQpO3ppJiYob289bj9yOm51bGwsIW4mJjg4PT1yJiYhRm8mJihLaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmZS5yZXBsYWNlU2VsZWN0aW9uKCIiKSl9fWZ1bmN0aW9uIE9lKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHxlLm9wdGlvbnMub25LZXlFdmVudCYmZS5vcHRpb25zLm9uS2V5RXZlbnQoZSxFbih0KSkpKXt2YXIgcj10LmtleUNvZGUsbj10LmNoYXJDb2RlO2lmKHppJiZyPT1vbylyZXR1cm4gb289bnVsbCx6bih0KSx2b2lkIDA7aWYoISh6aSYmKCF0LndoaWNofHx0LndoaWNoPDEwKXx8RmkpfHwhTmUoZSx0KSl7dmFyIGk9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1uP3I6bik7dGhpcy5vcHRpb25zLmVsZWN0cmljQ2hhcnMmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycyYmdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50JiYhZ2UodGhpcykmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGkpPi0xJiZzZXRUaW1lb3V0KGxlKGUsZnVuY3Rpb24oKXtocihlLGUuZG9jLnNlbC50by5saW5lLCJzbWFydCIpfSksNzUpLERlKGUsdCxpKXx8KEFpJiYhTmkmJihlLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUoZSkpfX19ZnVuY3Rpb24gRWUodCl7Im5vY3Vyc29yIiE9dC5vcHRpb25zLnJlYWRPbmx5JiYodC5zdGF0ZS5mb2N1c2VkfHwoS24odCwiZm9jdXMiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMCwtMT09dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pJiYodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3ItZm9jdXNlZCIpLHQuY3VyT3B8fChkZSh0LCEwKSxXaSYmc2V0VGltZW91dChpaShkZSx0LCEwKSwwKSkpLGNlKHQpLEQodCkpfWZ1bmN0aW9uIHplKHQpe3Quc3RhdGUuZm9jdXNlZCYmKEtuKHQsImJsdXIiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMSx0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCIiKSksY2xlYXJJbnRlcnZhbCh0LmRpc3BsYXkuYmxpbmtlciksc2V0VGltZW91dChmdW5jdGlvbigpe3Quc3RhdGUuZm9jdXNlZHx8KHQuZG9jLnNlbC5zaGlmdD0hMSl9LDE1MCl9ZnVuY3Rpb24gSWUodCxlKXtmdW5jdGlvbiByKCl7aWYobnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7dmFyIHQ9aS5pbnB1dC52YWx1ZT0i4oCLIisoamUoby5mcm9tLG8udG8pPyIiOmkuaW5wdXQudmFsdWUpO2kucHJldklucHV0PSLigIsiLGkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9MSxpLmlucHV0LnNlbGVjdGlvbkVuZD10Lmxlbmd0aH19ZnVuY3Rpb24gbigpe2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9dSxOaSYmKGkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9aS5zY3JvbGxlci5zY3JvbGxUb3A9cyksY2UodCksbnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7KCFBaXx8TmkpJiZyKCksY2xlYXJUaW1lb3V0KGlvKTt2YXIgZT0wLG49ZnVuY3Rpb24oKXsiICI9PWkucHJldklucHV0JiYwPT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0P2xlKHQsbW8uc2VsZWN0QWxsKSh0KTplKys8MTA/aW89c2V0VGltZW91dChuLDUwMCk6ZGUodCl9O2lvPXNldFRpbWVvdXQobiwyMDApfX1pZighWG4odCxlLCJjb250ZXh0bWVudSIpKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYy5zZWw7aWYoIXZlKGksZSkmJiFDZSh0LGUpKXt2YXIgbD15ZSh0LGUpLHM9aS5zY3JvbGxlci5zY3JvbGxUb3A7aWYobCYmIXppKXt2YXIgYT10Lm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51O2EmJihqZShvLmZyb20sby50byl8fCRlKGwsby5mcm9tKXx8ISRlKGwsby50bykpJiZsZSh0LG5yKSh0LmRvYyxsLGwpO3ZhciB1PWkuaW5wdXQuc3R5bGUuY3NzVGV4dDtpZihpLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5pbnB1dC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIisoZS5jbGllbnRZLTUpKyJweDsgbGVmdDogIisoZS5jbGllbnRYLTUpKyJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogd2hpdGU7IG91dGxpbmU6IG5vbmU7IisiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IC1tcy1vcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTsiLHBlKHQpLGRlKHQsITApLGplKG8uZnJvbSxvLnRvKSYmKGkuaW5wdXQudmFsdWU9aS5wcmV2SW5wdXQ9IiAiKSxBaSYmIU5pJiZyKCksWmkpe1BuKGUpO3ZhciBjPWZ1bmN0aW9uKCl7Vm4od2luZG93LCJtb3VzZXVwIixjKSxzZXRUaW1lb3V0KG4sMjApfTtHbih3aW5kb3csIm1vdXNldXAiLGMpfWVsc2Ugc2V0VGltZW91dChuLDUwKX19fX1mdW5jdGlvbiBGZSh0LGUscil7aWYoISRlKGUuZnJvbSxyKSlyZXR1cm4gUWUodCxyKTt2YXIgbj1lLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSk7aWYoci5saW5lPmUudG8ubGluZStuKXt2YXIgaT1yLmxpbmUtbixvPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGk+bz9ZZShvLGduKHQsbykudGV4dC5sZW5ndGgpOkplKHIsZ24odCxpKS50ZXh0Lmxlbmd0aCl9aWYoci5saW5lPT1lLnRvLmxpbmUrbilyZXR1cm4gSmUocixRbihlLnRleHQpLmxlbmd0aCsoMT09ZS50ZXh0Lmxlbmd0aD9lLmZyb20uY2g6MCkrZ24odCxlLnRvLmxpbmUpLnRleHQubGVuZ3RoLWUudG8uY2gpO3ZhciBsPXIubGluZS1lLmZyb20ubGluZTtyZXR1cm4gSmUocixlLnRleHRbbF0ubGVuZ3RoKyhsPzA6ZS5mcm9tLmNoKSl9ZnVuY3Rpb24gUGUodCxlLHIpe2lmKHImJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm57YW5jaG9yOkZlKHQsZSxyLmFuY2hvciksaGVhZDpGZSh0LGUsci5oZWFkKX07aWYoInN0YXJ0Ij09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOmUuZnJvbX07dmFyIG49bG8oZSk7aWYoImFyb3VuZCI9PXIpcmV0dXJue2FuY2hvcjplLmZyb20saGVhZDpufTtpZigiZW5kIj09cilyZXR1cm57YW5jaG9yOm4saGVhZDpufTt2YXIgaT1mdW5jdGlvbih0KXtpZigkZSh0LGUuZnJvbSkpcmV0dXJuIHQ7aWYoISRlKGUudG8sdCkpcmV0dXJuIG47dmFyIHI9dC5saW5lK2UudGV4dC5sZW5ndGgtKGUudG8ubGluZS1lLmZyb20ubGluZSktMSxpPXQuY2g7cmV0dXJuIHQubGluZT09ZS50by5saW5lJiYoaSs9bi5jaC1lLnRvLmNoKSxZZShyLGkpfTtyZXR1cm57YW5jaG9yOmkodC5zZWwuYW5jaG9yKSxoZWFkOmkodC5zZWwuaGVhZCl9fWZ1bmN0aW9uIFJlKHQsZSxyKXt2YXIgbj17Y2FuY2VsZWQ6ITEsZnJvbTplLmZyb20sdG86ZS50byx0ZXh0OmUudGV4dCxvcmlnaW46ZS5vcmlnaW4sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxlZD0hMH19O3JldHVybiByJiYobi51cGRhdGU9ZnVuY3Rpb24oZSxyLG4saSl7ZSYmKHRoaXMuZnJvbT1RZSh0LGUpKSxyJiYodGhpcy50bz1RZSh0LHIpKSxuJiYodGhpcy50ZXh0PW4pLHZvaWQgMCE9PWkmJih0aGlzLm9yaWdpbj1pKX0pLEtuKHQsImJlZm9yZUNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVDaGFuZ2UiLHQuY20sbiksbi5jYW5jZWxlZD9udWxsOntmcm9tOm4uZnJvbSx0bzpuLnRvLHRleHQ6bi50ZXh0LG9yaWdpbjpuLm9yaWdpbn19ZnVuY3Rpb24gQmUodCxlLHIsbil7aWYodC5jbSl7aWYoIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sQmUpKHQsZSxyLG4pO2lmKHQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cylyZXR1cm59aWYoIShZbih0LCJiZWZvcmVDaGFuZ2UiKXx8dC5jbSYmWW4odC5jbSwiYmVmb3JlQ2hhbmdlIikpfHwoZT1SZSh0LGUsITApKSl7dmFyIGk9cWkmJiFuJiZGcih0LGUuZnJvbSxlLnRvKTtpZihpKXtmb3IodmFyIG89aS5sZW5ndGgtMTtvPj0xOy0tbylHZSh0LHtmcm9tOmlbb10uZnJvbSx0bzppW29dLnRvLHRleHQ6WyIiXX0pO2kubGVuZ3RoJiZHZSh0LHtmcm9tOmlbMF0uZnJvbSx0bzppWzBdLnRvLHRleHQ6ZS50ZXh0fSxyKX1lbHNlIEdlKHQsZSxyKX19ZnVuY3Rpb24gR2UodCxlLHIpe2lmKDEhPWUudGV4dC5sZW5ndGh8fCIiIT1lLnRleHRbMF18fCFqZShlLmZyb20sZS50bykpe3ZhciBuPVBlKHQsZSxyKTtNbih0LGUsbix0LmNtP3QuY20uY3VyT3AuaWQ6MC8wKSxVZSh0LGUsbix6cih0LGUpKTt2YXIgaT1bXTtkbih0LGZ1bmN0aW9uKHQscil7cnx8LTEhPXRpKGksdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxlKSxpLnB1c2godC5oaXN0b3J5KSksVWUodCxlLG51bGwsenIodCxlKSl9KX19ZnVuY3Rpb24gVmUodCxlKXtpZighdC5jbXx8IXQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cyl7dmFyIHI9dC5oaXN0b3J5LG49KCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLnBvcCgpO2lmKG4pe3ZhciBpPXtjaGFuZ2VzOltdLGFuY2hvckJlZm9yZTpuLmFuY2hvckFmdGVyLGhlYWRCZWZvcmU6bi5oZWFkQWZ0ZXIsYW5jaG9yQWZ0ZXI6bi5hbmNob3JCZWZvcmUsaGVhZEFmdGVyOm4uaGVhZEJlZm9yZSxnZW5lcmF0aW9uOnIuZ2VuZXJhdGlvbn07KCJ1bmRvIj09ZT9yLnVuZG9uZTpyLmRvbmUpLnB1c2goaSksci5nZW5lcmF0aW9uPW4uZ2VuZXJhdGlvbnx8KytyLm1heEdlbmVyYXRpb247Zm9yKHZhciBvPVluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSxsPW4uY2hhbmdlcy5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHM9bi5jaGFuZ2VzW2xdO2lmKHMub3JpZ2luPWUsbyYmIVJlKHQscywhMSkpcmV0dXJuKCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLmxlbmd0aD0wLHZvaWQgMDtpLmNoYW5nZXMucHVzaChTbih0LHMpKTt2YXIgYT1sP1BlKHQscyxudWxsKTp7YW5jaG9yOm4uYW5jaG9yQmVmb3JlLGhlYWQ6bi5oZWFkQmVmb3JlfTtVZSh0LHMsYSxJcih0LHMpKTt2YXIgdT1bXTtkbih0LGZ1bmN0aW9uKHQsZSl7ZXx8LTEhPXRpKHUsdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxzKSx1LnB1c2godC5oaXN0b3J5KSksVWUodCxzLG51bGwsSXIodCxzKSl9KX19fX1mdW5jdGlvbiBLZSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIFllKHQubGluZStlLHQuY2gpfXQuZmlyc3QrPWUsdC5jbSYmdWUodC5jbSx0LmZpcnN0LHQuZmlyc3QsZSksdC5zZWwuaGVhZD1yKHQuc2VsLmhlYWQpLHQuc2VsLmFuY2hvcj1yKHQuc2VsLmFuY2hvciksdC5zZWwuZnJvbT1yKHQuc2VsLmZyb20pLHQuc2VsLnRvPXIodC5zZWwudG8pfWZ1bmN0aW9uIFVlKHQsZSxyLG4pe2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFVlKSh0LGUscixuKTtpZihlLnRvLmxpbmU8dC5maXJzdClyZXR1cm4gS2UodCxlLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSkpLHZvaWQgMDtpZighKGUuZnJvbS5saW5lPnQubGFzdExpbmUoKSkpe2lmKGUuZnJvbS5saW5lPHQuZmlyc3Qpe3ZhciBpPWUudGV4dC5sZW5ndGgtMS0odC5maXJzdC1lLmZyb20ubGluZSk7S2UodCxpKSxlPXtmcm9tOlllKHQuZmlyc3QsMCksdG86WWUoZS50by5saW5lK2ksZS50by5jaCksdGV4dDpbUW4oZS50ZXh0KV0sb3JpZ2luOmUub3JpZ2lufX12YXIgbz10Lmxhc3RMaW5lKCk7ZS50by5saW5lPm8mJihlPXtmcm9tOmUuZnJvbSx0bzpZZShvLGduKHQsbykudGV4dC5sZW5ndGgpLHRleHQ6W2UudGV4dFswXV0sb3JpZ2luOmUub3JpZ2lufSksZS5yZW1vdmVkPW1uKHQsZS5mcm9tLGUudG8pLHJ8fChyPVBlKHQsZSxudWxsKSksdC5jbT9YZSh0LmNtLGUsbixyKTpjbih0LGUsbixyKX19ZnVuY3Rpb24gWGUodCxlLHIsbil7dmFyIG89dC5kb2MsbD10LmRpc3BsYXkscz1lLmZyb20sYT1lLnRvLHU9ITEsZj1zLmxpbmU7dC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGY9Ym4oR3IobyxnbihvLHMubGluZSkpKSxvLml0ZXIoZixhLmxpbmUrMSxmdW5jdGlvbih0KXtyZXR1cm4gdD09bC5tYXhMaW5lPyh1PSEwLCEwKTp2b2lkIDB9KSksJGUoby5zZWwuaGVhZCxlLmZyb20pfHwkZShlLnRvLG8uc2VsLmhlYWQpfHwodC5jdXJPcC5jdXJzb3JBY3Rpdml0eT0hMCksY24obyxlLHIsbixpKHQpKSx0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoby5pdGVyKGYscy5saW5lK2UudGV4dC5sZW5ndGgsZnVuY3Rpb24odCl7dmFyIGU9YyhvLHQpO2U+bC5tYXhMaW5lTGVuZ3RoJiYobC5tYXhMaW5lPXQsbC5tYXhMaW5lTGVuZ3RoPWUsbC5tYXhMaW5lQ2hhbmdlZD0hMCx1PSExKX0pLHUmJih0LmN1ck9wLnVwZGF0ZU1heExpbmU9ITApKSxvLmZyb250aWVyPU1hdGgubWluKG8uZnJvbnRpZXIscy5saW5lKSxXKHQsNDAwKTt2YXIgaD1lLnRleHQubGVuZ3RoLShhLmxpbmUtcy5saW5lKS0xO2lmKHVlKHQscy5saW5lLGEubGluZSsxLGgpLFluKHQsImNoYW5nZSIpKXt2YXIgZD17ZnJvbTpzLHRvOmEsdGV4dDplLnRleHQscmVtb3ZlZDplLnJlbW92ZWQsb3JpZ2luOmUub3JpZ2lufTtpZih0LmN1ck9wLnRleHRDaGFuZ2VkKXtmb3IodmFyIHA9dC5jdXJPcC50ZXh0Q2hhbmdlZDtwLm5leHQ7cD1wLm5leHQpO3AubmV4dD1kfWVsc2UgdC5jdXJPcC50ZXh0Q2hhbmdlZD1kfX1mdW5jdGlvbiBfZSh0LGUscixuLGkpe2lmKG58fChuPXIpLCRlKG4scikpe3ZhciBvPW47bj1yLHI9b30ic3RyaW5nIj09dHlwZW9mIGUmJihlPXpvKGUpKSxCZSh0LHtmcm9tOnIsdG86bix0ZXh0OmUsb3JpZ2luOml9LG51bGwpfWZ1bmN0aW9uIFllKHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBZZT8odGhpcy5saW5lPXQsdGhpcy5jaD1lLHZvaWQgMCk6bmV3IFllKHQsZSl9ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gdC5saW5lPT1lLmxpbmUmJnQuY2g9PWUuY2h9ZnVuY3Rpb24gJGUodCxlKXtyZXR1cm4gdC5saW5lPGUubGluZXx8dC5saW5lPT1lLmxpbmUmJnQuY2g8ZS5jaH1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gWWUodC5saW5lLHQuY2gpfWZ1bmN0aW9uIHFlKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQuZmlyc3QsTWF0aC5taW4oZSx0LmZpcnN0K3Quc2l6ZS0xKSl9ZnVuY3Rpb24gUWUodCxlKXtpZihlLmxpbmU8dC5maXJzdClyZXR1cm4gWWUodC5maXJzdCwwKTt2YXIgcj10LmZpcnN0K3Quc2l6ZS0xO3JldHVybiBlLmxpbmU+cj9ZZShyLGduKHQscikudGV4dC5sZW5ndGgpOkplKGUsZ24odCxlLmxpbmUpLnRleHQubGVuZ3RoKX1mdW5jdGlvbiBKZSh0LGUpe3ZhciByPXQuY2g7cmV0dXJuIG51bGw9PXJ8fHI+ZT9ZZSh0LmxpbmUsZSk6MD5yP1llKHQubGluZSwwKTp0fWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJuIGU+PXQuZmlyc3QmJmU8dC5maXJzdCt0LnNpemV9ZnVuY3Rpb24gZXIodCxlLHIsbil7aWYodC5zZWwuc2hpZnR8fHQuc2VsLmV4dGVuZCl7dmFyIGk9dC5zZWwuYW5jaG9yO2lmKHIpe3ZhciBvPSRlKGUsaSk7byE9JGUocixpKT8oaT1lLGU9cik6byE9JGUoZSxyKSYmKGU9cil9bnIodCxpLGUsbil9ZWxzZSBucih0LGUscnx8ZSxuKTt0LmNtJiYodC5jbS5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwKX1mdW5jdGlvbiBycih0LGUscil7dmFyIG49e2FuY2hvcjplLGhlYWQ6cn07cmV0dXJuIEtuKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLHQuY20sbiksbi5hbmNob3I9UWUodCxuLmFuY2hvciksbi5oZWFkPVFlKHQsbi5oZWFkKSxufWZ1bmN0aW9uIG5yKHQsZSxyLG4saSl7aWYoIWkmJlluKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSl7dmFyIG89cnIodCxlLHIpO3I9by5oZWFkLGU9by5hbmNob3J9dmFyIGw9dC5zZWw7aWYobC5nb2FsQ29sdW1uPW51bGwsbnVsbD09biYmKG49JGUocixsLmhlYWQpPy0xOjEpLChpfHwhamUoZSxsLmFuY2hvcikpJiYoZT1vcih0LGUsbiwicHVzaCIhPWkpKSwoaXx8IWplKHIsbC5oZWFkKSkmJihyPW9yKHQscixuLCJwdXNoIiE9aSkpLCFqZShsLmFuY2hvcixlKXx8IWplKGwuaGVhZCxyKSl7bC5hbmNob3I9ZSxsLmhlYWQ9cjt2YXIgcz0kZShyLGUpO2wuZnJvbT1zP3I6ZSxsLnRvPXM/ZTpyLHQuY20mJih0LmNtLmN1ck9wLnVwZGF0ZUlucHV0PXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD10LmNtLmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxVbih0LCJjdXJzb3JBY3Rpdml0eSIsdCl9fWZ1bmN0aW9uIGlyKHQpe25yKHQuZG9jLHQuZG9jLnNlbC5mcm9tLHQuZG9jLnNlbC50byxudWxsLCJwdXNoIil9ZnVuY3Rpb24gb3IodCxlLHIsbil7dmFyIGk9ITEsbz1lLGw9cnx8MTt0LmNhbnRFZGl0PSExO3Q6Zm9yKDs7KXt2YXIgcz1nbih0LG8ubGluZSk7aWYocy5tYXJrZWRTcGFucylmb3IodmFyIGE9MDthPHMubWFya2VkU3BhbnMubGVuZ3RoOysrYSl7dmFyIHU9cy5tYXJrZWRTcGFuc1thXSxjPXUubWFya2VyO2lmKChudWxsPT11LmZyb218fChjLmluY2x1c2l2ZUxlZnQ/dS5mcm9tPD1vLmNoOnUuZnJvbTxvLmNoKSkmJihudWxsPT11LnRvfHwoYy5pbmNsdXNpdmVSaWdodD91LnRvPj1vLmNoOnUudG8+by5jaCkpKXtpZihuJiYoS24oYywiYmVmb3JlQ3Vyc29yRW50ZXIiKSxjLmV4cGxpY2l0bHlDbGVhcmVkKSl7aWYocy5tYXJrZWRTcGFucyl7LS1hO2NvbnRpbnVlfWJyZWFrfWlmKCFjLmF0b21pYyljb250aW51ZTt2YXIgZj1jLmZpbmQoKVswPmw/ImZyb20iOiJ0byJdO2lmKGplKGYsbykmJihmLmNoKz1sLGYuY2g8MD9mPWYubGluZT50LmZpcnN0P1FlKHQsWWUoZi5saW5lLTEpKTpudWxsOmYuY2g+cy50ZXh0Lmxlbmd0aCYmKGY9Zi5saW5lPHQuZmlyc3QrdC5zaXplLTE/WWUoZi5saW5lKzEsMCk6bnVsbCksIWYpKXtpZihpKXJldHVybiBuPyh0LmNhbnRFZGl0PSEwLFllKHQuZmlyc3QsMCkpOm9yKHQsZSxyLCEwKTtpPSEwLGY9ZSxsPS1sfW89Zjtjb250aW51ZSB0fX1yZXR1cm4gb319ZnVuY3Rpb24gbHIodCl7dmFyIGU9c3IodCx0LmRvYy5zZWwuaGVhZCxudWxsLHQub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pO2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIHI9dC5kaXNwbGF5LG49Zmkoci5zaXplciksaT1udWxsO2lmKGUudG9wK24udG9wPDA/aT0hMDplLmJvdHRvbStuLnRvcD4od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmKGk9ITEpLG51bGwhPWkmJiFCaSl7dmFyIG89Im5vbmUiPT1yLmN1cnNvci5zdHlsZS5kaXNwbGF5O28mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLHIuY3Vyc29yLnN0eWxlLmxlZnQ9ZS5sZWZ0KyJweCIsci5jdXJzb3Iuc3R5bGUudG9wPWUudG9wLXIudmlld09mZnNldCsicHgiKSxyLmN1cnNvci5zY3JvbGxJbnRvVmlldyhpKSxvJiYoci5jdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19ZnVuY3Rpb24gc3IodCxlLHIsbil7Zm9yKG51bGw9PW4mJihuPTApOzspe3ZhciBpPSExLG89USh0LGUpLGw9ciYmciE9ZT9RKHQscik6byxzPXVyKHQsTWF0aC5taW4oby5sZWZ0LGwubGVmdCksTWF0aC5taW4oby50b3AsbC50b3ApLW4sTWF0aC5tYXgoby5sZWZ0LGwubGVmdCksTWF0aC5tYXgoby5ib3R0b20sbC5ib3R0b20pK24pLGE9dC5kb2Muc2Nyb2xsVG9wLHU9dC5kb2Muc2Nyb2xsTGVmdDtpZihudWxsIT1zLnNjcm9sbFRvcCYmKFNlKHQscy5zY3JvbGxUb3ApLE1hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1hKT4xJiYoaT0hMCkpLG51bGwhPXMuc2Nyb2xsTGVmdCYmKE1lKHQscy5zY3JvbGxMZWZ0KSxNYXRoLmFicyh0LmRvYy5zY3JvbGxMZWZ0LXUpPjEmJihpPSEwKSksIWkpcmV0dXJuIG99fWZ1bmN0aW9uIGFyKHQsZSxyLG4saSl7dmFyIG89dXIodCxlLHIsbixpKTtudWxsIT1vLnNjcm9sbFRvcCYmU2UodCxvLnNjcm9sbFRvcCksbnVsbCE9by5zY3JvbGxMZWZ0JiZNZSh0LG8uc2Nyb2xsTGVmdCl9ZnVuY3Rpb24gdXIodCxlLHIsbixpKXt2YXIgbz10LmRpc3BsYXksbD1yZSh0LmRpc3BsYXkpOzA+ciYmKHI9MCk7dmFyIHM9by5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8sYT1vLnNjcm9sbGVyLnNjcm9sbFRvcCx1PXt9LGM9dC5kb2MuaGVpZ2h0K0YobyksZj1sPnIsaD1pPmMtbDtpZihhPnIpdS5zY3JvbGxUb3A9Zj8wOnI7ZWxzZSBpZihpPmErcyl7dmFyIGQ9TWF0aC5taW4ociwoaD9jOmkpLXMpO2QhPWEmJih1LnNjcm9sbFRvcD1kKX12YXIgcD1vLnNjcm9sbGVyLmNsaWVudFdpZHRoLVRvLGc9by5zY3JvbGxlci5zY3JvbGxMZWZ0O2UrPW8uZ3V0dGVycy5vZmZzZXRXaWR0aCxuKz1vLmd1dHRlcnMub2Zmc2V0V2lkdGg7dmFyIG09by5ndXR0ZXJzLm9mZnNldFdpZHRoLHY9bSsxMD5lO3JldHVybiBnK20+ZXx8dj8odiYmKGU9MCksdS5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsZS0xMC1tKSk6bj5wK2ctMyYmKHUuc2Nyb2xsTGVmdD1uKzEwLXApLHV9ZnVuY3Rpb24gY3IodCxlLHIpe3QuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0Om51bGw9PWU/dC5kb2Muc2Nyb2xsTGVmdDplLHNjcm9sbFRvcDpudWxsPT1yP3QuZG9jLnNjcm9sbFRvcDpyfX1mdW5jdGlvbiBmcih0LGUscil7dmFyIG49dC5jdXJPcC51cGRhdGVTY3JvbGxQb3N8fCh0LmN1ck9wLnVwZGF0ZVNjcm9sbFBvcz17c2Nyb2xsTGVmdDp0LmRvYy5zY3JvbGxMZWZ0LHNjcm9sbFRvcDp0LmRvYy5zY3JvbGxUb3B9KSxpPXQuZGlzcGxheS5zY3JvbGxlcjtuLnNjcm9sbFRvcD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsSGVpZ2h0LWkuY2xpZW50SGVpZ2h0LG4uc2Nyb2xsVG9wK3IpKSxuLnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihpLnNjcm9sbFdpZHRoLWkuY2xpZW50V2lkdGgsbi5zY3JvbGxMZWZ0K2UpKX1mdW5jdGlvbiBocih0LGUscixuKXt2YXIgaT10LmRvYztpZihudWxsPT1yJiYocj0iYWRkIiksInNtYXJ0Ij09cilpZih0LmRvYy5tb2RlLmluZGVudCl2YXIgbz16KHQsZSk7ZWxzZSByPSJwcmV2Ijt2YXIgbCxzPXQub3B0aW9ucy50YWJTaXplLGE9Z24oaSxlKSx1PVpuKGEudGV4dCxudWxsLHMpLGM9YS50ZXh0Lm1hdGNoKC9eXHMqLylbMF07aWYoInNtYXJ0Ij09ciYmKGw9dC5kb2MubW9kZS5pbmRlbnQobyxhLnRleHQuc2xpY2UoYy5sZW5ndGgpLGEudGV4dCksbD09QW8pKXtpZighbilyZXR1cm47cj0icHJldiJ9InByZXYiPT1yP2w9ZT5pLmZpcnN0P1puKGduKGksZS0xKS50ZXh0LG51bGwscyk6MDoiYWRkIj09cj9sPXUrdC5vcHRpb25zLmluZGVudFVuaXQ6InN1YnRyYWN0Ij09cj9sPXUtdC5vcHRpb25zLmluZGVudFVuaXQ6Im51bWJlciI9PXR5cGVvZiByJiYobD11K3IpLGw9TWF0aC5tYXgoMCxsKTt2YXIgZj0iIixoPTA7aWYodC5vcHRpb25zLmluZGVudFdpdGhUYWJzKWZvcih2YXIgZD1NYXRoLmZsb29yKGwvcyk7ZDstLWQpaCs9cyxmKz0iCSI7bD5oJiYoZis9cW4obC1oKSksZiE9Yz9fZSh0LmRvYyxmLFllKGUsMCksWWUoZSxjLmxlbmd0aCksIitpbnB1dCIpOmkuc2VsLmhlYWQubGluZT09ZSYmaS5zZWwuaGVhZC5jaDxjLmxlbmd0aCYmbnIoaSxZZShlLGMubGVuZ3RoKSxZZShlLGMubGVuZ3RoKSwxKSxhLnN0YXRlQWZ0ZXI9bnVsbH1mdW5jdGlvbiBkcih0LGUscil7dmFyIG49ZSxpPWUsbz10LmRvYztyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/aT1nbihvLHFlKG8sZSkpOm49Ym4oZSksbnVsbD09bj9udWxsOnIoaSxuKT8odWUodCxuLG4rMSksaSk6bnVsbH1mdW5jdGlvbiBwcih0LGUscixuLGkpe2Z1bmN0aW9uIG8oKXt2YXIgZT1zK3I7cmV0dXJuIGU8dC5maXJzdHx8ZT49dC5maXJzdCt0LnNpemU/Zj0hMToocz1lLGM9Z24odCxlKSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT0oaT9TaTpNaSkoYyxhLHIsITApO2lmKG51bGw9PWUpe2lmKHR8fCFvKCkpcmV0dXJuIGY9ITE7YT1pPygwPnI/Ymk6eWkpKGMpOjA+cj9jLnRleHQubGVuZ3RoOjB9ZWxzZSBhPWU7cmV0dXJuITB9dmFyIHM9ZS5saW5lLGE9ZS5jaCx1PXIsYz1nbih0LHMpLGY9ITA7aWYoImNoYXIiPT1uKWwoKTtlbHNlIGlmKCJjb2x1bW4iPT1uKWwoITApO2Vsc2UgaWYoIndvcmQiPT1ufHwiZ3JvdXAiPT1uKWZvcih2YXIgaD1udWxsLGQ9Imdyb3VwIj09bixwPSEwOyEoMD5yKXx8bCghcCk7cD0hMSl7dmFyIGc9Yy50ZXh0LmNoYXJBdChhKXx8IlxuIixtPW9pKGcpPyJ3IjpkPy9ccy8udGVzdChnKT9udWxsOiJwIjpudWxsO2lmKGgmJmghPW0pezA+ciYmKHI9MSxsKCkpO2JyZWFrfWlmKG0mJihoPW0pLHI+MCYmIWwoIXApKWJyZWFrfXZhciB2PW9yKHQsWWUocyxhKSx1LCEwKTtyZXR1cm4gZnx8KHYuaGl0U2lkZT0hMCksdn1mdW5jdGlvbiBncih0LGUscixuKXt2YXIgaSxvPXQuZG9jLGw9ZS5sZWZ0O2lmKCJwYWdlIj09bil7dmFyIHM9TWF0aC5taW4odC5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7aT1lLnRvcCtyKihzLSgwPnI/MS41Oi41KSpyZSh0LmRpc3BsYXkpKX1lbHNlImxpbmUiPT1uJiYoaT1yPjA/ZS5ib3R0b20rMzplLnRvcC0zKTtmb3IoOzspe3ZhciBhPXRlKHQsbCxpKTtpZighYS5vdXRzaWRlKWJyZWFrO2lmKDA+cj8wPj1pOmk+PW8uaGVpZ2h0KXthLmhpdFNpZGU9ITA7YnJlYWt9aSs9NSpyfXJldHVybiBhfWZ1bmN0aW9uIG1yKHQsZSl7dmFyIHI9ZS5jaCxuPWUuY2g7aWYodCl7KGUueFJlbDwwfHxuPT10Lmxlbmd0aCkmJnI/LS1yOisrbjtmb3IodmFyIGk9dC5jaGFyQXQociksbz1vaShpKT9vaTovXHMvLnRlc3QoaSk/ZnVuY3Rpb24odCl7cmV0dXJuL1xzLy50ZXN0KHQpfTpmdW5jdGlvbih0KXtyZXR1cm4hL1xzLy50ZXN0KHQpJiYhb2kodCl9O3I+MCYmbyh0LmNoYXJBdChyLTEpKTspLS1yO2Zvcig7bjx0Lmxlbmd0aCYmbyh0LmNoYXJBdChuKSk7KSsrbn1yZXR1cm57ZnJvbTpZZShlLmxpbmUsciksdG86WWUoZS5saW5lLG4pfX1mdW5jdGlvbiB2cih0LGUpe2VyKHQuZG9jLFllKGUsMCksUWUodC5kb2MsWWUoZSsxLDApKSl9ZnVuY3Rpb24geXIoZSxyLG4saSl7dC5kZWZhdWx0c1tlXT1yLG4mJihzb1tlXT1pP2Z1bmN0aW9uKHQsZSxyKXtyIT11byYmbih0LGUscil9Om4pfWZ1bmN0aW9uIGJyKHQsZSl7aWYoZT09PSEwKXJldHVybiBlO2lmKHQuY29weVN0YXRlKXJldHVybiB0LmNvcHlTdGF0ZShlKTt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpIGluc3RhbmNlb2YgQXJyYXkmJihpPWkuY29uY2F0KFtdKSkscltuXT1pfXJldHVybiByfWZ1bmN0aW9uIHhyKHQsZSxyKXtyZXR1cm4gdC5zdGFydFN0YXRlP3Quc3RhcnRTdGF0ZShlLHIpOiEwfWZ1bmN0aW9uIENyKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD92b1t0XTp0fWZ1bmN0aW9uIHdyKHQsZSxyKXtmdW5jdGlvbiBuKGUpe2U9Q3IoZSk7dmFyIGk9ZVt0XTtpZihpPT09ITEpcmV0dXJuInN0b3AiO2lmKG51bGwhPWkmJnIoaSkpcmV0dXJuITA7aWYoZS5ub2ZhbGx0aHJvdWdoKXJldHVybiJzdG9wIjt2YXIgbz1lLmZhbGx0aHJvdWdoO2lmKG51bGw9PW8pcmV0dXJuITE7aWYoIltvYmplY3QgQXJyYXldIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKXJldHVybiBuKG8pO2Zvcih2YXIgbD0wLHM9by5sZW5ndGg7cz5sOysrbCl7dmFyIGE9bihvW2xdKTtpZihhKXJldHVybiBhfXJldHVybiExfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgbz1uKGVbaV0pO2lmKG8pcmV0dXJuInN0b3AiIT1vfX1mdW5jdGlvbiBMcih0KXt2YXIgZT1Qb1t0LmtleUNvZGVdO3JldHVybiJDdHJsIj09ZXx8IkFsdCI9PWV8fCJTaGlmdCI9PWV8fCJNb2QiPT1lfWZ1bmN0aW9uIGtyKHQsZSl7aWYoemkmJjM0PT10LmtleUNvZGUmJnRbImNoYXIiXSlyZXR1cm4hMTt2YXIgcj1Qb1t0LmtleUNvZGVdO3JldHVybiBudWxsPT1yfHx0LmFsdEdyYXBoS2V5PyExOih0LmFsdEtleSYmKHI9IkFsdC0iK3IpLCgkaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmKHI9IkN0cmwtIityKSwoJGk/dC5jdHJsS2V5OnQubWV0YUtleSkmJihyPSJDbWQtIityKSwhZSYmdC5zaGlmdEtleSYmKHI9IlNoaWZ0LSIrcikscil9ZnVuY3Rpb24gU3IodCxlKXt0aGlzLnBvcz10aGlzLnN0YXJ0PTAsdGhpcy5zdHJpbmc9dCx0aGlzLnRhYlNpemU9ZXx8OCx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5sYXN0Q29sdW1uVmFsdWU9MH1mdW5jdGlvbiBNcih0LGUpe3RoaXMubGluZXM9W10sdGhpcy50eXBlPWUsdGhpcy5kb2M9dH1mdW5jdGlvbiBUcih0LGUscixuLGkpe2lmKG4mJm4uc2hhcmVkKXJldHVybiBIcih0LGUscixuLGkpO2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFRyKSh0LGUscixuLGkpO3ZhciBvPW5ldyBNcih0LGkpO2lmKCRlKHIsZSl8fGplKGUscikmJiJyYW5nZSI9PWkmJighbi5pbmNsdXNpdmVMZWZ0fHwhbi5pbmNsdXNpdmVSaWdodCkpcmV0dXJuIG87biYmcmkobixvKSxvLnJlcGxhY2VkV2l0aCYmKG8uY29sbGFwc2VkPSEwLG8ucmVwbGFjZWRXaXRoPXNpKCJzcGFuIixbby5yZXBsYWNlZFdpdGhdLCJDb2RlTWlycm9yLXdpZGdldCIpLG4uaGFuZGxlTW91c2VFdmVudHN8fChvLnJlcGxhY2VkV2l0aC5pZ25vcmVFdmVudHM9ITApKSxvLmNvbGxhcHNlZCYmKFFpPSEwKSxvLmFkZFRvSGlzdG9yeSYmTW4odCx7ZnJvbTplLHRvOnIsb3JpZ2luOiJtYXJrVGV4dCJ9LHtoZWFkOnQuc2VsLmhlYWQsYW5jaG9yOnQuc2VsLmFuY2hvcn0sMC8wKTt2YXIgbCxzLGEsdT1lLmxpbmUsYz0wLGY9dC5jbTtpZih0Lml0ZXIodSxyLmxpbmUrMSxmdW5jdGlvbihuKXtmJiZvLmNvbGxhcHNlZCYmIWYub3B0aW9ucy5saW5lV3JhcHBpbmcmJkdyKHQsbik9PWYuZGlzcGxheS5tYXhMaW5lJiYoYT0hMCk7dmFyIGk9e2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpvfTtjKz1uLnRleHQubGVuZ3RoLHU9PWUubGluZSYmKGkuZnJvbT1lLmNoLGMtPWUuY2gpLHU9PXIubGluZSYmKGkudG89ci5jaCxjLT1uLnRleHQubGVuZ3RoLXIuY2gpLG8uY29sbGFwc2VkJiYodT09ci5saW5lJiYocz1QcihuLHIuY2gpKSx1PT1lLmxpbmU/bD1QcihuLGUuY2gpOnluKG4sMCkpLFdyKG4saSksKyt1fSksby5jb2xsYXBzZWQmJnQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24oZSl7VnIodCxlKSYmeW4oZSwwKX0pLG8uY2xlYXJPbkVudGVyJiZHbihvLCJiZWZvcmVDdXJzb3JFbnRlciIsZnVuY3Rpb24oKXtvLmNsZWFyKCl9KSxvLnJlYWRPbmx5JiYocWk9ITAsKHQuaGlzdG9yeS5kb25lLmxlbmd0aHx8dC5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpJiZ0LmNsZWFySGlzdG9yeSgpKSxvLmNvbGxhcHNlZCl7aWYobCE9cyl0aHJvdyBuZXcgRXJyb3IoIkluc2VydGluZyBjb2xsYXBzZWQgbWFya2VyIG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpO28uc2l6ZT1jLG8uYXRvbWljPSEwfXJldHVybiBmJiYoYSYmKGYuY3VyT3AudXBkYXRlTWF4TGluZT0hMCksKG8uY2xhc3NOYW1lfHxvLnRpdGxlfHxvLnN0YXJ0U3R5bGV8fG8uZW5kU3R5bGV8fG8uY29sbGFwc2VkKSYmdWUoZixlLmxpbmUsci5saW5lKzEpLG8uYXRvbWljJiZpcihmKSksb31mdW5jdGlvbiBBcih0LGUpe3RoaXMubWFya2Vycz10LHRoaXMucHJpbWFyeT1lO2Zvcih2YXIgcj0wLG49dGhpcztyPHQubGVuZ3RoOysrcil0W3JdLnBhcmVudD10aGlzLEduKHRbcl0sImNsZWFyIixmdW5jdGlvbigpe24uY2xlYXIoKX0pfWZ1bmN0aW9uIEhyKHQsZSxyLG4saSl7bj1yaShuKSxuLnNoYXJlZD0hMTt2YXIgbz1bVHIodCxlLHIsbixpKV0sbD1vWzBdLHM9bi5yZXBsYWNlZFdpdGg7cmV0dXJuIGRuKHQsZnVuY3Rpb24odCl7cyYmKG4ucmVwbGFjZWRXaXRoPXMuY2xvbmVOb2RlKCEwKSksby5wdXNoKFRyKHQsUWUodCxlKSxRZSh0LHIpLG4saSkpO2Zvcih2YXIgYT0wO2E8dC5saW5rZWQubGVuZ3RoOysrYSlpZih0LmxpbmtlZFthXS5pc1BhcmVudClyZXR1cm47bD1RbihvKX0pLG5ldyBBcihvLGwpfWZ1bmN0aW9uIE5yKHQsZSl7aWYodClmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtpZihuLm1hcmtlcj09ZSlyZXR1cm4gbn19ZnVuY3Rpb24gRHIodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXRbbl0hPWUmJihyfHwocj1bXSkpLnB1c2godFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gV3IodCxlKXt0Lm1hcmtlZFNwYW5zPXQubWFya2VkU3BhbnM/dC5tYXJrZWRTcGFucy5jb25jYXQoW2VdKTpbZV0sZS5tYXJrZXIuYXR0YWNoTGluZSh0KX1mdW5jdGlvbiBPcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTtpZihzfHwobC5pbmNsdXNpdmVMZWZ0JiZsLmluY2x1c2l2ZVJpZ2h0fHwiYm9va21hcmsiPT1sLnR5cGUpJiZvLmZyb209PWUmJighcnx8IW8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7KG58fChuPVtdKSkucHVzaCh7ZnJvbTpvLmZyb20sdG86YT9udWxsOm8udG8sbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24gRXIodCxlLHIpe2lmKHQpZm9yKHZhciBuLGk9MDtpPHQubGVuZ3RoOysraSl7dmFyIG89dFtpXSxsPW8ubWFya2VyLHM9bnVsbD09by50b3x8KGwuaW5jbHVzaXZlUmlnaHQ/by50bz49ZTpvLnRvPmUpO2lmKHN8fCJib29rbWFyayI9PWwudHlwZSYmby5mcm9tPT1lJiYoIXJ8fG8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOmE/bnVsbDpvLmZyb20tZSx0bzpudWxsPT1vLnRvP251bGw6by50by1lLG1hcmtlcjpsfSl9fXJldHVybiBufWZ1bmN0aW9uIHpyKHQsZSl7dmFyIHI9dHIodCxlLmZyb20ubGluZSkmJmduKHQsZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zLG49dHIodCxlLnRvLmxpbmUpJiZnbih0LGUudG8ubGluZSkubWFya2VkU3BhbnM7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPWUuZnJvbS5jaCxvPWUudG8uY2gsbD1qZShlLmZyb20sZS50bykscz1PcihyLGksbCksYT1FcihuLG8sbCksdT0xPT1lLnRleHQubGVuZ3RoLGM9UW4oZS50ZXh0KS5sZW5ndGgrKHU/aTowKTtpZihzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKXt2YXIgaD1zW2ZdO2lmKG51bGw9PWgudG8pe3ZhciBkPU5yKGEsaC5tYXJrZXIpO2Q/dSYmKGgudG89bnVsbD09ZC50bz9udWxsOmQudG8rYyk6aC50bz1pfX1pZihhKWZvcih2YXIgZj0wO2Y8YS5sZW5ndGg7KytmKXt2YXIgaD1hW2ZdO2lmKG51bGwhPWgudG8mJihoLnRvKz1jKSxudWxsPT1oLmZyb20pe3ZhciBkPU5yKHMsaC5tYXJrZXIpO2R8fChoLmZyb209Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpKX1lbHNlIGguZnJvbSs9Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpfWlmKHUmJnMpe2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGwhPXNbZl0uZnJvbSYmc1tmXS5mcm9tPT1zW2ZdLnRvJiYiYm9va21hcmsiIT1zW2ZdLm1hcmtlci50eXBlJiZzLnNwbGljZShmLS0sMSk7cy5sZW5ndGh8fChzPW51bGwpfXZhciBwPVtzXTtpZighdSl7dmFyIGcsbT1lLnRleHQubGVuZ3RoLTI7aWYobT4wJiZzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGw9PXNbZl0udG8mJihnfHwoZz1bXSkpLnB1c2goe2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpzW2ZdLm1hcmtlcn0pO2Zvcih2YXIgZj0wO20+ZjsrK2YpcC5wdXNoKGcpO3AucHVzaChhKX1yZXR1cm4gcH1mdW5jdGlvbiBJcih0LGUpe3ZhciByPUFuKHQsZSksbj16cih0LGUpO2lmKCFyKXJldHVybiBuO2lmKCFuKXJldHVybiByO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgbz1yW2ldLGw9bltpXTtpZihvJiZsKXQ6Zm9yKHZhciBzPTA7czxsLmxlbmd0aDsrK3Mpe2Zvcih2YXIgYT1sW3NdLHU9MDt1PG8ubGVuZ3RoOysrdSlpZihvW3VdLm1hcmtlcj09YS5tYXJrZXIpY29udGludWUgdDtvLnB1c2goYSl9ZWxzZSBsJiYocltpXT1sKX1yZXR1cm4gcn1mdW5jdGlvbiBGcih0LGUscil7dmFyIG49bnVsbDtpZih0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe2lmKHQubWFya2VkU3BhbnMpZm9yKHZhciBlPTA7ZTx0Lm1hcmtlZFNwYW5zLmxlbmd0aDsrK2Upe3ZhciByPXQubWFya2VkU3BhbnNbZV0ubWFya2VyOyFyLnJlYWRPbmx5fHxuJiYtMSE9dGkobixyKXx8KG58fChuPVtdKSkucHVzaChyKX19KSwhbilyZXR1cm4gbnVsbDtmb3IodmFyIGk9W3tmcm9tOmUsdG86cn1dLG89MDtvPG4ubGVuZ3RoOysrbylmb3IodmFyIGw9bltvXSxzPWwuZmluZCgpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIHU9aVthXTtpZighJGUodS50byxzLmZyb20pJiYhJGUocy50byx1LmZyb20pKXt2YXIgYz1bYSwxXTsoJGUodS5mcm9tLHMuZnJvbSl8fCFsLmluY2x1c2l2ZUxlZnQmJmplKHUuZnJvbSxzLmZyb20pKSYmYy5wdXNoKHtmcm9tOnUuZnJvbSx0bzpzLmZyb219KSwoJGUocy50byx1LnRvKXx8IWwuaW5jbHVzaXZlUmlnaHQmJmplKHUudG8scy50bykpJiZjLnB1c2goe2Zyb206cy50byx0bzp1LnRvfSksaS5zcGxpY2UuYXBwbHkoaSxjKSxhKz1jLmxlbmd0aC0xfX1yZXR1cm4gaX1mdW5jdGlvbiBQcih0LGUpe3ZhciByLG49UWkmJnQubWFya2VkU3BhbnM7aWYobilmb3IodmFyIGksbz0wO288bi5sZW5ndGg7KytvKWk9bltvXSxpLm1hcmtlci5jb2xsYXBzZWQmJihudWxsPT1pLmZyb218fGkuZnJvbTxlKSYmKG51bGw9PWkudG98fGkudG8+ZSkmJighcnx8ci53aWR0aDxpLm1hcmtlci53aWR0aCkmJihyPWkubWFya2VyKTtyZXR1cm4gcn1mdW5jdGlvbiBScih0KXtyZXR1cm4gUHIodCwtMSl9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIFByKHQsdC50ZXh0Lmxlbmd0aCsxKX1mdW5jdGlvbiBHcih0LGUpe2Zvcih2YXIgcjtyPVJyKGUpOyllPWduKHQsci5maW5kKCkuZnJvbS5saW5lKTtyZXR1cm4gZX1mdW5jdGlvbiBWcih0LGUpe3ZhciByPVFpJiZlLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuLGk9MDtpPHIubGVuZ3RoOysraSlpZihuPXJbaV0sbi5tYXJrZXIuY29sbGFwc2VkKXtpZihudWxsPT1uLmZyb20pcmV0dXJuITA7aWYoIW4ubWFya2VyLnJlcGxhY2VkV2l0aCYmMD09bi5mcm9tJiZuLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZLcih0LGUsbikpcmV0dXJuITB9fWZ1bmN0aW9uIEtyKHQsZSxyKXtpZihudWxsPT1yLnRvKXt2YXIgbj1yLm1hcmtlci5maW5kKCkudG8saT1nbih0LG4ubGluZSk7cmV0dXJuIEtyKHQsaSxOcihpLm1hcmtlZFNwYW5zLHIubWFya2VyKSl9aWYoci5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJnIudG89PWUudGV4dC5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBvLGw9MDtsPGUubWFya2VkU3BhbnMubGVuZ3RoOysrbClpZihvPWUubWFya2VkU3BhbnNbbF0sby5tYXJrZXIuY29sbGFwc2VkJiYhby5tYXJrZXIucmVwbGFjZWRXaXRoJiZvLmZyb209PXIudG8mJihvLm1hcmtlci5pbmNsdXNpdmVMZWZ0fHxyLm1hcmtlci5pbmNsdXNpdmVSaWdodCkmJktyKHQsZSxvKSlyZXR1cm4hMH1mdW5jdGlvbiBVcih0KXt2YXIgZT10Lm1hcmtlZFNwYW5zO2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmRldGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1udWxsfX1mdW5jdGlvbiBYcih0LGUpe2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmF0dGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1lfX1mdW5jdGlvbiBfcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT0hdGhpcy5jbS5jdXJPcDtlJiZpZSh0aGlzLmNtKTt0cnl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtlJiZvZSh0aGlzLmNtKX1yZXR1cm4gcn19ZnVuY3Rpb24gWXIodCl7cmV0dXJuIG51bGwhPXQuaGVpZ2h0P3QuaGVpZ2h0Oih0Lm5vZGUucGFyZW50Tm9kZSYmMT09dC5ub2RlLnBhcmVudE5vZGUubm9kZVR5cGV8fHVpKHQuY20uZGlzcGxheS5tZWFzdXJlLHNpKCJkaXYiLFt0Lm5vZGVdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpKSx0LmhlaWdodD10Lm5vZGUub2Zmc2V0SGVpZ2h0KX1mdW5jdGlvbiBqcih0LGUscixuKXt2YXIgaT1uZXcgeW8odCxyLG4pO3JldHVybiBpLm5vSFNjcm9sbCYmKHQuZGlzcGxheS5hbGlnbldpZGdldHM9ITApLGRyKHQsZSxmdW5jdGlvbihlKXt2YXIgcj1lLndpZGdldHN8fChlLndpZGdldHM9W10pO2lmKG51bGw9PWkuaW5zZXJ0QXQ/ci5wdXNoKGkpOnIuc3BsaWNlKE1hdGgubWluKHIubGVuZ3RoLTEsTWF0aC5tYXgoMCxpLmluc2VydEF0KSksMCxpKSxpLmxpbmU9ZSwhVnIodC5kb2MsZSl8fGkuc2hvd0lmSGlkZGVuKXt2YXIgbj1Dbih0LGUpPHQuZG9jLnNjcm9sbFRvcDt5bihlLGUuaGVpZ2h0K1lyKGkpKSxuJiZmcih0LDAsaS5oZWlnaHQpfXJldHVybiEwfSksaX1mdW5jdGlvbiAkcih0LGUscixuKXt0LnRleHQ9ZSx0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKSxudWxsIT10Lm9yZGVyJiYodC5vcmRlcj1udWxsKSxVcih0KSxYcih0LHIpO3ZhciBpPW4/bih0KToxO2khPXQuaGVpZ2h0JiZ5bih0LGkpfWZ1bmN0aW9uIFpyKHQpe3QucGFyZW50PW51bGwsVXIodCl9ZnVuY3Rpb24gcXIodCxlLHIsbixpLG8pe3ZhciBsPXIuZmxhdHRlblNwYW5zO251bGw9PWwmJihsPXQub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciBzLGE9MCx1PW51bGwsYz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKCIiPT1lJiZyLmJsYW5rTGluZSYmci5ibGFua0xpbmUobik7IWMuZW9sKCk7KWMucG9zPnQub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGg/KGw9ITEsbyYmdG4odCxlLG4sYy5wb3MpLGMucG9zPWUubGVuZ3RoLHM9bnVsbCk6cz1yLnRva2VuKGMsbiksbCYmdT09c3x8KGE8Yy5zdGFydCYmaShjLnN0YXJ0LHUpLGE9Yy5zdGFydCx1PXMpLGMuc3RhcnQ9Yy5wb3M7Zm9yKDthPGMucG9zOyl7dmFyIGY9TWF0aC5taW4oYy5wb3MsYSs1ZTQpO2koZix1KSxhPWZ9fWZ1bmN0aW9uIFFyKHQsZSxyLG4pe3ZhciBpPVt0LnN0YXRlLm1vZGVHZW5dO3FyKHQsZS50ZXh0LHQuZG9jLm1vZGUscixmdW5jdGlvbih0LGUpe2kucHVzaCh0LGUpfSxuKTtmb3IodmFyIG89MDtvPHQuc3RhdGUub3ZlcmxheXMubGVuZ3RoOysrbyl7dmFyIGw9dC5zdGF0ZS5vdmVybGF5c1tvXSxzPTEsYT0wO3FyKHQsZS50ZXh0LGwubW9kZSwhMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1zO3Q+YTspe3ZhciBuPWlbc107bj50JiZpLnNwbGljZShzLDEsdCxpW3MrMV0sbikscys9MixhPU1hdGgubWluKHQsbil9aWYoZSlpZihsLm9wYXF1ZSlpLnNwbGljZShyLHMtcix0LGUpLHM9cisyO2Vsc2UgZm9yKDtzPnI7cis9Mil7dmFyIG89aVtyKzFdO2lbcisxXT1vP28rIiAiK2U6ZX19KX1yZXR1cm4gaX1mdW5jdGlvbiBKcih0LGUpe3JldHVybiBlLnN0eWxlcyYmZS5zdHlsZXNbMF09PXQuc3RhdGUubW9kZUdlbnx8KGUuc3R5bGVzPVFyKHQsZSxlLnN0YXRlQWZ0ZXI9eih0LGJuKGUpKSkpLGUuc3R5bGVzfWZ1bmN0aW9uIHRuKHQsZSxyLG4pe3ZhciBpPXQuZG9jLm1vZGUsbz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKG8uc3RhcnQ9by5wb3M9bnx8MCwiIj09ZSYmaS5ibGFua0xpbmUmJmkuYmxhbmtMaW5lKHIpOyFvLmVvbCgpJiZvLnBvczw9dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aDspaS50b2tlbihvLHIpLG8uc3RhcnQ9by5wb3N9ZnVuY3Rpb24gZW4odCxlKXtpZighdClyZXR1cm4gbnVsbDtmb3IoOzspe3ZhciByPXQubWF0Y2goLyg/Ol58XHMpbGluZS0oYmFja2dyb3VuZC0pPyhcUyspLyk7aWYoIXIpYnJlYWs7dD10LnNsaWNlKDAsci5pbmRleCkrdC5zbGljZShyLmluZGV4K3JbMF0ubGVuZ3RoKTt2YXIgbj1yWzFdPyJiZ0NsYXNzIjoidGV4dENsYXNzIjtudWxsPT1lW25dP2Vbbl09clsyXTpuZXcgUmVnRXhwKCIoPzpefHMpIityWzJdKyIoPzokfHMpIikudGVzdChlW25dKXx8KGVbbl0rPSIgIityWzJdKX1yZXR1cm4geG9bdF18fCh4b1t0XT0iY20tIit0LnJlcGxhY2UoLyArL2csIiBjbS0iKSl9ZnVuY3Rpb24gcm4odCxlLHIsbil7Zm9yKHZhciBpLG89ZSxsPSEwO2k9UnIobyk7KW89Z24odC5kb2MsaS5maW5kKCkuZnJvbS5saW5lKTt2YXIgcz17cHJlOnNpKCJwcmUiKSxjb2w6MCxwb3M6MCxtZWFzdXJlOm51bGwsbWVhc3VyZWRTb21ldGhpbmc6ITEsY206dCxjb3B5V2lkZ2V0czpufTtkb3tvLnRleHQmJihsPSExKSxzLm1lYXN1cmU9bz09ZSYmcixzLnBvcz0wLHMuYWRkVG9rZW49cy5tZWFzdXJlP2xuOm9uLChBaXx8V2kpJiZ0LmdldE9wdGlvbigibGluZVdyYXBwaW5nIikmJihzLmFkZFRva2VuPXNuKHMuYWRkVG9rZW4pKTt2YXIgYT11bihvLHMsSnIodCxvKSk7ciYmbz09ZSYmIXMubWVhc3VyZWRTb21ldGhpbmcmJihyWzBdPXMucHJlLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSkscy5tZWFzdXJlZFNvbWV0aGluZz0hMCksYSYmKG89Z24odC5kb2MsYS50by5saW5lKSl9d2hpbGUoYSk7IXJ8fHMubWVhc3VyZWRTb21ldGhpbmd8fHJbMF18fChyWzBdPXMucHJlLmFwcGVuZENoaWxkKGw/c2koInNwYW4iLCLCoCIpOnBpKHQuZGlzcGxheS5tZWFzdXJlKSkpLHMucHJlLmZpcnN0Q2hpbGR8fFZyKHQuZG9jLGUpfHxzLnByZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiwqAiKSk7dmFyIHU7aWYociYmKEFpfHxEaSkmJih1PXduKG8pKSl7dmFyIGM9dS5sZW5ndGgtMTt1W2NdLmZyb209PXVbY10udG8mJi0tYzt2YXIgZj11W2NdLGg9dVtjLTFdO2lmKGYuZnJvbSsxPT1mLnRvJiZoJiZmLmxldmVsPGgubGV2ZWwpe3ZhciBkPXJbcy5wb3MtMV07ZCYmZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkLm1lYXN1cmVSaWdodD1waSh0LmRpc3BsYXkubWVhc3VyZSksZC5uZXh0U2libGluZyl9fXZhciBwPXMudGV4dENsYXNzP3MudGV4dENsYXNzKyIgIisoZS50ZXh0Q2xhc3N8fCIiKTplLnRleHRDbGFzcztyZXR1cm4gcCYmKHMucHJlLmNsYXNzTmFtZT1wKSxLbih0LCJyZW5kZXJMaW5lIix0LGUscy5wcmUpLHN9ZnVuY3Rpb24gbm4odCl7dmFyIGU9c2koInNwYW4iLCLigKIiLCJjbS1pbnZhbGlkY2hhciIpO3JldHVybiBlLnRpdGxlPSJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNiksZX1mdW5jdGlvbiBvbih0LGUscixuLGksbyl7aWYoZSl7dmFyIGw9dC5jbS5vcHRpb25zLnNwZWNpYWxDaGFycztpZihsLnRlc3QoZSkpZm9yKHZhciBzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxhPTA7Oyl7bC5sYXN0SW5kZXg9YTt2YXIgdT1sLmV4ZWMoZSksYz11P3UuaW5kZXgtYTplLmxlbmd0aC1hO2lmKGMmJihzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuc2xpY2UoYSxhK2MpKSksdC5jb2wrPWMpLCF1KWJyZWFrO2lmKGErPWMrMSwiCSI9PXVbMF0pe3ZhciBmPXQuY20ub3B0aW9ucy50YWJTaXplLGg9Zi10LmNvbCVmO3MuYXBwZW5kQ2hpbGQoc2koInNwYW4iLHFuKGgpLCJjbS10YWIiKSksdC5jb2wrPWh9ZWxzZXt2YXIgZD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcih1WzBdKTtzLmFwcGVuZENoaWxkKGQpLHQuY29sKz0xfX1lbHNle3QuY29sKz1lLmxlbmd0aDt2YXIgcz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX1pZihyfHxufHxpfHx0Lm1lYXN1cmUpe3ZhciBwPXJ8fCIiO24mJihwKz1uKSxpJiYocCs9aSk7dmFyIGQ9c2koInNwYW4iLFtzXSxwKTtyZXR1cm4gbyYmKGQudGl0bGU9byksdC5wcmUuYXBwZW5kQ2hpbGQoZCl9dC5wcmUuYXBwZW5kQ2hpbGQocyl9fWZ1bmN0aW9uIGxuKHQsZSxyLG4saSl7Zm9yKHZhciBvPXQuY20ub3B0aW9ucy5saW5lV3JhcHBpbmcsbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgcz1lLmNoYXJBdChsKSxhPTA9PWw7cz49Iu2ggCImJiLtr78iPnMmJmw8ZS5sZW5ndGgtMT8ocz1lLnNsaWNlKGwsbCsyKSwrK2wpOmwmJm8mJmhpKGUsbCkmJnQucHJlLmFwcGVuZENoaWxkKHNpKCJ3YnIiKSk7dmFyIHU9dC5tZWFzdXJlW3QucG9zXSxjPXQubWVhc3VyZVt0LnBvc109b24odCxzLHIsYSYmbixsPT1lLmxlbmd0aC0xJiZpKTt1JiYoYy5sZWZ0U2lkZT11LmxlZnRTaWRlfHx1KSxBaSYmbyYmIiAiPT1zJiZsJiYhL1xzLy50ZXN0KGUuY2hhckF0KGwtMSkpJiZsPGUubGVuZ3RoLTEmJiEvXHMvLnRlc3QoZS5jaGFyQXQobCsxKSkmJihjLnN0eWxlLndoaXRlU3BhY2U9Im5vcm1hbCIpLHQucG9zKz1zLmxlbmd0aH1lLmxlbmd0aCYmKHQubWVhc3VyZWRTb21ldGhpbmc9ITApfWZ1bmN0aW9uIHNuKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlPSIgIixyPTA7cjx0Lmxlbmd0aC0yOysrcillKz1yJTI/IiAiOiLCoCI7cmV0dXJuIGUrPSIgIn1yZXR1cm4gZnVuY3Rpb24ocixuLGksbyxsLHMpe3JldHVybiB0KHIsbi5yZXBsYWNlKC8gezMsfS9nLGUpLGksbyxsLHMpfX1mdW5jdGlvbiBhbih0LGUscixuKXt2YXIgaT0hbiYmci5yZXBsYWNlZFdpdGg7aWYoaSYmKHQuY29weVdpZGdldHMmJihpPWkuY2xvbmVOb2RlKCEwKSksdC5wcmUuYXBwZW5kQ2hpbGQoaSksdC5tZWFzdXJlKSl7aWYoZSl0Lm1lYXN1cmVbdC5wb3NdPWk7ZWxzZXt2YXIgbz1waSh0LmNtLmRpc3BsYXkubWVhc3VyZSk7aWYoImJvb2ttYXJrIiE9ci50eXBlfHxyLmluc2VydExlZnQpe2lmKHQubWVhc3VyZVt0LnBvc10pcmV0dXJuO3QubWVhc3VyZVt0LnBvc109dC5wcmUuaW5zZXJ0QmVmb3JlKG8saSl9ZWxzZSB0Lm1lYXN1cmVbdC5wb3NdPXQucHJlLmFwcGVuZENoaWxkKG8pfXQubWVhc3VyZWRTb21ldGhpbmc9ITB9dC5wb3MrPWV9ZnVuY3Rpb24gdW4odCxlLHIpe3ZhciBuPXQubWFya2VkU3BhbnMsaT10LnRleHQsbz0wO2lmKG4pZm9yKHZhciBsLHMsYSx1LGMsZixoPWkubGVuZ3RoLGQ9MCxwPTEsZz0iIixtPTA7Oyl7aWYobT09ZCl7cz1hPXU9Yz0iIixmPW51bGwsbT0xLzA7Zm9yKHZhciB2PVtdLHk9MDt5PG4ubGVuZ3RoOysreSl7dmFyIGI9blt5XSx4PWIubWFya2VyO2IuZnJvbTw9ZCYmKG51bGw9PWIudG98fGIudG8+ZCk/KG51bGwhPWIudG8mJm0+Yi50byYmKG09Yi50byxhPSIiKSx4LmNsYXNzTmFtZSYmKHMrPSIgIit4LmNsYXNzTmFtZSkseC5zdGFydFN0eWxlJiZiLmZyb209PWQmJih1Kz0iICIreC5zdGFydFN0eWxlKSx4LmVuZFN0eWxlJiZiLnRvPT1tJiYoYSs9IiAiK3guZW5kU3R5bGUpLHgudGl0bGUmJiFjJiYoYz14LnRpdGxlKSx4LmNvbGxhcHNlZCYmKCFmfHxmLm1hcmtlci5zaXplPHguc2l6ZSkmJihmPWIpKTpiLmZyb20+ZCYmbT5iLmZyb20mJihtPWIuZnJvbSksImJvb2ttYXJrIj09eC50eXBlJiZiLmZyb209PWQmJngucmVwbGFjZWRXaXRoJiZ2LnB1c2goeCkKfWlmKGYmJihmLmZyb218fDApPT1kJiYoYW4oZSwobnVsbD09Zi50bz9oOmYudG8pLWQsZi5tYXJrZXIsbnVsbD09Zi5mcm9tKSxudWxsPT1mLnRvKSlyZXR1cm4gZi5tYXJrZXIuZmluZCgpO2lmKCFmJiZ2Lmxlbmd0aClmb3IodmFyIHk9MDt5PHYubGVuZ3RoOysreSlhbihlLDAsdlt5XSl9aWYoZD49aClicmVhaztmb3IodmFyIEM9TWF0aC5taW4oaCxtKTs7KXtpZihnKXt2YXIgdz1kK2cubGVuZ3RoO2lmKCFmKXt2YXIgTD13PkM/Zy5zbGljZSgwLEMtZCk6ZztlLmFkZFRva2VuKGUsTCxsP2wrczpzLHUsZCtMLmxlbmd0aD09bT9hOiIiLGMpfWlmKHc+PUMpe2c9Zy5zbGljZShDLWQpLGQ9QzticmVha31kPXcsdT0iIn1nPWkuc2xpY2UobyxvPXJbcCsrXSksbD1lbihyW3ArK10sZSl9fWVsc2UgZm9yKHZhciBwPTE7cDxyLmxlbmd0aDtwKz0yKWUuYWRkVG9rZW4oZSxpLnNsaWNlKG8sbz1yW3BdKSxlbihyW3ArMV0sZSkpfWZ1bmN0aW9uIGNuKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gcj9yW3RdOm51bGx9ZnVuY3Rpb24gbCh0LHIsbil7JHIodCxyLG4saSksVW4odCwiY2hhbmdlIix0LGUpfXZhciBzPWUuZnJvbSxhPWUudG8sdT1lLnRleHQsYz1nbih0LHMubGluZSksZj1nbih0LGEubGluZSksaD1Rbih1KSxkPW8odS5sZW5ndGgtMSkscD1hLmxpbmUtcy5saW5lO2lmKDAhPXMuY2h8fDAhPWEuY2h8fCIiIT1ofHx0LmNtJiYhdC5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSlpZihjPT1mKWlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKStoK2MudGV4dC5zbGljZShhLmNoKSxkKTtlbHNle2Zvcih2YXIgZz1bXSxtPTEsdj11Lmxlbmd0aC0xO3Y+bTsrK20pZy5wdXNoKG5ldyBibyh1W21dLG8obSksaSkpO2cucHVzaChuZXcgYm8oaCtjLnRleHQuc2xpY2UoYS5jaCksZCxpKSksbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK3VbMF0sbygwKSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZSBpZigxPT11Lmxlbmd0aClsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXStmLnRleHQuc2xpY2UoYS5jaCksbygwKSksdC5yZW1vdmUocy5saW5lKzEscCk7ZWxzZXtsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSxsKGYsaCtmLnRleHQuc2xpY2UoYS5jaCksZCk7Zm9yKHZhciBtPTEsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7cD4xJiZ0LnJlbW92ZShzLmxpbmUrMSxwLTEpLHQuaW5zZXJ0KHMubGluZSsxLGcpfWVsc2V7Zm9yKHZhciBtPTAsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7bChmLGYudGV4dCxkKSxwJiZ0LnJlbW92ZShzLmxpbmUscCksZy5sZW5ndGgmJnQuaW5zZXJ0KHMubGluZSxnKX1Vbih0LCJjaGFuZ2UiLHQsZSksbnIodCxuLmFuY2hvcixuLmhlYWQsbnVsbCwhMCl9ZnVuY3Rpb24gZm4odCl7dGhpcy5saW5lcz10LHRoaXMucGFyZW50PW51bGw7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPTA7cj5lOysrZSl0W2VdLnBhcmVudD10aGlzLG4rPXRbZV0uaGVpZ2h0O3RoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gaG4odCl7dGhpcy5jaGlsZHJlbj10O2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10Lmxlbmd0aDtpPm47KytuKXt2YXIgbz10W25dO2UrPW8uY2h1bmtTaXplKCkscis9by5oZWlnaHQsby5wYXJlbnQ9dGhpc310aGlzLnNpemU9ZSx0aGlzLmhlaWdodD1yLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24gZG4odCxlLHIpe2Z1bmN0aW9uIG4odCxpLG8pe2lmKHQubGlua2VkKWZvcih2YXIgbD0wO2w8dC5saW5rZWQubGVuZ3RoOysrbCl7dmFyIHM9dC5saW5rZWRbbF07aWYocy5kb2MhPWkpe3ZhciBhPW8mJnMuc2hhcmVkSGlzdDsoIXJ8fGEpJiYoZShzLmRvYyxhKSxuKHMuZG9jLHQsYSkpfX19bih0LG51bGwsITApfWZ1bmN0aW9uIHBuKHQsZSl7aWYoZS5jbSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuIik7dC5kb2M9ZSxlLmNtPXQsbyh0KSxyKHQpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fGYodCksdC5vcHRpb25zLm1vZGU9ZS5tb2RlT3B0aW9uLHVlKHQpfWZ1bmN0aW9uIGduKHQsZSl7Zm9yKGUtPXQuZmlyc3Q7IXQubGluZXM7KWZvcih2YXIgcj0wOzsrK3Ipe3ZhciBuPXQuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+ZSl7dD1uO2JyZWFrfWUtPWl9cmV0dXJuIHQubGluZXNbZV19ZnVuY3Rpb24gbW4odCxlLHIpe3ZhciBuPVtdLGk9ZS5saW5lO3JldHVybiB0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe3ZhciBvPXQudGV4dDtpPT1yLmxpbmUmJihvPW8uc2xpY2UoMCxyLmNoKSksaT09ZS5saW5lJiYobz1vLnNsaWNlKGUuY2gpKSxuLnB1c2gobyksKytpfSksbn1mdW5jdGlvbiB2bih0LGUscil7dmFyIG49W107cmV0dXJuIHQuaXRlcihlLHIsZnVuY3Rpb24odCl7bi5wdXNoKHQudGV4dCl9KSxufWZ1bmN0aW9uIHluKHQsZSl7Zm9yKHZhciByPWUtdC5oZWlnaHQsbj10O247bj1uLnBhcmVudCluLmhlaWdodCs9cn1mdW5jdGlvbiBibih0KXtpZihudWxsPT10LnBhcmVudClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQscj10aShlLmxpbmVzLHQpLG49ZS5wYXJlbnQ7bjtlPW4sbj1uLnBhcmVudClmb3IodmFyIGk9MDtuLmNoaWxkcmVuW2ldIT1lOysraSlyKz1uLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpO3JldHVybiByK2UuZmlyc3R9ZnVuY3Rpb24geG4odCxlKXt2YXIgcj10LmZpcnN0O3Q6ZG97Zm9yKHZhciBuPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10LmNoaWxkcmVuW25dLGw9by5oZWlnaHQ7aWYobD5lKXt0PW87Y29udGludWUgdH1lLT1sLHIrPW8uY2h1bmtTaXplKCl9cmV0dXJuIHJ9d2hpbGUoIXQubGluZXMpO2Zvcih2YXIgbj0wLGk9dC5saW5lcy5sZW5ndGg7aT5uOysrbil7dmFyIHM9dC5saW5lc1tuXSxhPXMuaGVpZ2h0O2lmKGE+ZSlicmVhaztlLT1hfXJldHVybiByK259ZnVuY3Rpb24gQ24odCxlKXtlPUdyKHQuZG9jLGUpO2Zvcih2YXIgcj0wLG49ZS5wYXJlbnQsaT0wO2k8bi5saW5lcy5sZW5ndGg7KytpKXt2YXIgbz1uLmxpbmVzW2ldO2lmKG89PWUpYnJlYWs7cis9by5oZWlnaHR9Zm9yKHZhciBsPW4ucGFyZW50O2w7bj1sLGw9bi5wYXJlbnQpZm9yKHZhciBpPTA7aTxsLmNoaWxkcmVuLmxlbmd0aDsrK2kpe3ZhciBzPWwuY2hpbGRyZW5baV07aWYocz09bilicmVhaztyKz1zLmhlaWdodH1yZXR1cm4gcn1mdW5jdGlvbiB3bih0KXt2YXIgZT10Lm9yZGVyO3JldHVybiBudWxsPT1lJiYoZT10Lm9yZGVyPUJvKHQudGV4dCkpLGV9ZnVuY3Rpb24gTG4odCl7cmV0dXJue2RvbmU6W10sdW5kb25lOltdLHVuZG9EZXB0aDoxLzAsbGFzdFRpbWU6MCxsYXN0T3A6bnVsbCxsYXN0T3JpZ2luOm51bGwsZ2VuZXJhdGlvbjp0fHwxLG1heEdlbmVyYXRpb246dHx8MX19ZnVuY3Rpb24ga24odCxlLHIsbil7dmFyIGk9ZVsic3BhbnNfIit0LmlkXSxvPTA7dC5pdGVyKE1hdGgubWF4KHQuZmlyc3QsciksTWF0aC5taW4odC5maXJzdCt0LnNpemUsbiksZnVuY3Rpb24ocil7ci5tYXJrZWRTcGFucyYmKChpfHwoaT1lWyJzcGFuc18iK3QuaWRdPXt9KSlbb109ci5tYXJrZWRTcGFucyksKytvfSl9ZnVuY3Rpb24gU24odCxlKXt2YXIgcj17bGluZTplLmZyb20ubGluZSxjaDplLmZyb20uY2h9LG49e2Zyb206cix0bzpsbyhlKSx0ZXh0Om1uKHQsZS5mcm9tLGUudG8pfTtyZXR1cm4ga24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKSxkbih0LGZ1bmN0aW9uKHQpe2tuKHQsbixlLmZyb20ubGluZSxlLnRvLmxpbmUrMSl9LCEwKSxufWZ1bmN0aW9uIE1uKHQsZSxyLG4pe3ZhciBpPXQuaGlzdG9yeTtpLnVuZG9uZS5sZW5ndGg9MDt2YXIgbz0rbmV3IERhdGUsbD1RbihpLmRvbmUpO2lmKGwmJihpLmxhc3RPcD09bnx8aS5sYXN0T3JpZ2luPT1lLm9yaWdpbiYmZS5vcmlnaW4mJigiKyI9PWUub3JpZ2luLmNoYXJBdCgwKSYmdC5jbSYmaS5sYXN0VGltZT5vLXQuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheXx8IioiPT1lLm9yaWdpbi5jaGFyQXQoMCkpKSl7dmFyIHM9UW4obC5jaGFuZ2VzKTtqZShlLmZyb20sZS50bykmJmplKGUuZnJvbSxzLnRvKT9zLnRvPWxvKGUpOmwuY2hhbmdlcy5wdXNoKFNuKHQsZSkpLGwuYW5jaG9yQWZ0ZXI9ci5hbmNob3IsbC5oZWFkQWZ0ZXI9ci5oZWFkfWVsc2UgZm9yKGw9e2NoYW5nZXM6W1NuKHQsZSldLGdlbmVyYXRpb246aS5nZW5lcmF0aW9uLGFuY2hvckJlZm9yZTp0LnNlbC5hbmNob3IsaGVhZEJlZm9yZTp0LnNlbC5oZWFkLGFuY2hvckFmdGVyOnIuYW5jaG9yLGhlYWRBZnRlcjpyLmhlYWR9LGkuZG9uZS5wdXNoKGwpLGkuZ2VuZXJhdGlvbj0rK2kubWF4R2VuZXJhdGlvbjtpLmRvbmUubGVuZ3RoPmkudW5kb0RlcHRoOylpLmRvbmUuc2hpZnQoKTtpLmxhc3RUaW1lPW8saS5sYXN0T3A9bixpLmxhc3RPcmlnaW49ZS5vcmlnaW59ZnVuY3Rpb24gVG4odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlLHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLm1hcmtlci5leHBsaWNpdGx5Q2xlYXJlZD9lfHwoZT10LnNsaWNlKDAscikpOmUmJmUucHVzaCh0W3JdKTtyZXR1cm4gZT9lLmxlbmd0aD9lOm51bGw6dH1mdW5jdGlvbiBBbih0LGUpe3ZhciByPWVbInNwYW5zXyIrdC5pZF07aWYoIXIpcmV0dXJuIG51bGw7Zm9yKHZhciBuPTAsaT1bXTtuPGUudGV4dC5sZW5ndGg7KytuKWkucHVzaChUbihyW25dKSk7cmV0dXJuIGl9ZnVuY3Rpb24gSG4odCxlKXtmb3IodmFyIHI9MCxuPVtdO3I8dC5sZW5ndGg7KytyKXt2YXIgaT10W3JdLG89aS5jaGFuZ2VzLGw9W107bi5wdXNoKHtjaGFuZ2VzOmwsYW5jaG9yQmVmb3JlOmkuYW5jaG9yQmVmb3JlLGhlYWRCZWZvcmU6aS5oZWFkQmVmb3JlLGFuY2hvckFmdGVyOmkuYW5jaG9yQWZ0ZXIsaGVhZEFmdGVyOmkuaGVhZEFmdGVyfSk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDsrK3Mpe3ZhciBhLHU9b1tzXTtpZihsLnB1c2goe2Zyb206dS5mcm9tLHRvOnUudG8sdGV4dDp1LnRleHR9KSxlKWZvcih2YXIgYyBpbiB1KShhPWMubWF0Y2goL15zcGFuc18oXGQrKSQvKSkmJnRpKGUsTnVtYmVyKGFbMV0pKT4tMSYmKFFuKGwpW2NdPXVbY10sZGVsZXRlIHVbY10pfX1yZXR1cm4gbn1mdW5jdGlvbiBObih0LGUscixuKXtyPHQubGluZT90LmxpbmUrPW46ZTx0LmxpbmUmJih0LmxpbmU9ZSx0LmNoPTApfWZ1bmN0aW9uIERuKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXtmb3IodmFyIG89dFtpXSxsPSEwLHM9MDtzPG8uY2hhbmdlcy5sZW5ndGg7KytzKXt2YXIgYT1vLmNoYW5nZXNbc107aWYoby5jb3BpZWR8fChhLmZyb209WmUoYS5mcm9tKSxhLnRvPVplKGEudG8pKSxyPGEuZnJvbS5saW5lKWEuZnJvbS5saW5lKz1uLGEudG8ubGluZSs9bjtlbHNlIGlmKGU8PWEudG8ubGluZSl7bD0hMTticmVha319by5jb3BpZWR8fChvLmFuY2hvckJlZm9yZT1aZShvLmFuY2hvckJlZm9yZSksby5oZWFkQmVmb3JlPVplKG8uaGVhZEJlZm9yZSksby5hbmNob3JBZnRlcj1aZShvLmFuY2hvckFmdGVyKSxvLnJlYWRBZnRlcj1aZShvLmhlYWRBZnRlciksby5jb3BpZWQ9ITApLGw/KE5uKG8uYW5jaG9yQmVmb3JlKSxObihvLmhlYWRCZWZvcmUpLE5uKG8uYW5jaG9yQWZ0ZXIpLE5uKG8uaGVhZEFmdGVyKSk6KHQuc3BsaWNlKDAsaSsxKSxpPTApfX1mdW5jdGlvbiBXbih0LGUpe3ZhciByPWUuZnJvbS5saW5lLG49ZS50by5saW5lLGk9ZS50ZXh0Lmxlbmd0aC0obi1yKS0xO0RuKHQuZG9uZSxyLG4saSksRG4odC51bmRvbmUscixuLGkpfWZ1bmN0aW9uIE9uKCl7UG4odGhpcyl9ZnVuY3Rpb24gRW4odCl7cmV0dXJuIHQuc3RvcHx8KHQuc3RvcD1PbiksdH1mdW5jdGlvbiB6bih0KXt0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIEluKHQpe3Quc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gRm4odCl7cmV0dXJuIG51bGwhPXQuZGVmYXVsdFByZXZlbnRlZD90LmRlZmF1bHRQcmV2ZW50ZWQ6MD09dC5yZXR1cm5WYWx1ZX1mdW5jdGlvbiBQbih0KXt6bih0KSxJbih0KX1mdW5jdGlvbiBSbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudH1mdW5jdGlvbiBCbih0KXt2YXIgZT10LndoaWNoO3JldHVybiBudWxsPT1lJiYoMSZ0LmJ1dHRvbj9lPTE6MiZ0LmJ1dHRvbj9lPTM6NCZ0LmJ1dHRvbiYmKGU9MikpLEtpJiZ0LmN0cmxLZXkmJjE9PWUmJihlPTMpLGV9ZnVuY3Rpb24gR24odCxlLHIpe2lmKHQuYWRkRXZlbnRMaXN0ZW5lcil0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuYXR0YWNoRXZlbnQpdC5hdHRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVyc3x8KHQuX2hhbmRsZXJzPXt9KSxpPW5bZV18fChuW2VdPVtdKTtpLnB1c2gocil9fWZ1bmN0aW9uIFZuKHQsZSxyKXtpZih0LnJlbW92ZUV2ZW50TGlzdGVuZXIpdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMSk7ZWxzZSBpZih0LmRldGFjaEV2ZW50KXQuZGV0YWNoRXZlbnQoIm9uIitlLHIpO2Vsc2V7dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKCFuKXJldHVybjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoOysraSlpZihuW2ldPT1yKXtuLnNwbGljZShpLDEpO2JyZWFrfX19ZnVuY3Rpb24gS24odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYocilmb3IodmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLGk9MDtpPHIubGVuZ3RoOysraSlyW2ldLmFwcGx5KG51bGwsbil9ZnVuY3Rpb24gVW4odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxpKX19dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKG4pe3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtTb3x8KCsrTW8sU289W10sc2V0VGltZW91dChfbiwwKSk7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDsrK28pU28ucHVzaChyKG5bb10pKX19ZnVuY3Rpb24gWG4odCxlLHIpe3JldHVybiBLbih0LHJ8fGUudHlwZSx0LGUpLEZuKGUpfHxlLmNvZGVtaXJyb3JJZ25vcmV9ZnVuY3Rpb24gX24oKXstLU1vO3ZhciB0PVNvO1NvPW51bGw7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2UpdFtlXSgpfWZ1bmN0aW9uIFluKHQsZSl7dmFyIHI9dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO3JldHVybiByJiZyLmxlbmd0aD4wfWZ1bmN0aW9uIGpuKHQpe3QucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7R24odGhpcyx0LGUpfSx0LnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXtWbih0aGlzLHQsZSl9fWZ1bmN0aW9uICRuKCl7dGhpcy5pZD1udWxsfWZ1bmN0aW9uIFpuKHQsZSxyLG4saSl7bnVsbD09ZSYmKGU9dC5zZWFyY2goL1teXHNcdTAwYTBdLyksLTE9PWUmJihlPXQubGVuZ3RoKSk7Zm9yKHZhciBvPW58fDAsbD1pfHwwO2U+bzsrK28pIgkiPT10LmNoYXJBdChvKT9sKz1yLWwlcjorK2w7cmV0dXJuIGx9ZnVuY3Rpb24gcW4odCl7Zm9yKDtIby5sZW5ndGg8PXQ7KUhvLnB1c2goUW4oSG8pKyIgIik7cmV0dXJuIEhvW3RdfWZ1bmN0aW9uIFFuKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfWZ1bmN0aW9uIEpuKHQpe2lmKEdpKXQuc2VsZWN0aW9uU3RhcnQ9MCx0LnNlbGVjdGlvbkVuZD10LnZhbHVlLmxlbmd0aDtlbHNlIHRyeXt0LnNlbGVjdCgpfWNhdGNoKGUpe319ZnVuY3Rpb24gdGkodCxlKXtpZih0LmluZGV4T2YpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO24+cjsrK3IpaWYodFtyXT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBlaSh0LGUpe2Z1bmN0aW9uIHIoKXt9ci5wcm90b3R5cGU9dDt2YXIgbj1uZXcgcjtyZXR1cm4gZSYmcmkoZSxuKSxufWZ1bmN0aW9uIHJpKHQsZSl7ZXx8KGU9e30pO2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT1bXSxyPTA7dD5yOysrcillLnB1c2godm9pZCAwKTtyZXR1cm4gZX1mdW5jdGlvbiBpaSh0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gb2kodCl7cmV0dXJuL1x3Ly50ZXN0KHQpfHx0PiLCgCImJih0LnRvVXBwZXJDYXNlKCkhPXQudG9Mb3dlckNhc2UoKXx8Tm8udGVzdCh0KSl9ZnVuY3Rpb24gbGkodCl7Zm9yKHZhciBlIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzaSh0LGUscixuKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO2lmKHImJihpLmNsYXNzTmFtZT1yKSxuJiYoaS5zdHlsZS5jc3NUZXh0PW4pLCJzdHJpbmciPT10eXBlb2YgZSljaShpLGUpO2Vsc2UgaWYoZSlmb3IodmFyIG89MDtvPGUubGVuZ3RoOysrbylpLmFwcGVuZENoaWxkKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGFpKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMubGVuZ3RoO2U+MDstLWUpdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3JldHVybiB0fWZ1bmN0aW9uIHVpKHQsZSl7cmV0dXJuIGFpKHQpLmFwcGVuZENoaWxkKGUpfWZ1bmN0aW9uIGNpKHQsZSl7Tmk/KHQuaW5uZXJIVE1MPSIiLHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpKTp0LnRleHRDb250ZW50PWV9ZnVuY3Rpb24gZmkodCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4hMX1mdW5jdGlvbiBkaSh0KXtpZihudWxsIT1PbylyZXR1cm4gT287dmFyIGU9c2koImRpdiIsbnVsbCxudWxsLCJ3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxvdy14OiBzY3JvbGwiKTtyZXR1cm4gdWkodCxlKSxlLm9mZnNldFdpZHRoJiYoT289ZS5vZmZzZXRIZWlnaHQtZS5jbGllbnRIZWlnaHQpLE9vfHwwfWZ1bmN0aW9uIHBpKHQpe2lmKG51bGw9PUVvKXt2YXIgZT1zaSgic3BhbiIsIuKAiyIpO3VpKHQsc2koInNwYW4iLFtlLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IildKSksMCE9dC5maXJzdENoaWxkLm9mZnNldEhlaWdodCYmKEVvPWUub2Zmc2V0V2lkdGg8PTEmJmUub2Zmc2V0SGVpZ2h0PjImJiFIaSl9cmV0dXJuIEVvP3NpKCJzcGFuIiwi4oCLIik6c2koInNwYW4iLCLCoCIsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgiKX1mdW5jdGlvbiBnaSh0LGUscixuKXtpZighdClyZXR1cm4gbihlLHIsImx0ciIpO2Zvcih2YXIgaT0hMSxvPTA7bzx0Lmxlbmd0aDsrK28pe3ZhciBsPXRbb107KGwuZnJvbTxyJiZsLnRvPmV8fGU9PXImJmwudG89PWUpJiYobihNYXRoLm1heChsLmZyb20sZSksTWF0aC5taW4obC50byxyKSwxPT1sLmxldmVsPyJydGwiOiJsdHIiKSxpPSEwKX1pfHxuKGUsciwibHRyIil9ZnVuY3Rpb24gbWkodCl7cmV0dXJuIHQubGV2ZWwlMj90LnRvOnQuZnJvbX1mdW5jdGlvbiB2aSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QuZnJvbTp0LnRvfWZ1bmN0aW9uIHlpKHQpe3ZhciBlPXduKHQpO3JldHVybiBlP21pKGVbMF0pOjB9ZnVuY3Rpb24gYmkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/dmkoUW4oZSkpOnQudGV4dC5sZW5ndGh9ZnVuY3Rpb24geGkodCxlKXt2YXIgcj1nbih0LmRvYyxlKSxuPUdyKHQuZG9jLHIpO24hPXImJihlPWJuKG4pKTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP2JpKG4pOnlpKG4pOjA7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gQ2kodCxlKXtmb3IodmFyIHIsbjtyPUJyKG49Z24odC5kb2MsZSkpOyllPXIuZmluZCgpLnRvLmxpbmU7dmFyIGk9d24obiksbz1pP2lbMF0ubGV2ZWwlMj95aShuKTpiaShuKTpuLnRleHQubGVuZ3RoO3JldHVybiBZZShlLG8pfWZ1bmN0aW9uIHdpKHQsZSxyKXt2YXIgbj10WzBdLmxldmVsO3JldHVybiBlPT1uPyEwOnI9PW4/ITE6cj5lfWZ1bmN0aW9uIExpKHQsZSl7Zm9yKHZhciByLG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXTtpZihpLmZyb208ZSYmaS50bz5lKXJldHVybiBSbz1udWxsLG47aWYoaS5mcm9tPT1lfHxpLnRvPT1lKXtpZihudWxsIT1yKXJldHVybiB3aSh0LGkubGV2ZWwsdFtyXS5sZXZlbCk/KFJvPXIsbik6KFJvPW4scik7cj1ufX1yZXR1cm4gUm89bnVsbCxyfWZ1bmN0aW9uIGtpKHQsZSxyLG4pe2lmKCFuKXJldHVybiBlK3I7ZG8gZSs9cjt3aGlsZShlPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChlKSkpO3JldHVybiBlfWZ1bmN0aW9uIFNpKHQsZSxyLG4pe3ZhciBpPXduKHQpO2lmKCFpKXJldHVybiBNaSh0LGUscixuKTtmb3IodmFyIG89TGkoaSxlKSxsPWlbb10scz1raSh0LGUsbC5sZXZlbCUyPy1yOnIsbik7Oyl7aWYocz5sLmZyb20mJnM8bC50bylyZXR1cm4gcztpZihzPT1sLmZyb218fHM9PWwudG8pcmV0dXJuIExpKGkscyk9PW8/czoobD1pW28rPXJdLHI+MD09bC5sZXZlbCUyP2wudG86bC5mcm9tKTtpZihsPWlbbys9cl0sIWwpcmV0dXJuIG51bGw7cz1yPjA9PWwubGV2ZWwlMj9raSh0LGwudG8sLTEsbik6a2kodCxsLmZyb20sMSxuKX19ZnVuY3Rpb24gTWkodCxlLHIsbil7dmFyIGk9ZStyO2lmKG4pZm9yKDtpPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChpKSk7KWkrPXI7cmV0dXJuIDA+aXx8aT50LnRleHQubGVuZ3RoP251bGw6aX12YXIgVGk9L2dlY2tvXC9cZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQWk9L01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSGk9QWkmJihudWxsPT1kb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw4KSxOaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDkpLERpPS9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFdpPS9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxPaT1XaSYmL1F0XC9cZCtcLlxkKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxFaT0vQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksemk9L09wZXJhXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSWk9L0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLEZpPS9LSFRNTFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFBpPS9NYWMgT1MgWCAxXGRcRChbNy05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFJpPS9NYWMgT1MgWCAxXGRcRChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEJpPS9QaGFudG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksR2k9L0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvTW9iaWxlXC9cdysvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksVmk9R2l8fC9BbmRyb2lkfHdlYk9TfEJsYWNrQmVycnl8T3BlcmEgTWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxLaT1HaXx8L01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFVpPS93aW4vaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksWGk9emkmJm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cLyhcZCpcLlxkKikvKTtYaSYmKFhpPU51bWJlcihYaVsxXSkpLFhpJiZYaT49MTUmJih6aT0hMSxXaT0hMCk7dmFyIF9pLFlpLGppLCRpPUtpJiYoT2l8fHppJiYobnVsbD09WGl8fDEyLjExPlhpKSksWmk9VGl8fEFpJiYhTmkscWk9ITEsUWk9ITEsSmk9MCx0bz0wLGVvPTAscm89bnVsbDtBaT9ybz0tLjUzOlRpP3JvPTE1OkVpP3JvPS0uNzpJaSYmKHJvPS0xLzMpO3ZhciBubyxpbyxvbz1udWxsLGxvPXQuY2hhbmdlRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQ/WWUodC5mcm9tLmxpbmUrdC50ZXh0Lmxlbmd0aC0xLFFuKHQudGV4dCkubGVuZ3RoKygxPT10LnRleHQubGVuZ3RoP3QuZnJvbS5jaDowKSk6dC50b307dC5Qb3M9WWUsdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsZm9jdXM6ZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKSxwZSh0aGlzKSxmZSh0aGlzKX0sc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHRpb25zLG49clt0XTsoclt0XSE9ZXx8Im1vZGUiPT10KSYmKHJbdF09ZSxzby5oYXNPd25Qcm9wZXJ0eSh0KSYmbGUodGhpcyxzb1t0XSkodGhpcyxlLG4pKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnNbdF19LGdldERvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY30sYWRkS2V5TWFwOmZ1bmN0aW9uKHQsZSl7dGhpcy5zdGF0ZS5rZXlNYXBzW2U/InB1c2giOiJ1bnNoaWZ0Il0odCl9LHJlbW92ZUtleU1hcDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdGF0ZS5rZXlNYXBzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT10fHwic3RyaW5nIiE9dHlwZW9mIGVbcl0mJmVbcl0ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSwhMH0sYWRkT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKGUscil7dmFyIG49ZS50b2tlbj9lOnQuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsZSk7aWYobi5zdGFydFN0YXRlKXRocm93IG5ldyBFcnJvcigiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKTt0aGlzLnN0YXRlLm92ZXJsYXlzLnB1c2goe21vZGU6bixtb2RlU3BlYzplLG9wYXF1ZTpyJiZyLm9wYXF1ZX0pLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpfSkscmVtb3ZlT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLm92ZXJsYXlzLHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG49ZVtyXS5tb2RlU3BlYztpZihuPT10fHwic3RyaW5nIj09dHlwZW9mIHQmJm4ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSx0aGlzLnN0YXRlLm1vZGVHZW4rKyx1ZSh0aGlzKSx2b2lkIDB9fSksaW5kZW50TGluZTpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXsic3RyaW5nIiE9dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZSYmKGU9bnVsbD09ZT90aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQ/InNtYXJ0IjoicHJldiI6ZT8iYWRkIjoic3VidHJhY3QiKSx0cih0aGlzLmRvYyx0KSYmaHIodGhpcyx0LGUscil9KSxpbmRlbnRTZWxlY3Rpb246bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRvYy5zZWw7aWYoamUoZS5mcm9tLGUudG8pKXJldHVybiBocih0aGlzLGUuZnJvbS5saW5lLHQpO2Zvcih2YXIgcj1lLnRvLmxpbmUtKGUudG8uY2g/MDoxKSxuPWUuZnJvbS5saW5lO3I+PW47KytuKWhyKHRoaXMsbix0KX0pLGdldFRva2VuQXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYzt0PVFlKHIsdCk7Zm9yKHZhciBuPXoodGhpcyx0LmxpbmUsZSksaT10aGlzLmRvYy5tb2RlLG89Z24ocix0LmxpbmUpLGw9bmV3IFNyKG8udGV4dCx0aGlzLm9wdGlvbnMudGFiU2l6ZSk7bC5wb3M8dC5jaCYmIWwuZW9sKCk7KXtsLnN0YXJ0PWwucG9zO3ZhciBzPWkudG9rZW4obCxuKX1yZXR1cm57c3RhcnQ6bC5zdGFydCxlbmQ6bC5wb3Msc3RyaW5nOmwuY3VycmVudCgpLGNsYXNzTmFtZTpzfHxudWxsLHR5cGU6c3x8bnVsbCxzdGF0ZTpufX0sZ2V0VG9rZW5UeXBlQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLmRvYyx0KTt2YXIgZT1Kcih0aGlzLGduKHRoaXMuZG9jLHQubGluZSkpLHI9MCxuPShlLmxlbmd0aC0xKS8yLGk9dC5jaDtpZigwPT1pKXJldHVybiBlWzJdO2Zvcig7Oyl7dmFyIG89cituPj4xO2lmKChvP2VbMipvLTFdOjApPj1pKW49bztlbHNle2lmKCEoZVsyKm8rMV08aSkpcmV0dXJuIGVbMipvKzJdO3I9bysxfX19LGdldE1vZGVBdDpmdW5jdGlvbihlKXt2YXIgcj10aGlzLmRvYy5tb2RlO3JldHVybiByLmlubmVyTW9kZT90LmlubmVyTW9kZShyLHRoaXMuZ2V0VG9rZW5BdChlKS5zdGF0ZSkubW9kZTpyfSxnZXRIZWxwZXI6ZnVuY3Rpb24odCxlKXtpZihnby5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHI9Z29bZV0sbj10aGlzLmdldE1vZGVBdCh0KTtyZXR1cm4gbltlXSYmcltuW2VdXXx8bi5oZWxwZXJUeXBlJiZyW24uaGVscGVyVHlwZV18fHJbbi5uYW1lXX19LGdldFN0YXRlQWZ0ZXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYztyZXR1cm4gdD1xZShyLG51bGw9PXQ/ci5maXJzdCtyLnNpemUtMTp0KSx6KHRoaXMsdCsxLGUpfSxjdXJzb3JDb29yZHM6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyZXR1cm4gcj1udWxsPT10P24uaGVhZDoib2JqZWN0Ij09dHlwZW9mIHQ/UWUodGhpcy5kb2MsdCk6dD9uLmZyb206bi50byxRKHRoaXMscixlfHwicGFnZSIpfSxjaGFyQ29vcmRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHEodGhpcyxRZSh0aGlzLmRvYyx0KSxlfHwicGFnZSIpfSxjb29yZHNDaGFyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHQsZXx8InBhZ2UiKSx0ZSh0aGlzLHQubGVmdCx0LnRvcCl9LGxpbmVBdEhlaWdodDpmdW5jdGlvbih0LGUpe3JldHVybiB0PVoodGhpcyx7dG9wOnQsbGVmdDowfSxlfHwicGFnZSIpLnRvcCx4bih0aGlzLmRvYyx0K3RoaXMuZGlzcGxheS52aWV3T2Zmc2V0KX0saGVpZ2h0QXRMaW5lOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ITEsbj10aGlzLmRvYy5maXJzdCt0aGlzLmRvYy5zaXplLTE7dDx0aGlzLmRvYy5maXJzdD90PXRoaXMuZG9jLmZpcnN0OnQ+biYmKHQ9bixyPSEwKTt2YXIgaT1nbih0aGlzLmRvYyx0KTtyZXR1cm4gJCh0aGlzLGduKHRoaXMuZG9jLHQpLHt0b3A6MCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wKyhyP2kuaGVpZ2h0OjApfSxkZWZhdWx0VGV4dEhlaWdodDpmdW5jdGlvbigpe3JldHVybiByZSh0aGlzLmRpc3BsYXkpfSxkZWZhdWx0Q2hhcldpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5lKHRoaXMuZGlzcGxheSl9LHNldEd1dHRlck1hcmtlcjpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ3V0dGVyTWFya2Vyc3x8KHQuZ3V0dGVyTWFya2Vycz17fSk7cmV0dXJuIG5bZV09ciwhciYmbGkobikmJih0Lmd1dHRlck1hcmtlcnM9bnVsbCksITB9KX0pLGNsZWFyR3V0dGVyOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZG9jLG49ci5maXJzdDtyLml0ZXIoZnVuY3Rpb24ocil7ci5ndXR0ZXJNYXJrZXJzJiZyLmd1dHRlck1hcmtlcnNbdF0mJihyLmd1dHRlck1hcmtlcnNbdF09bnVsbCx1ZShlLG4sbisxKSxsaShyLmd1dHRlck1hcmtlcnMpJiYoci5ndXR0ZXJNYXJrZXJzPW51bGwpKSwrK259KX0pLGFkZExpbmVDbGFzczpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPSJ0ZXh0Ij09ZT8idGV4dENsYXNzIjoiYmFja2dyb3VuZCI9PWU/ImJnQ2xhc3MiOiJ3cmFwQ2xhc3MiO2lmKHRbbl0pe2lmKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIrcisiKD86JHxcXHMpIikudGVzdCh0W25dKSlyZXR1cm4hMTt0W25dKz0iICIrcn1lbHNlIHRbbl09cjtyZXR1cm4hMH0pfSkscmVtb3ZlTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyIsaT10W25dO2lmKCFpKXJldHVybiExO2lmKG51bGw9PXIpdFtuXT1udWxsO2Vsc2V7dmFyIG89aS5tYXRjaChuZXcgUmVnRXhwKCIoPzpefFxccyspIityKyIoPzokfFxccyspIikpO2lmKCFvKXJldHVybiExO3ZhciBsPW8uaW5kZXgrb1swXS5sZW5ndGg7dFtuXT1pLnNsaWNlKDAsby5pbmRleCkrKG8uaW5kZXgmJmwhPWkubGVuZ3RoPyIgIjoiIikraS5zbGljZShsKXx8bnVsbH1yZXR1cm4hMH0pfSksYWRkTGluZVdpZGdldDpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4ganIodGhpcyx0LGUscil9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKHQpe3QuY2xlYXIoKX0sbGluZUluZm86ZnVuY3Rpb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZighdHIodGhpcy5kb2MsdCkpcmV0dXJuIG51bGw7dmFyIGU9dDtpZih0PWduKHRoaXMuZG9jLHQpLCF0KXJldHVybiBudWxsfWVsc2V7dmFyIGU9Ym4odCk7aWYobnVsbD09ZSlyZXR1cm4gbnVsbH1yZXR1cm57bGluZTplLGhhbmRsZTp0LHRleHQ6dC50ZXh0LGd1dHRlck1hcmtlcnM6dC5ndXR0ZXJNYXJrZXJzLHRleHRDbGFzczp0LnRleHRDbGFzcyxiZ0NsYXNzOnQuYmdDbGFzcyx3cmFwQ2xhc3M6dC53cmFwQ2xhc3Msd2lkZ2V0czp0LndpZGdldHN9fSxnZXRWaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZGlzcGxheS5zaG93aW5nRnJvbSx0bzp0aGlzLmRpc3BsYXkuc2hvd2luZ1RvfX0sYWRkV2lkZ2V0OmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89dGhpcy5kaXNwbGF5O3Q9USh0aGlzLFFlKHRoaXMuZG9jLHQpKTt2YXIgbD10LmJvdHRvbSxzPXQubGVmdDtpZihlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zaXplci5hcHBlbmRDaGlsZChlKSwib3ZlciI9PW4pbD10LnRvcDtlbHNlIGlmKCJhYm92ZSI9PW58fCJuZWFyIj09bil7dmFyIGE9TWF0aC5tYXgoby53cmFwcGVyLmNsaWVudEhlaWdodCx0aGlzLmRvYy5oZWlnaHQpLHU9TWF0aC5tYXgoby5zaXplci5jbGllbnRXaWR0aCxvLmxpbmVTcGFjZS5jbGllbnRXaWR0aCk7KCJhYm92ZSI9PW58fHQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PmEpJiZ0LnRvcD5lLm9mZnNldEhlaWdodD9sPXQudG9wLWUub2Zmc2V0SGVpZ2h0OnQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PD1hJiYobD10LmJvdHRvbSkscytlLm9mZnNldFdpZHRoPnUmJihzPXUtZS5vZmZzZXRXaWR0aCl9ZS5zdHlsZS50b3A9bCsicHgiLGUuc3R5bGUubGVmdD1lLnN0eWxlLnJpZ2h0PSIiLCJyaWdodCI9PWk/KHM9by5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoLGUuc3R5bGUucmlnaHQ9IjBweCIpOigibGVmdCI9PWk/cz0wOiJtaWRkbGUiPT1pJiYocz0oby5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoKS8yKSxlLnN0eWxlLmxlZnQ9cysicHgiKSxyJiZhcih0aGlzLHMsbCxzK2Uub2Zmc2V0V2lkdGgsbCtlLm9mZnNldEhlaWdodCl9LHRyaWdnZXJPbktleURvd246bGUobnVsbCxXZSksZXhlY0NvbW1hbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG1vW3RdKHRoaXMpfSxmaW5kUG9zSDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBvPTAsbD1RZSh0aGlzLmRvYyx0KTtlPm8mJihsPXByKHRoaXMuZG9jLGwsaSxyLG4pLCFsLmhpdFNpZGUpOysrbyk7cmV0dXJuIGx9LG1vdmVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyPW4uc2hpZnR8fG4uZXh0ZW5kfHxqZShuLmZyb20sbi50byk/cHIodGhpcy5kb2Msbi5oZWFkLHQsZSx0aGlzLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTowPnQ/bi5mcm9tOm4udG8sZXIodGhpcy5kb2MscixyLHQpfSksZGVsZXRlSDpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsO2plKHIuZnJvbSxyLnRvKT9fZSh0aGlzLmRvYywiIixyLmZyb20scHIodGhpcy5kb2Msci5oZWFkLHQsZSwhMSksIitkZWxldGUiKTpfZSh0aGlzLmRvYywiIixyLmZyb20sci50bywiK2RlbGV0ZSIpLHRoaXMuY3VyT3AudXNlclNlbENoYW5nZT0hMH0pLGZpbmRQb3NWOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTEsbz1uOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBsPTAscz1RZSh0aGlzLmRvYyx0KTtlPmw7KytsKXt2YXIgYT1RKHRoaXMscywiZGl2Iik7aWYobnVsbD09bz9vPWEubGVmdDphLmxlZnQ9byxzPWdyKHRoaXMsYSxpLHIpLHMuaGl0U2lkZSlicmVha31yZXR1cm4gc30sbW92ZVY6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jLnNlbCxuPVEodGhpcyxyLmhlYWQsImRpdiIpO251bGwhPXIuZ29hbENvbHVtbiYmKG4ubGVmdD1yLmdvYWxDb2x1bW4pO3ZhciBpPWdyKHRoaXMsbix0LGUpOyJwYWdlIj09ZSYmZnIodGhpcywwLHEodGhpcyxpLCJkaXYiKS50b3Atbi50b3ApLGVyKHRoaXMuZG9jLGksaSx0KSxyLmdvYWxDb2x1bW49bi5sZWZ0fSksdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpeyhudWxsPT10fHx0IT10aGlzLnN0YXRlLm92ZXJ3cml0ZSkmJigodGhpcy5zdGF0ZS5vdmVyd3JpdGU9IXRoaXMuc3RhdGUub3ZlcndyaXRlKT90aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI6dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWU9dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itb3ZlcndyaXRlIiwiIikpfSxoYXNGb2N1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmZvY3VzZWR9LHNjcm9sbFRvOmxlKG51bGwsZnVuY3Rpb24odCxlKXtjcih0aGlzLHQsZSl9KSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kaXNwbGF5LnNjcm9sbGVyLGU9VG87cmV0dXJue2xlZnQ6dC5zY3JvbGxMZWZ0LHRvcDp0LnNjcm9sbFRvcCxoZWlnaHQ6dC5zY3JvbGxIZWlnaHQtZSx3aWR0aDp0LnNjcm9sbFdpZHRoLWUsY2xpZW50SGVpZ2h0OnQuY2xpZW50SGVpZ2h0LWUsY2xpZW50V2lkdGg6dC5jbGllbnRXaWR0aC1lfX0sc2Nyb2xsSW50b1ZpZXc6bGUobnVsbCxmdW5jdGlvbih0LGUpe251bGw9PXQ/dD17ZnJvbTp0aGlzLmRvYy5zZWwuaGVhZCx0bzpudWxsfToibnVtYmVyIj09dHlwZW9mIHQ/dD17ZnJvbTpZZSh0LDApLHRvOm51bGx9Om51bGw9PXQuZnJvbSYmKHQ9e2Zyb206dCx0bzpudWxsfSksdC50b3x8KHQudG89dC5mcm9tKSxlfHwoZT0wKTt2YXIgcj10O251bGwhPXQuZnJvbS5saW5lJiYodGhpcy5jdXJPcC5zY3JvbGxUb1Bvcz17ZnJvbTp0LmZyb20sdG86dC50byxtYXJnaW46ZX0scj17ZnJvbTpRKHRoaXMsdC5mcm9tKSx0bzpRKHRoaXMsdC50byl9KTt2YXIgbj11cih0aGlzLE1hdGgubWluKHIuZnJvbS5sZWZ0LHIudG8ubGVmdCksTWF0aC5taW4oci5mcm9tLnRvcCxyLnRvLnRvcCktZSxNYXRoLm1heChyLmZyb20ucmlnaHQsci50by5yaWdodCksTWF0aC5tYXgoci5mcm9tLmJvdHRvbSxyLnRvLmJvdHRvbSkrZSk7Y3IodGhpcyxuLnNjcm9sbExlZnQsbi5zY3JvbGxUb3ApfSksc2V0U2l6ZTpsZShudWxsLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fC9eXGQrJC8udGVzdChTdHJpbmcodCkpP3QrInB4Ijp0fW51bGwhPXQmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aD1yKHQpKSxudWxsIT1lJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0PXIoZSkpLHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dGhpcy5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCksdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMH0pLG9wZXJhdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gYWUodGhpcyx0KX0scmVmcmVzaDpsZShudWxsLGZ1bmN0aW9uKCl7dmFyIHQ9bnVsbD09dGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7Xyh0aGlzKSxjcih0aGlzLHRoaXMuZG9jLnNjcm9sbExlZnQsdGhpcy5kb2Muc2Nyb2xsVG9wKSx1ZSh0aGlzKSx0JiZvKHRoaXMpfSksc3dhcERvYzpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jO3JldHVybiBlLmNtPW51bGwscG4odGhpcyx0KSxfKHRoaXMpLGRlKHRoaXMsITApLGNyKHRoaXMsdC5zY3JvbGxMZWZ0LHQuc2Nyb2xsVG9wKSxVbih0aGlzLCJzd2FwRG9jIix0aGlzLGUpLGV9KSxnZXRJbnB1dEZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dH0sZ2V0V3JhcHBlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXJ9LGdldFNjcm9sbGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXJ9LGdldEd1dHRlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnN9fSxqbih0KTt2YXIgc289dC5vcHRpb25IYW5kbGVycz17fSxhbz10LmRlZmF1bHRzPXt9LHVvPXQuSW5pdD17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ29kZU1pcnJvci5Jbml0In19O3lyKCJ2YWx1ZSIsIiIsZnVuY3Rpb24odCxlKXt0LnNldFZhbHVlKGUpfSwhMCkseXIoIm1vZGUiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRvYy5tb2RlT3B0aW9uPWUscih0KX0sITApLHlyKCJpbmRlbnRVbml0IiwyLHIsITApLHlyKCJpbmRlbnRXaXRoVGFicyIsITEpLHlyKCJzbWFydEluZGVudCIsITApLHlyKCJ0YWJTaXplIiw0LGZ1bmN0aW9uKHQpe3IodCksXyh0KSx1ZSh0KX0sITApLHlyKCJzcGVjaWFsQ2hhcnMiLC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVmZWZmXS9nLGZ1bmN0aW9uKHQsZSl7dC5vcHRpb25zLnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKGUuc291cmNlKyhlLnRlc3QoIgkiKT8iIjoifAkiKSwiZyIpLHQucmVmcmVzaCgpfSwhMCkseXIoInNwZWNpYWxDaGFyUGxhY2Vob2xkZXIiLG5uLGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSwhMCkseXIoImVsZWN0cmljQ2hhcnMiLCEwKSx5cigicnRsTW92ZVZpc3VhbGx5IiwhVWkpLHlyKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCEwKSx5cigidGhlbWUiLCJkZWZhdWx0IixmdW5jdGlvbih0KXtzKHQpLGEodCl9LCEwKSx5cigia2V5TWFwIiwiZGVmYXVsdCIsbCkseXIoImV4dHJhS2V5cyIsbnVsbCkseXIoIm9uS2V5RXZlbnQiLG51bGwpLHlyKCJvbkRyYWdFdmVudCIsbnVsbCkseXIoImxpbmVXcmFwcGluZyIsITEsbiwhMCkseXIoImd1dHRlcnMiLFtdLGZ1bmN0aW9uKHQpe2godC5vcHRpb25zKSxhKHQpfSwhMCkseXIoImZpeGVkR3V0dGVyIiwhMCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQ9ZT95KHQuZGlzcGxheSkrInB4IjoiMCIsdC5yZWZyZXNoKCl9LCEwKSx5cigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIiLCExLGQsITApLHlyKCJsaW5lTnVtYmVycyIsITEsZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZmlyc3RMaW5lTnVtYmVyIiwxLGEsITApLHlyKCJsaW5lTnVtYmVyRm9ybWF0dGVyIixmdW5jdGlvbih0KXtyZXR1cm4gdH0sYSwhMCkseXIoInNob3dDdXJzb3JXaGVuU2VsZWN0aW5nIiwhMSxBLCEwKSx5cigicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51IiwhMCkseXIoInJlYWRPbmx5IiwhMSxmdW5jdGlvbih0LGUpeyJub2N1cnNvciI9PWU/KHplKHQpLHQuZGlzcGxheS5pbnB1dC5ibHVyKCksdC5kaXNwbGF5LmRpc2FibGVkPSEwKToodC5kaXNwbGF5LmRpc2FibGVkPSExLGV8fGRlKHQsITApKX0pLHlyKCJkcmFnRHJvcCIsITApLHlyKCJjdXJzb3JCbGlua1JhdGUiLDUzMCkseXIoImN1cnNvclNjcm9sbE1hcmdpbiIsMCkseXIoImN1cnNvckhlaWdodCIsMSkseXIoIndvcmtUaW1lIiwxMDApLHlyKCJ3b3JrRGVsYXkiLDEwMCkseXIoImZsYXR0ZW5TcGFucyIsITApLHlyKCJwb2xsSW50ZXJ2YWwiLDEwMCkseXIoInVuZG9EZXB0aCIsNDAsZnVuY3Rpb24odCxlKXt0LmRvYy5oaXN0b3J5LnVuZG9EZXB0aD1lfSkseXIoImhpc3RvcnlFdmVudERlbGF5Iiw1MDApLHlyKCJ2aWV3cG9ydE1hcmdpbiIsMTAsZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigibWF4SGlnaGxpZ2h0TGVuZ3RoIiwxZTQsZnVuY3Rpb24odCl7cih0KSx0LnJlZnJlc2goKX0sITApLHlyKCJjcnVkZU1lYXN1cmluZ0Zyb20iLDFlNCkseXIoIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCEwLGZ1bmN0aW9uKHQsZSl7ZXx8KHQuZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3A9dC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQ9MCl9KSx5cigidGFiaW5kZXgiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRpc3BsYXkuaW5wdXQudGFiSW5kZXg9ZXx8IiJ9KSx5cigiYXV0b2ZvY3VzIixudWxsKTt2YXIgY289dC5tb2Rlcz17fSxmbz10Lm1pbWVNb2Rlcz17fTt0LmRlZmluZU1vZGU9ZnVuY3Rpb24oZSxyKXtpZih0LmRlZmF1bHRzLm1vZGV8fCJudWxsIj09ZXx8KHQuZGVmYXVsdHMubW9kZT1lKSxhcmd1bWVudHMubGVuZ3RoPjIpe3IuZGVwZW5kZW5jaWVzPVtdO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDsrK24pci5kZXBlbmRlbmNpZXMucHVzaChhcmd1bWVudHNbbl0pfWNvW2VdPXJ9LHQuZGVmaW5lTUlNRT1mdW5jdGlvbih0LGUpe2ZvW3RdPWV9LHQucmVzb2x2ZU1vZGU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiZmby5oYXNPd25Qcm9wZXJ0eShlKSllPWZvW2VdO2Vsc2UgaWYoZSYmInN0cmluZyI9PXR5cGVvZiBlLm5hbWUmJmZvLmhhc093blByb3BlcnR5KGUubmFtZSkpe3ZhciByPWZvW2UubmFtZV07ZT1laShyLGUpLGUubmFtZT1yLm5hbWV9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUmJi9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChlKSlyZXR1cm4gdC5yZXNvbHZlTW9kZSgiYXBwbGljYXRpb24veG1sIik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3tuYW1lOmV9OmV8fHtuYW1lOiJudWxsIn19LHQuZ2V0TW9kZT1mdW5jdGlvbihlLHIpe3ZhciByPXQucmVzb2x2ZU1vZGUociksbj1jb1tyLm5hbWVdO2lmKCFuKXJldHVybiB0LmdldE1vZGUoZSwidGV4dC9wbGFpbiIpO3ZhciBpPW4oZSxyKTtpZihoby5oYXNPd25Qcm9wZXJ0eShyLm5hbWUpKXt2YXIgbz1ob1tyLm5hbWVdO2Zvcih2YXIgbCBpbiBvKW8uaGFzT3duUHJvcGVydHkobCkmJihpLmhhc093blByb3BlcnR5KGwpJiYoaVsiXyIrbF09aVtsXSksaVtsXT1vW2xdKX1yZXR1cm4gaS5uYW1lPXIubmFtZSxpfSx0LmRlZmluZU1vZGUoIm51bGwiLGZ1bmN0aW9uKCl7cmV0dXJue3Rva2VuOmZ1bmN0aW9uKHQpe3Quc2tpcFRvRW5kKCl9fX0pLHQuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsIm51bGwiKTt2YXIgaG89dC5tb2RlRXh0ZW5zaW9ucz17fTt0LmV4dGVuZE1vZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1oby5oYXNPd25Qcm9wZXJ0eSh0KT9ob1t0XTpob1t0XT17fTtyaShlLHIpfSx0LmRlZmluZUV4dGVuc2lvbj1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlW2VdPXJ9LHQuZGVmaW5lRG9jRXh0ZW5zaW9uPWZ1bmN0aW9uKHQsZSl7d28ucHJvdG90eXBlW3RdPWV9LHQuZGVmaW5lT3B0aW9uPXlyO3ZhciBwbz1bXTt0LmRlZmluZUluaXRIb29rPWZ1bmN0aW9uKHQpe3BvLnB1c2godCl9O3ZhciBnbz10LmhlbHBlcnM9e307dC5yZWdpc3RlckhlbHBlcj1mdW5jdGlvbihlLHIsbil7Z28uaGFzT3duUHJvcGVydHkoZSl8fChnb1tlXT10W2VdPXt9KSxnb1tlXVtyXT1ufSx0LmlzV29yZENoYXI9b2ksdC5jb3B5U3RhdGU9YnIsdC5zdGFydFN0YXRlPXhyLHQuaW5uZXJNb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKDt0LmlubmVyTW9kZTspe3ZhciByPXQuaW5uZXJNb2RlKGUpO2lmKCFyfHxyLm1vZGU9PXQpYnJlYWs7ZT1yLnN0YXRlLHQ9ci5tb2RlfXJldHVybiByfHx7bW9kZTp0LHN0YXRlOmV9fTt2YXIgbW89dC5jb21tYW5kcz17c2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3Quc2V0U2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCksWWUodC5sYXN0TGluZSgpKSl9LGtpbGxMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCEwKSxyPXQuZ2V0Q3Vyc29yKCExKSxuPSFqZShlLHIpO258fHQuZ2V0TGluZShlLmxpbmUpLmxlbmd0aCE9ZS5jaD90LnJlcGxhY2VSYW5nZSgiIixlLG4/cjpZZShlLmxpbmUpLCIrZGVsZXRlIik6dC5yZXBsYWNlUmFuZ2UoIiIsZSxZZShlLmxpbmUrMSwwKSwiK2RlbGV0ZSIpfSxkZWxldGVMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkubGluZTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLDApLFllKGUpLCIrZGVsZXRlIil9LGRlbExpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCk7dC5yZXBsYWNlUmFuZ2UoIiIsWWUoZS5saW5lLDApLGUsIitkZWxldGUiKX0sdW5kbzpmdW5jdGlvbih0KXt0LnVuZG8oKX0scmVkbzpmdW5jdGlvbih0KXt0LnJlZG8oKX0sZ29Eb2NTdGFydDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0LmZpcnN0TGluZSgpLDApKX0sZ29Eb2NFbmQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oWWUodC5sYXN0TGluZSgpKSl9LGdvTGluZVN0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKHhpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVN0YXJ0U21hcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXhpKHQsZS5saW5lKSxuPXQuZ2V0TGluZUhhbmRsZShyLmxpbmUpLGk9d24obik7aWYoaSYmMCE9aVswXS5sZXZlbCl0LmV4dGVuZFNlbGVjdGlvbihyKTtlbHNle3ZhciBvPU1hdGgubWF4KDAsbi50ZXh0LnNlYXJjaCgvXFMvKSksbD1lLmxpbmU9PXIubGluZSYmZS5jaDw9byYmZS5jaDt0LmV4dGVuZFNlbGVjdGlvbihZZShyLmxpbmUsbD8wOm8pKX19LGdvTGluZUVuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihDaSh0LHQuZ2V0Q3Vyc29yKCkubGluZSkpfSxnb0xpbmVSaWdodDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OnQuZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoKzEwMCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lTGVmdDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OjAsdG9wOmV9LCJkaXYiKSl9LGdvTGluZVVwOmZ1bmN0aW9uKHQpe3QubW92ZVYoLTEsImxpbmUiKX0sZ29MaW5lRG93bjpmdW5jdGlvbih0KXt0Lm1vdmVWKDEsImxpbmUiKX0sZ29QYWdlVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwicGFnZSIpfSxnb1BhZ2VEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwicGFnZSIpfSxnb0NoYXJMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNoYXIiKX0sZ29DaGFyUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJjaGFyIil9LGdvQ29sdW1uTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJjb2x1bW4iKX0sZ29Db2x1bW5SaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNvbHVtbiIpfSxnb1dvcmRMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsIndvcmQiKX0sZ29Hcm91cFJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiZ3JvdXAiKX0sZ29Hcm91cExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiZ3JvdXAiKX0sZ29Xb3JkUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJ3b3JkIil9LGRlbENoYXJCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJjaGFyIil9LGRlbENoYXJBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwiY2hhciIpfSxkZWxXb3JkQmVmb3JlOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgtMSwid29yZCIpfSxkZWxXb3JkQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsIndvcmQiKX0sZGVsR3JvdXBCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJncm91cCIpfSxkZWxHcm91cEFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJncm91cCIpfSxpbmRlbnRBdXRvOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpfSxpbmRlbnRNb3JlOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKX0saW5kZW50TGVzczpmdW5jdGlvbih0KXt0LmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKX0saW5zZXJ0VGFiOmZ1bmN0aW9uKHQpe3QucmVwbGFjZVNlbGVjdGlvbigiCSIsImVuZCIsIitpbnB1dCIpfSxkZWZhdWx0VGFiOmZ1bmN0aW9uKHQpe3Quc29tZXRoaW5nU2VsZWN0ZWQoKT90LmluZGVudFNlbGVjdGlvbigiYWRkIik6dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LHRyYW5zcG9zZUNoYXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkscj10LmdldExpbmUoZS5saW5lKTtlLmNoPjAmJmUuY2g8ci5sZW5ndGgtMSYmdC5yZXBsYWNlUmFuZ2Uoci5jaGFyQXQoZS5jaCkrci5jaGFyQXQoZS5jaC0xKSxZZShlLmxpbmUsZS5jaC0xKSxZZShlLmxpbmUsZS5jaCsxKSl9LG5ld2xpbmVBbmRJbmRlbnQ6ZnVuY3Rpb24odCl7bGUodCxmdW5jdGlvbigpe3QucmVwbGFjZVNlbGVjdGlvbigiXG4iLCJlbmQiLCIraW5wdXQiKSx0LmluZGVudExpbmUodC5nZXRDdXJzb3IoKS5saW5lLG51bGwsITApfSkoKX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpe3QudG9nZ2xlT3ZlcndyaXRlKCl9fSx2bz10LmtleU1hcD17fTt2by5iYXNpYz17TGVmdDoiZ29DaGFyTGVmdCIsUmlnaHQ6ImdvQ2hhclJpZ2h0IixVcDoiZ29MaW5lVXAiLERvd246ImdvTGluZURvd24iLEVuZDoiZ29MaW5lRW5kIixIb21lOiJnb0xpbmVTdGFydFNtYXJ0IixQYWdlVXA6ImdvUGFnZVVwIixQYWdlRG93bjoiZ29QYWdlRG93biIsRGVsZXRlOiJkZWxDaGFyQWZ0ZXIiLEJhY2tzcGFjZToiZGVsQ2hhckJlZm9yZSIsIlNoaWZ0LUJhY2tzcGFjZSI6ImRlbENoYXJCZWZvcmUiLFRhYjoiZGVmYXVsdFRhYiIsIlNoaWZ0LVRhYiI6ImluZGVudEF1dG8iLEVudGVyOiJuZXdsaW5lQW5kSW5kZW50IixJbnNlcnQ6InRvZ2dsZU92ZXJ3cml0ZSJ9LHZvLnBjRGVmYXVsdD17IkN0cmwtQSI6InNlbGVjdEFsbCIsIkN0cmwtRCI6ImRlbGV0ZUxpbmUiLCJDdHJsLVoiOiJ1bmRvIiwiU2hpZnQtQ3RybC1aIjoicmVkbyIsIkN0cmwtWSI6InJlZG8iLCJDdHJsLUhvbWUiOiJnb0RvY1N0YXJ0IiwiQWx0LVVwIjoiZ29Eb2NTdGFydCIsIkN0cmwtRW5kIjoiZ29Eb2NFbmQiLCJDdHJsLURvd24iOiJnb0RvY0VuZCIsIkN0cmwtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQ3RybC1SaWdodCI6ImdvR3JvdXBSaWdodCIsIkFsdC1MZWZ0IjoiZ29MaW5lU3RhcnQiLCJBbHQtUmlnaHQiOiJnb0xpbmVFbmQiLCJDdHJsLUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ3RybC1TIjoic2F2ZSIsIkN0cmwtRiI6ImZpbmQiLCJDdHJsLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUN0cmwtRyI6ImZpbmRQcmV2IiwiU2hpZnQtQ3RybC1GIjoicmVwbGFjZSIsIlNoaWZ0LUN0cmwtUiI6InJlcGxhY2VBbGwiLCJDdHJsLVsiOiJpbmRlbnRMZXNzIiwiQ3RybC1dIjoiaW5kZW50TW9yZSIsZmFsbHRocm91Z2g6ImJhc2ljIn0sdm8ubWFjRGVmYXVsdD17IkNtZC1BIjoic2VsZWN0QWxsIiwiQ21kLUQiOiJkZWxldGVMaW5lIiwiQ21kLVoiOiJ1bmRvIiwiU2hpZnQtQ21kLVoiOiJyZWRvIiwiQ21kLVkiOiJyZWRvIiwiQ21kLVVwIjoiZ29Eb2NTdGFydCIsIkNtZC1FbmQiOiJnb0RvY0VuZCIsIkNtZC1Eb3duIjoiZ29Eb2NFbmQiLCJBbHQtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQWx0LVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQ21kLUxlZnQiOiJnb0xpbmVTdGFydCIsIkNtZC1SaWdodCI6ImdvTGluZUVuZCIsIkFsdC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQWZ0ZXIiLCJBbHQtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkNtZC1TIjoic2F2ZSIsIkNtZC1GIjoiZmluZCIsIkNtZC1HIjoiZmluZE5leHQiLCJTaGlmdC1DbWQtRyI6ImZpbmRQcmV2IiwiQ21kLUFsdC1GIjoicmVwbGFjZSIsIlNoaWZ0LUNtZC1BbHQtRiI6InJlcGxhY2VBbGwiLCJDbWQtWyI6ImluZGVudExlc3MiLCJDbWQtXSI6ImluZGVudE1vcmUiLCJDbWQtQmFja3NwYWNlIjoiZGVsTGluZUxlZnQiLGZhbGx0aHJvdWdoOlsiYmFzaWMiLCJlbWFjc3kiXX0sdm9bImRlZmF1bHQiXT1LaT92by5tYWNEZWZhdWx0OnZvLnBjRGVmYXVsdCx2by5lbWFjc3k9eyJDdHJsLUYiOiJnb0NoYXJSaWdodCIsIkN0cmwtQiI6ImdvQ2hhckxlZnQiLCJDdHJsLVAiOiJnb0xpbmVVcCIsIkN0cmwtTiI6ImdvTGluZURvd24iLCJBbHQtRiI6ImdvV29yZFJpZ2h0IiwiQWx0LUIiOiJnb1dvcmRMZWZ0IiwiQ3RybC1BIjoiZ29MaW5lU3RhcnQiLCJDdHJsLUUiOiJnb0xpbmVFbmQiLCJDdHJsLVYiOiJnb1BhZ2VEb3duIiwiU2hpZnQtQ3RybC1WIjoiZ29QYWdlVXAiLCJDdHJsLUQiOiJkZWxDaGFyQWZ0ZXIiLCJDdHJsLUgiOiJkZWxDaGFyQmVmb3JlIiwiQWx0LUQiOiJkZWxXb3JkQWZ0ZXIiLCJBbHQtQmFja3NwYWNlIjoiZGVsV29yZEJlZm9yZSIsIkN0cmwtSyI6ImtpbGxMaW5lIiwiQ3RybC1UIjoidHJhbnNwb3NlQ2hhcnMifSx0Lmxvb2t1cEtleT13cix0LmlzTW9kaWZpZXJLZXk9THIsdC5rZXlOYW1lPWtyLHQuZnJvbVRleHRBcmVhPWZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe2UudmFsdWU9dS5nZXRWYWx1ZSgpfWlmKHJ8fChyPXt9KSxyLnZhbHVlPWUudmFsdWUsIXIudGFiaW5kZXgmJmUudGFiaW5kZXgmJihyLnRhYmluZGV4PWUudGFiaW5kZXgpLCFyLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyJiYoci5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyKSxudWxsPT1yLmF1dG9mb2N1cyl7dmFyIGk9ZG9jdW1lbnQuYm9keTt0cnl7aT1kb2N1bWVudC5hY3RpdmVFbGVtZW50fWNhdGNoKG8pe31yLmF1dG9mb2N1cz1pPT1lfHxudWxsIT1lLmdldEF0dHJpYnV0ZSgiYXV0b2ZvY3VzIikmJmk9PWRvY3VtZW50LmJvZHl9aWYoZS5mb3JtJiYoR24oZS5mb3JtLCJzdWJtaXQiLG4pLCFyLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpKXt2YXIgbD1lLmZvcm0scz1sLnN1Ym1pdDt0cnl7dmFyIGE9bC5zdWJtaXQ9ZnVuY3Rpb24oKXtuKCksbC5zdWJtaXQ9cyxsLnN1Ym1pdCgpLGwuc3VibWl0PWF9fWNhdGNoKG8pe319ZS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgdT10KGZ1bmN0aW9uKHQpe2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlLm5leHRTaWJsaW5nKX0scik7cmV0dXJuIHUuc2F2ZT1uLHUuZ2V0VGV4dEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sdS50b1RleHRBcmVhPWZ1bmN0aW9uKCl7bigpLGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1LmdldFdyYXBwZXJFbGVtZW50KCkpLGUuc3R5bGUuZGlzcGxheT0iIixlLmZvcm0mJihWbihlLmZvcm0sInN1Ym1pdCIsbiksImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9ybS5zdWJtaXQmJihlLmZvcm0uc3VibWl0PXMpKX0sdX0sU3IucHJvdG90eXBlPXtlb2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuc3RyaW5nLmxlbmd0aH0sc29sOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMucG9zfSxwZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyl8fHZvaWQgMH0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGg/dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOnZvaWQgMH0sZWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXZhciByPWU9PXQ7ZWxzZSB2YXIgcj1lJiYodC50ZXN0P3QudGVzdChlKTp0KGUpKTtyZXR1cm4gcj8oKyt0aGlzLnBvcyxlKTp2b2lkIDB9LGVhdFdoaWxlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmVhdCh0KTspO3JldHVybiB0aGlzLnBvcz5lfSxlYXRTcGFjZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBvczsvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTspKyt0aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M+dH0sc2tpcFRvRW5kOmZ1bmN0aW9uKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofSxza2lwVG86ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuaW5kZXhPZih0LHRoaXMucG9zKTtyZXR1cm4gZT4tMT8odGhpcy5wb3M9ZSwhMCk6dm9pZCAwfSxiYWNrVXA6ZnVuY3Rpb24odCl7dGhpcy5wb3MtPXR9LGNvbHVtbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPVpuKHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlfSxpbmRlbnRhdGlvbjpmdW5jdGlvbigpe3JldHVybiBabih0aGlzLnN0cmluZyxudWxsLHRoaXMudGFiU2l6ZSl9LG1hdGNoOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBuPXRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaCh0KTtyZXR1cm4gbiYmbi5pbmRleD4wP251bGw6KG4mJmUhPT0hMSYmKHRoaXMucG9zKz1uWzBdLmxlbmd0aCksbil9dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIHI/dC50b0xvd2VyQ2FzZSgpOnR9LG89dGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLHQubGVuZ3RoKTtyZXR1cm4gaShvKT09aSh0KT8oZSE9PSExJiYodGhpcy5wb3MrPXQubGVuZ3RoKSwhMCk6dm9pZCAwfSxjdXJyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5wb3MpfX0sdC5TdHJpbmdTdHJlYW09U3IsdC5UZXh0TWFya2VyPU1yLGpuKE1yKSxNci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dmFyIHQ9dGhpcy5kb2MuY20sZT10JiYhdC5jdXJPcDtpZihlJiZpZSh0KSxZbih0aGlzLCJjbGVhciIpKXt2YXIgcj10aGlzLmZpbmQoKTtyJiZVbih0aGlzLCJjbGVhciIsci5mcm9tLHIudG8pfWZvcih2YXIgbj1udWxsLGk9bnVsbCxvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBsPXRoaXMubGluZXNbb10scz1OcihsLm1hcmtlZFNwYW5zLHRoaXMpO251bGwhPXMudG8mJihpPWJuKGwpKSxsLm1hcmtlZFNwYW5zPURyKGwubWFya2VkU3BhbnMscyksbnVsbCE9cy5mcm9tP249Ym4obCk6dGhpcy5jb2xsYXBzZWQmJiFWcih0aGlzLmRvYyxsKSYmdCYmeW4obCxyZSh0LmRpc3BsYXkpKX1pZih0JiZ0aGlzLmNvbGxhcHNlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcpZm9yKHZhciBvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBhPUdyKHQuZG9jLHRoaXMubGluZXNbb10pLHU9Yyh0LmRvYyxhKTt1PnQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYodC5kaXNwbGF5Lm1heExpbmU9YSx0LmRpc3BsYXkubWF4TGluZUxlbmd0aD11LHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCl9bnVsbCE9biYmdCYmdWUodCxuLGkrMSksdGhpcy5saW5lcy5sZW5ndGg9MCx0aGlzLmV4cGxpY2l0bHlDbGVhcmVkPSEwLHRoaXMuYXRvbWljJiZ0aGlzLmRvYy5jYW50RWRpdCYmKHRoaXMuZG9jLmNhbnRFZGl0PSExLHQmJmlyKHQpKSxlJiZvZSh0KX19LE1yLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscj0wO3I8dGhpcy5saW5lcy5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmxpbmVzW3JdLGk9TnIobi5tYXJrZWRTcGFucyx0aGlzKTtpZihudWxsIT1pLmZyb218fG51bGwhPWkudG8pe3ZhciBvPWJuKG4pO251bGwhPWkuZnJvbSYmKHQ9WWUobyxpLmZyb20pKSxudWxsIT1pLnRvJiYoZT1ZZShvLGkudG8pKX19cmV0dXJuImJvb2ttYXJrIj09dGhpcy50eXBlP3Q6dCYme2Zyb206dCx0bzplfX0sTXIucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZpbmQoKSxlPXRoaXMuZG9jLmNtO2lmKHQmJmUpeyJib29rbWFyayIhPXRoaXMudHlwZSYmKHQ9dC5mcm9tKTt2YXIgcj1nbih0aGlzLmRvYyx0LmxpbmUpO2lmKEcoZSxyKSx0LmxpbmU+PWUuZGlzcGxheS5zaG93aW5nRnJvbSYmdC5saW5lPGUuZGlzcGxheS5zaG93aW5nVG8pe2Zvcih2YXIgbj1lLmRpc3BsYXkubGluZURpdi5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKWlmKG4ubGluZU9iaj09cil7bi5vZmZzZXRIZWlnaHQhPXIuaGVpZ2h0JiZ5bihyLG4ub2Zmc2V0SGVpZ2h0KTsKYnJlYWt9YWUoZSxmdW5jdGlvbigpe2UuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD1lLmN1ck9wLmZvcmNlVXBkYXRlPWUuY3VyT3AudXBkYXRlTWF4TGluZT0hMH0pfX19LE1yLnByb3RvdHlwZS5hdHRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wO2UubWF5YmVIaWRkZW5NYXJrZXJzJiYtMSE9dGkoZS5tYXliZUhpZGRlbk1hcmtlcnMsdGhpcyl8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzfHwoZS5tYXliZVVuaGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcyl9dGhpcy5saW5lcy5wdXNoKHQpfSxNci5wcm90b3R5cGUuZGV0YWNoTGluZT1mdW5jdGlvbih0KXtpZih0aGlzLmxpbmVzLnNwbGljZSh0aSh0aGlzLmxpbmVzLHQpLDEpLCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wOyhlLm1heWJlSGlkZGVuTWFya2Vyc3x8KGUubWF5YmVIaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX19LHQuU2hhcmVkVGV4dE1hcmtlcj1BcixqbihBciksQXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3RoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITA7Zm9yKHZhciB0PTA7dDx0aGlzLm1hcmtlcnMubGVuZ3RoOysrdCl0aGlzLm1hcmtlcnNbdF0uY2xlYXIoKTtVbih0aGlzLCJjbGVhciIpfX0sQXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoKX07dmFyIHlvPXQuTGluZVdpZGdldD1mdW5jdGlvbih0LGUscil7aWYocilmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodGhpc1tuXT1yW25dKTt0aGlzLmNtPXQsdGhpcy5ub2RlPWV9O2puKHlvKSx5by5wcm90b3R5cGUuY2xlYXI9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxpbmUud2lkZ2V0cyxlPWJuKHRoaXMubGluZSk7aWYobnVsbCE9ZSYmdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdFtyXT09dGhpcyYmdC5zcGxpY2Uoci0tLDEpO3QubGVuZ3RofHwodGhpcy5saW5lLndpZGdldHM9bnVsbCk7dmFyIG49Q24odGhpcy5jbSx0aGlzLmxpbmUpPHRoaXMuY20uZG9jLnNjcm9sbFRvcDt5bih0aGlzLmxpbmUsTWF0aC5tYXgoMCx0aGlzLmxpbmUuaGVpZ2h0LVlyKHRoaXMpKSksbiYmZnIodGhpcy5jbSwwLC10aGlzLmhlaWdodCksdWUodGhpcy5jbSxlLGUrMSl9fSkseW8ucHJvdG90eXBlLmNoYW5nZWQ9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhlaWdodDt0aGlzLmhlaWdodD1udWxsO3ZhciBlPVlyKHRoaXMpLXQ7aWYoZSl7eW4odGhpcy5saW5lLHRoaXMubGluZS5oZWlnaHQrZSk7dmFyIHI9Ym4odGhpcy5saW5lKTt1ZSh0aGlzLmNtLHIscisxKX19KTt2YXIgYm89dC5MaW5lPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCxYcih0aGlzLGUpLHRoaXMuaGVpZ2h0PXI/cih0aGlzKToxfTtqbihibyksYm8ucHJvdG90eXBlLmxpbmVObz1mdW5jdGlvbigpe3JldHVybiBibih0aGlzKX07dmFyIHhvPXt9O2ZuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZXMubGVuZ3RofSxyZW1vdmVJbm5lcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LG49dCtlO24+cjsrK3Ipe3ZhciBpPXRoaXMubGluZXNbcl07dGhpcy5oZWlnaHQtPWkuaGVpZ2h0LFpyKGkpLFVuKGksImRlbGV0ZSIpfXRoaXMubGluZXMuc3BsaWNlKHQsZSl9LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe3Quc3BsaWNlLmFwcGx5KHQsW3QubGVuZ3RoLDBdLmNvbmNhdCh0aGlzLmxpbmVzKSl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmhlaWdodCs9cix0aGlzLmxpbmVzPXRoaXMubGluZXMuc2xpY2UoMCx0KS5jb25jYXQoZSkuY29uY2F0KHRoaXMubGluZXMuc2xpY2UodCkpO2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7aT5uOysrbillW25dLnBhcmVudD10aGlzfSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQrZTtuPnQ7Kyt0KWlmKHIodGhpcy5saW5lc1t0XSkpcmV0dXJuITB9fSxobi5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5zaXplLT1lO2Zvcih2YXIgcj0wO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmNoaWxkcmVuW3JdLGk9bi5jaHVua1NpemUoKTtpZihpPnQpe3ZhciBvPU1hdGgubWluKGUsaS10KSxsPW4uaGVpZ2h0O2lmKG4ucmVtb3ZlSW5uZXIodCxvKSx0aGlzLmhlaWdodC09bC1uLmhlaWdodCxpPT1vJiYodGhpcy5jaGlsZHJlbi5zcGxpY2Uoci0tLDEpLG4ucGFyZW50PW51bGwpLDA9PShlLT1vKSlicmVhazt0PTB9ZWxzZSB0LT1pfWlmKHRoaXMuc2l6ZS1lPDI1KXt2YXIgcz1bXTt0aGlzLmNvbGxhcHNlKHMpLHRoaXMuY2hpbGRyZW49W25ldyBmbihzKV0sdGhpcy5jaGlsZHJlblswXS5wYXJlbnQ9dGhpc319LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7cj5lOysrZSl0aGlzLmNoaWxkcmVuW2VdLmNvbGxhcHNlKHQpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbih0LGUscil7dGhpcy5zaXplKz1lLmxlbmd0aCx0aGlzLmhlaWdodCs9cjtmb3IodmFyIG49MCxpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRoaXMuY2hpbGRyZW5bbl0sbD1vLmNodW5rU2l6ZSgpO2lmKGw+PXQpe2lmKG8uaW5zZXJ0SW5uZXIodCxlLHIpLG8ubGluZXMmJm8ubGluZXMubGVuZ3RoPjUwKXtmb3IoO28ubGluZXMubGVuZ3RoPjUwOyl7dmFyIHM9by5saW5lcy5zcGxpY2Uoby5saW5lcy5sZW5ndGgtMjUsMjUpLGE9bmV3IGZuKHMpO28uaGVpZ2h0LT1hLmhlaWdodCx0aGlzLmNoaWxkcmVuLnNwbGljZShuKzEsMCxhKSxhLnBhcmVudD10aGlzfXRoaXMubWF5YmVTcGlsbCgpfWJyZWFrfXQtPWx9fSxtYXliZVNwaWxsOmZ1bmN0aW9uKCl7aWYoISh0aGlzLmNoaWxkcmVuLmxlbmd0aDw9MTApKXt2YXIgdD10aGlzO2Rve3ZhciBlPXQuY2hpbGRyZW4uc3BsaWNlKHQuY2hpbGRyZW4ubGVuZ3RoLTUsNSkscj1uZXcgaG4oZSk7aWYodC5wYXJlbnQpe3Quc2l6ZS09ci5zaXplLHQuaGVpZ2h0LT1yLmhlaWdodDt2YXIgbj10aSh0LnBhcmVudC5jaGlsZHJlbix0KTt0LnBhcmVudC5jaGlsZHJlbi5zcGxpY2UobisxLDAscil9ZWxzZXt2YXIgaT1uZXcgaG4odC5jaGlsZHJlbik7aS5wYXJlbnQ9dCx0LmNoaWxkcmVuPVtpLHJdLHQ9aX1yLnBhcmVudD10LnBhcmVudH13aGlsZSh0LmNoaWxkcmVuLmxlbmd0aD4xMCk7dC5wYXJlbnQubWF5YmVTcGlsbCgpfX0saXRlck46ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD50KXt2YXIgcz1NYXRoLm1pbihlLGwtdCk7aWYoby5pdGVyTih0LHMscikpcmV0dXJuITA7aWYoMD09KGUtPXMpKWJyZWFrO3Q9MH1lbHNlIHQtPWx9fX07dmFyIENvPTAsd289dC5Eb2M9ZnVuY3Rpb24odCxlLHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHdvKSlyZXR1cm4gbmV3IHdvKHQsZSxyKTtudWxsPT1yJiYocj0wKSxobi5jYWxsKHRoaXMsW25ldyBmbihbbmV3IGJvKCIiLG51bGwpXSldKSx0aGlzLmZpcnN0PXIsdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5jYW50RWRpdD0hMSx0aGlzLmhpc3Rvcnk9TG4oKSx0aGlzLmNsZWFuR2VuZXJhdGlvbj0xLHRoaXMuZnJvbnRpZXI9cjt2YXIgbj1ZZShyLDApO3RoaXMuc2VsPXtmcm9tOm4sdG86bixoZWFkOm4sYW5jaG9yOm4sc2hpZnQ6ITEsZXh0ZW5kOiExLGdvYWxDb2x1bW46bnVsbH0sdGhpcy5pZD0rK0NvLHRoaXMubW9kZU9wdGlvbj1lLCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9em8odCkpLGNuKHRoaXMse2Zyb206bix0bzpuLHRleHQ6dH0sbnVsbCx7aGVhZDpuLGFuY2hvcjpufSl9O3dvLnByb3RvdHlwZT1laShobi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOndvLGl0ZXI6ZnVuY3Rpb24odCxlLHIpe3I/dGhpcy5pdGVyTih0LXRoaXMuZmlyc3QsZS10LHIpOnRoaXMuaXRlck4odGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSx0KX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9ZS5sZW5ndGg7aT5uOysrbilyKz1lW25dLmhlaWdodDt0aGlzLmluc2VydElubmVyKHQtdGhpcy5maXJzdCxlLHIpfSxyZW1vdmU6ZnVuY3Rpb24odCxlKXt0aGlzLnJlbW92ZUlubmVyKHQtdGhpcy5maXJzdCxlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKTtyZXR1cm4gdD09PSExP2U6ZS5qb2luKHR8fCJcbiIpfSxzZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1ZZSh0aGlzLmZpcnN0LDApLHI9dGhpcy5maXJzdCt0aGlzLnNpemUtMTtCZSh0aGlzLHtmcm9tOmUsdG86WWUocixnbih0aGlzLHIpLnRleHQubGVuZ3RoKSx0ZXh0OnpvKHQpLG9yaWdpbjoic2V0VmFsdWUifSx7aGVhZDplLGFuY2hvcjplfSwhMCl9LHJlcGxhY2VSYW5nZTpmdW5jdGlvbih0LGUscixuKXtlPVFlKHRoaXMsZSkscj1yP1FlKHRoaXMscik6ZSxfZSh0aGlzLHQsZSxyLG4pfSxnZXRSYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49bW4odGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSkpO3JldHVybiByPT09ITE/bjpuLmpvaW4ocnx8IlxuIil9LGdldExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMaW5lSGFuZGxlKHQpO3JldHVybiBlJiZlLnRleHR9LHNldExpbmU6ZnVuY3Rpb24odCxlKXt0cih0aGlzLHQpJiZfZSh0aGlzLGUsWWUodCwwKSxRZSh0aGlzLFllKHQpKSl9LHJlbW92ZUxpbmU6ZnVuY3Rpb24odCl7dD9fZSh0aGlzLCIiLFFlKHRoaXMsWWUodC0xKSksUWUodGhpcyxZZSh0KSkpOl9lKHRoaXMsIiIsWWUoMCwwKSxRZSh0aGlzLFllKDEsMCkpKX0sZ2V0TGluZUhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdHIodGhpcyx0KT9nbih0aGlzLHQpOnZvaWQgMH0sZ2V0TGluZU51bWJlcjpmdW5jdGlvbih0KXtyZXR1cm4gYm4odCl9LGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJih0PWduKHRoaXMsdCkpLEdyKHRoaXMsdCl9LGxpbmVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LGZpcnN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0fSxsYXN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0K3RoaXMuc2l6ZS0xfSxjbGlwUG9zOmZ1bmN0aW9uKHQpe3JldHVybiBRZSh0aGlzLHQpfSxnZXRDdXJzb3I6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLnNlbDtyZXR1cm4gZT1udWxsPT10fHwiaGVhZCI9PXQ/ci5oZWFkOiJhbmNob3IiPT10P3IuYW5jaG9yOiJlbmQiPT10fHx0PT09ITE/ci50bzpyLmZyb20sWmUoZSl9LHNvbWV0aGluZ1NlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWplKHRoaXMuc2VsLmhlYWQsdGhpcy5zZWwuYW5jaG9yKX0sc2V0Q3Vyc29yOnNlKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1RZSh0aGlzLCJudW1iZXIiPT10eXBlb2YgdD9ZZSh0LGV8fDApOnQpO3I/ZXIodGhpcyxuKTpucih0aGlzLG4sbil9KSxzZXRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe25yKHRoaXMsUWUodGhpcyx0KSxRZSh0aGlzLGV8fHQpLHIpfSksZXh0ZW5kU2VsZWN0aW9uOnNlKGZ1bmN0aW9uKHQsZSxyKXtlcih0aGlzLFFlKHRoaXMsdCksZSYmUWUodGhpcyxlKSxyKX0pLGdldFNlbGVjdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRSYW5nZSh0aGlzLnNlbC5mcm9tLHRoaXMuc2VsLnRvLHQpfSxyZXBsYWNlU2VsZWN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtCZSh0aGlzLHtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8sdGV4dDp6byh0KSxvcmlnaW46cn0sZXx8ImFyb3VuZCIpfSx1bmRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywidW5kbyIpfSkscmVkbzpzZShmdW5jdGlvbigpe1ZlKHRoaXMsInJlZG8iKX0pLHNldEV4dGVuZGluZzpmdW5jdGlvbih0KXt0aGlzLnNlbC5leHRlbmQ9dH0saGlzdG9yeVNpemU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhpc3Rvcnk7cmV0dXJue3VuZG86dC5kb25lLmxlbmd0aCxyZWRvOnQudW5kb25lLmxlbmd0aH19LGNsZWFySGlzdG9yeTpmdW5jdGlvbigpe3RoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbil9LG1hcmtDbGVhbjpmdW5jdGlvbigpe3RoaXMuY2xlYW5HZW5lcmF0aW9uPXRoaXMuY2hhbmdlR2VuZXJhdGlvbigpfSxjaGFuZ2VHZW5lcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGlzdG9yeS5sYXN0T3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCx0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbn0saXNDbGVhbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb249PSh0fHx0aGlzLmNsZWFuR2VuZXJhdGlvbil9LGdldEhpc3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpIbih0aGlzLmhpc3RvcnkuZG9uZSksdW5kb25lOkhuKHRoaXMuaGlzdG9yeS51bmRvbmUpfX0sc2V0SGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmhpc3Rvcnk9TG4odGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO2UuZG9uZT10LmRvbmUuc2xpY2UoMCksZS51bmRvbmU9dC51bmRvbmUuc2xpY2UoMCl9LG1hcmtUZXh0OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVHIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSksciwicmFuZ2UiKX0sc2V0Qm9va21hcms6ZnVuY3Rpb24odCxlKXt2YXIgcj17cmVwbGFjZWRXaXRoOmUmJihudWxsPT1lLm5vZGVUeXBlP2Uud2lkZ2V0OmUpLGluc2VydExlZnQ6ZSYmZS5pbnNlcnRMZWZ0fTtyZXR1cm4gdD1RZSh0aGlzLHQpLFRyKHRoaXMsdCx0LHIsImJvb2ttYXJrIil9LGZpbmRNYXJrc0F0OmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT1bXSxyPWduKHRoaXMsdC5saW5lKS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dOyhudWxsPT1pLmZyb218fGkuZnJvbTw9dC5jaCkmJihudWxsPT1pLnRvfHxpLnRvPj10LmNoKSYmZS5wdXNoKGkubWFya2VyLnBhcmVudHx8aS5tYXJrZXIpfXJldHVybiBlfSxnZXRBbGxNYXJrczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLml0ZXIoZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKW51bGwhPXJbbl0uZnJvbSYmdC5wdXNoKHJbbl0ubWFya2VyKX0pLHR9LHBvc0Zyb21JbmRleDpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihuKXt2YXIgaT1uLnRleHQubGVuZ3RoKzE7cmV0dXJuIGk+dD8oZT10LCEwKToodC09aSwrK3Isdm9pZCAwKX0pLFFlKHRoaXMsWWUocixlKSl9LGluZGV4RnJvbVBvczpmdW5jdGlvbih0KXt0PVFlKHRoaXMsdCk7dmFyIGU9dC5jaDtyZXR1cm4gdC5saW5lPHRoaXMuZmlyc3R8fHQuY2g8MD8wOih0aGlzLml0ZXIodGhpcy5maXJzdCx0LmxpbmUsZnVuY3Rpb24odCl7ZSs9dC50ZXh0Lmxlbmd0aCsxfSksZSl9LGNvcHk6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHdvKHZuKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSksdGhpcy5tb2RlT3B0aW9uLHRoaXMuZmlyc3QpO3JldHVybiBlLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCxlLnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0LGUuc2VsPXtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8saGVhZDp0aGlzLnNlbC5oZWFkLGFuY2hvcjp0aGlzLnNlbC5hbmNob3Isc2hpZnQ6dGhpcy5zZWwuc2hpZnQsZXh0ZW5kOiExLGdvYWxDb2x1bW46dGhpcy5zZWwuZ29hbENvbHVtbn0sdCYmKGUuaGlzdG9yeS51bmRvRGVwdGg9dGhpcy5oaXN0b3J5LnVuZG9EZXB0aCxlLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpKSxlfSxsaW5rZWREb2M6ZnVuY3Rpb24odCl7dHx8KHQ9e30pO3ZhciBlPXRoaXMuZmlyc3Qscj10aGlzLmZpcnN0K3RoaXMuc2l6ZTtudWxsIT10LmZyb20mJnQuZnJvbT5lJiYoZT10LmZyb20pLG51bGwhPXQudG8mJnQudG88ciYmKHI9dC50byk7dmFyIG49bmV3IHdvKHZuKHRoaXMsZSxyKSx0Lm1vZGV8fHRoaXMubW9kZU9wdGlvbixlKTtyZXR1cm4gdC5zaGFyZWRIaXN0JiYobi5oaXN0b3J5PXRoaXMuaGlzdG9yeSksKHRoaXMubGlua2VkfHwodGhpcy5saW5rZWQ9W10pKS5wdXNoKHtkb2M6bixzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH0pLG4ubGlua2VkPVt7ZG9jOnRoaXMsaXNQYXJlbnQ6ITAsc2hhcmVkSGlzdDp0LnNoYXJlZEhpc3R9XSxufSx1bmxpbmtEb2M6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQmJihlPWUuZG9jKSx0aGlzLmxpbmtlZClmb3IodmFyIHI9MDtyPHRoaXMubGlua2VkLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGlua2VkW3JdO2lmKG4uZG9jPT1lKXt0aGlzLmxpbmtlZC5zcGxpY2UociwxKSxlLnVubGlua0RvYyh0aGlzKTticmVha319aWYoZS5oaXN0b3J5PT10aGlzLmhpc3Rvcnkpe3ZhciBpPVtlLmlkXTtkbihlLGZ1bmN0aW9uKHQpe2kucHVzaCh0LmlkKX0sITApLGUuaGlzdG9yeT1MbigpLGUuaGlzdG9yeS5kb25lPUhuKHRoaXMuaGlzdG9yeS5kb25lLGkpLGUuaGlzdG9yeS51bmRvbmU9SG4odGhpcy5oaXN0b3J5LnVuZG9uZSxpKX19LGl0ZXJMaW5rZWREb2NzOmZ1bmN0aW9uKHQpe2RuKHRoaXMsdCl9LGdldE1vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxnZXRFZGl0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbX19KSx3by5wcm90b3R5cGUuZWFjaExpbmU9d28ucHJvdG90eXBlLml0ZXI7dmFyIExvPSJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IiLnNwbGl0KCIgIik7Zm9yKHZhciBrbyBpbiB3by5wcm90b3R5cGUpd28ucHJvdG90eXBlLmhhc093blByb3BlcnR5KGtvKSYmdGkoTG8sa28pPDAmJih0LnByb3RvdHlwZVtrb109ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcy5kb2MsYXJndW1lbnRzKX19KHdvLnByb3RvdHlwZVtrb10pKTtqbih3byksdC5lX3N0b3A9UG4sdC5lX3ByZXZlbnREZWZhdWx0PXpuLHQuZV9zdG9wUHJvcGFnYXRpb249SW47dmFyIFNvLE1vPTA7dC5vbj1Hbix0Lm9mZj1Wbix0LnNpZ25hbD1Lbjt2YXIgVG89MzAsQW89dC5QYXNzPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLlBhc3MifX07JG4ucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodGhpcy5pZCksdGhpcy5pZD1zZXRUaW1lb3V0KGUsdCl9fSx0LmNvdW50Q29sdW1uPVpuO3ZhciBIbz1bIiJdLE5vPS9bXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLyxEbz0vW1x1MDMwMC1cdTAzNkZcdTA0ODMtXHUwNDg3XHUwNDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0LVx1MDVDNVx1MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEItXHUwNjVGXHUwNjcwXHUwNkQ2LVx1MDZEQ1x1MDZERi1cdTA2RTRcdTA2RTctXHUwNkU4XHUwNkVBLVx1MDZFRFx1QTY2Rlx1MURDMOKAk1x1MURGRlx1MjBEMOKAk1x1MjBGRlx1QTY3MC1cdUE2NzJcdUE2NzQtXHVBNjdEXHVBNjlGXHVkYzAwLVx1ZGZmZlx1RkUyMOKAk1x1RkUyRl0vO3QucmVwbGFjZUdldFJlY3Q9ZnVuY3Rpb24odCl7Zmk9dH07dmFyIFdvPWZ1bmN0aW9uKCl7aWYoTmkpcmV0dXJuITE7dmFyIHQ9c2koImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gdHx8ImRyYWdEcm9wImluIHR9KCk7VGk/aGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzY9PXQuY2hhckNvZGVBdChlLTEpJiYzOT09dC5jaGFyQ29kZUF0KGUpfTpJaSYmIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3JldHVybi9cLVteIFwtP118XD9bXiAhXCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfTpXaSYmL0Nocm9tZVwvKD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk/aGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZS0xKTtyZXR1cm4gcj49ODIwOCYmODIxMj49cn06V2kmJihoaT1mdW5jdGlvbih0LGUpe2lmKGU+MSYmNDU9PXQuY2hhckNvZGVBdChlLTEpKXtpZigvXHcvLnRlc3QodC5jaGFyQXQoZS0yKSkmJi9bXlwtP1wuXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITA7aWYoZT4yJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1tcZFwuLF0vLnRlc3QodC5jaGFyQXQoZSkpKXJldHVybiExfXJldHVybi9bfiEjJSYqKT0rfVxdXFx8XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZbXHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfSk7dmFyIE9vLEVvLHpvPTMhPSJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9W10sbj10Lmxlbmd0aDtuPj1lOyl7dmFyIGk9dC5pbmRleE9mKCJcbiIsZSk7LTE9PWkmJihpPXQubGVuZ3RoKTt2YXIgbz10LnNsaWNlKGUsIlxyIj09dC5jaGFyQXQoaS0xKT9pLTE6aSksbD1vLmluZGV4T2YoIlxyIik7LTEhPWw/KHIucHVzaChvLnNsaWNlKDAsbCkpLGUrPWwrMSk6KHIucHVzaChvKSxlPWkrMSl9cmV0dXJuIHJ9OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KC9cclxuP3xcbi8pfTt0LnNwbGl0TGluZXM9em87dmFyIElvPXdpbmRvdy5nZXRTZWxlY3Rpb24/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LnNlbGVjdGlvblN0YXJ0IT10LnNlbGVjdGlvbkVuZH1jYXRjaChlKXtyZXR1cm4hMX19OmZ1bmN0aW9uKHQpe3RyeXt2YXIgZT10Lm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCl9Y2F0Y2gocil7fXJldHVybiBlJiZlLnBhcmVudEVsZW1lbnQoKT09dD8wIT1lLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLGUpOiExfSxGbz1mdW5jdGlvbigpe3ZhciB0PXNpKCJkaXYiKTtyZXR1cm4ib25jb3B5ImluIHQ/ITA6KHQuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCJyZXR1cm47IiksImZ1bmN0aW9uIj09dHlwZW9mIHQub25jb3B5KX0oKSxQbz17MzoiRW50ZXIiLDg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkN0cmwiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjIiwzMjoiU3BhY2UiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJMZWZ0IiwzODoiVXAiLDM5OiJSaWdodCIsNDA6IkRvd24iLDQ0OiJQcmludFNjcm4iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDU5OiI7Iiw5MToiTW9kIiw5MjoiTW9kIiw5MzoiTW9kIiwxMDk6Ii0iLDEwNzoiPSIsMTI3OiJEZWxldGUiLDE4NjoiOyIsMTg3OiI9IiwxODg6IiwiLDE4OToiLSIsMTkwOiIuIiwxOTE6Ii8iLDE5MjoiYCIsMjE5OiJbIiwyMjA6IlxcIiwyMjE6Il0iLDIyMjoiJyIsNjMyNzY6IlBhZ2VVcCIsNjMyNzc6IlBhZ2VEb3duIiw2MzI3NToiRW5kIiw2MzI3MzoiSG9tZSIsNjMyMzQ6IkxlZnQiLDYzMjMyOiJVcCIsNjMyMzU6IlJpZ2h0Iiw2MzIzMzoiRG93biIsNjMzMDI6Ikluc2VydCIsNjMyNzI6IkRlbGV0ZSJ9O3Qua2V5TmFtZXM9UG8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDsxMD50O3QrKylQb1t0KzQ4XT1TdHJpbmcodCk7Zm9yKHZhciB0PTY1OzkwPj10O3QrKylQb1t0XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2Zvcih2YXIgdD0xOzEyPj10O3QrKylQb1t0KzExMV09UG9bdCs2MzIzNV09IkYiK3R9KCk7dmFyIFJvLEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gMjU1Pj10P2UuY2hhckF0KHQpOnQ+PTE0MjQmJjE1MjQ+PXQ/IlIiOnQ+PTE1MzYmJjE3OTE+PXQ/ci5jaGFyQXQodC0xNTM2KTp0Pj0xNzkyJiYyMjIwPj10PyJyIjoiTCJ9dmFyIGU9ImJiYmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJzc3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTEwiLHI9InJycnJycnJycnJycixyTk5tbW1tbW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tcnJycnJycm5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbW1tbW1tTm1tbW1ycnJycnJycnJycnJycnJycnIiLG49L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLyxpPS9bc3R3Tl0vLG89L1tMUnJdLyxsPS9bTGIxbl0vLHM9L1sxbl0vLGE9IkwiO3JldHVybiBmdW5jdGlvbihlKXtpZighbi50ZXN0KGUpKXJldHVybiExO2Zvcih2YXIgcix1PWUubGVuZ3RoLGM9W10sZj0wO3U+ZjsrK2YpYy5wdXNoKHI9dChlLmNoYXJDb2RlQXQoZikpKTtmb3IodmFyIGY9MCxoPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsibSI9PXI/Y1tmXT1oOmg9cn1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiMSI9PXImJiJyIj09ZD9jW2ZdPSJuIjpvLnRlc3QocikmJihkPXIsInIiPT1yJiYoY1tmXT0iUiIpKX1mb3IodmFyIGY9MSxoPWNbMF07dS0xPmY7KytmKXt2YXIgcj1jW2ZdOyIrIj09ciYmIjEiPT1oJiYiMSI9PWNbZisxXT9jW2ZdPSIxIjoiLCIhPXJ8fGghPWNbZisxXXx8IjEiIT1oJiYibiIhPWh8fChjW2ZdPWgpLGg9cn1mb3IodmFyIGY9MDt1PmY7KytmKXt2YXIgcj1jW2ZdO2lmKCIsIj09ciljW2ZdPSJOIjtlbHNlIGlmKCIlIj09cil7Zm9yKHZhciBwPWYrMTt1PnAmJiIlIj09Y1twXTsrK3ApO2Zvcih2YXIgZz1mJiYiISI9PWNbZi0xXXx8dS0xPnAmJiIxIj09Y1twXT8iMSI6Ik4iLG09ZjtwPm07KyttKWNbbV09ZztmPXAtMX19Zm9yKHZhciBmPTAsZD1hO3U+ZjsrK2Ype3ZhciByPWNbZl07IkwiPT1kJiYiMSI9PXI/Y1tmXT0iTCI6by50ZXN0KHIpJiYoZD1yKX1mb3IodmFyIGY9MDt1PmY7KytmKWlmKGkudGVzdChjW2ZdKSl7Zm9yKHZhciBwPWYrMTt1PnAmJmkudGVzdChjW3BdKTsrK3ApO2Zvcih2YXIgdj0iTCI9PShmP2NbZi0xXTphKSx5PSJMIj09KHUtMT5wP2NbcF06YSksZz12fHx5PyJMIjoiUiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfWZvcih2YXIgYix4PVtdLGY9MDt1PmY7KWlmKGwudGVzdChjW2ZdKSl7dmFyIEM9Zjtmb3IoKytmO3U+ZiYmbC50ZXN0KGNbZl0pOysrZik7eC5wdXNoKHtmcm9tOkMsdG86ZixsZXZlbDowfSl9ZWxzZXt2YXIgdz1mLEw9eC5sZW5ndGg7Zm9yKCsrZjt1PmYmJiJMIiE9Y1tmXTsrK2YpO2Zvcih2YXIgbT13O2Y+bTspaWYocy50ZXN0KGNbbV0pKXttPncmJnguc3BsaWNlKEwsMCx7ZnJvbTp3LHRvOm0sbGV2ZWw6MX0pO3ZhciBrPW07Zm9yKCsrbTtmPm0mJnMudGVzdChjW21dKTsrK20pO3guc3BsaWNlKEwsMCx7ZnJvbTprLHRvOm0sbGV2ZWw6Mn0pLHc9bX1lbHNlKyttO2Y+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86ZixsZXZlbDoxfSl9cmV0dXJuIDE9PXhbMF0ubGV2ZWwmJihiPWUubWF0Y2goL15ccysvKSkmJih4WzBdLmZyb209YlswXS5sZW5ndGgseC51bnNoaWZ0KHtmcm9tOjAsdG86YlswXS5sZW5ndGgsbGV2ZWw6MH0pKSwxPT1Rbih4KS5sZXZlbCYmKGI9ZS5tYXRjaCgvXHMrJC8pKSYmKFFuKHgpLnRvLT1iWzBdLmxlbmd0aCx4LnB1c2goe2Zyb206dS1iWzBdLmxlbmd0aCx0bzp1LGxldmVsOjB9KSkseFswXS5sZXZlbCE9UW4oeCkubGV2ZWwmJngucHVzaCh7ZnJvbTp1LHRvOnUsbGV2ZWw6eFswXS5sZXZlbH0pLHh9fSgpO3JldHVybiB0LnZlcnNpb249IjMuMjAuMCIsdH0oKTtQSwcIxlyRsL+vAQC/rwEAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAc3RhdGljXGxpYlxoaWdobGlnaHQubWluLmpzdmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChvKXtyZXR1cm4gby5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gYihwKXtmb3IodmFyIG89cC5maXJzdENoaWxkO287bz1vLm5leHRTaWJsaW5nKXtpZihvLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJDT0RFIil7cmV0dXJuIG99aWYoIShvLm5vZGVUeXBlPT0zJiZvLm5vZGVWYWx1ZS5tYXRjaCgvXHMrLykpKXticmVha319fWZ1bmN0aW9uIGgocCxvKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHAuY2hpbGROb2RlcyxmdW5jdGlvbihxKXtpZihxLm5vZGVUeXBlPT0zKXtyZXR1cm4gbz9xLm5vZGVWYWx1ZS5yZXBsYWNlKC9cbi9nLCIiKTpxLm5vZGVWYWx1ZX1pZihxLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJCUiIpe3JldHVybiJcbiJ9cmV0dXJuIGgocSxvKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIGEocSl7dmFyIHA9KHEuY2xhc3NOYW1lKyIgIisocS5wYXJlbnROb2RlP3EucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIpKS5zcGxpdCgvXHMrLyk7cD1wLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIil9KTtmb3IodmFyIG89MDtvPHAubGVuZ3RoO28rKyl7aWYoZVtwW29dXXx8cFtvXT09Im5vLWhpZ2hsaWdodCIpe3JldHVybiBwW29dfX19ZnVuY3Rpb24gYyhxKXt2YXIgbz1bXTsoZnVuY3Rpb24gcChyLHMpe2Zvcih2YXIgdD1yLmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpe2lmKHQubm9kZVR5cGU9PTMpe3MrPXQubm9kZVZhbHVlLmxlbmd0aH1lbHNle2lmKHQubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cys9MX1lbHNle2lmKHQubm9kZVR5cGU9PTEpe28ucHVzaCh7ZXZlbnQ6InN0YXJ0IixvZmZzZXQ6cyxub2RlOnR9KTtzPXAodCxzKTtvLnB1c2goe2V2ZW50OiJzdG9wIixvZmZzZXQ6cyxub2RlOnR9KX19fX1yZXR1cm4gc30pKHEsMCk7cmV0dXJuIG99ZnVuY3Rpb24gaihwLHIsdil7dmFyIHE9MDt2YXIgeT0iIjt2YXIgcz1bXTtmdW5jdGlvbiB1KCl7aWYoIXAubGVuZ3RofHwhci5sZW5ndGgpe3JldHVybiBwLmxlbmd0aD9wOnJ9aWYocFswXS5vZmZzZXQhPXJbMF0ub2Zmc2V0KXtyZXR1cm4ocFswXS5vZmZzZXQ8clswXS5vZmZzZXQpP3A6cn1yZXR1cm4gclswXS5ldmVudD09InN0YXJ0Ij9wOnJ9ZnVuY3Rpb24gdChBKXtmdW5jdGlvbiB6KEIpe3JldHVybiIgIitCLm5vZGVOYW1lKyc9IicrbChCLnZhbHVlKSsnIid9eSs9IjwiK0Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKStBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoQS5hdHRyaWJ1dGVzLHopLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB4KHope3krPSI8LyIrei5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKyI+In1mdW5jdGlvbiBvKHopeyh6LmV2ZW50PT0ic3RhcnQiP3Q6eCkoei5ub2RlKX13aGlsZShwLmxlbmd0aHx8ci5sZW5ndGgpe3ZhciB3PXUoKTt5Kz1sKHYuc3Vic3RyKHEsd1swXS5vZmZzZXQtcSkpO3E9d1swXS5vZmZzZXQ7aWYodz09cCl7cy5yZXZlcnNlKCkuZm9yRWFjaCh4KTtkb3tvKHcuc3BsaWNlKDAsMSlbMF0pO3c9dSgpfXdoaWxlKHc9PXAmJncubGVuZ3RoJiZ3WzBdLm9mZnNldD09cSk7cy5yZXZlcnNlKCkuZm9yRWFjaCh0KX1lbHNle2lmKHdbMF0uZXZlbnQ9PSJzdGFydCIpe3MucHVzaCh3WzBdLm5vZGUpfWVsc2V7cy5wb3AoKX1vKHcuc3BsaWNlKDAsMSlbMF0pfX1yZXR1cm4geStsKHYuc3Vic3RyKHEpKX1mdW5jdGlvbiBmKHIpe2Z1bmN0aW9uIG8ocyl7cmV0dXJuKHMmJnMuc291cmNlKXx8c31mdW5jdGlvbiBwKHQscyl7cmV0dXJuIFJlZ0V4cChvKHQpLCJtIisoci5jST8iaSI6IiIpKyhzPyJnIjoiIikpfWZ1bmN0aW9uIHEoeix4KXtpZih6LmNvbXBpbGVkKXtyZXR1cm59ei5jb21waWxlZD10cnVlO3ZhciB1PVtdO2lmKHouayl7dmFyIHM9e307ZnVuY3Rpb24gQShCLHQpe2lmKHIuY0kpe3Q9dC50b0xvd2VyQ2FzZSgpfXQuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBEPUMuc3BsaXQoInwiKTtzW0RbMF1dPVtCLERbMV0/TnVtYmVyKERbMV0pOjFdO3UucHVzaChEWzBdKX0pfXoubFI9cCh6Lmx8fCJcXGIiK2hsanMuSVIrIlxcYig/IVxcLikiLHRydWUpO2lmKHR5cGVvZiB6Lms9PSJzdHJpbmciKXtBKCJrZXl3b3JkIix6LmspfWVsc2V7Zm9yKHZhciB5IGluIHouayl7aWYoIXouay5oYXNPd25Qcm9wZXJ0eSh5KSl7Y29udGludWV9QSh5LHoua1t5XSl9fXouaz1zfWlmKHgpe2lmKHouYldLKXt6LmI9IlxcYigiK3Uuam9pbigifCIpKyIpXFxiKD8hXFwuKVxccyoifXouYlI9cCh6LmI/ei5iOiJcXEJ8XFxiIik7aWYoIXouZSYmIXouZVcpe3ouZT0iXFxCfFxcYiJ9aWYoei5lKXt6LmVSPXAoei5lKX16LnRFPW8oei5lKXx8IiI7aWYoei5lVyYmeC50RSl7ei50RSs9KHouZT8ifCI6IiIpK3gudEV9fWlmKHouaSl7ei5pUj1wKHouaSl9aWYoei5yPT09dW5kZWZpbmVkKXt6LnI9MX1pZighei5jKXt6LmM9W119Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7aWYoei5jW3ddPT0ic2VsZiIpe3ouY1t3XT16fXEoei5jW3ddLHopfWlmKHouc3RhcnRzKXtxKHouc3RhcnRzLHgpfXZhciB2PVtdO2Zvcih2YXIgdz0wO3c8ei5jLmxlbmd0aDt3Kyspe3YucHVzaChvKHouY1t3XS5iKSl9aWYoei50RSl7di5wdXNoKG8oei50RSkpfWlmKHouaSl7di5wdXNoKG8oei5pKSl9ei50PXYubGVuZ3RoP3Aodi5qb2luKCJ8IiksdHJ1ZSk6e2V4ZWM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9fX1xKHIpfWZ1bmN0aW9uIGQoRSxHLEMsTSl7ZnVuY3Rpb24gbyhyLFApe2Zvcih2YXIgTz0wO088UC5jLmxlbmd0aDtPKyspe3ZhciBOPVAuY1tPXS5iUi5leGVjKHIpO2lmKE4mJk4uaW5kZXg9PTApe3JldHVybiBQLmNbT119fX1mdW5jdGlvbiBzKE4scil7aWYoTi5lJiZOLmVSLnRlc3Qocikpe3JldHVybiBOfWlmKE4uZVcpe3JldHVybiBzKE4ucGFyZW50LHIpfX1mdW5jdGlvbiB0KHIsTil7cmV0dXJuICFDJiZOLmkmJk4uaVIudGVzdChyKX1mdW5jdGlvbiB5KE8scil7dmFyIE49SC5jST9yWzBdLnRvTG93ZXJDYXNlKCk6clswXTtyZXR1cm4gTy5rLmhhc093blByb3BlcnR5KE4pJiZPLmtbTl19ZnVuY3Rpb24gSSgpe3ZhciBOPWwodyk7aWYoIUIuayl7cmV0dXJuIE59dmFyIHI9IiI7dmFyIFE9MDtCLmxSLmxhc3RJbmRleD0wO3ZhciBPPUIubFIuZXhlYyhOKTt3aGlsZShPKXtyKz1OLnN1YnN0cihRLE8uaW5kZXgtUSk7dmFyIFA9eShCLE8pO2lmKFApe3YrPVBbMV07cis9JzxzcGFuIGNsYXNzPSInK1BbMF0rJyI+JytPWzBdKyI8L3NwYW4+In1lbHNle3IrPU9bMF19UT1CLmxSLmxhc3RJbmRleDtPPUIubFIuZXhlYyhOKX1yZXR1cm4gcitOLnN1YnN0cihRKX1mdW5jdGlvbiB6KCl7aWYoQi5zTCYmIWVbQi5zTF0pe3JldHVybiBsKHcpfXZhciBOPUIuc3ViTGFuZ3VhZ2VNb2RlPT0iY29udGludW91cyI/Qi50b3A6dW5kZWZpbmVkO3ZhciByPUIuc0w/ZChCLnNMLHcsdHJ1ZSxOKTpnKHcpO2lmKEIucj4wKXt2Kz1yLmtleXdvcmRfY291bnQ7QSs9ci5yfUIudG9wPXIudG9wO3JldHVybic8c3BhbiBjbGFzcz0iJytyLmxhbmd1YWdlKyciPicrci52YWx1ZSsiPC9zcGFuPiJ9ZnVuY3Rpb24gTCgpe3JldHVybiBCLnNMIT09dW5kZWZpbmVkP3ooKTpJKCl9ZnVuY3Rpb24gSyhPLHIpe3ZhciBOPU8uY04/JzxzcGFuIGNsYXNzPSInK08uY04rJyI+JzoiIjtpZihPLnJCKXt4Kz1OO3c9IiJ9ZWxzZXtpZihPLmVCKXt4Kz1sKHIpK047dz0iIn1lbHNle3grPU47dz1yfX1CPU9iamVjdC5jcmVhdGUoTyx7cGFyZW50Ont2YWx1ZTpCfX0pfWZ1bmN0aW9uIEQoTixyKXt3Kz1OO2lmKHI9PT11bmRlZmluZWQpe3grPUwoKTtyZXR1cm4gMH12YXIgUD1vKHIsQik7aWYoUCl7eCs9TCgpO0soUCxyKTtyZXR1cm4gUC5yQj8wOnIubGVuZ3RofXZhciBRPXMoQixyKTtpZihRKXt2YXIgTz1CO2lmKCEoTy5yRXx8Ty5lRSkpe3crPXJ9eCs9TCgpO2Rve2lmKEIuY04pe3grPSI8L3NwYW4+In1BKz1CLnI7Qj1CLnBhcmVudH13aGlsZShCIT1RLnBhcmVudCk7aWYoTy5lRSl7eCs9bChyKX13PSIiO2lmKFEuc3RhcnRzKXtLKFEuc3RhcnRzLCIiKX1yZXR1cm4gTy5yRT8wOnIubGVuZ3RofWlmKHQocixCKSl7dGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtICInK3IrJyIgZm9yIG1vZGUgIicrKEIuY058fCI8dW5uYW1lZD4iKSsnIicpfXcrPXI7cmV0dXJuIHIubGVuZ3RofHwxfXZhciBIPWVbRV07aWYoIUgpe3Rocm93IG5ldyBFcnJvcignVW5rbm93biBsYW5ndWFnZTogIicrRSsnIicpfWYoSCk7dmFyIEI9TXx8SDt2YXIgeD0iIjtmb3IodmFyIEY9QjtGIT1IO0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3g9JzxzcGFuIGNsYXNzPSInK0YuY04rJyI+Jyt4fX12YXIgdz0iIjt2YXIgQT0wO3ZhciB2PTA7dHJ5e3ZhciB1LHEscD0wO3doaWxlKHRydWUpe0IudC5sYXN0SW5kZXg9cDt1PUIudC5leGVjKEcpO2lmKCF1KXticmVha31xPUQoRy5zdWJzdHIocCx1LmluZGV4LXApLHVbMF0pO3A9dS5pbmRleCtxfUQoRy5zdWJzdHIocCkpO2Zvcih2YXIgRj1CO0YucGFyZW50O0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3grPSI8L3NwYW4+In19cmV0dXJue3I6QSxrZXl3b3JkX2NvdW50OnYsdmFsdWU6eCxsYW5ndWFnZTpFLHRvcDpCfX1jYXRjaChKKXtpZihKLm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpIT0tMSl7cmV0dXJue3I6MCxrZXl3b3JkX2NvdW50OjAsdmFsdWU6bChHKX19ZWxzZXt0aHJvdyBKfX19ZnVuY3Rpb24gZyhzKXt2YXIgbz17a2V5d29yZF9jb3VudDowLHI6MCx2YWx1ZTpsKHMpfTt2YXIgcT1vO2Zvcih2YXIgcCBpbiBlKXtpZighZS5oYXNPd25Qcm9wZXJ0eShwKSl7Y29udGludWV9dmFyIHI9ZChwLHMsZmFsc2UpO3IubGFuZ3VhZ2U9cDtpZihyLmtleXdvcmRfY291bnQrci5yPnEua2V5d29yZF9jb3VudCtxLnIpe3E9cn1pZihyLmtleXdvcmRfY291bnQrci5yPm8ua2V5d29yZF9jb3VudCtvLnIpe3E9bztvPXJ9fWlmKHEubGFuZ3VhZ2Upe28uc2Vjb25kX2Jlc3Q9cX1yZXR1cm4gb31mdW5jdGlvbiBpKHEscCxvKXtpZihwKXtxPXEucmVwbGFjZSgvXigoPFtePl0rPnxcdCkrKS9nbSxmdW5jdGlvbihyLHYsdSx0KXtyZXR1cm4gdi5yZXBsYWNlKC9cdC9nLHApfSl9aWYobyl7cT1xLnJlcGxhY2UoL1xuL2csIjxicj4iKX1yZXR1cm4gcX1mdW5jdGlvbiBtKHIsdSxwKXt2YXIgdj1oKHIscCk7dmFyIHQ9YShyKTtpZih0PT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJufXZhciB3PXQ/ZCh0LHYsdHJ1ZSk6Zyh2KTt0PXcubGFuZ3VhZ2U7dmFyIG89YyhyKTtpZihvLmxlbmd0aCl7dmFyIHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIik7cS5pbm5lckhUTUw9dy52YWx1ZTt3LnZhbHVlPWoobyxjKHEpLHYpfXcudmFsdWU9aSh3LnZhbHVlLHUscCk7dmFyIHM9ci5jbGFzc05hbWU7aWYoIXMubWF0Y2goIihcXHN8XikobGFuZ3VhZ2UtKT8iK3QrIihcXHN8JCkiKSl7cz1zPyhzKyIgIit0KTp0fXIuaW5uZXJIVE1MPXcudmFsdWU7ci5jbGFzc05hbWU9cztyLnJlc3VsdD17bGFuZ3VhZ2U6dCxrdzp3LmtleXdvcmRfY291bnQscmU6dy5yfTtpZih3LnNlY29uZF9iZXN0KXtyLnNlY29uZF9iZXN0PXtsYW5ndWFnZTp3LnNlY29uZF9iZXN0Lmxhbmd1YWdlLGt3Oncuc2Vjb25kX2Jlc3Qua2V5d29yZF9jb3VudCxyZTp3LnNlY29uZF9iZXN0LnJ9fX1mdW5jdGlvbiBuKCl7aWYobi5jYWxsZWQpe3JldHVybn1uLmNhbGxlZD10cnVlO0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIiksYikuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24obyl7bShvLGhsanMudGFiUmVwbGFjZSl9KX1mdW5jdGlvbiBrKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLG4sZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixuLGZhbHNlKX12YXIgZT17fTt0aGlzLkxBTkdVQUdFUz1lO3RoaXMuaGlnaGxpZ2h0PWQ7dGhpcy5oaWdobGlnaHRBdXRvPWc7dGhpcy5maXhNYXJrdXA9aTt0aGlzLmhpZ2hsaWdodEJsb2NrPW07dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW47dGhpcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPWs7dGhpcy5JUj0iW2EtekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSIoXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcYlxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bLStdP1xcZCspPykiO3RoaXMuQk5SPSJcXGIoMGJbMDFdKykiO3RoaXMuUlNSPSIhfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFwqfFxcKj18XFwrfFxcKz18LHxcXC58LXwtPXwvfC89fDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXD98XFxbfFxce3xcXCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iO3RoaXMuQkU9e2I6IlxcXFxbXFxzXFxTXSIscjowfTt0aGlzLkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlt0aGlzLkJFXSxyOjB9O3RoaXMuUVNNPXtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5DTENNPXtjTjoiY29tbWVudCIsYjoiLy8iLGU6IiQifTt0aGlzLkNCTENMTT17Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8ifTt0aGlzLkhDTT17Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQifTt0aGlzLk5NPXtjTjoibnVtYmVyIixiOnRoaXMuTlIscjowfTt0aGlzLkNOTT17Y046Im51bWJlciIsYjp0aGlzLkNOUixyOjB9O3RoaXMuQk5NPXtjTjoibnVtYmVyIixiOnRoaXMuQk5SLHI6MH07dGhpcy5SRUdFWFBfTU9ERT17Y046InJlZ2V4cCIsYjovXC8vLGU6L1wvW2dpbV0qLyxpOi9cbi8sYzpbdGhpcy5CRSx7YjovXFsvLGU6L1xdLyxyOjAsYzpbdGhpcy5CRV19XX07dGhpcy5pbmhlcml0PWZ1bmN0aW9uKHEscil7dmFyIG89e307Zm9yKHZhciBwIGluIHEpe29bcF09cVtwXX1pZihyKXtmb3IodmFyIHAgaW4gcil7b1twXT1yW3BdfX1yZXR1cm4gb319KCk7aGxqcy5MQU5HVUFHRVMuYmFzaD1mdW5jdGlvbihhKXt2YXIgYz17Y046InZhcmlhYmxlIixiOi9cJFtcd1xkI0BdW1x3XGRfXSovfTt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFx7KC4qPylcfS99O3ZhciBlPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOlthLkJFLGMsYix7Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfV0scjowfTt2YXIgZD17Y046InN0cmluZyIsYjovJy8sZTovJy8scjowfTtyZXR1cm57bDovLT9bYS16XSsvLGs6e2tleXdvcmQ6ImlmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciBicmVhayBjb250aW51ZSB3aGlsZSBpbiBkbyBkb25lIGV4aXQgcmV0dXJuIHNldCBkZWNsYXJlIGNhc2UgZXNhYyBleHBvcnQgZXhlYyIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSIsYnVpbHRfaW46InByaW50ZiBlY2hvIHJlYWQgY2QgcHdkIHB1c2hkIHBvcGQgZGlycyBsZXQgZXZhbCB1bnNldCB0eXBlc2V0IHJlYWRvbmx5IGdldG9wdHMgc291cmNlIHNob3B0IGNhbGxlciB0eXBlIGhhc2ggYmluZCBoZWxwIHN1ZG8iLG9wZXJhdG9yOiItbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEifSxjOlt7Y046InNoZWJhbmciLGI6L14jIVteXG5dK3NoXHMqJC8scjoxMH0se2NOOiJmdW5jdGlvbiIsYjovXHdbXHdcZF9dKlxzKlwoXHMqXClccypcey8sckI6dHJ1ZSxjOlt7Y046InRpdGxlIixiOi9cd1tcd1xkX10qL31dLHI6MH0sYS5IQ00sYS5OTSxlLGQsYyxiXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmNzPWZ1bmN0aW9uKGEpe3JldHVybntrOiJhYnN0cmFjdCBhcyBiYXNlIGJvb2wgYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2hlY2tlZCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWNpbWFsIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmFsc2UgZmluYWxseSBmaXhlZCBmbG9hdCBmb3IgZm9yZWFjaCBnb3RvIGlmIGltcGxpY2l0IGluIGludCBpbnRlcmZhY2UgaW50ZXJuYWwgaXMgbG9jayBsb25nIG5hbWVzcGFjZSBuZXcgbnVsbCBvYmplY3Qgb3BlcmF0b3Igb3V0IG92ZXJyaWRlIHBhcmFtcyBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmVhZG9ubHkgcmVmIHJldHVybiBzYnl0ZSBzZWFsZWQgc2hvcnQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVpbnQgdWxvbmcgdW5jaGVja2VkIHVuc2FmZSB1c2hvcnQgdXNpbmcgdmlydHVhbCB2b2xhdGlsZSB2b2lkIHdoaWxlIGFzeW5jIGF3YWl0IGFzY2VuZGluZyBkZXNjZW5kaW5nIGZyb20gZ2V0IGdyb3VwIGludG8gam9pbiBsZXQgb3JkZXJieSBwYXJ0aWFsIHNlbGVjdCBzZXQgdmFsdWUgdmFyIHdoZXJlIHlpZWxkIixjOlt7Y046ImNvbW1lbnQiLGI6Ii8vLyIsZToiJCIsckI6dHJ1ZSxjOlt7Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+In0se2NOOiJ4bWxEb2NUYWciLGI6IjwvPyIsZToiPiJ9XX0sYS5DTENNLGEuQ0JMQ0xNLHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIixrOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSByZWdpb24gZW5kcmVnaW9uIHByYWdtYSBjaGVja3N1bSJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIicsYzpbe2I6JyIiJ31dfSxhLkFTTSxhLlFTTSxhLkNOTV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5ydWJ5PWZ1bmN0aW9uKGUpe3ZhciBhPSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGo9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBnPXtrZXl3b3JkOiJhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyBpZiBCRUdJTiByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuIG5leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgbmlsIGVsc2UgYnJlYWsgdW5kZWYgbm90IHN1cGVyIGNsYXNzIGNhc2UgcmVxdWlyZSB5aWVsZCBhbGlhcyB3aGlsZSBlbnN1cmUgZWxzaWYgb3IgaW5jbHVkZSJ9O3ZhciBjPXtjTjoieWFyZG9jdGFnIixiOiJAW0EtWmEtel0rIn07dmFyIGs9W3tjTjoiY29tbWVudCIsYjoiIyIsZToiJCIsYzpbY119LHtjTjoiY29tbWVudCIsYjoiXlxcPWJlZ2luIixlOiJeXFw9ZW5kIixjOltjXSxyOjEwfSx7Y046ImNvbW1lbnQiLGI6Il5fX0VORF9fIixlOiJcXG4kIn1dO3ZhciBkPXtjTjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6YSxrOmd9O3ZhciBpPVtlLkJFLGRdO3ZhciBiPVt7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6aSxyOjB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXCgiLGU6IlxcKSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddP3siLGU6In0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddPzwiLGU6Ij4iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LyIsZToiLyIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPy0iLGU6Ii0iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFx8IixlOiJcXHwiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjovXEJcPyhcXFxkezEsM318XFx4W0EtRmEtZjAtOV17MSwyfXxcXHVbQS1GYS1mMC05XXs0fXxcXD9cUylcYi99XTt2YXIgaD17Y046ImZ1bmN0aW9uIixiV0s6dHJ1ZSxlOiIgfCR8OyIsazoiZGVmIixjOlt7Y046InRpdGxlIixiOmosbDphLGs6Z30se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixsOmEsazpnfV0uY29uY2F0KGspfTt2YXIgZj1rLmNvbmNhdChiLmNvbmNhdChbe2NOOiJjbGFzcyIsYldLOnRydWUsZToiJHw7IixrOiJjbGFzcyBtb2R1bGUiLGM6W3tjTjoidGl0bGUiLGI6IltBLVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixyOjB9LHtjTjoiaW5oZXJpdGFuY2UiLGI6IjxcXHMqIixjOlt7Y046InBhcmVudCIsYjoiKCIrZS5JUisiOjopPyIrZS5JUn1dfV0uY29uY2F0KGspfSxoLHtjTjoiY29uc3RhbnQiLGI6Iig6Oik/KFxcYltBLVpdXFx3Kig6Oik/KSsiLHI6MH0se2NOOiJzeW1ib2wiLGI6IjoiLGM6Yi5jb25jYXQoW3tiOmp9XSkscjowfSx7Y046InN5bWJvbCIsYjphKyI6IixyOjB9LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtjTjoidmFyaWFibGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSJ9LHtiOiIoIitlLlJTUisiKVxccyoiLGM6ay5jb25jYXQoW3tjTjoicmVnZXhwIixiOiIvIixlOiIvW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlcnsiLGU6In1bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyXFwoIixlOiJcXClbYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyISIsZToiIVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXFsiLGU6IlxcXVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfV0pLHI6MH1dKSk7ZC5jPWY7aC5jWzFdLmM9ZjtyZXR1cm57bDphLGs6ZyxjOmZ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5kaWZmPWZ1bmN0aW9uKGEpe3JldHVybntjOlt7Y046ImNodW5rIixiOiJeXFxAXFxAICtcXC1cXGQrLFxcZCsgK1xcK1xcZCssXFxkKyArXFxAXFxAJCIscjoxMH0se2NOOiJjaHVuayIsYjoiXlxcKlxcKlxcKiArXFxkKyxcXGQrICtcXCpcXCpcXCpcXCokIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwtXFwtXFwtICtcXGQrLFxcZCsgK1xcLVxcLVxcLVxcLSQiLHI6MTB9LHtjTjoiaGVhZGVyIixiOiJJbmRleDogIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Ij09PT09IixlOiI9PT09PSQifSx7Y046ImhlYWRlciIsYjoiXlxcLVxcLVxcLSIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwqezN9ICIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwrXFwrXFwrIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6IlxcKns1fSIsZToiXFwqezV9JCJ9LHtjTjoiYWRkaXRpb24iLGI6Il5cXCsiLGU6IiQifSx7Y046ImRlbGV0aW9uIixiOiJeXFwtIixlOiIkIn0se2NOOiJjaGFuZ2UiLGI6Il5cXCEiLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PWZ1bmN0aW9uKGEpe3JldHVybntrOntrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5In0sYzpbYS5BU00sYS5RU00sYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLHtiOiIoIithLlJTUisifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsazoicmV0dXJuIHRocm93IGNhc2UiLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlJFR0VYUF9NT0RFLHtiOi88LyxlOi8+Oy8sc0w6InhtbCJ9XSxyOjB9LHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6L3svLGs6ImZ1bmN0aW9uIixjOlt7Y046InRpdGxlIixiOi9bQS1aYS16JF9dWzAtOUEtWmEteiRfXSovfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxjOlthLkNMQ00sYS5DQkxDTE1dLGk6L1siJ1woXS99XSxpOi9cW3wlL31dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMueG1sPWZ1bmN0aW9uKGEpe3ZhciBjPSJbQS1aYS16MC05XFwuXzotXSsiO3ZhciBiPXtlVzp0cnVlLHI6MCxjOlt7Y046ImF0dHJpYnV0ZSIsYjpjLHI6MH0se2I6Jz0iJyxyQjp0cnVlLGU6JyInLGM6W3tjTjoidmFsdWUiLGI6JyInLGVXOnRydWV9XX0se2I6Ij0nIixyQjp0cnVlLGU6IiciLGM6W3tjTjoidmFsdWUiLGI6IiciLGVXOnRydWV9XX0se2I6Ij0iLGM6W3tjTjoidmFsdWUiLGI6IlteXFxzLz5dKyJ9XX1dfTtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSx7Y046ImRvY3R5cGUiLGI6IjwhRE9DVFlQRSIsZToiPiIscjoxMCxjOlt7YjoiXFxbIixlOiJcXF0ifV19LHtjTjoiY29tbWVudCIsYjoiPCEtLSIsZToiLS0+IixyOjEwfSx7Y046ImNkYXRhIixiOiI8XFwhXFxbQ0RBVEFcXFsiLGU6IlxcXVxcXT4iLHI6MTB9LHtjTjoidGFnIixiOiI8c3R5bGUoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InN0eWxlIn0sYzpbYl0sc3RhcnRzOntlOiI8L3N0eWxlPiIsckU6dHJ1ZSxzTDoiY3NzIn19LHtjTjoidGFnIixiOiI8c2NyaXB0KD89XFxzfD58JCkiLGU6Ij4iLGs6e3RpdGxlOiJzY3JpcHQifSxjOltiXSxzdGFydHM6e2U6IjxcL3NjcmlwdD4iLHJFOnRydWUsc0w6ImphdmFzY3JpcHQifX0se2I6IjwlIixlOiIlPiIsc0w6InZic2NyaXB0In0se2NOOiJ0YWciLGI6IjwvPyIsZToiLz8+IixyOjAsYzpbe2NOOiJ0aXRsZSIsYjoiW14gLz48XSsifSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFya2Rvd249ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiaGVhZGVyIixiOiJeI3sxLDN9IixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il4uKz9cXG5bPS1dezIsfSQifSx7YjoiPCIsZToiPiIsc0w6InhtbCIscjowfSx7Y046ImJ1bGxldCIsYjoiXihbKistXXwoXFxkK1xcLikpXFxzKyJ9LHtjTjoic3Ryb25nIixiOiJbKl9dezJ9Lis/WypfXXsyfSJ9LHtjTjoiZW1waGFzaXMiLGI6IlxcKi4rP1xcKiJ9LHtjTjoiZW1waGFzaXMiLGI6Il8uKz9fIixyOjB9LHtjTjoiYmxvY2txdW90ZSIsYjoiXj5cXHMrIixlOiIkIn0se2NOOiJjb2RlIixiOiJgLis/YCJ9LHtjTjoiY29kZSIsYjoiXiAgICAiLGU6IiQiLHI6MH0se2NOOiJob3Jpem9udGFsX3J1bGUiLGI6Il4tezMsfSIsZToiJCJ9LHtiOiJcXFsuKz9cXF1cXCguKz9cXCkiLHJCOnRydWUsYzpbe2NOOiJsaW5rX2xhYmVsIixiOiJcXFsuK1xcXSJ9LHtjTjoibGlua191cmwiLGI6IlxcKCIsZToiXFwpIixlQjp0cnVlLGVFOnRydWV9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3NzPWZ1bmN0aW9uKGEpe3ZhciBiPSJbYS16QS1aLV1bYS16QS1aMC05Xy1dKiI7dmFyIGM9e2NOOiJmdW5jdGlvbiIsYjpiKyJcXCgiLGU6IlxcKSIsYzpbInNlbGYiLGEuTk0sYS5BU00sYS5RU01dfTtyZXR1cm57Y0k6dHJ1ZSxpOiJbPS98J10iLGM6W2EuQ0JMQ0xNLHtjTjoiaWQiLGI6IlxcI1tBLVphLXowLTlfLV0rIn0se2NOOiJjbGFzcyIsYjoiXFwuW0EtWmEtejAtOV8tXSsiLHI6MH0se2NOOiJhdHRyX3NlbGVjdG9yIixiOiJcXFsiLGU6IlxcXSIsaToiJCJ9LHtjTjoicHNldWRvIixiOiI6KDopP1thLXpBLVowLTlcXF9cXC1cXCtcXChcXClcXFwiXFwnXSsifSx7Y046ImF0X3J1bGUiLGI6IkAoZm9udC1mYWNlfHBhZ2UpIixsOiJbYS16LV0rIixrOiJmb250LWZhY2UgcGFnZSJ9LHtjTjoiYXRfcnVsZSIsYjoiQCIsZToiW3s7XSIsYzpbe2NOOiJrZXl3b3JkIixiOi9cUysvfSx7YjovXHMvLGVXOnRydWUsZUU6dHJ1ZSxyOjAsYzpbYyxhLkFTTSxhLlFTTSxhLk5NXX1dfSx7Y046InRhZyIsYjpiLHI6MH0se2NOOiJydWxlcyIsYjoieyIsZToifSIsaToiW15cXHNdIixyOjAsYzpbYS5DQkxDTE0se2NOOiJydWxlIixiOiJbXlxcc10iLHJCOnRydWUsZToiOyIsZVc6dHJ1ZSxjOlt7Y046ImF0dHJpYnV0ZSIsYjoiW0EtWlxcX1xcLlxcLV0rIixlOiI6IixlRTp0cnVlLGk6IlteXFxzXSIsc3RhcnRzOntjTjoidmFsdWUiLGVXOnRydWUsZUU6dHJ1ZSxjOltjLGEuTk0sYS5RU00sYS5BU00sYS5DQkxDTE0se2NOOiJoZXhjb2xvciIsYjoiI1swLTlBLUZhLWZdKyJ9LHtjTjoiaW1wb3J0YW50IixiOiIhaW1wb3J0YW50In1dfX1dfV19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmh0dHA9ZnVuY3Rpb24oYSl7cmV0dXJue2k6IlxcUyIsYzpbe2NOOiJzdGF0dXMiLGI6Il5IVFRQL1swLTlcXC5dKyIsZToiJCIsYzpbe2NOOiJudW1iZXIiLGI6IlxcYlxcZHszfVxcYiJ9XX0se2NOOiJyZXF1ZXN0IixiOiJeW0EtWl0rICguKj8pIEhUVFAvWzAtOVxcLl0rJCIsckI6dHJ1ZSxlOiIkIixjOlt7Y046InN0cmluZyIsYjoiICIsZToiICIsZUI6dHJ1ZSxlRTp0cnVlfV19LHtjTjoiYXR0cmlidXRlIixiOiJeXFx3IixlOiI6ICIsZUU6dHJ1ZSxpOiJcXG58XFxzfD0iLHN0YXJ0czp7Y046InN0cmluZyIsZToiJCJ9fSx7YjoiXFxuXFxuIixzdGFydHM6e3NMOiIiLGVXOnRydWV9fV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhPWZ1bmN0aW9uKGEpe3JldHVybntrOiJmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0IGZvciB0cnVlIHdoaWxlIGxvbmcgdGhyb3cgc3RyaWN0ZnAgZmluYWxseSBwcm90ZWN0ZWQgaW1wb3J0IG5hdGl2ZSBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgYnJlYWsgdHJhbnNpZW50IG5ldyBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyIsYzpbe2NOOiJqYXZhZG9jIixiOiIvXFwqXFwqIixlOiJcXCovIixjOlt7Y046ImphdmFkb2N0YWciLGI6IihefFxccylAW0EtWmEtel0rIn1dLHI6MTB9LGEuQ0xDTSxhLkNCTENMTSxhLkFTTSxhLlFTTSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyBpbnRlcmZhY2UiLGVFOnRydWUsaToiOiIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMgaW1wbGVtZW50cyIscjoxMH0se2NOOiJ0aXRsZSIsYjphLlVJUn1dfSxhLkNOTSx7Y046ImFubm90YXRpb24iLGI6IkBbQS1aYS16XSsifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5waHA9ZnVuY3Rpb24oYSl7dmFyIGU9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkK1thLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSoifTt2YXIgYj1bYS5pbmhlcml0KGEuQVNNLHtpOm51bGx9KSxhLmluaGVyaXQoYS5RU00se2k6bnVsbH0pLHtjTjoic3RyaW5nIixiOidiIicsZTonIicsYzpbYS5CRV19LHtjTjoic3RyaW5nIixiOiJiJyIsZToiJyIsYzpbYS5CRV19XTt2YXIgYz1bYS5CTk0sYS5DTk1dO3ZhciBkPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3JldHVybntjSTp0cnVlLGw6YS5VSVIsazoiYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciB3aGlsZSBpc3NldCBwdWJsaWMgcHJvdGVjdGVkIGV4aXQgZm9yZWFjaCB0aHJvdyBlbHNlaWYgaW5jbHVkZSBfX0ZJTEVfXyBlbXB0eSByZXF1aXJlX29uY2UgZG8geG9yIHJldHVybiBpbXBsZW1lbnRzIHBhcmVudCBjbG9uZSB1c2UgX19DTEFTU19fIF9fTElORV9fIGVsc2UgYnJlYWsgcHJpbnQgZXZhbCBuZXcgY2F0Y2ggX19NRVRIT0RfXyBjYXNlIGV4Y2VwdGlvbiBkZWZhdWx0IGRpZSByZXF1aXJlIF9fRlVOQ1RJT05fXyBlbmRkZWNsYXJlIGZpbmFsIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSBlbmRmb3IgZW5kaWYgZGVjbGFyZSB1bnNldCB0cnVlIGZhbHNlIG5hbWVzcGFjZSB0cmFpdCBnb3RvIGluc3RhbmNlb2YgaW5zdGVhZG9mIF9fRElSX18gX19OQU1FU1BBQ0VfXyB5aWVsZCBmaW5hbGx5IixjOlthLkNMQ00sYS5IQ00se2NOOiJjb21tZW50IixiOiIvXFwqIixlOiJcXCovIixjOlt7Y046InBocGRvYyIsYjoiXFxzQFtBLVphLXpdKyJ9XX0se2NOOiJjb21tZW50IixiOiJfX2hhbHRfY29tcGlsZXIuKz87IixlVzp0cnVlLGs6Il9faGFsdF9jb21waWxlciIsbDphLlVJUn0se2NOOiJzdHJpbmciLGI6Ijw8PFsnXCJdP1xcdytbJ1wiXT8kIixlOiJeXFx3KzsiLGM6W2EuQkVdfSx7Y046InByZXByb2Nlc3NvciIsYjoiPFxcP3BocCIscjoxMH0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IlxcPz4ifSxlLHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6InsiLGs6ImZ1bmN0aW9uIixpOiJcXCR8XFxbfCUiLGM6W2Qse2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic2VsZiIsZSxhLkNCTENMTV0uY29uY2F0KGIpLmNvbmNhdChjKX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyIsaToiWzpcXChcXCRdIixjOlt7YldLOnRydWUsZVc6dHJ1ZSxrOiJleHRlbmRzIixjOltkXX0sZF19LHtiOiI9PiJ9XS5jb25jYXQoYikuY29uY2F0KGMpfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucHl0aG9uPWZ1bmN0aW9uKGEpe3ZhciBmPXtjTjoicHJvbXB0IixiOi9eKD4+PnxcLlwuXC4pIC99O3ZhciBjPVt7Y046InN0cmluZyIsYjovKHV8Yik/cj8nJycvLGU6LycnJy8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fGIpP3I/IiIiLyxlOi8iIiIvLGM6W2ZdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKScvLGU6LycvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKSIvLGU6LyIvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8oYnxiciknLyxlOi8nLyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6LyhifGJyKSIvLGU6LyIvLGM6W2EuQkVdfV0uY29uY2F0KFthLkFTTSxhLlFTTV0pO3ZhciBlPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3ZhciBkPXtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6WyJzZWxmIixhLkNOTSxmXS5jb25jYXQoYyl9O3ZhciBiPXtiV0s6dHJ1ZSxlOi86LyxpOi9bJHs9O1xuXS8sYzpbZSxkXSxyOjEwfTtyZXR1cm57azp7a2V5d29yZDoiYW5kIGVsaWYgaXMgZ2xvYmFsIGFzIGluIGlmIGZyb20gcmFpc2UgZm9yIGV4Y2VwdCBmaW5hbGx5IHByaW50IGltcG9ydCBwYXNzIHJldHVybiBleGVjIGVsc2UgYnJlYWsgbm90IHdpdGggY2xhc3MgYXNzZXJ0IHlpZWxkIHRyeSB3aGlsZSBjb250aW51ZSBkZWwgb3IgZGVmIGxhbWJkYSBub25sb2NhbHwxMCBOb25lIFRydWUgRmFsc2UiLGJ1aWx0X2luOiJFbGxpcHNpcyBOb3RJbXBsZW1lbnRlZCJ9LGk6Lyg8XC98LT58XD8pLyxjOmMuY29uY2F0KFtmLGEuSENNLGEuaW5oZXJpdChiLHtjTjoiZnVuY3Rpb24iLGs6ImRlZiJ9KSxhLmluaGVyaXQoYix7Y046ImNsYXNzIixrOiJjbGFzcyJ9KSxhLkNOTSx7Y046ImRlY29yYXRvciIsYjovQC8sZTovJC99LHtiOi9cYihwcmludHxleGVjKVwoL31dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnNxbD1mdW5jdGlvbihhKXtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046Im9wZXJhdG9yIixiOiIoYmVnaW58ZW5kfHN0YXJ0fGNvbW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxyZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNlfHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hfGdyYW50KVxcYig/ITopIixlOiI7IixlVzp0cnVlLGs6e2tleXdvcmQ6ImFsbCBwYXJ0aWFsIGdsb2JhbCBtb250aCBjdXJyZW50X3RpbWVzdGFtcCB1c2luZyBnbyByZXZva2Ugc21hbGxpbnQgaW5kaWNhdG9yIGVuZC1leGVjIGRpc2Nvbm5lY3Qgem9uZSB3aXRoIGNoYXJhY3RlciBhc3NlcnRpb24gdG8gYWRkIGN1cnJlbnRfdXNlciB1c2FnZSBpbnB1dCBsb2NhbCBhbHRlciBtYXRjaCBjb2xsYXRlIHJlYWwgdGhlbiByb2xsYmFjayBnZXQgcmVhZCB0aW1lc3RhbXAgc2Vzc2lvbl91c2VyIG5vdCBpbnRlZ2VyIGJpdCB1bmlxdWUgZGF5IG1pbnV0ZSBkZXNjIGluc2VydCBleGVjdXRlIGxpa2UgaWxpa2V8MiBsZXZlbCBkZWNpbWFsIGRyb3AgY29udGludWUgaXNvbGF0aW9uIGZvdW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvbWFpbiByaWdodCBuYXRpb25hbCBzb21lIG1vZHVsZSB0cmFuc2FjdGlvbiByZWxhdGl2ZSBzZWNvbmQgY29ubmVjdCBlc2NhcGUgY2xvc2Ugc3lzdGVtX3VzZXIgZm9yIGRlZmVycmVkIHNlY3Rpb24gY2FzdCBjdXJyZW50IHNxbHN0YXRlIGFsbG9jYXRlIGludGVyc2VjdCBkZWFsbG9jYXRlIG51bWVyaWMgcHVibGljIHByZXNlcnZlIGZ1bGwgZ290byBpbml0aWFsbHkgYXNjIG5vIGtleSBvdXRwdXQgY29sbGF0aW9uIGdyb3VwIGJ5IHVuaW9uIHNlc3Npb24gYm90aCBsYXN0IGxhbmd1YWdlIGNvbnN0cmFpbnQgY29sdW1uIG9mIHNwYWNlIGZvcmVpZ24gZGVmZXJyYWJsZSBwcmlvciBjb25uZWN0aW9uIHVua25vd24gYWN0aW9uIGNvbW1pdCB2aWV3IG9yIGZpcnN0IGludG8gZmxvYXQgeWVhciBwcmltYXJ5IGNhc2NhZGVkIGV4Y2VwdCByZXN0cmljdCBzZXQgcmVmZXJlbmNlcyBuYW1lcyB0YWJsZSBvdXRlciBvcGVuIHNlbGVjdCBzaXplIGFyZSByb3dzIGZyb20gcHJlcGFyZSBkaXN0aW5jdCBsZWFkaW5nIGNyZWF0ZSBvbmx5IG5leHQgaW5uZXIgYXV0aG9yaXphdGlvbiBzY2hlbWEgY29ycmVzcG9uZGluZyBvcHRpb24gZGVjbGFyZSBwcmVjaXNpb24gaW1tZWRpYXRlIGVsc2UgdGltZXpvbmVfbWludXRlIGV4dGVybmFsIHZhcnlpbmcgdHJhbnNsYXRpb24gdHJ1ZSBjYXNlIGV4Y2VwdGlvbiBqb2luIGhvdXIgZGVmYXVsdCBkb3VibGUgc2Nyb2xsIHZhbHVlIGN1cnNvciBkZXNjcmlwdG9yIHZhbHVlcyBkZWMgZmV0Y2ggcHJvY2VkdXJlIGRlbGV0ZSBhbmQgZmFsc2UgaW50IGlzIGRlc2NyaWJlIGNoYXIgYXMgYXQgaW4gdmFyY2hhciBudWxsIHRyYWlsaW5nIGFueSBhYnNvbHV0ZSBjdXJyZW50X3RpbWUgZW5kIGdyYW50IHByaXZpbGVnZXMgd2hlbiBjcm9zcyBjaGVjayB3cml0ZSBjdXJyZW50X2RhdGUgcGFkIGJlZ2luIHRlbXBvcmFyeSBleGVjIHRpbWUgdXBkYXRlIGNhdGFsb2cgdXNlciBzcWwgZGF0ZSBvbiBpZGVudGl0eSB0aW1lem9uZV9ob3VyIG5hdHVyYWwgd2hlbmV2ZXIgaW50ZXJ2YWwgd29yayBvcmRlciBjYXNjYWRlIGRpYWdub3N0aWNzIG5jaGFyIGhhdmluZyBsZWZ0IGNhbGwgZG8gaGFuZGxlciBsb2FkIHJlcGxhY2UgdHJ1bmNhdGUgc3RhcnQgbG9jayBzaG93IHByYWdtYSBleGlzdHMgbnVtYmVyIHRyaWdnZXIgaWYgYmVmb3JlIGFmdGVyIGVhY2ggcm93IixhZ2dyZWdhdGU6ImNvdW50IHN1bSBtaW4gbWF4IGF2ZyJ9LGM6W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOlthLkJFLHtiOiInJyJ9XSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlthLkJFLHtiOiciIid9XSxyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlthLkJFXX0sYS5DTk1dfSxhLkNCTENMTSx7Y046ImNvbW1lbnQiLGI6Ii0tIixlOiIkIn1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaW5pPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGk6IlteXFxzXSIsYzpbe2NOOiJjb21tZW50IixiOiI7IixlOiIkIn0se2NOOiJ0aXRsZSIsYjoiXlxcWyIsZToiXFxdIn0se2NOOiJzZXR0aW5nIixiOiJeW2EtejAtOVxcW1xcXV8tXStbIFxcdF0qPVsgXFx0XSoiLGU6IiQiLGM6W3tjTjoidmFsdWUiLGVXOnRydWUsazoib24gb2ZmIHRydWUgZmFsc2UgeWVzIG5vIixjOlthLlFTTSxhLk5NXSxyOjB9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucGVybD1mdW5jdGlvbihlKXt2YXIgYT0iZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjIG1hIHN5c3dyaXRlIHRyIHNlbmQgdW1hc2sgc3lzb3BlbiBzaG13cml0ZSB2ZWMgcXggdXRpbWUgbG9jYWwgb2N0IHNlbWN0bCBsb2NhbHRpbWUgcmVhZHBpcGUgZG8gcmV0dXJuIGZvcm1hdCByZWFkIHNwcmludGYgZGJtb3BlbiBwb3AgZ2V0cGdycCBub3QgZ2V0cHduYW0gcmV3aW5kZGlyIHFxZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50IHNodXRkb3duIGR1bXAgY2hvbXAgY29ubmVjdCBnZXRzb2NrbmFtZSBkaWUgc29ja2V0cGFpciBjbG9zZSBmbG9jayBleGlzdHMgaW5kZXggc2htZ2V0c3ViIGZvciBlbmRwd2VudCByZWRvIGxzdGF0IG1zZ2N0bCBzZXRwZ3JwIGFicyBleGl0IHNlbGVjdCBwcmludCByZWYgZ2V0aG9zdGJ5YWRkciB1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCBnZXRwZWVybmFtZSByZWN2IGxvZyBzZXRzb2Nrb3B0IGNvcyBsYXN0IHJldmVyc2UgZ2V0aG9zdGJ5bmFtZSBnZXRncm5hbSBzdHVkeSBmb3JtbGluZSBlbmRob3N0ZW50IHRpbWVzIGNob3AgbGVuZ3RoIGdldGhvc3RlbnQgZ2V0bmV0ZW50IHBhY2sgZ2V0cHJvdG9lbnQgZ2V0c2VydmJ5bmFtZSByYW5kIG1rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgZ2V0c29ja29wdCBnZXRwcmlvcml0eSByaW5kZXggd2FudGFycmF5IGhleCBzeXN0ZW0gZ2V0c2VydmJ5cG9ydCBlbmRzZXJ2ZW50IGludCBjaHIgdW50aWUgcm1kaXIgcHJvdG90eXBlIHRlbGwgbGlzdGVuIGZvcmsgc2htcmVhZCB1Y2ZpcnN0IHNldHByb3RvZW50IGVsc2Ugc3lzc2VlayBsaW5rIGdldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciBsY2ZpcnN0IHVudGlsIHdhcm4gd2hpbGUgdmFsdWVzIHNoaWZ0IHRlbGxkaXIgZ2V0cHd1aWQgbXkgZ2V0cHJvdG9ieW51bWJlciBkZWxldGUgYW5kIHNvcnQgdWMgZGVmaW5lZCBzcmFuZCBhY2NlcHQgcGFja2FnZSBzZWVrZGlyIGdldHByb3RvYnluYW1lIHNlbW9wIG91ciByZW5hbWUgc2VlayBpZiBxfDAgY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoIHRpZSBzaW4gbXNnZ2V0IG1hcCBzdGF0IGdldGxvZ2luIHVubGVzcyBlbHNpZiB0cnVuY2F0ZSBleGVjIGtleXMgZ2xvYiB0aWVkIGNsb3NlZGlyaW9jdGwgc29ja2V0IHJlYWRsaW5rIGV2YWwgeG9yIHJlYWRsaW5lIGJpbm1vZGUgc2V0c2VydmVudCBlb2Ygb3JkIGJpbmQgYWxhcm0gcGlwZSBhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbiI7dmFyIGQ9e2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToiXFx9IixrOmEscjoxMH07dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkIn07dmFyIGk9e2NOOiJ2YXJpYWJsZSIsYjoiW1xcJFxcJVxcQFxcKl0oXFxeXFx3XFxifCNcXHcrKFxcOlxcOlxcdyspKnxbXlxcc1xcd3tdfHtcXHcrfXxcXHcrKFxcOlxcOlxcdyopKikifTt2YXIgZj1bZS5CRSxkLGIsaV07dmFyIGg9e2I6Ii0+IixjOlt7YjplLklSfSx7YjoieyIsZToifSJ9XX07dmFyIGc9e2NOOiJjb21tZW50IixiOiJeKF9fRU5EX198X19EQVRBX18pIixlOiJcXG4kIixyOjV9O3ZhciBjPVtiLGksZS5IQ00sZyx7Y046ImNvbW1lbnQiLGI6Il5cXD1cXHciLGU6IlxcPWN1dCIsZVc6dHJ1ZX0saCx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFwoIixlOiJcXCkiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxceyIsZToiXFx9IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx8IixlOiJcXHwiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InF3XFxzK3EiLGU6InEiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltlLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOmYscjowfSx7Y046InN0cmluZyIsYjoiYCIsZToiYCIsYzpbZS5CRV19LHtjTjoic3RyaW5nIixiOiJ7XFx3K30iLHI6MH0se2NOOiJzdHJpbmciLGI6Ii0/XFx3K1xccypcXD1cXD4iLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2I6IigiK2UuUlNSKyJ8XFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxiKVxccyoiLGs6InNwbGl0IHJldHVybiBwcmludCByZXZlcnNlIGdyZXAiLHI6MCxjOltlLkhDTSxnLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2UuQkVdLHI6MH1dfSx7Y046InN1YiIsYldLOnRydWUsZToiKFxccypcXCguKj9cXCkpP1s7e10iLGs6InN1YiIscjo1fSx7Y046Im9wZXJhdG9yIixiOiItXFx3XFxiIixyOjB9XTtkLmM9YztoLmNbMV0uYz1jO3JldHVybntrOmEsYzpjfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMub2JqZWN0aXZlYz1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgc2l6ZW9mIHR5cGVkZWYgY29uc3Qgc3RydWN0IGZvciB1bmlvbiB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCBtdXRhYmxlIGlmIHB1YmxpYyBkbyByZXR1cm4gZ290byB2b2lkIGVudW0gZWxzZSBicmVhayBleHRlcm4gYXNtIGNhc2Ugc2hvcnQgZGVmYXVsdCBkb3VibGUgdGhyb3cgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSByZWFkb25seSBhc3NpZ24gcHJvcGVydHkgc2VsZiBzeW5jaHJvbml6ZWQgZW5kIHN5bnRoZXNpemUgaWQgb3B0aW9uYWwgcmVxdWlyZWQgbm9uYXRvbWljIHN1cGVyIHVuaWNoYXIgZmluYWxseSBkeW5hbWljIElCT3V0bGV0IElCQWN0aW9uIHNlbGVjdG9yIHN0cm9uZyB3ZWFrIHJlYWRvbmx5IixsaXRlcmFsOiJmYWxzZSB0cnVlIEZBTFNFIFRSVUUgbmlsIFlFUyBOTyBOVUxMIixidWlsdF9pbjoiTlNTdHJpbmcgTlNEaWN0aW9uYXJ5IENHUmVjdCBDR1BvaW50IFVJQnV0dG9uIFVJTGFiZWwgVUlUZXh0VmlldyBVSVdlYlZpZXcgTUtNYXBWaWV3IFVJU2VnbWVudGVkQ29udHJvbCBOU09iamVjdCBVSVRhYmxlVmlld0RlbGVnYXRlIFVJVGFibGVWaWV3RGF0YVNvdXJjZSBOU1RocmVhZCBVSUFjdGl2aXR5SW5kaWNhdG9yIFVJVGFiYmFyIFVJVG9vbEJhciBVSUJhckJ1dHRvbkl0ZW0gVUlJbWFnZVZpZXcgTlNBdXRvcmVsZWFzZVBvb2wgVUlUYWJsZVZpZXcgQk9PTCBOU0ludGVnZXIgQ0dGbG9hdCBOU0V4Y2VwdGlvbiBOU0xvZyBOU011dGFibGVTdHJpbmcgTlNNdXRhYmxlQXJyYXkgTlNNdXRhYmxlRGljdGlvbmFyeSBOU1VSTCBOU0luZGV4UGF0aCBDR1NpemUgVUlUYWJsZVZpZXdDZWxsIFVJVmlldyBVSVZpZXdDb250cm9sbGVyIFVJTmF2aWdhdGlvbkJhciBVSU5hdmlnYXRpb25Db250cm9sbGVyIFVJVGFiQmFyQ29udHJvbGxlciBVSVBvcG92ZXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXJEZWxlZ2F0ZSBVSUltYWdlIE5TTnVtYmVyIFVJU2VhcmNoQmFyIE5TRmV0Y2hlZFJlc3VsdHNDb250cm9sbGVyIE5TRmV0Y2hlZFJlc3VsdHNDaGFuZ2VUeXBlIFVJU2Nyb2xsVmlldyBVSVNjcm9sbFZpZXdEZWxlZ2F0ZSBVSUVkZ2VJbnNldHMgVUlDb2xvciBVSUZvbnQgVUlBcHBsaWNhdGlvbiBOU05vdEZvdW5kIE5TTm90aWZpY2F0aW9uQ2VudGVyIE5TTm90aWZpY2F0aW9uIFVJTG9jYWxOb3RpZmljYXRpb24gTlNCdW5kbGUgTlNGaWxlTWFuYWdlciBOU1RpbWVJbnRlcnZhbCBOU0RhdGUgTlNDYWxlbmRhciBOU1VzZXJEZWZhdWx0cyBVSVdpbmRvdyBOU1JhbmdlIE5TQXJyYXkgTlNFcnJvciBOU1VSTFJlcXVlc3QgTlNVUkxDb25uZWN0aW9uIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gTVBNb3ZpZVBsYXllckNvbnRyb2xsZXIgZGlzcGF0Y2hfb25jZV90IGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hfc3luYyBkaXNwYXRjaF9hc3luYyBkaXNwYXRjaF9vbmNlIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLGEuUVNNLHtjTjoic3RyaW5nIixiOiInIixlOiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIsYjoiI2ltcG9ydCIsZToiJCIsYzpbe2NOOiJ0aXRsZSIsYjonIicsZTonIid9LHtjTjoidGl0bGUiLGI6IjwiLGU6Ij4ifV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIn0se2NOOiJjbGFzcyIsYldLOnRydWUsZToiKHt8JCkiLGs6ImludGVyZmFjZSBjbGFzcyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiIsYzpbe2NOOiJpZCIsYjphLlVJUn1dfSx7Y046InZhcmlhYmxlIixiOiJcXC4iK2EuVUlSLHI6MH1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY29mZmVlc2NyaXB0PWZ1bmN0aW9uKGMpe3ZhciBiPXtrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSBuZXcgZG8gcmV0dXJuIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB0aHJvdyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBkZWJ1Z2dlciBzdXBlciB0aGVuIHVubGVzcyB1bnRpbCBsb29wIG9mIGJ5IHdoZW4gYW5kIG9yIGlzIGlzbnQgbm90IixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIHllcyBubyBvbiBvZmYiLHJlc2VydmVkOiJjYXNlIGRlZmF1bHQgZnVuY3Rpb24gdmFyIHZvaWQgd2l0aCBjb25zdCBsZXQgZW51bSBleHBvcnQgaW1wb3J0IG5hdGl2ZSBfX2hhc1Byb3AgX19leHRlbmRzIF9fc2xpY2UgX19iaW5kIF9faW5kZXhPZiIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGV4cG9ydHMgZ2xvYmFsIHdpbmRvdyBkb2N1bWVudCJ9O3ZhciBhPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiO3ZhciBmPXtjTjoidGl0bGUiLGI6YX07dmFyIGU9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsazpiLH07dmFyIGQ9W2MuQk5NLGMuaW5oZXJpdChjLkNOTSx7c3RhcnRzOntlOiIoXFxzKi8pPyIscjowfX0pLHtjTjoic3RyaW5nIixiOiInJyciLGU6IicnJyIsYzpbYy5CRV19LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltjLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciIiInLGU6JyIiIicsYzpbYy5CRSxlXX0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2MuQkUsZV0scjowfSx7Y046InJlZ2V4cCIsYjoiLy8vIixlOiIvLy8iLGM6W2MuSENNXX0se2NOOiJyZWdleHAiLGI6Ii8vW2dpbV0qIixyOjB9LHtjTjoicmVnZXhwIixiOiIvXFxTKFxcXFwufFteXFxuXSkqPy9bZ2ltXSooPz1cXHN8XFxXfCQpIn0se2NOOiJwcm9wZXJ0eSIsYjoiQCIrYX0se2I6ImAiLGU6ImAiLGVCOnRydWUsZUU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9XTtlLmM9ZDtyZXR1cm57azpiLGM6ZC5jb25jYXQoW3tjTjoiY29tbWVudCIsYjoiIyMjIixlOiIjIyMifSxjLkhDTSx7Y046ImZ1bmN0aW9uIixiOiIoIithKyJcXHMqPVxccyopPyhcXCguKlxcKSk/XFxzKlstPV0+IixlOiJbLT1dPiIsckI6dHJ1ZSxjOltmLHtjTjoicGFyYW1zIixiOiJcXCgiLHJCOnRydWUsYzpbe2I6L1woLyxlOi9cKS8sazpiLGM6WyJzZWxmIl0uY29uY2F0KGQpfV19XX0se2NOOiJjbGFzcyIsYldLOnRydWUsazoiY2xhc3MiLGU6IiQiLGk6Ils6XFxbXFxdXSIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMiLGVXOnRydWUsaToiOiIsYzpbZl19LGZdfSx7Y046ImF0dHJpYnV0ZSIsYjphKyI6IixlOiI6IixyQjp0cnVlLGVFOnRydWV9XSl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5uZ2lueD1mdW5jdGlvbihiKXt2YXIgYz1be2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkKyJ9LHtjTjoidmFyaWFibGUiLGI6IlxcJHsiLGU6In0ifSx7Y046InZhcmlhYmxlIixiOiJbXFwkXFxAXSIrYi5VSVJ9XTt2YXIgYT17ZVc6dHJ1ZSxsOiJbYS16L19dKyIsazp7YnVpbHRfaW46Im9uIG9mZiB5ZXMgbm8gdHJ1ZSBmYWxzZSBub25lIGJsb2NrZWQgZGVidWcgaW5mbyBub3RpY2Ugd2FybiBlcnJvciBjcml0IHNlbGVjdCBicmVhayBsYXN0IHBlcm1hbmVudCByZWRpcmVjdCBrcXVldWUgcnRzaWcgZXBvbGwgcG9sbCAvZGV2L3BvbGwifSxyOjAsaToiPT4iLGM6W2IuSENNLHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbYi5CRV0uY29uY2F0KGMpLHI6MH0se2NOOiJ1cmwiLGI6IihbYS16XSspOi8iLGU6IlxccyIsZVc6dHJ1ZSxlRTp0cnVlfSx7Y046InJlZ2V4cCIsYjoiXFxzXFxeIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6In5cXCo/XFxzKyIsZToiXFxzfHt8OyIsckU6dHJ1ZSxjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoicmVnZXhwIixiOiJcXCooXFwuW2EtelxcLV0rKSsiLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IihbYS16XFwtXStcXC4pK1xcKiIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046Im51bWJlciIsYjoiXFxiXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30oOlxcZHsxLDV9KT9cXGIifSx7Y046Im51bWJlciIsYjoiXFxiXFxkK1trS21NZ0dkc2hkd3ldKlxcYiIscjowfV0uY29uY2F0KGMpfTtyZXR1cm57YzpbYi5IQ00se2I6Yi5VSVIrIlxccyIsZToiO3x7IixyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6Yi5VSVIsc3RhcnRzOmF9XSxyOjB9XSxpOiJbXlxcc1xcfV0ifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuanNvbj1mdW5jdGlvbihhKXt2YXIgZT17bGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIn07dmFyIGQ9W2EuUVNNLGEuQ05NXTt2YXIgYz17Y046InZhbHVlIixlOiIsIixlVzp0cnVlLGVFOnRydWUsYzpkLGs6ZX07dmFyIGI9e2I6InsiLGU6In0iLGM6W3tjTjoiYXR0cmlidXRlIixiOidcXHMqIicsZTonIlxccyo6XFxzKicsZUI6dHJ1ZSxlRTp0cnVlLGM6W2EuQkVdLGk6IlxcbiIsc3RhcnRzOmN9XSxpOiJcXFMifTt2YXIgZj17YjoiXFxbIixlOiJcXF0iLGM6W2EuaW5oZXJpdChjLHtjTjpudWxsfSldLGk6IlxcUyJ9O2Quc3BsaWNlKGQubGVuZ3RoLDAsYixmKTtyZXR1cm57YzpkLGs6ZSxpOiJcXFMifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuYXBhY2hlPWZ1bmN0aW9uKGEpe3ZhciBiPXtjTjoibnVtYmVyIixiOiJbXFwkJV1cXGQrIn07cmV0dXJue2NJOnRydWUsYzpbYS5IQ00se2NOOiJ0YWciLGI6IjwvPyIsZToiPiJ9LHtjTjoia2V5d29yZCIsYjovXHcrLyxyOjAsazp7Y29tbW9uOiJvcmRlciBkZW55IGFsbG93IHNldGVudiByZXdyaXRlcnVsZSByZXdyaXRlZW5naW5lIHJld3JpdGVjb25kIGRvY3VtZW50cm9vdCBzZXRoYW5kbGVyIGVycm9yZG9jdW1lbnQgbG9hZG1vZHVsZSBvcHRpb25zIGhlYWRlciBsaXN0ZW4gc2VydmVycm9vdCBzZXJ2ZXJuYW1lIn0sc3RhcnRzOntlOi8kLyxyOjAsazp7bGl0ZXJhbDoib24gb2ZmIGFsbCJ9LGM6W3tjTjoic3FicmFja2V0IixiOiJcXHNcXFsiLGU6IlxcXSQifSx7Y046ImNicmFja2V0IixiOiJbXFwkJV1cXHsiLGU6IlxcfSIsYzpbInNlbGYiLGJdfSxiLGEuUVNNXX19XSxpOi9cUy99fShobGpzKTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImZhbHNlIGludCBmbG9hdCB3aGlsZSBwcml2YXRlIGNoYXIgY2F0Y2ggZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mIGR5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3Qgc3RydWN0IGZvciBzdGF0aWNfY2FzdHwxMCB1bmlvbiBuYW1lc3BhY2UgdW5zaWduZWQgbG9uZyB0aHJvdyB2b2xhdGlsZSBzdGF0aWMgcHJvdGVjdGVkIGJvb2wgdGVtcGxhdGUgbXV0YWJsZSBpZiBwdWJsaWMgZnJpZW5kIGRvIHJldHVybiBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgbmV3IGV4dGVybiB1c2luZyB0cnVlIGNsYXNzIGFzbSBjYXNlIHR5cGVpZCBzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgZGVsZXRlIGFsaWdub2YgY2hhcjE2X3QgY2hhcjMyX3QgY29uc3RleHByIGRlY2x0eXBlIG5vZXhjZXB0IG51bGxwdHIgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgX0Jvb2wgY29tcGxleCIsYnVpbHRfaW46InN0ZCBzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0cmluZ3N0cmVhbSBpc3RyaW5nc3RyZWFtIG9zdHJpbmdzdHJlYW0gYXV0b19wdHIgZGVxdWUgbGlzdCBxdWV1ZSBzdGFjayB2ZWN0b3IgbWFwIHNldCBiaXRzZXQgbXVsdGlzZXQgbXVsdGltYXAgdW5vcmRlcmVkX3NldCB1bm9yZGVyZWRfbWFwIHVub3JkZXJlZF9tdWx0aXNldCB1bm9yZGVyZWRfbXVsdGltYXAgYXJyYXkgc2hhcmVkX3B0ciJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJ1xcXFw/LiIsZToiJyIsaToiLiJ9LHtjTjoibnVtYmVyIixiOiJcXGIoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykodXxVfGx8THx1bHxVTHxmfEYpIn0sYS5DTk0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGM6W3tiOiI8IixlOiI+IixpOiJcXG4ifSxhLkNMQ01dfSx7Y046InN0bF9jb250YWluZXIiLGI6IlxcYihkZXF1ZXxsaXN0fHF1ZXVlfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsZToiPiIsazpiLHI6MTAsYzpbInNlbGYiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFrZWZpbGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6YS5CRX07cmV0dXJue2M6W2EuSENNLHtiOi9eXHcrXHMqXFcqPS8sckI6dHJ1ZSxyOjAsc3RhcnRzOntjTjoiY29uc3RhbnQiLGU6L1xzKlxXKj0vLGVFOnRydWUsc3RhcnRzOntlOi8kLyxyOjAsYzpbYl0sfX19LHtjTjoidGl0bGUiLGI6L15bXHddKzpccyokL30se2NOOiJwaG9ueSIsYjovXlwuUEhPTlk6LyxlOi8kLyxrOiIuUEhPTlkiLGw6L1tcLlx3XSsvfSx7YjovXlx0Ky8sZTovJC8sYzpbYS5RU00sYl19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmdvPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIiLGNvbnN0YW50OiJ0cnVlIGZhbHNlIGlvdGEgbmlsIix0eXBlbmFtZToiYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUiLGJ1aWx0X2luOiJhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIn0se2NOOiJudW1iZXIiLGI6IlteYS16QS1aXzAtOV0oXFwtfFxcKyk/XFxkKyhcXC5cXGQrfFxcL1xcZCspPygoZHxlfGZ8bHxzKShcXCt8XFwtKT9cXGQrKT8iLHI6MH0sYS5DTk1dfX0oaGxqcyk7UEsHCBVZbU72dQAA9nUAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHN0YXRpY1xsaWJcanF1ZXJ5LmZvcm0ubWluLmpzLyohCiAqIGpRdWVyeSBGb3JtIFBsdWdpbgogKiB2ZXJzaW9uOiAzLjQ2LjAtMjAxMy4xMS4yMQogKiBSZXF1aXJlcyBqUXVlcnkgdjEuNSBvciBsYXRlcgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTS4gQWxzdXAKICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9mb3JtLwogKiBQcm9qZWN0IHJlcG9zaXRvcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxzdXAvZm9ybQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcy4KICogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtI2NvcHlyaWdodC1hbmQtbGljZW5zZQogKi8KKGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoWyJqcXVlcnkiXSxhKX1lbHNle2EoKHR5cGVvZihqUXVlcnkpIT0idW5kZWZpbmVkIik/alF1ZXJ5OndpbmRvdy5aZXB0byl9fShmdW5jdGlvbihmKXt2YXIgYz17fTtjLmZpbGVhcGk9ZigiPGlucHV0IHR5cGU9J2ZpbGUnLz4iKS5nZXQoMCkuZmlsZXMhPT11bmRlZmluZWQ7Yy5mb3JtZGF0YT13aW5kb3cuRm9ybURhdGEhPT11bmRlZmluZWQ7dmFyIGU9ISFmLmZuLnByb3A7Zi5mbi5hdHRyMj1mdW5jdGlvbigpe2lmKCFlKXtyZXR1cm4gdGhpcy5hdHRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZz10aGlzLnByb3AuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKChnJiZnLmpxdWVyeSl8fHR5cGVvZiBnPT09InN0cmluZyIpe3JldHVybiBnfXJldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmLmZuLmFqYXhTdWJtaXQ9ZnVuY3Rpb24oail7aWYoIXRoaXMubGVuZ3RoKXtkKCJhamF4U3VibWl0OiBza2lwcGluZyBzdWJtaXQgcHJvY2VzcyAtIG5vIGVsZW1lbnQgc2VsZWN0ZWQiKTtyZXR1cm4gdGhpc312YXIgaSxDLG0sbz10aGlzO2lmKHR5cGVvZiBqPT0iZnVuY3Rpb24iKXtqPXtzdWNjZXNzOmp9fWVsc2V7aWYoaj09PXVuZGVmaW5lZCl7aj17fX19aT1qLnR5cGV8fHRoaXMuYXR0cjIoIm1ldGhvZCIpO0M9ai51cmx8fHRoaXMuYXR0cjIoImFjdGlvbiIpO209KHR5cGVvZiBDPT09InN0cmluZyIpP2YudHJpbShDKToiIjttPW18fHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIjtpZihtKXttPShtLm1hdGNoKC9eKFteI10rKS8pfHxbXSlbMV19aj1mLmV4dGVuZCh0cnVlLHt1cmw6bSxzdWNjZXNzOmYuYWpheFNldHRpbmdzLnN1Y2Nlc3MsdHlwZTppfHxmLmFqYXhTZXR0aW5ncy50eXBlLGlmcmFtZVNyYzovXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZnx8IiIpPyJqYXZhc2NyaXB0OmZhbHNlIjoiYWJvdXQ6YmxhbmsifSxqKTt2YXIgdT17fTt0aGlzLnRyaWdnZXIoImZvcm0tcHJlLXNlcmlhbGl6ZSIsW3RoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXByZS1zZXJpYWxpemUgdHJpZ2dlciIpO3JldHVybiB0aGlzfWlmKGouYmVmb3JlU2VyaWFsaXplJiZqLmJlZm9yZVNlcmlhbGl6ZSh0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTZXJpYWxpemUgY2FsbGJhY2siKTtyZXR1cm4gdGhpc312YXIgbj1qLnRyYWRpdGlvbmFsO2lmKG49PT11bmRlZmluZWQpe249Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWx9dmFyIHM9W107dmFyIEUsRj10aGlzLmZvcm1Ub0FycmF5KGouc2VtYW50aWMscyk7aWYoai5kYXRhKXtqLmV4dHJhRGF0YT1qLmRhdGE7RT1mLnBhcmFtKGouZGF0YSxuKX1pZihqLmJlZm9yZVN1Ym1pdCYmai5iZWZvcmVTdWJtaXQoRix0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTdWJtaXQgY2FsbGJhY2siKTtyZXR1cm4gdGhpc310aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LXZhbGlkYXRlIixbRix0aGlzLGosdV0pO2lmKHUudmV0byl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IHZldG9lZCB2aWEgZm9ybS1zdWJtaXQtdmFsaWRhdGUgdHJpZ2dlciIpO3JldHVybiB0aGlzfXZhciB5PWYucGFyYW0oRixuKTtpZihFKXt5PSh5Pyh5KyImIitFKTpFKX1pZihqLnR5cGUudG9VcHBlckNhc2UoKT09IkdFVCIpe2oudXJsKz0oai51cmwuaW5kZXhPZigiPyIpPj0wPyImIjoiPyIpK3k7ai5kYXRhPW51bGx9ZWxzZXtqLmRhdGE9eX12YXIgSD1bXTtpZihqLnJlc2V0Rm9ybSl7SC5wdXNoKGZ1bmN0aW9uKCl7by5yZXNldEZvcm0oKX0pfWlmKGouY2xlYXJGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLmNsZWFyRm9ybShqLmluY2x1ZGVIaWRkZW4pfSl9aWYoIWouZGF0YVR5cGUmJmoudGFyZ2V0KXt2YXIgbD1qLnN1Y2Nlc3N8fGZ1bmN0aW9uKCl7fTtILnB1c2goZnVuY3Rpb24ocSl7dmFyIGs9ai5yZXBsYWNlVGFyZ2V0PyJyZXBsYWNlV2l0aCI6Imh0bWwiO2Yoai50YXJnZXQpW2tdKHEpLmVhY2gobCxhcmd1bWVudHMpfSl9ZWxzZXtpZihqLnN1Y2Nlc3Mpe0gucHVzaChqLnN1Y2Nlc3MpfX1qLnN1Y2Nlc3M9ZnVuY3Rpb24oSyxxLEwpe3ZhciBKPWouY29udGV4dHx8dGhpcztmb3IodmFyIEk9MCxrPUgubGVuZ3RoO0k8aztJKyspe0hbSV0uYXBwbHkoSixbSyxxLEx8fG8sb10pfX07aWYoai5lcnJvcil7dmFyIHo9ai5lcnJvcjtqLmVycm9yPWZ1bmN0aW9uKEosayxxKXt2YXIgST1qLmNvbnRleHR8fHRoaXM7ei5hcHBseShJLFtKLGsscSxvXSl9fWlmKGouY29tcGxldGUpe3ZhciBoPWouY29tcGxldGU7ai5jb21wbGV0ZT1mdW5jdGlvbihJLGspe3ZhciBxPWouY29udGV4dHx8dGhpcztoLmFwcGx5KHEsW0ksayxvXSl9fXZhciBEPWYoImlucHV0W3R5cGU9ZmlsZV06ZW5hYmxlZCIsdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcykudmFsKCkhPT0iIn0pO3ZhciBwPUQubGVuZ3RoPjA7dmFyIEI9Im11bHRpcGFydC9mb3JtLWRhdGEiO3ZhciB4PShvLmF0dHIoImVuY3R5cGUiKT09Qnx8by5hdHRyKCJlbmNvZGluZyIpPT1CKTt2YXIgdz1jLmZpbGVhcGkmJmMuZm9ybWRhdGE7ZCgiZmlsZUFQSSA6Iit3KTt2YXIgcj0ocHx8eCkmJiF3O3ZhciB2O2lmKGouaWZyYW1lIT09ZmFsc2UmJihqLmlmcmFtZXx8cikpe2lmKGouY2xvc2VLZWVwQWxpdmUpe2YuZ2V0KGouY2xvc2VLZWVwQWxpdmUsZnVuY3Rpb24oKXt2PUcoRil9KX1lbHNle3Y9RyhGKX19ZWxzZXtpZigocHx8eCkmJncpe3Y9dChGKX1lbHNle3Y9Zi5hamF4KGopfX1vLnJlbW92ZURhdGEoImpxeGhyIikuZGF0YSgianF4aHIiLHYpO2Zvcih2YXIgQT0wO0E8cy5sZW5ndGg7QSsrKXtzW0FdPW51bGx9dGhpcy50cmlnZ2VyKCJmb3JtLXN1Ym1pdC1ub3RpZnkiLFt0aGlzLGpdKTtyZXR1cm4gdGhpcztmdW5jdGlvbiBnKEspe3ZhciBMPWYucGFyYW0oSyxqLnRyYWRpdGlvbmFsKS5zcGxpdCgiJiIpO3ZhciBxPUwubGVuZ3RoO3ZhciBrPVtdO3ZhciBKLEk7Zm9yKEo9MDtKPHE7SisrKXtMW0pdPUxbSl0ucmVwbGFjZSgvXCsvZywiICIpO0k9TFtKXS5zcGxpdCgiPSIpO2sucHVzaChbZGVjb2RlVVJJQ29tcG9uZW50KElbMF0pLGRlY29kZVVSSUNvbXBvbmVudChJWzFdKV0pfXJldHVybiBrfWZ1bmN0aW9uIHQocSl7dmFyIGs9bmV3IEZvcm1EYXRhKCk7Zm9yKHZhciBJPTA7STxxLmxlbmd0aDtJKyspe2suYXBwZW5kKHFbSV0ubmFtZSxxW0ldLnZhbHVlKX1pZihqLmV4dHJhRGF0YSl7dmFyIEw9ZyhqLmV4dHJhRGF0YSk7Zm9yKEk9MDtJPEwubGVuZ3RoO0krKyl7aWYoTFtJXSl7ay5hcHBlbmQoTFtJXVswXSxMW0ldWzFdKX19fWouZGF0YT1udWxsO3ZhciBLPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaix7Y29udGVudFR5cGU6ZmFsc2UscHJvY2Vzc0RhdGE6ZmFsc2UsY2FjaGU6ZmFsc2UsdHlwZTppfHwiUE9TVCJ9KTtpZihqLnVwbG9hZFByb2dyZXNzKXtLLnhocj1mdW5jdGlvbigpe3ZhciBNPWYuYWpheFNldHRpbmdzLnhocigpO2lmKE0udXBsb2FkKXtNLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oUSl7dmFyIFA9MDt2YXIgTj1RLmxvYWRlZHx8US5wb3NpdGlvbjt2YXIgTz1RLnRvdGFsO2lmKFEubGVuZ3RoQ29tcHV0YWJsZSl7UD1NYXRoLmNlaWwoTi9PKjEwMCl9ai51cGxvYWRQcm9ncmVzcyhRLE4sTyxQKX0sZmFsc2UpfXJldHVybiBNfX1LLmRhdGE9bnVsbDt2YXIgSj1LLmJlZm9yZVNlbmQ7Sy5iZWZvcmVTZW5kPWZ1bmN0aW9uKE4sTSl7aWYoai5mb3JtRGF0YSl7TS5kYXRhPWouZm9ybURhdGF9ZWxzZXtNLmRhdGE9a31pZihKKXtKLmNhbGwodGhpcyxOLE0pfX07cmV0dXJuIGYuYWpheChLKX1mdW5jdGlvbiBHKGFmKXt2YXIgTD1vWzBdLEssYWIsVixhZCxZLE4sUSxPLFAsWixhYyxUO3ZhciBhaT1mLkRlZmVycmVkKCk7YWkuYWJvcnQ9ZnVuY3Rpb24oYWope08uYWJvcnQoYWopfTtpZihhZil7Zm9yKGFiPTA7YWI8cy5sZW5ndGg7YWIrKyl7Sz1mKHNbYWJdKTtpZihlKXtLLnByb3AoImRpc2FibGVkIixmYWxzZSl9ZWxzZXtLLnJlbW92ZUF0dHIoImRpc2FibGVkIil9fX1WPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaik7Vi5jb250ZXh0PVYuY29udGV4dHx8VjtZPSJqcUZvcm1JTyIrKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtpZihWLmlmcmFtZVRhcmdldCl7Tj1mKFYuaWZyYW1lVGFyZ2V0KTtaPU4uYXR0cjIoIm5hbWUiKTtpZighWil7Ti5hdHRyMigibmFtZSIsWSl9ZWxzZXtZPVp9fWVsc2V7Tj1mKCc8aWZyYW1lIG5hbWU9IicrWSsnIiBzcmM9IicrVi5pZnJhbWVTcmMrJyIgLz4nKTtOLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6Ii0xMDAwcHgiLGxlZnQ6Ii0xMDAwcHgifSl9UT1OWzBdO089e2Fib3J0ZWQ6MCxyZXNwb25zZVRleHQ6bnVsbCxyZXNwb25zZVhNTDpudWxsLHN0YXR1czowLHN0YXR1c1RleHQ6Im4vYSIsZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbigpe30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbigpe30sYWJvcnQ6ZnVuY3Rpb24oYWope3ZhciBhaz0oYWo9PT0idGltZW91dCI/InRpbWVvdXQiOiJhYm9ydGVkIik7ZCgiYWJvcnRpbmcgdXBsb2FkLi4uICIrYWspO3RoaXMuYWJvcnRlZD0xO3RyeXtpZihRLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQpe1EuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgiU3RvcCIpfX1jYXRjaChhbCl7fU4uYXR0cigic3JjIixWLmlmcmFtZVNyYyk7Ty5lcnJvcj1haztpZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYWssYWopfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixha10pfWlmKFYuY29tcGxldGUpe1YuY29tcGxldGUuY2FsbChWLmNvbnRleHQsTyxhayl9fX07YWQ9Vi5nbG9iYWw7aWYoYWQmJjA9PT1mLmFjdGl2ZSsrKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTZW5kIixbTyxWXSl9aWYoVi5iZWZvcmVTZW5kJiZWLmJlZm9yZVNlbmQuY2FsbChWLmNvbnRleHQsTyxWKT09PWZhbHNlKXtpZihWLmdsb2JhbCl7Zi5hY3RpdmUtLX1haS5yZWplY3QoKTtyZXR1cm4gYWl9aWYoTy5hYm9ydGVkKXthaS5yZWplY3QoKTtyZXR1cm4gYWl9UD1MLmNsaztpZihQKXtaPVAubmFtZTtpZihaJiYhUC5kaXNhYmxlZCl7Vi5leHRyYURhdGE9Vi5leHRyYURhdGF8fHt9O1YuZXh0cmFEYXRhW1pdPVAudmFsdWU7aWYoUC50eXBlPT0iaW1hZ2UiKXtWLmV4dHJhRGF0YVtaKyIueCJdPUwuY2xrX3g7Vi5leHRyYURhdGFbWisiLnkiXT1MLmNsa195fX19dmFyIFU9MTt2YXIgUj0yO2Z1bmN0aW9uIFMoYWwpe3ZhciBhaz1udWxsO3RyeXtpZihhbC5jb250ZW50V2luZG93KXthaz1hbC5jb250ZW50V2luZG93LmRvY3VtZW50fX1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudFdpbmRvdyBkb2N1bWVudDogIithail9aWYoYWspe3JldHVybiBha310cnl7YWs9YWwuY29udGVudERvY3VtZW50P2FsLmNvbnRlbnREb2N1bWVudDphbC5kb2N1bWVudH1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudERvY3VtZW50OiAiK2FqKTthaz1hbC5kb2N1bWVudH1yZXR1cm4gYWt9dmFyIEo9ZigibWV0YVtuYW1lPWNzcmYtdG9rZW5dIikuYXR0cigiY29udGVudCIpO3ZhciBJPWYoIm1ldGFbbmFtZT1jc3JmLXBhcmFtXSIpLmF0dHIoImNvbnRlbnQiKTtpZihJJiZKKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbSV09Sn1mdW5jdGlvbiBhYSgpe3ZhciBhbD1vLmF0dHIyKCJ0YXJnZXQiKSxhaj1vLmF0dHIyKCJhY3Rpb24iKTtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixZKTtpZighaXx8L3Bvc3QvaS50ZXN0KGkpKXtMLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwiUE9TVCIpfWlmKGFqIT1WLnVybCl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsVi51cmwpfWlmKCFWLnNraXBFbmNvZGluZ092ZXJyaWRlJiYoIWl8fC9wb3N0L2kudGVzdChpKSkpe28uYXR0cih7ZW5jb2Rpbmc6Im11bHRpcGFydC9mb3JtLWRhdGEiLGVuY3R5cGU6Im11bHRpcGFydC9mb3JtLWRhdGEifSl9aWYoVi50aW1lb3V0KXtUPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthYz10cnVlO1goVSl9LFYudGltZW91dCl9ZnVuY3Rpb24gYW0oKXt0cnl7dmFyIGFxPVMoUSkucmVhZHlTdGF0ZTtkKCJzdGF0ZSA9ICIrYXEpO2lmKGFxJiZhcS50b0xvd2VyQ2FzZSgpPT0idW5pbml0aWFsaXplZCIpe3NldFRpbWVvdXQoYW0sNTApfX1jYXRjaChhcil7ZCgiU2VydmVyIGFib3J0OiAiLGFyLCIgKCIsYXIubmFtZSwiKSIpO1goUik7aWYoVCl7Y2xlYXJUaW1lb3V0KFQpfVQ9dW5kZWZpbmVkfX12YXIgYWs9W107dHJ5e2lmKFYuZXh0cmFEYXRhKXtmb3IodmFyIGFwIGluIFYuZXh0cmFEYXRhKXtpZihWLmV4dHJhRGF0YS5oYXNPd25Qcm9wZXJ0eShhcCkpe2lmKGYuaXNQbGFpbk9iamVjdChWLmV4dHJhRGF0YVthcF0pJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoIm5hbWUiKSYmVi5leHRyYURhdGFbYXBdLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrVi5leHRyYURhdGFbYXBdLm5hbWUrJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXS52YWx1ZSkuYXBwZW5kVG8oTClbMF0pfWVsc2V7YWsucHVzaChmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInK2FwKyciPicpLnZhbChWLmV4dHJhRGF0YVthcF0pLmFwcGVuZFRvKEwpWzBdKX19fX1pZighVi5pZnJhbWVUYXJnZXQpe04uYXBwZW5kVG8oImJvZHkiKX1pZihRLmF0dGFjaEV2ZW50KXtRLmF0dGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX1zZXRUaW1lb3V0KGFtLDE1KTt0cnl7TC5zdWJtaXQoKX1jYXRjaChhbil7dmFyIGFvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5zdWJtaXQ7YW8uYXBwbHkoTCl9fWZpbmFsbHl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsYWopO2lmKGFsKXtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixhbCl9ZWxzZXtvLnJlbW92ZUF0dHIoInRhcmdldCIpfWYoYWspLnJlbW92ZSgpfX1pZihWLmZvcmNlU3luYyl7YWEoKX1lbHNle3NldFRpbWVvdXQoYWEsMTApfXZhciBhZyxhaCxhZT01MCxNO2Z1bmN0aW9uIFgoYXApe2lmKE8uYWJvcnRlZHx8TSl7cmV0dXJufWFoPVMoUSk7aWYoIWFoKXtkKCJjYW5ub3QgYWNjZXNzIHJlc3BvbnNlIGRvY3VtZW50Iik7YXA9Un1pZihhcD09PVUmJk8pe08uYWJvcnQoInRpbWVvdXQiKTthaS5yZWplY3QoTywidGltZW91dCIpO3JldHVybn1lbHNle2lmKGFwPT1SJiZPKXtPLmFib3J0KCJzZXJ2ZXIgYWJvcnQiKTthaS5yZWplY3QoTywiZXJyb3IiLCJzZXJ2ZXIgYWJvcnQiKTtyZXR1cm59fWlmKCFhaHx8YWgubG9jYXRpb24uaHJlZj09Vi5pZnJhbWVTcmMpe2lmKCFhYyl7cmV0dXJufX1pZihRLmRldGFjaEV2ZW50KXtRLmRldGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX12YXIgYW49InN1Y2Nlc3MiLGFyO3RyeXtpZihhYyl7dGhyb3cidGltZW91dCJ9dmFyIGFtPVYuZGF0YVR5cGU9PSJ4bWwifHxhaC5YTUxEb2N1bWVudHx8Zi5pc1hNTERvYyhhaCk7ZCgiaXNYbWw9IithbSk7aWYoIWFtJiZ3aW5kb3cub3BlcmEmJihhaC5ib2R5PT09bnVsbHx8IWFoLmJvZHkuaW5uZXJIVE1MKSl7aWYoLS1hZSl7ZCgicmVxdWVpbmcgb25Mb2FkIGNhbGxiYWNrLCBET00gbm90IGF2YWlsYWJsZSIpO3NldFRpbWVvdXQoWCwyNTApO3JldHVybn19dmFyIGF0PWFoLmJvZHk/YWguYm9keTphaC5kb2N1bWVudEVsZW1lbnQ7Ty5yZXNwb25zZVRleHQ9YXQ/YXQuaW5uZXJIVE1MOm51bGw7Ty5yZXNwb25zZVhNTD1haC5YTUxEb2N1bWVudD9haC5YTUxEb2N1bWVudDphaDtpZihhbSl7Vi5kYXRhVHlwZT0ieG1sIn1PLmdldFJlc3BvbnNlSGVhZGVyPWZ1bmN0aW9uKGF3KXt2YXIgYXY9eyJjb250ZW50LXR5cGUiOlYuZGF0YVR5cGV9O3JldHVybiBhdlthdy50b0xvd2VyQ2FzZSgpXX07aWYoYXQpe08uc3RhdHVzPU51bWJlcihhdC5nZXRBdHRyaWJ1dGUoInN0YXR1cyIpKXx8Ty5zdGF0dXM7Ty5zdGF0dXNUZXh0PWF0LmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxPLnN0YXR1c1RleHR9dmFyIGFqPShWLmRhdGFUeXBlfHwiIikudG9Mb3dlckNhc2UoKTt2YXIgYXE9Lyhqc29ufHNjcmlwdHx0ZXh0KS8udGVzdChhaik7aWYoYXF8fFYudGV4dGFyZWEpe3ZhciBhbz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGV4dGFyZWEiKVswXTtpZihhbyl7Ty5yZXNwb25zZVRleHQ9YW8udmFsdWU7Ty5zdGF0dXM9TnVtYmVyKGFvLmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YW8uZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH1lbHNle2lmKGFxKXt2YXIgYWs9YWguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpWzBdO3ZhciBhdT1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKGFrKXtPLnJlc3BvbnNlVGV4dD1hay50ZXh0Q29udGVudD9hay50ZXh0Q29udGVudDphay5pbm5lclRleHR9ZWxzZXtpZihhdSl7Ty5yZXNwb25zZVRleHQ9YXUudGV4dENvbnRlbnQ/YXUudGV4dENvbnRlbnQ6YXUuaW5uZXJUZXh0fX19fX1lbHNle2lmKGFqPT0ieG1sIiYmIU8ucmVzcG9uc2VYTUwmJk8ucmVzcG9uc2VUZXh0KXtPLnJlc3BvbnNlWE1MPVcoTy5yZXNwb25zZVRleHQpfX10cnl7YWc9ayhPLGFqLFYpfWNhdGNoKGFsKXthbj0icGFyc2VyZXJyb3IiO08uZXJyb3I9YXI9KGFsfHxhbil9fWNhdGNoKGFsKXtkKCJlcnJvciBjYXVnaHQ6ICIsYWwpO2FuPSJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX1pZihPLmFib3J0ZWQpe2QoInVwbG9hZCBhYm9ydGVkIik7YW49bnVsbH1pZihPLnN0YXR1cyl7YW49KE8uc3RhdHVzPj0yMDAmJk8uc3RhdHVzPDMwMHx8Ty5zdGF0dXM9PT0zMDQpPyJzdWNjZXNzIjoiZXJyb3IifWlmKGFuPT09InN1Y2Nlc3MiKXtpZihWLnN1Y2Nlc3Mpe1Yuc3VjY2Vzcy5jYWxsKFYuY29udGV4dCxhZywic3VjY2VzcyIsTyl9YWkucmVzb2x2ZShPLnJlc3BvbnNlVGV4dCwic3VjY2VzcyIsTyk7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN1Y2Nlc3MiLFtPLFZdKX19ZWxzZXtpZihhbil7aWYoYXI9PT11bmRlZmluZWQpe2FyPU8uc3RhdHVzVGV4dH1pZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYW4sYXIpfWFpLnJlamVjdChPLCJlcnJvciIsYXIpO2lmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixhcl0pfX19aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbTyxWXSl9aWYoYWQmJiEtLWYuYWN0aXZlKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFuKX1NPXRydWU7aWYoVi50aW1lb3V0KXtjbGVhclRpbWVvdXQoVCl9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFWLmlmcmFtZVRhcmdldCl7Ti5yZW1vdmUoKX1lbHNle04uYXR0cigic3JjIixWLmlmcmFtZVNyYyl9Ty5yZXNwb25zZVhNTD1udWxsfSwxMDApfXZhciBXPWYucGFyc2VYTUx8fGZ1bmN0aW9uKGFqLGFrKXtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7YWs9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKTthay5hc3luYz0iZmFsc2UiO2FrLmxvYWRYTUwoYWopfWVsc2V7YWs9KG5ldyBET01QYXJzZXIoKSkucGFyc2VGcm9tU3RyaW5nKGFqLCJ0ZXh0L3htbCIpfXJldHVybihhayYmYWsuZG9jdW1lbnRFbGVtZW50JiZhay5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUhPSJwYXJzZXJlcnJvciIpP2FrOm51bGx9O3ZhciBxPWYucGFyc2VKU09OfHxmdW5jdGlvbihhail7cmV0dXJuIHdpbmRvd1siZXZhbCJdKCIoIithaisiKSIpfTt2YXIgaz1mdW5jdGlvbihhbyxhbSxhbCl7dmFyIGFrPWFvLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKXx8IiIsYWo9YW09PT0ieG1sInx8IWFtJiZhay5pbmRleE9mKCJ4bWwiKT49MCxhbj1haj9hby5yZXNwb25zZVhNTDphby5yZXNwb25zZVRleHQ7aWYoYWomJmFuLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZT09PSJwYXJzZXJlcnJvciIpe2lmKGYuZXJyb3Ipe2YuZXJyb3IoInBhcnNlcmVycm9yIil9fWlmKGFsJiZhbC5kYXRhRmlsdGVyKXthbj1hbC5kYXRhRmlsdGVyKGFuLGFtKX1pZih0eXBlb2YgYW49PT0ic3RyaW5nIil7aWYoYW09PT0ianNvbiJ8fCFhbSYmYWsuaW5kZXhPZigianNvbiIpPj0wKXthbj1xKGFuKX1lbHNle2lmKGFtPT09InNjcmlwdCJ8fCFhbSYmYWsuaW5kZXhPZigiamF2YXNjcmlwdCIpPj0wKXtmLmdsb2JhbEV2YWwoYW4pfX19cmV0dXJuIGFufTtyZXR1cm4gYWl9fTtmLmZuLmFqYXhGb3JtPWZ1bmN0aW9uKGcpe2c9Z3x8e307Zy5kZWxlZ2F0aW9uPWcuZGVsZWdhdGlvbiYmZi5pc0Z1bmN0aW9uKGYuZm4ub24pO2lmKCFnLmRlbGVnYXRpb24mJnRoaXMubGVuZ3RoPT09MCl7dmFyIGg9e3M6dGhpcy5zZWxlY3RvcixjOnRoaXMuY29udGV4dH07aWYoIWYuaXNSZWFkeSYmaC5zKXtkKCJET00gbm90IHJlYWR5LCBxdWV1aW5nIGFqYXhGb3JtIik7ZihmdW5jdGlvbigpe2YoaC5zLGguYykuYWpheEZvcm0oZyl9KTtyZXR1cm4gdGhpc31kKCJ0ZXJtaW5hdGluZzsgemVybyBlbGVtZW50cyBmb3VuZCBieSBzZWxlY3RvciIrKGYuaXNSZWFkeT8iIjoiIChET00gbm90IHJlYWR5KSIpKTtyZXR1cm4gdGhpc31pZihnLmRlbGVnYXRpb24pe2YoZG9jdW1lbnQpLm9mZigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGIpLm9mZigiY2xpY2suZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYSkub24oInN1Ym1pdC5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGIpLm9uKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGEpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIixnLGIpLmJpbmQoImNsaWNrLmZvcm0tcGx1Z2luIixnLGEpfTtmdW5jdGlvbiBiKGgpe3ZhciBnPWguZGF0YTtpZighaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aC5wcmV2ZW50RGVmYXVsdCgpO2YoaC50YXJnZXQpLmFqYXhTdWJtaXQoZyl9fWZ1bmN0aW9uIGEoayl7dmFyIGo9ay50YXJnZXQ7dmFyIGg9ZihqKTtpZighKGguaXMoIlt0eXBlPXN1Ym1pdF0sW3R5cGU9aW1hZ2VdIikpKXt2YXIgZz1oLmNsb3Nlc3QoIlt0eXBlPXN1Ym1pdF0iKTtpZihnLmxlbmd0aD09PTApe3JldHVybn1qPWdbMF19dmFyIGk9dGhpcztpLmNsaz1qO2lmKGoudHlwZT09ImltYWdlIil7aWYoay5vZmZzZXRYIT09dW5kZWZpbmVkKXtpLmNsa194PWsub2Zmc2V0WDtpLmNsa195PWsub2Zmc2V0WX1lbHNle2lmKHR5cGVvZiBmLmZuLm9mZnNldD09ImZ1bmN0aW9uIil7dmFyIGw9aC5vZmZzZXQoKTtpLmNsa194PWsucGFnZVgtbC5sZWZ0O2kuY2xrX3k9ay5wYWdlWS1sLnRvcH1lbHNle2kuY2xrX3g9ay5wYWdlWC1qLm9mZnNldExlZnQ7aS5jbGtfeT1rLnBhZ2VZLWoub2Zmc2V0VG9wfX19c2V0VGltZW91dChmdW5jdGlvbigpe2kuY2xrPWkuY2xrX3g9aS5jbGtfeT1udWxsfSwxMDApfWYuZm4uYWpheEZvcm1VbmJpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoInN1Ym1pdC5mb3JtLXBsdWdpbiBjbGljay5mb3JtLXBsdWdpbiIpfTtmLmZuLmZvcm1Ub0FycmF5PWZ1bmN0aW9uKHgsZyl7dmFyIHc9W107aWYodGhpcy5sZW5ndGg9PT0wKXtyZXR1cm4gd312YXIgbD10aGlzWzBdO3ZhciBwPXg/bC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOmwuZWxlbWVudHM7aWYoIXApe3JldHVybiB3fXZhciByLHEsbyx5LG0sdCxrO2ZvcihyPTAsdD1wLmxlbmd0aDtyPHQ7cisrKXttPXBbcl07bz1tLm5hbWU7aWYoIW98fG0uZGlzYWJsZWQpe2NvbnRpbnVlfWlmKHgmJmwuY2xrJiZtLnR5cGU9PSJpbWFnZSIpe2lmKGwuY2xrPT1tKXt3LnB1c2goe25hbWU6byx2YWx1ZTpmKG0pLnZhbCgpLHR5cGU6bS50eXBlfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfWNvbnRpbnVlfXk9Zi5maWVsZFZhbHVlKG0sdHJ1ZSk7aWYoeSYmeS5jb25zdHJ1Y3Rvcj09QXJyYXkpe2lmKGcpe2cucHVzaChtKX1mb3IocT0wLGs9eS5sZW5ndGg7cTxrO3ErKyl7dy5wdXNoKHtuYW1lOm8sdmFsdWU6eVtxXX0pfX1lbHNle2lmKGMuZmlsZWFwaSYmbS50eXBlPT0iZmlsZSIpe2lmKGcpe2cucHVzaChtKX12YXIgaD1tLmZpbGVzO2lmKGgubGVuZ3RoKXtmb3IocT0wO3E8aC5sZW5ndGg7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTpoW3FdLHR5cGU6bS50eXBlfSl9fWVsc2V7dy5wdXNoKHtuYW1lOm8sdmFsdWU6IiIsdHlwZTptLnR5cGV9KX19ZWxzZXtpZih5IT09bnVsbCYmdHlwZW9mIHkhPSJ1bmRlZmluZWQiKXtpZihnKXtnLnB1c2gobSl9dy5wdXNoKHtuYW1lOm8sdmFsdWU6eSx0eXBlOm0udHlwZSxyZXF1aXJlZDptLnJlcXVpcmVkfSl9fX19aWYoIXgmJmwuY2xrKXt2YXIgcz1mKGwuY2xrKSx1PXNbMF07bz11Lm5hbWU7aWYobyYmIXUuZGlzYWJsZWQmJnUudHlwZT09ImltYWdlIil7dy5wdXNoKHtuYW1lOm8sdmFsdWU6cy52YWwoKX0pO3cucHVzaCh7bmFtZTpvKyIueCIsdmFsdWU6bC5jbGtfeH0se25hbWU6bysiLnkiLHZhbHVlOmwuY2xrX3l9KX19cmV0dXJuIHd9O2YuZm4uZm9ybVNlcmlhbGl6ZT1mdW5jdGlvbihnKXtyZXR1cm4gZi5wYXJhbSh0aGlzLmZvcm1Ub0FycmF5KGcpKX07Zi5mbi5maWVsZFNlcmlhbGl6ZT1mdW5jdGlvbihoKXt2YXIgZz1bXTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5hbWU7aWYoIW0pe3JldHVybn12YXIgaz1mLmZpZWxkVmFsdWUodGhpcyxoKTtpZihrJiZrLmNvbnN0cnVjdG9yPT1BcnJheSl7Zm9yKHZhciBsPTAsaj1rLmxlbmd0aDtsPGo7bCsrKXtnLnB1c2goe25hbWU6bSx2YWx1ZTprW2xdfSl9fWVsc2V7aWYoayE9PW51bGwmJnR5cGVvZiBrIT0idW5kZWZpbmVkIil7Zy5wdXNoKHtuYW1lOnRoaXMubmFtZSx2YWx1ZTprfSl9fX0pO3JldHVybiBmLnBhcmFtKGcpfTtmLmZuLmZpZWxkVmFsdWU9ZnVuY3Rpb24obSl7Zm9yKHZhciBsPVtdLGo9MCxnPXRoaXMubGVuZ3RoO2o8ZztqKyspe3ZhciBrPXRoaXNbal07dmFyIGg9Zi5maWVsZFZhbHVlKGssbSk7aWYoaD09PW51bGx8fHR5cGVvZiBoPT0idW5kZWZpbmVkInx8KGguY29uc3RydWN0b3I9PUFycmF5JiYhaC5sZW5ndGgpKXtjb250aW51ZX1pZihoLmNvbnN0cnVjdG9yPT1BcnJheSl7Zi5tZXJnZShsLGgpfWVsc2V7bC5wdXNoKGgpfX1yZXR1cm4gbH07Zi5maWVsZFZhbHVlPWZ1bmN0aW9uKGcsbyl7dmFyIGo9Zy5uYW1lLHU9Zy50eXBlLHc9Zy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYobz09PXVuZGVmaW5lZCl7bz10cnVlfWlmKG8mJighanx8Zy5kaXNhYmxlZHx8dT09InJlc2V0Inx8dT09ImJ1dHRvbiJ8fCh1PT0iY2hlY2tib3gifHx1PT0icmFkaW8iKSYmIWcuY2hlY2tlZHx8KHU9PSJzdWJtaXQifHx1PT0iaW1hZ2UiKSYmZy5mb3JtJiZnLmZvcm0uY2xrIT1nfHx3PT0ic2VsZWN0IiYmZy5zZWxlY3RlZEluZGV4PT0tMSkpe3JldHVybiBudWxsfWlmKHc9PSJzZWxlY3QiKXt2YXIgcD1nLnNlbGVjdGVkSW5kZXg7aWYocDwwKXtyZXR1cm4gbnVsbH12YXIgcj1bXSxoPWcub3B0aW9uczt2YXIgbD0odT09InNlbGVjdC1vbmUiKTt2YXIgcT0obD9wKzE6aC5sZW5ndGgpO2Zvcih2YXIgaz0obD9wOjApO2s8cTtrKyspe3ZhciBtPWhba107aWYobS5zZWxlY3RlZCl7dmFyIHM9bS52YWx1ZTtpZighcyl7cz0obS5hdHRyaWJ1dGVzJiZtLmF0dHJpYnV0ZXMudmFsdWUmJiEobS5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZCkpP20udGV4dDptLnZhbHVlfWlmKGwpe3JldHVybiBzfXIucHVzaChzKX19cmV0dXJuIHJ9cmV0dXJuIGYoZykudmFsKCl9O2YuZm4uY2xlYXJGb3JtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKCJpbnB1dCxzZWxlY3QsdGV4dGFyZWEiLHRoaXMpLmNsZWFyRmllbGRzKGcpfSl9O2YuZm4uY2xlYXJGaWVsZHM9Zi5mbi5jbGVhcklucHV0cz1mdW5jdGlvbihnKXt2YXIgaD0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy50eXBlLGk9dGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoaC50ZXN0KGopfHxpPT0idGV4dGFyZWEiKXt0aGlzLnZhbHVlPSIifWVsc2V7aWYoaj09ImNoZWNrYm94Inx8aj09InJhZGlvIil7dGhpcy5jaGVja2VkPWZhbHNlfWVsc2V7aWYoaT09InNlbGVjdCIpe3RoaXMuc2VsZWN0ZWRJbmRleD0tMX1lbHNle2lmKGo9PSJmaWxlIil7aWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpe2YodGhpcykucmVwbGFjZVdpdGgoZih0aGlzKS5jbG9uZSh0cnVlKSl9ZWxzZXtmKHRoaXMpLnZhbCgiIil9fWVsc2V7aWYoZyl7aWYoKGc9PT10cnVlJiYvaGlkZGVuLy50ZXN0KGopKXx8KHR5cGVvZiBnPT0ic3RyaW5nIiYmZih0aGlzKS5pcyhnKSkpe3RoaXMudmFsdWU9IiJ9fX19fX19KX07Zi5mbi5yZXNldEZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMucmVzZXQ9PSJmdW5jdGlvbiJ8fCh0eXBlb2YgdGhpcy5yZXNldD09Im9iamVjdCImJiF0aGlzLnJlc2V0Lm5vZGVUeXBlKSl7dGhpcy5yZXNldCgpfX0pfTtmLmZuLmVuYWJsZT1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9IWd9KX07Zi5mbi5zZWxlY3RlZD1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXRoaXMudHlwZTtpZihoPT0iY2hlY2tib3gifHxoPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9Z31lbHNle2lmKHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ib3B0aW9uIil7dmFyIGk9Zih0aGlzKS5wYXJlbnQoInNlbGVjdCIpO2lmKGcmJmlbMF0mJmlbMF0udHlwZT09InNlbGVjdC1vbmUiKXtpLmZpbmQoIm9wdGlvbiIpLnNlbGVjdGVkKGZhbHNlKX10aGlzLnNlbGVjdGVkPWd9fX0pfTtmLmZuLmFqYXhTdWJtaXQuZGVidWc9ZmFsc2U7ZnVuY3Rpb24gZCgpe2lmKCFmLmZuLmFqYXhTdWJtaXQuZGVidWcpe3JldHVybn12YXIgZz0iW2pxdWVyeS5mb3JtXSAiK0FycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKTtpZih3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nKXt3aW5kb3cuY29uc29sZS5sb2coZyl9ZWxzZXtpZih3aW5kb3cub3BlcmEmJndpbmRvdy5vcGVyYS5wb3N0RXJyb3Ipe3dpbmRvdy5vcGVyYS5wb3N0RXJyb3IoZyl9fX19KSk7UEsHCHYQEAGjPgAAoz4AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xsaWJcbWFya2VkLm1pbi5qcyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9e30sdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5ydWxlcz1hLm5vcm1hbCx0aGlzLm9wdGlvbnMuZ2ZtJiYodGhpcy5ydWxlcz10aGlzLm9wdGlvbnMudGFibGVzP2EudGFibGVzOmEuZ2ZtKX1mdW5jdGlvbiB0KGUsdCl7aWYodGhpcy5vcHRpb25zPXR8fGguZGVmYXVsdHMsdGhpcy5saW5rcz1lLHRoaXMucnVsZXM9dS5ub3JtYWwsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBuLCF0aGlzLmxpbmtzKXRocm93IG5ldyBFcnJvcigiVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4iKTt0aGlzLm9wdGlvbnMuZ2ZtP3RoaXMucnVsZXM9dGhpcy5vcHRpb25zLmJyZWFrcz91LmJyZWFrczp1LmdmbTp0aGlzLm9wdGlvbnMucGVkYW50aWMmJih0aGlzLnJ1bGVzPXUucGVkYW50aWMpfWZ1bmN0aW9uIG4oKXt9ZnVuY3Rpb24gcihlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlLnJlcGxhY2UodD8vJi9nOi8mKD8hIz9cdys7KS9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCImIzM5OyIpfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZT1lLnNvdXJjZSx0PXR8fCIiLGZ1bmN0aW9uIG4ocixzKXtyZXR1cm4gcj8ocz1zLnNvdXJjZXx8cyxzPXMucmVwbGFjZSgvKF58W15cW10pXF4vZywiJDEiKSxlPWUucmVwbGFjZShyLHMpLG4pOm5ldyBSZWdFeHAoZSx0KX19ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdCxuLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt0PWFyZ3VtZW50c1tyXTtmb3IobiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX1yZXR1cm4gZX1mdW5jdGlvbiBoKHQsbixpKXtpZihpfHwiZnVuY3Rpb24iPT10eXBlb2Ygbil7aXx8KGk9bixuPW51bGwpLG49byh7fSxoLmRlZmF1bHRzLG58fHt9KTt2YXIgbCxhLHU9bi5oaWdobGlnaHQscD0wO3RyeXtsPWUubGV4KHQsbil9Y2F0Y2goYyl7cmV0dXJuIGkoYyl9YT1sLmxlbmd0aDt2YXIgZz1mdW5jdGlvbigpe3ZhciBlLHQ7dHJ5e2U9ci5wYXJzZShsLG4pfWNhdGNoKHMpe3Q9c31yZXR1cm4gbi5oaWdobGlnaHQ9dSx0P2kodCk6aShudWxsLGUpfTtpZighdXx8dS5sZW5ndGg8MylyZXR1cm4gZygpO2lmKGRlbGV0ZSBuLmhpZ2hsaWdodCwhYSlyZXR1cm4gZygpO2Zvcig7cDxsLmxlbmd0aDtwKyspIWZ1bmN0aW9uKGUpe3JldHVybiJjb2RlIiE9PWUudHlwZT8tLWF8fGcoKTp1KGUudGV4dCxlLmxhbmcsZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09bnx8bj09PWUudGV4dD8tLWF8fGcoKTooZS50ZXh0PW4sZS5lc2NhcGVkPSEwLC0tYXx8ZygpLHZvaWQgMCl9KX0obFtwXSl9ZWxzZSB0cnl7cmV0dXJuIG4mJihuPW8oe30saC5kZWZhdWx0cyxuKSksci5wYXJzZShlLmxleCh0LG4pLG4pfWNhdGNoKGMpe2lmKGMubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGpqL21hcmtlZC4iLChufHxoLmRlZmF1bHRzKS5zaWxlbnQpcmV0dXJuIjxwPkFuIGVycm9yIG9jY3VyZWQ6PC9wPjxwcmU+IitzKGMubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7dGhyb3cgY319dmFyIGE9e25ld2xpbmU6L15cbisvLGNvZGU6L14oIHs0fVteXG5dK1xuKikrLyxmZW5jZXM6bCxocjovXiggKlstKl9dKXszLH0gKig/OlxuK3wkKS8saGVhZGluZzovXiAqKCN7MSw2fSkgKihbXlxuXSs/KSAqIyogKig/OlxuK3wkKS8sbnB0YWJsZTpsLGxoZWFkaW5nOi9eKFteXG5dKylcbiAqKD18LSl7Mix9ICooPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oICo+W15cbl0rKFxuW15cbl0rKSpcbiopKy8sbGlzdDovXiggKikoYnVsbCkgW1xzXFNdKz8oPzpocnxcbnsyLH0oPyEgKSg/IVwxYnVsbCApXG4qfFxzKiQpLyxodG1sOi9eICooPzpjb21tZW50fGNsb3NlZHxjbG9zaW5nKSAqKD86XG57Mix9fFxzKiQpLyxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogK1siKF0oW15cbl0rKVsiKV0pPyAqKD86XG4rfCQpLyx0YWJsZTpsLHBhcmFncmFwaDovXigoPzpbXlxuXStcbj8oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8dGFnfGRlZikpKylcbiovLHRleHQ6L15bXlxuXSsvfTthLmJ1bGxldD0vKD86WyorLV18XGQrXC4pLyxhLml0ZW09L14oICopKGJ1bGwpIFteXG5dKig/OlxuKD8hXDFidWxsIClbXlxuXSopKi8sYS5pdGVtPWkoYS5pdGVtLCJnbSIpKC9idWxsL2csYS5idWxsZXQpKCksYS5saXN0PWkoYS5saXN0KSgvYnVsbC9nLGEuYnVsbGV0KSgiaHIiLC9cbisoPz0oPzogKlstKl9dKXszLH0gKig/OlxuK3wkKSkvKSgpLGEuX3RhZz0iKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6L3xAKVxcYiIsYS5odG1sPWkoYS5odG1sKSgiY29tbWVudCIsLzwhLS1bXHNcU10qPy0tPi8pKCJjbG9zZWQiLC88KHRhZylbXHNcU10rPzxcL1wxPi8pKCJjbG9zaW5nIiwvPHRhZyg/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPl0pKj8+LykoL3RhZy9nLGEuX3RhZykoKSxhLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiaHIiLGEuaHIpKCJoZWFkaW5nIixhLmhlYWRpbmcpKCJsaGVhZGluZyIsYS5saGVhZGluZykoImJsb2NrcXVvdGUiLGEuYmxvY2txdW90ZSkoInRhZyIsIjwiK2EuX3RhZykoImRlZiIsYS5kZWYpKCksYS5ub3JtYWw9byh7fSxhKSxhLmdmbT1vKHt9LGEubm9ybWFsLHtmZW5jZXM6L14gKihgezMsfXx+ezMsfSkgKihcUyspPyAqXG4oW1xzXFNdKz8pXHMqXDEgKig/OlxuK3wkKS8scGFyYWdyYXBoOi9eL30pLGEuZ2ZtLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiKD8hIiwiKD8hIithLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMiIpKyJ8IithLmxpc3Quc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMyIpKyJ8IikoKSxhLnRhYmxlcz1vKHt9LGEuZ2ZtLHtucHRhYmxlOi9eICooXFMuKlx8LiopXG4gKihbLTpdKyAqXHxbLXwgOl0qKVxuKCg/Oi4qXHwuKig/OlxufCQpKSopXG4qLyx0YWJsZTovXiAqXHwoLispXG4gKlx8KCAqWy06XStbLXwgOl0qKVxuKCg/OiAqXHwuKig/OlxufCQpKSopXG4qL30pLGUucnVsZXM9YSxlLmxleD1mdW5jdGlvbih0LG4pe3ZhciByPW5ldyBlKG4pO3JldHVybiByLmxleCh0KX0sZS5wcm90b3R5cGUubGV4PWZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9cdTAwYTAvZywiICIpLnJlcGxhY2UoL1x1MjQyNC9nLCJcbiIpLHRoaXMudG9rZW4oZSwhMCl9LGUucHJvdG90eXBlLnRva2VuPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIscyxpLGwsbyxoLHUscCxlPWUucmVwbGFjZSgvXiArJC9nbSwiIik7ZTspaWYoKHM9dGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoZSkpJiYoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksc1swXS5sZW5ndGg+MSYmdGhpcy50b2tlbnMucHVzaCh7dHlwZToic3BhY2UifSkpLHM9dGhpcy5ydWxlcy5jb2RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCkscz1zWzBdLnJlcGxhY2UoL14gezR9L2dtLCIiKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9zOnMucmVwbGFjZSgvXG4rJC8sIiIpfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuZmVuY2VzLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiY29kZSIsbGFuZzpzWzJdLHRleHQ6c1szXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDpzWzFdLmxlbmd0aCx0ZXh0OnNbMl19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMubnB0YWJsZS5leGVjKGUpKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLG89e3R5cGU6InRhYmxlIixoZWFkZXI6c1sxXS5yZXBsYWNlKC9eICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksYWxpZ246c1syXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGNlbGxzOnNbM10ucmVwbGFjZSgvXG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnNwbGl0KC8gKlx8ICovKTt0aGlzLnRva2Vucy5wdXNoKG8pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmxoZWFkaW5nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiaGVhZGluZyIsZGVwdGg6Ij0iPT09c1syXT8xOjIsdGV4dDpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaHIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJociJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9zdGFydCJ9KSxzPXNbMF0ucmVwbGFjZSgvXiAqPiA/L2dtLCIiKSx0aGlzLnRva2VuKHMsdCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9lbmQifSk7ZWxzZSBpZihzPXRoaXMucnVsZXMubGlzdC5leGVjKGUpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksaT1zWzJdLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3Rfc3RhcnQiLG9yZGVyZWQ6aS5sZW5ndGg+MX0pLHM9c1swXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pLG49ITEscD1zLmxlbmd0aCx1PTA7cD51O3UrKylvPXNbdV0saD1vLmxlbmd0aCxvPW8ucmVwbGFjZSgvXiAqKFsqKy1dfFxkK1wuKSArLywiIiksfm8uaW5kZXhPZigiXG4gIikmJihoLT1vLmxlbmd0aCxvPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9vLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpOm8ucmVwbGFjZShuZXcgUmVnRXhwKCJeIHsxLCIraCsifSIsImdtIiksIiIpKSx0aGlzLm9wdGlvbnMuc21hcnRMaXN0cyYmdSE9PXAtMSYmKGw9YS5idWxsZXQuZXhlYyhzW3UrMV0pWzBdLGk9PT1sfHxpLmxlbmd0aD4xJiZsLmxlbmd0aD4xfHwoZT1zLnNsaWNlKHUrMSkuam9pbigiXG4iKStlLHU9cC0xKSkscj1ufHwvXG5cbig/IVxzKiQpLy50ZXN0KG8pLHUhPT1wLTEmJihuPSJcbiI9PT1vLmNoYXJBdChvLmxlbmd0aC0xKSxyfHwocj1uKSksdGhpcy50b2tlbnMucHVzaCh7dHlwZTpyPyJsb29zZV9pdGVtX3N0YXJ0IjoibGlzdF9pdGVtX3N0YXJ0In0pLHRoaXMudG9rZW4obywhMSksdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9pdGVtX2VuZCJ9KTt0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2VuZCJ9KX1lbHNlIGlmKHM9dGhpcy5ydWxlcy5odG1sLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InBhcmFncmFwaCI6Imh0bWwiLHByZToicHJlIj09PXNbMV18fCJzY3JpcHQiPT09c1sxXXx8InN0eWxlIj09PXNbMV0sdGV4dDpzWzBdfSk7ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLmRlZi5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5saW5rc1tzWzFdLnRvTG93ZXJDYXNlKCldPXtocmVmOnNbMl0sdGl0bGU6c1szXX07ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC8oPzogKlx8ICopP1xuJC8sIiIpLnNwbGl0KCJcbiIpfSx1PTA7dTxvLmFsaWduLmxlbmd0aDt1Kyspby5hbGlnblt1XT0vXiAqLSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChvLmFsaWduW3VdKT8ibGVmdCI6bnVsbDtmb3IodT0wO3U8by5jZWxscy5sZW5ndGg7dSsrKW8uY2VsbHNbdV09by5jZWxsc1t1XS5yZXBsYWNlKC9eICpcfCAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJwYXJhZ3JhcGgiLHRleHQ6IlxuIj09PXNbMV0uY2hhckF0KHNbMV0ubGVuZ3RoLTEpP3NbMV0uc2xpY2UoMCwtMSk6c1sxXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJ0ZXh0Iix0ZXh0OnNbMF19KTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gdGhpcy50b2tlbnN9O3ZhciB1PXtlc2NhcGU6L15cXChbXFxgKnt9XFtcXSgpIytcLS4hXz5dKS8sYXV0b2xpbms6L148KFteID5dKyhAfDpcLylbXiA+XSspPi8sdXJsOmwsdGFnOi9ePCEtLVtcc1xTXSo/LS0+fF48XC8/XHcrKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vLGxpbms6L14hP1xbKGluc2lkZSlcXVwoaHJlZlwpLyxyZWZsaW5rOi9eIT9cWyhpbnNpZGUpXF1ccypcWyhbXlxdXSopXF0vLG5vbGluazovXiE/XFsoKD86XFtbXlxdXSpcXXxbXlxbXF1dKSopXF0vLHN0cm9uZzovXl9fKFtcc1xTXSs/KV9fKD8hXyl8XlwqXCooW1xzXFNdKz8pXCpcKig/IVwqKS8sZW06L15cYl8oKD86X198W1xzXFNdKSs/KV9cYnxeXCooKD86XCpcKnxbXHNcU10pKz8pXCooPyFcKikvLGNvZGU6L14oYCspXHMqKFtcc1xTXSo/W15gXSlccypcMSg/IWApLyxicjovXiB7Mix9XG4oPyFccyokKS8sZGVsOmwsdGV4dDovXltcc1xTXSs/KD89W1xcPCFcW18qYF18IHsyLH1cbnwkKS99O3UuX2luc2lkZT0vKD86XFtbXlxdXSpcXXxbXlxbXF1dfFxdKD89W15cW10qXF0pKSovLHUuX2hyZWY9L1xzKjw/KFtcc1xTXSo/KT4/KD86XHMrWyciXShbXHNcU10qPylbJyJdKT9ccyovLHUubGluaz1pKHUubGluaykoImluc2lkZSIsdS5faW5zaWRlKSgiaHJlZiIsdS5faHJlZikoKSx1LnJlZmxpbms9aSh1LnJlZmxpbmspKCJpbnNpZGUiLHUuX2luc2lkZSkoKSx1Lm5vcm1hbD1vKHt9LHUpLHUucGVkYW50aWM9byh7fSx1Lm5vcm1hbCx7c3Ryb25nOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW06L15fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pfF5cKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopL30pLHUuZ2ZtPW8oe30sdS5ub3JtYWwse2VzY2FwZTppKHUuZXNjYXBlKSgiXSkiLCJ+fF0pIikoKSx1cmw6L14oaHR0cHM/OlwvXC9bXlxzPF0rW148Liw6OyInKVxdXHNdKS8sZGVsOi9efn4oPz1cUykoW1xzXFNdKj9cUyl+fi8sdGV4dDppKHUudGV4dCkoIl18Iiwifl18IikoInwiLCJ8aHR0cHM/Oi8vfCIpKCl9KSx1LmJyZWFrcz1vKHt9LHUuZ2ZtLHticjppKHUuYnIpKCJ7Mix9IiwiKiIpKCksdGV4dDppKHUuZ2ZtLnRleHQpKCJ7Mix9IiwiKiIpKCl9KSx0LnJ1bGVzPXUsdC5vdXRwdXQ9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzPW5ldyB0KG4scik7cmV0dXJuIHMub3V0cHV0KGUpfSx0LnByb3RvdHlwZS5vdXRwdXQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpLGw9IiI7ZTspaWYoaT10aGlzLnJ1bGVzLmVzY2FwZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPWlbMV07ZWxzZSBpZihpPXRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSwiQCI9PT1pWzJdPyhuPSI6Ij09PWlbMV0uY2hhckF0KDYpP3RoaXMubWFuZ2xlKGlbMV0uc3Vic3RyaW5nKDcpKTp0aGlzLm1hbmdsZShpWzFdKSxyPXRoaXMubWFuZ2xlKCJtYWlsdG86Iikrbik6KG49cyhpWzFdKSxyPW4pLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudXJsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbj1zKGlbMV0pLHI9bixsKz10aGlzLnJlbmRlcmVyLmxpbmsocixudWxsLG4pO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRhZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3B0aW9ucy5zYW5pdGl6ZT9zKGlbMF0pOmlbMF07ZWxzZSBpZihpPXRoaXMucnVsZXMubGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3V0cHV0TGluayhpLHtocmVmOmlbMl0sdGl0bGU6aVszXX0pO2Vsc2UgaWYoKGk9dGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoZSkpfHwoaT10aGlzLnJ1bGVzLm5vbGluay5leGVjKGUpKSl7aWYoZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdD0oaVsyXXx8aVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSx0PXRoaXMubGlua3NbdC50b0xvd2VyQ2FzZSgpXSwhdHx8IXQuaHJlZil7bCs9aVswXS5jaGFyQXQoMCksZT1pWzBdLnN1YnN0cmluZygxKStlO2NvbnRpbnVlfWwrPXRoaXMub3V0cHV0TGluayhpLHQpfWVsc2UgaWYoaT10aGlzLnJ1bGVzLnN0cm9uZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuc3Ryb25nKHRoaXMub3V0cHV0KGlbMl18fGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5lbS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZW0odGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmNvZGVzcGFuKHMoaVsyXSwhMCkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmJyLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5icigpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmRlbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZGVsKHRoaXMub3V0cHV0KGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy50ZXh0LmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9cyh0aGlzLnNtYXJ0eXBhbnRzKGlbMF0pKTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gbH0sdC5wcm90b3R5cGUub3V0cHV0TGluaz1mdW5jdGlvbihlLHQpe3ZhciBuPXModC5ocmVmKSxyPXQudGl0bGU/cyh0LnRpdGxlKTpudWxsO3JldHVybiIhIiE9PWVbMF0uY2hhckF0KDApP3RoaXMucmVuZGVyZXIubGluayhuLHIsdGhpcy5vdXRwdXQoZVsxXSkpOnRoaXMucmVuZGVyZXIuaW1hZ2UobixyLHMoZVsxXSkpfSx0LnByb3RvdHlwZS5zbWFydHlwYW50cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2UucmVwbGFjZSgvLS0vZywi4oCUIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMeKAmCIpLnJlcGxhY2UoLycvZywi4oCZIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQx4oCcIikucmVwbGFjZSgvIi9nLCLigJ0iKS5yZXBsYWNlKC9cLnszfS9nLCLigKYiKTplfSx0LnByb3RvdHlwZS5tYW5nbGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiIscj1lLmxlbmd0aCxzPTA7cj5zO3MrKyl0PWUuY2hhckNvZGVBdChzKSxNYXRoLnJhbmRvbSgpPi41JiYodD0ieCIrdC50b1N0cmluZygxNikpLG4rPSImIyIrdCsiOyI7cmV0dXJuIG59LG4ucHJvdG90eXBlLmNvZGU9ZnVuY3Rpb24oZSx0LG4scil7aWYocj1yfHx7fSxyLmhpZ2hsaWdodCl7dmFyIGk9ci5oaWdobGlnaHQoZSx0KTtudWxsIT1pJiZpIT09ZSYmKG49ITAsZT1pKX1yZXR1cm4gdD8nPHByZT48Y29kZSBjbGFzcz0iJytyLmxhbmdQcmVmaXgrdCsnIj4nKyhuP2U6cyhlKSkrIlxuPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhuP2U6cyhlLCEwKSkrIlxuPC9jb2RlPjwvcHJlPiJ9LG4ucHJvdG90eXBlLmJsb2NrcXVvdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIjxibG9ja3F1b3RlPlxuIitlKyI8L2Jsb2NrcXVvdGU+XG4ifSxuLnByb3RvdHlwZS5odG1sPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxuLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aCIrdCsnIGlkPSInK3IuaGVhZGVyUHJlZml4K24udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlx3XSsvZywiLSIpKyciPicrZSsiPC9oIit0KyI+XG4ifSxuLnByb3RvdHlwZS5ocj1mdW5jdGlvbigpe3JldHVybiI8aHI+XG4ifSxuLnByb3RvdHlwZS5saXN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dD8ib2wiOiJ1bCI7cmV0dXJuIjwiK24rIj5cbiIrZSsiPC8iK24rIj5cbiJ9LG4ucHJvdG90eXBlLmxpc3RpdGVtPWZ1bmN0aW9uKGUpe3JldHVybiI8bGk+IitlKyI8L2xpPlxuIn0sbi5wcm90b3R5cGUucGFyYWdyYXBoPWZ1bmN0aW9uKGUpe3JldHVybiI8cD4iK2UrIjwvcD5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrZSsiPC90aGVhZD5cbiIrIjx0Ym9keT5cbiIrdCsiPC90Ym9keT5cbiIrIjwvdGFibGU+XG4ifSxuLnByb3RvdHlwZS50YWJsZXJvdz1mdW5jdGlvbihlKXtyZXR1cm4iPHRyPlxuIitlKyI8L3RyPlxuIn0sbi5wcm90b3R5cGUudGFibGVjZWxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5oZWFkZXI/InRoIjoidGQiLHI9dC5hbGlnbj8iPCIrbisnIHN0eWxlPSJ0ZXh0LWFsaWduOicrdC5hbGlnbisnIj4nOiI8IituKyI+IjtyZXR1cm4gcitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUuc3Ryb25nPWZ1bmN0aW9uKGUpe3JldHVybiI8c3Ryb25nPiIrZSsiPC9zdHJvbmc+In0sbi5wcm90b3R5cGUuZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxlbT4iK2UrIjwvZW0+In0sbi5wcm90b3R5cGUuY29kZXNwYW49ZnVuY3Rpb24oZSl7cmV0dXJuIjxjb2RlPiIrZSsiPC9jb2RlPiJ9LG4ucHJvdG90eXBlLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIjxicj4ifSxuLnByb3RvdHlwZS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIjxkZWw+IitlKyI8L2RlbD4ifSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0nPGEgaHJlZj0iJytlKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+IituKyI8L2E+In0sbi5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8aW1nIHNyYz0iJytlKyciIGFsdD0iJytuKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+In0sci5wYXJzZT1mdW5jdGlvbihlLHQsbil7dmFyIHM9bmV3IHIodCxuKTtyZXR1cm4gcy5wYXJzZShlKX0sci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7dGhpcy5pbmxpbmU9bmV3IHQoZS5saW5rcyx0aGlzLm9wdGlvbnMsdGhpcy5yZW5kZXJlciksdGhpcy50b2tlbnM9ZS5yZXZlcnNlKCk7Zm9yKHZhciBuPSIiO3RoaXMubmV4dCgpOyluKz10aGlzLnRvaygpO3JldHVybiBufSxyLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW49dGhpcy50b2tlbnMucG9wKCl9LHIucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdfHwwfSxyLnByb3RvdHlwZS5wYXJzZVRleHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy50b2tlbi50ZXh0OyJ0ZXh0Ij09PXRoaXMucGVlaygpLnR5cGU7KWUrPSJcbiIrdGhpcy5uZXh0KCkudGV4dDtyZXR1cm4gdGhpcy5pbmxpbmUub3V0cHV0KGUpfSxyLnByb3RvdHlwZS50b2s9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy50b2tlbi50eXBlKXtjYXNlInNwYWNlIjpyZXR1cm4iIjtjYXNlImhyIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpO2Nhc2UiaGVhZGluZyI6cmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSx0aGlzLnRva2VuLmRlcHRoLHRoaXMudG9rZW4udGV4dCx0aGlzLm9wdGlvbnMpO2Nhc2UiY29kZSI6cmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsdGhpcy50b2tlbi5sYW5nLHRoaXMudG9rZW4uZXNjYXBlZCx0aGlzLm9wdGlvbnMpO2Nhc2UidGFibGUiOnZhciBlLHQsbixyLHMsaT0iIixsPSIiO2ZvcihuPSIiLGU9MDtlPHRoaXMudG9rZW4uaGVhZGVyLmxlbmd0aDtlKyspcj17aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19LG4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLmhlYWRlcltlXSkse2hlYWRlcjohMCxhbGlnbjp0aGlzLnRva2VuLmFsaWduW2VdfSk7Zm9yKGkrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobiksZT0wO2U8dGhpcy50b2tlbi5jZWxscy5sZW5ndGg7ZSsrKXtmb3IodD10aGlzLnRva2VuLmNlbGxzW2VdLG49IiIscz0wO3M8dC5sZW5ndGg7cysrKW4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0W3NdKSx7aGVhZGVyOiExLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bc119KTtsKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KG4pfXJldHVybiB0aGlzLnJlbmRlcmVyLnRhYmxlKGksbCk7Y2FzZSJibG9ja3F1b3RlX3N0YXJ0Ijpmb3IodmFyIGw9IiI7ImJsb2NrcXVvdGVfZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShsKTtjYXNlImxpc3Rfc3RhcnQiOmZvcih2YXIgbD0iIixvPXRoaXMudG9rZW4ub3JkZXJlZDsibGlzdF9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0KGwsbyk7Y2FzZSJsaXN0X2l0ZW1fc3RhcnQiOmZvcih2YXIgbD0iIjsibGlzdF9pdGVtX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz0idGV4dCI9PT10aGlzLnRva2VuLnR5cGU/dGhpcy5wYXJzZVRleHQoKTp0aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGwpO2Nhc2UibG9vc2VfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJodG1sIjp2YXIgaD10aGlzLnRva2VuLnByZXx8dGhpcy5vcHRpb25zLnBlZGFudGljP3RoaXMudG9rZW4udGV4dDp0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KTtyZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKGgpO2Nhc2UicGFyYWdyYXBoIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCkpO2Nhc2UidGV4dCI6cmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VUZXh0KCkpfX0sbC5leGVjPWwsaC5vcHRpb25zPWguc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gbyhoLmRlZmF1bHRzLGUpLGh9LGguZGVmYXVsdHM9e2dmbTohMCx0YWJsZXM6ITAsYnJlYWtzOiExLHBlZGFudGljOiExLHNhbml0aXplOiExLHNtYXJ0TGlzdHM6ITEsc2lsZW50OiExLGhpZ2hsaWdodDpudWxsLGxhbmdQcmVmaXg6ImxhbmctIixzbWFydHlwYW50czohMSxoZWFkZXJQcmVmaXg6IiIscmVuZGVyZXI6bmV3IG59LGguUGFyc2VyPXIsaC5wYXJzZXI9ci5wYXJzZSxoLlJlbmRlcmVyPW4saC5MZXhlcj1lLGgubGV4ZXI9ZS5sZXgsaC5JbmxpbmVMZXhlcj10LGguaW5saW5lTGV4ZXI9dC5vdXRwdXQsaC5wYXJzZT1oLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1oOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTp0aGlzLm1hcmtlZD1ofS5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fCgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6Z2xvYmFsKX0oKSk7UEsHCEL6TGpTOQAAUzkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHN0YXRpY1xsaWJcdmFsaWRhdGUubWluLmpzLyoKICogdmFsaWRhdGUuanMgMS4zCiAqIENvcHlyaWdodCAoYykgMjAxMyBSaWNrIEhhcnJpc29uLCBodHRwOi8vcmlja2hhcnJpc29uLm1lCiAqIHZhbGlkYXRlLmpzIGlzIG9wZW4gc291cmNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqIFBvcnRpb25zIG9mIHZhbGlkYXRlLmpzIGFyZSBpbnNwaXJlZCBieSBDb2RlSWduaXRlci4KICogaHR0cDovL3JpY2toYXJyaXNvbi5naXRodWIuY29tL3ZhbGlkYXRlLmpzCiAqLwoKKGZ1bmN0aW9uKHEscixtKXt2YXIgcz17cmVxdWlyZWQ6IlRoZSAlcyBmaWVsZCBpcyByZXF1aXJlZC4iLG1hdGNoZXM6IlRoZSAlcyBmaWVsZCBkb2VzIG5vdCBtYXRjaCB0aGUgJXMgZmllbGQuIiwiZGVmYXVsdCI6IlRoZSAlcyBmaWVsZCBpcyBzdGlsbCBzZXQgdG8gZGVmYXVsdCwgcGxlYXNlIGNoYW5nZS4iLHZhbGlkX2VtYWlsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iLHZhbGlkX2VtYWlsczoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhbGwgdmFsaWQgZW1haWwgYWRkcmVzc2VzLiIsbWluX2xlbmd0aDoiVGhlICVzIGZpZWxkIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixtYXhfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBub3QgZXhjZWVkICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZXhhY3RfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBleGFjdGx5ICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZ3JlYXRlcl90aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAlcy4iLGxlc3NfdGhhbjoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBsZXNzIHRoYW4gJXMuIixhbHBoYToiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzLiIsYWxwaGFfbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycy4iLGFscGhhX2Rhc2g6IlRoZSAlcyBmaWVsZCBtdXN0IG9ubHkgY29udGFpbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBhbmQgZGFzaGVzLiIsbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5IG51bWJlcnMuIixpbnRlZ2VyOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFuIGludGVnZXIuIixkZWNpbWFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgZGVjaW1hbCBudW1iZXIuIixpc19uYXR1cmFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgcG9zaXRpdmUgbnVtYmVycy4iLGlzX25hdHVyYWxfbm9femVybzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4iLHZhbGlkX2lwOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgSVAuIix2YWxpZF9iYXNlNjQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBiYXNlNjQgc3RyaW5nLiIsdmFsaWRfY3JlZGl0X2NhcmQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIuIixpc19maWxlX3R5cGU6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSAlcyBmaWxlcy4iLHZhbGlkX3VybDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIFVSTC4ifSx0PWZ1bmN0aW9uKGEpe30sdT0vXiguKz8pXFsoLispXF0kLyxoPS9eWzAtOV0rJC8sdj0vXlwtP1swLTldKyQvLGs9L15cLT9bMC05XSpcLj9bMC05XSskLyxwPS9eW2EtekEtWjAtOS4hIyQlJmFtcDsnKitcLVwvPT9cXl9ge3x9flwtXStAW2EtekEtWjAtOVwtXSsoPzpcLlthLXpBLVowLTlcLV0rKSokLyx3PS9eW2Etel0rJC9pLHg9L15bYS16MC05XSskL2kseT0vXlthLXowLTlfXC1dKyQvaSx6PS9eWzAtOV0rJC9pLEE9L15bMS05XVswLTldKiQvaSxCPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KSQvaSxDPS9bXmEtekEtWjAtOVwvXCs9XS9pLEQ9L15bXGRcLVxzXSskLyxFPS9eKChodHRwfGh0dHBzKTpcL1wvKFx3Kzp7MCwxfVx3KkApPyhcUyspfCkoOlswLTldKyk/KFwvfFwvKFtcdyMhOi4/Kz0mJUAhXC1cL10pKT8kLyxlPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbGxiYWNrPWN8fHQ7dGhpcy5lcnJvcnM9W107dGhpcy5maWVsZHM9e307dGhpcy5mb3JtPXRoaXMuX2Zvcm1CeU5hbWVPck5vZGUoYSl8fHt9O3RoaXMubWVzc2FnZXM9e307dGhpcy5oYW5kbGVycz17fTthPTA7Zm9yKGM9Yi5sZW5ndGg7YTxjO2ErKyl7dmFyIGQ9YlthXTtpZigoZC5uYW1lfHxkLm5hbWVzKSYmZC5ydWxlcylpZihkLm5hbWVzKWZvcih2YXIgbD0wO2w8ZC5uYW1lcy5sZW5ndGg7bCsrKXRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lc1tsXSk7ZWxzZSB0aGlzLl9hZGRGaWVsZChkLGQubmFtZSl9dmFyIGc9dGhpcy5mb3JtLm9uc3VibWl0O3RoaXMuZm9ybS5vbnN1Ym1pdD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7dHJ5e3JldHVybiBhLl92YWxpZGF0ZUZvcm0oYikmJihnPT09bXx8ZygpKX1jYXRjaChjKXt9fX0odGhpcyl9LG49ZnVuY3Rpb24oYSxiKXt2YXIgYztpZigwPGEubGVuZ3RoJiYoInJhZGlvIj09PWFbMF0udHlwZXx8ImNoZWNrYm94Ij09PWFbMF0udHlwZSkpZm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoYVtjXS5jaGVja2VkKXJldHVybiBhW2NdW2JdfWVsc2UgcmV0dXJuIGFbYl19O2UucHJvdG90eXBlLnNldE1lc3NhZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLm1lc3NhZ2VzW2FdPWI7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLnJlZ2lzdGVyQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXthJiYoInN0cmluZyI9PT10eXBlb2YgYSYmYiYmImZ1bmN0aW9uIj09PXR5cGVvZiBiKSYmKHRoaXMuaGFuZGxlcnNbYV09Yik7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLl9mb3JtQnlOYW1lT3JOb2RlPWZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiPT09dHlwZW9mIGE/YTpyLmZvcm1zW2FdfTtlLnByb3RvdHlwZS5fYWRkRmllbGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmZpZWxkc1tiXT17bmFtZTpiLGRpc3BsYXk6YS5kaXNwbGF5fHxiLHJ1bGVzOmEucnVsZXMsaWQ6bnVsbCx0eXBlOm51bGwsdmFsdWU6bnVsbCxjaGVja2VkOm51bGx9fTtlLnByb3RvdHlwZS5fdmFsaWRhdGVGb3JtPWZ1bmN0aW9uKGEpe3RoaXMuZXJyb3JzPVtdO2Zvcih2YXIgYiBpbiB0aGlzLmZpZWxkcylpZih0aGlzLmZpZWxkcy5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGM9dGhpcy5maWVsZHNbYl18fHt9LGQ9dGhpcy5mb3JtW2MubmFtZV07ZCYmZCE9PW0mJihjLmlkPW4oZCwiaWQiKSxjLnR5cGU9MDxkLmxlbmd0aD9kWzBdLnR5cGU6ZC50eXBlLGMudmFsdWU9bihkLCJ2YWx1ZSIpLGMuY2hlY2tlZD1uKGQsImNoZWNrZWQiKSx0aGlzLl92YWxpZGF0ZUZpZWxkKGMpKX0iZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuY2FsbGJhY2smJnRoaXMuY2FsbGJhY2sodGhpcy5lcnJvcnMsYSk7MDx0aGlzLmVycm9ycy5sZW5ndGgmJihhJiZhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTpldmVudCYmKGV2ZW50LnJldHVyblZhbHVlPSExKSk7cmV0dXJuITB9O2UucHJvdG90eXBlLl92YWxpZGF0ZUZpZWxkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLnJ1bGVzLnNwbGl0KCJ8IiksYz1hLnJ1bGVzLmluZGV4T2YoInJlcXVpcmVkIiksZD0hYS52YWx1ZXx8IiI9PT1hLnZhbHVlfHxhLnZhbHVlPT09bSxsPTAsZz1iLmxlbmd0aDtsPGc7bCsrKXt2YXIgZj1iW2xdLGU9bnVsbCxoPSExLGs9dS5leGVjKGYpO2lmKC0xIT09Y3x8LTEhPT1mLmluZGV4T2YoIiFjYWxsYmFja18iKXx8IWQpaWYoayYmKGY9a1sxXSxlPWtbMl0pLCIhIj09PWYuY2hhckF0KDApJiYoZj1mLnN1YnN0cmluZygxLGYubGVuZ3RoKSksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLl9ob29rc1tmXT90aGlzLl9ob29rc1tmXS5hcHBseSh0aGlzLFthLGVdKXx8KGg9ITApOiJjYWxsYmFja18iPT09Zi5zdWJzdHJpbmcoMCw5KSYmKGY9Zi5zdWJzdHJpbmcoOSxmLmxlbmd0aCksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmhhbmRsZXJzW2ZdJiYhMT09PXRoaXMuaGFuZGxlcnNbZl0uYXBwbHkodGhpcyxbYS52YWx1ZSxlXSkmJihoPSEwKSksaCl7Yj10aGlzLm1lc3NhZ2VzW2ZdfHxzW2ZdO2M9IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aXRoIHRoZSAiK2EuZGlzcGxheSsiIGZpZWxkLiI7YiYmKGM9Yi5yZXBsYWNlKCIlcyIsYS5kaXNwbGF5KSxlJiYoYz1jLnJlcGxhY2UoIiVzIix0aGlzLmZpZWxkc1tlXT90aGlzLmZpZWxkc1tlXS5kaXNwbGF5OmUpKSk7dGhpcy5lcnJvcnMucHVzaCh7aWQ6YS5pZCxuYW1lOmEubmFtZSxtZXNzYWdlOmMscnVsZTpmfSk7YnJlYWt9fX07ZS5wcm90b3R5cGUuX2hvb2tzPXtyZXF1aXJlZDpmdW5jdGlvbihhKXt2YXIgYj1hLnZhbHVlO3JldHVybiJjaGVja2JveCI9PT1hLnR5cGV8fCJyYWRpbyI9PT1hLnR5cGU/ITA9PT1hLmNoZWNrZWQ6bnVsbCE9PWImJiIiIT09Yn0sImRlZmF1bHQiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUhPT1ifSxtYXRjaGVzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5mb3JtW2JdO3JldHVybiBjP2EudmFsdWU9PT1jLnZhbHVlOiExfSx2YWxpZF9lbWFpbDpmdW5jdGlvbihhKXtyZXR1cm4gcC50ZXN0KGEudmFsdWUpfSx2YWxpZF9lbWFpbHM6ZnVuY3Rpb24oYSl7YT1hLnZhbHVlLnNwbGl0KCIsIik7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspaWYoIXAudGVzdChhW2JdKSlyZXR1cm4hMTtyZXR1cm4hMH0sbWluX2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg+PXBhcnNlSW50KGIsMTApOiExfSxtYXhfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aDw9cGFyc2VJbnQoYiwxMCk6ITF9LGV4YWN0X2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg9PT1wYXJzZUludChiLDEwKTohMX0sZ3JlYXRlcl90aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPnBhcnNlRmxvYXQoYik6ITF9LGxlc3NfdGhhbjpmdW5jdGlvbihhLGIpe3JldHVybiBrLnRlc3QoYS52YWx1ZSk/cGFyc2VGbG9hdChhLnZhbHVlKTxwYXJzZUZsb2F0KGIpOiExfSxhbHBoYTpmdW5jdGlvbihhKXtyZXR1cm4gdy50ZXN0KGEudmFsdWUpfSxhbHBoYV9udW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiB4LnRlc3QoYS52YWx1ZSl9LGFscGhhX2Rhc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHkudGVzdChhLnZhbHVlKX0sbnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4gaC50ZXN0KGEudmFsdWUpfSxpbnRlZ2VyOmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoYS52YWx1ZSl9LGRlY2ltYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGsudGVzdChhLnZhbHVlKX0saXNfbmF0dXJhbDpmdW5jdGlvbihhKXtyZXR1cm4gei50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsX25vX3plcm86ZnVuY3Rpb24oYSl7cmV0dXJuIEEudGVzdChhLnZhbHVlKX0sdmFsaWRfaXA6ZnVuY3Rpb24oYSl7cmV0dXJuIEIudGVzdChhLnZhbHVlKX0sdmFsaWRfYmFzZTY0OmZ1bmN0aW9uKGEpe3JldHVybiBDLnRlc3QoYS52YWx1ZSl9LHZhbGlkX3VybDpmdW5jdGlvbihhKXtyZXR1cm4gRS50ZXN0KGEudmFsdWUpfSx2YWxpZF9jcmVkaXRfY2FyZDpmdW5jdGlvbihhKXtpZighRC50ZXN0KGEudmFsdWUpKXJldHVybiExO3ZhciBiPTAsYz0wLGQ9ITE7YT1hLnZhbHVlLnJlcGxhY2UoL1xEL2csIiIpO2Zvcih2YXIgZT1hLmxlbmd0aC0xOzA8PWU7ZS0tKWM9YS5jaGFyQXQoZSksYz1wYXJzZUludChjLDEwKSxkJiY5PChjKj0yKSYmKGMtPTkpLGIrPWMsZD0hZDtyZXR1cm4gMD09PWIlMTB9LGlzX2ZpbGVfdHlwZTpmdW5jdGlvbihhLGIpe2lmKCJmaWxlIiE9PWEudHlwZSlyZXR1cm4hMDt2YXIgYz1hLnZhbHVlLnN1YnN0cihhLnZhbHVlLmxhc3RJbmRleE9mKCIuIikrMSksZD1iLnNwbGl0KCIsIiksZT0hMSxnPTAsZj1kLmxlbmd0aDtmb3IoZztnPGY7ZysrKWM9PWRbZ10mJihlPSEwKTtyZXR1cm4gZX19O3EuRm9ybVZhbGlkYXRvcj1lfSkod2luZG93LGRvY3VtZW50KTsKUEsHCGaMH8QzGAAAMxgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAABQAAAHZpZXcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHZpZXdcYWRtaW4vUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cYWRtaW4ubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPnt7LlRpdGxlfX0gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvYWRtaW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgICA8aDMgY2xhc3M9ImxvZ28gbGVmdCI+RnhoLkdvIC0gPHNwYW4+e3suVGl0bGV9fTwvc3Bhbj48L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJuYXYgbGVmdCByZWxhdGl2ZSI+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGFzaGJvYXJkIGxlZnQiIGhyZWY9Ii9hZG1pbi8iPjxpIGNsYXNzPSJmYSBmYS1kYXNoYm9hcmQiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iYXJ0aWNsZSBsZWZ0IiBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvIiB0aXRsZT0i5paH56ugIj48aSBjbGFzcz0iZmEgZmEtY29weSI+PC9pPjwvYT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGFnZXMgbGVmdCIgaHJlZj0iL2FkbWluL3BhZ2VzLyIgdGl0bGU9IueLrOeri+mhtemdoiI+PGkgY2xhc3M9ImZhIGZhLXBhc3RlIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImNvbW1lbnRzIGxlZnQiIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iIHRpdGxlPSLor4TorroiPjxpIGNsYXNzPSJmYSBmYS1jb21tZW50cyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJmaWxlcyBsZWZ0IiBocmVmPSIvYWRtaW4vZmlsZXMvIiB0aXRsZT0i5aqS5L2T5paH5Lu2Ij48aSBjbGFzcz0iZmEgZmEtaW5ib3giPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGx1Z2lucyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy8iIHRpdGxlPSLmj5Lku7YiPjxpIGNsYXNzPSJmYSBmYS1nZWFycyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyIgdGl0bGU9Iuiuvue9riI+PGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPjwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxhIGNsYXNzPSJvdXQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii9sb2dvdXQvIiB0aXRsZT0i6YCA5Ye6Ij48aSBjbGFzcz0iZmEgZmEtcG93ZXItb2ZmIGZhLWxnIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0icHJvZmlsZSBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIiB0aXRsZT0i5oiRIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImZyb250IG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Iuafpeeci+e9keermSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+DQogICAgPC9kaXY+DQo8L2Rpdj4NCntAQ29udGVudH0NCjxkaXYgaWQ9ImZvb3RlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgIDxwIGNsYXNzPSJsaW5rcyB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgIDxhIGNsYXNzPSJzdGF0IiBocmVmPSIvY21kL21lc3NhZ2UvIj7mtojmga88L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJiYWNrdXAiIGhyZWY9Ii9jbWQvYmFja3VwLyI+5aSH5Lu9PC9hPg0KICAgICAgICAgICA8YSBjbGFzcz0iZXJyIiBocmVmPSIvY21kL2xvZ3MvIj7ml6Xlv5c8L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJzeXMiIGhyZWY9IiMiPuezu+e7nzwvYT4NCiAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJjcCB0ZXh0LWNlbnRlciI+UHJvdWRseSBQb3dlcmVkIGJ5IEZ4aC5HbzwvcD4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwjKwp1dvAgAALwIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXGFydGljbGVzLmh0bWw8dWwgaWQ9ImFydGljbGUtbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+DQogICAgPGxpPg0KICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS93cml0ZS8iPua3u+WKoOaWh+eroDwvYT4NCiAgICA8L2xpPnt7cmFuZ2UgLkFydGljbGVzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+PGg0IGNsYXNzPSJpbmxpbmUtYmxvY2sgdGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LlRpdGxlfX08L2E+PC9oND57e2lmIG5lIC5TdGF0dXMgInB1Ymxpc2gifX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxibCBzdGF0dXMiPuiNieeovzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJzbHVnIj57ey5TbHVnfX08L3NwYW4+e3tpZiBlcSAuSXNDb21tZW50IGZhbHNlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImlzLWNvbW1lbnQiPjxpIGNsYXNzPSJmYS1jb21tZW50cyBmYSI+PC9pPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudCI+e3suQ29tbWVudE51bX19IC8ge3suSGl0c319PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk5paH56ug5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9hcnRpY2xlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIH8Kevq4GAACuBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xhZG1pblxjbWQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcYWRtaW5cY21kXGJhY2t1cC5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciBjbGVhciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUgbGVmdCI+5aSH5Lu95pWw5o2uPC9oMT4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUgbGVmdCIgaWQ9ImJhY2t1cC1idG4iPuWkh+S7vTwvYnV0dG9uPg0KPC9oZWFkZXI+DQo8dWwgY2xhc3M9ImNtZC1saXN0IiBpZD0iYmFja3VwLWxpc3QiPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVUaW1lIC5Nb2RUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fSA8YSBjbGFzcz0ibGluayIgaHJlZj0iL2NtZC9iYWNrdXAvZmlsZT9maWxlPXt7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIiByZWw9Int7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZS1vIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNiYWNrdXAtYnRuJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICB0eXBlOiAicG9zdCIsDQogICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAkKCcuY21kLWxpc3QnKS5wcmVwZW5kKCc8bGkgY2xhc3M9ImJhY2t1cC1sb2FkaW5nIj7lpIfku73kuK0uLjwvbGk+Jyk7DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuaGlkZSgpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuYmFja3VwLWxvYWRpbmcnKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLXJlc3VsdCI+5Yia5Yia5aSH5Lu95YiwICcgKyBqc29uLmZpbGUgKyAnPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkKCcjYmFja3VwLWJ0bicpLnNob3coKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHVybDogIi9jbWQvYmFja3VwLz9maWxlPSIgKyAkKHRoaXMpLmF0dHIoInJlbCIpLA0KICAgICAgICAgICAgICAgIHR5cGU6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICQodGhhdCkucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCLeb5slHBwAARwcAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cY21kXGxvZy5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUiPumUmeivr+aXpeW/lzwvaDE+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJsb2ctbGlzdCI+e3tyYW5nZSAuTG9nc319DQogICAgPGxpIGNsYXNzPSJsb2cgcmVsYXRpdmUiPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSBpbmxpbmUtYmxvY2siPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxwcmUgY2xhc3M9InRleHQiPnt7LlRleHR9fTwvcHJlPg0KICAgICAgICA8YSBjbGFzcz0icmVtb3ZlIGFic29sdXRlIiBocmVmPSIvY21kL2xvZ3MvP2ZpbGU9e3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZW1vdmUnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi56Gu6K6k5Yig6Zmk6K6w5b2VIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgIHVybDokdGhpcy5hdHRyKCJocmVmIiksDQogICAgICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg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c3BhbiBjbGFzcz0iYy1jbnQiPkDml6DmlYg8L3NwYW4+e3tlbmR9fXt7aWYgbmUgLlN0YXR1cyAiYXBwcm92ZWQifX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1jaGVjayIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5a6h5qC4Ij48aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUiPjwvaT7lrqHmoLjkuK08L2E+e3tlbmR9fQ0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLlm57lpI0iPjxpIGNsYXNzPSJmYSBmYS1xdW90ZS1yaWdodCI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1kZWwiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWIoOmZpCI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+e3tlbmR9fQ0KICAgIDx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICAgICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vY29tbWVudHMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KICAgIDwvdWw+DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgYWN0aW9uPSIvYWRtaW4vY29tbWVudHMvIiBjbGFzcz0iZm9ybSBjbGVhciBsZWZ0IiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBsZWZ0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSIgaWQ9ImNvbW1lbnQtc3VibWl0Ij7lm57lpI3or4Torro8L2J1dHRvbj4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiIgaWQ9ImNvbW1lbnQtY2xvc2UiPuWFs+mXreWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgaWQ9ImNvbW1lbnQtcGFyZW50IiBuYW1lPSJwaWQiLz4NCiAgICA8L2Zvcm0+DQo8L2Rpdj4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5jLWRlbCcpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLliKDpmaTor4TorrrlsIbkvb/nm7jlhbPlhoXlrrnml6DmlYghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYWRtaW4vY29tbWVudHMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjb21tZW50LScgKyBpZCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLliKDpmaTlpLHotKUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuYy1jaGVjaycpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLlrqHmoLjlkI7mraTkvZzogIXlsIbkuI3lho3moIforrDlrqHmoLghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICJwdXQiLA0KICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYWRtaW4vY29tbWVudHMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjb21tZW50LScgKyBpZCkuZmluZCgiLmMtY2hlY2siKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWuoeaguOWksei0pSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5jLXJlcGx5Jykub24oImNsaWNrIixmdW5jdGlvbigpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LScraWQpLmFwcGVuZCgkKCcjY29tbWVudC1mb3JtJykuZGV0YWNoKCkuc2hvdygpKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbChpZCk7DQogICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5Zue5aSNIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2NvbW1lbnRzLyI7DQogICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICBhbGVydCgi5Zue5aSN5aSx6LSlIik7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjY29tbWVudC1jbG9zZScpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5oaWRlKCk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoMCk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykudmFsKCIiKTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhAmAjv7Q8AAO0PAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABwAAAB2aWV3XGFkbWluXGVkaXRfYXJ0aWNsZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9IuaWh+eroOagh+mimCIgdmFsdWU9Int7LkFydGljbGUuVGl0bGV9fSIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPnt7SHRtbCAuQXJ0aWNsZS5UZXh0fX08L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOWUr+S4gOmTvuaOpSIgdmFsdWU9Int7LkFydGljbGUuU2x1Z319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5qCH562+PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJ0YWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InRhZyIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOagh+etviIgdmFsdWU9Int7LkFydGljbGUuVGFnU3RyaW5nfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCJ7e2lmIGVxIC5BcnRpY2xlLlN0YXR1cyAicHVibGlzaCJ9fSBzZWxlY3RlZHt7ZW5kfX0+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQie3tpZiBlcSAuQXJ0aWNsZS5TdGF0dXMgImRyYWZ0In19IHNlbGVjdGVke3tlbmR9fT7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuQXJ0aWNsZS5Jc0NvbW1lbnQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLkFydGljbGUuSXNDb21tZW50IGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuW3suS/neWtmO+8jOWOu+afpeeci++8n+i/mOaYr+e7p+e7ree8lui+kSIpKSB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9hcnRpY2xlcy8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIS5zp8W0NAABtDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xhZG1pblxlZGl0X3BhZ2UuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLpobXpnaLmoIfpopgiIHZhbHVlPSJ7ey5QYWdlLlRpdGxlfX0iLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij57e0h0bWwgLlBhZ2UuVGV4dH19PC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpobXpnaLnmoTllK/kuIDpk77mjqUiIHZhbHVlPSJ7ey5QYWdlLlNsdWd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoInt7aWYgZXEgLlBhZ2UuU3RhdHVzICJwdWJsaXNoIn19IHNlbGVjdGVke3tlbmR9fT7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCJ7e2lmIGVxIC5QYWdlLlN0YXR1cyAiZHJhZnQifX0gc2VsZWN0ZWR7e2VuZH19PuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5QYWdlLklzQ29tbWVudCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuUGFnZS5Jc0NvbW1lbnQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7nva7pobbpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImxpbmsiIGlkPSJpcy1saW5rIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLlBhZ2UuSXNMaW5rZWQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5QYWdlLklzTGlua2VkIHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgi5bey5L+d5a2Y77yM5Y675p+l55yL77yf6L+Y5piv57un57ut57yW6L6RIikpIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL3BhZ2VzLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwi2eDIy4w0AAOMNAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXGZpbGVzLmh0bWw8dWwgaWQ9ImZpbGVzLWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAgcGFnZXIiPg0KICAgIDxsaSBjbGFzcz0iZmlsZSIgaWQ9ImZpbGVzLWJ0bi1saSI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgPC9saT57e3JhbmdlIC5GaWxlc319DQogICAgPGxpIGNsYXNzPSJmaWxlIiBpZD0iZmlsZS17ey5JZH19Ij4NCiAgICAgICAgPHNwYW4gY2xhc3M9InVwbG9hZC10aW1lIj57e0RhdGVJbnQ2NCAuVXBsb2FkVGltZSAiTU0uREQifX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJzaXplIj57e0ZpbGVTaXplIC5TaXplfX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj57ey5OYW1lfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSIve3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iL3t7LlVybH19Ij48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluay1zcXVhcmUiPjwvaT48L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgZmFkZS1vdXQiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWIoOmZpOmZhOS7tiI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZSI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCiAgICB7e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2ZpbGVzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCjwvdWw+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2F0dGFjaC1zaG93Iik7DQogICAgICAgICQoIi5kZWwiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6ZmE5Lu255u45YWz6ZO+5o6l5Lya5aSx5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgICAgICAidXJsIjogIi9hZG1pbi9maWxlcy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2ZpbGUtJytpZCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhixZv67AYAAOwGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAAB2aWV3XGFkbWluXGhvbWUuaHRtbDxkaXYgY2xhc3M9ImFkbWluIGNvbnRhaW5lciBjbGVhciIgaWQ9ImRhc2hib2FyZCI+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTUgbGVmdCI+DQogICAgICAgIDxkaXYgY2xhc3M9IndlbGNvbWUiPg0KICAgICAgICAgICAgPGg0PldlbGNvbWU8L2g0Pg0KICAgICAgICAgICAgPHA+5qyi6L+O5Zue5p2l77yMIDxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJxdWljay1saW5rIj4NCiAgICAgICAgICAgIDxoND7lv6vpgJ/pk77mjqU8L2g0Pg0KICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZS93cml0ZS8iPuaSsOWGmeaWh+eroDwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vcGFnZS93cml0ZS8iPua3u+WKoOmhtemdojwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vY29tbWVudHMvIj7mn6XnnIvlkozlrqHmoLjor4Torro8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3NldHRpbmcvIj7kv67mlLnphY3nva48L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIj7mm7TmlrDkuKrkurrotYTmlpk8L2E+PC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS0yIGxlZnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eSI+DQogICAgICAgICAgICA8aDQ+5pyA5paw5rS75YqoPC9oND57e3JhbmdlIC5NZXNzYWdlc319DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtc2cgcmVsYXRpdmUge3suVHlwZX19Ij4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGEiPnt7SHRtbCAuRGF0YX19PC9kaXY+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9InJlYWQgYWJzb2x1dGUiIGhyZWY9Ii9hZG1pbi9tZXNzYWdlL3JlYWQ/aWQ9e3suSWR9fSIgcmVsPSJ7ey5JZH19Ij48aSBjbGFzcz0iZmEgZmEtY2hlY2siPjwvaT48L2E+DQogICAgICAgICAgICA8L2Rpdj57e2VuZH19e3tpZiBsdCAobGVuIC5NZXNzYWdlcykgMX19DQogICAgICAgICAgICA8cD7msqHmnInmlrDnmoTmtLvliqjkv6Hmga88L3A+DQogICAgICAgICAgICB7e2VuZH19DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS00IHJpZ2h0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHMiPg0KICAgICAgICAgICAgPGg0PuaVsOaNrue7n+iuoTwvaDQ+DQogICAgICAgICAgICA8cD7lt7Lnu4/lj5HluIPmlofnq6AgPHNwYW4gY2xhc3M9ImxibCBsYmwtcmVkIj57ey5TdGF0aXMuQXJ0aWNsZXN9fTwvc3Bhbj4g56+H77yMDQogICAgICAgICAgICDpobXpnaIgPHNwYW4gY2xhc3M9ImxibCBsYmwtcmVkIj57ey5TdGF0aXMuUGFnZXN9fTwvc3Bhbj4g5Liq77yMIDxici8+DQogICAgICAgICAgICDmlLbliLDor4TorrogPHNwYW4gY2xhc3M9ImxibCBsYmwtYmx1ZSI+e3suU3RhdGlzLkNvbW1lbnRzfX08L3NwYW4+IOasoe+8jA0KICAgICAgICAgICAg5LiK5LygIDxzcGFuIGNsYXNzPSJsYmwgbGJsLWdyZWVuIj57ey5TdGF0aXMuRmlsZXN9fTwvc3Bhbj4g5Liq6ZmE5Lu2PC9wPg0KICAgICAgICAgICAgPHA+5b2T5YmN56iL5bqP54mI5pys77yaPHN0cm9uZz57ey5TdGF0aXMuVmVyc2lvbn19PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ib2ZmaWNlIj4NCiAgICAgICAgICAgIDxoND7lrpjmlrnmtojmga88L2g0Pg0KICAgICAgICAgICAgPHA+6L+Y5rKh5pyJ5raI5oGvPC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICAgICAgICQoIi5yZWFkIikub24oImNsaWNrIixmdW5jdGlvbigpew0KICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAkLnBvc3QoJHRoaXMuYXR0cigiaHJlZiIpLGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAkdGhpcy5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICB9KTsNCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgIH0pOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCPSU3OYgCQAAIAkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5cbG9naW4uaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7nmbvlvZUgLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT4NCiAgICAgICAgI2xvZ2luLWZvcm17DQogICAgICAgICAgICB3aWR0aDogMjgwcHg7DQogICAgICAgICAgICBtYXJnaW46IDgwcHggYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICAjbG9naW4tZm9ybSBoMXsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7DQogICAgICAgIH0NCiAgICA8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8Zm9ybSBpZD0ibG9naW4tZm9ybSIgY2xhc3M9ImZvcm0gZm9ybS12ZXJ0aWNhbCIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiIG5hbWU9ImxvZ2luLWZvcm0iPg0KICAgIDxoMT7nmbvlvZUgLSBGeGguR288L2gxPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9InVzZXIiPueUqOaIt+WQjTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IiBpZD0idXNlciIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ1c2VyIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1c2VyLWludmFsaWQiPueUqOaIt+WQjeS4uuWtl+avjSvmlbDlrZfvvIzplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJwYXNzd29yZCI+55So5oi35a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQiIGlkPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0icGFzc3dvcmQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InBhc3N3b3JkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+55m7IOW9lTwvYnV0dG9uPg0KICAgIDxzcGFuIGNsYXNzPSJ0aXAiPum7mOiupOiusOS9j+eZu+mZhjPlpKk8L3NwYW4+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2Nkbi5zdGF0aWNmaWxlLm9yZy9qcXVlcnkvMS4xMC4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jZG4uc3RhdGljZmlsZS5vcmcvanF1ZXJ5LmZvcm0vMy40Ni9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoImxvZ2luLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoicGFzc3dvcmQiLCJydWxlcyI6InJlcXVpcmVkfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNsb2dpbi1mb3JtJykuYWpheFN1Ym1pdChmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZighanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi55m75b2V6ZSZ6K+v77yM6K+35qOA5p+l55So5oi35oiW5a+G56CBIik7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCNbgeGKQCAAAkAgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5ccGFnZXMuaHRtbDx1bCBpZD0iYXJ0aWNsZS1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj4NCiAgICA8bGk+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUiIGhyZWY9Ii9hZG1pbi9wYWdlL3dyaXRlLyI+5re75Yqg6aG16Z2iPC9hPg0KICAgIDwvbGk+e3tyYW5nZSAuUGFnZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj48aDQgY2xhc3M9ImlubGluZS1ibG9jayB0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0YXJnZXQ9Il9ibGFuayI+e3suVGl0bGV9fTwvYT48L2g0Pnt7aWYgbmUgLlN0YXR1cyAicHVibGlzaCJ9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGJsIHN0YXR1cyI+6I2J56i/PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9InNsdWciPnt7LlNsdWd9fTwvc3Bhbj57e2lmIGVxIC5Jc0NvbW1lbnQgZmFsc2V9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iaXMtY29tbWVudCI+PGkgY2xhc3M9ImZhLWNvbW1lbnRzIGZhIj48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50Ij57ey5Db21tZW50TnVtfX0gLyB7ey5IaXRzfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJlZGl0IGxibCBsYmwtZ3JlZW4iIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPue8lui+kTwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBsYmwgbGJsLXJlZCIgaHJlZj0iL2FkbWluL3BhZ2Uve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+5Yig6ZmkPC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9wYWdlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKCIuZGVsIikub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBpZihjb25maXJtKCLliKDpmaTpobXpnaLlsIbkvb/nm7jlhbPlhoXlrrnlpLHmlYjvvIHnoa7orqTvvJ8iKSl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAidXJsIjoiL2FkbWluL3BhZ2UvIitpZCsiLyIsDQogICAgICAgICAgICAgICAgInR5cGUiOiJkZWxldGUiLA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suWIoOmZpCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0NCiAgICB9KTsNCjwvc2NyaXB0PlBLBwioK0ZGnAYAAJwGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXHBhc3N3b3JkLmh0bWw8Zm9ybSBpZD0icGFzc3dvcmQiIGNsYXNzPSJmb3JtIGZvcm0tYWxpZ24gY2xlYXIiIGFjdGlvbj0iIyIgbmFtZT0icGFzc3dvcmQtZm9ybSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJvbGQiPuaXp+WvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ib2xkIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0ib2xkIiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6aqM6K+B5pen5a+G56CBPC9zcGFuPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJvbGQtaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ibmV3Ij7mlrDlr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im5ldyIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im5ldyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5ldy1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJjb25maXJtIj7noa7orqTlr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9ImNvbmZpcm0iIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJjb25maXJtIiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iY29uZmlybS1pbnZhbGlkIj7noa7orqTlr4bnoIHkuI3ljLnphY08L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOS/ruaUuTwvYnV0dG9uPg0KICAgIDwvcD4NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigicGFzc3dvcmQtZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoib2xkIiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJuZXciLCJydWxlcyI6Im1pbl9sZW5ndGhbMl18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6ImNvbmZpcm0iLCJydWxlcyI6InJlcXVpcmVkfG1hdGNoZXNbbmV3XSJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Bhc3N3b3JkJykuYWpheFN1Ym1pdChmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZighanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhucSeBTwcAAE8HAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGFkbWluXHBsdWdpbi5odG1sPHVsIGlkPSJwbHVnaW4tbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+e3tyYW5nZSAuUGx1Z2luc319DQogICAgPGxpIGNsYXNzPSJjbGVhciI+e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCBsYmwgYWN0aXZlIGxibC1ncmVlbiI+Jm5ic3A7PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUgbGVmdCI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0idmVyc2lvbiBsZWZ0Ij57ey5WZXJzaW9ufX08L3NwYW4+e3tpZiAuSGFzU2V0dGluZ319DQogICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9wbHVnaW5zL3t7LktleX19LyI+6YCJ6aG5PC9hPnt7ZW5kfX17e2lmIC5Jc0FjdGl2ZX19DQogICAgICAgIDxhIGNsYXNzPSJkZWFjdGl2YXRlIGxibCBsYmwtcmVkIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LktleX19Ij7lsIHljbA8L2E+e3tlbHNlfX0NCiAgICAgICAgPGEgY2xhc3M9ImFjdGl2YXRlIGxibCBsYmwtYmx1ZSByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5r+A5rS7PC9hPnt7ZW5kfX0NCiAgICAgICAgPHAgY2xhc3M9ImRlc2MgbGVmdCI+e3suRGVzY319PC9wPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoIi5kZWFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImRlYWN0aXZhdGUiLA0KICAgICAgICAgICAgICAgICJwbHVnaW4iOiBwDQogICAgICAgICAgICB9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy5vZmYoImNsaWNrIikudGV4dCgi5LiL5qyh5r+A5rS7Iik7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWwgeWNsOWksei0pSIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0pOw0KICAgICAgICAkKCIuYWN0aXZhdGUiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgdmFyIHAgPSAkdGhpcy5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQucG9zdCgiIiwgew0KICAgICAgICAgICAgICAgICJhY3Rpb24iOiAiYWN0aXZhdGUiLA0KICAgICAgICAgICAgICAgICJwbHVnaW4iOiBwDQogICAgICAgICAgICB9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy5vZmYoImNsaWNrIikudGV4dCgi5LiL5qyh5bCB5Y2wIik7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIua/gOa0u+Wksei0pSIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIT3BZoWIGAABiBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAdmlld1xhZG1pblxwbHVnaW5fc2V0dGluZy5odG1sPGZvcm0gaWQ9InBsdWdpbi1zZXR0aW5nLWZvcm0iIGNsYXNzPSJmb3JtIGNvbnRhaW5lcjk2MCBhZG1pbiIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIHt7SHRtbCAuRm9ybX19DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgICAgICQoJyNwbHVnaW4tc2V0dGluZy1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiOiLkv53lrZjlpLHotKUiKTsNCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCDQrc9U4AQAAOAEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5ccHJvZmlsZS5odG1sPGZvcm0gaWQ9InByb2ZpbGUiIGNsYXNzPSJhZG1pbiBmb3JtIGNsZWFyIGZvcm0tYWxpZ24iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0IiBuYW1lPSJwcm9maWxlLWZvcm0iPg0KICAgIDxkaXYgY2xhc3M9ImF2YXRhciBncmlkLTEtNCBsZWZ0IHRleHQtY2VudGVyIj4NCiAgICAgICAgPGltZyBzcmM9Int7LlVzZXIuQXZhdGFyfX0iIGFsdD0ie3suVXNlci5OaWNrfX0iIGNsYXNzPSJmaWVsZCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGZpZWxkIGlubGluZS1ibG9jayI+5aS05YOP55SxIDxhIGhyZWY9Imh0dHA6Ly9ncmF2YXRhci5jb20vIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJuby1mb2xsb3ciPkdyYXZhdGFyPC9hPiDmj5Dkvps8L3NwYW4+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1yZWQgaW5saW5lLWJsb2NrIiBocmVmPSIvYWRtaW4vcGFzc3dvcmQvIj7kv67mlLnlr4bnoIE8L2E+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJpbmZvIHJpZ2h0IGdyaWQtMy00Ij4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InVzZXIiPueZu+W9leWQjTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVzZXIiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHZhbHVlPSJ7ey5Vc2VyLk5hbWV9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7nmbvlvZXnmoTnlKjmiLflkI08L3NwYW4+PGJyLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1c2VyLWludmFsaWQiPueUqOaIt+WQjeS4uuWtl+avjSvmlbDlrZfvvIzplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJuaWNrIj7mmLXnp7A8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJuaWNrIiB0eXBlPSJ0ZXh0IiBuYW1lPSJuaWNrIiB2YWx1ZT0ie3suVXNlci5OaWNrfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+5pi+56S65Zyo5YmN5Y+w55qE56ew5ZG8PC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ibmljay1pbnZhbGlkIj7mmLXnp7Dplb/luqYyLTIw5Liq5a2X56ymPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJlbWFpbCI+6YKu566xPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iZW1haWwiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgdmFsdWU9Int7LlVzZXIuRW1haWx9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7ogZTns7vpgq7nrrHvvIzljYHliIbph43opoHvvIE8L3NwYW4+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJlbWFpbC1pbnZhbGlkIj7pgq7nrrHmoLzlvI/plJnor688L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InVybCI+572R5Z2APC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0idXJsIiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgdmFsdWU9Int7LlVzZXIuVXJsfX0iIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVybC1pbnZhbGlkIj7nvZHlnYDmoLzlvI/plJnor688L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IGJpbyIgbmFtZT0iYmlvIiBpZD0iYmlvIj57ey5Vc2VyLkJpb319PC90ZXh0YXJlYT4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOS/ruaUuTwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInByb2ZpbGUtZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoidXNlciIsInJ1bGVzIjoiYWxwaGFfbnVtZXJpY3xtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJuaWNrIiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJlbWFpbCIsInJ1bGVzIjoidmFsaWRfZW1haWwifSwNCiAgICAgICAgICAgIHsibmFtZSI6InVybCIsInJ1bGVzIjoidmFsaWRfdXJsIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjcHJvZmlsZScpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIH4+hXwIMAAACDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxzZXR0aW5nLmh0bWw8dWwgaWQ9InNldHRpbmctbmF2IiBjbGFzcz0iY29udGFpbmVyIHRleHQtY2VudGVyIj4NCiAgICA8bGk+PGEgaHJlZj0iI2dlbmVyYWwiPuWfuuacrDwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSIjbmF2Ij7lr7zoiKo8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iI2N1c3RvbSI+6Ieq5a6a5LmJPC9hPjwvbGk+DQo8L3VsPg0KPGRpdiBpZD0ic2V0dGluZy1wYW5lbHMiIGNsYXNzPSJjb250YWluZXIiPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybSBmb3JtLWFsaWduIHNldHRpbmctcGFuZWwiIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXVybCI+56uZ54K55Zyw5Z2APC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS11cmwiIGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0ic2l0ZV91cmwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV91cmxgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXRpdGxlIj7nq5nngrnkuLvmoIfpopg8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3RpdGxlIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXN1Yi10aXRsZSI+56uZ54K55Ymv5qCH6aKYPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1zdWItdGl0bGUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfc3ViX3RpdGxlIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfc3ViX3RpdGxlYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1rZXl3b3JkcyI+TWV0YeWFs+mUruWtlzwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUta2V5d29yZHMiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfa2V5d29yZHMiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLWRlc2MiPk1ldGHnq5nngrnku4vnu408L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLWRlc2MiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfZGVzY3JpcHRpb24iIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfZGVzY3JpcHRpb25gfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJhcnRpY2xlLXNpemUiPuWNlemhteaWh+eroOWIl+ihqOaVsDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImFydGljbGUtc2l6ZSIgY2xhc3M9ImlwdCIgdHlwZT0ibnVtYmVyIiBuYW1lPSJhcnRpY2xlX3NpemUiIHZhbHVlPSJ7e1NldHRpbmcgYGFydGljbGVfc2l6ZWB9fSIgbWF4PSIxMCIgbWluPSIzIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS10aGVtZSI+5Li76aKY55uu5b2V5ZCNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aGVtZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aGVtZSIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV90aGVtZWB9fSIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBibG9jayI+5Li76aKY5Y2z5oyH5ZCR55qE5qih5p2/55uu5b2V77yM5YW35L2T5YaF5a656K+35Y+C6ICDIGRlZmF1bHQg55uu5b2V77yI5Y2zIGRlZmF1bHQg5Li76aKY77yJPC9zcGFuPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2l0ZV90aGVtZV9kZWYiIHZhbHVlPSJkZWZhdWx0Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZ28tbWFya2Rvd24iPkdv5riy5p+TTWFya2Rvd248L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJnby1tYXJrZG93biIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duIiB2YWx1ZT0ie3tTZXR0aW5nIGBlbmFibGVfZ29fbWFya2Rvd25gfX0iLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPum7mOiupOWFs+mXre+8jOS9v+eUqOWJjeerr21hcmtlZC5qc+a4suafk++8jOWhq3RydWXml7blvIDlkK88L3NwYW4+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlbmFibGVfZ29fbWFya2Rvd25fZGVmIiB2YWx1ZT0iZmFsc2UiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZg8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZm9ybT4NCiAgICA8Zm9ybSBpZD0ic2V0dGluZy1uYXYtZm9ybSIgY2xhc3M9InNldHRpbmctZm9ybSBmb3JtIGZvcm0tYWxpZ24gc2V0dGluZy1wYW5lbCIgYWN0aW9uPSIvYWRtaW4vc2V0dGluZy9uYXYvIiBtZXRob2Q9InBvc3QiPnt7cmFuZ2UgLk5hdmlnYXRvcnN9fQ0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPuaOkuW6jzwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCBvcmRlciIgdHlwZT0ibnVtYmVyIiBuYW1lPSJvcmRlciIgdmFsdWU9Int7Lk9yZGVyfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5paH5pysPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRleHQiIHR5cGU9InRleHQiIG5hbWU9InRleHQiIHZhbHVlPSJ7ey5UZXh0fX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7moIfpopg8L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIHR5cGU9InRleHQiIG5hbWU9InRpdGxlIiB2YWx1ZT0ie3suVGl0bGV9fSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7pk77mjqU8L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgbGluayIgdHlwZT0idGV4dCIgbmFtZT0ibGluayIgdmFsdWU9Int7Lkxpbmt9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgIDwvcD57e2VuZH19DQogICAgICAgIDxwPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZg8L2J1dHRvbj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGFkZCIgaHJlZj0iIyIgcmVsPSIjbmF2LWl0ZW0iPua3u+WKoOS4gOmhuTwvYT4NCiAgICAgICAgPC9wPg0KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJuYXYtaXRlbSI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7mjpLluo88L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgb3JkZXIiIHR5cGU9Im51bWJlciIgbmFtZT0ib3JkZXIiIHZhbHVlPSIxIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7mlofmnKw8L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgdGV4dCIgdHlwZT0idGV4dCIgbmFtZT0idGV4dCIgdmFsdWU9IiIgcmVxdWlyZWQ9InJlcXVpcmVkIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7moIfpopg8L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIHR5cGU9InRleHQiIG5hbWU9InRpdGxlIiB2YWx1ZT0iIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7pk77mjqU8L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgbGluayIgdHlwZT0idGV4dCIgbmFtZT0ibGluayIgdmFsdWU9IiIgcmVxdWlyZWQ9InJlcXVpcmVkIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L3NjcmlwdD4NCiAgICA8L2Zvcm0+DQogICAgPGZvcm0gaWQ9InNldHRpbmctY3VzdG9tLWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybSBmb3JtLWFsaWduIHNldHRpbmctcGFuZWwiIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvY3VzdG9tLyIgbWV0aG9kPSJwb3N0Ij57e3JhbmdlICRrLCR2IDo9IC5DdXN0b219fQ0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgdmFsdWU9Int7JGt9fSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IG5hbWU9InZhbHVlIiBjbGFzcz0iaXB0IHZhbHVlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ie3skdn19Ii8+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgIDwvcD57e2VuZH19DQogICAgICAgIDxwPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZg8L2J1dHRvbj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGFkZCIgaHJlZj0iIyIgcmVsPSIjY3VzdG9tLWl0ZW0iPua3u+WKoOS4gOmhuTwvYT4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS9v+eUqOWHveaVsOiHquWumuS5iemFjee9ru+8jOmcgOimgeWKoOWJjee8gCJjXyLvvIzlpoJHZXRTZXR0aW5nKCJjX2tleSIpPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImN1c3RvbS1pdGVtIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgcGxhY2Vob2xkZXI9IuWtl+auteWQjSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IuWtl+auteWAvCIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9zY3JpcHQ+DQogICAgPC9mb3JtPg0KPC9kaXY+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeXRvb2xzLzEuMi43L2pxdWVyeS50b29scy5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI3NldHRpbmctbmF2JykudGFicygiLnNldHRpbmctcGFuZWwiKTsNCiAgICAgICAgJCgnLnNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiIDoganNvbi5tc2cpOw0KICAgICAgICB9KS5vbigiY2xpY2siLCIuYWRkIixmdW5jdGlvbihlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkucHJlcGVuZCgkKCQodGhpcykuYXR0cigicmVsIikpLmh0bWwoKSk7DQogICAgICAgIH0pLm9uKCJjbGljayIsIi5kZWwiLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgaWYoY29uZmlybSgi6KaB5Yig6Zmk6L+Z6aG577yfIikpew0KICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwgIQ4sTEBkAABAZAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAB2aWV3XGFkbWluXHdyaXRlX2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnmlofnq6DlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCiAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgPC9wPg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9hcnRpY2xlcy8iOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwi+ynR8IQwAACEMAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGFkbWluXHdyaXRlX3BhZ2UuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLpobXpnaLmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnpobXpnaLlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpobXpnaLnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCI+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQiPuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7nva7pobbpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImxpbmsiIGlkPSJpcy1saW5rIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9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ICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9Int7LklkfX0iPjxpIGNsYXNzPSJmYSBmYS1xdW90ZS1yaWdodCI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+e3tlbmR9fXt7ZW5kfX0NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LXNob3ciIGNsYXNzPSJ0ZXh0LWNlbnRlciI+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGVuYWJsZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+e3tlbHNlfX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1yZWQiPuacrOaWh+WFs+mXreS6huivhOiuujwvYnV0dG9uPnt7ZW5kfX0NCiAgICA8L2Rpdj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgY2xhc3M9ImhpZGUgY2xlYXIgdGV4dC1jZW50ZXIgZm9ybSIgYWN0aW9uPSIvY29tbWVudC97ey5Db250ZW50LklkfX0vIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8gbGVmdCB0ZXh0LXJpZ2h0Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIGMtYXZhdGFyLWZpZWxkIj4NCiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBudWxsIiBzcmM9Ii9zdGF0aWMvaW1nL3NpdGUucG5nIiBhbHQ9IiIgaWQ9ImNvbW1lbnQtYXZhdGFyIi8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5vdC1tZSBibG9jayIgaHJlZj0iIyI+5LiN5piv5oiRPzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mby1maWVsZHMgaGlkZSI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLnp7DlkbwiIGlkPSJjb21tZW50LWF1dGhvciIvPjwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6YKu566xIiBpZD0iY29tbWVudC1lbWFpbCIvPiA8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgcGxhY2Vob2xkZXI9Iue9keWdgCIgaWQ9ImNvbW1lbnQtdXJsIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY29tbWVudC1wYXJlbnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIG5hbWU9InBpZCIvPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWNvbnRlbnQgdGV4dC1sZWZ0IHJpZ2h0Ij4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuWPkeihqOivhOiuujwvYnV0dG9uPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGJsIGxibC1ncmVlbiBjYW5jZWwtcmVwbHkiIHR5cGU9ImJ1dHRvbiI+5Y+W5raI5Zue5aSNPC9idXR0b24+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZm9ybT57e2VuZH19DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY29tbWVudC10cGwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0iIiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3IiIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT5Ob3c8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9IiI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jaGVjayI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45Lit77yM5Yi35paw5ZCO6ZqQ6JePPC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPjwvc2VjdGlvbj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvc2NyaXB0Pg0KPC9kaXY+UEsHCG+ub1TiDAAA4gwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHZpZXdcZGVmYXVsdFxlcnJvci9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xkZWZhdWx0XGVycm9yXGVycm9yLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouato+WcqOaJk+eejOedoTwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWKquWKm+WUpOmGku+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCBOERlJ4AQAAeAEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHZpZXdcZGVmYXVsdFxlcnJvclxub3Rmb3VuZC5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPumUmeivr+aPkOekujwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPmJvZHl7bWFyZ2luOiA0MHB4IDEwMHB4fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoMj7mgqjorr/pl67nmoTpobXpnaLnprvlrrblh7rotbA8L2gyPjxici8+DQo8cD7nqIvluo/lkZjmraPlnKjlm5vlpITlr7vmib7vvIzor7fnqI3lgJnorr/pl64uLi48L3A+DQo8cD48YSBocmVmPSIvIj7ov5Tlm57pppbpobU8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwiQ+dTAdQEAAHUBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGRlZmF1bHRcaG9tZS5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iLz4NCiAgICA8dGl0bGU+e3tpZiAuVGl0bGV9fXt7LlRpdGxlfX0gLSB7e2VuZH19e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC90aXRsZT4NCiAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRnhoR28gQmxvZyIgLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL3N0eWxlLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19IC0gUlNTIDIuMCIgaHJlZj0iL3Jzcy54bWwiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIi8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8bmF2IGlkPSJuYXYiIGNsYXNzPSJjbGVhciB0ZXh0LWNlbnRlciI+DQogICAgPHVsPnt7cmFuZ2UgTmF2aWdhdG9yfX0NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRleHR9fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KPC9uYXY+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8cD4NCiAgICAgICAgPGEgY2xhc3M9IndlaWJvIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX3dlaWJvYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIj48L2k+V2VpYm88L2E+DQogICAgICAgIDxhIGNsYXNzPSJnaXQiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZ2l0aHViYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWdpdGh1YiI+PC9pPkdpdEh1YjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImVtYWlsIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX2VtYWlsYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlIj48L2k+RW1haWw8L2E+DQogICAgICAgIDxhIGNsYXNzPSJyc3MiIGhyZWY9Ii9yc3MueG1sIiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXJzcyI+PC9pPlJTUzwvYT57e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KICAgIDwvcD4NCiAgICA8c3Bhbj5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuIFByb3VkbHkgUG93ZXJlZCBieSBGeGguR28uPC9zcGFuPg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIC1vrljMJAAAzCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xkZWZhdWx0XGluZGV4Lmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5JZH19Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBsZWZ0IHRleHQtY2VudGVyIj57e2lmIGd0IC5Db21tZW50TnVtIDB9fQ0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PHN0cm9uZz57ey5Db21tZW50TnVtfX0g4oSDPC9zdHJvbmc+PC9hPjwvcD57e2VuZH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyI+PGkgY2xhc3M9ImZhIGZhLWV5ZSI+PC9pPjxzdHJvbmc+e3suSGl0c319IOKEiTwvc3Ryb25nPjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyYXkgdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT48c3Ryb25nPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1haW4iPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuU3VtbWFyeX19PC9zZWN0aW9uPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0aG9yIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT57ey5Vc2VyLk5pY2t9fTwvc3Bhbj57e2VuZH19e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXRhZ3MiPjwvaT57ey5UYWdTdHJpbmd9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlubGluZS1ibG9jayByZWFkIHJpZ2h0IiBocmVmPSJ7ey5MaW5rfX0iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT7nu6fnu63pmIXor7s8L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvYXJ0aWNsZT57e2VuZH19DQogICAgPGRpdiBjbGFzcz0icGFnZXIgdGV4dC1jZW50ZXIiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxhIGhyZWY9Ii9wL3t7Ln19LyIgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPnt7Ln19PC9hPnt7ZW5kfX0NCiAgICA8L2Rpdj4NCjwvZGl2PlBLBwipLoBo5wUAAOcFAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGRlZmF1bHRccGFnZS5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIiBpZD0iYXJ0aWNsZS1JZCI+e3t3aXRoIC5QYWdlfX0NCiAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idmlld3MgaW5saW5lLWJsb2NrIHJpZ2h0Ij7pmIXor7smbmJzcDsmbmJzcDs8c3Bhbj57ey5IaXRzfX08L3NwYW4+Jm5ic3A7Jm5ic3A75qyhPC9zcGFuPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgIDwvYXJ0aWNsZT4NCjwvZGl2PlBLBwhcAM7dBAMAAAQDAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAB2aWV3XGxpbmcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xhcnRpY2xlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIgYXJ0aWNsZS1zaW5nbGUgcmVsYXRpdmUge3suQXJ0aWNsZS5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIGFic29sdXRlIj57ey5IaXRzfX08L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJ0aW1lLWluZm8iPnt7aWYgLlVzZXJ9fTxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDt7e2VuZH195Y+R6KGo5LqOJm5ic3A7Jm5ic3A7Jm5ic3A7e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIllZWVkg5bm0IE1NIOaciCBERCDml6UifX08L3A+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPuagh+etvu+8mnt7LlRhZ1N0cmluZ319PC9zcGFuPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCBrCnX1tAwAAbQMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0icmVsYXRpdmUiPg0KICAgIDxoNCBpZD0iY29tbWVudC10aXRsZSI+5paH56ug6K+E6K66PC9oND4NCiAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+e3suQ29udGVudC5Db21tZW50TnVtfX08L2E+PC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIGNsZWFyIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkgbGJsIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LklkfX0iPuWbnuWkjTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHA+PGEgY2xhc3M9ImMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9ImMtdGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NIOaciCBERCDml6UgSEgg5pe2IG1tIOWIhiJ9fTwvc3Bhbj48L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8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YWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvbGluZy5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIgY2xhc3M9ImxlZnQiLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCIgY2xhc3M9ImxlZnQiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiIGNsYXNzPSJsZWZ0Ij57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4NCiAgICAgICAgPG5hdiBpZD0ibmF2IiBjbGFzcz0icmlnaHQiPg0KICAgICAgICAgICAgPHVsPnt7cmFuZ2UgTmF2aWdhdG9yfX0NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGV4dH19PC9hPjwvbGk+e3tlbmR9fQ0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9uYXY+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCBjbGVhciI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0Ij5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0icmlnaHQiPlByb3VkbHkgUG93ZXJlZCBieSBGeGguR28uPC9zcGFuPg0KICAgIDwvZGl2Pg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KICAgIHt7U2V0dGluZyBgY19mb290ZXJfZ2FgIHwgSHRtbH19DQo8L2Zvb3Rlcj4NCjxzY3Jp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" \ No newline at end of file From 770fe03ade9139c4a1055ab50a02f57ece67abed Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sun, 9 Feb 2014 23:37:19 +0800 Subject: [PATCH 28/82] rss and sitemap xml support --- app/app.go | 6 +-- app/handler/rss.go | 98 ++++++++++++++++++++++++---------- static/css/sitemap.xsl | 110 +++++++++++++++++++++++++++++++++++++++ view/default/home.layout | 2 +- view/ling/home.layout | 2 +- view/rss.xml | 16 ++++++ view/sitemap.xml | 21 ++++++++ 7 files changed, 222 insertions(+), 33 deletions(-) create mode 100644 static/css/sitemap.xsl create mode 100644 view/rss.xml create mode 100644 view/sitemap.xml diff --git a/app/app.go b/app/app.go index 31b7e39..65c593a 100644 --- a/app/app.go +++ b/app/app.go @@ -20,7 +20,7 @@ import ( var ( VERSION = 20140131 App *GoInk.App - staticFileSuffix = ".css,.js,.jpg,.jpeg,.png,.gif,.ico,.xml,.zip,.txt,.html,.otf,.svg,.eot,.woff,.ttf,.doc,.ppt,.xls,.docx,.pptx,.xlsx" + staticFileSuffix = ".css,.js,.jpg,.jpeg,.png,.gif,.ico,.xml,.zip,.txt,.html,.otf,.svg,.eot,.woff,.ttf,.doc,.ppt,.xls,.docx,.pptx,.xlsx,.xsl" uploadFileSuffix = ".jpg,.png,.gif,.zip,.txt,.doc,.docx,.xls,.xlsx,.ppt,.pptx" ) @@ -210,8 +210,8 @@ func registerHomeHandler() { App.Get("/p/:page/", handler.Home) App.Post("/comment/:id/", handler.Comment) - App.Get("/rss/", handler.Feed) - App.Get("/feed/", handler.Feed) + App.Get("/feed/", handler.Rss) + App.Get("/sitemap",handler.SiteMap) App.Get("/:slug", handler.TopPage) App.Get("/", handler.Home) diff --git a/app/handler/rss.go b/app/handler/rss.go index 5440bc3..5d21f2c 100644 --- a/app/handler/rss.go +++ b/app/handler/rss.go @@ -4,41 +4,83 @@ import ( "github.com/fuxiaohei/GoBlog/app/model" "github.com/fuxiaohei/GoBlog/app/utils" "github.com/fuxiaohei/GoInk" - "github.com/gorilla/feeds" - "path" + "strings" "time" ) -func Feed(context *GoInk.Context) { +func SiteMap(ctx *GoInk.Context) { baseUrl := model.GetSetting("site_url") - article, _ := model.GetArticleList(1, 20) - feed := new(feeds.Feed) - feed.Title = model.GetSetting("site_title") - feed.Link = &feeds.Link{Href: baseUrl} - feed.Description = model.GetSetting("site_description") - author := model.GetUsersByRole("ADMIN")[0] - feed.Author = &feeds.Author{author.Nick, author.Email} - feed.Items = make([]*feeds.Item, 0) - var create int64 - if len(article) > 0 { - create = article[0].EditTime - } else { - create = utils.Now() + println(baseUrl) + article, _ := model.GetPublishArticleList(1, 50) + navigators := model.GetNavigators() + now := time.Unix(utils.Now(), 0).Format(time.RFC3339) + + articleMap := make([]map[string]string, len(article)) + for i, a := range article { + m := make(map[string]string) + m["Link"] = strings.Replace(baseUrl+a.Link(), baseUrl+"/", baseUrl, -1) + m["Created"] = time.Unix(a.CreateTime, 0).Format(time.RFC3339) + articleMap[i] = m + } + + navMap := make([]map[string]string, len(navigators)) + for i, n := range navigators { + m := make(map[string]string) + println(baseUrl + n.Link) + if strings.HasPrefix(n.Link, "/") { + m["Link"] = strings.Replace(baseUrl+n.Link, baseUrl+"/", baseUrl, -1) + } else { + m["Link"] = n.Link + } + m["Created"] = now + navMap[i] = m + } + + ctx.ContentType("text/xml") + bytes, e := ctx.App().View().Render("sitemap.xml", map[string]interface{}{ + "Title": model.GetSetting("site_title"), + "Link": baseUrl, + "Created": now, + "Articles": articleMap, + "Navigators": navMap, + }) + if e != nil { + panic(e) } - feed.Created = time.Unix(create, 0) - for _, a := range article { - item := new(feeds.Item) - item.Title = a.Title - item.Link = &feeds.Link{Href: path.Join(baseUrl, a.Link())} - item.Author = feed.Author - item.Created = time.Unix(a.CreateTime, 0) - item.Description = utils.Markdown2Html(a.Summary()) - feed.Items = append(feed.Items, item) + ctx.Body = bytes + +} + +func Rss(ctx *GoInk.Context) { + baseUrl := model.GetSetting("site_url") + article, _ := model.GetPublishArticleList(1, 20) + author := model.GetUsersByRole("ADMIN")[0] + + articleMap := make([]map[string]string, len(article)) + for i, a := range article { + m := make(map[string]string) + m["Title"] = a.Title + m["Link"] = strings.Replace(baseUrl+a.Link(), baseUrl+"/", baseUrl, -1) + m["Author"] = author.Nick + str := utils.Markdown2Html(a.Content()) + str = strings.Replace(str, `src="/`, `src="`+strings.TrimSuffix(baseUrl, "/")+"/", -1) + str = strings.Replace(str, `href="/`, `href="`+strings.TrimSuffix(baseUrl, "/")+"/", -1) + m["Desc"] = str + m["Created"] = time.Unix(a.CreateTime, 0).Format(time.RFC822) + articleMap[i] = m } - str, e := feed.ToRss() + + ctx.ContentType("application/rss+xml;charset=UTF-8") + + bytes, e := ctx.App().View().Render("rss.xml", map[string]interface{}{ + "Title": model.GetSetting("site_title"), + "Link": baseUrl, + "Desc": model.GetSetting("site_description"), + "Created": time.Unix(utils.Now(), 0).Format(time.RFC822), + "Articles": articleMap, + }) if e != nil { panic(e) } - context.ContentType("application/rss+xml;charset=UTF-8") - context.Body = []byte(str) + ctx.Body = bytes } diff --git a/static/css/sitemap.xsl b/static/css/sitemap.xsl new file mode 100644 index 0000000..a24063e --- /dev/null +++ b/static/css/sitemap.xsl @@ -0,0 +1,110 @@ + + + + + + + XML Sitemap + + + + +

      XML Sitemap

      +
      +

      + This is a XML Sitemap which is supposed to be processed by search engines like Google, MSN Search and YAHOO.
      + + You can find more information about XML sitemaps on sitemaps.org and Google's list of sitemap programs. +

      +
      +
      + + + + + + + + + + + + + high + + + + + + + +
      URLPriorityChange FrequencyLastChange (GMT)
      + + + + + + + + + + + + +
      +
      + + + +
      +
      \ No newline at end of file diff --git a/view/default/home.layout b/view/default/home.layout index ee50288..69c885a 100644 --- a/view/default/home.layout +++ b/view/default/home.layout @@ -10,7 +10,7 @@ - + diff --git a/view/ling/home.layout b/view/ling/home.layout index 9a6ac95..a094999 100644 --- a/view/ling/home.layout +++ b/view/ling/home.layout @@ -10,7 +10,7 @@ - + diff --git a/view/rss.xml b/view/rss.xml new file mode 100644 index 0000000..4cbb250 --- /dev/null +++ b/view/rss.xml @@ -0,0 +1,16 @@ +{{Html ``}} + + + {{.Title}} + {{.Link}}/ + {{.Desc}} + {{.Created}}{{range .Articles}} + + {{.Title}} + {{.Link}} + {{.Desc}} + {{.Author}} + {{.Created}} + {{end}} + + \ No newline at end of file diff --git a/view/sitemap.xml b/view/sitemap.xml new file mode 100644 index 0000000..5137cb1 --- /dev/null +++ b/view/sitemap.xml @@ -0,0 +1,21 @@ +{{Html ``}}{{Html ``}} + + + {{.Link}} + {{.Created}} + daily + 1.0 + {{range .Navigators}} + + {{.Link}} + {{.Created}} + weekly + 0.6 + {{end}}{{range .Articles}} + + {{.Link}} + {{.Created}} + monthly + 0.3 + {{end}} + \ No newline at end of file From c8db6b078f6a56dcd1a702ffdc413d32517a85f9 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Mon, 10 Feb 2014 22:41:40 +0800 Subject: [PATCH 29/82] add monitor page, update backup code, update zip bytes --- app/app.go | 5 +++-- app/cmd/backup.go | 10 ++++++++++ app/cmd/monitor.go | 34 ++++++++++++++++++++++++++++++++++ app/cmd/zip.go | 2 +- app/handler/cmd.go | 8 ++++++++ app/handler/rss.go | 10 ++++++---- view/admin/admin.layout | 2 +- view/admin/cmd/monitor.html | 10 ++++++++++ view/default/home.layout | 2 +- 9 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 app/cmd/monitor.go create mode 100644 view/admin/cmd/monitor.html diff --git a/app/app.go b/app/app.go index 65c593a..c9466e6 100644 --- a/app/app.go +++ b/app/app.go @@ -18,7 +18,7 @@ import ( ) var ( - VERSION = 20140131 + VERSION = 20140209 App *GoInk.App staticFileSuffix = ".css,.js,.jpg,.jpeg,.png,.gif,.ico,.xml,.zip,.txt,.html,.otf,.svg,.eot,.woff,.ttf,.doc,.ppt,.xls,.docx,.pptx,.xlsx,.xsl" uploadFileSuffix = ".jpg,.png,.gif,.zip,.txt,.doc,.docx,.xls,.xlsx,.ppt,.pptx" @@ -199,6 +199,7 @@ func registerCmdHandler() { App.Route("GET,POST,DELETE", "/cmd/message/", handler.Auth, handler.CmdMessage) App.Route("GET,DELETE", "/cmd/logs/", handler.Auth, handler.CmdLogs) + App.Get("/cmd/monitor/", handler.Auth, handler.CmdMonitor) } func registerHomeHandler() { @@ -211,7 +212,7 @@ func registerHomeHandler() { App.Post("/comment/:id/", handler.Comment) App.Get("/feed/", handler.Rss) - App.Get("/sitemap",handler.SiteMap) + App.Get("/sitemap", handler.SiteMap) App.Get("/:slug", handler.TopPage) App.Get("/", handler.Home) diff --git a/app/cmd/backup.go b/app/cmd/backup.go index 9b86a6a..fdafd03 100644 --- a/app/cmd/backup.go +++ b/app/cmd/backup.go @@ -25,6 +25,16 @@ func DoBackup(app *GoInk.App, withData bool) (string, error) { return "", e } root, _ := os.Getwd() + if withData { + lockFile := path.Join(root, "install.lock") + if utils.IsFile(lockFile) { + z.AddFile("install.lock", lockFile) + } + configFile := path.Join(root, "config.json") + if utils.IsFile(configFile) { + z.AddFile("config.json", configFile) + } + } z.AddDir("static/css", path.Join(root, "static", "css")) z.AddDir("static/img", path.Join(root, "static", "img")) z.AddDir("static/js", path.Join(root, "static", "js")) diff --git a/app/cmd/monitor.go b/app/cmd/monitor.go new file mode 100644 index 0000000..cf1fee3 --- /dev/null +++ b/app/cmd/monitor.go @@ -0,0 +1,34 @@ +package cmd + +import ( + "runtime" + "github.com/fuxiaohei/GoBlog/app/utils" + "time" + "fmt" +) + +type monitorStats struct { + NumGoroutine int + MemAllocated string + MemMalloc string + MemTotal string + MemSys string + MemHeap string + MemGc string + LastGcTime string +} + +func ReadMemStats() *monitorStats { + m := new(runtime.MemStats) + runtime.ReadMemStats(m) + ms := new(monitorStats) + ms.NumGoroutine = runtime.NumGoroutine() + ms.MemAllocated = utils.FileSize(int64(m.Alloc)) + ms.MemTotal = utils.FileSize(int64(m.TotalAlloc)) + ms.MemSys = utils.FileSize(int64(m.Sys)) + ms.MemHeap = utils.FileSize(int64(m.HeapAlloc)) + ms.MemMalloc = utils.FileSize(int64(m.Mallocs)) + ms.LastGcTime = fmt.Sprintf("%.1fs",float64(time.Now().UnixNano() - int64(m.LastGC))/1000/1000/1000) + ms.MemGc = utils.FileSize(int64(m.NextGC)) + return ms +} diff --git a/app/cmd/zip.go b/app/cmd/zip.go index f218a4e..5daaf20 100644 --- a/app/cmd/zip.go +++ b/app/cmd/zip.go @@ -1,2 +1,2 @@ package cmd -const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnt3aWR0aDoxMDAwcHg7bWFyZ2luLXRvcDoyNHB4O21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNzZXR0aW5nLW5hdiBsaXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCAxMnB4fSNzZXR0aW5nLW5hdiBsaSBhe3BhZGRpbmc6M3B4IDEwcHh9CiNzZXR0aW5nLW5hdiBsaSBhOmhvdmVyLCNzZXR0aW5nLW5hdiBsaSBhLmN1cnJlbnR7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzAwNWI5Yn0KLnNldHRpbmctcGFuZWx7ZGlzcGxheTpub25lfQouc2V0dGluZy1mb3Jte3dpZHRoOjgyMHB4O21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfS5zZXR0aW5nLWZvcm0gLmlwdHt3aWR0aDo0ODBweH0KLnNldHRpbmctZm9ybSAuaW52YWxpZHttYXJnaW4tbGVmdDo3NXB4fQouc2V0dGluZy1mb3JtIGxhYmVse21pbi13aWR0aDoxMGVtfQouc2V0dGluZy1mb3JtIC50aXAuYmxvY2t7bWFyZ2luLWxlZnQ6MTJlbX0KI3NldHRpbmctY3VzdG9tLWZvcm17d2lkdGg6MTAwMHB4fSNzZXR0aW5nLWN1c3RvbS1mb3JtIGlucHV0LmtleXt3aWR0aDoyNTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQudmFsdWV7d2lkdGg6NjUwcHh9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5pdGVte21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojc2V0dGluZy1jdXN0b20tZm9ybSAuZGVse21hcmdpbi1sZWZ0OjEycHg7Y29sb3I6I2U2NDM0Nn0KI3NldHRpbmctY3VzdG9tLWZvcm0gLnRpcHttYXJnaW4tbGVmdDowfQojc2V0dGluZy1uYXYtZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctbmF2LWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLW5hdi1mb3JtIHNwYW4ubGFiZWx7bWFyZ2luLXJpZ2h0OjZweH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQub3JkZXJ7d2lkdGg6Mi41ZW07bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0LnRleHR7d2lkdGg6ODBweDttaW4td2lkdGg6MH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQudGl0bGV7d2lkdGg6MTUwcHg7bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0Lmxpbmt7d2lkdGg6MzQwcHh9CiNzZXR0aW5nLW5hdi1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jbnQsI2NvbW1lbnQtbGlzdCAuYy1lbWFpbHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWxpc3QgLmMtc2VjdGlvbnttYXgtd2lkdGg6ODMwcHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2ssI2NvbW1lbnQtbGlzdCAuYy1kZWx7Y29sb3I6I2U2NDM0Nn0jY29tbWVudC1saXN0IC5jLWNoZWNrIC5mYSwjY29tbWVudC1saXN0IC5jLWRlbCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjazpob3ZlciwjY29tbWVudC1saXN0IC5jLWRlbDpob3Zlcntjb2xvcjojYWEzOTNjfQojY29tbWVudC1mb3Jte3BhZGRpbmctdG9wOjEycHg7ZGlzcGxheTpub25lO21hcmdpbi1sZWZ0OjcycHh9I2NvbW1lbnQtZm9ybSAuYnRue21hcmdpbi1yaWdodDoyNHB4fQojY29tbWVudC1jb250ZW50e3dpZHRoOjUwMHB4O2hlaWdodDo4MHB4O21hcmdpbi1yaWdodDoyNHB4fQojZmlsZXMtbGlzdCBsaS5maWxle21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZmlsZXMtbGlzdCBsaS5maWxlPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNmaWxlcy1saXN0IGxpLmZpbGU6aG92ZXIgLmRlbHtvcGFjaXR5OjEgIWltcG9ydGFudH0KI2ZpbGVzLWxpc3QgLnVwbG9hZC10aW1le2NvbG9yOiM5OTk7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2ZpbGVzLWxpc3QgLmRlbHtjb2xvcjojZTY0MzQ2fQojZmlsZXMtbGlzdCAuZmlsZS1wcm9ncmVzc3twYWRkaW5nOjAgMTJweDtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMik7Y29sb3I6IzY2Njtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNzLmVycntiYWNrZ3JvdW5kOnJnYmEoMjU1LDY4LDcxLDAuMik7Y29sb3I6I2FhMzkzY30KI2ZpbGVzLWxpc3QgLnNpemV7d2lkdGg6NGVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfQojcGx1Z2luLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxNnB4O3BhZGRpbmctYm90dG9tOjE2cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3BsdWdpbi1saXN0IGxpIC5kZXNje21hcmdpbi1ib3R0b206MDt3aWR0aDo5OSU7Y29sb3I6Izk5OX0KI3BsdWdpbi1saXN0IGxpIGEubGJse3BhZGRpbmc6MCA4cHg7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC52ZXJzaW9ue2NvbG9yOiM1MDc2NTA7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC5uYW1le2ZvbnQtc2l6ZToxNnB4fQojcGx1Z2luLWxpc3QgbGkgLmFjdGl2ZXt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O21hcmdpbi1yaWdodDoxNnB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjEwcHh9CiNwbHVnaW4tbGlzdCBsaSAuc2V0dGluZ3ttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBwLml0ZW17Y2xlYXI6Ym90aH0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gbGFiZWx7ZmxvYXQ6bGVmdDttaW4td2lkdGg6NmVtO3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luLXJpZ2h0OjJlbX0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gLnRpdGxle3BhZGRpbmctdG9wOjA7bWFyZ2luLWJvdHRvbToxOHB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBpbnB1dC5pcHR7d2lkdGg6NjAwcHh9CiNkYXNoYm9hcmQgLmdyaWQtMS01e21hcmdpbi1yaWdodDoyJX0KI2Rhc2hib2FyZCAucXVpY2stbGluayBsaXtsaXN0LXN0eWxlOmluc2lkZSBkaXNjO21hcmdpbi1ib3R0b206NnB4O3BhZGRpbmctYm90dG9tOjZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2Rhc2hib2FyZCAuc3RhdHMgLmxibHtwYWRkaW5nOjFweCA1cHg7bWFyZ2luOjAgM3B4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNne3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZzpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMDYpfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2c6aG92ZXIgLnJlYWR7b3BhY2l0eToxfQpQSwcIHMaB8VMyAABTMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGNzc1xjbWQuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Ci5jbWR7bWFyZ2luOjI0cHggNDhweH0KLmNtZC1oZWFkZXJ7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtYnRue21hcmdpbjoxMHB4IDAgMCAzMHB4fQouY21kLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtbGlzdCBsaXtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlO2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2JhY2t1cC1saXN0IGxpPnNwYW4sI2JhY2t1cC1saXN0IGxpPmF7bWFyZ2luLXJpZ2h0OjE2cHh9CiNiYWNrdXAtbGlzdCBsaSAuZGVse2NvbG9yOiNlNjQzNDY7b3BhY2l0eTowfQojYmFja3VwLWxpc3QgbGkgLmxpbmt7bWFyZ2luLWxlZnQ6MTJweH0KI2JhY2t1cC1saXN0IGxpOmhvdmVyIC5kZWx7b3BhY2l0eToxfQojbWVzc2FnZS1saXN0IC5tZXNzYWdle3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI21lc3NhZ2UtbGlzdCAubWVzc2FnZTpob3ZlciAucmVhZHtvcGFjaXR5OjF9CiNsb2ctbGlzdCAubG9ne2ZvbnQtc2l6ZToxMnB4fQojbG9nLWxpc3QgLm5hbWV7bWFyZ2luLXJpZ2h0OjEuNWVtO2ZvbnQtd2VpZ2h0OmJvbGR9CiNsb2ctbGlzdCAudGltZSwjbG9nLWxpc3QgLm5hbWV7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2xvZy1saXN0IC50ZXh0e2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbDtjb2xvcjojNjY2O3BhZGRpbmc6OHB4IDEycHg7YmFja2dyb3VuZDojZjNmM2YzfQojbG9nLWxpc3QgLnJlbW92ZXt0b3A6MDtyaWdodDoxMnB4O2NvbG9yOiNlNjQzNDZ9ClBLBwjSN8QbLxoAAC8aAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAABzdGF0aWNcY3NzXGNvZGVtaXJyb3IuY3NzLyogQkFTSUNTICovCgouQ29kZU1pcnJvciB7CiAgICAvKiBTZXQgaGVpZ2h0LCB3aWR0aCwgYm9yZGVycywgYW5kIGdsb2JhbCBmb250IHByb3BlcnRpZXMgaGVyZSAqLwogICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiTWljcm9zb2Z0IFlhSGVpIiwgIkNvdXJpZXIgTmV3IiwgQXJpYWw7CiAgICBoZWlnaHQ6IDY2MHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgYm9yZGVyOjFweCBzb2xpZCAjOTk5Owp9CgouQ29kZU1pcnJvci1zY3JvbGwgewogICAgLyogU2V0IHNjcm9sbGluZyBiZWhhdmlvdXIgaGVyZSAqLwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi8qIFBBRERJTkcgKi8KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIHBhZGRpbmc6IDRweCAwOyAvKiBWZXJ0aWNhbCBwYWRkaW5nIGFyb3VuZCBjb250ZW50ICovCn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICBwYWRkaW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KfQoKLyogR1VUVEVSICovCgouQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLkNvZGVNaXJyb3ItbGluZW51bWJlcnMgewp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIHBhZGRpbmc6IDAgM3B4IDAgNXB4OwogICAgbWluLXdpZHRoOiAyMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBjb2xvcjogIzU1NTsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4Owp9CgovKiBDVVJTT1IgKi8KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogICAgei1pbmRleDogMzsKfQoKLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7Cn0KCi5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB3aWR0aDogYXV0bzsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6ICM3ZTc7CiAgICB6LWluZGV4OiAxOwp9CgovKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHsKfQoKLmNtLXRhYiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi8qIERFRkFVTFQgVEhFTUUgKi8KCi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQgewogICAgY29sb3I6ICM3MDg7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWF0b20gewogICAgY29sb3I6ICMyMTk7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7CiAgICBjb2xvcjogIzE2NDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tZGVmIHsKICAgIGNvbG9yOiAjMDBmOwp9CgouY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZSB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICMwNWE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTMgewogICAgY29sb3I6ICMwODU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5IHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3IgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHsKICAgIGNvbG9yOiAjYTUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1zdHJpbmcgewogICAgY29sb3I6ICNhMTE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0yIHsKICAgIGNvbG9yOiAjZjUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1tZXRhIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW4gewogICAgY29sb3I6ICMzMGE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICM5OTc7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7CiAgICBjb2xvcjogIzE3MDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIgewogICAgY29sb3I6IGJsdWU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1b3RlIHsKICAgIGNvbG9yOiAjMDkwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1ociB7CiAgICBjb2xvcjogIzk5OTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbGluayB7CiAgICBjb2xvcjogIzAwYzsKfQoKLmNtLW5lZ2F0aXZlIHsKICAgIGNvbG9yOiAjZDQ0Owp9CgouY20tcG9zaXRpdmUgewogICAgY29sb3I6ICMyOTI7Cn0KCi5jbS1oZWFkZXIsIC5jbS1zdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5jbS1lbSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5jbS1saW5rIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7CiAgICBjb2xvcjogI2YwMDsKfQoKLmNtLWludmFsaWRjaGFyIHsKICAgIGNvbG9yOiAjZjAwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjMGYwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjZjIyOwp9CgouQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogI2U4ZjJmZjsKfQoKLyogU1RPUCAqLwoKLyogVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGNvbnRhaW5zIHN0eWxlcyByZWxhdGVkIHRvIHRoZSBtZWNoYW5pY3Mgb2YKICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwoKLkNvZGVNaXJyb3IgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciAqLwogICAgbWFyZ2luLWJvdHRvbTogLTMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IC0zMHB4OwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CgouQ29kZU1pcnJvci1zaXplciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcKICAgYmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZAogICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA2OwogICAgZGlzcGxheTogbm9uZTsKfQoKLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7CiAgICByaWdodDogMDsKICAgIHRvcDogMDsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKfQoKLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgb3ZlcmZsb3cteDogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGxlZnQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHRvcDogMDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgei1pbmRleDogMzsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIG1hcmdpbi1ib3R0b206IC0zMnB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgLyogSGFjayB0byBtYWtlIElFNyBiZWhhdmUgKi8KICAgICp6b29tOiAxOwogICAgKmRpc3BsYXk6IGlubGluZTsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB6LWluZGV4OiA0Owp9CgouQ29kZU1pcnJvci1saW5lcyB7CiAgICBjdXJzb3I6IHRleHQ7Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovCiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLXdpZHRoOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgIG1hcmdpbjogMDsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICB6LWluZGV4OiAyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7Cn0KCi5Db2RlTWlycm9yLXdyYXAgcHJlIHsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKfQoKLkNvZGVNaXJyb3ItY29kZSBwcmUgewogICAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7CiAgICB3aWR0aDogLW1vei1maXQtY29udGVudDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogYXV0bzsKfQoKLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgei1pbmRleDogMDsKfQoKLkNvZGVNaXJyb3ItbGluZXdpZGdldCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi5Db2RlTWlycm9yLXdpZGdldCB7Cn0KCi5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7Cn0KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogMDsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogI2Q5ZDlkOTsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDdkNGYwOwp9CgouY20tc2VhcmNoaW5nIHsKICAgIGJhY2tncm91bmQ6ICNmZmE7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAuNCk7Cn0KCi8qIElFNyBoYWNrIHRvIHByZXZlbnQgaXQgZnJvbSByZXR1cm5pbmcgZnVubnkgb2Zmc2V0VG9wcyBvbiB0aGUgc3BhbnMgKi8KLkNvZGVNaXJyb3Igc3BhbiB7CiAgICAqdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwp9CgpAbWVkaWEgcHJpbnQgewogICAgLyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KICAgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQp9CgouY20tcy1iYXNlMTYtZGFyay5Db2RlTWlycm9yIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogIzIwMjAyMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBib3JkZXItcmlnaHQ6IDBweDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItbGluZW51bWJlciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2IwYjBiMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICM4ZjU1MzY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXRvbSB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1udW1iZXIgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWtleXdvcmQgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tc3RyaW5nIHsKICAgIGNvbG9yOiAjZjRiZjc1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICM2YTlmYjU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZGVmIHsKICAgIGNvbG9yOiAjZDI4NDQ1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICNlMGUwZTA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdGFnIHsKICAgIGNvbG9yOiAjYWM0MTQyOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWxpbmsgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZXJyb3IgewogICAgYmFja2dyb3VuZDogI2FjNDE0MjsKICAgIGNvbG9yOiAjYjBiMGIwOwp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogIzJGMkYyRiAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQpQSwcIIwM1gk4gAABOIAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAc3RhdGljXGNzc1xjb21tb24uY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH1oZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfWZpZWxkc2V0LGltZ3tib3JkZXI6MH1hZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfW9sLHVse2xpc3Qtc3R5bGU6bm9uZX1jYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9cTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfWFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfXN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH1zdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1sZWdlbmR7Y29sb3I6IzAwMH1odG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn1he3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifXB7bWFyZ2luLWJvdHRvbToxOHB4fWgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfWgxe2ZvbnQtc2l6ZToyOHB4fWgye2ZvbnQtc2l6ZToyNHB4fWgze2ZvbnQtc2l6ZToyMXB4fWg0e2ZvbnQtc2l6ZToxOXB4fWg1e2ZvbnQtc2l6ZToxNnB4fWg2e2ZvbnQtc2l6ZToxNHB4fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5sZWZ0e2Zsb2F0OmxlZnR9LnJpZ2h0e2Zsb2F0OnJpZ2h0fS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0udmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmZhZGUtb3V0e29wYWNpdHk6MH0uaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uY29udGFpbmVye3dpZHRoOjEyMDBweDttYXJnaW46YXV0b30uY29udGFpbmVyOTYwe3dpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmctYm90dG9tOjEycHh9Lm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fVBLBwh7vP2MJhQAACYUAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAABzdGF0aWNcY3NzXGhpZ2hsaWdodC5jc3MvKg0KDQpTdW5idXJzdC1saWtlIHN0eWxlIChjKSBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+DQoNCiovDQoNCnByZSBjb2RlIHsNCiAgICBkaXNwbGF5OiBibG9jazsgcGFkZGluZzogMC41ZW07DQogICAgYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmOGY4Zjg7DQp9DQoNCnByZSAuY29tbWVudCwNCnByZSAudGVtcGxhdGVfY29tbWVudCwNCnByZSAuamF2YWRvYyB7DQogICAgY29sb3I6ICNhZWFlYWU7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmtleXdvcmQsDQpwcmUgLnJ1YnkgLmZ1bmN0aW9uIC5rZXl3b3JkLA0KcHJlIC5yZXF1ZXN0LA0KcHJlIC5zdGF0dXMsDQpwcmUgLm5naW54IC50aXRsZSB7DQogICAgY29sb3I6ICNFMjg5NjQ7DQp9DQoNCnByZSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnN1YiAua2V5d29yZCwNCnByZSAubWV0aG9kLA0KcHJlIC5saXN0IC50aXRsZSB7DQogICAgY29sb3I6ICM5OUNGNTA7DQp9DQoNCnByZSAuc3RyaW5nLA0KcHJlIC50YWcgLnZhbHVlLA0KcHJlIC5jZGF0YSwNCnByZSAuZmlsdGVyIC5hcmd1bWVudCwNCnByZSAuYXR0cl9zZWxlY3RvciwNCnByZSAuYXBhY2hlIC5jYnJhY2tldCwNCnByZSAuZGF0ZSwNCnByZSAudGV4IC5jb21tYW5kLA0KcHJlIC5jb2ZmZWVzY3JpcHQgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICM2NUIwNDI7DQp9DQoNCnByZSAuc3Vic3Qgew0KICAgIGNvbG9yOiAjREFFRkEzOw0KfQ0KDQpwcmUgLnJlZ2V4cCB7DQogICAgY29sb3I6ICNFOUMwNjI7DQp9DQoNCnByZSAudGl0bGUsDQpwcmUgLnN1YiAuaWRlbnRpZmllciwNCnByZSAucGksDQpwcmUgLnRhZywNCnByZSAudGFnIC5rZXl3b3JkLA0KcHJlIC5kZWNvcmF0b3IsDQpwcmUgLnNoZWJhbmcsDQpwcmUgLnByb21wdCB7DQogICAgY29sb3I6ICM4OUJERkY7DQp9DQoNCnByZSAuY2xhc3MgLnRpdGxlLA0KcHJlIC5oYXNrZWxsIC50eXBlLA0KcHJlIC5zbWFsbHRhbGsgLmNsYXNzLA0KcHJlIC5qYXZhZG9jdGFnLA0KcHJlIC55YXJkb2N0YWcsDQpwcmUgLnBocGRvYyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCnByZSAuc3ltYm9sLA0KcHJlIC5ydWJ5IC5zeW1ib2wgLnN0cmluZywNCnByZSAubnVtYmVyIHsNCiAgICBjb2xvcjogIzMzODdDQzsNCn0NCg0KcHJlIC5wYXJhbXMsDQpwcmUgLnZhcmlhYmxlLA0KcHJlIC5jbG9qdXJlIC5hdHRyaWJ1dGUgew0KICAgIGNvbG9yOiAjM0U4N0UzOw0KfQ0KDQpwcmUgLmNzcyAudGFnLA0KcHJlIC5ydWxlcyAucHJvcGVydHksDQpwcmUgLnBzZXVkbywNCnByZSAudGV4IC5zcGVjaWFsIHsNCiAgICBjb2xvcjogI0NEQTg2OTsNCn0NCg0KcHJlIC5jc3MgLmNsYXNzIHsNCiAgICBjb2xvcjogIzlCNzAzRjsNCn0NCg0KcHJlIC5ydWxlcyAua2V5d29yZCB7DQogICAgY29sb3I6ICNDNUFGNzU7DQp9DQoNCnByZSAucnVsZXMgLnZhbHVlIHsNCiAgICBjb2xvcjogI0NGNkE0QzsNCn0NCg0KcHJlIC5jc3MgLmlkIHsNCiAgICBjb2xvcjogIzhCOThBQjsNCn0NCg0KcHJlIC5hbm5vdGF0aW9uLA0KcHJlIC5hcGFjaGUgLnNxYnJhY2tldCwNCnByZSAubmdpbnggLmJ1aWx0X2luIHsNCiAgICBjb2xvcjogIzlCODU5RDsNCn0NCg0KcHJlIC5wcmVwcm9jZXNzb3IsDQpwcmUgLnByYWdtYSB7DQogICAgY29sb3I6ICM4OTk2QTg7DQp9DQoNCnByZSAuaGV4Y29sb3IsDQpwcmUgLmNzcyAudmFsdWUgLm51bWJlciB7DQogICAgY29sb3I6ICNERDdCM0I7DQp9DQoNCnByZSAuY3NzIC5mdW5jdGlvbiB7DQogICAgY29sb3I6ICNEQUQwODU7DQp9DQoNCnByZSAuZGlmZiAuaGVhZGVyLA0KcHJlIC5jaHVuaywNCnByZSAudGV4IC5mb3JtdWxhIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEUyMjMxOw0KICAgIGNvbG9yOiAjRjhGOEY4Ow0KICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCn0NCg0KcHJlIC5kaWZmIC5jaGFuZ2Ugew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0QTQxMEQ7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuYWRkaXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTNCMjI7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuZGVsZXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0MjBFMDk7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuY29mZmVlc2NyaXB0IC5qYXZhc2NyaXB0LA0KcHJlIC5qYXZhc2NyaXB0IC54bWwsDQpwcmUgLnRleCAuZm9ybXVsYSwNCnByZSAueG1sIC5qYXZhc2NyaXB0LA0KcHJlIC54bWwgLnZic2NyaXB0LA0KcHJlIC54bWwgLmNzcywNCnByZSAueG1sIC5jZGF0YSB7DQogICAgb3BhY2l0eTogMC41Ow0KfQ0KDQpwcmUgLmdvIC50eXBlbmFtZXsNCiAgICBjb2xvcjogI2ZmYmM1NDsNCn1QSwcIw2jj3l0JAABdCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAc3RhdGljXGNzc1xsaW5nLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDojZjNmM2YzfQojaGVhZGVye2JhY2tncm91bmQ6IzAwOTNjNDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzo0MHB4IDAgNDhweCAwO2NvbG9yOiNmYmZiZmJ9I2hlYWRlciBhOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy1tb3otdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy13ZWJraXQtdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzfQojaGVhZGVyLWltZ3t3aWR0aDo5NnB4O2hlaWdodDo5NnB4O2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe2xpbmUtaGVpZ2h0Ojk0cHg7Y29sb3I6I2ZiZmJmYjtwYWRkaW5nOjA7bWFyZ2luLWxlZnQ6MjRweH0jaGVhZGVyLWggYXtjb2xvcjojZmJmYmZifQojaGVhZGVyLXN1Yntjb2xvcjojZjNmM2YzO21hcmdpbi1sZWZ0OjEuMmVtO2ZvbnQtc2l6ZToxNnB4fQojbmF2e2xpbmUtaGVpZ2h0OjkwcHh9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O21hcmdpbi1sZWZ0OjQ0cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiNmM2YzZjM7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNmb290ZXJ7cGFkZGluZzozMHB4IDQwcHg7Y29sb3I6Izk5OX0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2dvLXRvcHtib3R0b206NTBweDtyaWdodDo0MHB4O3Bvc2l0aW9uOmZpeGVkO2NvbG9yOiNmZmY7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjhweDtvcGFjaXR5Oi40fQojYXJ0aWNsZS1jb250YWluZXJ7aGVpZ2h0OjEwMCV9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHN7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjM2cHg7LW1vei1ib3JkZXItcmFkaXVzOjM2cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjM2cHg7bGluZS1oZWlnaHQ6NTZweDtmb250LXNpemU6MjRweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDo0MHB4O21hcmdpbi1sZWZ0OjhweDtib3JkZXI6NnB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHMgYXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzOmhvdmVye2JveC1zaGFkb3c6MCAwIDRweCAjNjY2Oy1tb3otYm94LXNoYWRvdzowIDAgNHB4ICM2NjY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA0cHggIzY2Nn0KI2FydGljbGUtY29udGFpbmVyIC52aWV3c3t0b3A6MTRweDtsZWZ0OjA7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6MzBweDstbW96LWJvcmRlci1yYWRpdXM6MzBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzBweDtwYWRkaW5nOjA7Ym9yZGVyOjRweCBzb2xpZCAjZmZmO2JveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy1tb3otYm94LXNoYWRvdzowIDAgMnB4ICM5OTk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggIzk5OX0KI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjExNnB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxMXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjojZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2M3B4O2xlZnQ6LTIycHh9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbiAudGl0bGV7Zm9udC1zaXplOjI4cHg7cGFkZGluZy1ib3R0b206MjRweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aW1lLWluZm97Y29sb3I6Izk5OTttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZy1ib3R0b206MjBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZDt0ZXh0LWluZGVudDoxZW07Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIGFydGljbGV7bWFyZ2luLWJvdHRvbTo1MHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWlue21hcmdpbi1sZWZ0OjB9I2FydGljbGUtY29udGFpbmVyIC5hcnRpY2xlLXNpbmdsZSAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tZXRhe3JpZ2h0OjQ0cHg7dG9wOi0zNnB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC52aWV3c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDtib3JkZXI6NnB4IHNvbGlkICNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAudGFne2NvbG9yOiM5OTl9CiNhcnRpY2xlLXBhZ2Vye21hcmdpbi1sZWZ0OjExNnB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVte21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojOTk5O3BhZGRpbmc6MTJweCAxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweH0jYXJ0aWNsZS1wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kOiMwMDc5YmN9CiNjb21tZW50e2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNjb21tZW50IC5tZXRhe3JpZ2h0Oi0yNHB4O3RvcDotMzBweH0jY29tbWVudCAubWV0YSAuY29tbWVudHN7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjB9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbTozMnB4fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnttYXJnaW4tcmlnaHQ6MThweDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHh9CiNjb21tZW50LWxpc3QgLmMtbWV0YSBwe21hcmdpbi1ib3R0b206MH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTpibG9ja30jY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9yOmhvdmVye2NvbG9yOiMwMDViOWJ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseXtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2RkZDtwYWRkaW5nOjNweCAxMHB4fSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9CiNjb21tZW50LWxpc3QgLmMtY29udGVudHtwYWRkaW5nLXRvcDo0cHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2t7Zm9udC1zaXplOjEzcHg7Y29sb3I6I2U2NDM0NjttYXJnaW4tbGVmdDoxMnB4fQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtc2hvd3ttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LXRpdGxle21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0bzttYXJnaW4tYm90dG9tOjMwcHh9I2NvbW1lbnQtZm9ybSAuYy1pbmZve3dpZHRoOjI2JX0jY29tbWVudC1mb3JtIC5jLWluZm8gLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MH0KI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjcwJX0KI2NvbW1lbnQtZm9ybSAuYy1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O21hcmdpbi10b3A6NnB4O3dpZHRoOjUwcHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b319QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDowfSAjYXJ0aWNsZS1jb250YWluZXIgLm1ldGF7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW46YmVmb3Jle2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9ICNuYXYsI2hlYWRlci1oe2xpbmUtaGVpZ2h0OjUwcHh9ICNmb290ZXIgc3BhbntmbG9hdDpub25lO3RleHQtYWxpZ246Y2VudGVyfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaHttYXJnaW4tbGVmdDowfSAjaGVhZGVyLWltZ3tkaXNwbGF5Om5vbmV9ICNjb21tZW50LWZvcm17d2lkdGg6MTAwJX0gI25hdntmbG9hdDpsZWZ0fSNuYXYgbGl7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NDRweH19ClBLBwjPw+rWnCoAAJwqAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXHN0eWxlLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9iZy5wbmciKSByZXBlYXR9CiNoZWFkZXJ7YmFja2dyb3VuZDp1cmwoIi4uL2ltZy9oZWFkZXIuZ2lmIikgcmVwZWF0ICM0YzcyOTg7bWluLXdpZHRoOjEyMHB4O3BhZGRpbmc6MzBweCAwO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXItaW1ne3dpZHRoOjk2cHg7aGVpZ2h0Ojk2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjUwcHg7LW1vei1ib3JkZXItcmFkaXVzOjUwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwcHh9CiNoZWFkZXItaHtwYWRkaW5nLXRvcDoyNHB4O2ZvbnQtc2l6ZTozMnB4fSNoZWFkZXItaCBhe2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0KI25hdntoZWlnaHQ6NTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym94LXNoYWRvdzowIDAgMnB4ICNiYmI7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O3BhZGRpbmc6MCAxOHB4fSNuYXYgbGkgYXtmb250LXNpemU6MTZweDtjb2xvcjojMzMzO3BhZGRpbmc6MCAzMnB4O2Rpc3BsYXk6YmxvY2t9I25hdiBsaSBhOmhvdmVye2JvcmRlci1ib3R0b206NHB4IHNvbGlkICMwMDc5YmN9CiNuYXYuZml4ZWR7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTt0b3A6MH0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2Zvb3Rlcntjb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6IzFjMjQyOTtwYWRkaW5nOjI0cHggMH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsZXR0ZXItc3BhY2luZzoxcHh9I2Zvb3RlciBwIGF7Y29sb3I6I2NjYzttYXJnaW46MCAxNnB4fSNmb290ZXIgcCBhOmhvdmVye2NvbG9yOiNmYmZiZmJ9CiNmb290ZXIgcCBhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojZ28tdG9we2JvdHRvbTo1MHB4O3JpZ2h0OjQwcHg7cG9zaXRpb246Zml4ZWQ7Y29sb3I6I2ZmZjtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206OHB4O29wYWNpdHk6LjR9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YXt3aWR0aDoxMDhweDtsaW5lLWhlaWdodDoyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnZpZXdzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLnRpbWV7Y29sb3I6I2ZmZn0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhIGF7Y29sb3I6I2ZmZn0jYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MTQwcHh9CiNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZXtwYWRkaW5nOjhweCAxNnB4O2JhY2tncm91bmQtY29sb3I6IzRjNzI5ODtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjJweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoycHh9I2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxlIGF7Y29sb3I6I2VlZX0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYTpob3Zlcntjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItdG9wOm5vbmU7cGFkZGluZzoxOHB4IDI0cHggMjRweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZve21hcmdpbi1ib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoycHg7Y29sb3I6Izk5OX0jYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLmZhe21hcmdpbi1yaWdodDo4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuc2hhcmUgLmZhe21hcmdpbi1yaWdodDowfQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+KntwYWRkaW5nOjZweCAxOHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8+c3Bhbntib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmlnaHR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJpZ2h0Om5vbmV9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZHtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAucmVhZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC50aW1lLCNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAudmlld3Mgc3Bhbntmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojYXJ0aWNsZS1jb250YWluZXIgYXJ0aWNsZXttYXJnaW4tYm90dG9tOjQ4cHh9CiNjb21tZW50e21hcmdpbi10b3A6LTI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjI0cHg7YmFja2dyb3VuZDojZmZmfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0b30jY29tbWVudC1mb3JtIC5jLWluZm97d2lkdGg6MjYlfSNjb21tZW50LWZvcm0gLmMtaW5mbyAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDowfQojY29tbWVudC1mb3JtIC5jLWNvbnRlbnR7d2lkdGg6NzAlfQojY29tbWVudC1mb3JtIC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxOHB4O3BhZGRpbmctYm90dG9tOjE4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1yZXBseXtjb2xvcjojOTk5fSNjb21tZW50LWxpc3QgLmMtcmVwbHk6aG92ZXJ7Y29sb3I6IzMzM30KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3J7Zm9udC1zaXplOjEzcHh9CiNjb21tZW50LWxpc3QgLmMtYXV0aG9yLmFkbWlue2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtbGlzdCAuYy1zZWN0aW9ue21heC13aWR0aDo4MzBweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVja3tmb250LXNpemU6MTNweDtjb2xvcjojZTY0MzQ2fSNjb21tZW50LWxpc3QgLmMtY2hlY2sgLmZhe21hcmdpbi1yaWdodDo2cHh9CkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b30gI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjB9ICNhcnRpY2xlLWNvbnRhaW5lciAubWV0YS5sZWZ0e2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI25hdiBsaXtwYWRkaW5nOjAgMTBweH0gI2hlYWRlci1pbWd7ZmxvYXQ6bGVmdDt3aWR0aDo2NHB4O2hlaWdodDo2NHB4fSAjaGVhZGVyLWh7cGFkZGluZzoxN3B4IDA7Zm9udC1zaXplOjI0cHh9ICNoZWFkZXItc3Vie2Rpc3BsYXk6bm9uZX0gI2FydGljbGUtY29udGFpbmVyIC50YWcsI2FydGljbGUtY29udGFpbmVyIC50aW1le2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybXt3aWR0aDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaW1ne2Rpc3BsYXk6bm9uZX0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjY29tbWVudC1saXN0IC5jLWF2YXRhcntkaXNwbGF5Om5vbmV9fQpQSwcIqnrsLo0oAACNKAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGZhdmljb24uaWNvAAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAAAACzfgfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N+B9uzfgfbs34H27N+B9uzfgfbs34H27N9B9uzfgfbs34H27N9B9uzfgfbs34H27N+B9uzfgfbsnwH1q96B8etfhittZNKkLqCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qDDf+6hhf/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+6gQj/uYEI/7mCCP+6gQj/uoII/7qCCP+5gQj/uYEI/7mCCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qCCP+5gQj/uYEI/7qBCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6ggj/uoEI/7qCCP+6ggj/uoEI/7qCCP+6gQj/uoEI/7mBCP+5gQj/uYIH/7mCB/+5ggf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/vIQF/7yEBf+7gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8gwX/vIQF/7yEBf+8gwX/vIQG/7yEBv/AhwP/wIYD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIcE/8CHBP/AhgP/wIYC/8WJAv/FiQH/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WKAv/FiQH/xYoD/8ePDv/Mmif/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yZMX/9avU//hwHX/6dKf//Pnzf/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uNAP/LoD3/8uvd/v79+v7//////////sqOAP7KjQD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44B/8uOAP/LjgD/y40A/8qOAP/LjgD/y44A/8uOAf/LjgH/y44A/8uOAP/LjgD/y44A/8uOAf/KjQD/y48G/9i5c//6+fX+/v///v7+/v/+/v7+yo4A/sqNAP/LjgD/y44A/8qOAP/KjgD/yo4A/8qOAP/LjgD/y44A/8qOAP/LjgD/y44A/8qNAP/LjQD/y44B/8mNAf/HjQj/yo4D/8qNAP/LjQD/yo0A/8qNAP/KjQD/y48C/9CaG//fvnH/9e/g//7+/v7////+/v7+//7+/v7LjgH6y44A/8qNAP/LjgD/y44B/8qOAP/KjgD/yo4A/8uOAP/KjgD/yo4A/8uOAP/LjgH/yo4A/8qNAP/JjAD/x5o0/8Gref+oi0j/zaZO/8WYMP/PnzH/1qY5/9qwT//iwnf/8N+5//v48v/+/v///v7+/////////////v7+/7ySMr67ihn/zJIM/8qOAP/KjQD/yo0A/8qNAP/KjgD/yo4A/8qOAP/KjQD/yo0A/8qNAP/LjgH/0JkY/8mjTf/Qxq3/5eXm/6alo//p5t//xL6x/+Hayf758+P++/bs//38+f/////+/////v7+/v/+/v7////////////+/v7/lZONlJmPef/mzpn/4L1q/9mtSP/UozL/0Zsf/8+WE//PlRH/z5UR/8+XF//Tnyj/2atD/+G/cf/t27P/0MzE/8PDw/7q6ur+tra2/ujo6P60tLX+2tvb/v39/f7+///+/v7+//////7////+/v7+//7+/v/////+/////v////6XlpaVkpKT//b29f/9+/f/+fTn//bt1//y5MX/8N+4/+7csv/v3LP/8eG7//Xpzv/58+T/9/Xy/8nJyv+vr6//paSk/729vf+UlJT/ubm5/6enp/+xsbH/0dHR//z8/P///////v7+//7+/v/+/v7//v7+/////////////v7+/6mpqZiRkZH/8vLy/////v/+/v7//////////////////v7+//7+/v/+/v///v/////////h4eD/urm5/+/v7//s7Oz/19fX/8bGxv/e3t7/9fX1/+rq6/+4uLj/8fHx///////+/v7+//////7+/v/+/v7////////////+/v7/m5ubZ4ODg/Dt7e3///////////7///7+/v7+//7+/v7//v7+/v7+/vn5+f729vb++vr6/ufn6P+3t7f/7e3t//j4+P7d3d3+2NjY/vLy8v7+/v7+2NjY/r6+vv74+Pj+//////////7////+/v7+//7+/v/////+/////v////41NTUjcXFx2Obm5v/////+/////v/////+/v7//////+/v7/7Q0ND/vr6+/rq6uv6+vr7/0dHR/s/Pz/6srKz/Z2dn/isrK/8jIyP/W1tb/6urq/+9vb3+5OTk/uXl5f/a2tr/39/f/vDw8P79/f3//////v7+/v7//////////o2NjSd1dXXa29vb//////7////+//////7+/v/h4eH/tbW1/srKyv/j4+P+5+fn/uPj4//Jycn+vr6+/re3t/8sLCz+AAAA/wAAAP8GBgb/hoaG/9fX1/6+vr7+vLy8/8HBwf++vr7+ubm5/sfHx//x8fH+/////v/////////+4ODgJISEhNnFxcX///////////7/////5+fn/7W1tf/k5OT///////////7//////////v7+/v7g4OD/tra2/66urv9ubm7/WVlZ/4ODg/+7u7v/vr6+/+Tk5P76+vr//f39//z8/P7w8PD/ysrK/7e3t//w8PD///////////+Hh4eAXV1d8aOjo////////////vv7+//BwcH/wcHB/62trf/Gxsb/+vr6///////+/v7//v7+/v/////W1tb/xMTE//b29v/29vb/3d3d/76+vv/k5OT/8fHx//7+/v/+/v7//v7+/v/////9/f3/zc3N/8PDw//7+/v//////4aGhviWlpb/i4uL//f39///////7u7u/6urq/9SUlL/ExMT/2dnZ//R0dH//f39//7+/v////////////Ly8v+4uLj/7+/v//r6+v/AwMD/nJyc/1RUVP9ubm7/3Nzc//7+/v/////+/v7+///////09PT/t7e3/+vr6///////7+/v/+zs7P98fHz/2NjY/v////7n5+f/k5OT/xYWFv8FBQX/Nzc3/5mZmf/7+/v//v7+//////7/////+vr6/8PDw//n5+f/8/Pz/6ysrP85OTn/AAAA/0VFRf6YmJj/9fX1//////7+/v7///////39/f/ExMT/3t7e////////////0dHR/zMzM/+Xl5f//////+fn5/+zs7P/aGho/xcXF/86Ojr/yMjI//7+/v/+/v7////////////4+Pj/vb29/+vr6//w8PD/s7Oz/0xMTP8AAAD/Dg4O/oKCgv/6+vr//////v7+/v///////v7+/8fHx//c3Nz///////////+4uLj/GRkZ/z8/P/7f39/+9vb2/r29vf/b29v+xMTE/tvb2//9/f3+/v7+/v////7////+/////uXl5f65ubn+9vb2//Pz8/++vr7/wcHB/nJycv5+fn7+4ODg///////+/v7+/v7+/v/////4+Pj+vLy8/ubm5v/////+/////vHx8f+ysrL/hYWF/ouLi/709PT/1NTU/729vf/5+fn+//////7+/v7////+//////////729vb+vb29/9bW1v///////f39/8fHx//Ozs7/+fn5/vz8/P7///////////////7////+/////9/f3/65ubn++Pj4/+7u7v7Jycn/+Pj4/v/////y8vL+iIiI/pubm//09PT/yMjI/729vf7n5+f/+vr6/vz8/P76+vr/5+fn/r29vf7Jycn/+vr6////////////8PDw/7e3t//Y2Nj+/f39/v///////////////v////7p6en/t7e3/uLi4v/x8fH/jo6O/nNzc+WQkJD+o6Oj/6CgoP5+fn76Tk5O4ZycnPvh4eH/1tbW/r29vf/AwMD/wcHB/76+vv+5ubn+1tbW/vr6+v//////////////////////6enp/7m5uf7Dw8P+39/f/+jo6P/k5OT+zMzM/7a2tv/d3d3+6urq/4ODg/9wcHD/q6urP3BwcGZFRUVpSkpKZ4WFhV+MjIw4bW1tm3d3d+utra3/2NjY/+Tk5P7l5eX/6enp//b29v7////////////////+/v7/////////////////9fX1/9bW1v/CwsL/vb29/8HBwf/R0dH/5OTk/8bGxv99fX3zY2Njzmtra9IREREA////AP///wC8vLwAAAAAAAAAAADOzs4LdnZ2RW1tbaN7e3vrmZmZ/7e3t//X19f/6Ojo//Dw8P/29vb/+vr6//39/f////////////////////////////f39//q6ur/3d3d/re3t/+Ojo7+fHx84IeHh3K8vLwXcHBwHcPDwwCAgIAAICAgAD8/PwCYmJgAxsbGAJeXlwH///8AysrKDampqVN9fX2OcHBwxXt7e/d3d3f1gYGB+ZGRkfyjo6P7s7Oz+7+/v/vFxcX7xsbG+8DAwPuzs7P7nJyc/IGBgfp4eHj6cXFxzImJiYu+vr48////BaqqqgH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAAAAAABQSwcIqXMT8L4QAAC+EAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAc3RhdGljXGltZy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAc3RhdGljXGltZ1xiZy5wbmeJUE5HDQoaCgAAAA1JSERSAAAAlgAAAJYIAgAAALNj5rUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADZmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI2RTRGQ0JFNTVBQUUyMTE5NzAwQjU5OUUyOTNFQTA3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA5NzBGM0NFQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA5NzBGM0NEQjVGODExRTI4Q0MwRUZBOTdDQzI0Qjk1IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkFBQkJFQTE4RkI1RTIxMUJCRTNBQkY0MzkzOEFFQkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7MjgrrAAAoI0lEQVR42uzd7ZJkR5GtYXVSwP1fKCMQzBwDhHR2aXU/9SoKww5Dbh2Eqn60VWdl7ozwiPCP5cs9Pn399TePx+Nvf/vbp0+fvvvuu1//+td//etfX15ert9/9atfffvtt9dfr99/85vf/OUvf7l+/+qrr/bf6yPXX/fL9dm97frlevH6+PUQL17/7nXv2ZOvX66v2+t78/X7vvf777+/Hnu9sjdc/90brhevv16/XK9cX3H9vmFvYNdfr/fvT9cr11+/++Hn+uX60/X6XtyT98F96vr3+uD1y/XKNfjrndcrvnRjvl7xkevFSWNvuP7dmwntesj1huudE8Uefpec//CHP00EG4ShXL9sthvH3jO5TxbXv3vEZrvvuD5y/fcaxPVfs90b9inj/uqHnwndwycmw9jH9+aN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w3a6wnOpCa4gdQeJQJeeiFsXYlc2FYcbyN0V27XTaTOuRTqGnrcDXNUp4qRkMkYWjkUv7LUnjkZBT5fz/xVgAMwCMiX3lhRvAAAAAElFTkSuQmCCUEsHCJuj1O/zKwAA8ysAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHN0YXRpY1xpbWdcaGVhZGVyLmdpZkdJRjg5YWQAZACzAABNdJpJbZJOdZxIbJBJbpJMc5lKb5RMcphKcJVLcZYAAAAAAAAAAAAAAAAAAAAAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjAxNUFBQzE1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjAxNUFBQzI1MjQ0MTFFMjhGMTNBMDQ5QzlBRkE5N0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMDE1QUFCRjUyNDQxMUUyOEYxM0EwNDlDOUFGQTk3QyIgc3RSZWY6ZG9jdW1lbnRJRD0i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Ow0KICAgIHRvcEJ1dHRvbigpOw0KICAgIHJlbmRlck1hcmtkb3duKCk7DQogICAgaW5pdENvbW1lbnQoKTsNCn0pOw0KDQpmdW5jdGlvbiBmaXhIZWFkZXIoKSB7DQogICAgdmFyICRuYXYgPSAkKCcjbmF2Jyk7DQogICAgdmFyIHRvcCA9ICRuYXYub2Zmc2V0KCkudG9wOw0KICAgIGNvbnNvbGUubG9nKHRvcCk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkbmF2LmFkZENsYXNzKCJmaXhlZCIpLnJlbW92ZUNsYXNzKCJ0ZXh0LWNlbnRlciIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG5hdi5yZW1vdmVDbGFzcygiZml4ZWQiKS5hZGRDbGFzcygidGV4dC1jZW50ZXIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiB0b3BCdXR0b24oKSB7DQogICAgdmFyIHRvcCA9ICQoJyNuYXYnKS5vZmZzZXQoKS50b3A7DQogICAgdmFyICR0b3AgPSAkKCcjZ28tdG9wJyk7DQogICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICh0b3AgPCAkKHRoaXMpLnNjcm9sbFRvcCgpKSB7DQogICAgICAgICAgICAkdG9wLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdG9wLmFkZENsYXNzKCdoaWRlJyk7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkdG9wLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiAwfSwgNTAwKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pDQp9DQoNCmZ1bmN0aW9uIHJlbmRlck1hcmtkb3duKCkgew0KICAgIHZhciAkbWQgPSAkKCcubWFya2Rvd24nKTsNCiAgICAkbWQuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAkKGl0ZW0pLmh0bWwobWFya2VkKCQoaXRlbSkuaHRtbCgpLnJlcGxhY2UoLyZndDsvZywgJz4nKSkpOw0KICAgIH0pOw0KICAgIHZhciBjb2RlID0gJG1kLmZpbmQoJ3ByZSBjb2RlJyk7DQogICAgaWYgKGNvZGUubGVuZ3RoKSB7DQogICAgICAgICQoIjxsaW5rPiIpLmF0dHIoeyByZWw6ICJzdHlsZXNoZWV0IiwgdHlwZTogInRleHQvY3NzIiwgaHJlZjogIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MifSkuYXBwZW5kVG8oImhlYWQiKTsNCiAgICAgICAgJC5nZXRTY3JpcHQoIi9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBjb2RlLmVhY2goZnVuY3Rpb24gKGksIGl0ZW0pIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGl0ZW0pDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBpbml0Q29tbWVudCgpIHsNCiAgICB2YXIgJGxpc3QgPSAkKCcjY29tbWVudC1saXN0Jyk7DQogICAgaWYgKCEkbGlzdC5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpIHsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXV0aG9yJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF1dGhvciIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtZW1haWwiKSk7DQogICAgICAgICQoJyNjb21tZW50LXVybCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC11cmwiKSk7DQogICAgICAgICQoJyNjb21tZW50LWF2YXRhcicpLmF0dHIoInNyYyIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LWF2YXRhciIpKTsNCiAgICAgICAgJCgnLmMtYXZhdGFyJykucmVtb3ZlQ2xhc3MoIm51bGwiKTsNCiAgICB9DQogICAgJCgnI2NvbW1lbnQtY29udGVudCcpLm9uKCJmb2N1cyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKCQoJy5jLWF2YXRhcicpLmhhc0NsYXNzKCJudWxsIikpIHsNCiAgICAgICAgICAgICQoJy5jLWF2YXRhci1maWVsZCcpLnJlbW92ZSgpOw0KICAgICAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJCgnLm5vdC1tZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICQoJy5jLWluZm8tZmllbGRzJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LXNob3cnKS5vbigiY2xpY2siLCAiLmVuYWJsZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgiI2NvbW1lbnQtc2hvdyIpLnJlbW92ZSgpOw0KICAgICAgICAkKCcjY29tbWVudC1mb3JtJykucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICB9KTsNCiAgICAkKCcjY29tbWVudC1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdXRob3IiLCAkKCcjY29tbWVudC1hdXRob3InKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1lbWFpbCIsICQoJyNjb21tZW50LWVtYWlsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtdXJsIiwgJCgnI2NvbW1lbnQtdXJsJykudmFsKCkpOw0KICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImNvbW1lbnQtYXZhdGFyIiwganNvbi5jb21tZW50LmF2YXRhcik7DQogICAgICAgICAgICB2YXIgdHBsID0gJCgkKCcjY29tbWVudC10cGwnKS5odG1sKCkpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF2YXRhciIpLmF0dHIoInNyYyIsIGpzb24uY29tbWVudC5hdmF0YXIpLmF0dHIoImFsdCIsIGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWF1dGhvciIpLmF0dHIoImhyZWYiLCBqc29uLmNvbW1lbnQudXJsKS50ZXh0KGpzb24uY29tbWVudC5hdXRob3IpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXJlcGx5IikuYXR0cigicmVsIiwganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIHRwbC5maW5kKCIuYy1jb250ZW50IikuaHRtbChqc29uLmNvbW1lbnQuY29udGVudCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnBhcmVudF9tZCkgew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikuaHRtbChtYXJrZWQoanNvbi5jb21tZW50LnBhcmVudF9tZCkpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtcC1tZCIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdHBsLmF0dHIoImlkIiwgImNvbW1lbnQtIiArIGpzb24uY29tbWVudC5pZCk7DQogICAgICAgICAgICBpZiAoanNvbi5jb21tZW50LnN0YXR1cyA9PSAiYXBwcm92ZWQiKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNoZWNrIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbGlzdC5hcHBlbmQodHBsKTsNCiAgICAgICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLnZhbCgiIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhbGVydCgi5o+Q5Lqk5aSx6LSlISIpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgJGxpc3Qub24oImNsaWNrIiwgIi5jLXJlcGx5IiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgdmFyIHBjID0gJCgnI2NvbW1lbnQtJyArIGlkKTsNCiAgICAgICAgdmFyIG1kID0gIj4gQCIgKyBwYy5maW5kKCIuYy1hdXRob3IiKS50ZXh0KCkgKyAiXG5cbiI7DQogICAgICAgIG1kICs9ICI+ICIgKyBwYy5maW5kKCIuYy1jb250ZW50IikuaHRtbCgpICsgIlxuIjsNCiAgICAgICAgJCgnI2NvbW1lbnQtY29udGVudCcpLmJlZm9yZSgnPGRpdiBjbGFzcz0icmVwbHktbWQgbWFya2Rvd24iPicgKyBtYXJrZWQobWQpICsgJzwvZGl2PicpOw0KICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoaWQpOw0KICAgICAgICBpZiAoJCgnI2NvbW1lbnQtc2hvdycpLmxlbmd0aCkgew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtc2hvdyAuZW5hYmxlJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICAgICAgfQ0KICAgICAgICAkKCcuY2FuY2VsLXJlcGx5Jykuc2hvdygpOw0KICAgICAgICB2YXIgdG9wID0gJCgnI2NvbW1lbnQtZm9ybScpLm9mZnNldCgpLnRvcDsNCiAgICAgICAgJCgnYm9keSxodG1sJykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiB0b3B9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnLmNhbmNlbC1yZXBseScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlcGx5LW1kJykucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCn0NClBLBwge4R5ydRIAAHUSAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABMAAABzdGF0aWNcanNcdXBsb2FkLmpzZnVuY3Rpb24gaW5pdFVwbG9hZChwKSB7DQogICAgJCgnI2F0dGFjaC1zaG93Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLnRyaWdnZXIoImNsaWNrIik7DQogICAgfSk7DQogICAgJCgnI2F0dGFjaC11cGxvYWQnKS5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoY29uZmlybSgi56uL5Y2z5LiK5LygPyIpKSB7DQogICAgICAgICAgICB2YXIgYmFyID0gJCgnPHAgY2xhc3M9ImZpbGUtcHJvZ3Jlc3MgaW5saW5lLWJsb2NrIj4wJTwvcD4nKTsNCiAgICAgICAgICAgICQoJyNhdHRhY2gtZm9ybScpLmFqYXhTdWJtaXQoew0KICAgICAgICAgICAgICAgICJiZWZvcmVTdWJtaXQiOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQocCkuYmVmb3JlKGJhcik7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAidXBsb2FkUHJvZ3Jlc3MiOiBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCB0b3RhbCwgcGVyY2VudENvbXBsZXRlKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBwZXJjZW50VmFsID0gcGVyY2VudENvbXBsZXRlICsgJyUnOw0KICAgICAgICAgICAgICAgICAgICBiYXIuY3NzKCJ3aWR0aCIsIHBlcmNlbnRWYWwpLmh0bWwocGVyY2VudFZhbCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKGpzb24ubXNnKS5hZGRDbGFzcygiZXJyIik7DQogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXIucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDAwKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJhci5odG1sKCIvIiArIGpzb24uZmlsZS5VcmwgKyAiJm5ic3A7Jm5ic3A7Jm5ic3A7KEAiICsganNvbi5maWxlLk5hbWUgKyAiKSIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudmFsKCIiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICQodGhpcykudmFsKCIiKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfVBLBwiIiRf79gQAAPYEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcbGliL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAACEAAABzdGF0aWNcbGliXGNvZGVtaXJyb3ItbW9kZS5taW4uanMhZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9L14oXHMqKShbKistXXwoXGQrKVwuKShccyopLyxlPSIqKy0iO0NvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0PWZ1bmN0aW9uKHIpe3ZhciBuLGk9ci5nZXRDdXJzb3IoKSxvPXIuZ2V0U3RhdGVBZnRlcihpLmxpbmUpLmxpc3QhPT0hMTtpZighb3x8IShuPXIuZ2V0TGluZShpLmxpbmUpLm1hdGNoKHQpKSlyZXR1cm4gci5leGVjQ29tbWFuZCgibmV3bGluZUFuZEluZGVudCIpLHZvaWQgMDt2YXIgbD1uWzFdLGE9bls0XSxzPWUuaW5kZXhPZihuWzJdKT49MD9uWzJdOnBhcnNlSW50KG5bM10sMTApKzErIi4iO3IucmVwbGFjZVNlbGVjdGlvbigiXG4iK2wrcythLCJlbmQiKX19KCksQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSxyKXtyZXR1cm4gZS5mPWUuaW5saW5lPXIscih0LGUpfWZ1bmN0aW9uIG4odCxlLHIpe3JldHVybiBlLmY9ZS5ibG9jaz1yLHIodCxlKX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LmxpbmtUaXRsZT0hMSx0LmVtPSExLHQuc3Ryb25nPSExLHQucXVvdGU9MCxnfHx0LmYhPWx8fCh0LmY9Yyx0LmJsb2NrPW8pLHQudHJhaWxpbmdTcGFjZT0wLHQudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsdC50aGlzTGluZUhhc0NvbnRlbnQ9ITEsbnVsbH1mdW5jdGlvbiBvKHQsaSl7dmFyIG89aS5saXN0IT09ITE7aS5saXN0IT09ITEmJmkuaW5kZW50YXRpb25EaWZmPj0wPyhpLmluZGVudGF0aW9uRGlmZjw0JiYoaS5pbmRlbnRhdGlvbi09aS5pbmRlbnRhdGlvbkRpZmYpLGkubGlzdD1udWxsKTppLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbj4wPyhpLmxpc3Q9bnVsbCxpLmxpc3REZXB0aD1NYXRoLmZsb29yKGkuaW5kZW50YXRpb24vNCkpOmkubGlzdCE9PSExJiYoaS5saXN0PSExLGkubGlzdERlcHRoPTApO3ZhciBsPW51bGw7aWYoaS5pbmRlbnRhdGlvbkRpZmY+PTQpcmV0dXJuIGkuaW5kZW50YXRpb24tPTQsdC5za2lwVG9FbmQoKSxrO2lmKHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDtpZihsPXQubWF0Y2goUikpaS5oZWFkZXI9bFswXS5sZW5ndGg8PTY/bFswXS5sZW5ndGg6NjtlbHNlIGlmKGkucHJldkxpbmVIYXNDb250ZW50JiYobD10Lm1hdGNoKEcpKSlpLmhlYWRlcj0iPSI9PWxbMF0uY2hhckF0KDApPzE6MjtlbHNlIGlmKHQuZWF0KCI+IikpZm9yKGkuaW5kZW50YXRpb24rKyxpLnF1b3RlPTEsdC5lYXRTcGFjZSgpO3QuZWF0KCI+Iik7KXQuZWF0U3BhY2UoKSxpLnF1b3RlKys7ZWxzZXtpZigiWyI9PT10LnBlZWsoKSlyZXR1cm4gcih0LGksaCk7aWYodC5tYXRjaChJLCEwKSlyZXR1cm4gQTtpZihpLnByZXZMaW5lSGFzQ29udGVudCYmIW98fCF0Lm1hdGNoKFAsITApJiYhdC5tYXRjaChGLCEwKSl7aWYoZS5mZW5jZWRDb2RlQmxvY2tzJiZ0Lm1hdGNoKC9eYGBgKFtcdysjXSopLywhMCkpcmV0dXJuIGkubG9jYWxNb2RlPXgoUmVnRXhwLiQxKSxpLmxvY2FsTW9kZSYmKGkubG9jYWxTdGF0ZT1pLmxvY2FsTW9kZS5zdGFydFN0YXRlKCkpLG4odCxpLGEpLGt9ZWxzZSBpLmluZGVudGF0aW9uKz00LGkubGlzdD0hMCxpLmxpc3REZXB0aCsrLGUudGFza0xpc3RzJiZ0Lm1hdGNoKEIsITEpJiYoaS50YXNrTGlzdD0hMCl9cmV0dXJuIHIodCxpLGkuaW5saW5lKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9di50b2tlbih0LGUuaHRtbFN0YXRlKTtyZXR1cm4gZyYmInRhZyI9PT1yJiYib3BlblRhZyIhPT1lLmh0bWxTdGF0ZS50eXBlJiYhZS5odG1sU3RhdGUuY29udGV4dCYmKGUuZj1jLGUuYmxvY2s9byksZS5tZF9pbnNpZGUmJi0xIT10LmN1cnJlbnQoKS5pbmRleE9mKCI+IikmJihlLmY9YyxlLmJsb2NrPW8sZS5odG1sU3RhdGUuY29udGV4dD12b2lkIDApLHJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LnNvbCgpJiZ0Lm1hdGNoKC9eYGBgLywhMCk/KGUubG9jYWxNb2RlPWUubG9jYWxTdGF0ZT1udWxsLGUuZj1jLGUuYmxvY2s9byxrKTplLmxvY2FsTW9kZT9lLmxvY2FsTW9kZS50b2tlbih0LGUubG9jYWxTdGF0ZSk6KHQuc2tpcFRvRW5kKCksayl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1bXTtpZih0LnRhc2tPcGVuKXJldHVybiJtZXRhIjtpZih0LnRhc2tDbG9zZWQpcmV0dXJuInByb3BlcnR5IjtpZih0LnN0cm9uZyYmZS5wdXNoKHopLHQuZW0mJmUucHVzaChFKSx0LmxpbmtUZXh0JiZlLnB1c2goTyksdC5jb2RlJiZlLnB1c2goayksdC5oZWFkZXImJihlLnB1c2goQyksZS5wdXNoKEMrdC5oZWFkZXIpKSx0LnF1b3RlJiZlLnB1c2godC5xdW90ZSUyP3c6TCksdC5saXN0IT09ITEpe3ZhciByPSh0Lmxpc3REZXB0aC0xKSUzO3I/MT09PXI/ZS5wdXNoKE0pOmUucHVzaChUKTplLnB1c2goUyl9cmV0dXJuIHQudHJhaWxpbmdTcGFjZU5ld0xpbmU/ZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS1uZXctbGluZSIpOnQudHJhaWxpbmdTcGFjZSYmZS5wdXNoKCJ0cmFpbGluZy1zcGFjZS0iKyh0LnRyYWlsaW5nU3BhY2UlMj8iYSI6ImIiKSksZS5sZW5ndGg/ZS5qb2luKCIgIik6bnVsbH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQubWF0Y2goXywhMCk/cyhlKTp2b2lkIDB9ZnVuY3Rpb24gYyh0LGkpe3ZhciBvPWkudGV4dCh0LGkpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgbylyZXR1cm4gbztpZihpLmxpc3QpcmV0dXJuIGkubGlzdD1udWxsLHMoaSk7aWYoaS50YXNrTGlzdCl7dmFyIGE9IngiIT09dC5tYXRjaChCLCEwKVsxXTtyZXR1cm4gYT9pLnRhc2tPcGVuPSEwOmkudGFza0Nsb3NlZD0hMCxpLnRhc2tMaXN0PSExLHMoaSl9aS50YXNrT3Blbj0hMSxpLnRhc2tDbG9zZWQ9ITE7dmFyIHU9dC5zb2woKSxjPXQubmV4dCgpO2lmKCJcXCI9PT1jKXJldHVybiB0Lm5leHQoKSxzKGkpO2lmKGkubGlua1RpdGxlKXtpLmxpbmtUaXRsZT0hMTt2YXIgaD1jOyIoIj09PWMmJihoPSIpIiksaD0oaCsiIikucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csIlxcJDEiKTt2YXIgZD0iXlxccyooPzpbXiIraCsiXFxcXF0rfFxcXFxcXFxcfFxcXFwuKSIraDtpZih0Lm1hdGNoKG5ldyBSZWdFeHAoZCksITApKXJldHVybiBXfWlmKCJgIj09PWMpe3ZhciBwPXMoaSksZz10LnBvczt0LmVhdFdoaWxlKCJgIik7dmFyIHY9MSt0LnBvcy1nO3JldHVybiBpLmNvZGU/dj09PWI/KGkuY29kZT0hMSxwKTpzKGkpOihiPXYsaS5jb2RlPSEwLHMoaSkpfWlmKGkuY29kZSlyZXR1cm4gcyhpKTtpZigiISI9PT1jJiZ0Lm1hdGNoKC9cW1teXF1dKlxdID8oPzpcKHxcWykvLCExKSlyZXR1cm4gdC5tYXRjaCgvXFtbXlxdXSpcXS8pLGkuaW5saW5lPWkuZj1mLE47aWYoIlsiPT09YyYmdC5tYXRjaCgvLipcXShcKHwgP1xbKS8sITEpKXJldHVybiBpLmxpbmtUZXh0PSEwLHMoaSk7aWYoIl0iPT09YyYmaS5saW5rVGV4dCl7dmFyIHk9cyhpKTtyZXR1cm4gaS5saW5rVGV4dD0hMSxpLmlubGluZT1pLmY9Zix5fWlmKCI8Ij09PWMmJnQubWF0Y2goL14oaHR0cHM/fGZ0cHM/KTpcL1wvKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEgsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXltePiBcXF0rQCg/OlteXFw+XXxcXC4pKz4vLCExKSlyZXR1cm4gcih0LGksbShELCI+IikpO2lmKCI8Ij09PWMmJnQubWF0Y2goL15cdy8sITEpKXtpZigtMSE9dC5zdHJpbmcuaW5kZXhPZigiPiIpKXt2YXIgeD10LnN0cmluZy5zdWJzdHJpbmcoMSx0LnN0cmluZy5pbmRleE9mKCI+IikpOy9tYXJrZG93blxzKj1ccyooJ3wiKXswLDF9MSgnfCIpezAsMX0vLnRlc3QoeCkmJihpLm1kX2luc2lkZT0hMCl9cmV0dXJuIHQuYmFja1VwKDEpLG4odCxpLGwpfWlmKCI8Ij09PWMmJnQubWF0Y2goL15cL1x3Kj8+LykpcmV0dXJuIGkubWRfaW5zaWRlPSExLCJ0YWciO3ZhciBDPSExO2lmKCFlLnVuZGVyc2NvcmVzQnJlYWtXb3JkcyYmIl8iPT09YyYmIl8iIT09dC5wZWVrKCkmJnQubWF0Y2goLyhcdykvLCExKSl7dmFyIGs9dC5wb3MtMjtpZihrPj0wKXt2YXIgdz10LnN0cmluZy5jaGFyQXQoayk7Il8iIT09dyYmdy5tYXRjaCgvKFx3KS8sITEpJiYoQz0hMCl9fXZhciBwPXMoaSk7aWYoIioiPT09Y3x8Il8iPT09YyYmIUMpaWYodSYmIiAiPT09dC5wZWVrKCkpO2Vsc2V7aWYoaS5zdHJvbmc9PT1jJiZ0LmVhdChjKSlyZXR1cm4gaS5zdHJvbmc9ITEscDtpZighaS5zdHJvbmcmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz1jLHMoaSk7aWYoaS5lbT09PWMpcmV0dXJuIGkuZW09ITEscDtpZighaS5lbSlyZXR1cm4gaS5lbT1jLHMoaSl9ZWxzZSBpZigiICI9PT1jJiYodC5lYXQoIioiKXx8dC5lYXQoIl8iKSkpe2lmKCIgIj09PXQucGVlaygpKXJldHVybiBzKGkpO3QuYmFja1VwKDEpfXJldHVybiIgIj09PWMmJih0Lm1hdGNoKC8gKyQvLCExKT9pLnRyYWlsaW5nU3BhY2UrKzppLnRyYWlsaW5nU3BhY2UmJihpLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSEwKSkscyhpKX1mdW5jdGlvbiBmKHQsZSl7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3ZhciBuPXQubmV4dCgpO3JldHVybiIoIj09PW58fCJbIj09PW4/cih0LGUsbShXLCIoIj09PW4/IikiOiJdIikpOiJlcnJvciJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0Lm1hdGNoKC9eW15cXV0qXF06LywhMCk/KGUuZj1kLE8pOnIodCxlLGMpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdC5lYXRTcGFjZSgpP251bGw6KHQubWF0Y2goL15bXlxzXSsvLCEwKSx2b2lkIDA9PT10LnBlZWsoKT9lLmxpbmtUaXRsZT0hMDp0Lm1hdGNoKC9eKD86XHMrKD86Iig/OlteIlxcXXxcXFxcfFxcLikrInwnKD86W14nXFxdfFxcXFx8XFwuKSsnfFwoKD86W14pXFxdfFxcXFx8XFwuKStcKSkpPy8sITApLGUuZj1lLmlubGluZT1jLFcpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIFZbdF18fCh0PSh0KyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpLFZbdF09bmV3IFJlZ0V4cCgiXig/OlteXFxcXF18XFxcXC4pKj8oIit0KyIpIikpLFZbdF19ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIHI9cnx8YyxmdW5jdGlvbihuLGkpe3JldHVybiBuLm1hdGNoKHAoZSkpLGkuaW5saW5lPWkuZj1yLHR9fXZhciBnPUNvZGVNaXJyb3IubW9kZXMuaGFzT3duUHJvcGVydHkoInhtbCIpLHY9Q29kZU1pcnJvci5nZXRNb2RlKHQsZz97bmFtZToieG1sIixodG1sTW9kZTohMH06InRleHQvcGxhaW4iKSx5PXtodG1sOiJodG1sbWl4ZWQiLGpzOiJqYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uIixjOiJ0ZXh0L3gtY3NyYyIsImMrKyI6InRleHQveC1jKytzcmMiLGphdmE6InRleHQveC1qYXZhIixjc2hhcnA6InRleHQveC1jc2hhcnAiLCJjIyI6InRleHQveC1jc2hhcnAiLHNjYWxhOiJ0ZXh0L3gtc2NhbGEifSx4PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9e30sbz1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5tb2RlcylDb2RlTWlycm9yLm1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZvLnB1c2gobCk7Zm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyluW29bZV1dPW9bZV07dmFyIGE9W107Zm9yKHZhciBsIGluIENvZGVNaXJyb3IubWltZU1vZGVzKUNvZGVNaXJyb3IubWltZU1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGwpJiZhLnB1c2goe21pbWU6bCxtb2RlOkNvZGVNaXJyb3IubWltZU1vZGVzW2xdfSk7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylyPWFbZV0ubWltZSxpW3JdPWFbZV0ubWltZTtmb3IodmFyIHMgaW4geSkoeVtzXWluIG58fHlbc11pbiBpKSYmKG5bc109eVtzXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdP0NvZGVNaXJyb3IuZ2V0TW9kZSh0LG5bZV0pOm51bGx9fSgpO3ZvaWQgMD09PWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYoZS51bmRlcnNjb3Jlc0JyZWFrV29yZHM9ITApLHZvaWQgMD09PWUuZmVuY2VkQ29kZUJsb2NrcyYmKGUuZmVuY2VkQ29kZUJsb2Nrcz0hMSksdm9pZCAwPT09ZS50YXNrTGlzdHMmJihlLnRhc2tMaXN0cz0hMSk7dmFyIGI9MCxDPSJoZWFkZXIiLGs9ImNvbW1lbnQiLHc9ImF0b20iLEw9Im51bWJlciIsUz0idmFyaWFibGUtMiIsTT0idmFyaWFibGUtMyIsVD0ia2V5d29yZCIsQT0iaHIiLE49InRhZyIsSD0ibGluayIsRD0ibGluayIsTz0ibGluayIsVz0ic3RyaW5nIixFPSJlbSIsej0ic3Ryb25nIixJPS9eKFsqXC09X10pKD86XHMqXDEpezIsfVxzKiQvLFA9L15bKlwtK11ccysvLEY9L15bMC05XStcLlxzKy8sQj0vXlxbKHh8IClcXSg/PVxzKS8sUj0vXiMrLyxHPS9eKD86XD17MSx9fC17MSx9KSQvLF89L15bXiFcW1xdKl9cXDw+YCAiJyhdKy8sVj1bXTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybntmOm8scHJldkxpbmVIYXNDb250ZW50OiExLHRoaXNMaW5lSGFzQ29udGVudDohMSxibG9jazpvLGh0bWxTdGF0ZTpDb2RlTWlycm9yLnN0YXJ0U3RhdGUodiksaW5kZW50YXRpb246MCxpbmxpbmU6Yyx0ZXh0OnUsbGlua1RleHQ6ITEsbGlua1RpdGxlOiExLGVtOiExLHN0cm9uZzohMSxoZWFkZXI6MCx0YXNrTGlzdDohMSxsaXN0OiExLGxpc3REZXB0aDowLHF1b3RlOjAsdHJhaWxpbmdTcGFjZTowLHRyYWlsaW5nU3BhY2VOZXdMaW5lOiExfX0sY29weVN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybntmOnQuZixwcmV2TGluZUhhc0NvbnRlbnQ6dC5wcmV2TGluZUhhc0NvbnRlbnQsdGhpc0xpbmVIYXNDb250ZW50OnQudGhpc0xpbmVIYXNDb250ZW50LGJsb2NrOnQuYmxvY2ssaHRtbFN0YXRlOkNvZGVNaXJyb3IuY29weVN0YXRlKHYsdC5odG1sU3RhdGUpLGluZGVudGF0aW9uOnQuaW5kZW50YXRpb24sbG9jYWxNb2RlOnQubG9jYWxNb2RlLGxvY2FsU3RhdGU6dC5sb2NhbE1vZGU/Q29kZU1pcnJvci5jb3B5U3RhdGUodC5sb2NhbE1vZGUsdC5sb2NhbFN0YXRlKTpudWxsLGlubGluZTp0LmlubGluZSx0ZXh0OnQudGV4dCxsaW5rVGl0bGU6dC5saW5rVGl0bGUsZW06dC5lbSxzdHJvbmc6dC5zdHJvbmcsaGVhZGVyOnQuaGVhZGVyLHRhc2tMaXN0OnQudGFza0xpc3QsbGlzdDp0Lmxpc3QsbGlzdERlcHRoOnQubGlzdERlcHRoLHF1b3RlOnQucXVvdGUsdHJhaWxpbmdTcGFjZTp0LnRyYWlsaW5nU3BhY2UsdHJhaWxpbmdTcGFjZU5ld0xpbmU6dC50cmFpbGluZ1NwYWNlTmV3TGluZSxtZF9pbnNpZGU6dC5tZF9pbnNpZGV9fSx0b2tlbjpmdW5jdGlvbih0LGUpe2lmKHQuc29sKCkpe2lmKHQubWF0Y2goL15ccyokLywhMCkpcmV0dXJuIGUucHJldkxpbmVIYXNDb250ZW50PSExLGkoZSk7ZS5wcmV2TGluZUhhc0NvbnRlbnQ9ZS50aGlzTGluZUhhc0NvbnRlbnQsZS50aGlzTGluZUhhc0NvbnRlbnQ9ITAsZS5oZWFkZXI9MCxlLnRhc2tMaXN0PSExLGUuY29kZT0hMSxlLnRyYWlsaW5nU3BhY2U9MCxlLnRyYWlsaW5nU3BhY2VOZXdMaW5lPSExLGUuZj1lLmJsb2NrO3ZhciByPXQubWF0Y2goL15ccyovLCEwKVswXS5yZXBsYWNlKC9cdC9nLCIgICAgIikubGVuZ3RoLG49NCpNYXRoLmZsb29yKChyLWUuaW5kZW50YXRpb24pLzQpO24+NCYmKG49NCk7dmFyIG89ZS5pbmRlbnRhdGlvbituO2lmKGUuaW5kZW50YXRpb25EaWZmPW8tZS5pbmRlbnRhdGlvbixlLmluZGVudGF0aW9uPW8scj4wKXJldHVybiBudWxsfXJldHVybiBlLmYodCxlKX0sYmxhbmtMaW5lOmksZ2V0VHlwZTpzfX0sInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LW1hcmtkb3duIiwibWFya2Rvd24iKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4gZS50b2tlbml6ZT1yLHIodCxlKX12YXIgaT10Lm5leHQoKTtpZigiPCI9PWkpe2lmKHQuZWF0KCIhIikpcmV0dXJuIHQuZWF0KCJbIik/dC5tYXRjaCgiQ0RBVEFbIik/cihvKCJhdG9tIiwiXV0+IikpOm51bGw6dC5tYXRjaCgiLS0iKT9yKG8oImNvbW1lbnQiLCItLT4iKSk6dC5tYXRjaCgiRE9DVFlQRSIsITAsITApPyh0LmVhdFdoaWxlKC9bXHdcLl9cLV0vKSxyKGwoMSkpKTpudWxsO2lmKHQuZWF0KCI/IikpcmV0dXJuIHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLGUudG9rZW5pemU9bygibWV0YSIsIj8+IiksIm1ldGEiO3ZhciBhPXQuZWF0KCIvIik7eD0iIjtmb3IodmFyIHM7cz10LmVhdCgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7KXgrPXM7cmV0dXJuIHg/KGI9YT8iY2xvc2VUYWciOiJvcGVuVGFnIixlLnRva2VuaXplPW4sInRhZyIpOiJ0YWcgZXJyb3IifWlmKCImIj09aSl7dmFyIHU7cmV0dXJuIHU9dC5lYXQoIiMiKT90LmVhdCgieCIpP3QuZWF0V2hpbGUoL1thLWZBLUZcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXGRdLykmJnQuZWF0KCI7Iik6dC5lYXRXaGlsZSgvW1x3XC5cLTpdLykmJnQuZWF0KCI7IiksdT8iYXRvbSI6ImVycm9yIn1yZXR1cm4gdC5lYXRXaGlsZSgvW14mPF0vKSxudWxsfWZ1bmN0aW9uIG4odCxlKXt2YXIgbj10Lm5leHQoKTtpZigiPiI9PW58fCIvIj09biYmdC5lYXQoIj4iKSlyZXR1cm4gZS50b2tlbml6ZT1yLGI9Ij4iPT1uPyJlbmRUYWciOiJzZWxmY2xvc2VUYWciLCJ0YWciO2lmKCI9Ij09bilyZXR1cm4gYj0iZXF1YWxzIixudWxsO2lmKCI8Ij09bil7ZS50b2tlbml6ZT1yO3ZhciBvPWUudG9rZW5pemUodCxlKTtyZXR1cm4gbz9vKyIgZXJyb3IiOiJlcnJvciJ9cmV0dXJuL1tcJ1wiXS8udGVzdChuKT8oZS50b2tlbml6ZT1pKG4pLGUuc3RyaW5nU3RhcnRDb2w9dC5jb2x1bW4oKSxlLnRva2VuaXplKHQsZSkpOih0LmVhdFdoaWxlKC9bXlxzXHUwMGEwPTw+XCJcJ10vKSwid29yZCIpfWZ1bmN0aW9uIGkodCl7dmFyIGU9ZnVuY3Rpb24oZSxyKXtmb3IoOyFlLmVvbCgpOylpZihlLm5leHQoKT09dCl7ci50b2tlbml6ZT1uO2JyZWFrfXJldHVybiJzdHJpbmcifTtyZXR1cm4gZS5pc0luQXR0cmlidXRlPSEwLGV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuLGkpe2Zvcig7IW4uZW9sKCk7KXtpZihuLm1hdGNoKGUpKXtpLnRva2VuaXplPXI7YnJlYWt9bi5uZXh0KCl9cmV0dXJuIHR9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7Zm9yKHZhciBpO251bGwhPShpPWUubmV4dCgpKTspe2lmKCI8Ij09aSlyZXR1cm4gbi50b2tlbml6ZT1sKHQrMSksbi50b2tlbml6ZShlLG4pO2lmKCI+Ij09aSl7aWYoMT09dCl7bi50b2tlbml6ZT1yO2JyZWFrfXJldHVybiBuLnRva2VuaXplPWwodC0xKSxuLnRva2VuaXplKGUsbil9fXJldHVybiJtZXRhIn19ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTE7dD49MDt0LS0pQy5jYy5wdXNoKGFyZ3VtZW50c1t0XSl9ZnVuY3Rpb24gcygpe3JldHVybiBhLmFwcGx5KG51bGwsYXJndW1lbnRzKSwhMH1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9VC5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0KXx8Qy5jb250ZXh0JiZDLmNvbnRleHQubm9JbmRlbnQ7Qy5jb250ZXh0PXtwcmV2OkMuY29udGV4dCx0YWdOYW1lOnQsaW5kZW50OkMuaW5kZW50ZWQsc3RhcnRPZkxpbmU6ZSxub0luZGVudDpyfX1mdW5jdGlvbiBjKCl7Qy5jb250ZXh0JiYoQy5jb250ZXh0PUMuY29udGV4dC5wcmV2KX1mdW5jdGlvbiBmKHQpe2lmKCJvcGVuVGFnIj09dClyZXR1cm4gQy50YWdOYW1lPXgsQy50YWdTdGFydD1rLmNvbHVtbigpLHMobSxoKEMuc3RhcnRPZkxpbmUpKTtpZigiY2xvc2VUYWciPT10KXt2YXIgZT0hMTtyZXR1cm4gQy5jb250ZXh0P0MuY29udGV4dC50YWdOYW1lIT14JiYoVC5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KEMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiZjKCksZT0hQy5jb250ZXh0fHxDLmNvbnRleHQudGFnTmFtZSE9eCk6ZT0hMCxlJiYodz0iZXJyb3IiKSxzKGQoZSkpfXJldHVybiBzKCl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9Qy50YWdOYW1lO3JldHVybiBDLnRhZ05hbWU9Qy50YWdTdGFydD1udWxsLCJzZWxmY2xvc2VUYWciPT1lfHwiZW5kVGFnIj09ZSYmVC5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkoci50b0xvd2VyQ2FzZSgpKT8ocChyLnRvTG93ZXJDYXNlKCkpLHMoKSk6ImVuZFRhZyI9PWU/KHAoci50b0xvd2VyQ2FzZSgpKSx1KHIsdCkscygpKTpzKCl9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiYodz0iZXJyb3IiKSwiZW5kVGFnIj09ZT8oYygpLHMoKSk6KHc9ImVycm9yIixzKGFyZ3VtZW50cy5jYWxsZWUpKX19ZnVuY3Rpb24gcCh0KXtmb3IodmFyIGU7Oyl7aWYoIUMuY29udGV4dClyZXR1cm47aWYoZT1DLmNvbnRleHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCFULmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShlKXx8IVQuY29udGV4dEdyYWJiZXJzW2VdLmhhc093blByb3BlcnR5KHQpKXJldHVybjtjKCl9fWZ1bmN0aW9uIG0odCl7cmV0dXJuIndvcmQiPT10Pyh3PSJhdHRyaWJ1dGUiLHMoZyxtKSk6ImVuZFRhZyI9PXR8fCJzZWxmY2xvc2VUYWciPT10P2EoKToodz0iZXJyb3IiLHMobSkpfWZ1bmN0aW9uIGcodCl7aWYoImVxdWFscyI9PXQpcmV0dXJuIHModixtKTtpZihULmFsbG93TWlzc2luZyl7aWYoIndvcmQiPT10KXJldHVybiB3PSJhdHRyaWJ1dGUiLHMoZyxtKX1lbHNlIHc9ImVycm9yIjtyZXR1cm4iZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOnMoKX1mdW5jdGlvbiB2KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6IndvcmQiPT10JiZULmFsbG93VW5xdW90ZWQ/KHc9InN0cmluZyIscygpKToodz0iZXJyb3IiLCJlbmRUYWciPT10fHwic2VsZkNsb3NlVGFnIj09dD9hKCk6cygpKX1mdW5jdGlvbiB5KHQpe3JldHVybiJzdHJpbmciPT10P3MoeSk6YSgpfXZhciB4LGIsQyxrLHcsTD10LmluZGVudFVuaXQsUz1lLm11bHRpbGluZVRhZ0luZGVudEZhY3Rvcnx8MSxNPWUubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZ3x8ITAsVD1lLmh0bWxNb2RlP3thdXRvU2VsZkNsb3NlcnM6e2FyZWE6ITAsYmFzZTohMCxicjohMCxjb2w6ITAsY29tbWFuZDohMCxlbWJlZDohMCxmcmFtZTohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSxpbXBsaWNpdGx5Q2xvc2VkOntkZDohMCxsaTohMCxvcHRncm91cDohMCxvcHRpb246ITAscDohMCxycDohMCxydDohMCx0Ym9keTohMCx0ZDohMCx0Zm9vdDohMCx0aDohMCx0cjohMH0sY29udGV4dEdyYWJiZXJzOntkZDp7ZGQ6ITAsZHQ6ITB9LGR0OntkZDohMCxkdDohMH0sbGk6e2xpOiEwfSxvcHRpb246e29wdGlvbjohMCxvcHRncm91cDohMH0sb3B0Z3JvdXA6e29wdGdyb3VwOiEwfSxwOnthZGRyZXNzOiEwLGFydGljbGU6ITAsYXNpZGU6ITAsYmxvY2txdW90ZTohMCxkaXI6ITAsZGl2OiEwLGRsOiEwLGZpZWxkc2V0OiEwLGZvb3RlcjohMCxmb3JtOiEwLGgxOiEwLGgyOiEwLGgzOiEwLGg0OiEwLGg1OiEwLGg2OiEwLGhlYWRlcjohMCxoZ3JvdXA6ITAsaHI6ITAsbWVudTohMCxuYXY6ITAsb2w6ITAscDohMCxwcmU6ITAsc2VjdGlvbjohMCx0YWJsZTohMCx1bDohMH0scnA6e3JwOiEwLHJ0OiEwfSxydDp7cnA6ITAscnQ6ITB9LHRib2R5Ont0Ym9keTohMCx0Zm9vdDohMH0sdGQ6e3RkOiEwLHRoOiEwfSx0Zm9vdDp7dGJvZHk6ITB9LHRoOnt0ZDohMCx0aDohMH0sdGhlYWQ6e3Rib2R5OiEwLHRmb290OiEwfSx0cjp7dHI6ITB9fSxkb05vdEluZGVudDp7cHJlOiEwfSxhbGxvd1VucXVvdGVkOiEwLGFsbG93TWlzc2luZzohMH06e2F1dG9TZWxmQ2xvc2Vyczp7fSxpbXBsaWNpdGx5Q2xvc2VkOnt9LGNvbnRleHRHcmFiYmVyczp7fSxkb05vdEluZGVudDp7fSxhbGxvd1VucXVvdGVkOiExLGFsbG93TWlzc2luZzohMX0sQT1lLmFsaWduQ0RBVEE7cmV0dXJue3N0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57dG9rZW5pemU6cixjYzpbXSxpbmRlbnRlZDowLHN0YXJ0T2ZMaW5lOiEwLHRhZ05hbWU6bnVsbCx0YWdTdGFydDpudWxsLGNvbnRleHQ6bnVsbH19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYoIWUudGFnTmFtZSYmdC5zb2woKSYmKGUuc3RhcnRPZkxpbmU9ITAsZS5pbmRlbnRlZD10LmluZGVudGF0aW9uKCkpLHQuZWF0U3BhY2UoKSlyZXR1cm4gbnVsbDt3PWI9eD1udWxsO3ZhciByPWUudG9rZW5pemUodCxlKTtpZihlLnR5cGU9Yiwocnx8YikmJiJjb21tZW50IiE9cilmb3IoQz1lLGs9dDs7KXt2YXIgbj1lLmNjLnBvcCgpfHxmO2lmKG4oYnx8cikpYnJlYWt9cmV0dXJuIGUuc3RhcnRPZkxpbmU9ITEsdyYmKHI9ImVycm9yIj09dz9yKyIgZXJyb3IiOncpLHJ9LGluZGVudDpmdW5jdGlvbih0LGUsaSl7dmFyIG89dC5jb250ZXh0O2lmKHQudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSlyZXR1cm4gdC5zdHJpbmdTdGFydENvbCsxO2lmKHQudG9rZW5pemUhPW4mJnQudG9rZW5pemUhPXJ8fG8mJm8ubm9JbmRlbnQpcmV0dXJuIGk/aS5tYXRjaCgvXihccyopLylbMF0ubGVuZ3RoOjA7aWYodC50YWdOYW1lKXJldHVybiBNP3QudGFnU3RhcnQrdC50YWdOYW1lLmxlbmd0aCsyOnQudGFnU3RhcnQrTCpTO2lmKEEmJi88IVxbQ0RBVEFcWy8udGVzdChlKSlyZXR1cm4gMDtmb3IobyYmL148XC8vLnRlc3QoZSkmJihvPW8ucHJldik7byYmIW8uc3RhcnRPZkxpbmU7KW89by5wcmV2O3JldHVybiBvP28uaW5kZW50K0w6MH0sZWxlY3RyaWNDaGFyczoiLyIsYmxvY2tDb21tZW50U3RhcnQ6IjwhLS0iLGJsb2NrQ29tbWVudEVuZDoiLS0+Iixjb25maWd1cmF0aW9uOmUuaHRtbE1vZGU/Imh0bWwiOiJ4bWwiLGhlbHBlclR5cGU6ZS5odG1sTW9kZT8iaHRtbCI6InhtbCJ9fSksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIsInhtbCIpLENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwieG1sIiksQ29kZU1pcnJvci5taW1lTW9kZXMuaGFzT3duUHJvcGVydHkoInRleHQvaHRtbCIpfHxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIse25hbWU6InhtbCIsaHRtbE1vZGU6ITB9KTtQSwcIk9YPXYgyAACIMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAc3RhdGljXGxpYlxjb2RlbWlycm9yLm1pbi5qc3dpbmRvdy5Db2RlTWlycm9yPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQocixuKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQocixuKTt0aGlzLm9wdGlvbnM9bj1ufHx7fTtmb3IodmFyIGkgaW4gYW8pIW4uaGFzT3duUHJvcGVydHkoaSkmJmFvLmhhc093blByb3BlcnR5KGkpJiYobltpXT1hb1tpXSk7aChuKTt2YXIgbz0ic3RyaW5nIj09dHlwZW9mIG4udmFsdWU/MDpuLnZhbHVlLmZpcnN0LGw9dGhpcy5kaXNwbGF5PWUocixvKTtsLndyYXBwZXIuQ29kZU1pcnJvcj10aGlzLHUodGhpcyksbi5hdXRvZm9jdXMmJiFWaSYmcGUodGhpcyksdGhpcy5zdGF0ZT17a2V5TWFwczpbXSxvdmVybGF5czpbXSxtb2RlR2VuOjAsb3ZlcndyaXRlOiExLGZvY3VzZWQ6ITEsc3VwcHJlc3NFZGl0czohMSxwYXN0ZUluY29taW5nOiExLGRyYWdnaW5nVGV4dDohMSxoaWdobGlnaHQ6bmV3ICRufSxzKHRoaXMpLG4ubGluZVdyYXBwaW5nJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIpO3ZhciBhPW4udmFsdWU7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcgd28obi52YWx1ZSxuLm1vZGUpKSxsZSh0aGlzLHBuKSh0aGlzLGEpLEFpJiZzZXRUaW1lb3V0KGlpKGRlLHRoaXMsITApLDIwKSxtZSh0aGlzKTt2YXIgYzt0cnl7Yz1kb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0fWNhdGNoKGYpe31jfHxuLmF1dG9mb2N1cyYmIVZpP3NldFRpbWVvdXQoaWkoRWUsdGhpcyksMjApOnplKHRoaXMpLGxlKHRoaXMsZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gc28pc28ucHJvcGVydHlJc0VudW1lcmFibGUodCkmJnNvW3RdKHRoaXMsblt0XSx1byk7Zm9yKHZhciBlPTA7ZTxwby5sZW5ndGg7KytlKXBvW2VdKHRoaXMpfSkoKX1mdW5jdGlvbiBlKHQsZSl7dmFyIHI9e30sbj1yLmlucHV0PXNpKCJ0ZXh0YXJlYSIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lOyBmb250LXNpemU6IDRweDsiKTtyZXR1cm4gV2k/bi5zdHlsZS53aWR0aD0iMTAwMHB4IjpuLnNldEF0dHJpYnV0ZSgid3JhcCIsIm9mZiIpLEdpJiYobi5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsIm9mZiIpLG4uc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwiZmFsc2UiKSxyLmlucHV0RGl2PXNpKCJkaXYiLFtuXSxudWxsLCJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyIpLHIuc2Nyb2xsYmFySD1zaSgiZGl2Iixbc2koImRpdiIsbnVsbCxudWxsLCJoZWlnaHQ6IDFweCIpXSwiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIiksci5zY3JvbGxiYXJWPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiAxcHgiKV0sIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpLHIuc2Nyb2xsYmFyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpLHIuZ3V0dGVyRmlsbGVyPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpLHIubGluZURpdj1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWNvZGUiKSxyLnNlbGVjdGlvbkRpdj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMSIpLHIuY3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIiksci5vdGhlckN1cnNvcj1zaSgiZGl2IiwiwqAiLCJDb2RlTWlycm9yLWN1cnNvciBDb2RlTWlycm9yLXNlY29uZGFyeWN1cnNvciIpLHIubWVhc3VyZT1zaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLW1lYXN1cmUiKSxyLmxpbmVTcGFjZT1zaSgiZGl2Iixbci5tZWFzdXJlLHIuc2VsZWN0aW9uRGl2LHIubGluZURpdixyLmN1cnNvcixyLm90aGVyQ3Vyc29yXSxudWxsLCJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmUiKSxyLm1vdmVyPXNpKCJkaXYiLFtzaSgiZGl2Iixbci5saW5lU3BhY2VdLCJDb2RlTWlycm9yLWxpbmVzIildLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpLHIuc2l6ZXI9c2koImRpdiIsW3IubW92ZXJdLCJDb2RlTWlycm9yLXNpemVyIiksci5oZWlnaHRGb3JjZXI9c2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIitUbysicHg7IHdpZHRoOiAxcHg7Iiksci5ndXR0ZXJzPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVycyIpLHIubGluZUd1dHRlcj1udWxsLHIuc2Nyb2xsZXI9c2koImRpdiIsW3Iuc2l6ZXIsci5oZWlnaHRGb3JjZXIsci5ndXR0ZXJzXSwiQ29kZU1pcnJvci1zY3JvbGwiKSxyLnNjcm9sbGVyLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCItMSIpLHIud3JhcHBlcj1zaSgiZGl2Iixbci5pbnB1dERpdixyLnNjcm9sbGJhckgsci5zY3JvbGxiYXJWLHIuc2Nyb2xsYmFyRmlsbGVyLHIuZ3V0dGVyRmlsbGVyLHIuc2Nyb2xsZXJdLCJDb2RlTWlycm9yIiksSGkmJihyLmd1dHRlcnMuc3R5bGUuekluZGV4PS0xLHIuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0PTApLHQuYXBwZW5kQ2hpbGQ/dC5hcHBlbmRDaGlsZChyLndyYXBwZXIpOnQoci53cmFwcGVyKSxHaSYmKG4uc3R5bGUud2lkdGg9IjBweCIpLFdpfHwoci5zY3JvbGxlci5kcmFnZ2FibGU9ITApLEZpPyhyLmlucHV0RGl2LnN0eWxlLmhlaWdodD0iMXB4IixyLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIpOkhpJiYoci5zY3JvbGxiYXJILnN0eWxlLm1pbldpZHRoPXIuc2Nyb2xsYmFyVi5zdHlsZS5taW5XaWR0aD0iMThweCIpLHIudmlld09mZnNldD1yLmxhc3RTaXplQz0wLHIuc2hvd2luZ0Zyb209ci5zaG93aW5nVG89ZSxyLmxpbmVOdW1XaWR0aD1yLmxpbmVOdW1Jbm5lcldpZHRoPXIubGluZU51bUNoYXJzPW51bGwsci5wcmV2SW5wdXQ9IiIsci5hbGlnbldpZGdldHM9ITEsci5wb2xsaW5nRmFzdD0hMSxyLnBvbGw9bmV3ICRuLHIuY2FjaGVkQ2hhcldpZHRoPXIuY2FjaGVkVGV4dEhlaWdodD1udWxsLHIubWVhc3VyZUxpbmVDYWNoZT1bXSxyLm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCxyLmluYWNjdXJhdGVTZWxlY3Rpb249ITEsci5tYXhMaW5lPW51bGwsci5tYXhMaW5lTGVuZ3RoPTAsci5tYXhMaW5lQ2hhbmdlZD0hMSxyLndoZWVsRFg9ci53aGVlbERZPXIud2hlZWxTdGFydFg9ci53aGVlbFN0YXJ0WT1udWxsLHJ9ZnVuY3Rpb24gcihlKXtlLmRvYy5tb2RlPXQuZ2V0TW9kZShlLm9wdGlvbnMsZS5kb2MubW9kZU9wdGlvbiksZS5kb2MuaXRlcihmdW5jdGlvbih0KXt0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKX0pLGUuZG9jLmZyb250aWVyPWUuZG9jLmZpcnN0LFcoZSwxMDApLGUuc3RhdGUubW9kZUdlbisrLGUuY3VyT3AmJnVlKGUpfWZ1bmN0aW9uIG4odCl7dC5vcHRpb25zLmxpbmVXcmFwcGluZz8odC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itd3JhcCIsdC5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoPSIiKToodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci13cmFwIiwiIiksZih0KSksbyh0KSx1ZSh0KSxfKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkKHQpfSwxMDApfWZ1bmN0aW9uIGkodCl7dmFyIGU9cmUodC5kaXNwbGF5KSxyPXQub3B0aW9ucy5saW5lV3JhcHBpbmcsbj1yJiZNYXRoLm1heCg1LHQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aC9uZSh0LmRpc3BsYXkpLTMpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gVnIodC5kb2MsaSk/MDpyPyhNYXRoLmNlaWwoaS50ZXh0Lmxlbmd0aC9uKXx8MSkqZTplfX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQuZG9jLHI9aSh0KTtlLml0ZXIoZnVuY3Rpb24odCl7dmFyIGU9cih0KTtlIT10LmhlaWdodCYmeW4odCxlKX0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dm9bdC5vcHRpb25zLmtleU1hcF0scj1lLnN0eWxlO3QuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgvXHMqY20ta2V5bWFwLVxTKy9nLCIiKSsocj8iIGNtLWtleW1hcC0iK3I6IiIpLHQuc3RhdGUuZGlzYWJsZUlucHV0PWUuZGlzYWJsZUlucHV0fWZ1bmN0aW9uIHModCl7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1zLVxTKy9nLCIiKSt0Lm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XHMpXHMqL2csIiBjbS1zLSIpLF8odCl9ZnVuY3Rpb24gYSh0KXt1KHQpLHVlKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtnKHQpfSwyMCl9ZnVuY3Rpb24gdSh0KXt2YXIgZT10LmRpc3BsYXkuZ3V0dGVycyxyPXQub3B0aW9ucy5ndXR0ZXJzO2FpKGUpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dLG89ZS5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLWd1dHRlciAiK2kpKTsiQ29kZU1pcnJvci1saW5lbnVtYmVycyI9PWkmJih0LmRpc3BsYXkubGluZUd1dHRlcj1vLG8uc3R5bGUud2lkdGg9KHQuZGlzcGxheS5saW5lTnVtV2lkdGh8fDEpKyJweCIpfWUuc3R5bGUuZGlzcGxheT1uPyIiOiJub25lIn1mdW5jdGlvbiBjKHQsZSl7aWYoMD09ZS5oZWlnaHQpcmV0dXJuIDA7Zm9yKHZhciByLG49ZS50ZXh0Lmxlbmd0aCxpPWU7cj1ScihpKTspe3ZhciBvPXIuZmluZCgpO2k9Z24odCxvLmZyb20ubGluZSksbis9by5mcm9tLmNoLW8udG8uY2h9Zm9yKGk9ZTtyPUJyKGkpOyl7dmFyIG89ci5maW5kKCk7bi09aS50ZXh0Lmxlbmd0aC1vLmZyb20uY2gsaT1nbih0LG8udG8ubGluZSksbis9aS50ZXh0Lmxlbmd0aC1vLnRvLmNofXJldHVybiBufWZ1bmN0aW9uIGYodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2M7ZS5tYXhMaW5lPWduKHIsci5maXJzdCksZS5tYXhMaW5lTGVuZ3RoPWMocixlLm1heExpbmUpLGUubWF4TGluZUNoYW5nZWQ9ITAsci5pdGVyKGZ1bmN0aW9uKHQpe3ZhciBuPWMocix0KTtuPmUubWF4TGluZUxlbmd0aCYmKGUubWF4TGluZUxlbmd0aD1uLGUubWF4TGluZT10KX0pfWZ1bmN0aW9uIGgodCl7dmFyIGU9dGkodC5ndXR0ZXJzLCJDb2RlTWlycm9yLWxpbmVudW1iZXJzIik7LTE9PWUmJnQubGluZU51bWJlcnM/dC5ndXR0ZXJzPXQuZ3V0dGVycy5jb25jYXQoWyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIl0pOmU+LTEmJiF0LmxpbmVOdW1iZXJzJiYodC5ndXR0ZXJzPXQuZ3V0dGVycy5zbGljZSgwKSx0Lmd1dHRlcnMuc3BsaWNlKGUsMSkpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5kaXNwbGF5LHI9dC5kb2MuaGVpZ2h0LG49citGKGUpO2Uuc2l6ZXIuc3R5bGUubWluSGVpZ2h0PWUuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcD1uKyJweCIsZS5ndXR0ZXJzLnN0eWxlLmhlaWdodD1NYXRoLm1heChuLGUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LVRvKSsicHgiO3ZhciBpPU1hdGgubWF4KG4sZS5zY3JvbGxlci5zY3JvbGxIZWlnaHQpLG89ZS5zY3JvbGxlci5zY3JvbGxXaWR0aD5lLnNjcm9sbGVyLmNsaWVudFdpZHRoKzEsbD1pPmUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KzE7bD8oZS5zY3JvbGxiYXJWLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhclYuc3R5bGUuYm90dG9tPW8/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9aS1lLnNjcm9sbGVyLmNsaWVudEhlaWdodCtlLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KyJweCIpOihlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9IjAiKSxvPyhlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFySC5zdHlsZS5yaWdodD1sP2RpKGUubWVhc3VyZSkrInB4IjoiMCIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9ZS5zY3JvbGxlci5zY3JvbGxXaWR0aC1lLnNjcm9sbGVyLmNsaWVudFdpZHRoK2Uuc2Nyb2xsYmFySC5jbGllbnRXaWR0aCsicHgiKTooZS5zY3JvbGxiYXJILnN0eWxlLmRpc3BsYXk9IiIsZS5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjAiKSxvJiZsPyhlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoPWRpKGUubWVhc3VyZSkrInB4Iik6ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixvJiZ0Lm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXImJnQub3B0aW9ucy5maXhlZEd1dHRlcj8oZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodD1kaShlLm1lYXN1cmUpKyJweCIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGg9ZS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCIpOmUuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXk9IiIsUGkmJjA9PT1kaShlLm1lYXN1cmUpJiYoZS5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPWUuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQ9Umk/IjE4cHgiOiIxMnB4IixlLnNjcm9sbGJhclYuc3R5bGUucG9pbnRlckV2ZW50cz1lLnNjcm9sbGJhckguc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXQuc2Nyb2xsZXIuc2Nyb2xsVG9wLGk9dC53cmFwcGVyLmNsaWVudEhlaWdodDsibnVtYmVyIj09dHlwZW9mIHI/bj1yOnImJihuPXIudG9wLGk9ci5ib3R0b20tci50b3ApLG49TWF0aC5mbG9vcihuLUkodCkpO3ZhciBvPU1hdGguY2VpbChuK2kpO3JldHVybntmcm9tOnhuKGUsbiksdG86eG4oZSxvKX19ZnVuY3Rpb24gZyh0KXt2YXIgZT10LmRpc3BsYXk7aWYoZS5hbGlnbldpZGdldHN8fGUuZ3V0dGVycy5maXJzdENoaWxkJiZ0Lm9wdGlvbnMuZml4ZWRHdXR0ZXIpe2Zvcih2YXIgcj15KGUpLWUuc2Nyb2xsZXIuc2Nyb2xsTGVmdCt0LmRvYy5zY3JvbGxMZWZ0LG49ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGk9cisicHgiLG89ZS5saW5lRGl2LmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpaWYoby5hbGlnbmFibGUpZm9yKHZhciBsPTAscz1vLmFsaWduYWJsZTtsPHMubGVuZ3RoOysrbClzW2xdLnN0eWxlLmxlZnQ9aTt0Lm9wdGlvbnMuZml4ZWRHdXR0ZXImJihlLmd1dHRlcnMuc3R5bGUubGVmdD1yK24rInB4Iil9fWZ1bmN0aW9uIG0odCl7aWYoIXQub3B0aW9ucy5saW5lTnVtYmVycylyZXR1cm4hMTt2YXIgZT10LmRvYyxyPXYodC5vcHRpb25zLGUuZmlyc3QrZS5zaXplLTEpLG49dC5kaXNwbGF5O2lmKHIubGVuZ3RoIT1uLmxpbmVOdW1DaGFycyl7dmFyIGk9bi5tZWFzdXJlLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzaSgiZGl2IixyKV0sIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiKSksbz1pLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsbD1pLm9mZnNldFdpZHRoLW87cmV0dXJuIG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD0iIixuLmxpbmVOdW1Jbm5lcldpZHRoPU1hdGgubWF4KG8sbi5saW5lR3V0dGVyLm9mZnNldFdpZHRoLWwpLG4ubGluZU51bVdpZHRoPW4ubGluZU51bUlubmVyV2lkdGgrbCxuLmxpbmVOdW1DaGFycz1uLmxpbmVOdW1Jbm5lcldpZHRoP3IubGVuZ3RoOi0xLG4ubGluZUd1dHRlci5zdHlsZS53aWR0aD1uLmxpbmVOdW1XaWR0aCsicHgiLCEwfXJldHVybiExfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gU3RyaW5nKHQubGluZU51bWJlckZvcm1hdHRlcihlK3QuZmlyc3RMaW5lTnVtYmVyKSl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gZmkodC5zY3JvbGxlcikubGVmdC1maSh0LnNpemVyKS5sZWZ0fWZ1bmN0aW9uIGIodCxlLHIsbil7Zm9yKHZhciBpLG89dC5kaXNwbGF5LnNob3dpbmdGcm9tLGw9dC5kaXNwbGF5LnNob3dpbmdUbyxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLGE9ITA7O2E9ITEpe3ZhciB1PXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtpZigheCh0LGUscyxuKSlicmVhaztpZihpPSEwLGU9W10sQSh0KSxkKHQpLGEmJnQub3B0aW9ucy5saW5lV3JhcHBpbmcmJnUhPXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCluPSEwO2Vsc2UgaWYobj0hMSxyJiYocj1NYXRoLm1pbih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIm51bWJlciI9PXR5cGVvZiByP3I6ci50b3ApKSxzPXAodC5kaXNwbGF5LHQuZG9jLHIpLHMuZnJvbT49dC5kaXNwbGF5LnNob3dpbmdGcm9tJiZzLnRvPD10LmRpc3BsYXkuc2hvd2luZ1RvKWJyZWFrfXJldHVybiBpJiYoVW4odCwidXBkYXRlIix0KSwodC5kaXNwbGF5LnNob3dpbmdGcm9tIT1vfHx0LmRpc3BsYXkuc2hvd2luZ1RvIT1sKSYmVW4odCwidmlld3BvcnRDaGFuZ2UiLHQsdC5kaXNwbGF5LnNob3dpbmdGcm9tLHQuZGlzcGxheS5zaG93aW5nVG8pKSxpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9dC5kaXNwbGF5LG89dC5kb2M7aWYoIWkud3JhcHBlci5jbGllbnRXaWR0aClyZXR1cm4gaS5zaG93aW5nRnJvbT1pLnNob3dpbmdUbz1vLmZpcnN0LGkudmlld09mZnNldD0wLHZvaWQgMDtpZighKCFuJiYwPT1lLmxlbmd0aCYmci5mcm9tPmkuc2hvd2luZ0Zyb20mJnIudG88aS5zaG93aW5nVG8pKXttKHQpJiYoZT1be2Zyb206by5maXJzdCx0bzpvLmZpcnN0K28uc2l6ZX1dKTt2YXIgbD1pLnNpemVyLnN0eWxlLm1hcmdpbkxlZnQ9aS5ndXR0ZXJzLm9mZnNldFdpZHRoKyJweCI7aS5zY3JvbGxiYXJILnN0eWxlLmxlZnQ9dC5vcHRpb25zLmZpeGVkR3V0dGVyP2w6IjAiO3ZhciBzPTEvMDtpZih0Lm9wdGlvbnMubGluZU51bWJlcnMpZm9yKHZhciBhPTA7YTxlLmxlbmd0aDsrK2EpZVthXS5kaWZmJiZlW2FdLmZyb208cyYmKHM9ZVthXS5mcm9tKTt2YXIgdT1vLmZpcnN0K28uc2l6ZSxjPU1hdGgubWF4KHIuZnJvbS10Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4sby5maXJzdCksZj1NYXRoLm1pbih1LHIudG8rdC5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtpZihpLnNob3dpbmdGcm9tPGMmJmMtaS5zaG93aW5nRnJvbTwyMCYmKGM9TWF0aC5tYXgoby5maXJzdCxpLnNob3dpbmdGcm9tKSksaS5zaG93aW5nVG8+ZiYmaS5zaG93aW5nVG8tZjwyMCYmKGY9TWF0aC5taW4odSxpLnNob3dpbmdUbykpLFFpKWZvcihjPWJuKEdyKG8sZ24obyxjKSkpO3U+ZiYmVnIobyxnbihvLGYpKTspKytmO3ZhciBoPVt7ZnJvbTpNYXRoLm1heChpLnNob3dpbmdGcm9tLG8uZmlyc3QpLHRvOk1hdGgubWluKGkuc2hvd2luZ1RvLHUpfV07aWYoaD1oWzBdLmZyb20+PWhbMF0udG8/W106TChoLGUpLFFpKWZvcih2YXIgYT0wO2E8aC5sZW5ndGg7KythKWZvcih2YXIgZCxwPWhbYV07ZD1CcihnbihvLHAudG8tMSkpOyl7dmFyIGc9ZC5maW5kKCkuZnJvbS5saW5lO2lmKCEoZz5wLmZyb20pKXtoLnNwbGljZShhLS0sMSk7YnJlYWt9cC50bz1nfWZvcih2YXIgdj0wLGE9MDthPGgubGVuZ3RoOysrYSl7dmFyIHA9aFthXTtwLmZyb208YyYmKHAuZnJvbT1jKSxwLnRvPmYmJihwLnRvPWYpLHAuZnJvbT49cC50bz9oLnNwbGljZShhLS0sMSk6dis9cC50by1wLmZyb219aWYoIW4mJnY9PWYtYyYmYz09aS5zaG93aW5nRnJvbSYmZj09aS5zaG93aW5nVG8pcmV0dXJuIHcodCksdm9pZCAwO2guc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmZyb20tZS5mcm9tfSk7dHJ5e3ZhciB5PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYil7fS43KihmLWMpPnYmJihpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0ibm9uZSIpLFModCxjLGYsaCxzKSxpLmxpbmVEaXYuc3R5bGUuZGlzcGxheT0iIix5JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT15JiZ5Lm9mZnNldEhlaWdodCYmeS5mb2N1cygpO3ZhciB4PWMhPWkuc2hvd2luZ0Zyb218fGYhPWkuc2hvd2luZ1RvfHxpLmxhc3RTaXplQyE9aS53cmFwcGVyLmNsaWVudEhlaWdodDtyZXR1cm4geCYmKGkubGFzdFNpemVDPWkud3JhcHBlci5jbGllbnRIZWlnaHQsVyh0LDQwMCkpLGkuc2hvd2luZ0Zyb209YyxpLnNob3dpbmdUbz1mLEModCksdyh0KSwhMH19ZnVuY3Rpb24gQyh0KXtmb3IodmFyIGUscj10LmRpc3BsYXksbj1yLmxpbmVEaXYub2Zmc2V0VG9wLGk9ci5saW5lRGl2LmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpaWYoaS5saW5lT2JqKXtpZihIaSl7dmFyIG89aS5vZmZzZXRUb3AraS5vZmZzZXRIZWlnaHQ7ZT1vLW4sbj1vfWVsc2V7dmFyIGw9ZmkoaSk7ZT1sLmJvdHRvbS1sLnRvcH12YXIgcz1pLmxpbmVPYmouaGVpZ2h0LWU7aWYoMj5lJiYoZT1yZShyKSkscz4uMDAxfHwtLjAwMT5zKXt5bihpLmxpbmVPYmosZSk7dmFyIGE9aS5saW5lT2JqLndpZGdldHM7aWYoYSlmb3IodmFyIHU9MDt1PGEubGVuZ3RoOysrdSlhW3VdLmhlaWdodD1hW3VdLm5vZGUub2Zmc2V0SGVpZ2h0fX19ZnVuY3Rpb24gdyh0KXt2YXIgZT10LmRpc3BsYXkudmlld09mZnNldD1Dbih0LGduKHQuZG9jLHQuZGlzcGxheS5zaG93aW5nRnJvbSkpO3QuZGlzcGxheS5tb3Zlci5zdHlsZS50b3A9ZSsicHgifWZ1bmN0aW9uIEwodCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RofHwwO24+cjsrK3Ipe2Zvcih2YXIgaT1lW3JdLG89W10sbD1pLmRpZmZ8fDAscz0wLGE9dC5sZW5ndGg7YT5zOysrcyl7dmFyIHU9dFtzXTtpLnRvPD11LmZyb20mJmkuZGlmZj9vLnB1c2goe2Zyb206dS5mcm9tK2wsdG86dS50bytsfSk6aS50bzw9dS5mcm9tfHxpLmZyb20+PXUudG8/by5wdXNoKHUpOihpLmZyb20+dS5mcm9tJiZvLnB1c2goe2Zyb206dS5mcm9tLHRvOmkuZnJvbX0pLGkudG88dS50byYmby5wdXNoKHtmcm9tOmkudG8rbCx0bzp1LnRvK2x9KSl9dD1vfXJldHVybiB0fWZ1bmN0aW9uIGsodCl7Zm9yKHZhciBlPXQuZGlzcGxheSxyPXt9LG49e30saT1lLmd1dHRlcnMuZmlyc3RDaGlsZCxvPTA7aTtpPWkubmV4dFNpYmxpbmcsKytvKXJbdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0TGVmdCxuW3Qub3B0aW9ucy5ndXR0ZXJzW29dXT1pLm9mZnNldFdpZHRoO3JldHVybntmaXhlZFBvczp5KGUpLGd1dHRlclRvdGFsV2lkdGg6ZS5ndXR0ZXJzLm9mZnNldFdpZHRoLGd1dHRlckxlZnQ6cixndXR0ZXJXaWR0aDpuLHdyYXBwZXJXaWR0aDplLndyYXBwZXIuY2xpZW50V2lkdGh9fWZ1bmN0aW9uIFModCxlLHIsbixpKXtmdW5jdGlvbiBvKGUpe3ZhciByPWUubmV4dFNpYmxpbmc7cmV0dXJuIFdpJiZLaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldD09ZT8oZS5zdHlsZS5kaXNwbGF5PSJub25lIixlLmxpbmVPYmo9bnVsbCk6ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLHJ9dmFyIGw9ayh0KSxzPXQuZGlzcGxheSxhPXQub3B0aW9ucy5saW5lTnVtYmVycztuLmxlbmd0aHx8V2kmJnQuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXR8fGFpKHMubGluZURpdik7dmFyIHU9cy5saW5lRGl2LGM9dS5maXJzdENoaWxkLGY9bi5zaGlmdCgpLGg9ZTtmb3IodC5kb2MuaXRlcihlLHIsZnVuY3Rpb24oZSl7aWYoZiYmZi50bz09aCYmKGY9bi5zaGlmdCgpKSxWcih0LmRvYyxlKSl7aWYoMCE9ZS5oZWlnaHQmJnluKGUsMCksZS53aWRnZXRzJiZjJiZjLnByZXZpb3VzU2libGluZylmb3IodmFyIHI9MDtyPGUud2lkZ2V0cy5sZW5ndGg7KytyKXt2YXIgcz1lLndpZGdldHNbcl07aWYocy5zaG93SWZIaWRkZW4pe3ZhciBkPWMucHJldmlvdXNTaWJsaW5nO2lmKC9wcmUvaS50ZXN0KGQubm9kZU5hbWUpKXt2YXIgcD1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpO2QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocCxkKSxwLmFwcGVuZENoaWxkKGQpLGQ9cH12YXIgZz1kLmFwcGVuZENoaWxkKHNpKCJkaXYiLFtzLm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKSk7cy5oYW5kbGVNb3VzZUV2ZW50c3x8KGcuaWdub3JlRXZlbnRzPSEwKSxUKHMsZyxkLGwpfX19ZWxzZSBpZihmJiZmLmZyb208PWgmJmYudG8+aCl7Zm9yKDtjLmxpbmVPYmohPWU7KWM9byhjKTthJiZoPj1pJiZjLmxpbmVOdW1iZXImJmNpKGMubGluZU51bWJlcix2KHQub3B0aW9ucyxoKSksYz1jLm5leHRTaWJsaW5nfWVsc2V7aWYoZS53aWRnZXRzKWZvcih2YXIgbSx5PTAsYj1jO2ImJjIwPnk7Kyt5LGI9Yi5uZXh0U2libGluZylpZihiLmxpbmVPYmo9PWUmJi9kaXYvaS50ZXN0KGIubm9kZU5hbWUpKXttPWI7YnJlYWt9dmFyIHg9TSh0LGUsaCxsLG0pO2lmKHghPW0pdS5pbnNlcnRCZWZvcmUoeCxjKTtlbHNle2Zvcig7YyE9bTspYz1vKGMpO2M9Yy5uZXh0U2libGluZ314LmxpbmVPYmo9ZX0rK2h9KTtjOyljPW8oYyl9ZnVuY3Rpb24gTSh0LGUscixuLGkpe3ZhciBvLGw9cm4odCxlKSxzPWwucHJlLGE9ZS5ndXR0ZXJNYXJrZXJzLHU9dC5kaXNwbGF5LGM9bC5iZ0NsYXNzP2wuYmdDbGFzcysiICIrKGUuYmdDbGFzc3x8IiIpOmUuYmdDbGFzcztpZighKHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YXx8Y3x8ZS53cmFwQ2xhc3N8fGUud2lkZ2V0cykpcmV0dXJuIHM7aWYoaSl7aS5hbGlnbmFibGU9bnVsbDtmb3IodmFyIGYsaD0hMCxkPTAscD1udWxsLGc9aS5maXJzdENoaWxkO2c7Zz1mKWlmKGY9Zy5uZXh0U2libGluZywvXGJDb2RlTWlycm9yLWxpbmV3aWRnZXRcYi8udGVzdChnLmNsYXNzTmFtZSkpe2Zvcih2YXIgbT0wO208ZS53aWRnZXRzLmxlbmd0aDsrK20pe3ZhciB5PWUud2lkZ2V0c1ttXTtpZih5Lm5vZGU9PWcuZmlyc3RDaGlsZCl7eS5hYm92ZXx8cHx8KHA9ZyksVCh5LGcsaSxuKSwrK2Q7YnJlYWt9fWlmKG09PWUud2lkZ2V0cy5sZW5ndGgpe2g9ITE7YnJlYWt9fWVsc2UgaS5yZW1vdmVDaGlsZChnKTtpLmluc2VydEJlZm9yZShzLHApLGgmJmQ9PWUud2lkZ2V0cy5sZW5ndGgmJihvPWksaS5jbGFzc05hbWU9ZS53cmFwQ2xhc3N8fCIiKX1pZihvfHwobz1zaSgiZGl2IixudWxsLGUud3JhcENsYXNzLCJwb3NpdGlvbjogcmVsYXRpdmUiKSxvLmFwcGVuZENoaWxkKHMpKSxjJiZvLmluc2VydEJlZm9yZShzaSgiZGl2IixudWxsLGMrIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kIiksby5maXJzdENoaWxkKSx0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEpe3ZhciBiPW8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiKyh0Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bi5maXhlZFBvczotbi5ndXR0ZXJUb3RhbFdpZHRoKSsicHgiKSxvLmZpcnN0Q2hpbGQpO2lmKHQub3B0aW9ucy5maXhlZEd1dHRlciYmKG8uYWxpZ25hYmxlfHwoby5hbGlnbmFibGU9W10pKS5wdXNoKGIpLCF0Lm9wdGlvbnMubGluZU51bWJlcnN8fGEmJmFbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXXx8KG8ubGluZU51bWJlcj1iLmFwcGVuZENoaWxkKHNpKCJkaXYiLHYodC5vcHRpb25zLHIpLCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IiwibGVmdDogIituLmd1dHRlckxlZnRbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSsicHg7IHdpZHRoOiAiK3UubGluZU51bUlubmVyV2lkdGgrInB4IikpKSxhKWZvcih2YXIgeD0wO3g8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysreCl7dmFyIEM9dC5vcHRpb25zLmd1dHRlcnNbeF0sdz1hLmhhc093blByb3BlcnR5KEMpJiZhW0NdO3cmJmIuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3ddLCJDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFtDXSsicHg7IHdpZHRoOiAiK24uZ3V0dGVyV2lkdGhbQ10rInB4IikpfX1pZihIaSYmKG8uc3R5bGUuekluZGV4PTIpLGUud2lkZ2V0cyYmbyE9aSlmb3IodmFyIG09MCxMPWUud2lkZ2V0czttPEwubGVuZ3RoOysrbSl7dmFyIHk9TFttXSxrPXNpKCJkaXYiLFt5Lm5vZGVdLCJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKTt5LmhhbmRsZU1vdXNlRXZlbnRzfHwoay5pZ25vcmVFdmVudHM9ITApLFQoeSxrLG8sbikseS5hYm92ZT9vLmluc2VydEJlZm9yZShrLHQub3B0aW9ucy5saW5lTnVtYmVycyYmMCE9ZS5oZWlnaHQ/YjpzKTpvLmFwcGVuZENoaWxkKGspLFVuKHksInJlZHJhdyIpfXJldHVybiBvfWZ1bmN0aW9uIFQodCxlLHIsbil7aWYodC5ub0hTY3JvbGwpeyhyLmFsaWduYWJsZXx8KHIuYWxpZ25hYmxlPVtdKSkucHVzaChlKTt2YXIgaT1uLndyYXBwZXJXaWR0aDtlLnN0eWxlLmxlZnQ9bi5maXhlZFBvcysicHgiLHQuY292ZXJHdXR0ZXJ8fChpLT1uLmd1dHRlclRvdGFsV2lkdGgsZS5zdHlsZS5wYWRkaW5nTGVmdD1uLmd1dHRlclRvdGFsV2lkdGgrInB4IiksZS5zdHlsZS53aWR0aD1pKyJweCJ9dC5jb3Zlckd1dHRlciYmKGUuc3R5bGUuekluZGV4PTUsZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHQubm9IU2Nyb2xsfHwoZS5zdHlsZS5tYXJnaW5MZWZ0PS1uLmd1dHRlclRvdGFsV2lkdGgrInB4IikpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5kaXNwbGF5LHI9amUodC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvKTtpZihyfHx0Lm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3Rpbmc/SCh0KTplLmN1cnNvci5zdHlsZS5kaXNwbGF5PWUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIscj9lLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSJub25lIjpOKHQpLHQub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKXt2YXIgbj1RKHQsdC5kb2Muc2VsLmhlYWQsImRpdiIpLGk9ZmkoZS53cmFwcGVyKSxvPWZpKGUubGluZURpdik7ZS5pbnB1dERpdi5zdHlsZS50b3A9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50SGVpZ2h0LTEwLG4udG9wK28udG9wLWkudG9wKSkrInB4IixlLmlucHV0RGl2LnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihlLndyYXBwZXIuY2xpZW50V2lkdGgtMTAsbi5sZWZ0K28ubGVmdC1pLmxlZnQpKSsicHgifX1mdW5jdGlvbiBIKHQpe3ZhciBlPXQuZGlzcGxheSxyPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2Iik7ZS5jdXJzb3Iuc3R5bGUubGVmdD1yLmxlZnQrInB4IixlLmN1cnNvci5zdHlsZS50b3A9ci50b3ArInB4IixlLmN1cnNvci5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxyLmJvdHRvbS1yLnRvcCkqdC5vcHRpb25zLmN1cnNvckhlaWdodCsicHgiLGUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5vdGhlcj8oZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLGUub3RoZXJDdXJzb3Iuc3R5bGUubGVmdD1yLm90aGVyLmxlZnQrInB4IixlLm90aGVyQ3Vyc29yLnN0eWxlLnRvcD1yLm90aGVyLnRvcCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0PS44NSooci5vdGhlci5ib3R0b20tci5vdGhlci50b3ApKyJweCIpOmUub3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZnVuY3Rpb24gTih0KXtmdW5jdGlvbiBlKHQsZSxyLG4pezA+ZSYmKGU9MCksbC5hcHBlbmRDaGlsZChzaSgiZGl2IixudWxsLCJDb2RlTWlycm9yLXNlbGVjdGVkIiwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAiK3QrInB4OyB0b3A6ICIrZSsicHg7IHdpZHRoOiAiKyhudWxsPT1yP3MtdDpyKSsicHg7IGhlaWdodDogIisobi1lKSsicHgiKSl9ZnVuY3Rpb24gcihyLG4sbyl7ZnVuY3Rpb24gbChlLG4pe3JldHVybiBxKHQsWWUocixlKSwiZGl2IixmLG4pfXZhciB1LGMsZj1nbihpLHIpLGg9Zi50ZXh0Lmxlbmd0aDtyZXR1cm4gZ2kod24oZiksbnx8MCxudWxsPT1vP2g6byxmdW5jdGlvbih0LHIsaSl7dmFyIGYsZCxwLGc9bCh0LCJsZWZ0Iik7aWYodD09cilmPWcsZD1wPWcubGVmdDtlbHNle2lmKGY9bChyLTEsInJpZ2h0IiksInJ0bCI9PWkpe3ZhciBtPWc7Zz1mLGY9bX1kPWcubGVmdCxwPWYucmlnaHR9bnVsbD09biYmMD09dCYmKGQ9YSksZi50b3AtZy50b3A+MyYmKGUoZCxnLnRvcCxudWxsLGcuYm90dG9tKSxkPWEsZy5ib3R0b208Zi50b3AmJmUoZCxnLmJvdHRvbSxudWxsLGYudG9wKSksbnVsbD09byYmcj09aCYmKHA9cyksKCF1fHxnLnRvcDx1LnRvcHx8Zy50b3A9PXUudG9wJiZnLmxlZnQ8dS5sZWZ0KSYmKHU9ZyksKCFjfHxmLmJvdHRvbT5jLmJvdHRvbXx8Zi5ib3R0b209PWMuYm90dG9tJiZmLnJpZ2h0PmMucmlnaHQpJiYoYz1mKSxhKzE+ZCYmKGQ9YSksZShkLGYudG9wLHAtZCxmLmJvdHRvbSl9KSx7c3RhcnQ6dSxlbmQ6Y319dmFyIG49dC5kaXNwbGF5LGk9dC5kb2Msbz10LmRvYy5zZWwsbD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscz1uLmxpbmVTcGFjZS5vZmZzZXRXaWR0aCxhPVAodC5kaXNwbGF5KTtpZihvLmZyb20ubGluZT09by50by5saW5lKXIoby5mcm9tLmxpbmUsby5mcm9tLmNoLG8udG8uY2gpO2Vsc2V7dmFyIHU9Z24oaSxvLmZyb20ubGluZSksYz1nbihpLG8udG8ubGluZSksZj1HcihpLHUpPT1HcihpLGMpLGg9cihvLmZyb20ubGluZSxvLmZyb20uY2gsZj91LnRleHQubGVuZ3RoOm51bGwpLmVuZCxkPXIoby50by5saW5lLGY/MDpudWxsLG8udG8uY2gpLnN0YXJ0O2YmJihoLnRvcDxkLnRvcC0yPyhlKGgucmlnaHQsaC50b3AsbnVsbCxoLmJvdHRvbSksZShhLGQudG9wLGQubGVmdCxkLmJvdHRvbSkpOmUoaC5yaWdodCxoLnRvcCxkLmxlZnQtaC5yaWdodCxoLmJvdHRvbSkpLGguYm90dG9tPGQudG9wJiZlKGEsaC5ib3R0b20sbnVsbCxkLnRvcCl9dWkobi5zZWxlY3Rpb25EaXYsbCksbi5zZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheT0iIn1mdW5jdGlvbiBEKHQpe2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIGU9dC5kaXNwbGF5O2NsZWFySW50ZXJ2YWwoZS5ibGlua2VyKTt2YXIgcj0hMDtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0iIix0Lm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlPjAmJihlLmJsaW5rZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtlLmN1cnNvci5zdHlsZS52aXNpYmlsaXR5PWUub3RoZXJDdXJzb3Iuc3R5bGUudmlzaWJpbGl0eT0ocj0hcik/IiI6ImhpZGRlbiJ9LHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpKX19ZnVuY3Rpb24gVyh0LGUpe3QuZG9jLm1vZGUuc3RhcnRTdGF0ZSYmdC5kb2MuZnJvbnRpZXI8dC5kaXNwbGF5LnNob3dpbmdUbyYmdC5zdGF0ZS5oaWdobGlnaHQuc2V0KGUsaWkoTyx0KSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmRvYztpZihlLmZyb250aWVyPGUuZmlyc3QmJihlLmZyb250aWVyPWUuZmlyc3QpLCEoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdUbykpe3ZhciByLG49K25ldyBEYXRlK3Qub3B0aW9ucy53b3JrVGltZSxpPWJyKGUubW9kZSx6KHQsZS5mcm9udGllcikpLG89W107ZS5pdGVyKGUuZnJvbnRpZXIsTWF0aC5taW4oZS5maXJzdCtlLnNpemUsdC5kaXNwbGF5LnNob3dpbmdUbys1MDApLGZ1bmN0aW9uKGwpe2lmKGUuZnJvbnRpZXI+PXQuZGlzcGxheS5zaG93aW5nRnJvbSl7dmFyIHM9bC5zdHlsZXM7bC5zdHlsZXM9UXIodCxsLGksITApO2Zvcih2YXIgYT0hc3x8cy5sZW5ndGghPWwuc3R5bGVzLmxlbmd0aCx1PTA7IWEmJnU8cy5sZW5ndGg7Kyt1KWE9c1t1XSE9bC5zdHlsZXNbdV07YSYmKHImJnIuZW5kPT1lLmZyb250aWVyP3IuZW5kKys6by5wdXNoKHI9e3N0YXJ0OmUuZnJvbnRpZXIsZW5kOmUuZnJvbnRpZXIrMX0pKSxsLnN0YXRlQWZ0ZXI9YnIoZS5tb2RlLGkpfWVsc2UgdG4odCxsLnRleHQsaSksbC5zdGF0ZUFmdGVyPTA9PWUuZnJvbnRpZXIlNT9icihlLm1vZGUsaSk6bnVsbDtyZXR1cm4rK2UuZnJvbnRpZXIsK25ldyBEYXRlPm4/KFcodCx0Lm9wdGlvbnMud29ya0RlbGF5KSwhMCk6dm9pZCAwfSksby5sZW5ndGgmJmxlKHQsZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoOysrdCl1ZSh0aGlzLG9bdF0uc3RhcnQsb1t0XS5lbmQpfSkoKX19ZnVuY3Rpb24gRSh0LGUscil7Zm9yKHZhciBuLGksbz10LmRvYyxsPXI/LTE6ZS0odC5kb2MubW9kZS5pbm5lck1vZGU/MWUzOjEwMCkscz1lO3M+bDstLXMpe2lmKHM8PW8uZmlyc3QpcmV0dXJuIG8uZmlyc3Q7dmFyIGE9Z24obyxzLTEpO2lmKGEuc3RhdGVBZnRlciYmKCFyfHxzPD1vLmZyb250aWVyKSlyZXR1cm4gczt2YXIgdT1abihhLnRleHQsbnVsbCx0Lm9wdGlvbnMudGFiU2l6ZSk7KG51bGw9PWl8fG4+dSkmJihpPXMtMSxuPXUpfXJldHVybiBpfWZ1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXQuZG9jLGk9dC5kaXNwbGF5O2lmKCFuLm1vZGUuc3RhcnRTdGF0ZSlyZXR1cm4hMDt2YXIgbz1FKHQsZSxyKSxsPW8+bi5maXJzdCYmZ24obixvLTEpLnN0YXRlQWZ0ZXI7cmV0dXJuIGw9bD9icihuLm1vZGUsbCk6eHIobi5tb2RlKSxuLml0ZXIobyxlLGZ1bmN0aW9uKHIpe3RuKHQsci50ZXh0LGwpO3ZhciBzPW89PWUtMXx8MD09byU1fHxvPj1pLnNob3dpbmdGcm9tJiZvPGkuc2hvd2luZ1RvO3Iuc3RhdGVBZnRlcj1zP2JyKG4ubW9kZSxsKTpudWxsLCsrb30pLHImJihuLmZyb250aWVyPW8pLGx9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5saW5lU3BhY2Uub2Zmc2V0VG9wfWZ1bmN0aW9uIEYodCl7cmV0dXJuIHQubW92ZXIub2Zmc2V0SGVpZ2h0LXQubGluZVNwYWNlLm9mZnNldEhlaWdodH1mdW5jdGlvbiBQKHQpe3ZhciBlPXVpKHQubWVhc3VyZSxzaSgicHJlIixudWxsLG51bGwsInRleHQtYWxpZ246IGxlZnQiKSkuYXBwZW5kQ2hpbGQoc2koInNwYW4iLCJ4IikpO3JldHVybiBlLm9mZnNldExlZnR9ZnVuY3Rpb24gUih0LGUscixuLGkpe3ZhciBvPS0xO2lmKG49bnx8Vih0LGUpLG4uY3J1ZGUpe3ZhciBsPW4ubGVmdCtyKm4ud2lkdGg7cmV0dXJue2xlZnQ6bCxyaWdodDpsK24ud2lkdGgsdG9wOm4udG9wLGJvdHRvbTpuLmJvdHRvbX19Zm9yKHZhciBzPXI7O3MrPW8pe3ZhciBhPW5bc107aWYoYSlicmVhazswPm8mJjA9PXMmJihvPTEpfXJldHVybiBpPXM+cj8ibGVmdCI6cj5zPyJyaWdodCI6aSwibGVmdCI9PWkmJmEubGVmdFNpZGU/YT1hLmxlZnRTaWRlOiJyaWdodCI9PWkmJmEucmlnaHRTaWRlJiYoYT1hLnJpZ2h0U2lkZSkse2xlZnQ6cj5zP2EucmlnaHQ6YS5sZWZ0LHJpZ2h0OnM+cj9hLmxlZnQ6YS5yaWdodCx0b3A6YS50b3AsYm90dG9tOmEuYm90dG9tfX1mdW5jdGlvbiBCKHQsZSl7Zm9yKHZhciByPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG49MDtuPHIubGVuZ3RoOysrbil7dmFyIGk9cltuXTtpZihpLnRleHQ9PWUudGV4dCYmaS5tYXJrZWRTcGFucz09ZS5tYXJrZWRTcGFucyYmdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoPT1pLndpZHRoJiZpLmNsYXNzZXM9PWUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzcylyZXR1cm4gaX19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPUIodCxlKTtyJiYoci50ZXh0PXIubWVhc3VyZT1yLm1hcmtlZFNwYW5zPW51bGwpfWZ1bmN0aW9uIFYodCxlKXt2YXIgcj1CKHQsZSk7aWYocilyZXR1cm4gci5tZWFzdXJlO3ZhciBuPUsodCxlKSxpPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLG89e3RleHQ6ZS50ZXh0LHdpZHRoOnQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCxtYXJrZWRTcGFuczplLm1hcmtlZFNwYW5zLG1lYXN1cmU6bixjbGFzc2VzOmUudGV4dENsYXNzKyJ8IitlLndyYXBDbGFzc307cmV0dXJuIDE2PT1pLmxlbmd0aD9pWysrdC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3MlMTZdPW86aS5wdXNoKG8pLG59ZnVuY3Rpb24gSyh0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9dC50b3AtcC50b3Ascj10LmJvdHRvbS1wLnRvcDtyPnYmJihyPXYpLDA+ZSYmKGU9MCk7Zm9yKHZhciBuPWcubGVuZ3RoLTI7bj49MDtuLT0yKXt2YXIgaT1nW25dLG89Z1tuKzFdO2lmKCEoaT5yfHxlPm8pJiYoZT49aSYmbz49cnx8aT49ZSYmcj49b3x8TWF0aC5taW4ocixvKS1NYXRoLm1heChlLGkpPj1yLWU+PjEpKXtnW25dPU1hdGgubWluKGUsaSksZ1tuKzFdPU1hdGgubWF4KHIsbyk7YnJlYWt9fXJldHVybiAwPm4mJihuPWcubGVuZ3RoLGcucHVzaChlLHIpKSx7bGVmdDp0LmxlZnQtcC5sZWZ0LHJpZ2h0OnQucmlnaHQtcC5sZWZ0LHRvcDpuLGJvdHRvbTpudWxsfX1mdW5jdGlvbiBuKHQpe3QuYm90dG9tPWdbdC50b3ArMV0sdC50b3A9Z1t0LnRvcF19aWYoIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFUodCxlKTt2YXIgaT10LmRpc3BsYXksbz1uaShlLnRleHQubGVuZ3RoKSxsPXJuKHQsZSxvLCEwKS5wcmU7aWYoQWkmJiFIaSYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJmwuY2hpbGROb2Rlcy5sZW5ndGg+MTAwKXtmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MTAsdT1sLmNoaWxkTm9kZXMubGVuZ3RoLGM9MCxmPU1hdGguY2VpbCh1L2EpO2Y+YzsrK2Mpe2Zvcih2YXIgaD1zaSgiZGl2IixudWxsLG51bGwsImRpc3BsYXk6IGlubGluZS1ibG9jayIpLGQ9MDthPmQmJnU7KytkKWguYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKSwtLXU7cy5hcHBlbmRDaGlsZChoKX1sLmFwcGVuZENoaWxkKHMpfXVpKGkubWVhc3VyZSxsKTt2YXIgcD1maShpLmxpbmVEaXYpLGc9W10sbT1uaShlLnRleHQubGVuZ3RoKSx2PWwub2Zmc2V0SGVpZ2h0O05pJiZpLm1lYXN1cmUuZmlyc3QhPWwmJnVpKGkubWVhc3VyZSxsKTtmb3IodmFyIHksYz0wO2M8by5sZW5ndGg7KytjKWlmKHk9b1tjXSl7dmFyIGI9eSx4PW51bGw7aWYoL1xiQ29kZU1pcnJvci13aWRnZXRcYi8udGVzdCh5LmNsYXNzTmFtZSkmJnkuZ2V0Q2xpZW50UmVjdHMpezE9PXkuZmlyc3RDaGlsZC5ub2RlVHlwZSYmKGI9eS5maXJzdENoaWxkKTt2YXIgQz1iLmdldENsaWVudFJlY3RzKCk7Qy5sZW5ndGg+MSYmKHg9bVtjXT1yKENbMF0pLHgucmlnaHRTaWRlPXIoQ1tDLmxlbmd0aC0xXSkpfXh8fCh4PW1bY109cihmaShiKSkpLHkubWVhc3VyZVJpZ2h0JiYoeC5yaWdodD1maSh5Lm1lYXN1cmVSaWdodCkubGVmdCkseS5sZWZ0U2lkZSYmKHgubGVmdFNpZGU9cihmaSh5LmxlZnRTaWRlKSkpfWFpKHQuZGlzcGxheS5tZWFzdXJlKTtmb3IodmFyIHksYz0wO2M8bS5sZW5ndGg7KytjKSh5PW1bY10pJiYobih5KSx5LmxlZnRTaWRlJiZuKHkubGVmdFNpZGUpLHkucmlnaHRTaWRlJiZuKHkucmlnaHRTaWRlKSk7cmV0dXJuIG19ZnVuY3Rpb24gVSh0LGUpe3ZhciByPW5ldyBibyhlLnRleHQuc2xpY2UoMCwxMDApLG51bGwpO2UudGV4dENsYXNzJiYoci50ZXh0Q2xhc3M9ZS50ZXh0Q2xhc3MpO3ZhciBuPUsodCxyKSxpPVIodCxyLDAsbiwibGVmdCIpLG89Uih0LHIsOTksbiwicmlnaHQiKTtyZXR1cm57Y3J1ZGU6ITAsdG9wOmkudG9wLGxlZnQ6aS5sZWZ0LGJvdHRvbTppLmJvdHRvbSx3aWR0aDooby5yaWdodC1pLmxlZnQpLzEwMH19ZnVuY3Rpb24gWCh0LGUpe3ZhciByPSExO2lmKGUubWFya2VkU3BhbnMpZm9yKHZhciBuPTA7bjxlLm1hcmtlZFNwYW5zOysrbil7dmFyIGk9ZS5tYXJrZWRTcGFuc1tuXTshaS5jb2xsYXBzZWR8fG51bGwhPWkudG8mJmkudG8hPWUudGV4dC5sZW5ndGh8fChyPSEwKX12YXIgbz0hciYmQih0LGUpO2lmKG98fGUudGV4dC5sZW5ndGg+PXQub3B0aW9ucy5jcnVkZU1lYXN1cmluZ0Zyb20pcmV0dXJuIFIodCxlLGUudGV4dC5sZW5ndGgsbyYmby5tZWFzdXJlLCJyaWdodCIpLnJpZ2h0O3ZhciBsPXJuKHQsZSxudWxsLCEwKS5wcmUscz1sLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSk7cmV0dXJuIHVpKHQuZGlzcGxheS5tZWFzdXJlLGwpLGZpKHMpLnJpZ2h0LWZpKHQuZGlzcGxheS5saW5lRGl2KS5sZWZ0fWZ1bmN0aW9uIF8odCl7dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUubGVuZ3RoPXQuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlUG9zPTAsdC5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aD10LmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodD1udWxsLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fCh0LmRpc3BsYXkubWF4TGluZUNoYW5nZWQ9ITApLHQuZGlzcGxheS5saW5lTnVtQ2hhcnM9bnVsbH1mdW5jdGlvbiBZKCl7cmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBqKCl7cmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldHx8KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wfWZ1bmN0aW9uICQodCxlLHIsbil7aWYoZS53aWRnZXRzKWZvcih2YXIgaT0wO2k8ZS53aWRnZXRzLmxlbmd0aDsrK2kpaWYoZS53aWRnZXRzW2ldLmFib3ZlKXt2YXIgbz1ZcihlLndpZGdldHNbaV0pO3IudG9wKz1vLHIuYm90dG9tKz1vfWlmKCJsaW5lIj09bilyZXR1cm4gcjtufHwobj0ibG9jYWwiKTt2YXIgbD1Dbih0LGUpO2lmKCJsb2NhbCI9PW4/bCs9SSh0LmRpc3BsYXkpOmwtPXQuZGlzcGxheS52aWV3T2Zmc2V0LCJwYWdlIj09bnx8IndpbmRvdyI9PW4pe3ZhciBzPWZpKHQuZGlzcGxheS5saW5lU3BhY2UpO2wrPXMudG9wKygid2luZG93Ij09bj8wOmooKSk7dmFyIGE9cy5sZWZ0Kygid2luZG93Ij09bj8wOlkoKSk7ci5sZWZ0Kz1hLHIucmlnaHQrPWF9cmV0dXJuIHIudG9wKz1sLHIuYm90dG9tKz1sLHJ9ZnVuY3Rpb24gWih0LGUscil7aWYoImRpdiI9PXIpcmV0dXJuIGU7dmFyIG49ZS5sZWZ0LGk9ZS50b3A7aWYoInBhZ2UiPT1yKW4tPVkoKSxpLT1qKCk7ZWxzZSBpZigibG9jYWwiPT1yfHwhcil7dmFyIG89ZmkodC5kaXNwbGF5LnNpemVyKTtuKz1vLmxlZnQsaSs9by50b3B9dmFyIGw9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7cmV0dXJue2xlZnQ6bi1sLmxlZnQsdG9wOmktbC50b3B9fWZ1bmN0aW9uIHEodCxlLHIsbixpKXtyZXR1cm4gbnx8KG49Z24odC5kb2MsZS5saW5lKSksJCh0LG4sUih0LG4sZS5jaCxudWxsLGkpLHIpfWZ1bmN0aW9uIFEodCxlLHIsbixpKXtmdW5jdGlvbiBvKGUsbyl7dmFyIGw9Uih0LG4sZSxpLG8/InJpZ2h0IjoibGVmdCIpO3JldHVybiBvP2wubGVmdD1sLnJpZ2h0OmwucmlnaHQ9bC5sZWZ0LCQodCxuLGwscil9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXNbZV0sbj1yLmxldmVsJTI7cmV0dXJuIHQ9PW1pKHIpJiZlJiZyLmxldmVsPHNbZS0xXS5sZXZlbD8ocj1zWy0tZV0sdD12aShyKS0oci5sZXZlbCUyPzA6MSksbj0hMCk6dD09dmkocikmJmU8cy5sZW5ndGgtMSYmci5sZXZlbDxzW2UrMV0ubGV2ZWwmJihyPXNbKytlXSx0PW1pKHIpLXIubGV2ZWwlMixuPSExKSxuJiZ0PT1yLnRvJiZ0PnIuZnJvbT9vKHQtMSk6byh0LG4pfW49bnx8Z24odC5kb2MsZS5saW5lKSxpfHwoaT1WKHQsbikpO3ZhciBzPXduKG4pLGE9ZS5jaDtpZighcylyZXR1cm4gbyhhKTt2YXIgdT1MaShzLGEpLGM9bChhLHUpO3JldHVybiBudWxsIT1SbyYmKGMub3RoZXI9bChhLFJvKSksY31mdW5jdGlvbiBKKHQsZSxyLG4pe3ZhciBpPW5ldyBZZSh0LGUpO3JldHVybiBpLnhSZWw9bixyJiYoaS5vdXRzaWRlPSEwKSxpfWZ1bmN0aW9uIHRlKHQsZSxyKXt2YXIgbj10LmRvYztpZihyKz10LmRpc3BsYXkudmlld09mZnNldCwwPnIpcmV0dXJuIEoobi5maXJzdCwwLCEwLC0xKTt2YXIgaT14bihuLHIpLG89bi5maXJzdCtuLnNpemUtMTtpZihpPm8pcmV0dXJuIEoobi5maXJzdCtuLnNpemUtMSxnbihuLG8pLnRleHQubGVuZ3RoLCEwLDEpO2ZvcigwPmUmJihlPTApOzspe3ZhciBsPWduKG4saSkscz1lZSh0LGwsaSxlLHIpLGE9QnIobCksdT1hJiZhLmZpbmQoKTtpZighYXx8IShzLmNoPnUuZnJvbS5jaHx8cy5jaD09dS5mcm9tLmNoJiZzLnhSZWw+MCkpcmV0dXJuIHM7aT11LnRvLmxpbmV9fWZ1bmN0aW9uIGVlKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyhuKXt2YXIgaT1RKHQsWWUocixuKSwibGluZSIsZSx1KTtyZXR1cm4gcz0hMCxsPmkuYm90dG9tP2kubGVmdC1hOmw8aS50b3A/aS5sZWZ0K2E6KHM9ITEsaS5sZWZ0KX12YXIgbD1pLUNuKHQsZSkscz0hMSxhPTIqdC5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGgsdT1WKHQsZSksYz13bihlKSxmPWUudGV4dC5sZW5ndGgsaD15aShlKSxkPWJpKGUpLHA9byhoKSxnPXMsbT1vKGQpLHY9cztpZihuPm0pcmV0dXJuIEoocixkLHYsMSk7Zm9yKDs7KXtpZihjP2Q9PWh8fGQ9PVNpKGUsaCwxKToxPj1kLWgpe2Zvcih2YXIgeT1wPm58fG0tbj49bi1wP2g6ZCxiPW4tKHk9PWg/cDptKTtEby50ZXN0KGUudGV4dC5jaGFyQXQoeSkpOykrK3k7dmFyIHg9SihyLHkseT09aD9nOnYsMD5iPy0xOmI/MTowKTtyZXR1cm4geH12YXIgQz1NYXRoLmNlaWwoZi8yKSx3PWgrQztpZihjKXt3PWg7Zm9yKHZhciBMPTA7Qz5MOysrTCl3PVNpKGUsdywxKX12YXIgaz1vKHcpO2s+bj8oZD13LG09aywodj1zKSYmKG0rPTFlMyksZj1DKTooaD13LHA9ayxnPXMsZi09Qyl9fWZ1bmN0aW9uIHJlKHQpe2lmKG51bGwhPXQuY2FjaGVkVGV4dEhlaWdodClyZXR1cm4gdC5jYWNoZWRUZXh0SGVpZ2h0O2lmKG51bGw9PV9pKXtfaT1zaSgicHJlIik7Zm9yKHZhciBlPTA7NDk+ZTsrK2UpX2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSksX2kuYXBwZW5kQ2hpbGQoc2koImJyIikpO19pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IikpfXVpKHQubWVhc3VyZSxfaSk7dmFyIHI9X2kub2Zmc2V0SGVpZ2h0LzUwO3JldHVybiByPjMmJih0LmNhY2hlZFRleHRIZWlnaHQ9ciksYWkodC5tZWFzdXJlKSxyfHwxfWZ1bmN0aW9uIG5lKHQpe2lmKG51bGwhPXQuY2FjaGVkQ2hhcldpZHRoKXJldHVybiB0LmNhY2hlZENoYXJXaWR0aDt2YXIgZT1zaSgic3BhbiIsIngiKSxyPXNpKCJwcmUiLFtlXSk7dWkodC5tZWFzdXJlLHIpO3ZhciBuPWUub2Zmc2V0V2lkdGg7cmV0dXJuIG4+MiYmKHQuY2FjaGVkQ2hhcldpZHRoPW4pLG58fDEwfWZ1bmN0aW9uIGllKHQpe3QuY3VyT3A9e2NoYW5nZXM6W10sZm9yY2VVcGRhdGU6ITEsdXBkYXRlSW5wdXQ6bnVsbCx1c2VyU2VsQ2hhbmdlOm51bGwsdGV4dENoYW5nZWQ6bnVsbCxzZWxlY3Rpb25DaGFuZ2VkOiExLGN1cnNvckFjdGl2aXR5OiExLHVwZGF0ZU1heExpbmU6ITEsdXBkYXRlU2Nyb2xsUG9zOiExLGlkOisrSml9LE1vKyt8fChTbz1bXSl9ZnVuY3Rpb24gb2UodCl7dmFyIGU9dC5jdXJPcCxyPXQuZG9jLG49dC5kaXNwbGF5O2lmKHQuY3VyT3A9bnVsbCxlLnVwZGF0ZU1heExpbmUmJmYodCksbi5tYXhMaW5lQ2hhbmdlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcmJm4ubWF4TGluZSl7dmFyIGk9WCh0LG4ubWF4TGluZSk7bi5zaXplci5zdHlsZS5taW5XaWR0aD1NYXRoLm1heCgwLGkrMytUbykrInB4IixuLm1heExpbmVDaGFuZ2VkPSExO3ZhciBvPU1hdGgubWF4KDAsbi5zaXplci5vZmZzZXRMZWZ0K24uc2l6ZXIub2Zmc2V0V2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCk7bzxyLnNjcm9sbExlZnQmJiFlLnVwZGF0ZVNjcm9sbFBvcyYmTWUodCxNYXRoLm1pbihuLnNjcm9sbGVyLnNjcm9sbExlZnQsbyksITApfXZhciBsLHM7aWYoZS51cGRhdGVTY3JvbGxQb3MpbD1lLnVwZGF0ZVNjcm9sbFBvcztlbHNlIGlmKGUuc2VsZWN0aW9uQ2hhbmdlZCYmbi5zY3JvbGxlci5jbGllbnRIZWlnaHQpe3ZhciBhPVEodCxyLnNlbC5oZWFkKTtsPXVyKHQsYS5sZWZ0LGEudG9wLGEubGVmdCxhLmJvdHRvbSl9aWYoKGUuY2hhbmdlcy5sZW5ndGh8fGUuZm9yY2VVcGRhdGV8fGwmJm51bGwhPWwuc2Nyb2xsVG9wKSYmKHM9Yih0LGUuY2hhbmdlcyxsJiZsLnNjcm9sbFRvcCxlLmZvcmNlVXBkYXRlKSx0LmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0JiYodC5kb2Muc2Nyb2xsVG9wPXQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3ApKSwhcyYmZS5zZWxlY3Rpb25DaGFuZ2VkJiZBKHQpLGUudXBkYXRlU2Nyb2xsUG9zKXt2YXIgdT1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0LW4uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LGwuc2Nyb2xsVG9wKSksYz1NYXRoLm1heCgwLE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtbi5zY3JvbGxlci5jbGllbnRXaWR0aCxsLnNjcm9sbExlZnQpKTtuLnNjcm9sbGVyLnNjcm9sbFRvcD1uLnNjcm9sbGJhclYuc2Nyb2xsVG9wPXIuc2Nyb2xsVG9wPXUsbi5zY3JvbGxlci5zY3JvbGxMZWZ0PW4uc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PXIuc2Nyb2xsTGVmdD1jLGcodCksZS5zY3JvbGxUb1BvcyYmc3IodCxRZSh0LmRvYyxlLnNjcm9sbFRvUG9zLmZyb20pLFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MudG8pLGUuc2Nyb2xsVG9Qb3MubWFyZ2luKX1lbHNlIGwmJmxyKHQpO2Uuc2VsZWN0aW9uQ2hhbmdlZCYmRCh0KSx0LnN0YXRlLmZvY3VzZWQmJmUudXBkYXRlSW5wdXQmJmRlKHQsZS51c2VyU2VsQ2hhbmdlKTt2YXIgaD1lLm1heWJlSGlkZGVuTWFya2VycyxkPWUubWF5YmVVbmhpZGRlbk1hcmtlcnM7aWYoaClmb3IodmFyIHA9MDtwPGgubGVuZ3RoOysrcCloW3BdLmxpbmVzLmxlbmd0aHx8S24oaFtwXSwiaGlkZSIpO2lmKGQpZm9yKHZhciBwPTA7cDxkLmxlbmd0aDsrK3ApZFtwXS5saW5lcy5sZW5ndGgmJktuKGRbcF0sInVuaGlkZSIpO3ZhciBtO2lmKC0tTW98fChtPVNvLFNvPW51bGwpLGUudGV4dENoYW5nZWQmJktuKHQsImNoYW5nZSIsdCxlLnRleHRDaGFuZ2VkKSxlLmN1cnNvckFjdGl2aXR5JiZLbih0LCJjdXJzb3JBY3Rpdml0eSIsdCksbSlmb3IodmFyIHA9MDtwPG0ubGVuZ3RoOysrcCltW3BdKCl9ZnVuY3Rpb24gbGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10fHx0aGlzLG49IXIuY3VyT3A7biYmaWUocik7dHJ5e3ZhciBpPWUuYXBwbHkocixhcmd1bWVudHMpfWZpbmFsbHl7biYmb2Uocil9cmV0dXJuIGl9fWZ1bmN0aW9uIHNlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5jbSYmIXRoaXMuY20uY3VyT3A7ciYmaWUodGhpcy5jbSk7dHJ5e2U9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtyJiZvZSh0aGlzLmNtKX1yZXR1cm4gZX19ZnVuY3Rpb24gYWUodCxlKXt2YXIgcixuPSF0LmN1ck9wO24mJmllKHQpO3RyeXtyPWUoKX1maW5hbGx5e24mJm9lKHQpfXJldHVybiByfWZ1bmN0aW9uIHVlKHQsZSxyLG4pe251bGw9PWUmJihlPXQuZG9jLmZpcnN0KSxudWxsPT1yJiYocj10LmRvYy5maXJzdCt0LmRvYy5zaXplKSx0LmN1ck9wLmNoYW5nZXMucHVzaCh7ZnJvbTplLHRvOnIsZGlmZjpufSl9ZnVuY3Rpb24gY2UodCl7dC5kaXNwbGF5LnBvbGxpbmdGYXN0fHx0LmRpc3BsYXkucG9sbC5zZXQodC5vcHRpb25zLnBvbGxJbnRlcnZhbCxmdW5jdGlvbigpe2hlKHQpLHQuc3RhdGUuZm9jdXNlZCYmY2UodCl9KX1mdW5jdGlvbiBmZSh0KXtmdW5jdGlvbiBlKCl7dmFyIG49aGUodCk7bnx8cj8odC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExLGNlKHQpKToocj0hMCx0LmRpc3BsYXkucG9sbC5zZXQoNjAsZSkpfXZhciByPSExO3QuZGlzcGxheS5wb2xsaW5nRmFzdD0hMCx0LmRpc3BsYXkucG9sbC5zZXQoMjAsZSl9ZnVuY3Rpb24gaGUodCl7dmFyIGU9dC5kaXNwbGF5LmlucHV0LHI9dC5kaXNwbGF5LnByZXZJbnB1dCxuPXQuZG9jLGk9bi5zZWw7aWYoIXQuc3RhdGUuZm9jdXNlZHx8SW8oZSl8fGdlKHQpfHx0LnN0YXRlLmRpc2FibGVJbnB1dClyZXR1cm4hMTt0LnN0YXRlLnBhc3RlSW5jb21pbmcmJnQuc3RhdGUuZmFrZWRMYXN0Q2hhciYmKGUudmFsdWU9ZS52YWx1ZS5zdWJzdHJpbmcoMCxlLnZhbHVlLmxlbmd0aC0xKSx0LnN0YXRlLmZha2VkTGFzdENoYXI9ITEpO3ZhciBvPWUudmFsdWU7aWYobz09ciYmamUoaS5mcm9tLGkudG8pKXJldHVybiExO2lmKEFpJiYhTmkmJnQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj09PW8pcmV0dXJuIGRlKHQsITApLCExO3ZhciBsPSF0LmN1ck9wO2wmJmllKHQpLGkuc2hpZnQ9ITE7Zm9yKHZhciBzPTAsYT1NYXRoLm1pbihyLmxlbmd0aCxvLmxlbmd0aCk7YT5zJiZyLmNoYXJDb2RlQXQocyk9PW8uY2hhckNvZGVBdChzKTspKytzO3ZhciB1PWkuZnJvbSxjPWkudG87czxyLmxlbmd0aD91PVllKHUubGluZSx1LmNoLShyLmxlbmd0aC1zKSk6dC5zdGF0ZS5vdmVyd3JpdGUmJmplKHUsYykmJiF0LnN0YXRlLnBhc3RlSW5jb21pbmcmJihjPVllKGMubGluZSxNYXRoLm1pbihnbihuLGMubGluZSkudGV4dC5sZW5ndGgsYy5jaCsoby5sZW5ndGgtcykpKSk7dmFyIGY9dC5jdXJPcC51cGRhdGVJbnB1dCxoPXtmcm9tOnUsdG86Yyx0ZXh0OnpvKG8uc2xpY2UocykpLG9yaWdpbjp0LnN0YXRlLnBhc3RlSW5jb21pbmc/InBhc3RlIjoiK2lucHV0In07cmV0dXJuIEJlKHQuZG9jLGgsImVuZCIpLHQuY3VyT3AudXBkYXRlSW5wdXQ9ZixVbih0LCJpbnB1dFJlYWQiLHQsaCksby5sZW5ndGg+MWUzfHxvLmluZGV4T2YoIlxuIik+LTE/ZS52YWx1ZT10LmRpc3BsYXkucHJldklucHV0PSIiOnQuZGlzcGxheS5wcmV2SW5wdXQ9byxsJiZvZSh0KSx0LnN0YXRlLnBhc3RlSW5jb21pbmc9ITEsITB9ZnVuY3Rpb24gZGUodCxlKXt2YXIgcixuLGk9dC5kb2M7aWYoamUoaS5zZWwuZnJvbSxpLnNlbC50bykpZSYmKHQuZGlzcGxheS5wcmV2SW5wdXQ9dC5kaXNwbGF5LmlucHV0LnZhbHVlPSIiLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCkpO2Vsc2V7dC5kaXNwbGF5LnByZXZJbnB1dD0iIixyPUZvJiYoaS5zZWwudG8ubGluZS1pLnNlbC5mcm9tLmxpbmU+MTAwfHwobj10LmdldFNlbGVjdGlvbigpKS5sZW5ndGg+MWUzKTt2YXIgbz1yPyItIjpufHx0LmdldFNlbGVjdGlvbigpO3QuZGlzcGxheS5pbnB1dC52YWx1ZT1vLHQuc3RhdGUuZm9jdXNlZCYmSm4odC5kaXNwbGF5LmlucHV0KSxBaSYmIU5pJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW8pfXQuZGlzcGxheS5pbmFjY3VyYXRlU2VsZWN0aW9uPXJ9ZnVuY3Rpb24gcGUodCl7Im5vY3Vyc29yIj09dC5vcHRpb25zLnJlYWRPbmx5fHxWaSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09dC5kaXNwbGF5LmlucHV0fHx0LmRpc3BsYXkuaW5wdXQuZm9jdXMoKX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gdC5vcHRpb25zLnJlYWRPbmx5fHx0LmRvYy5jYW50RWRpdH1mdW5jdGlvbiBtZSh0KXtmdW5jdGlvbiBlKCl7dC5zdGF0ZS5mb2N1c2VkJiZzZXRUaW1lb3V0KGlpKHBlLHQpLDApfWZ1bmN0aW9uIHIoKXtudWxsPT1zJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz1udWxsLGwuY2FjaGVkQ2hhcldpZHRoPWwuY2FjaGVkVGV4dEhlaWdodD1Pbz1udWxsLF8odCksYWUodCxpaSh1ZSx0KSl9LDEwMCkpfWZ1bmN0aW9uIG4oKXtmb3IodmFyIHQ9bC53cmFwcGVyLnBhcmVudE5vZGU7dCYmdCE9ZG9jdW1lbnQuYm9keTt0PXQucGFyZW50Tm9kZSk7dD9zZXRUaW1lb3V0KG4sNWUzKTpWbih3aW5kb3csInJlc2l6ZSIscil9ZnVuY3Rpb24gaShlKXtYbih0LGUpfHx0Lm9wdGlvbnMub25EcmFnRXZlbnQmJnQub3B0aW9ucy5vbkRyYWdFdmVudCh0LEVuKGUpKXx8UG4oZSl9ZnVuY3Rpb24gbygpe2wuaW5hY2N1cmF0ZVNlbGVjdGlvbiYmKGwucHJldklucHV0PSIiLGwuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxsLmlucHV0LnZhbHVlPXQuZ2V0U2VsZWN0aW9uKCksSm4obC5pbnB1dCkpfXZhciBsPXQuZGlzcGxheTtHbihsLnNjcm9sbGVyLCJtb3VzZWRvd24iLGxlKHQsYmUpKSxBaT9HbihsLnNjcm9sbGVyLCJkYmxjbGljayIsbGUodCxmdW5jdGlvbihlKXtpZighWG4odCxlKSl7dmFyIHI9eWUodCxlKTtpZihyJiYhd2UodCxlKSYmIXZlKHQuZGlzcGxheSxlKSl7em4oZSk7dmFyIG49bXIoZ24odC5kb2Msci5saW5lKS50ZXh0LHIpO2VyKHQuZG9jLG4uZnJvbSxuLnRvKX19fSkpOkduKGwuc2Nyb2xsZXIsImRibGNsaWNrIixmdW5jdGlvbihlKXtYbih0LGUpfHx6bihlKX0pLEduKGwubGluZVNwYWNlLCJzZWxlY3RzdGFydCIsZnVuY3Rpb24odCl7dmUobCx0KXx8em4odCl9KSxaaXx8R24obC5zY3JvbGxlciwiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe0llKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJihTZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsVG9wKSxNZSh0LGwuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwhMCksS24odCwic2Nyb2xsIix0KSl9KSxHbihsLnNjcm9sbGJhclYsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmU2UodCxsLnNjcm9sbGJhclYuc2Nyb2xsVG9wKX0pLEduKGwuc2Nyb2xsYmFySCwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZNZSh0LGwuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KX0pLEduKGwuc2Nyb2xsZXIsIm1vdXNld2hlZWwiLGZ1bmN0aW9uKGUpe1RlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJET01Nb3VzZVNjcm9sbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsYmFySCwibW91c2Vkb3duIixlKSxHbihsLnNjcm9sbGJhclYsIm1vdXNlZG93biIsZSksR24obC53cmFwcGVyLCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC53cmFwcGVyLnNjcm9sbFRvcD1sLndyYXBwZXIuc2Nyb2xsTGVmdD0wfSk7dmFyIHM7R24od2luZG93LCJyZXNpemUiLHIpLHNldFRpbWVvdXQobiw1ZTMpLEduKGwuaW5wdXQsImtleXVwIixsZSh0LGZ1bmN0aW9uKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbktleUV2ZW50JiZ0Lm9wdGlvbnMub25LZXlFdmVudCh0LEVuKGUpKXx8MTY9PWUua2V5Q29kZSYmKHQuZG9jLnNlbC5zaGlmdD0hMSl9KSksR24obC5pbnB1dCwiaW5wdXQiLGZ1bmN0aW9uKCl7QWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uJiYodC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPW51bGwpLGZlKHQpfSksR24obC5pbnB1dCwia2V5ZG93biIsbGUodCxXZSkpLEduKGwuaW5wdXQsImtleXByZXNzIixsZSh0LE9lKSksR24obC5pbnB1dCwiZm9jdXMiLGlpKEVlLHQpKSxHbihsLmlucHV0LCJibHVyIixpaSh6ZSx0KSksdC5vcHRpb25zLmRyYWdEcm9wJiYoR24obC5zY3JvbGxlciwiZHJhZ3N0YXJ0IixmdW5jdGlvbihlKXtrZSh0LGUpfSksR24obC5zY3JvbGxlciwiZHJhZ2VudGVyIixpKSxHbihsLnNjcm9sbGVyLCJkcmFnb3ZlciIsaSksR24obC5zY3JvbGxlciwiZHJvcCIsbGUodCxMZSkpKSxHbihsLnNjcm9sbGVyLCJwYXN0ZSIsZnVuY3Rpb24oZSl7dmUobCxlKXx8KHBlKHQpLGZlKHQpKX0pLEduKGwuaW5wdXQsInBhc3RlIixmdW5jdGlvbigpe2lmKFdpJiYhdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYhKG5ldyBEYXRlLXQuc3RhdGUubGFzdE1pZGRsZURvd248MjAwKSl7dmFyIGU9bC5pbnB1dC5zZWxlY3Rpb25TdGFydCxyPWwuaW5wdXQuc2VsZWN0aW9uRW5kO2wuaW5wdXQudmFsdWUrPSIkIixsLmlucHV0LnNlbGVjdGlvblN0YXJ0PWUsbC5pbnB1dC5zZWxlY3Rpb25FbmQ9cix0LnN0YXRlLmZha2VkTGFzdENoYXI9ITB9dC5zdGF0ZS5wYXN0ZUluY29taW5nPSEwLGZlKHQpfSksR24obC5pbnB1dCwiY3V0IixvKSxHbihsLmlucHV0LCJjb3B5IixvKSxGaSYmR24obC5zaXplciwibW91c2V1cCIsZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT1sLmlucHV0JiZsLmlucHV0LmJsdXIoKSxwZSh0KX0pfWZ1bmN0aW9uIHZlKHQsZSl7Zm9yKHZhciByPVJuKGUpO3IhPXQud3JhcHBlcjtyPXIucGFyZW50Tm9kZSlpZighcnx8ci5pZ25vcmVFdmVudHN8fHIucGFyZW50Tm9kZT09dC5zaXplciYmciE9dC5tb3ZlcilyZXR1cm4hMH1mdW5jdGlvbiB5ZSh0LGUscil7dmFyIG49dC5kaXNwbGF5O2lmKCFyKXt2YXIgaT1SbihlKTtpZihpPT1uLnNjcm9sbGJhckh8fGk9PW4uc2Nyb2xsYmFySC5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhclZ8fGk9PW4uc2Nyb2xsYmFyVi5maXJzdENoaWxkfHxpPT1uLnNjcm9sbGJhckZpbGxlcnx8aT09bi5ndXR0ZXJGaWxsZXIpcmV0dXJuIG51bGx9dmFyIG8sbCxzPWZpKG4ubGluZVNwYWNlKTt0cnl7bz1lLmNsaWVudFgsbD1lLmNsaWVudFl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9cmV0dXJuIHRlKHQsby1zLmxlZnQsbC1zLnRvcCl9ZnVuY3Rpb24gYmUodCl7ZnVuY3Rpb24gZSh0KXtpZighamUodix0KSl7aWYodj10LCJzaW5nbGUiPT1jKXJldHVybiBlcihpLmRvYyxRZShsLGEpLHQpLHZvaWQgMDsKaWYoZz1RZShsLGcpLG09UWUobCxtKSwiZG91YmxlIj09Yyl7dmFyIGU9bXIoZ24obCx0LmxpbmUpLnRleHQsdCk7JGUodCxnKT9lcihpLmRvYyxlLmZyb20sbSk6ZXIoaS5kb2MsZyxlLnRvKX1lbHNlInRyaXBsZSI9PWMmJigkZSh0LGcpP2VyKGkuZG9jLG0sUWUobCxZZSh0LmxpbmUsMCkpKTplcihpLmRvYyxnLFFlKGwsWWUodC5saW5lKzEsMCkpKSl9fWZ1bmN0aW9uIHIodCl7dmFyIG49KytiLHM9eWUoaSx0LCEwKTtpZihzKWlmKGplKHMsaCkpe3ZhciBhPXQuY2xpZW50WTx5LnRvcD8tMjA6dC5jbGllbnRZPnkuYm90dG9tPzIwOjA7YSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmKG8uc2Nyb2xsZXIuc2Nyb2xsVG9wKz1hLHIodCkpfSksNTApfWVsc2V7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKSxoPXMsZShzKTt2YXIgdT1wKG8sbCk7KHMubGluZT49dS50b3x8cy5saW5lPHUuZnJvbSkmJnNldFRpbWVvdXQobGUoaSxmdW5jdGlvbigpe2I9PW4mJnIodCl9KSwxNTApfX1mdW5jdGlvbiBuKHQpe2I9MS8wLHpuKHQpLHBlKGkpLFZuKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLFZuKGRvY3VtZW50LCJtb3VzZXVwIixDKX1pZighWG4odGhpcyx0KSl7dmFyIGk9dGhpcyxvPWkuZGlzcGxheSxsPWkuZG9jLHM9bC5zZWw7aWYocy5zaGlmdD10LnNoaWZ0S2V5LHZlKG8sdCkpcmV0dXJuIFdpfHwoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe28uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwfSwxMDApKSx2b2lkIDA7aWYoIXdlKGksdCkpe3ZhciBhPXllKGksdCk7c3dpdGNoKEJuKHQpKXtjYXNlIDM6cmV0dXJuIFppJiZJZS5jYWxsKGksaSx0KSx2b2lkIDA7Y2FzZSAyOnJldHVybiBXaSYmKGkuc3RhdGUubGFzdE1pZGRsZURvd249K25ldyBEYXRlKSxhJiZlcihpLmRvYyxhKSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx6bih0KSx2b2lkIDB9aWYoIWEpcmV0dXJuIFJuKHQpPT1vLnNjcm9sbGVyJiZ6bih0KSx2b2lkIDA7aS5zdGF0ZS5mb2N1c2VkfHxFZShpKTt2YXIgdT0rbmV3IERhdGUsYz0ic2luZ2xlIjtpZihqaSYmamkudGltZT51LTQwMCYmamUoamkucG9zLGEpKWM9InRyaXBsZSIsem4odCksc2V0VGltZW91dChpaShwZSxpKSwyMCksdnIoaSxhLmxpbmUpO2Vsc2UgaWYoWWkmJllpLnRpbWU+dS00MDAmJmplKFlpLnBvcyxhKSl7Yz0iZG91YmxlIixqaT17dGltZTp1LHBvczphfSx6bih0KTt2YXIgZj1tcihnbihsLGEubGluZSkudGV4dCxhKTtlcihpLmRvYyxmLmZyb20sZi50byl9ZWxzZSBZaT17dGltZTp1LHBvczphfTt2YXIgaD1hO2lmKGkub3B0aW9ucy5kcmFnRHJvcCYmV28mJiFnZShpKSYmIWplKHMuZnJvbSxzLnRvKSYmISRlKGEscy5mcm9tKSYmISRlKHMudG8sYSkmJiJzaW5nbGUiPT1jKXt2YXIgZD1sZShpLGZ1bmN0aW9uKGUpe1dpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITEpLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PSExLFZuKGRvY3VtZW50LCJtb3VzZXVwIixkKSxWbihvLnNjcm9sbGVyLCJkcm9wIixkKSxNYXRoLmFicyh0LmNsaWVudFgtZS5jbGllbnRYKStNYXRoLmFicyh0LmNsaWVudFktZS5jbGllbnRZKTwxMCYmKHpuKGUpLGVyKGkuZG9jLGEpLHBlKGkpKX0pO3JldHVybiBXaSYmKG8uc2Nyb2xsZXIuZHJhZ2dhYmxlPSEwKSxpLnN0YXRlLmRyYWdnaW5nVGV4dD1kLG8uc2Nyb2xsZXIuZHJhZ0Ryb3AmJm8uc2Nyb2xsZXIuZHJhZ0Ryb3AoKSxHbihkb2N1bWVudCwibW91c2V1cCIsZCksR24oby5zY3JvbGxlciwiZHJvcCIsZCksdm9pZCAwfXpuKHQpLCJzaW5nbGUiPT1jJiZlcihpLmRvYyxRZShsLGEpKTt2YXIgZz1zLmZyb20sbT1zLnRvLHY9YSx5PWZpKG8ud3JhcHBlciksYj0wLHg9bGUoaSxmdW5jdGlvbih0KXtBaXx8Qm4odCk/cih0KTpuKHQpfSksQz1sZShpLG4pO0duKGRvY3VtZW50LCJtb3VzZW1vdmUiLHgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixDKX19fWZ1bmN0aW9uIHhlKHQsZSxyLG4saSl7dHJ5e3ZhciBvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4hMX1pZihvPj1NYXRoLmZsb29yKGZpKHQuZGlzcGxheS5ndXR0ZXJzKS5yaWdodCkpcmV0dXJuITE7biYmem4oZSk7dmFyIHM9dC5kaXNwbGF5LGE9Zmkocy5saW5lRGl2KTtpZihsPmEuYm90dG9tfHwhWW4odCxyKSlyZXR1cm4gRm4oZSk7bC09YS50b3Atcy52aWV3T2Zmc2V0O2Zvcih2YXIgdT0wO3U8dC5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOysrdSl7dmFyIGM9cy5ndXR0ZXJzLmNoaWxkTm9kZXNbdV07aWYoYyYmZmkoYykucmlnaHQ+PW8pe3ZhciBmPXhuKHQuZG9jLGwpLGg9dC5vcHRpb25zLmd1dHRlcnNbdV07cmV0dXJuIGkodCxyLHQsZixoLGUpLEZuKGUpfX19ZnVuY3Rpb24gQ2UodCxlKXtyZXR1cm4gWW4odCwiZ3V0dGVyQ29udGV4dE1lbnUiKT94ZSh0LGUsImd1dHRlckNvbnRleHRNZW51IiwhMSxLbik6ITF9ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4geGUodCxlLCJndXR0ZXJDbGljayIsITAsVW4pfWZ1bmN0aW9uIExlKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHx2ZShlLmRpc3BsYXksdCl8fGUub3B0aW9ucy5vbkRyYWdFdmVudCYmZS5vcHRpb25zLm9uRHJhZ0V2ZW50KGUsRW4odCkpKSl7em4odCksQWkmJih0bz0rbmV3IERhdGUpO3ZhciByPXllKGUsdCwhMCksbj10LmRhdGFUcmFuc2Zlci5maWxlcztpZihyJiYhZ2UoZSkpaWYobiYmbi5sZW5ndGgmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZSlmb3IodmFyIGk9bi5sZW5ndGgsbz1BcnJheShpKSxsPTAscz1mdW5jdGlvbih0LG4pe3ZhciBzPW5ldyBGaWxlUmVhZGVyO3Mub25sb2FkPWZ1bmN0aW9uKCl7b1tuXT1zLnJlc3VsdCwrK2w9PWkmJihyPVFlKGUuZG9jLHIpLEJlKGUuZG9jLHtmcm9tOnIsdG86cix0ZXh0OnpvKG8uam9pbigiXG4iKSksb3JpZ2luOiJwYXN0ZSJ9LCJhcm91bmQiKSl9LHMucmVhZEFzVGV4dCh0KX0sYT0wO2k+YTsrK2EpcyhuW2FdLGEpO2Vsc2V7aWYoZS5zdGF0ZS5kcmFnZ2luZ1RleHQmJiEkZShyLGUuZG9jLnNlbC5mcm9tKSYmISRlKGUuZG9jLnNlbC50byxyKSlyZXR1cm4gZS5zdGF0ZS5kcmFnZ2luZ1RleHQodCksc2V0VGltZW91dChpaShwZSxlKSwyMCksdm9pZCAwO3RyeXt2YXIgbz10LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7aWYobyl7dmFyIHU9ZS5kb2Muc2VsLmZyb20sYz1lLmRvYy5zZWwudG87bnIoZS5kb2MscixyKSxlLnN0YXRlLmRyYWdnaW5nVGV4dCYmX2UoZS5kb2MsIiIsdSxjLCJwYXN0ZSIpLGUucmVwbGFjZVNlbGVjdGlvbihvLG51bGwsInBhc3RlIikscGUoZSl9fWNhdGNoKHQpe319fX1mdW5jdGlvbiBrZSh0LGUpe2lmKEFpJiYoIXQuc3RhdGUuZHJhZ2dpbmdUZXh0fHwrbmV3IERhdGUtdG88MTAwKSlyZXR1cm4gUG4oZSksdm9pZCAwO2lmKCFYbih0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt2YXIgcj10LmdldFNlbGVjdGlvbigpO2lmKGUuZGF0YVRyYW5zZmVyLnNldERhdGEoIlRleHQiLHIpLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSYmIUlpKXt2YXIgbj1zaSgiaW1nIixudWxsLG51bGwsInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwOyIpO24uc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PSIsemkmJihuLndpZHRoPW4uaGVpZ2h0PTEsdC5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQobiksbi5fdG9wPW4ub2Zmc2V0VG9wKSxlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UobiwwLDApLHppJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9fX1mdW5jdGlvbiBTZSh0LGUpe01hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1lKTwyfHwodC5kb2Muc2Nyb2xsVG9wPWUsVGl8fGIodCxbXSxlKSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wIT1lJiYodC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ZSksVGkmJmIodCxbXSksVyh0LDEwMCkpfWZ1bmN0aW9uIE1lKHQsZSxyKXsocj9lPT10LmRvYy5zY3JvbGxMZWZ0Ok1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtZSk8Mil8fChlPU1hdGgubWluKGUsdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoLXQuZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCksdC5kb2Muc2Nyb2xsTGVmdD1lLGcodCksdC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1lKSx0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0IT1lJiYodC5kaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdD1lKSl9ZnVuY3Rpb24gVGUodCxlKXt2YXIgcj1lLndoZWVsRGVsdGFYLG49ZS53aGVlbERlbHRhWTtudWxsPT1yJiZlLmRldGFpbCYmZS5heGlzPT1lLkhPUklaT05UQUxfQVhJUyYmKHI9ZS5kZXRhaWwpLG51bGw9PW4mJmUuZGV0YWlsJiZlLmF4aXM9PWUuVkVSVElDQUxfQVhJUz9uPWUuZGV0YWlsOm51bGw9PW4mJihuPWUud2hlZWxEZWx0YSk7dmFyIGk9dC5kaXNwbGF5LG89aS5zY3JvbGxlcjtpZihyJiZvLnNjcm9sbFdpZHRoPm8uY2xpZW50V2lkdGh8fG4mJm8uc2Nyb2xsSGVpZ2h0Pm8uY2xpZW50SGVpZ2h0KXtpZihuJiZLaSYmV2kpZm9yKHZhciBsPWUudGFyZ2V0O2whPW87bD1sLnBhcmVudE5vZGUpaWYobC5saW5lT2JqKXt0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PWw7YnJlYWt9aWYociYmIVRpJiYhemkmJm51bGwhPXJvKXJldHVybiBuJiZTZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxUb3ArbipybyxvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodCkpKSxNZSh0LE1hdGgubWF4KDAsTWF0aC5taW4oby5zY3JvbGxMZWZ0K3Iqcm8sby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoKSkpLHpuKGUpLGkud2hlZWxTdGFydFg9bnVsbCx2b2lkIDA7aWYobiYmbnVsbCE9cm8pe3ZhciBzPW4qcm8sYT10LmRvYy5zY3JvbGxUb3AsdT1hK2kud3JhcHBlci5jbGllbnRIZWlnaHQ7MD5zP2E9TWF0aC5tYXgoMCxhK3MtNTApOnU9TWF0aC5taW4odC5kb2MuaGVpZ2h0LHUrcys1MCksYih0LFtdLHt0b3A6YSxib3R0b206dX0pfTIwPmVvJiYobnVsbD09aS53aGVlbFN0YXJ0WD8oaS53aGVlbFN0YXJ0WD1vLnNjcm9sbExlZnQsaS53aGVlbFN0YXJ0WT1vLnNjcm9sbFRvcCxpLndoZWVsRFg9cixpLndoZWVsRFk9bixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYobnVsbCE9aS53aGVlbFN0YXJ0WCl7dmFyIHQ9by5zY3JvbGxMZWZ0LWkud2hlZWxTdGFydFgsZT1vLnNjcm9sbFRvcC1pLndoZWVsU3RhcnRZLHI9ZSYmaS53aGVlbERZJiZlL2kud2hlZWxEWXx8dCYmaS53aGVlbERYJiZ0L2kud2hlZWxEWDtpLndoZWVsU3RhcnRYPWkud2hlZWxTdGFydFk9bnVsbCxyJiYocm89KHJvKmVvK3IpLyhlbysxKSwrK2VvKX19LDIwMCkpOihpLndoZWVsRFgrPXIsaS53aGVlbERZKz1uKSl9fWZ1bmN0aW9uIEFlKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPW1vW2VdLCFlKSlyZXR1cm4hMTt0LmRpc3BsYXkucG9sbGluZ0Zhc3QmJmhlKHQpJiYodC5kaXNwbGF5LnBvbGxpbmdGYXN0PSExKTt2YXIgbj10LmRvYyxpPW4uc2VsLnNoaWZ0LG89ITE7dHJ5e2dlKHQpJiYodC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSEwKSxyJiYobi5zZWwuc2hpZnQ9ITEpLG89ZSh0KSE9QW99ZmluYWxseXtuLnNlbC5zaGlmdD1pLHQuc3RhdGUuc3VwcHJlc3NFZGl0cz0hMX1yZXR1cm4gb31mdW5jdGlvbiBIZSh0KXt2YXIgZT10LnN0YXRlLmtleU1hcHMuc2xpY2UoMCk7cmV0dXJuIHQub3B0aW9ucy5leHRyYUtleXMmJmUucHVzaCh0Lm9wdGlvbnMuZXh0cmFLZXlzKSxlLnB1c2godC5vcHRpb25zLmtleU1hcCksZX1mdW5jdGlvbiBOZSh0LGUpe3ZhciByPUNyKHQub3B0aW9ucy5rZXlNYXApLG49ci5hdXRvO2NsZWFyVGltZW91dChubyksbiYmIUxyKGUpJiYobm89c2V0VGltZW91dChmdW5jdGlvbigpe0NyKHQub3B0aW9ucy5rZXlNYXApPT1yJiYodC5vcHRpb25zLmtleU1hcD1uLmNhbGw/bi5jYWxsKG51bGwsdCk6bixsKHQpKX0sNTApKTt2YXIgaT1rcihlLCEwKSxvPSExO2lmKCFpKXJldHVybiExO3ZhciBzPUhlKHQpO3JldHVybiBvPWUuc2hpZnRLZXk/d3IoIlNoaWZ0LSIraSxzLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSl8fHdyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiBlPy9eZ29bQS1aXS8udGVzdChlKTplLm1vdGlvbik/QWUodCxlKTp2b2lkIDB9KTp3cihpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSl9KSxvJiYoem4oZSksRCh0KSxOaSYmKGUub2xkS2V5Q29kZT1lLmtleUNvZGUsZS5rZXlDb2RlPTApLFVuKHQsImtleUhhbmRsZWQiLHQsaSxlKSksb31mdW5jdGlvbiBEZSh0LGUscil7dmFyIG49d3IoIiciK3IrIiciLEhlKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBBZSh0LGUsITApfSk7cmV0dXJuIG4mJih6bihlKSxEKHQpLFVuKHQsImtleUhhbmRsZWQiLHQsIiciK3IrIiciLGUpKSxufWZ1bmN0aW9uIFdlKHQpe3ZhciBlPXRoaXM7aWYoZS5zdGF0ZS5mb2N1c2VkfHxFZShlKSwhKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe0FpJiYyNz09dC5rZXlDb2RlJiYodC5yZXR1cm5WYWx1ZT0hMSk7dmFyIHI9dC5rZXlDb2RlO2UuZG9jLnNlbC5zaGlmdD0xNj09cnx8dC5zaGlmdEtleTt2YXIgbj1OZShlLHQpO3ppJiYob289bj9yOm51bGwsIW4mJjg4PT1yJiYhRm8mJihLaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmZS5yZXBsYWNlU2VsZWN0aW9uKCIiKSl9fWZ1bmN0aW9uIE9lKHQpe3ZhciBlPXRoaXM7aWYoIShYbihlLHQpfHxlLm9wdGlvbnMub25LZXlFdmVudCYmZS5vcHRpb25zLm9uS2V5RXZlbnQoZSxFbih0KSkpKXt2YXIgcj10LmtleUNvZGUsbj10LmNoYXJDb2RlO2lmKHppJiZyPT1vbylyZXR1cm4gb289bnVsbCx6bih0KSx2b2lkIDA7aWYoISh6aSYmKCF0LndoaWNofHx0LndoaWNoPDEwKXx8RmkpfHwhTmUoZSx0KSl7dmFyIGk9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1uP3I6bik7dGhpcy5vcHRpb25zLmVsZWN0cmljQ2hhcnMmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycyYmdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50JiYhZ2UodGhpcykmJnRoaXMuZG9jLm1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGkpPi0xJiZzZXRUaW1lb3V0KGxlKGUsZnVuY3Rpb24oKXtocihlLGUuZG9jLnNlbC50by5saW5lLCJzbWFydCIpfSksNzUpLERlKGUsdCxpKXx8KEFpJiYhTmkmJihlLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUoZSkpfX19ZnVuY3Rpb24gRWUodCl7Im5vY3Vyc29yIiE9dC5vcHRpb25zLnJlYWRPbmx5JiYodC5zdGF0ZS5mb2N1c2VkfHwoS24odCwiZm9jdXMiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMCwtMT09dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pJiYodC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3ItZm9jdXNlZCIpLHQuY3VyT3B8fChkZSh0LCEwKSxXaSYmc2V0VGltZW91dChpaShkZSx0LCEwKSwwKSkpLGNlKHQpLEQodCkpfWZ1bmN0aW9uIHplKHQpe3Quc3RhdGUuZm9jdXNlZCYmKEtuKHQsImJsdXIiLHQpLHQuc3RhdGUuZm9jdXNlZD0hMSx0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCIiKSksY2xlYXJJbnRlcnZhbCh0LmRpc3BsYXkuYmxpbmtlciksc2V0VGltZW91dChmdW5jdGlvbigpe3Quc3RhdGUuZm9jdXNlZHx8KHQuZG9jLnNlbC5zaGlmdD0hMSl9LDE1MCl9ZnVuY3Rpb24gSWUodCxlKXtmdW5jdGlvbiByKCl7aWYobnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7dmFyIHQ9aS5pbnB1dC52YWx1ZT0i4oCLIisoamUoby5mcm9tLG8udG8pPyIiOmkuaW5wdXQudmFsdWUpO2kucHJldklucHV0PSLigIsiLGkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9MSxpLmlucHV0LnNlbGVjdGlvbkVuZD10Lmxlbmd0aH19ZnVuY3Rpb24gbigpe2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9dSxOaSYmKGkuc2Nyb2xsYmFyVi5zY3JvbGxUb3A9aS5zY3JvbGxlci5zY3JvbGxUb3A9cyksY2UodCksbnVsbCE9aS5pbnB1dC5zZWxlY3Rpb25TdGFydCl7KCFBaXx8TmkpJiZyKCksY2xlYXJUaW1lb3V0KGlvKTt2YXIgZT0wLG49ZnVuY3Rpb24oKXsiICI9PWkucHJldklucHV0JiYwPT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0P2xlKHQsbW8uc2VsZWN0QWxsKSh0KTplKys8MTA/aW89c2V0VGltZW91dChuLDUwMCk6ZGUodCl9O2lvPXNldFRpbWVvdXQobiwyMDApfX1pZighWG4odCxlLCJjb250ZXh0bWVudSIpKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYy5zZWw7aWYoIXZlKGksZSkmJiFDZSh0LGUpKXt2YXIgbD15ZSh0LGUpLHM9aS5zY3JvbGxlci5zY3JvbGxUb3A7aWYobCYmIXppKXt2YXIgYT10Lm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51O2EmJihqZShvLmZyb20sby50byl8fCRlKGwsby5mcm9tKXx8ISRlKGwsby50bykpJiZsZSh0LG5yKSh0LmRvYyxsLGwpO3ZhciB1PWkuaW5wdXQuc3R5bGUuY3NzVGV4dDtpZihpLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5pbnB1dC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIisoZS5jbGllbnRZLTUpKyJweDsgbGVmdDogIisoZS5jbGllbnRYLTUpKyJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogd2hpdGU7IG91dGxpbmU6IG5vbmU7IisiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IC1tcy1vcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTsiLHBlKHQpLGRlKHQsITApLGplKG8uZnJvbSxvLnRvKSYmKGkuaW5wdXQudmFsdWU9aS5wcmV2SW5wdXQ9IiAiKSxBaSYmIU5pJiZyKCksWmkpe1BuKGUpO3ZhciBjPWZ1bmN0aW9uKCl7Vm4od2luZG93LCJtb3VzZXVwIixjKSxzZXRUaW1lb3V0KG4sMjApfTtHbih3aW5kb3csIm1vdXNldXAiLGMpfWVsc2Ugc2V0VGltZW91dChuLDUwKX19fX1mdW5jdGlvbiBGZSh0LGUscil7aWYoISRlKGUuZnJvbSxyKSlyZXR1cm4gUWUodCxyKTt2YXIgbj1lLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSk7aWYoci5saW5lPmUudG8ubGluZStuKXt2YXIgaT1yLmxpbmUtbixvPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGk+bz9ZZShvLGduKHQsbykudGV4dC5sZW5ndGgpOkplKHIsZ24odCxpKS50ZXh0Lmxlbmd0aCl9aWYoci5saW5lPT1lLnRvLmxpbmUrbilyZXR1cm4gSmUocixRbihlLnRleHQpLmxlbmd0aCsoMT09ZS50ZXh0Lmxlbmd0aD9lLmZyb20uY2g6MCkrZ24odCxlLnRvLmxpbmUpLnRleHQubGVuZ3RoLWUudG8uY2gpO3ZhciBsPXIubGluZS1lLmZyb20ubGluZTtyZXR1cm4gSmUocixlLnRleHRbbF0ubGVuZ3RoKyhsPzA6ZS5mcm9tLmNoKSl9ZnVuY3Rpb24gUGUodCxlLHIpe2lmKHImJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm57YW5jaG9yOkZlKHQsZSxyLmFuY2hvciksaGVhZDpGZSh0LGUsci5oZWFkKX07aWYoInN0YXJ0Ij09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOmUuZnJvbX07dmFyIG49bG8oZSk7aWYoImFyb3VuZCI9PXIpcmV0dXJue2FuY2hvcjplLmZyb20saGVhZDpufTtpZigiZW5kIj09cilyZXR1cm57YW5jaG9yOm4saGVhZDpufTt2YXIgaT1mdW5jdGlvbih0KXtpZigkZSh0LGUuZnJvbSkpcmV0dXJuIHQ7aWYoISRlKGUudG8sdCkpcmV0dXJuIG47dmFyIHI9dC5saW5lK2UudGV4dC5sZW5ndGgtKGUudG8ubGluZS1lLmZyb20ubGluZSktMSxpPXQuY2g7cmV0dXJuIHQubGluZT09ZS50by5saW5lJiYoaSs9bi5jaC1lLnRvLmNoKSxZZShyLGkpfTtyZXR1cm57YW5jaG9yOmkodC5zZWwuYW5jaG9yKSxoZWFkOmkodC5zZWwuaGVhZCl9fWZ1bmN0aW9uIFJlKHQsZSxyKXt2YXIgbj17Y2FuY2VsZWQ6ITEsZnJvbTplLmZyb20sdG86ZS50byx0ZXh0OmUudGV4dCxvcmlnaW46ZS5vcmlnaW4sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxlZD0hMH19O3JldHVybiByJiYobi51cGRhdGU9ZnVuY3Rpb24oZSxyLG4saSl7ZSYmKHRoaXMuZnJvbT1RZSh0LGUpKSxyJiYodGhpcy50bz1RZSh0LHIpKSxuJiYodGhpcy50ZXh0PW4pLHZvaWQgMCE9PWkmJih0aGlzLm9yaWdpbj1pKX0pLEtuKHQsImJlZm9yZUNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVDaGFuZ2UiLHQuY20sbiksbi5jYW5jZWxlZD9udWxsOntmcm9tOm4uZnJvbSx0bzpuLnRvLHRleHQ6bi50ZXh0LG9yaWdpbjpuLm9yaWdpbn19ZnVuY3Rpb24gQmUodCxlLHIsbil7aWYodC5jbSl7aWYoIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sQmUpKHQsZSxyLG4pO2lmKHQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cylyZXR1cm59aWYoIShZbih0LCJiZWZvcmVDaGFuZ2UiKXx8dC5jbSYmWW4odC5jbSwiYmVmb3JlQ2hhbmdlIikpfHwoZT1SZSh0LGUsITApKSl7dmFyIGk9cWkmJiFuJiZGcih0LGUuZnJvbSxlLnRvKTtpZihpKXtmb3IodmFyIG89aS5sZW5ndGgtMTtvPj0xOy0tbylHZSh0LHtmcm9tOmlbb10uZnJvbSx0bzppW29dLnRvLHRleHQ6WyIiXX0pO2kubGVuZ3RoJiZHZSh0LHtmcm9tOmlbMF0uZnJvbSx0bzppWzBdLnRvLHRleHQ6ZS50ZXh0fSxyKX1lbHNlIEdlKHQsZSxyKX19ZnVuY3Rpb24gR2UodCxlLHIpe2lmKDEhPWUudGV4dC5sZW5ndGh8fCIiIT1lLnRleHRbMF18fCFqZShlLmZyb20sZS50bykpe3ZhciBuPVBlKHQsZSxyKTtNbih0LGUsbix0LmNtP3QuY20uY3VyT3AuaWQ6MC8wKSxVZSh0LGUsbix6cih0LGUpKTt2YXIgaT1bXTtkbih0LGZ1bmN0aW9uKHQscil7cnx8LTEhPXRpKGksdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxlKSxpLnB1c2godC5oaXN0b3J5KSksVWUodCxlLG51bGwsenIodCxlKSl9KX19ZnVuY3Rpb24gVmUodCxlKXtpZighdC5jbXx8IXQuY20uc3RhdGUuc3VwcHJlc3NFZGl0cyl7dmFyIHI9dC5oaXN0b3J5LG49KCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLnBvcCgpO2lmKG4pe3ZhciBpPXtjaGFuZ2VzOltdLGFuY2hvckJlZm9yZTpuLmFuY2hvckFmdGVyLGhlYWRCZWZvcmU6bi5oZWFkQWZ0ZXIsYW5jaG9yQWZ0ZXI6bi5hbmNob3JCZWZvcmUsaGVhZEFmdGVyOm4uaGVhZEJlZm9yZSxnZW5lcmF0aW9uOnIuZ2VuZXJhdGlvbn07KCJ1bmRvIj09ZT9yLnVuZG9uZTpyLmRvbmUpLnB1c2goaSksci5nZW5lcmF0aW9uPW4uZ2VuZXJhdGlvbnx8KytyLm1heEdlbmVyYXRpb247Zm9yKHZhciBvPVluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSxsPW4uY2hhbmdlcy5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHM9bi5jaGFuZ2VzW2xdO2lmKHMub3JpZ2luPWUsbyYmIVJlKHQscywhMSkpcmV0dXJuKCJ1bmRvIj09ZT9yLmRvbmU6ci51bmRvbmUpLmxlbmd0aD0wLHZvaWQgMDtpLmNoYW5nZXMucHVzaChTbih0LHMpKTt2YXIgYT1sP1BlKHQscyxudWxsKTp7YW5jaG9yOm4uYW5jaG9yQmVmb3JlLGhlYWQ6bi5oZWFkQmVmb3JlfTtVZSh0LHMsYSxJcih0LHMpKTt2YXIgdT1bXTtkbih0LGZ1bmN0aW9uKHQsZSl7ZXx8LTEhPXRpKHUsdC5oaXN0b3J5KXx8KFduKHQuaGlzdG9yeSxzKSx1LnB1c2godC5oaXN0b3J5KSksVWUodCxzLG51bGwsSXIodCxzKSl9KX19fX1mdW5jdGlvbiBLZSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIFllKHQubGluZStlLHQuY2gpfXQuZmlyc3QrPWUsdC5jbSYmdWUodC5jbSx0LmZpcnN0LHQuZmlyc3QsZSksdC5zZWwuaGVhZD1yKHQuc2VsLmhlYWQpLHQuc2VsLmFuY2hvcj1yKHQuc2VsLmFuY2hvciksdC5zZWwuZnJvbT1yKHQuc2VsLmZyb20pLHQuc2VsLnRvPXIodC5zZWwudG8pfWZ1bmN0aW9uIFVlKHQsZSxyLG4pe2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFVlKSh0LGUscixuKTtpZihlLnRvLmxpbmU8dC5maXJzdClyZXR1cm4gS2UodCxlLnRleHQubGVuZ3RoLTEtKGUudG8ubGluZS1lLmZyb20ubGluZSkpLHZvaWQgMDtpZighKGUuZnJvbS5saW5lPnQubGFzdExpbmUoKSkpe2lmKGUuZnJvbS5saW5lPHQuZmlyc3Qpe3ZhciBpPWUudGV4dC5sZW5ndGgtMS0odC5maXJzdC1lLmZyb20ubGluZSk7S2UodCxpKSxlPXtmcm9tOlllKHQuZmlyc3QsMCksdG86WWUoZS50by5saW5lK2ksZS50by5jaCksdGV4dDpbUW4oZS50ZXh0KV0sb3JpZ2luOmUub3JpZ2lufX12YXIgbz10Lmxhc3RMaW5lKCk7ZS50by5saW5lPm8mJihlPXtmcm9tOmUuZnJvbSx0bzpZZShvLGduKHQsbykudGV4dC5sZW5ndGgpLHRleHQ6W2UudGV4dFswXV0sb3JpZ2luOmUub3JpZ2lufSksZS5yZW1vdmVkPW1uKHQsZS5mcm9tLGUudG8pLHJ8fChyPVBlKHQsZSxudWxsKSksdC5jbT9YZSh0LmNtLGUsbixyKTpjbih0LGUsbixyKX19ZnVuY3Rpb24gWGUodCxlLHIsbil7dmFyIG89dC5kb2MsbD10LmRpc3BsYXkscz1lLmZyb20sYT1lLnRvLHU9ITEsZj1zLmxpbmU7dC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KGY9Ym4oR3IobyxnbihvLHMubGluZSkpKSxvLml0ZXIoZixhLmxpbmUrMSxmdW5jdGlvbih0KXtyZXR1cm4gdD09bC5tYXhMaW5lPyh1PSEwLCEwKTp2b2lkIDB9KSksJGUoby5zZWwuaGVhZCxlLmZyb20pfHwkZShlLnRvLG8uc2VsLmhlYWQpfHwodC5jdXJPcC5jdXJzb3JBY3Rpdml0eT0hMCksY24obyxlLHIsbixpKHQpKSx0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoby5pdGVyKGYscy5saW5lK2UudGV4dC5sZW5ndGgsZnVuY3Rpb24odCl7dmFyIGU9YyhvLHQpO2U+bC5tYXhMaW5lTGVuZ3RoJiYobC5tYXhMaW5lPXQsbC5tYXhMaW5lTGVuZ3RoPWUsbC5tYXhMaW5lQ2hhbmdlZD0hMCx1PSExKX0pLHUmJih0LmN1ck9wLnVwZGF0ZU1heExpbmU9ITApKSxvLmZyb250aWVyPU1hdGgubWluKG8uZnJvbnRpZXIscy5saW5lKSxXKHQsNDAwKTt2YXIgaD1lLnRleHQubGVuZ3RoLShhLmxpbmUtcy5saW5lKS0xO2lmKHVlKHQscy5saW5lLGEubGluZSsxLGgpLFluKHQsImNoYW5nZSIpKXt2YXIgZD17ZnJvbTpzLHRvOmEsdGV4dDplLnRleHQscmVtb3ZlZDplLnJlbW92ZWQsb3JpZ2luOmUub3JpZ2lufTtpZih0LmN1ck9wLnRleHRDaGFuZ2VkKXtmb3IodmFyIHA9dC5jdXJPcC50ZXh0Q2hhbmdlZDtwLm5leHQ7cD1wLm5leHQpO3AubmV4dD1kfWVsc2UgdC5jdXJPcC50ZXh0Q2hhbmdlZD1kfX1mdW5jdGlvbiBfZSh0LGUscixuLGkpe2lmKG58fChuPXIpLCRlKG4scikpe3ZhciBvPW47bj1yLHI9b30ic3RyaW5nIj09dHlwZW9mIGUmJihlPXpvKGUpKSxCZSh0LHtmcm9tOnIsdG86bix0ZXh0OmUsb3JpZ2luOml9LG51bGwpfWZ1bmN0aW9uIFllKHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBZZT8odGhpcy5saW5lPXQsdGhpcy5jaD1lLHZvaWQgMCk6bmV3IFllKHQsZSl9ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gdC5saW5lPT1lLmxpbmUmJnQuY2g9PWUuY2h9ZnVuY3Rpb24gJGUodCxlKXtyZXR1cm4gdC5saW5lPGUubGluZXx8dC5saW5lPT1lLmxpbmUmJnQuY2g8ZS5jaH1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gWWUodC5saW5lLHQuY2gpfWZ1bmN0aW9uIHFlKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQuZmlyc3QsTWF0aC5taW4oZSx0LmZpcnN0K3Quc2l6ZS0xKSl9ZnVuY3Rpb24gUWUodCxlKXtpZihlLmxpbmU8dC5maXJzdClyZXR1cm4gWWUodC5maXJzdCwwKTt2YXIgcj10LmZpcnN0K3Quc2l6ZS0xO3JldHVybiBlLmxpbmU+cj9ZZShyLGduKHQscikudGV4dC5sZW5ndGgpOkplKGUsZ24odCxlLmxpbmUpLnRleHQubGVuZ3RoKX1mdW5jdGlvbiBKZSh0LGUpe3ZhciByPXQuY2g7cmV0dXJuIG51bGw9PXJ8fHI+ZT9ZZSh0LmxpbmUsZSk6MD5yP1llKHQubGluZSwwKTp0fWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJuIGU+PXQuZmlyc3QmJmU8dC5maXJzdCt0LnNpemV9ZnVuY3Rpb24gZXIodCxlLHIsbil7aWYodC5zZWwuc2hpZnR8fHQuc2VsLmV4dGVuZCl7dmFyIGk9dC5zZWwuYW5jaG9yO2lmKHIpe3ZhciBvPSRlKGUsaSk7byE9JGUocixpKT8oaT1lLGU9cik6byE9JGUoZSxyKSYmKGU9cil9bnIodCxpLGUsbil9ZWxzZSBucih0LGUscnx8ZSxuKTt0LmNtJiYodC5jbS5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwKX1mdW5jdGlvbiBycih0LGUscil7dmFyIG49e2FuY2hvcjplLGhlYWQ6cn07cmV0dXJuIEtuKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdCxuKSx0LmNtJiZLbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiLHQuY20sbiksbi5hbmNob3I9UWUodCxuLmFuY2hvciksbi5oZWFkPVFlKHQsbi5oZWFkKSxufWZ1bmN0aW9uIG5yKHQsZSxyLG4saSl7aWYoIWkmJlluKHQsImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2UiKSl7dmFyIG89cnIodCxlLHIpO3I9by5oZWFkLGU9by5hbmNob3J9dmFyIGw9dC5zZWw7aWYobC5nb2FsQ29sdW1uPW51bGwsbnVsbD09biYmKG49JGUocixsLmhlYWQpPy0xOjEpLChpfHwhamUoZSxsLmFuY2hvcikpJiYoZT1vcih0LGUsbiwicHVzaCIhPWkpKSwoaXx8IWplKHIsbC5oZWFkKSkmJihyPW9yKHQscixuLCJwdXNoIiE9aSkpLCFqZShsLmFuY2hvcixlKXx8IWplKGwuaGVhZCxyKSl7bC5hbmNob3I9ZSxsLmhlYWQ9cjt2YXIgcz0kZShyLGUpO2wuZnJvbT1zP3I6ZSxsLnRvPXM/ZTpyLHQuY20mJih0LmNtLmN1ck9wLnVwZGF0ZUlucHV0PXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD10LmNtLmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxVbih0LCJjdXJzb3JBY3Rpdml0eSIsdCl9fWZ1bmN0aW9uIGlyKHQpe25yKHQuZG9jLHQuZG9jLnNlbC5mcm9tLHQuZG9jLnNlbC50byxudWxsLCJwdXNoIil9ZnVuY3Rpb24gb3IodCxlLHIsbil7dmFyIGk9ITEsbz1lLGw9cnx8MTt0LmNhbnRFZGl0PSExO3Q6Zm9yKDs7KXt2YXIgcz1nbih0LG8ubGluZSk7aWYocy5tYXJrZWRTcGFucylmb3IodmFyIGE9MDthPHMubWFya2VkU3BhbnMubGVuZ3RoOysrYSl7dmFyIHU9cy5tYXJrZWRTcGFuc1thXSxjPXUubWFya2VyO2lmKChudWxsPT11LmZyb218fChjLmluY2x1c2l2ZUxlZnQ/dS5mcm9tPD1vLmNoOnUuZnJvbTxvLmNoKSkmJihudWxsPT11LnRvfHwoYy5pbmNsdXNpdmVSaWdodD91LnRvPj1vLmNoOnUudG8+by5jaCkpKXtpZihuJiYoS24oYywiYmVmb3JlQ3Vyc29yRW50ZXIiKSxjLmV4cGxpY2l0bHlDbGVhcmVkKSl7aWYocy5tYXJrZWRTcGFucyl7LS1hO2NvbnRpbnVlfWJyZWFrfWlmKCFjLmF0b21pYyljb250aW51ZTt2YXIgZj1jLmZpbmQoKVswPmw/ImZyb20iOiJ0byJdO2lmKGplKGYsbykmJihmLmNoKz1sLGYuY2g8MD9mPWYubGluZT50LmZpcnN0P1FlKHQsWWUoZi5saW5lLTEpKTpudWxsOmYuY2g+cy50ZXh0Lmxlbmd0aCYmKGY9Zi5saW5lPHQuZmlyc3QrdC5zaXplLTE/WWUoZi5saW5lKzEsMCk6bnVsbCksIWYpKXtpZihpKXJldHVybiBuPyh0LmNhbnRFZGl0PSEwLFllKHQuZmlyc3QsMCkpOm9yKHQsZSxyLCEwKTtpPSEwLGY9ZSxsPS1sfW89Zjtjb250aW51ZSB0fX1yZXR1cm4gb319ZnVuY3Rpb24gbHIodCl7dmFyIGU9c3IodCx0LmRvYy5zZWwuaGVhZCxudWxsLHQub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW4pO2lmKHQuc3RhdGUuZm9jdXNlZCl7dmFyIHI9dC5kaXNwbGF5LG49Zmkoci5zaXplciksaT1udWxsO2lmKGUudG9wK24udG9wPDA/aT0hMDplLmJvdHRvbStuLnRvcD4od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSYmKGk9ITEpLG51bGwhPWkmJiFCaSl7dmFyIG89Im5vbmUiPT1yLmN1cnNvci5zdHlsZS5kaXNwbGF5O28mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSIiLHIuY3Vyc29yLnN0eWxlLmxlZnQ9ZS5sZWZ0KyJweCIsci5jdXJzb3Iuc3R5bGUudG9wPWUudG9wLXIudmlld09mZnNldCsicHgiKSxyLmN1cnNvci5zY3JvbGxJbnRvVmlldyhpKSxvJiYoci5jdXJzb3Iuc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19ZnVuY3Rpb24gc3IodCxlLHIsbil7Zm9yKG51bGw9PW4mJihuPTApOzspe3ZhciBpPSExLG89USh0LGUpLGw9ciYmciE9ZT9RKHQscik6byxzPXVyKHQsTWF0aC5taW4oby5sZWZ0LGwubGVmdCksTWF0aC5taW4oby50b3AsbC50b3ApLW4sTWF0aC5tYXgoby5sZWZ0LGwubGVmdCksTWF0aC5tYXgoby5ib3R0b20sbC5ib3R0b20pK24pLGE9dC5kb2Muc2Nyb2xsVG9wLHU9dC5kb2Muc2Nyb2xsTGVmdDtpZihudWxsIT1zLnNjcm9sbFRvcCYmKFNlKHQscy5zY3JvbGxUb3ApLE1hdGguYWJzKHQuZG9jLnNjcm9sbFRvcC1hKT4xJiYoaT0hMCkpLG51bGwhPXMuc2Nyb2xsTGVmdCYmKE1lKHQscy5zY3JvbGxMZWZ0KSxNYXRoLmFicyh0LmRvYy5zY3JvbGxMZWZ0LXUpPjEmJihpPSEwKSksIWkpcmV0dXJuIG99fWZ1bmN0aW9uIGFyKHQsZSxyLG4saSl7dmFyIG89dXIodCxlLHIsbixpKTtudWxsIT1vLnNjcm9sbFRvcCYmU2UodCxvLnNjcm9sbFRvcCksbnVsbCE9by5zY3JvbGxMZWZ0JiZNZSh0LG8uc2Nyb2xsTGVmdCl9ZnVuY3Rpb24gdXIodCxlLHIsbixpKXt2YXIgbz10LmRpc3BsYXksbD1yZSh0LmRpc3BsYXkpOzA+ciYmKHI9MCk7dmFyIHM9by5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8sYT1vLnNjcm9sbGVyLnNjcm9sbFRvcCx1PXt9LGM9dC5kb2MuaGVpZ2h0K0YobyksZj1sPnIsaD1pPmMtbDtpZihhPnIpdS5zY3JvbGxUb3A9Zj8wOnI7ZWxzZSBpZihpPmErcyl7dmFyIGQ9TWF0aC5taW4ociwoaD9jOmkpLXMpO2QhPWEmJih1LnNjcm9sbFRvcD1kKX12YXIgcD1vLnNjcm9sbGVyLmNsaWVudFdpZHRoLVRvLGc9by5zY3JvbGxlci5zY3JvbGxMZWZ0O2UrPW8uZ3V0dGVycy5vZmZzZXRXaWR0aCxuKz1vLmd1dHRlcnMub2Zmc2V0V2lkdGg7dmFyIG09by5ndXR0ZXJzLm9mZnNldFdpZHRoLHY9bSsxMD5lO3JldHVybiBnK20+ZXx8dj8odiYmKGU9MCksdS5zY3JvbGxMZWZ0PU1hdGgubWF4KDAsZS0xMC1tKSk6bj5wK2ctMyYmKHUuc2Nyb2xsTGVmdD1uKzEwLXApLHV9ZnVuY3Rpb24gY3IodCxlLHIpe3QuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0Om51bGw9PWU/dC5kb2Muc2Nyb2xsTGVmdDplLHNjcm9sbFRvcDpudWxsPT1yP3QuZG9jLnNjcm9sbFRvcDpyfX1mdW5jdGlvbiBmcih0LGUscil7dmFyIG49dC5jdXJPcC51cGRhdGVTY3JvbGxQb3N8fCh0LmN1ck9wLnVwZGF0ZVNjcm9sbFBvcz17c2Nyb2xsTGVmdDp0LmRvYy5zY3JvbGxMZWZ0LHNjcm9sbFRvcDp0LmRvYy5zY3JvbGxUb3B9KSxpPXQuZGlzcGxheS5zY3JvbGxlcjtuLnNjcm9sbFRvcD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsSGVpZ2h0LWkuY2xpZW50SGVpZ2h0LG4uc2Nyb2xsVG9wK3IpKSxuLnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxNYXRoLm1pbihpLnNjcm9sbFdpZHRoLWkuY2xpZW50V2lkdGgsbi5zY3JvbGxMZWZ0K2UpKX1mdW5jdGlvbiBocih0LGUscixuKXt2YXIgaT10LmRvYztpZihudWxsPT1yJiYocj0iYWRkIiksInNtYXJ0Ij09cilpZih0LmRvYy5tb2RlLmluZGVudCl2YXIgbz16KHQsZSk7ZWxzZSByPSJwcmV2Ijt2YXIgbCxzPXQub3B0aW9ucy50YWJTaXplLGE9Z24oaSxlKSx1PVpuKGEudGV4dCxudWxsLHMpLGM9YS50ZXh0Lm1hdGNoKC9eXHMqLylbMF07aWYoInNtYXJ0Ij09ciYmKGw9dC5kb2MubW9kZS5pbmRlbnQobyxhLnRleHQuc2xpY2UoYy5sZW5ndGgpLGEudGV4dCksbD09QW8pKXtpZighbilyZXR1cm47cj0icHJldiJ9InByZXYiPT1yP2w9ZT5pLmZpcnN0P1puKGduKGksZS0xKS50ZXh0LG51bGwscyk6MDoiYWRkIj09cj9sPXUrdC5vcHRpb25zLmluZGVudFVuaXQ6InN1YnRyYWN0Ij09cj9sPXUtdC5vcHRpb25zLmluZGVudFVuaXQ6Im51bWJlciI9PXR5cGVvZiByJiYobD11K3IpLGw9TWF0aC5tYXgoMCxsKTt2YXIgZj0iIixoPTA7aWYodC5vcHRpb25zLmluZGVudFdpdGhUYWJzKWZvcih2YXIgZD1NYXRoLmZsb29yKGwvcyk7ZDstLWQpaCs9cyxmKz0iCSI7bD5oJiYoZis9cW4obC1oKSksZiE9Yz9fZSh0LmRvYyxmLFllKGUsMCksWWUoZSxjLmxlbmd0aCksIitpbnB1dCIpOmkuc2VsLmhlYWQubGluZT09ZSYmaS5zZWwuaGVhZC5jaDxjLmxlbmd0aCYmbnIoaSxZZShlLGMubGVuZ3RoKSxZZShlLGMubGVuZ3RoKSwxKSxhLnN0YXRlQWZ0ZXI9bnVsbH1mdW5jdGlvbiBkcih0LGUscil7dmFyIG49ZSxpPWUsbz10LmRvYztyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/aT1nbihvLHFlKG8sZSkpOm49Ym4oZSksbnVsbD09bj9udWxsOnIoaSxuKT8odWUodCxuLG4rMSksaSk6bnVsbH1mdW5jdGlvbiBwcih0LGUscixuLGkpe2Z1bmN0aW9uIG8oKXt2YXIgZT1zK3I7cmV0dXJuIGU8dC5maXJzdHx8ZT49dC5maXJzdCt0LnNpemU/Zj0hMToocz1lLGM9Z24odCxlKSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT0oaT9TaTpNaSkoYyxhLHIsITApO2lmKG51bGw9PWUpe2lmKHR8fCFvKCkpcmV0dXJuIGY9ITE7YT1pPygwPnI/Ymk6eWkpKGMpOjA+cj9jLnRleHQubGVuZ3RoOjB9ZWxzZSBhPWU7cmV0dXJuITB9dmFyIHM9ZS5saW5lLGE9ZS5jaCx1PXIsYz1nbih0LHMpLGY9ITA7aWYoImNoYXIiPT1uKWwoKTtlbHNlIGlmKCJjb2x1bW4iPT1uKWwoITApO2Vsc2UgaWYoIndvcmQiPT1ufHwiZ3JvdXAiPT1uKWZvcih2YXIgaD1udWxsLGQ9Imdyb3VwIj09bixwPSEwOyEoMD5yKXx8bCghcCk7cD0hMSl7dmFyIGc9Yy50ZXh0LmNoYXJBdChhKXx8IlxuIixtPW9pKGcpPyJ3IjpkPy9ccy8udGVzdChnKT9udWxsOiJwIjpudWxsO2lmKGgmJmghPW0pezA+ciYmKHI9MSxsKCkpO2JyZWFrfWlmKG0mJihoPW0pLHI+MCYmIWwoIXApKWJyZWFrfXZhciB2PW9yKHQsWWUocyxhKSx1LCEwKTtyZXR1cm4gZnx8KHYuaGl0U2lkZT0hMCksdn1mdW5jdGlvbiBncih0LGUscixuKXt2YXIgaSxvPXQuZG9jLGw9ZS5sZWZ0O2lmKCJwYWdlIj09bil7dmFyIHM9TWF0aC5taW4odC5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7aT1lLnRvcCtyKihzLSgwPnI/MS41Oi41KSpyZSh0LmRpc3BsYXkpKX1lbHNlImxpbmUiPT1uJiYoaT1yPjA/ZS5ib3R0b20rMzplLnRvcC0zKTtmb3IoOzspe3ZhciBhPXRlKHQsbCxpKTtpZighYS5vdXRzaWRlKWJyZWFrO2lmKDA+cj8wPj1pOmk+PW8uaGVpZ2h0KXthLmhpdFNpZGU9ITA7YnJlYWt9aSs9NSpyfXJldHVybiBhfWZ1bmN0aW9uIG1yKHQsZSl7dmFyIHI9ZS5jaCxuPWUuY2g7aWYodCl7KGUueFJlbDwwfHxuPT10Lmxlbmd0aCkmJnI/LS1yOisrbjtmb3IodmFyIGk9dC5jaGFyQXQociksbz1vaShpKT9vaTovXHMvLnRlc3QoaSk/ZnVuY3Rpb24odCl7cmV0dXJuL1xzLy50ZXN0KHQpfTpmdW5jdGlvbih0KXtyZXR1cm4hL1xzLy50ZXN0KHQpJiYhb2kodCl9O3I+MCYmbyh0LmNoYXJBdChyLTEpKTspLS1yO2Zvcig7bjx0Lmxlbmd0aCYmbyh0LmNoYXJBdChuKSk7KSsrbn1yZXR1cm57ZnJvbTpZZShlLmxpbmUsciksdG86WWUoZS5saW5lLG4pfX1mdW5jdGlvbiB2cih0LGUpe2VyKHQuZG9jLFllKGUsMCksUWUodC5kb2MsWWUoZSsxLDApKSl9ZnVuY3Rpb24geXIoZSxyLG4saSl7dC5kZWZhdWx0c1tlXT1yLG4mJihzb1tlXT1pP2Z1bmN0aW9uKHQsZSxyKXtyIT11byYmbih0LGUscil9Om4pfWZ1bmN0aW9uIGJyKHQsZSl7aWYoZT09PSEwKXJldHVybiBlO2lmKHQuY29weVN0YXRlKXJldHVybiB0LmNvcHlTdGF0ZShlKTt2YXIgcj17fTtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpIGluc3RhbmNlb2YgQXJyYXkmJihpPWkuY29uY2F0KFtdKSkscltuXT1pfXJldHVybiByfWZ1bmN0aW9uIHhyKHQsZSxyKXtyZXR1cm4gdC5zdGFydFN0YXRlP3Quc3RhcnRTdGF0ZShlLHIpOiEwfWZ1bmN0aW9uIENyKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD92b1t0XTp0fWZ1bmN0aW9uIHdyKHQsZSxyKXtmdW5jdGlvbiBuKGUpe2U9Q3IoZSk7dmFyIGk9ZVt0XTtpZihpPT09ITEpcmV0dXJuInN0b3AiO2lmKG51bGwhPWkmJnIoaSkpcmV0dXJuITA7aWYoZS5ub2ZhbGx0aHJvdWdoKXJldHVybiJzdG9wIjt2YXIgbz1lLmZhbGx0aHJvdWdoO2lmKG51bGw9PW8pcmV0dXJuITE7aWYoIltvYmplY3QgQXJyYXldIiE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKXJldHVybiBuKG8pO2Zvcih2YXIgbD0wLHM9by5sZW5ndGg7cz5sOysrbCl7dmFyIGE9bihvW2xdKTtpZihhKXJldHVybiBhfXJldHVybiExfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgbz1uKGVbaV0pO2lmKG8pcmV0dXJuInN0b3AiIT1vfX1mdW5jdGlvbiBMcih0KXt2YXIgZT1Qb1t0LmtleUNvZGVdO3JldHVybiJDdHJsIj09ZXx8IkFsdCI9PWV8fCJTaGlmdCI9PWV8fCJNb2QiPT1lfWZ1bmN0aW9uIGtyKHQsZSl7aWYoemkmJjM0PT10LmtleUNvZGUmJnRbImNoYXIiXSlyZXR1cm4hMTt2YXIgcj1Qb1t0LmtleUNvZGVdO3JldHVybiBudWxsPT1yfHx0LmFsdEdyYXBoS2V5PyExOih0LmFsdEtleSYmKHI9IkFsdC0iK3IpLCgkaT90Lm1ldGFLZXk6dC5jdHJsS2V5KSYmKHI9IkN0cmwtIityKSwoJGk/dC5jdHJsS2V5OnQubWV0YUtleSkmJihyPSJDbWQtIityKSwhZSYmdC5zaGlmdEtleSYmKHI9IlNoaWZ0LSIrcikscil9ZnVuY3Rpb24gU3IodCxlKXt0aGlzLnBvcz10aGlzLnN0YXJ0PTAsdGhpcy5zdHJpbmc9dCx0aGlzLnRhYlNpemU9ZXx8OCx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5sYXN0Q29sdW1uVmFsdWU9MH1mdW5jdGlvbiBNcih0LGUpe3RoaXMubGluZXM9W10sdGhpcy50eXBlPWUsdGhpcy5kb2M9dH1mdW5jdGlvbiBUcih0LGUscixuLGkpe2lmKG4mJm4uc2hhcmVkKXJldHVybiBIcih0LGUscixuLGkpO2lmKHQuY20mJiF0LmNtLmN1ck9wKXJldHVybiBsZSh0LmNtLFRyKSh0LGUscixuLGkpO3ZhciBvPW5ldyBNcih0LGkpO2lmKCRlKHIsZSl8fGplKGUscikmJiJyYW5nZSI9PWkmJighbi5pbmNsdXNpdmVMZWZ0fHwhbi5pbmNsdXNpdmVSaWdodCkpcmV0dXJuIG87biYmcmkobixvKSxvLnJlcGxhY2VkV2l0aCYmKG8uY29sbGFwc2VkPSEwLG8ucmVwbGFjZWRXaXRoPXNpKCJzcGFuIixbby5yZXBsYWNlZFdpdGhdLCJDb2RlTWlycm9yLXdpZGdldCIpLG4uaGFuZGxlTW91c2VFdmVudHN8fChvLnJlcGxhY2VkV2l0aC5pZ25vcmVFdmVudHM9ITApKSxvLmNvbGxhcHNlZCYmKFFpPSEwKSxvLmFkZFRvSGlzdG9yeSYmTW4odCx7ZnJvbTplLHRvOnIsb3JpZ2luOiJtYXJrVGV4dCJ9LHtoZWFkOnQuc2VsLmhlYWQsYW5jaG9yOnQuc2VsLmFuY2hvcn0sMC8wKTt2YXIgbCxzLGEsdT1lLmxpbmUsYz0wLGY9dC5jbTtpZih0Lml0ZXIodSxyLmxpbmUrMSxmdW5jdGlvbihuKXtmJiZvLmNvbGxhcHNlZCYmIWYub3B0aW9ucy5saW5lV3JhcHBpbmcmJkdyKHQsbik9PWYuZGlzcGxheS5tYXhMaW5lJiYoYT0hMCk7dmFyIGk9e2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpvfTtjKz1uLnRleHQubGVuZ3RoLHU9PWUubGluZSYmKGkuZnJvbT1lLmNoLGMtPWUuY2gpLHU9PXIubGluZSYmKGkudG89ci5jaCxjLT1uLnRleHQubGVuZ3RoLXIuY2gpLG8uY29sbGFwc2VkJiYodT09ci5saW5lJiYocz1QcihuLHIuY2gpKSx1PT1lLmxpbmU/bD1QcihuLGUuY2gpOnluKG4sMCkpLFdyKG4saSksKyt1fSksby5jb2xsYXBzZWQmJnQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24oZSl7VnIodCxlKSYmeW4oZSwwKX0pLG8uY2xlYXJPbkVudGVyJiZHbihvLCJiZWZvcmVDdXJzb3JFbnRlciIsZnVuY3Rpb24oKXtvLmNsZWFyKCl9KSxvLnJlYWRPbmx5JiYocWk9ITAsKHQuaGlzdG9yeS5kb25lLmxlbmd0aHx8dC5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpJiZ0LmNsZWFySGlzdG9yeSgpKSxvLmNvbGxhcHNlZCl7aWYobCE9cyl0aHJvdyBuZXcgRXJyb3IoIkluc2VydGluZyBjb2xsYXBzZWQgbWFya2VyIG92ZXJsYXBwaW5nIGFuIGV4aXN0aW5nIG9uZSIpO28uc2l6ZT1jLG8uYXRvbWljPSEwfXJldHVybiBmJiYoYSYmKGYuY3VyT3AudXBkYXRlTWF4TGluZT0hMCksKG8uY2xhc3NOYW1lfHxvLnRpdGxlfHxvLnN0YXJ0U3R5bGV8fG8uZW5kU3R5bGV8fG8uY29sbGFwc2VkKSYmdWUoZixlLmxpbmUsci5saW5lKzEpLG8uYXRvbWljJiZpcihmKSksb31mdW5jdGlvbiBBcih0LGUpe3RoaXMubWFya2Vycz10LHRoaXMucHJpbWFyeT1lO2Zvcih2YXIgcj0wLG49dGhpcztyPHQubGVuZ3RoOysrcil0W3JdLnBhcmVudD10aGlzLEduKHRbcl0sImNsZWFyIixmdW5jdGlvbigpe24uY2xlYXIoKX0pfWZ1bmN0aW9uIEhyKHQsZSxyLG4saSl7bj1yaShuKSxuLnNoYXJlZD0hMTt2YXIgbz1bVHIodCxlLHIsbixpKV0sbD1vWzBdLHM9bi5yZXBsYWNlZFdpdGg7cmV0dXJuIGRuKHQsZnVuY3Rpb24odCl7cyYmKG4ucmVwbGFjZWRXaXRoPXMuY2xvbmVOb2RlKCEwKSksby5wdXNoKFRyKHQsUWUodCxlKSxRZSh0LHIpLG4saSkpO2Zvcih2YXIgYT0wO2E8dC5saW5rZWQubGVuZ3RoOysrYSlpZih0LmxpbmtlZFthXS5pc1BhcmVudClyZXR1cm47bD1RbihvKX0pLG5ldyBBcihvLGwpfWZ1bmN0aW9uIE5yKHQsZSl7aWYodClmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtpZihuLm1hcmtlcj09ZSlyZXR1cm4gbn19ZnVuY3Rpb24gRHIodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXRbbl0hPWUmJihyfHwocj1bXSkpLnB1c2godFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gV3IodCxlKXt0Lm1hcmtlZFNwYW5zPXQubWFya2VkU3BhbnM/dC5tYXJrZWRTcGFucy5jb25jYXQoW2VdKTpbZV0sZS5tYXJrZXIuYXR0YWNoTGluZSh0KX1mdW5jdGlvbiBPcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTtpZihzfHwobC5pbmNsdXNpdmVMZWZ0JiZsLmluY2x1c2l2ZVJpZ2h0fHwiYm9va21hcmsiPT1sLnR5cGUpJiZvLmZyb209PWUmJighcnx8IW8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7KG58fChuPVtdKSkucHVzaCh7ZnJvbTpvLmZyb20sdG86YT9udWxsOm8udG8sbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24gRXIodCxlLHIpe2lmKHQpZm9yKHZhciBuLGk9MDtpPHQubGVuZ3RoOysraSl7dmFyIG89dFtpXSxsPW8ubWFya2VyLHM9bnVsbD09by50b3x8KGwuaW5jbHVzaXZlUmlnaHQ/by50bz49ZTpvLnRvPmUpO2lmKHN8fCJib29rbWFyayI9PWwudHlwZSYmby5mcm9tPT1lJiYoIXJ8fG8ubWFya2VyLmluc2VydExlZnQpKXt2YXIgYT1udWxsPT1vLmZyb218fChsLmluY2x1c2l2ZUxlZnQ/by5mcm9tPD1lOm8uZnJvbTxlKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOmE/bnVsbDpvLmZyb20tZSx0bzpudWxsPT1vLnRvP251bGw6by50by1lLG1hcmtlcjpsfSl9fXJldHVybiBufWZ1bmN0aW9uIHpyKHQsZSl7dmFyIHI9dHIodCxlLmZyb20ubGluZSkmJmduKHQsZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zLG49dHIodCxlLnRvLmxpbmUpJiZnbih0LGUudG8ubGluZSkubWFya2VkU3BhbnM7aWYoIXImJiFuKXJldHVybiBudWxsO3ZhciBpPWUuZnJvbS5jaCxvPWUudG8uY2gsbD1qZShlLmZyb20sZS50bykscz1PcihyLGksbCksYT1FcihuLG8sbCksdT0xPT1lLnRleHQubGVuZ3RoLGM9UW4oZS50ZXh0KS5sZW5ndGgrKHU/aTowKTtpZihzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKXt2YXIgaD1zW2ZdO2lmKG51bGw9PWgudG8pe3ZhciBkPU5yKGEsaC5tYXJrZXIpO2Q/dSYmKGgudG89bnVsbD09ZC50bz9udWxsOmQudG8rYyk6aC50bz1pfX1pZihhKWZvcih2YXIgZj0wO2Y8YS5sZW5ndGg7KytmKXt2YXIgaD1hW2ZdO2lmKG51bGwhPWgudG8mJihoLnRvKz1jKSxudWxsPT1oLmZyb20pe3ZhciBkPU5yKHMsaC5tYXJrZXIpO2R8fChoLmZyb209Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpKX1lbHNlIGguZnJvbSs9Yyx1JiYoc3x8KHM9W10pKS5wdXNoKGgpfWlmKHUmJnMpe2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGwhPXNbZl0uZnJvbSYmc1tmXS5mcm9tPT1zW2ZdLnRvJiYiYm9va21hcmsiIT1zW2ZdLm1hcmtlci50eXBlJiZzLnNwbGljZShmLS0sMSk7cy5sZW5ndGh8fChzPW51bGwpfXZhciBwPVtzXTtpZighdSl7dmFyIGcsbT1lLnRleHQubGVuZ3RoLTI7aWYobT4wJiZzKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7KytmKW51bGw9PXNbZl0udG8mJihnfHwoZz1bXSkpLnB1c2goe2Zyb206bnVsbCx0bzpudWxsLG1hcmtlcjpzW2ZdLm1hcmtlcn0pO2Zvcih2YXIgZj0wO20+ZjsrK2YpcC5wdXNoKGcpO3AucHVzaChhKX1yZXR1cm4gcH1mdW5jdGlvbiBJcih0LGUpe3ZhciByPUFuKHQsZSksbj16cih0LGUpO2lmKCFyKXJldHVybiBuO2lmKCFuKXJldHVybiByO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgbz1yW2ldLGw9bltpXTtpZihvJiZsKXQ6Zm9yKHZhciBzPTA7czxsLmxlbmd0aDsrK3Mpe2Zvcih2YXIgYT1sW3NdLHU9MDt1PG8ubGVuZ3RoOysrdSlpZihvW3VdLm1hcmtlcj09YS5tYXJrZXIpY29udGludWUgdDtvLnB1c2goYSl9ZWxzZSBsJiYocltpXT1sKX1yZXR1cm4gcn1mdW5jdGlvbiBGcih0LGUscil7dmFyIG49bnVsbDtpZih0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe2lmKHQubWFya2VkU3BhbnMpZm9yKHZhciBlPTA7ZTx0Lm1hcmtlZFNwYW5zLmxlbmd0aDsrK2Upe3ZhciByPXQubWFya2VkU3BhbnNbZV0ubWFya2VyOyFyLnJlYWRPbmx5fHxuJiYtMSE9dGkobixyKXx8KG58fChuPVtdKSkucHVzaChyKX19KSwhbilyZXR1cm4gbnVsbDtmb3IodmFyIGk9W3tmcm9tOmUsdG86cn1dLG89MDtvPG4ubGVuZ3RoOysrbylmb3IodmFyIGw9bltvXSxzPWwuZmluZCgpLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIHU9aVthXTtpZighJGUodS50byxzLmZyb20pJiYhJGUocy50byx1LmZyb20pKXt2YXIgYz1bYSwxXTsoJGUodS5mcm9tLHMuZnJvbSl8fCFsLmluY2x1c2l2ZUxlZnQmJmplKHUuZnJvbSxzLmZyb20pKSYmYy5wdXNoKHtmcm9tOnUuZnJvbSx0bzpzLmZyb219KSwoJGUocy50byx1LnRvKXx8IWwuaW5jbHVzaXZlUmlnaHQmJmplKHUudG8scy50bykpJiZjLnB1c2goe2Zyb206cy50byx0bzp1LnRvfSksaS5zcGxpY2UuYXBwbHkoaSxjKSxhKz1jLmxlbmd0aC0xfX1yZXR1cm4gaX1mdW5jdGlvbiBQcih0LGUpe3ZhciByLG49UWkmJnQubWFya2VkU3BhbnM7aWYobilmb3IodmFyIGksbz0wO288bi5sZW5ndGg7KytvKWk9bltvXSxpLm1hcmtlci5jb2xsYXBzZWQmJihudWxsPT1pLmZyb218fGkuZnJvbTxlKSYmKG51bGw9PWkudG98fGkudG8+ZSkmJighcnx8ci53aWR0aDxpLm1hcmtlci53aWR0aCkmJihyPWkubWFya2VyKTtyZXR1cm4gcn1mdW5jdGlvbiBScih0KXtyZXR1cm4gUHIodCwtMSl9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIFByKHQsdC50ZXh0Lmxlbmd0aCsxKX1mdW5jdGlvbiBHcih0LGUpe2Zvcih2YXIgcjtyPVJyKGUpOyllPWduKHQsci5maW5kKCkuZnJvbS5saW5lKTtyZXR1cm4gZX1mdW5jdGlvbiBWcih0LGUpe3ZhciByPVFpJiZlLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuLGk9MDtpPHIubGVuZ3RoOysraSlpZihuPXJbaV0sbi5tYXJrZXIuY29sbGFwc2VkKXtpZihudWxsPT1uLmZyb20pcmV0dXJuITA7aWYoIW4ubWFya2VyLnJlcGxhY2VkV2l0aCYmMD09bi5mcm9tJiZuLm1hcmtlci5pbmNsdXNpdmVMZWZ0JiZLcih0LGUsbikpcmV0dXJuITB9fWZ1bmN0aW9uIEtyKHQsZSxyKXtpZihudWxsPT1yLnRvKXt2YXIgbj1yLm1hcmtlci5maW5kKCkudG8saT1nbih0LG4ubGluZSk7cmV0dXJuIEtyKHQsaSxOcihpLm1hcmtlZFNwYW5zLHIubWFya2VyKSl9aWYoci5tYXJrZXIuaW5jbHVzaXZlUmlnaHQmJnIudG89PWUudGV4dC5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBvLGw9MDtsPGUubWFya2VkU3BhbnMubGVuZ3RoOysrbClpZihvPWUubWFya2VkU3BhbnNbbF0sby5tYXJrZXIuY29sbGFwc2VkJiYhby5tYXJrZXIucmVwbGFjZWRXaXRoJiZvLmZyb209PXIudG8mJihvLm1hcmtlci5pbmNsdXNpdmVMZWZ0fHxyLm1hcmtlci5pbmNsdXNpdmVSaWdodCkmJktyKHQsZSxvKSlyZXR1cm4hMH1mdW5jdGlvbiBVcih0KXt2YXIgZT10Lm1hcmtlZFNwYW5zO2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmRldGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1udWxsfX1mdW5jdGlvbiBYcih0LGUpe2lmKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0ubWFya2VyLmF0dGFjaExpbmUodCk7dC5tYXJrZWRTcGFucz1lfX1mdW5jdGlvbiBfcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT0hdGhpcy5jbS5jdXJPcDtlJiZpZSh0aGlzLmNtKTt0cnl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtlJiZvZSh0aGlzLmNtKX1yZXR1cm4gcn19ZnVuY3Rpb24gWXIodCl7cmV0dXJuIG51bGwhPXQuaGVpZ2h0P3QuaGVpZ2h0Oih0Lm5vZGUucGFyZW50Tm9kZSYmMT09dC5ub2RlLnBhcmVudE5vZGUubm9kZVR5cGV8fHVpKHQuY20uZGlzcGxheS5tZWFzdXJlLHNpKCJkaXYiLFt0Lm5vZGVdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZSIpKSx0LmhlaWdodD10Lm5vZGUub2Zmc2V0SGVpZ2h0KX1mdW5jdGlvbiBqcih0LGUscixuKXt2YXIgaT1uZXcgeW8odCxyLG4pO3JldHVybiBpLm5vSFNjcm9sbCYmKHQuZGlzcGxheS5hbGlnbldpZGdldHM9ITApLGRyKHQsZSxmdW5jdGlvbihlKXt2YXIgcj1lLndpZGdldHN8fChlLndpZGdldHM9W10pO2lmKG51bGw9PWkuaW5zZXJ0QXQ/ci5wdXNoKGkpOnIuc3BsaWNlKE1hdGgubWluKHIubGVuZ3RoLTEsTWF0aC5tYXgoMCxpLmluc2VydEF0KSksMCxpKSxpLmxpbmU9ZSwhVnIodC5kb2MsZSl8fGkuc2hvd0lmSGlkZGVuKXt2YXIgbj1Dbih0LGUpPHQuZG9jLnNjcm9sbFRvcDt5bihlLGUuaGVpZ2h0K1lyKGkpKSxuJiZmcih0LDAsaS5oZWlnaHQpfXJldHVybiEwfSksaX1mdW5jdGlvbiAkcih0LGUscixuKXt0LnRleHQ9ZSx0LnN0YXRlQWZ0ZXImJih0LnN0YXRlQWZ0ZXI9bnVsbCksdC5zdHlsZXMmJih0LnN0eWxlcz1udWxsKSxudWxsIT10Lm9yZGVyJiYodC5vcmRlcj1udWxsKSxVcih0KSxYcih0LHIpO3ZhciBpPW4/bih0KToxO2khPXQuaGVpZ2h0JiZ5bih0LGkpfWZ1bmN0aW9uIFpyKHQpe3QucGFyZW50PW51bGwsVXIodCl9ZnVuY3Rpb24gcXIodCxlLHIsbixpLG8pe3ZhciBsPXIuZmxhdHRlblNwYW5zO251bGw9PWwmJihsPXQub3B0aW9ucy5mbGF0dGVuU3BhbnMpO3ZhciBzLGE9MCx1PW51bGwsYz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKCIiPT1lJiZyLmJsYW5rTGluZSYmci5ibGFua0xpbmUobik7IWMuZW9sKCk7KWMucG9zPnQub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGg/KGw9ITEsbyYmdG4odCxlLG4sYy5wb3MpLGMucG9zPWUubGVuZ3RoLHM9bnVsbCk6cz1yLnRva2VuKGMsbiksbCYmdT09c3x8KGE8Yy5zdGFydCYmaShjLnN0YXJ0LHUpLGE9Yy5zdGFydCx1PXMpLGMuc3RhcnQ9Yy5wb3M7Zm9yKDthPGMucG9zOyl7dmFyIGY9TWF0aC5taW4oYy5wb3MsYSs1ZTQpO2koZix1KSxhPWZ9fWZ1bmN0aW9uIFFyKHQsZSxyLG4pe3ZhciBpPVt0LnN0YXRlLm1vZGVHZW5dO3FyKHQsZS50ZXh0LHQuZG9jLm1vZGUscixmdW5jdGlvbih0LGUpe2kucHVzaCh0LGUpfSxuKTtmb3IodmFyIG89MDtvPHQuc3RhdGUub3ZlcmxheXMubGVuZ3RoOysrbyl7dmFyIGw9dC5zdGF0ZS5vdmVybGF5c1tvXSxzPTEsYT0wO3FyKHQsZS50ZXh0LGwubW9kZSwhMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1zO3Q+YTspe3ZhciBuPWlbc107bj50JiZpLnNwbGljZShzLDEsdCxpW3MrMV0sbikscys9MixhPU1hdGgubWluKHQsbil9aWYoZSlpZihsLm9wYXF1ZSlpLnNwbGljZShyLHMtcix0LGUpLHM9cisyO2Vsc2UgZm9yKDtzPnI7cis9Mil7dmFyIG89aVtyKzFdO2lbcisxXT1vP28rIiAiK2U6ZX19KX1yZXR1cm4gaX1mdW5jdGlvbiBKcih0LGUpe3JldHVybiBlLnN0eWxlcyYmZS5zdHlsZXNbMF09PXQuc3RhdGUubW9kZUdlbnx8KGUuc3R5bGVzPVFyKHQsZSxlLnN0YXRlQWZ0ZXI9eih0LGJuKGUpKSkpLGUuc3R5bGVzfWZ1bmN0aW9uIHRuKHQsZSxyLG4pe3ZhciBpPXQuZG9jLm1vZGUsbz1uZXcgU3IoZSx0Lm9wdGlvbnMudGFiU2l6ZSk7Zm9yKG8uc3RhcnQ9by5wb3M9bnx8MCwiIj09ZSYmaS5ibGFua0xpbmUmJmkuYmxhbmtMaW5lKHIpOyFvLmVvbCgpJiZvLnBvczw9dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aDspaS50b2tlbihvLHIpLG8uc3RhcnQ9by5wb3N9ZnVuY3Rpb24gZW4odCxlKXtpZighdClyZXR1cm4gbnVsbDtmb3IoOzspe3ZhciByPXQubWF0Y2goLyg/Ol58XHMpbGluZS0oYmFja2dyb3VuZC0pPyhcUyspLyk7aWYoIXIpYnJlYWs7dD10LnNsaWNlKDAsci5pbmRleCkrdC5zbGljZShyLmluZGV4K3JbMF0ubGVuZ3RoKTt2YXIgbj1yWzFdPyJiZ0NsYXNzIjoidGV4dENsYXNzIjtudWxsPT1lW25dP2Vbbl09clsyXTpuZXcgUmVnRXhwKCIoPzpefHMpIityWzJdKyIoPzokfHMpIikudGVzdChlW25dKXx8KGVbbl0rPSIgIityWzJdKX1yZXR1cm4geG9bdF18fCh4b1t0XT0iY20tIit0LnJlcGxhY2UoLyArL2csIiBjbS0iKSl9ZnVuY3Rpb24gcm4odCxlLHIsbil7Zm9yKHZhciBpLG89ZSxsPSEwO2k9UnIobyk7KW89Z24odC5kb2MsaS5maW5kKCkuZnJvbS5saW5lKTt2YXIgcz17cHJlOnNpKCJwcmUiKSxjb2w6MCxwb3M6MCxtZWFzdXJlOm51bGwsbWVhc3VyZWRTb21ldGhpbmc6ITEsY206dCxjb3B5V2lkZ2V0czpufTtkb3tvLnRleHQmJihsPSExKSxzLm1lYXN1cmU9bz09ZSYmcixzLnBvcz0wLHMuYWRkVG9rZW49cy5tZWFzdXJlP2xuOm9uLChBaXx8V2kpJiZ0LmdldE9wdGlvbigibGluZVdyYXBwaW5nIikmJihzLmFkZFRva2VuPXNuKHMuYWRkVG9rZW4pKTt2YXIgYT11bihvLHMsSnIodCxvKSk7ciYmbz09ZSYmIXMubWVhc3VyZWRTb21ldGhpbmcmJihyWzBdPXMucHJlLmFwcGVuZENoaWxkKHBpKHQuZGlzcGxheS5tZWFzdXJlKSkscy5tZWFzdXJlZFNvbWV0aGluZz0hMCksYSYmKG89Z24odC5kb2MsYS50by5saW5lKSl9d2hpbGUoYSk7IXJ8fHMubWVhc3VyZWRTb21ldGhpbmd8fHJbMF18fChyWzBdPXMucHJlLmFwcGVuZENoaWxkKGw/c2koInNwYW4iLCLCoCIpOnBpKHQuZGlzcGxheS5tZWFzdXJlKSkpLHMucHJlLmZpcnN0Q2hpbGR8fFZyKHQuZG9jLGUpfHxzLnByZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiwqAiKSk7dmFyIHU7aWYociYmKEFpfHxEaSkmJih1PXduKG8pKSl7dmFyIGM9dS5sZW5ndGgtMTt1W2NdLmZyb209PXVbY10udG8mJi0tYzt2YXIgZj11W2NdLGg9dVtjLTFdO2lmKGYuZnJvbSsxPT1mLnRvJiZoJiZmLmxldmVsPGgubGV2ZWwpe3ZhciBkPXJbcy5wb3MtMV07ZCYmZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkLm1lYXN1cmVSaWdodD1waSh0LmRpc3BsYXkubWVhc3VyZSksZC5uZXh0U2libGluZyl9fXZhciBwPXMudGV4dENsYXNzP3MudGV4dENsYXNzKyIgIisoZS50ZXh0Q2xhc3N8fCIiKTplLnRleHRDbGFzcztyZXR1cm4gcCYmKHMucHJlLmNsYXNzTmFtZT1wKSxLbih0LCJyZW5kZXJMaW5lIix0LGUscy5wcmUpLHN9ZnVuY3Rpb24gbm4odCl7dmFyIGU9c2koInNwYW4iLCLigKIiLCJjbS1pbnZhbGlkY2hhciIpO3JldHVybiBlLnRpdGxlPSJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNiksZX1mdW5jdGlvbiBvbih0LGUscixuLGksbyl7aWYoZSl7dmFyIGw9dC5jbS5vcHRpb25zLnNwZWNpYWxDaGFycztpZihsLnRlc3QoZSkpZm9yKHZhciBzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxhPTA7Oyl7bC5sYXN0SW5kZXg9YTt2YXIgdT1sLmV4ZWMoZSksYz11P3UuaW5kZXgtYTplLmxlbmd0aC1hO2lmKGMmJihzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuc2xpY2UoYSxhK2MpKSksdC5jb2wrPWMpLCF1KWJyZWFrO2lmKGErPWMrMSwiCSI9PXVbMF0pe3ZhciBmPXQuY20ub3B0aW9ucy50YWJTaXplLGg9Zi10LmNvbCVmO3MuYXBwZW5kQ2hpbGQoc2koInNwYW4iLHFuKGgpLCJjbS10YWIiKSksdC5jb2wrPWh9ZWxzZXt2YXIgZD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcih1WzBdKTtzLmFwcGVuZENoaWxkKGQpLHQuY29sKz0xfX1lbHNle3QuY29sKz1lLmxlbmd0aDt2YXIgcz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX1pZihyfHxufHxpfHx0Lm1lYXN1cmUpe3ZhciBwPXJ8fCIiO24mJihwKz1uKSxpJiYocCs9aSk7dmFyIGQ9c2koInNwYW4iLFtzXSxwKTtyZXR1cm4gbyYmKGQudGl0bGU9byksdC5wcmUuYXBwZW5kQ2hpbGQoZCl9dC5wcmUuYXBwZW5kQ2hpbGQocyl9fWZ1bmN0aW9uIGxuKHQsZSxyLG4saSl7Zm9yKHZhciBvPXQuY20ub3B0aW9ucy5saW5lV3JhcHBpbmcsbD0wO2w8ZS5sZW5ndGg7KytsKXt2YXIgcz1lLmNoYXJBdChsKSxhPTA9PWw7cz49Iu2ggCImJiLtr78iPnMmJmw8ZS5sZW5ndGgtMT8ocz1lLnNsaWNlKGwsbCsyKSwrK2wpOmwmJm8mJmhpKGUsbCkmJnQucHJlLmFwcGVuZENoaWxkKHNpKCJ3YnIiKSk7dmFyIHU9dC5tZWFzdXJlW3QucG9zXSxjPXQubWVhc3VyZVt0LnBvc109b24odCxzLHIsYSYmbixsPT1lLmxlbmd0aC0xJiZpKTt1JiYoYy5sZWZ0U2lkZT11LmxlZnRTaWRlfHx1KSxBaSYmbyYmIiAiPT1zJiZsJiYhL1xzLy50ZXN0KGUuY2hhckF0KGwtMSkpJiZsPGUubGVuZ3RoLTEmJiEvXHMvLnRlc3QoZS5jaGFyQXQobCsxKSkmJihjLnN0eWxlLndoaXRlU3BhY2U9Im5vcm1hbCIpLHQucG9zKz1zLmxlbmd0aH1lLmxlbmd0aCYmKHQubWVhc3VyZWRTb21ldGhpbmc9ITApfWZ1bmN0aW9uIHNuKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlPSIgIixyPTA7cjx0Lmxlbmd0aC0yOysrcillKz1yJTI/IiAiOiLCoCI7cmV0dXJuIGUrPSIgIn1yZXR1cm4gZnVuY3Rpb24ocixuLGksbyxsLHMpe3JldHVybiB0KHIsbi5yZXBsYWNlKC8gezMsfS9nLGUpLGksbyxsLHMpfX1mdW5jdGlvbiBhbih0LGUscixuKXt2YXIgaT0hbiYmci5yZXBsYWNlZFdpdGg7aWYoaSYmKHQuY29weVdpZGdldHMmJihpPWkuY2xvbmVOb2RlKCEwKSksdC5wcmUuYXBwZW5kQ2hpbGQoaSksdC5tZWFzdXJlKSl7aWYoZSl0Lm1lYXN1cmVbdC5wb3NdPWk7ZWxzZXt2YXIgbz1waSh0LmNtLmRpc3BsYXkubWVhc3VyZSk7aWYoImJvb2ttYXJrIiE9ci50eXBlfHxyLmluc2VydExlZnQpe2lmKHQubWVhc3VyZVt0LnBvc10pcmV0dXJuO3QubWVhc3VyZVt0LnBvc109dC5wcmUuaW5zZXJ0QmVmb3JlKG8saSl9ZWxzZSB0Lm1lYXN1cmVbdC5wb3NdPXQucHJlLmFwcGVuZENoaWxkKG8pfXQubWVhc3VyZWRTb21ldGhpbmc9ITB9dC5wb3MrPWV9ZnVuY3Rpb24gdW4odCxlLHIpe3ZhciBuPXQubWFya2VkU3BhbnMsaT10LnRleHQsbz0wO2lmKG4pZm9yKHZhciBsLHMsYSx1LGMsZixoPWkubGVuZ3RoLGQ9MCxwPTEsZz0iIixtPTA7Oyl7aWYobT09ZCl7cz1hPXU9Yz0iIixmPW51bGwsbT0xLzA7Zm9yKHZhciB2PVtdLHk9MDt5PG4ubGVuZ3RoOysreSl7dmFyIGI9blt5XSx4PWIubWFya2VyO2IuZnJvbTw9ZCYmKG51bGw9PWIudG98fGIudG8+ZCk/KG51bGwhPWIudG8mJm0+Yi50byYmKG09Yi50byxhPSIiKSx4LmNsYXNzTmFtZSYmKHMrPSIgIit4LmNsYXNzTmFtZSkseC5zdGFydFN0eWxlJiZiLmZyb209PWQmJih1Kz0iICIreC5zdGFydFN0eWxlKSx4LmVuZFN0eWxlJiZiLnRvPT1tJiYoYSs9IiAiK3guZW5kU3R5bGUpLHgudGl0bGUmJiFjJiYoYz14LnRpdGxlKSx4LmNvbGxhcHNlZCYmKCFmfHxmLm1hcmtlci5zaXplPHguc2l6ZSkmJihmPWIpKTpiLmZyb20+ZCYmbT5iLmZyb20mJihtPWIuZnJvbSksImJvb2ttYXJrIj09eC50eXBlJiZiLmZyb209PWQmJngucmVwbGFjZWRXaXRoJiZ2LnB1c2goeCkKfWlmKGYmJihmLmZyb218fDApPT1kJiYoYW4oZSwobnVsbD09Zi50bz9oOmYudG8pLWQsZi5tYXJrZXIsbnVsbD09Zi5mcm9tKSxudWxsPT1mLnRvKSlyZXR1cm4gZi5tYXJrZXIuZmluZCgpO2lmKCFmJiZ2Lmxlbmd0aClmb3IodmFyIHk9MDt5PHYubGVuZ3RoOysreSlhbihlLDAsdlt5XSl9aWYoZD49aClicmVhaztmb3IodmFyIEM9TWF0aC5taW4oaCxtKTs7KXtpZihnKXt2YXIgdz1kK2cubGVuZ3RoO2lmKCFmKXt2YXIgTD13PkM/Zy5zbGljZSgwLEMtZCk6ZztlLmFkZFRva2VuKGUsTCxsP2wrczpzLHUsZCtMLmxlbmd0aD09bT9hOiIiLGMpfWlmKHc+PUMpe2c9Zy5zbGljZShDLWQpLGQ9QzticmVha31kPXcsdT0iIn1nPWkuc2xpY2UobyxvPXJbcCsrXSksbD1lbihyW3ArK10sZSl9fWVsc2UgZm9yKHZhciBwPTE7cDxyLmxlbmd0aDtwKz0yKWUuYWRkVG9rZW4oZSxpLnNsaWNlKG8sbz1yW3BdKSxlbihyW3ArMV0sZSkpfWZ1bmN0aW9uIGNuKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gcj9yW3RdOm51bGx9ZnVuY3Rpb24gbCh0LHIsbil7JHIodCxyLG4saSksVW4odCwiY2hhbmdlIix0LGUpfXZhciBzPWUuZnJvbSxhPWUudG8sdT1lLnRleHQsYz1nbih0LHMubGluZSksZj1nbih0LGEubGluZSksaD1Rbih1KSxkPW8odS5sZW5ndGgtMSkscD1hLmxpbmUtcy5saW5lO2lmKDAhPXMuY2h8fDAhPWEuY2h8fCIiIT1ofHx0LmNtJiYhdC5jbS5vcHRpb25zLndob2xlTGluZVVwZGF0ZUJlZm9yZSlpZihjPT1mKWlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKStoK2MudGV4dC5zbGljZShhLmNoKSxkKTtlbHNle2Zvcih2YXIgZz1bXSxtPTEsdj11Lmxlbmd0aC0xO3Y+bTsrK20pZy5wdXNoKG5ldyBibyh1W21dLG8obSksaSkpO2cucHVzaChuZXcgYm8oaCtjLnRleHQuc2xpY2UoYS5jaCksZCxpKSksbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK3VbMF0sbygwKSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZSBpZigxPT11Lmxlbmd0aClsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXStmLnRleHQuc2xpY2UoYS5jaCksbygwKSksdC5yZW1vdmUocy5saW5lKzEscCk7ZWxzZXtsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSxsKGYsaCtmLnRleHQuc2xpY2UoYS5jaCksZCk7Zm9yKHZhciBtPTEsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7cD4xJiZ0LnJlbW92ZShzLmxpbmUrMSxwLTEpLHQuaW5zZXJ0KHMubGluZSsxLGcpfWVsc2V7Zm9yKHZhciBtPTAsdj11Lmxlbmd0aC0xLGc9W107dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7bChmLGYudGV4dCxkKSxwJiZ0LnJlbW92ZShzLmxpbmUscCksZy5sZW5ndGgmJnQuaW5zZXJ0KHMubGluZSxnKX1Vbih0LCJjaGFuZ2UiLHQsZSksbnIodCxuLmFuY2hvcixuLmhlYWQsbnVsbCwhMCl9ZnVuY3Rpb24gZm4odCl7dGhpcy5saW5lcz10LHRoaXMucGFyZW50PW51bGw7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPTA7cj5lOysrZSl0W2VdLnBhcmVudD10aGlzLG4rPXRbZV0uaGVpZ2h0O3RoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gaG4odCl7dGhpcy5jaGlsZHJlbj10O2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10Lmxlbmd0aDtpPm47KytuKXt2YXIgbz10W25dO2UrPW8uY2h1bmtTaXplKCkscis9by5oZWlnaHQsby5wYXJlbnQ9dGhpc310aGlzLnNpemU9ZSx0aGlzLmhlaWdodD1yLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24gZG4odCxlLHIpe2Z1bmN0aW9uIG4odCxpLG8pe2lmKHQubGlua2VkKWZvcih2YXIgbD0wO2w8dC5saW5rZWQubGVuZ3RoOysrbCl7dmFyIHM9dC5saW5rZWRbbF07aWYocy5kb2MhPWkpe3ZhciBhPW8mJnMuc2hhcmVkSGlzdDsoIXJ8fGEpJiYoZShzLmRvYyxhKSxuKHMuZG9jLHQsYSkpfX19bih0LG51bGwsITApfWZ1bmN0aW9uIHBuKHQsZSl7aWYoZS5jbSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuIik7dC5kb2M9ZSxlLmNtPXQsbyh0KSxyKHQpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fGYodCksdC5vcHRpb25zLm1vZGU9ZS5tb2RlT3B0aW9uLHVlKHQpfWZ1bmN0aW9uIGduKHQsZSl7Zm9yKGUtPXQuZmlyc3Q7IXQubGluZXM7KWZvcih2YXIgcj0wOzsrK3Ipe3ZhciBuPXQuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+ZSl7dD1uO2JyZWFrfWUtPWl9cmV0dXJuIHQubGluZXNbZV19ZnVuY3Rpb24gbW4odCxlLHIpe3ZhciBuPVtdLGk9ZS5saW5lO3JldHVybiB0Lml0ZXIoZS5saW5lLHIubGluZSsxLGZ1bmN0aW9uKHQpe3ZhciBvPXQudGV4dDtpPT1yLmxpbmUmJihvPW8uc2xpY2UoMCxyLmNoKSksaT09ZS5saW5lJiYobz1vLnNsaWNlKGUuY2gpKSxuLnB1c2gobyksKytpfSksbn1mdW5jdGlvbiB2bih0LGUscil7dmFyIG49W107cmV0dXJuIHQuaXRlcihlLHIsZnVuY3Rpb24odCl7bi5wdXNoKHQudGV4dCl9KSxufWZ1bmN0aW9uIHluKHQsZSl7Zm9yKHZhciByPWUtdC5oZWlnaHQsbj10O247bj1uLnBhcmVudCluLmhlaWdodCs9cn1mdW5jdGlvbiBibih0KXtpZihudWxsPT10LnBhcmVudClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQscj10aShlLmxpbmVzLHQpLG49ZS5wYXJlbnQ7bjtlPW4sbj1uLnBhcmVudClmb3IodmFyIGk9MDtuLmNoaWxkcmVuW2ldIT1lOysraSlyKz1uLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpO3JldHVybiByK2UuZmlyc3R9ZnVuY3Rpb24geG4odCxlKXt2YXIgcj10LmZpcnN0O3Q6ZG97Zm9yKHZhciBuPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10LmNoaWxkcmVuW25dLGw9by5oZWlnaHQ7aWYobD5lKXt0PW87Y29udGludWUgdH1lLT1sLHIrPW8uY2h1bmtTaXplKCl9cmV0dXJuIHJ9d2hpbGUoIXQubGluZXMpO2Zvcih2YXIgbj0wLGk9dC5saW5lcy5sZW5ndGg7aT5uOysrbil7dmFyIHM9dC5saW5lc1tuXSxhPXMuaGVpZ2h0O2lmKGE+ZSlicmVhaztlLT1hfXJldHVybiByK259ZnVuY3Rpb24gQ24odCxlKXtlPUdyKHQuZG9jLGUpO2Zvcih2YXIgcj0wLG49ZS5wYXJlbnQsaT0wO2k8bi5saW5lcy5sZW5ndGg7KytpKXt2YXIgbz1uLmxpbmVzW2ldO2lmKG89PWUpYnJlYWs7cis9by5oZWlnaHR9Zm9yKHZhciBsPW4ucGFyZW50O2w7bj1sLGw9bi5wYXJlbnQpZm9yKHZhciBpPTA7aTxsLmNoaWxkcmVuLmxlbmd0aDsrK2kpe3ZhciBzPWwuY2hpbGRyZW5baV07aWYocz09bilicmVhaztyKz1zLmhlaWdodH1yZXR1cm4gcn1mdW5jdGlvbiB3bih0KXt2YXIgZT10Lm9yZGVyO3JldHVybiBudWxsPT1lJiYoZT10Lm9yZGVyPUJvKHQudGV4dCkpLGV9ZnVuY3Rpb24gTG4odCl7cmV0dXJue2RvbmU6W10sdW5kb25lOltdLHVuZG9EZXB0aDoxLzAsbGFzdFRpbWU6MCxsYXN0T3A6bnVsbCxsYXN0T3JpZ2luOm51bGwsZ2VuZXJhdGlvbjp0fHwxLG1heEdlbmVyYXRpb246dHx8MX19ZnVuY3Rpb24ga24odCxlLHIsbil7dmFyIGk9ZVsic3BhbnNfIit0LmlkXSxvPTA7dC5pdGVyKE1hdGgubWF4KHQuZmlyc3QsciksTWF0aC5taW4odC5maXJzdCt0LnNpemUsbiksZnVuY3Rpb24ocil7ci5tYXJrZWRTcGFucyYmKChpfHwoaT1lWyJzcGFuc18iK3QuaWRdPXt9KSlbb109ci5tYXJrZWRTcGFucyksKytvfSl9ZnVuY3Rpb24gU24odCxlKXt2YXIgcj17bGluZTplLmZyb20ubGluZSxjaDplLmZyb20uY2h9LG49e2Zyb206cix0bzpsbyhlKSx0ZXh0Om1uKHQsZS5mcm9tLGUudG8pfTtyZXR1cm4ga24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKSxkbih0LGZ1bmN0aW9uKHQpe2tuKHQsbixlLmZyb20ubGluZSxlLnRvLmxpbmUrMSl9LCEwKSxufWZ1bmN0aW9uIE1uKHQsZSxyLG4pe3ZhciBpPXQuaGlzdG9yeTtpLnVuZG9uZS5sZW5ndGg9MDt2YXIgbz0rbmV3IERhdGUsbD1RbihpLmRvbmUpO2lmKGwmJihpLmxhc3RPcD09bnx8aS5sYXN0T3JpZ2luPT1lLm9yaWdpbiYmZS5vcmlnaW4mJigiKyI9PWUub3JpZ2luLmNoYXJBdCgwKSYmdC5jbSYmaS5sYXN0VGltZT5vLXQuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheXx8IioiPT1lLm9yaWdpbi5jaGFyQXQoMCkpKSl7dmFyIHM9UW4obC5jaGFuZ2VzKTtqZShlLmZyb20sZS50bykmJmplKGUuZnJvbSxzLnRvKT9zLnRvPWxvKGUpOmwuY2hhbmdlcy5wdXNoKFNuKHQsZSkpLGwuYW5jaG9yQWZ0ZXI9ci5hbmNob3IsbC5oZWFkQWZ0ZXI9ci5oZWFkfWVsc2UgZm9yKGw9e2NoYW5nZXM6W1NuKHQsZSldLGdlbmVyYXRpb246aS5nZW5lcmF0aW9uLGFuY2hvckJlZm9yZTp0LnNlbC5hbmNob3IsaGVhZEJlZm9yZTp0LnNlbC5oZWFkLGFuY2hvckFmdGVyOnIuYW5jaG9yLGhlYWRBZnRlcjpyLmhlYWR9LGkuZG9uZS5wdXNoKGwpLGkuZ2VuZXJhdGlvbj0rK2kubWF4R2VuZXJhdGlvbjtpLmRvbmUubGVuZ3RoPmkudW5kb0RlcHRoOylpLmRvbmUuc2hpZnQoKTtpLmxhc3RUaW1lPW8saS5sYXN0T3A9bixpLmxhc3RPcmlnaW49ZS5vcmlnaW59ZnVuY3Rpb24gVG4odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlLHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLm1hcmtlci5leHBsaWNpdGx5Q2xlYXJlZD9lfHwoZT10LnNsaWNlKDAscikpOmUmJmUucHVzaCh0W3JdKTtyZXR1cm4gZT9lLmxlbmd0aD9lOm51bGw6dH1mdW5jdGlvbiBBbih0LGUpe3ZhciByPWVbInNwYW5zXyIrdC5pZF07aWYoIXIpcmV0dXJuIG51bGw7Zm9yKHZhciBuPTAsaT1bXTtuPGUudGV4dC5sZW5ndGg7KytuKWkucHVzaChUbihyW25dKSk7cmV0dXJuIGl9ZnVuY3Rpb24gSG4odCxlKXtmb3IodmFyIHI9MCxuPVtdO3I8dC5sZW5ndGg7KytyKXt2YXIgaT10W3JdLG89aS5jaGFuZ2VzLGw9W107bi5wdXNoKHtjaGFuZ2VzOmwsYW5jaG9yQmVmb3JlOmkuYW5jaG9yQmVmb3JlLGhlYWRCZWZvcmU6aS5oZWFkQmVmb3JlLGFuY2hvckFmdGVyOmkuYW5jaG9yQWZ0ZXIsaGVhZEFmdGVyOmkuaGVhZEFmdGVyfSk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDsrK3Mpe3ZhciBhLHU9b1tzXTtpZihsLnB1c2goe2Zyb206dS5mcm9tLHRvOnUudG8sdGV4dDp1LnRleHR9KSxlKWZvcih2YXIgYyBpbiB1KShhPWMubWF0Y2goL15zcGFuc18oXGQrKSQvKSkmJnRpKGUsTnVtYmVyKGFbMV0pKT4tMSYmKFFuKGwpW2NdPXVbY10sZGVsZXRlIHVbY10pfX1yZXR1cm4gbn1mdW5jdGlvbiBObih0LGUscixuKXtyPHQubGluZT90LmxpbmUrPW46ZTx0LmxpbmUmJih0LmxpbmU9ZSx0LmNoPTApfWZ1bmN0aW9uIERuKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXtmb3IodmFyIG89dFtpXSxsPSEwLHM9MDtzPG8uY2hhbmdlcy5sZW5ndGg7KytzKXt2YXIgYT1vLmNoYW5nZXNbc107aWYoby5jb3BpZWR8fChhLmZyb209WmUoYS5mcm9tKSxhLnRvPVplKGEudG8pKSxyPGEuZnJvbS5saW5lKWEuZnJvbS5saW5lKz1uLGEudG8ubGluZSs9bjtlbHNlIGlmKGU8PWEudG8ubGluZSl7bD0hMTticmVha319by5jb3BpZWR8fChvLmFuY2hvckJlZm9yZT1aZShvLmFuY2hvckJlZm9yZSksby5oZWFkQmVmb3JlPVplKG8uaGVhZEJlZm9yZSksby5hbmNob3JBZnRlcj1aZShvLmFuY2hvckFmdGVyKSxvLnJlYWRBZnRlcj1aZShvLmhlYWRBZnRlciksby5jb3BpZWQ9ITApLGw/KE5uKG8uYW5jaG9yQmVmb3JlKSxObihvLmhlYWRCZWZvcmUpLE5uKG8uYW5jaG9yQWZ0ZXIpLE5uKG8uaGVhZEFmdGVyKSk6KHQuc3BsaWNlKDAsaSsxKSxpPTApfX1mdW5jdGlvbiBXbih0LGUpe3ZhciByPWUuZnJvbS5saW5lLG49ZS50by5saW5lLGk9ZS50ZXh0Lmxlbmd0aC0obi1yKS0xO0RuKHQuZG9uZSxyLG4saSksRG4odC51bmRvbmUscixuLGkpfWZ1bmN0aW9uIE9uKCl7UG4odGhpcyl9ZnVuY3Rpb24gRW4odCl7cmV0dXJuIHQuc3RvcHx8KHQuc3RvcD1PbiksdH1mdW5jdGlvbiB6bih0KXt0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExfWZ1bmN0aW9uIEluKHQpe3Quc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gRm4odCl7cmV0dXJuIG51bGwhPXQuZGVmYXVsdFByZXZlbnRlZD90LmRlZmF1bHRQcmV2ZW50ZWQ6MD09dC5yZXR1cm5WYWx1ZX1mdW5jdGlvbiBQbih0KXt6bih0KSxJbih0KX1mdW5jdGlvbiBSbih0KXtyZXR1cm4gdC50YXJnZXR8fHQuc3JjRWxlbWVudH1mdW5jdGlvbiBCbih0KXt2YXIgZT10LndoaWNoO3JldHVybiBudWxsPT1lJiYoMSZ0LmJ1dHRvbj9lPTE6MiZ0LmJ1dHRvbj9lPTM6NCZ0LmJ1dHRvbiYmKGU9MikpLEtpJiZ0LmN0cmxLZXkmJjE9PWUmJihlPTMpLGV9ZnVuY3Rpb24gR24odCxlLHIpe2lmKHQuYWRkRXZlbnRMaXN0ZW5lcil0LmFkZEV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuYXR0YWNoRXZlbnQpdC5hdHRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVyc3x8KHQuX2hhbmRsZXJzPXt9KSxpPW5bZV18fChuW2VdPVtdKTtpLnB1c2gocil9fWZ1bmN0aW9uIFZuKHQsZSxyKXtpZih0LnJlbW92ZUV2ZW50TGlzdGVuZXIpdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMSk7ZWxzZSBpZih0LmRldGFjaEV2ZW50KXQuZGV0YWNoRXZlbnQoIm9uIitlLHIpO2Vsc2V7dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKCFuKXJldHVybjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoOysraSlpZihuW2ldPT1yKXtuLnNwbGljZShpLDEpO2JyZWFrfX19ZnVuY3Rpb24gS24odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYocilmb3IodmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLGk9MDtpPHIubGVuZ3RoOysraSlyW2ldLmFwcGx5KG51bGwsbil9ZnVuY3Rpb24gVW4odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxpKX19dmFyIG49dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO2lmKG4pe3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtTb3x8KCsrTW8sU289W10sc2V0VGltZW91dChfbiwwKSk7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDsrK28pU28ucHVzaChyKG5bb10pKX19ZnVuY3Rpb24gWG4odCxlLHIpe3JldHVybiBLbih0LHJ8fGUudHlwZSx0LGUpLEZuKGUpfHxlLmNvZGVtaXJyb3JJZ25vcmV9ZnVuY3Rpb24gX24oKXstLU1vO3ZhciB0PVNvO1NvPW51bGw7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2UpdFtlXSgpfWZ1bmN0aW9uIFluKHQsZSl7dmFyIHI9dC5faGFuZGxlcnMmJnQuX2hhbmRsZXJzW2VdO3JldHVybiByJiZyLmxlbmd0aD4wfWZ1bmN0aW9uIGpuKHQpe3QucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7R24odGhpcyx0LGUpfSx0LnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXtWbih0aGlzLHQsZSl9fWZ1bmN0aW9uICRuKCl7dGhpcy5pZD1udWxsfWZ1bmN0aW9uIFpuKHQsZSxyLG4saSl7bnVsbD09ZSYmKGU9dC5zZWFyY2goL1teXHNcdTAwYTBdLyksLTE9PWUmJihlPXQubGVuZ3RoKSk7Zm9yKHZhciBvPW58fDAsbD1pfHwwO2U+bzsrK28pIgkiPT10LmNoYXJBdChvKT9sKz1yLWwlcjorK2w7cmV0dXJuIGx9ZnVuY3Rpb24gcW4odCl7Zm9yKDtIby5sZW5ndGg8PXQ7KUhvLnB1c2goUW4oSG8pKyIgIik7cmV0dXJuIEhvW3RdfWZ1bmN0aW9uIFFuKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfWZ1bmN0aW9uIEpuKHQpe2lmKEdpKXQuc2VsZWN0aW9uU3RhcnQ9MCx0LnNlbGVjdGlvbkVuZD10LnZhbHVlLmxlbmd0aDtlbHNlIHRyeXt0LnNlbGVjdCgpfWNhdGNoKGUpe319ZnVuY3Rpb24gdGkodCxlKXtpZih0LmluZGV4T2YpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO24+cjsrK3IpaWYodFtyXT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBlaSh0LGUpe2Z1bmN0aW9uIHIoKXt9ci5wcm90b3R5cGU9dDt2YXIgbj1uZXcgcjtyZXR1cm4gZSYmcmkoZSxuKSxufWZ1bmN0aW9uIHJpKHQsZSl7ZXx8KGU9e30pO2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3JdPXRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIG5pKHQpe2Zvcih2YXIgZT1bXSxyPTA7dD5yOysrcillLnB1c2godm9pZCAwKTtyZXR1cm4gZX1mdW5jdGlvbiBpaSh0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gb2kodCl7cmV0dXJuL1x3Ly50ZXN0KHQpfHx0PiLCgCImJih0LnRvVXBwZXJDYXNlKCkhPXQudG9Mb3dlckNhc2UoKXx8Tm8udGVzdCh0KSl9ZnVuY3Rpb24gbGkodCl7Zm9yKHZhciBlIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzaSh0LGUscixuKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO2lmKHImJihpLmNsYXNzTmFtZT1yKSxuJiYoaS5zdHlsZS5jc3NUZXh0PW4pLCJzdHJpbmciPT10eXBlb2YgZSljaShpLGUpO2Vsc2UgaWYoZSlmb3IodmFyIG89MDtvPGUubGVuZ3RoOysrbylpLmFwcGVuZENoaWxkKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGFpKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMubGVuZ3RoO2U+MDstLWUpdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3JldHVybiB0fWZ1bmN0aW9uIHVpKHQsZSl7cmV0dXJuIGFpKHQpLmFwcGVuZENoaWxkKGUpfWZ1bmN0aW9uIGNpKHQsZSl7Tmk/KHQuaW5uZXJIVE1MPSIiLHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpKTp0LnRleHRDb250ZW50PWV9ZnVuY3Rpb24gZmkodCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4hMX1mdW5jdGlvbiBkaSh0KXtpZihudWxsIT1PbylyZXR1cm4gT287dmFyIGU9c2koImRpdiIsbnVsbCxudWxsLCJ3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxvdy14OiBzY3JvbGwiKTtyZXR1cm4gdWkodCxlKSxlLm9mZnNldFdpZHRoJiYoT289ZS5vZmZzZXRIZWlnaHQtZS5jbGllbnRIZWlnaHQpLE9vfHwwfWZ1bmN0aW9uIHBpKHQpe2lmKG51bGw9PUVvKXt2YXIgZT1zaSgic3BhbiIsIuKAiyIpO3VpKHQsc2koInNwYW4iLFtlLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IildKSksMCE9dC5maXJzdENoaWxkLm9mZnNldEhlaWdodCYmKEVvPWUub2Zmc2V0V2lkdGg8PTEmJmUub2Zmc2V0SGVpZ2h0PjImJiFIaSl9cmV0dXJuIEVvP3NpKCJzcGFuIiwi4oCLIik6c2koInNwYW4iLCLCoCIsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgiKX1mdW5jdGlvbiBnaSh0LGUscixuKXtpZighdClyZXR1cm4gbihlLHIsImx0ciIpO2Zvcih2YXIgaT0hMSxvPTA7bzx0Lmxlbmd0aDsrK28pe3ZhciBsPXRbb107KGwuZnJvbTxyJiZsLnRvPmV8fGU9PXImJmwudG89PWUpJiYobihNYXRoLm1heChsLmZyb20sZSksTWF0aC5taW4obC50byxyKSwxPT1sLmxldmVsPyJydGwiOiJsdHIiKSxpPSEwKX1pfHxuKGUsciwibHRyIil9ZnVuY3Rpb24gbWkodCl7cmV0dXJuIHQubGV2ZWwlMj90LnRvOnQuZnJvbX1mdW5jdGlvbiB2aSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QuZnJvbTp0LnRvfWZ1bmN0aW9uIHlpKHQpe3ZhciBlPXduKHQpO3JldHVybiBlP21pKGVbMF0pOjB9ZnVuY3Rpb24gYmkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/dmkoUW4oZSkpOnQudGV4dC5sZW5ndGh9ZnVuY3Rpb24geGkodCxlKXt2YXIgcj1nbih0LmRvYyxlKSxuPUdyKHQuZG9jLHIpO24hPXImJihlPWJuKG4pKTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP2JpKG4pOnlpKG4pOjA7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gQ2kodCxlKXtmb3IodmFyIHIsbjtyPUJyKG49Z24odC5kb2MsZSkpOyllPXIuZmluZCgpLnRvLmxpbmU7dmFyIGk9d24obiksbz1pP2lbMF0ubGV2ZWwlMj95aShuKTpiaShuKTpuLnRleHQubGVuZ3RoO3JldHVybiBZZShlLG8pfWZ1bmN0aW9uIHdpKHQsZSxyKXt2YXIgbj10WzBdLmxldmVsO3JldHVybiBlPT1uPyEwOnI9PW4/ITE6cj5lfWZ1bmN0aW9uIExpKHQsZSl7Zm9yKHZhciByLG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXTtpZihpLmZyb208ZSYmaS50bz5lKXJldHVybiBSbz1udWxsLG47aWYoaS5mcm9tPT1lfHxpLnRvPT1lKXtpZihudWxsIT1yKXJldHVybiB3aSh0LGkubGV2ZWwsdFtyXS5sZXZlbCk/KFJvPXIsbik6KFJvPW4scik7cj1ufX1yZXR1cm4gUm89bnVsbCxyfWZ1bmN0aW9uIGtpKHQsZSxyLG4pe2lmKCFuKXJldHVybiBlK3I7ZG8gZSs9cjt3aGlsZShlPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChlKSkpO3JldHVybiBlfWZ1bmN0aW9uIFNpKHQsZSxyLG4pe3ZhciBpPXduKHQpO2lmKCFpKXJldHVybiBNaSh0LGUscixuKTtmb3IodmFyIG89TGkoaSxlKSxsPWlbb10scz1raSh0LGUsbC5sZXZlbCUyPy1yOnIsbik7Oyl7aWYocz5sLmZyb20mJnM8bC50bylyZXR1cm4gcztpZihzPT1sLmZyb218fHM9PWwudG8pcmV0dXJuIExpKGkscyk9PW8/czoobD1pW28rPXJdLHI+MD09bC5sZXZlbCUyP2wudG86bC5mcm9tKTtpZihsPWlbbys9cl0sIWwpcmV0dXJuIG51bGw7cz1yPjA9PWwubGV2ZWwlMj9raSh0LGwudG8sLTEsbik6a2kodCxsLmZyb20sMSxuKX19ZnVuY3Rpb24gTWkodCxlLHIsbil7dmFyIGk9ZStyO2lmKG4pZm9yKDtpPjAmJkRvLnRlc3QodC50ZXh0LmNoYXJBdChpKSk7KWkrPXI7cmV0dXJuIDA+aXx8aT50LnRleHQubGVuZ3RoP251bGw6aX12YXIgVGk9L2dlY2tvXC9cZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQWk9L01TSUUgXGQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSGk9QWkmJihudWxsPT1kb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw4KSxOaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDkpLERpPS9UcmlkZW50XC8oWzctOV18XGR7Mix9KVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFdpPS9XZWJLaXRcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxPaT1XaSYmL1F0XC9cZCtcLlxkKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxFaT0vQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksemk9L09wZXJhXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSWk9L0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLEZpPS9LSFRNTFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFBpPS9NYWMgT1MgWCAxXGRcRChbNy05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFJpPS9NYWMgT1MgWCAxXGRcRChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEJpPS9QaGFudG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksR2k9L0FwcGxlV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvTW9iaWxlXC9cdysvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksVmk9R2l8fC9BbmRyb2lkfHdlYk9TfEJsYWNrQmVycnl8T3BlcmEgTWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxLaT1HaXx8L01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFVpPS93aW4vaS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksWGk9emkmJm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cLyhcZCpcLlxkKikvKTtYaSYmKFhpPU51bWJlcihYaVsxXSkpLFhpJiZYaT49MTUmJih6aT0hMSxXaT0hMCk7dmFyIF9pLFlpLGppLCRpPUtpJiYoT2l8fHppJiYobnVsbD09WGl8fDEyLjExPlhpKSksWmk9VGl8fEFpJiYhTmkscWk9ITEsUWk9ITEsSmk9MCx0bz0wLGVvPTAscm89bnVsbDtBaT9ybz0tLjUzOlRpP3JvPTE1OkVpP3JvPS0uNzpJaSYmKHJvPS0xLzMpO3ZhciBubyxpbyxvbz1udWxsLGxvPXQuY2hhbmdlRW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQ/WWUodC5mcm9tLmxpbmUrdC50ZXh0Lmxlbmd0aC0xLFFuKHQudGV4dCkubGVuZ3RoKygxPT10LnRleHQubGVuZ3RoP3QuZnJvbS5jaDowKSk6dC50b307dC5Qb3M9WWUsdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsZm9jdXM6ZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKSxwZSh0aGlzKSxmZSh0aGlzKX0sc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHRpb25zLG49clt0XTsoclt0XSE9ZXx8Im1vZGUiPT10KSYmKHJbdF09ZSxzby5oYXNPd25Qcm9wZXJ0eSh0KSYmbGUodGhpcyxzb1t0XSkodGhpcyxlLG4pKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnNbdF19LGdldERvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY30sYWRkS2V5TWFwOmZ1bmN0aW9uKHQsZSl7dGhpcy5zdGF0ZS5rZXlNYXBzW2U/InB1c2giOiJ1bnNoaWZ0Il0odCl9LHJlbW92ZUtleU1hcDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zdGF0ZS5rZXlNYXBzLHI9MDtyPGUubGVuZ3RoOysrcilpZihlW3JdPT10fHwic3RyaW5nIiE9dHlwZW9mIGVbcl0mJmVbcl0ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSwhMH0sYWRkT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKGUscil7dmFyIG49ZS50b2tlbj9lOnQuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsZSk7aWYobi5zdGFydFN0YXRlKXRocm93IG5ldyBFcnJvcigiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC4iKTt0aGlzLnN0YXRlLm92ZXJsYXlzLnB1c2goe21vZGU6bixtb2RlU3BlYzplLG9wYXF1ZTpyJiZyLm9wYXF1ZX0pLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpfSkscmVtb3ZlT3ZlcmxheTpsZShudWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLm92ZXJsYXlzLHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG49ZVtyXS5tb2RlU3BlYztpZihuPT10fHwic3RyaW5nIj09dHlwZW9mIHQmJm4ubmFtZT09dClyZXR1cm4gZS5zcGxpY2UociwxKSx0aGlzLnN0YXRlLm1vZGVHZW4rKyx1ZSh0aGlzKSx2b2lkIDB9fSksaW5kZW50TGluZTpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXsic3RyaW5nIiE9dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZSYmKGU9bnVsbD09ZT90aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQ/InNtYXJ0IjoicHJldiI6ZT8iYWRkIjoic3VidHJhY3QiKSx0cih0aGlzLmRvYyx0KSYmaHIodGhpcyx0LGUscil9KSxpbmRlbnRTZWxlY3Rpb246bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRvYy5zZWw7aWYoamUoZS5mcm9tLGUudG8pKXJldHVybiBocih0aGlzLGUuZnJvbS5saW5lLHQpO2Zvcih2YXIgcj1lLnRvLmxpbmUtKGUudG8uY2g/MDoxKSxuPWUuZnJvbS5saW5lO3I+PW47KytuKWhyKHRoaXMsbix0KX0pLGdldFRva2VuQXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYzt0PVFlKHIsdCk7Zm9yKHZhciBuPXoodGhpcyx0LmxpbmUsZSksaT10aGlzLmRvYy5tb2RlLG89Z24ocix0LmxpbmUpLGw9bmV3IFNyKG8udGV4dCx0aGlzLm9wdGlvbnMudGFiU2l6ZSk7bC5wb3M8dC5jaCYmIWwuZW9sKCk7KXtsLnN0YXJ0PWwucG9zO3ZhciBzPWkudG9rZW4obCxuKX1yZXR1cm57c3RhcnQ6bC5zdGFydCxlbmQ6bC5wb3Msc3RyaW5nOmwuY3VycmVudCgpLGNsYXNzTmFtZTpzfHxudWxsLHR5cGU6c3x8bnVsbCxzdGF0ZTpufX0sZ2V0VG9rZW5UeXBlQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLmRvYyx0KTt2YXIgZT1Kcih0aGlzLGduKHRoaXMuZG9jLHQubGluZSkpLHI9MCxuPShlLmxlbmd0aC0xKS8yLGk9dC5jaDtpZigwPT1pKXJldHVybiBlWzJdO2Zvcig7Oyl7dmFyIG89cituPj4xO2lmKChvP2VbMipvLTFdOjApPj1pKW49bztlbHNle2lmKCEoZVsyKm8rMV08aSkpcmV0dXJuIGVbMipvKzJdO3I9bysxfX19LGdldE1vZGVBdDpmdW5jdGlvbihlKXt2YXIgcj10aGlzLmRvYy5tb2RlO3JldHVybiByLmlubmVyTW9kZT90LmlubmVyTW9kZShyLHRoaXMuZ2V0VG9rZW5BdChlKS5zdGF0ZSkubW9kZTpyfSxnZXRIZWxwZXI6ZnVuY3Rpb24odCxlKXtpZihnby5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHI9Z29bZV0sbj10aGlzLmdldE1vZGVBdCh0KTtyZXR1cm4gbltlXSYmcltuW2VdXXx8bi5oZWxwZXJUeXBlJiZyW24uaGVscGVyVHlwZV18fHJbbi5uYW1lXX19LGdldFN0YXRlQWZ0ZXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYztyZXR1cm4gdD1xZShyLG51bGw9PXQ/ci5maXJzdCtyLnNpemUtMTp0KSx6KHRoaXMsdCsxLGUpfSxjdXJzb3JDb29yZHM6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyZXR1cm4gcj1udWxsPT10P24uaGVhZDoib2JqZWN0Ij09dHlwZW9mIHQ/UWUodGhpcy5kb2MsdCk6dD9uLmZyb206bi50byxRKHRoaXMscixlfHwicGFnZSIpfSxjaGFyQ29vcmRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHEodGhpcyxRZSh0aGlzLmRvYyx0KSxlfHwicGFnZSIpfSxjb29yZHNDaGFyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHQsZXx8InBhZ2UiKSx0ZSh0aGlzLHQubGVmdCx0LnRvcCl9LGxpbmVBdEhlaWdodDpmdW5jdGlvbih0LGUpe3JldHVybiB0PVoodGhpcyx7dG9wOnQsbGVmdDowfSxlfHwicGFnZSIpLnRvcCx4bih0aGlzLmRvYyx0K3RoaXMuZGlzcGxheS52aWV3T2Zmc2V0KX0saGVpZ2h0QXRMaW5lOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ITEsbj10aGlzLmRvYy5maXJzdCt0aGlzLmRvYy5zaXplLTE7dDx0aGlzLmRvYy5maXJzdD90PXRoaXMuZG9jLmZpcnN0OnQ+biYmKHQ9bixyPSEwKTt2YXIgaT1nbih0aGlzLmRvYyx0KTtyZXR1cm4gJCh0aGlzLGduKHRoaXMuZG9jLHQpLHt0b3A6MCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wKyhyP2kuaGVpZ2h0OjApfSxkZWZhdWx0VGV4dEhlaWdodDpmdW5jdGlvbigpe3JldHVybiByZSh0aGlzLmRpc3BsYXkpfSxkZWZhdWx0Q2hhcldpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5lKHRoaXMuZGlzcGxheSl9LHNldEd1dHRlck1hcmtlcjpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ3V0dGVyTWFya2Vyc3x8KHQuZ3V0dGVyTWFya2Vycz17fSk7cmV0dXJuIG5bZV09ciwhciYmbGkobikmJih0Lmd1dHRlck1hcmtlcnM9bnVsbCksITB9KX0pLGNsZWFyR3V0dGVyOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZG9jLG49ci5maXJzdDtyLml0ZXIoZnVuY3Rpb24ocil7ci5ndXR0ZXJNYXJrZXJzJiZyLmd1dHRlck1hcmtlcnNbdF0mJihyLmd1dHRlck1hcmtlcnNbdF09bnVsbCx1ZShlLG4sbisxKSxsaShyLmd1dHRlck1hcmtlcnMpJiYoci5ndXR0ZXJNYXJrZXJzPW51bGwpKSwrK259KX0pLGFkZExpbmVDbGFzczpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZHIodGhpcyx0LGZ1bmN0aW9uKHQpe3ZhciBuPSJ0ZXh0Ij09ZT8idGV4dENsYXNzIjoiYmFja2dyb3VuZCI9PWU/ImJnQ2xhc3MiOiJ3cmFwQ2xhc3MiO2lmKHRbbl0pe2lmKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIrcisiKD86JHxcXHMpIikudGVzdCh0W25dKSlyZXR1cm4hMTt0W25dKz0iICIrcn1lbHNlIHRbbl09cjtyZXR1cm4hMH0pfSkscmVtb3ZlTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyIsaT10W25dO2lmKCFpKXJldHVybiExO2lmKG51bGw9PXIpdFtuXT1udWxsO2Vsc2V7dmFyIG89aS5tYXRjaChuZXcgUmVnRXhwKCIoPzpefFxccyspIityKyIoPzokfFxccyspIikpO2lmKCFvKXJldHVybiExO3ZhciBsPW8uaW5kZXgrb1swXS5sZW5ndGg7dFtuXT1pLnNsaWNlKDAsby5pbmRleCkrKG8uaW5kZXgmJmwhPWkubGVuZ3RoPyIgIjoiIikraS5zbGljZShsKXx8bnVsbH1yZXR1cm4hMH0pfSksYWRkTGluZVdpZGdldDpsZShudWxsLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4ganIodGhpcyx0LGUscil9KSxyZW1vdmVMaW5lV2lkZ2V0OmZ1bmN0aW9uKHQpe3QuY2xlYXIoKX0sbGluZUluZm86ZnVuY3Rpb24odCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpZighdHIodGhpcy5kb2MsdCkpcmV0dXJuIG51bGw7dmFyIGU9dDtpZih0PWduKHRoaXMuZG9jLHQpLCF0KXJldHVybiBudWxsfWVsc2V7dmFyIGU9Ym4odCk7aWYobnVsbD09ZSlyZXR1cm4gbnVsbH1yZXR1cm57bGluZTplLGhhbmRsZTp0LHRleHQ6dC50ZXh0LGd1dHRlck1hcmtlcnM6dC5ndXR0ZXJNYXJrZXJzLHRleHRDbGFzczp0LnRleHRDbGFzcyxiZ0NsYXNzOnQuYmdDbGFzcyx3cmFwQ2xhc3M6dC53cmFwQ2xhc3Msd2lkZ2V0czp0LndpZGdldHN9fSxnZXRWaWV3cG9ydDpmdW5jdGlvbigpe3JldHVybntmcm9tOnRoaXMuZGlzcGxheS5zaG93aW5nRnJvbSx0bzp0aGlzLmRpc3BsYXkuc2hvd2luZ1RvfX0sYWRkV2lkZ2V0OmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89dGhpcy5kaXNwbGF5O3Q9USh0aGlzLFFlKHRoaXMuZG9jLHQpKTt2YXIgbD10LmJvdHRvbSxzPXQubGVmdDtpZihlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zaXplci5hcHBlbmRDaGlsZChlKSwib3ZlciI9PW4pbD10LnRvcDtlbHNlIGlmKCJhYm92ZSI9PW58fCJuZWFyIj09bil7dmFyIGE9TWF0aC5tYXgoby53cmFwcGVyLmNsaWVudEhlaWdodCx0aGlzLmRvYy5oZWlnaHQpLHU9TWF0aC5tYXgoby5zaXplci5jbGllbnRXaWR0aCxvLmxpbmVTcGFjZS5jbGllbnRXaWR0aCk7KCJhYm92ZSI9PW58fHQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PmEpJiZ0LnRvcD5lLm9mZnNldEhlaWdodD9sPXQudG9wLWUub2Zmc2V0SGVpZ2h0OnQuYm90dG9tK2Uub2Zmc2V0SGVpZ2h0PD1hJiYobD10LmJvdHRvbSkscytlLm9mZnNldFdpZHRoPnUmJihzPXUtZS5vZmZzZXRXaWR0aCl9ZS5zdHlsZS50b3A9bCsicHgiLGUuc3R5bGUubGVmdD1lLnN0eWxlLnJpZ2h0PSIiLCJyaWdodCI9PWk/KHM9by5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoLGUuc3R5bGUucmlnaHQ9IjBweCIpOigibGVmdCI9PWk/cz0wOiJtaWRkbGUiPT1pJiYocz0oby5zaXplci5jbGllbnRXaWR0aC1lLm9mZnNldFdpZHRoKS8yKSxlLnN0eWxlLmxlZnQ9cysicHgiKSxyJiZhcih0aGlzLHMsbCxzK2Uub2Zmc2V0V2lkdGgsbCtlLm9mZnNldEhlaWdodCl9LHRyaWdnZXJPbktleURvd246bGUobnVsbCxXZSksZXhlY0NvbW1hbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG1vW3RdKHRoaXMpfSxmaW5kUG9zSDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBvPTAsbD1RZSh0aGlzLmRvYyx0KTtlPm8mJihsPXByKHRoaXMuZG9jLGwsaSxyLG4pLCFsLmhpdFNpZGUpOysrbyk7cmV0dXJuIGx9LG1vdmVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMuZG9jLnNlbDtyPW4uc2hpZnR8fG4uZXh0ZW5kfHxqZShuLmZyb20sbi50byk/cHIodGhpcy5kb2Msbi5oZWFkLHQsZSx0aGlzLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KTowPnQ/bi5mcm9tOm4udG8sZXIodGhpcy5kb2MscixyLHQpfSksZGVsZXRlSDpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsO2plKHIuZnJvbSxyLnRvKT9fZSh0aGlzLmRvYywiIixyLmZyb20scHIodGhpcy5kb2Msci5oZWFkLHQsZSwhMSksIitkZWxldGUiKTpfZSh0aGlzLmRvYywiIixyLmZyb20sci50bywiK2RlbGV0ZSIpLHRoaXMuY3VyT3AudXNlclNlbENoYW5nZT0hMH0pLGZpbmRQb3NWOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTEsbz1uOzA+ZSYmKGk9LTEsZT0tZSk7Zm9yKHZhciBsPTAscz1RZSh0aGlzLmRvYyx0KTtlPmw7KytsKXt2YXIgYT1RKHRoaXMscywiZGl2Iik7aWYobnVsbD09bz9vPWEubGVmdDphLmxlZnQ9byxzPWdyKHRoaXMsYSxpLHIpLHMuaGl0U2lkZSlicmVha31yZXR1cm4gc30sbW92ZVY6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jLnNlbCxuPVEodGhpcyxyLmhlYWQsImRpdiIpO251bGwhPXIuZ29hbENvbHVtbiYmKG4ubGVmdD1yLmdvYWxDb2x1bW4pO3ZhciBpPWdyKHRoaXMsbix0LGUpOyJwYWdlIj09ZSYmZnIodGhpcywwLHEodGhpcyxpLCJkaXYiKS50b3Atbi50b3ApLGVyKHRoaXMuZG9jLGksaSx0KSxyLmdvYWxDb2x1bW49bi5sZWZ0fSksdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpeyhudWxsPT10fHx0IT10aGlzLnN0YXRlLm92ZXJ3cml0ZSkmJigodGhpcy5zdGF0ZS5vdmVyd3JpdGU9IXRoaXMuc3RhdGUub3ZlcndyaXRlKT90aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZSs9IiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI6dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWU9dGhpcy5kaXNwbGF5LmN1cnNvci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3Itb3ZlcndyaXRlIiwiIikpfSxoYXNGb2N1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlLmZvY3VzZWR9LHNjcm9sbFRvOmxlKG51bGwsZnVuY3Rpb24odCxlKXtjcih0aGlzLHQsZSl9KSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kaXNwbGF5LnNjcm9sbGVyLGU9VG87cmV0dXJue2xlZnQ6dC5zY3JvbGxMZWZ0LHRvcDp0LnNjcm9sbFRvcCxoZWlnaHQ6dC5zY3JvbGxIZWlnaHQtZSx3aWR0aDp0LnNjcm9sbFdpZHRoLWUsY2xpZW50SGVpZ2h0OnQuY2xpZW50SGVpZ2h0LWUsY2xpZW50V2lkdGg6dC5jbGllbnRXaWR0aC1lfX0sc2Nyb2xsSW50b1ZpZXc6bGUobnVsbCxmdW5jdGlvbih0LGUpe251bGw9PXQ/dD17ZnJvbTp0aGlzLmRvYy5zZWwuaGVhZCx0bzpudWxsfToibnVtYmVyIj09dHlwZW9mIHQ/dD17ZnJvbTpZZSh0LDApLHRvOm51bGx9Om51bGw9PXQuZnJvbSYmKHQ9e2Zyb206dCx0bzpudWxsfSksdC50b3x8KHQudG89dC5mcm9tKSxlfHwoZT0wKTt2YXIgcj10O251bGwhPXQuZnJvbS5saW5lJiYodGhpcy5jdXJPcC5zY3JvbGxUb1Bvcz17ZnJvbTp0LmZyb20sdG86dC50byxtYXJnaW46ZX0scj17ZnJvbTpRKHRoaXMsdC5mcm9tKSx0bzpRKHRoaXMsdC50byl9KTt2YXIgbj11cih0aGlzLE1hdGgubWluKHIuZnJvbS5sZWZ0LHIudG8ubGVmdCksTWF0aC5taW4oci5mcm9tLnRvcCxyLnRvLnRvcCktZSxNYXRoLm1heChyLmZyb20ucmlnaHQsci50by5yaWdodCksTWF0aC5tYXgoci5mcm9tLmJvdHRvbSxyLnRvLmJvdHRvbSkrZSk7Y3IodGhpcyxuLnNjcm9sbExlZnQsbi5zY3JvbGxUb3ApfSksc2V0U2l6ZTpsZShudWxsLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fC9eXGQrJC8udGVzdChTdHJpbmcodCkpP3QrInB4Ijp0fW51bGwhPXQmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aD1yKHQpKSxudWxsIT1lJiYodGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0PXIoZSkpLHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dGhpcy5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCksdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZT0hMH0pLG9wZXJhdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gYWUodGhpcyx0KX0scmVmcmVzaDpsZShudWxsLGZ1bmN0aW9uKCl7dmFyIHQ9bnVsbD09dGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7Xyh0aGlzKSxjcih0aGlzLHRoaXMuZG9jLnNjcm9sbExlZnQsdGhpcy5kb2Muc2Nyb2xsVG9wKSx1ZSh0aGlzKSx0JiZvKHRoaXMpfSksc3dhcERvYzpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jO3JldHVybiBlLmNtPW51bGwscG4odGhpcyx0KSxfKHRoaXMpLGRlKHRoaXMsITApLGNyKHRoaXMsdC5zY3JvbGxMZWZ0LHQuc2Nyb2xsVG9wKSxVbih0aGlzLCJzd2FwRG9jIix0aGlzLGUpLGV9KSxnZXRJbnB1dEZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dH0sZ2V0V3JhcHBlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXJ9LGdldFNjcm9sbGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXJ9LGdldEd1dHRlckVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmd1dHRlcnN9fSxqbih0KTt2YXIgc289dC5vcHRpb25IYW5kbGVycz17fSxhbz10LmRlZmF1bHRzPXt9LHVvPXQuSW5pdD17dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ29kZU1pcnJvci5Jbml0In19O3lyKCJ2YWx1ZSIsIiIsZnVuY3Rpb24odCxlKXt0LnNldFZhbHVlKGUpfSwhMCkseXIoIm1vZGUiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRvYy5tb2RlT3B0aW9uPWUscih0KX0sITApLHlyKCJpbmRlbnRVbml0IiwyLHIsITApLHlyKCJpbmRlbnRXaXRoVGFicyIsITEpLHlyKCJzbWFydEluZGVudCIsITApLHlyKCJ0YWJTaXplIiw0LGZ1bmN0aW9uKHQpe3IodCksXyh0KSx1ZSh0KX0sITApLHlyKCJzcGVjaWFsQ2hhcnMiLC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVmZWZmXS9nLGZ1bmN0aW9uKHQsZSl7dC5vcHRpb25zLnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKGUuc291cmNlKyhlLnRlc3QoIgkiKT8iIjoifAkiKSwiZyIpLHQucmVmcmVzaCgpfSwhMCkseXIoInNwZWNpYWxDaGFyUGxhY2Vob2xkZXIiLG5uLGZ1bmN0aW9uKHQpe3QucmVmcmVzaCgpfSwhMCkseXIoImVsZWN0cmljQ2hhcnMiLCEwKSx5cigicnRsTW92ZVZpc3VhbGx5IiwhVWkpLHlyKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCEwKSx5cigidGhlbWUiLCJkZWZhdWx0IixmdW5jdGlvbih0KXtzKHQpLGEodCl9LCEwKSx5cigia2V5TWFwIiwiZGVmYXVsdCIsbCkseXIoImV4dHJhS2V5cyIsbnVsbCkseXIoIm9uS2V5RXZlbnQiLG51bGwpLHlyKCJvbkRyYWdFdmVudCIsbnVsbCkseXIoImxpbmVXcmFwcGluZyIsITEsbiwhMCkseXIoImd1dHRlcnMiLFtdLGZ1bmN0aW9uKHQpe2godC5vcHRpb25zKSxhKHQpfSwhMCkseXIoImZpeGVkR3V0dGVyIiwhMCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQ9ZT95KHQuZGlzcGxheSkrInB4IjoiMCIsdC5yZWZyZXNoKCl9LCEwKSx5cigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIiLCExLGQsITApLHlyKCJsaW5lTnVtYmVycyIsITEsZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZmlyc3RMaW5lTnVtYmVyIiwxLGEsITApLHlyKCJsaW5lTnVtYmVyRm9ybWF0dGVyIixmdW5jdGlvbih0KXtyZXR1cm4gdH0sYSwhMCkseXIoInNob3dDdXJzb3JXaGVuU2VsZWN0aW5nIiwhMSxBLCEwKSx5cigicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51IiwhMCkseXIoInJlYWRPbmx5IiwhMSxmdW5jdGlvbih0LGUpeyJub2N1cnNvciI9PWU/KHplKHQpLHQuZGlzcGxheS5pbnB1dC5ibHVyKCksdC5kaXNwbGF5LmRpc2FibGVkPSEwKToodC5kaXNwbGF5LmRpc2FibGVkPSExLGV8fGRlKHQsITApKX0pLHlyKCJkcmFnRHJvcCIsITApLHlyKCJjdXJzb3JCbGlua1JhdGUiLDUzMCkseXIoImN1cnNvclNjcm9sbE1hcmdpbiIsMCkseXIoImN1cnNvckhlaWdodCIsMSkseXIoIndvcmtUaW1lIiwxMDApLHlyKCJ3b3JrRGVsYXkiLDEwMCkseXIoImZsYXR0ZW5TcGFucyIsITApLHlyKCJwb2xsSW50ZXJ2YWwiLDEwMCkseXIoInVuZG9EZXB0aCIsNDAsZnVuY3Rpb24odCxlKXt0LmRvYy5oaXN0b3J5LnVuZG9EZXB0aD1lfSkseXIoImhpc3RvcnlFdmVudERlbGF5Iiw1MDApLHlyKCJ2aWV3cG9ydE1hcmdpbiIsMTAsZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigibWF4SGlnaGxpZ2h0TGVuZ3RoIiwxZTQsZnVuY3Rpb24odCl7cih0KSx0LnJlZnJlc2goKX0sITApLHlyKCJjcnVkZU1lYXN1cmluZ0Zyb20iLDFlNCkseXIoIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCEwLGZ1bmN0aW9uKHQsZSl7ZXx8KHQuZGlzcGxheS5pbnB1dERpdi5zdHlsZS50b3A9dC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLmxlZnQ9MCl9KSx5cigidGFiaW5kZXgiLG51bGwsZnVuY3Rpb24odCxlKXt0LmRpc3BsYXkuaW5wdXQudGFiSW5kZXg9ZXx8IiJ9KSx5cigiYXV0b2ZvY3VzIixudWxsKTt2YXIgY289dC5tb2Rlcz17fSxmbz10Lm1pbWVNb2Rlcz17fTt0LmRlZmluZU1vZGU9ZnVuY3Rpb24oZSxyKXtpZih0LmRlZmF1bHRzLm1vZGV8fCJudWxsIj09ZXx8KHQuZGVmYXVsdHMubW9kZT1lKSxhcmd1bWVudHMubGVuZ3RoPjIpe3IuZGVwZW5kZW5jaWVzPVtdO2Zvcih2YXIgbj0yO248YXJndW1lbnRzLmxlbmd0aDsrK24pci5kZXBlbmRlbmNpZXMucHVzaChhcmd1bWVudHNbbl0pfWNvW2VdPXJ9LHQuZGVmaW5lTUlNRT1mdW5jdGlvbih0LGUpe2ZvW3RdPWV9LHQucmVzb2x2ZU1vZGU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiZmby5oYXNPd25Qcm9wZXJ0eShlKSllPWZvW2VdO2Vsc2UgaWYoZSYmInN0cmluZyI9PXR5cGVvZiBlLm5hbWUmJmZvLmhhc093blByb3BlcnR5KGUubmFtZSkpe3ZhciByPWZvW2UubmFtZV07ZT1laShyLGUpLGUubmFtZT1yLm5hbWV9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUmJi9eW1x3XC1dK1wvW1x3XC1dK1wreG1sJC8udGVzdChlKSlyZXR1cm4gdC5yZXNvbHZlTW9kZSgiYXBwbGljYXRpb24veG1sIik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3tuYW1lOmV9OmV8fHtuYW1lOiJudWxsIn19LHQuZ2V0TW9kZT1mdW5jdGlvbihlLHIpe3ZhciByPXQucmVzb2x2ZU1vZGUociksbj1jb1tyLm5hbWVdO2lmKCFuKXJldHVybiB0LmdldE1vZGUoZSwidGV4dC9wbGFpbiIpO3ZhciBpPW4oZSxyKTtpZihoby5oYXNPd25Qcm9wZXJ0eShyLm5hbWUpKXt2YXIgbz1ob1tyLm5hbWVdO2Zvcih2YXIgbCBpbiBvKW8uaGFzT3duUHJvcGVydHkobCkmJihpLmhhc093blByb3BlcnR5KGwpJiYoaVsiXyIrbF09aVtsXSksaVtsXT1vW2xdKX1yZXR1cm4gaS5uYW1lPXIubmFtZSxpfSx0LmRlZmluZU1vZGUoIm51bGwiLGZ1bmN0aW9uKCl7cmV0dXJue3Rva2VuOmZ1bmN0aW9uKHQpe3Quc2tpcFRvRW5kKCl9fX0pLHQuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsIm51bGwiKTt2YXIgaG89dC5tb2RlRXh0ZW5zaW9ucz17fTt0LmV4dGVuZE1vZGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1oby5oYXNPd25Qcm9wZXJ0eSh0KT9ob1t0XTpob1t0XT17fTtyaShlLHIpfSx0LmRlZmluZUV4dGVuc2lvbj1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlW2VdPXJ9LHQuZGVmaW5lRG9jRXh0ZW5zaW9uPWZ1bmN0aW9uKHQsZSl7d28ucHJvdG90eXBlW3RdPWV9LHQuZGVmaW5lT3B0aW9uPXlyO3ZhciBwbz1bXTt0LmRlZmluZUluaXRIb29rPWZ1bmN0aW9uKHQpe3BvLnB1c2godCl9O3ZhciBnbz10LmhlbHBlcnM9e307dC5yZWdpc3RlckhlbHBlcj1mdW5jdGlvbihlLHIsbil7Z28uaGFzT3duUHJvcGVydHkoZSl8fChnb1tlXT10W2VdPXt9KSxnb1tlXVtyXT1ufSx0LmlzV29yZENoYXI9b2ksdC5jb3B5U3RhdGU9YnIsdC5zdGFydFN0YXRlPXhyLHQuaW5uZXJNb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKDt0LmlubmVyTW9kZTspe3ZhciByPXQuaW5uZXJNb2RlKGUpO2lmKCFyfHxyLm1vZGU9PXQpYnJlYWs7ZT1yLnN0YXRlLHQ9ci5tb2RlfXJldHVybiByfHx7bW9kZTp0LHN0YXRlOmV9fTt2YXIgbW89dC5jb21tYW5kcz17c2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3Quc2V0U2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCksWWUodC5sYXN0TGluZSgpKSl9LGtpbGxMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCEwKSxyPXQuZ2V0Q3Vyc29yKCExKSxuPSFqZShlLHIpO258fHQuZ2V0TGluZShlLmxpbmUpLmxlbmd0aCE9ZS5jaD90LnJlcGxhY2VSYW5nZSgiIixlLG4/cjpZZShlLmxpbmUpLCIrZGVsZXRlIik6dC5yZXBsYWNlUmFuZ2UoIiIsZSxZZShlLmxpbmUrMSwwKSwiK2RlbGV0ZSIpfSxkZWxldGVMaW5lOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkubGluZTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLDApLFllKGUpLCIrZGVsZXRlIil9LGRlbExpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCk7dC5yZXBsYWNlUmFuZ2UoIiIsWWUoZS5saW5lLDApLGUsIitkZWxldGUiKX0sdW5kbzpmdW5jdGlvbih0KXt0LnVuZG8oKX0scmVkbzpmdW5jdGlvbih0KXt0LnJlZG8oKX0sZ29Eb2NTdGFydDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0LmZpcnN0TGluZSgpLDApKX0sZ29Eb2NFbmQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oWWUodC5sYXN0TGluZSgpKSl9LGdvTGluZVN0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKHhpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVN0YXJ0U21hcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXhpKHQsZS5saW5lKSxuPXQuZ2V0TGluZUhhbmRsZShyLmxpbmUpLGk9d24obik7aWYoaSYmMCE9aVswXS5sZXZlbCl0LmV4dGVuZFNlbGVjdGlvbihyKTtlbHNle3ZhciBvPU1hdGgubWF4KDAsbi50ZXh0LnNlYXJjaCgvXFMvKSksbD1lLmxpbmU9PXIubGluZSYmZS5jaDw9byYmZS5jaDt0LmV4dGVuZFNlbGVjdGlvbihZZShyLmxpbmUsbD8wOm8pKX19LGdvTGluZUVuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihDaSh0LHQuZ2V0Q3Vyc29yKCkubGluZSkpfSxnb0xpbmVSaWdodDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OnQuZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoKzEwMCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lTGVmdDpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb29yZHModC5nZXRDdXJzb3IoKSwiZGl2IikudG9wKzU7dC5leHRlbmRTZWxlY3Rpb24odC5jb29yZHNDaGFyKHtsZWZ0OjAsdG9wOmV9LCJkaXYiKSl9LGdvTGluZVVwOmZ1bmN0aW9uKHQpe3QubW92ZVYoLTEsImxpbmUiKX0sZ29MaW5lRG93bjpmdW5jdGlvbih0KXt0Lm1vdmVWKDEsImxpbmUiKX0sZ29QYWdlVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwicGFnZSIpfSxnb1BhZ2VEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwicGFnZSIpfSxnb0NoYXJMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNoYXIiKX0sZ29DaGFyUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJjaGFyIil9LGdvQ29sdW1uTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJjb2x1bW4iKX0sZ29Db2x1bW5SaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNvbHVtbiIpfSxnb1dvcmRMZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsIndvcmQiKX0sZ29Hcm91cFJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiZ3JvdXAiKX0sZ29Hcm91cExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiZ3JvdXAiKX0sZ29Xb3JkUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJ3b3JkIil9LGRlbENoYXJCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJjaGFyIil9LGRlbENoYXJBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwiY2hhciIpfSxkZWxXb3JkQmVmb3JlOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgtMSwid29yZCIpfSxkZWxXb3JkQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsIndvcmQiKX0sZGVsR3JvdXBCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJncm91cCIpfSxkZWxHcm91cEFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJncm91cCIpfSxpbmRlbnRBdXRvOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpfSxpbmRlbnRNb3JlOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKX0saW5kZW50TGVzczpmdW5jdGlvbih0KXt0LmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKX0saW5zZXJ0VGFiOmZ1bmN0aW9uKHQpe3QucmVwbGFjZVNlbGVjdGlvbigiCSIsImVuZCIsIitpbnB1dCIpfSxkZWZhdWx0VGFiOmZ1bmN0aW9uKHQpe3Quc29tZXRoaW5nU2VsZWN0ZWQoKT90LmluZGVudFNlbGVjdGlvbigiYWRkIik6dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LHRyYW5zcG9zZUNoYXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Q3Vyc29yKCkscj10LmdldExpbmUoZS5saW5lKTtlLmNoPjAmJmUuY2g8ci5sZW5ndGgtMSYmdC5yZXBsYWNlUmFuZ2Uoci5jaGFyQXQoZS5jaCkrci5jaGFyQXQoZS5jaC0xKSxZZShlLmxpbmUsZS5jaC0xKSxZZShlLmxpbmUsZS5jaCsxKSl9LG5ld2xpbmVBbmRJbmRlbnQ6ZnVuY3Rpb24odCl7bGUodCxmdW5jdGlvbigpe3QucmVwbGFjZVNlbGVjdGlvbigiXG4iLCJlbmQiLCIraW5wdXQiKSx0LmluZGVudExpbmUodC5nZXRDdXJzb3IoKS5saW5lLG51bGwsITApfSkoKX0sdG9nZ2xlT3ZlcndyaXRlOmZ1bmN0aW9uKHQpe3QudG9nZ2xlT3ZlcndyaXRlKCl9fSx2bz10LmtleU1hcD17fTt2by5iYXNpYz17TGVmdDoiZ29DaGFyTGVmdCIsUmlnaHQ6ImdvQ2hhclJpZ2h0IixVcDoiZ29MaW5lVXAiLERvd246ImdvTGluZURvd24iLEVuZDoiZ29MaW5lRW5kIixIb21lOiJnb0xpbmVTdGFydFNtYXJ0IixQYWdlVXA6ImdvUGFnZVVwIixQYWdlRG93bjoiZ29QYWdlRG93biIsRGVsZXRlOiJkZWxDaGFyQWZ0ZXIiLEJhY2tzcGFjZToiZGVsQ2hhckJlZm9yZSIsIlNoaWZ0LUJhY2tzcGFjZSI6ImRlbENoYXJCZWZvcmUiLFRhYjoiZGVmYXVsdFRhYiIsIlNoaWZ0LVRhYiI6ImluZGVudEF1dG8iLEVudGVyOiJuZXdsaW5lQW5kSW5kZW50IixJbnNlcnQ6InRvZ2dsZU92ZXJ3cml0ZSJ9LHZvLnBjRGVmYXVsdD17IkN0cmwtQSI6InNlbGVjdEFsbCIsIkN0cmwtRCI6ImRlbGV0ZUxpbmUiLCJDdHJsLVoiOiJ1bmRvIiwiU2hpZnQtQ3RybC1aIjoicmVkbyIsIkN0cmwtWSI6InJlZG8iLCJDdHJsLUhvbWUiOiJnb0RvY1N0YXJ0IiwiQWx0LVVwIjoiZ29Eb2NTdGFydCIsIkN0cmwtRW5kIjoiZ29Eb2NFbmQiLCJDdHJsLURvd24iOiJnb0RvY0VuZCIsIkN0cmwtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQ3RybC1SaWdodCI6ImdvR3JvdXBSaWdodCIsIkFsdC1MZWZ0IjoiZ29MaW5lU3RhcnQiLCJBbHQtUmlnaHQiOiJnb0xpbmVFbmQiLCJDdHJsLUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ3RybC1TIjoic2F2ZSIsIkN0cmwtRiI6ImZpbmQiLCJDdHJsLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUN0cmwtRyI6ImZpbmRQcmV2IiwiU2hpZnQtQ3RybC1GIjoicmVwbGFjZSIsIlNoaWZ0LUN0cmwtUiI6InJlcGxhY2VBbGwiLCJDdHJsLVsiOiJpbmRlbnRMZXNzIiwiQ3RybC1dIjoiaW5kZW50TW9yZSIsZmFsbHRocm91Z2g6ImJhc2ljIn0sdm8ubWFjRGVmYXVsdD17IkNtZC1BIjoic2VsZWN0QWxsIiwiQ21kLUQiOiJkZWxldGVMaW5lIiwiQ21kLVoiOiJ1bmRvIiwiU2hpZnQtQ21kLVoiOiJyZWRvIiwiQ21kLVkiOiJyZWRvIiwiQ21kLVVwIjoiZ29Eb2NTdGFydCIsIkNtZC1FbmQiOiJnb0RvY0VuZCIsIkNtZC1Eb3duIjoiZ29Eb2NFbmQiLCJBbHQtTGVmdCI6ImdvR3JvdXBMZWZ0IiwiQWx0LVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQ21kLUxlZnQiOiJnb0xpbmVTdGFydCIsIkNtZC1SaWdodCI6ImdvTGluZUVuZCIsIkFsdC1CYWNrc3BhY2UiOiJkZWxHcm91cEJlZm9yZSIsIkN0cmwtQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQWZ0ZXIiLCJBbHQtRGVsZXRlIjoiZGVsR3JvdXBBZnRlciIsIkNtZC1TIjoic2F2ZSIsIkNtZC1GIjoiZmluZCIsIkNtZC1HIjoiZmluZE5leHQiLCJTaGlmdC1DbWQtRyI6ImZpbmRQcmV2IiwiQ21kLUFsdC1GIjoicmVwbGFjZSIsIlNoaWZ0LUNtZC1BbHQtRiI6InJlcGxhY2VBbGwiLCJDbWQtWyI6ImluZGVudExlc3MiLCJDbWQtXSI6ImluZGVudE1vcmUiLCJDbWQtQmFja3NwYWNlIjoiZGVsTGluZUxlZnQiLGZhbGx0aHJvdWdoOlsiYmFzaWMiLCJlbWFjc3kiXX0sdm9bImRlZmF1bHQiXT1LaT92by5tYWNEZWZhdWx0OnZvLnBjRGVmYXVsdCx2by5lbWFjc3k9eyJDdHJsLUYiOiJnb0NoYXJSaWdodCIsIkN0cmwtQiI6ImdvQ2hhckxlZnQiLCJDdHJsLVAiOiJnb0xpbmVVcCIsIkN0cmwtTiI6ImdvTGluZURvd24iLCJBbHQtRiI6ImdvV29yZFJpZ2h0IiwiQWx0LUIiOiJnb1dvcmRMZWZ0IiwiQ3RybC1BIjoiZ29MaW5lU3RhcnQiLCJDdHJsLUUiOiJnb0xpbmVFbmQiLCJDdHJsLVYiOiJnb1BhZ2VEb3duIiwiU2hpZnQtQ3RybC1WIjoiZ29QYWdlVXAiLCJDdHJsLUQiOiJkZWxDaGFyQWZ0ZXIiLCJDdHJsLUgiOiJkZWxDaGFyQmVmb3JlIiwiQWx0LUQiOiJkZWxXb3JkQWZ0ZXIiLCJBbHQtQmFja3NwYWNlIjoiZGVsV29yZEJlZm9yZSIsIkN0cmwtSyI6ImtpbGxMaW5lIiwiQ3RybC1UIjoidHJhbnNwb3NlQ2hhcnMifSx0Lmxvb2t1cEtleT13cix0LmlzTW9kaWZpZXJLZXk9THIsdC5rZXlOYW1lPWtyLHQuZnJvbVRleHRBcmVhPWZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe2UudmFsdWU9dS5nZXRWYWx1ZSgpfWlmKHJ8fChyPXt9KSxyLnZhbHVlPWUudmFsdWUsIXIudGFiaW5kZXgmJmUudGFiaW5kZXgmJihyLnRhYmluZGV4PWUudGFiaW5kZXgpLCFyLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyJiYoci5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyKSxudWxsPT1yLmF1dG9mb2N1cyl7dmFyIGk9ZG9jdW1lbnQuYm9keTt0cnl7aT1kb2N1bWVudC5hY3RpdmVFbGVtZW50fWNhdGNoKG8pe31yLmF1dG9mb2N1cz1pPT1lfHxudWxsIT1lLmdldEF0dHJpYnV0ZSgiYXV0b2ZvY3VzIikmJmk9PWRvY3VtZW50LmJvZHl9aWYoZS5mb3JtJiYoR24oZS5mb3JtLCJzdWJtaXQiLG4pLCFyLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpKXt2YXIgbD1lLmZvcm0scz1sLnN1Ym1pdDt0cnl7dmFyIGE9bC5zdWJtaXQ9ZnVuY3Rpb24oKXtuKCksbC5zdWJtaXQ9cyxsLnN1Ym1pdCgpLGwuc3VibWl0PWF9fWNhdGNoKG8pe319ZS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgdT10KGZ1bmN0aW9uKHQpe2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlLm5leHRTaWJsaW5nKX0scik7cmV0dXJuIHUuc2F2ZT1uLHUuZ2V0VGV4dEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sdS50b1RleHRBcmVhPWZ1bmN0aW9uKCl7bigpLGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1LmdldFdyYXBwZXJFbGVtZW50KCkpLGUuc3R5bGUuZGlzcGxheT0iIixlLmZvcm0mJihWbihlLmZvcm0sInN1Ym1pdCIsbiksImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9ybS5zdWJtaXQmJihlLmZvcm0uc3VibWl0PXMpKX0sdX0sU3IucHJvdG90eXBlPXtlb2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuc3RyaW5nLmxlbmd0aH0sc29sOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMucG9zfSxwZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyl8fHZvaWQgMH0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGg/dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOnZvaWQgMH0sZWF0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXZhciByPWU9PXQ7ZWxzZSB2YXIgcj1lJiYodC50ZXN0P3QudGVzdChlKTp0KGUpKTtyZXR1cm4gcj8oKyt0aGlzLnBvcyxlKTp2b2lkIDB9LGVhdFdoaWxlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnBvczt0aGlzLmVhdCh0KTspO3JldHVybiB0aGlzLnBvcz5lfSxlYXRTcGFjZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnBvczsvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTspKyt0aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M+dH0sc2tpcFRvRW5kOmZ1bmN0aW9uKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofSxza2lwVG86ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuaW5kZXhPZih0LHRoaXMucG9zKTtyZXR1cm4gZT4tMT8odGhpcy5wb3M9ZSwhMCk6dm9pZCAwfSxiYWNrVXA6ZnVuY3Rpb24odCl7dGhpcy5wb3MtPXR9LGNvbHVtbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPVpuKHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlfSxpbmRlbnRhdGlvbjpmdW5jdGlvbigpe3JldHVybiBabih0aGlzLnN0cmluZyxudWxsLHRoaXMudGFiU2l6ZSl9LG1hdGNoOmZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBuPXRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaCh0KTtyZXR1cm4gbiYmbi5pbmRleD4wP251bGw6KG4mJmUhPT0hMSYmKHRoaXMucG9zKz1uWzBdLmxlbmd0aCksbil9dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIHI/dC50b0xvd2VyQ2FzZSgpOnR9LG89dGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLHQubGVuZ3RoKTtyZXR1cm4gaShvKT09aSh0KT8oZSE9PSExJiYodGhpcy5wb3MrPXQubGVuZ3RoKSwhMCk6dm9pZCAwfSxjdXJyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5wb3MpfX0sdC5TdHJpbmdTdHJlYW09U3IsdC5UZXh0TWFya2VyPU1yLGpuKE1yKSxNci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dmFyIHQ9dGhpcy5kb2MuY20sZT10JiYhdC5jdXJPcDtpZihlJiZpZSh0KSxZbih0aGlzLCJjbGVhciIpKXt2YXIgcj10aGlzLmZpbmQoKTtyJiZVbih0aGlzLCJjbGVhciIsci5mcm9tLHIudG8pfWZvcih2YXIgbj1udWxsLGk9bnVsbCxvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBsPXRoaXMubGluZXNbb10scz1OcihsLm1hcmtlZFNwYW5zLHRoaXMpO251bGwhPXMudG8mJihpPWJuKGwpKSxsLm1hcmtlZFNwYW5zPURyKGwubWFya2VkU3BhbnMscyksbnVsbCE9cy5mcm9tP249Ym4obCk6dGhpcy5jb2xsYXBzZWQmJiFWcih0aGlzLmRvYyxsKSYmdCYmeW4obCxyZSh0LmRpc3BsYXkpKX1pZih0JiZ0aGlzLmNvbGxhcHNlZCYmIXQub3B0aW9ucy5saW5lV3JhcHBpbmcpZm9yKHZhciBvPTA7bzx0aGlzLmxpbmVzLmxlbmd0aDsrK28pe3ZhciBhPUdyKHQuZG9jLHRoaXMubGluZXNbb10pLHU9Yyh0LmRvYyxhKTt1PnQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoJiYodC5kaXNwbGF5Lm1heExpbmU9YSx0LmRpc3BsYXkubWF4TGluZUxlbmd0aD11LHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCl9bnVsbCE9biYmdCYmdWUodCxuLGkrMSksdGhpcy5saW5lcy5sZW5ndGg9MCx0aGlzLmV4cGxpY2l0bHlDbGVhcmVkPSEwLHRoaXMuYXRvbWljJiZ0aGlzLmRvYy5jYW50RWRpdCYmKHRoaXMuZG9jLmNhbnRFZGl0PSExLHQmJmlyKHQpKSxlJiZvZSh0KX19LE1yLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscj0wO3I8dGhpcy5saW5lcy5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmxpbmVzW3JdLGk9TnIobi5tYXJrZWRTcGFucyx0aGlzKTtpZihudWxsIT1pLmZyb218fG51bGwhPWkudG8pe3ZhciBvPWJuKG4pO251bGwhPWkuZnJvbSYmKHQ9WWUobyxpLmZyb20pKSxudWxsIT1pLnRvJiYoZT1ZZShvLGkudG8pKX19cmV0dXJuImJvb2ttYXJrIj09dGhpcy50eXBlP3Q6dCYme2Zyb206dCx0bzplfX0sTXIucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZpbmQoKSxlPXRoaXMuZG9jLmNtO2lmKHQmJmUpeyJib29rbWFyayIhPXRoaXMudHlwZSYmKHQ9dC5mcm9tKTt2YXIgcj1nbih0aGlzLmRvYyx0LmxpbmUpO2lmKEcoZSxyKSx0LmxpbmU+PWUuZGlzcGxheS5zaG93aW5nRnJvbSYmdC5saW5lPGUuZGlzcGxheS5zaG93aW5nVG8pe2Zvcih2YXIgbj1lLmRpc3BsYXkubGluZURpdi5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKWlmKG4ubGluZU9iaj09cil7bi5vZmZzZXRIZWlnaHQhPXIuaGVpZ2h0JiZ5bihyLG4ub2Zmc2V0SGVpZ2h0KTsKYnJlYWt9YWUoZSxmdW5jdGlvbigpe2UuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZD1lLmN1ck9wLmZvcmNlVXBkYXRlPWUuY3VyT3AudXBkYXRlTWF4TGluZT0hMH0pfX19LE1yLnByb3RvdHlwZS5hdHRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wO2UubWF5YmVIaWRkZW5NYXJrZXJzJiYtMSE9dGkoZS5tYXliZUhpZGRlbk1hcmtlcnMsdGhpcyl8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzfHwoZS5tYXliZVVuaGlkZGVuTWFya2Vycz1bXSkpLnB1c2godGhpcyl9dGhpcy5saW5lcy5wdXNoKHQpfSxNci5wcm90b3R5cGUuZGV0YWNoTGluZT1mdW5jdGlvbih0KXtpZih0aGlzLmxpbmVzLnNwbGljZSh0aSh0aGlzLmxpbmVzLHQpLDEpLCF0aGlzLmxpbmVzLmxlbmd0aCYmdGhpcy5kb2MuY20pe3ZhciBlPXRoaXMuZG9jLmNtLmN1ck9wOyhlLm1heWJlSGlkZGVuTWFya2Vyc3x8KGUubWF5YmVIaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX19LHQuU2hhcmVkVGV4dE1hcmtlcj1BcixqbihBciksQXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZXhwbGljaXRseUNsZWFyZWQpe3RoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITA7Zm9yKHZhciB0PTA7dDx0aGlzLm1hcmtlcnMubGVuZ3RoOysrdCl0aGlzLm1hcmtlcnNbdF0uY2xlYXIoKTtVbih0aGlzLCJjbGVhciIpfX0sQXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoKX07dmFyIHlvPXQuTGluZVdpZGdldD1mdW5jdGlvbih0LGUscil7aWYocilmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodGhpc1tuXT1yW25dKTt0aGlzLmNtPXQsdGhpcy5ub2RlPWV9O2puKHlvKSx5by5wcm90b3R5cGUuY2xlYXI9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxpbmUud2lkZ2V0cyxlPWJuKHRoaXMubGluZSk7aWYobnVsbCE9ZSYmdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdFtyXT09dGhpcyYmdC5zcGxpY2Uoci0tLDEpO3QubGVuZ3RofHwodGhpcy5saW5lLndpZGdldHM9bnVsbCk7dmFyIG49Q24odGhpcy5jbSx0aGlzLmxpbmUpPHRoaXMuY20uZG9jLnNjcm9sbFRvcDt5bih0aGlzLmxpbmUsTWF0aC5tYXgoMCx0aGlzLmxpbmUuaGVpZ2h0LVlyKHRoaXMpKSksbiYmZnIodGhpcy5jbSwwLC10aGlzLmhlaWdodCksdWUodGhpcy5jbSxlLGUrMSl9fSkseW8ucHJvdG90eXBlLmNoYW5nZWQ9X3IoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhlaWdodDt0aGlzLmhlaWdodD1udWxsO3ZhciBlPVlyKHRoaXMpLXQ7aWYoZSl7eW4odGhpcy5saW5lLHRoaXMubGluZS5oZWlnaHQrZSk7dmFyIHI9Ym4odGhpcy5saW5lKTt1ZSh0aGlzLmNtLHIscisxKX19KTt2YXIgYm89dC5MaW5lPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRleHQ9dCxYcih0aGlzLGUpLHRoaXMuaGVpZ2h0PXI/cih0aGlzKToxfTtqbihibyksYm8ucHJvdG90eXBlLmxpbmVObz1mdW5jdGlvbigpe3JldHVybiBibih0aGlzKX07dmFyIHhvPXt9O2ZuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGluZXMubGVuZ3RofSxyZW1vdmVJbm5lcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LG49dCtlO24+cjsrK3Ipe3ZhciBpPXRoaXMubGluZXNbcl07dGhpcy5oZWlnaHQtPWkuaGVpZ2h0LFpyKGkpLFVuKGksImRlbGV0ZSIpfXRoaXMubGluZXMuc3BsaWNlKHQsZSl9LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe3Quc3BsaWNlLmFwcGx5KHQsW3QubGVuZ3RoLDBdLmNvbmNhdCh0aGlzLmxpbmVzKSl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLmhlaWdodCs9cix0aGlzLmxpbmVzPXRoaXMubGluZXMuc2xpY2UoMCx0KS5jb25jYXQoZSkuY29uY2F0KHRoaXMubGluZXMuc2xpY2UodCkpO2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7aT5uOysrbillW25dLnBhcmVudD10aGlzfSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQrZTtuPnQ7Kyt0KWlmKHIodGhpcy5saW5lc1t0XSkpcmV0dXJuITB9fSxobi5wcm90b3R5cGU9e2NodW5rU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5zaXplLT1lO2Zvcih2YXIgcj0wO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytyKXt2YXIgbj10aGlzLmNoaWxkcmVuW3JdLGk9bi5jaHVua1NpemUoKTtpZihpPnQpe3ZhciBvPU1hdGgubWluKGUsaS10KSxsPW4uaGVpZ2h0O2lmKG4ucmVtb3ZlSW5uZXIodCxvKSx0aGlzLmhlaWdodC09bC1uLmhlaWdodCxpPT1vJiYodGhpcy5jaGlsZHJlbi5zcGxpY2Uoci0tLDEpLG4ucGFyZW50PW51bGwpLDA9PShlLT1vKSlicmVhazt0PTB9ZWxzZSB0LT1pfWlmKHRoaXMuc2l6ZS1lPDI1KXt2YXIgcz1bXTt0aGlzLmNvbGxhcHNlKHMpLHRoaXMuY2hpbGRyZW49W25ldyBmbihzKV0sdGhpcy5jaGlsZHJlblswXS5wYXJlbnQ9dGhpc319LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7cj5lOysrZSl0aGlzLmNoaWxkcmVuW2VdLmNvbGxhcHNlKHQpfSxpbnNlcnRJbm5lcjpmdW5jdGlvbih0LGUscil7dGhpcy5zaXplKz1lLmxlbmd0aCx0aGlzLmhlaWdodCs9cjtmb3IodmFyIG49MCxpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRoaXMuY2hpbGRyZW5bbl0sbD1vLmNodW5rU2l6ZSgpO2lmKGw+PXQpe2lmKG8uaW5zZXJ0SW5uZXIodCxlLHIpLG8ubGluZXMmJm8ubGluZXMubGVuZ3RoPjUwKXtmb3IoO28ubGluZXMubGVuZ3RoPjUwOyl7dmFyIHM9by5saW5lcy5zcGxpY2Uoby5saW5lcy5sZW5ndGgtMjUsMjUpLGE9bmV3IGZuKHMpO28uaGVpZ2h0LT1hLmhlaWdodCx0aGlzLmNoaWxkcmVuLnNwbGljZShuKzEsMCxhKSxhLnBhcmVudD10aGlzfXRoaXMubWF5YmVTcGlsbCgpfWJyZWFrfXQtPWx9fSxtYXliZVNwaWxsOmZ1bmN0aW9uKCl7aWYoISh0aGlzLmNoaWxkcmVuLmxlbmd0aDw9MTApKXt2YXIgdD10aGlzO2Rve3ZhciBlPXQuY2hpbGRyZW4uc3BsaWNlKHQuY2hpbGRyZW4ubGVuZ3RoLTUsNSkscj1uZXcgaG4oZSk7aWYodC5wYXJlbnQpe3Quc2l6ZS09ci5zaXplLHQuaGVpZ2h0LT1yLmhlaWdodDt2YXIgbj10aSh0LnBhcmVudC5jaGlsZHJlbix0KTt0LnBhcmVudC5jaGlsZHJlbi5zcGxpY2UobisxLDAscil9ZWxzZXt2YXIgaT1uZXcgaG4odC5jaGlsZHJlbik7aS5wYXJlbnQ9dCx0LmNoaWxkcmVuPVtpLHJdLHQ9aX1yLnBhcmVudD10LnBhcmVudH13aGlsZSh0LmNoaWxkcmVuLmxlbmd0aD4xMCk7dC5wYXJlbnQubWF5YmVTcGlsbCgpfX0saXRlck46ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD50KXt2YXIgcz1NYXRoLm1pbihlLGwtdCk7aWYoby5pdGVyTih0LHMscikpcmV0dXJuITA7aWYoMD09KGUtPXMpKWJyZWFrO3Q9MH1lbHNlIHQtPWx9fX07dmFyIENvPTAsd289dC5Eb2M9ZnVuY3Rpb24odCxlLHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHdvKSlyZXR1cm4gbmV3IHdvKHQsZSxyKTtudWxsPT1yJiYocj0wKSxobi5jYWxsKHRoaXMsW25ldyBmbihbbmV3IGJvKCIiLG51bGwpXSldKSx0aGlzLmZpcnN0PXIsdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5jYW50RWRpdD0hMSx0aGlzLmhpc3Rvcnk9TG4oKSx0aGlzLmNsZWFuR2VuZXJhdGlvbj0xLHRoaXMuZnJvbnRpZXI9cjt2YXIgbj1ZZShyLDApO3RoaXMuc2VsPXtmcm9tOm4sdG86bixoZWFkOm4sYW5jaG9yOm4sc2hpZnQ6ITEsZXh0ZW5kOiExLGdvYWxDb2x1bW46bnVsbH0sdGhpcy5pZD0rK0NvLHRoaXMubW9kZU9wdGlvbj1lLCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9em8odCkpLGNuKHRoaXMse2Zyb206bix0bzpuLHRleHQ6dH0sbnVsbCx7aGVhZDpuLGFuY2hvcjpufSl9O3dvLnByb3RvdHlwZT1laShobi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOndvLGl0ZXI6ZnVuY3Rpb24odCxlLHIpe3I/dGhpcy5pdGVyTih0LXRoaXMuZmlyc3QsZS10LHIpOnRoaXMuaXRlck4odGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSx0KX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9ZS5sZW5ndGg7aT5uOysrbilyKz1lW25dLmhlaWdodDt0aGlzLmluc2VydElubmVyKHQtdGhpcy5maXJzdCxlLHIpfSxyZW1vdmU6ZnVuY3Rpb24odCxlKXt0aGlzLnJlbW92ZUlubmVyKHQtdGhpcy5maXJzdCxlKX0sZ2V0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKTtyZXR1cm4gdD09PSExP2U6ZS5qb2luKHR8fCJcbiIpfSxzZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1ZZSh0aGlzLmZpcnN0LDApLHI9dGhpcy5maXJzdCt0aGlzLnNpemUtMTtCZSh0aGlzLHtmcm9tOmUsdG86WWUocixnbih0aGlzLHIpLnRleHQubGVuZ3RoKSx0ZXh0OnpvKHQpLG9yaWdpbjoic2V0VmFsdWUifSx7aGVhZDplLGFuY2hvcjplfSwhMCl9LHJlcGxhY2VSYW5nZTpmdW5jdGlvbih0LGUscixuKXtlPVFlKHRoaXMsZSkscj1yP1FlKHRoaXMscik6ZSxfZSh0aGlzLHQsZSxyLG4pfSxnZXRSYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49bW4odGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSkpO3JldHVybiByPT09ITE/bjpuLmpvaW4ocnx8IlxuIil9LGdldExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMaW5lSGFuZGxlKHQpO3JldHVybiBlJiZlLnRleHR9LHNldExpbmU6ZnVuY3Rpb24odCxlKXt0cih0aGlzLHQpJiZfZSh0aGlzLGUsWWUodCwwKSxRZSh0aGlzLFllKHQpKSl9LHJlbW92ZUxpbmU6ZnVuY3Rpb24odCl7dD9fZSh0aGlzLCIiLFFlKHRoaXMsWWUodC0xKSksUWUodGhpcyxZZSh0KSkpOl9lKHRoaXMsIiIsWWUoMCwwKSxRZSh0aGlzLFllKDEsMCkpKX0sZ2V0TGluZUhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdHIodGhpcyx0KT9nbih0aGlzLHQpOnZvaWQgMH0sZ2V0TGluZU51bWJlcjpmdW5jdGlvbih0KXtyZXR1cm4gYm4odCl9LGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJih0PWduKHRoaXMsdCkpLEdyKHRoaXMsdCl9LGxpbmVDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9LGZpcnN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0fSxsYXN0TGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0K3RoaXMuc2l6ZS0xfSxjbGlwUG9zOmZ1bmN0aW9uKHQpe3JldHVybiBRZSh0aGlzLHQpfSxnZXRDdXJzb3I6ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLnNlbDtyZXR1cm4gZT1udWxsPT10fHwiaGVhZCI9PXQ/ci5oZWFkOiJhbmNob3IiPT10P3IuYW5jaG9yOiJlbmQiPT10fHx0PT09ITE/ci50bzpyLmZyb20sWmUoZSl9LHNvbWV0aGluZ1NlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWplKHRoaXMuc2VsLmhlYWQsdGhpcy5zZWwuYW5jaG9yKX0sc2V0Q3Vyc29yOnNlKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1RZSh0aGlzLCJudW1iZXIiPT10eXBlb2YgdD9ZZSh0LGV8fDApOnQpO3I/ZXIodGhpcyxuKTpucih0aGlzLG4sbil9KSxzZXRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe25yKHRoaXMsUWUodGhpcyx0KSxRZSh0aGlzLGV8fHQpLHIpfSksZXh0ZW5kU2VsZWN0aW9uOnNlKGZ1bmN0aW9uKHQsZSxyKXtlcih0aGlzLFFlKHRoaXMsdCksZSYmUWUodGhpcyxlKSxyKX0pLGdldFNlbGVjdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRSYW5nZSh0aGlzLnNlbC5mcm9tLHRoaXMuc2VsLnRvLHQpfSxyZXBsYWNlU2VsZWN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtCZSh0aGlzLHtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8sdGV4dDp6byh0KSxvcmlnaW46cn0sZXx8ImFyb3VuZCIpfSx1bmRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywidW5kbyIpfSkscmVkbzpzZShmdW5jdGlvbigpe1ZlKHRoaXMsInJlZG8iKX0pLHNldEV4dGVuZGluZzpmdW5jdGlvbih0KXt0aGlzLnNlbC5leHRlbmQ9dH0saGlzdG9yeVNpemU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhpc3Rvcnk7cmV0dXJue3VuZG86dC5kb25lLmxlbmd0aCxyZWRvOnQudW5kb25lLmxlbmd0aH19LGNsZWFySGlzdG9yeTpmdW5jdGlvbigpe3RoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbil9LG1hcmtDbGVhbjpmdW5jdGlvbigpe3RoaXMuY2xlYW5HZW5lcmF0aW9uPXRoaXMuY2hhbmdlR2VuZXJhdGlvbigpfSxjaGFuZ2VHZW5lcmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGlzdG9yeS5sYXN0T3A9dGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW49bnVsbCx0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbn0saXNDbGVhbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb249PSh0fHx0aGlzLmNsZWFuR2VuZXJhdGlvbil9LGdldEhpc3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpIbih0aGlzLmhpc3RvcnkuZG9uZSksdW5kb25lOkhuKHRoaXMuaGlzdG9yeS51bmRvbmUpfX0sc2V0SGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmhpc3Rvcnk9TG4odGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO2UuZG9uZT10LmRvbmUuc2xpY2UoMCksZS51bmRvbmU9dC51bmRvbmUuc2xpY2UoMCl9LG1hcmtUZXh0OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVHIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZSksciwicmFuZ2UiKX0sc2V0Qm9va21hcms6ZnVuY3Rpb24odCxlKXt2YXIgcj17cmVwbGFjZWRXaXRoOmUmJihudWxsPT1lLm5vZGVUeXBlP2Uud2lkZ2V0OmUpLGluc2VydExlZnQ6ZSYmZS5pbnNlcnRMZWZ0fTtyZXR1cm4gdD1RZSh0aGlzLHQpLFRyKHRoaXMsdCx0LHIsImJvb2ttYXJrIil9LGZpbmRNYXJrc0F0OmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT1bXSxyPWduKHRoaXMsdC5saW5lKS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dOyhudWxsPT1pLmZyb218fGkuZnJvbTw9dC5jaCkmJihudWxsPT1pLnRvfHxpLnRvPj10LmNoKSYmZS5wdXNoKGkubWFya2VyLnBhcmVudHx8aS5tYXJrZXIpfXJldHVybiBlfSxnZXRBbGxNYXJrczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLml0ZXIoZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXJrZWRTcGFucztpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKW51bGwhPXJbbl0uZnJvbSYmdC5wdXNoKHJbbl0ubWFya2VyKX0pLHR9LHBvc0Zyb21JbmRleDpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihuKXt2YXIgaT1uLnRleHQubGVuZ3RoKzE7cmV0dXJuIGk+dD8oZT10LCEwKToodC09aSwrK3Isdm9pZCAwKX0pLFFlKHRoaXMsWWUocixlKSl9LGluZGV4RnJvbVBvczpmdW5jdGlvbih0KXt0PVFlKHRoaXMsdCk7dmFyIGU9dC5jaDtyZXR1cm4gdC5saW5lPHRoaXMuZmlyc3R8fHQuY2g8MD8wOih0aGlzLml0ZXIodGhpcy5maXJzdCx0LmxpbmUsZnVuY3Rpb24odCl7ZSs9dC50ZXh0Lmxlbmd0aCsxfSksZSl9LGNvcHk6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHdvKHZuKHRoaXMsdGhpcy5maXJzdCx0aGlzLmZpcnN0K3RoaXMuc2l6ZSksdGhpcy5tb2RlT3B0aW9uLHRoaXMuZmlyc3QpO3JldHVybiBlLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCxlLnNjcm9sbExlZnQ9dGhpcy5zY3JvbGxMZWZ0LGUuc2VsPXtmcm9tOnRoaXMuc2VsLmZyb20sdG86dGhpcy5zZWwudG8saGVhZDp0aGlzLnNlbC5oZWFkLGFuY2hvcjp0aGlzLnNlbC5hbmNob3Isc2hpZnQ6dGhpcy5zZWwuc2hpZnQsZXh0ZW5kOiExLGdvYWxDb2x1bW46dGhpcy5zZWwuZ29hbENvbHVtbn0sdCYmKGUuaGlzdG9yeS51bmRvRGVwdGg9dGhpcy5oaXN0b3J5LnVuZG9EZXB0aCxlLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpKSxlfSxsaW5rZWREb2M6ZnVuY3Rpb24odCl7dHx8KHQ9e30pO3ZhciBlPXRoaXMuZmlyc3Qscj10aGlzLmZpcnN0K3RoaXMuc2l6ZTtudWxsIT10LmZyb20mJnQuZnJvbT5lJiYoZT10LmZyb20pLG51bGwhPXQudG8mJnQudG88ciYmKHI9dC50byk7dmFyIG49bmV3IHdvKHZuKHRoaXMsZSxyKSx0Lm1vZGV8fHRoaXMubW9kZU9wdGlvbixlKTtyZXR1cm4gdC5zaGFyZWRIaXN0JiYobi5oaXN0b3J5PXRoaXMuaGlzdG9yeSksKHRoaXMubGlua2VkfHwodGhpcy5saW5rZWQ9W10pKS5wdXNoKHtkb2M6bixzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH0pLG4ubGlua2VkPVt7ZG9jOnRoaXMsaXNQYXJlbnQ6ITAsc2hhcmVkSGlzdDp0LnNoYXJlZEhpc3R9XSxufSx1bmxpbmtEb2M6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQmJihlPWUuZG9jKSx0aGlzLmxpbmtlZClmb3IodmFyIHI9MDtyPHRoaXMubGlua2VkLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGlua2VkW3JdO2lmKG4uZG9jPT1lKXt0aGlzLmxpbmtlZC5zcGxpY2UociwxKSxlLnVubGlua0RvYyh0aGlzKTticmVha319aWYoZS5oaXN0b3J5PT10aGlzLmhpc3Rvcnkpe3ZhciBpPVtlLmlkXTtkbihlLGZ1bmN0aW9uKHQpe2kucHVzaCh0LmlkKX0sITApLGUuaGlzdG9yeT1MbigpLGUuaGlzdG9yeS5kb25lPUhuKHRoaXMuaGlzdG9yeS5kb25lLGkpLGUuaGlzdG9yeS51bmRvbmU9SG4odGhpcy5oaXN0b3J5LnVuZG9uZSxpKX19LGl0ZXJMaW5rZWREb2NzOmZ1bmN0aW9uKHQpe2RuKHRoaXMsdCl9LGdldE1vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxnZXRFZGl0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbX19KSx3by5wcm90b3R5cGUuZWFjaExpbmU9d28ucHJvdG90eXBlLml0ZXI7dmFyIExvPSJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IiLnNwbGl0KCIgIik7Zm9yKHZhciBrbyBpbiB3by5wcm90b3R5cGUpd28ucHJvdG90eXBlLmhhc093blByb3BlcnR5KGtvKSYmdGkoTG8sa28pPDAmJih0LnByb3RvdHlwZVtrb109ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcy5kb2MsYXJndW1lbnRzKX19KHdvLnByb3RvdHlwZVtrb10pKTtqbih3byksdC5lX3N0b3A9UG4sdC5lX3ByZXZlbnREZWZhdWx0PXpuLHQuZV9zdG9wUHJvcGFnYXRpb249SW47dmFyIFNvLE1vPTA7dC5vbj1Hbix0Lm9mZj1Wbix0LnNpZ25hbD1Lbjt2YXIgVG89MzAsQW89dC5QYXNzPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLlBhc3MifX07JG4ucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodGhpcy5pZCksdGhpcy5pZD1zZXRUaW1lb3V0KGUsdCl9fSx0LmNvdW50Q29sdW1uPVpuO3ZhciBIbz1bIiJdLE5vPS9bXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YWMwMC1cdWQ3YWZdLyxEbz0vW1x1MDMwMC1cdTAzNkZcdTA0ODMtXHUwNDg3XHUwNDg4LVx1MDQ4OVx1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzEtXHUwNUMyXHUwNUM0LVx1MDVDNVx1MDVDN1x1MDYxMC1cdTA2MUFcdTA2NEItXHUwNjVGXHUwNjcwXHUwNkQ2LVx1MDZEQ1x1MDZERi1cdTA2RTRcdTA2RTctXHUwNkU4XHUwNkVBLVx1MDZFRFx1QTY2Rlx1MURDMOKAk1x1MURGRlx1MjBEMOKAk1x1MjBGRlx1QTY3MC1cdUE2NzJcdUE2NzQtXHVBNjdEXHVBNjlGXHVkYzAwLVx1ZGZmZlx1RkUyMOKAk1x1RkUyRl0vO3QucmVwbGFjZUdldFJlY3Q9ZnVuY3Rpb24odCl7Zmk9dH07dmFyIFdvPWZ1bmN0aW9uKCl7aWYoTmkpcmV0dXJuITE7dmFyIHQ9c2koImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gdHx8ImRyYWdEcm9wImluIHR9KCk7VGk/aGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzY9PXQuY2hhckNvZGVBdChlLTEpJiYzOT09dC5jaGFyQ29kZUF0KGUpfTpJaSYmIS9WZXJzaW9uXC8oWzYtOV18XGRcZClcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3JldHVybi9cLVteIFwtP118XD9bXiAhXCdcIlwpLC5cLVwvOjtcP1xdXH1dLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfTpXaSYmL0Nocm9tZVwvKD86Mjl8WzMtOV1cZHxcZFxkXGQpXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk/aGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZS0xKTtyZXR1cm4gcj49ODIwOCYmODIxMj49cn06V2kmJihoaT1mdW5jdGlvbih0LGUpe2lmKGU+MSYmNDU9PXQuY2hhckNvZGVBdChlLTEpKXtpZigvXHcvLnRlc3QodC5jaGFyQXQoZS0yKSkmJi9bXlwtP1wuXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITA7aWYoZT4yJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1tcZFwuLF0vLnRlc3QodC5jaGFyQXQoZSkpKXJldHVybiExfXJldHVybi9bfiEjJSYqKT0rfVxdXFx8XCJcLj4sOjtdWyh7WzxdfC1bXlwtP1wuXHUyMDEwLVx1MjAxZlx1MjAyNl18XD9bXHd+YEAjJCVcXiYqKF89K3tbfD48XXzigKZbXHd+YEAjJCVcXiYqKF89K3tbPjxdLy50ZXN0KHQuc2xpY2UoZS0xLGUrMSkpfSk7dmFyIE9vLEVvLHpvPTMhPSJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9W10sbj10Lmxlbmd0aDtuPj1lOyl7dmFyIGk9dC5pbmRleE9mKCJcbiIsZSk7LTE9PWkmJihpPXQubGVuZ3RoKTt2YXIgbz10LnNsaWNlKGUsIlxyIj09dC5jaGFyQXQoaS0xKT9pLTE6aSksbD1vLmluZGV4T2YoIlxyIik7LTEhPWw/KHIucHVzaChvLnNsaWNlKDAsbCkpLGUrPWwrMSk6KHIucHVzaChvKSxlPWkrMSl9cmV0dXJuIHJ9OmZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KC9cclxuP3xcbi8pfTt0LnNwbGl0TGluZXM9em87dmFyIElvPXdpbmRvdy5nZXRTZWxlY3Rpb24/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0LnNlbGVjdGlvblN0YXJ0IT10LnNlbGVjdGlvbkVuZH1jYXRjaChlKXtyZXR1cm4hMX19OmZ1bmN0aW9uKHQpe3RyeXt2YXIgZT10Lm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCl9Y2F0Y2gocil7fXJldHVybiBlJiZlLnBhcmVudEVsZW1lbnQoKT09dD8wIT1lLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLGUpOiExfSxGbz1mdW5jdGlvbigpe3ZhciB0PXNpKCJkaXYiKTtyZXR1cm4ib25jb3B5ImluIHQ/ITA6KHQuc2V0QXR0cmlidXRlKCJvbmNvcHkiLCJyZXR1cm47IiksImZ1bmN0aW9uIj09dHlwZW9mIHQub25jb3B5KX0oKSxQbz17MzoiRW50ZXIiLDg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkN0cmwiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjIiwzMjoiU3BhY2UiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJMZWZ0IiwzODoiVXAiLDM5OiJSaWdodCIsNDA6IkRvd24iLDQ0OiJQcmludFNjcm4iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDU5OiI7Iiw5MToiTW9kIiw5MjoiTW9kIiw5MzoiTW9kIiwxMDk6Ii0iLDEwNzoiPSIsMTI3OiJEZWxldGUiLDE4NjoiOyIsMTg3OiI9IiwxODg6IiwiLDE4OToiLSIsMTkwOiIuIiwxOTE6Ii8iLDE5MjoiYCIsMjE5OiJbIiwyMjA6IlxcIiwyMjE6Il0iLDIyMjoiJyIsNjMyNzY6IlBhZ2VVcCIsNjMyNzc6IlBhZ2VEb3duIiw2MzI3NToiRW5kIiw2MzI3MzoiSG9tZSIsNjMyMzQ6IkxlZnQiLDYzMjMyOiJVcCIsNjMyMzU6IlJpZ2h0Iiw2MzIzMzoiRG93biIsNjMzMDI6Ikluc2VydCIsNjMyNzI6IkRlbGV0ZSJ9O3Qua2V5TmFtZXM9UG8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDsxMD50O3QrKylQb1t0KzQ4XT1TdHJpbmcodCk7Zm9yKHZhciB0PTY1OzkwPj10O3QrKylQb1t0XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2Zvcih2YXIgdD0xOzEyPj10O3QrKylQb1t0KzExMV09UG9bdCs2MzIzNV09IkYiK3R9KCk7dmFyIFJvLEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gMjU1Pj10P2UuY2hhckF0KHQpOnQ+PTE0MjQmJjE1MjQ+PXQ/IlIiOnQ+PTE1MzYmJjE3OTE+PXQ/ci5jaGFyQXQodC0xNTM2KTp0Pj0xNzkyJiYyMjIwPj10PyJyIjoiTCJ9dmFyIGU9ImJiYmJiYmJiYnRzdHdzYmJiYmJiYmJiYmJiYmJzc3N0d05OJSUlTk5OTk5OLE4sTjExMTExMTExMTFOTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5iYmJiYmJzYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIsTiUlJSVOTk5OTE5OTk5OJSUxMU5MTk5OMUxOTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTkxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTEwiLHI9InJycnJycnJycnJycixyTk5tbW1tbW1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tcnJycnJycm5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbW1tbW1tbW1tbW1tTm1tbW1ycnJycnJycnJycnJycnJycnIiLG49L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNdLyxpPS9bc3R3Tl0vLG89L1tMUnJdLyxsPS9bTGIxbl0vLHM9L1sxbl0vLGE9IkwiO3JldHVybiBmdW5jdGlvbihlKXtpZighbi50ZXN0KGUpKXJldHVybiExO2Zvcih2YXIgcix1PWUubGVuZ3RoLGM9W10sZj0wO3U+ZjsrK2YpYy5wdXNoKHI9dChlLmNoYXJDb2RlQXQoZikpKTtmb3IodmFyIGY9MCxoPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsibSI9PXI/Y1tmXT1oOmg9cn1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiMSI9PXImJiJyIj09ZD9jW2ZdPSJuIjpvLnRlc3QocikmJihkPXIsInIiPT1yJiYoY1tmXT0iUiIpKX1mb3IodmFyIGY9MSxoPWNbMF07dS0xPmY7KytmKXt2YXIgcj1jW2ZdOyIrIj09ciYmIjEiPT1oJiYiMSI9PWNbZisxXT9jW2ZdPSIxIjoiLCIhPXJ8fGghPWNbZisxXXx8IjEiIT1oJiYibiIhPWh8fChjW2ZdPWgpLGg9cn1mb3IodmFyIGY9MDt1PmY7KytmKXt2YXIgcj1jW2ZdO2lmKCIsIj09ciljW2ZdPSJOIjtlbHNlIGlmKCIlIj09cil7Zm9yKHZhciBwPWYrMTt1PnAmJiIlIj09Y1twXTsrK3ApO2Zvcih2YXIgZz1mJiYiISI9PWNbZi0xXXx8dS0xPnAmJiIxIj09Y1twXT8iMSI6Ik4iLG09ZjtwPm07KyttKWNbbV09ZztmPXAtMX19Zm9yKHZhciBmPTAsZD1hO3U+ZjsrK2Ype3ZhciByPWNbZl07IkwiPT1kJiYiMSI9PXI/Y1tmXT0iTCI6by50ZXN0KHIpJiYoZD1yKX1mb3IodmFyIGY9MDt1PmY7KytmKWlmKGkudGVzdChjW2ZdKSl7Zm9yKHZhciBwPWYrMTt1PnAmJmkudGVzdChjW3BdKTsrK3ApO2Zvcih2YXIgdj0iTCI9PShmP2NbZi0xXTphKSx5PSJMIj09KHUtMT5wP2NbcF06YSksZz12fHx5PyJMIjoiUiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfWZvcih2YXIgYix4PVtdLGY9MDt1PmY7KWlmKGwudGVzdChjW2ZdKSl7dmFyIEM9Zjtmb3IoKytmO3U+ZiYmbC50ZXN0KGNbZl0pOysrZik7eC5wdXNoKHtmcm9tOkMsdG86ZixsZXZlbDowfSl9ZWxzZXt2YXIgdz1mLEw9eC5sZW5ndGg7Zm9yKCsrZjt1PmYmJiJMIiE9Y1tmXTsrK2YpO2Zvcih2YXIgbT13O2Y+bTspaWYocy50ZXN0KGNbbV0pKXttPncmJnguc3BsaWNlKEwsMCx7ZnJvbTp3LHRvOm0sbGV2ZWw6MX0pO3ZhciBrPW07Zm9yKCsrbTtmPm0mJnMudGVzdChjW21dKTsrK20pO3guc3BsaWNlKEwsMCx7ZnJvbTprLHRvOm0sbGV2ZWw6Mn0pLHc9bX1lbHNlKyttO2Y+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86ZixsZXZlbDoxfSl9cmV0dXJuIDE9PXhbMF0ubGV2ZWwmJihiPWUubWF0Y2goL15ccysvKSkmJih4WzBdLmZyb209YlswXS5sZW5ndGgseC51bnNoaWZ0KHtmcm9tOjAsdG86YlswXS5sZW5ndGgsbGV2ZWw6MH0pKSwxPT1Rbih4KS5sZXZlbCYmKGI9ZS5tYXRjaCgvXHMrJC8pKSYmKFFuKHgpLnRvLT1iWzBdLmxlbmd0aCx4LnB1c2goe2Zyb206dS1iWzBdLmxlbmd0aCx0bzp1LGxldmVsOjB9KSkseFswXS5sZXZlbCE9UW4oeCkubGV2ZWwmJngucHVzaCh7ZnJvbTp1LHRvOnUsbGV2ZWw6eFswXS5sZXZlbH0pLHh9fSgpO3JldHVybiB0LnZlcnNpb249IjMuMjAuMCIsdH0oKTtQSwcIxlyRsL+vAQC/rwEAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAc3RhdGljXGxpYlxoaWdobGlnaHQubWluLmpzdmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChvKXtyZXR1cm4gby5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iil9ZnVuY3Rpb24gYihwKXtmb3IodmFyIG89cC5maXJzdENoaWxkO287bz1vLm5leHRTaWJsaW5nKXtpZihvLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJDT0RFIil7cmV0dXJuIG99aWYoIShvLm5vZGVUeXBlPT0zJiZvLm5vZGVWYWx1ZS5tYXRjaCgvXHMrLykpKXticmVha319fWZ1bmN0aW9uIGgocCxvKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHAuY2hpbGROb2RlcyxmdW5jdGlvbihxKXtpZihxLm5vZGVUeXBlPT0zKXtyZXR1cm4gbz9xLm5vZGVWYWx1ZS5yZXBsYWNlKC9cbi9nLCIiKTpxLm5vZGVWYWx1ZX1pZihxLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PSJCUiIpe3JldHVybiJcbiJ9cmV0dXJuIGgocSxvKX0pLmpvaW4oIiIpfWZ1bmN0aW9uIGEocSl7dmFyIHA9KHEuY2xhc3NOYW1lKyIgIisocS5wYXJlbnROb2RlP3EucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIpKS5zcGxpdCgvXHMrLyk7cD1wLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIil9KTtmb3IodmFyIG89MDtvPHAubGVuZ3RoO28rKyl7aWYoZVtwW29dXXx8cFtvXT09Im5vLWhpZ2hsaWdodCIpe3JldHVybiBwW29dfX19ZnVuY3Rpb24gYyhxKXt2YXIgbz1bXTsoZnVuY3Rpb24gcChyLHMpe2Zvcih2YXIgdD1yLmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpe2lmKHQubm9kZVR5cGU9PTMpe3MrPXQubm9kZVZhbHVlLmxlbmd0aH1lbHNle2lmKHQubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cys9MX1lbHNle2lmKHQubm9kZVR5cGU9PTEpe28ucHVzaCh7ZXZlbnQ6InN0YXJ0IixvZmZzZXQ6cyxub2RlOnR9KTtzPXAodCxzKTtvLnB1c2goe2V2ZW50OiJzdG9wIixvZmZzZXQ6cyxub2RlOnR9KX19fX1yZXR1cm4gc30pKHEsMCk7cmV0dXJuIG99ZnVuY3Rpb24gaihwLHIsdil7dmFyIHE9MDt2YXIgeT0iIjt2YXIgcz1bXTtmdW5jdGlvbiB1KCl7aWYoIXAubGVuZ3RofHwhci5sZW5ndGgpe3JldHVybiBwLmxlbmd0aD9wOnJ9aWYocFswXS5vZmZzZXQhPXJbMF0ub2Zmc2V0KXtyZXR1cm4ocFswXS5vZmZzZXQ8clswXS5vZmZzZXQpP3A6cn1yZXR1cm4gclswXS5ldmVudD09InN0YXJ0Ij9wOnJ9ZnVuY3Rpb24gdChBKXtmdW5jdGlvbiB6KEIpe3JldHVybiIgIitCLm5vZGVOYW1lKyc9IicrbChCLnZhbHVlKSsnIid9eSs9IjwiK0Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKStBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoQS5hdHRyaWJ1dGVzLHopLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB4KHope3krPSI8LyIrei5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKyI+In1mdW5jdGlvbiBvKHopeyh6LmV2ZW50PT0ic3RhcnQiP3Q6eCkoei5ub2RlKX13aGlsZShwLmxlbmd0aHx8ci5sZW5ndGgpe3ZhciB3PXUoKTt5Kz1sKHYuc3Vic3RyKHEsd1swXS5vZmZzZXQtcSkpO3E9d1swXS5vZmZzZXQ7aWYodz09cCl7cy5yZXZlcnNlKCkuZm9yRWFjaCh4KTtkb3tvKHcuc3BsaWNlKDAsMSlbMF0pO3c9dSgpfXdoaWxlKHc9PXAmJncubGVuZ3RoJiZ3WzBdLm9mZnNldD09cSk7cy5yZXZlcnNlKCkuZm9yRWFjaCh0KX1lbHNle2lmKHdbMF0uZXZlbnQ9PSJzdGFydCIpe3MucHVzaCh3WzBdLm5vZGUpfWVsc2V7cy5wb3AoKX1vKHcuc3BsaWNlKDAsMSlbMF0pfX1yZXR1cm4geStsKHYuc3Vic3RyKHEpKX1mdW5jdGlvbiBmKHIpe2Z1bmN0aW9uIG8ocyl7cmV0dXJuKHMmJnMuc291cmNlKXx8c31mdW5jdGlvbiBwKHQscyl7cmV0dXJuIFJlZ0V4cChvKHQpLCJtIisoci5jST8iaSI6IiIpKyhzPyJnIjoiIikpfWZ1bmN0aW9uIHEoeix4KXtpZih6LmNvbXBpbGVkKXtyZXR1cm59ei5jb21waWxlZD10cnVlO3ZhciB1PVtdO2lmKHouayl7dmFyIHM9e307ZnVuY3Rpb24gQShCLHQpe2lmKHIuY0kpe3Q9dC50b0xvd2VyQ2FzZSgpfXQuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBEPUMuc3BsaXQoInwiKTtzW0RbMF1dPVtCLERbMV0/TnVtYmVyKERbMV0pOjFdO3UucHVzaChEWzBdKX0pfXoubFI9cCh6Lmx8fCJcXGIiK2hsanMuSVIrIlxcYig/IVxcLikiLHRydWUpO2lmKHR5cGVvZiB6Lms9PSJzdHJpbmciKXtBKCJrZXl3b3JkIix6LmspfWVsc2V7Zm9yKHZhciB5IGluIHouayl7aWYoIXouay5oYXNPd25Qcm9wZXJ0eSh5KSl7Y29udGludWV9QSh5LHoua1t5XSl9fXouaz1zfWlmKHgpe2lmKHouYldLKXt6LmI9IlxcYigiK3Uuam9pbigifCIpKyIpXFxiKD8hXFwuKVxccyoifXouYlI9cCh6LmI/ei5iOiJcXEJ8XFxiIik7aWYoIXouZSYmIXouZVcpe3ouZT0iXFxCfFxcYiJ9aWYoei5lKXt6LmVSPXAoei5lKX16LnRFPW8oei5lKXx8IiI7aWYoei5lVyYmeC50RSl7ei50RSs9KHouZT8ifCI6IiIpK3gudEV9fWlmKHouaSl7ei5pUj1wKHouaSl9aWYoei5yPT09dW5kZWZpbmVkKXt6LnI9MX1pZighei5jKXt6LmM9W119Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7aWYoei5jW3ddPT0ic2VsZiIpe3ouY1t3XT16fXEoei5jW3ddLHopfWlmKHouc3RhcnRzKXtxKHouc3RhcnRzLHgpfXZhciB2PVtdO2Zvcih2YXIgdz0wO3c8ei5jLmxlbmd0aDt3Kyspe3YucHVzaChvKHouY1t3XS5iKSl9aWYoei50RSl7di5wdXNoKG8oei50RSkpfWlmKHouaSl7di5wdXNoKG8oei5pKSl9ei50PXYubGVuZ3RoP3Aodi5qb2luKCJ8IiksdHJ1ZSk6e2V4ZWM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9fX1xKHIpfWZ1bmN0aW9uIGQoRSxHLEMsTSl7ZnVuY3Rpb24gbyhyLFApe2Zvcih2YXIgTz0wO088UC5jLmxlbmd0aDtPKyspe3ZhciBOPVAuY1tPXS5iUi5leGVjKHIpO2lmKE4mJk4uaW5kZXg9PTApe3JldHVybiBQLmNbT119fX1mdW5jdGlvbiBzKE4scil7aWYoTi5lJiZOLmVSLnRlc3Qocikpe3JldHVybiBOfWlmKE4uZVcpe3JldHVybiBzKE4ucGFyZW50LHIpfX1mdW5jdGlvbiB0KHIsTil7cmV0dXJuICFDJiZOLmkmJk4uaVIudGVzdChyKX1mdW5jdGlvbiB5KE8scil7dmFyIE49SC5jST9yWzBdLnRvTG93ZXJDYXNlKCk6clswXTtyZXR1cm4gTy5rLmhhc093blByb3BlcnR5KE4pJiZPLmtbTl19ZnVuY3Rpb24gSSgpe3ZhciBOPWwodyk7aWYoIUIuayl7cmV0dXJuIE59dmFyIHI9IiI7dmFyIFE9MDtCLmxSLmxhc3RJbmRleD0wO3ZhciBPPUIubFIuZXhlYyhOKTt3aGlsZShPKXtyKz1OLnN1YnN0cihRLE8uaW5kZXgtUSk7dmFyIFA9eShCLE8pO2lmKFApe3YrPVBbMV07cis9JzxzcGFuIGNsYXNzPSInK1BbMF0rJyI+JytPWzBdKyI8L3NwYW4+In1lbHNle3IrPU9bMF19UT1CLmxSLmxhc3RJbmRleDtPPUIubFIuZXhlYyhOKX1yZXR1cm4gcitOLnN1YnN0cihRKX1mdW5jdGlvbiB6KCl7aWYoQi5zTCYmIWVbQi5zTF0pe3JldHVybiBsKHcpfXZhciBOPUIuc3ViTGFuZ3VhZ2VNb2RlPT0iY29udGludW91cyI/Qi50b3A6dW5kZWZpbmVkO3ZhciByPUIuc0w/ZChCLnNMLHcsdHJ1ZSxOKTpnKHcpO2lmKEIucj4wKXt2Kz1yLmtleXdvcmRfY291bnQ7QSs9ci5yfUIudG9wPXIudG9wO3JldHVybic8c3BhbiBjbGFzcz0iJytyLmxhbmd1YWdlKyciPicrci52YWx1ZSsiPC9zcGFuPiJ9ZnVuY3Rpb24gTCgpe3JldHVybiBCLnNMIT09dW5kZWZpbmVkP3ooKTpJKCl9ZnVuY3Rpb24gSyhPLHIpe3ZhciBOPU8uY04/JzxzcGFuIGNsYXNzPSInK08uY04rJyI+JzoiIjtpZihPLnJCKXt4Kz1OO3c9IiJ9ZWxzZXtpZihPLmVCKXt4Kz1sKHIpK047dz0iIn1lbHNle3grPU47dz1yfX1CPU9iamVjdC5jcmVhdGUoTyx7cGFyZW50Ont2YWx1ZTpCfX0pfWZ1bmN0aW9uIEQoTixyKXt3Kz1OO2lmKHI9PT11bmRlZmluZWQpe3grPUwoKTtyZXR1cm4gMH12YXIgUD1vKHIsQik7aWYoUCl7eCs9TCgpO0soUCxyKTtyZXR1cm4gUC5yQj8wOnIubGVuZ3RofXZhciBRPXMoQixyKTtpZihRKXt2YXIgTz1CO2lmKCEoTy5yRXx8Ty5lRSkpe3crPXJ9eCs9TCgpO2Rve2lmKEIuY04pe3grPSI8L3NwYW4+In1BKz1CLnI7Qj1CLnBhcmVudH13aGlsZShCIT1RLnBhcmVudCk7aWYoTy5lRSl7eCs9bChyKX13PSIiO2lmKFEuc3RhcnRzKXtLKFEuc3RhcnRzLCIiKX1yZXR1cm4gTy5yRT8wOnIubGVuZ3RofWlmKHQocixCKSl7dGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtICInK3IrJyIgZm9yIG1vZGUgIicrKEIuY058fCI8dW5uYW1lZD4iKSsnIicpfXcrPXI7cmV0dXJuIHIubGVuZ3RofHwxfXZhciBIPWVbRV07aWYoIUgpe3Rocm93IG5ldyBFcnJvcignVW5rbm93biBsYW5ndWFnZTogIicrRSsnIicpfWYoSCk7dmFyIEI9TXx8SDt2YXIgeD0iIjtmb3IodmFyIEY9QjtGIT1IO0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3g9JzxzcGFuIGNsYXNzPSInK0YuY04rJyI+Jyt4fX12YXIgdz0iIjt2YXIgQT0wO3ZhciB2PTA7dHJ5e3ZhciB1LHEscD0wO3doaWxlKHRydWUpe0IudC5sYXN0SW5kZXg9cDt1PUIudC5leGVjKEcpO2lmKCF1KXticmVha31xPUQoRy5zdWJzdHIocCx1LmluZGV4LXApLHVbMF0pO3A9dS5pbmRleCtxfUQoRy5zdWJzdHIocCkpO2Zvcih2YXIgRj1CO0YucGFyZW50O0Y9Ri5wYXJlbnQpe2lmKEYuY04pe3grPSI8L3NwYW4+In19cmV0dXJue3I6QSxrZXl3b3JkX2NvdW50OnYsdmFsdWU6eCxsYW5ndWFnZTpFLHRvcDpCfX1jYXRjaChKKXtpZihKLm1lc3NhZ2UuaW5kZXhPZigiSWxsZWdhbCIpIT0tMSl7cmV0dXJue3I6MCxrZXl3b3JkX2NvdW50OjAsdmFsdWU6bChHKX19ZWxzZXt0aHJvdyBKfX19ZnVuY3Rpb24gZyhzKXt2YXIgbz17a2V5d29yZF9jb3VudDowLHI6MCx2YWx1ZTpsKHMpfTt2YXIgcT1vO2Zvcih2YXIgcCBpbiBlKXtpZighZS5oYXNPd25Qcm9wZXJ0eShwKSl7Y29udGludWV9dmFyIHI9ZChwLHMsZmFsc2UpO3IubGFuZ3VhZ2U9cDtpZihyLmtleXdvcmRfY291bnQrci5yPnEua2V5d29yZF9jb3VudCtxLnIpe3E9cn1pZihyLmtleXdvcmRfY291bnQrci5yPm8ua2V5d29yZF9jb3VudCtvLnIpe3E9bztvPXJ9fWlmKHEubGFuZ3VhZ2Upe28uc2Vjb25kX2Jlc3Q9cX1yZXR1cm4gb31mdW5jdGlvbiBpKHEscCxvKXtpZihwKXtxPXEucmVwbGFjZSgvXigoPFtePl0rPnxcdCkrKS9nbSxmdW5jdGlvbihyLHYsdSx0KXtyZXR1cm4gdi5yZXBsYWNlKC9cdC9nLHApfSl9aWYobyl7cT1xLnJlcGxhY2UoL1xuL2csIjxicj4iKX1yZXR1cm4gcX1mdW5jdGlvbiBtKHIsdSxwKXt2YXIgdj1oKHIscCk7dmFyIHQ9YShyKTtpZih0PT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJufXZhciB3PXQ/ZCh0LHYsdHJ1ZSk6Zyh2KTt0PXcubGFuZ3VhZ2U7dmFyIG89YyhyKTtpZihvLmxlbmd0aCl7dmFyIHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIik7cS5pbm5lckhUTUw9dy52YWx1ZTt3LnZhbHVlPWoobyxjKHEpLHYpfXcudmFsdWU9aSh3LnZhbHVlLHUscCk7dmFyIHM9ci5jbGFzc05hbWU7aWYoIXMubWF0Y2goIihcXHN8XikobGFuZ3VhZ2UtKT8iK3QrIihcXHN8JCkiKSl7cz1zPyhzKyIgIit0KTp0fXIuaW5uZXJIVE1MPXcudmFsdWU7ci5jbGFzc05hbWU9cztyLnJlc3VsdD17bGFuZ3VhZ2U6dCxrdzp3LmtleXdvcmRfY291bnQscmU6dy5yfTtpZih3LnNlY29uZF9iZXN0KXtyLnNlY29uZF9iZXN0PXtsYW5ndWFnZTp3LnNlY29uZF9iZXN0Lmxhbmd1YWdlLGt3Oncuc2Vjb25kX2Jlc3Qua2V5d29yZF9jb3VudCxyZTp3LnNlY29uZF9iZXN0LnJ9fX1mdW5jdGlvbiBuKCl7aWYobi5jYWxsZWQpe3JldHVybn1uLmNhbGxlZD10cnVlO0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwicHJlIiksYikuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24obyl7bShvLGhsanMudGFiUmVwbGFjZSl9KX1mdW5jdGlvbiBrKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLG4sZmFsc2UpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixuLGZhbHNlKX12YXIgZT17fTt0aGlzLkxBTkdVQUdFUz1lO3RoaXMuaGlnaGxpZ2h0PWQ7dGhpcy5oaWdobGlnaHRBdXRvPWc7dGhpcy5maXhNYXJrdXA9aTt0aGlzLmhpZ2hsaWdodEJsb2NrPW07dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW47dGhpcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPWs7dGhpcy5JUj0iW2EtekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSIoXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcYlxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bLStdP1xcZCspPykiO3RoaXMuQk5SPSJcXGIoMGJbMDFdKykiO3RoaXMuUlNSPSIhfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFwqfFxcKj18XFwrfFxcKz18LHxcXC58LXwtPXwvfC89fDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXD98XFxbfFxce3xcXCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iO3RoaXMuQkU9e2I6IlxcXFxbXFxzXFxTXSIscjowfTt0aGlzLkFTTT17Y046InN0cmluZyIsYjoiJyIsZToiJyIsaToiXFxuIixjOlt0aGlzLkJFXSxyOjB9O3RoaXMuUVNNPXtjTjoic3RyaW5nIixiOiciJyxlOiciJyxpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5DTENNPXtjTjoiY29tbWVudCIsYjoiLy8iLGU6IiQifTt0aGlzLkNCTENMTT17Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8ifTt0aGlzLkhDTT17Y046ImNvbW1lbnQiLGI6IiMiLGU6IiQifTt0aGlzLk5NPXtjTjoibnVtYmVyIixiOnRoaXMuTlIscjowfTt0aGlzLkNOTT17Y046Im51bWJlciIsYjp0aGlzLkNOUixyOjB9O3RoaXMuQk5NPXtjTjoibnVtYmVyIixiOnRoaXMuQk5SLHI6MH07dGhpcy5SRUdFWFBfTU9ERT17Y046InJlZ2V4cCIsYjovXC8vLGU6L1wvW2dpbV0qLyxpOi9cbi8sYzpbdGhpcy5CRSx7YjovXFsvLGU6L1xdLyxyOjAsYzpbdGhpcy5CRV19XX07dGhpcy5pbmhlcml0PWZ1bmN0aW9uKHEscil7dmFyIG89e307Zm9yKHZhciBwIGluIHEpe29bcF09cVtwXX1pZihyKXtmb3IodmFyIHAgaW4gcil7b1twXT1yW3BdfX1yZXR1cm4gb319KCk7aGxqcy5MQU5HVUFHRVMuYmFzaD1mdW5jdGlvbihhKXt2YXIgYz17Y046InZhcmlhYmxlIixiOi9cJFtcd1xkI0BdW1x3XGRfXSovfTt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFx7KC4qPylcfS99O3ZhciBlPXtjTjoic3RyaW5nIixiOi8iLyxlOi8iLyxjOlthLkJFLGMsYix7Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfV0scjowfTt2YXIgZD17Y046InN0cmluZyIsYjovJy8sZTovJy8scjowfTtyZXR1cm57bDovLT9bYS16XSsvLGs6e2tleXdvcmQ6ImlmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciBicmVhayBjb250aW51ZSB3aGlsZSBpbiBkbyBkb25lIGV4aXQgcmV0dXJuIHNldCBkZWNsYXJlIGNhc2UgZXNhYyBleHBvcnQgZXhlYyIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSIsYnVpbHRfaW46InByaW50ZiBlY2hvIHJlYWQgY2QgcHdkIHB1c2hkIHBvcGQgZGlycyBsZXQgZXZhbCB1bnNldCB0eXBlc2V0IHJlYWRvbmx5IGdldG9wdHMgc291cmNlIHNob3B0IGNhbGxlciB0eXBlIGhhc2ggYmluZCBoZWxwIHN1ZG8iLG9wZXJhdG9yOiItbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEifSxjOlt7Y046InNoZWJhbmciLGI6L14jIVteXG5dK3NoXHMqJC8scjoxMH0se2NOOiJmdW5jdGlvbiIsYjovXHdbXHdcZF9dKlxzKlwoXHMqXClccypcey8sckI6dHJ1ZSxjOlt7Y046InRpdGxlIixiOi9cd1tcd1xkX10qL31dLHI6MH0sYS5IQ00sYS5OTSxlLGQsYyxiXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmNzPWZ1bmN0aW9uKGEpe3JldHVybntrOiJhYnN0cmFjdCBhcyBiYXNlIGJvb2wgYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2hlY2tlZCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWNpbWFsIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmFsc2UgZmluYWxseSBmaXhlZCBmbG9hdCBmb3IgZm9yZWFjaCBnb3RvIGlmIGltcGxpY2l0IGluIGludCBpbnRlcmZhY2UgaW50ZXJuYWwgaXMgbG9jayBsb25nIG5hbWVzcGFjZSBuZXcgbnVsbCBvYmplY3Qgb3BlcmF0b3Igb3V0IG92ZXJyaWRlIHBhcmFtcyBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmVhZG9ubHkgcmVmIHJldHVybiBzYnl0ZSBzZWFsZWQgc2hvcnQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVpbnQgdWxvbmcgdW5jaGVja2VkIHVuc2FmZSB1c2hvcnQgdXNpbmcgdmlydHVhbCB2b2xhdGlsZSB2b2lkIHdoaWxlIGFzeW5jIGF3YWl0IGFzY2VuZGluZyBkZXNjZW5kaW5nIGZyb20gZ2V0IGdyb3VwIGludG8gam9pbiBsZXQgb3JkZXJieSBwYXJ0aWFsIHNlbGVjdCBzZXQgdmFsdWUgdmFyIHdoZXJlIHlpZWxkIixjOlt7Y046ImNvbW1lbnQiLGI6Ii8vLyIsZToiJCIsckI6dHJ1ZSxjOlt7Y046InhtbERvY1RhZyIsYjoiLy8vfDwhLS18LS0+In0se2NOOiJ4bWxEb2NUYWciLGI6IjwvPyIsZToiPiJ9XX0sYS5DTENNLGEuQ0JMQ0xNLHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIixrOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSByZWdpb24gZW5kcmVnaW9uIHByYWdtYSBjaGVja3N1bSJ9LHtjTjoic3RyaW5nIixiOidAIicsZTonIicsYzpbe2I6JyIiJ31dfSxhLkFTTSxhLlFTTSxhLkNOTV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5ydWJ5PWZ1bmN0aW9uKGUpe3ZhciBhPSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGo9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBnPXtrZXl3b3JkOiJhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyBpZiBCRUdJTiByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuIG5leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgbmlsIGVsc2UgYnJlYWsgdW5kZWYgbm90IHN1cGVyIGNsYXNzIGNhc2UgcmVxdWlyZSB5aWVsZCBhbGlhcyB3aGlsZSBlbnN1cmUgZWxzaWYgb3IgaW5jbHVkZSJ9O3ZhciBjPXtjTjoieWFyZG9jdGFnIixiOiJAW0EtWmEtel0rIn07dmFyIGs9W3tjTjoiY29tbWVudCIsYjoiIyIsZToiJCIsYzpbY119LHtjTjoiY29tbWVudCIsYjoiXlxcPWJlZ2luIixlOiJeXFw9ZW5kIixjOltjXSxyOjEwfSx7Y046ImNvbW1lbnQiLGI6Il5fX0VORF9fIixlOiJcXG4kIn1dO3ZhciBkPXtjTjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6YSxrOmd9O3ZhciBpPVtlLkJFLGRdO3ZhciBiPVt7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6aSxyOjB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXCgiLGU6IlxcKSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFxbIixlOiJcXF0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddP3siLGU6In0iLGM6aX0se2NOOiJzdHJpbmciLGI6IiVbcXddPzwiLGU6Ij4iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LyIsZToiLyIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPy0iLGU6Ii0iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFx8IixlOiJcXHwiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjovXEJcPyhcXFxkezEsM318XFx4W0EtRmEtZjAtOV17MSwyfXxcXHVbQS1GYS1mMC05XXs0fXxcXD9cUylcYi99XTt2YXIgaD17Y046ImZ1bmN0aW9uIixiV0s6dHJ1ZSxlOiIgfCR8OyIsazoiZGVmIixjOlt7Y046InRpdGxlIixiOmosbDphLGs6Z30se2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixsOmEsazpnfV0uY29uY2F0KGspfTt2YXIgZj1rLmNvbmNhdChiLmNvbmNhdChbe2NOOiJjbGFzcyIsYldLOnRydWUsZToiJHw7IixrOiJjbGFzcyBtb2R1bGUiLGM6W3tjTjoidGl0bGUiLGI6IltBLVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixyOjB9LHtjTjoiaW5oZXJpdGFuY2UiLGI6IjxcXHMqIixjOlt7Y046InBhcmVudCIsYjoiKCIrZS5JUisiOjopPyIrZS5JUn1dfV0uY29uY2F0KGspfSxoLHtjTjoiY29uc3RhbnQiLGI6Iig6Oik/KFxcYltBLVpdXFx3Kig6Oik/KSsiLHI6MH0se2NOOiJzeW1ib2wiLGI6IjoiLGM6Yi5jb25jYXQoW3tiOmp9XSkscjowfSx7Y046InN5bWJvbCIsYjphKyI6IixyOjB9LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtjTjoidmFyaWFibGUiLGI6IihcXCRcXFcpfCgoXFwkfFxcQFxcQD8pKFxcdyspKSJ9LHtiOiIoIitlLlJTUisiKVxccyoiLGM6ay5jb25jYXQoW3tjTjoicmVnZXhwIixiOiIvIixlOiIvW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlcnsiLGU6In1bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyXFwoIixlOiJcXClbYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyISIsZToiIVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXFsiLGU6IlxcXVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfV0pLHI6MH1dKSk7ZC5jPWY7aC5jWzFdLmM9ZjtyZXR1cm57bDphLGs6ZyxjOmZ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5kaWZmPWZ1bmN0aW9uKGEpe3JldHVybntjOlt7Y046ImNodW5rIixiOiJeXFxAXFxAICtcXC1cXGQrLFxcZCsgK1xcK1xcZCssXFxkKyArXFxAXFxAJCIscjoxMH0se2NOOiJjaHVuayIsYjoiXlxcKlxcKlxcKiArXFxkKyxcXGQrICtcXCpcXCpcXCpcXCokIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwtXFwtXFwtICtcXGQrLFxcZCsgK1xcLVxcLVxcLVxcLSQiLHI6MTB9LHtjTjoiaGVhZGVyIixiOiJJbmRleDogIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Ij09PT09IixlOiI9PT09PSQifSx7Y046ImhlYWRlciIsYjoiXlxcLVxcLVxcLSIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwqezN9ICIsZToiJCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwrXFwrXFwrIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6IlxcKns1fSIsZToiXFwqezV9JCJ9LHtjTjoiYWRkaXRpb24iLGI6Il5cXCsiLGU6IiQifSx7Y046ImRlbGV0aW9uIixiOiJeXFwtIixlOiIkIn0se2NOOiJjaGFuZ2UiLGI6Il5cXCEiLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhc2NyaXB0PWZ1bmN0aW9uKGEpe3JldHVybntrOntrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5In0sYzpbYS5BU00sYS5RU00sYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLHtiOiIoIithLlJTUisifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsazoicmV0dXJuIHRocm93IGNhc2UiLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlJFR0VYUF9NT0RFLHtiOi88LyxlOi8+Oy8sc0w6InhtbCJ9XSxyOjB9LHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6L3svLGs6ImZ1bmN0aW9uIixjOlt7Y046InRpdGxlIixiOi9bQS1aYS16JF9dWzAtOUEtWmEteiRfXSovfSx7Y046InBhcmFtcyIsYjovXCgvLGU6L1wpLyxjOlthLkNMQ00sYS5DQkxDTE1dLGk6L1siJ1woXS99XSxpOi9cW3wlL31dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMueG1sPWZ1bmN0aW9uKGEpe3ZhciBjPSJbQS1aYS16MC05XFwuXzotXSsiO3ZhciBiPXtlVzp0cnVlLHI6MCxjOlt7Y046ImF0dHJpYnV0ZSIsYjpjLHI6MH0se2I6Jz0iJyxyQjp0cnVlLGU6JyInLGM6W3tjTjoidmFsdWUiLGI6JyInLGVXOnRydWV9XX0se2I6Ij0nIixyQjp0cnVlLGU6IiciLGM6W3tjTjoidmFsdWUiLGI6IiciLGVXOnRydWV9XX0se2I6Ij0iLGM6W3tjTjoidmFsdWUiLGI6IlteXFxzLz5dKyJ9XX1dfTtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046InBpIixiOiI8XFw/IixlOiJcXD8+IixyOjEwfSx7Y046ImRvY3R5cGUiLGI6IjwhRE9DVFlQRSIsZToiPiIscjoxMCxjOlt7YjoiXFxbIixlOiJcXF0ifV19LHtjTjoiY29tbWVudCIsYjoiPCEtLSIsZToiLS0+IixyOjEwfSx7Y046ImNkYXRhIixiOiI8XFwhXFxbQ0RBVEFcXFsiLGU6IlxcXVxcXT4iLHI6MTB9LHtjTjoidGFnIixiOiI8c3R5bGUoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InN0eWxlIn0sYzpbYl0sc3RhcnRzOntlOiI8L3N0eWxlPiIsckU6dHJ1ZSxzTDoiY3NzIn19LHtjTjoidGFnIixiOiI8c2NyaXB0KD89XFxzfD58JCkiLGU6Ij4iLGs6e3RpdGxlOiJzY3JpcHQifSxjOltiXSxzdGFydHM6e2U6IjxcL3NjcmlwdD4iLHJFOnRydWUsc0w6ImphdmFzY3JpcHQifX0se2I6IjwlIixlOiIlPiIsc0w6InZic2NyaXB0In0se2NOOiJ0YWciLGI6IjwvPyIsZToiLz8+IixyOjAsYzpbe2NOOiJ0aXRsZSIsYjoiW14gLz48XSsifSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFya2Rvd249ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiaGVhZGVyIixiOiJeI3sxLDN9IixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il4uKz9cXG5bPS1dezIsfSQifSx7YjoiPCIsZToiPiIsc0w6InhtbCIscjowfSx7Y046ImJ1bGxldCIsYjoiXihbKistXXwoXFxkK1xcLikpXFxzKyJ9LHtjTjoic3Ryb25nIixiOiJbKl9dezJ9Lis/WypfXXsyfSJ9LHtjTjoiZW1waGFzaXMiLGI6IlxcKi4rP1xcKiJ9LHtjTjoiZW1waGFzaXMiLGI6Il8uKz9fIixyOjB9LHtjTjoiYmxvY2txdW90ZSIsYjoiXj5cXHMrIixlOiIkIn0se2NOOiJjb2RlIixiOiJgLis/YCJ9LHtjTjoiY29kZSIsYjoiXiAgICAiLGU6IiQiLHI6MH0se2NOOiJob3Jpem9udGFsX3J1bGUiLGI6Il4tezMsfSIsZToiJCJ9LHtiOiJcXFsuKz9cXF1cXCguKz9cXCkiLHJCOnRydWUsYzpbe2NOOiJsaW5rX2xhYmVsIixiOiJcXFsuK1xcXSJ9LHtjTjoibGlua191cmwiLGI6IlxcKCIsZToiXFwpIixlQjp0cnVlLGVFOnRydWV9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3NzPWZ1bmN0aW9uKGEpe3ZhciBiPSJbYS16QS1aLV1bYS16QS1aMC05Xy1dKiI7dmFyIGM9e2NOOiJmdW5jdGlvbiIsYjpiKyJcXCgiLGU6IlxcKSIsYzpbInNlbGYiLGEuTk0sYS5BU00sYS5RU01dfTtyZXR1cm57Y0k6dHJ1ZSxpOiJbPS98J10iLGM6W2EuQ0JMQ0xNLHtjTjoiaWQiLGI6IlxcI1tBLVphLXowLTlfLV0rIn0se2NOOiJjbGFzcyIsYjoiXFwuW0EtWmEtejAtOV8tXSsiLHI6MH0se2NOOiJhdHRyX3NlbGVjdG9yIixiOiJcXFsiLGU6IlxcXSIsaToiJCJ9LHtjTjoicHNldWRvIixiOiI6KDopP1thLXpBLVowLTlcXF9cXC1cXCtcXChcXClcXFwiXFwnXSsifSx7Y046ImF0X3J1bGUiLGI6IkAoZm9udC1mYWNlfHBhZ2UpIixsOiJbYS16LV0rIixrOiJmb250LWZhY2UgcGFnZSJ9LHtjTjoiYXRfcnVsZSIsYjoiQCIsZToiW3s7XSIsYzpbe2NOOiJrZXl3b3JkIixiOi9cUysvfSx7YjovXHMvLGVXOnRydWUsZUU6dHJ1ZSxyOjAsYzpbYyxhLkFTTSxhLlFTTSxhLk5NXX1dfSx7Y046InRhZyIsYjpiLHI6MH0se2NOOiJydWxlcyIsYjoieyIsZToifSIsaToiW15cXHNdIixyOjAsYzpbYS5DQkxDTE0se2NOOiJydWxlIixiOiJbXlxcc10iLHJCOnRydWUsZToiOyIsZVc6dHJ1ZSxjOlt7Y046ImF0dHJpYnV0ZSIsYjoiW0EtWlxcX1xcLlxcLV0rIixlOiI6IixlRTp0cnVlLGk6IlteXFxzXSIsc3RhcnRzOntjTjoidmFsdWUiLGVXOnRydWUsZUU6dHJ1ZSxjOltjLGEuTk0sYS5RU00sYS5BU00sYS5DQkxDTE0se2NOOiJoZXhjb2xvciIsYjoiI1swLTlBLUZhLWZdKyJ9LHtjTjoiaW1wb3J0YW50IixiOiIhaW1wb3J0YW50In1dfX1dfV19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmh0dHA9ZnVuY3Rpb24oYSl7cmV0dXJue2k6IlxcUyIsYzpbe2NOOiJzdGF0dXMiLGI6Il5IVFRQL1swLTlcXC5dKyIsZToiJCIsYzpbe2NOOiJudW1iZXIiLGI6IlxcYlxcZHszfVxcYiJ9XX0se2NOOiJyZXF1ZXN0IixiOiJeW0EtWl0rICguKj8pIEhUVFAvWzAtOVxcLl0rJCIsckI6dHJ1ZSxlOiIkIixjOlt7Y046InN0cmluZyIsYjoiICIsZToiICIsZUI6dHJ1ZSxlRTp0cnVlfV19LHtjTjoiYXR0cmlidXRlIixiOiJeXFx3IixlOiI6ICIsZUU6dHJ1ZSxpOiJcXG58XFxzfD0iLHN0YXJ0czp7Y046InN0cmluZyIsZToiJCJ9fSx7YjoiXFxuXFxuIixzdGFydHM6e3NMOiIiLGVXOnRydWV9fV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5qYXZhPWZ1bmN0aW9uKGEpe3JldHVybntrOiJmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0IGZvciB0cnVlIHdoaWxlIGxvbmcgdGhyb3cgc3RyaWN0ZnAgZmluYWxseSBwcm90ZWN0ZWQgaW1wb3J0IG5hdGl2ZSBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgYnJlYWsgdHJhbnNpZW50IG5ldyBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyIsYzpbe2NOOiJqYXZhZG9jIixiOiIvXFwqXFwqIixlOiJcXCovIixjOlt7Y046ImphdmFkb2N0YWciLGI6IihefFxccylAW0EtWmEtel0rIn1dLHI6MTB9LGEuQ0xDTSxhLkNCTENMTSxhLkFTTSxhLlFTTSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyBpbnRlcmZhY2UiLGVFOnRydWUsaToiOiIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMgaW1wbGVtZW50cyIscjoxMH0se2NOOiJ0aXRsZSIsYjphLlVJUn1dfSxhLkNOTSx7Y046ImFubm90YXRpb24iLGI6IkBbQS1aYS16XSsifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5waHA9ZnVuY3Rpb24oYSl7dmFyIGU9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkK1thLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZmXSoifTt2YXIgYj1bYS5pbmhlcml0KGEuQVNNLHtpOm51bGx9KSxhLmluaGVyaXQoYS5RU00se2k6bnVsbH0pLHtjTjoic3RyaW5nIixiOidiIicsZTonIicsYzpbYS5CRV19LHtjTjoic3RyaW5nIixiOiJiJyIsZToiJyIsYzpbYS5CRV19XTt2YXIgYz1bYS5CTk0sYS5DTk1dO3ZhciBkPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3JldHVybntjSTp0cnVlLGw6YS5VSVIsazoiYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciB3aGlsZSBpc3NldCBwdWJsaWMgcHJvdGVjdGVkIGV4aXQgZm9yZWFjaCB0aHJvdyBlbHNlaWYgaW5jbHVkZSBfX0ZJTEVfXyBlbXB0eSByZXF1aXJlX29uY2UgZG8geG9yIHJldHVybiBpbXBsZW1lbnRzIHBhcmVudCBjbG9uZSB1c2UgX19DTEFTU19fIF9fTElORV9fIGVsc2UgYnJlYWsgcHJpbnQgZXZhbCBuZXcgY2F0Y2ggX19NRVRIT0RfXyBjYXNlIGV4Y2VwdGlvbiBkZWZhdWx0IGRpZSByZXF1aXJlIF9fRlVOQ1RJT05fXyBlbmRkZWNsYXJlIGZpbmFsIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSBlbmRmb3IgZW5kaWYgZGVjbGFyZSB1bnNldCB0cnVlIGZhbHNlIG5hbWVzcGFjZSB0cmFpdCBnb3RvIGluc3RhbmNlb2YgaW5zdGVhZG9mIF9fRElSX18gX19OQU1FU1BBQ0VfXyB5aWVsZCBmaW5hbGx5IixjOlthLkNMQ00sYS5IQ00se2NOOiJjb21tZW50IixiOiIvXFwqIixlOiJcXCovIixjOlt7Y046InBocGRvYyIsYjoiXFxzQFtBLVphLXpdKyJ9XX0se2NOOiJjb21tZW50IixiOiJfX2hhbHRfY29tcGlsZXIuKz87IixlVzp0cnVlLGs6Il9faGFsdF9jb21waWxlciIsbDphLlVJUn0se2NOOiJzdHJpbmciLGI6Ijw8PFsnXCJdP1xcdytbJ1wiXT8kIixlOiJeXFx3KzsiLGM6W2EuQkVdfSx7Y046InByZXByb2Nlc3NvciIsYjoiPFxcP3BocCIscjoxMH0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IlxcPz4ifSxlLHtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6InsiLGs6ImZ1bmN0aW9uIixpOiJcXCR8XFxbfCUiLGM6W2Qse2NOOiJwYXJhbXMiLGI6IlxcKCIsZToiXFwpIixjOlsic2VsZiIsZSxhLkNCTENMTV0uY29uY2F0KGIpLmNvbmNhdChjKX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiJ7IixrOiJjbGFzcyIsaToiWzpcXChcXCRdIixjOlt7YldLOnRydWUsZVc6dHJ1ZSxrOiJleHRlbmRzIixjOltkXX0sZF19LHtiOiI9PiJ9XS5jb25jYXQoYikuY29uY2F0KGMpfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucHl0aG9uPWZ1bmN0aW9uKGEpe3ZhciBmPXtjTjoicHJvbXB0IixiOi9eKD4+PnxcLlwuXC4pIC99O3ZhciBjPVt7Y046InN0cmluZyIsYjovKHV8Yik/cj8nJycvLGU6LycnJy8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fGIpP3I/IiIiLyxlOi8iIiIvLGM6W2ZdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKScvLGU6LycvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8odXxyfHVyKSIvLGU6LyIvLGM6W2EuQkVdLHI6MTB9LHtjTjoic3RyaW5nIixiOi8oYnxiciknLyxlOi8nLyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6LyhifGJyKSIvLGU6LyIvLGM6W2EuQkVdfV0uY29uY2F0KFthLkFTTSxhLlFTTV0pO3ZhciBlPXtjTjoidGl0bGUiLGI6YS5VSVJ9O3ZhciBkPXtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6WyJzZWxmIixhLkNOTSxmXS5jb25jYXQoYyl9O3ZhciBiPXtiV0s6dHJ1ZSxlOi86LyxpOi9bJHs9O1xuXS8sYzpbZSxkXSxyOjEwfTtyZXR1cm57azp7a2V5d29yZDoiYW5kIGVsaWYgaXMgZ2xvYmFsIGFzIGluIGlmIGZyb20gcmFpc2UgZm9yIGV4Y2VwdCBmaW5hbGx5IHByaW50IGltcG9ydCBwYXNzIHJldHVybiBleGVjIGVsc2UgYnJlYWsgbm90IHdpdGggY2xhc3MgYXNzZXJ0IHlpZWxkIHRyeSB3aGlsZSBjb250aW51ZSBkZWwgb3IgZGVmIGxhbWJkYSBub25sb2NhbHwxMCBOb25lIFRydWUgRmFsc2UiLGJ1aWx0X2luOiJFbGxpcHNpcyBOb3RJbXBsZW1lbnRlZCJ9LGk6Lyg8XC98LT58XD8pLyxjOmMuY29uY2F0KFtmLGEuSENNLGEuaW5oZXJpdChiLHtjTjoiZnVuY3Rpb24iLGs6ImRlZiJ9KSxhLmluaGVyaXQoYix7Y046ImNsYXNzIixrOiJjbGFzcyJ9KSxhLkNOTSx7Y046ImRlY29yYXRvciIsYjovQC8sZTovJC99LHtiOi9cYihwcmludHxleGVjKVwoL31dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnNxbD1mdW5jdGlvbihhKXtyZXR1cm57Y0k6dHJ1ZSxjOlt7Y046Im9wZXJhdG9yIixiOiIoYmVnaW58ZW5kfHN0YXJ0fGNvbW1pdHxyb2xsYmFja3xzYXZlcG9pbnR8bG9ja3xhbHRlcnxjcmVhdGV8ZHJvcHxyZW5hbWV8Y2FsbHxkZWxldGV8ZG98aGFuZGxlcnxpbnNlcnR8bG9hZHxyZXBsYWNlfHNlbGVjdHx0cnVuY2F0ZXx1cGRhdGV8c2V0fHNob3d8cHJhZ21hfGdyYW50KVxcYig/ITopIixlOiI7IixlVzp0cnVlLGs6e2tleXdvcmQ6ImFsbCBwYXJ0aWFsIGdsb2JhbCBtb250aCBjdXJyZW50X3RpbWVzdGFtcCB1c2luZyBnbyByZXZva2Ugc21hbGxpbnQgaW5kaWNhdG9yIGVuZC1leGVjIGRpc2Nvbm5lY3Qgem9uZSB3aXRoIGNoYXJhY3RlciBhc3NlcnRpb24gdG8gYWRkIGN1cnJlbnRfdXNlciB1c2FnZSBpbnB1dCBsb2NhbCBhbHRlciBtYXRjaCBjb2xsYXRlIHJlYWwgdGhlbiByb2xsYmFjayBnZXQgcmVhZCB0aW1lc3RhbXAgc2Vzc2lvbl91c2VyIG5vdCBpbnRlZ2VyIGJpdCB1bmlxdWUgZGF5IG1pbnV0ZSBkZXNjIGluc2VydCBleGVjdXRlIGxpa2UgaWxpa2V8MiBsZXZlbCBkZWNpbWFsIGRyb3AgY29udGludWUgaXNvbGF0aW9uIGZvdW5kIHdoZXJlIGNvbnN0cmFpbnRzIGRvbWFpbiByaWdodCBuYXRpb25hbCBzb21lIG1vZHVsZSB0cmFuc2FjdGlvbiByZWxhdGl2ZSBzZWNvbmQgY29ubmVjdCBlc2NhcGUgY2xvc2Ugc3lzdGVtX3VzZXIgZm9yIGRlZmVycmVkIHNlY3Rpb24gY2FzdCBjdXJyZW50IHNxbHN0YXRlIGFsbG9jYXRlIGludGVyc2VjdCBkZWFsbG9jYXRlIG51bWVyaWMgcHVibGljIHByZXNlcnZlIGZ1bGwgZ290byBpbml0aWFsbHkgYXNjIG5vIGtleSBvdXRwdXQgY29sbGF0aW9uIGdyb3VwIGJ5IHVuaW9uIHNlc3Npb24gYm90aCBsYXN0IGxhbmd1YWdlIGNvbnN0cmFpbnQgY29sdW1uIG9mIHNwYWNlIGZvcmVpZ24gZGVmZXJyYWJsZSBwcmlvciBjb25uZWN0aW9uIHVua25vd24gYWN0aW9uIGNvbW1pdCB2aWV3IG9yIGZpcnN0IGludG8gZmxvYXQgeWVhciBwcmltYXJ5IGNhc2NhZGVkIGV4Y2VwdCByZXN0cmljdCBzZXQgcmVmZXJlbmNlcyBuYW1lcyB0YWJsZSBvdXRlciBvcGVuIHNlbGVjdCBzaXplIGFyZSByb3dzIGZyb20gcHJlcGFyZSBkaXN0aW5jdCBsZWFkaW5nIGNyZWF0ZSBvbmx5IG5leHQgaW5uZXIgYXV0aG9yaXphdGlvbiBzY2hlbWEgY29ycmVzcG9uZGluZyBvcHRpb24gZGVjbGFyZSBwcmVjaXNpb24gaW1tZWRpYXRlIGVsc2UgdGltZXpvbmVfbWludXRlIGV4dGVybmFsIHZhcnlpbmcgdHJhbnNsYXRpb24gdHJ1ZSBjYXNlIGV4Y2VwdGlvbiBqb2luIGhvdXIgZGVmYXVsdCBkb3VibGUgc2Nyb2xsIHZhbHVlIGN1cnNvciBkZXNjcmlwdG9yIHZhbHVlcyBkZWMgZmV0Y2ggcHJvY2VkdXJlIGRlbGV0ZSBhbmQgZmFsc2UgaW50IGlzIGRlc2NyaWJlIGNoYXIgYXMgYXQgaW4gdmFyY2hhciBudWxsIHRyYWlsaW5nIGFueSBhYnNvbHV0ZSBjdXJyZW50X3RpbWUgZW5kIGdyYW50IHByaXZpbGVnZXMgd2hlbiBjcm9zcyBjaGVjayB3cml0ZSBjdXJyZW50X2RhdGUgcGFkIGJlZ2luIHRlbXBvcmFyeSBleGVjIHRpbWUgdXBkYXRlIGNhdGFsb2cgdXNlciBzcWwgZGF0ZSBvbiBpZGVudGl0eSB0aW1lem9uZV9ob3VyIG5hdHVyYWwgd2hlbmV2ZXIgaW50ZXJ2YWwgd29yayBvcmRlciBjYXNjYWRlIGRpYWdub3N0aWNzIG5jaGFyIGhhdmluZyBsZWZ0IGNhbGwgZG8gaGFuZGxlciBsb2FkIHJlcGxhY2UgdHJ1bmNhdGUgc3RhcnQgbG9jayBzaG93IHByYWdtYSBleGlzdHMgbnVtYmVyIHRyaWdnZXIgaWYgYmVmb3JlIGFmdGVyIGVhY2ggcm93IixhZ2dyZWdhdGU6ImNvdW50IHN1bSBtaW4gbWF4IGF2ZyJ9LGM6W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOlthLkJFLHtiOiInJyJ9XSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOlthLkJFLHtiOiciIid9XSxyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOlthLkJFXX0sYS5DTk1dfSxhLkNCTENMTSx7Y046ImNvbW1lbnQiLGI6Ii0tIixlOiIkIn1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaW5pPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGk6IlteXFxzXSIsYzpbe2NOOiJjb21tZW50IixiOiI7IixlOiIkIn0se2NOOiJ0aXRsZSIsYjoiXlxcWyIsZToiXFxdIn0se2NOOiJzZXR0aW5nIixiOiJeW2EtejAtOVxcW1xcXV8tXStbIFxcdF0qPVsgXFx0XSoiLGU6IiQiLGM6W3tjTjoidmFsdWUiLGVXOnRydWUsazoib24gb2ZmIHRydWUgZmFsc2UgeWVzIG5vIixjOlthLlFTTSxhLk5NXSxyOjB9XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMucGVybD1mdW5jdGlvbihlKXt2YXIgYT0iZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjIG1hIHN5c3dyaXRlIHRyIHNlbmQgdW1hc2sgc3lzb3BlbiBzaG13cml0ZSB2ZWMgcXggdXRpbWUgbG9jYWwgb2N0IHNlbWN0bCBsb2NhbHRpbWUgcmVhZHBpcGUgZG8gcmV0dXJuIGZvcm1hdCByZWFkIHNwcmludGYgZGJtb3BlbiBwb3AgZ2V0cGdycCBub3QgZ2V0cHduYW0gcmV3aW5kZGlyIHFxZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50IHNodXRkb3duIGR1bXAgY2hvbXAgY29ubmVjdCBnZXRzb2NrbmFtZSBkaWUgc29ja2V0cGFpciBjbG9zZSBmbG9jayBleGlzdHMgaW5kZXggc2htZ2V0c3ViIGZvciBlbmRwd2VudCByZWRvIGxzdGF0IG1zZ2N0bCBzZXRwZ3JwIGFicyBleGl0IHNlbGVjdCBwcmludCByZWYgZ2V0aG9zdGJ5YWRkciB1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCBnZXRwZWVybmFtZSByZWN2IGxvZyBzZXRzb2Nrb3B0IGNvcyBsYXN0IHJldmVyc2UgZ2V0aG9zdGJ5bmFtZSBnZXRncm5hbSBzdHVkeSBmb3JtbGluZSBlbmRob3N0ZW50IHRpbWVzIGNob3AgbGVuZ3RoIGdldGhvc3RlbnQgZ2V0bmV0ZW50IHBhY2sgZ2V0cHJvdG9lbnQgZ2V0c2VydmJ5bmFtZSByYW5kIG1rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgZ2V0c29ja29wdCBnZXRwcmlvcml0eSByaW5kZXggd2FudGFycmF5IGhleCBzeXN0ZW0gZ2V0c2VydmJ5cG9ydCBlbmRzZXJ2ZW50IGludCBjaHIgdW50aWUgcm1kaXIgcHJvdG90eXBlIHRlbGwgbGlzdGVuIGZvcmsgc2htcmVhZCB1Y2ZpcnN0IHNldHByb3RvZW50IGVsc2Ugc3lzc2VlayBsaW5rIGdldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciBsY2ZpcnN0IHVudGlsIHdhcm4gd2hpbGUgdmFsdWVzIHNoaWZ0IHRlbGxkaXIgZ2V0cHd1aWQgbXkgZ2V0cHJvdG9ieW51bWJlciBkZWxldGUgYW5kIHNvcnQgdWMgZGVmaW5lZCBzcmFuZCBhY2NlcHQgcGFja2FnZSBzZWVrZGlyIGdldHByb3RvYnluYW1lIHNlbW9wIG91ciByZW5hbWUgc2VlayBpZiBxfDAgY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoIHRpZSBzaW4gbXNnZ2V0IG1hcCBzdGF0IGdldGxvZ2luIHVubGVzcyBlbHNpZiB0cnVuY2F0ZSBleGVjIGtleXMgZ2xvYiB0aWVkIGNsb3NlZGlyaW9jdGwgc29ja2V0IHJlYWRsaW5rIGV2YWwgeG9yIHJlYWRsaW5lIGJpbm1vZGUgc2V0c2VydmVudCBlb2Ygb3JkIGJpbmQgYWxhcm0gcGlwZSBhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbiI7dmFyIGQ9e2NOOiJzdWJzdCIsYjoiWyRAXVxceyIsZToiXFx9IixrOmEscjoxMH07dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkIn07dmFyIGk9e2NOOiJ2YXJpYWJsZSIsYjoiW1xcJFxcJVxcQFxcKl0oXFxeXFx3XFxifCNcXHcrKFxcOlxcOlxcdyspKnxbXlxcc1xcd3tdfHtcXHcrfXxcXHcrKFxcOlxcOlxcdyopKikifTt2YXIgZj1bZS5CRSxkLGIsaV07dmFyIGg9e2I6Ii0+IixjOlt7YjplLklSfSx7YjoieyIsZToifSJ9XX07dmFyIGc9e2NOOiJjb21tZW50IixiOiJeKF9fRU5EX198X19EQVRBX18pIixlOiJcXG4kIixyOjV9O3ZhciBjPVtiLGksZS5IQ00sZyx7Y046ImNvbW1lbnQiLGI6Il5cXD1cXHciLGU6IlxcPWN1dCIsZVc6dHJ1ZX0saCx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFwoIixlOiJcXCkiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxceyIsZToiXFx9IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx8IixlOiJcXHwiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InF3XFxzK3EiLGU6InEiLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltlLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOmYscjowfSx7Y046InN0cmluZyIsYjoiYCIsZToiYCIsYzpbZS5CRV19LHtjTjoic3RyaW5nIixiOiJ7XFx3K30iLHI6MH0se2NOOiJzdHJpbmciLGI6Ii0/XFx3K1xccypcXD1cXD4iLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2I6IigiK2UuUlNSKyJ8XFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxiKVxccyoiLGs6InNwbGl0IHJldHVybiBwcmludCByZXZlcnNlIGdyZXAiLHI6MCxjOltlLkhDTSxnLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2UuQkVdLHI6MH1dfSx7Y046InN1YiIsYldLOnRydWUsZToiKFxccypcXCguKj9cXCkpP1s7e10iLGs6InN1YiIscjo1fSx7Y046Im9wZXJhdG9yIixiOiItXFx3XFxiIixyOjB9XTtkLmM9YztoLmNbMV0uYz1jO3JldHVybntrOmEsYzpjfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMub2JqZWN0aXZlYz1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgc2l6ZW9mIHR5cGVkZWYgY29uc3Qgc3RydWN0IGZvciB1bmlvbiB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCBtdXRhYmxlIGlmIHB1YmxpYyBkbyByZXR1cm4gZ290byB2b2lkIGVudW0gZWxzZSBicmVhayBleHRlcm4gYXNtIGNhc2Ugc2hvcnQgZGVmYXVsdCBkb3VibGUgdGhyb3cgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSByZWFkb25seSBhc3NpZ24gcHJvcGVydHkgc2VsZiBzeW5jaHJvbml6ZWQgZW5kIHN5bnRoZXNpemUgaWQgb3B0aW9uYWwgcmVxdWlyZWQgbm9uYXRvbWljIHN1cGVyIHVuaWNoYXIgZmluYWxseSBkeW5hbWljIElCT3V0bGV0IElCQWN0aW9uIHNlbGVjdG9yIHN0cm9uZyB3ZWFrIHJlYWRvbmx5IixsaXRlcmFsOiJmYWxzZSB0cnVlIEZBTFNFIFRSVUUgbmlsIFlFUyBOTyBOVUxMIixidWlsdF9pbjoiTlNTdHJpbmcgTlNEaWN0aW9uYXJ5IENHUmVjdCBDR1BvaW50IFVJQnV0dG9uIFVJTGFiZWwgVUlUZXh0VmlldyBVSVdlYlZpZXcgTUtNYXBWaWV3IFVJU2VnbWVudGVkQ29udHJvbCBOU09iamVjdCBVSVRhYmxlVmlld0RlbGVnYXRlIFVJVGFibGVWaWV3RGF0YVNvdXJjZSBOU1RocmVhZCBVSUFjdGl2aXR5SW5kaWNhdG9yIFVJVGFiYmFyIFVJVG9vbEJhciBVSUJhckJ1dHRvbkl0ZW0gVUlJbWFnZVZpZXcgTlNBdXRvcmVsZWFzZVBvb2wgVUlUYWJsZVZpZXcgQk9PTCBOU0ludGVnZXIgQ0dGbG9hdCBOU0V4Y2VwdGlvbiBOU0xvZyBOU011dGFibGVTdHJpbmcgTlNNdXRhYmxlQXJyYXkgTlNNdXRhYmxlRGljdGlvbmFyeSBOU1VSTCBOU0luZGV4UGF0aCBDR1NpemUgVUlUYWJsZVZpZXdDZWxsIFVJVmlldyBVSVZpZXdDb250cm9sbGVyIFVJTmF2aWdhdGlvbkJhciBVSU5hdmlnYXRpb25Db250cm9sbGVyIFVJVGFiQmFyQ29udHJvbGxlciBVSVBvcG92ZXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXJEZWxlZ2F0ZSBVSUltYWdlIE5TTnVtYmVyIFVJU2VhcmNoQmFyIE5TRmV0Y2hlZFJlc3VsdHNDb250cm9sbGVyIE5TRmV0Y2hlZFJlc3VsdHNDaGFuZ2VUeXBlIFVJU2Nyb2xsVmlldyBVSVNjcm9sbFZpZXdEZWxlZ2F0ZSBVSUVkZ2VJbnNldHMgVUlDb2xvciBVSUZvbnQgVUlBcHBsaWNhdGlvbiBOU05vdEZvdW5kIE5TTm90aWZpY2F0aW9uQ2VudGVyIE5TTm90aWZpY2F0aW9uIFVJTG9jYWxOb3RpZmljYXRpb24gTlNCdW5kbGUgTlNGaWxlTWFuYWdlciBOU1RpbWVJbnRlcnZhbCBOU0RhdGUgTlNDYWxlbmRhciBOU1VzZXJEZWZhdWx0cyBVSVdpbmRvdyBOU1JhbmdlIE5TQXJyYXkgTlNFcnJvciBOU1VSTFJlcXVlc3QgTlNVUkxDb25uZWN0aW9uIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gTVBNb3ZpZVBsYXllckNvbnRyb2xsZXIgZGlzcGF0Y2hfb25jZV90IGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hfc3luYyBkaXNwYXRjaF9hc3luYyBkaXNwYXRjaF9vbmNlIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuQ05NLGEuUVNNLHtjTjoic3RyaW5nIixiOiInIixlOiJbXlxcXFxdJyIsaToiW15cXFxcXVteJ10ifSx7Y046InByZXByb2Nlc3NvciIsYjoiI2ltcG9ydCIsZToiJCIsYzpbe2NOOiJ0aXRsZSIsYjonIicsZTonIid9LHtjTjoidGl0bGUiLGI6IjwiLGU6Ij4ifV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjIixlOiIkIn0se2NOOiJjbGFzcyIsYldLOnRydWUsZToiKHt8JCkiLGs6ImludGVyZmFjZSBjbGFzcyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiIsYzpbe2NOOiJpZCIsYjphLlVJUn1dfSx7Y046InZhcmlhYmxlIixiOiJcXC4iK2EuVUlSLHI6MH1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY29mZmVlc2NyaXB0PWZ1bmN0aW9uKGMpe3ZhciBiPXtrZXl3b3JkOiJpbiBpZiBmb3Igd2hpbGUgZmluYWxseSBuZXcgZG8gcmV0dXJuIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB0aHJvdyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBkZWJ1Z2dlciBzdXBlciB0aGVuIHVubGVzcyB1bnRpbCBsb29wIG9mIGJ5IHdoZW4gYW5kIG9yIGlzIGlzbnQgbm90IixsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIHllcyBubyBvbiBvZmYiLHJlc2VydmVkOiJjYXNlIGRlZmF1bHQgZnVuY3Rpb24gdmFyIHZvaWQgd2l0aCBjb25zdCBsZXQgZW51bSBleHBvcnQgaW1wb3J0IG5hdGl2ZSBfX2hhc1Byb3AgX19leHRlbmRzIF9fc2xpY2UgX19iaW5kIF9faW5kZXhPZiIsYnVpbHRfaW46Im5wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGV4cG9ydHMgZ2xvYmFsIHdpbmRvdyBkb2N1bWVudCJ9O3ZhciBhPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiO3ZhciBmPXtjTjoidGl0bGUiLGI6YX07dmFyIGU9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsazpiLH07dmFyIGQ9W2MuQk5NLGMuaW5oZXJpdChjLkNOTSx7c3RhcnRzOntlOiIoXFxzKi8pPyIscjowfX0pLHtjTjoic3RyaW5nIixiOiInJyciLGU6IicnJyIsYzpbYy5CRV19LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltjLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciIiInLGU6JyIiIicsYzpbYy5CRSxlXX0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2MuQkUsZV0scjowfSx7Y046InJlZ2V4cCIsYjoiLy8vIixlOiIvLy8iLGM6W2MuSENNXX0se2NOOiJyZWdleHAiLGI6Ii8vW2dpbV0qIixyOjB9LHtjTjoicmVnZXhwIixiOiIvXFxTKFxcXFwufFteXFxuXSkqPy9bZ2ltXSooPz1cXHN8XFxXfCQpIn0se2NOOiJwcm9wZXJ0eSIsYjoiQCIrYX0se2I6ImAiLGU6ImAiLGVCOnRydWUsZUU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9XTtlLmM9ZDtyZXR1cm57azpiLGM6ZC5jb25jYXQoW3tjTjoiY29tbWVudCIsYjoiIyMjIixlOiIjIyMifSxjLkhDTSx7Y046ImZ1bmN0aW9uIixiOiIoIithKyJcXHMqPVxccyopPyhcXCguKlxcKSk/XFxzKlstPV0+IixlOiJbLT1dPiIsckI6dHJ1ZSxjOltmLHtjTjoicGFyYW1zIixiOiJcXCgiLHJCOnRydWUsYzpbe2I6L1woLyxlOi9cKS8sazpiLGM6WyJzZWxmIl0uY29uY2F0KGQpfV19XX0se2NOOiJjbGFzcyIsYldLOnRydWUsazoiY2xhc3MiLGU6IiQiLGk6Ils6XFxbXFxdXSIsYzpbe2JXSzp0cnVlLGs6ImV4dGVuZHMiLGVXOnRydWUsaToiOiIsYzpbZl19LGZdfSx7Y046ImF0dHJpYnV0ZSIsYjphKyI6IixlOiI6IixyQjp0cnVlLGVFOnRydWV9XSl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5uZ2lueD1mdW5jdGlvbihiKXt2YXIgYz1be2NOOiJ2YXJpYWJsZSIsYjoiXFwkXFxkKyJ9LHtjTjoidmFyaWFibGUiLGI6IlxcJHsiLGU6In0ifSx7Y046InZhcmlhYmxlIixiOiJbXFwkXFxAXSIrYi5VSVJ9XTt2YXIgYT17ZVc6dHJ1ZSxsOiJbYS16L19dKyIsazp7YnVpbHRfaW46Im9uIG9mZiB5ZXMgbm8gdHJ1ZSBmYWxzZSBub25lIGJsb2NrZWQgZGVidWcgaW5mbyBub3RpY2Ugd2FybiBlcnJvciBjcml0IHNlbGVjdCBicmVhayBsYXN0IHBlcm1hbmVudCByZWRpcmVjdCBrcXVldWUgcnRzaWcgZXBvbGwgcG9sbCAvZGV2L3BvbGwifSxyOjAsaToiPT4iLGM6W2IuSENNLHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbYi5CRV0uY29uY2F0KGMpLHI6MH0se2NOOiJ1cmwiLGI6IihbYS16XSspOi8iLGU6IlxccyIsZVc6dHJ1ZSxlRTp0cnVlfSx7Y046InJlZ2V4cCIsYjoiXFxzXFxeIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6In5cXCo/XFxzKyIsZToiXFxzfHt8OyIsckU6dHJ1ZSxjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoicmVnZXhwIixiOiJcXCooXFwuW2EtelxcLV0rKSsiLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IihbYS16XFwtXStcXC4pK1xcKiIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046Im51bWJlciIsYjoiXFxiXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM30oOlxcZHsxLDV9KT9cXGIifSx7Y046Im51bWJlciIsYjoiXFxiXFxkK1trS21NZ0dkc2hkd3ldKlxcYiIscjowfV0uY29uY2F0KGMpfTtyZXR1cm57YzpbYi5IQ00se2I6Yi5VSVIrIlxccyIsZToiO3x7IixyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6Yi5VSVIsc3RhcnRzOmF9XSxyOjB9XSxpOiJbXlxcc1xcfV0ifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuanNvbj1mdW5jdGlvbihhKXt2YXIgZT17bGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIn07dmFyIGQ9W2EuUVNNLGEuQ05NXTt2YXIgYz17Y046InZhbHVlIixlOiIsIixlVzp0cnVlLGVFOnRydWUsYzpkLGs6ZX07dmFyIGI9e2I6InsiLGU6In0iLGM6W3tjTjoiYXR0cmlidXRlIixiOidcXHMqIicsZTonIlxccyo6XFxzKicsZUI6dHJ1ZSxlRTp0cnVlLGM6W2EuQkVdLGk6IlxcbiIsc3RhcnRzOmN9XSxpOiJcXFMifTt2YXIgZj17YjoiXFxbIixlOiJcXF0iLGM6W2EuaW5oZXJpdChjLHtjTjpudWxsfSldLGk6IlxcUyJ9O2Quc3BsaWNlKGQubGVuZ3RoLDAsYixmKTtyZXR1cm57YzpkLGs6ZSxpOiJcXFMifX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuYXBhY2hlPWZ1bmN0aW9uKGEpe3ZhciBiPXtjTjoibnVtYmVyIixiOiJbXFwkJV1cXGQrIn07cmV0dXJue2NJOnRydWUsYzpbYS5IQ00se2NOOiJ0YWciLGI6IjwvPyIsZToiPiJ9LHtjTjoia2V5d29yZCIsYjovXHcrLyxyOjAsazp7Y29tbW9uOiJvcmRlciBkZW55IGFsbG93IHNldGVudiByZXdyaXRlcnVsZSByZXdyaXRlZW5naW5lIHJld3JpdGVjb25kIGRvY3VtZW50cm9vdCBzZXRoYW5kbGVyIGVycm9yZG9jdW1lbnQgbG9hZG1vZHVsZSBvcHRpb25zIGhlYWRlciBsaXN0ZW4gc2VydmVycm9vdCBzZXJ2ZXJuYW1lIn0sc3RhcnRzOntlOi8kLyxyOjAsazp7bGl0ZXJhbDoib24gb2ZmIGFsbCJ9LGM6W3tjTjoic3FicmFja2V0IixiOiJcXHNcXFsiLGU6IlxcXSQifSx7Y046ImNicmFja2V0IixiOiJbXFwkJV1cXHsiLGU6IlxcfSIsYzpbInNlbGYiLGJdfSxiLGEuUVNNXX19XSxpOi9cUy99fShobGpzKTtobGpzLkxBTkdVQUdFUy5jcHA9ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImZhbHNlIGludCBmbG9hdCB3aGlsZSBwcml2YXRlIGNoYXIgY2F0Y2ggZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mIGR5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3Qgc3RydWN0IGZvciBzdGF0aWNfY2FzdHwxMCB1bmlvbiBuYW1lc3BhY2UgdW5zaWduZWQgbG9uZyB0aHJvdyB2b2xhdGlsZSBzdGF0aWMgcHJvdGVjdGVkIGJvb2wgdGVtcGxhdGUgbXV0YWJsZSBpZiBwdWJsaWMgZnJpZW5kIGRvIHJldHVybiBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgbmV3IGV4dGVybiB1c2luZyB0cnVlIGNsYXNzIGFzbSBjYXNlIHR5cGVpZCBzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgZGVsZXRlIGFsaWdub2YgY2hhcjE2X3QgY2hhcjMyX3QgY29uc3RleHByIGRlY2x0eXBlIG5vZXhjZXB0IG51bGxwdHIgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgX0Jvb2wgY29tcGxleCIsYnVpbHRfaW46InN0ZCBzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0cmluZ3N0cmVhbSBpc3RyaW5nc3RyZWFtIG9zdHJpbmdzdHJlYW0gYXV0b19wdHIgZGVxdWUgbGlzdCBxdWV1ZSBzdGFjayB2ZWN0b3IgbWFwIHNldCBiaXRzZXQgbXVsdGlzZXQgbXVsdGltYXAgdW5vcmRlcmVkX3NldCB1bm9yZGVyZWRfbWFwIHVub3JkZXJlZF9tdWx0aXNldCB1bm9yZGVyZWRfbXVsdGltYXAgYXJyYXkgc2hhcmVkX3B0ciJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJ1xcXFw/LiIsZToiJyIsaToiLiJ9LHtjTjoibnVtYmVyIixiOiJcXGIoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykodXxVfGx8THx1bHxVTHxmfEYpIn0sYS5DTk0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGM6W3tiOiI8IixlOiI+IixpOiJcXG4ifSxhLkNMQ01dfSx7Y046InN0bF9jb250YWluZXIiLGI6IlxcYihkZXF1ZXxsaXN0fHF1ZXVlfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsZToiPiIsazpiLHI6MTAsYzpbInNlbGYiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMubWFrZWZpbGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJ2YXJpYWJsZSIsYjovXCRcKC8sZTovXCkvLGM6YS5CRX07cmV0dXJue2M6W2EuSENNLHtiOi9eXHcrXHMqXFcqPS8sckI6dHJ1ZSxyOjAsc3RhcnRzOntjTjoiY29uc3RhbnQiLGU6L1xzKlxXKj0vLGVFOnRydWUsc3RhcnRzOntlOi8kLyxyOjAsYzpbYl0sfX19LHtjTjoidGl0bGUiLGI6L15bXHddKzpccyokL30se2NOOiJwaG9ueSIsYjovXlwuUEhPTlk6LyxlOi8kLyxrOiIuUEhPTlkiLGw6L1tcLlx3XSsvfSx7YjovXlx0Ky8sZTovJC8sYzpbYS5RU00sYl19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmdvPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIiLGNvbnN0YW50OiJ0cnVlIGZhbHNlIGlvdGEgbmlsIix0eXBlbmFtZToiYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUiLGJ1aWx0X2luOiJhcHBlbmQgY2FwIGNsb3NlIGNvbXBsZXggY29weSBpbWFnIGxlbiBtYWtlIG5ldyBwYW5pYyBwcmludCBwcmludGxuIHJlYWwgcmVjb3ZlciBkZWxldGUifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIn0se2NOOiJudW1iZXIiLGI6IlteYS16QS1aXzAtOV0oXFwtfFxcKyk/XFxkKyhcXC5cXGQrfFxcL1xcZCspPygoZHxlfGZ8bHxzKShcXCt8XFwtKT9cXGQrKT8iLHI6MH0sYS5DTk1dfX0oaGxqcyk7UEsHCBVZbU72dQAA9nUAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHN0YXRpY1xsaWJcanF1ZXJ5LmZvcm0ubWluLmpzLyohCiAqIGpRdWVyeSBGb3JtIFBsdWdpbgogKiB2ZXJzaW9uOiAzLjQ2LjAtMjAxMy4xMS4yMQogKiBSZXF1aXJlcyBqUXVlcnkgdjEuNSBvciBsYXRlcgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTS4gQWxzdXAKICogRXhhbXBsZXMgYW5kIGRvY3VtZW50YXRpb24gYXQ6IGh0dHA6Ly9tYWxzdXAuY29tL2pxdWVyeS9mb3JtLwogKiBQcm9qZWN0IHJlcG9zaXRvcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWxzdXAvZm9ybQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcy4KICogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtI2NvcHlyaWdodC1hbmQtbGljZW5zZQogKi8KKGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoWyJqcXVlcnkiXSxhKX1lbHNle2EoKHR5cGVvZihqUXVlcnkpIT0idW5kZWZpbmVkIik/alF1ZXJ5OndpbmRvdy5aZXB0byl9fShmdW5jdGlvbihmKXt2YXIgYz17fTtjLmZpbGVhcGk9ZigiPGlucHV0IHR5cGU9J2ZpbGUnLz4iKS5nZXQoMCkuZmlsZXMhPT11bmRlZmluZWQ7Yy5mb3JtZGF0YT13aW5kb3cuRm9ybURhdGEhPT11bmRlZmluZWQ7dmFyIGU9ISFmLmZuLnByb3A7Zi5mbi5hdHRyMj1mdW5jdGlvbigpe2lmKCFlKXtyZXR1cm4gdGhpcy5hdHRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgZz10aGlzLnByb3AuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKChnJiZnLmpxdWVyeSl8fHR5cGVvZiBnPT09InN0cmluZyIpe3JldHVybiBnfXJldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmLmZuLmFqYXhTdWJtaXQ9ZnVuY3Rpb24oail7aWYoIXRoaXMubGVuZ3RoKXtkKCJhamF4U3VibWl0OiBza2lwcGluZyBzdWJtaXQgcHJvY2VzcyAtIG5vIGVsZW1lbnQgc2VsZWN0ZWQiKTtyZXR1cm4gdGhpc312YXIgaSxDLG0sbz10aGlzO2lmKHR5cGVvZiBqPT0iZnVuY3Rpb24iKXtqPXtzdWNjZXNzOmp9fWVsc2V7aWYoaj09PXVuZGVmaW5lZCl7aj17fX19aT1qLnR5cGV8fHRoaXMuYXR0cjIoIm1ldGhvZCIpO0M9ai51cmx8fHRoaXMuYXR0cjIoImFjdGlvbiIpO209KHR5cGVvZiBDPT09InN0cmluZyIpP2YudHJpbShDKToiIjttPW18fHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIjtpZihtKXttPShtLm1hdGNoKC9eKFteI10rKS8pfHxbXSlbMV19aj1mLmV4dGVuZCh0cnVlLHt1cmw6bSxzdWNjZXNzOmYuYWpheFNldHRpbmdzLnN1Y2Nlc3MsdHlwZTppfHxmLmFqYXhTZXR0aW5ncy50eXBlLGlmcmFtZVNyYzovXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZnx8IiIpPyJqYXZhc2NyaXB0OmZhbHNlIjoiYWJvdXQ6YmxhbmsifSxqKTt2YXIgdT17fTt0aGlzLnRyaWdnZXIoImZvcm0tcHJlLXNlcmlhbGl6ZSIsW3RoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXByZS1zZXJpYWxpemUgdHJpZ2dlciIpO3JldHVybiB0aGlzfWlmKGouYmVmb3JlU2VyaWFsaXplJiZqLmJlZm9yZVNlcmlhbGl6ZSh0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTZXJpYWxpemUgY2FsbGJhY2siKTtyZXR1cm4gdGhpc312YXIgbj1qLnRyYWRpdGlvbmFsO2lmKG49PT11bmRlZmluZWQpe249Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWx9dmFyIHM9W107dmFyIEUsRj10aGlzLmZvcm1Ub0FycmF5KGouc2VtYW50aWMscyk7aWYoai5kYXRhKXtqLmV4dHJhRGF0YT1qLmRhdGE7RT1mLnBhcmFtKGouZGF0YSxuKX1pZihqLmJlZm9yZVN1Ym1pdCYmai5iZWZvcmVTdWJtaXQoRix0aGlzLGopPT09ZmFsc2Upe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTdWJtaXQgY2FsbGJhY2siKTtyZXR1cm4gdGhpc310aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LXZhbGlkYXRlIixbRix0aGlzLGosdV0pO2lmKHUudmV0byl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IHZldG9lZCB2aWEgZm9ybS1zdWJtaXQtdmFsaWRhdGUgdHJpZ2dlciIpO3JldHVybiB0aGlzfXZhciB5PWYucGFyYW0oRixuKTtpZihFKXt5PSh5Pyh5KyImIitFKTpFKX1pZihqLnR5cGUudG9VcHBlckNhc2UoKT09IkdFVCIpe2oudXJsKz0oai51cmwuaW5kZXhPZigiPyIpPj0wPyImIjoiPyIpK3k7ai5kYXRhPW51bGx9ZWxzZXtqLmRhdGE9eX12YXIgSD1bXTtpZihqLnJlc2V0Rm9ybSl7SC5wdXNoKGZ1bmN0aW9uKCl7by5yZXNldEZvcm0oKX0pfWlmKGouY2xlYXJGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLmNsZWFyRm9ybShqLmluY2x1ZGVIaWRkZW4pfSl9aWYoIWouZGF0YVR5cGUmJmoudGFyZ2V0KXt2YXIgbD1qLnN1Y2Nlc3N8fGZ1bmN0aW9uKCl7fTtILnB1c2goZnVuY3Rpb24ocSl7dmFyIGs9ai5yZXBsYWNlVGFyZ2V0PyJyZXBsYWNlV2l0aCI6Imh0bWwiO2Yoai50YXJnZXQpW2tdKHEpLmVhY2gobCxhcmd1bWVudHMpfSl9ZWxzZXtpZihqLnN1Y2Nlc3Mpe0gucHVzaChqLnN1Y2Nlc3MpfX1qLnN1Y2Nlc3M9ZnVuY3Rpb24oSyxxLEwpe3ZhciBKPWouY29udGV4dHx8dGhpcztmb3IodmFyIEk9MCxrPUgubGVuZ3RoO0k8aztJKyspe0hbSV0uYXBwbHkoSixbSyxxLEx8fG8sb10pfX07aWYoai5lcnJvcil7dmFyIHo9ai5lcnJvcjtqLmVycm9yPWZ1bmN0aW9uKEosayxxKXt2YXIgST1qLmNvbnRleHR8fHRoaXM7ei5hcHBseShJLFtKLGsscSxvXSl9fWlmKGouY29tcGxldGUpe3ZhciBoPWouY29tcGxldGU7ai5jb21wbGV0ZT1mdW5jdGlvbihJLGspe3ZhciBxPWouY29udGV4dHx8dGhpcztoLmFwcGx5KHEsW0ksayxvXSl9fXZhciBEPWYoImlucHV0W3R5cGU9ZmlsZV06ZW5hYmxlZCIsdGhpcykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcykudmFsKCkhPT0iIn0pO3ZhciBwPUQubGVuZ3RoPjA7dmFyIEI9Im11bHRpcGFydC9mb3JtLWRhdGEiO3ZhciB4PShvLmF0dHIoImVuY3R5cGUiKT09Qnx8by5hdHRyKCJlbmNvZGluZyIpPT1CKTt2YXIgdz1jLmZpbGVhcGkmJmMuZm9ybWRhdGE7ZCgiZmlsZUFQSSA6Iit3KTt2YXIgcj0ocHx8eCkmJiF3O3ZhciB2O2lmKGouaWZyYW1lIT09ZmFsc2UmJihqLmlmcmFtZXx8cikpe2lmKGouY2xvc2VLZWVwQWxpdmUpe2YuZ2V0KGouY2xvc2VLZWVwQWxpdmUsZnVuY3Rpb24oKXt2PUcoRil9KX1lbHNle3Y9RyhGKX19ZWxzZXtpZigocHx8eCkmJncpe3Y9dChGKX1lbHNle3Y9Zi5hamF4KGopfX1vLnJlbW92ZURhdGEoImpxeGhyIikuZGF0YSgianF4aHIiLHYpO2Zvcih2YXIgQT0wO0E8cy5sZW5ndGg7QSsrKXtzW0FdPW51bGx9dGhpcy50cmlnZ2VyKCJmb3JtLXN1Ym1pdC1ub3RpZnkiLFt0aGlzLGpdKTtyZXR1cm4gdGhpcztmdW5jdGlvbiBnKEspe3ZhciBMPWYucGFyYW0oSyxqLnRyYWRpdGlvbmFsKS5zcGxpdCgiJiIpO3ZhciBxPUwubGVuZ3RoO3ZhciBrPVtdO3ZhciBKLEk7Zm9yKEo9MDtKPHE7SisrKXtMW0pdPUxbSl0ucmVwbGFjZSgvXCsvZywiICIpO0k9TFtKXS5zcGxpdCgiPSIpO2sucHVzaChbZGVjb2RlVVJJQ29tcG9uZW50KElbMF0pLGRlY29kZVVSSUNvbXBvbmVudChJWzFdKV0pfXJldHVybiBrfWZ1bmN0aW9uIHQocSl7dmFyIGs9bmV3IEZvcm1EYXRhKCk7Zm9yKHZhciBJPTA7STxxLmxlbmd0aDtJKyspe2suYXBwZW5kKHFbSV0ubmFtZSxxW0ldLnZhbHVlKX1pZihqLmV4dHJhRGF0YSl7dmFyIEw9ZyhqLmV4dHJhRGF0YSk7Zm9yKEk9MDtJPEwubGVuZ3RoO0krKyl7aWYoTFtJXSl7ay5hcHBlbmQoTFtJXVswXSxMW0ldWzFdKX19fWouZGF0YT1udWxsO3ZhciBLPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaix7Y29udGVudFR5cGU6ZmFsc2UscHJvY2Vzc0RhdGE6ZmFsc2UsY2FjaGU6ZmFsc2UsdHlwZTppfHwiUE9TVCJ9KTtpZihqLnVwbG9hZFByb2dyZXNzKXtLLnhocj1mdW5jdGlvbigpe3ZhciBNPWYuYWpheFNldHRpbmdzLnhocigpO2lmKE0udXBsb2FkKXtNLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZnVuY3Rpb24oUSl7dmFyIFA9MDt2YXIgTj1RLmxvYWRlZHx8US5wb3NpdGlvbjt2YXIgTz1RLnRvdGFsO2lmKFEubGVuZ3RoQ29tcHV0YWJsZSl7UD1NYXRoLmNlaWwoTi9PKjEwMCl9ai51cGxvYWRQcm9ncmVzcyhRLE4sTyxQKX0sZmFsc2UpfXJldHVybiBNfX1LLmRhdGE9bnVsbDt2YXIgSj1LLmJlZm9yZVNlbmQ7Sy5iZWZvcmVTZW5kPWZ1bmN0aW9uKE4sTSl7aWYoai5mb3JtRGF0YSl7TS5kYXRhPWouZm9ybURhdGF9ZWxzZXtNLmRhdGE9a31pZihKKXtKLmNhbGwodGhpcyxOLE0pfX07cmV0dXJuIGYuYWpheChLKX1mdW5jdGlvbiBHKGFmKXt2YXIgTD1vWzBdLEssYWIsVixhZCxZLE4sUSxPLFAsWixhYyxUO3ZhciBhaT1mLkRlZmVycmVkKCk7YWkuYWJvcnQ9ZnVuY3Rpb24oYWope08uYWJvcnQoYWopfTtpZihhZil7Zm9yKGFiPTA7YWI8cy5sZW5ndGg7YWIrKyl7Sz1mKHNbYWJdKTtpZihlKXtLLnByb3AoImRpc2FibGVkIixmYWxzZSl9ZWxzZXtLLnJlbW92ZUF0dHIoImRpc2FibGVkIil9fX1WPWYuZXh0ZW5kKHRydWUse30sZi5hamF4U2V0dGluZ3Msaik7Vi5jb250ZXh0PVYuY29udGV4dHx8VjtZPSJqcUZvcm1JTyIrKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtpZihWLmlmcmFtZVRhcmdldCl7Tj1mKFYuaWZyYW1lVGFyZ2V0KTtaPU4uYXR0cjIoIm5hbWUiKTtpZighWil7Ti5hdHRyMigibmFtZSIsWSl9ZWxzZXtZPVp9fWVsc2V7Tj1mKCc8aWZyYW1lIG5hbWU9IicrWSsnIiBzcmM9IicrVi5pZnJhbWVTcmMrJyIgLz4nKTtOLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6Ii0xMDAwcHgiLGxlZnQ6Ii0xMDAwcHgifSl9UT1OWzBdO089e2Fib3J0ZWQ6MCxyZXNwb25zZVRleHQ6bnVsbCxyZXNwb25zZVhNTDpudWxsLHN0YXR1czowLHN0YXR1c1RleHQ6Im4vYSIsZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7fSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbigpe30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbigpe30sYWJvcnQ6ZnVuY3Rpb24oYWope3ZhciBhaz0oYWo9PT0idGltZW91dCI/InRpbWVvdXQiOiJhYm9ydGVkIik7ZCgiYWJvcnRpbmcgdXBsb2FkLi4uICIrYWspO3RoaXMuYWJvcnRlZD0xO3RyeXtpZihRLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZXhlY0NvbW1hbmQpe1EuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCgiU3RvcCIpfX1jYXRjaChhbCl7fU4uYXR0cigic3JjIixWLmlmcmFtZVNyYyk7Ty5lcnJvcj1haztpZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYWssYWopfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixha10pfWlmKFYuY29tcGxldGUpe1YuY29tcGxldGUuY2FsbChWLmNvbnRleHQsTyxhayl9fX07YWQ9Vi5nbG9iYWw7aWYoYWQmJjA9PT1mLmFjdGl2ZSsrKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpfWlmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTZW5kIixbTyxWXSl9aWYoVi5iZWZvcmVTZW5kJiZWLmJlZm9yZVNlbmQuY2FsbChWLmNvbnRleHQsTyxWKT09PWZhbHNlKXtpZihWLmdsb2JhbCl7Zi5hY3RpdmUtLX1haS5yZWplY3QoKTtyZXR1cm4gYWl9aWYoTy5hYm9ydGVkKXthaS5yZWplY3QoKTtyZXR1cm4gYWl9UD1MLmNsaztpZihQKXtaPVAubmFtZTtpZihaJiYhUC5kaXNhYmxlZCl7Vi5leHRyYURhdGE9Vi5leHRyYURhdGF8fHt9O1YuZXh0cmFEYXRhW1pdPVAudmFsdWU7aWYoUC50eXBlPT0iaW1hZ2UiKXtWLmV4dHJhRGF0YVtaKyIueCJdPUwuY2xrX3g7Vi5leHRyYURhdGFbWisiLnkiXT1MLmNsa195fX19dmFyIFU9MTt2YXIgUj0yO2Z1bmN0aW9uIFMoYWwpe3ZhciBhaz1udWxsO3RyeXtpZihhbC5jb250ZW50V2luZG93KXthaz1hbC5jb250ZW50V2luZG93LmRvY3VtZW50fX1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudFdpbmRvdyBkb2N1bWVudDogIithail9aWYoYWspe3JldHVybiBha310cnl7YWs9YWwuY29udGVudERvY3VtZW50P2FsLmNvbnRlbnREb2N1bWVudDphbC5kb2N1bWVudH1jYXRjaChhail7ZCgiY2Fubm90IGdldCBpZnJhbWUuY29udGVudERvY3VtZW50OiAiK2FqKTthaz1hbC5kb2N1bWVudH1yZXR1cm4gYWt9dmFyIEo9ZigibWV0YVtuYW1lPWNzcmYtdG9rZW5dIikuYXR0cigiY29udGVudCIpO3ZhciBJPWYoIm1ldGFbbmFtZT1jc3JmLXBhcmFtXSIpLmF0dHIoImNvbnRlbnQiKTtpZihJJiZKKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbSV09Sn1mdW5jdGlvbiBhYSgpe3ZhciBhbD1vLmF0dHIyKCJ0YXJnZXQiKSxhaj1vLmF0dHIyKCJhY3Rpb24iKTtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixZKTtpZighaXx8L3Bvc3QvaS50ZXN0KGkpKXtMLnNldEF0dHJpYnV0ZSgibWV0aG9kIiwiUE9TVCIpfWlmKGFqIT1WLnVybCl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsVi51cmwpfWlmKCFWLnNraXBFbmNvZGluZ092ZXJyaWRlJiYoIWl8fC9wb3N0L2kudGVzdChpKSkpe28uYXR0cih7ZW5jb2Rpbmc6Im11bHRpcGFydC9mb3JtLWRhdGEiLGVuY3R5cGU6Im11bHRpcGFydC9mb3JtLWRhdGEifSl9aWYoVi50aW1lb3V0KXtUPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthYz10cnVlO1goVSl9LFYudGltZW91dCl9ZnVuY3Rpb24gYW0oKXt0cnl7dmFyIGFxPVMoUSkucmVhZHlTdGF0ZTtkKCJzdGF0ZSA9ICIrYXEpO2lmKGFxJiZhcS50b0xvd2VyQ2FzZSgpPT0idW5pbml0aWFsaXplZCIpe3NldFRpbWVvdXQoYW0sNTApfX1jYXRjaChhcil7ZCgiU2VydmVyIGFib3J0OiAiLGFyLCIgKCIsYXIubmFtZSwiKSIpO1goUik7aWYoVCl7Y2xlYXJUaW1lb3V0KFQpfVQ9dW5kZWZpbmVkfX12YXIgYWs9W107dHJ5e2lmKFYuZXh0cmFEYXRhKXtmb3IodmFyIGFwIGluIFYuZXh0cmFEYXRhKXtpZihWLmV4dHJhRGF0YS5oYXNPd25Qcm9wZXJ0eShhcCkpe2lmKGYuaXNQbGFpbk9iamVjdChWLmV4dHJhRGF0YVthcF0pJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoIm5hbWUiKSYmVi5leHRyYURhdGFbYXBdLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrVi5leHRyYURhdGFbYXBdLm5hbWUrJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXS52YWx1ZSkuYXBwZW5kVG8oTClbMF0pfWVsc2V7YWsucHVzaChmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInK2FwKyciPicpLnZhbChWLmV4dHJhRGF0YVthcF0pLmFwcGVuZFRvKEwpWzBdKX19fX1pZighVi5pZnJhbWVUYXJnZXQpe04uYXBwZW5kVG8oImJvZHkiKX1pZihRLmF0dGFjaEV2ZW50KXtRLmF0dGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX1zZXRUaW1lb3V0KGFtLDE1KTt0cnl7TC5zdWJtaXQoKX1jYXRjaChhbil7dmFyIGFvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5zdWJtaXQ7YW8uYXBwbHkoTCl9fWZpbmFsbHl7TC5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsYWopO2lmKGFsKXtMLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixhbCl9ZWxzZXtvLnJlbW92ZUF0dHIoInRhcmdldCIpfWYoYWspLnJlbW92ZSgpfX1pZihWLmZvcmNlU3luYyl7YWEoKX1lbHNle3NldFRpbWVvdXQoYWEsMTApfXZhciBhZyxhaCxhZT01MCxNO2Z1bmN0aW9uIFgoYXApe2lmKE8uYWJvcnRlZHx8TSl7cmV0dXJufWFoPVMoUSk7aWYoIWFoKXtkKCJjYW5ub3QgYWNjZXNzIHJlc3BvbnNlIGRvY3VtZW50Iik7YXA9Un1pZihhcD09PVUmJk8pe08uYWJvcnQoInRpbWVvdXQiKTthaS5yZWplY3QoTywidGltZW91dCIpO3JldHVybn1lbHNle2lmKGFwPT1SJiZPKXtPLmFib3J0KCJzZXJ2ZXIgYWJvcnQiKTthaS5yZWplY3QoTywiZXJyb3IiLCJzZXJ2ZXIgYWJvcnQiKTtyZXR1cm59fWlmKCFhaHx8YWgubG9jYXRpb24uaHJlZj09Vi5pZnJhbWVTcmMpe2lmKCFhYyl7cmV0dXJufX1pZihRLmRldGFjaEV2ZW50KXtRLmRldGFjaEV2ZW50KCJvbmxvYWQiLFgpfWVsc2V7US5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixYLGZhbHNlKX12YXIgYW49InN1Y2Nlc3MiLGFyO3RyeXtpZihhYyl7dGhyb3cidGltZW91dCJ9dmFyIGFtPVYuZGF0YVR5cGU9PSJ4bWwifHxhaC5YTUxEb2N1bWVudHx8Zi5pc1hNTERvYyhhaCk7ZCgiaXNYbWw9IithbSk7aWYoIWFtJiZ3aW5kb3cub3BlcmEmJihhaC5ib2R5PT09bnVsbHx8IWFoLmJvZHkuaW5uZXJIVE1MKSl7aWYoLS1hZSl7ZCgicmVxdWVpbmcgb25Mb2FkIGNhbGxiYWNrLCBET00gbm90IGF2YWlsYWJsZSIpO3NldFRpbWVvdXQoWCwyNTApO3JldHVybn19dmFyIGF0PWFoLmJvZHk/YWguYm9keTphaC5kb2N1bWVudEVsZW1lbnQ7Ty5yZXNwb25zZVRleHQ9YXQ/YXQuaW5uZXJIVE1MOm51bGw7Ty5yZXNwb25zZVhNTD1haC5YTUxEb2N1bWVudD9haC5YTUxEb2N1bWVudDphaDtpZihhbSl7Vi5kYXRhVHlwZT0ieG1sIn1PLmdldFJlc3BvbnNlSGVhZGVyPWZ1bmN0aW9uKGF3KXt2YXIgYXY9eyJjb250ZW50LXR5cGUiOlYuZGF0YVR5cGV9O3JldHVybiBhdlthdy50b0xvd2VyQ2FzZSgpXX07aWYoYXQpe08uc3RhdHVzPU51bWJlcihhdC5nZXRBdHRyaWJ1dGUoInN0YXR1cyIpKXx8Ty5zdGF0dXM7Ty5zdGF0dXNUZXh0PWF0LmdldEF0dHJpYnV0ZSgic3RhdHVzVGV4dCIpfHxPLnN0YXR1c1RleHR9dmFyIGFqPShWLmRhdGFUeXBlfHwiIikudG9Mb3dlckNhc2UoKTt2YXIgYXE9Lyhqc29ufHNjcmlwdHx0ZXh0KS8udGVzdChhaik7aWYoYXF8fFYudGV4dGFyZWEpe3ZhciBhbz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGV4dGFyZWEiKVswXTtpZihhbyl7Ty5yZXNwb25zZVRleHQ9YW8udmFsdWU7Ty5zdGF0dXM9TnVtYmVyKGFvLmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YW8uZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH1lbHNle2lmKGFxKXt2YXIgYWs9YWguZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpWzBdO3ZhciBhdT1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKGFrKXtPLnJlc3BvbnNlVGV4dD1hay50ZXh0Q29udGVudD9hay50ZXh0Q29udGVudDphay5pbm5lclRleHR9ZWxzZXtpZihhdSl7Ty5yZXNwb25zZVRleHQ9YXUudGV4dENvbnRlbnQ/YXUudGV4dENvbnRlbnQ6YXUuaW5uZXJUZXh0fX19fX1lbHNle2lmKGFqPT0ieG1sIiYmIU8ucmVzcG9uc2VYTUwmJk8ucmVzcG9uc2VUZXh0KXtPLnJlc3BvbnNlWE1MPVcoTy5yZXNwb25zZVRleHQpfX10cnl7YWc9ayhPLGFqLFYpfWNhdGNoKGFsKXthbj0icGFyc2VyZXJyb3IiO08uZXJyb3I9YXI9KGFsfHxhbil9fWNhdGNoKGFsKXtkKCJlcnJvciBjYXVnaHQ6ICIsYWwpO2FuPSJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX1pZihPLmFib3J0ZWQpe2QoInVwbG9hZCBhYm9ydGVkIik7YW49bnVsbH1pZihPLnN0YXR1cyl7YW49KE8uc3RhdHVzPj0yMDAmJk8uc3RhdHVzPDMwMHx8Ty5zdGF0dXM9PT0zMDQpPyJzdWNjZXNzIjoiZXJyb3IifWlmKGFuPT09InN1Y2Nlc3MiKXtpZihWLnN1Y2Nlc3Mpe1Yuc3VjY2Vzcy5jYWxsKFYuY29udGV4dCxhZywic3VjY2VzcyIsTyl9YWkucmVzb2x2ZShPLnJlc3BvbnNlVGV4dCwic3VjY2VzcyIsTyk7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN1Y2Nlc3MiLFtPLFZdKX19ZWxzZXtpZihhbil7aWYoYXI9PT11bmRlZmluZWQpe2FyPU8uc3RhdHVzVGV4dH1pZihWLmVycm9yKXtWLmVycm9yLmNhbGwoVi5jb250ZXh0LE8sYW4sYXIpfWFpLnJlamVjdChPLCJlcnJvciIsYXIpO2lmKGFkKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhFcnJvciIsW08sVixhcl0pfX19aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbTyxWXSl9aWYoYWQmJiEtLWYuYWN0aXZlKXtmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFuKX1NPXRydWU7aWYoVi50aW1lb3V0KXtjbGVhclRpbWVvdXQoVCl9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCFWLmlmcmFtZVRhcmdldCl7Ti5yZW1vdmUoKX1lbHNle04uYXR0cigic3JjIixWLmlmcmFtZVNyYyl9Ty5yZXNwb25zZVhNTD1udWxsfSwxMDApfXZhciBXPWYucGFyc2VYTUx8fGZ1bmN0aW9uKGFqLGFrKXtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7YWs9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKTthay5hc3luYz0iZmFsc2UiO2FrLmxvYWRYTUwoYWopfWVsc2V7YWs9KG5ldyBET01QYXJzZXIoKSkucGFyc2VGcm9tU3RyaW5nKGFqLCJ0ZXh0L3htbCIpfXJldHVybihhayYmYWsuZG9jdW1lbnRFbGVtZW50JiZhay5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUhPSJwYXJzZXJlcnJvciIpP2FrOm51bGx9O3ZhciBxPWYucGFyc2VKU09OfHxmdW5jdGlvbihhail7cmV0dXJuIHdpbmRvd1siZXZhbCJdKCIoIithaisiKSIpfTt2YXIgaz1mdW5jdGlvbihhbyxhbSxhbCl7dmFyIGFrPWFvLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKXx8IiIsYWo9YW09PT0ieG1sInx8IWFtJiZhay5pbmRleE9mKCJ4bWwiKT49MCxhbj1haj9hby5yZXNwb25zZVhNTDphby5yZXNwb25zZVRleHQ7aWYoYWomJmFuLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZT09PSJwYXJzZXJlcnJvciIpe2lmKGYuZXJyb3Ipe2YuZXJyb3IoInBhcnNlcmVycm9yIil9fWlmKGFsJiZhbC5kYXRhRmlsdGVyKXthbj1hbC5kYXRhRmlsdGVyKGFuLGFtKX1pZih0eXBlb2YgYW49PT0ic3RyaW5nIil7aWYoYW09PT0ianNvbiJ8fCFhbSYmYWsuaW5kZXhPZigianNvbiIpPj0wKXthbj1xKGFuKX1lbHNle2lmKGFtPT09InNjcmlwdCJ8fCFhbSYmYWsuaW5kZXhPZigiamF2YXNjcmlwdCIpPj0wKXtmLmdsb2JhbEV2YWwoYW4pfX19cmV0dXJuIGFufTtyZXR1cm4gYWl9fTtmLmZuLmFqYXhGb3JtPWZ1bmN0aW9uKGcpe2c9Z3x8e307Zy5kZWxlZ2F0aW9uPWcuZGVsZWdhdGlvbiYmZi5pc0Z1bmN0aW9uKGYuZm4ub24pO2lmKCFnLmRlbGVnYXRpb24mJnRoaXMubGVuZ3RoPT09MCl7dmFyIGg9e3M6dGhpcy5zZWxlY3RvcixjOnRoaXMuY29udGV4dH07aWYoIWYuaXNSZWFkeSYmaC5zKXtkKCJET00gbm90IHJlYWR5LCBxdWV1aW5nIGFqYXhGb3JtIik7ZihmdW5jdGlvbigpe2YoaC5zLGguYykuYWpheEZvcm0oZyl9KTtyZXR1cm4gdGhpc31kKCJ0ZXJtaW5hdGluZzsgemVybyBlbGVtZW50cyBmb3VuZCBieSBzZWxlY3RvciIrKGYuaXNSZWFkeT8iIjoiIChET00gbm90IHJlYWR5KSIpKTtyZXR1cm4gdGhpc31pZihnLmRlbGVnYXRpb24pe2YoZG9jdW1lbnQpLm9mZigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGIpLm9mZigiY2xpY2suZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYSkub24oInN1Ym1pdC5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGIpLm9uKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixnLGEpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIixnLGIpLmJpbmQoImNsaWNrLmZvcm0tcGx1Z2luIixnLGEpfTtmdW5jdGlvbiBiKGgpe3ZhciBnPWguZGF0YTtpZighaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aC5wcmV2ZW50RGVmYXVsdCgpO2YoaC50YXJnZXQpLmFqYXhTdWJtaXQoZyl9fWZ1bmN0aW9uIGEoayl7dmFyIGo9ay50YXJnZXQ7dmFyIGg9ZihqKTtpZighKGguaXMoIlt0eXBlPXN1Ym1pdF0sW3R5cGU9aW1hZ2VdIikpKXt2YXIgZz1oLmNsb3Nlc3QoIlt0eXBlPXN1Ym1pdF0iKTtpZihnLmxlbmd0aD09PTApe3JldHVybn1qPWdbMF19dmFyIGk9dGhpcztpLmNsaz1qO2lmKGoudHlwZT09ImltYWdlIil7aWYoay5vZmZzZXRYIT09dW5kZWZpbmVkKXtpLmNsa194PWsub2Zmc2V0WDtpLmNsa195PWsub2Zmc2V0WX1lbHNle2lmKHR5cGVvZiBmLmZuLm9mZnNldD09ImZ1bmN0aW9uIil7dmFyIGw9aC5vZmZzZXQoKTtpLmNsa194PWsucGFnZVgtbC5sZWZ0O2kuY2xrX3k9ay5wYWdlWS1sLnRvcH1lbHNle2kuY2xrX3g9ay5wYWdlWC1qLm9mZnNldExlZnQ7aS5jbGtfeT1rLnBhZ2VZLWoub2Zmc2V0VG9wfX19c2V0VGltZW91dChmdW5jdGlvbigpe2kuY2xrPWkuY2xrX3g9aS5jbGtfeT1udWxsfSwxMDApfWYuZm4uYWpheEZvcm1VbmJpbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoInN1Ym1pdC5mb3JtLXBsdWdpbiBjbGljay5mb3JtLXBsdWdpbiIpfTtmLmZuLmZvcm1Ub0FycmF5PWZ1bmN0aW9uKHgsZyl7dmFyIHc9W107aWYodGhpcy5sZW5ndGg9PT0wKXtyZXR1cm4gd312YXIgbD10aGlzWzBdO3ZhciBwPXg/bC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOmwuZWxlbWVudHM7aWYoIXApe3JldHVybiB3fXZhciByLHEsbyx5LG0sdCxrO2ZvcihyPTAsdD1wLmxlbmd0aDtyPHQ7cisrKXttPXBbcl07bz1tLm5hbWU7aWYoIW98fG0uZGlzYWJsZWQpe2NvbnRpbnVlfWlmKHgmJmwuY2xrJiZtLnR5cGU9PSJpbWFnZSIpe2lmKGwuY2xrPT1tKXt3LnB1c2goe25hbWU6byx2YWx1ZTpmKG0pLnZhbCgpLHR5cGU6bS50eXBlfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfWNvbnRpbnVlfXk9Zi5maWVsZFZhbHVlKG0sdHJ1ZSk7aWYoeSYmeS5jb25zdHJ1Y3Rvcj09QXJyYXkpe2lmKGcpe2cucHVzaChtKX1mb3IocT0wLGs9eS5sZW5ndGg7cTxrO3ErKyl7dy5wdXNoKHtuYW1lOm8sdmFsdWU6eVtxXX0pfX1lbHNle2lmKGMuZmlsZWFwaSYmbS50eXBlPT0iZmlsZSIpe2lmKGcpe2cucHVzaChtKX12YXIgaD1tLmZpbGVzO2lmKGgubGVuZ3RoKXtmb3IocT0wO3E8aC5sZW5ndGg7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTpoW3FdLHR5cGU6bS50eXBlfSl9fWVsc2V7dy5wdXNoKHtuYW1lOm8sdmFsdWU6IiIsdHlwZTptLnR5cGV9KX19ZWxzZXtpZih5IT09bnVsbCYmdHlwZW9mIHkhPSJ1bmRlZmluZWQiKXtpZihnKXtnLnB1c2gobSl9dy5wdXNoKHtuYW1lOm8sdmFsdWU6eSx0eXBlOm0udHlwZSxyZXF1aXJlZDptLnJlcXVpcmVkfSl9fX19aWYoIXgmJmwuY2xrKXt2YXIgcz1mKGwuY2xrKSx1PXNbMF07bz11Lm5hbWU7aWYobyYmIXUuZGlzYWJsZWQmJnUudHlwZT09ImltYWdlIil7dy5wdXNoKHtuYW1lOm8sdmFsdWU6cy52YWwoKX0pO3cucHVzaCh7bmFtZTpvKyIueCIsdmFsdWU6bC5jbGtfeH0se25hbWU6bysiLnkiLHZhbHVlOmwuY2xrX3l9KX19cmV0dXJuIHd9O2YuZm4uZm9ybVNlcmlhbGl6ZT1mdW5jdGlvbihnKXtyZXR1cm4gZi5wYXJhbSh0aGlzLmZvcm1Ub0FycmF5KGcpKX07Zi5mbi5maWVsZFNlcmlhbGl6ZT1mdW5jdGlvbihoKXt2YXIgZz1bXTt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5hbWU7aWYoIW0pe3JldHVybn12YXIgaz1mLmZpZWxkVmFsdWUodGhpcyxoKTtpZihrJiZrLmNvbnN0cnVjdG9yPT1BcnJheSl7Zm9yKHZhciBsPTAsaj1rLmxlbmd0aDtsPGo7bCsrKXtnLnB1c2goe25hbWU6bSx2YWx1ZTprW2xdfSl9fWVsc2V7aWYoayE9PW51bGwmJnR5cGVvZiBrIT0idW5kZWZpbmVkIil7Zy5wdXNoKHtuYW1lOnRoaXMubmFtZSx2YWx1ZTprfSl9fX0pO3JldHVybiBmLnBhcmFtKGcpfTtmLmZuLmZpZWxkVmFsdWU9ZnVuY3Rpb24obSl7Zm9yKHZhciBsPVtdLGo9MCxnPXRoaXMubGVuZ3RoO2o8ZztqKyspe3ZhciBrPXRoaXNbal07dmFyIGg9Zi5maWVsZFZhbHVlKGssbSk7aWYoaD09PW51bGx8fHR5cGVvZiBoPT0idW5kZWZpbmVkInx8KGguY29uc3RydWN0b3I9PUFycmF5JiYhaC5sZW5ndGgpKXtjb250aW51ZX1pZihoLmNvbnN0cnVjdG9yPT1BcnJheSl7Zi5tZXJnZShsLGgpfWVsc2V7bC5wdXNoKGgpfX1yZXR1cm4gbH07Zi5maWVsZFZhbHVlPWZ1bmN0aW9uKGcsbyl7dmFyIGo9Zy5uYW1lLHU9Zy50eXBlLHc9Zy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYobz09PXVuZGVmaW5lZCl7bz10cnVlfWlmKG8mJighanx8Zy5kaXNhYmxlZHx8dT09InJlc2V0Inx8dT09ImJ1dHRvbiJ8fCh1PT0iY2hlY2tib3gifHx1PT0icmFkaW8iKSYmIWcuY2hlY2tlZHx8KHU9PSJzdWJtaXQifHx1PT0iaW1hZ2UiKSYmZy5mb3JtJiZnLmZvcm0uY2xrIT1nfHx3PT0ic2VsZWN0IiYmZy5zZWxlY3RlZEluZGV4PT0tMSkpe3JldHVybiBudWxsfWlmKHc9PSJzZWxlY3QiKXt2YXIgcD1nLnNlbGVjdGVkSW5kZXg7aWYocDwwKXtyZXR1cm4gbnVsbH12YXIgcj1bXSxoPWcub3B0aW9uczt2YXIgbD0odT09InNlbGVjdC1vbmUiKTt2YXIgcT0obD9wKzE6aC5sZW5ndGgpO2Zvcih2YXIgaz0obD9wOjApO2s8cTtrKyspe3ZhciBtPWhba107aWYobS5zZWxlY3RlZCl7dmFyIHM9bS52YWx1ZTtpZighcyl7cz0obS5hdHRyaWJ1dGVzJiZtLmF0dHJpYnV0ZXMudmFsdWUmJiEobS5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZCkpP20udGV4dDptLnZhbHVlfWlmKGwpe3JldHVybiBzfXIucHVzaChzKX19cmV0dXJuIHJ9cmV0dXJuIGYoZykudmFsKCl9O2YuZm4uY2xlYXJGb3JtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKCJpbnB1dCxzZWxlY3QsdGV4dGFyZWEiLHRoaXMpLmNsZWFyRmllbGRzKGcpfSl9O2YuZm4uY2xlYXJGaWVsZHM9Zi5mbi5jbGVhcklucHV0cz1mdW5jdGlvbihnKXt2YXIgaD0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy50eXBlLGk9dGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoaC50ZXN0KGopfHxpPT0idGV4dGFyZWEiKXt0aGlzLnZhbHVlPSIifWVsc2V7aWYoaj09ImNoZWNrYm94Inx8aj09InJhZGlvIil7dGhpcy5jaGVja2VkPWZhbHNlfWVsc2V7aWYoaT09InNlbGVjdCIpe3RoaXMuc2VsZWN0ZWRJbmRleD0tMX1lbHNle2lmKGo9PSJmaWxlIil7aWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpe2YodGhpcykucmVwbGFjZVdpdGgoZih0aGlzKS5jbG9uZSh0cnVlKSl9ZWxzZXtmKHRoaXMpLnZhbCgiIil9fWVsc2V7aWYoZyl7aWYoKGc9PT10cnVlJiYvaGlkZGVuLy50ZXN0KGopKXx8KHR5cGVvZiBnPT0ic3RyaW5nIiYmZih0aGlzKS5pcyhnKSkpe3RoaXMudmFsdWU9IiJ9fX19fX19KX07Zi5mbi5yZXNldEZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMucmVzZXQ9PSJmdW5jdGlvbiJ8fCh0eXBlb2YgdGhpcy5yZXNldD09Im9iamVjdCImJiF0aGlzLnJlc2V0Lm5vZGVUeXBlKSl7dGhpcy5yZXNldCgpfX0pfTtmLmZuLmVuYWJsZT1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9IWd9KX07Zi5mbi5zZWxlY3RlZD1mdW5jdGlvbihnKXtpZihnPT09dW5kZWZpbmVkKXtnPXRydWV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXRoaXMudHlwZTtpZihoPT0iY2hlY2tib3gifHxoPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9Z31lbHNle2lmKHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ib3B0aW9uIil7dmFyIGk9Zih0aGlzKS5wYXJlbnQoInNlbGVjdCIpO2lmKGcmJmlbMF0mJmlbMF0udHlwZT09InNlbGVjdC1vbmUiKXtpLmZpbmQoIm9wdGlvbiIpLnNlbGVjdGVkKGZhbHNlKX10aGlzLnNlbGVjdGVkPWd9fX0pfTtmLmZuLmFqYXhTdWJtaXQuZGVidWc9ZmFsc2U7ZnVuY3Rpb24gZCgpe2lmKCFmLmZuLmFqYXhTdWJtaXQuZGVidWcpe3JldHVybn12YXIgZz0iW2pxdWVyeS5mb3JtXSAiK0FycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKTtpZih3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUubG9nKXt3aW5kb3cuY29uc29sZS5sb2coZyl9ZWxzZXtpZih3aW5kb3cub3BlcmEmJndpbmRvdy5vcGVyYS5wb3N0RXJyb3Ipe3dpbmRvdy5vcGVyYS5wb3N0RXJyb3IoZyl9fX19KSk7UEsHCHYQEAGjPgAAoz4AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHN0YXRpY1xsaWJcbWFya2VkLm1pbi5qcyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9e30sdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5ydWxlcz1hLm5vcm1hbCx0aGlzLm9wdGlvbnMuZ2ZtJiYodGhpcy5ydWxlcz10aGlzLm9wdGlvbnMudGFibGVzP2EudGFibGVzOmEuZ2ZtKX1mdW5jdGlvbiB0KGUsdCl7aWYodGhpcy5vcHRpb25zPXR8fGguZGVmYXVsdHMsdGhpcy5saW5rcz1lLHRoaXMucnVsZXM9dS5ub3JtYWwsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBuLCF0aGlzLmxpbmtzKXRocm93IG5ldyBFcnJvcigiVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4iKTt0aGlzLm9wdGlvbnMuZ2ZtP3RoaXMucnVsZXM9dGhpcy5vcHRpb25zLmJyZWFrcz91LmJyZWFrczp1LmdmbTp0aGlzLm9wdGlvbnMucGVkYW50aWMmJih0aGlzLnJ1bGVzPXUucGVkYW50aWMpfWZ1bmN0aW9uIG4oKXt9ZnVuY3Rpb24gcihlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2VuPW51bGwsdGhpcy5vcHRpb25zPWV8fGguZGVmYXVsdHMsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlLnJlcGxhY2UodD8vJi9nOi8mKD8hIz9cdys7KS9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCImIzM5OyIpfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZT1lLnNvdXJjZSx0PXR8fCIiLGZ1bmN0aW9uIG4ocixzKXtyZXR1cm4gcj8ocz1zLnNvdXJjZXx8cyxzPXMucmVwbGFjZSgvKF58W15cW10pXF4vZywiJDEiKSxlPWUucmVwbGFjZShyLHMpLG4pOm5ldyBSZWdFeHAoZSx0KX19ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdCxuLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt0PWFyZ3VtZW50c1tyXTtmb3IobiBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pJiYoZVtuXT10W25dKX1yZXR1cm4gZX1mdW5jdGlvbiBoKHQsbixpKXtpZihpfHwiZnVuY3Rpb24iPT10eXBlb2Ygbil7aXx8KGk9bixuPW51bGwpLG49byh7fSxoLmRlZmF1bHRzLG58fHt9KTt2YXIgbCxhLHU9bi5oaWdobGlnaHQscD0wO3RyeXtsPWUubGV4KHQsbil9Y2F0Y2goYyl7cmV0dXJuIGkoYyl9YT1sLmxlbmd0aDt2YXIgZz1mdW5jdGlvbigpe3ZhciBlLHQ7dHJ5e2U9ci5wYXJzZShsLG4pfWNhdGNoKHMpe3Q9c31yZXR1cm4gbi5oaWdobGlnaHQ9dSx0P2kodCk6aShudWxsLGUpfTtpZighdXx8dS5sZW5ndGg8MylyZXR1cm4gZygpO2lmKGRlbGV0ZSBuLmhpZ2hsaWdodCwhYSlyZXR1cm4gZygpO2Zvcig7cDxsLmxlbmd0aDtwKyspIWZ1bmN0aW9uKGUpe3JldHVybiJjb2RlIiE9PWUudHlwZT8tLWF8fGcoKTp1KGUudGV4dCxlLmxhbmcsZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09bnx8bj09PWUudGV4dD8tLWF8fGcoKTooZS50ZXh0PW4sZS5lc2NhcGVkPSEwLC0tYXx8ZygpLHZvaWQgMCl9KX0obFtwXSl9ZWxzZSB0cnl7cmV0dXJuIG4mJihuPW8oe30saC5kZWZhdWx0cyxuKSksci5wYXJzZShlLmxleCh0LG4pLG4pfWNhdGNoKGMpe2lmKGMubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGpqL21hcmtlZC4iLChufHxoLmRlZmF1bHRzKS5zaWxlbnQpcmV0dXJuIjxwPkFuIGVycm9yIG9jY3VyZWQ6PC9wPjxwcmU+IitzKGMubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7dGhyb3cgY319dmFyIGE9e25ld2xpbmU6L15cbisvLGNvZGU6L14oIHs0fVteXG5dK1xuKikrLyxmZW5jZXM6bCxocjovXiggKlstKl9dKXszLH0gKig/OlxuK3wkKS8saGVhZGluZzovXiAqKCN7MSw2fSkgKihbXlxuXSs/KSAqIyogKig/OlxuK3wkKS8sbnB0YWJsZTpsLGxoZWFkaW5nOi9eKFteXG5dKylcbiAqKD18LSl7Mix9ICooPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oICo+W15cbl0rKFxuW15cbl0rKSpcbiopKy8sbGlzdDovXiggKikoYnVsbCkgW1xzXFNdKz8oPzpocnxcbnsyLH0oPyEgKSg/IVwxYnVsbCApXG4qfFxzKiQpLyxodG1sOi9eICooPzpjb21tZW50fGNsb3NlZHxjbG9zaW5nKSAqKD86XG57Mix9fFxzKiQpLyxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogK1siKF0oW15cbl0rKVsiKV0pPyAqKD86XG4rfCQpLyx0YWJsZTpsLHBhcmFncmFwaDovXigoPzpbXlxuXStcbj8oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8dGFnfGRlZikpKylcbiovLHRleHQ6L15bXlxuXSsvfTthLmJ1bGxldD0vKD86WyorLV18XGQrXC4pLyxhLml0ZW09L14oICopKGJ1bGwpIFteXG5dKig/OlxuKD8hXDFidWxsIClbXlxuXSopKi8sYS5pdGVtPWkoYS5pdGVtLCJnbSIpKC9idWxsL2csYS5idWxsZXQpKCksYS5saXN0PWkoYS5saXN0KSgvYnVsbC9nLGEuYnVsbGV0KSgiaHIiLC9cbisoPz0oPzogKlstKl9dKXszLH0gKig/OlxuK3wkKSkvKSgpLGEuX3RhZz0iKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6L3xAKVxcYiIsYS5odG1sPWkoYS5odG1sKSgiY29tbWVudCIsLzwhLS1bXHNcU10qPy0tPi8pKCJjbG9zZWQiLC88KHRhZylbXHNcU10rPzxcL1wxPi8pKCJjbG9zaW5nIiwvPHRhZyg/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPl0pKj8+LykoL3RhZy9nLGEuX3RhZykoKSxhLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiaHIiLGEuaHIpKCJoZWFkaW5nIixhLmhlYWRpbmcpKCJsaGVhZGluZyIsYS5saGVhZGluZykoImJsb2NrcXVvdGUiLGEuYmxvY2txdW90ZSkoInRhZyIsIjwiK2EuX3RhZykoImRlZiIsYS5kZWYpKCksYS5ub3JtYWw9byh7fSxhKSxhLmdmbT1vKHt9LGEubm9ybWFsLHtmZW5jZXM6L14gKihgezMsfXx+ezMsfSkgKihcUyspPyAqXG4oW1xzXFNdKz8pXHMqXDEgKig/OlxuK3wkKS8scGFyYWdyYXBoOi9eL30pLGEuZ2ZtLnBhcmFncmFwaD1pKGEucGFyYWdyYXBoKSgiKD8hIiwiKD8hIithLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMiIpKyJ8IithLmxpc3Quc291cmNlLnJlcGxhY2UoIlxcMSIsIlxcMyIpKyJ8IikoKSxhLnRhYmxlcz1vKHt9LGEuZ2ZtLHtucHRhYmxlOi9eICooXFMuKlx8LiopXG4gKihbLTpdKyAqXHxbLXwgOl0qKVxuKCg/Oi4qXHwuKig/OlxufCQpKSopXG4qLyx0YWJsZTovXiAqXHwoLispXG4gKlx8KCAqWy06XStbLXwgOl0qKVxuKCg/OiAqXHwuKig/OlxufCQpKSopXG4qL30pLGUucnVsZXM9YSxlLmxleD1mdW5jdGlvbih0LG4pe3ZhciByPW5ldyBlKG4pO3JldHVybiByLmxleCh0KX0sZS5wcm90b3R5cGUubGV4PWZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9cdTAwYTAvZywiICIpLnJlcGxhY2UoL1x1MjQyNC9nLCJcbiIpLHRoaXMudG9rZW4oZSwhMCl9LGUucHJvdG90eXBlLnRva2VuPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIscyxpLGwsbyxoLHUscCxlPWUucmVwbGFjZSgvXiArJC9nbSwiIik7ZTspaWYoKHM9dGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoZSkpJiYoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksc1swXS5sZW5ndGg+MSYmdGhpcy50b2tlbnMucHVzaCh7dHlwZToic3BhY2UifSkpLHM9dGhpcy5ydWxlcy5jb2RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCkscz1zWzBdLnJlcGxhY2UoL14gezR9L2dtLCIiKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9zOnMucmVwbGFjZSgvXG4rJC8sIiIpfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuZmVuY2VzLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiY29kZSIsbGFuZzpzWzJdLHRleHQ6c1szXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDpzWzFdLmxlbmd0aCx0ZXh0OnNbMl19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMubnB0YWJsZS5leGVjKGUpKSl7Zm9yKGU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLG89e3R5cGU6InRhYmxlIixoZWFkZXI6c1sxXS5yZXBsYWNlKC9eICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksYWxpZ246c1syXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGNlbGxzOnNbM10ucmVwbGFjZSgvXG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnNwbGl0KC8gKlx8ICovKTt0aGlzLnRva2Vucy5wdXNoKG8pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmxoZWFkaW5nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiaGVhZGluZyIsZGVwdGg6Ij0iPT09c1syXT8xOjIsdGV4dDpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaHIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJociJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9zdGFydCJ9KSxzPXNbMF0ucmVwbGFjZSgvXiAqPiA/L2dtLCIiKSx0aGlzLnRva2VuKHMsdCksdGhpcy50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9lbmQifSk7ZWxzZSBpZihzPXRoaXMucnVsZXMubGlzdC5leGVjKGUpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksaT1zWzJdLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3Rfc3RhcnQiLG9yZGVyZWQ6aS5sZW5ndGg+MX0pLHM9c1swXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pLG49ITEscD1zLmxlbmd0aCx1PTA7cD51O3UrKylvPXNbdV0saD1vLmxlbmd0aCxvPW8ucmVwbGFjZSgvXiAqKFsqKy1dfFxkK1wuKSArLywiIiksfm8uaW5kZXhPZigiXG4gIikmJihoLT1vLmxlbmd0aCxvPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9vLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpOm8ucmVwbGFjZShuZXcgUmVnRXhwKCJeIHsxLCIraCsifSIsImdtIiksIiIpKSx0aGlzLm9wdGlvbnMuc21hcnRMaXN0cyYmdSE9PXAtMSYmKGw9YS5idWxsZXQuZXhlYyhzW3UrMV0pWzBdLGk9PT1sfHxpLmxlbmd0aD4xJiZsLmxlbmd0aD4xfHwoZT1zLnNsaWNlKHUrMSkuam9pbigiXG4iKStlLHU9cC0xKSkscj1ufHwvXG5cbig/IVxzKiQpLy50ZXN0KG8pLHUhPT1wLTEmJihuPSJcbiI9PT1vLmNoYXJBdChvLmxlbmd0aC0xKSxyfHwocj1uKSksdGhpcy50b2tlbnMucHVzaCh7dHlwZTpyPyJsb29zZV9pdGVtX3N0YXJ0IjoibGlzdF9pdGVtX3N0YXJ0In0pLHRoaXMudG9rZW4obywhMSksdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9pdGVtX2VuZCJ9KTt0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2VuZCJ9KX1lbHNlIGlmKHM9dGhpcy5ydWxlcy5odG1sLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksdGhpcy50b2tlbnMucHVzaCh7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InBhcmFncmFwaCI6Imh0bWwiLHByZToicHJlIj09PXNbMV18fCJzY3JpcHQiPT09c1sxXXx8InN0eWxlIj09PXNbMV0sdGV4dDpzWzBdfSk7ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLmRlZi5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5saW5rc1tzWzFdLnRvTG93ZXJDYXNlKCldPXtocmVmOnNbMl0sdGl0bGU6c1szXX07ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC8oPzogKlx8ICopP1xuJC8sIiIpLnNwbGl0KCJcbiIpfSx1PTA7dTxvLmFsaWduLmxlbmd0aDt1Kyspby5hbGlnblt1XT0vXiAqLSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChvLmFsaWduW3VdKT8ibGVmdCI6bnVsbDtmb3IodT0wO3U8by5jZWxscy5sZW5ndGg7dSsrKW8uY2VsbHNbdV09by5jZWxsc1t1XS5yZXBsYWNlKC9eICpcfCAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZih0JiYocz10aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKGUpKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJwYXJhZ3JhcGgiLHRleHQ6IlxuIj09PXNbMV0uY2hhckF0KHNbMV0ubGVuZ3RoLTEpP3NbMV0uc2xpY2UoMCwtMSk6c1sxXX0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJ0ZXh0Iix0ZXh0OnNbMF19KTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gdGhpcy50b2tlbnN9O3ZhciB1PXtlc2NhcGU6L15cXChbXFxgKnt9XFtcXSgpIytcLS4hXz5dKS8sYXV0b2xpbms6L148KFteID5dKyhAfDpcLylbXiA+XSspPi8sdXJsOmwsdGFnOi9ePCEtLVtcc1xTXSo/LS0+fF48XC8/XHcrKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vLGxpbms6L14hP1xbKGluc2lkZSlcXVwoaHJlZlwpLyxyZWZsaW5rOi9eIT9cWyhpbnNpZGUpXF1ccypcWyhbXlxdXSopXF0vLG5vbGluazovXiE/XFsoKD86XFtbXlxdXSpcXXxbXlxbXF1dKSopXF0vLHN0cm9uZzovXl9fKFtcc1xTXSs/KV9fKD8hXyl8XlwqXCooW1xzXFNdKz8pXCpcKig/IVwqKS8sZW06L15cYl8oKD86X198W1xzXFNdKSs/KV9cYnxeXCooKD86XCpcKnxbXHNcU10pKz8pXCooPyFcKikvLGNvZGU6L14oYCspXHMqKFtcc1xTXSo/W15gXSlccypcMSg/IWApLyxicjovXiB7Mix9XG4oPyFccyokKS8sZGVsOmwsdGV4dDovXltcc1xTXSs/KD89W1xcPCFcW18qYF18IHsyLH1cbnwkKS99O3UuX2luc2lkZT0vKD86XFtbXlxdXSpcXXxbXlxbXF1dfFxdKD89W15cW10qXF0pKSovLHUuX2hyZWY9L1xzKjw/KFtcc1xTXSo/KT4/KD86XHMrWyciXShbXHNcU10qPylbJyJdKT9ccyovLHUubGluaz1pKHUubGluaykoImluc2lkZSIsdS5faW5zaWRlKSgiaHJlZiIsdS5faHJlZikoKSx1LnJlZmxpbms9aSh1LnJlZmxpbmspKCJpbnNpZGUiLHUuX2luc2lkZSkoKSx1Lm5vcm1hbD1vKHt9LHUpLHUucGVkYW50aWM9byh7fSx1Lm5vcm1hbCx7c3Ryb25nOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW06L15fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pfF5cKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopL30pLHUuZ2ZtPW8oe30sdS5ub3JtYWwse2VzY2FwZTppKHUuZXNjYXBlKSgiXSkiLCJ+fF0pIikoKSx1cmw6L14oaHR0cHM/OlwvXC9bXlxzPF0rW148Liw6OyInKVxdXHNdKS8sZGVsOi9efn4oPz1cUykoW1xzXFNdKj9cUyl+fi8sdGV4dDppKHUudGV4dCkoIl18Iiwifl18IikoInwiLCJ8aHR0cHM/Oi8vfCIpKCl9KSx1LmJyZWFrcz1vKHt9LHUuZ2ZtLHticjppKHUuYnIpKCJ7Mix9IiwiKiIpKCksdGV4dDppKHUuZ2ZtLnRleHQpKCJ7Mix9IiwiKiIpKCl9KSx0LnJ1bGVzPXUsdC5vdXRwdXQ9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzPW5ldyB0KG4scik7cmV0dXJuIHMub3V0cHV0KGUpfSx0LnByb3RvdHlwZS5vdXRwdXQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpLGw9IiI7ZTspaWYoaT10aGlzLnJ1bGVzLmVzY2FwZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPWlbMV07ZWxzZSBpZihpPXRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSwiQCI9PT1pWzJdPyhuPSI6Ij09PWlbMV0uY2hhckF0KDYpP3RoaXMubWFuZ2xlKGlbMV0uc3Vic3RyaW5nKDcpKTp0aGlzLm1hbmdsZShpWzFdKSxyPXRoaXMubWFuZ2xlKCJtYWlsdG86Iikrbik6KG49cyhpWzFdKSxyPW4pLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudXJsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbj1zKGlbMV0pLHI9bixsKz10aGlzLnJlbmRlcmVyLmxpbmsocixudWxsLG4pO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRhZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3B0aW9ucy5zYW5pdGl6ZT9zKGlbMF0pOmlbMF07ZWxzZSBpZihpPXRoaXMucnVsZXMubGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMub3V0cHV0TGluayhpLHtocmVmOmlbMl0sdGl0bGU6aVszXX0pO2Vsc2UgaWYoKGk9dGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoZSkpfHwoaT10aGlzLnJ1bGVzLm5vbGluay5leGVjKGUpKSl7aWYoZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksdD0oaVsyXXx8aVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSx0PXRoaXMubGlua3NbdC50b0xvd2VyQ2FzZSgpXSwhdHx8IXQuaHJlZil7bCs9aVswXS5jaGFyQXQoMCksZT1pWzBdLnN1YnN0cmluZygxKStlO2NvbnRpbnVlfWwrPXRoaXMub3V0cHV0TGluayhpLHQpfWVsc2UgaWYoaT10aGlzLnJ1bGVzLnN0cm9uZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuc3Ryb25nKHRoaXMub3V0cHV0KGlbMl18fGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5lbS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZW0odGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmNvZGVzcGFuKHMoaVsyXSwhMCkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmJyLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5icigpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmRlbC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuZGVsKHRoaXMub3V0cHV0KGlbMV0pKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy50ZXh0LmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9cyh0aGlzLnNtYXJ0eXBhbnRzKGlbMF0pKTtlbHNlIGlmKGUpdGhyb3cgbmV3IEVycm9yKCJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApKTtyZXR1cm4gbH0sdC5wcm90b3R5cGUub3V0cHV0TGluaz1mdW5jdGlvbihlLHQpe3ZhciBuPXModC5ocmVmKSxyPXQudGl0bGU/cyh0LnRpdGxlKTpudWxsO3JldHVybiIhIiE9PWVbMF0uY2hhckF0KDApP3RoaXMucmVuZGVyZXIubGluayhuLHIsdGhpcy5vdXRwdXQoZVsxXSkpOnRoaXMucmVuZGVyZXIuaW1hZ2UobixyLHMoZVsxXSkpfSx0LnByb3RvdHlwZS5zbWFydHlwYW50cz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2UucmVwbGFjZSgvLS0vZywi4oCUIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMeKAmCIpLnJlcGxhY2UoLycvZywi4oCZIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQx4oCcIikucmVwbGFjZSgvIi9nLCLigJ0iKS5yZXBsYWNlKC9cLnszfS9nLCLigKYiKTplfSx0LnByb3RvdHlwZS5tYW5nbGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiIscj1lLmxlbmd0aCxzPTA7cj5zO3MrKyl0PWUuY2hhckNvZGVBdChzKSxNYXRoLnJhbmRvbSgpPi41JiYodD0ieCIrdC50b1N0cmluZygxNikpLG4rPSImIyIrdCsiOyI7cmV0dXJuIG59LG4ucHJvdG90eXBlLmNvZGU9ZnVuY3Rpb24oZSx0LG4scil7aWYocj1yfHx7fSxyLmhpZ2hsaWdodCl7dmFyIGk9ci5oaWdobGlnaHQoZSx0KTtudWxsIT1pJiZpIT09ZSYmKG49ITAsZT1pKX1yZXR1cm4gdD8nPHByZT48Y29kZSBjbGFzcz0iJytyLmxhbmdQcmVmaXgrdCsnIj4nKyhuP2U6cyhlKSkrIlxuPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhuP2U6cyhlLCEwKSkrIlxuPC9jb2RlPjwvcHJlPiJ9LG4ucHJvdG90eXBlLmJsb2NrcXVvdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIjxibG9ja3F1b3RlPlxuIitlKyI8L2Jsb2NrcXVvdGU+XG4ifSxuLnByb3RvdHlwZS5odG1sPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxuLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiI8aCIrdCsnIGlkPSInK3IuaGVhZGVyUHJlZml4K24udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlx3XSsvZywiLSIpKyciPicrZSsiPC9oIit0KyI+XG4ifSxuLnByb3RvdHlwZS5ocj1mdW5jdGlvbigpe3JldHVybiI8aHI+XG4ifSxuLnByb3RvdHlwZS5saXN0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dD8ib2wiOiJ1bCI7cmV0dXJuIjwiK24rIj5cbiIrZSsiPC8iK24rIj5cbiJ9LG4ucHJvdG90eXBlLmxpc3RpdGVtPWZ1bmN0aW9uKGUpe3JldHVybiI8bGk+IitlKyI8L2xpPlxuIn0sbi5wcm90b3R5cGUucGFyYWdyYXBoPWZ1bmN0aW9uKGUpe3JldHVybiI8cD4iK2UrIjwvcD5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrZSsiPC90aGVhZD5cbiIrIjx0Ym9keT5cbiIrdCsiPC90Ym9keT5cbiIrIjwvdGFibGU+XG4ifSxuLnByb3RvdHlwZS50YWJsZXJvdz1mdW5jdGlvbihlKXtyZXR1cm4iPHRyPlxuIitlKyI8L3RyPlxuIn0sbi5wcm90b3R5cGUudGFibGVjZWxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5oZWFkZXI/InRoIjoidGQiLHI9dC5hbGlnbj8iPCIrbisnIHN0eWxlPSJ0ZXh0LWFsaWduOicrdC5hbGlnbisnIj4nOiI8IituKyI+IjtyZXR1cm4gcitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUuc3Ryb25nPWZ1bmN0aW9uKGUpe3JldHVybiI8c3Ryb25nPiIrZSsiPC9zdHJvbmc+In0sbi5wcm90b3R5cGUuZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxlbT4iK2UrIjwvZW0+In0sbi5wcm90b3R5cGUuY29kZXNwYW49ZnVuY3Rpb24oZSl7cmV0dXJuIjxjb2RlPiIrZSsiPC9jb2RlPiJ9LG4ucHJvdG90eXBlLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIjxicj4ifSxuLnByb3RvdHlwZS5kZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIjxkZWw+IitlKyI8L2RlbD4ifSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0nPGEgaHJlZj0iJytlKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+IituKyI8L2E+In0sbi5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8aW1nIHNyYz0iJytlKyciIGFsdD0iJytuKyciJztyZXR1cm4gdCYmKHIrPScgdGl0bGU9IicrdCsnIicpLHIrPSI+In0sci5wYXJzZT1mdW5jdGlvbihlLHQsbil7dmFyIHM9bmV3IHIodCxuKTtyZXR1cm4gcy5wYXJzZShlKX0sci5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSl7dGhpcy5pbmxpbmU9bmV3IHQoZS5saW5rcyx0aGlzLm9wdGlvbnMsdGhpcy5yZW5kZXJlciksdGhpcy50b2tlbnM9ZS5yZXZlcnNlKCk7Zm9yKHZhciBuPSIiO3RoaXMubmV4dCgpOyluKz10aGlzLnRvaygpO3JldHVybiBufSxyLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW49dGhpcy50b2tlbnMucG9wKCl9LHIucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdfHwwfSxyLnByb3RvdHlwZS5wYXJzZVRleHQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy50b2tlbi50ZXh0OyJ0ZXh0Ij09PXRoaXMucGVlaygpLnR5cGU7KWUrPSJcbiIrdGhpcy5uZXh0KCkudGV4dDtyZXR1cm4gdGhpcy5pbmxpbmUub3V0cHV0KGUpfSxyLnByb3RvdHlwZS50b2s9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy50b2tlbi50eXBlKXtjYXNlInNwYWNlIjpyZXR1cm4iIjtjYXNlImhyIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpO2Nhc2UiaGVhZGluZyI6cmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSx0aGlzLnRva2VuLmRlcHRoLHRoaXMudG9rZW4udGV4dCx0aGlzLm9wdGlvbnMpO2Nhc2UiY29kZSI6cmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsdGhpcy50b2tlbi5sYW5nLHRoaXMudG9rZW4uZXNjYXBlZCx0aGlzLm9wdGlvbnMpO2Nhc2UidGFibGUiOnZhciBlLHQsbixyLHMsaT0iIixsPSIiO2ZvcihuPSIiLGU9MDtlPHRoaXMudG9rZW4uaGVhZGVyLmxlbmd0aDtlKyspcj17aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19LG4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLmhlYWRlcltlXSkse2hlYWRlcjohMCxhbGlnbjp0aGlzLnRva2VuLmFsaWduW2VdfSk7Zm9yKGkrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobiksZT0wO2U8dGhpcy50b2tlbi5jZWxscy5sZW5ndGg7ZSsrKXtmb3IodD10aGlzLnRva2VuLmNlbGxzW2VdLG49IiIscz0wO3M8dC5sZW5ndGg7cysrKW4rPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMuaW5saW5lLm91dHB1dCh0W3NdKSx7aGVhZGVyOiExLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bc119KTtsKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KG4pfXJldHVybiB0aGlzLnJlbmRlcmVyLnRhYmxlKGksbCk7Y2FzZSJibG9ja3F1b3RlX3N0YXJ0Ijpmb3IodmFyIGw9IiI7ImJsb2NrcXVvdGVfZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShsKTtjYXNlImxpc3Rfc3RhcnQiOmZvcih2YXIgbD0iIixvPXRoaXMudG9rZW4ub3JkZXJlZDsibGlzdF9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0KGwsbyk7Y2FzZSJsaXN0X2l0ZW1fc3RhcnQiOmZvcih2YXIgbD0iIjsibGlzdF9pdGVtX2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz0idGV4dCI9PT10aGlzLnRva2VuLnR5cGU/dGhpcy5wYXJzZVRleHQoKTp0aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGwpO2Nhc2UibG9vc2VfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPXRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJodG1sIjp2YXIgaD10aGlzLnRva2VuLnByZXx8dGhpcy5vcHRpb25zLnBlZGFudGljP3RoaXMudG9rZW4udGV4dDp0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KTtyZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKGgpO2Nhc2UicGFyYWdyYXBoIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCkpO2Nhc2UidGV4dCI6cmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VUZXh0KCkpfX0sbC5leGVjPWwsaC5vcHRpb25zPWguc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gbyhoLmRlZmF1bHRzLGUpLGh9LGguZGVmYXVsdHM9e2dmbTohMCx0YWJsZXM6ITAsYnJlYWtzOiExLHBlZGFudGljOiExLHNhbml0aXplOiExLHNtYXJ0TGlzdHM6ITEsc2lsZW50OiExLGhpZ2hsaWdodDpudWxsLGxhbmdQcmVmaXg6ImxhbmctIixzbWFydHlwYW50czohMSxoZWFkZXJQcmVmaXg6IiIscmVuZGVyZXI6bmV3IG59LGguUGFyc2VyPXIsaC5wYXJzZXI9ci5wYXJzZSxoLlJlbmRlcmVyPW4saC5MZXhlcj1lLGgubGV4ZXI9ZS5sZXgsaC5JbmxpbmVMZXhlcj10LGguaW5saW5lTGV4ZXI9dC5vdXRwdXQsaC5wYXJzZT1oLCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1oOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTp0aGlzLm1hcmtlZD1ofS5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN8fCgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6Z2xvYmFsKX0oKSk7UEsHCEL6TGpTOQAAUzkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHN0YXRpY1xsaWJcdmFsaWRhdGUubWluLmpzLyoKICogdmFsaWRhdGUuanMgMS4zCiAqIENvcHlyaWdodCAoYykgMjAxMyBSaWNrIEhhcnJpc29uLCBodHRwOi8vcmlja2hhcnJpc29uLm1lCiAqIHZhbGlkYXRlLmpzIGlzIG9wZW4gc291cmNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqIFBvcnRpb25zIG9mIHZhbGlkYXRlLmpzIGFyZSBpbnNwaXJlZCBieSBDb2RlSWduaXRlci4KICogaHR0cDovL3JpY2toYXJyaXNvbi5naXRodWIuY29tL3ZhbGlkYXRlLmpzCiAqLwoKKGZ1bmN0aW9uKHEscixtKXt2YXIgcz17cmVxdWlyZWQ6IlRoZSAlcyBmaWVsZCBpcyByZXF1aXJlZC4iLG1hdGNoZXM6IlRoZSAlcyBmaWVsZCBkb2VzIG5vdCBtYXRjaCB0aGUgJXMgZmllbGQuIiwiZGVmYXVsdCI6IlRoZSAlcyBmaWVsZCBpcyBzdGlsbCBzZXQgdG8gZGVmYXVsdCwgcGxlYXNlIGNoYW5nZS4iLHZhbGlkX2VtYWlsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4iLHZhbGlkX2VtYWlsczoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhbGwgdmFsaWQgZW1haWwgYWRkcmVzc2VzLiIsbWluX2xlbmd0aDoiVGhlICVzIGZpZWxkIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixtYXhfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBub3QgZXhjZWVkICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZXhhY3RfbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBleGFjdGx5ICVzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiIsZ3JlYXRlcl90aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAlcy4iLGxlc3NfdGhhbjoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBsZXNzIHRoYW4gJXMuIixhbHBoYToiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzLiIsYWxwaGFfbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycy4iLGFscGhhX2Rhc2g6IlRoZSAlcyBmaWVsZCBtdXN0IG9ubHkgY29udGFpbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBhbmQgZGFzaGVzLiIsbnVtZXJpYzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5IG51bWJlcnMuIixpbnRlZ2VyOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFuIGludGVnZXIuIixkZWNpbWFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgZGVjaW1hbCBudW1iZXIuIixpc19uYXR1cmFsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgcG9zaXRpdmUgbnVtYmVycy4iLGlzX25hdHVyYWxfbm9femVybzoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4iLHZhbGlkX2lwOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgSVAuIix2YWxpZF9iYXNlNjQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBiYXNlNjQgc3RyaW5nLiIsdmFsaWRfY3JlZGl0X2NhcmQ6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIuIixpc19maWxlX3R5cGU6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSAlcyBmaWxlcy4iLHZhbGlkX3VybDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIFVSTC4ifSx0PWZ1bmN0aW9uKGEpe30sdT0vXiguKz8pXFsoLispXF0kLyxoPS9eWzAtOV0rJC8sdj0vXlwtP1swLTldKyQvLGs9L15cLT9bMC05XSpcLj9bMC05XSskLyxwPS9eW2EtekEtWjAtOS4hIyQlJmFtcDsnKitcLVwvPT9cXl9ge3x9flwtXStAW2EtekEtWjAtOVwtXSsoPzpcLlthLXpBLVowLTlcLV0rKSokLyx3PS9eW2Etel0rJC9pLHg9L15bYS16MC05XSskL2kseT0vXlthLXowLTlfXC1dKyQvaSx6PS9eWzAtOV0rJC9pLEE9L15bMS05XVswLTldKiQvaSxCPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KVwuKXszfSgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMC05XXsxLDJ9KSQvaSxDPS9bXmEtekEtWjAtOVwvXCs9XS9pLEQ9L15bXGRcLVxzXSskLyxFPS9eKChodHRwfGh0dHBzKTpcL1wvKFx3Kzp7MCwxfVx3KkApPyhcUyspfCkoOlswLTldKyk/KFwvfFwvKFtcdyMhOi4/Kz0mJUAhXC1cL10pKT8kLyxlPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbGxiYWNrPWN8fHQ7dGhpcy5lcnJvcnM9W107dGhpcy5maWVsZHM9e307dGhpcy5mb3JtPXRoaXMuX2Zvcm1CeU5hbWVPck5vZGUoYSl8fHt9O3RoaXMubWVzc2FnZXM9e307dGhpcy5oYW5kbGVycz17fTthPTA7Zm9yKGM9Yi5sZW5ndGg7YTxjO2ErKyl7dmFyIGQ9YlthXTtpZigoZC5uYW1lfHxkLm5hbWVzKSYmZC5ydWxlcylpZihkLm5hbWVzKWZvcih2YXIgbD0wO2w8ZC5uYW1lcy5sZW5ndGg7bCsrKXRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lc1tsXSk7ZWxzZSB0aGlzLl9hZGRGaWVsZChkLGQubmFtZSl9dmFyIGc9dGhpcy5mb3JtLm9uc3VibWl0O3RoaXMuZm9ybS5vbnN1Ym1pdD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7dHJ5e3JldHVybiBhLl92YWxpZGF0ZUZvcm0oYikmJihnPT09bXx8ZygpKX1jYXRjaChjKXt9fX0odGhpcyl9LG49ZnVuY3Rpb24oYSxiKXt2YXIgYztpZigwPGEubGVuZ3RoJiYoInJhZGlvIj09PWFbMF0udHlwZXx8ImNoZWNrYm94Ij09PWFbMF0udHlwZSkpZm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoYVtjXS5jaGVja2VkKXJldHVybiBhW2NdW2JdfWVsc2UgcmV0dXJuIGFbYl19O2UucHJvdG90eXBlLnNldE1lc3NhZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLm1lc3NhZ2VzW2FdPWI7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLnJlZ2lzdGVyQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXthJiYoInN0cmluZyI9PT10eXBlb2YgYSYmYiYmImZ1bmN0aW9uIj09PXR5cGVvZiBiKSYmKHRoaXMuaGFuZGxlcnNbYV09Yik7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLl9mb3JtQnlOYW1lT3JOb2RlPWZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiPT09dHlwZW9mIGE/YTpyLmZvcm1zW2FdfTtlLnByb3RvdHlwZS5fYWRkRmllbGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmZpZWxkc1tiXT17bmFtZTpiLGRpc3BsYXk6YS5kaXNwbGF5fHxiLHJ1bGVzOmEucnVsZXMsaWQ6bnVsbCx0eXBlOm51bGwsdmFsdWU6bnVsbCxjaGVja2VkOm51bGx9fTtlLnByb3RvdHlwZS5fdmFsaWRhdGVGb3JtPWZ1bmN0aW9uKGEpe3RoaXMuZXJyb3JzPVtdO2Zvcih2YXIgYiBpbiB0aGlzLmZpZWxkcylpZih0aGlzLmZpZWxkcy5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGM9dGhpcy5maWVsZHNbYl18fHt9LGQ9dGhpcy5mb3JtW2MubmFtZV07ZCYmZCE9PW0mJihjLmlkPW4oZCwiaWQiKSxjLnR5cGU9MDxkLmxlbmd0aD9kWzBdLnR5cGU6ZC50eXBlLGMudmFsdWU9bihkLCJ2YWx1ZSIpLGMuY2hlY2tlZD1uKGQsImNoZWNrZWQiKSx0aGlzLl92YWxpZGF0ZUZpZWxkKGMpKX0iZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuY2FsbGJhY2smJnRoaXMuY2FsbGJhY2sodGhpcy5lcnJvcnMsYSk7MDx0aGlzLmVycm9ycy5sZW5ndGgmJihhJiZhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTpldmVudCYmKGV2ZW50LnJldHVyblZhbHVlPSExKSk7cmV0dXJuITB9O2UucHJvdG90eXBlLl92YWxpZGF0ZUZpZWxkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1hLnJ1bGVzLnNwbGl0KCJ8IiksYz1hLnJ1bGVzLmluZGV4T2YoInJlcXVpcmVkIiksZD0hYS52YWx1ZXx8IiI9PT1hLnZhbHVlfHxhLnZhbHVlPT09bSxsPTAsZz1iLmxlbmd0aDtsPGc7bCsrKXt2YXIgZj1iW2xdLGU9bnVsbCxoPSExLGs9dS5leGVjKGYpO2lmKC0xIT09Y3x8LTEhPT1mLmluZGV4T2YoIiFjYWxsYmFja18iKXx8IWQpaWYoayYmKGY9a1sxXSxlPWtbMl0pLCIhIj09PWYuY2hhckF0KDApJiYoZj1mLnN1YnN0cmluZygxLGYubGVuZ3RoKSksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLl9ob29rc1tmXT90aGlzLl9ob29rc1tmXS5hcHBseSh0aGlzLFthLGVdKXx8KGg9ITApOiJjYWxsYmFja18iPT09Zi5zdWJzdHJpbmcoMCw5KSYmKGY9Zi5zdWJzdHJpbmcoOSxmLmxlbmd0aCksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmhhbmRsZXJzW2ZdJiYhMT09PXRoaXMuaGFuZGxlcnNbZl0uYXBwbHkodGhpcyxbYS52YWx1ZSxlXSkmJihoPSEwKSksaCl7Yj10aGlzLm1lc3NhZ2VzW2ZdfHxzW2ZdO2M9IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aXRoIHRoZSAiK2EuZGlzcGxheSsiIGZpZWxkLiI7YiYmKGM9Yi5yZXBsYWNlKCIlcyIsYS5kaXNwbGF5KSxlJiYoYz1jLnJlcGxhY2UoIiVzIix0aGlzLmZpZWxkc1tlXT90aGlzLmZpZWxkc1tlXS5kaXNwbGF5OmUpKSk7dGhpcy5lcnJvcnMucHVzaCh7aWQ6YS5pZCxuYW1lOmEubmFtZSxtZXNzYWdlOmMscnVsZTpmfSk7YnJlYWt9fX07ZS5wcm90b3R5cGUuX2hvb2tzPXtyZXF1aXJlZDpmdW5jdGlvbihhKXt2YXIgYj1hLnZhbHVlO3JldHVybiJjaGVja2JveCI9PT1hLnR5cGV8fCJyYWRpbyI9PT1hLnR5cGU/ITA9PT1hLmNoZWNrZWQ6bnVsbCE9PWImJiIiIT09Yn0sImRlZmF1bHQiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUhPT1ifSxtYXRjaGVzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5mb3JtW2JdO3JldHVybiBjP2EudmFsdWU9PT1jLnZhbHVlOiExfSx2YWxpZF9lbWFpbDpmdW5jdGlvbihhKXtyZXR1cm4gcC50ZXN0KGEudmFsdWUpfSx2YWxpZF9lbWFpbHM6ZnVuY3Rpb24oYSl7YT1hLnZhbHVlLnNwbGl0KCIsIik7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspaWYoIXAudGVzdChhW2JdKSlyZXR1cm4hMTtyZXR1cm4hMH0sbWluX2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg+PXBhcnNlSW50KGIsMTApOiExfSxtYXhfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aDw9cGFyc2VJbnQoYiwxMCk6ITF9LGV4YWN0X2xlbmd0aDpmdW5jdGlvbihhLGIpe3JldHVybiBoLnRlc3QoYik/YS52YWx1ZS5sZW5ndGg9PT1wYXJzZUludChiLDEwKTohMX0sZ3JlYXRlcl90aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPnBhcnNlRmxvYXQoYik6ITF9LGxlc3NfdGhhbjpmdW5jdGlvbihhLGIpe3JldHVybiBrLnRlc3QoYS52YWx1ZSk/cGFyc2VGbG9hdChhLnZhbHVlKTxwYXJzZUZsb2F0KGIpOiExfSxhbHBoYTpmdW5jdGlvbihhKXtyZXR1cm4gdy50ZXN0KGEudmFsdWUpfSxhbHBoYV9udW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiB4LnRlc3QoYS52YWx1ZSl9LGFscGhhX2Rhc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHkudGVzdChhLnZhbHVlKX0sbnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4gaC50ZXN0KGEudmFsdWUpfSxpbnRlZ2VyOmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoYS52YWx1ZSl9LGRlY2ltYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGsudGVzdChhLnZhbHVlKX0saXNfbmF0dXJhbDpmdW5jdGlvbihhKXtyZXR1cm4gei50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsX25vX3plcm86ZnVuY3Rpb24oYSl7cmV0dXJuIEEudGVzdChhLnZhbHVlKX0sdmFsaWRfaXA6ZnVuY3Rpb24oYSl7cmV0dXJuIEIudGVzdChhLnZhbHVlKX0sdmFsaWRfYmFzZTY0OmZ1bmN0aW9uKGEpe3JldHVybiBDLnRlc3QoYS52YWx1ZSl9LHZhbGlkX3VybDpmdW5jdGlvbihhKXtyZXR1cm4gRS50ZXN0KGEudmFsdWUpfSx2YWxpZF9jcmVkaXRfY2FyZDpmdW5jdGlvbihhKXtpZighRC50ZXN0KGEudmFsdWUpKXJldHVybiExO3ZhciBiPTAsYz0wLGQ9ITE7YT1hLnZhbHVlLnJlcGxhY2UoL1xEL2csIiIpO2Zvcih2YXIgZT1hLmxlbmd0aC0xOzA8PWU7ZS0tKWM9YS5jaGFyQXQoZSksYz1wYXJzZUludChjLDEwKSxkJiY5PChjKj0yKSYmKGMtPTkpLGIrPWMsZD0hZDtyZXR1cm4gMD09PWIlMTB9LGlzX2ZpbGVfdHlwZTpmdW5jdGlvbihhLGIpe2lmKCJmaWxlIiE9PWEudHlwZSlyZXR1cm4hMDt2YXIgYz1hLnZhbHVlLnN1YnN0cihhLnZhbHVlLmxhc3RJbmRleE9mKCIuIikrMSksZD1iLnNwbGl0KCIsIiksZT0hMSxnPTAsZj1kLmxlbmd0aDtmb3IoZztnPGY7ZysrKWM9PWRbZ10mJihlPSEwKTtyZXR1cm4gZX19O3EuRm9ybVZhbGlkYXRvcj1lfSkod2luZG93LGRvY3VtZW50KTsKUEsHCGaMH8QzGAAAMxgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAABQAAAHZpZXcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHZpZXdcYWRtaW4vUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cYWRtaW4ubGF5b3V0PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPnt7LlRpdGxlfX0gLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvYWRtaW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgICA8aDMgY2xhc3M9ImxvZ28gbGVmdCI+RnhoLkdvIC0gPHNwYW4+e3suVGl0bGV9fTwvc3Bhbj48L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJuYXYgbGVmdCByZWxhdGl2ZSI+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGFzaGJvYXJkIGxlZnQiIGhyZWY9Ii9hZG1pbi8iPjxpIGNsYXNzPSJmYSBmYS1kYXNoYm9hcmQiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iYXJ0aWNsZSBsZWZ0IiBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvIiB0aXRsZT0i5paH56ugIj48aSBjbGFzcz0iZmEgZmEtY29weSI+PC9pPjwvYT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGFnZXMgbGVmdCIgaHJlZj0iL2FkbWluL3BhZ2VzLyIgdGl0bGU9IueLrOeri+mhtemdoiI+PGkgY2xhc3M9ImZhIGZhLXBhc3RlIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImNvbW1lbnRzIGxlZnQiIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iIHRpdGxlPSLor4TorroiPjxpIGNsYXNzPSJmYSBmYS1jb21tZW50cyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJmaWxlcyBsZWZ0IiBocmVmPSIvYWRtaW4vZmlsZXMvIiB0aXRsZT0i5aqS5L2T5paH5Lu2Ij48aSBjbGFzcz0iZmEgZmEtaW5ib3giPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0icGx1Z2lucyBsZWZ0IiBocmVmPSIvYWRtaW4vcGx1Z2lucy8iIHRpdGxlPSLmj5Lku7YiPjxpIGNsYXNzPSJmYSBmYS1nZWFycyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9zZXR0aW5nLyIgdGl0bGU9Iuiuvue9riI+PGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPjwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxhIGNsYXNzPSJvdXQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii9sb2dvdXQvIiB0aXRsZT0i6YCA5Ye6Ij48aSBjbGFzcz0iZmEgZmEtcG93ZXItb2ZmIGZhLWxnIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0icHJvZmlsZSBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIiB0aXRsZT0i5oiRIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImZyb250IG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9Iuafpeeci+e9keermSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+DQogICAgPC9kaXY+DQo8L2Rpdj4NCntAQ29udGVudH0NCjxkaXYgaWQ9ImZvb3RlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXIiPg0KICAgICAgIDxwIGNsYXNzPSJsaW5rcyB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgIDxhIGNsYXNzPSJzdGF0IiBocmVmPSIvY21kL21lc3NhZ2UvIj7mtojmga88L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJiYWNrdXAiIGhyZWY9Ii9jbWQvYmFja3VwLyI+5aSH5Lu9PC9hPg0KICAgICAgICAgICA8YSBjbGFzcz0iZXJyIiBocmVmPSIvY21kL2xvZ3MvIj7ml6Xlv5c8L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJzeXMiIGhyZWY9IiMiPuezu+e7nzwvYT4NCiAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJjcCB0ZXh0LWNlbnRlciI+UHJvdWRseSBQb3dlcmVkIGJ5IEZ4aC5HbzwvcD4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPlBLBwjKwp1dvAgAALwIAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXGFydGljbGVzLmh0bWw8dWwgaWQ9ImFydGljbGUtbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+DQogICAgPGxpPg0KICAgICAgICA8YSBjbGFzcz0ibGJsIGxibC1ibHVlIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS93cml0ZS8iPua3u+WKoOaWh+eroDwvYT4NCiAgICA8L2xpPnt7cmFuZ2UgLkFydGljbGVzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+PGg0IGNsYXNzPSJpbmxpbmUtYmxvY2sgdGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGFyZ2V0PSJfYmxhbmsiPnt7LlRpdGxlfX08L2E+PC9oND57e2lmIG5lIC5TdGF0dXMgInB1Ymxpc2gifX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxibCBzdGF0dXMiPuiNieeovzwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJzbHVnIj57ey5TbHVnfX08L3NwYW4+e3tpZiBlcSAuSXNDb21tZW50IGZhbHNlfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImlzLWNvbW1lbnQiPjxpIGNsYXNzPSJmYS1jb21tZW50cyBmYSI+PC9pPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvc3Bhbj57e2VuZH19DQogICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudCI+e3suQ29tbWVudE51bX19IC8ge3suSGl0c319PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZWRpdCBsYmwgbGJsLWdyZWVuIiBocmVmPSIvYWRtaW4vYXJ0aWNsZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7nvJbovpE8L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgbGJsIGxibC1yZWQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPuWIoOmZpDwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8dWwgaWQ9ImFydGljbGUtcGFnZXIiIGNsYXNzPSJwYWdlciBjb250YWluZXI5NjAiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJCgiLmRlbCIpLm9uKCJjbGljayIsZnVuY3Rpb24oZSl7DQogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgaWYoY29uZmlybSgi5Yig6Zmk5paH56ug5bCG5L2/55u45YWz5YaF5a655aSx5pWI77yB56Gu6K6k77yfIikpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgInVybCI6Ii9hZG1pbi9hcnRpY2xlLyIraWQrIi8iLA0KICAgICAgICAgICAgICAgICJ0eXBlIjoiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAic3VjY2VzcyI6ZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7LliKDpmaQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIH8Kevq4GAACuBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAdmlld1xhZG1pblxjbWQvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcYWRtaW5cY21kXGJhY2t1cC5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciBjbGVhciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUgbGVmdCI+5aSH5Lu95pWw5o2uPC9oMT4NCiAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUgbGVmdCIgaWQ9ImJhY2t1cC1idG4iPuWkh+S7vTwvYnV0dG9uPg0KPC9oZWFkZXI+DQo8dWwgY2xhc3M9ImNtZC1saXN0IiBpZD0iYmFja3VwLWxpc3QiPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGk+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVUaW1lIC5Nb2RUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fSA8YSBjbGFzcz0ibGluayIgaHJlZj0iL2NtZC9iYWNrdXAvZmlsZT9maWxlPXt7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLWV4dGVybmFsLWxpbmsiPjwvaT48L2E+PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+e3tGaWxlU2l6ZSAuU2l6ZX19PC9zcGFuPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIiByZWw9Int7Lk5hbWV9fSI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZS1vIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNiYWNrdXAtYnRuJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICB0eXBlOiAicG9zdCIsDQogICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAkKCcuY21kLWxpc3QnKS5wcmVwZW5kKCc8bGkgY2xhc3M9ImJhY2t1cC1sb2FkaW5nIj7lpIfku73kuK0uLjwvbGk+Jyk7DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuaGlkZSgpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcuYmFja3VwLWxvYWRpbmcnKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLXJlc3VsdCI+5Yia5Yia5aSH5Lu95YiwICcgKyBqc29uLmZpbGUgKyAnPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkKCcjYmFja3VwLWJ0bicpLnNob3coKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5kZWwnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHVybDogIi9jbWQvYmFja3VwLz9maWxlPSIgKyAkKHRoaXMpLmF0dHIoInJlbCIpLA0KICAgICAgICAgICAgICAgIHR5cGU6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICQodGhhdCkucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCLeb5slHBwAARwcAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5cY21kXGxvZy5odG1sPGhlYWRlciBjbGFzcz0iY21kLWhlYWRlciI+DQogICAgPGgxIGNsYXNzPSJjbWQtdGl0bGUiPumUmeivr+aXpeW/lzwvaDE+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJsb2ctbGlzdCI+e3tyYW5nZSAuTG9nc319DQogICAgPGxpIGNsYXNzPSJsb2cgcmVsYXRpdmUiPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSBpbmxpbmUtYmxvY2siPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUgaW5saW5lLWJsb2NrIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxwcmUgY2xhc3M9InRleHQiPnt7LlRleHR9fTwvcHJlPg0KICAgICAgICA8YSBjbGFzcz0icmVtb3ZlIGFic29sdXRlIiBocmVmPSIvY21kL2xvZ3MvP2ZpbGU9e3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZW1vdmUnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi56Gu6K6k5Yig6Zmk6K6w5b2VIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgIHVybDokdGhpcy5hdHRyKCJocmVmIiksDQogICAgICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg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c3BhbiBjbGFzcz0iYy1jbnQiPkDml6DmlYg8L3NwYW4+e3tlbmR9fXt7aWYgbmUgLlN0YXR1cyAiYXBwcm92ZWQifX0NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1jaGVjayIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5a6h5qC4Ij48aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUiPjwvaT7lrqHmoLjkuK08L2E+e3tlbmR9fQ0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLlm57lpI0iPjxpIGNsYXNzPSJmYSBmYS1xdW90ZS1yaWdodCI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1kZWwiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWIoOmZpCI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+e3tlbmR9fQ0KICAgIDx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICAgICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vY29tbWVudHMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KICAgIDwvdWw+DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgYWN0aW9uPSIvYWRtaW4vY29tbWVudHMvIiBjbGFzcz0iZm9ybSBjbGVhciBsZWZ0IiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCBsZWZ0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSIgaWQ9ImNvbW1lbnQtc3VibWl0Ij7lm57lpI3or4Torro8L2J1dHRvbj4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiIgaWQ9ImNvbW1lbnQtY2xvc2UiPuWFs+mXreWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgaWQ9ImNvbW1lbnQtcGFyZW50IiBuYW1lPSJwaWQiLz4NCiAgICA8L2Zvcm0+DQo8L2Rpdj4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5jLWRlbCcpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLliKDpmaTor4TorrrlsIbkvb/nm7jlhbPlhoXlrrnml6DmlYghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYWRtaW4vY29tbWVudHMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjb21tZW50LScgKyBpZCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLliKDpmaTlpLHotKUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcuYy1jaGVjaycpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLlrqHmoLjlkI7mraTkvZzogIXlsIbkuI3lho3moIforrDlrqHmoLghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgIHR5cGU6ICJwdXQiLA0KICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYWRtaW4vY29tbWVudHMvP2lkPSIgKyBpZCwNCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjb21tZW50LScgKyBpZCkuZmluZCgiLmMtY2hlY2siKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWuoeaguOWksei0pSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5jLXJlcGx5Jykub24oImNsaWNrIixmdW5jdGlvbigpew0KICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LScraWQpLmFwcGVuZCgkKCcjY29tbWVudC1mb3JtJykuZGV0YWNoKCkuc2hvdygpKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbChpZCk7DQogICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5Zue5aSNIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2NvbW1lbnRzLyI7DQogICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICBhbGVydCgi5Zue5aSN5aSx6LSlIik7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjY29tbWVudC1jbG9zZScpLm9uKCJjbGljayIsZnVuY3Rpb24oKXsNCiAgICAgICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5oaWRlKCk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1wYXJlbnQnKS52YWwoMCk7DQogICAgICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykudmFsKCIiKTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhAmAjv7Q8AAO0PAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABwAAAB2aWV3XGFkbWluXGVkaXRfYXJ0aWNsZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9IuaWh+eroOagh+mimCIgdmFsdWU9Int7LkFydGljbGUuVGl0bGV9fSIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPnt7SHRtbCAuQXJ0aWNsZS5UZXh0fX08L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOWUr+S4gOmTvuaOpSIgdmFsdWU9Int7LkFydGljbGUuU2x1Z319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5qCH562+PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJ0YWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InRhZyIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOagh+etviIgdmFsdWU9Int7LkFydGljbGUuVGFnU3RyaW5nfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCJ7e2lmIGVxIC5BcnRpY2xlLlN0YXR1cyAicHVibGlzaCJ9fSBzZWxlY3RlZHt7ZW5kfX0+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQie3tpZiBlcSAuQXJ0aWNsZS5TdGF0dXMgImRyYWZ0In19IHNlbGVjdGVke3tlbmR9fT7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEie3tpZiBlcSAuQXJ0aWNsZS5Jc0NvbW1lbnQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLkFydGljbGUuSXNDb21tZW50IGZhbHNlfX0gc2VsZWN0ZWR7e2VuZH19PuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuW3suS/neWtmO+8jOWOu+afpeeci++8n+i/mOaYr+e7p+e7ree8lui+kSIpKSB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9hcnRpY2xlcy8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2FydGljbGUtc3VibWl0Iik7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcIS5zp8W0NAABtDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAdmlld1xhZG1pblxlZGl0X3BhZ2UuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLpobXpnaLmoIfpopgiIHZhbHVlPSJ7ey5QYWdlLlRpdGxlfX0iLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij57e0h0bWwgLlBhZ2UuVGV4dH19PC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpobXpnaLnmoTllK/kuIDpk77mjqUiIHZhbHVlPSJ7ey5QYWdlLlNsdWd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoInt7aWYgZXEgLlBhZ2UuU3RhdHVzICJwdWJsaXNoIn19IHNlbGVjdGVke3tlbmR9fT7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCJ7e2lmIGVxIC5QYWdlLlN0YXR1cyAiZHJhZnQifX0gc2VsZWN0ZWR7e2VuZH19PuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5QYWdlLklzQ29tbWVudCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuUGFnZS5Jc0NvbW1lbnQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7nva7pobbpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImxpbmsiIGlkPSJpcy1saW5rIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwInt7aWYgZXEgLlBhZ2UuSXNMaW5rZWQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5QYWdlLklzTGlua2VkIHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgi5bey5L+d5a2Y77yM5Y675p+l55yL77yf6L+Y5piv57un57ut57yW6L6RIikpIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL3BhZ2VzLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwi2eDIy4w0AAOMNAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABUAAAB2aWV3XGFkbWluXGZpbGVzLmh0bWw8dWwgaWQ9ImZpbGVzLWxpc3QiIGNsYXNzPSJhZG1pbiBjb250YWluZXI5NjAgcGFnZXIiPg0KICAgIDxsaSBjbGFzcz0iZmlsZSIgaWQ9ImZpbGVzLWJ0bi1saSI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgPC9saT57e3JhbmdlIC5GaWxlc319DQogICAgPGxpIGNsYXNzPSJmaWxlIiBpZD0iZmlsZS17ey5JZH19Ij4NCiAgICAgICAgPHNwYW4gY2xhc3M9InVwbG9hZC10aW1lIj57e0RhdGVJbnQ2NCAuVXBsb2FkVGltZSAiTU0uREQifX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJzaXplIj57e0ZpbGVTaXplIC5TaXplfX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj57ey5OYW1lfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSIve3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iL3t7LlVybH19Ij48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluay1zcXVhcmUiPjwvaT48L2E+DQogICAgICAgIDxhIGNsYXNzPSJkZWwgZmFkZS1vdXQiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWIoOmZpOmZhOS7tiI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZSI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCiAgICB7e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL2ZpbGVzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCjwvdWw+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaW5pdFVwbG9hZCgiI2F0dGFjaC1zaG93Iik7DQogICAgICAgICQoIi5kZWwiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoY29uZmlybSgi5Yig6Zmk6ZmE5Lu255u45YWz6ZO+5o6l5Lya5aSx5pWIISIpKSB7DQogICAgICAgICAgICAgICAgdmFyIGlkID0gJCh0aGlzKS5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJkZWxldGUiLA0KICAgICAgICAgICAgICAgICAgICAidXJsIjogIi9hZG1pbi9maWxlcy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2ZpbGUtJytpZCkucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhixZv67AYAAOwGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAAB2aWV3XGFkbWluXGhvbWUuaHRtbDxkaXYgY2xhc3M9ImFkbWluIGNvbnRhaW5lciBjbGVhciIgaWQ9ImRhc2hib2FyZCI+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTUgbGVmdCI+DQogICAgICAgIDxkaXYgY2xhc3M9IndlbGNvbWUiPg0KICAgICAgICAgICAgPGg0PldlbGNvbWU8L2g0Pg0KICAgICAgICAgICAgPHA+5qyi6L+O5Zue5p2l77yMIDxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJxdWljay1saW5rIj4NCiAgICAgICAgICAgIDxoND7lv6vpgJ/pk77mjqU8L2g0Pg0KICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vYXJ0aWNsZS93cml0ZS8iPuaSsOWGmeaWh+eroDwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vcGFnZS93cml0ZS8iPua3u+WKoOmhtemdojwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vY29tbWVudHMvIj7mn6XnnIvlkozlrqHmoLjor4Torro8L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3NldHRpbmcvIj7kv67mlLnphY3nva48L2E+PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iL2FkbWluL3Byb2ZpbGUvIj7mm7TmlrDkuKrkurrotYTmlpk8L2E+PC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS0yIGxlZnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eSI+DQogICAgICAgICAgICA8aDQ+5pyA5paw5rS75YqoPC9oND57e3JhbmdlIC5NZXNzYWdlc319DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtc2cgcmVsYXRpdmUge3suVHlwZX19Ij4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGEiPnt7SHRtbCAuRGF0YX19PC9kaXY+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9InJlYWQgYWJzb2x1dGUiIGhyZWY9Ii9hZG1pbi9tZXNzYWdlL3JlYWQ/aWQ9e3suSWR9fSIgcmVsPSJ7ey5JZH19Ij48aSBjbGFzcz0iZmEgZmEtY2hlY2siPjwvaT48L2E+DQogICAgICAgICAgICA8L2Rpdj57e2VuZH19e3tpZiBsdCAobGVuIC5NZXNzYWdlcykgMX19DQogICAgICAgICAgICA8cD7msqHmnInmlrDnmoTmtLvliqjkv6Hmga88L3A+DQogICAgICAgICAgICB7e2VuZH19DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImdyaWQtMS00IHJpZ2h0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHMiPg0KICAgICAgICAgICAgPGg0PuaVsOaNrue7n+iuoTwvaDQ+DQogICAgICAgICAgICA8cD7lt7Lnu4/lj5HluIPmlofnq6AgPHNwYW4gY2xhc3M9ImxibCBsYmwtcmVkIj57ey5TdGF0aXMuQXJ0aWNsZXN9fTwvc3Bhbj4g56+H77yMDQogICAgICAgICAgICDpobXpnaIgPHNwYW4gY2xhc3M9ImxibCBsYmwtcmVkIj57ey5TdGF0aXMuUGFnZXN9fTwvc3Bhbj4g5Liq77yMIDxici8+DQogICAgICAgICAgICDmlLbliLDor4TorrogPHNwYW4gY2xhc3M9ImxibCBsYmwtYmx1ZSI+e3suU3RhdGlzLkNvbW1lbnRzfX08L3NwYW4+IOasoe+8jA0KICAgICAgICAgICAg5LiK5LygIDxzcGFuIGNsYXNzPSJsYmwgbGJsLWdyZWVuIj57ey5TdGF0aXMuRmlsZXN9fTwvc3Bhbj4g5Liq6ZmE5Lu2PC9wPg0KICAgICAgICAgICAgPHA+5b2T5YmN56iL5bqP54mI5pys77yaPHN0cm9uZz57ey5TdGF0aXMuVmVyc2lvbn19PC9zdHJvbmc+PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ib2ZmaWNlIj4NCiAgICAgICAgICAgIDxoND7lrpjmlrnmtojmga88L2g0Pg0KICAgICAgICAgICAgPHA+6L+Y5rKh5pyJ5raI5oGvPC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KPHNjcmlwdD4NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICAgICAgICQoIi5yZWFkIikub24oImNsaWNrIixmdW5jdGlvbigpew0KICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAkLnBvc3QoJHRoaXMuYXR0cigiaHJlZiIpLGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAkdGhpcy5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICB9KTsNCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgIH0pOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCPSU3OYgCQAAIAkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5cbG9naW4uaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7nmbvlvZUgLSBGeGguR288L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT4NCiAgICAgICAgI2xvZ2luLWZvcm17DQogICAgICAgICAgICB3aWR0aDogMjgwcHg7DQogICAgICAgICAgICBtYXJnaW46IDgwcHggYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICAjbG9naW4tZm9ybSBoMXsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7DQogICAgICAgIH0NCiAgICA8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8Zm9ybSBpZD0ibG9naW4tZm9ybSIgY2xhc3M9ImZvcm0gZm9ybS12ZXJ0aWNhbCIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiIG5hbWU9ImxvZ2luLWZvcm0iPg0KICAgIDxoMT7nmbvlvZUgLSBGeGguR288L2gxPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9InVzZXIiPueUqOaIt+WQjTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IiBpZD0idXNlciIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ1c2VyIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1c2VyLWludmFsaWQiPueUqOaIt+WQjeS4uuWtl+avjSvmlbDlrZfvvIzplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJwYXNzd29yZCI+55So5oi35a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQiIGlkPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0icGFzc3dvcmQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InBhc3N3b3JkLWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+55m7IOW9lTwvYnV0dG9uPg0KICAgIDxzcGFuIGNsYXNzPSJ0aXAiPum7mOiupOiusOS9j+eZu+mZhjPlpKk8L3NwYW4+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2Nkbi5zdGF0aWNmaWxlLm9yZy9qcXVlcnkvMS4xMC4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Imh0dHA6Ly9jZG4uc3RhdGljZmlsZS5vcmcvanF1ZXJ5LmZvcm0vMy40Ni9qcXVlcnkuZm9ybS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL3ZhbGlkYXRlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoImxvZ2luLWZvcm0iLFsNCiAgICAgICAgICAgIHsibmFtZSI6InVzZXIiLCJydWxlcyI6ImFscGhhX251bWVyaWN8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoicGFzc3dvcmQiLCJydWxlcyI6InJlcXVpcmVkfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNsb2dpbi1mb3JtJykuYWpheFN1Ym1pdChmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZighanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi55m75b2V6ZSZ6K+v77yM6K+35qOA5p+l55So5oi35oiW5a+G56CBIik7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi8iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCNbgeGKQCAAAkAgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5ccGFnZXMuaHRtbDx1bCBpZD0iYXJ0aWNsZS1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj4NCiAgICA8bGk+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUiIGhyZWY9Ii9hZG1pbi9wYWdlL3dyaXRlLyI+5re75Yqg6aG16Z2iPC9hPg0KICAgIDwvbGk+e3tyYW5nZSAuUGFnZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj48aDQgY2xhc3M9ImlubGluZS1ibG9jayB0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0YXJnZXQ9Il9ibGFuayI+e3suVGl0bGV9fTwvYT48L2g0Pnt7aWYgbmUgLlN0YXR1cyAicHVibGlzaCJ9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGJsIHN0YXR1cyI+6I2J56i/PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9InNsdWciPnt7LlNsdWd9fTwvc3Bhbj57e2lmIGVxIC5Jc0NvbW1lbnQgZmFsc2V9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iaXMtY29tbWVudCI+PGkgY2xhc3M9ImZhLWNvbW1lbnRzIGZhIj48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50Ij57ey5Db21tZW50TnVtfX0gLyB7ey5IaXRzfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJlZGl0IGxibCBsYmwtZ3JlZW4iIGhyZWY9Ii9hZG1pbi9wYWdlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPue8lui+kTwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBsYmwgbGJsLXJlZCIgaHJlZj0iL2FkbWluL3BhZ2Uve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+5Yig6ZmkPC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9wYWdlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKCIuZGVsIikub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBpZihjb25maXJtKCLliKDpmaTpobXpnaLlsIbkvb/nm7jlhbPlhoXlrrnlpLHmlYjvvIHnoa7orqTvvJ8iKSl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAidXJsIjoiL2FkbWluL3BhZ2UvIitpZCsiLyIsDQogICAgICAgICAgICAgICAgInR5cGUiOiJkZWxldGUiLA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suWIoOmZpCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0NCiAgICB9KTsNCjwvc2NyaXB0PlBLBwioK0ZGnAYAAJwGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGFkbWluXHBhc3N3b3JkLmh0bWw8Zm9ybSBpZD0icGFzc3dvcmQiIGNsYXNzPSJmb3JtIGZvcm0tYWxpZ24gY2xlYXIiIGFjdGlvbj0iIyIgbmFtZT0icGFzc3dvcmQtZm9ybSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJvbGQiPuaXp+WvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ib2xkIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0ib2xkIiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+6aqM6K+B5pen5a+G56CBPC9zcGFuPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJvbGQtaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0ibmV3Ij7mlrDlr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9Im5ldyIgdHlwZT0icGFzc3dvcmQiIG5hbWU9Im5ldyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im5ldy1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJjb25maXJtIj7noa7orqTlr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgaWQ9ImNvbmZpcm0iIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJjb25maXJtIiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0iY29uZmlybS1pbnZhbGlkIj7noa7orqTlr4bnoIHkuI3ljLnphY08L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOS/ruaUuTwvYnV0dG9uPg0KICAgIDwvcD4NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigicGFzc3dvcmQtZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoib2xkIiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJuZXciLCJydWxlcyI6Im1pbl9sZW5ndGhbMl18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6ImNvbmZpcm0iLCJydWxlcyI6InJlcXVpcmVkfG1hdGNoZXNbbmV3XSJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI3Bhc3N3b3JkJykuYWpheFN1Ym1pdChmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZighanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhucSeBTwcAAE8HAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGFkbWluXHBsdWdpbi5odG1sPHVsIGlkPSJwbHVnaW4tbGlzdCIgY2xhc3M9ImNvbnRhaW5lcjk2MCBhZG1pbiI+e3tyYW5nZSAuUGx1Z2luc319DQogICAgPGxpIGNsYXNzPSJjbGVhciI+e3tpZiAuSXNBY3RpdmV9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGVmdCBsYmwgYWN0aXZlIGxibC1ncmVlbiI+Jm5ic3A7PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUgbGVmdCI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0idmVyc2lvbiBsZWZ0Ij57ey5WZXJzaW9ufX08L3NwYW4+e3tpZiAuSGFzU2V0dGluZ319DQogICAgICAgIDxhIGNsYXNzPSJzZXR0aW5nIGxlZnQiIGhyZWY9Ii9hZG1pbi9wbHVnaW5zL3t7LktleX19LyI+6YCJ6aG5PC9hPnt7ZW5kfX17e2lmIC5Jc0FjdGl2ZX19DQogICAgICAgIDxhIGNsYXNzPSJkZWFjdGl2YXRlIGxibCBsYmwtcmVkIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LktleX19Ij7lsIHljbA8L2E+e3tlbHNlfX0NCiAgICAgICAgPGEgY2xhc3M9ImFjdGl2YXRlIGxibCBsYmwtYmx1ZSByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5LZXl9fSI+5r+A5rS7PC9hPnt7ZW5kfX0NCiAgICAgICAgPHAgY2xhc3M9ImRlc2MgbGVmdCI+e3suRGVzY319PC9wPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgICQoIi5kZWFjdGl2YXRlIikub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsNCiAgICAgICAgICAgIHZhciBwID0gJHRoaXMuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLnBvc3QoIiIsIHsNCiAgICAgICAgICAgICAgICAiYWN0aW9uIjogImRlYWN0aXZhdGUiLA0KICAgICAgICAgICAgICAgICJwbHVnaW4iOiBwDQogICAgICAgICAgICB9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy5vZmYoImNsaWNrIikudGV4dCgi5LiL5qyh5r+A5rS7Iik7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWwgeWNsOWksei0pSIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0pOw0KICAgICAgICAkKCIuYWN0aXZhdGUiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgdmFyIHAgPSAkdGhpcy5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQucG9zdCgiIiwgew0KICAgICAgICAgICAgICAgICJhY3Rpb24iOiAiYWN0aXZhdGUiLA0KICAgICAgICAgICAgICAgICJwbHVnaW4iOiBwDQogICAgICAgICAgICB9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy5vZmYoImNsaWNrIikudGV4dCgi5LiL5qyh5bCB5Y2wIik7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIua/gOa0u+Wksei0pSIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIT3BZoWIGAABiBgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAdmlld1xhZG1pblxwbHVnaW5fc2V0dGluZy5odG1sPGZvcm0gaWQ9InBsdWdpbi1zZXR0aW5nLWZvcm0iIGNsYXNzPSJmb3JtIGNvbnRhaW5lcjk2MCBhZG1pbiIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIHt7SHRtbCAuRm9ybX19DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgICAgICQoJyNwbHVnaW4tc2V0dGluZy1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiOiLkv53lrZjlpLHotKUiKTsNCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCDQrc9U4AQAAOAEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAHZpZXdcYWRtaW5ccHJvZmlsZS5odG1sPGZvcm0gaWQ9InByb2ZpbGUiIGNsYXNzPSJhZG1pbiBmb3JtIGNsZWFyIGZvcm0tYWxpZ24iIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0IiBuYW1lPSJwcm9maWxlLWZvcm0iPg0KICAgIDxkaXYgY2xhc3M9ImF2YXRhciBncmlkLTEtNCBsZWZ0IHRleHQtY2VudGVyIj4NCiAgICAgICAgPGltZyBzcmM9Int7LlVzZXIuQXZhdGFyfX0iIGFsdD0ie3suVXNlci5OaWNrfX0iIGNsYXNzPSJmaWVsZCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGZpZWxkIGlubGluZS1ibG9jayI+5aS05YOP55SxIDxhIGhyZWY9Imh0dHA6Ly9ncmF2YXRhci5jb20vIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJuby1mb2xsb3ciPkdyYXZhdGFyPC9hPiDmj5Dkvps8L3NwYW4+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1yZWQgaW5saW5lLWJsb2NrIiBocmVmPSIvYWRtaW4vcGFzc3dvcmQvIj7kv67mlLnlr4bnoIE8L2E+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJpbmZvIHJpZ2h0IGdyaWQtMy00Ij4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InVzZXIiPueZu+W9leWQjTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InVzZXIiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHZhbHVlPSJ7ey5Vc2VyLk5hbWV9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7nmbvlvZXnmoTnlKjmiLflkI08L3NwYW4+PGJyLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJ1c2VyLWludmFsaWQiPueUqOaIt+WQjeS4uuWtl+avjSvmlbDlrZfvvIzplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJuaWNrIj7mmLXnp7A8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJuaWNrIiB0eXBlPSJ0ZXh0IiBuYW1lPSJuaWNrIiB2YWx1ZT0ie3suVXNlci5OaWNrfX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCI+5pi+56S65Zyo5YmN5Y+w55qE56ew5ZG8PC9zcGFuPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ibmljay1pbnZhbGlkIj7mmLXnp7Dplb/luqYyLTIw5Liq5a2X56ymPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJlbWFpbCI+6YKu566xPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iZW1haWwiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgdmFsdWU9Int7LlVzZXIuRW1haWx9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7ogZTns7vpgq7nrrHvvIzljYHliIbph43opoHvvIE8L3NwYW4+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJlbWFpbC1pbnZhbGlkIj7pgq7nrrHmoLzlvI/plJnor688L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InVybCI+572R5Z2APC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0idXJsIiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgdmFsdWU9Int7LlVzZXIuVXJsfX0iIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVybC1pbnZhbGlkIj7nvZHlnYDmoLzlvI/plJnor688L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IGJpbyIgbmFtZT0iYmlvIiBpZD0iYmlvIj57ey5Vc2VyLkJpb319PC90ZXh0YXJlYT4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOS/ruaUuTwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24oKXsNCiAgICAgICAgbmV3IEZvcm1WYWxpZGF0b3IoInByb2ZpbGUtZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoidXNlciIsInJ1bGVzIjoiYWxwaGFfbnVtZXJpY3xtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJuaWNrIiwicnVsZXMiOiJtaW5fbGVuZ3RoWzJdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJlbWFpbCIsInJ1bGVzIjoidmFsaWRfZW1haWwifSwNCiAgICAgICAgICAgIHsibmFtZSI6InVybCIsInJ1bGVzIjoidmFsaWRfdXJsIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjcHJvZmlsZScpLmFqYXhTdWJtaXQoZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgICAgaWYoIWpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD5QSwcIH4+hXwIMAAACDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxzZXR0aW5nLmh0bWw8dWwgaWQ9InNldHRpbmctbmF2IiBjbGFzcz0iY29udGFpbmVyIHRleHQtY2VudGVyIj4NCiAgICA8bGk+PGEgaHJlZj0iI2dlbmVyYWwiPuWfuuacrDwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSIjbmF2Ij7lr7zoiKo8L2E+PC9saT4NCiAgICA8bGk+PGEgaHJlZj0iI2N1c3RvbSI+6Ieq5a6a5LmJPC9hPjwvbGk+DQo8L3VsPg0KPGRpdiBpZD0ic2V0dGluZy1wYW5lbHMiIGNsYXNzPSJjb250YWluZXIiPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybSBmb3JtLWFsaWduIHNldHRpbmctcGFuZWwiIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXVybCI+56uZ54K55Zyw5Z2APC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS11cmwiIGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0ic2l0ZV91cmwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV91cmxgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXRpdGxlIj7nq5nngrnkuLvmoIfpopg8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXRpdGxlIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3RpdGxlIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXN1Yi10aXRsZSI+56uZ54K55Ymv5qCH6aKYPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1zdWItdGl0bGUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfc3ViX3RpdGxlIiByZXF1aXJlZD0icmVxdWlyZWQiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfc3ViX3RpdGxlYH19Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS1rZXl3b3JkcyI+TWV0YeWFs+mUruWtlzwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUta2V5d29yZHMiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfa2V5d29yZHMiIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLWRlc2MiPk1ldGHnq5nngrnku4vnu408L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLWRlc2MiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfZGVzY3JpcHRpb24iIHZhbHVlPSJ7e1NldHRpbmcgYHNpdGVfZGVzY3JpcHRpb25gfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJhcnRpY2xlLXNpemUiPuWNlemhteaWh+eroOWIl+ihqOaVsDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImFydGljbGUtc2l6ZSIgY2xhc3M9ImlwdCIgdHlwZT0ibnVtYmVyIiBuYW1lPSJhcnRpY2xlX3NpemUiIHZhbHVlPSJ7e1NldHRpbmcgYGFydGljbGVfc2l6ZWB9fSIgbWF4PSIxMCIgbWluPSIzIi8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l0ZS10aGVtZSI+5Li76aKY55uu5b2V5ZCNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS10aGVtZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV90aGVtZSIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV90aGVtZWB9fSIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBibG9jayI+5Li76aKY5Y2z5oyH5ZCR55qE5qih5p2/55uu5b2V77yM5YW35L2T5YaF5a656K+35Y+C6ICDIGRlZmF1bHQg55uu5b2V77yI5Y2zIGRlZmF1bHQg5Li76aKY77yJPC9zcGFuPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2l0ZV90aGVtZV9kZWYiIHZhbHVlPSJkZWZhdWx0Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0iZ28tbWFya2Rvd24iPkdv5riy5p+TTWFya2Rvd248L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJnby1tYXJrZG93biIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0iZW5hYmxlX2dvX21hcmtkb3duIiB2YWx1ZT0ie3tTZXR0aW5nIGBlbmFibGVfZ29fbWFya2Rvd25gfX0iLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPum7mOiupOWFs+mXre+8jOS9v+eUqOWJjeerr21hcmtlZC5qc+a4suafk++8jOWhq3RydWXml7blvIDlkK88L3NwYW4+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlbmFibGVfZ29fbWFya2Rvd25fZGVmIiB2YWx1ZT0iZmFsc2UiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cD4NCiAgICAgICAgICAgIDxsYWJlbD4mbmJzcDs8L2xhYmVsPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZg8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZm9ybT4NCiAgICA8Zm9ybSBpZD0ic2V0dGluZy1uYXYtZm9ybSIgY2xhc3M9InNldHRpbmctZm9ybSBmb3JtIGZvcm0tYWxpZ24gc2V0dGluZy1wYW5lbCIgYWN0aW9uPSIvYWRtaW4vc2V0dGluZy9uYXYvIiBtZXRob2Q9InBvc3QiPnt7cmFuZ2UgLk5hdmlnYXRvcnN9fQ0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPuaOkuW6jzwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCBvcmRlciIgdHlwZT0ibnVtYmVyIiBuYW1lPSJvcmRlciIgdmFsdWU9Int7Lk9yZGVyfX0iLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5paH5pysPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IHRleHQiIHR5cGU9InRleHQiIG5hbWU9InRleHQiIHZhbHVlPSJ7ey5UZXh0fX0iIHJlcXVpcmVkPSJyZXF1aXJlZCIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7moIfpopg8L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIHR5cGU9InRleHQiIG5hbWU9InRpdGxlIiB2YWx1ZT0ie3suVGl0bGV9fSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7pk77mjqU8L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgbGluayIgdHlwZT0idGV4dCIgbmFtZT0ibGluayIgdmFsdWU9Int7Lkxpbmt9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgIDwvcD57e2VuZH19DQogICAgICAgIDxwPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZg8L2J1dHRvbj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGFkZCIgaHJlZj0iIyIgcmVsPSIjbmF2LWl0ZW0iPua3u+WKoOS4gOmhuTwvYT4NCiAgICAgICAgPC9wPg0KICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJuYXYtaXRlbSI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7mjpLluo88L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgb3JkZXIiIHR5cGU9Im51bWJlciIgbmFtZT0ib3JkZXIiIHZhbHVlPSIxIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7mlofmnKw8L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgdGV4dCIgdHlwZT0idGV4dCIgbmFtZT0idGV4dCIgdmFsdWU9IiIgcmVxdWlyZWQ9InJlcXVpcmVkIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7moIfpopg8L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIHR5cGU9InRleHQiIG5hbWU9InRpdGxlIiB2YWx1ZT0iIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7pk77mjqU8L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgbGluayIgdHlwZT0idGV4dCIgbmFtZT0ibGluayIgdmFsdWU9IiIgcmVxdWlyZWQ9InJlcXVpcmVkIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L3NjcmlwdD4NCiAgICA8L2Zvcm0+DQogICAgPGZvcm0gaWQ9InNldHRpbmctY3VzdG9tLWZvcm0iIGNsYXNzPSJzZXR0aW5nLWZvcm0gZm9ybSBmb3JtLWFsaWduIHNldHRpbmctcGFuZWwiIGFjdGlvbj0iL2FkbWluL3NldHRpbmcvY3VzdG9tLyIgbWV0aG9kPSJwb3N0Ij57e3JhbmdlICRrLCR2IDo9IC5DdXN0b219fQ0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgdmFsdWU9Int7JGt9fSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IG5hbWU9InZhbHVlIiBjbGFzcz0iaXB0IHZhbHVlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ie3skdn19Ii8+DQogICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgIDwvcD57e2VuZH19DQogICAgICAgIDxwPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZg8L2J1dHRvbj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGFkZCIgaHJlZj0iIyIgcmVsPSIjY3VzdG9tLWl0ZW0iPua3u+WKoOS4gOmhuTwvYT4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgYmxvY2siPuS9v+eUqOWHveaVsOiHquWumuS5iemFjee9ru+8jOmcgOimgeWKoOWJjee8gCJjXyLvvIzlpoJHZXRTZXR0aW5nKCJjX2tleSIpPC9zcGFuPg0KICAgICAgICA8L3A+DQogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImN1c3RvbS1pdGVtIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCBrZXkiIHR5cGU9InRleHQiIG5hbWU9ImtleSIgcGxhY2Vob2xkZXI9IuWtl+auteWQjSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ2YWx1ZSIgY2xhc3M9ImlwdCB2YWx1ZSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IuWtl+auteWAvCIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9zY3JpcHQ+DQogICAgPC9mb3JtPg0KPC9kaXY+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeXRvb2xzLzEuMi43L2pxdWVyeS50b29scy5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI3NldHRpbmctbmF2JykudGFicygiLnNldHRpbmctcGFuZWwiKTsNCiAgICAgICAgJCgnLnNldHRpbmctZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBhbGVydChqc29uLnJlcyA/ICLlt7Lkv53lrZgiIDoganNvbi5tc2cpOw0KICAgICAgICB9KS5vbigiY2xpY2siLCIuYWRkIixmdW5jdGlvbihlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucGFyZW50KCkucHJlcGVuZCgkKCQodGhpcykuYXR0cigicmVsIikpLmh0bWwoKSk7DQogICAgICAgIH0pLm9uKCJjbGljayIsIi5kZWwiLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgaWYoY29uZmlybSgi6KaB5Yig6Zmk6L+Z6aG577yfIikpew0KICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgfSkNCjwvc2NyaXB0PlBLBwgIQ4sTEBkAABAZAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAB2aWV3XGFkbWluXHdyaXRlX2FydGljbGUuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLmlofnq6DmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnmlofnq6DlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2giPuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Ij7ojYnnqL88L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuWFgeiuuOivhOiuujwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY29tbWVudCIgaWQ9ImlzLWNvbW1lbnQiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCiAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgPC9wPg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIi9hZG1pbi9hcnRpY2xlcy8iOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwi+ynR8IQwAACEMAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGFkbWluXHdyaXRlX3BhZ2UuaHRtbDxzdHlsZT4NCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9jb2RlbWlycm9yLmNzcyI7DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyI7DQo8L3N0eWxlPg0KPGZvcm0gaWQ9ImFydGljbGUtZm9ybSIgY2xhc3M9ImZvcm0gY2xlYXIgY29udGFpbmVyIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IHRpdGxlIiBpZD0idGl0bGUiIHR5cGU9InRleHQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgbmFtZT0idGl0bGUiIHBsYWNlaG9sZGVyPSLpobXpnaLmoIfpopgiLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9ImNvbnRlbnQiIGlkPSJjb250ZW50IiBjbGFzcz0iaXB0Ij7mkrDlhpnpobXpnaLlhoXlrrnvvIzmlK/mjIFgbWFya2Rvd25g6K+t5rOV6auY5LquPC90ZXh0YXJlYT4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldyBtYXJrZG93biI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZm9ybS12ZXJ0aWNhbCBsZWZ0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBsZWZ0IiB0eXBlPSJidXR0b24iIGlkPSJhdHRhY2gtc2hvdyI+5re75Yqg6ZmE5Lu2PC9idXR0b24+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGZvcj0ic2x1ZyI+5Zu65a6a6ZO+5o6lPC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGlucHV0IGlkPSJzbHVnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzbHVnIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpobXpnaLnmoTllK/kuIDpk77mjqUiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCI+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQiPuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7nva7pobbpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImxpbmsiIGlkPSJpcy1saW5rIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9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ICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9Int7LklkfX0iPjxpIGNsYXNzPSJmYSBmYS1xdW90ZS1yaWdodCI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iYy1jb250ZW50Ij57e0h0bWwgLkNvbnRlbnR9fTwvc2VjdGlvbj57e2lmIC5QYXJlbnRNZH19DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1wLW1kIG1hcmtkb3duIj57e0h0bWwgLlBhcmVudE1kfX08L2Rpdj57e2VuZH19DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+e3tlbmR9fXt7ZW5kfX0NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LXNob3ciIGNsYXNzPSJ0ZXh0LWNlbnRlciI+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGVuYWJsZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+e3tlbHNlfX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1yZWQiPuacrOaWh+WFs+mXreS6huivhOiuujwvYnV0dG9uPnt7ZW5kfX0NCiAgICA8L2Rpdj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgPGZvcm0gaWQ9ImNvbW1lbnQtZm9ybSIgY2xhc3M9ImhpZGUgY2xlYXIgdGV4dC1jZW50ZXIgZm9ybSIgYWN0aW9uPSIvY29tbWVudC97ey5Db250ZW50LklkfX0vIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8gbGVmdCB0ZXh0LXJpZ2h0Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIGMtYXZhdGFyLWZpZWxkIj4NCiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBudWxsIiBzcmM9Ii9zdGF0aWMvaW1nL3NpdGUucG5nIiBhbHQ9IiIgaWQ9ImNvbW1lbnQtYXZhdGFyIi8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5vdC1tZSBibG9jayIgaHJlZj0iIyI+5LiN5piv5oiRPzwvYT4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mby1maWVsZHMgaGlkZSI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLnp7DlkbwiIGlkPSJjb21tZW50LWF1dGhvciIvPjwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i6YKu566xIiBpZD0iY29tbWVudC1lbWFpbCIvPiA8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJ1cmwiIG5hbWU9InVybCIgcGxhY2Vob2xkZXI9Iue9keWdgCIgaWQ9ImNvbW1lbnQtdXJsIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY29tbWVudC1wYXJlbnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IjAiIG5hbWU9InBpZCIvPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjLWNvbnRlbnQgdGV4dC1sZWZ0IHJpZ2h0Ij4NCiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IiBuYW1lPSJjb250ZW50IiBpZD0iY29tbWVudC1jb250ZW50IiByZXF1aXJlZD0icmVxdWlyZWQiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuWPkeihqOivhOiuujwvYnV0dG9uPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGJsIGxibC1ncmVlbiBjYW5jZWwtcmVwbHkiIHR5cGU9ImJ1dHRvbiI+5Y+W5raI5Zue5aSNPC9idXR0b24+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZm9ybT57e2VuZH19DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY29tbWVudC10cGwiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0iIiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIGxlZnQiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUgYy1hdXRob3IiIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImMtdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT5Ob3c8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IiBocmVmPSIjIiByZWw9IiI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jaGVjayI+PGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIj48L2k+5a6h5qC45Lit77yM5Yi35paw5ZCO6ZqQ6JePPC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPjwvc2VjdGlvbj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvc2NyaXB0Pg0KPC9kaXY+UEsHCG+ub1TiDAAA4gwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHZpZXdcZGVmYXVsdFxlcnJvci9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xkZWZhdWx0XGVycm9yXGVycm9yLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouato+WcqOaJk+eejOedoTwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWKquWKm+WUpOmGku+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCBOERlJ4AQAAeAEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHZpZXdcZGVmYXVsdFxlcnJvclxub3Rmb3VuZC5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPumUmeivr+aPkOekujwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPmJvZHl7bWFyZ2luOiA0MHB4IDEwMHB4fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoMj7mgqjorr/pl67nmoTpobXpnaLnprvlrrblh7rotbA8L2gyPjxici8+DQo8cD7nqIvluo/lkZjmraPlnKjlm5vlpITlr7vmib7vvIzor7fnqI3lgJnorr/pl64uLi48L3A+DQo8cD48YSBocmVmPSIvIj7ov5Tlm57pppbpobU8L2E+PC9wPg0KPC9ib2R5Pg0KPC9odG1sPlBLBwiQ+dTAdQEAAHUBAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAB2aWV3XGRlZmF1bHRcaG9tZS5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iLz4NCiAgICA8dGl0bGU+e3tpZiAuVGl0bGV9fXt7LlRpdGxlfX0gLSB7e2VuZH19e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC90aXRsZT4NCiAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRnhoR28gQmxvZyIgLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL3N0eWxlLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2ZvbnRhd2Vzb21lLzQuMC4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPg0KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiB0aXRsZT0ie3tTZXR0aW5nIGBzaXRlX3RpdGxlYH19IC0gUlNTIDIuMCIgaHJlZj0iL3Jzcy54bWwiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIi8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8bmF2IGlkPSJuYXYiIGNsYXNzPSJjbGVhciB0ZXh0LWNlbnRlciI+DQogICAgPHVsPnt7cmFuZ2UgTmF2aWdhdG9yfX0NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRleHR9fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KPC9uYXY+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8cD4NCiAgICAgICAgPGEgY2xhc3M9IndlaWJvIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX3dlaWJvYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIj48L2k+V2VpYm88L2E+DQogICAgICAgIDxhIGNsYXNzPSJnaXQiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZ2l0aHViYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWdpdGh1YiI+PC9pPkdpdEh1YjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImVtYWlsIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX2VtYWlsYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlIj48L2k+RW1haWw8L2E+DQogICAgICAgIDxhIGNsYXNzPSJyc3MiIGhyZWY9Ii9yc3MueG1sIiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXJzcyI+PC9pPlJTUzwvYT57e1NldHRpbmcgYGNfZm9vdGVyX2dhYCB8IEh0bWx9fQ0KICAgIDwvcD4NCiAgICA8c3Bhbj5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuIFByb3VkbHkgUG93ZXJlZCBieSBGeGguR28uPC9zcGFuPg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KPC9mb290ZXI+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9ob21lLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIC1vrljMJAAAzCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xkZWZhdWx0XGluZGV4Lmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj57e3JhbmdlIC5BcnRpY2xlc319DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIHt7LlN0YXR1c319IiBpZD0iYXJ0aWNsZS17ey5JZH19Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBsZWZ0IHRleHQtY2VudGVyIj57e2lmIGd0IC5Db21tZW50TnVtIDB9fQ0KICAgICAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PHN0cm9uZz57ey5Db21tZW50TnVtfX0g4oSDPC9zdHJvbmc+PC9hPjwvcD57e2VuZH19DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyI+PGkgY2xhc3M9ImZhIGZhLWV5ZSI+PC9pPjxzdHJvbmc+e3suSGl0c319IOKEiTwvc3Ryb25nPjwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyYXkgdGltZSI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT48c3Ryb25nPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Im1haW4iPg0KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuU3VtbWFyeX19PC9zZWN0aW9uPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0aG9yIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT57ey5Vc2VyLk5pY2t9fTwvc3Bhbj57e2VuZH19e3tpZiAuVGFnU3RyaW5nfX0NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXRhZ3MiPjwvaT57ey5UYWdTdHJpbmd9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImlubGluZS1ibG9jayByZWFkIHJpZ2h0IiBocmVmPSJ7ey5MaW5rfX0iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giPjwvaT7nu6fnu63pmIXor7s8L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvYXJ0aWNsZT57e2VuZH19DQogICAgPGRpdiBjbGFzcz0icGFnZXIgdGV4dC1jZW50ZXIiPnt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgICAgIDxhIGhyZWY9Ii9wL3t7Ln19LyIgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPnt7Ln19PC9hPnt7ZW5kfX0NCiAgICA8L2Rpdj4NCjwvZGl2PlBLBwipLoBo5wUAAOcFAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGRlZmF1bHRccGFnZS5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIiBpZD0iYXJ0aWNsZS1JZCI+e3t3aXRoIC5QYWdlfX0NCiAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGl0bGV9fTwvYT48L2gzPg0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgIDxwIGNsYXNzPSJpbmZvIGNsZWFyIj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFyZSB3ZWlibyBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS13ZWlibyBmYS1sZyI+PC9pPjwvc3Bhbj57e2lmIC5Vc2VyfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhdXRob3IgaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtdXNlciI+PC9pPnt7LlVzZXIuTmlja319PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLWNsb2NrLW8iPjwvaT57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQifX08L3NwYW4+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idmlld3MgaW5saW5lLWJsb2NrIHJpZ2h0Ij7pmIXor7smbmJzcDsmbmJzcDs8c3Bhbj57ey5IaXRzfX08L3NwYW4+Jm5ic3A7Jm5ic3A75qyhPC9zcGFuPg0KICAgICAgICA8L3A+e3tlbmR9fQ0KICAgIDwvYXJ0aWNsZT4NCjwvZGl2PlBLBwhcAM7dBAMAAAQDAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAB2aWV3XGxpbmcvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xhcnRpY2xlLmh0bWw8ZGl2IGlkPSJhcnRpY2xlLWNvbnRhaW5lciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8YXJ0aWNsZSBjbGFzcz0iY2xlYXIgYXJ0aWNsZS1zaW5nbGUgcmVsYXRpdmUge3suQXJ0aWNsZS5TdGF0dXN9fSIgaWQ9ImFydGljbGUte3suQXJ0aWNsZS5JZH19Ij57e3dpdGggLkFydGljbGV9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLWdyZWVuIHZpZXdzIGFic29sdXRlIj57ey5IaXRzfX08L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluIj4NCiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJ0aW1lLWluZm8iPnt7aWYgLlVzZXJ9fTxzdHJvbmc+e3suVXNlci5OaWNrfX08L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDt7e2VuZH195Y+R6KGo5LqOJm5ic3A7Jm5ic3A7Jm5ic3A7e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIllZWVkg5bm0IE1NIOaciCBERCDml6UifX08L3A+DQogICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY29udGVudCBtYXJrZG93biI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+DQogICAgICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyBpbmxpbmUtYmxvY2siPuagh+etvu+8mnt7LlRhZ1N0cmluZ319PC9zcGFuPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj57e2VuZH19DQogICAgPC9hcnRpY2xlPg0KICAgIHt7SHRtbCAuQ29tbWVudEh0bWx9fQ0KPC9kaXY+UEsHCBrCnX1tAwAAbQMAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcbGluZ1xjb21tZW50Lmh0bWw8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0icmVsYXRpdmUiPg0KICAgIDxoNCBpZD0iY29tbWVudC10aXRsZSI+5paH56ug6K+E6K66PC9oND4NCiAgICA8ZGl2IGNsYXNzPSJtZXRhIGFic29sdXRlIHRleHQtY2VudGVyIj4NCiAgICAgICAgPHAgY2xhc3M9ImxibCBsYmwtcmVkIGNvbW1lbnRzIj48YSBocmVmPSJ7ey5MaW5rfX0jY29tbWVudCI+e3suQ29udGVudC5Db21tZW50TnVtfX08L2E+PC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtbGlzdCI+e3tyYW5nZSAuQ29tbWVudHN9fXt7aWYgLklzVmFsaWR9fQ0KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50IGNsZWFyIiBpZD0iY29tbWVudC17ey5JZH19Ij4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIGxlZnQiIHNyYz0ie3suQXZhdGFyfX0iIGFsdD0ie3suQXV0aG9yfX0iLz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIGNsZWFyIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkgbGJsIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LklkfX0iPuWbnuWkjTwvYT4NCiAgICAgICAgICAgICAgICAgICAgPHA+PGEgY2xhc3M9ImMtYXV0aG9ye3tpZiAuSXNBZG1pbn19IGFkbWlue3tlbmR9fSIgaHJlZj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9ImMtdGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NIOaciCBERCDml6UgSEgg5pe2IG1tIOWIhiJ9fTwvc3Bhbj48L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+e3tIdG1sIC5Db250ZW50fX08L3NlY3Rpb24+e3tpZiAuUGFyZW50TWR9fQ0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pnt7ZW5kfX17e2VuZH19DQogICAgPC9kaXY+DQogICAgPGRpdiBpZD0iY29tbWVudC1zaG93IiBjbGFzcz0idGV4dC1jZW50ZXIiPnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiBlbmFibGUiPuWPkeihqOivhOiuujwvYnV0dG9uPnt7ZWxzZX19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcmVkIj7mnKzmloflhbPpl63kuobor4Torro8L2J1dHRvbj57e2VuZH19DQogICAgPC9kaXY+e3tpZiAuQ29udGVudC5Jc0NvbW1lbnR9fQ0KICAgIDxmb3JtIGlkPSJjb21tZW50LWZvcm0iIGNsYXNzPSJoaWRlIGNsZWFyIHRleHQtY2VudGVyIGZvcm0iIGFjdGlvbj0iL2NvbW1lbnQve3suQ29udGVudC5JZH19LyIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvIGxlZnQgdGV4dC1yaWdodCI+DQogICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSBjLWF2YXRhci1maWVsZCI+DQogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbnVsbCIgc3JjPSIvc3RhdGljL2ltZy9zaXRlLnBuZyIgYWx0PSIiIGlkPSJjb21tZW50LWF2YXRhciIvPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub3QtbWUgYmxvY2siIGhyZWY9IiMiPuS4jeaYr+aIkT88L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLWluZm8tZmllbGRzIGhpZGUiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i56ew5ZG8IiBpZD0iY29tbWVudC1hdXRob3IiLz48L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPjxpbnB1dCBjbGFzcz0iaXB0IiB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumCrueusSIgaWQ9ImNvbW1lbnQtZW1haWwiLz4gPC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJ1cmwiIHBsYWNlaG9sZGVyPSLnvZHlnYAiIGlkPSJjb21tZW50LXVybCIvPjwvcD4NCiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNvbW1lbnQtcGFyZW50IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBuYW1lPSJwaWQiLz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYy1jb250ZW50IHRleHQtbGVmdCByaWdodCI+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImlwdCIgbmFtZT0iY29udGVudCIgaWQ9ImNvbW1lbnQtY29udGVudCIgcmVxdWlyZWQ9InJlcXVpcmVkIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7lj5Hooajor4Torro8L2J1dHRvbj4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImxibCBsYmwtZ3JlZW4gY2FuY2VsLXJlcGx5IiB0eXBlPSJidXR0b24iPuWPlua2iOWbnuWkjTwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Zvcm0+e3tlbmR9fQ0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9ImNvbW1lbnQtdHBsIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9IiIvPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLW1ldGEgY2xlYXIiPg0KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYy1yZXBseSBsYmwgcmlnaHQiIGhyZWY9IiMiIHJlbD0iIj7lm57lpI08L2E+DQogICAgICAgICAgICAgICAgICAgIDxwPjxhIGNsYXNzPSJjLWF1dGhvciAiIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHA+DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj5Ob3c8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy1jaGVjayI+5a6h5qC45Lit77yM5Yi35paw5ZCO6ZqQ6JePPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L3A+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+PC9zZWN0aW9uPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9zY3JpcHQ+DQo8L2Rpdj5QSwcIaaBHopUNAACVDQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAdmlld1xsaW5nXGVycm9yL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABoAAAB2aWV3XGxpbmdcZXJyb3JcZXJyb3IuaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7plJnor6/mj5DnpLo8L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT5ib2R5e21hcmdpbjogNDBweCAxMDBweH08L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8aDI+5oKo6K6/6Zeu55qE6aG16Z2i5q2j5Zyo5omT556M552hPC9oMj48YnIvPg0KPHA+56iL5bqP5ZGY5q2j5Zyo5Yqq5Yqb5ZSk6YaS77yM6K+356iN5YCZ6K6/6ZeuLi4uPC9wPg0KPHA+PGEgaHJlZj0iLyI+6L+U5Zue6aaW6aG1PC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIE4RGUngBAAB4AQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAdmlld1xsaW5nXGVycm9yXG5vdGZvdW5kLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouemu+WutuWHuui1sDwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWbm+WkhOWvu+aJvu+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCJD51MB1AQAAdQEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcbGluZ1xob21lLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvbGluZy5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9ImFsdGVybmF0ZSIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgdGl0bGU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSAtIFJTUyAyLjAiIGhyZWY9Ii9yc3MueG1sIi8+DQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9qcXVlcnkvMS44LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8aGVhZGVyIGlkPSJoZWFkZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICAgICAgPGltZyBzcmM9Int7U2V0dGluZyBgY19ob21lX2F2YXRhcmB9fSIgYWx0PSJzaXRlIiBpZD0iaGVhZGVyLWltZyIgY2xhc3M9ImxlZnQiLz4NCiAgICAgICAgPGgxIGlkPSJoZWFkZXItaCIgY2xhc3M9ImxlZnQiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiIGNsYXNzPSJsZWZ0Ij57e1NldHRpbmcgInNpdGVfc3ViX3RpdGxlIn19PC9oND4NCiAgICAgICAgPG5hdiBpZD0ibmF2IiBjbGFzcz0icmlnaHQiPg0KICAgICAgICAgICAgPHVsPnt7cmFuZ2UgTmF2aWdhdG9yfX0NCiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlubGluZS1ibG9jayI+PGEgaHJlZj0ie3suTGlua319IiB0aXRsZT0ie3suVGl0bGV9fSI+e3suVGV4dH19PC9hPjwvbGk+e3tlbmR9fQ0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9uYXY+DQogICAgPC9kaXY+DQo8L2hlYWRlcj4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgIHtAQ29udGVudH0NCjwvZGl2Pg0KPGZvb3RlciBpZD0iZm9vdGVyIiBjbGFzcz0idGV4dC1jZW50ZXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lcjk2MCBjbGVhciI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0Ij5HbyDCqSAyMDE0IEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0icmlnaHQiPlByb3VkbHkgUG93ZXJlZCBieSBGeGguR28uPC9zcGFuPg0KICAgIDwvZGl2Pg0KICAgIDxhIGlkPSJnby10b3AiIGhyZWY9IiMiIGNsYXNzPSJsYmwgaGlkZSBsYmwtYmx1ZSIgdGl0bGU9IuWbnuWIsOmhtumDqCI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIGZhLWxnIj48L2k+PC9hPg0KICAgIHt7U2V0dGluZyBgY19mb290ZXJfZ2FgIHwgSHRtbH19DQo8L2Zvb3Rlcj4NCjxzY3Jp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" \ No newline at end of file +const zipBytes="UEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAc3RhdGljL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcY3NzL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABQAAABzdGF0aWNcY3NzXGFkbWluLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQojaGVhZGVye2hlaWdodDozOXB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5O2xpbmUtaGVpZ2h0OjM5cHg7Ym94LXNoYWRvdzowIDAgMnB4ICNjY2M7LW1vei1ib3gtc2hhZG93OjAgMCAycHggI2NjYzstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjY2NjfSNoZWFkZXIgLm5hdj5he2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1sZWZ0Oi0xcHh9I2hlYWRlciAubmF2PmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDc5YmM7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9CiNoZWFkZXIgLmxvZ297bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTRweCAwIDA7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHh9CiNoZWFkZXIgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxOHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztjb2xvcjojNjY2O21hcmdpbi1yaWdodDotMXB4fSNoZWFkZXIgLm5hdi1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZX0KI2hlYWRlciAub3V0e2NvbG9yOiNjNzM4M2F9I2hlYWRlciAub3V0OmhvdmVye2JvcmRlci1jb2xvcjojZTY0MzQ2O2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQojZm9vdGVye3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmNmY2ZjY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDttYXJnaW4tdG9wOjMwcHg7Y29sb3I6Izk5OTtmb250LXNpemU6MTJweH0jZm9vdGVyIHB7bWFyZ2luLWJvdHRvbTowfQojZm9vdGVyIGF7Y29sb3I6Izk5OTtwYWRkaW5nOjZweCAxMnB4fSNmb290ZXIgYTpob3Zlcntib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2JiYn0KLmFkbWlue21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfQojcHJvZmlsZXt3aWR0aDo4MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcHJvZmlsZSAuYXZhdGFyIGltZ3t3aWR0aDoxODBweDtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MTgwcHh9CiNwcm9maWxlIC5pcHR7d2lkdGg6MjgwcHh9CiNwcm9maWxlIC5pbnZhbGlke21hcmdpbi1sZWZ0Ojc1cHh9CiNwcm9maWxlIC5iaW97bWFyZ2luLWxlZnQ6NzVweDtoZWlnaHQ6MTYwcHh9CiNwYXNzd29yZHt3aWR0aDo0MDBweDttYXJnaW46MjRweCBhdXRvIDQ4cHggYXV0b30jcGFzc3dvcmQgLmludmFsaWR7bWFyZ2luLWxlZnQ6NzVweH0KI2FydGljbGUtbGlzdHttYXJnaW4tYm90dG9tOjI0cHh9I2FydGljbGUtbGlzdCBsaXttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I2FydGljbGUtbGlzdCBsaT4qe21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1saXN0IGxpIC50aW1lLCNhcnRpY2xlLWxpc3QgbGkgLmNvbW1lbnR7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZjtjb2xvcjojOTk5fQojYXJ0aWNsZS1saXN0IGxpIC5jb21tZW50e2NvbG9yOiM2NDk0NjJ9I2FydGljbGUtbGlzdCBsaSAuY29tbWVudCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2FydGljbGUtbGlzdCBsaSAuaXMtY29tbWVudHtjb2xvcjojZmY0NDQ3fSNhcnRpY2xlLWxpc3QgbGkgLmlzLWNvbW1lbnQgLmZhe21hcmdpbi1yaWdodDo2cHh9CiNhcnRpY2xlLWxpc3QgbGkgLmRlbCwjYXJ0aWNsZS1saXN0IGxpIC5lZGl0e29wYWNpdHk6MH0KI2FydGljbGUtbGlzdCBsaTpob3ZlciAuZGVsLCNhcnRpY2xlLWxpc3QgbGk6aG92ZXIgLmVkaXR7b3BhY2l0eToxfQojYXJ0aWNsZS1saXN0IGxpOmZpcnN0LWNoaWxkIGg0e3BhZGRpbmctdG9wOjB9CiNhcnRpY2xlLWZvcm17bWFyZ2luOjI0cHggYXV0byA0OHB4IGF1dG99I2FydGljbGUtZm9ybSBpbnB1dC50aXRsZXt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOm5vbmU7bWFyZ2luLWJvdHRvbTotMXB4O2ZvbnQtc2l6ZToxOHB4fQojYXJ0aWNsZS1mb3JtIHNlbGVjdHtwYWRkaW5nOjRweCA2cHh9CiNhcnRpY2xlLWZvcm0gLnByZXZpZXd7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDEycHg7aGVpZ2h0OjcwMHB4O21hcmdpbi1sZWZ0Oi0xcHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3cteDpzY3JvbGx9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWx7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjE4cHh9I2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCBpbnB1dC5pcHR7d2lkdGg6MzAwcHh9CiNhcnRpY2xlLWZvcm0gLmZvcm0tdmVydGljYWwgLml0ZW17ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MThweH0KI2FydGljbGUtZm9ybSAuZm9ybS12ZXJ0aWNhbCAuYnRue21hcmdpbi1yaWdodDoxNnB4fQojYXJ0aWNsZS1mb3JtIC5maWxlLXByb2dyZXNze3BhZGRpbmc6MCAxMnB4O2JhY2tncm91bmQ6cmdiYSgwLDE1MCwyMjMsMC4yKTtjb2xvcjojNjY2O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWY7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2FydGljbGUtZm9ybSAuZmlsZS1wcm9ncmVzcy5lcnJ7YmFja2dyb3VuZDpyZ2JhKDI1NSw2OCw3MSwwLjIpO2NvbG9yOiNhYTM5M2N9CiNzZXR0aW5nLW5hdnt3aWR0aDoxMDAwcHg7bWFyZ2luLXRvcDoyNHB4O21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfSNzZXR0aW5nLW5hdiBsaXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCAxMnB4fSNzZXR0aW5nLW5hdiBsaSBhe3BhZGRpbmc6M3B4IDEwcHh9CiNzZXR0aW5nLW5hdiBsaSBhOmhvdmVyLCNzZXR0aW5nLW5hdiBsaSBhLmN1cnJlbnR7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzAwNWI5Yn0KLnNldHRpbmctcGFuZWx7ZGlzcGxheTpub25lfQouc2V0dGluZy1mb3Jte3dpZHRoOjgyMHB4O21hcmdpbjoyNHB4IGF1dG8gNDhweCBhdXRvfS5zZXR0aW5nLWZvcm0gLmlwdHt3aWR0aDo0ODBweH0KLnNldHRpbmctZm9ybSAuaW52YWxpZHttYXJnaW4tbGVmdDo3NXB4fQouc2V0dGluZy1mb3JtIGxhYmVse21pbi13aWR0aDoxMGVtfQouc2V0dGluZy1mb3JtIC50aXAuYmxvY2t7bWFyZ2luLWxlZnQ6MTJlbX0KI3NldHRpbmctY3VzdG9tLWZvcm17d2lkdGg6MTAwMHB4fSNzZXR0aW5nLWN1c3RvbS1mb3JtIGlucHV0LmtleXt3aWR0aDoyNTBweH0KI3NldHRpbmctY3VzdG9tLWZvcm0gaW5wdXQudmFsdWV7d2lkdGg6NjUwcHh9CiNzZXR0aW5nLWN1c3RvbS1mb3JtIC5pdGVte21hcmdpbi1ib3R0b206MTJweDtwYWRkaW5nLWJvdHRvbToxMnB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojc2V0dGluZy1jdXN0b20tZm9ybSAuZGVse21hcmdpbi1sZWZ0OjEycHg7Y29sb3I6I2U2NDM0Nn0KI3NldHRpbmctY3VzdG9tLWZvcm0gLnRpcHttYXJnaW4tbGVmdDowfQojc2V0dGluZy1uYXYtZm9ybXt3aWR0aDoxMDAwcHh9I3NldHRpbmctbmF2LWZvcm0gLml0ZW17bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNzZXR0aW5nLW5hdi1mb3JtIHNwYW4ubGFiZWx7bWFyZ2luLXJpZ2h0OjZweH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQub3JkZXJ7d2lkdGg6Mi41ZW07bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0LnRleHR7d2lkdGg6ODBweDttaW4td2lkdGg6MH0KI3NldHRpbmctbmF2LWZvcm0gaW5wdXQudGl0bGV7d2lkdGg6MTUwcHg7bWluLXdpZHRoOjB9CiNzZXR0aW5nLW5hdi1mb3JtIGlucHV0Lmxpbmt7d2lkdGg6MzQwcHh9CiNzZXR0aW5nLW5hdi1mb3JtIC5kZWx7bWFyZ2luLWxlZnQ6MTJweDtjb2xvcjojZTY0MzQ2fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7bWFyZ2luLXJpZ2h0OjE4cHh9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNjb21tZW50LWxpc3QgLmMtbWV0YT4qe21hcmdpbi1yaWdodDoxNnB4fQojY29tbWVudC1saXN0IC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfSNjb21tZW50LWxpc3QgLmMtdGltZSAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jbnQsI2NvbW1lbnQtbGlzdCAuYy1lbWFpbHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWxpc3QgLmMtc2VjdGlvbnttYXgtd2lkdGg6ODMwcHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2ssI2NvbW1lbnQtbGlzdCAuYy1kZWx7Y29sb3I6I2U2NDM0Nn0jY29tbWVudC1saXN0IC5jLWNoZWNrIC5mYSwjY29tbWVudC1saXN0IC5jLWRlbCAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KI2NvbW1lbnQtbGlzdCAuYy1jaGVjazpob3ZlciwjY29tbWVudC1saXN0IC5jLWRlbDpob3Zlcntjb2xvcjojYWEzOTNjfQojY29tbWVudC1mb3Jte3BhZGRpbmctdG9wOjEycHg7ZGlzcGxheTpub25lO21hcmdpbi1sZWZ0OjcycHh9I2NvbW1lbnQtZm9ybSAuYnRue21hcmdpbi1yaWdodDoyNHB4fQojY29tbWVudC1jb250ZW50e3dpZHRoOjUwMHB4O2hlaWdodDo4MHB4O21hcmdpbi1yaWdodDoyNHB4fQojZmlsZXMtbGlzdCBsaS5maWxle21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0jZmlsZXMtbGlzdCBsaS5maWxlPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNmaWxlcy1saXN0IGxpLmZpbGU6aG92ZXIgLmRlbHtvcGFjaXR5OjEgIWltcG9ydGFudH0KI2ZpbGVzLWxpc3QgLnVwbG9hZC10aW1le2NvbG9yOiM5OTk7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2ZpbGVzLWxpc3QgLmRlbHtjb2xvcjojZTY0MzQ2fQojZmlsZXMtbGlzdCAuZmlsZS1wcm9ncmVzc3twYWRkaW5nOjAgMTJweDtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMik7Y29sb3I6IzY2Njtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9CiNmaWxlcy1saXN0IC5maWxlLXByb2dyZXNzLmVycntiYWNrZ3JvdW5kOnJnYmEoMjU1LDY4LDcxLDAuMik7Y29sb3I6I2FhMzkzY30KI2ZpbGVzLWxpc3QgLnNpemV7d2lkdGg6NGVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfQojcGx1Z2luLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxNnB4O3BhZGRpbmctYm90dG9tOjE2cHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9I3BsdWdpbi1saXN0IGxpIC5kZXNje21hcmdpbi1ib3R0b206MDt3aWR0aDo5OSU7Y29sb3I6Izk5OX0KI3BsdWdpbi1saXN0IGxpIGEubGJse3BhZGRpbmc6MCA4cHg7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC52ZXJzaW9ue2NvbG9yOiM1MDc2NTA7bWFyZ2luLWxlZnQ6MTZweH0KI3BsdWdpbi1saXN0IGxpIC5uYW1le2ZvbnQtc2l6ZToxNnB4fQojcGx1Z2luLWxpc3QgbGkgLmFjdGl2ZXt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O21hcmdpbi1yaWdodDoxNnB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjEwcHh9CiNwbHVnaW4tbGlzdCBsaSAuc2V0dGluZ3ttYXJnaW4tbGVmdDoxNnB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBwLml0ZW17Y2xlYXI6Ym90aH0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gbGFiZWx7ZmxvYXQ6bGVmdDttaW4td2lkdGg6NmVtO3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luLXJpZ2h0OjJlbX0KI3BsdWdpbi1zZXR0aW5nLWZvcm0gLnRpdGxle3BhZGRpbmctdG9wOjA7bWFyZ2luLWJvdHRvbToxOHB4fQojcGx1Z2luLXNldHRpbmctZm9ybSBpbnB1dC5pcHR7d2lkdGg6NjAwcHh9CiNkYXNoYm9hcmQgLmdyaWQtMS01e21hcmdpbi1yaWdodDoyJX0KI2Rhc2hib2FyZCAucXVpY2stbGluayBsaXtsaXN0LXN0eWxlOmluc2lkZSBkaXNjO21hcmdpbi1ib3R0b206NnB4O3BhZGRpbmctYm90dG9tOjZweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2Rhc2hib2FyZCAuc3RhdHMgLmxibHtwYWRkaW5nOjFweCA1cHg7bWFyZ2luOjAgM3B4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNne3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZyAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojZGFzaGJvYXJkIC5hY3Rpdml0eSAubXNnIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2cgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI2Rhc2hib2FyZCAuYWN0aXZpdHkgLm1zZzpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMjIzLDAuMDYpfSNkYXNoYm9hcmQgLmFjdGl2aXR5IC5tc2c6aG92ZXIgLnJlYWR7b3BhY2l0eToxfQpQSwcIHMaB8VMyAABTMgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAc3RhdGljXGNzc1xjbWQuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Ci5jbWR7bWFyZ2luOjI0cHggNDhweH0KLmNtZC1oZWFkZXJ7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtYnRue21hcmdpbjoxMHB4IDAgMCAzMHB4fQouY21kLWxpc3QgbGl7bWFyZ2luLWJvdHRvbToxMnB4O3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9CiNiYWNrdXAtbGlzdCBsaXtsaXN0LXN0eWxlOmRpc2MgaW5zaWRlO2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2JhY2t1cC1saXN0IGxpPnNwYW4sI2JhY2t1cC1saXN0IGxpPmF7bWFyZ2luLXJpZ2h0OjE2cHh9CiNiYWNrdXAtbGlzdCBsaSAuZGVse2NvbG9yOiNlNjQzNDY7b3BhY2l0eTowfQojYmFja3VwLWxpc3QgbGkgLmxpbmt7bWFyZ2luLWxlZnQ6MTJweH0KI2JhY2t1cC1saXN0IGxpOmhvdmVyIC5kZWx7b3BhY2l0eToxfQojbWVzc2FnZS1saXN0IC5tZXNzYWdle3BhZGRpbmc6OHB4IDEycHg7bWFyZ2luLWJvdHRvbTo4cHg7cGFkZGluZy1ib3R0b206OHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHh9I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAudGltZXtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5kYXRhe2NvbG9yOiM2NjY7bWFyZ2luLWxlZnQ6MS4yZW19I21lc3NhZ2UtbGlzdCAubWVzc2FnZSAuZGF0YSBwe21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDoyNHB4fQojbWVzc2FnZS1saXN0IC5tZXNzYWdlIC5yZWFke3RvcDowO3JpZ2h0OjEycHg7b3BhY2l0eTowfSNtZXNzYWdlLWxpc3QgLm1lc3NhZ2UgLnJlYWQ6aG92ZXJ7Y29sb3I6I2U2NDM0Nn0KI21lc3NhZ2UtbGlzdCAubWVzc2FnZTpob3ZlciAucmVhZHtvcGFjaXR5OjF9CiNsb2ctbGlzdCAubG9ne2ZvbnQtc2l6ZToxMnB4fQojbG9nLWxpc3QgLm5hbWV7bWFyZ2luLXJpZ2h0OjEuNWVtO2ZvbnQtd2VpZ2h0OmJvbGR9CiNsb2ctbGlzdCAudGltZSwjbG9nLWxpc3QgLm5hbWV7Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2xvZy1saXN0IC50ZXh0e2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbDtjb2xvcjojNjY2O3BhZGRpbmc6OHB4IDEycHg7YmFja2dyb3VuZDojZjNmM2YzfQojbG9nLWxpc3QgLnJlbW92ZXt0b3A6MDtyaWdodDoxMnB4O2NvbG9yOiNlNjQzNDZ9ClBLBwjSN8QbLxoAAC8aAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAABzdGF0aWNcY3NzXGNvZGVtaXJyb3IuY3NzLyogQkFTSUNTICovCgouQ29kZU1pcnJvciB7CiAgICAvKiBTZXQgaGVpZ2h0LCB3aWR0aCwgYm9yZGVycywgYW5kIGdsb2JhbCBmb250IHByb3BlcnRpZXMgaGVyZSAqLwogICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiTWljcm9zb2Z0IFlhSGVpIiwgIkNvdXJpZXIgTmV3IiwgQXJpYWw7CiAgICBoZWlnaHQ6IDY2MHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgYm9yZGVyOjFweCBzb2xpZCAjOTk5Owp9CgouQ29kZU1pcnJvci1zY3JvbGwgewogICAgLyogU2V0IHNjcm9sbGluZyBiZWhhdmlvdXIgaGVyZSAqLwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi8qIFBBRERJTkcgKi8KCi5Db2RlTWlycm9yLWxpbmVzIHsKICAgIHBhZGRpbmc6IDRweCAwOyAvKiBWZXJ0aWNhbCBwYWRkaW5nIGFyb3VuZCBjb250ZW50ICovCn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICBwYWRkaW5nOiAwIDRweDsgLyogSG9yaXpvbnRhbCBwYWRkaW5nIG9mIGNvbnRlbnQgKi8KfQoKLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi8KfQoKLyogR1VUVEVSICovCgouQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLkNvZGVNaXJyb3ItbGluZW51bWJlcnMgewp9CgouQ29kZU1pcnJvci1saW5lbnVtYmVyIHsKICAgIHBhZGRpbmc6IDAgM3B4IDAgNXB4OwogICAgbWluLXdpZHRoOiAyMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBjb2xvcjogIzU1NTsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4Owp9CgovKiBDVVJTT1IgKi8KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogICAgei1pbmRleDogMzsKfQoKLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqLwouQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3IgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7Cn0KCi5Db2RlTWlycm9yLmNtLWtleW1hcC1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICB3aWR0aDogYXV0bzsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6ICM3ZTc7CiAgICB6LWluZGV4OiAxOwp9CgovKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHsKfQoKLmNtLXRhYiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi8qIERFRkFVTFQgVEhFTUUgKi8KCi5jbS1zLWRlZmF1bHQgLmNtLWtleXdvcmQgewogICAgY29sb3I6ICM3MDg7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWF0b20gewogICAgY29sb3I6ICMyMTk7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7CiAgICBjb2xvcjogIzE2NDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tZGVmIHsKICAgIGNvbG9yOiAjMDBmOwp9CgouY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZSB7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICMwNWE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLTMgewogICAgY29sb3I6ICMwODU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXByb3BlcnR5IHsKICAgIGNvbG9yOiBibGFjazsKfQoKLmNtLXMtZGVmYXVsdCAuY20tb3BlcmF0b3IgewogICAgY29sb3I6IGJsYWNrOwp9CgouY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHsKICAgIGNvbG9yOiAjYTUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1zdHJpbmcgewogICAgY29sb3I6ICNhMTE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0yIHsKICAgIGNvbG9yOiAjZjUwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1tZXRhIHsKICAgIGNvbG9yOiAjNTU1Owp9CgouY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIgewogICAgY29sb3I6ICM1NTU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW4gewogICAgY29sb3I6ICMzMGE7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICM5OTc7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7CiAgICBjb2xvcjogIzE3MDsKfQoKLmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjMDBjOwp9CgouY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIgewogICAgY29sb3I6IGJsdWU7Cn0KCi5jbS1zLWRlZmF1bHQgLmNtLXF1b3RlIHsKICAgIGNvbG9yOiAjMDkwOwp9CgouY20tcy1kZWZhdWx0IC5jbS1ociB7CiAgICBjb2xvcjogIzk5OTsKfQoKLmNtLXMtZGVmYXVsdCAuY20tbGluayB7CiAgICBjb2xvcjogIzAwYzsKfQoKLmNtLW5lZ2F0aXZlIHsKICAgIGNvbG9yOiAjZDQ0Owp9CgouY20tcG9zaXRpdmUgewogICAgY29sb3I6ICMyOTI7Cn0KCi5jbS1oZWFkZXIsIC5jbS1zdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5jbS1lbSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5jbS1saW5rIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7CiAgICBjb2xvcjogI2YwMDsKfQoKLmNtLWludmFsaWRjaGFyIHsKICAgIGNvbG9yOiAjZjAwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjMGYwOwp9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHsKICAgIGNvbG9yOiAjZjIyOwp9CgouQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogI2U4ZjJmZjsKfQoKLyogU1RPUCAqLwoKLyogVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGNvbnRhaW5zIHN0eWxlcyByZWxhdGVkIHRvIHRoZSBtZWNoYW5pY3Mgb2YKICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqLwoKLkNvZGVNaXJyb3IgewogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICBjb2xvcjogYmxhY2s7Cn0KCi5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29kZU1pcnJvciAqLwogICAgbWFyZ2luLWJvdHRvbTogLTMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IC0zMHB4OwogICAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3V0bGluZTogbm9uZTsgLyogUHJldmVudCBkcmFnZ2luZyBmcm9tIGhpZ2hsaWdodGluZyB0aGUgZWxlbWVudCAqLwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CgouQ29kZU1pcnJvci1zaXplciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi8qIFRoZSBmYWtlLCB2aXNpYmxlIHNjcm9sbGJhcnMuIFVzZWQgdG8gZm9yY2UgcmVkcmF3IGR1cmluZyBzY3JvbGxpbmcKICAgYmVmb3JlIGFjdHVhbGwgc2Nyb2xsaW5nIGhhcHBlbnMsIHRodXMgcHJldmVudGluZyBzaGFraW5nIGFuZAogICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi8KLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciwgLkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciwgLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiA2OwogICAgZGlzcGxheTogbm9uZTsKfQoKLkNvZGVNaXJyb3ItdnNjcm9sbGJhciB7CiAgICByaWdodDogMDsKICAgIHRvcDogMDsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKfQoKLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgb3ZlcmZsb3cteDogc2Nyb2xsOwp9CgouQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIHsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwp9CgouQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIHsKICAgIGxlZnQ6IDA7CiAgICBib3R0b206IDA7Cn0KCi5Db2RlTWlycm9yLWd1dHRlcnMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHRvcDogMDsKICAgIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICAgei1pbmRleDogMzsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICBwYWRkaW5nLWJvdHRvbTogMzBweDsKICAgIG1hcmdpbi1ib3R0b206IC0zMnB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgLyogSGFjayB0byBtYWtlIElFNyBiZWhhdmUgKi8KICAgICp6b29tOiAxOwogICAgKmRpc3BsYXk6IGlubGluZTsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB6LWluZGV4OiA0Owp9CgouQ29kZU1pcnJvci1saW5lcyB7CiAgICBjdXJzb3I6IHRleHQ7Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgICAvKiBSZXNldCBzb21lIHN0eWxlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBwYWdlIG1pZ2h0IGhhdmUgc2V0ICovCiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyLXdpZHRoOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgIG1hcmdpbjogMDsKICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICB6LWluZGV4OiAyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7Cn0KCi5Db2RlTWlycm9yLXdyYXAgcHJlIHsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IG5vcm1hbDsKfQoKLkNvZGVNaXJyb3ItY29kZSBwcmUgewogICAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7CiAgICB3aWR0aDogLW1vei1maXQtY29udGVudDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1jb2RlIHByZSB7CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogYXV0bzsKfQoKLkNvZGVNaXJyb3ItbGluZWJhY2tncm91bmQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgei1pbmRleDogMDsKfQoKLkNvZGVNaXJyb3ItbGluZXdpZGdldCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgb3ZlcmZsb3c6IGF1dG87Cn0KCi5Db2RlTWlycm9yLXdpZGdldCB7Cn0KCi5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3ItbWVhc3VyZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7Cn0KCi5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB3aWR0aDogMDsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKLkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogI2Q5ZDlkOTsKfQoKLkNvZGVNaXJyb3ItZm9jdXNlZCAuQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiAjZDdkNGYwOwp9CgouY20tc2VhcmNoaW5nIHsKICAgIGJhY2tncm91bmQ6ICNmZmE7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAuNCk7Cn0KCi8qIElFNyBoYWNrIHRvIHByZXZlbnQgaXQgZnJvbSByZXR1cm5pbmcgZnVubnkgb2Zmc2V0VG9wcyBvbiB0aGUgc3BhbnMgKi8KLkNvZGVNaXJyb3Igc3BhbiB7CiAgICAqdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwp9CgpAbWVkaWEgcHJpbnQgewogICAgLyogSGlkZSB0aGUgY3Vyc29yIHdoZW4gcHJpbnRpbmcgKi8KICAgIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQp9CgouY20tcy1iYXNlMTYtZGFyay5Db2RlTWlycm9yIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogIzIwMjAyMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgIGJhY2tncm91bmQ6ICMxNTE1MTU7CiAgICBib3JkZXItcmlnaHQ6IDBweDsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItbGluZW51bWJlciB7CiAgICBjb2xvcjogIzU1NTsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2IwYjBiMCAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICM4ZjU1MzY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXRvbSB7CiAgICBjb2xvcjogI2FhNzU5ZjsKfQoKLmNtLXMtYmFzZTE2LWRhcmsgc3Bhbi5jbS1udW1iZXIgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWtleXdvcmQgewogICAgY29sb3I6ICNhYzQxNDI7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tc3RyaW5nIHsKICAgIGNvbG9yOiAjZjRiZjc1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlIHsKICAgIGNvbG9yOiAjOTBhOTU5Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTIgewogICAgY29sb3I6ICM2YTlmYjU7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZGVmIHsKICAgIGNvbG9yOiAjZDI4NDQ1Owp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWJyYWNrZXQgewogICAgY29sb3I6ICNlMGUwZTA7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tdGFnIHsKICAgIGNvbG9yOiAjYWM0MTQyOwp9CgouY20tcy1iYXNlMTYtZGFyayBzcGFuLmNtLWxpbmsgewogICAgY29sb3I6ICNhYTc1OWY7Cn0KCi5jbS1zLWJhc2UxNi1kYXJrIHNwYW4uY20tZXJyb3IgewogICAgYmFja2dyb3VuZDogI2FjNDE0MjsKICAgIGNvbG9yOiAjYjBiMGIwOwp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQgewogICAgYmFja2dyb3VuZDogIzJGMkYyRiAhaW1wb3J0YW50Owp9CgouY20tcy1iYXNlMTYtZGFyayAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQpQSwcIIwM1gk4gAABOIAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAc3RhdGljXGNzc1xjb21tb24uY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH1oZWFkZXIsZm9vdGVyLHNlY3Rpb24sYXJ0aWNsZSxhc2lkZSxuYXYsaGdyb3VwLGFkZHJlc3MsZmlndXJlLGZpZ2NhcHRpb24sbWVudSxkZXRhaWxze2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfWZpZWxkc2V0LGltZ3tib3JkZXI6MH1hZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfW9sLHVse2xpc3Qtc3R5bGU6bm9uZX1jYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9cTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfWFiYnIsYWNyb255bXtib3JkZXI6MDtmb250LXZhcmlhbnQ6bm9ybWFsfXN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH1zdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219aW5wdXQsdGV4dGFyZWEsc2VsZWN0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1sZWdlbmR7Y29sb3I6IzAwMH1odG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn1he3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMwMDc5YmN9YTpob3Zlcntjb2xvcjojMDA1YjlifXB7bWFyZ2luLWJvdHRvbToxOHB4fWgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfWgxe2ZvbnQtc2l6ZToyOHB4fWgye2ZvbnQtc2l6ZToyNHB4fWgze2ZvbnQtc2l6ZToyMXB4fWg0e2ZvbnQtc2l6ZToxOXB4fWg1e2ZvbnQtc2l6ZToxNnB4fWg2e2ZvbnQtc2l6ZToxNHB4fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5sZWZ0e2Zsb2F0OmxlZnR9LnJpZ2h0e2Zsb2F0OnJpZ2h0fS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0udmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmZhZGUtb3V0e29wYWNpdHk6MH0uaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uY29udGFpbmVye3dpZHRoOjEyMDBweDttYXJnaW46YXV0b30uY29udGFpbmVyOTYwe3dpZHRoOjk2MHB4O21hcmdpbjphdXRvfS5ncmlkLTEtMnt3aWR0aDo1MCV9LmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfS5ncmlkLTEtNHt3aWR0aDoyNSV9LmdyaWQtMS01e3dpZHRoOjIwJX0uZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9LmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfS5ncmlkLTMtNHt3aWR0aDo3NSV9LmdyaWQtMy01e3dpZHRoOjYwJX0uZ3JpZC00LTV7d2lkdGg6ODAlfS5ncmlkLTUtNnt3aWR0aDo4My4zMzMzJX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfS5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9LmZvcm0gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEycHh9LmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfS5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZm9ybSAuZmllbGR7bWFyZ2luLWJvdHRvbToyNHB4fS5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fS5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fS5mb3JtLXZlcnRpY2FsIGxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo4cHh9LmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0uZm9ybS1hbGlnbiBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttaW4td2lkdGg6NjBweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fS5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9YS5idG57bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojZmZmfS5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0uYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0uYnRuLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifS5idG4tZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyfS5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9YS5sYmx7bGluZS1oZWlnaHQ6MjZweH1hLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9LmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifWEubGJsLWJsdWU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA1YjliO2NvbG9yOiNmYmZiZmJ9LmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn1hLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLml0ZW17cGFkZGluZzoycHggOHB4O21hcmdpbjowIDZweDtjb2xvcjojMzMzO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjIwcHh9LnBhZ2VyIC5pdGVtIGF7Y29sb3I6IzMzM30ucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfS5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0ucGFnZXIgLmN1cnJlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjfS5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Lm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmctYm90dG9tOjEycHh9Lm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fS5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0ubWFya2Rvd24gaDR7Zm9udC1zaXplOjE4cHh9Lm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fS5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0ubWFya2Rvd24gcHttYXJnaW4tYm90dG9tOjEwcHh9Lm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Lm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Lm1hcmtkb3duIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkNvdXJpZXIgTmV3IixBcmlhbH0ubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Lm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Lm1hcmtkb3duIHByZSBjb2Rle2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHggIWltcG9ydGFudDtwYWRkaW5nOjhweCAxOHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAxOHB4IDB9Lm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fS5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30ubWFya2Rvd24gdGFibGV7bWFyZ2luOjEycHggMDt3aWR0aDo5OCV9Lm1hcmtkb3duIHRhYmxlIHRoLC5tYXJrZG93biB0YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo0cHggMTJweH0ubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fVBLBwh7vP2MJhQAACYUAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAABzdGF0aWNcY3NzXGhpZ2hsaWdodC5jc3MvKg0KDQpTdW5idXJzdC1saWtlIHN0eWxlIChjKSBWYXNpbHkgUG9sb3ZueW92IDx2YXN0QHdoaXRlYW50cy5uZXQ+DQoNCiovDQoNCnByZSBjb2RlIHsNCiAgICBkaXNwbGF5OiBibG9jazsgcGFkZGluZzogMC41ZW07DQogICAgYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmOGY4Zjg7DQp9DQoNCnByZSAuY29tbWVudCwNCnByZSAudGVtcGxhdGVfY29tbWVudCwNCnByZSAuamF2YWRvYyB7DQogICAgY29sb3I6ICNhZWFlYWU7DQogICAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpwcmUgLmtleXdvcmQsDQpwcmUgLnJ1YnkgLmZ1bmN0aW9uIC5rZXl3b3JkLA0KcHJlIC5yZXF1ZXN0LA0KcHJlIC5zdGF0dXMsDQpwcmUgLm5naW54IC50aXRsZSB7DQogICAgY29sb3I6ICNFMjg5NjQ7DQp9DQoNCnByZSAuZnVuY3Rpb24gLmtleXdvcmQsDQpwcmUgLnN1YiAua2V5d29yZCwNCnByZSAubWV0aG9kLA0KcHJlIC5saXN0IC50aXRsZSB7DQogICAgY29sb3I6ICM5OUNGNTA7DQp9DQoNCnByZSAuc3RyaW5nLA0KcHJlIC50YWcgLnZhbHVlLA0KcHJlIC5jZGF0YSwNCnByZSAuZmlsdGVyIC5hcmd1bWVudCwNCnByZSAuYXR0cl9zZWxlY3RvciwNCnByZSAuYXBhY2hlIC5jYnJhY2tldCwNCnByZSAuZGF0ZSwNCnByZSAudGV4IC5jb21tYW5kLA0KcHJlIC5jb2ZmZWVzY3JpcHQgLmF0dHJpYnV0ZSB7DQogICAgY29sb3I6ICM2NUIwNDI7DQp9DQoNCnByZSAuc3Vic3Qgew0KICAgIGNvbG9yOiAjREFFRkEzOw0KfQ0KDQpwcmUgLnJlZ2V4cCB7DQogICAgY29sb3I6ICNFOUMwNjI7DQp9DQoNCnByZSAudGl0bGUsDQpwcmUgLnN1YiAuaWRlbnRpZmllciwNCnByZSAucGksDQpwcmUgLnRhZywNCnByZSAudGFnIC5rZXl3b3JkLA0KcHJlIC5kZWNvcmF0b3IsDQpwcmUgLnNoZWJhbmcsDQpwcmUgLnByb21wdCB7DQogICAgY29sb3I6ICM4OUJERkY7DQp9DQoNCnByZSAuY2xhc3MgLnRpdGxlLA0KcHJlIC5oYXNrZWxsIC50eXBlLA0KcHJlIC5zbWFsbHRhbGsgLmNsYXNzLA0KcHJlIC5qYXZhZG9jdGFnLA0KcHJlIC55YXJkb2N0YWcsDQpwcmUgLnBocGRvYyB7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCnByZSAuc3ltYm9sLA0KcHJlIC5ydWJ5IC5zeW1ib2wgLnN0cmluZywNCnByZSAubnVtYmVyIHsNCiAgICBjb2xvcjogIzMzODdDQzsNCn0NCg0KcHJlIC5wYXJhbXMsDQpwcmUgLnZhcmlhYmxlLA0KcHJlIC5jbG9qdXJlIC5hdHRyaWJ1dGUgew0KICAgIGNvbG9yOiAjM0U4N0UzOw0KfQ0KDQpwcmUgLmNzcyAudGFnLA0KcHJlIC5ydWxlcyAucHJvcGVydHksDQpwcmUgLnBzZXVkbywNCnByZSAudGV4IC5zcGVjaWFsIHsNCiAgICBjb2xvcjogI0NEQTg2OTsNCn0NCg0KcHJlIC5jc3MgLmNsYXNzIHsNCiAgICBjb2xvcjogIzlCNzAzRjsNCn0NCg0KcHJlIC5ydWxlcyAua2V5d29yZCB7DQogICAgY29sb3I6ICNDNUFGNzU7DQp9DQoNCnByZSAucnVsZXMgLnZhbHVlIHsNCiAgICBjb2xvcjogI0NGNkE0QzsNCn0NCg0KcHJlIC5jc3MgLmlkIHsNCiAgICBjb2xvcjogIzhCOThBQjsNCn0NCg0KcHJlIC5hbm5vdGF0aW9uLA0KcHJlIC5hcGFjaGUgLnNxYnJhY2tldCwNCnByZSAubmdpbnggLmJ1aWx0X2luIHsNCiAgICBjb2xvcjogIzlCODU5RDsNCn0NCg0KcHJlIC5wcmVwcm9jZXNzb3IsDQpwcmUgLnByYWdtYSB7DQogICAgY29sb3I6ICM4OTk2QTg7DQp9DQoNCnByZSAuaGV4Y29sb3IsDQpwcmUgLmNzcyAudmFsdWUgLm51bWJlciB7DQogICAgY29sb3I6ICNERDdCM0I7DQp9DQoNCnByZSAuY3NzIC5mdW5jdGlvbiB7DQogICAgY29sb3I6ICNEQUQwODU7DQp9DQoNCnByZSAuZGlmZiAuaGVhZGVyLA0KcHJlIC5jaHVuaywNCnByZSAudGV4IC5mb3JtdWxhIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEUyMjMxOw0KICAgIGNvbG9yOiAjRjhGOEY4Ow0KICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCn0NCg0KcHJlIC5kaWZmIC5jaGFuZ2Ugew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0QTQxMEQ7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuYWRkaXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTNCMjI7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuZGVsZXRpb24gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0MjBFMDk7DQogICAgY29sb3I6ICNGOEY4Rjg7DQp9DQoNCnByZSAuY29mZmVlc2NyaXB0IC5qYXZhc2NyaXB0LA0KcHJlIC5qYXZhc2NyaXB0IC54bWwsDQpwcmUgLnRleCAuZm9ybXVsYSwNCnByZSAueG1sIC5qYXZhc2NyaXB0LA0KcHJlIC54bWwgLnZic2NyaXB0LA0KcHJlIC54bWwgLmNzcywNCnByZSAueG1sIC5jZGF0YSB7DQogICAgb3BhY2l0eTogMC41Ow0KfQ0KDQpwcmUgLmdvIC50eXBlbmFtZXsNCiAgICBjb2xvcjogI2ZmYmM1NDsNCn1QSwcIw2jj3l0JAABdCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAc3RhdGljXGNzc1xsaW5nLmNzc2JvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1LGg2LHByZSxjb2RlLGZvcm0sZmllbGRzZXQsbGVnZW5kLGlucHV0LHRleHRhcmVhLHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtwYWRkaW5nOjB9CmhlYWRlcixmb290ZXIsc2VjdGlvbixhcnRpY2xlLGFzaWRlLG5hdixoZ3JvdXAsYWRkcmVzcyxmaWd1cmUsZmlnY2FwdGlvbixtZW51LGRldGFpbHN7ZGlzcGxheTpibG9ja30KYXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfQp0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0KZmllbGRzZXQsaW1ne2JvcmRlcjowfQphZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsfQpvbCx1bHtsaXN0LXN0eWxlOm5vbmV9CmNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fQpoMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDpub3JtYWx9CnE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDonJ30KYWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9CnN1cHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcH0Kc3Vie3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fQpsZWdlbmR7Y29sb3I6IzAwMH0KaHRtbCxib2R5e2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9CmF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNzliY31hOmhvdmVye2NvbG9yOiMwMDViOWJ9CnB7bWFyZ2luLWJvdHRvbToxOHB4fQpoMSxoMixoMyxoNCxoNSxoNntwYWRkaW5nOjEycHggMH0KaDF7Zm9udC1zaXplOjI4cHh9Cmgye2ZvbnQtc2l6ZToyNHB4fQpoM3tmb250LXNpemU6MjFweH0KaDR7Zm9udC1zaXplOjE5cHh9Cmg1e2ZvbnQtc2l6ZToxNnB4fQpoNntmb250LXNpemU6MTRweH0KLnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9Ci50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9Ci50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0KLmxlZnR7ZmxvYXQ6bGVmdH0KLnJpZ2h0e2Zsb2F0OnJpZ2h0fQouYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9Ci5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLmNsZWFyOmFmdGVye3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7Y29udGVudDoiICI7Y2xlYXI6Ym90aDtoZWlnaHQ6MH0KLnZlcnRpY2FsLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5pbmxpbmV7ZGlzcGxheTppbmxpbmV9Ci5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9Ci5ibG9ja3tkaXNwbGF5OmJsb2NrfQouZmFkZS1vdXR7b3BhY2l0eTowfQouaGlkZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0KLmNvbnRhaW5lcnttYXgtd2lkdGg6MTIwMHB4O21hcmdpbjphdXRvfQouY29udGFpbmVyOTYwe21heC13aWR0aDo5NjBweDttYXJnaW46YXV0b30KLmdyaWQtMS0ye3dpZHRoOjUwJX0KLmdyaWQtMS0ze3dpZHRoOjMzLjMzMzMlfQouZ3JpZC0xLTR7d2lkdGg6MjUlfQouZ3JpZC0xLTV7d2lkdGg6MjAlfQouZ3JpZC0xLTZ7d2lkdGg6MTYuNjY2NiV9Ci5ncmlkLTItM3t3aWR0aDo2Ni42NjY2JX0KLmdyaWQtMy00e3dpZHRoOjc1JX0KLmdyaWQtMy01e3dpZHRoOjYwJX0KLmdyaWQtNC01e3dpZHRoOjgwJX0KLmdyaWQtNS02e3dpZHRoOjgzLjMzMzMlfQppbnB1dCx0ZXh0YXJlYSxzZWxlY3QsYnV0dG9ue2ZvbnQtZmFtaWx5OlVidW50dSxDb25zb2xhcywiTWljcm9zb2Z0IFlhSGVpIixWZXJkYW5hLFRhaG9tYSxBcmlhbCxzYW5zLXNlcmlmfQouZm9ybSBsZWdlbmR7Zm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4fQouZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTJweH0KLmZvcm0gLmlwdHtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO21pbi13aWR0aDoxODBweH0uZm9ybSAuaXB0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA3OWJjfQouZm9ybSAuY2hre2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggNnB4IDAgMDtsaW5lLWhlaWdodDpub3JtYWx9Ci5mb3JtIC5maWVsZHttYXJnaW4tYm90dG9tOjI0cHh9Ci5mb3JtIC5pbnZhbGlke21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAudGlwe2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM5OTk7bWFyZ2luLWxlZnQ6MTJweH0KLmZvcm0tdmVydGljYWwgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweH0KLmZvcm0tdmVydGljYWwgLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KLmZvcm0tdmVydGljYWwgLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5mb3JtLWFsaWduIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo2MHB4O3RleHQtYWxpZ246cmlnaHR9Ci5mb3JtLWFsaWduIC5pbnZhbGlke21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6NnB4fQouYnRue21pbi13aWR0aDoxMjBweDtoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHg7b3V0bGluZTpub25lO2JvcmRlcjpub25lO21hcmdpbjowfS5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOTk5O2N1cnNvcjpwb2ludGVyfQphLmJ0bntsaW5lLWhlaWdodDozNnB4O2NvbG9yOiNmZmZ9Ci5idG4tcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifS5idG4tcmVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2M3MzgzYX0KLmJ0bi1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifS5idG4tYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWJ9Ci5idG4tZ3JlZW57YmFja2dyb3VuZC1jb2xvcjojN2FiMjc3O2NvbG9yOiNmYmZiZmJ9LmJ0bi1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjJ9Ci5sYmx7cGFkZGluZzo0cHggMTJweDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7Y29sb3I6IzMzMztib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9Ci5sYmwtcmVke2JhY2tncm91bmQtY29sb3I6I2U2NDM0Njtjb2xvcjojZmJmYmZifQphLmxibHtsaW5lLWhlaWdodDoyNnB4fQphLmxibC1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhO2NvbG9yOiNmYmZiZmJ9Ci5sYmwtYmx1ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDViOWI7Y29sb3I6I2ZiZmJmYn0KLmxibC1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0KYS5sYmwtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ5NDYyO2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuaXRlbXtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjAgNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjBweH0ucGFnZXIgLml0ZW0gYXtjb2xvcjojMzMzfQoucGFnZXIgLml0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0ucGFnZXIgLml0ZW06aG92ZXIgYXtjb2xvcjojZmZmfQoucGFnZXIgLmN1cnJlbnR7YmFja2dyb3VuZC1jb2xvcjojNjY2O2NvbG9yOiNmYmZiZmI7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuY3VycmVudCBhe2NvbG9yOiNmYmZiZmJ9Ci5wYWdlciAuY3VycmVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDIsLm1hcmtkb3duIGgzLC5tYXJrZG93biBoNCwubWFya2Rvd24gaDUsLm1hcmtkb3duIGg2e3BhZGRpbmc6MThweCAwIDlweCAwO2ZvbnQtd2VpZ2h0OmJvbGR9Ci5tYXJrZG93biBoMXtmb250LXNpemU6MjRweH0KLm1hcmtkb3duIGgye2ZvbnQtc2l6ZToyMXB4fQoubWFya2Rvd24gaDEsLm1hcmtkb3duIGgye21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQoubWFya2Rvd24gaDN7Zm9udC1zaXplOjE5cHh9Ci5tYXJrZG93biBoNHtmb250LXNpemU6MThweH0KLm1hcmtkb3duIGg1e2ZvbnQtc2l6ZToxNnB4fQoubWFya2Rvd24gaDZ7Zm9udC1zaXplOjE0cHh9Ci5tYXJrZG93biBwe21hcmdpbi1ib3R0b206MTBweH0KLm1hcmtkb3duIHVse2xpc3Qtc3R5bGU6ZGlzYyBpbnNpZGV9Ci5tYXJrZG93biBvbHtsaXN0LXN0eWxlOmRlY2ltYWwgaW5zaWRlfQoubWFya2Rvd24gY29kZXtmb250LWZhbWlseTpDb25zb2xhcywiQ291cmllciBOZXciLEFyaWFsfQoubWFya2Rvd24gcCBjb2Rle2NvbG9yOiNjNzM4M2F9Ci5tYXJrZG93biBibG9ja3F1b3Rle3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNjY2M7YmFja2dyb3VuZC1jb2xvcjojZmJmYmZifS5tYXJrZG93biBibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowfQoubWFya2Rvd24gcHJlIGNvZGV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweCAhaW1wb3J0YW50O3BhZGRpbmc6OHB4IDE4cHg7ZGlzcGxheTpibG9jazttYXJnaW46MTJweCAwIDE4cHggMH0KLm1hcmtkb3duIG9sLC5tYXJrZG93biB1bHttYXJnaW46MTJweCAyNHB4fQoubWFya2Rvd24gcCBpbWd7bWF4LXdpZHRoOjk5JTtoZWlnaHQ6YXV0bzttYXJnaW46MCBhdXRvO2Rpc3BsYXk6YmxvY2t9Ci5tYXJrZG93biB0YWJsZXttYXJnaW46MTJweCAwO3dpZHRoOjk4JX0ubWFya2Rvd24gdGFibGUgdGgsLm1hcmtkb3duIHRhYmxlIHRke2JvcmRlcjoxcHggc29saWQgI2NjYztwYWRkaW5nOjRweCAxMnB4fQoubWFya2Rvd24gdGFibGUgdGhlYWR7YmFja2dyb3VuZDojZjZmNmY2fQpodG1sLGJvZHl7YmFja2dyb3VuZDojZjNmM2YzfQojaGVhZGVye2JhY2tncm91bmQ6IzAwOTNjNDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzo0MHB4IDAgNDhweCAwO2NvbG9yOiNmYmZiZmJ9I2hlYWRlciBhOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy1tb3otdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzOy13ZWJraXQtdGV4dC1zaGFkb3c6MCAwIDNweCAjMzMzfQojaGVhZGVyLWltZ3t3aWR0aDo5NnB4O2hlaWdodDo5NnB4O2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe2xpbmUtaGVpZ2h0Ojk0cHg7Y29sb3I6I2ZiZmJmYjtwYWRkaW5nOjA7bWFyZ2luLWxlZnQ6MjRweH0jaGVhZGVyLWggYXtjb2xvcjojZmJmYmZifQojaGVhZGVyLXN1Yntjb2xvcjojZjNmM2YzO21hcmdpbi1sZWZ0OjEuMmVtO2ZvbnQtc2l6ZToxNnB4fQojbmF2e2xpbmUtaGVpZ2h0OjkwcHh9I25hdiBsaXtsaW5lLWhlaWdodDo1MHB4O21hcmdpbi1sZWZ0OjQ0cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiNmM2YzZjM7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LW1vei10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzM7LXdlYmtpdC10ZXh0LXNoYWRvdzowIDAgM3B4ICMzMzN9CiNmb290ZXJ7cGFkZGluZzozMHB4IDQwcHg7Y29sb3I6Izk5OX0KI21haW57bWFyZ2luOjMwcHggYXV0b30KI2dvLXRvcHtib3R0b206NTBweDtyaWdodDo0MHB4O3Bvc2l0aW9uOmZpeGVkO2NvbG9yOiNmZmY7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjhweDtvcGFjaXR5Oi40fQojYXJ0aWNsZS1jb250YWluZXJ7aGVpZ2h0OjEwMCV9I2FydGljbGUtY29udGFpbmVyIC5jb21tZW50cywjYXJ0aWNsZS1jb250YWluZXIgLnZpZXdze2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHN7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjM2cHg7LW1vei1ib3JkZXItcmFkaXVzOjM2cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjM2cHg7bGluZS1oZWlnaHQ6NTZweDtmb250LXNpemU6MjRweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDo0MHB4O21hcmdpbi1sZWZ0OjhweDtib3JkZXI6NnB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzowIDAgMnB4ICM5OTk7LW1vei1ib3gtc2hhZG93OjAgMCAycHggIzk5OTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAjOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuY29tbWVudHMgYXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLmNvbW1lbnRzOmhvdmVye2JveC1zaGFkb3c6MCAwIDRweCAjNjY2Oy1tb3otYm94LXNoYWRvdzowIDAgNHB4ICM2NjY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA0cHggIzY2Nn0KI2FydGljbGUtY29udGFpbmVyIC52aWV3c3t0b3A6MTRweDtsZWZ0OjA7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6MzBweDstbW96LWJvcmRlci1yYWRpdXM6MzBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzBweDtwYWRkaW5nOjA7Ym9yZGVyOjRweCBzb2xpZCAjZmZmO2JveC1zaGFkb3c6MCAwIDJweCAjOTk5Oy1tb3otYm94LXNoYWRvdzowIDAgMnB4ICM5OTk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggIzk5OX0KI2FydGljbGUtY29udGFpbmVyIC5tYWlue21hcmdpbi1sZWZ0OjExNnB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNhcnRpY2xlLWNvbnRhaW5lciAubWFpbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxMXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjojZmZmO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2M3B4O2xlZnQ6LTIycHh9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbiAudGl0bGV7Zm9udC1zaXplOjI4cHg7cGFkZGluZy1ib3R0b206MjRweH0KI2FydGljbGUtY29udGFpbmVyIC5tYWluIC50aW1lLWluZm97Y29sb3I6Izk5OTttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZy1ib3R0b206MjBweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZDt0ZXh0LWluZGVudDoxZW07Zm9udC1mYW1pbHk6VmVyZGFuYSxUYWhvbWEsJ+W+rui9r+mbhem7kScsJ+Wui+S9kycsc2Fucy1zZXJpZn0KI2FydGljbGUtY29udGFpbmVyIGFydGljbGV7bWFyZ2luLWJvdHRvbTo1MHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tYWlue21hcmdpbi1sZWZ0OjB9I2FydGljbGUtY29udGFpbmVyIC5hcnRpY2xlLXNpbmdsZSAubWFpbjpiZWZvcmV7ZGlzcGxheTpub25lfQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC5tZXRhe3JpZ2h0OjQ0cHg7dG9wOi0zNnB4fQojYXJ0aWNsZS1jb250YWluZXIgLmFydGljbGUtc2luZ2xlIC52aWV3c3t3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MzZweDstbW96LWJvcmRlci1yYWRpdXM6MzZweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MzZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToyNHB4O3BhZGRpbmc6MDtib3JkZXI6NnB4IHNvbGlkICNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAudGFne2NvbG9yOiM5OTl9CiNhcnRpY2xlLXBhZ2Vye21hcmdpbi1sZWZ0OjExNnB4fSNhcnRpY2xlLXBhZ2VyIC5pdGVte21hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojOTk5O3BhZGRpbmc6MTJweCAxOHB4O2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweH0jYXJ0aWNsZS1wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kOiMwMDc5YmN9CiNjb21tZW50e2JvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMXB4IDJweCAjYmJiOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggI2JiYjstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4ICNiYmI7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6MThweCAyNHB4fSNjb21tZW50IC5tZXRhe3JpZ2h0Oi0yNHB4O3RvcDotMzBweH0jY29tbWVudCAubWV0YSAuY29tbWVudHN7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjB9CiNjb21tZW50LWxpc3QgLmNvbW1lbnR7bWFyZ2luLWJvdHRvbTozMnB4fQojY29tbWVudC1saXN0IC5jLWF2YXRhcnttYXJnaW4tcmlnaHQ6MThweDtib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXRvcDo2cHh9CiNjb21tZW50LWxpc3QgLmMtbWV0YSBwe21hcmdpbi1ib3R0b206MH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhIC5jLXRpbWV7Y29sb3I6Izk5OTtmb250LWZhbWlseTpWZXJkYW5hLFRhaG9tYSwn5b6u6L2v6ZuF6buRJywn5a6L5L2TJyxzYW5zLXNlcmlmfQojY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9ye2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7ZGlzcGxheTpibG9ja30jY29tbWVudC1saXN0IC5jLW1ldGEgLmMtYXV0aG9yOmhvdmVye2NvbG9yOiMwMDViOWJ9CiNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseXtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2RkZDtwYWRkaW5nOjNweCAxMHB4fSNjb21tZW50LWxpc3QgLmMtbWV0YSAuYy1yZXBseTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmN9CiNjb21tZW50LWxpc3QgLmMtY29udGVudHtwYWRkaW5nLXRvcDo0cHh9CiNjb21tZW50LWxpc3QgLmMtY2hlY2t7Zm9udC1zaXplOjEzcHg7Y29sb3I6I2U2NDM0NjttYXJnaW4tbGVmdDoxMnB4fQojY29tbWVudC1saXN0IC5jLXAtbWR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtc2hvd3ttYXJnaW4tYm90dG9tOjMycHh9CiNjb21tZW50LXRpdGxle21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkfQojY29tbWVudC1mb3Jte3dpZHRoOjgwJTttYXJnaW46YXV0bzttYXJnaW4tYm90dG9tOjMwcHh9I2NvbW1lbnQtZm9ybSAuYy1pbmZve3dpZHRoOjI2JX0jY29tbWVudC1mb3JtIC5jLWluZm8gLmlwdHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MH0KI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjcwJX0KI2NvbW1lbnQtZm9ybSAuYy1hdmF0YXJ7Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4O21hcmdpbi10b3A6NnB4O3dpZHRoOjUwcHh9CiNjb21tZW50LWZvcm0gLnJlcGx5LW1ke21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM2NjZ9CiNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseXtib3JkZXI6bm9uZTttYXJnaW4tbGVmdDoxOHB4O2Rpc3BsYXk6bm9uZX0jY29tbWVudC1mb3JtIC5jYW5jZWwtcmVwbHk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9CiNjb21tZW50LWNvbnRlbnR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjE4MHB4O3Jlc2l6ZTpub25lfQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowIDI0cHg7d2lkdGg6YXV0b319QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99ICNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDowfSAjYXJ0aWNsZS1jb250YWluZXIgLm1ldGF7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW46YmVmb3Jle2Rpc3BsYXk6bm9uZX0gI2NvbW1lbnQtZm9ybSAuYy1pbmZvLCNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDoxMDAlO2Zsb2F0OmxlZnR9ICNjb21tZW50LWZvcm0gLmMtaW5mb3t0ZXh0LWFsaWduOmxlZnR9ICNuYXYsI2hlYWRlci1oe2xpbmUtaGVpZ2h0OjUwcHh9ICNmb290ZXIgc3BhbntmbG9hdDpub25lO3RleHQtYWxpZ246Y2VudGVyfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTYwcHgpey5jb250YWluZXI5NjB7cGFkZGluZzowO3dpZHRoOmF1dG99ICNoZWFkZXItaHttYXJnaW4tbGVmdDowfSAjaGVhZGVyLWltZ3tkaXNwbGF5Om5vbmV9ICNjb21tZW50LWZvcm17d2lkdGg6MTAwJX0gI25hdntmbG9hdDpsZWZ0fSNuYXYgbGl7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NDRweH19ClBLBwjPw+rWnCoAAJwqAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAABzdGF0aWNcY3NzXHNpdGVtYXAueHNsPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIyLjAiIA0KICAgICAgICAgICAgICAgIHhtbG5zOmh0bWw9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiDQogICAgICAgICAgICAgICAgeG1sbnM6c2l0ZW1hcD0iaHR0cDovL3d3dy5zaXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAuOSINCiAgICAgICAgICAgICAgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+DQoJPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgaW5kZW50PSJ5ZXMiLz4NCgk8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4NCgkJPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KCQkJPGhlYWQ+DQoJCQkJPHRpdGxlPlhNTCBTaXRlbWFwPC90aXRsZT4NCgkJCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4NCgkJCQk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCQkJCQlib2R5IHsNCgkJCQkJCWZvbnQtZmFtaWx5OiJMdWNpZGEgR3JhbmRlIiwiTHVjaWRhIFNhbnMgVW5pY29kZSIsVGFob21hLFZlcmRhbmE7DQoJCQkJCQlmb250LXNpemU6MTNweDsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJI2ludHJvIHsNCgkJCQkJCWJhY2tncm91bmQtY29sb3I6I0NGRUJGNzsNCgkJCQkJCWJvcmRlcjoxcHggIzI1ODBCMiBzb2xpZDsNCgkJCQkJCXBhZGRpbmc6NXB4IDEzcHggNXB4IDEzcHg7DQoJCQkJCQltYXJnaW46MTBweDsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJI2ludHJvIHAgew0KCQkJCQkJbGluZS1oZWlnaHQ6CTE2Ljg2NjdweDsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJdGQgew0KCQkJCQkJZm9udC1zaXplOjExcHg7DQoJCQkJCX0NCgkJCQkJDQoJCQkJCXRoIHsNCgkJCQkJCXRleHQtYWxpZ246bGVmdDsNCgkJCQkJCXBhZGRpbmctcmlnaHQ6MzBweDsNCgkJCQkJCWZvbnQtc2l6ZToxMXB4Ow0KCQkJCQl9DQoJCQkJCQ0KCQkJCQl0ci5oaWdoIHsNCgkJCQkJCWJhY2tncm91bmQtY29sb3I6d2hpdGVzbW9rZTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJI2Zvb3RlciB7DQoJCQkJCQlwYWRkaW5nOjJweDsNCgkJCQkJCW1hcmdpbjoxMHB4Ow0KCQkJCQkJZm9udC1zaXplOjhwdDsNCgkJCQkJCWNvbG9yOmdyYXk7DQoJCQkJCX0NCgkJCQkJDQoJCQkJCSNmb290ZXIgYSB7DQoJCQkJCQljb2xvcjpncmF5Ow0KCQkJCQl9DQoJCQkJCQ0KCQkJCQlhIHsNCgkJCQkJCWNvbG9yOmJsYWNrOw0KCQkJCQl9DQoJCQkJPC9zdHlsZT4NCgkJCTwvaGVhZD4NCgkJCTxib2R5Pg0KCQkJCTxoMT5YTUwgU2l0ZW1hcDwvaDE+DQoJCQkJPGRpdiBpZD0iaW50cm8iPg0KCQkJCQk8cD4NCgkJCQkJCVRoaXMgaXMgYSBYTUwgU2l0ZW1hcCB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBwcm9jZXNzZWQgYnkgc2VhcmNoIGVuZ2luZXMgbGlrZSA8YSBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20iPkdvb2dsZTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly9zZWFyY2gubXNuLmNvbSI+TVNOIFNlYXJjaDwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cueWFob28uY29tIj5ZQUhPTzwvYT4uPGJyIC8+DQoJCQkJCQk8IS0tSXQgd2FzIGdlbmVyYXRlZCB1c2luZyB0aGUgQmxvZ2dpbmctU29mdHdhcmUgPGEgaHJlZj0iaHR0cDovL3dvcmRwcmVzcy5vcmcvIj5Xb3JkUHJlc3M8L2E+IGFuZCB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcm5lYnJhY2hob2xkLmRlL3JlZGlyL3NpdGVtYXAtaG9tZS8iIHRpdGxlPSJHb29nbGUgU2l0ZW1hcCBHZW5lcmF0b3IgUGx1Z2luIGZvciBXb3JkUHJlc3MiPkdvb2dsZSBTaXRlbWFwIEdlbmVyYXRvciBQbHVnaW48L2E+IGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXJuZWJyYWNoaG9sZC5kZS8iPkFybmUgQnJhY2hob2xkPC9hPi48YnIgLz4tLT4NCgkJCQkJCVlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFhNTCBzaXRlbWFwcyBvbiA8YSBocmVmPSJodHRwOi8vc2l0ZW1hcHMub3JnIj5zaXRlbWFwcy5vcmc8L2E+IGFuZCBHb29nbGUncyA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3NtX3RoaXJkcGFydHkuaHRtbCI+bGlzdCBvZiBzaXRlbWFwIHByb2dyYW1zPC9hPi4NCgkJCQkJPC9wPg0KCQkJCTwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImNvbnRlbnQiPg0KCQkJCQk8dGFibGUgY2VsbHBhZGRpbmc9IjUiPg0KCQkJCQkJPHRyIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBibGFjayBzb2xpZDsiPg0KCQkJCQkJCTx0aD5VUkw8L3RoPg0KCQkJCQkJCTx0aD5Qcmlvcml0eTwvdGg+DQoJCQkJCQkJPHRoPkNoYW5nZSBGcmVxdWVuY3k8L3RoPg0KCQkJCQkJCTx0aD5MYXN0Q2hhbmdlIChHTVQpPC90aD4NCgkJCQkJCTwvdHI+DQoJCQkJCQk8eHNsOnZhcmlhYmxlIG5hbWU9Imxvd2VyIiBzZWxlY3Q9IidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiciLz4NCgkJCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0idXBwZXIiIHNlbGVjdD0iJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyIvPg0KCQkJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9InNpdGVtYXA6dXJsc2V0L3NpdGVtYXA6dXJsIj4NCgkJCQkJCQk8dHI+DQoJCQkJCQkJCTx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSBtb2QgMiAhPSAxIj4NCgkJCQkJCQkJCTx4c2w6YXR0cmlidXRlICBuYW1lPSJjbGFzcyI+aGlnaDwveHNsOmF0dHJpYnV0ZT4NCgkJCQkJCQkJPC94c2w6aWY+DQoJCQkJCQkJCTx0ZD4NCgkJCQkJCQkJCTx4c2w6dmFyaWFibGUgbmFtZT0iaXRlbVVSTCI+DQoJCQkJCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InNpdGVtYXA6bG9jIi8+DQoJCQkJCQkJCQk8L3hzbDp2YXJpYWJsZT4NCgkJCQkJCQkJCTxhIGhyZWY9InskaXRlbVVSTH0iPg0KCQkJCQkJCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzaXRlbWFwOmxvYyIvPg0KCQkJCQkJCQkJPC9hPg0KCQkJCQkJCQk8L3RkPg0KCQkJCQkJCQk8dGQ+DQoJCQkJCQkJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KHNpdGVtYXA6cHJpb3JpdHkqMTAwLCclJykiLz4NCgkJCQkJCQkJPC90ZD4NCgkJCQkJCQkJPHRkPg0KCQkJCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdCh0cmFuc2xhdGUoc3Vic3RyaW5nKHNpdGVtYXA6Y2hhbmdlZnJlcSwgMSwgMSksY29uY2F0KCRsb3dlciwgJHVwcGVyKSxjb25jYXQoJHVwcGVyLCAkbG93ZXIpKSxzdWJzdHJpbmcoc2l0ZW1hcDpjaGFuZ2VmcmVxLCAyKSkiLz4NCgkJCQkJCQkJPC90ZD4NCgkJCQkJCQkJPHRkPg0KCQkJCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdChzdWJzdHJpbmcoc2l0ZW1hcDpsYXN0bW9kLDAsMTEpLGNvbmNhdCgnICcsIHN1YnN0cmluZyhzaXRlbWFwOmxhc3Rtb2QsMTIsNSkpKSIvPg0KCQkJCQkJCQk8L3RkPg0KCQkJCQkJCTwvdHI+DQoJCQkJCQk8L3hzbDpmb3ItZWFjaD4NCgkJCQkJPC90YWJsZT4NCgkJCQk8L2Rpdj4NCgkJCQk8ZGl2IGlkPSJmb290ZXIiPg0KCQkJCQlHZW5lcmF0ZWQgd2l0aCA8YSBocmVmPSJodHRwOi8vd3d3LmFybmVicmFjaGhvbGQuZGUvcmVkaXIvc2l0ZW1hcC1ob21lLyIgdGl0bGU9Ikdvb2dsZSBTaXRlbWFwIEdlbmVyYXRvciBQbHVnaW4gZm9yIFdvcmRQcmVzcyI+R29vZ2xlIFNpdGVtYXAgR2VuZXJhdG9yIFBsdWdpbiBmb3IgV29yZFByZXNzPC9hPiBieSA8YSBocmVmPSJodHRwOi8vd3d3LmFybmVicmFjaGhvbGQuZGUvIj5Bcm5lIEJyYWNoaG9sZDwvYT4uIFRoaXMgWFNMVCB0ZW1wbGF0ZSBpcyByZWxlYXNlZCB1bmRlciBHUEwuDQoJCQkJPC9kaXY+DQoJCQk8L2JvZHk+DQoJCTwvaHRtbD4NCgk8L3hzbDp0ZW1wbGF0ZT4NCjwveHNsOnN0eWxlc2hlZXQ+UEsHCItTeJ5FDwAARQ8AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHN0YXRpY1xjc3Ncc3R5bGUuY3NzYm9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH0KaGVhZGVyLGZvb3RlcixzZWN0aW9uLGFydGljbGUsYXNpZGUsbmF2LGhncm91cCxhZGRyZXNzLGZpZ3VyZSxmaWdjYXB0aW9uLG1lbnUsZGV0YWlsc3tkaXNwbGF5OmJsb2NrfQphdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9CnRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfQpmaWVsZHNldCxpbWd7Ym9yZGVyOjB9CmFkZHJlc3MsY2FwdGlvbixjaXRlLGNvZGUsZGZuLGVtLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9Cm9sLHVse2xpc3Qtc3R5bGU6bm9uZX0KY2FwdGlvbix0aHt0ZXh0LWFsaWduOmxlZnR9CmgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH0KcTpiZWZvcmUscTphZnRlcntjb250ZW50OicnfQphYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH0Kc3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfQpzdWJ7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b219CmlucHV0LHRleHRhcmVhLHNlbGVjdHtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9CmxlZ2VuZHtjb2xvcjojMDAwfQpodG1sLGJvZHl7Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYn0KYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMDA3OWJjfWE6aG92ZXJ7Y29sb3I6IzAwNWI5Yn0KcHttYXJnaW4tYm90dG9tOjE4cHh9CmgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MTJweCAwfQpoMXtmb250LXNpemU6MjhweH0KaDJ7Zm9udC1zaXplOjI0cHh9Cmgze2ZvbnQtc2l6ZToyMXB4fQpoNHtmb250LXNpemU6MTlweH0KaDV7Zm9udC1zaXplOjE2cHh9Cmg2e2ZvbnQtc2l6ZToxNHB4fQoudGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0KLnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0KLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfQoubGVmdHtmbG9hdDpsZWZ0fQoucmlnaHR7ZmxvYXQ6cmlnaHR9Ci5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0KLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfQouY2xlYXI6YWZ0ZXJ7dmlzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtjb250ZW50OiIgIjtjbGVhcjpib3RoO2hlaWdodDowfQoudmVydGljYWwtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KLmlubGluZXtkaXNwbGF5OmlubGluZX0KLmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30KLmJsb2Nre2Rpc3BsYXk6YmxvY2t9Ci5mYWRlLW91dHtvcGFjaXR5OjB9Ci5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fQouY29udGFpbmVye21heC13aWR0aDoxMjAwcHg7bWFyZ2luOmF1dG99Ci5jb250YWluZXI5NjB7bWF4LXdpZHRoOjk2MHB4O21hcmdpbjphdXRvfQouZ3JpZC0xLTJ7d2lkdGg6NTAlfQouZ3JpZC0xLTN7d2lkdGg6MzMuMzMzMyV9Ci5ncmlkLTEtNHt3aWR0aDoyNSV9Ci5ncmlkLTEtNXt3aWR0aDoyMCV9Ci5ncmlkLTEtNnt3aWR0aDoxNi42NjY2JX0KLmdyaWQtMi0ze3dpZHRoOjY2LjY2NjYlfQouZ3JpZC0zLTR7d2lkdGg6NzUlfQouZ3JpZC0zLTV7d2lkdGg6NjAlfQouZ3JpZC00LTV7d2lkdGg6ODAlfQouZ3JpZC01LTZ7d2lkdGg6ODMuMzMzMyV9CmlucHV0LHRleHRhcmVhLHNlbGVjdCxidXR0b257Zm9udC1mYW1pbHk6VWJ1bnR1LENvbnNvbGFzLCJNaWNyb3NvZnQgWWFIZWkiLFZlcmRhbmEsVGFob21hLEFyaWFsLHNhbnMtc2VyaWZ9Ci5mb3JtIGxlZ2VuZHtmb250LXNpemU6MThweDttYXJnaW4tYm90dG9tOjE0cHh9Ci5mb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMnB4fQouZm9ybSAuaXB0e3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7bWluLXdpZHRoOjE4MHB4fS5mb3JtIC5pcHQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDc5YmN9Ci5mb3JtIC5jaGt7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCA2cHggMCAwO2xpbmUtaGVpZ2h0Om5vcm1hbH0KLmZvcm0gLmZpZWxke21hcmdpbi1ib3R0b206MjRweH0KLmZvcm0gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjEycHh9Ci5mb3JtIC50aXB7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izk5OTttYXJnaW4tbGVmdDoxMnB4fQouZm9ybS12ZXJ0aWNhbCBsYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206OHB4fQouZm9ybS12ZXJ0aWNhbCAuaXB0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fQouZm9ybS12ZXJ0aWNhbCAuaW52YWxpZHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOjZweH0KLmZvcm0tYWxpZ24gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0KLmZvcm0tYWxpZ24gLmludmFsaWR7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDo2cHh9Ci5idG57bWluLXdpZHRoOjEyMHB4O2hlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7bWFyZ2luOjB9LmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Y3Vyc29yOnBvaW50ZXJ9CmEuYnRue2xpbmUtaGVpZ2h0OjM2cHg7Y29sb3I6I2ZmZn0KLmJ0bi1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9LmJ0bi1yZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzczODNhfQouYnRuLWJsdWV7YmFja2dyb3VuZC1jb2xvcjojMDA3OWJjO2NvbG9yOiNmYmZiZmJ9LmJ0bi1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yn0KLmJ0bi1ncmVlbntiYWNrZ3JvdW5kLWNvbG9yOiM3YWIyNzc7Y29sb3I6I2ZiZmJmYn0uYnRuLWdyZWVuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0OTQ2Mn0KLmxibHtwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQtY29sb3I6I2NjYztjb2xvcjojMzMzO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KLmxibC1yZWR7YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CmEubGJse2xpbmUtaGVpZ2h0OjI2cHh9CmEubGJsLXJlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjNzM4M2E7Y29sb3I6I2ZiZmJmYn0KLmxibC1ibHVle2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQphLmxibC1ibHVlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNWI5Yjtjb2xvcjojZmJmYmZifQoubGJsLWdyZWVue2JhY2tncm91bmQtY29sb3I6IzdhYjI3Nztjb2xvcjojZmJmYmZifQphLmxibC1ncmVlbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2NDk0NjI7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5pdGVte3BhZGRpbmc6MnB4IDhweDttYXJnaW46MCA2cHg7Y29sb3I6IzMzMztkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyMHB4fS5wYWdlciAuaXRlbSBhe2NvbG9yOiMzMzN9Ci5wYWdlciAuaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDc5YmM7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4fS5wYWdlciAuaXRlbTpob3ZlciBhe2NvbG9yOiNmZmZ9Ci5wYWdlciAuY3VycmVudHtiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Y29sb3I6I2ZiZmJmYjtib3JkZXItcmFkaXVzOjJweDstbW96LWJvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoycHh9LnBhZ2VyIC5jdXJyZW50IGF7Y29sb3I6I2ZiZmJmYn0KLnBhZ2VyIC5jdXJyZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliY30KLm1hcmtkb3duIGgxLC5tYXJrZG93biBoMiwubWFya2Rvd24gaDMsLm1hcmtkb3duIGg0LC5tYXJrZG93biBoNSwubWFya2Rvd24gaDZ7cGFkZGluZzoxOHB4IDAgOXB4IDA7Zm9udC13ZWlnaHQ6Ym9sZH0KLm1hcmtkb3duIGgxe2ZvbnQtc2l6ZToyNHB4fQoubWFya2Rvd24gaDJ7Zm9udC1zaXplOjIxcHh9Ci5tYXJrZG93biBoMSwubWFya2Rvd24gaDJ7bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGR9Ci5tYXJrZG93biBoM3tmb250LXNpemU6MTlweH0KLm1hcmtkb3duIGg0e2ZvbnQtc2l6ZToxOHB4fQoubWFya2Rvd24gaDV7Zm9udC1zaXplOjE2cHh9Ci5tYXJrZG93biBoNntmb250LXNpemU6MTRweH0KLm1hcmtkb3duIHB7bWFyZ2luLWJvdHRvbToxMHB4fQoubWFya2Rvd24gdWx7bGlzdC1zdHlsZTpkaXNjIGluc2lkZX0KLm1hcmtkb3duIG9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBpbnNpZGV9Ci5tYXJrZG93biBjb2Rle2ZvbnQtZmFtaWx5OkNvbnNvbGFzLCJDb3VyaWVyIE5ldyIsQXJpYWx9Ci5tYXJrZG93biBwIGNvZGV7Y29sb3I6I2M3MzgzYX0KLm1hcmtkb3duIGJsb2NrcXVvdGV7cGFkZGluZzo4cHggMThweDtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmJ9Lm1hcmtkb3duIGJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjB9Ci5tYXJrZG93biBwcmUgY29kZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4ICFpbXBvcnRhbnQ7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmJsb2NrO21hcmdpbjoxMnB4IDAgMThweCAwfQoubWFya2Rvd24gb2wsLm1hcmtkb3duIHVse21hcmdpbjoxMnB4IDI0cHh9Ci5tYXJrZG93biBwIGltZ3ttYXgtd2lkdGg6OTklO2hlaWdodDphdXRvO21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30KLm1hcmtkb3duIHRhYmxle21hcmdpbjoxMnB4IDA7d2lkdGg6OTglfS5tYXJrZG93biB0YWJsZSB0aCwubWFya2Rvd24gdGFibGUgdGR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6NHB4IDEycHh9Ci5tYXJrZG93biB0YWJsZSB0aGVhZHtiYWNrZ3JvdW5kOiNmNmY2ZjZ9Cmh0bWwsYm9keXtiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2JnLnBuZyIpIHJlcGVhdH0KI2hlYWRlcntiYWNrZ3JvdW5kOnVybCgiLi4vaW1nL2hlYWRlci5naWYiKSByZXBlYXQgIzRjNzI5ODttaW4td2lkdGg6MTIwcHg7cGFkZGluZzozMHB4IDA7Y29sb3I6I2ZiZmJmYn0KI2hlYWRlci1pbWd7d2lkdGg6OTZweDtoZWlnaHQ6OTZweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6NTBweDstbW96LWJvcmRlci1yYWRpdXM6NTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NTBweH0KI2hlYWRlci1oe3BhZGRpbmctdG9wOjI0cHg7Zm9udC1zaXplOjMycHh9I2hlYWRlci1oIGF7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfQojbmF2e2hlaWdodDo1NHB4O2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3gtc2hhZG93OjAgMCAycHggI2JiYjstbW96LWJveC1zaGFkb3c6MCAwIDJweCAjYmJiOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4ICNiYmI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY30jbmF2IGxpe2xpbmUtaGVpZ2h0OjUwcHg7cGFkZGluZzowIDE4cHh9I25hdiBsaSBhe2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMzM7cGFkZGluZzowIDMycHg7ZGlzcGxheTpibG9ja30jbmF2IGxpIGE6aG92ZXJ7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzAwNzliY30KI25hdi5maXhlZHtwb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO3RvcDowfQojbWFpbnttYXJnaW46MzBweCBhdXRvfQojZm9vdGVye2NvbG9yOiNjY2M7YmFja2dyb3VuZC1jb2xvcjojMWMyNDI5O3BhZGRpbmc6MjRweCAwfSNmb290ZXIgcHttYXJnaW4tYm90dG9tOjlweDtmb250LXdlaWdodDpib2xkO2xldHRlci1zcGFjaW5nOjFweH0jZm9vdGVyIHAgYXtjb2xvcjojY2NjO21hcmdpbjowIDE2cHh9I2Zvb3RlciBwIGE6aG92ZXJ7Y29sb3I6I2ZiZmJmYn0KI2Zvb3RlciBwIGEgLmZhe21hcmdpbi1yaWdodDo4cHh9CiNnby10b3B7Ym90dG9tOjUwcHg7cmlnaHQ6NDBweDtwb3NpdGlvbjpmaXhlZDtjb2xvcjojZmZmO3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo4cHg7b3BhY2l0eTouNH0KI2FydGljbGUtY29udGFpbmVyIC5tZXRhe3dpZHRoOjEwOHB4O2xpbmUtaGVpZ2h0OjI0cHh9I2FydGljbGUtY29udGFpbmVyIC5tZXRhIC5mYXttYXJnaW4tcmlnaHQ6OHB4fQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgLmNvbW1lbnRzLCNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudmlld3MsI2FydGljbGUtY29udGFpbmVyIC5tZXRhIC50aW1le2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSAudGltZXtjb2xvcjojZmZmfQojYXJ0aWNsZS1jb250YWluZXIgLm1ldGEgYXtjb2xvcjojZmZmfSNhcnRpY2xlLWNvbnRhaW5lciAubWV0YSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAubWFpbnttYXJnaW4tbGVmdDoxNDBweH0KI2FydGljbGUtY29udGFpbmVyIGgzLnRpdGxle3BhZGRpbmc6OHB4IDE2cHg7YmFja2dyb3VuZC1jb2xvcjojNGM3Mjk4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjJweH0jYXJ0aWNsZS1jb250YWluZXIgaDMudGl0bGUgYXtjb2xvcjojZWVlfSNhcnRpY2xlLWNvbnRhaW5lciBoMy50aXRsZSBhOmhvdmVye2NvbG9yOiNmZmZ9CiNhcnRpY2xlLWNvbnRhaW5lciAuY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci10b3A6bm9uZTtwYWRkaW5nOjE4cHggMjRweCAyNHB4fQojYXJ0aWNsZS1jb250YWluZXIgLmluZm97bWFyZ2luLWJvdHRvbTowO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcDpub25lO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjJweDtjb2xvcjojOTk5fSNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbyAuZmF7bWFyZ2luLXJpZ2h0OjhweH0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5zaGFyZSAuZmF7bWFyZ2luLXJpZ2h0OjB9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz4qe3BhZGRpbmc6NnB4IDE4cHh9CiNhcnRpY2xlLWNvbnRhaW5lciAuaW5mbz5zcGFue2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZX0KI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFke2NvbG9yOiM5OTl9I2FydGljbGUtY29udGFpbmVyIC5pbmZvIC5yZWFkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwNzliYztjb2xvcjojZmJmYmZifQojYXJ0aWNsZS1jb250YWluZXIgLmluZm8gLnRpbWUsI2FydGljbGUtY29udGFpbmVyIC5pbmZvIC52aWV3cyBzcGFue2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9CiNhcnRpY2xlLWNvbnRhaW5lciBhcnRpY2xle21hcmdpbi1ib3R0b206NDhweH0KI2NvbW1lbnR7bWFyZ2luLXRvcDotMjRweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czoycHg7LW1vei1ib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MjRweDtiYWNrZ3JvdW5kOiNmZmZ9CiNjb21tZW50LWZvcm17d2lkdGg6ODAlO21hcmdpbjphdXRvfSNjb21tZW50LWZvcm0gLmMtaW5mb3t3aWR0aDoyNiV9I2NvbW1lbnQtZm9ybSAuYy1pbmZvIC5pcHR7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjB9CiNjb21tZW50LWZvcm0gLmMtY29udGVudHt3aWR0aDo3MCV9CiNjb21tZW50LWZvcm0gLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweH0KI2NvbW1lbnQtZm9ybSAucmVwbHktbWR7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzY2Nn0KI2NvbW1lbnQtZm9ybSAuY2FuY2VsLXJlcGx5e2JvcmRlcjpub25lO21hcmdpbi1sZWZ0OjE4cHg7ZGlzcGxheTpub25lfSNjb21tZW50LWZvcm0gLmNhbmNlbC1yZXBseTpob3ZlcntjdXJzb3I6cG9pbnRlcn0KI2NvbW1lbnQtY29udGVudHt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTgwcHg7cmVzaXplOm5vbmV9CiNjb21tZW50LWxpc3QgLmMtYXZhdGFye3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MnB4Oy1tb3otYm9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MThweH0KI2NvbW1lbnQtbGlzdCAuY29tbWVudHttYXJnaW4tYm90dG9tOjE4cHg7cGFkZGluZy1ib3R0b206MThweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZH0KI2NvbW1lbnQtbGlzdCAuYy1tZXRhPip7bWFyZ2luLXJpZ2h0OjE2cHh9CiNjb21tZW50LWxpc3QgLmMtdGltZXtjb2xvcjojOTk5O2ZvbnQtZmFtaWx5OlZlcmRhbmEsVGFob21hLCflvq7ova/pm4Xpu5EnLCflrovkvZMnLHNhbnMtc2VyaWZ9I2NvbW1lbnQtbGlzdCAuYy10aW1lIC5mYXttYXJnaW4tcmlnaHQ6NnB4fQojY29tbWVudC1saXN0IC5jLXJlcGx5e2NvbG9yOiM5OTl9I2NvbW1lbnQtbGlzdCAuYy1yZXBseTpob3Zlcntjb2xvcjojMzMzfQojY29tbWVudC1saXN0IC5jLWF1dGhvcntmb250LXNpemU6MTNweH0KI2NvbW1lbnQtbGlzdCAuYy1hdXRob3IuYWRtaW57YmFja2dyb3VuZC1jb2xvcjojZTY0MzQ2O2NvbG9yOiNmYmZiZmJ9CiNjb21tZW50LWxpc3QgLmMtcC1tZHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNjY2fQojY29tbWVudC1saXN0IC5jLXNlY3Rpb257bWF4LXdpZHRoOjgzMHB4fQojY29tbWVudC1saXN0IC5jLWNoZWNre2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNlNjQzNDZ9I2NvbW1lbnQtbGlzdCAuYy1jaGVjayAuZmF7bWFyZ2luLXJpZ2h0OjZweH0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MCAyNHB4O3dpZHRoOmF1dG99fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjAgMjRweDt3aWR0aDphdXRvfSAjYXJ0aWNsZS1jb250YWluZXIgLm1haW57bWFyZ2luLWxlZnQ6MH0gI2FydGljbGUtY29udGFpbmVyIC5tZXRhLmxlZnR7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3JtIC5jLWluZm8sI2NvbW1lbnQtZm9ybSAuYy1jb250ZW50e3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdH0gI2NvbW1lbnQtZm9ybSAuYy1pbmZve3RleHQtYWxpZ246bGVmdH19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU2MHB4KXsuY29udGFpbmVyOTYwe3BhZGRpbmc6MDt3aWR0aDphdXRvfSAjbmF2IGxpe3BhZGRpbmc6MCAxMHB4fSAjaGVhZGVyLWltZ3tmbG9hdDpsZWZ0O3dpZHRoOjY0cHg7aGVpZ2h0OjY0cHh9ICNoZWFkZXItaHtwYWRkaW5nOjE3cHggMDtmb250LXNpemU6MjRweH0gI2hlYWRlci1zdWJ7ZGlzcGxheTpub25lfSAjYXJ0aWNsZS1jb250YWluZXIgLnRhZywjYXJ0aWNsZS1jb250YWluZXIgLnRpbWV7ZGlzcGxheTpub25lfSAjY29tbWVudC1mb3Jte3dpZHRoOjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7LmNvbnRhaW5lcjk2MHtwYWRkaW5nOjA7d2lkdGg6YXV0b30gI2hlYWRlci1pbWd7ZGlzcGxheTpub25lfSAjaGVhZGVyLXN1YntkaXNwbGF5Om5vbmV9ICNjb21tZW50LWxpc3QgLmMtYXZhdGFye2Rpc3BsYXk6bm9uZX19ClBLBwiqeuwujSgAAI0oAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABIAAABzdGF0aWNcZmF2aWNvbi5pY28AAAEAAQAgIAAAAQAgAKgQAAAWAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAEAAAEgsAABILAAAAAAAAAAAAALN+B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs30H27N9B9uzfQfbs34H27N+B9uzfgfbs34H27N+B9uzfgfbs30H27N+B9uzfgfbs30H27N+B9uzfgfbs34H27N+B9uyfAfWr3oHx61+GK21k0qQuoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoII/7qCCP+6ggj/uoMN/7qGF/+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7qBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7mBCP+6gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoEI/7qBCP+5gQj/uYII/7qBCP+6ggj/uoII/7mBCP+5gQj/uYII/7mBCP+5gQj/uYEI/7mBCP+5gQj/uYEI/7mBCP+5gQj/uoII/7mBCP+5gQj/uoEI/7qBCP+6ggj/uoII/7qBCP+6ggj/uoEI/7qCCP+6gQj/uoII/7qCCP+6gQj/uoII/7qBCP+6gQj/uYEI/7mBCP+5ggf/uYIH/7mCB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mBB/+5gQf/uYEH/7mCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+6ggf/uoIH/7qCB/+8hAX/vIQF/7uDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yDBf+8gwX/vIMF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yEBf+8hAX/vIQF/7yDBf+8hAX/vIQF/7yDBf+8hAb/vIQG/8CHA//AhgP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CHA//AhwP/wIcD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhgP/wIYD/8CGA//AhwT/wIcE/8CGA//AhgL/xYkC/8WJAf/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYkC/8WJAv/FiQL/xYoC/8WJAf/FigP/x48O/8yaJ//JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mMAP/JjAD/yYwA/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/JjQD/yY0A/8mNAP/Jkxf/1q9T/+HAdf/p0p//8+fN/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y40A/8ugPf/y693+/v36/v/////////+yo4A/sqNAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgD/y44A/8uOAP/LjgH/y44A/8uOAP/LjQD/yo4A/8uOAP/LjgD/y44B/8uOAf/LjgD/y44A/8uOAP/LjgD/y44B/8qNAP/Ljwb/2Llz//r59f7+///+/v7+//7+/v7KjgD+yo0A/8uOAP/LjgD/yo4A/8qOAP/KjgD/yo4A/8uOAP/LjgD/yo4A/8uOAP/LjgD/yo0A/8uNAP/LjgH/yY0B/8eNCP/KjgP/yo0A/8uNAP/KjQD/yo0A/8qNAP/LjwL/0Job/9++cf/17+D//v7+/v////7+/v7//v7+/suOAfrLjgD/yo0A/8uOAP/LjgH/yo4A/8qOAP/KjgD/y44A/8qOAP/KjgD/y44A/8uOAf/KjgD/yo0A/8mMAP/HmjT/wat5/6iLSP/Npk7/xZgw/8+fMf/Wpjn/2rBP/+LCd//w37n/+/jy//7+///+/v7////////////+/v7/vJIyvruKGf/Mkgz/yo4A/8qNAP/KjQD/yo0A/8qOAP/KjgD/yo4A/8qNAP/KjQD/yo0A/8uOAf/QmRj/yaNN/9DGrf/l5eb/pqWj/+nm3//EvrH/4drJ/vnz4/779uz//fz5//////7////+/v7+//7+/v////////////7+/v+Vk42UmY95/+bOmf/gvWr/2a1I/9SjMv/Rmx//z5YT/8+VEf/PlRH/z5cX/9OfKP/Zq0P/4b9x/+3bs//QzMT/w8PD/urq6v62trb+6Ojo/rS0tf7a29v+/f39/v7///7+/v7//////v////7+/v7//v7+//////7////+/////peWlpWSkpP/9vb1//379//59Of/9u3X//Lkxf/w37j/7tyy/+/cs//x4bv/9enO//nz5P/39fL/ycnK/6+vr/+lpKT/vb29/5SUlP+5ubn/p6en/7Gxsf/R0dH//Pz8///////+/v7//v7+//7+/v/+/v7////////////+/v7/qampmJGRkf/y8vL////+//7+/v/////////////////+/v7//v7+//7+///+/////////+Hh4P+6ubn/7+/v/+zs7P/X19f/xsbG/97e3v/19fX/6urr/7i4uP/x8fH///////7+/v7//////v7+//7+/v////////////7+/v+bm5tng4OD8O3t7f///////////v///v7+/v7//v7+/v/+/v7+/v7++fn5/vb29v76+vr+5+fo/7e3t//t7e3/+Pj4/t3d3f7Y2Nj+8vLy/v7+/v7Y2Nj+vr6+/vj4+P7//////////v////7+/v7//v7+//////7////+/////jU1NSNxcXHY5ubm//////7////+//////7+/v//////7+/v/tDQ0P++vr7+urq6/r6+vv/R0dH+z8/P/qysrP9nZ2f+Kysr/yMjI/9bW1v/q6ur/729vf7k5OT+5eXl/9ra2v/f39/+8PDw/v39/f/////+/v7+/v/////////+jY2NJ3V1ddrb29v//////v////7//////v7+/+Hh4f+1tbX+ysrK/+Pj4/7n5+f+4+Pj/8nJyf6+vr7+t7e3/ywsLP4AAAD/AAAA/wYGBv+Ghob/19fX/r6+vv68vLz/wcHB/76+vv65ubn+x8fH//Hx8f7////+//////////7g4OAkhISE2cXFxf///////////v/////n5+f/tbW1/+Tk5P///////////v/////////+/v7+/uDg4P+2trb/rq6u/25ubv9ZWVn/g4OD/7u7u/++vr7/5OTk/vr6+v/9/f3//Pz8/vDw8P/Kysr/t7e3//Dw8P///////////4eHh4BdXV3xo6Oj///////////++/v7/8HBwf/BwcH/ra2t/8bGxv/6+vr///////7+/v/+/v7+/////9bW1v/ExMT/9vb2//b29v/d3d3/vr6+/+Tk5P/x8fH//v7+//7+/v/+/v7+//////39/f/Nzc3/w8PD//v7+///////hoaG+JaWlv+Li4v/9/f3///////u7u7/q6ur/1JSUv8TExP/Z2dn/9HR0f/9/f3//v7+////////////8vLy/7i4uP/v7+//+vr6/8DAwP+cnJz/VFRU/25ubv/c3Nz//v7+//////7+/v7///////T09P+3t7f/6+vr///////v7+//7Ozs/3x8fP/Y2Nj+/////ufn5/+Tk5P/FhYW/wUFBf83Nzf/mZmZ//v7+//+/v7//////v/////6+vr/w8PD/+fn5//z8/P/rKys/zk5Of8AAAD/RUVF/piYmP/19fX//////v7+/v///////f39/8TExP/e3t7////////////R0dH/MzMz/5eXl///////5+fn/7Ozs/9oaGj/FxcX/zo6Ov/IyMj//v7+//7+/v////////////j4+P+9vb3/6+vr//Dw8P+zs7P/TExM/wAAAP8ODg7+goKC//r6+v/////+/v7+///////+/v7/x8fH/9zc3P///////////7i4uP8ZGRn/Pz8//t/f3/729vb+vb29/9vb2/7ExMT+29vb//39/f7+/v7+/////v////7////+5eXl/rm5uf729vb/8/Pz/76+vv/BwcH+cnJy/n5+fv7g4OD///////7+/v7+/v7+//////j4+P68vLz+5ubm//////7////+8fHx/7Kysv+FhYX+i4uL/vT09P/U1NT/vb29//n5+f7//////v7+/v////7//////////vb29v69vb3/1tbW///////9/f3/x8fH/87Ozv/5+fn+/Pz8/v///////////////v////7/////39/f/rm5uf74+Pj/7u7u/snJyf/4+Pj+//////Ly8v6IiIj+m5ub//T09P/IyMj/vb29/ufn5//6+vr+/Pz8/vr6+v/n5+f+vb29/snJyf/6+vr////////////w8PD/t7e3/9jY2P79/f3+///////////////+/////unp6f+3t7f+4uLi//Hx8f+Ojo7+c3Nz5ZCQkP6jo6P/oKCg/n5+fvpOTk7hnJyc++Hh4f/W1tb+vb29/8DAwP/BwcH/vr6+/7m5uf7W1tb++vr6///////////////////////p6en/ubm5/sPDw/7f39//6Ojo/+Tk5P7MzMz/tra2/93d3f7q6ur/g4OD/3BwcP+rq6s/cHBwZkVFRWlKSkpnhYWFX4yMjDhtbW2bd3d3662trf/Y2Nj/5OTk/uXl5f/p6en/9vb2/v////////////////7+/v/////////////////19fX/1tbW/8LCwv+9vb3/wcHB/9HR0f/k5OT/xsbG/319ffNjY2POa2tr0hEREQD///8A////ALy8vAAAAAAAAAAAAM7Ozgt2dnZFbW1to3t7e+uZmZn/t7e3/9fX1//o6Oj/8PDw//b29v/6+vr//f39////////////////////////////9/f3/+rq6v/d3d3+t7e3/46Ojv58fHzgh4eHcry8vBdwcHAdw8PDAICAgAAgICAAPz8/AJiYmADGxsYAl5eXAf///wDKysoNqampU319fY5wcHDFe3t793d3d/WBgYH5kZGR/KOjo/uzs7P7v7+/+8XFxfvGxsb7wMDA+7Ozs/ucnJz8gYGB+nh4ePpxcXHMiYmJi76+vjz///8FqqqqAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAAAAAAAAFBLBwipcxPwvhAAAL4QAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAAsAAABzdGF0aWNcaW1nL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABEAAABzdGF0aWNcaW1nXGJnLnBuZ4lQTkcNChoKAAAADUlIRFIAAACWAAAAlggCAAAAs2PmtQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANmaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6MjZFNEZDQkU1NUFBRTIxMTk3MDBCNTk5RTI5M0VBMDciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDk3MEYzQ0VCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDk3MEYzQ0RCNUY4MTFFMjhDQzBFRkE5N0NDMjRCOTUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQUFCQkVBMThGQjVFMjExQkJFM0FCRjQzOTM4QUVCRiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyNkU0RkNCRTU1QUFFMjExOTcwMEI1OTlFMjkzRUEwNyIvPiA8L3Jk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ICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKHRvcCA8ICQodGhpcykuc2Nyb2xsVG9wKCkpIHsNCiAgICAgICAgICAgICR0b3AucmVtb3ZlQ2xhc3MoImhpZGUiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR0b3AuYWRkQ2xhc3MoJ2hpZGUnKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgICR0b3Aub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IDB9LCA1MDApOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSkNCn0NCg0KZnVuY3Rpb24gcmVuZGVyTWFya2Rvd24oKSB7DQogICAgdmFyICRtZCA9ICQoJy5tYXJrZG93bicpOw0KICAgICRtZC5lYWNoKGZ1bmN0aW9uIChpLCBpdGVtKSB7DQogICAgICAgICQoaXRlbSkuaHRtbChtYXJrZWQoJChpdGVtKS5odG1sKCkucmVwbGFjZSgvJmd0Oy9nLCAnPicpKSk7DQogICAgfSk7DQogICAgdmFyIGNvZGUgPSAkbWQuZmluZCgncHJlIGNvZGUnKTsNCiAgICBpZiAoY29kZS5sZW5ndGgpIHsNCiAgICAgICAgJCgiPGxpbms+IikuYXR0cih7IHJlbDogInN0eWxlc2hlZXQiLCB0eXBlOiAidGV4dC9jc3MiLCBocmVmOiAiL3N0YXRpYy9jc3MvaGlnaGxpZ2h0LmNzcyJ9KS5hcHBlbmRUbygiaGVhZCIpOw0KICAgICAgICAkLmdldFNjcmlwdCgiL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGNvZGUuZWFjaChmdW5jdGlvbiAoaSwgaXRlbSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soaXRlbSkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGluaXRDb21tZW50KCkgew0KICAgIHZhciAkbGlzdCA9ICQoJyNjb21tZW50LWxpc3QnKTsNCiAgICBpZiAoISRsaXN0Lmxlbmd0aCkgew0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1hdXRob3IiKSkgew0KICAgICAgICAkKCcjY29tbWVudC1hdXRob3InKS52YWwobG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXV0aG9yIikpOw0KICAgICAgICAkKCcjY29tbWVudC1lbWFpbCcpLnZhbChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY29tbWVudC1lbWFpbCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtdXJsJykudmFsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjb21tZW50LXVybCIpKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtYXZhdGFyJykuYXR0cigic3JjIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImNvbW1lbnQtYXZhdGFyIikpOw0KICAgICAgICAkKCcuYy1hdmF0YXInKS5yZW1vdmVDbGFzcygibnVsbCIpOw0KICAgIH0NCiAgICAkKCcjY29tbWVudC1jb250ZW50Jykub24oImZvY3VzIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICBpZiAoJCgnLmMtYXZhdGFyJykuaGFzQ2xhc3MoIm51bGwiKSkgew0KICAgICAgICAgICAgJCgnLmMtYXZhdGFyLWZpZWxkJykucmVtb3ZlKCk7DQogICAgICAgICAgICAkKCcuYy1pbmZvLWZpZWxkcycpLnJlbW92ZUNsYXNzKCJoaWRlIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkKCcubm90LW1lJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcuYy1hdmF0YXItZmllbGQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnLmMtaW5mby1maWVsZHMnKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgJCgnI2NvbW1lbnQtc2hvdycpLm9uKCJjbGljayIsICIuZW5hYmxlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCIjY29tbWVudC1zaG93IikucmVtb3ZlKCk7DQogICAgICAgICQoJyNjb21tZW50LWZvcm0nKS5yZW1vdmVDbGFzcygiaGlkZSIpOw0KICAgIH0pOw0KICAgICQoJyNjb21tZW50LWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0KICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWF1dGhvciIsICQoJyNjb21tZW50LWF1dGhvcicpLnZhbCgpKTsNCiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjb21tZW50LWVtYWlsIiwgJCgnI2NvbW1lbnQtZW1haWwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC11cmwiLCAkKCcjY29tbWVudC11cmwnKS52YWwoKSk7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY29tbWVudC1hdmF0YXIiLCBqc29uLmNvbW1lbnQuYXZhdGFyKTsNCiAgICAgICAgICAgIHZhciB0cGwgPSAkKCQoJyNjb21tZW50LXRwbCcpLmh0bWwoKSk7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXZhdGFyIikuYXR0cigic3JjIiwganNvbi5jb21tZW50LmF2YXRhcikuYXR0cigiYWx0IiwganNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtYXV0aG9yIikuYXR0cigiaHJlZiIsIGpzb24uY29tbWVudC51cmwpLnRleHQoanNvbi5jb21tZW50LmF1dGhvcik7DQogICAgICAgICAgICB0cGwuZmluZCgiLmMtcmVwbHkiKS5hdHRyKCJyZWwiLCBqc29uLmNvbW1lbnQuaWQpOw0KICAgICAgICAgICAgdHBsLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKGpzb24uY29tbWVudC5jb250ZW50KTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQucGFyZW50X21kKSB7DQogICAgICAgICAgICAgICAgdHBsLmZpbmQoIi5jLXAtbWQiKS5odG1sKG1hcmtlZChqc29uLmNvbW1lbnQucGFyZW50X21kKSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRwbC5maW5kKCIuYy1wLW1kIikucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0cGwuYXR0cigiaWQiLCAiY29tbWVudC0iICsganNvbi5jb21tZW50LmlkKTsNCiAgICAgICAgICAgIGlmIChqc29uLmNvbW1lbnQuc3RhdHVzID09ICJhcHByb3ZlZCIpIHsNCiAgICAgICAgICAgICAgICB0cGwuZmluZCgiLmMtY2hlY2siKS5yZW1vdmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRsaXN0LmFwcGVuZCh0cGwpOw0KICAgICAgICAgICAgJCgnLmNhbmNlbC1yZXBseScpLnRyaWdnZXIoImNsaWNrIik7DQogICAgICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykudmFsKCIiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGFsZXJ0KCLmj5DkuqTlpLHotKUhIik7DQogICAgICAgIH0NCiAgICB9KTsNCiAgICAkbGlzdC5vbigiY2xpY2siLCAiLmMtcmVwbHkiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJy5yZXBseS1tZCcpLnJlbW92ZSgpOw0KICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICB2YXIgcGMgPSAkKCcjY29tbWVudC0nICsgaWQpOw0KICAgICAgICB2YXIgbWQgPSAiPiBAIiArIHBjLmZpbmQoIi5jLWF1dGhvciIpLnRleHQoKSArICJcblxuIjsNCiAgICAgICAgbWQgKz0gIj4gIiArIHBjLmZpbmQoIi5jLWNvbnRlbnQiKS5odG1sKCkgKyAiXG4iOw0KICAgICAgICAkKCcjY29tbWVudC1jb250ZW50JykuYmVmb3JlKCc8ZGl2IGNsYXNzPSJyZXBseS1tZCBtYXJrZG93biI+JyArIG1hcmtlZChtZCkgKyAnPC9kaXY+Jyk7DQogICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbChpZCk7DQogICAgICAgIGlmICgkKCcjY29tbWVudC1zaG93JykubGVuZ3RoKSB7DQogICAgICAgICAgICAkKCcjY29tbWVudC1zaG93IC5lbmFibGUnKS50cmlnZ2VyKCJjbGljayIpOw0KICAgICAgICB9DQogICAgICAgICQoJy5jYW5jZWwtcmVwbHknKS5zaG93KCk7DQogICAgICAgIHZhciB0b3AgPSAkKCcjY29tbWVudC1mb3JtJykub2Zmc2V0KCkudG9wOw0KICAgICAgICAkKCdib2R5LGh0bWwnKS5hbmltYXRlKHtzY3JvbGxUb3A6IHRvcH0sIDUwMCk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9KTsNCiAgICAkKCcuY2FuY2VsLXJlcGx5Jykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcucmVwbHktbWQnKS5yZW1vdmUoKTsNCiAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKDApOw0KICAgICAgICAkKHRoaXMpLmhpZGUoKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KfQ0KUEsHCB7hHnJ1EgAAdRIAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAHN0YXRpY1xqc1x1cGxvYWQuanNmdW5jdGlvbiBpbml0VXBsb2FkKHApIHsNCiAgICAkKCcjYXR0YWNoLXNob3cnKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICQoJyNhdHRhY2gtdXBsb2FkJykudHJpZ2dlcigiY2xpY2siKTsNCiAgICB9KTsNCiAgICAkKCcjYXR0YWNoLXVwbG9hZCcpLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmIChjb25maXJtKCLnq4vljbPkuIrkvKA/IikpIHsNCiAgICAgICAgICAgIHZhciBiYXIgPSAkKCc8cCBjbGFzcz0iZmlsZS1wcm9ncmVzcyBpbmxpbmUtYmxvY2siPjAlPC9wPicpOw0KICAgICAgICAgICAgJCgnI2F0dGFjaC1mb3JtJykuYWpheFN1Ym1pdCh7DQogICAgICAgICAgICAgICAgImJlZm9yZVN1Ym1pdCI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgJChwKS5iZWZvcmUoYmFyKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJ1cGxvYWRQcm9ncmVzcyI6IGZ1bmN0aW9uIChldmVudCwgcG9zaXRpb24sIHRvdGFsLCBwZXJjZW50Q29tcGxldGUpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRWYWwgPSBwZXJjZW50Q29tcGxldGUgKyAnJSc7DQogICAgICAgICAgICAgICAgICAgIGJhci5jc3MoIndpZHRoIiwgcGVyY2VudFZhbCkuaHRtbChwZXJjZW50VmFsKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFqc29uLnJlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoanNvbi5tc2cpLmFkZENsYXNzKCJlcnIiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhci5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMDApOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYmFyLmh0bWwoIi8iICsganNvbi5maWxlLlVybCArICImbmJzcDsmbmJzcDsmbmJzcDsoQCIgKyBqc29uLmZpbGUuTmFtZSArICIpIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJCgnI2F0dGFjaC11cGxvYWQnKS52YWwoIiIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJCh0aGlzKS52YWwoIiIpOw0KICAgICAgICB9DQogICAgfSk7DQp9UEsHCIiJF/v2BAAA9gQAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAACwAAAHN0YXRpY1xsaWIvUEsHCAAAAAAAAAAAAAAAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAHN0YXRpY1xsaWJcY29kZW1pcnJvci1tb2RlLm1pbi5qcyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0vXihccyopKFsqKy1dfChcZCspXC4pKFxzKikvLGU9IiorLSI7Q29kZU1pcnJvci5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT1yLmdldEN1cnNvcigpLG89ci5nZXRTdGF0ZUFmdGVyKGkubGluZSkubGlzdCE9PSExO2lmKCFvfHwhKG49ci5nZXRMaW5lKGkubGluZSkubWF0Y2godCkpKXJldHVybiByLmV4ZWNDb21tYW5kKCJuZXdsaW5lQW5kSW5kZW50Iiksdm9pZCAwO3ZhciBsPW5bMV0sYT1uWzRdLHM9ZS5pbmRleE9mKG5bMl0pPj0wP25bMl06cGFyc2VJbnQoblszXSwxMCkrMSsiLiI7ci5yZXBsYWNlU2VsZWN0aW9uKCJcbiIrbCtzK2EsImVuZCIpfX0oKSxDb2RlTWlycm9yLmRlZmluZU1vZGUoIm1hcmtkb3duIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlLHIpe3JldHVybiBlLmY9ZS5pbmxpbmU9cixyKHQsZSl9ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIGUuZj1lLmJsb2NrPXIscih0LGUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubGlua1RpdGxlPSExLHQuZW09ITEsdC5zdHJvbmc9ITEsdC5xdW90ZT0wLGd8fHQuZiE9bHx8KHQuZj1jLHQuYmxvY2s9byksdC50cmFpbGluZ1NwYWNlPTAsdC50cmFpbGluZ1NwYWNlTmV3TGluZT0hMSx0LnRoaXNMaW5lSGFzQ29udGVudD0hMSxudWxsfWZ1bmN0aW9uIG8odCxpKXt2YXIgbz1pLmxpc3QhPT0hMTtpLmxpc3QhPT0hMSYmaS5pbmRlbnRhdGlvbkRpZmY+PTA/KGkuaW5kZW50YXRpb25EaWZmPDQmJihpLmluZGVudGF0aW9uLT1pLmluZGVudGF0aW9uRGlmZiksaS5saXN0PW51bGwpOmkubGlzdCE9PSExJiZpLmluZGVudGF0aW9uPjA/KGkubGlzdD1udWxsLGkubGlzdERlcHRoPU1hdGguZmxvb3IoaS5pbmRlbnRhdGlvbi80KSk6aS5saXN0IT09ITEmJihpLmxpc3Q9ITEsaS5saXN0RGVwdGg9MCk7dmFyIGw9bnVsbDtpZihpLmluZGVudGF0aW9uRGlmZj49NClyZXR1cm4gaS5pbmRlbnRhdGlvbi09NCx0LnNraXBUb0VuZCgpLGs7aWYodC5lYXRTcGFjZSgpKXJldHVybiBudWxsO2lmKGw9dC5tYXRjaChSKSlpLmhlYWRlcj1sWzBdLmxlbmd0aDw9Nj9sWzBdLmxlbmd0aDo2O2Vsc2UgaWYoaS5wcmV2TGluZUhhc0NvbnRlbnQmJihsPXQubWF0Y2goRykpKWkuaGVhZGVyPSI9Ij09bFswXS5jaGFyQXQoMCk/MToyO2Vsc2UgaWYodC5lYXQoIj4iKSlmb3IoaS5pbmRlbnRhdGlvbisrLGkucXVvdGU9MSx0LmVhdFNwYWNlKCk7dC5lYXQoIj4iKTspdC5lYXRTcGFjZSgpLGkucXVvdGUrKztlbHNle2lmKCJbIj09PXQucGVlaygpKXJldHVybiByKHQsaSxoKTtpZih0Lm1hdGNoKEksITApKXJldHVybiBBO2lmKGkucHJldkxpbmVIYXNDb250ZW50JiYhb3x8IXQubWF0Y2goUCwhMCkmJiF0Lm1hdGNoKEYsITApKXtpZihlLmZlbmNlZENvZGVCbG9ja3MmJnQubWF0Y2goL15gYGAoW1x3KyNdKikvLCEwKSlyZXR1cm4gaS5sb2NhbE1vZGU9eChSZWdFeHAuJDEpLGkubG9jYWxNb2RlJiYoaS5sb2NhbFN0YXRlPWkubG9jYWxNb2RlLnN0YXJ0U3RhdGUoKSksbih0LGksYSksa31lbHNlIGkuaW5kZW50YXRpb24rPTQsaS5saXN0PSEwLGkubGlzdERlcHRoKyssZS50YXNrTGlzdHMmJnQubWF0Y2goQiwhMSkmJihpLnRhc2tMaXN0PSEwKX1yZXR1cm4gcih0LGksaS5pbmxpbmUpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj12LnRva2VuKHQsZS5odG1sU3RhdGUpO3JldHVybiBnJiYidGFnIj09PXImJiJvcGVuVGFnIiE9PWUuaHRtbFN0YXRlLnR5cGUmJiFlLmh0bWxTdGF0ZS5jb250ZXh0JiYoZS5mPWMsZS5ibG9jaz1vKSxlLm1kX2luc2lkZSYmLTEhPXQuY3VycmVudCgpLmluZGV4T2YoIj4iKSYmKGUuZj1jLGUuYmxvY2s9byxlLmh0bWxTdGF0ZS5jb250ZXh0PXZvaWQgMCkscn1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQuc29sKCkmJnQubWF0Y2goL15gYGAvLCEwKT8oZS5sb2NhbE1vZGU9ZS5sb2NhbFN0YXRlPW51bGwsZS5mPWMsZS5ibG9jaz1vLGspOmUubG9jYWxNb2RlP2UubG9jYWxNb2RlLnRva2VuKHQsZS5sb2NhbFN0YXRlKToodC5za2lwVG9FbmQoKSxrKX1mdW5jdGlvbiBzKHQpe3ZhciBlPVtdO2lmKHQudGFza09wZW4pcmV0dXJuIm1ldGEiO2lmKHQudGFza0Nsb3NlZClyZXR1cm4icHJvcGVydHkiO2lmKHQuc3Ryb25nJiZlLnB1c2goeiksdC5lbSYmZS5wdXNoKEUpLHQubGlua1RleHQmJmUucHVzaChPKSx0LmNvZGUmJmUucHVzaChrKSx0LmhlYWRlciYmKGUucHVzaChDKSxlLnB1c2goQyt0LmhlYWRlcikpLHQucXVvdGUmJmUucHVzaCh0LnF1b3RlJTI/dzpMKSx0Lmxpc3QhPT0hMSl7dmFyIHI9KHQubGlzdERlcHRoLTEpJTM7cj8xPT09cj9lLnB1c2goTSk6ZS5wdXNoKFQpOmUucHVzaChTKX1yZXR1cm4gdC50cmFpbGluZ1NwYWNlTmV3TGluZT9lLnB1c2goInRyYWlsaW5nLXNwYWNlLW5ldy1saW5lIik6dC50cmFpbGluZ1NwYWNlJiZlLnB1c2goInRyYWlsaW5nLXNwYWNlLSIrKHQudHJhaWxpbmdTcGFjZSUyPyJhIjoiYiIpKSxlLmxlbmd0aD9lLmpvaW4oIiAiKTpudWxsfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdC5tYXRjaChfLCEwKT9zKGUpOnZvaWQgMH1mdW5jdGlvbiBjKHQsaSl7dmFyIG89aS50ZXh0KHQsaSk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBvKXJldHVybiBvO2lmKGkubGlzdClyZXR1cm4gaS5saXN0PW51bGwscyhpKTtpZihpLnRhc2tMaXN0KXt2YXIgYT0ieCIhPT10Lm1hdGNoKEIsITApWzFdO3JldHVybiBhP2kudGFza09wZW49ITA6aS50YXNrQ2xvc2VkPSEwLGkudGFza0xpc3Q9ITEscyhpKX1pLnRhc2tPcGVuPSExLGkudGFza0Nsb3NlZD0hMTt2YXIgdT10LnNvbCgpLGM9dC5uZXh0KCk7aWYoIlxcIj09PWMpcmV0dXJuIHQubmV4dCgpLHMoaSk7aWYoaS5saW5rVGl0bGUpe2kubGlua1RpdGxlPSExO3ZhciBoPWM7IigiPT09YyYmKGg9IikiKSxoPShoKyIiKS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpO3ZhciBkPSJeXFxzKig/OlteIitoKyJcXFxcXSt8XFxcXFxcXFx8XFxcXC4pIitoO2lmKHQubWF0Y2gobmV3IFJlZ0V4cChkKSwhMCkpcmV0dXJuIFd9aWYoImAiPT09Yyl7dmFyIHA9cyhpKSxnPXQucG9zO3QuZWF0V2hpbGUoImAiKTt2YXIgdj0xK3QucG9zLWc7cmV0dXJuIGkuY29kZT92PT09Yj8oaS5jb2RlPSExLHApOnMoaSk6KGI9dixpLmNvZGU9ITAscyhpKSl9aWYoaS5jb2RlKXJldHVybiBzKGkpO2lmKCIhIj09PWMmJnQubWF0Y2goL1xbW15cXV0qXF0gPyg/OlwofFxbKS8sITEpKXJldHVybiB0Lm1hdGNoKC9cW1teXF1dKlxdLyksaS5pbmxpbmU9aS5mPWYsTjtpZigiWyI9PT1jJiZ0Lm1hdGNoKC8uKlxdKFwofCA/XFspLywhMSkpcmV0dXJuIGkubGlua1RleHQ9ITAscyhpKTtpZigiXSI9PT1jJiZpLmxpbmtUZXh0KXt2YXIgeT1zKGkpO3JldHVybiBpLmxpbmtUZXh0PSExLGkuaW5saW5lPWkuZj1mLHl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXihodHRwcz98ZnRwcz8pOlwvXC8oPzpbXlxcPl18XFwuKSs+LywhMSkpcmV0dXJuIHIodCxpLG0oSCwiPiIpKTtpZigiPCI9PT1jJiZ0Lm1hdGNoKC9eW14+IFxcXStAKD86W15cXD5dfFxcLikrPi8sITEpKXJldHVybiByKHQsaSxtKEQsIj4iKSk7aWYoIjwiPT09YyYmdC5tYXRjaCgvXlx3LywhMSkpe2lmKC0xIT10LnN0cmluZy5pbmRleE9mKCI+Iikpe3ZhciB4PXQuc3RyaW5nLnN1YnN0cmluZygxLHQuc3RyaW5nLmluZGV4T2YoIj4iKSk7L21hcmtkb3duXHMqPVxzKignfCIpezAsMX0xKCd8Iil7MCwxfS8udGVzdCh4KSYmKGkubWRfaW5zaWRlPSEwKX1yZXR1cm4gdC5iYWNrVXAoMSksbih0LGksbCl9aWYoIjwiPT09YyYmdC5tYXRjaCgvXlwvXHcqPz4vKSlyZXR1cm4gaS5tZF9pbnNpZGU9ITEsInRhZyI7dmFyIEM9ITE7aWYoIWUudW5kZXJzY29yZXNCcmVha1dvcmRzJiYiXyI9PT1jJiYiXyIhPT10LnBlZWsoKSYmdC5tYXRjaCgvKFx3KS8sITEpKXt2YXIgaz10LnBvcy0yO2lmKGs+PTApe3ZhciB3PXQuc3RyaW5nLmNoYXJBdChrKTsiXyIhPT13JiZ3Lm1hdGNoKC8oXHcpLywhMSkmJihDPSEwKX19dmFyIHA9cyhpKTtpZigiKiI9PT1jfHwiXyI9PT1jJiYhQylpZih1JiYiICI9PT10LnBlZWsoKSk7ZWxzZXtpZihpLnN0cm9uZz09PWMmJnQuZWF0KGMpKXJldHVybiBpLnN0cm9uZz0hMSxwO2lmKCFpLnN0cm9uZyYmdC5lYXQoYykpcmV0dXJuIGkuc3Ryb25nPWMscyhpKTtpZihpLmVtPT09YylyZXR1cm4gaS5lbT0hMSxwO2lmKCFpLmVtKXJldHVybiBpLmVtPWMscyhpKX1lbHNlIGlmKCIgIj09PWMmJih0LmVhdCgiKiIpfHx0LmVhdCgiXyIpKSl7aWYoIiAiPT09dC5wZWVrKCkpcmV0dXJuIHMoaSk7dC5iYWNrVXAoMSl9cmV0dXJuIiAiPT09YyYmKHQubWF0Y2goLyArJC8sITEpP2kudHJhaWxpbmdTcGFjZSsrOmkudHJhaWxpbmdTcGFjZSYmKGkudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITApKSxzKGkpfWZ1bmN0aW9uIGYodCxlKXtpZih0LmVhdFNwYWNlKCkpcmV0dXJuIG51bGw7dmFyIG49dC5uZXh0KCk7cmV0dXJuIigiPT09bnx8IlsiPT09bj9yKHQsZSxtKFcsIigiPT09bj8iKSI6Il0iKSk6ImVycm9yIn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQubWF0Y2goL15bXlxdXSpcXTovLCEwKT8oZS5mPWQsTyk6cih0LGUsYyl9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0LmVhdFNwYWNlKCk/bnVsbDoodC5tYXRjaCgvXlteXHNdKy8sITApLHZvaWQgMD09PXQucGVlaygpP2UubGlua1RpdGxlPSEwOnQubWF0Y2goL14oPzpccysoPzoiKD86W14iXFxdfFxcXFx8XFwuKSsifCcoPzpbXidcXF18XFxcXHxcXC4pKyd8XCgoPzpbXilcXF18XFxcXHxcXC4pK1wpKSk/LywhMCksZS5mPWUuaW5saW5lPWMsVyl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gVlt0XXx8KHQ9KHQrIiIpLnJlcGxhY2UoLyhbLj8qK14kW1xdXFwoKXt9fC1dKS9nLCJcXCQxIiksVlt0XT1uZXcgUmVnRXhwKCJeKD86W15cXFxcXXxcXFxcLikqPygiK3QrIikiKSksVlt0XX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gcj1yfHxjLGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4ubWF0Y2gocChlKSksaS5pbmxpbmU9aS5mPXIsdH19dmFyIGc9Q29kZU1pcnJvci5tb2Rlcy5oYXNPd25Qcm9wZXJ0eSgieG1sIiksdj1Db2RlTWlycm9yLmdldE1vZGUodCxnP3tuYW1lOiJ4bWwiLGh0bWxNb2RlOiEwfToidGV4dC9wbGFpbiIpLHk9e2h0bWw6Imh0bWxtaXhlZCIsanM6ImphdmFzY3JpcHQiLGpzb246ImFwcGxpY2F0aW9uL2pzb24iLGM6InRleHQveC1jc3JjIiwiYysrIjoidGV4dC94LWMrK3NyYyIsamF2YToidGV4dC94LWphdmEiLGNzaGFycDoidGV4dC94LWNzaGFycCIsImMjIjoidGV4dC94LWNzaGFycCIsc2NhbGE6InRleHQveC1zY2FsYSJ9LHg9ZnVuY3Rpb24oKXt2YXIgZSxyLG49e30saT17fSxvPVtdO2Zvcih2YXIgbCBpbiBDb2RlTWlycm9yLm1vZGVzKUNvZGVNaXJyb3IubW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJm8ucHVzaChsKTtmb3IoZT0wO2U8by5sZW5ndGg7ZSsrKW5bb1tlXV09b1tlXTt2YXIgYT1bXTtmb3IodmFyIGwgaW4gQ29kZU1pcnJvci5taW1lTW9kZXMpQ29kZU1pcnJvci5taW1lTW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobCkmJmEucHVzaCh7bWltZTpsLG1vZGU6Q29kZU1pcnJvci5taW1lTW9kZXNbbF19KTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKXI9YVtlXS5taW1lLGlbcl09YVtlXS5taW1lO2Zvcih2YXIgcyBpbiB5KSh5W3NdaW4gbnx8eVtzXWluIGkpJiYobltzXT15W3NdKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV0/Q29kZU1pcnJvci5nZXRNb2RlKHQsbltlXSk6bnVsbH19KCk7dm9pZCAwPT09ZS51bmRlcnNjb3Jlc0JyZWFrV29yZHMmJihlLnVuZGVyc2NvcmVzQnJlYWtXb3Jkcz0hMCksdm9pZCAwPT09ZS5mZW5jZWRDb2RlQmxvY2tzJiYoZS5mZW5jZWRDb2RlQmxvY2tzPSExKSx2b2lkIDA9PT1lLnRhc2tMaXN0cyYmKGUudGFza0xpc3RzPSExKTt2YXIgYj0wLEM9ImhlYWRlciIsaz0iY29tbWVudCIsdz0iYXRvbSIsTD0ibnVtYmVyIixTPSJ2YXJpYWJsZS0yIixNPSJ2YXJpYWJsZS0zIixUPSJrZXl3b3JkIixBPSJociIsTj0idGFnIixIPSJsaW5rIixEPSJsaW5rIixPPSJsaW5rIixXPSJzdHJpbmciLEU9ImVtIix6PSJzdHJvbmciLEk9L14oWypcLT1fXSkoPzpccypcMSl7Mix9XHMqJC8sUD0vXlsqXC0rXVxzKy8sRj0vXlswLTldK1wuXHMrLyxCPS9eXFsoeHwgKVxdKD89XHMpLyxSPS9eIysvLEc9L14oPzpcPXsxLH18LXsxLH0pJC8sXz0vXlteIVxbXF0qX1xcPD5gICInKF0rLyxWPVtdO3JldHVybntzdGFydFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue2Y6byxwcmV2TGluZUhhc0NvbnRlbnQ6ITEsdGhpc0xpbmVIYXNDb250ZW50OiExLGJsb2NrOm8saHRtbFN0YXRlOkNvZGVNaXJyb3Iuc3RhcnRTdGF0ZSh2KSxpbmRlbnRhdGlvbjowLGlubGluZTpjLHRleHQ6dSxsaW5rVGV4dDohMSxsaW5rVGl0bGU6ITEsZW06ITEsc3Ryb25nOiExLGhlYWRlcjowLHRhc2tMaXN0OiExLGxpc3Q6ITEsbGlzdERlcHRoOjAscXVvdGU6MCx0cmFpbGluZ1NwYWNlOjAsdHJhaWxpbmdTcGFjZU5ld0xpbmU6ITF9fSxjb3B5U3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJue2Y6dC5mLHByZXZMaW5lSGFzQ29udGVudDp0LnByZXZMaW5lSGFzQ29udGVudCx0aGlzTGluZUhhc0NvbnRlbnQ6dC50aGlzTGluZUhhc0NvbnRlbnQsYmxvY2s6dC5ibG9jayxodG1sU3RhdGU6Q29kZU1pcnJvci5jb3B5U3RhdGUodix0Lmh0bWxTdGF0ZSksaW5kZW50YXRpb246dC5pbmRlbnRhdGlvbixsb2NhbE1vZGU6dC5sb2NhbE1vZGUsbG9jYWxTdGF0ZTp0LmxvY2FsTW9kZT9Db2RlTWlycm9yLmNvcHlTdGF0ZSh0LmxvY2FsTW9kZSx0LmxvY2FsU3RhdGUpOm51bGwsaW5saW5lOnQuaW5saW5lLHRleHQ6dC50ZXh0LGxpbmtUaXRsZTp0LmxpbmtUaXRsZSxlbTp0LmVtLHN0cm9uZzp0LnN0cm9uZyxoZWFkZXI6dC5oZWFkZXIsdGFza0xpc3Q6dC50YXNrTGlzdCxsaXN0OnQubGlzdCxsaXN0RGVwdGg6dC5saXN0RGVwdGgscXVvdGU6dC5xdW90ZSx0cmFpbGluZ1NwYWNlOnQudHJhaWxpbmdTcGFjZSx0cmFpbGluZ1NwYWNlTmV3TGluZTp0LnRyYWlsaW5nU3BhY2VOZXdMaW5lLG1kX2luc2lkZTp0Lm1kX2luc2lkZX19LHRva2VuOmZ1bmN0aW9uKHQsZSl7aWYodC5zb2woKSl7aWYodC5tYXRjaCgvXlxzKiQvLCEwKSlyZXR1cm4gZS5wcmV2TGluZUhhc0NvbnRlbnQ9ITEsaShlKTtlLnByZXZMaW5lSGFzQ29udGVudD1lLnRoaXNMaW5lSGFzQ29udGVudCxlLnRoaXNMaW5lSGFzQ29udGVudD0hMCxlLmhlYWRlcj0wLGUudGFza0xpc3Q9ITEsZS5jb2RlPSExLGUudHJhaWxpbmdTcGFjZT0wLGUudHJhaWxpbmdTcGFjZU5ld0xpbmU9ITEsZS5mPWUuYmxvY2s7dmFyIHI9dC5tYXRjaCgvXlxzKi8sITApWzBdLnJlcGxhY2UoL1x0L2csIiAgICAiKS5sZW5ndGgsbj00Kk1hdGguZmxvb3IoKHItZS5pbmRlbnRhdGlvbikvNCk7bj40JiYobj00KTt2YXIgbz1lLmluZGVudGF0aW9uK247aWYoZS5pbmRlbnRhdGlvbkRpZmY9by1lLmluZGVudGF0aW9uLGUuaW5kZW50YXRpb249byxyPjApcmV0dXJuIG51bGx9cmV0dXJuIGUuZih0LGUpfSxibGFua0xpbmU6aSxnZXRUeXBlOnN9fSwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbWFya2Rvd24iLCJtYXJrZG93biIpLENvZGVNaXJyb3IuZGVmaW5lTW9kZSgieG1sIixmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiByKHIpe3JldHVybiBlLnRva2VuaXplPXIscih0LGUpfXZhciBpPXQubmV4dCgpO2lmKCI8Ij09aSl7aWYodC5lYXQoIiEiKSlyZXR1cm4gdC5lYXQoIlsiKT90Lm1hdGNoKCJDREFUQVsiKT9yKG8oImF0b20iLCJdXT4iKSk6bnVsbDp0Lm1hdGNoKCItLSIpP3IobygiY29tbWVudCIsIi0tPiIpKTp0Lm1hdGNoKCJET0NUWVBFIiwhMCwhMCk/KHQuZWF0V2hpbGUoL1tcd1wuX1wtXS8pLHIobCgxKSkpOm51bGw7aWYodC5lYXQoIj8iKSlyZXR1cm4gdC5lYXRXaGlsZSgvW1x3XC5fXC1dLyksZS50b2tlbml6ZT1vKCJtZXRhIiwiPz4iKSwibWV0YSI7dmFyIGE9dC5lYXQoIi8iKTt4PSIiO2Zvcih2YXIgcztzPXQuZWF0KC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKTspeCs9cztyZXR1cm4geD8oYj1hPyJjbG9zZVRhZyI6Im9wZW5UYWciLGUudG9rZW5pemU9biwidGFnIik6InRhZyBlcnJvciJ9aWYoIiYiPT1pKXt2YXIgdTtyZXR1cm4gdT10LmVhdCgiIyIpP3QuZWF0KCJ4Iik/dC5lYXRXaGlsZSgvW2EtZkEtRlxkXS8pJiZ0LmVhdCgiOyIpOnQuZWF0V2hpbGUoL1tcZF0vKSYmdC5lYXQoIjsiKTp0LmVhdFdoaWxlKC9bXHdcLlwtOl0vKSYmdC5lYXQoIjsiKSx1PyJhdG9tIjoiZXJyb3IifXJldHVybiB0LmVhdFdoaWxlKC9bXiY8XS8pLG51bGx9ZnVuY3Rpb24gbih0LGUpe3ZhciBuPXQubmV4dCgpO2lmKCI+Ij09bnx8Ii8iPT1uJiZ0LmVhdCgiPiIpKXJldHVybiBlLnRva2VuaXplPXIsYj0iPiI9PW4/ImVuZFRhZyI6InNlbGZjbG9zZVRhZyIsInRhZyI7aWYoIj0iPT1uKXJldHVybiBiPSJlcXVhbHMiLG51bGw7aWYoIjwiPT1uKXtlLnRva2VuaXplPXI7dmFyIG89ZS50b2tlbml6ZSh0LGUpO3JldHVybiBvP28rIiBlcnJvciI6ImVycm9yIn1yZXR1cm4vW1wnXCJdLy50ZXN0KG4pPyhlLnRva2VuaXplPWkobiksZS5zdHJpbmdTdGFydENvbD10LmNvbHVtbigpLGUudG9rZW5pemUodCxlKSk6KHQuZWF0V2hpbGUoL1teXHNcdTAwYTA9PD5cIlwnXS8pLCJ3b3JkIil9ZnVuY3Rpb24gaSh0KXt2YXIgZT1mdW5jdGlvbihlLHIpe2Zvcig7IWUuZW9sKCk7KWlmKGUubmV4dCgpPT10KXtyLnRva2VuaXplPW47YnJlYWt9cmV0dXJuInN0cmluZyJ9O3JldHVybiBlLmlzSW5BdHRyaWJ1dGU9ITAsZX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7Zm9yKDshbi5lb2woKTspe2lmKG4ubWF0Y2goZSkpe2kudG9rZW5pemU9cjticmVha31uLm5leHQoKX1yZXR1cm4gdH19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtmb3IodmFyIGk7bnVsbCE9KGk9ZS5uZXh0KCkpOyl7aWYoIjwiPT1pKXJldHVybiBuLnRva2VuaXplPWwodCsxKSxuLnRva2VuaXplKGUsbik7aWYoIj4iPT1pKXtpZigxPT10KXtuLnRva2VuaXplPXI7YnJlYWt9cmV0dXJuIG4udG9rZW5pemU9bCh0LTEpLG4udG9rZW5pemUoZSxuKX19cmV0dXJuIm1ldGEifX1mdW5jdGlvbiBhKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMTt0Pj0wO3QtLSlDLmNjLnB1c2goYXJndW1lbnRzW3RdKX1mdW5jdGlvbiBzKCl7cmV0dXJuIGEuYXBwbHkobnVsbCxhcmd1bWVudHMpLCEwfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1ULmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHQpfHxDLmNvbnRleHQmJkMuY29udGV4dC5ub0luZGVudDtDLmNvbnRleHQ9e3ByZXY6Qy5jb250ZXh0LHRhZ05hbWU6dCxpbmRlbnQ6Qy5pbmRlbnRlZCxzdGFydE9mTGluZTplLG5vSW5kZW50OnJ9fWZ1bmN0aW9uIGMoKXtDLmNvbnRleHQmJihDLmNvbnRleHQ9Qy5jb250ZXh0LnByZXYpfWZ1bmN0aW9uIGYodCl7aWYoIm9wZW5UYWciPT10KXJldHVybiBDLnRhZ05hbWU9eCxDLnRhZ1N0YXJ0PWsuY29sdW1uKCkscyhtLGgoQy5zdGFydE9mTGluZSkpO2lmKCJjbG9zZVRhZyI9PXQpe3ZhciBlPSExO3JldHVybiBDLmNvbnRleHQ/Qy5jb250ZXh0LnRhZ05hbWUhPXgmJihULmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoQy5jb250ZXh0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSkmJmMoKSxlPSFDLmNvbnRleHR8fEMuY29udGV4dC50YWdOYW1lIT14KTplPSEwLGUmJih3PSJlcnJvciIpLHMoZChlKSl9cmV0dXJuIHMoKX1mdW5jdGlvbiBoKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1DLnRhZ05hbWU7cmV0dXJuIEMudGFnTmFtZT1DLnRhZ1N0YXJ0PW51bGwsInNlbGZjbG9zZVRhZyI9PWV8fCJlbmRUYWciPT1lJiZULmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShyLnRvTG93ZXJDYXNlKCkpPyhwKHIudG9Mb3dlckNhc2UoKSkscygpKToiZW5kVGFnIj09ZT8ocChyLnRvTG93ZXJDYXNlKCkpLHUocix0KSxzKCkpOnMoKX19ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJih3PSJlcnJvciIpLCJlbmRUYWciPT1lPyhjKCkscygpKToodz0iZXJyb3IiLHMoYXJndW1lbnRzLmNhbGxlZSkpfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZTs7KXtpZighQy5jb250ZXh0KXJldHVybjtpZihlPUMuY29udGV4dC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIVQuY29udGV4dEdyYWJiZXJzLmhhc093blByb3BlcnR5KGUpfHwhVC5jb250ZXh0R3JhYmJlcnNbZV0uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2MoKX19ZnVuY3Rpb24gbSh0KXtyZXR1cm4id29yZCI9PXQ/KHc9ImF0dHJpYnV0ZSIscyhnLG0pKToiZW5kVGFnIj09dHx8InNlbGZjbG9zZVRhZyI9PXQ/YSgpOih3PSJlcnJvciIscyhtKSl9ZnVuY3Rpb24gZyh0KXtpZigiZXF1YWxzIj09dClyZXR1cm4gcyh2LG0pO2lmKFQuYWxsb3dNaXNzaW5nKXtpZigid29yZCI9PXQpcmV0dXJuIHc9ImF0dHJpYnV0ZSIscyhnLG0pfWVsc2Ugdz0iZXJyb3IiO3JldHVybiJlbmRUYWciPT10fHwic2VsZmNsb3NlVGFnIj09dD9hKCk6cygpfWZ1bmN0aW9uIHYodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KToid29yZCI9PXQmJlQuYWxsb3dVbnF1b3RlZD8odz0ic3RyaW5nIixzKCkpOih3PSJlcnJvciIsImVuZFRhZyI9PXR8fCJzZWxmQ2xvc2VUYWciPT10P2EoKTpzKCkpfWZ1bmN0aW9uIHkodCl7cmV0dXJuInN0cmluZyI9PXQ/cyh5KTphKCl9dmFyIHgsYixDLGssdyxMPXQuaW5kZW50VW5pdCxTPWUubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yfHwxLE09ZS5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnfHwhMCxUPWUuaHRtbE1vZGU/e2F1dG9TZWxmQ2xvc2Vyczp7YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxjb21tYW5kOiEwLGVtYmVkOiEwLGZyYW1lOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9LGltcGxpY2l0bHlDbG9zZWQ6e2RkOiEwLGxpOiEwLG9wdGdyb3VwOiEwLG9wdGlvbjohMCxwOiEwLHJwOiEwLHJ0OiEwLHRib2R5OiEwLHRkOiEwLHRmb290OiEwLHRoOiEwLHRyOiEwfSxjb250ZXh0R3JhYmJlcnM6e2RkOntkZDohMCxkdDohMH0sZHQ6e2RkOiEwLGR0OiEwfSxsaTp7bGk6ITB9LG9wdGlvbjp7b3B0aW9uOiEwLG9wdGdyb3VwOiEwfSxvcHRncm91cDp7b3B0Z3JvdXA6ITB9LHA6e2FkZHJlc3M6ITAsYXJ0aWNsZTohMCxhc2lkZTohMCxibG9ja3F1b3RlOiEwLGRpcjohMCxkaXY6ITAsZGw6ITAsZmllbGRzZXQ6ITAsZm9vdGVyOiEwLGZvcm06ITAsaDE6ITAsaDI6ITAsaDM6ITAsaDQ6ITAsaDU6ITAsaDY6ITAsaGVhZGVyOiEwLGhncm91cDohMCxocjohMCxtZW51OiEwLG5hdjohMCxvbDohMCxwOiEwLHByZTohMCxzZWN0aW9uOiEwLHRhYmxlOiEwLHVsOiEwfSxycDp7cnA6ITAscnQ6ITB9LHJ0OntycDohMCxydDohMH0sdGJvZHk6e3Rib2R5OiEwLHRmb290OiEwfSx0ZDp7dGQ6ITAsdGg6ITB9LHRmb290Ont0Ym9keTohMH0sdGg6e3RkOiEwLHRoOiEwfSx0aGVhZDp7dGJvZHk6ITAsdGZvb3Q6ITB9LHRyOnt0cjohMH19LGRvTm90SW5kZW50OntwcmU6ITB9LGFsbG93VW5xdW90ZWQ6ITAsYWxsb3dNaXNzaW5nOiEwfTp7YXV0b1NlbGZDbG9zZXJzOnt9LGltcGxpY2l0bHlDbG9zZWQ6e30sY29udGV4dEdyYWJiZXJzOnt9LGRvTm90SW5kZW50Ont9LGFsbG93VW5xdW90ZWQ6ITEsYWxsb3dNaXNzaW5nOiExfSxBPWUuYWxpZ25DREFUQTtyZXR1cm57c3RhcnRTdGF0ZTpmdW5jdGlvbigpe3JldHVybnt0b2tlbml6ZTpyLGNjOltdLGluZGVudGVkOjAsc3RhcnRPZkxpbmU6ITAsdGFnTmFtZTpudWxsLHRhZ1N0YXJ0Om51bGwsY29udGV4dDpudWxsfX0sdG9rZW46ZnVuY3Rpb24odCxlKXtpZighZS50YWdOYW1lJiZ0LnNvbCgpJiYoZS5zdGFydE9mTGluZT0hMCxlLmluZGVudGVkPXQuaW5kZW50YXRpb24oKSksdC5lYXRTcGFjZSgpKXJldHVybiBudWxsO3c9Yj14PW51bGw7dmFyIHI9ZS50b2tlbml6ZSh0LGUpO2lmKGUudHlwZT1iLChyfHxiKSYmImNvbW1lbnQiIT1yKWZvcihDPWUsaz10Ozspe3ZhciBuPWUuY2MucG9wKCl8fGY7aWYobihifHxyKSlicmVha31yZXR1cm4gZS5zdGFydE9mTGluZT0hMSx3JiYocj0iZXJyb3IiPT13P3IrIiBlcnJvciI6dykscn0saW5kZW50OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10LmNvbnRleHQ7aWYodC50b2tlbml6ZS5pc0luQXR0cmlidXRlKXJldHVybiB0LnN0cmluZ1N0YXJ0Q29sKzE7aWYodC50b2tlbml6ZSE9biYmdC50b2tlbml6ZSE9cnx8byYmby5ub0luZGVudClyZXR1cm4gaT9pLm1hdGNoKC9eKFxzKikvKVswXS5sZW5ndGg6MDtpZih0LnRhZ05hbWUpcmV0dXJuIE0/dC50YWdTdGFydCt0LnRhZ05hbWUubGVuZ3RoKzI6dC50YWdTdGFydCtMKlM7aWYoQSYmLzwhXFtDREFUQVxbLy50ZXN0KGUpKXJldHVybiAwO2ZvcihvJiYvXjxcLy8udGVzdChlKSYmKG89by5wcmV2KTtvJiYhby5zdGFydE9mTGluZTspbz1vLnByZXY7cmV0dXJuIG8/by5pbmRlbnQrTDowfSxlbGVjdHJpY0NoYXJzOiIvIixibG9ja0NvbW1lbnRTdGFydDoiPCEtLSIsYmxvY2tDb21tZW50RW5kOiItLT4iLGNvbmZpZ3VyYXRpb246ZS5odG1sTW9kZT8iaHRtbCI6InhtbCIsaGVscGVyVHlwZTplLmh0bWxNb2RlPyJodG1sIjoieG1sIn19KSxDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveG1sIiwieG1sIiksQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCJ4bWwiKSxDb2RlTWlycm9yLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIil8fENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIix7bmFtZToieG1sIixodG1sTW9kZTohMH0pO1BLBwiT1g9diDIAAIgyAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABwAAABzdGF0aWNcbGliXGNvZGVtaXJyb3IubWluLmpzd2luZG93LkNvZGVNaXJyb3I9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChyLG4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChyLG4pO3RoaXMub3B0aW9ucz1uPW58fHt9O2Zvcih2YXIgaSBpbiBhbykhbi5oYXNPd25Qcm9wZXJ0eShpKSYmYW8uaGFzT3duUHJvcGVydHkoaSkmJihuW2ldPWFvW2ldKTtoKG4pO3ZhciBvPSJzdHJpbmciPT10eXBlb2Ygbi52YWx1ZT8wOm4udmFsdWUuZmlyc3QsbD10aGlzLmRpc3BsYXk9ZShyLG8pO2wud3JhcHBlci5Db2RlTWlycm9yPXRoaXMsdSh0aGlzKSxuLmF1dG9mb2N1cyYmIVZpJiZwZSh0aGlzKSx0aGlzLnN0YXRlPXtrZXlNYXBzOltdLG92ZXJsYXlzOltdLG1vZGVHZW46MCxvdmVyd3JpdGU6ITEsZm9jdXNlZDohMSxzdXBwcmVzc0VkaXRzOiExLHBhc3RlSW5jb21pbmc6ITEsZHJhZ2dpbmdUZXh0OiExLGhpZ2hsaWdodDpuZXcgJG59LHModGhpcyksbi5saW5lV3JhcHBpbmcmJih0aGlzLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIik7dmFyIGE9bi52YWx1ZTsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyB3byhuLnZhbHVlLG4ubW9kZSkpLGxlKHRoaXMscG4pKHRoaXMsYSksQWkmJnNldFRpbWVvdXQoaWkoZGUsdGhpcywhMCksMjApLG1lKHRoaXMpO3ZhciBjO3RyeXtjPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXR9Y2F0Y2goZil7fWN8fG4uYXV0b2ZvY3VzJiYhVmk/c2V0VGltZW91dChpaShFZSx0aGlzKSwyMCk6emUodGhpcyksbGUodGhpcyxmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBzbylzby5wcm9wZXJ0eUlzRW51bWVyYWJsZSh0KSYmc29bdF0odGhpcyxuW3RdLHVvKTtmb3IodmFyIGU9MDtlPHBvLmxlbmd0aDsrK2UpcG9bZV0odGhpcyl9KSgpfWZ1bmN0aW9uIGUodCxlKXt2YXIgcj17fSxuPXIuaW5wdXQ9c2koInRleHRhcmVhIixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmU7IGZvbnQtc2l6ZTogNHB4OyIpO3JldHVybiBXaT9uLnN0eWxlLndpZHRoPSIxMDAwcHgiOm4uc2V0QXR0cmlidXRlKCJ3cmFwIiwib2ZmIiksR2kmJihuLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkIGJsYWNrIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0Iiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCJmYWxzZSIpLHIuaW5wdXREaXY9c2koImRpdiIsW25dLG51bGwsIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iiksci5zY3JvbGxiYXJIPXNpKCJkaXYiLFtzaSgiZGl2IixudWxsLG51bGwsImhlaWdodDogMXB4IildLCJDb2RlTWlycm9yLWhzY3JvbGxiYXIiKSxyLnNjcm9sbGJhclY9c2koImRpdiIsW3NpKCJkaXYiLG51bGwsbnVsbCwid2lkdGg6IDFweCIpXSwiQ29kZU1pcnJvci12c2Nyb2xsYmFyIiksci5zY3JvbGxiYXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyIiksci5ndXR0ZXJGaWxsZXI9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXItZmlsbGVyIiksci5saW5lRGl2PXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItY29kZSIpLHIuc2VsZWN0aW9uRGl2PXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxIiksci5jdXJzb3I9c2koImRpdiIsIsKgIiwiQ29kZU1pcnJvci1jdXJzb3IiKSxyLm90aGVyQ3Vyc29yPXNpKCJkaXYiLCLCoCIsIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIiksci5tZWFzdXJlPXNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItbWVhc3VyZSIpLHIubGluZVNwYWNlPXNpKCJkaXYiLFtyLm1lYXN1cmUsci5zZWxlY3Rpb25EaXYsci5saW5lRGl2LHIuY3Vyc29yLHIub3RoZXJDdXJzb3JdLG51bGwsInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZSIpLHIubW92ZXI9c2koImRpdiIsW3NpKCJkaXYiLFtyLmxpbmVTcGFjZV0sIkNvZGVNaXJyb3ItbGluZXMiKV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIiksci5zaXplcj1zaSgiZGl2Iixbci5tb3Zlcl0sIkNvZGVNaXJyb3Itc2l6ZXIiKSxyLmhlaWdodEZvcmNlcj1zaSgiZGl2IixudWxsLG51bGwsInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAiK1RvKyJweDsgd2lkdGg6IDFweDsiKSxyLmd1dHRlcnM9c2koImRpdiIsbnVsbCwiQ29kZU1pcnJvci1ndXR0ZXJzIiksci5saW5lR3V0dGVyPW51bGwsci5zY3JvbGxlcj1zaSgiZGl2Iixbci5zaXplcixyLmhlaWdodEZvcmNlcixyLmd1dHRlcnNdLCJDb2RlTWlycm9yLXNjcm9sbCIpLHIuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIi0xIiksci53cmFwcGVyPXNpKCJkaXYiLFtyLmlucHV0RGl2LHIuc2Nyb2xsYmFySCxyLnNjcm9sbGJhclYsci5zY3JvbGxiYXJGaWxsZXIsci5ndXR0ZXJGaWxsZXIsci5zY3JvbGxlcl0sIkNvZGVNaXJyb3IiKSxIaSYmKHIuZ3V0dGVycy5zdHlsZS56SW5kZXg9LTEsci5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQ9MCksdC5hcHBlbmRDaGlsZD90LmFwcGVuZENoaWxkKHIud3JhcHBlcik6dChyLndyYXBwZXIpLEdpJiYobi5zdHlsZS53aWR0aD0iMHB4IiksV2l8fChyLnNjcm9sbGVyLmRyYWdnYWJsZT0hMCksRmk/KHIuaW5wdXREaXYuc3R5bGUuaGVpZ2h0PSIxcHgiLHIuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIik6SGkmJihyLnNjcm9sbGJhckguc3R5bGUubWluV2lkdGg9ci5zY3JvbGxiYXJWLnN0eWxlLm1pbldpZHRoPSIxOHB4Iiksci52aWV3T2Zmc2V0PXIubGFzdFNpemVDPTAsci5zaG93aW5nRnJvbT1yLnNob3dpbmdUbz1lLHIubGluZU51bVdpZHRoPXIubGluZU51bUlubmVyV2lkdGg9ci5saW5lTnVtQ2hhcnM9bnVsbCxyLnByZXZJbnB1dD0iIixyLmFsaWduV2lkZ2V0cz0hMSxyLnBvbGxpbmdGYXN0PSExLHIucG9sbD1uZXcgJG4sci5jYWNoZWRDaGFyV2lkdGg9ci5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsci5tZWFzdXJlTGluZUNhY2hlPVtdLHIubWVhc3VyZUxpbmVDYWNoZVBvcz0wLHIuaW5hY2N1cmF0ZVNlbGVjdGlvbj0hMSxyLm1heExpbmU9bnVsbCxyLm1heExpbmVMZW5ndGg9MCxyLm1heExpbmVDaGFuZ2VkPSExLHIud2hlZWxEWD1yLndoZWVsRFk9ci53aGVlbFN0YXJ0WD1yLndoZWVsU3RhcnRZPW51bGwscn1mdW5jdGlvbiByKGUpe2UuZG9jLm1vZGU9dC5nZXRNb2RlKGUub3B0aW9ucyxlLmRvYy5tb2RlT3B0aW9uKSxlLmRvYy5pdGVyKGZ1bmN0aW9uKHQpe3Quc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpfSksZS5kb2MuZnJvbnRpZXI9ZS5kb2MuZmlyc3QsVyhlLDEwMCksZS5zdGF0ZS5tb2RlR2VuKyssZS5jdXJPcCYmdWUoZSl9ZnVuY3Rpb24gbih0KXt0Lm9wdGlvbnMubGluZVdyYXBwaW5nPyh0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci13cmFwIix0LmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGg9IiIpOih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCIiKSxmKHQpKSxvKHQpLHVlKHQpLF8odCksc2V0VGltZW91dChmdW5jdGlvbigpe2QodCl9LDEwMCl9ZnVuY3Rpb24gaSh0KXt2YXIgZT1yZSh0LmRpc3BsYXkpLHI9dC5vcHRpb25zLmxpbmVXcmFwcGluZyxuPXImJk1hdGgubWF4KDUsdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoL25lKHQuZGlzcGxheSktMyk7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBWcih0LmRvYyxpKT8wOnI/KE1hdGguY2VpbChpLnRleHQubGVuZ3RoL24pfHwxKSplOmV9fWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5kb2Mscj1pKHQpO2UuaXRlcihmdW5jdGlvbih0KXt2YXIgZT1yKHQpO2UhPXQuaGVpZ2h0JiZ5bih0LGUpfSl9ZnVuY3Rpb24gbCh0KXt2YXIgZT12b1t0Lm9wdGlvbnMua2V5TWFwXSxyPWUuc3R5bGU7dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lPXQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9ccypjbS1rZXltYXAtXFMrL2csIiIpKyhyPyIgY20ta2V5bWFwLSIrcjoiIiksdC5zdGF0ZS5kaXNhYmxlSW5wdXQ9ZS5kaXNhYmxlSW5wdXR9ZnVuY3Rpb24gcyh0KXt0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWU9dC5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLXMtXFMrL2csIiIpK3Qub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywiIGNtLXMtIiksXyh0KX1mdW5jdGlvbiBhKHQpe3UodCksdWUodCksc2V0VGltZW91dChmdW5jdGlvbigpe2codCl9LDIwKX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQuZGlzcGxheS5ndXR0ZXJzLHI9dC5vcHRpb25zLmd1dHRlcnM7YWkoZSk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl0sbz1lLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3ItZ3V0dGVyICIraSkpOyJDb2RlTWlycm9yLWxpbmVudW1iZXJzIj09aSYmKHQuZGlzcGxheS5saW5lR3V0dGVyPW8sby5zdHlsZS53aWR0aD0odC5kaXNwbGF5LmxpbmVOdW1XaWR0aHx8MSkrInB4Iil9ZS5zdHlsZS5kaXNwbGF5PW4/IiI6Im5vbmUifWZ1bmN0aW9uIGModCxlKXtpZigwPT1lLmhlaWdodClyZXR1cm4gMDtmb3IodmFyIHIsbj1lLnRleHQubGVuZ3RoLGk9ZTtyPVJyKGkpOyl7dmFyIG89ci5maW5kKCk7aT1nbih0LG8uZnJvbS5saW5lKSxuKz1vLmZyb20uY2gtby50by5jaH1mb3IoaT1lO3I9QnIoaSk7KXt2YXIgbz1yLmZpbmQoKTtuLT1pLnRleHQubGVuZ3RoLW8uZnJvbS5jaCxpPWduKHQsby50by5saW5lKSxuKz1pLnRleHQubGVuZ3RoLW8udG8uY2h9cmV0dXJuIG59ZnVuY3Rpb24gZih0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYztlLm1heExpbmU9Z24ocixyLmZpcnN0KSxlLm1heExpbmVMZW5ndGg9YyhyLGUubWF4TGluZSksZS5tYXhMaW5lQ2hhbmdlZD0hMCxyLml0ZXIoZnVuY3Rpb24odCl7dmFyIG49YyhyLHQpO24+ZS5tYXhMaW5lTGVuZ3RoJiYoZS5tYXhMaW5lTGVuZ3RoPW4sZS5tYXhMaW5lPXQpfSl9ZnVuY3Rpb24gaCh0KXt2YXIgZT10aSh0Lmd1dHRlcnMsIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiKTstMT09ZSYmdC5saW5lTnVtYmVycz90Lmd1dHRlcnM9dC5ndXR0ZXJzLmNvbmNhdChbIkNvZGVNaXJyb3ItbGluZW51bWJlcnMiXSk6ZT4tMSYmIXQubGluZU51bWJlcnMmJih0Lmd1dHRlcnM9dC5ndXR0ZXJzLnNsaWNlKDApLHQuZ3V0dGVycy5zcGxpY2UoZSwxKSl9ZnVuY3Rpb24gZCh0KXt2YXIgZT10LmRpc3BsYXkscj10LmRvYy5oZWlnaHQsbj1yK0YoZSk7ZS5zaXplci5zdHlsZS5taW5IZWlnaHQ9ZS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wPW4rInB4IixlLmd1dHRlcnMuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KG4sZS5zY3JvbGxlci5jbGllbnRIZWlnaHQtVG8pKyJweCI7dmFyIGk9TWF0aC5tYXgobixlLnNjcm9sbGVyLnNjcm9sbEhlaWdodCksbz1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoPmUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrMSxsPWk+ZS5zY3JvbGxlci5jbGllbnRIZWlnaHQrMTtsPyhlLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheT0iYmxvY2siLGUuc2Nyb2xsYmFyVi5zdHlsZS5ib3R0b209bz9kaShlLm1lYXN1cmUpKyJweCI6IjAiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1pLWUuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0K2Uuc2Nyb2xsYmFyVi5jbGllbnRIZWlnaHQrInB4Iik6KGUuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5PSIiLGUuc2Nyb2xsYmFyVi5maXJzdENoaWxkLnN0eWxlLmhlaWdodD0iMCIpLG8/KGUuc2Nyb2xsYmFySC5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zY3JvbGxiYXJILnN0eWxlLnJpZ2h0PWw/ZGkoZS5tZWFzdXJlKSsicHgiOiIwIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD1lLnNjcm9sbGVyLnNjcm9sbFdpZHRoLWUuc2Nyb2xsZXIuY2xpZW50V2lkdGgrZS5zY3JvbGxiYXJILmNsaWVudFdpZHRoKyJweCIpOihlLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheT0iIixlLnNjcm9sbGJhckguZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iMCIpLG8mJmw/KGUuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQ9ZS5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGg9ZGkoZS5tZWFzdXJlKSsicHgiKTplLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5PSIiLG8mJnQub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciYmdC5vcHRpb25zLmZpeGVkR3V0dGVyPyhlLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0PWRpKGUubWVhc3VyZSkrInB4IixlLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aD1lLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4Iik6ZS5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheT0iIixQaSYmMD09PWRpKGUubWVhc3VyZSkmJihlLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGg9ZS5zY3JvbGxiYXJILnN0eWxlLm1pbkhlaWdodD1SaT8iMThweCI6IjEycHgiLGUuc2Nyb2xsYmFyVi5zdHlsZS5wb2ludGVyRXZlbnRzPWUuc2Nyb2xsYmFySC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIil9ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49dC5zY3JvbGxlci5zY3JvbGxUb3AsaT10LndyYXBwZXIuY2xpZW50SGVpZ2h0OyJudW1iZXIiPT10eXBlb2Ygcj9uPXI6ciYmKG49ci50b3AsaT1yLmJvdHRvbS1yLnRvcCksbj1NYXRoLmZsb29yKG4tSSh0KSk7dmFyIG89TWF0aC5jZWlsKG4raSk7cmV0dXJue2Zyb206eG4oZSxuKSx0bzp4bihlLG8pfX1mdW5jdGlvbiBnKHQpe3ZhciBlPXQuZGlzcGxheTtpZihlLmFsaWduV2lkZ2V0c3x8ZS5ndXR0ZXJzLmZpcnN0Q2hpbGQmJnQub3B0aW9ucy5maXhlZEd1dHRlcil7Zm9yKHZhciByPXkoZSktZS5zY3JvbGxlci5zY3JvbGxMZWZ0K3QuZG9jLnNjcm9sbExlZnQsbj1lLmd1dHRlcnMub2Zmc2V0V2lkdGgsaT1yKyJweCIsbz1lLmxpbmVEaXYuZmlyc3RDaGlsZDtvO289by5uZXh0U2libGluZylpZihvLmFsaWduYWJsZSlmb3IodmFyIGw9MCxzPW8uYWxpZ25hYmxlO2w8cy5sZW5ndGg7KytsKXNbbF0uc3R5bGUubGVmdD1pO3Qub3B0aW9ucy5maXhlZEd1dHRlciYmKGUuZ3V0dGVycy5zdHlsZS5sZWZ0PXIrbisicHgiKX19ZnVuY3Rpb24gbSh0KXtpZighdC5vcHRpb25zLmxpbmVOdW1iZXJzKXJldHVybiExO3ZhciBlPXQuZG9jLHI9dih0Lm9wdGlvbnMsZS5maXJzdCtlLnNpemUtMSksbj10LmRpc3BsYXk7aWYoci5sZW5ndGghPW4ubGluZU51bUNoYXJzKXt2YXIgaT1uLm1lYXN1cmUuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3NpKCJkaXYiLHIpXSwiQ29kZU1pcnJvci1saW5lbnVtYmVyIENvZGVNaXJyb3ItZ3V0dGVyLWVsdCIpKSxvPWkuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCxsPWkub2Zmc2V0V2lkdGgtbztyZXR1cm4gbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPSIiLG4ubGluZU51bUlubmVyV2lkdGg9TWF0aC5tYXgobyxuLmxpbmVHdXR0ZXIub2Zmc2V0V2lkdGgtbCksbi5saW5lTnVtV2lkdGg9bi5saW5lTnVtSW5uZXJXaWR0aCtsLG4ubGluZU51bUNoYXJzPW4ubGluZU51bUlubmVyV2lkdGg/ci5sZW5ndGg6LTEsbi5saW5lR3V0dGVyLnN0eWxlLndpZHRoPW4ubGluZU51bVdpZHRoKyJweCIsITB9cmV0dXJuITF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiBTdHJpbmcodC5saW5lTnVtYmVyRm9ybWF0dGVyKGUrdC5maXJzdExpbmVOdW1iZXIpKX1mdW5jdGlvbiB5KHQpe3JldHVybiBmaSh0LnNjcm9sbGVyKS5sZWZ0LWZpKHQuc2l6ZXIpLmxlZnR9ZnVuY3Rpb24gYih0LGUscixuKXtmb3IodmFyIGksbz10LmRpc3BsYXkuc2hvd2luZ0Zyb20sbD10LmRpc3BsYXkuc2hvd2luZ1RvLHM9cCh0LmRpc3BsYXksdC5kb2MsciksYT0hMDs7YT0hMSl7dmFyIHU9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoO2lmKCF4KHQsZSxzLG4pKWJyZWFrO2lmKGk9ITAsZT1bXSxBKHQpLGQodCksYSYmdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmdSE9dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKW49ITA7ZWxzZSBpZihuPSExLHImJihyPU1hdGgubWluKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwibnVtYmVyIj09dHlwZW9mIHI/cjpyLnRvcCkpLHM9cCh0LmRpc3BsYXksdC5kb2Mscikscy5mcm9tPj10LmRpc3BsYXkuc2hvd2luZ0Zyb20mJnMudG88PXQuZGlzcGxheS5zaG93aW5nVG8pYnJlYWt9cmV0dXJuIGkmJihVbih0LCJ1cGRhdGUiLHQpLCh0LmRpc3BsYXkuc2hvd2luZ0Zyb20hPW98fHQuZGlzcGxheS5zaG93aW5nVG8hPWwpJiZVbih0LCJ2aWV3cG9ydENoYW5nZSIsdCx0LmRpc3BsYXkuc2hvd2luZ0Zyb20sdC5kaXNwbGF5LnNob3dpbmdUbykpLGl9ZnVuY3Rpb24geCh0LGUscixuKXt2YXIgaT10LmRpc3BsYXksbz10LmRvYztpZighaS53cmFwcGVyLmNsaWVudFdpZHRoKXJldHVybiBpLnNob3dpbmdGcm9tPWkuc2hvd2luZ1RvPW8uZmlyc3QsaS52aWV3T2Zmc2V0PTAsdm9pZCAwO2lmKCEoIW4mJjA9PWUubGVuZ3RoJiZyLmZyb20+aS5zaG93aW5nRnJvbSYmci50bzxpLnNob3dpbmdUbykpe20odCkmJihlPVt7ZnJvbTpvLmZpcnN0LHRvOm8uZmlyc3Qrby5zaXplfV0pO3ZhciBsPWkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdD1pLmd1dHRlcnMub2Zmc2V0V2lkdGgrInB4IjtpLnNjcm9sbGJhckguc3R5bGUubGVmdD10Lm9wdGlvbnMuZml4ZWRHdXR0ZXI/bDoiMCI7dmFyIHM9MS8wO2lmKHQub3B0aW9ucy5saW5lTnVtYmVycylmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSllW2FdLmRpZmYmJmVbYV0uZnJvbTxzJiYocz1lW2FdLmZyb20pO3ZhciB1PW8uZmlyc3Qrby5zaXplLGM9TWF0aC5tYXgoci5mcm9tLXQub3B0aW9ucy52aWV3cG9ydE1hcmdpbixvLmZpcnN0KSxmPU1hdGgubWluKHUsci50byt0Lm9wdGlvbnMudmlld3BvcnRNYXJnaW4pO2lmKGkuc2hvd2luZ0Zyb208YyYmYy1pLnNob3dpbmdGcm9tPDIwJiYoYz1NYXRoLm1heChvLmZpcnN0LGkuc2hvd2luZ0Zyb20pKSxpLnNob3dpbmdUbz5mJiZpLnNob3dpbmdUby1mPDIwJiYoZj1NYXRoLm1pbih1LGkuc2hvd2luZ1RvKSksUWkpZm9yKGM9Ym4oR3IobyxnbihvLGMpKSk7dT5mJiZWcihvLGduKG8sZikpOykrK2Y7dmFyIGg9W3tmcm9tOk1hdGgubWF4KGkuc2hvd2luZ0Zyb20sby5maXJzdCksdG86TWF0aC5taW4oaS5zaG93aW5nVG8sdSl9XTtpZihoPWhbMF0uZnJvbT49aFswXS50bz9bXTpMKGgsZSksUWkpZm9yKHZhciBhPTA7YTxoLmxlbmd0aDsrK2EpZm9yKHZhciBkLHA9aFthXTtkPUJyKGduKG8scC50by0xKSk7KXt2YXIgZz1kLmZpbmQoKS5mcm9tLmxpbmU7aWYoIShnPnAuZnJvbSkpe2guc3BsaWNlKGEtLSwxKTticmVha31wLnRvPWd9Zm9yKHZhciB2PTAsYT0wO2E8aC5sZW5ndGg7KythKXt2YXIgcD1oW2FdO3AuZnJvbTxjJiYocC5mcm9tPWMpLHAudG8+ZiYmKHAudG89ZikscC5mcm9tPj1wLnRvP2guc3BsaWNlKGEtLSwxKTp2Kz1wLnRvLXAuZnJvbX1pZighbiYmdj09Zi1jJiZjPT1pLnNob3dpbmdGcm9tJiZmPT1pLnNob3dpbmdUbylyZXR1cm4gdyh0KSx2b2lkIDA7aC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZnJvbS1lLmZyb219KTt0cnl7dmFyIHk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudH1jYXRjaChiKXt9LjcqKGYtYyk+diYmKGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSJub25lIiksUyh0LGMsZixoLHMpLGkubGluZURpdi5zdHlsZS5kaXNwbGF5PSIiLHkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPXkmJnkub2Zmc2V0SGVpZ2h0JiZ5LmZvY3VzKCk7dmFyIHg9YyE9aS5zaG93aW5nRnJvbXx8ZiE9aS5zaG93aW5nVG98fGkubGFzdFNpemVDIT1pLndyYXBwZXIuY2xpZW50SGVpZ2h0O3JldHVybiB4JiYoaS5sYXN0U2l6ZUM9aS53cmFwcGVyLmNsaWVudEhlaWdodCxXKHQsNDAwKSksaS5zaG93aW5nRnJvbT1jLGkuc2hvd2luZ1RvPWYsQyh0KSx3KHQpLCEwfX1mdW5jdGlvbiBDKHQpe2Zvcih2YXIgZSxyPXQuZGlzcGxheSxuPXIubGluZURpdi5vZmZzZXRUb3AsaT1yLmxpbmVEaXYuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylpZihpLmxpbmVPYmope2lmKEhpKXt2YXIgbz1pLm9mZnNldFRvcCtpLm9mZnNldEhlaWdodDtlPW8tbixuPW99ZWxzZXt2YXIgbD1maShpKTtlPWwuYm90dG9tLWwudG9wfXZhciBzPWkubGluZU9iai5oZWlnaHQtZTtpZigyPmUmJihlPXJlKHIpKSxzPi4wMDF8fC0uMDAxPnMpe3luKGkubGluZU9iaixlKTt2YXIgYT1pLmxpbmVPYmoud2lkZ2V0cztpZihhKWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7Kyt1KWFbdV0uaGVpZ2h0PWFbdV0ubm9kZS5vZmZzZXRIZWlnaHR9fX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQuZGlzcGxheS52aWV3T2Zmc2V0PUNuKHQsZ24odC5kb2MsdC5kaXNwbGF5LnNob3dpbmdGcm9tKSk7dC5kaXNwbGF5Lm1vdmVyLnN0eWxlLnRvcD1lKyJweCJ9ZnVuY3Rpb24gTCh0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGh8fDA7bj5yOysrcil7Zm9yKHZhciBpPWVbcl0sbz1bXSxsPWkuZGlmZnx8MCxzPTAsYT10Lmxlbmd0aDthPnM7KytzKXt2YXIgdT10W3NdO2kudG88PXUuZnJvbSYmaS5kaWZmP28ucHVzaCh7ZnJvbTp1LmZyb20rbCx0bzp1LnRvK2x9KTppLnRvPD11LmZyb218fGkuZnJvbT49dS50bz9vLnB1c2godSk6KGkuZnJvbT51LmZyb20mJm8ucHVzaCh7ZnJvbTp1LmZyb20sdG86aS5mcm9tfSksaS50bzx1LnRvJiZvLnB1c2goe2Zyb206aS50bytsLHRvOnUudG8rbH0pKX10PW99cmV0dXJuIHR9ZnVuY3Rpb24gayh0KXtmb3IodmFyIGU9dC5kaXNwbGF5LHI9e30sbj17fSxpPWUuZ3V0dGVycy5maXJzdENoaWxkLG89MDtpO2k9aS5uZXh0U2libGluZywrK28pclt0Lm9wdGlvbnMuZ3V0dGVyc1tvXV09aS5vZmZzZXRMZWZ0LG5bdC5vcHRpb25zLmd1dHRlcnNbb11dPWkub2Zmc2V0V2lkdGg7cmV0dXJue2ZpeGVkUG9zOnkoZSksZ3V0dGVyVG90YWxXaWR0aDplLmd1dHRlcnMub2Zmc2V0V2lkdGgsZ3V0dGVyTGVmdDpyLGd1dHRlcldpZHRoOm4sd3JhcHBlcldpZHRoOmUud3JhcHBlci5jbGllbnRXaWR0aH19ZnVuY3Rpb24gUyh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSl7dmFyIHI9ZS5uZXh0U2libGluZztyZXR1cm4gV2kmJktpJiZ0LmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0PT1lPyhlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGUubGluZU9iaj1udWxsKTplLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSkscn12YXIgbD1rKHQpLHM9dC5kaXNwbGF5LGE9dC5vcHRpb25zLmxpbmVOdW1iZXJzO24ubGVuZ3RofHxXaSYmdC5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldHx8YWkocy5saW5lRGl2KTt2YXIgdT1zLmxpbmVEaXYsYz11LmZpcnN0Q2hpbGQsZj1uLnNoaWZ0KCksaD1lO2Zvcih0LmRvYy5pdGVyKGUscixmdW5jdGlvbihlKXtpZihmJiZmLnRvPT1oJiYoZj1uLnNoaWZ0KCkpLFZyKHQuZG9jLGUpKXtpZigwIT1lLmhlaWdodCYmeW4oZSwwKSxlLndpZGdldHMmJmMmJmMucHJldmlvdXNTaWJsaW5nKWZvcih2YXIgcj0wO3I8ZS53aWRnZXRzLmxlbmd0aDsrK3Ipe3ZhciBzPWUud2lkZ2V0c1tyXTtpZihzLnNob3dJZkhpZGRlbil7dmFyIGQ9Yy5wcmV2aW91c1NpYmxpbmc7aWYoL3ByZS9pLnRlc3QoZC5ub2RlTmFtZSkpe3ZhciBwPXNpKCJkaXYiLG51bGwsbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIik7ZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwLGQpLHAuYXBwZW5kQ2hpbGQoZCksZD1wfXZhciBnPWQuYXBwZW5kQ2hpbGQoc2koImRpdiIsW3Mubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpKTtzLmhhbmRsZU1vdXNlRXZlbnRzfHwoZy5pZ25vcmVFdmVudHM9ITApLFQocyxnLGQsbCl9fX1lbHNlIGlmKGYmJmYuZnJvbTw9aCYmZi50bz5oKXtmb3IoO2MubGluZU9iaiE9ZTspYz1vKGMpO2EmJmg+PWkmJmMubGluZU51bWJlciYmY2koYy5saW5lTnVtYmVyLHYodC5vcHRpb25zLGgpKSxjPWMubmV4dFNpYmxpbmd9ZWxzZXtpZihlLndpZGdldHMpZm9yKHZhciBtLHk9MCxiPWM7YiYmMjA+eTsrK3ksYj1iLm5leHRTaWJsaW5nKWlmKGIubGluZU9iaj09ZSYmL2Rpdi9pLnRlc3QoYi5ub2RlTmFtZSkpe209YjticmVha312YXIgeD1NKHQsZSxoLGwsbSk7aWYoeCE9bSl1Lmluc2VydEJlZm9yZSh4LGMpO2Vsc2V7Zm9yKDtjIT1tOyljPW8oYyk7Yz1jLm5leHRTaWJsaW5nfXgubGluZU9iaj1lfSsraH0pO2M7KWM9byhjKX1mdW5jdGlvbiBNKHQsZSxyLG4saSl7dmFyIG8sbD1ybih0LGUpLHM9bC5wcmUsYT1lLmd1dHRlck1hcmtlcnMsdT10LmRpc3BsYXksYz1sLmJnQ2xhc3M/bC5iZ0NsYXNzKyIgIisoZS5iZ0NsYXNzfHwiIik6ZS5iZ0NsYXNzO2lmKCEodC5vcHRpb25zLmxpbmVOdW1iZXJzfHxhfHxjfHxlLndyYXBDbGFzc3x8ZS53aWRnZXRzKSlyZXR1cm4gcztpZihpKXtpLmFsaWduYWJsZT1udWxsO2Zvcih2YXIgZixoPSEwLGQ9MCxwPW51bGwsZz1pLmZpcnN0Q2hpbGQ7ZztnPWYpaWYoZj1nLm5leHRTaWJsaW5nLC9cYkNvZGVNaXJyb3ItbGluZXdpZGdldFxiLy50ZXN0KGcuY2xhc3NOYW1lKSl7Zm9yKHZhciBtPTA7bTxlLndpZGdldHMubGVuZ3RoOysrbSl7dmFyIHk9ZS53aWRnZXRzW21dO2lmKHkubm9kZT09Zy5maXJzdENoaWxkKXt5LmFib3ZlfHxwfHwocD1nKSxUKHksZyxpLG4pLCsrZDticmVha319aWYobT09ZS53aWRnZXRzLmxlbmd0aCl7aD0hMTticmVha319ZWxzZSBpLnJlbW92ZUNoaWxkKGcpO2kuaW5zZXJ0QmVmb3JlKHMscCksaCYmZD09ZS53aWRnZXRzLmxlbmd0aCYmKG89aSxpLmNsYXNzTmFtZT1lLndyYXBDbGFzc3x8IiIpfWlmKG98fChvPXNpKCJkaXYiLG51bGwsZS53cmFwQ2xhc3MsInBvc2l0aW9uOiByZWxhdGl2ZSIpLG8uYXBwZW5kQ2hpbGQocykpLGMmJm8uaW5zZXJ0QmVmb3JlKHNpKCJkaXYiLG51bGwsYysiIENvZGVNaXJyb3ItbGluZWJhY2tncm91bmQiKSxvLmZpcnN0Q2hpbGQpLHQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSl7dmFyIGI9by5pbnNlcnRCZWZvcmUoc2koImRpdiIsbnVsbCxudWxsLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrKHQub3B0aW9ucy5maXhlZEd1dHRlcj9uLmZpeGVkUG9zOi1uLmd1dHRlclRvdGFsV2lkdGgpKyJweCIpLG8uZmlyc3RDaGlsZCk7aWYodC5vcHRpb25zLmZpeGVkR3V0dGVyJiYoby5hbGlnbmFibGV8fChvLmFsaWduYWJsZT1bXSkpLnB1c2goYiksIXQub3B0aW9ucy5saW5lTnVtYmVyc3x8YSYmYVsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdfHwoby5saW5lTnVtYmVyPWIuYXBwZW5kQ2hpbGQoc2koImRpdiIsdih0Lm9wdGlvbnMsciksIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHQiLCJsZWZ0OiAiK24uZ3V0dGVyTGVmdFsiQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKyJweDsgd2lkdGg6ICIrdS5saW5lTnVtSW5uZXJXaWR0aCsicHgiKSkpLGEpZm9yKHZhciB4PTA7eDx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt4KXt2YXIgQz10Lm9wdGlvbnMuZ3V0dGVyc1t4XSx3PWEuaGFzT3duUHJvcGVydHkoQykmJmFbQ107dyYmYi5hcHBlbmRDaGlsZChzaSgiZGl2Iixbd10sIkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCIsImxlZnQ6ICIrbi5ndXR0ZXJMZWZ0W0NdKyJweDsgd2lkdGg6ICIrbi5ndXR0ZXJXaWR0aFtDXSsicHgiKSl9fWlmKEhpJiYoby5zdHlsZS56SW5kZXg9MiksZS53aWRnZXRzJiZvIT1pKWZvcih2YXIgbT0wLEw9ZS53aWRnZXRzO208TC5sZW5ndGg7KyttKXt2YXIgeT1MW21dLGs9c2koImRpdiIsW3kubm9kZV0sIkNvZGVNaXJyb3ItbGluZXdpZGdldCIpO3kuaGFuZGxlTW91c2VFdmVudHN8fChrLmlnbm9yZUV2ZW50cz0hMCksVCh5LGssbyxuKSx5LmFib3ZlP28uaW5zZXJ0QmVmb3JlKGssdC5vcHRpb25zLmxpbmVOdW1iZXJzJiYwIT1lLmhlaWdodD9iOnMpOm8uYXBwZW5kQ2hpbGQoayksVW4oeSwicmVkcmF3Iil9cmV0dXJuIG99ZnVuY3Rpb24gVCh0LGUscixuKXtpZih0Lm5vSFNjcm9sbCl7KHIuYWxpZ25hYmxlfHwoci5hbGlnbmFibGU9W10pKS5wdXNoKGUpO3ZhciBpPW4ud3JhcHBlcldpZHRoO2Uuc3R5bGUubGVmdD1uLmZpeGVkUG9zKyJweCIsdC5jb3Zlckd1dHRlcnx8KGktPW4uZ3V0dGVyVG90YWxXaWR0aCxlLnN0eWxlLnBhZGRpbmdMZWZ0PW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSxlLnN0eWxlLndpZHRoPWkrInB4In10LmNvdmVyR3V0dGVyJiYoZS5zdHlsZS56SW5kZXg9NSxlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdC5ub0hTY3JvbGx8fChlLnN0eWxlLm1hcmdpbkxlZnQ9LW4uZ3V0dGVyVG90YWxXaWR0aCsicHgiKSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LmRpc3BsYXkscj1qZSh0LmRvYy5zZWwuZnJvbSx0LmRvYy5zZWwudG8pO2lmKHJ8fHQub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZz9IKHQpOmUuY3Vyc29yLnN0eWxlLmRpc3BsYXk9ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIixyP2Uuc2VsZWN0aW9uRGl2LnN0eWxlLmRpc3BsYXk9Im5vbmUiOk4odCksdC5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3Ipe3ZhciBuPVEodCx0LmRvYy5zZWwuaGVhZCwiZGl2IiksaT1maShlLndyYXBwZXIpLG89ZmkoZS5saW5lRGl2KTtlLmlucHV0RGl2LnN0eWxlLnRvcD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRIZWlnaHQtMTAsbi50b3Arby50b3AtaS50b3ApKSsicHgiLGUuaW5wdXREaXYuc3R5bGUubGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGUud3JhcHBlci5jbGllbnRXaWR0aC0xMCxuLmxlZnQrby5sZWZ0LWkubGVmdCkpKyJweCJ9fWZ1bmN0aW9uIEgodCl7dmFyIGU9dC5kaXNwbGF5LHI9USh0LHQuZG9jLnNlbC5oZWFkLCJkaXYiKTtlLmN1cnNvci5zdHlsZS5sZWZ0PXIubGVmdCsicHgiLGUuY3Vyc29yLnN0eWxlLnRvcD1yLnRvcCsicHgiLGUuY3Vyc29yLnN0eWxlLmhlaWdodD1NYXRoLm1heCgwLHIuYm90dG9tLXIudG9wKSp0Lm9wdGlvbnMuY3Vyc29ySGVpZ2h0KyJweCIsZS5jdXJzb3Iuc3R5bGUuZGlzcGxheT0iIixyLm90aGVyPyhlLm90aGVyQ3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsZS5vdGhlckN1cnNvci5zdHlsZS5sZWZ0PXIub3RoZXIubGVmdCsicHgiLGUub3RoZXJDdXJzb3Iuc3R5bGUudG9wPXIub3RoZXIudG9wKyJweCIsZS5vdGhlckN1cnNvci5zdHlsZS5oZWlnaHQ9Ljg1KihyLm90aGVyLmJvdHRvbS1yLm90aGVyLnRvcCkrInB4Iik6ZS5vdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIn1mdW5jdGlvbiBOKHQpe2Z1bmN0aW9uIGUodCxlLHIsbil7MD5lJiYoZT0wKSxsLmFwcGVuZENoaWxkKHNpKCJkaXYiLG51bGwsIkNvZGVNaXJyb3Itc2VsZWN0ZWQiLCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIrdCsicHg7IHRvcDogIitlKyJweDsgd2lkdGg6ICIrKG51bGw9PXI/cy10OnIpKyJweDsgaGVpZ2h0OiAiKyhuLWUpKyJweCIpKX1mdW5jdGlvbiByKHIsbixvKXtmdW5jdGlvbiBsKGUsbil7cmV0dXJuIHEodCxZZShyLGUpLCJkaXYiLGYsbil9dmFyIHUsYyxmPWduKGksciksaD1mLnRleHQubGVuZ3RoO3JldHVybiBnaSh3bihmKSxufHwwLG51bGw9PW8/aDpvLGZ1bmN0aW9uKHQscixpKXt2YXIgZixkLHAsZz1sKHQsImxlZnQiKTtpZih0PT1yKWY9ZyxkPXA9Zy5sZWZ0O2Vsc2V7aWYoZj1sKHItMSwicmlnaHQiKSwicnRsIj09aSl7dmFyIG09ZztnPWYsZj1tfWQ9Zy5sZWZ0LHA9Zi5yaWdodH1udWxsPT1uJiYwPT10JiYoZD1hKSxmLnRvcC1nLnRvcD4zJiYoZShkLGcudG9wLG51bGwsZy5ib3R0b20pLGQ9YSxnLmJvdHRvbTxmLnRvcCYmZShkLGcuYm90dG9tLG51bGwsZi50b3ApKSxudWxsPT1vJiZyPT1oJiYocD1zKSwoIXV8fGcudG9wPHUudG9wfHxnLnRvcD09dS50b3AmJmcubGVmdDx1LmxlZnQpJiYodT1nKSwoIWN8fGYuYm90dG9tPmMuYm90dG9tfHxmLmJvdHRvbT09Yy5ib3R0b20mJmYucmlnaHQ+Yy5yaWdodCkmJihjPWYpLGErMT5kJiYoZD1hKSxlKGQsZi50b3AscC1kLGYuYm90dG9tKX0pLHtzdGFydDp1LGVuZDpjfX12YXIgbj10LmRpc3BsYXksaT10LmRvYyxvPXQuZG9jLnNlbCxsPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxzPW4ubGluZVNwYWNlLm9mZnNldFdpZHRoLGE9UCh0LmRpc3BsYXkpO2lmKG8uZnJvbS5saW5lPT1vLnRvLmxpbmUpcihvLmZyb20ubGluZSxvLmZyb20uY2gsby50by5jaCk7ZWxzZXt2YXIgdT1nbihpLG8uZnJvbS5saW5lKSxjPWduKGksby50by5saW5lKSxmPUdyKGksdSk9PUdyKGksYyksaD1yKG8uZnJvbS5saW5lLG8uZnJvbS5jaCxmP3UudGV4dC5sZW5ndGg6bnVsbCkuZW5kLGQ9cihvLnRvLmxpbmUsZj8wOm51bGwsby50by5jaCkuc3RhcnQ7ZiYmKGgudG9wPGQudG9wLTI/KGUoaC5yaWdodCxoLnRvcCxudWxsLGguYm90dG9tKSxlKGEsZC50b3AsZC5sZWZ0LGQuYm90dG9tKSk6ZShoLnJpZ2h0LGgudG9wLGQubGVmdC1oLnJpZ2h0LGguYm90dG9tKSksaC5ib3R0b208ZC50b3AmJmUoYSxoLmJvdHRvbSxudWxsLGQudG9wKX11aShuLnNlbGVjdGlvbkRpdixsKSxuLnNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5PSIifWZ1bmN0aW9uIEQodCl7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgZT10LmRpc3BsYXk7Y2xlYXJJbnRlcnZhbChlLmJsaW5rZXIpO3ZhciByPSEwO2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PSIiLHQub3B0aW9ucy5jdXJzb3JCbGlua1JhdGU+MCYmKGUuYmxpbmtlcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2UuY3Vyc29yLnN0eWxlLnZpc2liaWxpdHk9ZS5vdGhlckN1cnNvci5zdHlsZS52aXNpYmlsaXR5PShyPSFyKT8iIjoiaGlkZGVuIn0sdC5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSkpfX1mdW5jdGlvbiBXKHQsZSl7dC5kb2MubW9kZS5zdGFydFN0YXRlJiZ0LmRvYy5mcm9udGllcjx0LmRpc3BsYXkuc2hvd2luZ1RvJiZ0LnN0YXRlLmhpZ2hsaWdodC5zZXQoZSxpaShPLHQpKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuZG9jO2lmKGUuZnJvbnRpZXI8ZS5maXJzdCYmKGUuZnJvbnRpZXI9ZS5maXJzdCksIShlLmZyb250aWVyPj10LmRpc3BsYXkuc2hvd2luZ1RvKSl7dmFyIHIsbj0rbmV3IERhdGUrdC5vcHRpb25zLndvcmtUaW1lLGk9YnIoZS5tb2RlLHoodCxlLmZyb250aWVyKSksbz1bXTtlLml0ZXIoZS5mcm9udGllcixNYXRoLm1pbihlLmZpcnN0K2Uuc2l6ZSx0LmRpc3BsYXkuc2hvd2luZ1RvKzUwMCksZnVuY3Rpb24obCl7aWYoZS5mcm9udGllcj49dC5kaXNwbGF5LnNob3dpbmdGcm9tKXt2YXIgcz1sLnN0eWxlcztsLnN0eWxlcz1Rcih0LGwsaSwhMCk7Zm9yKHZhciBhPSFzfHxzLmxlbmd0aCE9bC5zdHlsZXMubGVuZ3RoLHU9MDshYSYmdTxzLmxlbmd0aDsrK3UpYT1zW3VdIT1sLnN0eWxlc1t1XTthJiYociYmci5lbmQ9PWUuZnJvbnRpZXI/ci5lbmQrKzpvLnB1c2gocj17c3RhcnQ6ZS5mcm9udGllcixlbmQ6ZS5mcm9udGllcisxfSkpLGwuc3RhdGVBZnRlcj1icihlLm1vZGUsaSl9ZWxzZSB0bih0LGwudGV4dCxpKSxsLnN0YXRlQWZ0ZXI9MD09ZS5mcm9udGllciU1P2JyKGUubW9kZSxpKTpudWxsO3JldHVybisrZS5mcm9udGllciwrbmV3IERhdGU+bj8oVyh0LHQub3B0aW9ucy53b3JrRGVsYXkpLCEwKTp2b2lkIDB9KSxvLmxlbmd0aCYmbGUodCxmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8by5sZW5ndGg7Kyt0KXVlKHRoaXMsb1t0XS5zdGFydCxvW3RdLmVuZCl9KSgpfX1mdW5jdGlvbiBFKHQsZSxyKXtmb3IodmFyIG4saSxvPXQuZG9jLGw9cj8tMTplLSh0LmRvYy5tb2RlLmlubmVyTW9kZT8xZTM6MTAwKSxzPWU7cz5sOy0tcyl7aWYoczw9by5maXJzdClyZXR1cm4gby5maXJzdDt2YXIgYT1nbihvLHMtMSk7aWYoYS5zdGF0ZUFmdGVyJiYoIXJ8fHM8PW8uZnJvbnRpZXIpKXJldHVybiBzO3ZhciB1PVpuKGEudGV4dCxudWxsLHQub3B0aW9ucy50YWJTaXplKTsobnVsbD09aXx8bj51KSYmKGk9cy0xLG49dSl9cmV0dXJuIGl9ZnVuY3Rpb24geih0LGUscil7dmFyIG49dC5kb2MsaT10LmRpc3BsYXk7aWYoIW4ubW9kZS5zdGFydFN0YXRlKXJldHVybiEwO3ZhciBvPUUodCxlLHIpLGw9bz5uLmZpcnN0JiZnbihuLG8tMSkuc3RhdGVBZnRlcjtyZXR1cm4gbD1sP2JyKG4ubW9kZSxsKTp4cihuLm1vZGUpLG4uaXRlcihvLGUsZnVuY3Rpb24ocil7dG4odCxyLnRleHQsbCk7dmFyIHM9bz09ZS0xfHwwPT1vJTV8fG8+PWkuc2hvd2luZ0Zyb20mJm88aS5zaG93aW5nVG87ci5zdGF0ZUFmdGVyPXM/YnIobi5tb2RlLGwpOm51bGwsKytvfSksciYmKG4uZnJvbnRpZXI9byksbH1mdW5jdGlvbiBJKHQpe3JldHVybiB0LmxpbmVTcGFjZS5vZmZzZXRUb3B9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5tb3Zlci5vZmZzZXRIZWlnaHQtdC5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIFAodCl7dmFyIGU9dWkodC5tZWFzdXJlLHNpKCJwcmUiLG51bGwsbnVsbCwidGV4dC1hbGlnbjogbGVmdCIpKS5hcHBlbmRDaGlsZChzaSgic3BhbiIsIngiKSk7cmV0dXJuIGUub2Zmc2V0TGVmdH1mdW5jdGlvbiBSKHQsZSxyLG4saSl7dmFyIG89LTE7aWYobj1ufHxWKHQsZSksbi5jcnVkZSl7dmFyIGw9bi5sZWZ0K3Iqbi53aWR0aDtyZXR1cm57bGVmdDpsLHJpZ2h0Omwrbi53aWR0aCx0b3A6bi50b3AsYm90dG9tOm4uYm90dG9tfX1mb3IodmFyIHM9cjs7cys9byl7dmFyIGE9bltzXTtpZihhKWJyZWFrOzA+byYmMD09cyYmKG89MSl9cmV0dXJuIGk9cz5yPyJsZWZ0IjpyPnM/InJpZ2h0IjppLCJsZWZ0Ij09aSYmYS5sZWZ0U2lkZT9hPWEubGVmdFNpZGU6InJpZ2h0Ij09aSYmYS5yaWdodFNpZGUmJihhPWEucmlnaHRTaWRlKSx7bGVmdDpyPnM/YS5yaWdodDphLmxlZnQscmlnaHQ6cz5yP2EubGVmdDphLnJpZ2h0LHRvcDphLnRvcCxib3R0b206YS5ib3R0b219fWZ1bmN0aW9uIEIodCxlKXtmb3IodmFyIHI9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO2lmKGkudGV4dD09ZS50ZXh0JiZpLm1hcmtlZFNwYW5zPT1lLm1hcmtlZFNwYW5zJiZ0LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg9PWkud2lkdGgmJmkuY2xhc3Nlcz09ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzKXJldHVybiBpfX1mdW5jdGlvbiBHKHQsZSl7dmFyIHI9Qih0LGUpO3ImJihyLnRleHQ9ci5tZWFzdXJlPXIubWFya2VkU3BhbnM9bnVsbCl9ZnVuY3Rpb24gVih0LGUpe3ZhciByPUIodCxlKTtpZihyKXJldHVybiByLm1lYXN1cmU7dmFyIG49Syh0LGUpLGk9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGUsbz17dGV4dDplLnRleHQsd2lkdGg6dC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLG1hcmtlZFNwYW5zOmUubWFya2VkU3BhbnMsbWVhc3VyZTpuLGNsYXNzZXM6ZS50ZXh0Q2xhc3MrInwiK2Uud3JhcENsYXNzfTtyZXR1cm4gMTY9PWkubGVuZ3RoP2lbKyt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcyUxNl09bzppLnB1c2gobyksbn1mdW5jdGlvbiBLKHQsZSl7ZnVuY3Rpb24gcih0KXt2YXIgZT10LnRvcC1wLnRvcCxyPXQuYm90dG9tLXAudG9wO3I+diYmKHI9diksMD5lJiYoZT0wKTtmb3IodmFyIG49Zy5sZW5ndGgtMjtuPj0wO24tPTIpe3ZhciBpPWdbbl0sbz1nW24rMV07aWYoIShpPnJ8fGU+bykmJihlPj1pJiZvPj1yfHxpPj1lJiZyPj1vfHxNYXRoLm1pbihyLG8pLU1hdGgubWF4KGUsaSk+PXItZT4+MSkpe2dbbl09TWF0aC5taW4oZSxpKSxnW24rMV09TWF0aC5tYXgocixvKTticmVha319cmV0dXJuIDA+biYmKG49Zy5sZW5ndGgsZy5wdXNoKGUscikpLHtsZWZ0OnQubGVmdC1wLmxlZnQscmlnaHQ6dC5yaWdodC1wLmxlZnQsdG9wOm4sYm90dG9tOm51bGx9fWZ1bmN0aW9uIG4odCl7dC5ib3R0b209Z1t0LnRvcCsxXSx0LnRvcD1nW3QudG9wXX1pZighdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gVSh0LGUpO3ZhciBpPXQuZGlzcGxheSxvPW5pKGUudGV4dC5sZW5ndGgpLGw9cm4odCxlLG8sITApLnByZTtpZihBaSYmIUhpJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbC5jaGlsZE5vZGVzLmxlbmd0aD4xMDApe2Zvcih2YXIgcz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYT0xMCx1PWwuY2hpbGROb2Rlcy5sZW5ndGgsYz0wLGY9TWF0aC5jZWlsKHUvYSk7Zj5jOysrYyl7Zm9yKHZhciBoPXNpKCJkaXYiLG51bGwsbnVsbCwiZGlzcGxheTogaW5saW5lLWJsb2NrIiksZD0wO2E+ZCYmdTsrK2QpaC5hcHBlbmRDaGlsZChsLmZpcnN0Q2hpbGQpLC0tdTtzLmFwcGVuZENoaWxkKGgpfWwuYXBwZW5kQ2hpbGQocyl9dWkoaS5tZWFzdXJlLGwpO3ZhciBwPWZpKGkubGluZURpdiksZz1bXSxtPW5pKGUudGV4dC5sZW5ndGgpLHY9bC5vZmZzZXRIZWlnaHQ7TmkmJmkubWVhc3VyZS5maXJzdCE9bCYmdWkoaS5tZWFzdXJlLGwpO2Zvcih2YXIgeSxjPTA7YzxvLmxlbmd0aDsrK2MpaWYoeT1vW2NdKXt2YXIgYj15LHg9bnVsbDtpZigvXGJDb2RlTWlycm9yLXdpZGdldFxiLy50ZXN0KHkuY2xhc3NOYW1lKSYmeS5nZXRDbGllbnRSZWN0cyl7MT09eS5maXJzdENoaWxkLm5vZGVUeXBlJiYoYj15LmZpcnN0Q2hpbGQpO3ZhciBDPWIuZ2V0Q2xpZW50UmVjdHMoKTtDLmxlbmd0aD4xJiYoeD1tW2NdPXIoQ1swXSkseC5yaWdodFNpZGU9cihDW0MubGVuZ3RoLTFdKSl9eHx8KHg9bVtjXT1yKGZpKGIpKSkseS5tZWFzdXJlUmlnaHQmJih4LnJpZ2h0PWZpKHkubWVhc3VyZVJpZ2h0KS5sZWZ0KSx5LmxlZnRTaWRlJiYoeC5sZWZ0U2lkZT1yKGZpKHkubGVmdFNpZGUpKSl9YWkodC5kaXNwbGF5Lm1lYXN1cmUpO2Zvcih2YXIgeSxjPTA7YzxtLmxlbmd0aDsrK2MpKHk9bVtjXSkmJihuKHkpLHkubGVmdFNpZGUmJm4oeS5sZWZ0U2lkZSkseS5yaWdodFNpZGUmJm4oeS5yaWdodFNpZGUpKTtyZXR1cm4gbX1mdW5jdGlvbiBVKHQsZSl7dmFyIHI9bmV3IGJvKGUudGV4dC5zbGljZSgwLDEwMCksbnVsbCk7ZS50ZXh0Q2xhc3MmJihyLnRleHRDbGFzcz1lLnRleHRDbGFzcyk7dmFyIG49Syh0LHIpLGk9Uih0LHIsMCxuLCJsZWZ0Iiksbz1SKHQsciw5OSxuLCJyaWdodCIpO3JldHVybntjcnVkZTohMCx0b3A6aS50b3AsbGVmdDppLmxlZnQsYm90dG9tOmkuYm90dG9tLHdpZHRoOihvLnJpZ2h0LWkubGVmdCkvMTAwfX1mdW5jdGlvbiBYKHQsZSl7dmFyIHI9ITE7aWYoZS5tYXJrZWRTcGFucylmb3IodmFyIG49MDtuPGUubWFya2VkU3BhbnM7KytuKXt2YXIgaT1lLm1hcmtlZFNwYW5zW25dOyFpLmNvbGxhcHNlZHx8bnVsbCE9aS50byYmaS50byE9ZS50ZXh0Lmxlbmd0aHx8KHI9ITApfXZhciBvPSFyJiZCKHQsZSk7aWYob3x8ZS50ZXh0Lmxlbmd0aD49dC5vcHRpb25zLmNydWRlTWVhc3VyaW5nRnJvbSlyZXR1cm4gUih0LGUsZS50ZXh0Lmxlbmd0aCxvJiZvLm1lYXN1cmUsInJpZ2h0IikucmlnaHQ7dmFyIGw9cm4odCxlLG51bGwsITApLnByZSxzPWwuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKTtyZXR1cm4gdWkodC5kaXNwbGF5Lm1lYXN1cmUsbCksZmkocykucmlnaHQtZmkodC5kaXNwbGF5LmxpbmVEaXYpLmxlZnR9ZnVuY3Rpb24gXyh0KXt0LmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZS5sZW5ndGg9dC5kaXNwbGF5Lm1lYXN1cmVMaW5lQ2FjaGVQb3M9MCx0LmRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoPXQuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0PW51bGwsdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8KHQuZGlzcGxheS5tYXhMaW5lQ2hhbmdlZD0hMCksdC5kaXNwbGF5LmxpbmVOdW1DaGFycz1udWxsfWZ1bmN0aW9uIFkoKXtyZXR1cm4gd2luZG93LnBhZ2VYT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGooKXtyZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0fHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxkb2N1bWVudC5ib2R5KS5zY3JvbGxUb3B9ZnVuY3Rpb24gJCh0LGUscixuKXtpZihlLndpZGdldHMpZm9yKHZhciBpPTA7aTxlLndpZGdldHMubGVuZ3RoOysraSlpZihlLndpZGdldHNbaV0uYWJvdmUpe3ZhciBvPVlyKGUud2lkZ2V0c1tpXSk7ci50b3ArPW8sci5ib3R0b20rPW99aWYoImxpbmUiPT1uKXJldHVybiByO258fChuPSJsb2NhbCIpO3ZhciBsPUNuKHQsZSk7aWYoImxvY2FsIj09bj9sKz1JKHQuZGlzcGxheSk6bC09dC5kaXNwbGF5LnZpZXdPZmZzZXQsInBhZ2UiPT1ufHwid2luZG93Ij09bil7dmFyIHM9ZmkodC5kaXNwbGF5LmxpbmVTcGFjZSk7bCs9cy50b3ArKCJ3aW5kb3ciPT1uPzA6aigpKTt2YXIgYT1zLmxlZnQrKCJ3aW5kb3ciPT1uPzA6WSgpKTtyLmxlZnQrPWEsci5yaWdodCs9YX1yZXR1cm4gci50b3ArPWwsci5ib3R0b20rPWwscn1mdW5jdGlvbiBaKHQsZSxyKXtpZigiZGl2Ij09cilyZXR1cm4gZTt2YXIgbj1lLmxlZnQsaT1lLnRvcDtpZigicGFnZSI9PXIpbi09WSgpLGktPWooKTtlbHNlIGlmKCJsb2NhbCI9PXJ8fCFyKXt2YXIgbz1maSh0LmRpc3BsYXkuc2l6ZXIpO24rPW8ubGVmdCxpKz1vLnRvcH12YXIgbD1maSh0LmRpc3BsYXkubGluZVNwYWNlKTtyZXR1cm57bGVmdDpuLWwubGVmdCx0b3A6aS1sLnRvcH19ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBufHwobj1nbih0LmRvYyxlLmxpbmUpKSwkKHQsbixSKHQsbixlLmNoLG51bGwsaSkscil9ZnVuY3Rpb24gUSh0LGUscixuLGkpe2Z1bmN0aW9uIG8oZSxvKXt2YXIgbD1SKHQsbixlLGksbz8icmlnaHQiOiJsZWZ0Iik7cmV0dXJuIG8/bC5sZWZ0PWwucmlnaHQ6bC5yaWdodD1sLmxlZnQsJCh0LG4sbCxyKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9c1tlXSxuPXIubGV2ZWwlMjtyZXR1cm4gdD09bWkocikmJmUmJnIubGV2ZWw8c1tlLTFdLmxldmVsPyhyPXNbLS1lXSx0PXZpKHIpLShyLmxldmVsJTI/MDoxKSxuPSEwKTp0PT12aShyKSYmZTxzLmxlbmd0aC0xJiZyLmxldmVsPHNbZSsxXS5sZXZlbCYmKHI9c1srK2VdLHQ9bWkociktci5sZXZlbCUyLG49ITEpLG4mJnQ9PXIudG8mJnQ+ci5mcm9tP28odC0xKTpvKHQsbil9bj1ufHxnbih0LmRvYyxlLmxpbmUpLGl8fChpPVYodCxuKSk7dmFyIHM9d24obiksYT1lLmNoO2lmKCFzKXJldHVybiBvKGEpO3ZhciB1PUxpKHMsYSksYz1sKGEsdSk7cmV0dXJuIG51bGwhPVJvJiYoYy5vdGhlcj1sKGEsUm8pKSxjfWZ1bmN0aW9uIEoodCxlLHIsbil7dmFyIGk9bmV3IFllKHQsZSk7cmV0dXJuIGkueFJlbD1uLHImJihpLm91dHNpZGU9ITApLGl9ZnVuY3Rpb24gdGUodCxlLHIpe3ZhciBuPXQuZG9jO2lmKHIrPXQuZGlzcGxheS52aWV3T2Zmc2V0LDA+cilyZXR1cm4gSihuLmZpcnN0LDAsITAsLTEpO3ZhciBpPXhuKG4sciksbz1uLmZpcnN0K24uc2l6ZS0xO2lmKGk+bylyZXR1cm4gSihuLmZpcnN0K24uc2l6ZS0xLGduKG4sbykudGV4dC5sZW5ndGgsITAsMSk7Zm9yKDA+ZSYmKGU9MCk7Oyl7dmFyIGw9Z24obixpKSxzPWVlKHQsbCxpLGUsciksYT1CcihsKSx1PWEmJmEuZmluZCgpO2lmKCFhfHwhKHMuY2g+dS5mcm9tLmNofHxzLmNoPT11LmZyb20uY2gmJnMueFJlbD4wKSlyZXR1cm4gcztpPXUudG8ubGluZX19ZnVuY3Rpb24gZWUodCxlLHIsbixpKXtmdW5jdGlvbiBvKG4pe3ZhciBpPVEodCxZZShyLG4pLCJsaW5lIixlLHUpO3JldHVybiBzPSEwLGw+aS5ib3R0b20/aS5sZWZ0LWE6bDxpLnRvcD9pLmxlZnQrYToocz0hMSxpLmxlZnQpfXZhciBsPWktQ24odCxlKSxzPSExLGE9Mip0LmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCx1PVYodCxlKSxjPXduKGUpLGY9ZS50ZXh0Lmxlbmd0aCxoPXlpKGUpLGQ9YmkoZSkscD1vKGgpLGc9cyxtPW8oZCksdj1zO2lmKG4+bSlyZXR1cm4gSihyLGQsdiwxKTtmb3IoOzspe2lmKGM/ZD09aHx8ZD09U2koZSxoLDEpOjE+PWQtaCl7Zm9yKHZhciB5PXA+bnx8bS1uPj1uLXA/aDpkLGI9bi0oeT09aD9wOm0pO0RvLnRlc3QoZS50ZXh0LmNoYXJBdCh5KSk7KSsreTt2YXIgeD1KKHIseSx5PT1oP2c6diwwPmI/LTE6Yj8xOjApO3JldHVybiB4fXZhciBDPU1hdGguY2VpbChmLzIpLHc9aCtDO2lmKGMpe3c9aDtmb3IodmFyIEw9MDtDPkw7KytMKXc9U2koZSx3LDEpfXZhciBrPW8odyk7az5uPyhkPXcsbT1rLCh2PXMpJiYobSs9MWUzKSxmPUMpOihoPXcscD1rLGc9cyxmLT1DKX19ZnVuY3Rpb24gcmUodCl7aWYobnVsbCE9dC5jYWNoZWRUZXh0SGVpZ2h0KXJldHVybiB0LmNhY2hlZFRleHRIZWlnaHQ7aWYobnVsbD09X2kpe19pPXNpKCJwcmUiKTtmb3IodmFyIGU9MDs0OT5lOysrZSlfaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIpKSxfaS5hcHBlbmRDaGlsZChzaSgiYnIiKSk7X2kuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKSl9dWkodC5tZWFzdXJlLF9pKTt2YXIgcj1faS5vZmZzZXRIZWlnaHQvNTA7cmV0dXJuIHI+MyYmKHQuY2FjaGVkVGV4dEhlaWdodD1yKSxhaSh0Lm1lYXN1cmUpLHJ8fDF9ZnVuY3Rpb24gbmUodCl7aWYobnVsbCE9dC5jYWNoZWRDaGFyV2lkdGgpcmV0dXJuIHQuY2FjaGVkQ2hhcldpZHRoO3ZhciBlPXNpKCJzcGFuIiwieCIpLHI9c2koInByZSIsW2VdKTt1aSh0Lm1lYXN1cmUscik7dmFyIG49ZS5vZmZzZXRXaWR0aDtyZXR1cm4gbj4yJiYodC5jYWNoZWRDaGFyV2lkdGg9biksbnx8MTB9ZnVuY3Rpb24gaWUodCl7dC5jdXJPcD17Y2hhbmdlczpbXSxmb3JjZVVwZGF0ZTohMSx1cGRhdGVJbnB1dDpudWxsLHVzZXJTZWxDaGFuZ2U6bnVsbCx0ZXh0Q2hhbmdlZDpudWxsLHNlbGVjdGlvbkNoYW5nZWQ6ITEsY3Vyc29yQWN0aXZpdHk6ITEsdXBkYXRlTWF4TGluZTohMSx1cGRhdGVTY3JvbGxQb3M6ITEsaWQ6KytKaX0sTW8rK3x8KFNvPVtdKX1mdW5jdGlvbiBvZSh0KXt2YXIgZT10LmN1ck9wLHI9dC5kb2Msbj10LmRpc3BsYXk7aWYodC5jdXJPcD1udWxsLGUudXBkYXRlTWF4TGluZSYmZih0KSxuLm1heExpbmVDaGFuZ2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZyYmbi5tYXhMaW5lKXt2YXIgaT1YKHQsbi5tYXhMaW5lKTtuLnNpemVyLnN0eWxlLm1pbldpZHRoPU1hdGgubWF4KDAsaSszK1RvKSsicHgiLG4ubWF4TGluZUNoYW5nZWQ9ITE7dmFyIG89TWF0aC5tYXgoMCxuLnNpemVyLm9mZnNldExlZnQrbi5zaXplci5vZmZzZXRXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoKTtvPHIuc2Nyb2xsTGVmdCYmIWUudXBkYXRlU2Nyb2xsUG9zJiZNZSh0LE1hdGgubWluKG4uc2Nyb2xsZXIuc2Nyb2xsTGVmdCxvKSwhMCl9dmFyIGwscztpZihlLnVwZGF0ZVNjcm9sbFBvcylsPWUudXBkYXRlU2Nyb2xsUG9zO2Vsc2UgaWYoZS5zZWxlY3Rpb25DaGFuZ2VkJiZuLnNjcm9sbGVyLmNsaWVudEhlaWdodCl7dmFyIGE9USh0LHIuc2VsLmhlYWQpO2w9dXIodCxhLmxlZnQsYS50b3AsYS5sZWZ0LGEuYm90dG9tKX1pZigoZS5jaGFuZ2VzLmxlbmd0aHx8ZS5mb3JjZVVwZGF0ZXx8bCYmbnVsbCE9bC5zY3JvbGxUb3ApJiYocz1iKHQsZS5jaGFuZ2VzLGwmJmwuc2Nyb2xsVG9wLGUuZm9yY2VVcGRhdGUpLHQuZGlzcGxheS5zY3JvbGxlci5vZmZzZXRIZWlnaHQmJih0LmRvYy5zY3JvbGxUb3A9dC5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCkpLCFzJiZlLnNlbGVjdGlvbkNoYW5nZWQmJkEodCksZS51cGRhdGVTY3JvbGxQb3Mpe3ZhciB1PU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxIZWlnaHQtbi5zY3JvbGxlci5jbGllbnRIZWlnaHQsbC5zY3JvbGxUb3ApKSxjPU1hdGgubWF4KDAsTWF0aC5taW4obi5zY3JvbGxlci5zY3JvbGxXaWR0aC1uLnNjcm9sbGVyLmNsaWVudFdpZHRoLGwuc2Nyb2xsTGVmdCkpO24uc2Nyb2xsZXIuc2Nyb2xsVG9wPW4uc2Nyb2xsYmFyVi5zY3JvbGxUb3A9ci5zY3JvbGxUb3A9dSxuLnNjcm9sbGVyLnNjcm9sbExlZnQ9bi5zY3JvbGxiYXJILnNjcm9sbExlZnQ9ci5zY3JvbGxMZWZ0PWMsZyh0KSxlLnNjcm9sbFRvUG9zJiZzcih0LFFlKHQuZG9jLGUuc2Nyb2xsVG9Qb3MuZnJvbSksUWUodC5kb2MsZS5zY3JvbGxUb1Bvcy50byksZS5zY3JvbGxUb1Bvcy5tYXJnaW4pfWVsc2UgbCYmbHIodCk7ZS5zZWxlY3Rpb25DaGFuZ2VkJiZEKHQpLHQuc3RhdGUuZm9jdXNlZCYmZS51cGRhdGVJbnB1dCYmZGUodCxlLnVzZXJTZWxDaGFuZ2UpO3ZhciBoPWUubWF5YmVIaWRkZW5NYXJrZXJzLGQ9ZS5tYXliZVVuaGlkZGVuTWFya2VycztpZihoKWZvcih2YXIgcD0wO3A8aC5sZW5ndGg7KytwKWhbcF0ubGluZXMubGVuZ3RofHxLbihoW3BdLCJoaWRlIik7aWYoZClmb3IodmFyIHA9MDtwPGQubGVuZ3RoOysrcClkW3BdLmxpbmVzLmxlbmd0aCYmS24oZFtwXSwidW5oaWRlIik7dmFyIG07aWYoLS1Nb3x8KG09U28sU289bnVsbCksZS50ZXh0Q2hhbmdlZCYmS24odCwiY2hhbmdlIix0LGUudGV4dENoYW5nZWQpLGUuY3Vyc29yQWN0aXZpdHkmJktuKHQsImN1cnNvckFjdGl2aXR5Iix0KSxtKWZvcih2YXIgcD0wO3A8bS5sZW5ndGg7KytwKW1bcF0oKX1mdW5jdGlvbiBsZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXR8fHRoaXMsbj0hci5jdXJPcDtuJiZpZShyKTt0cnl7dmFyIGk9ZS5hcHBseShyLGFyZ3VtZW50cyl9ZmluYWxseXtuJiZvZShyKX1yZXR1cm4gaX19ZnVuY3Rpb24gc2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmNtJiYhdGhpcy5jbS5jdXJPcDtyJiZpZSh0aGlzLmNtKTt0cnl7ZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3ImJm9lKHRoaXMuY20pfXJldHVybiBlfX1mdW5jdGlvbiBhZSh0LGUpe3ZhciByLG49IXQuY3VyT3A7biYmaWUodCk7dHJ5e3I9ZSgpfWZpbmFsbHl7biYmb2UodCl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWUodCxlLHIsbil7bnVsbD09ZSYmKGU9dC5kb2MuZmlyc3QpLG51bGw9PXImJihyPXQuZG9jLmZpcnN0K3QuZG9jLnNpemUpLHQuY3VyT3AuY2hhbmdlcy5wdXNoKHtmcm9tOmUsdG86cixkaWZmOm59KX1mdW5jdGlvbiBjZSh0KXt0LmRpc3BsYXkucG9sbGluZ0Zhc3R8fHQuZGlzcGxheS5wb2xsLnNldCh0Lm9wdGlvbnMucG9sbEludGVydmFsLGZ1bmN0aW9uKCl7aGUodCksdC5zdGF0ZS5mb2N1c2VkJiZjZSh0KX0pfWZ1bmN0aW9uIGZlKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj1oZSh0KTtufHxyPyh0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEsY2UodCkpOihyPSEwLHQuZGlzcGxheS5wb2xsLnNldCg2MCxlKSl9dmFyIHI9ITE7dC5kaXNwbGF5LnBvbGxpbmdGYXN0PSEwLHQuZGlzcGxheS5wb2xsLnNldCgyMCxlKX1mdW5jdGlvbiBoZSh0KXt2YXIgZT10LmRpc3BsYXkuaW5wdXQscj10LmRpc3BsYXkucHJldklucHV0LG49dC5kb2MsaT1uLnNlbDtpZighdC5zdGF0ZS5mb2N1c2VkfHxJbyhlKXx8Z2UodCl8fHQuc3RhdGUuZGlzYWJsZUlucHV0KXJldHVybiExO3Quc3RhdGUucGFzdGVJbmNvbWluZyYmdC5zdGF0ZS5mYWtlZExhc3RDaGFyJiYoZS52YWx1ZT1lLnZhbHVlLnN1YnN0cmluZygwLGUudmFsdWUubGVuZ3RoLTEpLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMSk7dmFyIG89ZS52YWx1ZTtpZihvPT1yJiZqZShpLmZyb20saS50bykpcmV0dXJuITE7aWYoQWkmJiFOaSYmdC5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uPT09bylyZXR1cm4gZGUodCwhMCksITE7dmFyIGw9IXQuY3VyT3A7bCYmaWUodCksaS5zaGlmdD0hMTtmb3IodmFyIHM9MCxhPU1hdGgubWluKHIubGVuZ3RoLG8ubGVuZ3RoKTthPnMmJnIuY2hhckNvZGVBdChzKT09by5jaGFyQ29kZUF0KHMpOykrK3M7dmFyIHU9aS5mcm9tLGM9aS50bztzPHIubGVuZ3RoP3U9WWUodS5saW5lLHUuY2gtKHIubGVuZ3RoLXMpKTp0LnN0YXRlLm92ZXJ3cml0ZSYmamUodSxjKSYmIXQuc3RhdGUucGFzdGVJbmNvbWluZyYmKGM9WWUoYy5saW5lLE1hdGgubWluKGduKG4sYy5saW5lKS50ZXh0Lmxlbmd0aCxjLmNoKyhvLmxlbmd0aC1zKSkpKTt2YXIgZj10LmN1ck9wLnVwZGF0ZUlucHV0LGg9e2Zyb206dSx0bzpjLHRleHQ6em8oby5zbGljZShzKSksb3JpZ2luOnQuc3RhdGUucGFzdGVJbmNvbWluZz8icGFzdGUiOiIraW5wdXQifTtyZXR1cm4gQmUodC5kb2MsaCwiZW5kIiksdC5jdXJPcC51cGRhdGVJbnB1dD1mLFVuKHQsImlucHV0UmVhZCIsdCxoKSxvLmxlbmd0aD4xZTN8fG8uaW5kZXhPZigiXG4iKT4tMT9lLnZhbHVlPXQuZGlzcGxheS5wcmV2SW5wdXQ9IiI6dC5kaXNwbGF5LnByZXZJbnB1dD1vLGwmJm9lKHQpLHQuc3RhdGUucGFzdGVJbmNvbWluZz0hMSwhMH1mdW5jdGlvbiBkZSh0LGUpe3ZhciByLG4saT10LmRvYztpZihqZShpLnNlbC5mcm9tLGkuc2VsLnRvKSllJiYodC5kaXNwbGF5LnByZXZJbnB1dD10LmRpc3BsYXkuaW5wdXQudmFsdWU9IiIsQWkmJiFOaSYmKHQuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSk7ZWxzZXt0LmRpc3BsYXkucHJldklucHV0PSIiLHI9Rm8mJihpLnNlbC50by5saW5lLWkuc2VsLmZyb20ubGluZT4xMDB8fChuPXQuZ2V0U2VsZWN0aW9uKCkpLmxlbmd0aD4xZTMpO3ZhciBvPXI/Ii0iOm58fHQuZ2V0U2VsZWN0aW9uKCk7dC5kaXNwbGF5LmlucHV0LnZhbHVlPW8sdC5zdGF0ZS5mb2N1c2VkJiZKbih0LmRpc3BsYXkuaW5wdXQpLEFpJiYhTmkmJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249byl9dC5kaXNwbGF5LmluYWNjdXJhdGVTZWxlY3Rpb249cn1mdW5jdGlvbiBwZSh0KXsibm9jdXJzb3IiPT10Lm9wdGlvbnMucmVhZE9ubHl8fFZpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT10LmRpc3BsYXkuaW5wdXR8fHQuZGlzcGxheS5pbnB1dC5mb2N1cygpfWZ1bmN0aW9uIGdlKHQpe3JldHVybiB0Lm9wdGlvbnMucmVhZE9ubHl8fHQuZG9jLmNhbnRFZGl0fWZ1bmN0aW9uIG1lKHQpe2Z1bmN0aW9uIGUoKXt0LnN0YXRlLmZvY3VzZWQmJnNldFRpbWVvdXQoaWkocGUsdCksMCl9ZnVuY3Rpb24gcigpe251bGw9PXMmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGwsbC5jYWNoZWRDaGFyV2lkdGg9bC5jYWNoZWRUZXh0SGVpZ2h0PU9vPW51bGwsXyh0KSxhZSh0LGlpKHVlLHQpKX0sMTAwKSl9ZnVuY3Rpb24gbigpe2Zvcih2YXIgdD1sLndyYXBwZXIucGFyZW50Tm9kZTt0JiZ0IT1kb2N1bWVudC5ib2R5O3Q9dC5wYXJlbnROb2RlKTt0P3NldFRpbWVvdXQobiw1ZTMpOlZuKHdpbmRvdywicmVzaXplIixyKX1mdW5jdGlvbiBpKGUpe1huKHQsZSl8fHQub3B0aW9ucy5vbkRyYWdFdmVudCYmdC5vcHRpb25zLm9uRHJhZ0V2ZW50KHQsRW4oZSkpfHxQbihlKX1mdW5jdGlvbiBvKCl7bC5pbmFjY3VyYXRlU2VsZWN0aW9uJiYobC5wcmV2SW5wdXQ9IiIsbC5pbmFjY3VyYXRlU2VsZWN0aW9uPSExLGwuaW5wdXQudmFsdWU9dC5nZXRTZWxlY3Rpb24oKSxKbihsLmlucHV0KSl9dmFyIGw9dC5kaXNwbGF5O0duKGwuc2Nyb2xsZXIsIm1vdXNlZG93biIsbGUodCxiZSkpLEFpP0duKGwuc2Nyb2xsZXIsImRibGNsaWNrIixsZSh0LGZ1bmN0aW9uKGUpe2lmKCFYbih0LGUpKXt2YXIgcj15ZSh0LGUpO2lmKHImJiF3ZSh0LGUpJiYhdmUodC5kaXNwbGF5LGUpKXt6bihlKTt2YXIgbj1tcihnbih0LmRvYyxyLmxpbmUpLnRleHQscik7ZXIodC5kb2Msbi5mcm9tLG4udG8pfX19KSk6R24obC5zY3JvbGxlciwiZGJsY2xpY2siLGZ1bmN0aW9uKGUpe1huKHQsZSl8fHpuKGUpfSksR24obC5saW5lU3BhY2UsInNlbGVjdHN0YXJ0IixmdW5jdGlvbih0KXt2ZShsLHQpfHx6bih0KX0pLFppfHxHbihsLnNjcm9sbGVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZSl7SWUodCxlKX0pLEduKGwuc2Nyb2xsZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLnNjcm9sbGVyLmNsaWVudEhlaWdodCYmKFNlKHQsbC5zY3JvbGxlci5zY3JvbGxUb3ApLE1lKHQsbC5zY3JvbGxlci5zY3JvbGxMZWZ0LCEwKSxLbih0LCJzY3JvbGwiLHQpKX0pLEduKGwuc2Nyb2xsYmFyViwic2Nyb2xsIixmdW5jdGlvbigpe2wuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0JiZTZSh0LGwuc2Nyb2xsYmFyVi5zY3JvbGxUb3ApfSksR24obC5zY3JvbGxiYXJILCJzY3JvbGwiLGZ1bmN0aW9uKCl7bC5zY3JvbGxlci5jbGllbnRIZWlnaHQmJk1lKHQsbC5zY3JvbGxiYXJILnNjcm9sbExlZnQpfSksR24obC5zY3JvbGxlciwibW91c2V3aGVlbCIsZnVuY3Rpb24oZSl7VGUodCxlKX0pLEduKGwuc2Nyb2xsZXIsIkRPTU1vdXNlU2Nyb2xsIixmdW5jdGlvbihlKXtUZSh0LGUpfSksR24obC5zY3JvbGxiYXJILCJtb3VzZWRvd24iLGUpLEduKGwuc2Nyb2xsYmFyViwibW91c2Vkb3duIixlKSxHbihsLndyYXBwZXIsInNjcm9sbCIsZnVuY3Rpb24oKXtsLndyYXBwZXIuc2Nyb2xsVG9wPWwud3JhcHBlci5zY3JvbGxMZWZ0PTB9KTt2YXIgcztHbih3aW5kb3csInJlc2l6ZSIsciksc2V0VGltZW91dChuLDVlMyksR24obC5pbnB1dCwia2V5dXAiLGxlKHQsZnVuY3Rpb24oZSl7WG4odCxlKXx8dC5vcHRpb25zLm9uS2V5RXZlbnQmJnQub3B0aW9ucy5vbktleUV2ZW50KHQsRW4oZSkpfHwxNj09ZS5rZXlDb2RlJiYodC5kb2Muc2VsLnNoaWZ0PSExKX0pKSxHbihsLmlucHV0LCJpbnB1dCIsZnVuY3Rpb24oKXtBaSYmIU5pJiZ0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24mJih0LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb249bnVsbCksZmUodCl9KSxHbihsLmlucHV0LCJrZXlkb3duIixsZSh0LFdlKSksR24obC5pbnB1dCwia2V5cHJlc3MiLGxlKHQsT2UpKSxHbihsLmlucHV0LCJmb2N1cyIsaWkoRWUsdCkpLEduKGwuaW5wdXQsImJsdXIiLGlpKHplLHQpKSx0Lm9wdGlvbnMuZHJhZ0Ryb3AmJihHbihsLnNjcm9sbGVyLCJkcmFnc3RhcnQiLGZ1bmN0aW9uKGUpe2tlKHQsZSl9KSxHbihsLnNjcm9sbGVyLCJkcmFnZW50ZXIiLGkpLEduKGwuc2Nyb2xsZXIsImRyYWdvdmVyIixpKSxHbihsLnNjcm9sbGVyLCJkcm9wIixsZSh0LExlKSkpLEduKGwuc2Nyb2xsZXIsInBhc3RlIixmdW5jdGlvbihlKXt2ZShsLGUpfHwocGUodCksZmUodCkpfSksR24obC5pbnB1dCwicGFzdGUiLGZ1bmN0aW9uKCl7aWYoV2kmJiF0LnN0YXRlLmZha2VkTGFzdENoYXImJiEobmV3IERhdGUtdC5zdGF0ZS5sYXN0TWlkZGxlRG93bjwyMDApKXt2YXIgZT1sLmlucHV0LnNlbGVjdGlvblN0YXJ0LHI9bC5pbnB1dC5zZWxlY3Rpb25FbmQ7bC5pbnB1dC52YWx1ZSs9IiQiLGwuaW5wdXQuc2VsZWN0aW9uU3RhcnQ9ZSxsLmlucHV0LnNlbGVjdGlvbkVuZD1yLHQuc3RhdGUuZmFrZWRMYXN0Q2hhcj0hMH10LnN0YXRlLnBhc3RlSW5jb21pbmc9ITAsZmUodCl9KSxHbihsLmlucHV0LCJjdXQiLG8pLEduKGwuaW5wdXQsImNvcHkiLG8pLEZpJiZHbihsLnNpemVyLCJtb3VzZXVwIixmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PWwuaW5wdXQmJmwuaW5wdXQuYmx1cigpLHBlKHQpfSl9ZnVuY3Rpb24gdmUodCxlKXtmb3IodmFyIHI9Um4oZSk7ciE9dC53cmFwcGVyO3I9ci5wYXJlbnROb2RlKWlmKCFyfHxyLmlnbm9yZUV2ZW50c3x8ci5wYXJlbnROb2RlPT10LnNpemVyJiZyIT10Lm1vdmVyKXJldHVybiEwfWZ1bmN0aW9uIHllKHQsZSxyKXt2YXIgbj10LmRpc3BsYXk7aWYoIXIpe3ZhciBpPVJuKGUpO2lmKGk9PW4uc2Nyb2xsYmFySHx8aT09bi5zY3JvbGxiYXJILmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyVnx8aT09bi5zY3JvbGxiYXJWLmZpcnN0Q2hpbGR8fGk9PW4uc2Nyb2xsYmFyRmlsbGVyfHxpPT1uLmd1dHRlckZpbGxlcilyZXR1cm4gbnVsbH12YXIgbyxsLHM9Zmkobi5saW5lU3BhY2UpO3RyeXtvPWUuY2xpZW50WCxsPWUuY2xpZW50WX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gdGUodCxvLXMubGVmdCxsLXMudG9wKX1mdW5jdGlvbiBiZSh0KXtmdW5jdGlvbiBlKHQpe2lmKCFqZSh2LHQpKXtpZih2PXQsInNpbmdsZSI9PWMpcmV0dXJuIGVyKGkuZG9jLFFlKGwsYSksdCksdm9pZCAwOwppZihnPVFlKGwsZyksbT1RZShsLG0pLCJkb3VibGUiPT1jKXt2YXIgZT1tcihnbihsLHQubGluZSkudGV4dCx0KTskZSh0LGcpP2VyKGkuZG9jLGUuZnJvbSxtKTplcihpLmRvYyxnLGUudG8pfWVsc2UidHJpcGxlIj09YyYmKCRlKHQsZyk/ZXIoaS5kb2MsbSxRZShsLFllKHQubGluZSwwKSkpOmVyKGkuZG9jLGcsUWUobCxZZSh0LmxpbmUrMSwwKSkpKX19ZnVuY3Rpb24gcih0KXt2YXIgbj0rK2Iscz15ZShpLHQsITApO2lmKHMpaWYoamUocyxoKSl7dmFyIGE9dC5jbGllbnRZPHkudG9wPy0yMDp0LmNsaWVudFk+eS5ib3R0b20/MjA6MDthJiZzZXRUaW1lb3V0KGxlKGksZnVuY3Rpb24oKXtiPT1uJiYoby5zY3JvbGxlci5zY3JvbGxUb3ArPWEscih0KSl9KSw1MCl9ZWxzZXtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpLGg9cyxlKHMpO3ZhciB1PXAobyxsKTsocy5saW5lPj11LnRvfHxzLmxpbmU8dS5mcm9tKSYmc2V0VGltZW91dChsZShpLGZ1bmN0aW9uKCl7Yj09biYmcih0KX0pLDE1MCl9fWZ1bmN0aW9uIG4odCl7Yj0xLzAsem4odCkscGUoaSksVm4oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksVm4oZG9jdW1lbnQsIm1vdXNldXAiLEMpfWlmKCFYbih0aGlzLHQpKXt2YXIgaT10aGlzLG89aS5kaXNwbGF5LGw9aS5kb2Mscz1sLnNlbDtpZihzLnNoaWZ0PXQuc2hpZnRLZXksdmUobyx0KSlyZXR1cm4gV2l8fChvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5zY3JvbGxlci5kcmFnZ2FibGU9ITB9LDEwMCkpLHZvaWQgMDtpZighd2UoaSx0KSl7dmFyIGE9eWUoaSx0KTtzd2l0Y2goQm4odCkpe2Nhc2UgMzpyZXR1cm4gWmkmJkllLmNhbGwoaSxpLHQpLHZvaWQgMDtjYXNlIDI6cmV0dXJuIFdpJiYoaS5zdGF0ZS5sYXN0TWlkZGxlRG93bj0rbmV3IERhdGUpLGEmJmVyKGkuZG9jLGEpLHNldFRpbWVvdXQoaWkocGUsaSksMjApLHpuKHQpLHZvaWQgMH1pZighYSlyZXR1cm4gUm4odCk9PW8uc2Nyb2xsZXImJnpuKHQpLHZvaWQgMDtpLnN0YXRlLmZvY3VzZWR8fEVlKGkpO3ZhciB1PStuZXcgRGF0ZSxjPSJzaW5nbGUiO2lmKGppJiZqaS50aW1lPnUtNDAwJiZqZShqaS5wb3MsYSkpYz0idHJpcGxlIix6bih0KSxzZXRUaW1lb3V0KGlpKHBlLGkpLDIwKSx2cihpLGEubGluZSk7ZWxzZSBpZihZaSYmWWkudGltZT51LTQwMCYmamUoWWkucG9zLGEpKXtjPSJkb3VibGUiLGppPXt0aW1lOnUscG9zOmF9LHpuKHQpO3ZhciBmPW1yKGduKGwsYS5saW5lKS50ZXh0LGEpO2VyKGkuZG9jLGYuZnJvbSxmLnRvKX1lbHNlIFlpPXt0aW1lOnUscG9zOmF9O3ZhciBoPWE7aWYoaS5vcHRpb25zLmRyYWdEcm9wJiZXbyYmIWdlKGkpJiYhamUocy5mcm9tLHMudG8pJiYhJGUoYSxzLmZyb20pJiYhJGUocy50byxhKSYmInNpbmdsZSI9PWMpe3ZhciBkPWxlKGksZnVuY3Rpb24oZSl7V2kmJihvLnNjcm9sbGVyLmRyYWdnYWJsZT0hMSksaS5zdGF0ZS5kcmFnZ2luZ1RleHQ9ITEsVm4oZG9jdW1lbnQsIm1vdXNldXAiLGQpLFZuKG8uc2Nyb2xsZXIsImRyb3AiLGQpLE1hdGguYWJzKHQuY2xpZW50WC1lLmNsaWVudFgpK01hdGguYWJzKHQuY2xpZW50WS1lLmNsaWVudFkpPDEwJiYoem4oZSksZXIoaS5kb2MsYSkscGUoaSkpfSk7cmV0dXJuIFdpJiYoby5zY3JvbGxlci5kcmFnZ2FibGU9ITApLGkuc3RhdGUuZHJhZ2dpbmdUZXh0PWQsby5zY3JvbGxlci5kcmFnRHJvcCYmby5zY3JvbGxlci5kcmFnRHJvcCgpLEduKGRvY3VtZW50LCJtb3VzZXVwIixkKSxHbihvLnNjcm9sbGVyLCJkcm9wIixkKSx2b2lkIDB9em4odCksInNpbmdsZSI9PWMmJmVyKGkuZG9jLFFlKGwsYSkpO3ZhciBnPXMuZnJvbSxtPXMudG8sdj1hLHk9Zmkoby53cmFwcGVyKSxiPTAseD1sZShpLGZ1bmN0aW9uKHQpe0FpfHxCbih0KT9yKHQpOm4odCl9KSxDPWxlKGksbik7R24oZG9jdW1lbnQsIm1vdXNlbW92ZSIseCksR24oZG9jdW1lbnQsIm1vdXNldXAiLEMpfX19ZnVuY3Rpb24geGUodCxlLHIsbixpKXt0cnl7dmFyIG89ZS5jbGllbnRYLGw9ZS5jbGllbnRZfWNhdGNoKGUpe3JldHVybiExfWlmKG8+PU1hdGguZmxvb3IoZmkodC5kaXNwbGF5Lmd1dHRlcnMpLnJpZ2h0KSlyZXR1cm4hMTtuJiZ6bihlKTt2YXIgcz10LmRpc3BsYXksYT1maShzLmxpbmVEaXYpO2lmKGw+YS5ib3R0b218fCFZbih0LHIpKXJldHVybiBGbihlKTtsLT1hLnRvcC1zLnZpZXdPZmZzZXQ7Zm9yKHZhciB1PTA7dTx0Lm9wdGlvbnMuZ3V0dGVycy5sZW5ndGg7Kyt1KXt2YXIgYz1zLmd1dHRlcnMuY2hpbGROb2Rlc1t1XTtpZihjJiZmaShjKS5yaWdodD49byl7dmFyIGY9eG4odC5kb2MsbCksaD10Lm9wdGlvbnMuZ3V0dGVyc1t1XTtyZXR1cm4gaSh0LHIsdCxmLGgsZSksRm4oZSl9fX1mdW5jdGlvbiBDZSh0LGUpe3JldHVybiBZbih0LCJndXR0ZXJDb250ZXh0TWVudSIpP3hlKHQsZSwiZ3V0dGVyQ29udGV4dE1lbnUiLCExLEtuKTohMX1mdW5jdGlvbiB3ZSh0LGUpe3JldHVybiB4ZSh0LGUsImd1dHRlckNsaWNrIiwhMCxVbil9ZnVuY3Rpb24gTGUodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fHZlKGUuZGlzcGxheSx0KXx8ZS5vcHRpb25zLm9uRHJhZ0V2ZW50JiZlLm9wdGlvbnMub25EcmFnRXZlbnQoZSxFbih0KSkpKXt6bih0KSxBaSYmKHRvPStuZXcgRGF0ZSk7dmFyIHI9eWUoZSx0LCEwKSxuPXQuZGF0YVRyYW5zZmVyLmZpbGVzO2lmKHImJiFnZShlKSlpZihuJiZuLmxlbmd0aCYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlKWZvcih2YXIgaT1uLmxlbmd0aCxvPUFycmF5KGkpLGw9MCxzPWZ1bmN0aW9uKHQsbil7dmFyIHM9bmV3IEZpbGVSZWFkZXI7cy5vbmxvYWQ9ZnVuY3Rpb24oKXtvW25dPXMucmVzdWx0LCsrbD09aSYmKHI9UWUoZS5kb2MsciksQmUoZS5kb2Mse2Zyb206cix0bzpyLHRleHQ6em8oby5qb2luKCJcbiIpKSxvcmlnaW46InBhc3RlIn0sImFyb3VuZCIpKX0scy5yZWFkQXNUZXh0KHQpfSxhPTA7aT5hOysrYSlzKG5bYV0sYSk7ZWxzZXtpZihlLnN0YXRlLmRyYWdnaW5nVGV4dCYmISRlKHIsZS5kb2Muc2VsLmZyb20pJiYhJGUoZS5kb2Muc2VsLnRvLHIpKXJldHVybiBlLnN0YXRlLmRyYWdnaW5nVGV4dCh0KSxzZXRUaW1lb3V0KGlpKHBlLGUpLDIwKSx2b2lkIDA7dHJ5e3ZhciBvPXQuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTtpZihvKXt2YXIgdT1lLmRvYy5zZWwuZnJvbSxjPWUuZG9jLnNlbC50bztucihlLmRvYyxyLHIpLGUuc3RhdGUuZHJhZ2dpbmdUZXh0JiZfZShlLmRvYywiIix1LGMsInBhc3RlIiksZS5yZXBsYWNlU2VsZWN0aW9uKG8sbnVsbCwicGFzdGUiKSxwZShlKX19Y2F0Y2godCl7fX19fWZ1bmN0aW9uIGtlKHQsZSl7aWYoQWkmJighdC5zdGF0ZS5kcmFnZ2luZ1RleHR8fCtuZXcgRGF0ZS10bzwxMDApKXJldHVybiBQbihlKSx2b2lkIDA7aWYoIVhuKHQsZSkmJiF2ZSh0LmRpc3BsYXksZSkpe3ZhciByPXQuZ2V0U2VsZWN0aW9uKCk7aWYoZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsciksZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlJiYhSWkpe3ZhciBuPXNpKCJpbWciLG51bGwsbnVsbCwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7Iik7bi5zcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09Iix6aSYmKG4ud2lkdGg9bi5oZWlnaHQ9MSx0LmRpc3BsYXkud3JhcHBlci5hcHBlbmRDaGlsZChuKSxuLl90b3A9bi5vZmZzZXRUb3ApLGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLDAsMCksemkmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX19fWZ1bmN0aW9uIFNlKHQsZSl7TWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWUpPDJ8fCh0LmRvYy5zY3JvbGxUb3A9ZSxUaXx8Yih0LFtdLGUpLHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AhPWUmJih0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wPWUpLHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1lKSxUaSYmYih0LFtdKSxXKHQsMTAwKSl9ZnVuY3Rpb24gTWUodCxlLHIpeyhyP2U9PXQuZG9jLnNjcm9sbExlZnQ6TWF0aC5hYnModC5kb2Muc2Nyb2xsTGVmdC1lKTwyKXx8KGU9TWF0aC5taW4oZSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgtdC5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKSx0LmRvYy5zY3JvbGxMZWZ0PWUsZyh0KSx0LmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCE9ZSYmKHQuZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0PWUpLHQuZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQhPWUmJih0LmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0PWUpKX1mdW5jdGlvbiBUZSh0LGUpe3ZhciByPWUud2hlZWxEZWx0YVgsbj1lLndoZWVsRGVsdGFZO251bGw9PXImJmUuZGV0YWlsJiZlLmF4aXM9PWUuSE9SSVpPTlRBTF9BWElTJiYocj1lLmRldGFpbCksbnVsbD09biYmZS5kZXRhaWwmJmUuYXhpcz09ZS5WRVJUSUNBTF9BWElTP249ZS5kZXRhaWw6bnVsbD09biYmKG49ZS53aGVlbERlbHRhKTt2YXIgaT10LmRpc3BsYXksbz1pLnNjcm9sbGVyO2lmKHImJm8uc2Nyb2xsV2lkdGg+by5jbGllbnRXaWR0aHx8biYmby5zY3JvbGxIZWlnaHQ+by5jbGllbnRIZWlnaHQpe2lmKG4mJktpJiZXaSlmb3IodmFyIGw9ZS50YXJnZXQ7bCE9bztsPWwucGFyZW50Tm9kZSlpZihsLmxpbmVPYmope3QuZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQ9bDticmVha31pZihyJiYhVGkmJiF6aSYmbnVsbCE9cm8pcmV0dXJuIG4mJlNlKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbFRvcCtuKnJvLG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0KSkpLE1lKHQsTWF0aC5tYXgoMCxNYXRoLm1pbihvLnNjcm9sbExlZnQrcipybyxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgpKSksem4oZSksaS53aGVlbFN0YXJ0WD1udWxsLHZvaWQgMDtpZihuJiZudWxsIT1ybyl7dmFyIHM9bipybyxhPXQuZG9jLnNjcm9sbFRvcCx1PWEraS53cmFwcGVyLmNsaWVudEhlaWdodDswPnM/YT1NYXRoLm1heCgwLGErcy01MCk6dT1NYXRoLm1pbih0LmRvYy5oZWlnaHQsdStzKzUwKSxiKHQsW10se3RvcDphLGJvdHRvbTp1fSl9MjA+ZW8mJihudWxsPT1pLndoZWVsU3RhcnRYPyhpLndoZWVsU3RhcnRYPW8uc2Nyb2xsTGVmdCxpLndoZWVsU3RhcnRZPW8uc2Nyb2xsVG9wLGkud2hlZWxEWD1yLGkud2hlZWxEWT1uLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihudWxsIT1pLndoZWVsU3RhcnRYKXt2YXIgdD1vLnNjcm9sbExlZnQtaS53aGVlbFN0YXJ0WCxlPW8uc2Nyb2xsVG9wLWkud2hlZWxTdGFydFkscj1lJiZpLndoZWVsRFkmJmUvaS53aGVlbERZfHx0JiZpLndoZWVsRFgmJnQvaS53aGVlbERYO2kud2hlZWxTdGFydFg9aS53aGVlbFN0YXJ0WT1udWxsLHImJihybz0ocm8qZW8rcikvKGVvKzEpLCsrZW8pfX0sMjAwKSk6KGkud2hlZWxEWCs9cixpLndoZWVsRFkrPW4pKX19ZnVuY3Rpb24gQWUodCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9bW9bZV0sIWUpKXJldHVybiExO3QuZGlzcGxheS5wb2xsaW5nRmFzdCYmaGUodCkmJih0LmRpc3BsYXkucG9sbGluZ0Zhc3Q9ITEpO3ZhciBuPXQuZG9jLGk9bi5zZWwuc2hpZnQsbz0hMTt0cnl7Z2UodCkmJih0LnN0YXRlLnN1cHByZXNzRWRpdHM9ITApLHImJihuLnNlbC5zaGlmdD0hMSksbz1lKHQpIT1Bb31maW5hbGx5e24uc2VsLnNoaWZ0PWksdC5zdGF0ZS5zdXBwcmVzc0VkaXRzPSExfXJldHVybiBvfWZ1bmN0aW9uIEhlKHQpe3ZhciBlPXQuc3RhdGUua2V5TWFwcy5zbGljZSgwKTtyZXR1cm4gdC5vcHRpb25zLmV4dHJhS2V5cyYmZS5wdXNoKHQub3B0aW9ucy5leHRyYUtleXMpLGUucHVzaCh0Lm9wdGlvbnMua2V5TWFwKSxlfWZ1bmN0aW9uIE5lKHQsZSl7dmFyIHI9Q3IodC5vcHRpb25zLmtleU1hcCksbj1yLmF1dG87Y2xlYXJUaW1lb3V0KG5vKSxuJiYhTHIoZSkmJihubz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Q3IodC5vcHRpb25zLmtleU1hcCk9PXImJih0Lm9wdGlvbnMua2V5TWFwPW4uY2FsbD9uLmNhbGwobnVsbCx0KTpuLGwodCkpfSw1MCkpO3ZhciBpPWtyKGUsITApLG89ITE7aWYoIWkpcmV0dXJuITE7dmFyIHM9SGUodCk7cmV0dXJuIG89ZS5zaGlmdEtleT93cigiU2hpZnQtIitpLHMsZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KXx8d3IoaSxzLGZ1bmN0aW9uKGUpe3JldHVybigic3RyaW5nIj09dHlwZW9mIGU/L15nb1tBLVpdLy50ZXN0KGUpOmUubW90aW9uKT9BZSh0LGUpOnZvaWQgMH0pOndyKGkscyxmdW5jdGlvbihlKXtyZXR1cm4gQWUodCxlKX0pLG8mJih6bihlKSxEKHQpLE5pJiYoZS5vbGRLZXlDb2RlPWUua2V5Q29kZSxlLmtleUNvZGU9MCksVW4odCwia2V5SGFuZGxlZCIsdCxpLGUpKSxvfWZ1bmN0aW9uIERlKHQsZSxyKXt2YXIgbj13cigiJyIrcisiJyIsSGUodCksZnVuY3Rpb24oZSl7cmV0dXJuIEFlKHQsZSwhMCl9KTtyZXR1cm4gbiYmKHpuKGUpLEQodCksVW4odCwia2V5SGFuZGxlZCIsdCwiJyIrcisiJyIsZSkpLG59ZnVuY3Rpb24gV2UodCl7dmFyIGU9dGhpcztpZihlLnN0YXRlLmZvY3VzZWR8fEVlKGUpLCEoWG4oZSx0KXx8ZS5vcHRpb25zLm9uS2V5RXZlbnQmJmUub3B0aW9ucy5vbktleUV2ZW50KGUsRW4odCkpKSl7QWkmJjI3PT10LmtleUNvZGUmJih0LnJldHVyblZhbHVlPSExKTt2YXIgcj10LmtleUNvZGU7ZS5kb2Muc2VsLnNoaWZ0PTE2PT1yfHx0LnNoaWZ0S2V5O3ZhciBuPU5lKGUsdCk7emkmJihvbz1uP3I6bnVsbCwhbiYmODg9PXImJiFGbyYmKEtpP3QubWV0YUtleTp0LmN0cmxLZXkpJiZlLnJlcGxhY2VTZWxlY3Rpb24oIiIpKX19ZnVuY3Rpb24gT2UodCl7dmFyIGU9dGhpcztpZighKFhuKGUsdCl8fGUub3B0aW9ucy5vbktleUV2ZW50JiZlLm9wdGlvbnMub25LZXlFdmVudChlLEVuKHQpKSkpe3ZhciByPXQua2V5Q29kZSxuPXQuY2hhckNvZGU7aWYoemkmJnI9PW9vKXJldHVybiBvbz1udWxsLHpuKHQpLHZvaWQgMDtpZighKHppJiYoIXQud2hpY2h8fHQud2hpY2g8MTApfHxGaSl8fCFOZShlLHQpKXt2YXIgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PW4/cjpuKTt0aGlzLm9wdGlvbnMuZWxlY3RyaWNDaGFycyYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzJiZ0aGlzLm9wdGlvbnMuc21hcnRJbmRlbnQmJiFnZSh0aGlzKSYmdGhpcy5kb2MubW9kZS5lbGVjdHJpY0NoYXJzLmluZGV4T2YoaSk+LTEmJnNldFRpbWVvdXQobGUoZSxmdW5jdGlvbigpe2hyKGUsZS5kb2Muc2VsLnRvLmxpbmUsInNtYXJ0Iil9KSw3NSksRGUoZSx0LGkpfHwoQWkmJiFOaSYmKGUuZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbj1udWxsKSxmZShlKSl9fX1mdW5jdGlvbiBFZSh0KXsibm9jdXJzb3IiIT10Lm9wdGlvbnMucmVhZE9ubHkmJih0LnN0YXRlLmZvY3VzZWR8fChLbih0LCJmb2N1cyIsdCksdC5zdGF0ZS5mb2N1c2VkPSEwLC0xPT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNvZGVNaXJyb3ItZm9jdXNlZFxiLykmJih0LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUrPSIgQ29kZU1pcnJvci1mb2N1c2VkIiksdC5jdXJPcHx8KGRlKHQsITApLFdpJiZzZXRUaW1lb3V0KGlpKGRlLHQsITApLDApKSksY2UodCksRCh0KSl9ZnVuY3Rpb24gemUodCl7dC5zdGF0ZS5mb2N1c2VkJiYoS24odCwiYmx1ciIsdCksdC5zdGF0ZS5mb2N1c2VkPSExLHQuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZT10LmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUucmVwbGFjZSgiIENvZGVNaXJyb3ItZm9jdXNlZCIsIiIpKSxjbGVhckludGVydmFsKHQuZGlzcGxheS5ibGlua2VyKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zdGF0ZS5mb2N1c2VkfHwodC5kb2Muc2VsLnNoaWZ0PSExKX0sMTUwKX1mdW5jdGlvbiBJZSh0LGUpe2Z1bmN0aW9uIHIoKXtpZihudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXt2YXIgdD1pLmlucHV0LnZhbHVlPSLigIsiKyhqZShvLmZyb20sby50byk/IiI6aS5pbnB1dC52YWx1ZSk7aS5wcmV2SW5wdXQ9IuKAiyIsaS5pbnB1dC5zZWxlY3Rpb25TdGFydD0xLGkuaW5wdXQuc2VsZWN0aW9uRW5kPXQubGVuZ3RofX1mdW5jdGlvbiBuKCl7aWYoaS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGkuaW5wdXQuc3R5bGUuY3NzVGV4dD11LE5pJiYoaS5zY3JvbGxiYXJWLnNjcm9sbFRvcD1pLnNjcm9sbGVyLnNjcm9sbFRvcD1zKSxjZSh0KSxudWxsIT1pLmlucHV0LnNlbGVjdGlvblN0YXJ0KXsoIUFpfHxOaSkmJnIoKSxjbGVhclRpbWVvdXQoaW8pO3ZhciBlPTAsbj1mdW5jdGlvbigpeyIgIj09aS5wcmV2SW5wdXQmJjA9PWkuaW5wdXQuc2VsZWN0aW9uU3RhcnQ/bGUodCxtby5zZWxlY3RBbGwpKHQpOmUrKzwxMD9pbz1zZXRUaW1lb3V0KG4sNTAwKTpkZSh0KX07aW89c2V0VGltZW91dChuLDIwMCl9fWlmKCFYbih0LGUsImNvbnRleHRtZW51Iikpe3ZhciBpPXQuZGlzcGxheSxvPXQuZG9jLnNlbDtpZighdmUoaSxlKSYmIUNlKHQsZSkpe3ZhciBsPXllKHQsZSkscz1pLnNjcm9sbGVyLnNjcm9sbFRvcDtpZihsJiYhemkpe3ZhciBhPXQub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnU7YSYmKGplKG8uZnJvbSxvLnRvKXx8JGUobCxvLmZyb20pfHwhJGUobCxvLnRvKSkmJmxlKHQsbnIpKHQuZG9jLGwsbCk7dmFyIHU9aS5pbnB1dC5zdHlsZS5jc3NUZXh0O2lmKGkuaW5wdXREaXYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLmlucHV0LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9wOiAiKyhlLmNsaWVudFktNSkrInB4OyBsZWZ0OiAiKyhlLmNsaWVudFgtNSkrInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgb3V0bGluZTogbm9uZTsiKyJib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgLW1zLW9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyIscGUodCksZGUodCwhMCksamUoby5mcm9tLG8udG8pJiYoaS5pbnB1dC52YWx1ZT1pLnByZXZJbnB1dD0iICIpLEFpJiYhTmkmJnIoKSxaaSl7UG4oZSk7dmFyIGM9ZnVuY3Rpb24oKXtWbih3aW5kb3csIm1vdXNldXAiLGMpLHNldFRpbWVvdXQobiwyMCl9O0duKHdpbmRvdywibW91c2V1cCIsYyl9ZWxzZSBzZXRUaW1lb3V0KG4sNTApfX19fWZ1bmN0aW9uIEZlKHQsZSxyKXtpZighJGUoZS5mcm9tLHIpKXJldHVybiBRZSh0LHIpO3ZhciBuPWUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKTtpZihyLmxpbmU+ZS50by5saW5lK24pe3ZhciBpPXIubGluZS1uLG89dC5maXJzdCt0LnNpemUtMTtyZXR1cm4gaT5vP1llKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCk6SmUocixnbih0LGkpLnRleHQubGVuZ3RoKX1pZihyLmxpbmU9PWUudG8ubGluZStuKXJldHVybiBKZShyLFFuKGUudGV4dCkubGVuZ3RoKygxPT1lLnRleHQubGVuZ3RoP2UuZnJvbS5jaDowKStnbih0LGUudG8ubGluZSkudGV4dC5sZW5ndGgtZS50by5jaCk7dmFyIGw9ci5saW5lLWUuZnJvbS5saW5lO3JldHVybiBKZShyLGUudGV4dFtsXS5sZW5ndGgrKGw/MDplLmZyb20uY2gpKX1mdW5jdGlvbiBQZSh0LGUscil7aWYociYmIm9iamVjdCI9PXR5cGVvZiByKXJldHVybnthbmNob3I6RmUodCxlLHIuYW5jaG9yKSxoZWFkOkZlKHQsZSxyLmhlYWQpfTtpZigic3RhcnQiPT1yKXJldHVybnthbmNob3I6ZS5mcm9tLGhlYWQ6ZS5mcm9tfTt2YXIgbj1sbyhlKTtpZigiYXJvdW5kIj09cilyZXR1cm57YW5jaG9yOmUuZnJvbSxoZWFkOm59O2lmKCJlbmQiPT1yKXJldHVybnthbmNob3I6bixoZWFkOm59O3ZhciBpPWZ1bmN0aW9uKHQpe2lmKCRlKHQsZS5mcm9tKSlyZXR1cm4gdDtpZighJGUoZS50byx0KSlyZXR1cm4gbjt2YXIgcj10LmxpbmUrZS50ZXh0Lmxlbmd0aC0oZS50by5saW5lLWUuZnJvbS5saW5lKS0xLGk9dC5jaDtyZXR1cm4gdC5saW5lPT1lLnRvLmxpbmUmJihpKz1uLmNoLWUudG8uY2gpLFllKHIsaSl9O3JldHVybnthbmNob3I6aSh0LnNlbC5hbmNob3IpLGhlYWQ6aSh0LnNlbC5oZWFkKX19ZnVuY3Rpb24gUmUodCxlLHIpe3ZhciBuPXtjYW5jZWxlZDohMSxmcm9tOmUuZnJvbSx0bzplLnRvLHRleHQ6ZS50ZXh0LG9yaWdpbjplLm9yaWdpbixjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGVkPSEwfX07cmV0dXJuIHImJihuLnVwZGF0ZT1mdW5jdGlvbihlLHIsbixpKXtlJiYodGhpcy5mcm9tPVFlKHQsZSkpLHImJih0aGlzLnRvPVFlKHQscikpLG4mJih0aGlzLnRleHQ9biksdm9pZCAwIT09aSYmKHRoaXMub3JpZ2luPWkpfSksS24odCwiYmVmb3JlQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZUNoYW5nZSIsdC5jbSxuKSxuLmNhbmNlbGVkP251bGw6e2Zyb206bi5mcm9tLHRvOm4udG8sdGV4dDpuLnRleHQsb3JpZ2luOm4ub3JpZ2lufX1mdW5jdGlvbiBCZSh0LGUscixuKXtpZih0LmNtKXtpZighdC5jbS5jdXJPcClyZXR1cm4gbGUodC5jbSxCZSkodCxlLHIsbik7aWYodC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXJldHVybn1pZighKFluKHQsImJlZm9yZUNoYW5nZSIpfHx0LmNtJiZZbih0LmNtLCJiZWZvcmVDaGFuZ2UiKSl8fChlPVJlKHQsZSwhMCkpKXt2YXIgaT1xaSYmIW4mJkZyKHQsZS5mcm9tLGUudG8pO2lmKGkpe2Zvcih2YXIgbz1pLmxlbmd0aC0xO28+PTE7LS1vKUdlKHQse2Zyb206aVtvXS5mcm9tLHRvOmlbb10udG8sdGV4dDpbIiJdfSk7aS5sZW5ndGgmJkdlKHQse2Zyb206aVswXS5mcm9tLHRvOmlbMF0udG8sdGV4dDplLnRleHR9LHIpfWVsc2UgR2UodCxlLHIpfX1mdW5jdGlvbiBHZSh0LGUscil7aWYoMSE9ZS50ZXh0Lmxlbmd0aHx8IiIhPWUudGV4dFswXXx8IWplKGUuZnJvbSxlLnRvKSl7dmFyIG49UGUodCxlLHIpO01uKHQsZSxuLHQuY20/dC5jbS5jdXJPcC5pZDowLzApLFVlKHQsZSxuLHpyKHQsZSkpO3ZhciBpPVtdO2RuKHQsZnVuY3Rpb24odCxyKXtyfHwtMSE9dGkoaSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LGUpLGkucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LGUsbnVsbCx6cih0LGUpKX0pfX1mdW5jdGlvbiBWZSh0LGUpe2lmKCF0LmNtfHwhdC5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKXt2YXIgcj10Lmhpc3Rvcnksbj0oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkucG9wKCk7aWYobil7dmFyIGk9e2NoYW5nZXM6W10sYW5jaG9yQmVmb3JlOm4uYW5jaG9yQWZ0ZXIsaGVhZEJlZm9yZTpuLmhlYWRBZnRlcixhbmNob3JBZnRlcjpuLmFuY2hvckJlZm9yZSxoZWFkQWZ0ZXI6bi5oZWFkQmVmb3JlLGdlbmVyYXRpb246ci5nZW5lcmF0aW9ufTsoInVuZG8iPT1lP3IudW5kb25lOnIuZG9uZSkucHVzaChpKSxyLmdlbmVyYXRpb249bi5nZW5lcmF0aW9ufHwrK3IubWF4R2VuZXJhdGlvbjtmb3IodmFyIG89WW4odCwiYmVmb3JlQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZUNoYW5nZSIpLGw9bi5jaGFuZ2VzLmxlbmd0aC0xO2w+PTA7LS1sKXt2YXIgcz1uLmNoYW5nZXNbbF07aWYocy5vcmlnaW49ZSxvJiYhUmUodCxzLCExKSlyZXR1cm4oInVuZG8iPT1lP3IuZG9uZTpyLnVuZG9uZSkubGVuZ3RoPTAsdm9pZCAwO2kuY2hhbmdlcy5wdXNoKFNuKHQscykpO3ZhciBhPWw/UGUodCxzLG51bGwpOnthbmNob3I6bi5hbmNob3JCZWZvcmUsaGVhZDpuLmhlYWRCZWZvcmV9O1VlKHQscyxhLElyKHQscykpO3ZhciB1PVtdO2RuKHQsZnVuY3Rpb24odCxlKXtlfHwtMSE9dGkodSx0Lmhpc3RvcnkpfHwoV24odC5oaXN0b3J5LHMpLHUucHVzaCh0Lmhpc3RvcnkpKSxVZSh0LHMsbnVsbCxJcih0LHMpKX0pfX19fWZ1bmN0aW9uIEtlKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gWWUodC5saW5lK2UsdC5jaCl9dC5maXJzdCs9ZSx0LmNtJiZ1ZSh0LmNtLHQuZmlyc3QsdC5maXJzdCxlKSx0LnNlbC5oZWFkPXIodC5zZWwuaGVhZCksdC5zZWwuYW5jaG9yPXIodC5zZWwuYW5jaG9yKSx0LnNlbC5mcm9tPXIodC5zZWwuZnJvbSksdC5zZWwudG89cih0LnNlbC50byl9ZnVuY3Rpb24gVWUodCxlLHIsbil7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVWUpKHQsZSxyLG4pO2lmKGUudG8ubGluZTx0LmZpcnN0KXJldHVybiBLZSh0LGUudGV4dC5sZW5ndGgtMS0oZS50by5saW5lLWUuZnJvbS5saW5lKSksdm9pZCAwO2lmKCEoZS5mcm9tLmxpbmU+dC5sYXN0TGluZSgpKSl7aWYoZS5mcm9tLmxpbmU8dC5maXJzdCl7dmFyIGk9ZS50ZXh0Lmxlbmd0aC0xLSh0LmZpcnN0LWUuZnJvbS5saW5lKTtLZSh0LGkpLGU9e2Zyb206WWUodC5maXJzdCwwKSx0bzpZZShlLnRvLmxpbmUraSxlLnRvLmNoKSx0ZXh0OltRbihlLnRleHQpXSxvcmlnaW46ZS5vcmlnaW59fXZhciBvPXQubGFzdExpbmUoKTtlLnRvLmxpbmU+byYmKGU9e2Zyb206ZS5mcm9tLHRvOlllKG8sZ24odCxvKS50ZXh0Lmxlbmd0aCksdGV4dDpbZS50ZXh0WzBdXSxvcmlnaW46ZS5vcmlnaW59KSxlLnJlbW92ZWQ9bW4odCxlLmZyb20sZS50bykscnx8KHI9UGUodCxlLG51bGwpKSx0LmNtP1hlKHQuY20sZSxuLHIpOmNuKHQsZSxuLHIpfX1mdW5jdGlvbiBYZSh0LGUscixuKXt2YXIgbz10LmRvYyxsPXQuZGlzcGxheSxzPWUuZnJvbSxhPWUudG8sdT0hMSxmPXMubGluZTt0Lm9wdGlvbnMubGluZVdyYXBwaW5nfHwoZj1ibihHcihvLGduKG8scy5saW5lKSkpLG8uaXRlcihmLGEubGluZSsxLGZ1bmN0aW9uKHQpe3JldHVybiB0PT1sLm1heExpbmU/KHU9ITAsITApOnZvaWQgMH0pKSwkZShvLnNlbC5oZWFkLGUuZnJvbSl8fCRlKGUudG8sby5zZWwuaGVhZCl8fCh0LmN1ck9wLmN1cnNvckFjdGl2aXR5PSEwKSxjbihvLGUscixuLGkodCkpLHQub3B0aW9ucy5saW5lV3JhcHBpbmd8fChvLml0ZXIoZixzLmxpbmUrZS50ZXh0Lmxlbmd0aCxmdW5jdGlvbih0KXt2YXIgZT1jKG8sdCk7ZT5sLm1heExpbmVMZW5ndGgmJihsLm1heExpbmU9dCxsLm1heExpbmVMZW5ndGg9ZSxsLm1heExpbmVDaGFuZ2VkPSEwLHU9ITEpfSksdSYmKHQuY3VyT3AudXBkYXRlTWF4TGluZT0hMCkpLG8uZnJvbnRpZXI9TWF0aC5taW4oby5mcm9udGllcixzLmxpbmUpLFcodCw0MDApO3ZhciBoPWUudGV4dC5sZW5ndGgtKGEubGluZS1zLmxpbmUpLTE7aWYodWUodCxzLmxpbmUsYS5saW5lKzEsaCksWW4odCwiY2hhbmdlIikpe3ZhciBkPXtmcm9tOnMsdG86YSx0ZXh0OmUudGV4dCxyZW1vdmVkOmUucmVtb3ZlZCxvcmlnaW46ZS5vcmlnaW59O2lmKHQuY3VyT3AudGV4dENoYW5nZWQpe2Zvcih2YXIgcD10LmN1ck9wLnRleHRDaGFuZ2VkO3AubmV4dDtwPXAubmV4dCk7cC5uZXh0PWR9ZWxzZSB0LmN1ck9wLnRleHRDaGFuZ2VkPWR9fWZ1bmN0aW9uIF9lKHQsZSxyLG4saSl7aWYobnx8KG49ciksJGUobixyKSl7dmFyIG89bjtuPXIscj1vfSJzdHJpbmciPT10eXBlb2YgZSYmKGU9em8oZSkpLEJlKHQse2Zyb206cix0bzpuLHRleHQ6ZSxvcmlnaW46aX0sbnVsbCl9ZnVuY3Rpb24gWWUodCxlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFllPyh0aGlzLmxpbmU9dCx0aGlzLmNoPWUsdm9pZCAwKTpuZXcgWWUodCxlKX1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiB0LmxpbmU9PWUubGluZSYmdC5jaD09ZS5jaH1mdW5jdGlvbiAkZSh0LGUpe3JldHVybiB0LmxpbmU8ZS5saW5lfHx0LmxpbmU9PWUubGluZSYmdC5jaDxlLmNofWZ1bmN0aW9uIFplKHQpe3JldHVybiBZZSh0LmxpbmUsdC5jaCl9ZnVuY3Rpb24gcWUodCxlKXtyZXR1cm4gTWF0aC5tYXgodC5maXJzdCxNYXRoLm1pbihlLHQuZmlyc3QrdC5zaXplLTEpKX1mdW5jdGlvbiBRZSh0LGUpe2lmKGUubGluZTx0LmZpcnN0KXJldHVybiBZZSh0LmZpcnN0LDApO3ZhciByPXQuZmlyc3QrdC5zaXplLTE7cmV0dXJuIGUubGluZT5yP1llKHIsZ24odCxyKS50ZXh0Lmxlbmd0aCk6SmUoZSxnbih0LGUubGluZSkudGV4dC5sZW5ndGgpfWZ1bmN0aW9uIEplKHQsZSl7dmFyIHI9dC5jaDtyZXR1cm4gbnVsbD09cnx8cj5lP1llKHQubGluZSxlKTowPnI/WWUodC5saW5lLDApOnR9ZnVuY3Rpb24gdHIodCxlKXtyZXR1cm4gZT49dC5maXJzdCYmZTx0LmZpcnN0K3Quc2l6ZX1mdW5jdGlvbiBlcih0LGUscixuKXtpZih0LnNlbC5zaGlmdHx8dC5zZWwuZXh0ZW5kKXt2YXIgaT10LnNlbC5hbmNob3I7aWYocil7dmFyIG89JGUoZSxpKTtvIT0kZShyLGkpPyhpPWUsZT1yKTpvIT0kZShlLHIpJiYoZT1yKX1ucih0LGksZSxuKX1lbHNlIG5yKHQsZSxyfHxlLG4pO3QuY20mJih0LmNtLmN1ck9wLnVzZXJTZWxDaGFuZ2U9ITApfWZ1bmN0aW9uIHJyKHQsZSxyKXt2YXIgbj17YW5jaG9yOmUsaGVhZDpyfTtyZXR1cm4gS24odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIix0LG4pLHQuY20mJktuKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIsdC5jbSxuKSxuLmFuY2hvcj1RZSh0LG4uYW5jaG9yKSxuLmhlYWQ9UWUodCxuLmhlYWQpLG59ZnVuY3Rpb24gbnIodCxlLHIsbixpKXtpZighaSYmWW4odCwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlIil8fHQuY20mJlluKHQuY20sImJlZm9yZVNlbGVjdGlvbkNoYW5nZSIpKXt2YXIgbz1ycih0LGUscik7cj1vLmhlYWQsZT1vLmFuY2hvcn12YXIgbD10LnNlbDtpZihsLmdvYWxDb2x1bW49bnVsbCxudWxsPT1uJiYobj0kZShyLGwuaGVhZCk/LTE6MSksKGl8fCFqZShlLGwuYW5jaG9yKSkmJihlPW9yKHQsZSxuLCJwdXNoIiE9aSkpLChpfHwhamUocixsLmhlYWQpKSYmKHI9b3IodCxyLG4sInB1c2giIT1pKSksIWplKGwuYW5jaG9yLGUpfHwhamUobC5oZWFkLHIpKXtsLmFuY2hvcj1lLGwuaGVhZD1yO3ZhciBzPSRlKHIsZSk7bC5mcm9tPXM/cjplLGwudG89cz9lOnIsdC5jbSYmKHQuY20uY3VyT3AudXBkYXRlSW5wdXQ9dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPXQuY20uY3VyT3AuY3Vyc29yQWN0aXZpdHk9ITApLFVuKHQsImN1cnNvckFjdGl2aXR5Iix0KX19ZnVuY3Rpb24gaXIodCl7bnIodC5kb2MsdC5kb2Muc2VsLmZyb20sdC5kb2Muc2VsLnRvLG51bGwsInB1c2giKX1mdW5jdGlvbiBvcih0LGUscixuKXt2YXIgaT0hMSxvPWUsbD1yfHwxO3QuY2FudEVkaXQ9ITE7dDpmb3IoOzspe3ZhciBzPWduKHQsby5saW5lKTtpZihzLm1hcmtlZFNwYW5zKWZvcih2YXIgYT0wO2E8cy5tYXJrZWRTcGFucy5sZW5ndGg7KythKXt2YXIgdT1zLm1hcmtlZFNwYW5zW2FdLGM9dS5tYXJrZXI7aWYoKG51bGw9PXUuZnJvbXx8KGMuaW5jbHVzaXZlTGVmdD91LmZyb208PW8uY2g6dS5mcm9tPG8uY2gpKSYmKG51bGw9PXUudG98fChjLmluY2x1c2l2ZVJpZ2h0P3UudG8+PW8uY2g6dS50bz5vLmNoKSkpe2lmKG4mJihLbihjLCJiZWZvcmVDdXJzb3JFbnRlciIpLGMuZXhwbGljaXRseUNsZWFyZWQpKXtpZihzLm1hcmtlZFNwYW5zKXstLWE7Y29udGludWV9YnJlYWt9aWYoIWMuYXRvbWljKWNvbnRpbnVlO3ZhciBmPWMuZmluZCgpWzA+bD8iZnJvbSI6InRvIl07aWYoamUoZixvKSYmKGYuY2grPWwsZi5jaDwwP2Y9Zi5saW5lPnQuZmlyc3Q/UWUodCxZZShmLmxpbmUtMSkpOm51bGw6Zi5jaD5zLnRleHQubGVuZ3RoJiYoZj1mLmxpbmU8dC5maXJzdCt0LnNpemUtMT9ZZShmLmxpbmUrMSwwKTpudWxsKSwhZikpe2lmKGkpcmV0dXJuIG4/KHQuY2FudEVkaXQ9ITAsWWUodC5maXJzdCwwKSk6b3IodCxlLHIsITApO2k9ITAsZj1lLGw9LWx9bz1mO2NvbnRpbnVlIHR9fXJldHVybiBvfX1mdW5jdGlvbiBscih0KXt2YXIgZT1zcih0LHQuZG9jLnNlbC5oZWFkLG51bGwsdC5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbik7aWYodC5zdGF0ZS5mb2N1c2VkKXt2YXIgcj10LmRpc3BsYXksbj1maShyLnNpemVyKSxpPW51bGw7aWYoZS50b3Arbi50b3A8MD9pPSEwOmUuYm90dG9tK24udG9wPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpJiYoaT0hMSksbnVsbCE9aSYmIUJpKXt2YXIgbz0ibm9uZSI9PXIuY3Vyc29yLnN0eWxlLmRpc3BsYXk7byYmKHIuY3Vyc29yLnN0eWxlLmRpc3BsYXk9IiIsci5jdXJzb3Iuc3R5bGUubGVmdD1lLmxlZnQrInB4IixyLmN1cnNvci5zdHlsZS50b3A9ZS50b3Atci52aWV3T2Zmc2V0KyJweCIpLHIuY3Vyc29yLnNjcm9sbEludG9WaWV3KGkpLG8mJihyLmN1cnNvci5zdHlsZS5kaXNwbGF5PSJub25lIil9fX1mdW5jdGlvbiBzcih0LGUscixuKXtmb3IobnVsbD09biYmKG49MCk7Oyl7dmFyIGk9ITEsbz1RKHQsZSksbD1yJiZyIT1lP1EodCxyKTpvLHM9dXIodCxNYXRoLm1pbihvLmxlZnQsbC5sZWZ0KSxNYXRoLm1pbihvLnRvcCxsLnRvcCktbixNYXRoLm1heChvLmxlZnQsbC5sZWZ0KSxNYXRoLm1heChvLmJvdHRvbSxsLmJvdHRvbSkrbiksYT10LmRvYy5zY3JvbGxUb3AsdT10LmRvYy5zY3JvbGxMZWZ0O2lmKG51bGwhPXMuc2Nyb2xsVG9wJiYoU2UodCxzLnNjcm9sbFRvcCksTWF0aC5hYnModC5kb2Muc2Nyb2xsVG9wLWEpPjEmJihpPSEwKSksbnVsbCE9cy5zY3JvbGxMZWZ0JiYoTWUodCxzLnNjcm9sbExlZnQpLE1hdGguYWJzKHQuZG9jLnNjcm9sbExlZnQtdSk+MSYmKGk9ITApKSwhaSlyZXR1cm4gb319ZnVuY3Rpb24gYXIodCxlLHIsbixpKXt2YXIgbz11cih0LGUscixuLGkpO251bGwhPW8uc2Nyb2xsVG9wJiZTZSh0LG8uc2Nyb2xsVG9wKSxudWxsIT1vLnNjcm9sbExlZnQmJk1lKHQsby5zY3JvbGxMZWZ0KX1mdW5jdGlvbiB1cih0LGUscixuLGkpe3ZhciBvPXQuZGlzcGxheSxsPXJlKHQuZGlzcGxheSk7MD5yJiYocj0wKTt2YXIgcz1vLnNjcm9sbGVyLmNsaWVudEhlaWdodC1UbyxhPW8uc2Nyb2xsZXIuc2Nyb2xsVG9wLHU9e30sYz10LmRvYy5oZWlnaHQrRihvKSxmPWw+cixoPWk+Yy1sO2lmKGE+cil1LnNjcm9sbFRvcD1mPzA6cjtlbHNlIGlmKGk+YStzKXt2YXIgZD1NYXRoLm1pbihyLChoP2M6aSktcyk7ZCE9YSYmKHUuc2Nyb2xsVG9wPWQpfXZhciBwPW8uc2Nyb2xsZXIuY2xpZW50V2lkdGgtVG8sZz1vLnNjcm9sbGVyLnNjcm9sbExlZnQ7ZSs9by5ndXR0ZXJzLm9mZnNldFdpZHRoLG4rPW8uZ3V0dGVycy5vZmZzZXRXaWR0aDt2YXIgbT1vLmd1dHRlcnMub2Zmc2V0V2lkdGgsdj1tKzEwPmU7cmV0dXJuIGcrbT5lfHx2Pyh2JiYoZT0wKSx1LnNjcm9sbExlZnQ9TWF0aC5tYXgoMCxlLTEwLW0pKTpuPnArZy0zJiYodS5zY3JvbGxMZWZ0PW4rMTAtcCksdX1mdW5jdGlvbiBjcih0LGUscil7dC5jdXJPcC51cGRhdGVTY3JvbGxQb3M9e3Njcm9sbExlZnQ6bnVsbD09ZT90LmRvYy5zY3JvbGxMZWZ0OmUsc2Nyb2xsVG9wOm51bGw9PXI/dC5kb2Muc2Nyb2xsVG9wOnJ9fWZ1bmN0aW9uIGZyKHQsZSxyKXt2YXIgbj10LmN1ck9wLnVwZGF0ZVNjcm9sbFBvc3x8KHQuY3VyT3AudXBkYXRlU2Nyb2xsUG9zPXtzY3JvbGxMZWZ0OnQuZG9jLnNjcm9sbExlZnQsc2Nyb2xsVG9wOnQuZG9jLnNjcm9sbFRvcH0pLGk9dC5kaXNwbGF5LnNjcm9sbGVyO24uc2Nyb2xsVG9wPU1hdGgubWF4KDAsTWF0aC5taW4oaS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQsbi5zY3JvbGxUb3ArcikpLG4uc2Nyb2xsTGVmdD1NYXRoLm1heCgwLE1hdGgubWluKGkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aCxuLnNjcm9sbExlZnQrZSkpfWZ1bmN0aW9uIGhyKHQsZSxyLG4pe3ZhciBpPXQuZG9jO2lmKG51bGw9PXImJihyPSJhZGQiKSwic21hcnQiPT1yKWlmKHQuZG9jLm1vZGUuaW5kZW50KXZhciBvPXoodCxlKTtlbHNlIHI9InByZXYiO3ZhciBsLHM9dC5vcHRpb25zLnRhYlNpemUsYT1nbihpLGUpLHU9Wm4oYS50ZXh0LG51bGwscyksYz1hLnRleHQubWF0Y2goL15ccyovKVswXTtpZigic21hcnQiPT1yJiYobD10LmRvYy5tb2RlLmluZGVudChvLGEudGV4dC5zbGljZShjLmxlbmd0aCksYS50ZXh0KSxsPT1Bbykpe2lmKCFuKXJldHVybjtyPSJwcmV2In0icHJldiI9PXI/bD1lPmkuZmlyc3Q/Wm4oZ24oaSxlLTEpLnRleHQsbnVsbCxzKTowOiJhZGQiPT1yP2w9dSt0Lm9wdGlvbnMuaW5kZW50VW5pdDoic3VidHJhY3QiPT1yP2w9dS10Lm9wdGlvbnMuaW5kZW50VW5pdDoibnVtYmVyIj09dHlwZW9mIHImJihsPXUrciksbD1NYXRoLm1heCgwLGwpO3ZhciBmPSIiLGg9MDtpZih0Lm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpZm9yKHZhciBkPU1hdGguZmxvb3IobC9zKTtkOy0tZCloKz1zLGYrPSIJIjtsPmgmJihmKz1xbihsLWgpKSxmIT1jP19lKHQuZG9jLGYsWWUoZSwwKSxZZShlLGMubGVuZ3RoKSwiK2lucHV0Iik6aS5zZWwuaGVhZC5saW5lPT1lJiZpLnNlbC5oZWFkLmNoPGMubGVuZ3RoJiZucihpLFllKGUsYy5sZW5ndGgpLFllKGUsYy5sZW5ndGgpLDEpLGEuc3RhdGVBZnRlcj1udWxsfWZ1bmN0aW9uIGRyKHQsZSxyKXt2YXIgbj1lLGk9ZSxvPXQuZG9jO3JldHVybiJudW1iZXIiPT10eXBlb2YgZT9pPWduKG8scWUobyxlKSk6bj1ibihlKSxudWxsPT1uP251bGw6cihpLG4pPyh1ZSh0LG4sbisxKSxpKTpudWxsfWZ1bmN0aW9uIHByKHQsZSxyLG4saSl7ZnVuY3Rpb24gbygpe3ZhciBlPXMrcjtyZXR1cm4gZTx0LmZpcnN0fHxlPj10LmZpcnN0K3Quc2l6ZT9mPSExOihzPWUsYz1nbih0LGUpKX1mdW5jdGlvbiBsKHQpe3ZhciBlPShpP1NpOk1pKShjLGEsciwhMCk7aWYobnVsbD09ZSl7aWYodHx8IW8oKSlyZXR1cm4gZj0hMTthPWk/KDA+cj9iaTp5aSkoYyk6MD5yP2MudGV4dC5sZW5ndGg6MH1lbHNlIGE9ZTtyZXR1cm4hMH12YXIgcz1lLmxpbmUsYT1lLmNoLHU9cixjPWduKHQscyksZj0hMDtpZigiY2hhciI9PW4pbCgpO2Vsc2UgaWYoImNvbHVtbiI9PW4pbCghMCk7ZWxzZSBpZigid29yZCI9PW58fCJncm91cCI9PW4pZm9yKHZhciBoPW51bGwsZD0iZ3JvdXAiPT1uLHA9ITA7ISgwPnIpfHxsKCFwKTtwPSExKXt2YXIgZz1jLnRleHQuY2hhckF0KGEpfHwiXG4iLG09b2koZyk/InciOmQ/L1xzLy50ZXN0KGcpP251bGw6InAiOm51bGw7aWYoaCYmaCE9bSl7MD5yJiYocj0xLGwoKSk7YnJlYWt9aWYobSYmKGg9bSkscj4wJiYhbCghcCkpYnJlYWt9dmFyIHY9b3IodCxZZShzLGEpLHUsITApO3JldHVybiBmfHwodi5oaXRTaWRlPSEwKSx2fWZ1bmN0aW9uIGdyKHQsZSxyLG4pe3ZhciBpLG89dC5kb2MsbD1lLmxlZnQ7aWYoInBhZ2UiPT1uKXt2YXIgcz1NYXRoLm1pbih0LmRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsd2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTtpPWUudG9wK3IqKHMtKDA+cj8xLjU6LjUpKnJlKHQuZGlzcGxheSkpfWVsc2UibGluZSI9PW4mJihpPXI+MD9lLmJvdHRvbSszOmUudG9wLTMpO2Zvcig7Oyl7dmFyIGE9dGUodCxsLGkpO2lmKCFhLm91dHNpZGUpYnJlYWs7aWYoMD5yPzA+PWk6aT49by5oZWlnaHQpe2EuaGl0U2lkZT0hMDticmVha31pKz01KnJ9cmV0dXJuIGF9ZnVuY3Rpb24gbXIodCxlKXt2YXIgcj1lLmNoLG49ZS5jaDtpZih0KXsoZS54UmVsPDB8fG49PXQubGVuZ3RoKSYmcj8tLXI6KytuO2Zvcih2YXIgaT10LmNoYXJBdChyKSxvPW9pKGkpP29pOi9ccy8udGVzdChpKT9mdW5jdGlvbih0KXtyZXR1cm4vXHMvLnRlc3QodCl9OmZ1bmN0aW9uKHQpe3JldHVybiEvXHMvLnRlc3QodCkmJiFvaSh0KX07cj4wJiZvKHQuY2hhckF0KHItMSkpOyktLXI7Zm9yKDtuPHQubGVuZ3RoJiZvKHQuY2hhckF0KG4pKTspKytufXJldHVybntmcm9tOlllKGUubGluZSxyKSx0bzpZZShlLmxpbmUsbil9fWZ1bmN0aW9uIHZyKHQsZSl7ZXIodC5kb2MsWWUoZSwwKSxRZSh0LmRvYyxZZShlKzEsMCkpKX1mdW5jdGlvbiB5cihlLHIsbixpKXt0LmRlZmF1bHRzW2VdPXIsbiYmKHNvW2VdPWk/ZnVuY3Rpb24odCxlLHIpe3IhPXVvJiZuKHQsZSxyKX06bil9ZnVuY3Rpb24gYnIodCxlKXtpZihlPT09ITApcmV0dXJuIGU7aWYodC5jb3B5U3RhdGUpcmV0dXJuIHQuY29weVN0YXRlKGUpO3ZhciByPXt9O2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dO2kgaW5zdGFuY2VvZiBBcnJheSYmKGk9aS5jb25jYXQoW10pKSxyW25dPWl9cmV0dXJuIHJ9ZnVuY3Rpb24geHIodCxlLHIpe3JldHVybiB0LnN0YXJ0U3RhdGU/dC5zdGFydFN0YXRlKGUscik6ITB9ZnVuY3Rpb24gQ3IodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3ZvW3RdOnR9ZnVuY3Rpb24gd3IodCxlLHIpe2Z1bmN0aW9uIG4oZSl7ZT1DcihlKTt2YXIgaT1lW3RdO2lmKGk9PT0hMSlyZXR1cm4ic3RvcCI7aWYobnVsbCE9aSYmcihpKSlyZXR1cm4hMDtpZihlLm5vZmFsbHRocm91Z2gpcmV0dXJuInN0b3AiO3ZhciBvPWUuZmFsbHRocm91Z2g7aWYobnVsbD09bylyZXR1cm4hMTtpZigiW29iamVjdCBBcnJheV0iIT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpcmV0dXJuIG4obyk7Zm9yKHZhciBsPTAscz1vLmxlbmd0aDtzPmw7KytsKXt2YXIgYT1uKG9bbF0pO2lmKGEpcmV0dXJuIGF9cmV0dXJuITF9Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpe3ZhciBvPW4oZVtpXSk7aWYobylyZXR1cm4ic3RvcCIhPW99fWZ1bmN0aW9uIExyKHQpe3ZhciBlPVBvW3Qua2V5Q29kZV07cmV0dXJuIkN0cmwiPT1lfHwiQWx0Ij09ZXx8IlNoaWZ0Ij09ZXx8Ik1vZCI9PWV9ZnVuY3Rpb24ga3IodCxlKXtpZih6aSYmMzQ9PXQua2V5Q29kZSYmdFsiY2hhciJdKXJldHVybiExO3ZhciByPVBvW3Qua2V5Q29kZV07cmV0dXJuIG51bGw9PXJ8fHQuYWx0R3JhcGhLZXk/ITE6KHQuYWx0S2V5JiYocj0iQWx0LSIrciksKCRpP3QubWV0YUtleTp0LmN0cmxLZXkpJiYocj0iQ3RybC0iK3IpLCgkaT90LmN0cmxLZXk6dC5tZXRhS2V5KSYmKHI9IkNtZC0iK3IpLCFlJiZ0LnNoaWZ0S2V5JiYocj0iU2hpZnQtIityKSxyKX1mdW5jdGlvbiBTcih0LGUpe3RoaXMucG9zPXRoaXMuc3RhcnQ9MCx0aGlzLnN0cmluZz10LHRoaXMudGFiU2l6ZT1lfHw4LHRoaXMubGFzdENvbHVtblBvcz10aGlzLmxhc3RDb2x1bW5WYWx1ZT0wfWZ1bmN0aW9uIE1yKHQsZSl7dGhpcy5saW5lcz1bXSx0aGlzLnR5cGU9ZSx0aGlzLmRvYz10fWZ1bmN0aW9uIFRyKHQsZSxyLG4saSl7aWYobiYmbi5zaGFyZWQpcmV0dXJuIEhyKHQsZSxyLG4saSk7aWYodC5jbSYmIXQuY20uY3VyT3ApcmV0dXJuIGxlKHQuY20sVHIpKHQsZSxyLG4saSk7dmFyIG89bmV3IE1yKHQsaSk7aWYoJGUocixlKXx8amUoZSxyKSYmInJhbmdlIj09aSYmKCFuLmluY2x1c2l2ZUxlZnR8fCFuLmluY2x1c2l2ZVJpZ2h0KSlyZXR1cm4gbztuJiZyaShuLG8pLG8ucmVwbGFjZWRXaXRoJiYoby5jb2xsYXBzZWQ9ITAsby5yZXBsYWNlZFdpdGg9c2koInNwYW4iLFtvLnJlcGxhY2VkV2l0aF0sIkNvZGVNaXJyb3Itd2lkZ2V0Iiksbi5oYW5kbGVNb3VzZUV2ZW50c3x8KG8ucmVwbGFjZWRXaXRoLmlnbm9yZUV2ZW50cz0hMCkpLG8uY29sbGFwc2VkJiYoUWk9ITApLG8uYWRkVG9IaXN0b3J5JiZNbih0LHtmcm9tOmUsdG86cixvcmlnaW46Im1hcmtUZXh0In0se2hlYWQ6dC5zZWwuaGVhZCxhbmNob3I6dC5zZWwuYW5jaG9yfSwwLzApO3ZhciBsLHMsYSx1PWUubGluZSxjPTAsZj10LmNtO2lmKHQuaXRlcih1LHIubGluZSsxLGZ1bmN0aW9uKG4pe2YmJm8uY29sbGFwc2VkJiYhZi5vcHRpb25zLmxpbmVXcmFwcGluZyYmR3IodCxuKT09Zi5kaXNwbGF5Lm1heExpbmUmJihhPSEwKTt2YXIgaT17ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOm99O2MrPW4udGV4dC5sZW5ndGgsdT09ZS5saW5lJiYoaS5mcm9tPWUuY2gsYy09ZS5jaCksdT09ci5saW5lJiYoaS50bz1yLmNoLGMtPW4udGV4dC5sZW5ndGgtci5jaCksby5jb2xsYXBzZWQmJih1PT1yLmxpbmUmJihzPVByKG4sci5jaCkpLHU9PWUubGluZT9sPVByKG4sZS5jaCk6eW4obiwwKSksV3IobixpKSwrK3V9KSxvLmNvbGxhcHNlZCYmdC5pdGVyKGUubGluZSxyLmxpbmUrMSxmdW5jdGlvbihlKXtWcih0LGUpJiZ5bihlLDApfSksby5jbGVhck9uRW50ZXImJkduKG8sImJlZm9yZUN1cnNvckVudGVyIixmdW5jdGlvbigpe28uY2xlYXIoKX0pLG8ucmVhZE9ubHkmJihxaT0hMCwodC5oaXN0b3J5LmRvbmUubGVuZ3RofHx0Lmhpc3RvcnkudW5kb25lLmxlbmd0aCkmJnQuY2xlYXJIaXN0b3J5KCkpLG8uY29sbGFwc2VkKXtpZihsIT1zKXRocm93IG5ldyBFcnJvcigiSW5zZXJ0aW5nIGNvbGxhcHNlZCBtYXJrZXIgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lIik7by5zaXplPWMsby5hdG9taWM9ITB9cmV0dXJuIGYmJihhJiYoZi5jdXJPcC51cGRhdGVNYXhMaW5lPSEwKSwoby5jbGFzc05hbWV8fG8udGl0bGV8fG8uc3RhcnRTdHlsZXx8by5lbmRTdHlsZXx8by5jb2xsYXBzZWQpJiZ1ZShmLGUubGluZSxyLmxpbmUrMSksby5hdG9taWMmJmlyKGYpKSxvfWZ1bmN0aW9uIEFyKHQsZSl7dGhpcy5tYXJrZXJzPXQsdGhpcy5wcmltYXJ5PWU7Zm9yKHZhciByPTAsbj10aGlzO3I8dC5sZW5ndGg7KytyKXRbcl0ucGFyZW50PXRoaXMsR24odFtyXSwiY2xlYXIiLGZ1bmN0aW9uKCl7bi5jbGVhcigpfSl9ZnVuY3Rpb24gSHIodCxlLHIsbixpKXtuPXJpKG4pLG4uc2hhcmVkPSExO3ZhciBvPVtUcih0LGUscixuLGkpXSxsPW9bMF0scz1uLnJlcGxhY2VkV2l0aDtyZXR1cm4gZG4odCxmdW5jdGlvbih0KXtzJiYobi5yZXBsYWNlZFdpdGg9cy5jbG9uZU5vZGUoITApKSxvLnB1c2goVHIodCxRZSh0LGUpLFFlKHQsciksbixpKSk7Zm9yKHZhciBhPTA7YTx0LmxpbmtlZC5sZW5ndGg7KythKWlmKHQubGlua2VkW2FdLmlzUGFyZW50KXJldHVybjtsPVFuKG8pfSksbmV3IEFyKG8sbCl9ZnVuY3Rpb24gTnIodCxlKXtpZih0KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbj10W3JdO2lmKG4ubWFya2VyPT1lKXJldHVybiBufX1mdW5jdGlvbiBEcih0LGUpe2Zvcih2YXIgcixuPTA7bjx0Lmxlbmd0aDsrK24pdFtuXSE9ZSYmKHJ8fChyPVtdKSkucHVzaCh0W25dKTtyZXR1cm4gcn1mdW5jdGlvbiBXcih0LGUpe3QubWFya2VkU3BhbnM9dC5tYXJrZWRTcGFucz90Lm1hcmtlZFNwYW5zLmNvbmNhdChbZV0pOltlXSxlLm1hcmtlci5hdHRhY2hMaW5lKHQpfWZ1bmN0aW9uIE9yKHQsZSxyKXtpZih0KWZvcih2YXIgbixpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBvPXRbaV0sbD1vLm1hcmtlcixzPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpO2lmKHN8fChsLmluY2x1c2l2ZUxlZnQmJmwuaW5jbHVzaXZlUmlnaHR8fCJib29rbWFyayI9PWwudHlwZSkmJm8uZnJvbT09ZSYmKCFyfHwhby5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8udG98fChsLmluY2x1c2l2ZVJpZ2h0P28udG8+PWU6by50bz5lKTsobnx8KG49W10pKS5wdXNoKHtmcm9tOm8uZnJvbSx0bzphP251bGw6by50byxtYXJrZXI6bH0pfX1yZXR1cm4gbn1mdW5jdGlvbiBFcih0LGUscil7aWYodClmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgbz10W2ldLGw9by5tYXJrZXIscz1udWxsPT1vLnRvfHwobC5pbmNsdXNpdmVSaWdodD9vLnRvPj1lOm8udG8+ZSk7aWYoc3x8ImJvb2ttYXJrIj09bC50eXBlJiZvLmZyb209PWUmJighcnx8by5tYXJrZXIuaW5zZXJ0TGVmdCkpe3ZhciBhPW51bGw9PW8uZnJvbXx8KGwuaW5jbHVzaXZlTGVmdD9vLmZyb208PWU6by5mcm9tPGUpOyhufHwobj1bXSkpLnB1c2goe2Zyb206YT9udWxsOm8uZnJvbS1lLHRvOm51bGw9PW8udG8/bnVsbDpvLnRvLWUsbWFya2VyOmx9KX19cmV0dXJuIG59ZnVuY3Rpb24genIodCxlKXt2YXIgcj10cih0LGUuZnJvbS5saW5lKSYmZ24odCxlLmZyb20ubGluZSkubWFya2VkU3BhbnMsbj10cih0LGUudG8ubGluZSkmJmduKHQsZS50by5saW5lKS5tYXJrZWRTcGFucztpZighciYmIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5mcm9tLmNoLG89ZS50by5jaCxsPWplKGUuZnJvbSxlLnRvKSxzPU9yKHIsaSxsKSxhPUVyKG4sbyxsKSx1PTE9PWUudGV4dC5sZW5ndGgsYz1RbihlLnRleHQpLmxlbmd0aCsodT9pOjApO2lmKHMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2Ype3ZhciBoPXNbZl07aWYobnVsbD09aC50byl7dmFyIGQ9TnIoYSxoLm1hcmtlcik7ZD91JiYoaC50bz1udWxsPT1kLnRvP251bGw6ZC50bytjKTpoLnRvPWl9fWlmKGEpZm9yKHZhciBmPTA7ZjxhLmxlbmd0aDsrK2Ype3ZhciBoPWFbZl07aWYobnVsbCE9aC50byYmKGgudG8rPWMpLG51bGw9PWguZnJvbSl7dmFyIGQ9TnIocyxoLm1hcmtlcik7ZHx8KGguZnJvbT1jLHUmJihzfHwocz1bXSkpLnB1c2goaCkpfWVsc2UgaC5mcm9tKz1jLHUmJihzfHwocz1bXSkpLnB1c2goaCl9aWYodSYmcyl7Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbCE9c1tmXS5mcm9tJiZzW2ZdLmZyb209PXNbZl0udG8mJiJib29rbWFyayIhPXNbZl0ubWFya2VyLnR5cGUmJnMuc3BsaWNlKGYtLSwxKTtzLmxlbmd0aHx8KHM9bnVsbCl9dmFyIHA9W3NdO2lmKCF1KXt2YXIgZyxtPWUudGV4dC5sZW5ndGgtMjtpZihtPjAmJnMpZm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2YpbnVsbD09c1tmXS50byYmKGd8fChnPVtdKSkucHVzaCh7ZnJvbTpudWxsLHRvOm51bGwsbWFya2VyOnNbZl0ubWFya2VyfSk7Zm9yKHZhciBmPTA7bT5mOysrZilwLnB1c2goZyk7cC5wdXNoKGEpfXJldHVybiBwfWZ1bmN0aW9uIElyKHQsZSl7dmFyIHI9QW4odCxlKSxuPXpyKHQsZSk7aWYoIXIpcmV0dXJuIG47aWYoIW4pcmV0dXJuIHI7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBvPXJbaV0sbD1uW2ldO2lmKG8mJmwpdDpmb3IodmFyIHM9MDtzPGwubGVuZ3RoOysrcyl7Zm9yKHZhciBhPWxbc10sdT0wO3U8by5sZW5ndGg7Kyt1KWlmKG9bdV0ubWFya2VyPT1hLm1hcmtlciljb250aW51ZSB0O28ucHVzaChhKX1lbHNlIGwmJihyW2ldPWwpfXJldHVybiByfWZ1bmN0aW9uIEZyKHQsZSxyKXt2YXIgbj1udWxsO2lmKHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7aWYodC5tYXJrZWRTcGFucylmb3IodmFyIGU9MDtlPHQubWFya2VkU3BhbnMubGVuZ3RoOysrZSl7dmFyIHI9dC5tYXJrZWRTcGFuc1tlXS5tYXJrZXI7IXIucmVhZE9ubHl8fG4mJi0xIT10aShuLHIpfHwobnx8KG49W10pKS5wdXNoKHIpfX0pLCFuKXJldHVybiBudWxsO2Zvcih2YXIgaT1be2Zyb206ZSx0bzpyfV0sbz0wO288bi5sZW5ndGg7KytvKWZvcih2YXIgbD1uW29dLHM9bC5maW5kKCksYT0wO2E8aS5sZW5ndGg7KythKXt2YXIgdT1pW2FdO2lmKCEkZSh1LnRvLHMuZnJvbSkmJiEkZShzLnRvLHUuZnJvbSkpe3ZhciBjPVthLDFdOygkZSh1LmZyb20scy5mcm9tKXx8IWwuaW5jbHVzaXZlTGVmdCYmamUodS5mcm9tLHMuZnJvbSkpJiZjLnB1c2goe2Zyb206dS5mcm9tLHRvOnMuZnJvbX0pLCgkZShzLnRvLHUudG8pfHwhbC5pbmNsdXNpdmVSaWdodCYmamUodS50byxzLnRvKSkmJmMucHVzaCh7ZnJvbTpzLnRvLHRvOnUudG99KSxpLnNwbGljZS5hcHBseShpLGMpLGErPWMubGVuZ3RoLTF9fXJldHVybiBpfWZ1bmN0aW9uIFByKHQsZSl7dmFyIHIsbj1RaSYmdC5tYXJrZWRTcGFucztpZihuKWZvcih2YXIgaSxvPTA7bzxuLmxlbmd0aDsrK28paT1uW29dLGkubWFya2VyLmNvbGxhcHNlZCYmKG51bGw9PWkuZnJvbXx8aS5mcm9tPGUpJiYobnVsbD09aS50b3x8aS50bz5lKSYmKCFyfHxyLndpZHRoPGkubWFya2VyLndpZHRoKSYmKHI9aS5tYXJrZXIpO3JldHVybiByfWZ1bmN0aW9uIFJyKHQpe3JldHVybiBQcih0LC0xKX1mdW5jdGlvbiBCcih0KXtyZXR1cm4gUHIodCx0LnRleHQubGVuZ3RoKzEpfWZ1bmN0aW9uIEdyKHQsZSl7Zm9yKHZhciByO3I9UnIoZSk7KWU9Z24odCxyLmZpbmQoKS5mcm9tLmxpbmUpO3JldHVybiBlfWZ1bmN0aW9uIFZyKHQsZSl7dmFyIHI9UWkmJmUubWFya2VkU3BhbnM7aWYocilmb3IodmFyIG4saT0wO2k8ci5sZW5ndGg7KytpKWlmKG49cltpXSxuLm1hcmtlci5jb2xsYXBzZWQpe2lmKG51bGw9PW4uZnJvbSlyZXR1cm4hMDtpZighbi5tYXJrZXIucmVwbGFjZWRXaXRoJiYwPT1uLmZyb20mJm4ubWFya2VyLmluY2x1c2l2ZUxlZnQmJktyKHQsZSxuKSlyZXR1cm4hMH19ZnVuY3Rpb24gS3IodCxlLHIpe2lmKG51bGw9PXIudG8pe3ZhciBuPXIubWFya2VyLmZpbmQoKS50byxpPWduKHQsbi5saW5lKTtyZXR1cm4gS3IodCxpLE5yKGkubWFya2VkU3BhbnMsci5tYXJrZXIpKX1pZihyLm1hcmtlci5pbmNsdXNpdmVSaWdodCYmci50bz09ZS50ZXh0Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG8sbD0wO2w8ZS5tYXJrZWRTcGFucy5sZW5ndGg7KytsKWlmKG89ZS5tYXJrZWRTcGFuc1tsXSxvLm1hcmtlci5jb2xsYXBzZWQmJiFvLm1hcmtlci5yZXBsYWNlZFdpdGgmJm8uZnJvbT09ci50byYmKG8ubWFya2VyLmluY2x1c2l2ZUxlZnR8fHIubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSYmS3IodCxlLG8pKXJldHVybiEwfWZ1bmN0aW9uIFVyKHQpe3ZhciBlPXQubWFya2VkU3BhbnM7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuZGV0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPW51bGx9fWZ1bmN0aW9uIFhyKHQsZSl7aWYoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5tYXJrZXIuYXR0YWNoTGluZSh0KTt0Lm1hcmtlZFNwYW5zPWV9fWZ1bmN0aW9uIF9yKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPSF0aGlzLmNtLmN1ck9wO2UmJmllKHRoaXMuY20pO3RyeXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2UmJm9lKHRoaXMuY20pfXJldHVybiByfX1mdW5jdGlvbiBZcih0KXtyZXR1cm4gbnVsbCE9dC5oZWlnaHQ/dC5oZWlnaHQ6KHQubm9kZS5wYXJlbnROb2RlJiYxPT10Lm5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZXx8dWkodC5jbS5kaXNwbGF5Lm1lYXN1cmUsc2koImRpdiIsW3Qubm9kZV0sbnVsbCwicG9zaXRpb246IHJlbGF0aXZlIikpLHQuaGVpZ2h0PXQubm9kZS5vZmZzZXRIZWlnaHQpfWZ1bmN0aW9uIGpyKHQsZSxyLG4pe3ZhciBpPW5ldyB5byh0LHIsbik7cmV0dXJuIGkubm9IU2Nyb2xsJiYodC5kaXNwbGF5LmFsaWduV2lkZ2V0cz0hMCksZHIodCxlLGZ1bmN0aW9uKGUpe3ZhciByPWUud2lkZ2V0c3x8KGUud2lkZ2V0cz1bXSk7aWYobnVsbD09aS5pbnNlcnRBdD9yLnB1c2goaSk6ci5zcGxpY2UoTWF0aC5taW4oci5sZW5ndGgtMSxNYXRoLm1heCgwLGkuaW5zZXJ0QXQpKSwwLGkpLGkubGluZT1lLCFWcih0LmRvYyxlKXx8aS5zaG93SWZIaWRkZW4pe3ZhciBuPUNuKHQsZSk8dC5kb2Muc2Nyb2xsVG9wO3luKGUsZS5oZWlnaHQrWXIoaSkpLG4mJmZyKHQsMCxpLmhlaWdodCl9cmV0dXJuITB9KSxpfWZ1bmN0aW9uICRyKHQsZSxyLG4pe3QudGV4dD1lLHQuc3RhdGVBZnRlciYmKHQuc3RhdGVBZnRlcj1udWxsKSx0LnN0eWxlcyYmKHQuc3R5bGVzPW51bGwpLG51bGwhPXQub3JkZXImJih0Lm9yZGVyPW51bGwpLFVyKHQpLFhyKHQscik7dmFyIGk9bj9uKHQpOjE7aSE9dC5oZWlnaHQmJnluKHQsaSl9ZnVuY3Rpb24gWnIodCl7dC5wYXJlbnQ9bnVsbCxVcih0KX1mdW5jdGlvbiBxcih0LGUscixuLGksbyl7dmFyIGw9ci5mbGF0dGVuU3BhbnM7bnVsbD09bCYmKGw9dC5vcHRpb25zLmZsYXR0ZW5TcGFucyk7dmFyIHMsYT0wLHU9bnVsbCxjPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3IoIiI9PWUmJnIuYmxhbmtMaW5lJiZyLmJsYW5rTGluZShuKTshYy5lb2woKTspYy5wb3M+dC5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aD8obD0hMSxvJiZ0bih0LGUsbixjLnBvcyksYy5wb3M9ZS5sZW5ndGgscz1udWxsKTpzPXIudG9rZW4oYyxuKSxsJiZ1PT1zfHwoYTxjLnN0YXJ0JiZpKGMuc3RhcnQsdSksYT1jLnN0YXJ0LHU9cyksYy5zdGFydD1jLnBvcztmb3IoO2E8Yy5wb3M7KXt2YXIgZj1NYXRoLm1pbihjLnBvcyxhKzVlNCk7aShmLHUpLGE9Zn19ZnVuY3Rpb24gUXIodCxlLHIsbil7dmFyIGk9W3Quc3RhdGUubW9kZUdlbl07cXIodCxlLnRleHQsdC5kb2MubW9kZSxyLGZ1bmN0aW9uKHQsZSl7aS5wdXNoKHQsZSl9LG4pO2Zvcih2YXIgbz0wO288dC5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7KytvKXt2YXIgbD10LnN0YXRlLm92ZXJsYXlzW29dLHM9MSxhPTA7cXIodCxlLnRleHQsbC5tb2RlLCEwLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXM7dD5hOyl7dmFyIG49aVtzXTtuPnQmJmkuc3BsaWNlKHMsMSx0LGlbcysxXSxuKSxzKz0yLGE9TWF0aC5taW4odCxuKX1pZihlKWlmKGwub3BhcXVlKWkuc3BsaWNlKHIscy1yLHQsZSkscz1yKzI7ZWxzZSBmb3IoO3M+cjtyKz0yKXt2YXIgbz1pW3IrMV07aVtyKzFdPW8/bysiICIrZTplfX0pfXJldHVybiBpfWZ1bmN0aW9uIEpyKHQsZSl7cmV0dXJuIGUuc3R5bGVzJiZlLnN0eWxlc1swXT09dC5zdGF0ZS5tb2RlR2VufHwoZS5zdHlsZXM9UXIodCxlLGUuc3RhdGVBZnRlcj16KHQsYm4oZSkpKSksZS5zdHlsZXN9ZnVuY3Rpb24gdG4odCxlLHIsbil7dmFyIGk9dC5kb2MubW9kZSxvPW5ldyBTcihlLHQub3B0aW9ucy50YWJTaXplKTtmb3Ioby5zdGFydD1vLnBvcz1ufHwwLCIiPT1lJiZpLmJsYW5rTGluZSYmaS5ibGFua0xpbmUocik7IW8uZW9sKCkmJm8ucG9zPD10Lm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoOylpLnRva2VuKG8sciksby5zdGFydD1vLnBvc31mdW5jdGlvbiBlbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2Zvcig7Oyl7dmFyIHI9dC5tYXRjaCgvKD86XnxccylsaW5lLShiYWNrZ3JvdW5kLSk/KFxTKykvKTtpZighcilicmVhazt0PXQuc2xpY2UoMCxyLmluZGV4KSt0LnNsaWNlKHIuaW5kZXgrclswXS5sZW5ndGgpO3ZhciBuPXJbMV0/ImJnQ2xhc3MiOiJ0ZXh0Q2xhc3MiO251bGw9PWVbbl0/ZVtuXT1yWzJdOm5ldyBSZWdFeHAoIig/Ol58cykiK3JbMl0rIig/OiR8cykiKS50ZXN0KGVbbl0pfHwoZVtuXSs9IiAiK3JbMl0pfXJldHVybiB4b1t0XXx8KHhvW3RdPSJjbS0iK3QucmVwbGFjZSgvICsvZywiIGNtLSIpKX1mdW5jdGlvbiBybih0LGUscixuKXtmb3IodmFyIGksbz1lLGw9ITA7aT1ScihvKTspbz1nbih0LmRvYyxpLmZpbmQoKS5mcm9tLmxpbmUpO3ZhciBzPXtwcmU6c2koInByZSIpLGNvbDowLHBvczowLG1lYXN1cmU6bnVsbCxtZWFzdXJlZFNvbWV0aGluZzohMSxjbTp0LGNvcHlXaWRnZXRzOm59O2Rve28udGV4dCYmKGw9ITEpLHMubWVhc3VyZT1vPT1lJiZyLHMucG9zPTAscy5hZGRUb2tlbj1zLm1lYXN1cmU/bG46b24sKEFpfHxXaSkmJnQuZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSYmKHMuYWRkVG9rZW49c24ocy5hZGRUb2tlbikpO3ZhciBhPXVuKG8scyxKcih0LG8pKTtyJiZvPT1lJiYhcy5tZWFzdXJlZFNvbWV0aGluZyYmKHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQocGkodC5kaXNwbGF5Lm1lYXN1cmUpKSxzLm1lYXN1cmVkU29tZXRoaW5nPSEwKSxhJiYobz1nbih0LmRvYyxhLnRvLmxpbmUpKX13aGlsZShhKTshcnx8cy5tZWFzdXJlZFNvbWV0aGluZ3x8clswXXx8KHJbMF09cy5wcmUuYXBwZW5kQ2hpbGQobD9zaSgic3BhbiIsIsKgIik6cGkodC5kaXNwbGF5Lm1lYXN1cmUpKSkscy5wcmUuZmlyc3RDaGlsZHx8VnIodC5kb2MsZSl8fHMucHJlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCLCoCIpKTt2YXIgdTtpZihyJiYoQWl8fERpKSYmKHU9d24obykpKXt2YXIgYz11Lmxlbmd0aC0xO3VbY10uZnJvbT09dVtjXS50byYmLS1jO3ZhciBmPXVbY10saD11W2MtMV07aWYoZi5mcm9tKzE9PWYudG8mJmgmJmYubGV2ZWw8aC5sZXZlbCl7dmFyIGQ9cltzLnBvcy0xXTtkJiZkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGQubWVhc3VyZVJpZ2h0PXBpKHQuZGlzcGxheS5tZWFzdXJlKSxkLm5leHRTaWJsaW5nKX19dmFyIHA9cy50ZXh0Q2xhc3M/cy50ZXh0Q2xhc3MrIiAiKyhlLnRleHRDbGFzc3x8IiIpOmUudGV4dENsYXNzO3JldHVybiBwJiYocy5wcmUuY2xhc3NOYW1lPXApLEtuKHQsInJlbmRlckxpbmUiLHQsZSxzLnByZSksc31mdW5jdGlvbiBubih0KXt2YXIgZT1zaSgic3BhbiIsIuKAoiIsImNtLWludmFsaWRjaGFyIik7cmV0dXJuIGUudGl0bGU9IlxcdSIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSxlfWZ1bmN0aW9uIG9uKHQsZSxyLG4saSxvKXtpZihlKXt2YXIgbD10LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJzO2lmKGwudGVzdChlKSlmb3IodmFyIHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGE9MDs7KXtsLmxhc3RJbmRleD1hO3ZhciB1PWwuZXhlYyhlKSxjPXU/dS5pbmRleC1hOmUubGVuZ3RoLWE7aWYoYyYmKHMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZS5zbGljZShhLGErYykpKSx0LmNvbCs9YyksIXUpYnJlYWs7aWYoYSs9YysxLCIJIj09dVswXSl7dmFyIGY9dC5jbS5vcHRpb25zLnRhYlNpemUsaD1mLXQuY29sJWY7cy5hcHBlbmRDaGlsZChzaSgic3BhbiIscW4oaCksImNtLXRhYiIpKSx0LmNvbCs9aH1lbHNle3ZhciBkPXQuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKHVbMF0pO3MuYXBwZW5kQ2hpbGQoZCksdC5jb2wrPTF9fWVsc2V7dC5jb2wrPWUubGVuZ3RoO3ZhciBzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpfWlmKHJ8fG58fGl8fHQubWVhc3VyZSl7dmFyIHA9cnx8IiI7biYmKHArPW4pLGkmJihwKz1pKTt2YXIgZD1zaSgic3BhbiIsW3NdLHApO3JldHVybiBvJiYoZC50aXRsZT1vKSx0LnByZS5hcHBlbmRDaGlsZChkKX10LnByZS5hcHBlbmRDaGlsZChzKX19ZnVuY3Rpb24gbG4odCxlLHIsbixpKXtmb3IodmFyIG89dC5jbS5vcHRpb25zLmxpbmVXcmFwcGluZyxsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBzPWUuY2hhckF0KGwpLGE9MD09bDtzPj0i7aCAIiYmIu2vvyI+cyYmbDxlLmxlbmd0aC0xPyhzPWUuc2xpY2UobCxsKzIpLCsrbCk6bCYmbyYmaGkoZSxsKSYmdC5wcmUuYXBwZW5kQ2hpbGQoc2koIndiciIpKTt2YXIgdT10Lm1lYXN1cmVbdC5wb3NdLGM9dC5tZWFzdXJlW3QucG9zXT1vbih0LHMscixhJiZuLGw9PWUubGVuZ3RoLTEmJmkpO3UmJihjLmxlZnRTaWRlPXUubGVmdFNpZGV8fHUpLEFpJiZvJiYiICI9PXMmJmwmJiEvXHMvLnRlc3QoZS5jaGFyQXQobC0xKSkmJmw8ZS5sZW5ndGgtMSYmIS9ccy8udGVzdChlLmNoYXJBdChsKzEpKSYmKGMuc3R5bGUud2hpdGVTcGFjZT0ibm9ybWFsIiksdC5wb3MrPXMubGVuZ3RofWUubGVuZ3RoJiYodC5tZWFzdXJlZFNvbWV0aGluZz0hMCl9ZnVuY3Rpb24gc24odCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIGU9IiAiLHI9MDtyPHQubGVuZ3RoLTI7KytyKWUrPXIlMj8iICI6IsKgIjtyZXR1cm4gZSs9IiAifXJldHVybiBmdW5jdGlvbihyLG4saSxvLGwscyl7cmV0dXJuIHQocixuLnJlcGxhY2UoLyB7Myx9L2csZSksaSxvLGwscyl9fWZ1bmN0aW9uIGFuKHQsZSxyLG4pe3ZhciBpPSFuJiZyLnJlcGxhY2VkV2l0aDtpZihpJiYodC5jb3B5V2lkZ2V0cyYmKGk9aS5jbG9uZU5vZGUoITApKSx0LnByZS5hcHBlbmRDaGlsZChpKSx0Lm1lYXN1cmUpKXtpZihlKXQubWVhc3VyZVt0LnBvc109aTtlbHNle3ZhciBvPXBpKHQuY20uZGlzcGxheS5tZWFzdXJlKTtpZigiYm9va21hcmsiIT1yLnR5cGV8fHIuaW5zZXJ0TGVmdCl7aWYodC5tZWFzdXJlW3QucG9zXSlyZXR1cm47dC5tZWFzdXJlW3QucG9zXT10LnByZS5pbnNlcnRCZWZvcmUobyxpKX1lbHNlIHQubWVhc3VyZVt0LnBvc109dC5wcmUuYXBwZW5kQ2hpbGQobyl9dC5tZWFzdXJlZFNvbWV0aGluZz0hMH10LnBvcys9ZX1mdW5jdGlvbiB1bih0LGUscil7dmFyIG49dC5tYXJrZWRTcGFucyxpPXQudGV4dCxvPTA7aWYobilmb3IodmFyIGwscyxhLHUsYyxmLGg9aS5sZW5ndGgsZD0wLHA9MSxnPSIiLG09MDs7KXtpZihtPT1kKXtzPWE9dT1jPSIiLGY9bnVsbCxtPTEvMDtmb3IodmFyIHY9W10seT0wO3k8bi5sZW5ndGg7Kyt5KXt2YXIgYj1uW3ldLHg9Yi5tYXJrZXI7Yi5mcm9tPD1kJiYobnVsbD09Yi50b3x8Yi50bz5kKT8obnVsbCE9Yi50byYmbT5iLnRvJiYobT1iLnRvLGE9IiIpLHguY2xhc3NOYW1lJiYocys9IiAiK3guY2xhc3NOYW1lKSx4LnN0YXJ0U3R5bGUmJmIuZnJvbT09ZCYmKHUrPSIgIit4LnN0YXJ0U3R5bGUpLHguZW5kU3R5bGUmJmIudG89PW0mJihhKz0iICIreC5lbmRTdHlsZSkseC50aXRsZSYmIWMmJihjPXgudGl0bGUpLHguY29sbGFwc2VkJiYoIWZ8fGYubWFya2VyLnNpemU8eC5zaXplKSYmKGY9YikpOmIuZnJvbT5kJiZtPmIuZnJvbSYmKG09Yi5mcm9tKSwiYm9va21hcmsiPT14LnR5cGUmJmIuZnJvbT09ZCYmeC5yZXBsYWNlZFdpdGgmJnYucHVzaCh4KQp9aWYoZiYmKGYuZnJvbXx8MCk9PWQmJihhbihlLChudWxsPT1mLnRvP2g6Zi50byktZCxmLm1hcmtlcixudWxsPT1mLmZyb20pLG51bGw9PWYudG8pKXJldHVybiBmLm1hcmtlci5maW5kKCk7aWYoIWYmJnYubGVuZ3RoKWZvcih2YXIgeT0wO3k8di5sZW5ndGg7Kyt5KWFuKGUsMCx2W3ldKX1pZihkPj1oKWJyZWFrO2Zvcih2YXIgQz1NYXRoLm1pbihoLG0pOzspe2lmKGcpe3ZhciB3PWQrZy5sZW5ndGg7aWYoIWYpe3ZhciBMPXc+Qz9nLnNsaWNlKDAsQy1kKTpnO2UuYWRkVG9rZW4oZSxMLGw/bCtzOnMsdSxkK0wubGVuZ3RoPT1tP2E6IiIsYyl9aWYodz49Qyl7Zz1nLnNsaWNlKEMtZCksZD1DO2JyZWFrfWQ9dyx1PSIifWc9aS5zbGljZShvLG89cltwKytdKSxsPWVuKHJbcCsrXSxlKX19ZWxzZSBmb3IodmFyIHA9MTtwPHIubGVuZ3RoO3ArPTIpZS5hZGRUb2tlbihlLGkuc2xpY2UobyxvPXJbcF0pLGVuKHJbcCsxXSxlKSl9ZnVuY3Rpb24gY24odCxlLHIsbixpKXtmdW5jdGlvbiBvKHQpe3JldHVybiByP3JbdF06bnVsbH1mdW5jdGlvbiBsKHQscixuKXskcih0LHIsbixpKSxVbih0LCJjaGFuZ2UiLHQsZSl9dmFyIHM9ZS5mcm9tLGE9ZS50byx1PWUudGV4dCxjPWduKHQscy5saW5lKSxmPWduKHQsYS5saW5lKSxoPVFuKHUpLGQ9byh1Lmxlbmd0aC0xKSxwPWEubGluZS1zLmxpbmU7aWYoMCE9cy5jaHx8MCE9YS5jaHx8IiIhPWh8fHQuY20mJiF0LmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKWlmKGM9PWYpaWYoMT09dS5sZW5ndGgpbChjLGMudGV4dC5zbGljZSgwLHMuY2gpK2grYy50ZXh0LnNsaWNlKGEuY2gpLGQpO2Vsc2V7Zm9yKHZhciBnPVtdLG09MSx2PXUubGVuZ3RoLTE7dj5tOysrbSlnLnB1c2gobmV3IGJvKHVbbV0sbyhtKSxpKSk7Zy5wdXNoKG5ldyBibyhoK2MudGV4dC5zbGljZShhLmNoKSxkLGkpKSxsKGMsYy50ZXh0LnNsaWNlKDAscy5jaCkrdVswXSxvKDApKSx0Lmluc2VydChzLmxpbmUrMSxnKX1lbHNlIGlmKDE9PXUubGVuZ3RoKWwoYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdK2YudGV4dC5zbGljZShhLmNoKSxvKDApKSx0LnJlbW92ZShzLmxpbmUrMSxwKTtlbHNle2woYyxjLnRleHQuc2xpY2UoMCxzLmNoKSt1WzBdLG8oMCkpLGwoZixoK2YudGV4dC5zbGljZShhLmNoKSxkKTtmb3IodmFyIG09MSx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtwPjEmJnQucmVtb3ZlKHMubGluZSsxLHAtMSksdC5pbnNlcnQocy5saW5lKzEsZyl9ZWxzZXtmb3IodmFyIG09MCx2PXUubGVuZ3RoLTEsZz1bXTt2Pm07KyttKWcucHVzaChuZXcgYm8odVttXSxvKG0pLGkpKTtsKGYsZi50ZXh0LGQpLHAmJnQucmVtb3ZlKHMubGluZSxwKSxnLmxlbmd0aCYmdC5pbnNlcnQocy5saW5lLGcpfVVuKHQsImNoYW5nZSIsdCxlKSxucih0LG4uYW5jaG9yLG4uaGVhZCxudWxsLCEwKX1mdW5jdGlvbiBmbih0KXt0aGlzLmxpbmVzPXQsdGhpcy5wYXJlbnQ9bnVsbDtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49MDtyPmU7KytlKXRbZV0ucGFyZW50PXRoaXMsbis9dFtlXS5oZWlnaHQ7dGhpcy5oZWlnaHQ9bn1mdW5jdGlvbiBobih0KXt0aGlzLmNoaWxkcmVuPXQ7Zm9yKHZhciBlPTAscj0wLG49MCxpPXQubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXRbbl07ZSs9by5jaHVua1NpemUoKSxyKz1vLmhlaWdodCxvLnBhcmVudD10aGlzfXRoaXMuc2l6ZT1lLHRoaXMuaGVpZ2h0PXIsdGhpcy5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBkbih0LGUscil7ZnVuY3Rpb24gbih0LGksbyl7aWYodC5saW5rZWQpZm9yKHZhciBsPTA7bDx0LmxpbmtlZC5sZW5ndGg7KytsKXt2YXIgcz10LmxpbmtlZFtsXTtpZihzLmRvYyE9aSl7dmFyIGE9byYmcy5zaGFyZWRIaXN0Oyghcnx8YSkmJihlKHMuZG9jLGEpLG4ocy5kb2MsdCxhKSl9fX1uKHQsbnVsbCwhMCl9ZnVuY3Rpb24gcG4odCxlKXtpZihlLmNtKXRocm93IG5ldyBFcnJvcigiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS4iKTt0LmRvYz1lLGUuY209dCxvKHQpLHIodCksdC5vcHRpb25zLmxpbmVXcmFwcGluZ3x8Zih0KSx0Lm9wdGlvbnMubW9kZT1lLm1vZGVPcHRpb24sdWUodCl9ZnVuY3Rpb24gZ24odCxlKXtmb3IoZS09dC5maXJzdDshdC5saW5lczspZm9yKHZhciByPTA7Oysrcil7dmFyIG49dC5jaGlsZHJlbltyXSxpPW4uY2h1bmtTaXplKCk7aWYoaT5lKXt0PW47YnJlYWt9ZS09aX1yZXR1cm4gdC5saW5lc1tlXX1mdW5jdGlvbiBtbih0LGUscil7dmFyIG49W10saT1lLmxpbmU7cmV0dXJuIHQuaXRlcihlLmxpbmUsci5saW5lKzEsZnVuY3Rpb24odCl7dmFyIG89dC50ZXh0O2k9PXIubGluZSYmKG89by5zbGljZSgwLHIuY2gpKSxpPT1lLmxpbmUmJihvPW8uc2xpY2UoZS5jaCkpLG4ucHVzaChvKSwrK2l9KSxufWZ1bmN0aW9uIHZuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5pdGVyKGUscixmdW5jdGlvbih0KXtuLnB1c2godC50ZXh0KX0pLG59ZnVuY3Rpb24geW4odCxlKXtmb3IodmFyIHI9ZS10LmhlaWdodCxuPXQ7bjtuPW4ucGFyZW50KW4uaGVpZ2h0Kz1yfWZ1bmN0aW9uIGJuKHQpe2lmKG51bGw9PXQucGFyZW50KXJldHVybiBudWxsO2Zvcih2YXIgZT10LnBhcmVudCxyPXRpKGUubGluZXMsdCksbj1lLnBhcmVudDtuO2U9bixuPW4ucGFyZW50KWZvcih2YXIgaT0wO24uY2hpbGRyZW5baV0hPWU7KytpKXIrPW4uY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7cmV0dXJuIHIrZS5maXJzdH1mdW5jdGlvbiB4bih0LGUpe3ZhciByPXQuZmlyc3Q7dDpkb3tmb3IodmFyIG49MCxpPXQuY2hpbGRyZW4ubGVuZ3RoO2k+bjsrK24pe3ZhciBvPXQuY2hpbGRyZW5bbl0sbD1vLmhlaWdodDtpZihsPmUpe3Q9bztjb250aW51ZSB0fWUtPWwscis9by5jaHVua1NpemUoKX1yZXR1cm4gcn13aGlsZSghdC5saW5lcyk7Zm9yKHZhciBuPTAsaT10LmxpbmVzLmxlbmd0aDtpPm47KytuKXt2YXIgcz10LmxpbmVzW25dLGE9cy5oZWlnaHQ7aWYoYT5lKWJyZWFrO2UtPWF9cmV0dXJuIHIrbn1mdW5jdGlvbiBDbih0LGUpe2U9R3IodC5kb2MsZSk7Zm9yKHZhciByPTAsbj1lLnBhcmVudCxpPTA7aTxuLmxpbmVzLmxlbmd0aDsrK2kpe3ZhciBvPW4ubGluZXNbaV07aWYobz09ZSlicmVhaztyKz1vLmhlaWdodH1mb3IodmFyIGw9bi5wYXJlbnQ7bDtuPWwsbD1uLnBhcmVudClmb3IodmFyIGk9MDtpPGwuY2hpbGRyZW4ubGVuZ3RoOysraSl7dmFyIHM9bC5jaGlsZHJlbltpXTtpZihzPT1uKWJyZWFrO3IrPXMuaGVpZ2h0fXJldHVybiByfWZ1bmN0aW9uIHduKHQpe3ZhciBlPXQub3JkZXI7cmV0dXJuIG51bGw9PWUmJihlPXQub3JkZXI9Qm8odC50ZXh0KSksZX1mdW5jdGlvbiBMbih0KXtyZXR1cm57ZG9uZTpbXSx1bmRvbmU6W10sdW5kb0RlcHRoOjEvMCxsYXN0VGltZTowLGxhc3RPcDpudWxsLGxhc3RPcmlnaW46bnVsbCxnZW5lcmF0aW9uOnR8fDEsbWF4R2VuZXJhdGlvbjp0fHwxfX1mdW5jdGlvbiBrbih0LGUscixuKXt2YXIgaT1lWyJzcGFuc18iK3QuaWRdLG89MDt0Lml0ZXIoTWF0aC5tYXgodC5maXJzdCxyKSxNYXRoLm1pbih0LmZpcnN0K3Quc2l6ZSxuKSxmdW5jdGlvbihyKXtyLm1hcmtlZFNwYW5zJiYoKGl8fChpPWVbInNwYW5zXyIrdC5pZF09e30pKVtvXT1yLm1hcmtlZFNwYW5zKSwrK299KX1mdW5jdGlvbiBTbih0LGUpe3ZhciByPXtsaW5lOmUuZnJvbS5saW5lLGNoOmUuZnJvbS5jaH0sbj17ZnJvbTpyLHRvOmxvKGUpLHRleHQ6bW4odCxlLmZyb20sZS50byl9O3JldHVybiBrbih0LG4sZS5mcm9tLmxpbmUsZS50by5saW5lKzEpLGRuKHQsZnVuY3Rpb24odCl7a24odCxuLGUuZnJvbS5saW5lLGUudG8ubGluZSsxKX0sITApLG59ZnVuY3Rpb24gTW4odCxlLHIsbil7dmFyIGk9dC5oaXN0b3J5O2kudW5kb25lLmxlbmd0aD0wO3ZhciBvPStuZXcgRGF0ZSxsPVFuKGkuZG9uZSk7aWYobCYmKGkubGFzdE9wPT1ufHxpLmxhc3RPcmlnaW49PWUub3JpZ2luJiZlLm9yaWdpbiYmKCIrIj09ZS5vcmlnaW4uY2hhckF0KDApJiZ0LmNtJiZpLmxhc3RUaW1lPm8tdC5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5fHwiKiI9PWUub3JpZ2luLmNoYXJBdCgwKSkpKXt2YXIgcz1RbihsLmNoYW5nZXMpO2plKGUuZnJvbSxlLnRvKSYmamUoZS5mcm9tLHMudG8pP3MudG89bG8oZSk6bC5jaGFuZ2VzLnB1c2goU24odCxlKSksbC5hbmNob3JBZnRlcj1yLmFuY2hvcixsLmhlYWRBZnRlcj1yLmhlYWR9ZWxzZSBmb3IobD17Y2hhbmdlczpbU24odCxlKV0sZ2VuZXJhdGlvbjppLmdlbmVyYXRpb24sYW5jaG9yQmVmb3JlOnQuc2VsLmFuY2hvcixoZWFkQmVmb3JlOnQuc2VsLmhlYWQsYW5jaG9yQWZ0ZXI6ci5hbmNob3IsaGVhZEFmdGVyOnIuaGVhZH0saS5kb25lLnB1c2gobCksaS5nZW5lcmF0aW9uPSsraS5tYXhHZW5lcmF0aW9uO2kuZG9uZS5sZW5ndGg+aS51bmRvRGVwdGg7KWkuZG9uZS5zaGlmdCgpO2kubGFzdFRpbWU9byxpLmxhc3RPcD1uLGkubGFzdE9yaWdpbj1lLm9yaWdpbn1mdW5jdGlvbiBUbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGUscj0wO3I8dC5sZW5ndGg7KytyKXRbcl0ubWFya2VyLmV4cGxpY2l0bHlDbGVhcmVkP2V8fChlPXQuc2xpY2UoMCxyKSk6ZSYmZS5wdXNoKHRbcl0pO3JldHVybiBlP2UubGVuZ3RoP2U6bnVsbDp0fWZ1bmN0aW9uIEFuKHQsZSl7dmFyIHI9ZVsic3BhbnNfIit0LmlkXTtpZighcilyZXR1cm4gbnVsbDtmb3IodmFyIG49MCxpPVtdO248ZS50ZXh0Lmxlbmd0aDsrK24paS5wdXNoKFRuKHJbbl0pKTtyZXR1cm4gaX1mdW5jdGlvbiBIbih0LGUpe2Zvcih2YXIgcj0wLG49W107cjx0Lmxlbmd0aDsrK3Ipe3ZhciBpPXRbcl0sbz1pLmNoYW5nZXMsbD1bXTtuLnB1c2goe2NoYW5nZXM6bCxhbmNob3JCZWZvcmU6aS5hbmNob3JCZWZvcmUsaGVhZEJlZm9yZTppLmhlYWRCZWZvcmUsYW5jaG9yQWZ0ZXI6aS5hbmNob3JBZnRlcixoZWFkQWZ0ZXI6aS5oZWFkQWZ0ZXJ9KTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoOysrcyl7dmFyIGEsdT1vW3NdO2lmKGwucHVzaCh7ZnJvbTp1LmZyb20sdG86dS50byx0ZXh0OnUudGV4dH0pLGUpZm9yKHZhciBjIGluIHUpKGE9Yy5tYXRjaCgvXnNwYW5zXyhcZCspJC8pKSYmdGkoZSxOdW1iZXIoYVsxXSkpPi0xJiYoUW4obClbY109dVtjXSxkZWxldGUgdVtjXSl9fXJldHVybiBufWZ1bmN0aW9uIE5uKHQsZSxyLG4pe3I8dC5saW5lP3QubGluZSs9bjplPHQubGluZSYmKHQubGluZT1lLHQuY2g9MCl9ZnVuY3Rpb24gRG4odCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe2Zvcih2YXIgbz10W2ldLGw9ITAscz0wO3M8by5jaGFuZ2VzLmxlbmd0aDsrK3Mpe3ZhciBhPW8uY2hhbmdlc1tzXTtpZihvLmNvcGllZHx8KGEuZnJvbT1aZShhLmZyb20pLGEudG89WmUoYS50bykpLHI8YS5mcm9tLmxpbmUpYS5mcm9tLmxpbmUrPW4sYS50by5saW5lKz1uO2Vsc2UgaWYoZTw9YS50by5saW5lKXtsPSExO2JyZWFrfX1vLmNvcGllZHx8KG8uYW5jaG9yQmVmb3JlPVplKG8uYW5jaG9yQmVmb3JlKSxvLmhlYWRCZWZvcmU9WmUoby5oZWFkQmVmb3JlKSxvLmFuY2hvckFmdGVyPVplKG8uYW5jaG9yQWZ0ZXIpLG8ucmVhZEFmdGVyPVplKG8uaGVhZEFmdGVyKSxvLmNvcGllZD0hMCksbD8oTm4oby5hbmNob3JCZWZvcmUpLE5uKG8uaGVhZEJlZm9yZSksTm4oby5hbmNob3JBZnRlciksTm4oby5oZWFkQWZ0ZXIpKToodC5zcGxpY2UoMCxpKzEpLGk9MCl9fWZ1bmN0aW9uIFduKHQsZSl7dmFyIHI9ZS5mcm9tLmxpbmUsbj1lLnRvLmxpbmUsaT1lLnRleHQubGVuZ3RoLShuLXIpLTE7RG4odC5kb25lLHIsbixpKSxEbih0LnVuZG9uZSxyLG4saSl9ZnVuY3Rpb24gT24oKXtQbih0aGlzKX1mdW5jdGlvbiBFbih0KXtyZXR1cm4gdC5zdG9wfHwodC5zdG9wPU9uKSx0fWZ1bmN0aW9uIHpuKHQpe3QucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITF9ZnVuY3Rpb24gSW4odCl7dC5zdG9wUHJvcGFnYXRpb24/dC5zdG9wUHJvcGFnYXRpb24oKTp0LmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBGbih0KXtyZXR1cm4gbnVsbCE9dC5kZWZhdWx0UHJldmVudGVkP3QuZGVmYXVsdFByZXZlbnRlZDowPT10LnJldHVyblZhbHVlfWZ1bmN0aW9uIFBuKHQpe3puKHQpLEluKHQpfWZ1bmN0aW9uIFJuKHQpe3JldHVybiB0LnRhcmdldHx8dC5zcmNFbGVtZW50fWZ1bmN0aW9uIEJuKHQpe3ZhciBlPXQud2hpY2g7cmV0dXJuIG51bGw9PWUmJigxJnQuYnV0dG9uP2U9MToyJnQuYnV0dG9uP2U9Mzo0JnQuYnV0dG9uJiYoZT0yKSksS2kmJnQuY3RybEtleSYmMT09ZSYmKGU9MyksZX1mdW5jdGlvbiBHbih0LGUscil7aWYodC5hZGRFdmVudExpc3RlbmVyKXQuYWRkRXZlbnRMaXN0ZW5lcihlLHIsITEpO2Vsc2UgaWYodC5hdHRhY2hFdmVudCl0LmF0dGFjaEV2ZW50KCJvbiIrZSxyKTtlbHNle3ZhciBuPXQuX2hhbmRsZXJzfHwodC5faGFuZGxlcnM9e30pLGk9bltlXXx8KG5bZV09W10pO2kucHVzaChyKX19ZnVuY3Rpb24gVm4odCxlLHIpe2lmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcil0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLCExKTtlbHNlIGlmKHQuZGV0YWNoRXZlbnQpdC5kZXRhY2hFdmVudCgib24iK2Uscik7ZWxzZXt2YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYoIW4pcmV0dXJuO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7KytpKWlmKG5baV09PXIpe24uc3BsaWNlKGksMSk7YnJlYWt9fX1mdW5jdGlvbiBLbih0LGUpe3ZhciByPXQuX2hhbmRsZXJzJiZ0Ll9oYW5kbGVyc1tlXTtpZihyKWZvcih2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMiksaT0wO2k8ci5sZW5ndGg7KytpKXJbaV0uYXBwbHkobnVsbCxuKX1mdW5jdGlvbiBVbih0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dC5hcHBseShudWxsLGkpfX12YXIgbj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07aWYobil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO1NvfHwoKytNbyxTbz1bXSxzZXRUaW1lb3V0KF9uLDApKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbylTby5wdXNoKHIobltvXSkpfX1mdW5jdGlvbiBYbih0LGUscil7cmV0dXJuIEtuKHQscnx8ZS50eXBlLHQsZSksRm4oZSl8fGUuY29kZW1pcnJvcklnbm9yZX1mdW5jdGlvbiBfbigpey0tTW87dmFyIHQ9U287U289bnVsbDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdKCl9ZnVuY3Rpb24gWW4odCxlKXt2YXIgcj10Ll9oYW5kbGVycyYmdC5faGFuZGxlcnNbZV07cmV0dXJuIHImJnIubGVuZ3RoPjB9ZnVuY3Rpb24gam4odCl7dC5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXtHbih0aGlzLHQsZSl9LHQucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUpe1ZuKHRoaXMsdCxlKX19ZnVuY3Rpb24gJG4oKXt0aGlzLmlkPW51bGx9ZnVuY3Rpb24gWm4odCxlLHIsbixpKXtudWxsPT1lJiYoZT10LnNlYXJjaCgvW15cc1x1MDBhMF0vKSwtMT09ZSYmKGU9dC5sZW5ndGgpKTtmb3IodmFyIG89bnx8MCxsPWl8fDA7ZT5vOysrbykiCSI9PXQuY2hhckF0KG8pP2wrPXItbCVyOisrbDtyZXR1cm4gbH1mdW5jdGlvbiBxbih0KXtmb3IoO0hvLmxlbmd0aDw9dDspSG8ucHVzaChRbihIbykrIiAiKTtyZXR1cm4gSG9bdF19ZnVuY3Rpb24gUW4odCl7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gSm4odCl7aWYoR2kpdC5zZWxlY3Rpb25TdGFydD0wLHQuc2VsZWN0aW9uRW5kPXQudmFsdWUubGVuZ3RoO2Vsc2UgdHJ5e3Quc2VsZWN0KCl9Y2F0Y2goZSl7fX1mdW5jdGlvbiB0aSh0LGUpe2lmKHQuaW5kZXhPZilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7bj5yOysrcilpZih0W3JdPT1lKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGVpKHQsZSl7ZnVuY3Rpb24gcigpe31yLnByb3RvdHlwZT10O3ZhciBuPW5ldyByO3JldHVybiBlJiZyaShlLG4pLG59ZnVuY3Rpb24gcmkodCxlKXtlfHwoZT17fSk7Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmkodCl7Zm9yKHZhciBlPVtdLHI9MDt0PnI7KytyKWUucHVzaCh2b2lkIDApO3JldHVybiBlfWZ1bmN0aW9uIGlpKHQpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShudWxsLGUpfX1mdW5jdGlvbiBvaSh0KXtyZXR1cm4vXHcvLnRlc3QodCl8fHQ+IsKAIiYmKHQudG9VcHBlckNhc2UoKSE9dC50b0xvd2VyQ2FzZSgpfHxOby50ZXN0KHQpKX1mdW5jdGlvbiBsaSh0KXtmb3IodmFyIGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpJiZ0W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHNpKHQsZSxyLG4pe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7aWYociYmKGkuY2xhc3NOYW1lPXIpLG4mJihpLnN0eWxlLmNzc1RleHQ9biksInN0cmluZyI9PXR5cGVvZiBlKWNpKGksZSk7ZWxzZSBpZihlKWZvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKWkuYXBwZW5kQ2hpbGQoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gYWkodCl7Zm9yKHZhciBlPXQuY2hpbGROb2Rlcy5sZW5ndGg7ZT4wOy0tZSl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCk7cmV0dXJuIHR9ZnVuY3Rpb24gdWkodCxlKXtyZXR1cm4gYWkodCkuYXBwZW5kQ2hpbGQoZSl9ZnVuY3Rpb24gY2kodCxlKXtOaT8odC5pbm5lckhUTUw9IiIsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSkpOnQudGV4dENvbnRlbnQ9ZX1mdW5jdGlvbiBmaSh0KXtyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1mdW5jdGlvbiBoaSgpe3JldHVybiExfWZ1bmN0aW9uIGRpKHQpe2lmKG51bGwhPU9vKXJldHVybiBPbzt2YXIgZT1zaSgiZGl2IixudWxsLG51bGwsIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7IG92ZXJmbG93LXg6IHNjcm9sbCIpO3JldHVybiB1aSh0LGUpLGUub2Zmc2V0V2lkdGgmJihPbz1lLm9mZnNldEhlaWdodC1lLmNsaWVudEhlaWdodCksT298fDB9ZnVuY3Rpb24gcGkodCl7aWYobnVsbD09RW8pe3ZhciBlPXNpKCJzcGFuIiwi4oCLIik7dWkodCxzaSgic3BhbiIsW2UsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIngiKV0pKSwwIT10LmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0JiYoRW89ZS5vZmZzZXRXaWR0aDw9MSYmZS5vZmZzZXRIZWlnaHQ+MiYmIUhpKX1yZXR1cm4gRW8/c2koInNwYW4iLCLigIsiKTpzaSgic3BhbiIsIsKgIixudWxsLCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweCIpfWZ1bmN0aW9uIGdpKHQsZSxyLG4pe2lmKCF0KXJldHVybiBuKGUsciwibHRyIik7Zm9yKHZhciBpPSExLG89MDtvPHQubGVuZ3RoOysrbyl7dmFyIGw9dFtvXTsobC5mcm9tPHImJmwudG8+ZXx8ZT09ciYmbC50bz09ZSkmJihuKE1hdGgubWF4KGwuZnJvbSxlKSxNYXRoLm1pbihsLnRvLHIpLDE9PWwubGV2ZWw/InJ0bCI6Imx0ciIpLGk9ITApfWl8fG4oZSxyLCJsdHIiKX1mdW5jdGlvbiBtaSh0KXtyZXR1cm4gdC5sZXZlbCUyP3QudG86dC5mcm9tfWZ1bmN0aW9uIHZpKHQpe3JldHVybiB0LmxldmVsJTI/dC5mcm9tOnQudG99ZnVuY3Rpb24geWkodCl7dmFyIGU9d24odCk7cmV0dXJuIGU/bWkoZVswXSk6MH1mdW5jdGlvbiBiaSh0KXt2YXIgZT13bih0KTtyZXR1cm4gZT92aShRbihlKSk6dC50ZXh0Lmxlbmd0aH1mdW5jdGlvbiB4aSh0LGUpe3ZhciByPWduKHQuZG9jLGUpLG49R3IodC5kb2Mscik7biE9ciYmKGU9Ym4obikpO3ZhciBpPXduKG4pLG89aT9pWzBdLmxldmVsJTI/Ymkobik6eWkobik6MDtyZXR1cm4gWWUoZSxvKX1mdW5jdGlvbiBDaSh0LGUpe2Zvcih2YXIgcixuO3I9QnIobj1nbih0LmRvYyxlKSk7KWU9ci5maW5kKCkudG8ubGluZTt2YXIgaT13bihuKSxvPWk/aVswXS5sZXZlbCUyP3lpKG4pOmJpKG4pOm4udGV4dC5sZW5ndGg7cmV0dXJuIFllKGUsbyl9ZnVuY3Rpb24gd2kodCxlLHIpe3ZhciBuPXRbMF0ubGV2ZWw7cmV0dXJuIGU9PW4/ITA6cj09bj8hMTpyPmV9ZnVuY3Rpb24gTGkodCxlKXtmb3IodmFyIHIsbj0wO248dC5sZW5ndGg7KytuKXt2YXIgaT10W25dO2lmKGkuZnJvbTxlJiZpLnRvPmUpcmV0dXJuIFJvPW51bGwsbjtpZihpLmZyb209PWV8fGkudG89PWUpe2lmKG51bGwhPXIpcmV0dXJuIHdpKHQsaS5sZXZlbCx0W3JdLmxldmVsKT8oUm89cixuKTooUm89bixyKTtyPW59fXJldHVybiBSbz1udWxsLHJ9ZnVuY3Rpb24ga2kodCxlLHIsbil7aWYoIW4pcmV0dXJuIGUrcjtkbyBlKz1yO3doaWxlKGU+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGUpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gU2kodCxlLHIsbil7dmFyIGk9d24odCk7aWYoIWkpcmV0dXJuIE1pKHQsZSxyLG4pO2Zvcih2YXIgbz1MaShpLGUpLGw9aVtvXSxzPWtpKHQsZSxsLmxldmVsJTI/LXI6cixuKTs7KXtpZihzPmwuZnJvbSYmczxsLnRvKXJldHVybiBzO2lmKHM9PWwuZnJvbXx8cz09bC50bylyZXR1cm4gTGkoaSxzKT09bz9zOihsPWlbbys9cl0scj4wPT1sLmxldmVsJTI/bC50bzpsLmZyb20pO2lmKGw9aVtvKz1yXSwhbClyZXR1cm4gbnVsbDtzPXI+MD09bC5sZXZlbCUyP2tpKHQsbC50bywtMSxuKTpraSh0LGwuZnJvbSwxLG4pfX1mdW5jdGlvbiBNaSh0LGUscixuKXt2YXIgaT1lK3I7aWYobilmb3IoO2k+MCYmRG8udGVzdCh0LnRleHQuY2hhckF0KGkpKTspaSs9cjtyZXR1cm4gMD5pfHxpPnQudGV4dC5sZW5ndGg/bnVsbDppfXZhciBUaT0vZ2Vja29cL1xkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxBaT0vTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxIaT1BaSYmKG51bGw9PWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDgpLE5pPUFpJiYobnVsbD09ZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU8OSksRGk9L1RyaWRlbnRcLyhbNy05XXxcZHsyLH0pXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksV2k9L1dlYktpdFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLE9pPVdpJiYvUXRcL1xkK1wuXGQrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEVpPS9DaHJvbWVcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx6aT0vT3BlcmFcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxJaT0vQXBwbGUgQ29tcHV0ZXIvLnRlc3QobmF2aWdhdG9yLnZlbmRvciksRmk9L0tIVE1MXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUGk9L01hYyBPUyBYIDFcZFxEKFs3LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksUmk9L01hYyBPUyBYIDFcZFxEKFs4LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQmk9L1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxHaT0vQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJi9Nb2JpbGVcL1x3Ky8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxWaT1HaXx8L0FuZHJvaWR8d2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEtpPUdpfHwvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSksVWk9L3dpbi9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxYaT16aSYmbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblwvKFxkKlwuXGQqKS8pO1hpJiYoWGk9TnVtYmVyKFhpWzFdKSksWGkmJlhpPj0xNSYmKHppPSExLFdpPSEwKTt2YXIgX2ksWWksamksJGk9S2kmJihPaXx8emkmJihudWxsPT1YaXx8MTIuMTE+WGkpKSxaaT1UaXx8QWkmJiFOaSxxaT0hMSxRaT0hMSxKaT0wLHRvPTAsZW89MCxybz1udWxsO0FpP3JvPS0uNTM6VGk/cm89MTU6RWk/cm89LS43OklpJiYocm89LTEvMyk7dmFyIG5vLGlvLG9vPW51bGwsbG89dC5jaGFuZ2VFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGV4dD9ZZSh0LmZyb20ubGluZSt0LnRleHQubGVuZ3RoLTEsUW4odC50ZXh0KS5sZW5ndGgrKDE9PXQudGV4dC5sZW5ndGg/dC5mcm9tLmNoOjApKTp0LnRvfTt0LlBvcz1ZZSx0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxmb2N1czpmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpLHBlKHRoaXMpLGZlKHRoaXMpfSxzZXRPcHRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLm9wdGlvbnMsbj1yW3RdOyhyW3RdIT1lfHwibW9kZSI9PXQpJiYoclt0XT1lLHNvLmhhc093blByb3BlcnR5KHQpJiZsZSh0aGlzLHNvW3RdKSh0aGlzLGUsbikpfSxnZXRPcHRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9uc1t0XX0sZ2V0RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jfSxhZGRLZXlNYXA6ZnVuY3Rpb24odCxlKXt0aGlzLnN0YXRlLmtleU1hcHNbZT8icHVzaCI6InVuc2hpZnQiXSh0KX0scmVtb3ZlS2V5TWFwOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnN0YXRlLmtleU1hcHMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PXR8fCJzdHJpbmciIT10eXBlb2YgZVtyXSYmZVtyXS5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLCEwfSxhZGRPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24oZSxyKXt2YXIgbj1lLnRva2VuP2U6dC5nZXRNb2RlKHRoaXMub3B0aW9ucyxlKTtpZihuLnN0YXJ0U3RhdGUpdGhyb3cgbmV3IEVycm9yKCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLiIpO3RoaXMuc3RhdGUub3ZlcmxheXMucHVzaCh7bW9kZTpuLG1vZGVTcGVjOmUsb3BhcXVlOnImJnIub3BhcXVlfSksdGhpcy5zdGF0ZS5tb2RlR2VuKyssdWUodGhpcyl9KSxyZW1vdmVPdmVybGF5OmxlKG51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuc3RhdGUub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1lW3JdLm1vZGVTcGVjO2lmKG49PXR8fCJzdHJpbmciPT10eXBlb2YgdCYmbi5uYW1lPT10KXJldHVybiBlLnNwbGljZShyLDEpLHRoaXMuc3RhdGUubW9kZUdlbisrLHVlKHRoaXMpLHZvaWQgMH19KSxpbmRlbnRMaW5lOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpeyJzdHJpbmciIT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlJiYoZT1udWxsPT1lP3RoaXMub3B0aW9ucy5zbWFydEluZGVudD8ic21hcnQiOiJwcmV2IjplPyJhZGQiOiJzdWJ0cmFjdCIpLHRyKHRoaXMuZG9jLHQpJiZocih0aGlzLHQsZSxyKX0pLGluZGVudFNlbGVjdGlvbjpsZShudWxsLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZG9jLnNlbDtpZihqZShlLmZyb20sZS50bykpcmV0dXJuIGhyKHRoaXMsZS5mcm9tLmxpbmUsdCk7Zm9yKHZhciByPWUudG8ubGluZS0oZS50by5jaD8wOjEpLG49ZS5mcm9tLmxpbmU7cj49bjsrK24paHIodGhpcyxuLHQpfSksZ2V0VG9rZW5BdDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3Q9UWUocix0KTtmb3IodmFyIG49eih0aGlzLHQubGluZSxlKSxpPXRoaXMuZG9jLm1vZGUsbz1nbihyLHQubGluZSksbD1uZXcgU3Ioby50ZXh0LHRoaXMub3B0aW9ucy50YWJTaXplKTtsLnBvczx0LmNoJiYhbC5lb2woKTspe2wuc3RhcnQ9bC5wb3M7dmFyIHM9aS50b2tlbihsLG4pfXJldHVybntzdGFydDpsLnN0YXJ0LGVuZDpsLnBvcyxzdHJpbmc6bC5jdXJyZW50KCksY2xhc3NOYW1lOnN8fG51bGwsdHlwZTpzfHxudWxsLHN0YXRlOm59fSxnZXRUb2tlblR5cGVBdDpmdW5jdGlvbih0KXt0PVFlKHRoaXMuZG9jLHQpO3ZhciBlPUpyKHRoaXMsZ24odGhpcy5kb2MsdC5saW5lKSkscj0wLG49KGUubGVuZ3RoLTEpLzIsaT10LmNoO2lmKDA9PWkpcmV0dXJuIGVbMl07Zm9yKDs7KXt2YXIgbz1yK24+PjE7aWYoKG8/ZVsyKm8tMV06MCk+PWkpbj1vO2Vsc2V7aWYoIShlWzIqbysxXTxpKSlyZXR1cm4gZVsyKm8rMl07cj1vKzF9fX0sZ2V0TW9kZUF0OmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuZG9jLm1vZGU7cmV0dXJuIHIuaW5uZXJNb2RlP3QuaW5uZXJNb2RlKHIsdGhpcy5nZXRUb2tlbkF0KGUpLnN0YXRlKS5tb2RlOnJ9LGdldEhlbHBlcjpmdW5jdGlvbih0LGUpe2lmKGdvLmhhc093blByb3BlcnR5KGUpKXt2YXIgcj1nb1tlXSxuPXRoaXMuZ2V0TW9kZUF0KHQpO3JldHVybiBuW2VdJiZyW25bZV1dfHxuLmhlbHBlclR5cGUmJnJbbi5oZWxwZXJUeXBlXXx8cltuLm5hbWVdfX0sZ2V0U3RhdGVBZnRlcjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZG9jO3JldHVybiB0PXFlKHIsbnVsbD09dD9yLmZpcnN0K3Iuc2l6ZS0xOnQpLHoodGhpcyx0KzEsZSl9LGN1cnNvckNvb3JkczpmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3JldHVybiByPW51bGw9PXQ/bi5oZWFkOiJvYmplY3QiPT10eXBlb2YgdD9RZSh0aGlzLmRvYyx0KTp0P24uZnJvbTpuLnRvLFEodGhpcyxyLGV8fCJwYWdlIil9LGNoYXJDb29yZHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcSh0aGlzLFFlKHRoaXMuZG9jLHQpLGV8fCJwYWdlIil9LGNvb3Jkc0NoYXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1aKHRoaXMsdCxlfHwicGFnZSIpLHRlKHRoaXMsdC5sZWZ0LHQudG9wKX0sbGluZUF0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Wih0aGlzLHt0b3A6dCxsZWZ0OjB9LGV8fCJwYWdlIikudG9wLHhuKHRoaXMuZG9jLHQrdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpfSxoZWlnaHRBdExpbmU6ZnVuY3Rpb24odCxlKXt2YXIgcj0hMSxuPXRoaXMuZG9jLmZpcnN0K3RoaXMuZG9jLnNpemUtMTt0PHRoaXMuZG9jLmZpcnN0P3Q9dGhpcy5kb2MuZmlyc3Q6dD5uJiYodD1uLHI9ITApO3ZhciBpPWduKHRoaXMuZG9jLHQpO3JldHVybiAkKHRoaXMsZ24odGhpcy5kb2MsdCkse3RvcDowLGxlZnQ6MH0sZXx8InBhZ2UiKS50b3ArKHI/aS5oZWlnaHQ6MCl9LGRlZmF1bHRUZXh0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHJlKHRoaXMuZGlzcGxheSl9LGRlZmF1bHRDaGFyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gbmUodGhpcy5kaXNwbGF5KX0sc2V0R3V0dGVyTWFya2VyOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49dC5ndXR0ZXJNYXJrZXJzfHwodC5ndXR0ZXJNYXJrZXJzPXt9KTtyZXR1cm4gbltlXT1yLCFyJiZsaShuKSYmKHQuZ3V0dGVyTWFya2Vycz1udWxsKSwhMH0pfSksY2xlYXJHdXR0ZXI6bGUobnVsbCxmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kb2Msbj1yLmZpcnN0O3IuaXRlcihmdW5jdGlvbihyKXtyLmd1dHRlck1hcmtlcnMmJnIuZ3V0dGVyTWFya2Vyc1t0XSYmKHIuZ3V0dGVyTWFya2Vyc1t0XT1udWxsLHVlKGUsbixuKzEpLGxpKHIuZ3V0dGVyTWFya2VycykmJihyLmd1dHRlck1hcmtlcnM9bnVsbCkpLCsrbn0pfSksYWRkTGluZUNsYXNzOmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBkcih0aGlzLHQsZnVuY3Rpb24odCl7dmFyIG49InRleHQiPT1lPyJ0ZXh0Q2xhc3MiOiJiYWNrZ3JvdW5kIj09ZT8iYmdDbGFzcyI6IndyYXBDbGFzcyI7aWYodFtuXSl7aWYobmV3IFJlZ0V4cCgiKD86XnxcXHMpIityKyIoPzokfFxccykiKS50ZXN0KHRbbl0pKXJldHVybiExO3Rbbl0rPSIgIityfWVsc2UgdFtuXT1yO3JldHVybiEwfSl9KSxyZW1vdmVMaW5lQ2xhc3M6bGUobnVsbCxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRyKHRoaXMsdCxmdW5jdGlvbih0KXt2YXIgbj0idGV4dCI9PWU/InRleHRDbGFzcyI6ImJhY2tncm91bmQiPT1lPyJiZ0NsYXNzIjoid3JhcENsYXNzIixpPXRbbl07aWYoIWkpcmV0dXJuITE7aWYobnVsbD09cil0W25dPW51bGw7ZWxzZXt2YXIgbz1pLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3IrIig/OiR8XFxzKykiKSk7aWYoIW8pcmV0dXJuITE7dmFyIGw9by5pbmRleCtvWzBdLmxlbmd0aDt0W25dPWkuc2xpY2UoMCxvLmluZGV4KSsoby5pbmRleCYmbCE9aS5sZW5ndGg/IiAiOiIiKStpLnNsaWNlKGwpfHxudWxsfXJldHVybiEwfSl9KSxhZGRMaW5lV2lkZ2V0OmxlKG51bGwsZnVuY3Rpb24odCxlLHIpe3JldHVybiBqcih0aGlzLHQsZSxyKX0pLHJlbW92ZUxpbmVXaWRnZXQ6ZnVuY3Rpb24odCl7dC5jbGVhcigpfSxsaW5lSW5mbzpmdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCF0cih0aGlzLmRvYyx0KSlyZXR1cm4gbnVsbDt2YXIgZT10O2lmKHQ9Z24odGhpcy5kb2MsdCksIXQpcmV0dXJuIG51bGx9ZWxzZXt2YXIgZT1ibih0KTtpZihudWxsPT1lKXJldHVybiBudWxsfXJldHVybntsaW5lOmUsaGFuZGxlOnQsdGV4dDp0LnRleHQsZ3V0dGVyTWFya2Vyczp0Lmd1dHRlck1hcmtlcnMsdGV4dENsYXNzOnQudGV4dENsYXNzLGJnQ2xhc3M6dC5iZ0NsYXNzLHdyYXBDbGFzczp0LndyYXBDbGFzcyx3aWRnZXRzOnQud2lkZ2V0c319LGdldFZpZXdwb3J0OmZ1bmN0aW9uKCl7cmV0dXJue2Zyb206dGhpcy5kaXNwbGF5LnNob3dpbmdGcm9tLHRvOnRoaXMuZGlzcGxheS5zaG93aW5nVG99fSxhZGRXaWRnZXQ6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz10aGlzLmRpc3BsYXk7dD1RKHRoaXMsUWUodGhpcy5kb2MsdCkpO3ZhciBsPXQuYm90dG9tLHM9dC5sZWZ0O2lmKGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnNpemVyLmFwcGVuZENoaWxkKGUpLCJvdmVyIj09bilsPXQudG9wO2Vsc2UgaWYoImFib3ZlIj09bnx8Im5lYXIiPT1uKXt2YXIgYT1NYXRoLm1heChvLndyYXBwZXIuY2xpZW50SGVpZ2h0LHRoaXMuZG9jLmhlaWdodCksdT1NYXRoLm1heChvLnNpemVyLmNsaWVudFdpZHRoLG8ubGluZVNwYWNlLmNsaWVudFdpZHRoKTsoImFib3ZlIj09bnx8dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ+YSkmJnQudG9wPmUub2Zmc2V0SGVpZ2h0P2w9dC50b3AtZS5vZmZzZXRIZWlnaHQ6dC5ib3R0b20rZS5vZmZzZXRIZWlnaHQ8PWEmJihsPXQuYm90dG9tKSxzK2Uub2Zmc2V0V2lkdGg+dSYmKHM9dS1lLm9mZnNldFdpZHRoKX1lLnN0eWxlLnRvcD1sKyJweCIsZS5zdHlsZS5sZWZ0PWUuc3R5bGUucmlnaHQ9IiIsInJpZ2h0Ij09aT8ocz1vLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgsZS5zdHlsZS5yaWdodD0iMHB4Iik6KCJsZWZ0Ij09aT9zPTA6Im1pZGRsZSI9PWkmJihzPShvLnNpemVyLmNsaWVudFdpZHRoLWUub2Zmc2V0V2lkdGgpLzIpLGUuc3R5bGUubGVmdD1zKyJweCIpLHImJmFyKHRoaXMscyxsLHMrZS5vZmZzZXRXaWR0aCxsK2Uub2Zmc2V0SGVpZ2h0KX0sdHJpZ2dlck9uS2V5RG93bjpsZShudWxsLFdlKSxleGVjQ29tbWFuZDpmdW5jdGlvbih0KXtyZXR1cm4gbW9bdF0odGhpcyl9LGZpbmRQb3NIOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTE7MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIG89MCxsPVFlKHRoaXMuZG9jLHQpO2U+byYmKGw9cHIodGhpcy5kb2MsbCxpLHIsbiksIWwuaGl0U2lkZSk7KytvKTtyZXR1cm4gbH0sbW92ZUg6bGUobnVsbCxmdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5kb2Muc2VsO3I9bi5zaGlmdHx8bi5leHRlbmR8fGplKG4uZnJvbSxuLnRvKT9wcih0aGlzLmRvYyxuLmhlYWQsdCxlLHRoaXMub3B0aW9ucy5ydGxNb3ZlVmlzdWFsbHkpOjA+dD9uLmZyb206bi50byxlcih0aGlzLmRvYyxyLHIsdCl9KSxkZWxldGVIOmxlKG51bGwsZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmRvYy5zZWw7amUoci5mcm9tLHIudG8pP19lKHRoaXMuZG9jLCIiLHIuZnJvbSxwcih0aGlzLmRvYyxyLmhlYWQsdCxlLCExKSwiK2RlbGV0ZSIpOl9lKHRoaXMuZG9jLCIiLHIuZnJvbSxyLnRvLCIrZGVsZXRlIiksdGhpcy5jdXJPcC51c2VyU2VsQ2hhbmdlPSEwfSksZmluZFBvc1Y6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9MSxvPW47MD5lJiYoaT0tMSxlPS1lKTtmb3IodmFyIGw9MCxzPVFlKHRoaXMuZG9jLHQpO2U+bDsrK2wpe3ZhciBhPVEodGhpcyxzLCJkaXYiKTtpZihudWxsPT1vP289YS5sZWZ0OmEubGVmdD1vLHM9Z3IodGhpcyxhLGkscikscy5oaXRTaWRlKWJyZWFrfXJldHVybiBzfSxtb3ZlVjpsZShudWxsLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kb2Muc2VsLG49USh0aGlzLHIuaGVhZCwiZGl2Iik7bnVsbCE9ci5nb2FsQ29sdW1uJiYobi5sZWZ0PXIuZ29hbENvbHVtbik7dmFyIGk9Z3IodGhpcyxuLHQsZSk7InBhZ2UiPT1lJiZmcih0aGlzLDAscSh0aGlzLGksImRpdiIpLnRvcC1uLnRvcCksZXIodGhpcy5kb2MsaSxpLHQpLHIuZ29hbENvbHVtbj1uLmxlZnR9KSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7KG51bGw9PXR8fHQhPXRoaXMuc3RhdGUub3ZlcndyaXRlKSYmKCh0aGlzLnN0YXRlLm92ZXJ3cml0ZT0hdGhpcy5zdGF0ZS5vdmVyd3JpdGUpP3RoaXMuZGlzcGxheS5jdXJzb3IuY2xhc3NOYW1lKz0iIENvZGVNaXJyb3Itb3ZlcndyaXRlIjp0aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZT10aGlzLmRpc3BsYXkuY3Vyc29yLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1vdmVyd3JpdGUiLCIiKSl9LGhhc0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGUuZm9jdXNlZH0sc2Nyb2xsVG86bGUobnVsbCxmdW5jdGlvbih0LGUpe2NyKHRoaXMsdCxlKX0pLGdldFNjcm9sbEluZm86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRpc3BsYXkuc2Nyb2xsZXIsZT1UbztyZXR1cm57bGVmdDp0LnNjcm9sbExlZnQsdG9wOnQuc2Nyb2xsVG9wLGhlaWdodDp0LnNjcm9sbEhlaWdodC1lLHdpZHRoOnQuc2Nyb2xsV2lkdGgtZSxjbGllbnRIZWlnaHQ6dC5jbGllbnRIZWlnaHQtZSxjbGllbnRXaWR0aDp0LmNsaWVudFdpZHRoLWV9fSxzY3JvbGxJbnRvVmlldzpsZShudWxsLGZ1bmN0aW9uKHQsZSl7bnVsbD09dD90PXtmcm9tOnRoaXMuZG9jLnNlbC5oZWFkLHRvOm51bGx9OiJudW1iZXIiPT10eXBlb2YgdD90PXtmcm9tOlllKHQsMCksdG86bnVsbH06bnVsbD09dC5mcm9tJiYodD17ZnJvbTp0LHRvOm51bGx9KSx0LnRvfHwodC50bz10LmZyb20pLGV8fChlPTApO3ZhciByPXQ7bnVsbCE9dC5mcm9tLmxpbmUmJih0aGlzLmN1ck9wLnNjcm9sbFRvUG9zPXtmcm9tOnQuZnJvbSx0bzp0LnRvLG1hcmdpbjplfSxyPXtmcm9tOlEodGhpcyx0LmZyb20pLHRvOlEodGhpcyx0LnRvKX0pO3ZhciBuPXVyKHRoaXMsTWF0aC5taW4oci5mcm9tLmxlZnQsci50by5sZWZ0KSxNYXRoLm1pbihyLmZyb20udG9wLHIudG8udG9wKS1lLE1hdGgubWF4KHIuZnJvbS5yaWdodCxyLnRvLnJpZ2h0KSxNYXRoLm1heChyLmZyb20uYm90dG9tLHIudG8uYm90dG9tKStlKTtjcih0aGlzLG4uc2Nyb2xsTGVmdCxuLnNjcm9sbFRvcCl9KSxzZXRTaXplOmxlKG51bGwsZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8L15cZCskLy50ZXN0KFN0cmluZyh0KSk/dCsicHgiOnR9bnVsbCE9dCYmKHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoPXIodCkpLG51bGwhPWUmJih0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQ9cihlKSksdGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZyYmKHRoaXMuZGlzcGxheS5tZWFzdXJlTGluZUNhY2hlLmxlbmd0aD10aGlzLmRpc3BsYXkubWVhc3VyZUxpbmVDYWNoZVBvcz0wKSx0aGlzLmN1ck9wLmZvcmNlVXBkYXRlPSEwfSksb3BlcmF0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiBhZSh0aGlzLHQpfSxyZWZyZXNoOmxlKG51bGwsZnVuY3Rpb24oKXt2YXIgdD1udWxsPT10aGlzLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodDtfKHRoaXMpLGNyKHRoaXMsdGhpcy5kb2Muc2Nyb2xsTGVmdCx0aGlzLmRvYy5zY3JvbGxUb3ApLHVlKHRoaXMpLHQmJm8odGhpcyl9KSxzd2FwRG9jOmxlKG51bGwsZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kb2M7cmV0dXJuIGUuY209bnVsbCxwbih0aGlzLHQpLF8odGhpcyksZGUodGhpcywhMCksY3IodGhpcyx0LnNjcm9sbExlZnQsdC5zY3JvbGxUb3ApLFVuKHRoaXMsInN3YXBEb2MiLHRoaXMsZSksZX0pLGdldElucHV0RmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0fSxnZXRXcmFwcGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcn0sZ2V0U2Nyb2xsZXJFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcn0sZ2V0R3V0dGVyRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyc319LGpuKHQpO3ZhciBzbz10Lm9wdGlvbkhhbmRsZXJzPXt9LGFvPXQuZGVmYXVsdHM9e30sdW89dC5Jbml0PXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJDb2RlTWlycm9yLkluaXQifX07eXIoInZhbHVlIiwiIixmdW5jdGlvbih0LGUpe3Quc2V0VmFsdWUoZSl9LCEwKSx5cigibW9kZSIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZG9jLm1vZGVPcHRpb249ZSxyKHQpfSwhMCkseXIoImluZGVudFVuaXQiLDIsciwhMCkseXIoImluZGVudFdpdGhUYWJzIiwhMSkseXIoInNtYXJ0SW5kZW50IiwhMCkseXIoInRhYlNpemUiLDQsZnVuY3Rpb24odCl7cih0KSxfKHQpLHVlKHQpfSwhMCkseXIoInNwZWNpYWxDaGFycyIsL1tcdFx1MDAwMC1cdTAwMTlcdTAwYWRcdTIwMGJcdTIwMjhcdTIwMjlcdWZlZmZdL2csZnVuY3Rpb24odCxlKXt0Lm9wdGlvbnMuc3BlY2lhbENoYXJzPW5ldyBSZWdFeHAoZS5zb3VyY2UrKGUudGVzdCgiCSIpPyIiOiJ8CSIpLCJnIiksdC5yZWZyZXNoKCl9LCEwKSx5cigic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsbm4sZnVuY3Rpb24odCl7dC5yZWZyZXNoKCl9LCEwKSx5cigiZWxlY3RyaWNDaGFycyIsITApLHlyKCJydGxNb3ZlVmlzdWFsbHkiLCFVaSkseXIoIndob2xlTGluZVVwZGF0ZUJlZm9yZSIsITApLHlyKCJ0aGVtZSIsImRlZmF1bHQiLGZ1bmN0aW9uKHQpe3ModCksYSh0KX0sITApLHlyKCJrZXlNYXAiLCJkZWZhdWx0IixsKSx5cigiZXh0cmFLZXlzIixudWxsKSx5cigib25LZXlFdmVudCIsbnVsbCkseXIoIm9uRHJhZ0V2ZW50IixudWxsKSx5cigibGluZVdyYXBwaW5nIiwhMSxuLCEwKSx5cigiZ3V0dGVycyIsW10sZnVuY3Rpb24odCl7aCh0Lm9wdGlvbnMpLGEodCl9LCEwKSx5cigiZml4ZWRHdXR0ZXIiLCEwLGZ1bmN0aW9uKHQsZSl7dC5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdD1lP3kodC5kaXNwbGF5KSsicHgiOiIwIix0LnJlZnJlc2goKX0sITApLHlyKCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciIsITEsZCwhMCkseXIoImxpbmVOdW1iZXJzIiwhMSxmdW5jdGlvbih0KXtoKHQub3B0aW9ucyksYSh0KX0sITApLHlyKCJmaXJzdExpbmVOdW1iZXIiLDEsYSwhMCkseXIoImxpbmVOdW1iZXJGb3JtYXR0ZXIiLGZ1bmN0aW9uKHQpe3JldHVybiB0fSxhLCEwKSx5cigic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCExLEEsITApLHlyKCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUiLCEwKSx5cigicmVhZE9ubHkiLCExLGZ1bmN0aW9uKHQsZSl7Im5vY3Vyc29yIj09ZT8oemUodCksdC5kaXNwbGF5LmlucHV0LmJsdXIoKSx0LmRpc3BsYXkuZGlzYWJsZWQ9ITApOih0LmRpc3BsYXkuZGlzYWJsZWQ9ITEsZXx8ZGUodCwhMCkpfSkseXIoImRyYWdEcm9wIiwhMCkseXIoImN1cnNvckJsaW5rUmF0ZSIsNTMwKSx5cigiY3Vyc29yU2Nyb2xsTWFyZ2luIiwwKSx5cigiY3Vyc29ySGVpZ2h0IiwxKSx5cigid29ya1RpbWUiLDEwMCkseXIoIndvcmtEZWxheSIsMTAwKSx5cigiZmxhdHRlblNwYW5zIiwhMCkseXIoInBvbGxJbnRlcnZhbCIsMTAwKSx5cigidW5kb0RlcHRoIiw0MCxmdW5jdGlvbih0LGUpe3QuZG9jLmhpc3RvcnkudW5kb0RlcHRoPWV9KSx5cigiaGlzdG9yeUV2ZW50RGVsYXkiLDUwMCkseXIoInZpZXdwb3J0TWFyZ2luIiwxMCxmdW5jdGlvbih0KXt0LnJlZnJlc2goKX0sITApLHlyKCJtYXhIaWdobGlnaHRMZW5ndGgiLDFlNCxmdW5jdGlvbih0KXtyKHQpLHQucmVmcmVzaCgpfSwhMCkseXIoImNydWRlTWVhc3VyaW5nRnJvbSIsMWU0KSx5cigibW92ZUlucHV0V2l0aEN1cnNvciIsITAsZnVuY3Rpb24odCxlKXtlfHwodC5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcD10LmRpc3BsYXkuaW5wdXREaXYuc3R5bGUubGVmdD0wKX0pLHlyKCJ0YWJpbmRleCIsbnVsbCxmdW5jdGlvbih0LGUpe3QuZGlzcGxheS5pbnB1dC50YWJJbmRleD1lfHwiIn0pLHlyKCJhdXRvZm9jdXMiLG51bGwpO3ZhciBjbz10Lm1vZGVzPXt9LGZvPXQubWltZU1vZGVzPXt9O3QuZGVmaW5lTW9kZT1mdW5jdGlvbihlLHIpe2lmKHQuZGVmYXVsdHMubW9kZXx8Im51bGwiPT1lfHwodC5kZWZhdWx0cy5tb2RlPWUpLGFyZ3VtZW50cy5sZW5ndGg+Mil7ci5kZXBlbmRlbmNpZXM9W107Zm9yKHZhciBuPTI7bjxhcmd1bWVudHMubGVuZ3RoOysrbilyLmRlcGVuZGVuY2llcy5wdXNoKGFyZ3VtZW50c1tuXSl9Y29bZV09cn0sdC5kZWZpbmVNSU1FPWZ1bmN0aW9uKHQsZSl7Zm9bdF09ZX0sdC5yZXNvbHZlTW9kZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUmJmZvLmhhc093blByb3BlcnR5KGUpKWU9Zm9bZV07ZWxzZSBpZihlJiYic3RyaW5nIj09dHlwZW9mIGUubmFtZSYmZm8uaGFzT3duUHJvcGVydHkoZS5uYW1lKSl7dmFyIHI9Zm9bZS5uYW1lXTtlPWVpKHIsZSksZS5uYW1lPXIubmFtZX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSYmL15bXHdcLV0rXC9bXHdcLV0rXCt4bWwkLy50ZXN0KGUpKXJldHVybiB0LnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/e25hbWU6ZX06ZXx8e25hbWU6Im51bGwifX0sdC5nZXRNb2RlPWZ1bmN0aW9uKGUscil7dmFyIHI9dC5yZXNvbHZlTW9kZShyKSxuPWNvW3IubmFtZV07aWYoIW4pcmV0dXJuIHQuZ2V0TW9kZShlLCJ0ZXh0L3BsYWluIik7dmFyIGk9bihlLHIpO2lmKGhvLmhhc093blByb3BlcnR5KHIubmFtZSkpe3ZhciBvPWhvW3IubmFtZV07Zm9yKHZhciBsIGluIG8pby5oYXNPd25Qcm9wZXJ0eShsKSYmKGkuaGFzT3duUHJvcGVydHkobCkmJihpWyJfIitsXT1pW2xdKSxpW2xdPW9bbF0pfXJldHVybiBpLm5hbWU9ci5uYW1lLGl9LHQuZGVmaW5lTW9kZSgibnVsbCIsZnVuY3Rpb24oKXtyZXR1cm57dG9rZW46ZnVuY3Rpb24odCl7dC5za2lwVG9FbmQoKX19fSksdC5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwibnVsbCIpO3ZhciBobz10Lm1vZGVFeHRlbnNpb25zPXt9O3QuZXh0ZW5kTW9kZT1mdW5jdGlvbih0LGUpe3ZhciByPWhvLmhhc093blByb3BlcnR5KHQpP2hvW3RdOmhvW3RdPXt9O3JpKGUscil9LHQuZGVmaW5lRXh0ZW5zaW9uPWZ1bmN0aW9uKGUscil7dC5wcm90b3R5cGVbZV09cn0sdC5kZWZpbmVEb2NFeHRlbnNpb249ZnVuY3Rpb24odCxlKXt3by5wcm90b3R5cGVbdF09ZX0sdC5kZWZpbmVPcHRpb249eXI7dmFyIHBvPVtdO3QuZGVmaW5lSW5pdEhvb2s9ZnVuY3Rpb24odCl7cG8ucHVzaCh0KX07dmFyIGdvPXQuaGVscGVycz17fTt0LnJlZ2lzdGVySGVscGVyPWZ1bmN0aW9uKGUscixuKXtnby5oYXNPd25Qcm9wZXJ0eShlKXx8KGdvW2VdPXRbZV09e30pLGdvW2VdW3JdPW59LHQuaXNXb3JkQ2hhcj1vaSx0LmNvcHlTdGF0ZT1icix0LnN0YXJ0U3RhdGU9eHIsdC5pbm5lck1vZGU9ZnVuY3Rpb24odCxlKXtmb3IoO3QuaW5uZXJNb2RlOyl7dmFyIHI9dC5pbm5lck1vZGUoZSk7aWYoIXJ8fHIubW9kZT09dClicmVhaztlPXIuc3RhdGUsdD1yLm1vZGV9cmV0dXJuIHJ8fHttb2RlOnQsc3RhdGU6ZX19O3ZhciBtbz10LmNvbW1hbmRzPXtzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dC5zZXRTZWxlY3Rpb24oWWUodC5maXJzdExpbmUoKSwwKSxZZSh0Lmxhc3RMaW5lKCkpKX0sa2lsbExpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoITApLHI9dC5nZXRDdXJzb3IoITEpLG49IWplKGUscik7bnx8dC5nZXRMaW5lKGUubGluZSkubGVuZ3RoIT1lLmNoP3QucmVwbGFjZVJhbmdlKCIiLGUsbj9yOlllKGUubGluZSksIitkZWxldGUiKTp0LnJlcGxhY2VSYW5nZSgiIixlLFllKGUubGluZSsxLDApLCIrZGVsZXRlIil9LGRlbGV0ZUxpbmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKS5saW5lO3QucmVwbGFjZVJhbmdlKCIiLFllKGUsMCksWWUoZSksIitkZWxldGUiKX0sZGVsTGluZUxlZnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKTt0LnJlcGxhY2VSYW5nZSgiIixZZShlLmxpbmUsMCksZSwiK2RlbGV0ZSIpfSx1bmRvOmZ1bmN0aW9uKHQpe3QudW5kbygpfSxyZWRvOmZ1bmN0aW9uKHQpe3QucmVkbygpfSxnb0RvY1N0YXJ0OmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKFllKHQuZmlyc3RMaW5lKCksMCkpfSxnb0RvY0VuZDpmdW5jdGlvbih0KXt0LmV4dGVuZFNlbGVjdGlvbihZZSh0Lmxhc3RMaW5lKCkpKX0sZ29MaW5lU3RhcnQ6ZnVuY3Rpb24odCl7dC5leHRlbmRTZWxlY3Rpb24oeGkodCx0LmdldEN1cnNvcigpLmxpbmUpKX0sZ29MaW5lU3RhcnRTbWFydDpmdW5jdGlvbih0KXt2YXIgZT10LmdldEN1cnNvcigpLHI9eGkodCxlLmxpbmUpLG49dC5nZXRMaW5lSGFuZGxlKHIubGluZSksaT13bihuKTtpZihpJiYwIT1pWzBdLmxldmVsKXQuZXh0ZW5kU2VsZWN0aW9uKHIpO2Vsc2V7dmFyIG89TWF0aC5tYXgoMCxuLnRleHQuc2VhcmNoKC9cUy8pKSxsPWUubGluZT09ci5saW5lJiZlLmNoPD1vJiZlLmNoO3QuZXh0ZW5kU2VsZWN0aW9uKFllKHIubGluZSxsPzA6bykpfX0sZ29MaW5lRW5kOmZ1bmN0aW9uKHQpe3QuZXh0ZW5kU2VsZWN0aW9uKENpKHQsdC5nZXRDdXJzb3IoKS5saW5lKSl9LGdvTGluZVJpZ2h0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6dC5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGgrMTAwLHRvcDplfSwiZGl2IikpfSxnb0xpbmVMZWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvb3Jkcyh0LmdldEN1cnNvcigpLCJkaXYiKS50b3ArNTt0LmV4dGVuZFNlbGVjdGlvbih0LmNvb3Jkc0NoYXIoe2xlZnQ6MCx0b3A6ZX0sImRpdiIpKX0sZ29MaW5lVXA6ZnVuY3Rpb24odCl7dC5tb3ZlVigtMSwibGluZSIpfSxnb0xpbmVEb3duOmZ1bmN0aW9uKHQpe3QubW92ZVYoMSwibGluZSIpfSxnb1BhZ2VVcDpmdW5jdGlvbih0KXt0Lm1vdmVWKC0xLCJwYWdlIil9LGdvUGFnZURvd246ZnVuY3Rpb24odCl7dC5tb3ZlVigxLCJwYWdlIil9LGdvQ2hhckxlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwiY2hhciIpfSxnb0NoYXJSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsImNoYXIiKX0sZ29Db2x1bW5MZWZ0OmZ1bmN0aW9uKHQpe3QubW92ZUgoLTEsImNvbHVtbiIpfSxnb0NvbHVtblJpZ2h0OmZ1bmN0aW9uKHQpe3QubW92ZUgoMSwiY29sdW1uIil9LGdvV29yZExlZnQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgtMSwid29yZCIpfSxnb0dyb3VwUmlnaHQ6ZnVuY3Rpb24odCl7dC5tb3ZlSCgxLCJncm91cCIpfSxnb0dyb3VwTGVmdDpmdW5jdGlvbih0KXt0Lm1vdmVIKC0xLCJncm91cCIpfSxnb1dvcmRSaWdodDpmdW5jdGlvbih0KXt0Lm1vdmVIKDEsIndvcmQiKX0sZGVsQ2hhckJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImNoYXIiKX0sZGVsQ2hhckFmdGVyOmZ1bmN0aW9uKHQpe3QuZGVsZXRlSCgxLCJjaGFyIil9LGRlbFdvcmRCZWZvcmU6ZnVuY3Rpb24odCl7dC5kZWxldGVIKC0xLCJ3b3JkIil9LGRlbFdvcmRBZnRlcjpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoMSwid29yZCIpfSxkZWxHcm91cEJlZm9yZTpmdW5jdGlvbih0KXt0LmRlbGV0ZUgoLTEsImdyb3VwIil9LGRlbEdyb3VwQWZ0ZXI6ZnVuY3Rpb24odCl7dC5kZWxldGVIKDEsImdyb3VwIil9LGluZGVudEF1dG86ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oInNtYXJ0Iil9LGluZGVudE1vcmU6ZnVuY3Rpb24odCl7dC5pbmRlbnRTZWxlY3Rpb24oImFkZCIpfSxpbmRlbnRMZXNzOmZ1bmN0aW9uKHQpe3QuaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpfSxpbnNlcnRUYWI6ZnVuY3Rpb24odCl7dC5yZXBsYWNlU2VsZWN0aW9uKCIJIiwiZW5kIiwiK2lucHV0Iil9LGRlZmF1bHRUYWI6ZnVuY3Rpb24odCl7dC5zb21ldGhpbmdTZWxlY3RlZCgpP3QuaW5kZW50U2VsZWN0aW9uKCJhZGQiKTp0LnJlcGxhY2VTZWxlY3Rpb24oIgkiLCJlbmQiLCIraW5wdXQiKX0sdHJhbnNwb3NlQ2hhcnM6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDdXJzb3IoKSxyPXQuZ2V0TGluZShlLmxpbmUpO2UuY2g+MCYmZS5jaDxyLmxlbmd0aC0xJiZ0LnJlcGxhY2VSYW5nZShyLmNoYXJBdChlLmNoKStyLmNoYXJBdChlLmNoLTEpLFllKGUubGluZSxlLmNoLTEpLFllKGUubGluZSxlLmNoKzEpKX0sbmV3bGluZUFuZEluZGVudDpmdW5jdGlvbih0KXtsZSh0LGZ1bmN0aW9uKCl7dC5yZXBsYWNlU2VsZWN0aW9uKCJcbiIsImVuZCIsIitpbnB1dCIpLHQuaW5kZW50TGluZSh0LmdldEN1cnNvcigpLmxpbmUsbnVsbCwhMCl9KSgpfSx0b2dnbGVPdmVyd3JpdGU6ZnVuY3Rpb24odCl7dC50b2dnbGVPdmVyd3JpdGUoKX19LHZvPXQua2V5TWFwPXt9O3ZvLmJhc2ljPXtMZWZ0OiJnb0NoYXJMZWZ0IixSaWdodDoiZ29DaGFyUmlnaHQiLFVwOiJnb0xpbmVVcCIsRG93bjoiZ29MaW5lRG93biIsRW5kOiJnb0xpbmVFbmQiLEhvbWU6ImdvTGluZVN0YXJ0U21hcnQiLFBhZ2VVcDoiZ29QYWdlVXAiLFBhZ2VEb3duOiJnb1BhZ2VEb3duIixEZWxldGU6ImRlbENoYXJBZnRlciIsQmFja3NwYWNlOiJkZWxDaGFyQmVmb3JlIiwiU2hpZnQtQmFja3NwYWNlIjoiZGVsQ2hhckJlZm9yZSIsVGFiOiJkZWZhdWx0VGFiIiwiU2hpZnQtVGFiIjoiaW5kZW50QXV0byIsRW50ZXI6Im5ld2xpbmVBbmRJbmRlbnQiLEluc2VydDoidG9nZ2xlT3ZlcndyaXRlIn0sdm8ucGNEZWZhdWx0PXsiQ3RybC1BIjoic2VsZWN0QWxsIiwiQ3RybC1EIjoiZGVsZXRlTGluZSIsIkN0cmwtWiI6InVuZG8iLCJTaGlmdC1DdHJsLVoiOiJyZWRvIiwiQ3RybC1ZIjoicmVkbyIsIkN0cmwtSG9tZSI6ImdvRG9jU3RhcnQiLCJBbHQtVXAiOiJnb0RvY1N0YXJ0IiwiQ3RybC1FbmQiOiJnb0RvY0VuZCIsIkN0cmwtRG93biI6ImdvRG9jRW5kIiwiQ3RybC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJDdHJsLVJpZ2h0IjoiZ29Hcm91cFJpZ2h0IiwiQWx0LUxlZnQiOiJnb0xpbmVTdGFydCIsIkFsdC1SaWdodCI6ImdvTGluZUVuZCIsIkN0cmwtQmFja3NwYWNlIjoiZGVsR3JvdXBCZWZvcmUiLCJDdHJsLURlbGV0ZSI6ImRlbEdyb3VwQWZ0ZXIiLCJDdHJsLVMiOiJzYXZlIiwiQ3RybC1GIjoiZmluZCIsIkN0cmwtRyI6ImZpbmROZXh0IiwiU2hpZnQtQ3RybC1HIjoiZmluZFByZXYiLCJTaGlmdC1DdHJsLUYiOiJyZXBsYWNlIiwiU2hpZnQtQ3RybC1SIjoicmVwbGFjZUFsbCIsIkN0cmwtWyI6ImluZGVudExlc3MiLCJDdHJsLV0iOiJpbmRlbnRNb3JlIixmYWxsdGhyb3VnaDoiYmFzaWMifSx2by5tYWNEZWZhdWx0PXsiQ21kLUEiOiJzZWxlY3RBbGwiLCJDbWQtRCI6ImRlbGV0ZUxpbmUiLCJDbWQtWiI6InVuZG8iLCJTaGlmdC1DbWQtWiI6InJlZG8iLCJDbWQtWSI6InJlZG8iLCJDbWQtVXAiOiJnb0RvY1N0YXJ0IiwiQ21kLUVuZCI6ImdvRG9jRW5kIiwiQ21kLURvd24iOiJnb0RvY0VuZCIsIkFsdC1MZWZ0IjoiZ29Hcm91cExlZnQiLCJBbHQtUmlnaHQiOiJnb0dyb3VwUmlnaHQiLCJDbWQtTGVmdCI6ImdvTGluZVN0YXJ0IiwiQ21kLVJpZ2h0IjoiZ29MaW5lRW5kIiwiQWx0LUJhY2tzcGFjZSI6ImRlbEdyb3VwQmVmb3JlIiwiQ3RybC1BbHQtQmFja3NwYWNlIjoiZGVsR3JvdXBBZnRlciIsIkFsdC1EZWxldGUiOiJkZWxHcm91cEFmdGVyIiwiQ21kLVMiOiJzYXZlIiwiQ21kLUYiOiJmaW5kIiwiQ21kLUciOiJmaW5kTmV4dCIsIlNoaWZ0LUNtZC1HIjoiZmluZFByZXYiLCJDbWQtQWx0LUYiOiJyZXBsYWNlIiwiU2hpZnQtQ21kLUFsdC1GIjoicmVwbGFjZUFsbCIsIkNtZC1bIjoiaW5kZW50TGVzcyIsIkNtZC1dIjoiaW5kZW50TW9yZSIsIkNtZC1CYWNrc3BhY2UiOiJkZWxMaW5lTGVmdCIsZmFsbHRocm91Z2g6WyJiYXNpYyIsImVtYWNzeSJdfSx2b1siZGVmYXVsdCJdPUtpP3ZvLm1hY0RlZmF1bHQ6dm8ucGNEZWZhdWx0LHZvLmVtYWNzeT17IkN0cmwtRiI6ImdvQ2hhclJpZ2h0IiwiQ3RybC1CIjoiZ29DaGFyTGVmdCIsIkN0cmwtUCI6ImdvTGluZVVwIiwiQ3RybC1OIjoiZ29MaW5lRG93biIsIkFsdC1GIjoiZ29Xb3JkUmlnaHQiLCJBbHQtQiI6ImdvV29yZExlZnQiLCJDdHJsLUEiOiJnb0xpbmVTdGFydCIsIkN0cmwtRSI6ImdvTGluZUVuZCIsIkN0cmwtViI6ImdvUGFnZURvd24iLCJTaGlmdC1DdHJsLVYiOiJnb1BhZ2VVcCIsIkN0cmwtRCI6ImRlbENoYXJBZnRlciIsIkN0cmwtSCI6ImRlbENoYXJCZWZvcmUiLCJBbHQtRCI6ImRlbFdvcmRBZnRlciIsIkFsdC1CYWNrc3BhY2UiOiJkZWxXb3JkQmVmb3JlIiwiQ3RybC1LIjoia2lsbExpbmUiLCJDdHJsLVQiOiJ0cmFuc3Bvc2VDaGFycyJ9LHQubG9va3VwS2V5PXdyLHQuaXNNb2RpZmllcktleT1Mcix0LmtleU5hbWU9a3IsdC5mcm9tVGV4dEFyZWE9ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7ZS52YWx1ZT11LmdldFZhbHVlKCl9aWYocnx8KHI9e30pLHIudmFsdWU9ZS52YWx1ZSwhci50YWJpbmRleCYmZS50YWJpbmRleCYmKHIudGFiaW5kZXg9ZS50YWJpbmRleCksIXIucGxhY2Vob2xkZXImJmUucGxhY2Vob2xkZXImJihyLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIpLG51bGw9PXIuYXV0b2ZvY3VzKXt2YXIgaT1kb2N1bWVudC5ib2R5O3RyeXtpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9Y2F0Y2gobyl7fXIuYXV0b2ZvY3VzPWk9PWV8fG51bGwhPWUuZ2V0QXR0cmlidXRlKCJhdXRvZm9jdXMiKSYmaT09ZG9jdW1lbnQuYm9keX1pZihlLmZvcm0mJihHbihlLmZvcm0sInN1Ym1pdCIsbiksIXIubGVhdmVTdWJtaXRNZXRob2RBbG9uZSkpe3ZhciBsPWUuZm9ybSxzPWwuc3VibWl0O3RyeXt2YXIgYT1sLnN1Ym1pdD1mdW5jdGlvbigpe24oKSxsLnN1Ym1pdD1zLGwuc3VibWl0KCksbC5zdWJtaXQ9YX19Y2F0Y2gobyl7fX1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciB1PXQoZnVuY3Rpb24odCl7ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGUubmV4dFNpYmxpbmcpfSxyKTtyZXR1cm4gdS5zYXZlPW4sdS5nZXRUZXh0QXJlYT1mdW5jdGlvbigpe3JldHVybiBlfSx1LnRvVGV4dEFyZWE9ZnVuY3Rpb24oKXtuKCksZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUuZ2V0V3JhcHBlckVsZW1lbnQoKSksZS5zdHlsZS5kaXNwbGF5PSIiLGUuZm9ybSYmKFZuKGUuZm9ybSwic3VibWl0IixuKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JtLnN1Ym1pdCYmKGUuZm9ybS5zdWJtaXQ9cykpfSx1fSxTci5wcm90b3R5cGU9e2VvbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcz49dGhpcy5zdHJpbmcubGVuZ3RofSxzb2w6ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy5wb3N9LHBlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKXx8dm9pZCAwfSxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPHRoaXMuc3RyaW5nLmxlbmd0aD90aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyk6dm9pZCAwfSxlYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTtpZigic3RyaW5nIj09dHlwZW9mIHQpdmFyIHI9ZT09dDtlbHNlIHZhciByPWUmJih0LnRlc3Q/dC50ZXN0KGUpOnQoZSkpO3JldHVybiByPygrK3RoaXMucG9zLGUpOnZvaWQgMH0sZWF0V2hpbGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucG9zO3RoaXMuZWF0KHQpOyk7cmV0dXJuIHRoaXMucG9zPmV9LGVhdFNwYWNlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucG9zOy9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpOykrK3RoaXMucG9zO3JldHVybiB0aGlzLnBvcz50fSxza2lwVG9FbmQ6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0cmluZy5sZW5ndGh9LHNraXBUbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN0cmluZy5pbmRleE9mKHQsdGhpcy5wb3MpO3JldHVybiBlPi0xPyh0aGlzLnBvcz1lLCEwKTp2b2lkIDB9LGJhY2tVcDpmdW5jdGlvbih0KXt0aGlzLnBvcy09dH0sY29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFzdENvbHVtblBvczx0aGlzLnN0YXJ0JiYodGhpcy5sYXN0Q29sdW1uVmFsdWU9Wm4odGhpcy5zdHJpbmcsdGhpcy5zdGFydCx0aGlzLnRhYlNpemUsdGhpcy5sYXN0Q29sdW1uUG9zLHRoaXMubGFzdENvbHVtblZhbHVlKSx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5zdGFydCksdGhpcy5sYXN0Q29sdW1uVmFsdWV9LGluZGVudGF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFpuKHRoaXMuc3RyaW5nLG51bGwsdGhpcy50YWJTaXplKX0sbWF0Y2g6ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIG49dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHQpO3JldHVybiBuJiZuLmluZGV4PjA/bnVsbDoobiYmZSE9PSExJiYodGhpcy5wb3MrPW5bMF0ubGVuZ3RoKSxuKX12YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gcj90LnRvTG93ZXJDYXNlKCk6dH0sbz10aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsdC5sZW5ndGgpO3JldHVybiBpKG8pPT1pKHQpPyhlIT09ITEmJih0aGlzLnBvcys9dC5sZW5ndGgpLCEwKTp2b2lkIDB9LGN1cnJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCx0aGlzLnBvcyl9fSx0LlN0cmluZ1N0cmVhbT1Tcix0LlRleHRNYXJrZXI9TXIsam4oTXIpLE1yLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2lmKCF0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKXt2YXIgdD10aGlzLmRvYy5jbSxlPXQmJiF0LmN1ck9wO2lmKGUmJmllKHQpLFluKHRoaXMsImNsZWFyIikpe3ZhciByPXRoaXMuZmluZCgpO3ImJlVuKHRoaXMsImNsZWFyIixyLmZyb20sci50byl9Zm9yKHZhciBuPW51bGwsaT1udWxsLG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGw9dGhpcy5saW5lc1tvXSxzPU5yKGwubWFya2VkU3BhbnMsdGhpcyk7bnVsbCE9cy50byYmKGk9Ym4obCkpLGwubWFya2VkU3BhbnM9RHIobC5tYXJrZWRTcGFucyxzKSxudWxsIT1zLmZyb20/bj1ibihsKTp0aGlzLmNvbGxhcHNlZCYmIVZyKHRoaXMuZG9jLGwpJiZ0JiZ5bihsLHJlKHQuZGlzcGxheSkpfWlmKHQmJnRoaXMuY29sbGFwc2VkJiYhdC5vcHRpb25zLmxpbmVXcmFwcGluZylmb3IodmFyIG89MDtvPHRoaXMubGluZXMubGVuZ3RoOysrbyl7dmFyIGE9R3IodC5kb2MsdGhpcy5saW5lc1tvXSksdT1jKHQuZG9jLGEpO3U+dC5kaXNwbGF5Lm1heExpbmVMZW5ndGgmJih0LmRpc3BsYXkubWF4TGluZT1hLHQuZGlzcGxheS5tYXhMaW5lTGVuZ3RoPXUsdC5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkPSEwKX1udWxsIT1uJiZ0JiZ1ZSh0LG4saSsxKSx0aGlzLmxpbmVzLmxlbmd0aD0wLHRoaXMuZXhwbGljaXRseUNsZWFyZWQ9ITAsdGhpcy5hdG9taWMmJnRoaXMuZG9jLmNhbnRFZGl0JiYodGhpcy5kb2MuY2FudEVkaXQ9ITEsdCYmaXIodCkpLGUmJm9lKHQpfX0sTXIucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyPTA7cjx0aGlzLmxpbmVzLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMubGluZXNbcl0saT1OcihuLm1hcmtlZFNwYW5zLHRoaXMpO2lmKG51bGwhPWkuZnJvbXx8bnVsbCE9aS50byl7dmFyIG89Ym4obik7bnVsbCE9aS5mcm9tJiYodD1ZZShvLGkuZnJvbSkpLG51bGwhPWkudG8mJihlPVllKG8saS50bykpfX1yZXR1cm4iYm9va21hcmsiPT10aGlzLnR5cGU/dDp0JiZ7ZnJvbTp0LHRvOmV9fSxNci5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZmluZCgpLGU9dGhpcy5kb2MuY207aWYodCYmZSl7ImJvb2ttYXJrIiE9dGhpcy50eXBlJiYodD10LmZyb20pO3ZhciByPWduKHRoaXMuZG9jLHQubGluZSk7aWYoRyhlLHIpLHQubGluZT49ZS5kaXNwbGF5LnNob3dpbmdGcm9tJiZ0LmxpbmU8ZS5kaXNwbGF5LnNob3dpbmdUbyl7Zm9yKHZhciBuPWUuZGlzcGxheS5saW5lRGl2LmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpaWYobi5saW5lT2JqPT1yKXtuLm9mZnNldEhlaWdodCE9ci5oZWlnaHQmJnluKHIsbi5vZmZzZXRIZWlnaHQpOwpicmVha31hZShlLGZ1bmN0aW9uKCl7ZS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkPWUuY3VyT3AuZm9yY2VVcGRhdGU9ZS5jdXJPcC51cGRhdGVNYXhMaW5lPSEwfSl9fX0sTXIucHJvdG90eXBlLmF0dGFjaExpbmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7ZS5tYXliZUhpZGRlbk1hcmtlcnMmJi0xIT10aShlLm1heWJlSGlkZGVuTWFya2Vycyx0aGlzKXx8KGUubWF5YmVVbmhpZGRlbk1hcmtlcnN8fChlLm1heWJlVW5oaWRkZW5NYXJrZXJzPVtdKSkucHVzaCh0aGlzKX10aGlzLmxpbmVzLnB1c2godCl9LE1yLnByb3RvdHlwZS5kZXRhY2hMaW5lPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGluZXMuc3BsaWNlKHRpKHRoaXMubGluZXMsdCksMSksIXRoaXMubGluZXMubGVuZ3RoJiZ0aGlzLmRvYy5jbSl7dmFyIGU9dGhpcy5kb2MuY20uY3VyT3A7KGUubWF5YmVIaWRkZW5NYXJrZXJzfHwoZS5tYXliZUhpZGRlbk1hcmtlcnM9W10pKS5wdXNoKHRoaXMpfX0sdC5TaGFyZWRUZXh0TWFya2VyPUFyLGpuKEFyKSxBci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtpZighdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCl7dGhpcy5leHBsaWNpdGx5Q2xlYXJlZD0hMDtmb3IodmFyIHQ9MDt0PHRoaXMubWFya2Vycy5sZW5ndGg7Kyt0KXRoaXMubWFya2Vyc1t0XS5jbGVhcigpO1VuKHRoaXMsImNsZWFyIil9fSxBci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaW1hcnkuZmluZCgpfTt2YXIgeW89dC5MaW5lV2lkZ2V0PWZ1bmN0aW9uKHQsZSxyKXtpZihyKWZvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0aGlzW25dPXJbbl0pO3RoaXMuY209dCx0aGlzLm5vZGU9ZX07am4oeW8pLHlvLnByb3RvdHlwZS5jbGVhcj1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMubGluZS53aWRnZXRzLGU9Ym4odGhpcy5saW5lKTtpZihudWxsIT1lJiZ0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdPT10aGlzJiZ0LnNwbGljZShyLS0sMSk7dC5sZW5ndGh8fCh0aGlzLmxpbmUud2lkZ2V0cz1udWxsKTt2YXIgbj1Dbih0aGlzLmNtLHRoaXMubGluZSk8dGhpcy5jbS5kb2Muc2Nyb2xsVG9wO3luKHRoaXMubGluZSxNYXRoLm1heCgwLHRoaXMubGluZS5oZWlnaHQtWXIodGhpcykpKSxuJiZmcih0aGlzLmNtLDAsLXRoaXMuaGVpZ2h0KSx1ZSh0aGlzLmNtLGUsZSsxKX19KSx5by5wcm90b3R5cGUuY2hhbmdlZD1fcihmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVpZ2h0O3RoaXMuaGVpZ2h0PW51bGw7dmFyIGU9WXIodGhpcyktdDtpZihlKXt5bih0aGlzLmxpbmUsdGhpcy5saW5lLmhlaWdodCtlKTt2YXIgcj1ibih0aGlzLmxpbmUpO3VlKHRoaXMuY20scixyKzEpfX0pO3ZhciBibz10LkxpbmU9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LFhyKHRoaXMsZSksdGhpcy5oZWlnaHQ9cj9yKHRoaXMpOjF9O2puKGJvKSxiby5wcm90b3R5cGUubGluZU5vPWZ1bmN0aW9uKCl7cmV0dXJuIGJuKHRoaXMpfTt2YXIgeG89e307Zm4ucHJvdG90eXBlPXtjaHVua1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saW5lcy5sZW5ndGh9LHJlbW92ZUlubmVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQsbj10K2U7bj5yOysrcil7dmFyIGk9dGhpcy5saW5lc1tyXTt0aGlzLmhlaWdodC09aS5oZWlnaHQsWnIoaSksVW4oaSwiZGVsZXRlIil9dGhpcy5saW5lcy5zcGxpY2UodCxlKX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7dC5zcGxpY2UuYXBwbHkodCxbdC5sZW5ndGgsMF0uY29uY2F0KHRoaXMubGluZXMpKX0saW5zZXJ0SW5uZXI6ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGVpZ2h0Kz1yLHRoaXMubGluZXM9dGhpcy5saW5lcy5zbGljZSgwLHQpLmNvbmNhdChlKS5jb25jYXQodGhpcy5saW5lcy5zbGljZSh0KSk7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtpPm47KytuKWVbbl0ucGFyZW50PXRoaXN9LGl0ZXJOOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dCtlO24+dDsrK3QpaWYocih0aGlzLmxpbmVzW3RdKSlyZXR1cm4hMH19LGhuLnByb3RvdHlwZT17Y2h1bmtTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0scmVtb3ZlSW5uZXI6ZnVuY3Rpb24odCxlKXt0aGlzLnNpemUtPWU7Zm9yKHZhciByPTA7cjx0aGlzLmNoaWxkcmVuLmxlbmd0aDsrK3Ipe3ZhciBuPXRoaXMuY2hpbGRyZW5bcl0saT1uLmNodW5rU2l6ZSgpO2lmKGk+dCl7dmFyIG89TWF0aC5taW4oZSxpLXQpLGw9bi5oZWlnaHQ7aWYobi5yZW1vdmVJbm5lcih0LG8pLHRoaXMuaGVpZ2h0LT1sLW4uaGVpZ2h0LGk9PW8mJih0aGlzLmNoaWxkcmVuLnNwbGljZShyLS0sMSksbi5wYXJlbnQ9bnVsbCksMD09KGUtPW8pKWJyZWFrO3Q9MH1lbHNlIHQtPWl9aWYodGhpcy5zaXplLWU8MjUpe3ZhciBzPVtdO3RoaXMuY29sbGFwc2UocyksdGhpcy5jaGlsZHJlbj1bbmV3IGZuKHMpXSx0aGlzLmNoaWxkcmVuWzBdLnBhcmVudD10aGlzfX0sY29sbGFwc2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmNoaWxkcmVuLmxlbmd0aDtyPmU7KytlKXRoaXMuY2hpbGRyZW5bZV0uY29sbGFwc2UodCl9LGluc2VydElubmVyOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpemUrPWUubGVuZ3RoLHRoaXMuaGVpZ2h0Kz1yO2Zvcih2YXIgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aT5uOysrbil7dmFyIG89dGhpcy5jaGlsZHJlbltuXSxsPW8uY2h1bmtTaXplKCk7aWYobD49dCl7aWYoby5pbnNlcnRJbm5lcih0LGUsciksby5saW5lcyYmby5saW5lcy5sZW5ndGg+NTApe2Zvcig7by5saW5lcy5sZW5ndGg+NTA7KXt2YXIgcz1vLmxpbmVzLnNwbGljZShvLmxpbmVzLmxlbmd0aC0yNSwyNSksYT1uZXcgZm4ocyk7by5oZWlnaHQtPWEuaGVpZ2h0LHRoaXMuY2hpbGRyZW4uc3BsaWNlKG4rMSwwLGEpLGEucGFyZW50PXRoaXN9dGhpcy5tYXliZVNwaWxsKCl9YnJlYWt9dC09bH19LG1heWJlU3BpbGw6ZnVuY3Rpb24oKXtpZighKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPD0xMCkpe3ZhciB0PXRoaXM7ZG97dmFyIGU9dC5jaGlsZHJlbi5zcGxpY2UodC5jaGlsZHJlbi5sZW5ndGgtNSw1KSxyPW5ldyBobihlKTtpZih0LnBhcmVudCl7dC5zaXplLT1yLnNpemUsdC5oZWlnaHQtPXIuaGVpZ2h0O3ZhciBuPXRpKHQucGFyZW50LmNoaWxkcmVuLHQpO3QucGFyZW50LmNoaWxkcmVuLnNwbGljZShuKzEsMCxyKX1lbHNle3ZhciBpPW5ldyBobih0LmNoaWxkcmVuKTtpLnBhcmVudD10LHQuY2hpbGRyZW49W2kscl0sdD1pfXIucGFyZW50PXQucGFyZW50fXdoaWxlKHQuY2hpbGRyZW4ubGVuZ3RoPjEwKTt0LnBhcmVudC5tYXliZVNwaWxsKCl9fSxpdGVyTjpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtpPm47KytuKXt2YXIgbz10aGlzLmNoaWxkcmVuW25dLGw9by5jaHVua1NpemUoKTtpZihsPnQpe3ZhciBzPU1hdGgubWluKGUsbC10KTtpZihvLml0ZXJOKHQscyxyKSlyZXR1cm4hMDtpZigwPT0oZS09cykpYnJlYWs7dD0wfWVsc2UgdC09bH19fTt2YXIgQ289MCx3bz10LkRvYz1mdW5jdGlvbih0LGUscil7aWYoISh0aGlzIGluc3RhbmNlb2Ygd28pKXJldHVybiBuZXcgd28odCxlLHIpO251bGw9PXImJihyPTApLGhuLmNhbGwodGhpcyxbbmV3IGZuKFtuZXcgYm8oIiIsbnVsbCldKV0pLHRoaXMuZmlyc3Q9cix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbExlZnQ9MCx0aGlzLmNhbnRFZGl0PSExLHRoaXMuaGlzdG9yeT1MbigpLHRoaXMuY2xlYW5HZW5lcmF0aW9uPTEsdGhpcy5mcm9udGllcj1yO3ZhciBuPVllKHIsMCk7dGhpcy5zZWw9e2Zyb206bix0bzpuLGhlYWQ6bixhbmNob3I6bixzaGlmdDohMSxleHRlbmQ6ITEsZ29hbENvbHVtbjpudWxsfSx0aGlzLmlkPSsrQ28sdGhpcy5tb2RlT3B0aW9uPWUsInN0cmluZyI9PXR5cGVvZiB0JiYodD16byh0KSksY24odGhpcyx7ZnJvbTpuLHRvOm4sdGV4dDp0fSxudWxsLHtoZWFkOm4sYW5jaG9yOm59KX07d28ucHJvdG90eXBlPWVpKGhuLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6d28saXRlcjpmdW5jdGlvbih0LGUscil7cj90aGlzLml0ZXJOKHQtdGhpcy5maXJzdCxlLXQscik6dGhpcy5pdGVyTih0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplLHQpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT1lLmxlbmd0aDtpPm47KytuKXIrPWVbbl0uaGVpZ2h0O3RoaXMuaW5zZXJ0SW5uZXIodC10aGlzLmZpcnN0LGUscil9LHJlbW92ZTpmdW5jdGlvbih0LGUpe3RoaXMucmVtb3ZlSW5uZXIodC10aGlzLmZpcnN0LGUpfSxnZXRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT12bih0aGlzLHRoaXMuZmlyc3QsdGhpcy5maXJzdCt0aGlzLnNpemUpO3JldHVybiB0PT09ITE/ZTplLmpvaW4odHx8IlxuIil9LHNldFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVllKHRoaXMuZmlyc3QsMCkscj10aGlzLmZpcnN0K3RoaXMuc2l6ZS0xO0JlKHRoaXMse2Zyb206ZSx0bzpZZShyLGduKHRoaXMscikudGV4dC5sZW5ndGgpLHRleHQ6em8odCksb3JpZ2luOiJzZXRWYWx1ZSJ9LHtoZWFkOmUsYW5jaG9yOmV9LCEwKX0scmVwbGFjZVJhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe2U9UWUodGhpcyxlKSxyPXI/UWUodGhpcyxyKTplLF9lKHRoaXMsdCxlLHIsbil9LGdldFJhbmdlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1tbih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSk7cmV0dXJuIHI9PT0hMT9uOm4uam9pbihyfHwiXG4iKX0sZ2V0TGluZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldExpbmVIYW5kbGUodCk7cmV0dXJuIGUmJmUudGV4dH0sc2V0TGluZTpmdW5jdGlvbih0LGUpe3RyKHRoaXMsdCkmJl9lKHRoaXMsZSxZZSh0LDApLFFlKHRoaXMsWWUodCkpKX0scmVtb3ZlTGluZTpmdW5jdGlvbih0KXt0P19lKHRoaXMsIiIsUWUodGhpcyxZZSh0LTEpKSxRZSh0aGlzLFllKHQpKSk6X2UodGhpcywiIixZZSgwLDApLFFlKHRoaXMsWWUoMSwwKSkpfSxnZXRMaW5lSGFuZGxlOmZ1bmN0aW9uKHQpe3JldHVybiB0cih0aGlzLHQpP2duKHRoaXMsdCk6dm9pZCAwfSxnZXRMaW5lTnVtYmVyOmZ1bmN0aW9uKHQpe3JldHVybiBibih0KX0sZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKHQ9Z24odGhpcyx0KSksR3IodGhpcyx0KX0sbGluZUNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZX0sZmlyc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3R9LGxhc3RMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3QrdGhpcy5zaXplLTF9LGNsaXBQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIFFlKHRoaXMsdCl9LGdldEN1cnNvcjpmdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuc2VsO3JldHVybiBlPW51bGw9PXR8fCJoZWFkIj09dD9yLmhlYWQ6ImFuY2hvciI9PXQ/ci5hbmNob3I6ImVuZCI9PXR8fHQ9PT0hMT9yLnRvOnIuZnJvbSxaZShlKX0sc29tZXRoaW5nU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hamUodGhpcy5zZWwuaGVhZCx0aGlzLnNlbC5hbmNob3IpfSxzZXRDdXJzb3I6c2UoZnVuY3Rpb24odCxlLHIpe3ZhciBuPVFlKHRoaXMsIm51bWJlciI9PXR5cGVvZiB0P1llKHQsZXx8MCk6dCk7cj9lcih0aGlzLG4pOm5yKHRoaXMsbixuKX0pLHNldFNlbGVjdGlvbjpzZShmdW5jdGlvbih0LGUscil7bnIodGhpcyxRZSh0aGlzLHQpLFFlKHRoaXMsZXx8dCkscil9KSxleHRlbmRTZWxlY3Rpb246c2UoZnVuY3Rpb24odCxlLHIpe2VyKHRoaXMsUWUodGhpcyx0KSxlJiZRZSh0aGlzLGUpLHIpfSksZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFJhbmdlKHRoaXMuc2VsLmZyb20sdGhpcy5zZWwudG8sdCl9LHJlcGxhY2VTZWxlY3Rpb246ZnVuY3Rpb24odCxlLHIpe0JlKHRoaXMse2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byx0ZXh0OnpvKHQpLG9yaWdpbjpyfSxlfHwiYXJvdW5kIil9LHVuZG86c2UoZnVuY3Rpb24oKXtWZSh0aGlzLCJ1bmRvIil9KSxyZWRvOnNlKGZ1bmN0aW9uKCl7VmUodGhpcywicmVkbyIpfSksc2V0RXh0ZW5kaW5nOmZ1bmN0aW9uKHQpe3RoaXMuc2VsLmV4dGVuZD10fSxoaXN0b3J5U2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGlzdG9yeTtyZXR1cm57dW5kbzp0LmRvbmUubGVuZ3RoLHJlZG86dC51bmRvbmUubGVuZ3RofX0sY2xlYXJIaXN0b3J5OmZ1bmN0aW9uKCl7dGhpcy5oaXN0b3J5PUxuKHRoaXMuaGlzdG9yeS5tYXhHZW5lcmF0aW9uKX0sbWFya0NsZWFuOmZ1bmN0aW9uKCl7dGhpcy5jbGVhbkdlbmVyYXRpb249dGhpcy5jaGFuZ2VHZW5lcmF0aW9uKCl9LGNoYW5nZUdlbmVyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaXN0b3J5Lmxhc3RPcD10aGlzLmhpc3RvcnkubGFzdE9yaWdpbj1udWxsLHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9ufSxpc0NsZWFuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvbj09KHR8fHRoaXMuY2xlYW5HZW5lcmF0aW9uKX0sZ2V0SGlzdG9yeTpmdW5jdGlvbigpe3JldHVybntkb25lOkhuKHRoaXMuaGlzdG9yeS5kb25lKSx1bmRvbmU6SG4odGhpcy5oaXN0b3J5LnVuZG9uZSl9fSxzZXRIaXN0b3J5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGlzdG9yeT1Mbih0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7ZS5kb25lPXQuZG9uZS5zbGljZSgwKSxlLnVuZG9uZT10LnVuZG9uZS5zbGljZSgwKX0sbWFya1RleHQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUcih0aGlzLFFlKHRoaXMsdCksUWUodGhpcyxlKSxyLCJyYW5nZSIpfSxzZXRCb29rbWFyazpmdW5jdGlvbih0LGUpe3ZhciByPXtyZXBsYWNlZFdpdGg6ZSYmKG51bGw9PWUubm9kZVR5cGU/ZS53aWRnZXQ6ZSksaW5zZXJ0TGVmdDplJiZlLmluc2VydExlZnR9O3JldHVybiB0PVFlKHRoaXMsdCksVHIodGhpcyx0LHQsciwiYm9va21hcmsiKX0sZmluZE1hcmtzQXQ6ZnVuY3Rpb24odCl7dD1RZSh0aGlzLHQpO3ZhciBlPVtdLHI9Z24odGhpcyx0LmxpbmUpLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pe3ZhciBpPXJbbl07KG51bGw9PWkuZnJvbXx8aS5mcm9tPD10LmNoKSYmKG51bGw9PWkudG98fGkudG8+PXQuY2gpJiZlLnB1c2goaS5tYXJrZXIucGFyZW50fHxpLm1hcmtlcil9cmV0dXJuIGV9LGdldEFsbE1hcmtzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuaXRlcihmdW5jdGlvbihlKXt2YXIgcj1lLm1hcmtlZFNwYW5zO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24pbnVsbCE9cltuXS5mcm9tJiZ0LnB1c2gocltuXS5tYXJrZXIpfSksdH0scG9zRnJvbUluZGV4OmZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5pdGVyKGZ1bmN0aW9uKG4pe3ZhciBpPW4udGV4dC5sZW5ndGgrMTtyZXR1cm4gaT50PyhlPXQsITApOih0LT1pLCsrcix2b2lkIDApfSksUWUodGhpcyxZZShyLGUpKX0saW5kZXhGcm9tUG9zOmZ1bmN0aW9uKHQpe3Q9UWUodGhpcyx0KTt2YXIgZT10LmNoO3JldHVybiB0LmxpbmU8dGhpcy5maXJzdHx8dC5jaDwwPzA6KHRoaXMuaXRlcih0aGlzLmZpcnN0LHQubGluZSxmdW5jdGlvbih0KXtlKz10LnRleHQubGVuZ3RoKzF9KSxlKX0sY29weTpmdW5jdGlvbih0KXt2YXIgZT1uZXcgd28odm4odGhpcyx0aGlzLmZpcnN0LHRoaXMuZmlyc3QrdGhpcy5zaXplKSx0aGlzLm1vZGVPcHRpb24sdGhpcy5maXJzdCk7cmV0dXJuIGUuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLGUuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbExlZnQsZS5zZWw9e2Zyb206dGhpcy5zZWwuZnJvbSx0bzp0aGlzLnNlbC50byxoZWFkOnRoaXMuc2VsLmhlYWQsYW5jaG9yOnRoaXMuc2VsLmFuY2hvcixzaGlmdDp0aGlzLnNlbC5zaGlmdCxleHRlbmQ6ITEsZ29hbENvbHVtbjp0aGlzLnNlbC5nb2FsQ29sdW1ufSx0JiYoZS5oaXN0b3J5LnVuZG9EZXB0aD10aGlzLmhpc3RvcnkudW5kb0RlcHRoLGUuc2V0SGlzdG9yeSh0aGlzLmdldEhpc3RvcnkoKSkpLGV9LGxpbmtlZERvYzpmdW5jdGlvbih0KXt0fHwodD17fSk7dmFyIGU9dGhpcy5maXJzdCxyPXRoaXMuZmlyc3QrdGhpcy5zaXplO251bGwhPXQuZnJvbSYmdC5mcm9tPmUmJihlPXQuZnJvbSksbnVsbCE9dC50byYmdC50bzxyJiYocj10LnRvKTt2YXIgbj1uZXcgd28odm4odGhpcyxlLHIpLHQubW9kZXx8dGhpcy5tb2RlT3B0aW9uLGUpO3JldHVybiB0LnNoYXJlZEhpc3QmJihuLmhpc3Rvcnk9dGhpcy5oaXN0b3J5KSwodGhpcy5saW5rZWR8fCh0aGlzLmxpbmtlZD1bXSkpLnB1c2goe2RvYzpuLHNoYXJlZEhpc3Q6dC5zaGFyZWRIaXN0fSksbi5saW5rZWQ9W3tkb2M6dGhpcyxpc1BhcmVudDohMCxzaGFyZWRIaXN0OnQuc2hhcmVkSGlzdH1dLG59LHVubGlua0RvYzpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdCYmKGU9ZS5kb2MpLHRoaXMubGlua2VkKWZvcih2YXIgcj0wO3I8dGhpcy5saW5rZWQubGVuZ3RoOysrcil7dmFyIG49dGhpcy5saW5rZWRbcl07aWYobi5kb2M9PWUpe3RoaXMubGlua2VkLnNwbGljZShyLDEpLGUudW5saW5rRG9jKHRoaXMpO2JyZWFrfX1pZihlLmhpc3Rvcnk9PXRoaXMuaGlzdG9yeSl7dmFyIGk9W2UuaWRdO2RuKGUsZnVuY3Rpb24odCl7aS5wdXNoKHQuaWQpfSwhMCksZS5oaXN0b3J5PUxuKCksZS5oaXN0b3J5LmRvbmU9SG4odGhpcy5oaXN0b3J5LmRvbmUsaSksZS5oaXN0b3J5LnVuZG9uZT1Ibih0aGlzLmhpc3RvcnkudW5kb25lLGkpfX0saXRlckxpbmtlZERvY3M6ZnVuY3Rpb24odCl7ZG4odGhpcyx0KX0sZ2V0TW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGdldEVkaXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNtfX0pLHdvLnByb3RvdHlwZS5lYWNoTGluZT13by5wcm90b3R5cGUuaXRlcjt2YXIgTG89Iml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciIuc3BsaXQoIiAiKTtmb3IodmFyIGtvIGluIHdvLnByb3RvdHlwZSl3by5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoa28pJiZ0aShMbyxrbyk8MCYmKHQucHJvdG90eXBlW2tvXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLmRvYyxhcmd1bWVudHMpfX0od28ucHJvdG90eXBlW2tvXSkpO2puKHdvKSx0LmVfc3RvcD1Qbix0LmVfcHJldmVudERlZmF1bHQ9em4sdC5lX3N0b3BQcm9wYWdhdGlvbj1Jbjt2YXIgU28sTW89MDt0Lm9uPUduLHQub2ZmPVZuLHQuc2lnbmFsPUtuO3ZhciBUbz0zMCxBbz10LlBhc3M9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNvZGVNaXJyb3IuUGFzcyJ9fTskbi5wcm90b3R5cGU9e3NldDpmdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0aGlzLmlkKSx0aGlzLmlkPXNldFRpbWVvdXQoZSx0KX19LHQuY291bnRDb2x1bW49Wm47dmFyIEhvPVsiIl0sTm89L1tcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vLERvPS9bXHUwMzAwLVx1MDM2Rlx1MDQ4My1cdTA0ODdcdTA0ODgtXHUwNDg5XHUwNTkxLVx1MDVCRFx1MDVCRlx1MDVDMS1cdTA1QzJcdTA1QzQtXHUwNUM1XHUwNUM3XHUwNjEwLVx1MDYxQVx1MDY0Qi1cdTA2NUZcdTA2NzBcdTA2RDYtXHUwNkRDXHUwNkRGLVx1MDZFNFx1MDZFNy1cdTA2RThcdTA2RUEtXHUwNkVEXHVBNjZGXHUxREMw4oCTXHUxREZGXHUyMEQw4oCTXHUyMEZGXHVBNjcwLVx1QTY3Mlx1QTY3NC1cdUE2N0RcdUE2OUZcdWRjMDAtXHVkZmZmXHVGRTIw4oCTXHVGRTJGXS87dC5yZXBsYWNlR2V0UmVjdD1mdW5jdGlvbih0KXtmaT10fTt2YXIgV289ZnVuY3Rpb24oKXtpZihOaSlyZXR1cm4hMTt2YXIgdD1zaSgiZGl2Iik7cmV0dXJuImRyYWdnYWJsZSJpbiB0fHwiZHJhZ0Ryb3AiaW4gdH0oKTtUaT9oaT1mdW5jdGlvbih0LGUpe3JldHVybiAzNj09dC5jaGFyQ29kZUF0KGUtMSkmJjM5PT10LmNoYXJDb2RlQXQoZSl9OklpJiYhL1ZlcnNpb25cLyhbNi05XXxcZFxkKVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpP2hpPWZ1bmN0aW9uKHQsZSl7cmV0dXJuL1wtW14gXC0/XXxcP1teICFcJ1wiXCksLlwtXC86O1w/XF1cfV0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9OldpJiYvQ2hyb21lXC8oPzoyOXxbMy05XVxkfFxkXGRcZClcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KT9oaT1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2hhckNvZGVBdChlLTEpO3JldHVybiByPj04MjA4JiY4MjEyPj1yfTpXaSYmKGhpPWZ1bmN0aW9uKHQsZSl7aWYoZT4xJiY0NT09dC5jaGFyQ29kZUF0KGUtMSkpe2lmKC9cdy8udGVzdCh0LmNoYXJBdChlLTIpKSYmL1teXC0/XC5dLy50ZXN0KHQuY2hhckF0KGUpKSlyZXR1cm4hMDtpZihlPjImJi9bXGRcLixdLy50ZXN0KHQuY2hhckF0KGUtMikpJiYvW1xkXC4sXS8udGVzdCh0LmNoYXJBdChlKSkpcmV0dXJuITF9cmV0dXJuL1t+ISMlJiopPSt9XF1cXHxcIlwuPiw6O11bKHtbPF18LVteXC0/XC5cdTIwMTAtXHUyMDFmXHUyMDI2XXxcP1tcd35gQCMkJVxeJiooXz0re1t8PjxdfOKApltcd35gQCMkJVxeJiooXz0re1s+PF0vLnRlc3QodC5zbGljZShlLTEsZSsxKSl9KTt2YXIgT28sRW8sem89MyE9IlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1bXSxuPXQubGVuZ3RoO24+PWU7KXt2YXIgaT10LmluZGV4T2YoIlxuIixlKTstMT09aSYmKGk9dC5sZW5ndGgpO3ZhciBvPXQuc2xpY2UoZSwiXHIiPT10LmNoYXJBdChpLTEpP2ktMTppKSxsPW8uaW5kZXhPZigiXHIiKTstMSE9bD8oci5wdXNoKG8uc2xpY2UoMCxsKSksZSs9bCsxKTooci5wdXNoKG8pLGU9aSsxKX1yZXR1cm4gcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoL1xyXG4/fFxuLyl9O3Quc3BsaXRMaW5lcz16bzt2YXIgSW89d2luZG93LmdldFNlbGVjdGlvbj9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuc2VsZWN0aW9uU3RhcnQhPXQuc2VsZWN0aW9uRW5kfWNhdGNoKGUpe3JldHVybiExfX06ZnVuY3Rpb24odCl7dHJ5e3ZhciBlPXQub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX1jYXRjaChyKXt9cmV0dXJuIGUmJmUucGFyZW50RWxlbWVudCgpPT10PzAhPWUuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsZSk6ITF9LEZvPWZ1bmN0aW9uKCl7dmFyIHQ9c2koImRpdiIpO3JldHVybiJvbmNvcHkiaW4gdD8hMDoodC5zZXRBdHRyaWJ1dGUoIm9uY29weSIsInJldHVybjsiKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5vbmNvcHkpfSgpLFBvPXszOiJFbnRlciIsODoiQmFja3NwYWNlIiw5OiJUYWIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ3RybCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2MiLDMyOiJTcGFjZSIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkxlZnQiLDM4OiJVcCIsMzk6IlJpZ2h0Iiw0MDoiRG93biIsNDQ6IlByaW50U2NybiIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsNTk6IjsiLDkxOiJNb2QiLDkyOiJNb2QiLDkzOiJNb2QiLDEwOToiLSIsMTA3OiI9IiwxMjc6IkRlbGV0ZSIsMTg2OiI7IiwxODc6Ij0iLDE4ODoiLCIsMTg5OiItIiwxOTA6Ii4iLDE5MToiLyIsMTkyOiJgIiwyMTk6IlsiLDIyMDoiXFwiLDIyMToiXSIsMjIyOiInIiw2MzI3NjoiUGFnZVVwIiw2MzI3NzoiUGFnZURvd24iLDYzMjc1OiJFbmQiLDYzMjczOiJIb21lIiw2MzIzNDoiTGVmdCIsNjMyMzI6IlVwIiw2MzIzNToiUmlnaHQiLDYzMjMzOiJEb3duIiw2MzMwMjoiSW5zZXJ0Iiw2MzI3MjoiRGVsZXRlIn07dC5rZXlOYW1lcz1QbyxmdW5jdGlvbigpe2Zvcih2YXIgdD0wOzEwPnQ7dCsrKVBvW3QrNDhdPVN0cmluZyh0KTtmb3IodmFyIHQ9NjU7OTA+PXQ7dCsrKVBvW3RdPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7Zm9yKHZhciB0PTE7MTI+PXQ7dCsrKVBvW3QrMTExXT1Qb1t0KzYzMjM1XT0iRiIrdH0oKTt2YXIgUm8sQm89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiAyNTU+PXQ/ZS5jaGFyQXQodCk6dD49MTQyNCYmMTUyND49dD8iUiI6dD49MTUzNiYmMTc5MT49dD9yLmNoYXJBdCh0LTE1MzYpOnQ+PTE3OTImJjIyMjA+PXQ/InIiOiJMIn12YXIgZT0iYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTCIscj0icnJycnJycnJycnJyLHJOTm1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1ycnJycnJybm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1ObW1tbXJycnJycnJycnJycnJycnJyciIsbj0vW1x1MDU5MC1cdTA1ZjRcdTA2MDAtXHUwNmZmXHUwNzAwLVx1MDhhY10vLGk9L1tzdHdOXS8sbz0vW0xScl0vLGw9L1tMYjFuXS8scz0vWzFuXS8sYT0iTCI7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFuLnRlc3QoZSkpcmV0dXJuITE7Zm9yKHZhciByLHU9ZS5sZW5ndGgsYz1bXSxmPTA7dT5mOysrZiljLnB1c2gocj10KGUuY2hhckNvZGVBdChmKSkpO2Zvcih2YXIgZj0wLGg9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyJtIj09cj9jW2ZdPWg6aD1yfWZvcih2YXIgZj0wLGQ9YTt1PmY7KytmKXt2YXIgcj1jW2ZdOyIxIj09ciYmInIiPT1kP2NbZl09Im4iOm8udGVzdChyKSYmKGQ9ciwiciI9PXImJihjW2ZdPSJSIikpfWZvcih2YXIgZj0xLGg9Y1swXTt1LTE+ZjsrK2Ype3ZhciByPWNbZl07IisiPT1yJiYiMSI9PWgmJiIxIj09Y1tmKzFdP2NbZl09IjEiOiIsIiE9cnx8aCE9Y1tmKzFdfHwiMSIhPWgmJiJuIiE9aHx8KGNbZl09aCksaD1yfWZvcih2YXIgZj0wO3U+ZjsrK2Ype3ZhciByPWNbZl07aWYoIiwiPT1yKWNbZl09Ik4iO2Vsc2UgaWYoIiUiPT1yKXtmb3IodmFyIHA9ZisxO3U+cCYmIiUiPT1jW3BdOysrcCk7Zm9yKHZhciBnPWYmJiIhIj09Y1tmLTFdfHx1LTE+cCYmIjEiPT1jW3BdPyIxIjoiTiIsbT1mO3A+bTsrK20pY1ttXT1nO2Y9cC0xfX1mb3IodmFyIGY9MCxkPWE7dT5mOysrZil7dmFyIHI9Y1tmXTsiTCI9PWQmJiIxIj09cj9jW2ZdPSJMIjpvLnRlc3QocikmJihkPXIpfWZvcih2YXIgZj0wO3U+ZjsrK2YpaWYoaS50ZXN0KGNbZl0pKXtmb3IodmFyIHA9ZisxO3U+cCYmaS50ZXN0KGNbcF0pOysrcCk7Zm9yKHZhciB2PSJMIj09KGY/Y1tmLTFdOmEpLHk9IkwiPT0odS0xPnA/Y1twXTphKSxnPXZ8fHk/IkwiOiJSIixtPWY7cD5tOysrbSljW21dPWc7Zj1wLTF9Zm9yKHZhciBiLHg9W10sZj0wO3U+ZjspaWYobC50ZXN0KGNbZl0pKXt2YXIgQz1mO2ZvcigrK2Y7dT5mJiZsLnRlc3QoY1tmXSk7KytmKTt4LnB1c2goe2Zyb206Qyx0bzpmLGxldmVsOjB9KX1lbHNle3ZhciB3PWYsTD14Lmxlbmd0aDtmb3IoKytmO3U+ZiYmIkwiIT1jW2ZdOysrZik7Zm9yKHZhciBtPXc7Zj5tOylpZihzLnRlc3QoY1ttXSkpe20+dyYmeC5zcGxpY2UoTCwwLHtmcm9tOncsdG86bSxsZXZlbDoxfSk7dmFyIGs9bTtmb3IoKyttO2Y+bSYmcy50ZXN0KGNbbV0pOysrbSk7eC5zcGxpY2UoTCwwLHtmcm9tOmssdG86bSxsZXZlbDoyfSksdz1tfWVsc2UrK207Zj53JiZ4LnNwbGljZShMLDAse2Zyb206dyx0bzpmLGxldmVsOjF9KX1yZXR1cm4gMT09eFswXS5sZXZlbCYmKGI9ZS5tYXRjaCgvXlxzKy8pKSYmKHhbMF0uZnJvbT1iWzBdLmxlbmd0aCx4LnVuc2hpZnQoe2Zyb206MCx0bzpiWzBdLmxlbmd0aCxsZXZlbDowfSkpLDE9PVFuKHgpLmxldmVsJiYoYj1lLm1hdGNoKC9ccyskLykpJiYoUW4oeCkudG8tPWJbMF0ubGVuZ3RoLHgucHVzaCh7ZnJvbTp1LWJbMF0ubGVuZ3RoLHRvOnUsbGV2ZWw6MH0pKSx4WzBdLmxldmVsIT1Rbih4KS5sZXZlbCYmeC5wdXNoKHtmcm9tOnUsdG86dSxsZXZlbDp4WzBdLmxldmVsfSkseH19KCk7cmV0dXJuIHQudmVyc2lvbj0iMy4yMC4wIix0fSgpO1BLBwjGXJGwv68BAL+vAQBQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAABzdGF0aWNcbGliXGhpZ2hsaWdodC5taW4uanN2YXIgaGxqcz1uZXcgZnVuY3Rpb24oKXtmdW5jdGlvbiBsKG8pe3JldHVybiBvLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvPC9nbSwiJmx0OyIpLnJlcGxhY2UoLz4vZ20sIiZndDsiKX1mdW5jdGlvbiBiKHApe2Zvcih2YXIgbz1wLmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpe2lmKG8ubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkNPREUiKXtyZXR1cm4gb31pZighKG8ubm9kZVR5cGU9PTMmJm8ubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe2JyZWFrfX19ZnVuY3Rpb24gaChwLG8pe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwocC5jaGlsZE5vZGVzLGZ1bmN0aW9uKHEpe2lmKHEubm9kZVR5cGU9PTMpe3JldHVybiBvP3Eubm9kZVZhbHVlLnJlcGxhY2UoL1xuL2csIiIpOnEubm9kZVZhbHVlfWlmKHEubm9kZU5hbWUudG9VcHBlckNhc2UoKT09IkJSIil7cmV0dXJuIlxuIn1yZXR1cm4gaChxLG8pfSkuam9pbigiIil9ZnVuY3Rpb24gYShxKXt2YXIgcD0ocS5jbGFzc05hbWUrIiAiKyhxLnBhcmVudE5vZGU/cS5wYXJlbnROb2RlLmNsYXNzTmFtZToiIikpLnNwbGl0KC9ccysvKTtwPXAubWFwKGZ1bmN0aW9uKHIpe3JldHVybiByLnJlcGxhY2UoL15sYW5ndWFnZS0vLCIiKX0pO2Zvcih2YXIgbz0wO288cC5sZW5ndGg7bysrKXtpZihlW3Bbb11dfHxwW29dPT0ibm8taGlnaGxpZ2h0Iil7cmV0dXJuIHBbb119fX1mdW5jdGlvbiBjKHEpe3ZhciBvPVtdOyhmdW5jdGlvbiBwKHIscyl7Zm9yKHZhciB0PXIuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZyl7aWYodC5ub2RlVHlwZT09Myl7cys9dC5ub2RlVmFsdWUubGVuZ3RofWVsc2V7aWYodC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT0iQlIiKXtzKz0xfWVsc2V7aWYodC5ub2RlVHlwZT09MSl7by5wdXNoKHtldmVudDoic3RhcnQiLG9mZnNldDpzLG5vZGU6dH0pO3M9cCh0LHMpO28ucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDpzLG5vZGU6dH0pfX19fXJldHVybiBzfSkocSwwKTtyZXR1cm4gb31mdW5jdGlvbiBqKHAscix2KXt2YXIgcT0wO3ZhciB5PSIiO3ZhciBzPVtdO2Z1bmN0aW9uIHUoKXtpZighcC5sZW5ndGh8fCFyLmxlbmd0aCl7cmV0dXJuIHAubGVuZ3RoP3A6cn1pZihwWzBdLm9mZnNldCE9clswXS5vZmZzZXQpe3JldHVybihwWzBdLm9mZnNldDxyWzBdLm9mZnNldCk/cDpyfXJldHVybiByWzBdLmV2ZW50PT0ic3RhcnQiP3A6cn1mdW5jdGlvbiB0KEEpe2Z1bmN0aW9uIHooQil7cmV0dXJuIiAiK0Iubm9kZU5hbWUrJz0iJytsKEIudmFsdWUpKyciJ315Kz0iPCIrQS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LnByb3RvdHlwZS5tYXAuY2FsbChBLmF0dHJpYnV0ZXMseikuam9pbigiIikrIj4ifWZ1bmN0aW9uIHgoeil7eSs9IjwvIit6Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkrIj4ifWZ1bmN0aW9uIG8oeil7KHouZXZlbnQ9PSJzdGFydCI/dDp4KSh6Lm5vZGUpfXdoaWxlKHAubGVuZ3RofHxyLmxlbmd0aCl7dmFyIHc9dSgpO3krPWwodi5zdWJzdHIocSx3WzBdLm9mZnNldC1xKSk7cT13WzBdLm9mZnNldDtpZih3PT1wKXtzLnJldmVyc2UoKS5mb3JFYWNoKHgpO2Rve28ody5zcGxpY2UoMCwxKVswXSk7dz11KCl9d2hpbGUodz09cCYmdy5sZW5ndGgmJndbMF0ub2Zmc2V0PT1xKTtzLnJldmVyc2UoKS5mb3JFYWNoKHQpfWVsc2V7aWYod1swXS5ldmVudD09InN0YXJ0Iil7cy5wdXNoKHdbMF0ubm9kZSl9ZWxzZXtzLnBvcCgpfW8ody5zcGxpY2UoMCwxKVswXSl9fXJldHVybiB5K2wodi5zdWJzdHIocSkpfWZ1bmN0aW9uIGYocil7ZnVuY3Rpb24gbyhzKXtyZXR1cm4ocyYmcy5zb3VyY2UpfHxzfWZ1bmN0aW9uIHAodCxzKXtyZXR1cm4gUmVnRXhwKG8odCksIm0iKyhyLmNJPyJpIjoiIikrKHM/ImciOiIiKSl9ZnVuY3Rpb24gcSh6LHgpe2lmKHouY29tcGlsZWQpe3JldHVybn16LmNvbXBpbGVkPXRydWU7dmFyIHU9W107aWYoei5rKXt2YXIgcz17fTtmdW5jdGlvbiBBKEIsdCl7aWYoci5jSSl7dD10LnRvTG93ZXJDYXNlKCl9dC5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oQyl7dmFyIEQ9Qy5zcGxpdCgifCIpO3NbRFswXV09W0IsRFsxXT9OdW1iZXIoRFsxXSk6MV07dS5wdXNoKERbMF0pfSl9ei5sUj1wKHoubHx8IlxcYiIraGxqcy5JUisiXFxiKD8hXFwuKSIsdHJ1ZSk7aWYodHlwZW9mIHouaz09InN0cmluZyIpe0EoImtleXdvcmQiLHouayl9ZWxzZXtmb3IodmFyIHkgaW4gei5rKXtpZighei5rLmhhc093blByb3BlcnR5KHkpKXtjb250aW51ZX1BKHksei5rW3ldKX19ei5rPXN9aWYoeCl7aWYoei5iV0spe3ouYj0iXFxiKCIrdS5qb2luKCJ8IikrIilcXGIoPyFcXC4pXFxzKiJ9ei5iUj1wKHouYj96LmI6IlxcQnxcXGIiKTtpZighei5lJiYhei5lVyl7ei5lPSJcXEJ8XFxiIn1pZih6LmUpe3ouZVI9cCh6LmUpfXoudEU9byh6LmUpfHwiIjtpZih6LmVXJiZ4LnRFKXt6LnRFKz0oei5lPyJ8IjoiIikreC50RX19aWYoei5pKXt6LmlSPXAoei5pKX1pZih6LnI9PT11bmRlZmluZWQpe3oucj0xfWlmKCF6LmMpe3ouYz1bXX1mb3IodmFyIHc9MDt3PHouYy5sZW5ndGg7dysrKXtpZih6LmNbd109PSJzZWxmIil7ei5jW3ddPXp9cSh6LmNbd10seil9aWYoei5zdGFydHMpe3Eoei5zdGFydHMseCl9dmFyIHY9W107Zm9yKHZhciB3PTA7dzx6LmMubGVuZ3RoO3crKyl7di5wdXNoKG8oei5jW3ddLmIpKX1pZih6LnRFKXt2LnB1c2gobyh6LnRFKSl9aWYoei5pKXt2LnB1c2gobyh6LmkpKX16LnQ9di5sZW5ndGg/cCh2LmpvaW4oInwiKSx0cnVlKTp7ZXhlYzpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH19fXEocil9ZnVuY3Rpb24gZChFLEcsQyxNKXtmdW5jdGlvbiBvKHIsUCl7Zm9yKHZhciBPPTA7TzxQLmMubGVuZ3RoO08rKyl7dmFyIE49UC5jW09dLmJSLmV4ZWMocik7aWYoTiYmTi5pbmRleD09MCl7cmV0dXJuIFAuY1tPXX19fWZ1bmN0aW9uIHMoTixyKXtpZihOLmUmJk4uZVIudGVzdChyKSl7cmV0dXJuIE59aWYoTi5lVyl7cmV0dXJuIHMoTi5wYXJlbnQscil9fWZ1bmN0aW9uIHQocixOKXtyZXR1cm4gIUMmJk4uaSYmTi5pUi50ZXN0KHIpfWZ1bmN0aW9uIHkoTyxyKXt2YXIgTj1ILmNJP3JbMF0udG9Mb3dlckNhc2UoKTpyWzBdO3JldHVybiBPLmsuaGFzT3duUHJvcGVydHkoTikmJk8ua1tOXX1mdW5jdGlvbiBJKCl7dmFyIE49bCh3KTtpZighQi5rKXtyZXR1cm4gTn12YXIgcj0iIjt2YXIgUT0wO0IubFIubGFzdEluZGV4PTA7dmFyIE89Qi5sUi5leGVjKE4pO3doaWxlKE8pe3IrPU4uc3Vic3RyKFEsTy5pbmRleC1RKTt2YXIgUD15KEIsTyk7aWYoUCl7dis9UFsxXTtyKz0nPHNwYW4gY2xhc3M9IicrUFswXSsnIj4nK09bMF0rIjwvc3Bhbj4ifWVsc2V7cis9T1swXX1RPUIubFIubGFzdEluZGV4O089Qi5sUi5leGVjKE4pfXJldHVybiByK04uc3Vic3RyKFEpfWZ1bmN0aW9uIHooKXtpZihCLnNMJiYhZVtCLnNMXSl7cmV0dXJuIGwodyl9dmFyIE49Qi5zdWJMYW5ndWFnZU1vZGU9PSJjb250aW51b3VzIj9CLnRvcDp1bmRlZmluZWQ7dmFyIHI9Qi5zTD9kKEIuc0wsdyx0cnVlLE4pOmcodyk7aWYoQi5yPjApe3YrPXIua2V5d29yZF9jb3VudDtBKz1yLnJ9Qi50b3A9ci50b3A7cmV0dXJuJzxzcGFuIGNsYXNzPSInK3IubGFuZ3VhZ2UrJyI+JytyLnZhbHVlKyI8L3NwYW4+In1mdW5jdGlvbiBMKCl7cmV0dXJuIEIuc0whPT11bmRlZmluZWQ/eigpOkkoKX1mdW5jdGlvbiBLKE8scil7dmFyIE49Ty5jTj8nPHNwYW4gY2xhc3M9IicrTy5jTisnIj4nOiIiO2lmKE8uckIpe3grPU47dz0iIn1lbHNle2lmKE8uZUIpe3grPWwocikrTjt3PSIifWVsc2V7eCs9Tjt3PXJ9fUI9T2JqZWN0LmNyZWF0ZShPLHtwYXJlbnQ6e3ZhbHVlOkJ9fSl9ZnVuY3Rpb24gRChOLHIpe3crPU47aWYocj09PXVuZGVmaW5lZCl7eCs9TCgpO3JldHVybiAwfXZhciBQPW8ocixCKTtpZihQKXt4Kz1MKCk7SyhQLHIpO3JldHVybiBQLnJCPzA6ci5sZW5ndGh9dmFyIFE9cyhCLHIpO2lmKFEpe3ZhciBPPUI7aWYoIShPLnJFfHxPLmVFKSl7dys9cn14Kz1MKCk7ZG97aWYoQi5jTil7eCs9Ijwvc3Bhbj4ifUErPUIucjtCPUIucGFyZW50fXdoaWxlKEIhPVEucGFyZW50KTtpZihPLmVFKXt4Kz1sKHIpfXc9IiI7aWYoUS5zdGFydHMpe0soUS5zdGFydHMsIiIpfXJldHVybiBPLnJFPzA6ci5sZW5ndGh9aWYodChyLEIpKXt0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgbGV4ZW0gIicrcisnIiBmb3IgbW9kZSAiJysoQi5jTnx8Ijx1bm5hbWVkPiIpKyciJyl9dys9cjtyZXR1cm4gci5sZW5ndGh8fDF9dmFyIEg9ZVtFXTtpZighSCl7dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJytFKyciJyl9ZihIKTt2YXIgQj1NfHxIO3ZhciB4PSIiO2Zvcih2YXIgRj1CO0YhPUg7Rj1GLnBhcmVudCl7aWYoRi5jTil7eD0nPHNwYW4gY2xhc3M9IicrRi5jTisnIj4nK3h9fXZhciB3PSIiO3ZhciBBPTA7dmFyIHY9MDt0cnl7dmFyIHUscSxwPTA7d2hpbGUodHJ1ZSl7Qi50Lmxhc3RJbmRleD1wO3U9Qi50LmV4ZWMoRyk7aWYoIXUpe2JyZWFrfXE9RChHLnN1YnN0cihwLHUuaW5kZXgtcCksdVswXSk7cD11LmluZGV4K3F9RChHLnN1YnN0cihwKSk7Zm9yKHZhciBGPUI7Ri5wYXJlbnQ7Rj1GLnBhcmVudCl7aWYoRi5jTil7eCs9Ijwvc3Bhbj4ifX1yZXR1cm57cjpBLGtleXdvcmRfY291bnQ6dix2YWx1ZTp4LGxhbmd1YWdlOkUsdG9wOkJ9fWNhdGNoKEope2lmKEoubWVzc2FnZS5pbmRleE9mKCJJbGxlZ2FsIikhPS0xKXtyZXR1cm57cjowLGtleXdvcmRfY291bnQ6MCx2YWx1ZTpsKEcpfX1lbHNle3Rocm93IEp9fX1mdW5jdGlvbiBnKHMpe3ZhciBvPXtrZXl3b3JkX2NvdW50OjAscjowLHZhbHVlOmwocyl9O3ZhciBxPW87Zm9yKHZhciBwIGluIGUpe2lmKCFlLmhhc093blByb3BlcnR5KHApKXtjb250aW51ZX12YXIgcj1kKHAscyxmYWxzZSk7ci5sYW5ndWFnZT1wO2lmKHIua2V5d29yZF9jb3VudCtyLnI+cS5rZXl3b3JkX2NvdW50K3Eucil7cT1yfWlmKHIua2V5d29yZF9jb3VudCtyLnI+by5rZXl3b3JkX2NvdW50K28ucil7cT1vO289cn19aWYocS5sYW5ndWFnZSl7by5zZWNvbmRfYmVzdD1xfXJldHVybiBvfWZ1bmN0aW9uIGkocSxwLG8pe2lmKHApe3E9cS5yZXBsYWNlKC9eKCg8W14+XSs+fFx0KSspL2dtLGZ1bmN0aW9uKHIsdix1LHQpe3JldHVybiB2LnJlcGxhY2UoL1x0L2cscCl9KX1pZihvKXtxPXEucmVwbGFjZSgvXG4vZywiPGJyPiIpfXJldHVybiBxfWZ1bmN0aW9uIG0ocix1LHApe3ZhciB2PWgocixwKTt2YXIgdD1hKHIpO2lmKHQ9PSJuby1oaWdobGlnaHQiKXtyZXR1cm59dmFyIHc9dD9kKHQsdix0cnVlKTpnKHYpO3Q9dy5sYW5ndWFnZTt2YXIgbz1jKHIpO2lmKG8ubGVuZ3RoKXt2YXIgcT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKTtxLmlubmVySFRNTD13LnZhbHVlO3cudmFsdWU9aihvLGMocSksdil9dy52YWx1ZT1pKHcudmFsdWUsdSxwKTt2YXIgcz1yLmNsYXNzTmFtZTtpZighcy5tYXRjaCgiKFxcc3xeKShsYW5ndWFnZS0pPyIrdCsiKFxcc3wkKSIpKXtzPXM/KHMrIiAiK3QpOnR9ci5pbm5lckhUTUw9dy52YWx1ZTtyLmNsYXNzTmFtZT1zO3IucmVzdWx0PXtsYW5ndWFnZTp0LGt3Oncua2V5d29yZF9jb3VudCxyZTp3LnJ9O2lmKHcuc2Vjb25kX2Jlc3Qpe3Iuc2Vjb25kX2Jlc3Q9e2xhbmd1YWdlOncuc2Vjb25kX2Jlc3QubGFuZ3VhZ2Usa3c6dy5zZWNvbmRfYmVzdC5rZXl3b3JkX2NvdW50LHJlOncuc2Vjb25kX2Jlc3Qucn19fWZ1bmN0aW9uIG4oKXtpZihuLmNhbGxlZCl7cmV0dXJufW4uY2FsbGVkPXRydWU7QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJwcmUiKSxiKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbihvKXttKG8saGxqcy50YWJSZXBsYWNlKX0pfWZ1bmN0aW9uIGsoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsbixmYWxzZSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLG4sZmFsc2UpfXZhciBlPXt9O3RoaXMuTEFOR1VBR0VTPWU7dGhpcy5oaWdobGlnaHQ9ZDt0aGlzLmhpZ2hsaWdodEF1dG89Zzt0aGlzLmZpeE1hcmt1cD1pO3RoaXMuaGlnaGxpZ2h0QmxvY2s9bTt0aGlzLmluaXRIaWdobGlnaHRpbmc9bjt0aGlzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQ9azt0aGlzLklSPSJbYS16QS1aXVthLXpBLVowLTlfXSoiO3RoaXMuVUlSPSJbYS16QS1aX11bYS16QS1aMC05X10qIjt0aGlzLk5SPSJcXGJcXGQrKFxcLlxcZCspPyI7dGhpcy5DTlI9IihcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSI7dGhpcy5CTlI9IlxcYigwYlswMV0rKSI7dGhpcy5SU1I9IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfFxcLnwtfC09fC98Lz18Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+Pnw+Pnw+fFxcP3xcXFt8XFx7fFxcKHxcXF58XFxePXxcXHx8XFx8PXxcXHxcXHx8fiI7dGhpcy5CRT17YjoiXFxcXFtcXHNcXFNdIixyOjB9O3RoaXMuQVNNPXtjTjoic3RyaW5nIixiOiInIixlOiInIixpOiJcXG4iLGM6W3RoaXMuQkVdLHI6MH07dGhpcy5RU009e2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGk6IlxcbiIsYzpbdGhpcy5CRV0scjowfTt0aGlzLkNMQ009e2NOOiJjb21tZW50IixiOiIvLyIsZToiJCJ9O3RoaXMuQ0JMQ0xNPXtjTjoiY29tbWVudCIsYjoiL1xcKiIsZToiXFwqLyJ9O3RoaXMuSENNPXtjTjoiY29tbWVudCIsYjoiIyIsZToiJCJ9O3RoaXMuTk09e2NOOiJudW1iZXIiLGI6dGhpcy5OUixyOjB9O3RoaXMuQ05NPXtjTjoibnVtYmVyIixiOnRoaXMuQ05SLHI6MH07dGhpcy5CTk09e2NOOiJudW1iZXIiLGI6dGhpcy5CTlIscjowfTt0aGlzLlJFR0VYUF9NT0RFPXtjTjoicmVnZXhwIixiOi9cLy8sZTovXC9bZ2ltXSovLGk6L1xuLyxjOlt0aGlzLkJFLHtiOi9cWy8sZTovXF0vLHI6MCxjOlt0aGlzLkJFXX1dfTt0aGlzLmluaGVyaXQ9ZnVuY3Rpb24ocSxyKXt2YXIgbz17fTtmb3IodmFyIHAgaW4gcSl7b1twXT1xW3BdfWlmKHIpe2Zvcih2YXIgcCBpbiByKXtvW3BdPXJbcF19fXJldHVybiBvfX0oKTtobGpzLkxBTkdVQUdFUy5iYXNoPWZ1bmN0aW9uKGEpe3ZhciBjPXtjTjoidmFyaWFibGUiLGI6L1wkW1x3XGQjQF1bXHdcZF9dKi99O3ZhciBiPXtjTjoidmFyaWFibGUiLGI6L1wkXHsoLio/KVx9L307dmFyIGU9e2NOOiJzdHJpbmciLGI6LyIvLGU6LyIvLGM6W2EuQkUsYyxiLHtjTjoidmFyaWFibGUiLGI6L1wkXCgvLGU6L1wpLyxjOmEuQkV9XSxyOjB9O3ZhciBkPXtjTjoic3RyaW5nIixiOi8nLyxlOi8nLyxyOjB9O3JldHVybntsOi8tP1thLXpdKy8sazp7a2V5d29yZDoiaWYgdGhlbiBlbHNlIGVsaWYgZmkgZm9yIGJyZWFrIGNvbnRpbnVlIHdoaWxlIGluIGRvIGRvbmUgZXhpdCByZXR1cm4gc2V0IGRlY2xhcmUgY2FzZSBlc2FjIGV4cG9ydCBleGVjIixsaXRlcmFsOiJ0cnVlIGZhbHNlIixidWlsdF9pbjoicHJpbnRmIGVjaG8gcmVhZCBjZCBwd2QgcHVzaGQgcG9wZCBkaXJzIGxldCBldmFsIHVuc2V0IHR5cGVzZXQgcmVhZG9ubHkgZ2V0b3B0cyBzb3VyY2Ugc2hvcHQgY2FsbGVyIHR5cGUgaGFzaCBiaW5kIGhlbHAgc3VkbyIsb3BlcmF0b3I6Ii1uZSAtZXEgLWx0IC1ndCAtZiAtZCAtZSAtcyAtbCAtYSJ9LGM6W3tjTjoic2hlYmFuZyIsYjovXiMhW15cbl0rc2hccyokLyxyOjEwfSx7Y046ImZ1bmN0aW9uIixiOi9cd1tcd1xkX10qXHMqXChccypcKVxzKlx7LyxyQjp0cnVlLGM6W3tjTjoidGl0bGUiLGI6L1x3W1x3XGRfXSovfV0scjowfSxhLkhDTSxhLk5NLGUsZCxjLGJdfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuY3M9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImFic3RyYWN0IGFzIGJhc2UgYm9vbCBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjaGVja2VkIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlY2ltYWwgZGVmYXVsdCBkZWxlZ2F0ZSBkbyBkb3VibGUgZWxzZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmYWxzZSBmaW5hbGx5IGZpeGVkIGZsb2F0IGZvciBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbmFtZXNwYWNlIG5ldyBudWxsIG9iamVjdCBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNieXRlIHNlYWxlZCBzaG9ydCBzaXplb2Ygc3RhY2thbGxvYyBzdGF0aWMgc3RyaW5nIHN0cnVjdCBzd2l0Y2ggdGhpcyB0aHJvdyB0cnVlIHRyeSB0eXBlb2YgdWludCB1bG9uZyB1bmNoZWNrZWQgdW5zYWZlIHVzaG9ydCB1c2luZyB2aXJ0dWFsIHZvbGF0aWxlIHZvaWQgd2hpbGUgYXN5bmMgYXdhaXQgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZnJvbSBnZXQgZ3JvdXAgaW50byBqb2luIGxldCBvcmRlcmJ5IHBhcnRpYWwgc2VsZWN0IHNldCB2YWx1ZSB2YXIgd2hlcmUgeWllbGQiLGM6W3tjTjoiY29tbWVudCIsYjoiLy8vIixlOiIkIixyQjp0cnVlLGM6W3tjTjoieG1sRG9jVGFnIixiOiIvLy98PCEtLXwtLT4ifSx7Y046InhtbERvY1RhZyIsYjoiPC8/IixlOiI+In1dfSxhLkNMQ00sYS5DQkxDTE0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQiLGs6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHJlZ2lvbiBlbmRyZWdpb24gcHJhZ21hIGNoZWNrc3VtIn0se2NOOiJzdHJpbmciLGI6J0AiJyxlOiciJyxjOlt7YjonIiInfV19LGEuQVNNLGEuUVNNLGEuQ05NXX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnJ1Ynk9ZnVuY3Rpb24oZSl7dmFyIGE9IlthLXpBLVpfXVthLXpBLVowLTlfXSooXFwhfFxcPyk/Ijt2YXIgaj0iW2EtekEtWl9dXFx3KlshPz1dP3xbLSt+XVxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFwqXFwqfFstLyslXiYqfmB8XXxcXFtcXF09PyI7dmFyIGc9e2tleXdvcmQ6ImFuZCBmYWxzZSB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIGlmIEJFR0lOIHJldHJ5IGVuZCBmb3IgdHJ1ZSBzZWxmIHdoZW4gbmV4dCB1bnRpbCBkbyBiZWdpbiB1bmxlc3MgRU5EIHJlc2N1ZSBuaWwgZWxzZSBicmVhayB1bmRlZiBub3Qgc3VwZXIgY2xhc3MgY2FzZSByZXF1aXJlIHlpZWxkIGFsaWFzIHdoaWxlIGVuc3VyZSBlbHNpZiBvciBpbmNsdWRlIn07dmFyIGM9e2NOOiJ5YXJkb2N0YWciLGI6IkBbQS1aYS16XSsifTt2YXIgaz1be2NOOiJjb21tZW50IixiOiIjIixlOiIkIixjOltjXX0se2NOOiJjb21tZW50IixiOiJeXFw9YmVnaW4iLGU6Il5cXD1lbmQiLGM6W2NdLHI6MTB9LHtjTjoiY29tbWVudCIsYjoiXl9fRU5EX18iLGU6IlxcbiQifV07dmFyIGQ9e2NOOiJzdWJzdCIsYjoiI1xceyIsZToifSIsbDphLGs6Z307dmFyIGk9W2UuQkUsZF07dmFyIGI9W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOmkscjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6IiVbcXddP1xcKCIsZToiXFwpIixjOml9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXFsiLGU6IlxcXSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/eyIsZToifSIsYzppfSx7Y046InN0cmluZyIsYjoiJVtxd10/PCIsZToiPiIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8vIixlOiIvIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPyUiLGU6IiUiLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LSIsZToiLSIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXHwiLGU6IlxcfCIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOi9cQlw/KFxcXGR7MSwzfXxcXHhbQS1GYS1mMC05XXsxLDJ9fFxcdVtBLUZhLWYwLTldezR9fFxcP1xTKVxiL31dO3ZhciBoPXtjTjoiZnVuY3Rpb24iLGJXSzp0cnVlLGU6IiB8JHw7IixrOiJkZWYiLGM6W3tjTjoidGl0bGUiLGI6aixsOmEsazpnfSx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGw6YSxrOmd9XS5jb25jYXQoayl9O3ZhciBmPWsuY29uY2F0KGIuY29uY2F0KFt7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIkfDsiLGs6ImNsYXNzIG1vZHVsZSIsYzpbe2NOOiJ0aXRsZSIsYjoiW0EtWmEtel9dXFx3Kig6OlxcdyspKihcXD98XFwhKT8iLHI6MH0se2NOOiJpbmhlcml0YW5jZSIsYjoiPFxccyoiLGM6W3tjTjoicGFyZW50IixiOiIoIitlLklSKyI6Oik/IitlLklSfV19XS5jb25jYXQoayl9LGgse2NOOiJjb25zdGFudCIsYjoiKDo6KT8oXFxiW0EtWl1cXHcqKDo6KT8pKyIscjowfSx7Y046InN5bWJvbCIsYjoiOiIsYzpiLmNvbmNhdChbe2I6an1dKSxyOjB9LHtjTjoic3ltYm9sIixiOmErIjoiLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2NOOiJ2YXJpYWJsZSIsYjoiKFxcJFxcVyl8KChcXCR8XFxAXFxAPykoXFx3KykpIn0se2I6IigiK2UuUlNSKyIpXFxzKiIsYzprLmNvbmNhdChbe2NOOiJyZWdleHAiLGI6Ii8iLGU6Ii9bYS16XSoiLGk6IlxcbiIsYzpbZS5CRSxkXX0se2NOOiJyZWdleHAiLGI6IiVyeyIsZToifVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXJcXCgiLGU6IlxcKVthLXpdKiIsaToiXFxuIixjOltlLkJFLGRdfSx7Y046InJlZ2V4cCIsYjoiJXIhIixlOiIhW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19LHtjTjoicmVnZXhwIixiOiIlclxcWyIsZToiXFxdW2Etel0qIixpOiJcXG4iLGM6W2UuQkUsZF19XSkscjowfV0pKTtkLmM9ZjtoLmNbMV0uYz1mO3JldHVybntsOmEsazpnLGM6Zn19KGhsanMpO2hsanMuTEFOR1VBR0VTLmRpZmY9ZnVuY3Rpb24oYSl7cmV0dXJue2M6W3tjTjoiY2h1bmsiLGI6Il5cXEBcXEAgK1xcLVxcZCssXFxkKyArXFwrXFxkKyxcXGQrICtcXEBcXEAkIixyOjEwfSx7Y046ImNodW5rIixiOiJeXFwqXFwqXFwqICtcXGQrLFxcZCsgK1xcKlxcKlxcKlxcKiQiLHI6MTB9LHtjTjoiY2h1bmsiLGI6Il5cXC1cXC1cXC0gK1xcZCssXFxkKyArXFwtXFwtXFwtXFwtJCIscjoxMH0se2NOOiJoZWFkZXIiLGI6IkluZGV4OiAiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiPT09PT0iLGU6Ij09PT09JCJ9LHtjTjoiaGVhZGVyIixiOiJeXFwtXFwtXFwtIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCp7M30gIixlOiIkIn0se2NOOiJoZWFkZXIiLGI6Il5cXCtcXCtcXCsiLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXFwqezV9IixlOiJcXCp7NX0kIn0se2NOOiJhZGRpdGlvbiIsYjoiXlxcKyIsZToiJCJ9LHtjTjoiZGVsZXRpb24iLGI6Il5cXC0iLGU6IiQifSx7Y046ImNoYW5nZSIsYjoiXlxcISIsZToiJCJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmFzY3JpcHQ9ZnVuY3Rpb24oYSl7cmV0dXJue2s6e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHdpdGggdGhyb3cgY2FzZSBkZWZhdWx0IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGxldCB5aWVsZCBjb25zdCIsbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCBOYU4gSW5maW5pdHkifSxjOlthLkFTTSxhLlFTTSxhLkNMQ00sYS5DQkxDTE0sYS5DTk0se2I6IigiK2EuUlNSKyJ8XFxiKGNhc2V8cmV0dXJufHRocm93KVxcYilcXHMqIixrOiJyZXR1cm4gdGhyb3cgY2FzZSIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUkVHRVhQX01PREUse2I6LzwvLGU6Lz47LyxzTDoieG1sIn1dLHI6MH0se2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZTovey8sazoiZnVuY3Rpb24iLGM6W3tjTjoidGl0bGUiLGI6L1tBLVphLXokX11bMC05QS1aYS16JF9dKi99LHtjTjoicGFyYW1zIixiOi9cKC8sZTovXCkvLGM6W2EuQ0xDTSxhLkNCTENMTV0saTovWyInXChdL31dLGk6L1xbfCUvfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy54bWw9ZnVuY3Rpb24oYSl7dmFyIGM9IltBLVphLXowLTlcXC5fOi1dKyI7dmFyIGI9e2VXOnRydWUscjowLGM6W3tjTjoiYXR0cmlidXRlIixiOmMscjowfSx7YjonPSInLHJCOnRydWUsZTonIicsYzpbe2NOOiJ2YWx1ZSIsYjonIicsZVc6dHJ1ZX1dfSx7YjoiPSciLHJCOnRydWUsZToiJyIsYzpbe2NOOiJ2YWx1ZSIsYjoiJyIsZVc6dHJ1ZX1dfSx7YjoiPSIsYzpbe2NOOiJ2YWx1ZSIsYjoiW15cXHMvPl0rIn1dfV19O3JldHVybntjSTp0cnVlLGM6W3tjTjoicGkiLGI6IjxcXD8iLGU6IlxcPz4iLHI6MTB9LHtjTjoiZG9jdHlwZSIsYjoiPCFET0NUWVBFIixlOiI+IixyOjEwLGM6W3tiOiJcXFsiLGU6IlxcXSJ9XX0se2NOOiJjb21tZW50IixiOiI8IS0tIixlOiItLT4iLHI6MTB9LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiIscjoxMH0se2NOOiJ0YWciLGI6IjxzdHlsZSg/PVxcc3w+fCQpIixlOiI+IixrOnt0aXRsZToic3R5bGUifSxjOltiXSxzdGFydHM6e2U6Ijwvc3R5bGU+IixyRTp0cnVlLHNMOiJjc3MifX0se2NOOiJ0YWciLGI6IjxzY3JpcHQoPz1cXHN8PnwkKSIsZToiPiIsazp7dGl0bGU6InNjcmlwdCJ9LGM6W2JdLHN0YXJ0czp7ZToiPFwvc2NyaXB0PiIsckU6dHJ1ZSxzTDoiamF2YXNjcmlwdCJ9fSx7YjoiPCUiLGU6IiU+IixzTDoidmJzY3JpcHQifSx7Y046InRhZyIsYjoiPC8/IixlOiIvPz4iLHI6MCxjOlt7Y046InRpdGxlIixiOiJbXiAvPjxdKyJ9LGJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYXJrZG93bj1mdW5jdGlvbihhKXtyZXR1cm57Yzpbe2NOOiJoZWFkZXIiLGI6Il4jezEsM30iLGU6IiQifSx7Y046ImhlYWRlciIsYjoiXi4rP1xcbls9LV17Mix9JCJ9LHtiOiI8IixlOiI+IixzTDoieG1sIixyOjB9LHtjTjoiYnVsbGV0IixiOiJeKFsqKy1dfChcXGQrXFwuKSlcXHMrIn0se2NOOiJzdHJvbmciLGI6IlsqX117Mn0uKz9bKl9dezJ9In0se2NOOiJlbXBoYXNpcyIsYjoiXFwqLis/XFwqIn0se2NOOiJlbXBoYXNpcyIsYjoiXy4rP18iLHI6MH0se2NOOiJibG9ja3F1b3RlIixiOiJePlxccysiLGU6IiQifSx7Y046ImNvZGUiLGI6ImAuKz9gIn0se2NOOiJjb2RlIixiOiJeICAgICIsZToiJCIscjowfSx7Y046Imhvcml6b250YWxfcnVsZSIsYjoiXi17Myx9IixlOiIkIn0se2I6IlxcWy4rP1xcXVxcKC4rP1xcKSIsckI6dHJ1ZSxjOlt7Y046ImxpbmtfbGFiZWwiLGI6IlxcWy4rXFxdIn0se2NOOiJsaW5rX3VybCIsYjoiXFwoIixlOiJcXCkiLGVCOnRydWUsZUU6dHJ1ZX1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jc3M9ZnVuY3Rpb24oYSl7dmFyIGI9IlthLXpBLVotXVthLXpBLVowLTlfLV0qIjt2YXIgYz17Y046ImZ1bmN0aW9uIixiOmIrIlxcKCIsZToiXFwpIixjOlsic2VsZiIsYS5OTSxhLkFTTSxhLlFTTV19O3JldHVybntjSTp0cnVlLGk6Ils9L3wnXSIsYzpbYS5DQkxDTE0se2NOOiJpZCIsYjoiXFwjW0EtWmEtejAtOV8tXSsifSx7Y046ImNsYXNzIixiOiJcXC5bQS1aYS16MC05Xy1dKyIscjowfSx7Y046ImF0dHJfc2VsZWN0b3IiLGI6IlxcWyIsZToiXFxdIixpOiIkIn0se2NOOiJwc2V1ZG8iLGI6IjooOik/W2EtekEtWjAtOVxcX1xcLVxcK1xcKFxcKVxcXCJcXCddKyJ9LHtjTjoiYXRfcnVsZSIsYjoiQChmb250LWZhY2V8cGFnZSkiLGw6IlthLXotXSsiLGs6ImZvbnQtZmFjZSBwYWdlIn0se2NOOiJhdF9ydWxlIixiOiJAIixlOiJbeztdIixjOlt7Y046ImtleXdvcmQiLGI6L1xTKy99LHtiOi9ccy8sZVc6dHJ1ZSxlRTp0cnVlLHI6MCxjOltjLGEuQVNNLGEuUVNNLGEuTk1dfV19LHtjTjoidGFnIixiOmIscjowfSx7Y046InJ1bGVzIixiOiJ7IixlOiJ9IixpOiJbXlxcc10iLHI6MCxjOlthLkNCTENMTSx7Y046InJ1bGUiLGI6IlteXFxzXSIsckI6dHJ1ZSxlOiI7IixlVzp0cnVlLGM6W3tjTjoiYXR0cmlidXRlIixiOiJbQS1aXFxfXFwuXFwtXSsiLGU6IjoiLGVFOnRydWUsaToiW15cXHNdIixzdGFydHM6e2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxlRTp0cnVlLGM6W2MsYS5OTSxhLlFTTSxhLkFTTSxhLkNCTENMTSx7Y046ImhleGNvbG9yIixiOiIjWzAtOUEtRmEtZl0rIn0se2NOOiJpbXBvcnRhbnQiLGI6IiFpbXBvcnRhbnQifV19fV19XX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuaHR0cD1mdW5jdGlvbihhKXtyZXR1cm57aToiXFxTIixjOlt7Y046InN0YXR1cyIsYjoiXkhUVFAvWzAtOVxcLl0rIixlOiIkIixjOlt7Y046Im51bWJlciIsYjoiXFxiXFxkezN9XFxiIn1dfSx7Y046InJlcXVlc3QiLGI6Il5bQS1aXSsgKC4qPykgSFRUUC9bMC05XFwuXSskIixyQjp0cnVlLGU6IiQiLGM6W3tjTjoic3RyaW5nIixiOiIgIixlOiIgIixlQjp0cnVlLGVFOnRydWV9XX0se2NOOiJhdHRyaWJ1dGUiLGI6Il5cXHciLGU6IjogIixlRTp0cnVlLGk6IlxcbnxcXHN8PSIsc3RhcnRzOntjTjoic3RyaW5nIixlOiIkIn19LHtiOiJcXG5cXG4iLHN0YXJ0czp7c0w6IiIsZVc6dHJ1ZX19XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLmphdmE9ZnVuY3Rpb24oYSl7cmV0dXJue2s6ImZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkIGVudW0gZWxzZSBicmVhayB0cmFuc2llbnQgbmV3IGNhdGNoIGluc3RhbmNlb2YgYnl0ZSBzdXBlciB2b2xhdGlsZSBjYXNlIGFzc2VydCBzaG9ydCBwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIixjOlt7Y046ImphdmFkb2MiLGI6Ii9cXCpcXCoiLGU6IlxcKi8iLGM6W3tjTjoiamF2YWRvY3RhZyIsYjoiKF58XFxzKUBbQS1aYS16XSsifV0scjoxMH0sYS5DTENNLGEuQ0JMQ0xNLGEuQVNNLGEuUVNNLHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIGludGVyZmFjZSIsZUU6dHJ1ZSxpOiI6IixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyBpbXBsZW1lbnRzIixyOjEwfSx7Y046InRpdGxlIixiOmEuVUlSfV19LGEuQ05NLHtjTjoiYW5ub3RhdGlvbiIsYjoiQFtBLVphLXpdKyJ9XX19KGhsanMpO2hsanMuTEFOR1VBR0VTLnBocD1mdW5jdGlvbihhKXt2YXIgZT17Y046InZhcmlhYmxlIixiOiJcXCQrW2EtekEtWl9ceDdmLVx4ZmZdW2EtekEtWjAtOV9ceDdmLVx4ZmZdKiJ9O3ZhciBiPVthLmluaGVyaXQoYS5BU00se2k6bnVsbH0pLGEuaW5oZXJpdChhLlFTTSx7aTpudWxsfSkse2NOOiJzdHJpbmciLGI6J2IiJyxlOiciJyxjOlthLkJFXX0se2NOOiJzdHJpbmciLGI6ImInIixlOiInIixjOlthLkJFXX1dO3ZhciBjPVthLkJOTSxhLkNOTV07dmFyIGQ9e2NOOiJ0aXRsZSIsYjphLlVJUn07cmV0dXJue2NJOnRydWUsbDphLlVJUixrOiJhbmQgaW5jbHVkZV9vbmNlIGxpc3QgYWJzdHJhY3QgZ2xvYmFsIHByaXZhdGUgZWNobyBpbnRlcmZhY2UgYXMgc3RhdGljIGVuZHN3aXRjaCBhcnJheSBudWxsIGlmIGVuZHdoaWxlIG9yIGNvbnN0IGZvciBlbmRmb3JlYWNoIHNlbGYgdmFyIHdoaWxlIGlzc2V0IHB1YmxpYyBwcm90ZWN0ZWQgZXhpdCBmb3JlYWNoIHRocm93IGVsc2VpZiBpbmNsdWRlIF9fRklMRV9fIGVtcHR5IHJlcXVpcmVfb25jZSBkbyB4b3IgcmV0dXJuIGltcGxlbWVudHMgcGFyZW50IGNsb25lIHVzZSBfX0NMQVNTX18gX19MSU5FX18gZWxzZSBicmVhayBwcmludCBldmFsIG5ldyBjYXRjaCBfX01FVEhPRF9fIGNhc2UgZXhjZXB0aW9uIGRlZmF1bHQgZGllIHJlcXVpcmUgX19GVU5DVElPTl9fIGVuZGRlY2xhcmUgZmluYWwgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIGVuZGZvciBlbmRpZiBkZWNsYXJlIHVuc2V0IHRydWUgZmFsc2UgbmFtZXNwYWNlIHRyYWl0IGdvdG8gaW5zdGFuY2VvZiBpbnN0ZWFkb2YgX19ESVJfXyBfX05BTUVTUEFDRV9fIHlpZWxkIGZpbmFsbHkiLGM6W2EuQ0xDTSxhLkhDTSx7Y046ImNvbW1lbnQiLGI6Ii9cXCoiLGU6IlxcKi8iLGM6W3tjTjoicGhwZG9jIixiOiJcXHNAW0EtWmEtel0rIn1dfSx7Y046ImNvbW1lbnQiLGI6Il9faGFsdF9jb21waWxlci4rPzsiLGVXOnRydWUsazoiX19oYWx0X2NvbXBpbGVyIixsOmEuVUlSfSx7Y046InN0cmluZyIsYjoiPDw8WydcIl0/XFx3K1snXCJdPyQiLGU6Il5cXHcrOyIsYzpbYS5CRV19LHtjTjoicHJlcHJvY2Vzc29yIixiOiI8XFw/cGhwIixyOjEwfSx7Y046InByZXByb2Nlc3NvciIsYjoiXFw/PiJ9LGUse2NOOiJmdW5jdGlvbiIsYldLOnRydWUsZToieyIsazoiZnVuY3Rpb24iLGk6IlxcJHxcXFt8JSIsYzpbZCx7Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6WyJzZWxmIixlLGEuQ0JMQ0xNXS5jb25jYXQoYikuY29uY2F0KGMpfV19LHtjTjoiY2xhc3MiLGJXSzp0cnVlLGU6InsiLGs6ImNsYXNzIixpOiJbOlxcKFxcJF0iLGM6W3tiV0s6dHJ1ZSxlVzp0cnVlLGs6ImV4dGVuZHMiLGM6W2RdfSxkXX0se2I6Ij0+In1dLmNvbmNhdChiKS5jb25jYXQoYyl9fShobGpzKTtobGpzLkxBTkdVQUdFUy5weXRob249ZnVuY3Rpb24oYSl7dmFyIGY9e2NOOiJwcm9tcHQiLGI6L14oPj4+fFwuXC5cLikgL307dmFyIGM9W3tjTjoic3RyaW5nIixiOi8odXxiKT9yPycnJy8sZTovJycnLyxjOltmXSxyOjEwfSx7Y046InN0cmluZyIsYjovKHV8Yik/cj8iIiIvLGU6LyIiIi8sYzpbZl0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpJy8sZTovJy8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6Lyh1fHJ8dXIpIi8sZTovIi8sYzpbYS5CRV0scjoxMH0se2NOOiJzdHJpbmciLGI6LyhifGJyKScvLGU6LycvLGM6W2EuQkVdfSx7Y046InN0cmluZyIsYjovKGJ8YnIpIi8sZTovIi8sYzpbYS5CRV19XS5jb25jYXQoW2EuQVNNLGEuUVNNXSk7dmFyIGU9e2NOOiJ0aXRsZSIsYjphLlVJUn07dmFyIGQ9e2NOOiJwYXJhbXMiLGI6L1woLyxlOi9cKS8sYzpbInNlbGYiLGEuQ05NLGZdLmNvbmNhdChjKX07dmFyIGI9e2JXSzp0cnVlLGU6LzovLGk6L1skez07XG5dLyxjOltlLGRdLHI6MTB9O3JldHVybntrOntrZXl3b3JkOiJhbmQgZWxpZiBpcyBnbG9iYWwgYXMgaW4gaWYgZnJvbSByYWlzZSBmb3IgZXhjZXB0IGZpbmFsbHkgcHJpbnQgaW1wb3J0IHBhc3MgcmV0dXJuIGV4ZWMgZWxzZSBicmVhayBub3Qgd2l0aCBjbGFzcyBhc3NlcnQgeWllbGQgdHJ5IHdoaWxlIGNvbnRpbnVlIGRlbCBvciBkZWYgbGFtYmRhIG5vbmxvY2FsfDEwIE5vbmUgVHJ1ZSBGYWxzZSIsYnVpbHRfaW46IkVsbGlwc2lzIE5vdEltcGxlbWVudGVkIn0saTovKDxcL3wtPnxcPykvLGM6Yy5jb25jYXQoW2YsYS5IQ00sYS5pbmhlcml0KGIse2NOOiJmdW5jdGlvbiIsazoiZGVmIn0pLGEuaW5oZXJpdChiLHtjTjoiY2xhc3MiLGs6ImNsYXNzIn0pLGEuQ05NLHtjTjoiZGVjb3JhdG9yIixiOi9ALyxlOi8kL30se2I6L1xiKHByaW50fGV4ZWMpXCgvfV0pfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuc3FsPWZ1bmN0aW9uKGEpe3JldHVybntjSTp0cnVlLGM6W3tjTjoib3BlcmF0b3IiLGI6IihiZWdpbnxlbmR8c3RhcnR8Y29tbWl0fHJvbGxiYWNrfHNhdmVwb2ludHxsb2NrfGFsdGVyfGNyZWF0ZXxkcm9wfHJlbmFtZXxjYWxsfGRlbGV0ZXxkb3xoYW5kbGVyfGluc2VydHxsb2FkfHJlcGxhY2V8c2VsZWN0fHRydW5jYXRlfHVwZGF0ZXxzZXR8c2hvd3xwcmFnbWF8Z3JhbnQpXFxiKD8hOikiLGU6IjsiLGVXOnRydWUsazp7a2V5d29yZDoiYWxsIHBhcnRpYWwgZ2xvYmFsIG1vbnRoIGN1cnJlbnRfdGltZXN0YW1wIHVzaW5nIGdvIHJldm9rZSBzbWFsbGludCBpbmRpY2F0b3IgZW5kLWV4ZWMgZGlzY29ubmVjdCB6b25lIHdpdGggY2hhcmFjdGVyIGFzc2VydGlvbiB0byBhZGQgY3VycmVudF91c2VyIHVzYWdlIGlucHV0IGxvY2FsIGFsdGVyIG1hdGNoIGNvbGxhdGUgcmVhbCB0aGVuIHJvbGxiYWNrIGdldCByZWFkIHRpbWVzdGFtcCBzZXNzaW9uX3VzZXIgbm90IGludGVnZXIgYml0IHVuaXF1ZSBkYXkgbWludXRlIGRlc2MgaW5zZXJ0IGV4ZWN1dGUgbGlrZSBpbGlrZXwyIGxldmVsIGRlY2ltYWwgZHJvcCBjb250aW51ZSBpc29sYXRpb24gZm91bmQgd2hlcmUgY29uc3RyYWludHMgZG9tYWluIHJpZ2h0IG5hdGlvbmFsIHNvbWUgbW9kdWxlIHRyYW5zYWN0aW9uIHJlbGF0aXZlIHNlY29uZCBjb25uZWN0IGVzY2FwZSBjbG9zZSBzeXN0ZW1fdXNlciBmb3IgZGVmZXJyZWQgc2VjdGlvbiBjYXN0IGN1cnJlbnQgc3Fsc3RhdGUgYWxsb2NhdGUgaW50ZXJzZWN0IGRlYWxsb2NhdGUgbnVtZXJpYyBwdWJsaWMgcHJlc2VydmUgZnVsbCBnb3RvIGluaXRpYWxseSBhc2Mgbm8ga2V5IG91dHB1dCBjb2xsYXRpb24gZ3JvdXAgYnkgdW5pb24gc2Vzc2lvbiBib3RoIGxhc3QgbGFuZ3VhZ2UgY29uc3RyYWludCBjb2x1bW4gb2Ygc3BhY2UgZm9yZWlnbiBkZWZlcnJhYmxlIHByaW9yIGNvbm5lY3Rpb24gdW5rbm93biBhY3Rpb24gY29tbWl0IHZpZXcgb3IgZmlyc3QgaW50byBmbG9hdCB5ZWFyIHByaW1hcnkgY2FzY2FkZWQgZXhjZXB0IHJlc3RyaWN0IHNldCByZWZlcmVuY2VzIG5hbWVzIHRhYmxlIG91dGVyIG9wZW4gc2VsZWN0IHNpemUgYXJlIHJvd3MgZnJvbSBwcmVwYXJlIGRpc3RpbmN0IGxlYWRpbmcgY3JlYXRlIG9ubHkgbmV4dCBpbm5lciBhdXRob3JpemF0aW9uIHNjaGVtYSBjb3JyZXNwb25kaW5nIG9wdGlvbiBkZWNsYXJlIHByZWNpc2lvbiBpbW1lZGlhdGUgZWxzZSB0aW1lem9uZV9taW51dGUgZXh0ZXJuYWwgdmFyeWluZyB0cmFuc2xhdGlvbiB0cnVlIGNhc2UgZXhjZXB0aW9uIGpvaW4gaG91ciBkZWZhdWx0IGRvdWJsZSBzY3JvbGwgdmFsdWUgY3Vyc29yIGRlc2NyaXB0b3IgdmFsdWVzIGRlYyBmZXRjaCBwcm9jZWR1cmUgZGVsZXRlIGFuZCBmYWxzZSBpbnQgaXMgZGVzY3JpYmUgY2hhciBhcyBhdCBpbiB2YXJjaGFyIG51bGwgdHJhaWxpbmcgYW55IGFic29sdXRlIGN1cnJlbnRfdGltZSBlbmQgZ3JhbnQgcHJpdmlsZWdlcyB3aGVuIGNyb3NzIGNoZWNrIHdyaXRlIGN1cnJlbnRfZGF0ZSBwYWQgYmVnaW4gdGVtcG9yYXJ5IGV4ZWMgdGltZSB1cGRhdGUgY2F0YWxvZyB1c2VyIHNxbCBkYXRlIG9uIGlkZW50aXR5IHRpbWV6b25lX2hvdXIgbmF0dXJhbCB3aGVuZXZlciBpbnRlcnZhbCB3b3JrIG9yZGVyIGNhc2NhZGUgZGlhZ25vc3RpY3MgbmNoYXIgaGF2aW5nIGxlZnQgY2FsbCBkbyBoYW5kbGVyIGxvYWQgcmVwbGFjZSB0cnVuY2F0ZSBzdGFydCBsb2NrIHNob3cgcHJhZ21hIGV4aXN0cyBudW1iZXIgdHJpZ2dlciBpZiBiZWZvcmUgYWZ0ZXIgZWFjaCByb3ciLGFnZ3JlZ2F0ZToiY291bnQgc3VtIG1pbiBtYXggYXZnIn0sYzpbe2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2EuQkUse2I6IicnIn1dLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2EuQkUse2I6JyIiJ31dLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAiLGM6W2EuQkVdfSxhLkNOTV19LGEuQ0JMQ0xNLHtjTjoiY29tbWVudCIsYjoiLS0iLGU6IiQifV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5pbmk9ZnVuY3Rpb24oYSl7cmV0dXJue2NJOnRydWUsaToiW15cXHNdIixjOlt7Y046ImNvbW1lbnQiLGI6IjsiLGU6IiQifSx7Y046InRpdGxlIixiOiJeXFxbIixlOiJcXF0ifSx7Y046InNldHRpbmciLGI6Il5bYS16MC05XFxbXFxdXy1dK1sgXFx0XSo9WyBcXHRdKiIsZToiJCIsYzpbe2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxrOiJvbiBvZmYgdHJ1ZSBmYWxzZSB5ZXMgbm8iLGM6W2EuUVNNLGEuTk1dLHI6MH1dfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKGUpe3ZhciBhPSJnZXRwd2VudCBnZXRzZXJ2ZW50IHF1b3RlbWV0YSBtc2dyY3Ygc2NhbGFyIGtpbGwgZGJtY2xvc2UgdW5kZWYgbGMgbWEgc3lzd3JpdGUgdHIgc2VuZCB1bWFzayBzeXNvcGVuIHNobXdyaXRlIHZlYyBxeCB1dGltZSBsb2NhbCBvY3Qgc2VtY3RsIGxvY2FsdGltZSByZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXFmaWxlbm8gcXcgZW5kcHJvdG9lbnQgd2FpdCBzZXRob3N0ZW50IGJsZXNzIHN8MCBvcGVuZGlyIGNvbnRpbnVlIGVhY2ggc2xlZXAgZW5kZ3JlbnQgc2h1dGRvd24gZHVtcCBjaG9tcCBjb25uZWN0IGdldHNvY2tuYW1lIGRpZSBzb2NrZXRwYWlyIGNsb3NlIGZsb2NrIGV4aXN0cyBpbmRleCBzaG1nZXRzdWIgZm9yIGVuZHB3ZW50IHJlZG8gbHN0YXQgbXNnY3RsIHNldHBncnAgYWJzIGV4aXQgc2VsZWN0IHByaW50IHJlZiBnZXRob3N0YnlhZGRyIHVuc2hpZnQgZmNudGwgc3lzY2FsbCBnb3RvIGdldG5ldGJ5YWRkciBqb2luIGdtdGltZSBzeW1saW5rIHNlbWdldCBzcGxpY2UgeHwwIGdldHBlZXJuYW1lIHJlY3YgbG9nIHNldHNvY2tvcHQgY29zIGxhc3QgcmV2ZXJzZSBnZXRob3N0YnluYW1lIGdldGdybmFtIHN0dWR5IGZvcm1saW5lIGVuZGhvc3RlbnQgdGltZXMgY2hvcCBsZW5ndGggZ2V0aG9zdGVudCBnZXRuZXRlbnQgcGFjayBnZXRwcm90b2VudCBnZXRzZXJ2YnluYW1lIHJhbmQgbWtkaXIgcG9zIGNobW9kIHl8MCBzdWJzdHIgZW5kbmV0ZW50IHByaW50ZiBuZXh0IG9wZW4gbXNnc25kIHJlYWRkaXIgdXNlIHVubGluayBnZXRzb2Nrb3B0IGdldHByaW9yaXR5IHJpbmRleCB3YW50YXJyYXkgaGV4IHN5c3RlbSBnZXRzZXJ2Ynlwb3J0IGVuZHNlcnZlbnQgaW50IGNociB1bnRpZSBybWRpciBwcm90b3R5cGUgdGVsbCBsaXN0ZW4gZm9yayBzaG1yZWFkIHVjZmlyc3Qgc2V0cHJvdG9lbnQgZWxzZSBzeXNzZWVrIGxpbmsgZ2V0Z3JnaWQgc2htY3RsIHdhaXRwaWQgdW5wYWNrIGdldG5ldGJ5bmFtZSByZXNldCBjaGRpciBncmVwIHNwbGl0IHJlcXVpcmUgY2FsbGVyIGxjZmlyc3QgdW50aWwgd2FybiB3aGlsZSB2YWx1ZXMgc2hpZnQgdGVsbGRpciBnZXRwd3VpZCBteSBnZXRwcm90b2J5bnVtYmVyIGRlbGV0ZSBhbmQgc29ydCB1YyBkZWZpbmVkIHNyYW5kIGFjY2VwdCBwYWNrYWdlIHNlZWtkaXIgZ2V0cHJvdG9ieW5hbWUgc2Vtb3Agb3VyIHJlbmFtZSBzZWVrIGlmIHF8MCBjaHJvb3Qgc3lzcmVhZCBzZXRwd2VudCBubyBjcnlwdCBnZXRjIGNob3duIHNxcnQgd3JpdGUgc2V0bmV0ZW50IHNldHByaW9yaXR5IGZvcmVhY2ggdGllIHNpbiBtc2dnZXQgbWFwIHN0YXQgZ2V0bG9naW4gdW5sZXNzIGVsc2lmIHRydW5jYXRlIGV4ZWMga2V5cyBnbG9iIHRpZWQgY2xvc2VkaXJpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlIGF0YW4yIGdldGdyZW50IGV4cCB0aW1lIHB1c2ggc2V0Z3JlbnQgZ3QgbHQgb3IgbmUgbXwwIGJyZWFrIGdpdmVuIHNheSBzdGF0ZSB3aGVuIjt2YXIgZD17Y046InN1YnN0IixiOiJbJEBdXFx7IixlOiJcXH0iLGs6YSxyOjEwfTt2YXIgYj17Y046InZhcmlhYmxlIixiOiJcXCRcXGQifTt2YXIgaT17Y046InZhcmlhYmxlIixiOiJbXFwkXFwlXFxAXFwqXShcXF5cXHdcXGJ8I1xcdysoXFw6XFw6XFx3KykqfFteXFxzXFx3e118e1xcdyt9fFxcdysoXFw6XFw6XFx3KikqKSJ9O3ZhciBmPVtlLkJFLGQsYixpXTt2YXIgaD17YjoiLT4iLGM6W3tiOmUuSVJ9LHtiOiJ7IixlOiJ9In1dfTt2YXIgZz17Y046ImNvbW1lbnQiLGI6Il4oX19FTkRfX3xfX0RBVEFfXykiLGU6IlxcbiQiLHI6NX07dmFyIGM9W2IsaSxlLkhDTSxnLHtjTjoiY29tbWVudCIsYjoiXlxcPVxcdyIsZToiXFw9Y3V0IixlVzp0cnVlfSxoLHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXCgiLGU6IlxcKSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcWyIsZToiXFxdIixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx7IixlOiJcXH0iLGM6ZixyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXHwiLGU6IlxcfCIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxcPCIsZToiXFw+IixjOmYscjo1fSx7Y046InN0cmluZyIsYjoicXdcXHMrcSIsZToicSIsYzpmLHI6NX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2UuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6ZixyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltlLkJFXX0se2NOOiJzdHJpbmciLGI6IntcXHcrfSIscjowfSx7Y046InN0cmluZyIsYjoiLT9cXHcrXFxzKlxcPVxcPiIscjowfSx7Y046Im51bWJlciIsYjoiKFxcYjBbMC03X10rKXwoXFxiMHhbMC05YS1mQS1GX10rKXwoXFxiWzEtOV1bMC05X10qKFxcLlswLTlfXSspPyl8WzBfXVxcYiIscjowfSx7YjoiKCIrZS5SU1IrInxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXGIpXFxzKiIsazoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscjowLGM6W2UuSENNLGcse2NOOiJyZWdleHAiLGI6IihzfHRyfHkpLyhcXFxcLnxbXi9dKSovKFxcXFwufFteL10pKi9bYS16XSoiLHI6MTB9LHtjTjoicmVnZXhwIixiOiIobXxxcik/LyIsZToiL1thLXpdKiIsYzpbZS5CRV0scjowfV19LHtjTjoic3ViIixiV0s6dHJ1ZSxlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsazoic3ViIixyOjV9LHtjTjoib3BlcmF0b3IiLGI6Ii1cXHdcXGIiLHI6MH1dO2QuYz1jO2guY1sxXS5jPWM7cmV0dXJue2s6YSxjOmN9fShobGpzKTtobGpzLkxBTkdVQUdFUy5vYmplY3RpdmVjPWZ1bmN0aW9uKGEpe3ZhciBiPXtrZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNhdGNoIGV4cG9ydCBzaXplb2YgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgZm9yIHVuaW9uIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIG11dGFibGUgaWYgcHVibGljIGRvIHJldHVybiBnb3RvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiBhc20gY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSB0aHJvdyByZWdpc3RlciBleHBsaWNpdCBzaWduZWQgdHlwZW5hbWUgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHdjaGFyX3QgaW5saW5lIHJlYWRvbmx5IGFzc2lnbiBwcm9wZXJ0eSBzZWxmIHN5bmNocm9uaXplZCBlbmQgc3ludGhlc2l6ZSBpZCBvcHRpb25hbCByZXF1aXJlZCBub25hdG9taWMgc3VwZXIgdW5pY2hhciBmaW5hbGx5IGR5bmFtaWMgSUJPdXRsZXQgSUJBY3Rpb24gc2VsZWN0b3Igc3Ryb25nIHdlYWsgcmVhZG9ubHkiLGxpdGVyYWw6ImZhbHNlIHRydWUgRkFMU0UgVFJVRSBuaWwgWUVTIE5PIE5VTEwiLGJ1aWx0X2luOiJOU1N0cmluZyBOU0RpY3Rpb25hcnkgQ0dSZWN0IENHUG9pbnQgVUlCdXR0b24gVUlMYWJlbCBVSVRleHRWaWV3IFVJV2ViVmlldyBNS01hcFZpZXcgVUlTZWdtZW50ZWRDb250cm9sIE5TT2JqZWN0IFVJVGFibGVWaWV3RGVsZWdhdGUgVUlUYWJsZVZpZXdEYXRhU291cmNlIE5TVGhyZWFkIFVJQWN0aXZpdHlJbmRpY2F0b3IgVUlUYWJiYXIgVUlUb29sQmFyIFVJQmFyQnV0dG9uSXRlbSBVSUltYWdlVmlldyBOU0F1dG9yZWxlYXNlUG9vbCBVSVRhYmxlVmlldyBCT09MIE5TSW50ZWdlciBDR0Zsb2F0IE5TRXhjZXB0aW9uIE5TTG9nIE5TTXV0YWJsZVN0cmluZyBOU011dGFibGVBcnJheSBOU011dGFibGVEaWN0aW9uYXJ5IE5TVVJMIE5TSW5kZXhQYXRoIENHU2l6ZSBVSVRhYmxlVmlld0NlbGwgVUlWaWV3IFVJVmlld0NvbnRyb2xsZXIgVUlOYXZpZ2F0aW9uQmFyIFVJTmF2aWdhdGlvbkNvbnRyb2xsZXIgVUlUYWJCYXJDb250cm9sbGVyIFVJUG9wb3ZlckNvbnRyb2xsZXIgVUlQb3BvdmVyQ29udHJvbGxlckRlbGVnYXRlIFVJSW1hZ2UgTlNOdW1iZXIgVUlTZWFyY2hCYXIgTlNGZXRjaGVkUmVzdWx0c0NvbnRyb2xsZXIgTlNGZXRjaGVkUmVzdWx0c0NoYW5nZVR5cGUgVUlTY3JvbGxWaWV3IFVJU2Nyb2xsVmlld0RlbGVnYXRlIFVJRWRnZUluc2V0cyBVSUNvbG9yIFVJRm9udCBVSUFwcGxpY2F0aW9uIE5TTm90Rm91bmQgTlNOb3RpZmljYXRpb25DZW50ZXIgTlNOb3RpZmljYXRpb24gVUlMb2NhbE5vdGlmaWNhdGlvbiBOU0J1bmRsZSBOU0ZpbGVNYW5hZ2VyIE5TVGltZUludGVydmFsIE5TRGF0ZSBOU0NhbGVuZGFyIE5TVXNlckRlZmF1bHRzIFVJV2luZG93IE5TUmFuZ2UgTlNBcnJheSBOU0Vycm9yIE5TVVJMUmVxdWVzdCBOU1VSTENvbm5lY3Rpb24gVUlJbnRlcmZhY2VPcmllbnRhdGlvbiBNUE1vdmllUGxheWVyQ29udHJvbGxlciBkaXNwYXRjaF9vbmNlX3QgZGlzcGF0Y2hfcXVldWVfdCBkaXNwYXRjaF9zeW5jIGRpc3BhdGNoX2FzeW5jIGRpc3BhdGNoX29uY2UifTtyZXR1cm57azpiLGk6IjwvIixjOlthLkNMQ00sYS5DQkxDTE0sYS5DTk0sYS5RU00se2NOOiJzdHJpbmciLGI6IiciLGU6IlteXFxcXF0nIixpOiJbXlxcXFxdW14nXSJ9LHtjTjoicHJlcHJvY2Vzc29yIixiOiIjaW1wb3J0IixlOiIkIixjOlt7Y046InRpdGxlIixiOiciJyxlOiciJ30se2NOOiJ0aXRsZSIsYjoiPCIsZToiPiJ9XX0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQifSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxlOiIoe3wkKSIsazoiaW50ZXJmYWNlIGNsYXNzIHByb3RvY29sIGltcGxlbWVudGF0aW9uIixjOlt7Y046ImlkIixiOmEuVUlSfV19LHtjTjoidmFyaWFibGUiLGI6IlxcLiIrYS5VSVIscjowfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5jb2ZmZWVzY3JpcHQ9ZnVuY3Rpb24oYyl7dmFyIGI9e2tleXdvcmQ6ImluIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHRoZW4gdW5sZXNzIHVudGlsIGxvb3Agb2YgYnkgd2hlbiBhbmQgb3IgaXMgaXNudCBub3QiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgeWVzIG5vIG9uIG9mZiIscmVzZXJ2ZWQ6ImNhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgdm9pZCB3aXRoIGNvbnN0IGxldCBlbnVtIGV4cG9ydCBpbXBvcnQgbmF0aXZlIF9faGFzUHJvcCBfX2V4dGVuZHMgX19zbGljZSBfX2JpbmQgX19pbmRleE9mIixidWlsdF9pbjoibnBtIHJlcXVpcmUgY29uc29sZSBwcmludCBtb2R1bGUgZXhwb3J0cyBnbG9iYWwgd2luZG93IGRvY3VtZW50In07dmFyIGE9IltBLVphLXokX11bMC05QS1aYS16JF9dKiI7dmFyIGY9e2NOOiJ0aXRsZSIsYjphfTt2YXIgZT17Y046InN1YnN0IixiOiIjXFx7IixlOiJ9IixrOmIsfTt2YXIgZD1bYy5CTk0sYy5pbmhlcml0KGMuQ05NLHtzdGFydHM6e2U6IihcXHMqLyk/IixyOjB9fSkse2NOOiJzdHJpbmciLGI6IicnJyIsZToiJycnIixjOltjLkJFXX0se2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGM6W2MuQkVdLHI6MH0se2NOOiJzdHJpbmciLGI6JyIiIicsZTonIiIiJyxjOltjLkJFLGVdfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbYy5CRSxlXSxyOjB9LHtjTjoicmVnZXhwIixiOiIvLy8iLGU6Ii8vLyIsYzpbYy5IQ01dfSx7Y046InJlZ2V4cCIsYjoiLy9bZ2ltXSoiLHI6MH0se2NOOiJyZWdleHAiLGI6Ii9cXFMoXFxcXC58W15cXG5dKSo/L1tnaW1dKig/PVxcc3xcXFd8JCkifSx7Y046InByb3BlcnR5IixiOiJAIithfSx7YjoiYCIsZToiYCIsZUI6dHJ1ZSxlRTp0cnVlLHNMOiJqYXZhc2NyaXB0In1dO2UuYz1kO3JldHVybntrOmIsYzpkLmNvbmNhdChbe2NOOiJjb21tZW50IixiOiIjIyMiLGU6IiMjIyJ9LGMuSENNLHtjTjoiZnVuY3Rpb24iLGI6IigiK2ErIlxccyo9XFxzKik/KFxcKC4qXFwpKT9cXHMqWy09XT4iLGU6IlstPV0+IixyQjp0cnVlLGM6W2Yse2NOOiJwYXJhbXMiLGI6IlxcKCIsckI6dHJ1ZSxjOlt7YjovXCgvLGU6L1wpLyxrOmIsYzpbInNlbGYiXS5jb25jYXQoZCl9XX1dfSx7Y046ImNsYXNzIixiV0s6dHJ1ZSxrOiJjbGFzcyIsZToiJCIsaToiWzpcXFtcXF1dIixjOlt7YldLOnRydWUsazoiZXh0ZW5kcyIsZVc6dHJ1ZSxpOiI6IixjOltmXX0sZl19LHtjTjoiYXR0cmlidXRlIixiOmErIjoiLGU6IjoiLHJCOnRydWUsZUU6dHJ1ZX1dKX19KGhsanMpO2hsanMuTEFOR1VBR0VTLm5naW54PWZ1bmN0aW9uKGIpe3ZhciBjPVt7Y046InZhcmlhYmxlIixiOiJcXCRcXGQrIn0se2NOOiJ2YXJpYWJsZSIsYjoiXFwkeyIsZToifSJ9LHtjTjoidmFyaWFibGUiLGI6IltcXCRcXEBdIitiLlVJUn1dO3ZhciBhPXtlVzp0cnVlLGw6IlthLXovX10rIixrOntidWlsdF9pbjoib24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgc2VsZWN0IGJyZWFrIGxhc3QgcGVybWFuZW50IHJlZGlyZWN0IGtxdWV1ZSBydHNpZyBlcG9sbCBwb2xsIC9kZXYvcG9sbCJ9LHI6MCxpOiI9PiIsYzpbYi5IQ00se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6W2IuQkVdLmNvbmNhdChjKSxyOjB9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltiLkJFXS5jb25jYXQoYykscjowfSx7Y046InVybCIsYjoiKFthLXpdKyk6LyIsZToiXFxzIixlVzp0cnVlLGVFOnRydWV9LHtjTjoicmVnZXhwIixiOiJcXHNcXF4iLGU6Ilxcc3x7fDsiLHJFOnRydWUsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiflxcKj9cXHMrIixlOiJcXHN8e3w7IixyRTp0cnVlLGM6W2IuQkVdLmNvbmNhdChjKX0se2NOOiJyZWdleHAiLGI6IlxcKihcXC5bYS16XFwtXSspKyIsYzpbYi5CRV0uY29uY2F0KGMpfSx7Y046InJlZ2V4cCIsYjoiKFthLXpcXC1dK1xcLikrXFwqIixjOltiLkJFXS5jb25jYXQoYyl9LHtjTjoibnVtYmVyIixiOiJcXGJcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSg6XFxkezEsNX0pP1xcYiJ9LHtjTjoibnVtYmVyIixiOiJcXGJcXGQrW2tLbU1nR2RzaGR3eV0qXFxiIixyOjB9XS5jb25jYXQoYyl9O3JldHVybntjOltiLkhDTSx7YjpiLlVJUisiXFxzIixlOiI7fHsiLHJCOnRydWUsYzpbe2NOOiJ0aXRsZSIsYjpiLlVJUixzdGFydHM6YX1dLHI6MH1dLGk6IlteXFxzXFx9XSJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5qc29uPWZ1bmN0aW9uKGEpe3ZhciBlPXtsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwifTt2YXIgZD1bYS5RU00sYS5DTk1dO3ZhciBjPXtjTjoidmFsdWUiLGU6IiwiLGVXOnRydWUsZUU6dHJ1ZSxjOmQsazplfTt2YXIgYj17YjoieyIsZToifSIsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6J1xccyoiJyxlOiciXFxzKjpcXHMqJyxlQjp0cnVlLGVFOnRydWUsYzpbYS5CRV0saToiXFxuIixzdGFydHM6Y31dLGk6IlxcUyJ9O3ZhciBmPXtiOiJcXFsiLGU6IlxcXSIsYzpbYS5pbmhlcml0KGMse2NOOm51bGx9KV0saToiXFxTIn07ZC5zcGxpY2UoZC5sZW5ndGgsMCxiLGYpO3JldHVybntjOmQsazplLGk6IlxcUyJ9fShobGpzKTtobGpzLkxBTkdVQUdFUy5hcGFjaGU9ZnVuY3Rpb24oYSl7dmFyIGI9e2NOOiJudW1iZXIiLGI6IltcXCQlXVxcZCsifTtyZXR1cm57Y0k6dHJ1ZSxjOlthLkhDTSx7Y046InRhZyIsYjoiPC8/IixlOiI+In0se2NOOiJrZXl3b3JkIixiOi9cdysvLHI6MCxrOntjb21tb246Im9yZGVyIGRlbnkgYWxsb3cgc2V0ZW52IHJld3JpdGVydWxlIHJld3JpdGVlbmdpbmUgcmV3cml0ZWNvbmQgZG9jdW1lbnRyb290IHNldGhhbmRsZXIgZXJyb3Jkb2N1bWVudCBsb2FkbW9kdWxlIG9wdGlvbnMgaGVhZGVyIGxpc3RlbiBzZXJ2ZXJyb290IHNlcnZlcm5hbWUifSxzdGFydHM6e2U6LyQvLHI6MCxrOntsaXRlcmFsOiJvbiBvZmYgYWxsIn0sYzpbe2NOOiJzcWJyYWNrZXQiLGI6Ilxcc1xcWyIsZToiXFxdJCJ9LHtjTjoiY2JyYWNrZXQiLGI6IltcXCQlXVxceyIsZToiXFx9IixjOlsic2VsZiIsYl19LGIsYS5RU01dfX1dLGk6L1xTL319KGhsanMpO2hsanMuTEFOR1VBR0VTLmNwcD1mdW5jdGlvbihhKXt2YXIgYj17a2V5d29yZDoiZmFsc2UgaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjYXRjaCBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBzdHJ1Y3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSB1bnNpZ25lZCBsb25nIHRocm93IHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgZG8gcmV0dXJuIGdvdG8gYXV0byB2b2lkIGVudW0gZWxzZSBicmVhayBuZXcgZXh0ZXJuIHVzaW5nIHRydWUgY2xhc3MgYXNtIGNhc2UgdHlwZWlkIHNob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSBkZWxldGUgYWxpZ25vZiBjaGFyMTZfdCBjaGFyMzJfdCBjb25zdGV4cHIgZGVjbHR5cGUgbm9leGNlcHQgbnVsbHB0ciBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBfQm9vbCBjb21wbGV4IixidWlsdF9pbjoic3RkIHN0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RyaW5nc3RyZWFtIGlzdHJpbmdzdHJlYW0gb3N0cmluZ3N0cmVhbSBhdXRvX3B0ciBkZXF1ZSBsaXN0IHF1ZXVlIHN0YWNrIHZlY3RvciBtYXAgc2V0IGJpdHNldCBtdWx0aXNldCBtdWx0aW1hcCB1bm9yZGVyZWRfc2V0IHVub3JkZXJlZF9tYXAgdW5vcmRlcmVkX211bHRpc2V0IHVub3JkZXJlZF9tdWx0aW1hcCBhcnJheSBzaGFyZWRfcHRyIn07cmV0dXJue2s6YixpOiI8LyIsYzpbYS5DTENNLGEuQ0JMQ0xNLGEuUVNNLHtjTjoic3RyaW5nIixiOiInXFxcXD8uIixlOiInIixpOiIuIn0se2NOOiJudW1iZXIiLGI6IlxcYihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKSh1fFV8bHxMfHVsfFVMfGZ8RikifSxhLkNOTSx7Y046InByZXByb2Nlc3NvciIsYjoiIyIsZToiJCIsYzpbe2I6IjwiLGU6Ij4iLGk6IlxcbiJ9LGEuQ0xDTV19LHtjTjoic3RsX2NvbnRhaW5lciIsYjoiXFxiKGRlcXVlfGxpc3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5KVxccyo8IixlOiI+IixrOmIscjoxMCxjOlsic2VsZiJdfV19fShobGpzKTtobGpzLkxBTkdVQUdFUy5tYWtlZmlsZT1mdW5jdGlvbihhKXt2YXIgYj17Y046InZhcmlhYmxlIixiOi9cJFwoLyxlOi9cKS8sYzphLkJFfTtyZXR1cm57YzpbYS5IQ00se2I6L15cdytccypcVyo9LyxyQjp0cnVlLHI6MCxzdGFydHM6e2NOOiJjb25zdGFudCIsZTovXHMqXFcqPS8sZUU6dHJ1ZSxzdGFydHM6e2U6LyQvLHI6MCxjOltiXSx9fX0se2NOOiJ0aXRsZSIsYjovXltcd10rOlxzKiQvfSx7Y046InBob255IixiOi9eXC5QSE9OWTovLGU6LyQvLGs6Ii5QSE9OWSIsbDovW1wuXHddKy99LHtiOi9eXHQrLyxlOi8kLyxjOlthLlFTTSxiXX1dfX0oaGxqcyk7aGxqcy5MQU5HVUFHRVMuZ289ZnVuY3Rpb24oYSl7dmFyIGI9e2tleXdvcmQ6ImJyZWFrIGRlZmF1bHQgZnVuYyBpbnRlcmZhY2Ugc2VsZWN0IGNhc2UgbWFwIHN0cnVjdCBjaGFuIGVsc2UgZ290byBwYWNrYWdlIHN3aXRjaCBjb25zdCBmYWxsdGhyb3VnaCBpZiByYW5nZSB0eXBlIGNvbnRpbnVlIGZvciBpbXBvcnQgcmV0dXJuIHZhciBnbyBkZWZlciIsY29uc3RhbnQ6InRydWUgZmFsc2UgaW90YSBuaWwiLHR5cGVuYW1lOiJib29sIGJ5dGUgY29tcGxleDY0IGNvbXBsZXgxMjggZmxvYXQzMiBmbG9hdDY0IGludDggaW50MTYgaW50MzIgaW50NjQgc3RyaW5nIHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0IGludCB1aW50IHVpbnRwdHIgcnVuZSIsYnVpbHRfaW46ImFwcGVuZCBjYXAgY2xvc2UgY29tcGxleCBjb3B5IGltYWcgbGVuIG1ha2UgbmV3IHBhbmljIHByaW50IHByaW50bG4gcmVhbCByZWNvdmVyIGRlbGV0ZSJ9O3JldHVybntrOmIsaToiPC8iLGM6W2EuQ0xDTSxhLkNCTENMTSxhLlFTTSx7Y046InN0cmluZyIsYjoiJyIsZToiW15cXFxcXSciLHI6MH0se2NOOiJzdHJpbmciLGI6ImAiLGU6ImAifSx7Y046Im51bWJlciIsYjoiW15hLXpBLVpfMC05XShcXC18XFwrKT9cXGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHMpKFxcK3xcXC0pP1xcZCspPyIscjowfSxhLkNOTV19fShobGpzKTtQSwcIFVltTvZ1AAD2dQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAc3RhdGljXGxpYlxqcXVlcnkuZm9ybS5taW4uanMvKiEKICogalF1ZXJ5IEZvcm0gUGx1Z2luCiAqIHZlcnNpb246IDMuNDYuMC0yMDEzLjExLjIxCiAqIFJlcXVpcmVzIGpRdWVyeSB2MS41IG9yIGxhdGVyCiAqIENvcHlyaWdodCAoYykgMjAxMyBNLiBBbHN1cAogKiBFeGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBhdDogaHR0cDovL21hbHN1cC5jb20vanF1ZXJ5L2Zvcm0vCiAqIFByb2plY3QgcmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL21hbHN1cC9mb3JtCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKiBodHRwczovL2dpdGh1Yi5jb20vbWFsc3VwL2Zvcm0jY29weXJpZ2h0LWFuZC1saWNlbnNlCiAqLwooZnVuY3Rpb24oYSl7aWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbImpxdWVyeSJdLGEpfWVsc2V7YSgodHlwZW9mKGpRdWVyeSkhPSJ1bmRlZmluZWQiKT9qUXVlcnk6d2luZG93LlplcHRvKX19KGZ1bmN0aW9uKGYpe3ZhciBjPXt9O2MuZmlsZWFwaT1mKCI8aW5wdXQgdHlwZT0nZmlsZScvPiIpLmdldCgwKS5maWxlcyE9PXVuZGVmaW5lZDtjLmZvcm1kYXRhPXdpbmRvdy5Gb3JtRGF0YSE9PXVuZGVmaW5lZDt2YXIgZT0hIWYuZm4ucHJvcDtmLmZuLmF0dHIyPWZ1bmN0aW9uKCl7aWYoIWUpe3JldHVybiB0aGlzLmF0dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBnPXRoaXMucHJvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoKGcmJmcuanF1ZXJ5KXx8dHlwZW9mIGc9PT0ic3RyaW5nIil7cmV0dXJuIGd9cmV0dXJuIHRoaXMuYXR0ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2YuZm4uYWpheFN1Ym1pdD1mdW5jdGlvbihqKXtpZighdGhpcy5sZW5ndGgpe2QoImFqYXhTdWJtaXQ6IHNraXBwaW5nIHN1Ym1pdCBwcm9jZXNzIC0gbm8gZWxlbWVudCBzZWxlY3RlZCIpO3JldHVybiB0aGlzfXZhciBpLEMsbSxvPXRoaXM7aWYodHlwZW9mIGo9PSJmdW5jdGlvbiIpe2o9e3N1Y2Nlc3M6an19ZWxzZXtpZihqPT09dW5kZWZpbmVkKXtqPXt9fX1pPWoudHlwZXx8dGhpcy5hdHRyMigibWV0aG9kIik7Qz1qLnVybHx8dGhpcy5hdHRyMigiYWN0aW9uIik7bT0odHlwZW9mIEM9PT0ic3RyaW5nIik/Zi50cmltKEMpOiIiO209bXx8d2luZG93LmxvY2F0aW9uLmhyZWZ8fCIiO2lmKG0pe209KG0ubWF0Y2goL14oW14jXSspLyl8fFtdKVsxXX1qPWYuZXh0ZW5kKHRydWUse3VybDptLHN1Y2Nlc3M6Zi5hamF4U2V0dGluZ3Muc3VjY2Vzcyx0eXBlOml8fGYuYWpheFNldHRpbmdzLnR5cGUsaWZyYW1lU3JjOi9eaHR0cHMvaS50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmfHwiIik/ImphdmFzY3JpcHQ6ZmFsc2UiOiJhYm91dDpibGFuayJ9LGopO3ZhciB1PXt9O3RoaXMudHJpZ2dlcigiZm9ybS1wcmUtc2VyaWFsaXplIixbdGhpcyxqLHVdKTtpZih1LnZldG8pe2QoImFqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tcHJlLXNlcmlhbGl6ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9aWYoai5iZWZvcmVTZXJpYWxpemUmJmouYmVmb3JlU2VyaWFsaXplKHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVNlcmlhbGl6ZSBjYWxsYmFjayIpO3JldHVybiB0aGlzfXZhciBuPWoudHJhZGl0aW9uYWw7aWYobj09PXVuZGVmaW5lZCl7bj1mLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbH12YXIgcz1bXTt2YXIgRSxGPXRoaXMuZm9ybVRvQXJyYXkoai5zZW1hbnRpYyxzKTtpZihqLmRhdGEpe2ouZXh0cmFEYXRhPWouZGF0YTtFPWYucGFyYW0oai5kYXRhLG4pfWlmKGouYmVmb3JlU3VibWl0JiZqLmJlZm9yZVN1Ym1pdChGLHRoaXMsaik9PT1mYWxzZSl7ZCgiYWpheFN1Ym1pdDogc3VibWl0IGFib3J0ZWQgdmlhIGJlZm9yZVN1Ym1pdCBjYWxsYmFjayIpO3JldHVybiB0aGlzfXRoaXMudHJpZ2dlcigiZm9ybS1zdWJtaXQtdmFsaWRhdGUiLFtGLHRoaXMsaix1XSk7aWYodS52ZXRvKXtkKCJhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXN1Ym1pdC12YWxpZGF0ZSB0cmlnZ2VyIik7cmV0dXJuIHRoaXN9dmFyIHk9Zi5wYXJhbShGLG4pO2lmKEUpe3k9KHk/KHkrIiYiK0UpOkUpfWlmKGoudHlwZS50b1VwcGVyQ2FzZSgpPT0iR0VUIil7ai51cmwrPShqLnVybC5pbmRleE9mKCI/Iik+PTA/IiYiOiI/IikreTtqLmRhdGE9bnVsbH1lbHNle2ouZGF0YT15fXZhciBIPVtdO2lmKGoucmVzZXRGb3JtKXtILnB1c2goZnVuY3Rpb24oKXtvLnJlc2V0Rm9ybSgpfSl9aWYoai5jbGVhckZvcm0pe0gucHVzaChmdW5jdGlvbigpe28uY2xlYXJGb3JtKGouaW5jbHVkZUhpZGRlbil9KX1pZighai5kYXRhVHlwZSYmai50YXJnZXQpe3ZhciBsPWouc3VjY2Vzc3x8ZnVuY3Rpb24oKXt9O0gucHVzaChmdW5jdGlvbihxKXt2YXIgaz1qLnJlcGxhY2VUYXJnZXQ/InJlcGxhY2VXaXRoIjoiaHRtbCI7ZihqLnRhcmdldClba10ocSkuZWFjaChsLGFyZ3VtZW50cyl9KX1lbHNle2lmKGouc3VjY2Vzcyl7SC5wdXNoKGouc3VjY2Vzcyl9fWouc3VjY2Vzcz1mdW5jdGlvbihLLHEsTCl7dmFyIEo9ai5jb250ZXh0fHx0aGlzO2Zvcih2YXIgST0wLGs9SC5sZW5ndGg7STxrO0krKyl7SFtJXS5hcHBseShKLFtLLHEsTHx8byxvXSl9fTtpZihqLmVycm9yKXt2YXIgej1qLmVycm9yO2ouZXJyb3I9ZnVuY3Rpb24oSixrLHEpe3ZhciBJPWouY29udGV4dHx8dGhpczt6LmFwcGx5KEksW0osayxxLG9dKX19aWYoai5jb21wbGV0ZSl7dmFyIGg9ai5jb21wbGV0ZTtqLmNvbXBsZXRlPWZ1bmN0aW9uKEksayl7dmFyIHE9ai5jb250ZXh0fHx0aGlzO2guYXBwbHkocSxbSSxrLG9dKX19dmFyIEQ9ZigiaW5wdXRbdHlwZT1maWxlXTplbmFibGVkIix0aGlzKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzKS52YWwoKSE9PSIifSk7dmFyIHA9RC5sZW5ndGg+MDt2YXIgQj0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7dmFyIHg9KG8uYXR0cigiZW5jdHlwZSIpPT1CfHxvLmF0dHIoImVuY29kaW5nIik9PUIpO3ZhciB3PWMuZmlsZWFwaSYmYy5mb3JtZGF0YTtkKCJmaWxlQVBJIDoiK3cpO3ZhciByPShwfHx4KSYmIXc7dmFyIHY7aWYoai5pZnJhbWUhPT1mYWxzZSYmKGouaWZyYW1lfHxyKSl7aWYoai5jbG9zZUtlZXBBbGl2ZSl7Zi5nZXQoai5jbG9zZUtlZXBBbGl2ZSxmdW5jdGlvbigpe3Y9RyhGKX0pfWVsc2V7dj1HKEYpfX1lbHNle2lmKChwfHx4KSYmdyl7dj10KEYpfWVsc2V7dj1mLmFqYXgoail9fW8ucmVtb3ZlRGF0YSgianF4aHIiKS5kYXRhKCJqcXhociIsdik7Zm9yKHZhciBBPTA7QTxzLmxlbmd0aDtBKyspe3NbQV09bnVsbH10aGlzLnRyaWdnZXIoImZvcm0tc3VibWl0LW5vdGlmeSIsW3RoaXMsal0pO3JldHVybiB0aGlzO2Z1bmN0aW9uIGcoSyl7dmFyIEw9Zi5wYXJhbShLLGoudHJhZGl0aW9uYWwpLnNwbGl0KCImIik7dmFyIHE9TC5sZW5ndGg7dmFyIGs9W107dmFyIEosSTtmb3IoSj0wO0o8cTtKKyspe0xbSl09TFtKXS5yZXBsYWNlKC9cKy9nLCIgIik7ST1MW0pdLnNwbGl0KCI9Iik7ay5wdXNoKFtkZWNvZGVVUklDb21wb25lbnQoSVswXSksZGVjb2RlVVJJQ29tcG9uZW50KElbMV0pXSl9cmV0dXJuIGt9ZnVuY3Rpb24gdChxKXt2YXIgaz1uZXcgRm9ybURhdGEoKTtmb3IodmFyIEk9MDtJPHEubGVuZ3RoO0krKyl7ay5hcHBlbmQocVtJXS5uYW1lLHFbSV0udmFsdWUpfWlmKGouZXh0cmFEYXRhKXt2YXIgTD1nKGouZXh0cmFEYXRhKTtmb3IoST0wO0k8TC5sZW5ndGg7SSsrKXtpZihMW0ldKXtrLmFwcGVuZChMW0ldWzBdLExbSV1bMV0pfX19ai5kYXRhPW51bGw7dmFyIEs9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqLHtjb250ZW50VHlwZTpmYWxzZSxwcm9jZXNzRGF0YTpmYWxzZSxjYWNoZTpmYWxzZSx0eXBlOml8fCJQT1NUIn0pO2lmKGoudXBsb2FkUHJvZ3Jlc3Mpe0sueGhyPWZ1bmN0aW9uKCl7dmFyIE09Zi5hamF4U2V0dGluZ3MueGhyKCk7aWYoTS51cGxvYWQpe00udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihRKXt2YXIgUD0wO3ZhciBOPVEubG9hZGVkfHxRLnBvc2l0aW9uO3ZhciBPPVEudG90YWw7aWYoUS5sZW5ndGhDb21wdXRhYmxlKXtQPU1hdGguY2VpbChOL08qMTAwKX1qLnVwbG9hZFByb2dyZXNzKFEsTixPLFApfSxmYWxzZSl9cmV0dXJuIE19fUsuZGF0YT1udWxsO3ZhciBKPUsuYmVmb3JlU2VuZDtLLmJlZm9yZVNlbmQ9ZnVuY3Rpb24oTixNKXtpZihqLmZvcm1EYXRhKXtNLmRhdGE9ai5mb3JtRGF0YX1lbHNle00uZGF0YT1rfWlmKEope0ouY2FsbCh0aGlzLE4sTSl9fTtyZXR1cm4gZi5hamF4KEspfWZ1bmN0aW9uIEcoYWYpe3ZhciBMPW9bMF0sSyxhYixWLGFkLFksTixRLE8sUCxaLGFjLFQ7dmFyIGFpPWYuRGVmZXJyZWQoKTthaS5hYm9ydD1mdW5jdGlvbihhail7Ty5hYm9ydChhail9O2lmKGFmKXtmb3IoYWI9MDthYjxzLmxlbmd0aDthYisrKXtLPWYoc1thYl0pO2lmKGUpe0sucHJvcCgiZGlzYWJsZWQiLGZhbHNlKX1lbHNle0sucmVtb3ZlQXR0cigiZGlzYWJsZWQiKX19fVY9Zi5leHRlbmQodHJ1ZSx7fSxmLmFqYXhTZXR0aW5ncyxqKTtWLmNvbnRleHQ9Vi5jb250ZXh0fHxWO1k9ImpxRm9ybUlPIisobmV3IERhdGUoKS5nZXRUaW1lKCkpO2lmKFYuaWZyYW1lVGFyZ2V0KXtOPWYoVi5pZnJhbWVUYXJnZXQpO1o9Ti5hdHRyMigibmFtZSIpO2lmKCFaKXtOLmF0dHIyKCJuYW1lIixZKX1lbHNle1k9Wn19ZWxzZXtOPWYoJzxpZnJhbWUgbmFtZT0iJytZKyciIHNyYz0iJytWLmlmcmFtZVNyYysnIiAvPicpO04uY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiLTEwMDBweCIsbGVmdDoiLTEwMDBweCJ9KX1RPU5bMF07Tz17YWJvcnRlZDowLHJlc3BvbnNlVGV4dDpudWxsLHJlc3BvbnNlWE1MOm51bGwsc3RhdHVzOjAsc3RhdHVzVGV4dDoibi9hIixnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXt9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKCl7fSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKCl7fSxhYm9ydDpmdW5jdGlvbihhail7dmFyIGFrPShhaj09PSJ0aW1lb3V0Ij8idGltZW91dCI6ImFib3J0ZWQiKTtkKCJhYm9ydGluZyB1cGxvYWQuLi4gIithayk7dGhpcy5hYm9ydGVkPTE7dHJ5e2lmKFEuY29udGVudFdpbmRvdy5kb2N1bWVudC5leGVjQ29tbWFuZCl7US5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kKCJTdG9wIil9fWNhdGNoKGFsKXt9Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKTtPLmVycm9yPWFrO2lmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhayxhail9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFrXSl9aWYoVi5jb21wbGV0ZSl7Vi5jb21wbGV0ZS5jYWxsKFYuY29udGV4dCxPLGFrKX19fTthZD1WLmdsb2JhbDtpZihhZCYmMD09PWYuYWN0aXZlKyspe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iil9aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheFNlbmQiLFtPLFZdKX1pZihWLmJlZm9yZVNlbmQmJlYuYmVmb3JlU2VuZC5jYWxsKFYuY29udGV4dCxPLFYpPT09ZmFsc2Upe2lmKFYuZ2xvYmFsKXtmLmFjdGl2ZS0tfWFpLnJlamVjdCgpO3JldHVybiBhaX1pZihPLmFib3J0ZWQpe2FpLnJlamVjdCgpO3JldHVybiBhaX1QPUwuY2xrO2lmKFApe1o9UC5uYW1lO2lmKFomJiFQLmRpc2FibGVkKXtWLmV4dHJhRGF0YT1WLmV4dHJhRGF0YXx8e307Vi5leHRyYURhdGFbWl09UC52YWx1ZTtpZihQLnR5cGU9PSJpbWFnZSIpe1YuZXh0cmFEYXRhW1orIi54Il09TC5jbGtfeDtWLmV4dHJhRGF0YVtaKyIueSJdPUwuY2xrX3l9fX12YXIgVT0xO3ZhciBSPTI7ZnVuY3Rpb24gUyhhbCl7dmFyIGFrPW51bGw7dHJ5e2lmKGFsLmNvbnRlbnRXaW5kb3cpe2FrPWFsLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnR9fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50V2luZG93IGRvY3VtZW50OiAiK2FqKX1pZihhayl7cmV0dXJuIGFrfXRyeXthaz1hbC5jb250ZW50RG9jdW1lbnQ/YWwuY29udGVudERvY3VtZW50OmFsLmRvY3VtZW50fWNhdGNoKGFqKXtkKCJjYW5ub3QgZ2V0IGlmcmFtZS5jb250ZW50RG9jdW1lbnQ6ICIrYWopO2FrPWFsLmRvY3VtZW50fXJldHVybiBha312YXIgSj1mKCJtZXRhW25hbWU9Y3NyZi10b2tlbl0iKS5hdHRyKCJjb250ZW50Iik7dmFyIEk9ZigibWV0YVtuYW1lPWNzcmYtcGFyYW1dIikuYXR0cigiY29udGVudCIpO2lmKEkmJkope1YuZXh0cmFEYXRhPVYuZXh0cmFEYXRhfHx7fTtWLmV4dHJhRGF0YVtJXT1KfWZ1bmN0aW9uIGFhKCl7dmFyIGFsPW8uYXR0cjIoInRhcmdldCIpLGFqPW8uYXR0cjIoImFjdGlvbiIpO0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLFkpO2lmKCFpfHwvcG9zdC9pLnRlc3QoaSkpe0wuc2V0QXR0cmlidXRlKCJtZXRob2QiLCJQT1NUIil9aWYoYWohPVYudXJsKXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixWLnVybCl9aWYoIVYuc2tpcEVuY29kaW5nT3ZlcnJpZGUmJighaXx8L3Bvc3QvaS50ZXN0KGkpKSl7by5hdHRyKHtlbmNvZGluZzoibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsZW5jdHlwZToibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9KX1pZihWLnRpbWVvdXQpe1Q9c2V0VGltZW91dChmdW5jdGlvbigpe2FjPXRydWU7WChVKX0sVi50aW1lb3V0KX1mdW5jdGlvbiBhbSgpe3RyeXt2YXIgYXE9UyhRKS5yZWFkeVN0YXRlO2QoInN0YXRlID0gIithcSk7aWYoYXEmJmFxLnRvTG93ZXJDYXNlKCk9PSJ1bmluaXRpYWxpemVkIil7c2V0VGltZW91dChhbSw1MCl9fWNhdGNoKGFyKXtkKCJTZXJ2ZXIgYWJvcnQ6ICIsYXIsIiAoIixhci5uYW1lLCIpIik7WChSKTtpZihUKXtjbGVhclRpbWVvdXQoVCl9VD11bmRlZmluZWR9fXZhciBhaz1bXTt0cnl7aWYoVi5leHRyYURhdGEpe2Zvcih2YXIgYXAgaW4gVi5leHRyYURhdGEpe2lmKFYuZXh0cmFEYXRhLmhhc093blByb3BlcnR5KGFwKSl7aWYoZi5pc1BsYWluT2JqZWN0KFYuZXh0cmFEYXRhW2FwXSkmJlYuZXh0cmFEYXRhW2FwXS5oYXNPd25Qcm9wZXJ0eSgibmFtZSIpJiZWLmV4dHJhRGF0YVthcF0uaGFzT3duUHJvcGVydHkoInZhbHVlIikpe2FrLnB1c2goZignPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJytWLmV4dHJhRGF0YVthcF0ubmFtZSsnIj4nKS52YWwoVi5leHRyYURhdGFbYXBdLnZhbHVlKS5hcHBlbmRUbyhMKVswXSl9ZWxzZXthay5wdXNoKGYoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrYXArJyI+JykudmFsKFYuZXh0cmFEYXRhW2FwXSkuYXBwZW5kVG8oTClbMF0pfX19fWlmKCFWLmlmcmFtZVRhcmdldCl7Ti5hcHBlbmRUbygiYm9keSIpfWlmKFEuYXR0YWNoRXZlbnQpe1EuYXR0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXNldFRpbWVvdXQoYW0sMTUpO3RyeXtMLnN1Ym1pdCgpfWNhdGNoKGFuKXt2YXIgYW89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLnN1Ym1pdDthby5hcHBseShMKX19ZmluYWxseXtMLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixhaik7aWYoYWwpe0wuc2V0QXR0cmlidXRlKCJ0YXJnZXQiLGFsKX1lbHNle28ucmVtb3ZlQXR0cigidGFyZ2V0Iil9ZihhaykucmVtb3ZlKCl9fWlmKFYuZm9yY2VTeW5jKXthYSgpfWVsc2V7c2V0VGltZW91dChhYSwxMCl9dmFyIGFnLGFoLGFlPTUwLE07ZnVuY3Rpb24gWChhcCl7aWYoTy5hYm9ydGVkfHxNKXtyZXR1cm59YWg9UyhRKTtpZighYWgpe2QoImNhbm5vdCBhY2Nlc3MgcmVzcG9uc2UgZG9jdW1lbnQiKTthcD1SfWlmKGFwPT09VSYmTyl7Ty5hYm9ydCgidGltZW91dCIpO2FpLnJlamVjdChPLCJ0aW1lb3V0Iik7cmV0dXJufWVsc2V7aWYoYXA9PVImJk8pe08uYWJvcnQoInNlcnZlciBhYm9ydCIpO2FpLnJlamVjdChPLCJlcnJvciIsInNlcnZlciBhYm9ydCIpO3JldHVybn19aWYoIWFofHxhaC5sb2NhdGlvbi5ocmVmPT1WLmlmcmFtZVNyYyl7aWYoIWFjKXtyZXR1cm59fWlmKFEuZGV0YWNoRXZlbnQpe1EuZGV0YWNoRXZlbnQoIm9ubG9hZCIsWCl9ZWxzZXtRLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLFgsZmFsc2UpfXZhciBhbj0ic3VjY2VzcyIsYXI7dHJ5e2lmKGFjKXt0aHJvdyJ0aW1lb3V0In12YXIgYW09Vi5kYXRhVHlwZT09InhtbCJ8fGFoLlhNTERvY3VtZW50fHxmLmlzWE1MRG9jKGFoKTtkKCJpc1htbD0iK2FtKTtpZighYW0mJndpbmRvdy5vcGVyYSYmKGFoLmJvZHk9PT1udWxsfHwhYWguYm9keS5pbm5lckhUTUwpKXtpZigtLWFlKXtkKCJyZXF1ZWluZyBvbkxvYWQgY2FsbGJhY2ssIERPTSBub3QgYXZhaWxhYmxlIik7c2V0VGltZW91dChYLDI1MCk7cmV0dXJufX12YXIgYXQ9YWguYm9keT9haC5ib2R5OmFoLmRvY3VtZW50RWxlbWVudDtPLnJlc3BvbnNlVGV4dD1hdD9hdC5pbm5lckhUTUw6bnVsbDtPLnJlc3BvbnNlWE1MPWFoLlhNTERvY3VtZW50P2FoLlhNTERvY3VtZW50OmFoO2lmKGFtKXtWLmRhdGFUeXBlPSJ4bWwifU8uZ2V0UmVzcG9uc2VIZWFkZXI9ZnVuY3Rpb24oYXcpe3ZhciBhdj17ImNvbnRlbnQtdHlwZSI6Vi5kYXRhVHlwZX07cmV0dXJuIGF2W2F3LnRvTG93ZXJDYXNlKCldfTtpZihhdCl7Ty5zdGF0dXM9TnVtYmVyKGF0LmdldEF0dHJpYnV0ZSgic3RhdHVzIikpfHxPLnN0YXR1cztPLnN0YXR1c1RleHQ9YXQuZ2V0QXR0cmlidXRlKCJzdGF0dXNUZXh0Iil8fE8uc3RhdHVzVGV4dH12YXIgYWo9KFYuZGF0YVR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpO3ZhciBhcT0vKGpzb258c2NyaXB0fHRleHQpLy50ZXN0KGFqKTtpZihhcXx8Vi50ZXh0YXJlYSl7dmFyIGFvPWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZXh0YXJlYSIpWzBdO2lmKGFvKXtPLnJlc3BvbnNlVGV4dD1hby52YWx1ZTtPLnN0YXR1cz1OdW1iZXIoYW8uZ2V0QXR0cmlidXRlKCJzdGF0dXMiKSl8fE8uc3RhdHVzO08uc3RhdHVzVGV4dD1hby5nZXRBdHRyaWJ1dGUoInN0YXR1c1RleHQiKXx8Ty5zdGF0dXNUZXh0fWVsc2V7aWYoYXEpe3ZhciBhaz1haC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIilbMF07dmFyIGF1PWFoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoYWspe08ucmVzcG9uc2VUZXh0PWFrLnRleHRDb250ZW50P2FrLnRleHRDb250ZW50OmFrLmlubmVyVGV4dH1lbHNle2lmKGF1KXtPLnJlc3BvbnNlVGV4dD1hdS50ZXh0Q29udGVudD9hdS50ZXh0Q29udGVudDphdS5pbm5lclRleHR9fX19fWVsc2V7aWYoYWo9PSJ4bWwiJiYhTy5yZXNwb25zZVhNTCYmTy5yZXNwb25zZVRleHQpe08ucmVzcG9uc2VYTUw9VyhPLnJlc3BvbnNlVGV4dCl9fXRyeXthZz1rKE8sYWosVil9Y2F0Y2goYWwpe2FuPSJwYXJzZXJlcnJvciI7Ty5lcnJvcj1hcj0oYWx8fGFuKX19Y2F0Y2goYWwpe2QoImVycm9yIGNhdWdodDogIixhbCk7YW49ImVycm9yIjtPLmVycm9yPWFyPShhbHx8YW4pfWlmKE8uYWJvcnRlZCl7ZCgidXBsb2FkIGFib3J0ZWQiKTthbj1udWxsfWlmKE8uc3RhdHVzKXthbj0oTy5zdGF0dXM+PTIwMCYmTy5zdGF0dXM8MzAwfHxPLnN0YXR1cz09PTMwNCk/InN1Y2Nlc3MiOiJlcnJvciJ9aWYoYW49PT0ic3VjY2VzcyIpe2lmKFYuc3VjY2Vzcyl7Vi5zdWNjZXNzLmNhbGwoVi5jb250ZXh0LGFnLCJzdWNjZXNzIixPKX1haS5yZXNvbHZlKE8ucmVzcG9uc2VUZXh0LCJzdWNjZXNzIixPKTtpZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4U3VjY2VzcyIsW08sVl0pfX1lbHNle2lmKGFuKXtpZihhcj09PXVuZGVmaW5lZCl7YXI9Ty5zdGF0dXNUZXh0fWlmKFYuZXJyb3Ipe1YuZXJyb3IuY2FsbChWLmNvbnRleHQsTyxhbixhcil9YWkucmVqZWN0KE8sImVycm9yIixhcik7aWYoYWQpe2YuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbTyxWLGFyXSl9fX1pZihhZCl7Zi5ldmVudC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtPLFZdKX1pZihhZCYmIS0tZi5hY3RpdmUpe2YuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKX1pZihWLmNvbXBsZXRlKXtWLmNvbXBsZXRlLmNhbGwoVi5jb250ZXh0LE8sYW4pfU09dHJ1ZTtpZihWLnRpbWVvdXQpe2NsZWFyVGltZW91dChUKX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIVYuaWZyYW1lVGFyZ2V0KXtOLnJlbW92ZSgpfWVsc2V7Ti5hdHRyKCJzcmMiLFYuaWZyYW1lU3JjKX1PLnJlc3BvbnNlWE1MPW51bGx9LDEwMCl9dmFyIFc9Zi5wYXJzZVhNTHx8ZnVuY3Rpb24oYWosYWspe2lmKHdpbmRvdy5BY3RpdmVYT2JqZWN0KXthaz1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpO2FrLmFzeW5jPSJmYWxzZSI7YWsubG9hZFhNTChhail9ZWxzZXthaz0obmV3IERPTVBhcnNlcigpKS5wYXJzZUZyb21TdHJpbmcoYWosInRleHQveG1sIil9cmV0dXJuKGFrJiZhay5kb2N1bWVudEVsZW1lbnQmJmFrLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSE9InBhcnNlcmVycm9yIik/YWs6bnVsbH07dmFyIHE9Zi5wYXJzZUpTT058fGZ1bmN0aW9uKGFqKXtyZXR1cm4gd2luZG93WyJldmFsIl0oIigiK2FqKyIpIil9O3ZhciBrPWZ1bmN0aW9uKGFvLGFtLGFsKXt2YXIgYWs9YW8uZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixhaj1hbT09PSJ4bWwifHwhYW0mJmFrLmluZGV4T2YoInhtbCIpPj0wLGFuPWFqP2FvLnJlc3BvbnNlWE1MOmFvLnJlc3BvbnNlVGV4dDtpZihhaiYmYW4uZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lPT09InBhcnNlcmVycm9yIil7aWYoZi5lcnJvcil7Zi5lcnJvcigicGFyc2VyZXJyb3IiKX19aWYoYWwmJmFsLmRhdGFGaWx0ZXIpe2FuPWFsLmRhdGFGaWx0ZXIoYW4sYW0pfWlmKHR5cGVvZiBhbj09PSJzdHJpbmciKXtpZihhbT09PSJqc29uInx8IWFtJiZhay5pbmRleE9mKCJqc29uIik+PTApe2FuPXEoYW4pfWVsc2V7aWYoYW09PT0ic2NyaXB0Inx8IWFtJiZhay5pbmRleE9mKCJqYXZhc2NyaXB0Iik+PTApe2YuZ2xvYmFsRXZhbChhbil9fX1yZXR1cm4gYW59O3JldHVybiBhaX19O2YuZm4uYWpheEZvcm09ZnVuY3Rpb24oZyl7Zz1nfHx7fTtnLmRlbGVnYXRpb249Zy5kZWxlZ2F0aW9uJiZmLmlzRnVuY3Rpb24oZi5mbi5vbik7aWYoIWcuZGVsZWdhdGlvbiYmdGhpcy5sZW5ndGg9PT0wKXt2YXIgaD17czp0aGlzLnNlbGVjdG9yLGM6dGhpcy5jb250ZXh0fTtpZighZi5pc1JlYWR5JiZoLnMpe2QoIkRPTSBub3QgcmVhZHksIHF1ZXVpbmcgYWpheEZvcm0iKTtmKGZ1bmN0aW9uKCl7ZihoLnMsaC5jKS5hamF4Rm9ybShnKX0pO3JldHVybiB0aGlzfWQoInRlcm1pbmF0aW5nOyB6ZXJvIGVsZW1lbnRzIGZvdW5kIGJ5IHNlbGVjdG9yIisoZi5pc1JlYWR5PyIiOiIgKERPTSBub3QgcmVhZHkpIikpO3JldHVybiB0aGlzfWlmKGcuZGVsZWdhdGlvbil7Zihkb2N1bWVudCkub2ZmKCJzdWJtaXQuZm9ybS1wbHVnaW4iLHRoaXMuc2VsZWN0b3IsYikub2ZmKCJjbGljay5mb3JtLXBsdWdpbiIsdGhpcy5zZWxlY3RvcixhKS5vbigic3VibWl0LmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYikub24oImNsaWNrLmZvcm0tcGx1Z2luIix0aGlzLnNlbGVjdG9yLGcsYSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuYWpheEZvcm1VbmJpbmQoKS5iaW5kKCJzdWJtaXQuZm9ybS1wbHVnaW4iLGcsYikuYmluZCgiY2xpY2suZm9ybS1wbHVnaW4iLGcsYSl9O2Z1bmN0aW9uIGIoaCl7dmFyIGc9aC5kYXRhO2lmKCFoLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtoLnByZXZlbnREZWZhdWx0KCk7ZihoLnRhcmdldCkuYWpheFN1Ym1pdChnKX19ZnVuY3Rpb24gYShrKXt2YXIgaj1rLnRhcmdldDt2YXIgaD1mKGopO2lmKCEoaC5pcygiW3R5cGU9c3VibWl0XSxbdHlwZT1pbWFnZV0iKSkpe3ZhciBnPWguY2xvc2VzdCgiW3R5cGU9c3VibWl0XSIpO2lmKGcubGVuZ3RoPT09MCl7cmV0dXJufWo9Z1swXX12YXIgaT10aGlzO2kuY2xrPWo7aWYoai50eXBlPT0iaW1hZ2UiKXtpZihrLm9mZnNldFghPT11bmRlZmluZWQpe2kuY2xrX3g9ay5vZmZzZXRYO2kuY2xrX3k9ay5vZmZzZXRZfWVsc2V7aWYodHlwZW9mIGYuZm4ub2Zmc2V0PT0iZnVuY3Rpb24iKXt2YXIgbD1oLm9mZnNldCgpO2kuY2xrX3g9ay5wYWdlWC1sLmxlZnQ7aS5jbGtfeT1rLnBhZ2VZLWwudG9wfWVsc2V7aS5jbGtfeD1rLnBhZ2VYLWoub2Zmc2V0TGVmdDtpLmNsa195PWsucGFnZVktai5vZmZzZXRUb3B9fX1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5jbGs9aS5jbGtfeD1pLmNsa195PW51bGx9LDEwMCl9Zi5mbi5hamF4Rm9ybVVuYmluZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgic3VibWl0LmZvcm0tcGx1Z2luIGNsaWNrLmZvcm0tcGx1Z2luIil9O2YuZm4uZm9ybVRvQXJyYXk9ZnVuY3Rpb24oeCxnKXt2YXIgdz1bXTtpZih0aGlzLmxlbmd0aD09PTApe3JldHVybiB3fXZhciBsPXRoaXNbMF07dmFyIHA9eD9sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6bC5lbGVtZW50cztpZighcCl7cmV0dXJuIHd9dmFyIHIscSxvLHksbSx0LGs7Zm9yKHI9MCx0PXAubGVuZ3RoO3I8dDtyKyspe209cFtyXTtvPW0ubmFtZTtpZighb3x8bS5kaXNhYmxlZCl7Y29udGludWV9aWYoeCYmbC5jbGsmJm0udHlwZT09ImltYWdlIil7aWYobC5jbGs9PW0pe3cucHVzaCh7bmFtZTpvLHZhbHVlOmYobSkudmFsKCksdHlwZTptLnR5cGV9KTt3LnB1c2goe25hbWU6bysiLngiLHZhbHVlOmwuY2xrX3h9LHtuYW1lOm8rIi55Iix2YWx1ZTpsLmNsa195fSl9Y29udGludWV9eT1mLmZpZWxkVmFsdWUobSx0cnVlKTtpZih5JiZ5LmNvbnN0cnVjdG9yPT1BcnJheSl7aWYoZyl7Zy5wdXNoKG0pfWZvcihxPTAsaz15Lmxlbmd0aDtxPGs7cSsrKXt3LnB1c2goe25hbWU6byx2YWx1ZTp5W3FdfSl9fWVsc2V7aWYoYy5maWxlYXBpJiZtLnR5cGU9PSJmaWxlIil7aWYoZyl7Zy5wdXNoKG0pfXZhciBoPW0uZmlsZXM7aWYoaC5sZW5ndGgpe2ZvcihxPTA7cTxoLmxlbmd0aDtxKyspe3cucHVzaCh7bmFtZTpvLHZhbHVlOmhbcV0sdHlwZTptLnR5cGV9KX19ZWxzZXt3LnB1c2goe25hbWU6byx2YWx1ZToiIix0eXBlOm0udHlwZX0pfX1lbHNle2lmKHkhPT1udWxsJiZ0eXBlb2YgeSE9InVuZGVmaW5lZCIpe2lmKGcpe2cucHVzaChtKX13LnB1c2goe25hbWU6byx2YWx1ZTp5LHR5cGU6bS50eXBlLHJlcXVpcmVkOm0ucmVxdWlyZWR9KX19fX1pZigheCYmbC5jbGspe3ZhciBzPWYobC5jbGspLHU9c1swXTtvPXUubmFtZTtpZihvJiYhdS5kaXNhYmxlZCYmdS50eXBlPT0iaW1hZ2UiKXt3LnB1c2goe25hbWU6byx2YWx1ZTpzLnZhbCgpfSk7dy5wdXNoKHtuYW1lOm8rIi54Iix2YWx1ZTpsLmNsa194fSx7bmFtZTpvKyIueSIsdmFsdWU6bC5jbGtfeX0pfX1yZXR1cm4gd307Zi5mbi5mb3JtU2VyaWFsaXplPWZ1bmN0aW9uKGcpe3JldHVybiBmLnBhcmFtKHRoaXMuZm9ybVRvQXJyYXkoZykpfTtmLmZuLmZpZWxkU2VyaWFsaXplPWZ1bmN0aW9uKGgpe3ZhciBnPVtdO3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBtPXRoaXMubmFtZTtpZighbSl7cmV0dXJufXZhciBrPWYuZmllbGRWYWx1ZSh0aGlzLGgpO2lmKGsmJmsuY29uc3RydWN0b3I9PUFycmF5KXtmb3IodmFyIGw9MCxqPWsubGVuZ3RoO2w8ajtsKyspe2cucHVzaCh7bmFtZTptLHZhbHVlOmtbbF19KX19ZWxzZXtpZihrIT09bnVsbCYmdHlwZW9mIGshPSJ1bmRlZmluZWQiKXtnLnB1c2goe25hbWU6dGhpcy5uYW1lLHZhbHVlOmt9KX19fSk7cmV0dXJuIGYucGFyYW0oZyl9O2YuZm4uZmllbGRWYWx1ZT1mdW5jdGlvbihtKXtmb3IodmFyIGw9W10saj0wLGc9dGhpcy5sZW5ndGg7ajxnO2orKyl7dmFyIGs9dGhpc1tqXTt2YXIgaD1mLmZpZWxkVmFsdWUoayxtKTtpZihoPT09bnVsbHx8dHlwZW9mIGg9PSJ1bmRlZmluZWQifHwoaC5jb25zdHJ1Y3Rvcj09QXJyYXkmJiFoLmxlbmd0aCkpe2NvbnRpbnVlfWlmKGguY29uc3RydWN0b3I9PUFycmF5KXtmLm1lcmdlKGwsaCl9ZWxzZXtsLnB1c2goaCl9fXJldHVybiBsfTtmLmZpZWxkVmFsdWU9ZnVuY3Rpb24oZyxvKXt2YXIgaj1nLm5hbWUsdT1nLnR5cGUsdz1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihvPT09dW5kZWZpbmVkKXtvPXRydWV9aWYobyYmKCFqfHxnLmRpc2FibGVkfHx1PT0icmVzZXQifHx1PT0iYnV0dG9uInx8KHU9PSJjaGVja2JveCJ8fHU9PSJyYWRpbyIpJiYhZy5jaGVja2VkfHwodT09InN1Ym1pdCJ8fHU9PSJpbWFnZSIpJiZnLmZvcm0mJmcuZm9ybS5jbGshPWd8fHc9PSJzZWxlY3QiJiZnLnNlbGVjdGVkSW5kZXg9PS0xKSl7cmV0dXJuIG51bGx9aWYodz09InNlbGVjdCIpe3ZhciBwPWcuc2VsZWN0ZWRJbmRleDtpZihwPDApe3JldHVybiBudWxsfXZhciByPVtdLGg9Zy5vcHRpb25zO3ZhciBsPSh1PT0ic2VsZWN0LW9uZSIpO3ZhciBxPShsP3ArMTpoLmxlbmd0aCk7Zm9yKHZhciBrPShsP3A6MCk7azxxO2srKyl7dmFyIG09aFtrXTtpZihtLnNlbGVjdGVkKXt2YXIgcz1tLnZhbHVlO2lmKCFzKXtzPShtLmF0dHJpYnV0ZXMmJm0uYXR0cmlidXRlcy52YWx1ZSYmIShtLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkKSk/bS50ZXh0Om0udmFsdWV9aWYobCl7cmV0dXJuIHN9ci5wdXNoKHMpfX1yZXR1cm4gcn1yZXR1cm4gZihnKS52YWwoKX07Zi5mbi5jbGVhckZvcm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YoImlucHV0LHNlbGVjdCx0ZXh0YXJlYSIsdGhpcykuY2xlYXJGaWVsZHMoZyl9KX07Zi5mbi5jbGVhckZpZWxkcz1mLmZuLmNsZWFySW5wdXRzPWZ1bmN0aW9uKGcpe3ZhciBoPS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaj10aGlzLnR5cGUsaT10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtpZihoLnRlc3Qoail8fGk9PSJ0ZXh0YXJlYSIpe3RoaXMudmFsdWU9IiJ9ZWxzZXtpZihqPT0iY2hlY2tib3gifHxqPT0icmFkaW8iKXt0aGlzLmNoZWNrZWQ9ZmFsc2V9ZWxzZXtpZihpPT0ic2VsZWN0Iil7dGhpcy5zZWxlY3RlZEluZGV4PS0xfWVsc2V7aWYoaj09ImZpbGUiKXtpZigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7Zih0aGlzKS5yZXBsYWNlV2l0aChmKHRoaXMpLmNsb25lKHRydWUpKX1lbHNle2YodGhpcykudmFsKCIiKX19ZWxzZXtpZihnKXtpZigoZz09PXRydWUmJi9oaWRkZW4vLnRlc3QoaikpfHwodHlwZW9mIGc9PSJzdHJpbmciJiZmKHRoaXMpLmlzKGcpKSl7dGhpcy52YWx1ZT0iIn19fX19fX0pfTtmLmZuLnJlc2V0Rm9ybT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5yZXNldD09ImZ1bmN0aW9uInx8KHR5cGVvZiB0aGlzLnJlc2V0PT0ib2JqZWN0IiYmIXRoaXMucmVzZXQubm9kZVR5cGUpKXt0aGlzLnJlc2V0KCl9fSl9O2YuZm4uZW5hYmxlPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hZ30pfTtmLmZuLnNlbGVjdGVkPWZ1bmN0aW9uKGcpe2lmKGc9PT11bmRlZmluZWQpe2c9dHJ1ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9dGhpcy50eXBlO2lmKGg9PSJjaGVja2JveCJ8fGg9PSJyYWRpbyIpe3RoaXMuY2hlY2tlZD1nfWVsc2V7aWYodGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJvcHRpb24iKXt2YXIgaT1mKHRoaXMpLnBhcmVudCgic2VsZWN0Iik7aWYoZyYmaVswXSYmaVswXS50eXBlPT0ic2VsZWN0LW9uZSIpe2kuZmluZCgib3B0aW9uIikuc2VsZWN0ZWQoZmFsc2UpfXRoaXMuc2VsZWN0ZWQ9Z319fSl9O2YuZm4uYWpheFN1Ym1pdC5kZWJ1Zz1mYWxzZTtmdW5jdGlvbiBkKCl7aWYoIWYuZm4uYWpheFN1Ym1pdC5kZWJ1Zyl7cmV0dXJufXZhciBnPSJbanF1ZXJ5LmZvcm1dICIrQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsIiIpO2lmKHdpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cpe3dpbmRvdy5jb25zb2xlLmxvZyhnKX1lbHNle2lmKHdpbmRvdy5vcGVyYSYmd2luZG93Lm9wZXJhLnBvc3RFcnJvcil7d2luZG93Lm9wZXJhLnBvc3RFcnJvcihnKX19fX0pKTtQSwcIdhAQAaM+AACjPgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAc3RhdGljXGxpYlxtYXJrZWQubWluLmpzIWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz17fSx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLnJ1bGVzPWEubm9ybWFsLHRoaXMub3B0aW9ucy5nZm0mJih0aGlzLnJ1bGVzPXRoaXMub3B0aW9ucy50YWJsZXM/YS50YWJsZXM6YS5nZm0pfWZ1bmN0aW9uIHQoZSx0KXtpZih0aGlzLm9wdGlvbnM9dHx8aC5kZWZhdWx0cyx0aGlzLmxpbmtzPWUsdGhpcy5ydWxlcz11Lm5vcm1hbCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IG4sIXRoaXMubGlua3MpdGhyb3cgbmV3IEVycm9yKCJUb2tlbnMgYXJyYXkgcmVxdWlyZXMgYSBgbGlua3NgIHByb3BlcnR5LiIpO3RoaXMub3B0aW9ucy5nZm0/dGhpcy5ydWxlcz10aGlzLm9wdGlvbnMuYnJlYWtzP3UuYnJlYWtzOnUuZ2ZtOnRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHRoaXMucnVsZXM9dS5wZWRhbnRpYyl9ZnVuY3Rpb24gbigpe31mdW5jdGlvbiByKGUpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW49bnVsbCx0aGlzLm9wdGlvbnM9ZXx8aC5kZWZhdWx0cyx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgbix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcn1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0Py8mL2c6LyYoPyEjP1x3KzspL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjMzk7Iil9ZnVuY3Rpb24gaShlLHQpe3JldHVybiBlPWUuc291cmNlLHQ9dHx8IiIsZnVuY3Rpb24gbihyLHMpe3JldHVybiByPyhzPXMuc291cmNlfHxzLHM9cy5yZXBsYWNlKC8oXnxbXlxbXSlcXi9nLCIkMSIpLGU9ZS5yZXBsYWNlKHIscyksbik6bmV3IFJlZ0V4cChlLHQpfX1mdW5jdGlvbiBsKCl7fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0LG4scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Q9YXJndW1lbnRzW3JdO2ZvcihuIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJihlW25dPXRbbl0pfXJldHVybiBlfWZ1bmN0aW9uIGgodCxuLGkpe2lmKGl8fCJmdW5jdGlvbiI9PXR5cGVvZiBuKXtpfHwoaT1uLG49bnVsbCksbj1vKHt9LGguZGVmYXVsdHMsbnx8e30pO3ZhciBsLGEsdT1uLmhpZ2hsaWdodCxwPTA7dHJ5e2w9ZS5sZXgodCxuKX1jYXRjaChjKXtyZXR1cm4gaShjKX1hPWwubGVuZ3RoO3ZhciBnPWZ1bmN0aW9uKCl7dmFyIGUsdDt0cnl7ZT1yLnBhcnNlKGwsbil9Y2F0Y2gocyl7dD1zfXJldHVybiBuLmhpZ2hsaWdodD11LHQ/aSh0KTppKG51bGwsZSl9O2lmKCF1fHx1Lmxlbmd0aDwzKXJldHVybiBnKCk7aWYoZGVsZXRlIG4uaGlnaGxpZ2h0LCFhKXJldHVybiBnKCk7Zm9yKDtwPGwubGVuZ3RoO3ArKykhZnVuY3Rpb24oZSl7cmV0dXJuImNvZGUiIT09ZS50eXBlPy0tYXx8ZygpOnUoZS50ZXh0LGUubGFuZyxmdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1ufHxuPT09ZS50ZXh0Py0tYXx8ZygpOihlLnRleHQ9bixlLmVzY2FwZWQ9ITAsLS1hfHxnKCksdm9pZCAwKX0pfShsW3BdKX1lbHNlIHRyeXtyZXR1cm4gbiYmKG49byh7fSxoLmRlZmF1bHRzLG4pKSxyLnBhcnNlKGUubGV4KHQsbiksbil9Y2F0Y2goYyl7aWYoYy5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL2NoamovbWFya2VkLiIsKG58fGguZGVmYXVsdHMpLnNpbGVudClyZXR1cm4iPHA+QW4gZXJyb3Igb2NjdXJlZDo8L3A+PHByZT4iK3MoYy5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+Ijt0aHJvdyBjfX12YXIgYT17bmV3bGluZTovXlxuKy8sY29kZTovXiggezR9W15cbl0rXG4qKSsvLGZlbmNlczpsLGhyOi9eKCAqWy0qX10pezMsfSAqKD86XG4rfCQpLyxoZWFkaW5nOi9eICooI3sxLDZ9KSAqKFteXG5dKz8pICojKiAqKD86XG4rfCQpLyxucHRhYmxlOmwsbGhlYWRpbmc6L14oW15cbl0rKVxuICooPXwtKXsyLH0gKig/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggKj5bXlxuXSsoXG5bXlxuXSspKlxuKikrLyxsaXN0Oi9eKCAqKShidWxsKSBbXHNcU10rPyg/OmhyfFxuezIsfSg/ISApKD8hXDFidWxsIClcbip8XHMqJCkvLGh0bWw6L14gKig/OmNvbW1lbnR8Y2xvc2VkfGNsb3NpbmcpICooPzpcbnsyLH18XHMqJCkvLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArWyIoXShbXlxuXSspWyIpXSk/ICooPzpcbit8JCkvLHRhYmxlOmwscGFyYWdyYXBoOi9eKCg/OlteXG5dK1xuPyg/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXx0YWd8ZGVmKSkrKVxuKi8sdGV4dDovXlteXG5dKy99O2EuYnVsbGV0PS8oPzpbKistXXxcZCtcLikvLGEuaXRlbT0vXiggKikoYnVsbCkgW15cbl0qKD86XG4oPyFcMWJ1bGwgKVteXG5dKikqLyxhLml0ZW09aShhLml0ZW0sImdtIikoL2J1bGwvZyxhLmJ1bGxldCkoKSxhLmxpc3Q9aShhLmxpc3QpKC9idWxsL2csYS5idWxsZXQpKCJociIsL1xuKyg/PSg/OiAqWy0qX10pezMsfSAqKD86XG4rfCQpKS8pKCksYS5fdGFnPSIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITovfEApXFxiIixhLmh0bWw9aShhLmh0bWwpKCJjb21tZW50IiwvPCEtLVtcc1xTXSo/LS0+LykoImNsb3NlZCIsLzwodGFnKVtcc1xTXSs/PFwvXDE+LykoImNsb3NpbmciLC88dGFnKD86IlteIl0qInwnW14nXSonfFteJyI+XSkqPz4vKSgvdGFnL2csYS5fdGFnKSgpLGEucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCJociIsYS5ocikoImhlYWRpbmciLGEuaGVhZGluZykoImxoZWFkaW5nIixhLmxoZWFkaW5nKSgiYmxvY2txdW90ZSIsYS5ibG9ja3F1b3RlKSgidGFnIiwiPCIrYS5fdGFnKSgiZGVmIixhLmRlZikoKSxhLm5vcm1hbD1vKHt9LGEpLGEuZ2ZtPW8oe30sYS5ub3JtYWwse2ZlbmNlczovXiAqKGB7Myx9fH57Myx9KSAqKFxTKyk/ICpcbihbXHNcU10rPylccypcMSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6L14vfSksYS5nZm0ucGFyYWdyYXBoPWkoYS5wYXJhZ3JhcGgpKCIoPyEiLCIoPyEiK2EuZ2ZtLmZlbmNlcy5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwyIikrInwiK2EubGlzdC5zb3VyY2UucmVwbGFjZSgiXFwxIiwiXFwzIikrInwiKSgpLGEudGFibGVzPW8oe30sYS5nZm0se25wdGFibGU6L14gKihcUy4qXHwuKilcbiAqKFstOl0rICpcfFstfCA6XSopXG4oKD86LipcfC4qKD86XG58JCkpKilcbiovLHRhYmxlOi9eICpcfCguKylcbiAqXHwoICpbLTpdK1stfCA6XSopXG4oKD86ICpcfC4qKD86XG58JCkpKilcbiovfSksZS5ydWxlcz1hLGUubGV4PWZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IGUobik7cmV0dXJuIHIubGV4KHQpfSxlLnByb3RvdHlwZS5sZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9cclxufFxyL2csIlxuIikucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL1x1MDBhMC9nLCIgIikucmVwbGFjZSgvXHUyNDI0L2csIlxuIiksdGhpcy50b2tlbihlLCEwKX0sZS5wcm90b3R5cGUudG9rZW49ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixzLGksbCxvLGgsdSxwLGU9ZS5yZXBsYWNlKC9eICskL2dtLCIiKTtlOylpZigocz10aGlzLnJ1bGVzLm5ld2xpbmUuZXhlYyhlKSkmJihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzWzBdLmxlbmd0aD4xJiZ0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJzcGFjZSJ9KSkscz10aGlzLnJ1bGVzLmNvZGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxzPXNbMF0ucmVwbGFjZSgvXiB7NH0vZ20sIiIpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3M6cy5yZXBsYWNlKC9cbiskLywiIil9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJjb2RlIixsYW5nOnNbMl0sdGV4dDpzWzNdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMuaGVhZGluZy5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmciLGRlcHRoOnNbMV0ubGVuZ3RoLHRleHQ6c1syXX0pO2Vsc2UgaWYodCYmKHM9dGhpcy5ydWxlcy5ucHRhYmxlLmV4ZWMoZSkpKXtmb3IoZT1lLnN1YnN0cmluZyhzWzBdLmxlbmd0aCksbz17dHlwZToidGFibGUiLGhlYWRlcjpzWzFdLnJlcGxhY2UoL14gKnwgKlx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxhbGlnbjpzWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyksY2VsbHM6c1szXS5yZXBsYWNlKC9cbiQvLCIiKS5zcGxpdCgiXG4iKX0sdT0wO3U8by5hbGlnbi5sZW5ndGg7dSsrKW8uYWxpZ25bdV09L14gKi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KG8uYWxpZ25bdV0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3Qoby5hbGlnblt1XSk/ImxlZnQiOm51bGw7Zm9yKHU9MDt1PG8uY2VsbHMubGVuZ3RoO3UrKylvLmNlbGxzW3VdPW8uY2VsbHNbdV0uc3BsaXQoLyAqXHwgKi8pO3RoaXMudG9rZW5zLnB1c2gobyl9ZWxzZSBpZihzPXRoaXMucnVsZXMubGhlYWRpbmcuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJoZWFkaW5nIixkZXB0aDoiPSI9PT1zWzJdPzE6Mix0ZXh0OnNbMV19KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5oci5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6ImhyIn0pO2Vsc2UgaWYocz10aGlzLnJ1bGVzLmJsb2NrcXVvdGUuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX3N0YXJ0In0pLHM9c1swXS5yZXBsYWNlKC9eICo+ID8vZ20sIiIpLHRoaXMudG9rZW4ocyx0KSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJibG9ja3F1b3RlX2VuZCJ9KTtlbHNlIGlmKHM9dGhpcy5ydWxlcy5saXN0LmV4ZWMoZSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxpPXNbMl0sdGhpcy50b2tlbnMucHVzaCh7dHlwZToibGlzdF9zdGFydCIsb3JkZXJlZDppLmxlbmd0aD4xfSkscz1zWzBdLm1hdGNoKHRoaXMucnVsZXMuaXRlbSksbj0hMSxwPXMubGVuZ3RoLHU9MDtwPnU7dSsrKW89c1t1XSxoPW8ubGVuZ3RoLG89by5yZXBsYWNlKC9eICooWyorLV18XGQrXC4pICsvLCIiKSx+by5pbmRleE9mKCJcbiAiKSYmKGgtPW8ubGVuZ3RoLG89dGhpcy5vcHRpb25zLnBlZGFudGljP28ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik6by5yZXBsYWNlKG5ldyBSZWdFeHAoIl4gezEsIitoKyJ9IiwiZ20iKSwiIikpLHRoaXMub3B0aW9ucy5zbWFydExpc3RzJiZ1IT09cC0xJiYobD1hLmJ1bGxldC5leGVjKHNbdSsxXSlbMF0saT09PWx8fGkubGVuZ3RoPjEmJmwubGVuZ3RoPjF8fChlPXMuc2xpY2UodSsxKS5qb2luKCJcbiIpK2UsdT1wLTEpKSxyPW58fC9cblxuKD8hXHMqJCkvLnRlc3QobyksdSE9PXAtMSYmKG49IlxuIj09PW8uY2hhckF0KG8ubGVuZ3RoLTEpLHJ8fChyPW4pKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnI/Imxvb3NlX2l0ZW1fc3RhcnQiOiJsaXN0X2l0ZW1fc3RhcnQifSksdGhpcy50b2tlbihvLCExKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW1fZW5kIn0pO3RoaXMudG9rZW5zLnB1c2goe3R5cGU6Imxpc3RfZW5kIn0pfWVsc2UgaWYocz10aGlzLnJ1bGVzLmh0bWwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSx0aGlzLnRva2Vucy5wdXNoKHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8icGFyYWdyYXBoIjoiaHRtbCIscHJlOiJwcmUiPT09c1sxXXx8InNjcmlwdCI9PT1zWzFdfHwic3R5bGUiPT09c1sxXSx0ZXh0OnNbMF19KTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMuZGVmLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLmxpbmtzW3NbMV0udG9Mb3dlckNhc2UoKV09e2hyZWY6c1syXSx0aXRsZTpzWzNdfTtlbHNlIGlmKHQmJihzPXRoaXMucnVsZXMudGFibGUuZXhlYyhlKSkpe2ZvcihlPWUuc3Vic3RyaW5nKHNbMF0ubGVuZ3RoKSxvPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOnNbMV0ucmVwbGFjZSgvXiAqfCAqXHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLGFsaWduOnNbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxjZWxsczpzWzNdLnJlcGxhY2UoLyg/OiAqXHwgKik/XG4kLywiIikuc3BsaXQoIlxuIil9LHU9MDt1PG8uYWxpZ24ubGVuZ3RoO3UrKylvLmFsaWduW3VdPS9eICotKzogKiQvLnRlc3Qoby5hbGlnblt1XSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChvLmFsaWduW3VdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KG8uYWxpZ25bdV0pPyJsZWZ0IjpudWxsO2Zvcih1PTA7dTxvLmNlbGxzLmxlbmd0aDt1Kyspby5jZWxsc1t1XT1vLmNlbGxzW3VdLnJlcGxhY2UoL14gKlx8ICp8ICpcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLyk7dGhpcy50b2tlbnMucHVzaChvKX1lbHNlIGlmKHQmJihzPXRoaXMucnVsZXMucGFyYWdyYXBoLmV4ZWMoZSkpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InBhcmFncmFwaCIsdGV4dDoiXG4iPT09c1sxXS5jaGFyQXQoc1sxXS5sZW5ndGgtMSk/c1sxXS5zbGljZSgwLC0xKTpzWzFdfSk7ZWxzZSBpZihzPXRoaXMucnVsZXMudGV4dC5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoc1swXS5sZW5ndGgpLHRoaXMudG9rZW5zLnB1c2goe3R5cGU6InRleHQiLHRleHQ6c1swXX0pO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiB0aGlzLnRva2Vuc307dmFyIHU9e2VzY2FwZTovXlxcKFtcXGAqe31cW1xdKCkjK1wtLiFfPl0pLyxhdXRvbGluazovXjwoW14gPl0rKEB8OlwvKVteID5dKyk+Lyx1cmw6bCx0YWc6L148IS0tW1xzXFNdKj8tLT58XjxcLz9cdysoPzoiW14iXSoifCdbXiddKid8W14nIj5dKSo/Pi8sbGluazovXiE/XFsoaW5zaWRlKVxdXChocmVmXCkvLHJlZmxpbms6L14hP1xbKGluc2lkZSlcXVxzKlxbKFteXF1dKilcXS8sbm9saW5rOi9eIT9cWygoPzpcW1teXF1dKlxdfFteXFtcXV0pKilcXS8sc3Ryb25nOi9eX18oW1xzXFNdKz8pX18oPyFfKXxeXCpcKihbXHNcU10rPylcKlwqKD8hXCopLyxlbTovXlxiXygoPzpfX3xbXHNcU10pKz8pX1xifF5cKigoPzpcKlwqfFtcc1xTXSkrPylcKig/IVwqKS8sY29kZTovXihgKylccyooW1xzXFNdKj9bXmBdKVxzKlwxKD8hYCkvLGJyOi9eIHsyLH1cbig/IVxzKiQpLyxkZWw6bCx0ZXh0Oi9eW1xzXFNdKz8oPz1bXFw8IVxbXypgXXwgezIsfVxufCQpL307dS5faW5zaWRlPS8oPzpcW1teXF1dKlxdfFteXFtcXV18XF0oPz1bXlxbXSpcXSkpKi8sdS5faHJlZj0vXHMqPD8oW1xzXFNdKj8pPj8oPzpccytbJyJdKFtcc1xTXSo/KVsnIl0pP1xzKi8sdS5saW5rPWkodS5saW5rKSgiaW5zaWRlIix1Ll9pbnNpZGUpKCJocmVmIix1Ll9ocmVmKSgpLHUucmVmbGluaz1pKHUucmVmbGluaykoImluc2lkZSIsdS5faW5zaWRlKSgpLHUubm9ybWFsPW8oe30sdSksdS5wZWRhbnRpYz1vKHt9LHUubm9ybWFsLHtzdHJvbmc6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbTovXl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXyl8XlwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKikvfSksdS5nZm09byh7fSx1Lm5vcm1hbCx7ZXNjYXBlOmkodS5lc2NhcGUpKCJdKSIsIn58XSkiKSgpLHVybDovXihodHRwcz86XC9cL1teXHM8XStbXjwuLDo7IicpXF1cc10pLyxkZWw6L15+fig/PVxTKShbXHNcU10qP1xTKX5+Lyx0ZXh0OmkodS50ZXh0KSgiXXwiLCJ+XXwiKSgifCIsInxodHRwcz86Ly98IikoKX0pLHUuYnJlYWtzPW8oe30sdS5nZm0se2JyOmkodS5icikoInsyLH0iLCIqIikoKSx0ZXh0OmkodS5nZm0udGV4dCkoInsyLH0iLCIqIikoKX0pLHQucnVsZXM9dSx0Lm91dHB1dD1mdW5jdGlvbihlLG4scil7dmFyIHM9bmV3IHQobixyKTtyZXR1cm4gcy5vdXRwdXQoZSl9LHQucHJvdG90eXBlLm91dHB1dD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGksbD0iIjtlOylpZihpPXRoaXMucnVsZXMuZXNjYXBlLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9aVsxXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5hdXRvbGluay5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLCJAIj09PWlbMl0/KG49IjoiPT09aVsxXS5jaGFyQXQoNik/dGhpcy5tYW5nbGUoaVsxXS5zdWJzdHJpbmcoNykpOnRoaXMubWFuZ2xlKGlbMV0pLHI9dGhpcy5tYW5nbGUoIm1haWx0bzoiKStuKToobj1zKGlbMV0pLHI9biksbCs9dGhpcy5yZW5kZXJlci5saW5rKHIsbnVsbCxuKTtlbHNlIGlmKGk9dGhpcy5ydWxlcy51cmwuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxuPXMoaVsxXSkscj1uLGwrPXRoaXMucmVuZGVyZXIubGluayhyLG51bGwsbik7ZWxzZSBpZihpPXRoaXMucnVsZXMudGFnLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vcHRpb25zLnNhbml0aXplP3MoaVswXSk6aVswXTtlbHNlIGlmKGk9dGhpcy5ydWxlcy5saW5rLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5vdXRwdXRMaW5rKGkse2hyZWY6aVsyXSx0aXRsZTppWzNdfSk7ZWxzZSBpZigoaT10aGlzLnJ1bGVzLnJlZmxpbmsuZXhlYyhlKSl8fChpPXRoaXMucnVsZXMubm9saW5rLmV4ZWMoZSkpKXtpZihlPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSx0PShpWzJdfHxpWzFdKS5yZXBsYWNlKC9ccysvZywiICIpLHQ9dGhpcy5saW5rc1t0LnRvTG93ZXJDYXNlKCldLCF0fHwhdC5ocmVmKXtsKz1pWzBdLmNoYXJBdCgwKSxlPWlbMF0uc3Vic3RyaW5nKDEpK2U7Y29udGludWV9bCs9dGhpcy5vdXRwdXRMaW5rKGksdCl9ZWxzZSBpZihpPXRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5zdHJvbmcodGhpcy5vdXRwdXQoaVsyXXx8aVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLmVtLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5lbSh0aGlzLm91dHB1dChpWzJdfHxpWzFdKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuY29kZS5leGVjKGUpKWU9ZS5zdWJzdHJpbmcoaVswXS5sZW5ndGgpLGwrPXRoaXMucmVuZGVyZXIuY29kZXNwYW4ocyhpWzJdLCEwKSk7ZWxzZSBpZihpPXRoaXMucnVsZXMuYnIuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz10aGlzLnJlbmRlcmVyLmJyKCk7ZWxzZSBpZihpPXRoaXMucnVsZXMuZGVsLmV4ZWMoZSkpZT1lLnN1YnN0cmluZyhpWzBdLmxlbmd0aCksbCs9dGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoaVsxXSkpO2Vsc2UgaWYoaT10aGlzLnJ1bGVzLnRleHQuZXhlYyhlKSllPWUuc3Vic3RyaW5nKGlbMF0ubGVuZ3RoKSxsKz1zKHRoaXMuc21hcnR5cGFudHMoaVswXSkpO2Vsc2UgaWYoZSl0aHJvdyBuZXcgRXJyb3IoIkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCkpO3JldHVybiBsfSx0LnByb3RvdHlwZS5vdXRwdXRMaW5rPWZ1bmN0aW9uKGUsdCl7dmFyIG49cyh0LmhyZWYpLHI9dC50aXRsZT9zKHQudGl0bGUpOm51bGw7cmV0dXJuIiEiIT09ZVswXS5jaGFyQXQoMCk/dGhpcy5yZW5kZXJlci5saW5rKG4scix0aGlzLm91dHB1dChlWzFdKSk6dGhpcy5yZW5kZXJlci5pbWFnZShuLHIscyhlWzFdKSl9LHQucHJvdG90eXBlLnNtYXJ0eXBhbnRzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/ZS5yZXBsYWNlKC8tLS9nLCLigJQiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQx4oCYIikucmVwbGFjZSgvJy9nLCLigJkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDHigJwiKS5yZXBsYWNlKC8iL2csIuKAnSIpLnJlcGxhY2UoL1wuezN9L2csIuKApiIpOmV9LHQucHJvdG90eXBlLm1hbmdsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixyPWUubGVuZ3RoLHM9MDtyPnM7cysrKXQ9ZS5jaGFyQ29kZUF0KHMpLE1hdGgucmFuZG9tKCk+LjUmJih0PSJ4Iit0LnRvU3RyaW5nKDE2KSksbis9IiYjIit0KyI7IjtyZXR1cm4gbn0sbi5wcm90b3R5cGUuY29kZT1mdW5jdGlvbihlLHQsbixyKXtpZihyPXJ8fHt9LHIuaGlnaGxpZ2h0KXt2YXIgaT1yLmhpZ2hsaWdodChlLHQpO251bGwhPWkmJmkhPT1lJiYobj0hMCxlPWkpfXJldHVybiB0Pyc8cHJlPjxjb2RlIGNsYXNzPSInK3IubGFuZ1ByZWZpeCt0KyciPicrKG4/ZTpzKGUpKSsiXG48L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKG4/ZTpzKGUsITApKSsiXG48L2NvZGU+PC9wcmU+In0sbi5wcm90b3R5cGUuYmxvY2txdW90ZT1mdW5jdGlvbihlKXtyZXR1cm4iPGJsb2NrcXVvdGU+XG4iK2UrIjwvYmxvY2txdW90ZT5cbiJ9LG4ucHJvdG90eXBlLmh0bWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG4ucHJvdG90eXBlLmhlYWRpbmc9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIjxoIit0KycgaWQ9Iicrci5oZWFkZXJQcmVmaXgrbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teXHddKy9nLCItIikrJyI+JytlKyI8L2giK3QrIj5cbiJ9LG4ucHJvdG90eXBlLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIjxocj5cbiJ9LG4ucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oZSx0KXt2YXIgbj10PyJvbCI6InVsIjtyZXR1cm4iPCIrbisiPlxuIitlKyI8LyIrbisiPlxuIn0sbi5wcm90b3R5cGUubGlzdGl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIjxsaT4iK2UrIjwvbGk+XG4ifSxuLnByb3RvdHlwZS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7cmV0dXJuIjxwPiIrZSsiPC9wPlxuIn0sbi5wcm90b3R5cGUudGFibGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHRhYmxlPlxuPHRoZWFkPlxuIitlKyI8L3RoZWFkPlxuIisiPHRib2R5PlxuIit0KyI8L3Rib2R5PlxuIisiPC90YWJsZT5cbiJ9LG4ucHJvdG90eXBlLnRhYmxlcm93PWZ1bmN0aW9uKGUpe3JldHVybiI8dHI+XG4iK2UrIjwvdHI+XG4ifSxuLnByb3RvdHlwZS50YWJsZWNlbGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmhlYWRlcj8idGgiOiJ0ZCIscj10LmFsaWduPyI8IituKycgc3R5bGU9InRleHQtYWxpZ246Jyt0LmFsaWduKyciPic6IjwiK24rIj4iO3JldHVybiByK2UrIjwvIituKyI+XG4ifSxuLnByb3RvdHlwZS5zdHJvbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIjxzdHJvbmc+IitlKyI8L3N0cm9uZz4ifSxuLnByb3RvdHlwZS5lbT1mdW5jdGlvbihlKXtyZXR1cm4iPGVtPiIrZSsiPC9lbT4ifSxuLnByb3RvdHlwZS5jb2Rlc3Bhbj1mdW5jdGlvbihlKXtyZXR1cm4iPGNvZGU+IitlKyI8L2NvZGU+In0sbi5wcm90b3R5cGUuYnI9ZnVuY3Rpb24oKXtyZXR1cm4iPGJyPiJ9LG4ucHJvdG90eXBlLmRlbD1mdW5jdGlvbihlKXtyZXR1cm4iPGRlbD4iK2UrIjwvZGVsPiJ9LG4ucHJvdG90eXBlLmxpbms9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSc8YSBocmVmPSInK2UrJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4iK24rIjwvYT4ifSxuLnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9JzxpbWcgc3JjPSInK2UrJyIgYWx0PSInK24rJyInO3JldHVybiB0JiYocis9JyB0aXRsZT0iJyt0KyciJykscis9Ij4ifSxyLnBhcnNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1uZXcgcih0LG4pO3JldHVybiBzLnBhcnNlKGUpfSxyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlKXt0aGlzLmlubGluZT1uZXcgdChlLmxpbmtzLHRoaXMub3B0aW9ucyx0aGlzLnJlbmRlcmVyKSx0aGlzLnRva2Vucz1lLnJldmVyc2UoKTtmb3IodmFyIG49IiI7dGhpcy5uZXh0KCk7KW4rPXRoaXMudG9rKCk7cmV0dXJuIG59LHIucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbj10aGlzLnRva2Vucy5wb3AoKX0sci5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGgtMV18fDB9LHIucHJvdG90eXBlLnBhcnNlVGV4dD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnRva2VuLnRleHQ7InRleHQiPT09dGhpcy5wZWVrKCkudHlwZTspZSs9IlxuIit0aGlzLm5leHQoKS50ZXh0O3JldHVybiB0aGlzLmlubGluZS5vdXRwdXQoZSl9LHIucHJvdG90eXBlLnRvaz1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLnRva2VuLnR5cGUpe2Nhc2Uic3BhY2UiOnJldHVybiIiO2Nhc2UiaHIiOnJldHVybiB0aGlzLnJlbmRlcmVyLmhyKCk7Y2FzZSJoZWFkaW5nIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpLHRoaXMudG9rZW4uZGVwdGgsdGhpcy50b2tlbi50ZXh0LHRoaXMub3B0aW9ucyk7Y2FzZSJjb2RlIjpyZXR1cm4gdGhpcy5yZW5kZXJlci5jb2RlKHRoaXMudG9rZW4udGV4dCx0aGlzLnRva2VuLmxhbmcsdGhpcy50b2tlbi5lc2NhcGVkLHRoaXMub3B0aW9ucyk7Y2FzZSJ0YWJsZSI6dmFyIGUsdCxuLHIscyxpPSIiLGw9IiI7Zm9yKG49IiIsZT0wO2U8dGhpcy50b2tlbi5oZWFkZXIubGVuZ3RoO2UrKylyPXtoZWFkZXI6ITAsYWxpZ246dGhpcy50b2tlbi5hbGlnbltlXX0sbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4uaGVhZGVyW2VdKSx7aGVhZGVyOiEwLGFsaWduOnRoaXMudG9rZW4uYWxpZ25bZV19KTtmb3IoaSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhuKSxlPTA7ZTx0aGlzLnRva2VuLmNlbGxzLmxlbmd0aDtlKyspe2Zvcih0PXRoaXMudG9rZW4uY2VsbHNbZV0sbj0iIixzPTA7czx0Lmxlbmd0aDtzKyspbis9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5pbmxpbmUub3V0cHV0KHRbc10pLHtoZWFkZXI6ITEsYWxpZ246dGhpcy50b2tlbi5hbGlnbltzXX0pO2wrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobil9cmV0dXJuIHRoaXMucmVuZGVyZXIudGFibGUoaSxsKTtjYXNlImJsb2NrcXVvdGVfc3RhcnQiOmZvcih2YXIgbD0iIjsiYmxvY2txdW90ZV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGwpO2Nhc2UibGlzdF9zdGFydCI6Zm9yKHZhciBsPSIiLG89dGhpcy50b2tlbi5vcmRlcmVkOyJsaXN0X2VuZCIhPT10aGlzLm5leHQoKS50eXBlOylsKz10aGlzLnRvaygpO3JldHVybiB0aGlzLnJlbmRlcmVyLmxpc3QobCxvKTtjYXNlImxpc3RfaXRlbV9zdGFydCI6Zm9yKHZhciBsPSIiOyJsaXN0X2l0ZW1fZW5kIiE9PXRoaXMubmV4dCgpLnR5cGU7KWwrPSJ0ZXh0Ij09PXRoaXMudG9rZW4udHlwZT90aGlzLnBhcnNlVGV4dCgpOnRoaXMudG9rKCk7cmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0obCk7Y2FzZSJsb29zZV9pdGVtX3N0YXJ0Ijpmb3IodmFyIGw9IiI7Imxpc3RfaXRlbV9lbmQiIT09dGhpcy5uZXh0KCkudHlwZTspbCs9dGhpcy50b2soKTtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0aXRlbShsKTtjYXNlImh0bWwiOnZhciBoPXRoaXMudG9rZW4ucHJlfHx0aGlzLm9wdGlvbnMucGVkYW50aWM/dGhpcy50b2tlbi50ZXh0OnRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpO3JldHVybiB0aGlzLnJlbmRlcmVyLmh0bWwoaCk7Y2FzZSJwYXJhZ3JhcGgiOnJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZVRleHQoKSl9fSxsLmV4ZWM9bCxoLm9wdGlvbnM9aC5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBvKGguZGVmYXVsdHMsZSksaH0saC5kZWZhdWx0cz17Z2ZtOiEwLHRhYmxlczohMCxicmVha3M6ITEscGVkYW50aWM6ITEsc2FuaXRpemU6ITEsc21hcnRMaXN0czohMSxzaWxlbnQ6ITEsaGlnaGxpZ2h0Om51bGwsbGFuZ1ByZWZpeDoibGFuZy0iLHNtYXJ0eXBhbnRzOiExLGhlYWRlclByZWZpeDoiIixyZW5kZXJlcjpuZXcgbn0saC5QYXJzZXI9cixoLnBhcnNlcj1yLnBhcnNlLGguUmVuZGVyZXI9bixoLkxleGVyPWUsaC5sZXhlcj1lLmxleCxoLklubGluZUxleGVyPXQsaC5pbmxpbmVMZXhlcj10Lm91dHB1dCxoLnBhcnNlPWgsIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWg6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZnVuY3Rpb24oKXtyZXR1cm4gaH0pOnRoaXMubWFya2VkPWh9LmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpnbG9iYWwpfSgpKTtQSwcIQvpMalM5AABTOQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAc3RhdGljXGxpYlx2YWxpZGF0ZS5taW4uanMvKgogKiB2YWxpZGF0ZS5qcyAxLjMKICogQ29weXJpZ2h0IChjKSAyMDEzIFJpY2sgSGFycmlzb24sIGh0dHA6Ly9yaWNraGFycmlzb24ubWUKICogdmFsaWRhdGUuanMgaXMgb3BlbiBzb3VyY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KICogUG9ydGlvbnMgb2YgdmFsaWRhdGUuanMgYXJlIGluc3BpcmVkIGJ5IENvZGVJZ25pdGVyLgogKiBodHRwOi8vcmlja2hhcnJpc29uLmdpdGh1Yi5jb20vdmFsaWRhdGUuanMKICovCgooZnVuY3Rpb24ocSxyLG0pe3ZhciBzPXtyZXF1aXJlZDoiVGhlICVzIGZpZWxkIGlzIHJlcXVpcmVkLiIsbWF0Y2hlczoiVGhlICVzIGZpZWxkIGRvZXMgbm90IG1hdGNoIHRoZSAlcyBmaWVsZC4iLCJkZWZhdWx0IjoiVGhlICVzIGZpZWxkIGlzIHN0aWxsIHNldCB0byBkZWZhdWx0LCBwbGVhc2UgY2hhbmdlLiIsdmFsaWRfZW1haWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiIsdmFsaWRfZW1haWxzOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGFsbCB2YWxpZCBlbWFpbCBhZGRyZXNzZXMuIixtaW5fbGVuZ3RoOiJUaGUgJXMgZmllbGQgbXVzdCBiZSBhdCBsZWFzdCAlcyBjaGFyYWN0ZXJzIGluIGxlbmd0aC4iLG1heF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IG5vdCBleGNlZWQgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixleGFjdF9sZW5ndGg6IlRoZSAlcyBmaWVsZCBtdXN0IGJlIGV4YWN0bHkgJXMgY2hhcmFjdGVycyBpbiBsZW5ndGguIixncmVhdGVyX3RoYW46IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBudW1iZXIgZ3JlYXRlciB0aGFuICVzLiIsbGVzc190aGFuOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGxlc3MgdGhhbiAlcy4iLGFscGhhOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMuIixhbHBoYV9udW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzLiIsYWxwaGFfZGFzaDoiVGhlICVzIGZpZWxkIG11c3Qgb25seSBjb250YWluIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycywgdW5kZXJzY29yZXMsIGFuZCBkYXNoZXMuIixudW1lcmljOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIG9ubHkgbnVtYmVycy4iLGludGVnZXI6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYW4gaW50ZWdlci4iLGRlY2ltYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSBkZWNpbWFsIG51bWJlci4iLGlzX25hdHVyYWw6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gb25seSBwb3NpdGl2ZSBudW1iZXJzLiIsaXNfbmF0dXJhbF9ub196ZXJvOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvLiIsdmFsaWRfaXA6IlRoZSAlcyBmaWVsZCBtdXN0IGNvbnRhaW4gYSB2YWxpZCBJUC4iLHZhbGlkX2Jhc2U2NDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIGJhc2U2NCBzdHJpbmcuIix2YWxpZF9jcmVkaXRfY2FyZDoiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci4iLGlzX2ZpbGVfdHlwZToiVGhlICVzIGZpZWxkIG11c3QgY29udGFpbiBvbmx5ICVzIGZpbGVzLiIsdmFsaWRfdXJsOiJUaGUgJXMgZmllbGQgbXVzdCBjb250YWluIGEgdmFsaWQgVVJMLiJ9LHQ9ZnVuY3Rpb24oYSl7fSx1PS9eKC4rPylcWyguKylcXSQvLGg9L15bMC05XSskLyx2PS9eXC0/WzAtOV0rJC8saz0vXlwtP1swLTldKlwuP1swLTldKyQvLHA9L15bYS16QS1aMC05LiEjJCUmYW1wOycqK1wtXC89P1xeX2B7fH1+XC1dK0BbYS16QS1aMC05XC1dKyg/OlwuW2EtekEtWjAtOVwtXSspKiQvLHc9L15bYS16XSskL2kseD0vXlthLXowLTldKyQvaSx5PS9eW2EtejAtOV9cLV0rJC9pLHo9L15bMC05XSskL2ksQT0vXlsxLTldWzAtOV0qJC9pLEI9L14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFswLTldezEsMn0pJC9pLEM9L1teYS16QS1aMC05XC9cKz1dL2ksRD0vXltcZFwtXHNdKyQvLEU9L14oKGh0dHB8aHR0cHMpOlwvXC8oXHcrOnswLDF9XHcqQCk/KFxTKyl8KSg6WzAtOV0rKT8oXC98XC8oW1x3IyE6Lj8rPSYlQCFcLVwvXSkpPyQvLGU9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY2FsbGJhY2s9Y3x8dDt0aGlzLmVycm9ycz1bXTt0aGlzLmZpZWxkcz17fTt0aGlzLmZvcm09dGhpcy5fZm9ybUJ5TmFtZU9yTm9kZShhKXx8e307dGhpcy5tZXNzYWdlcz17fTt0aGlzLmhhbmRsZXJzPXt9O2E9MDtmb3IoYz1iLmxlbmd0aDthPGM7YSsrKXt2YXIgZD1iW2FdO2lmKChkLm5hbWV8fGQubmFtZXMpJiZkLnJ1bGVzKWlmKGQubmFtZXMpZm9yKHZhciBsPTA7bDxkLm5hbWVzLmxlbmd0aDtsKyspdGhpcy5fYWRkRmllbGQoZCxkLm5hbWVzW2xdKTtlbHNlIHRoaXMuX2FkZEZpZWxkKGQsZC5uYW1lKX12YXIgZz10aGlzLmZvcm0ub25zdWJtaXQ7dGhpcy5mb3JtLm9uc3VibWl0PWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXt0cnl7cmV0dXJuIGEuX3ZhbGlkYXRlRm9ybShiKSYmKGc9PT1tfHxnKCkpfWNhdGNoKGMpe319fSh0aGlzKX0sbj1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKDA8YS5sZW5ndGgmJigicmFkaW8iPT09YVswXS50eXBlfHwiY2hlY2tib3giPT09YVswXS50eXBlKSlmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXtpZihhW2NdLmNoZWNrZWQpcmV0dXJuIGFbY11bYl19ZWxzZSByZXR1cm4gYVtiXX07ZS5wcm90b3R5cGUuc2V0TWVzc2FnZT1mdW5jdGlvbihhLGIpe3RoaXMubWVzc2FnZXNbYV09YjtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUucmVnaXN0ZXJDYWxsYmFjaz1mdW5jdGlvbihhLGIpe2EmJigic3RyaW5nIj09PXR5cGVvZiBhJiZiJiYiZnVuY3Rpb24iPT09dHlwZW9mIGIpJiYodGhpcy5oYW5kbGVyc1thXT1iKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuX2Zvcm1CeU5hbWVPck5vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIm9iamVjdCI9PT10eXBlb2YgYT9hOnIuZm9ybXNbYV19O2UucHJvdG90eXBlLl9hZGRGaWVsZD1mdW5jdGlvbihhLGIpe3RoaXMuZmllbGRzW2JdPXtuYW1lOmIsZGlzcGxheTphLmRpc3BsYXl8fGIscnVsZXM6YS5ydWxlcyxpZDpudWxsLHR5cGU6bnVsbCx2YWx1ZTpudWxsLGNoZWNrZWQ6bnVsbH19O2UucHJvdG90eXBlLl92YWxpZGF0ZUZvcm09ZnVuY3Rpb24oYSl7dGhpcy5lcnJvcnM9W107Zm9yKHZhciBiIGluIHRoaXMuZmllbGRzKWlmKHRoaXMuZmllbGRzLmhhc093blByb3BlcnR5KGIpKXt2YXIgYz10aGlzLmZpZWxkc1tiXXx8e30sZD10aGlzLmZvcm1bYy5uYW1lXTtkJiZkIT09bSYmKGMuaWQ9bihkLCJpZCIpLGMudHlwZT0wPGQubGVuZ3RoP2RbMF0udHlwZTpkLnR5cGUsYy52YWx1ZT1uKGQsInZhbHVlIiksYy5jaGVja2VkPW4oZCwiY2hlY2tlZCIpLHRoaXMuX3ZhbGlkYXRlRmllbGQoYykpfSJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5jYWxsYmFjayYmdGhpcy5jYWxsYmFjayh0aGlzLmVycm9ycyxhKTswPHRoaXMuZXJyb3JzLmxlbmd0aCYmKGEmJmEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmV2ZW50JiYoZXZlbnQucmV0dXJuVmFsdWU9ITEpKTtyZXR1cm4hMH07ZS5wcm90b3R5cGUuX3ZhbGlkYXRlRmllbGQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEucnVsZXMuc3BsaXQoInwiKSxjPWEucnVsZXMuaW5kZXhPZigicmVxdWlyZWQiKSxkPSFhLnZhbHVlfHwiIj09PWEudmFsdWV8fGEudmFsdWU9PT1tLGw9MCxnPWIubGVuZ3RoO2w8ZztsKyspe3ZhciBmPWJbbF0sZT1udWxsLGg9ITEsaz11LmV4ZWMoZik7aWYoLTEhPT1jfHwtMSE9PWYuaW5kZXhPZigiIWNhbGxiYWNrXyIpfHwhZClpZihrJiYoZj1rWzFdLGU9a1syXSksIiEiPT09Zi5jaGFyQXQoMCkmJihmPWYuc3Vic3RyaW5nKDEsZi5sZW5ndGgpKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuX2hvb2tzW2ZdP3RoaXMuX2hvb2tzW2ZdLmFwcGx5KHRoaXMsW2EsZV0pfHwoaD0hMCk6ImNhbGxiYWNrXyI9PT1mLnN1YnN0cmluZygwLDkpJiYoZj1mLnN1YnN0cmluZyg5LGYubGVuZ3RoKSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuaGFuZGxlcnNbZl0mJiExPT09dGhpcy5oYW5kbGVyc1tmXS5hcHBseSh0aGlzLFthLnZhbHVlLGVdKSYmKGg9ITApKSxoKXtiPXRoaXMubWVzc2FnZXNbZl18fHNbZl07Yz0iQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdpdGggdGhlICIrYS5kaXNwbGF5KyIgZmllbGQuIjtiJiYoYz1iLnJlcGxhY2UoIiVzIixhLmRpc3BsYXkpLGUmJihjPWMucmVwbGFjZSgiJXMiLHRoaXMuZmllbGRzW2VdP3RoaXMuZmllbGRzW2VdLmRpc3BsYXk6ZSkpKTt0aGlzLmVycm9ycy5wdXNoKHtpZDphLmlkLG5hbWU6YS5uYW1lLG1lc3NhZ2U6YyxydWxlOmZ9KTticmVha319fTtlLnByb3RvdHlwZS5faG9va3M9e3JlcXVpcmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWEudmFsdWU7cmV0dXJuImNoZWNrYm94Ij09PWEudHlwZXx8InJhZGlvIj09PWEudHlwZT8hMD09PWEuY2hlY2tlZDpudWxsIT09YiYmIiIhPT1ifSwiZGVmYXVsdCI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS52YWx1ZSE9PWJ9LG1hdGNoZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmZvcm1bYl07cmV0dXJuIGM/YS52YWx1ZT09PWMudmFsdWU6ITF9LHZhbGlkX2VtYWlsOmZ1bmN0aW9uKGEpe3JldHVybiBwLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2VtYWlsczpmdW5jdGlvbihhKXthPWEudmFsdWUuc3BsaXQoIiwiKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKylpZighcC50ZXN0KGFbYl0pKXJldHVybiExO3JldHVybiEwfSxtaW5fbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD49cGFyc2VJbnQoYiwxMCk6ITF9LG1heF9sZW5ndGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC50ZXN0KGIpP2EudmFsdWUubGVuZ3RoPD1wYXJzZUludChiLDEwKTohMX0sZXhhY3RfbGVuZ3RoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGgudGVzdChiKT9hLnZhbHVlLmxlbmd0aD09PXBhcnNlSW50KGIsMTApOiExfSxncmVhdGVyX3RoYW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpP3BhcnNlRmxvYXQoYS52YWx1ZSk+cGFyc2VGbG9hdChiKTohMX0sbGVzc190aGFuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGsudGVzdChhLnZhbHVlKT9wYXJzZUZsb2F0KGEudmFsdWUpPHBhcnNlRmxvYXQoYik6ITF9LGFscGhhOmZ1bmN0aW9uKGEpe3JldHVybiB3LnRlc3QoYS52YWx1ZSl9LGFscGhhX251bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIHgudGVzdChhLnZhbHVlKX0sYWxwaGFfZGFzaDpmdW5jdGlvbihhKXtyZXR1cm4geS50ZXN0KGEudmFsdWUpfSxudW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiBoLnRlc3QoYS52YWx1ZSl9LGludGVnZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHYudGVzdChhLnZhbHVlKX0sZGVjaW1hbDpmdW5jdGlvbihhKXtyZXR1cm4gay50ZXN0KGEudmFsdWUpfSxpc19uYXR1cmFsOmZ1bmN0aW9uKGEpe3JldHVybiB6LnRlc3QoYS52YWx1ZSl9LGlzX25hdHVyYWxfbm9femVybzpmdW5jdGlvbihhKXtyZXR1cm4gQS50ZXN0KGEudmFsdWUpfSx2YWxpZF9pcDpmdW5jdGlvbihhKXtyZXR1cm4gQi50ZXN0KGEudmFsdWUpfSx2YWxpZF9iYXNlNjQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEMudGVzdChhLnZhbHVlKX0sdmFsaWRfdXJsOmZ1bmN0aW9uKGEpe3JldHVybiBFLnRlc3QoYS52YWx1ZSl9LHZhbGlkX2NyZWRpdF9jYXJkOmZ1bmN0aW9uKGEpe2lmKCFELnRlc3QoYS52YWx1ZSkpcmV0dXJuITE7dmFyIGI9MCxjPTAsZD0hMTthPWEudmFsdWUucmVwbGFjZSgvXEQvZywiIik7Zm9yKHZhciBlPWEubGVuZ3RoLTE7MDw9ZTtlLS0pYz1hLmNoYXJBdChlKSxjPXBhcnNlSW50KGMsMTApLGQmJjk8KGMqPTIpJiYoYy09OSksYis9YyxkPSFkO3JldHVybiAwPT09YiUxMH0saXNfZmlsZV90eXBlOmZ1bmN0aW9uKGEsYil7aWYoImZpbGUiIT09YS50eXBlKXJldHVybiEwO3ZhciBjPWEudmFsdWUuc3Vic3RyKGEudmFsdWUubGFzdEluZGV4T2YoIi4iKSsxKSxkPWIuc3BsaXQoIiwiKSxlPSExLGc9MCxmPWQubGVuZ3RoO2ZvcihnO2c8ZjtnKyspYz09ZFtnXSYmKGU9ITApO3JldHVybiBlfX07cS5Gb3JtVmFsaWRhdG9yPWV9KSh3aW5kb3csZG9jdW1lbnQpOwpQSwcIZowfxDMYAAAzGAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAdmlldy9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAdmlld1xhZG1pbi9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxhZG1pbi5sYXlvdXQ8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+e3suVGl0bGV9fSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9hZG1pbi5jc3MiLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHA6Ly9saWJzLmJhaWR1LmNvbS9mb250YXdlc29tZS80LjAuMy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvdmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhciI+DQogICAgICAgIDxoMyBjbGFzcz0ibG9nbyBsZWZ0Ij5GeGguR28gLSA8c3Bhbj57ey5UaXRsZX19PC9zcGFuPjwvaDM+DQogICAgICAgIDxkaXYgY2xhc3M9Im5hdiBsZWZ0IHJlbGF0aXZlIj4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJkYXNoYm9hcmQgbGVmdCIgaHJlZj0iL2FkbWluLyI+PGkgY2xhc3M9ImZhIGZhLWRhc2hib2FyZCI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJhcnRpY2xlIGxlZnQiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlcy8iIHRpdGxlPSLmlofnq6AiPjxpIGNsYXNzPSJmYSBmYS1jb3B5Ij48L2k+PC9hPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJwYWdlcyBsZWZ0IiBocmVmPSIvYWRtaW4vcGFnZXMvIiB0aXRsZT0i54us56uL6aG16Z2iIj48aSBjbGFzcz0iZmEgZmEtcGFzdGUiPjwvaT48L2E+DQogICAgICAgICAgICA8YSBjbGFzcz0iY29tbWVudHMgbGVmdCIgaHJlZj0iL2FkbWluL2NvbW1lbnRzLyIgdGl0bGU9IuivhOiuuiI+PGkgY2xhc3M9ImZhIGZhLWNvbW1lbnRzIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9ImZpbGVzIGxlZnQiIGhyZWY9Ii9hZG1pbi9maWxlcy8iIHRpdGxlPSLlqpLkvZPmlofku7YiPjxpIGNsYXNzPSJmYSBmYS1pbmJveCI+PC9pPjwvYT4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJwbHVnaW5zIGxlZnQiIGhyZWY9Ii9hZG1pbi9wbHVnaW5zLyIgdGl0bGU9IuaPkuS7tiI+PGkgY2xhc3M9ImZhIGZhLWdlYXJzIj48L2k+PC9hPg0KICAgICAgICAgICAgPGEgY2xhc3M9InNldHRpbmcgbGVmdCIgaHJlZj0iL2FkbWluL3NldHRpbmcvIiB0aXRsZT0i6K6+572uIj48aSBjbGFzcz0iZmEgZmEtY29nIj48L2k+PC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGEgY2xhc3M9Im91dCBuYXYtaXRlbSByaWdodCIgaHJlZj0iL2xvZ291dC8iIHRpdGxlPSLpgIDlh7oiPjxpIGNsYXNzPSJmYSBmYS1wb3dlci1vZmYgZmEtbGciPjwvaT48L2E+DQogICAgICAgIDxhIGNsYXNzPSJwcm9maWxlIG5hdi1pdGVtIHJpZ2h0IiBocmVmPSIvYWRtaW4vcHJvZmlsZS8iIHRpdGxlPSLmiJEiPjxpIGNsYXNzPSJmYSBmYS11c2VyIj48L2k+PC9hPg0KICAgICAgICA8YSBjbGFzcz0iZnJvbnQgbmF2LWl0ZW0gcmlnaHQiIGhyZWY9Ii8iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0i5p+l55yL572R56uZIj48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluayI+PC9pPjwvYT4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0Ke0BDb250ZW50fQ0KPGRpdiBpZD0iZm9vdGVyIiBjbGFzcz0iY2xlYXIiPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhciI+DQogICAgICAgPHAgY2xhc3M9ImxpbmtzIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgPGEgY2xhc3M9InN0YXQiIGhyZWY9Ii9jbWQvbWVzc2FnZS8iPua2iOaBrzwvYT4NCiAgICAgICAgICAgPGEgY2xhc3M9ImJhY2t1cCIgaHJlZj0iL2NtZC9iYWNrdXAvIj7lpIfku708L2E+DQogICAgICAgICAgIDxhIGNsYXNzPSJlcnIiIGhyZWY9Ii9jbWQvbG9ncy8iPuaXpeW/lzwvYT4NCiAgICAgICAgICAgPGEgY2xhc3M9InN5cyIgaHJlZj0iL2NtZC9tb25pdG9yLyI+57O757ufPC9hPg0KICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImNwIHRleHQtY2VudGVyIj5Qcm91ZGx5IFBvd2VyZWQgYnkgRnhoLkdvPC9wPg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCD+sdxPICAAAyAgAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcYWRtaW5cYXJ0aWNsZXMuaHRtbDx1bCBpZD0iYXJ0aWNsZS1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj4NCiAgICA8bGk+DQogICAgICAgIDxhIGNsYXNzPSJsYmwgbGJsLWJsdWUiIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5re75Yqg5paH56ugPC9hPg0KICAgIDwvbGk+e3tyYW5nZSAuQXJ0aWNsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCJ9fTwvc3Bhbj48aDQgY2xhc3M9ImlubGluZS1ibG9jayB0aXRsZSI+PGEgaHJlZj0ie3suTGlua319IiB0YXJnZXQ9Il9ibGFuayI+e3suVGl0bGV9fTwvYT48L2g0Pnt7aWYgbmUgLlN0YXR1cyAicHVibGlzaCJ9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibGJsIHN0YXR1cyI+6I2J56i/PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9InNsdWciPnt7LlNsdWd9fTwvc3Bhbj57e2lmIGVxIC5Jc0NvbW1lbnQgZmFsc2V9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iaXMtY29tbWVudCI+PGkgY2xhc3M9ImZhLWNvbW1lbnRzIGZhIj48L2k+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9zcGFuPnt7ZW5kfX0NCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50Ij57ey5Db21tZW50TnVtfX0gLyB7ey5IaXRzfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJlZGl0IGxibCBsYmwtZ3JlZW4iIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3t7LklkfX0vIiByZWw9Int7LklkfX0iPue8lui+kTwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBsYmwgbGJsLXJlZCIgaHJlZj0iL2FkbWluL2FydGljbGUve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+5Yig6ZmkPC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KPC91bD4NCjx1bCBpZD0iYXJ0aWNsZS1wYWdlciIgY2xhc3M9InBhZ2VyIGNvbnRhaW5lcjk2MCI+e3tyYW5nZSAuUGFnZXIuUGFnZVNsaWNlfX0NCiAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlcy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKCIuZGVsIikub24oImNsaWNrIixmdW5jdGlvbihlKXsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBpZihjb25maXJtKCLliKDpmaTmlofnq6DlsIbkvb/nm7jlhbPlhoXlrrnlpLHmlYjvvIHnoa7orqTvvJ8iKSl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAidXJsIjoiL2FkbWluL2FydGljbGUvIitpZCsiLyIsDQogICAgICAgICAgICAgICAgInR5cGUiOiJkZWxldGUiLA0KICAgICAgICAgICAgICAgICJzdWNjZXNzIjpmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suWIoOmZpCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pDQogICAgICAgIH0NCiAgICB9KTsNCjwvc2NyaXB0PlBLBwgfwp6+rgYAAK4GAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAB2aWV3XGFkbWluXGNtZC9QSwcIAAAAAAAAAAAAAAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAdmlld1xhZG1pblxjbWRcYmFja3VwLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIGNsZWFyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSBsZWZ0Ij7lpIfku73mlbDmja48L2gxPg0KICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSBsZWZ0IiBpZD0iYmFja3VwLWJ0biI+5aSH5Lu9PC9idXR0b24+DQo8L2hlYWRlcj4NCjx1bCBjbGFzcz0iY21kLWxpc3QiIGlkPSJiYWNrdXAtbGlzdCI+e3tyYW5nZSAuRmlsZXN9fQ0KICAgIDxsaT4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRpbWUiPnt7RGF0ZVRpbWUgLk1vZFRpbWUgIk1NLkREIEhIOm1tIn19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+e3suTmFtZX19IDxhIGNsYXNzPSJsaW5rIiBocmVmPSIvY21kL2JhY2t1cC9maWxlP2ZpbGU9e3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluayI+PC9pPjwvYT48L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJzaXplIj57e0ZpbGVTaXplIC5TaXplfX08L3NwYW4+DQogICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiIHJlbD0ie3suTmFtZX19Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlLW8iPjwvaT48L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgIHR5cGU6ICJwb3N0IiwNCiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICQoJy5jbWQtbGlzdCcpLnByZXBlbmQoJzxsaSBjbGFzcz0iYmFja3VwLWxvYWRpbmciPuWkh+S7veS4rS4uPC9saT4nKTsNCiAgICAgICAgICAgICAgICAgICAgJCgnI2JhY2t1cC1idG4nKS5oaWRlKCk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5iYWNrdXAtbG9hZGluZycpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNtZC1saXN0JykucHJlcGVuZCgnPGxpIGNsYXNzPSJiYWNrdXAtcmVzdWx0Ij7liJrliJrlpIfku73liLAgJyArIGpzb24uZmlsZSArICc8L2xpPicpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQoJyNiYWNrdXAtYnRuJykuc2hvdygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmRlbCcpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsNCiAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgdXJsOiAiL2NtZC9iYWNrdXAvP2ZpbGU9IiArICQodGhpcykuYXR0cigicmVsIiksDQogICAgICAgICAgICAgICAgdHlwZTogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGF0KS5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcIt5vmyUcHAABHBwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxjbWRcbG9nLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSI+6ZSZ6K+v5pel5b+XPC9oMT4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9ImxvZy1saXN0Ij57e3JhbmdlIC5Mb2dzfX0NCiAgICA8bGkgY2xhc3M9ImxvZyByZWxhdGl2ZSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIGlubGluZS1ibG9jayI+e3suTmFtZX19PC9zcGFuPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSBpbmxpbmUtYmxvY2siPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgPHByZSBjbGFzcz0idGV4dCI+e3suVGV4dH19PC9wcmU+DQogICAgICAgIDxhIGNsYXNzPSJyZW1vdmUgYWJzb2x1dGUiIGhyZWY9Ii9jbWQvbG9ncy8/ZmlsZT17ey5OYW1lfX0iPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICA8L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLnJlbW92ZScpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLnoa7orqTliKDpmaTorrDlvZUiKSkgew0KICAgICAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZToiZGVsZXRlIiwNCiAgICAgICAgICAgICAgICAgICAgdXJsOiR0aGlzLmF0dHIoImhyZWYiKSwNCiAgICAgICAgICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwjesGBYGQQAABkEAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAAB2aWV3XGFkbWluXGNtZFxtZXNzYWdlLmh0bWw8aGVhZGVyIGNsYXNzPSJjbWQtaGVhZGVyIj4NCiAgICA8aDEgY2xhc3M9ImNtZC10aXRsZSI+5raI5oGv6K6w5b2VPC9oMT4NCjwvaGVhZGVyPg0KPHVsIGNsYXNzPSJjbWQtbGlzdCIgaWQ9Im1lc3NhZ2UtbGlzdCI+e3tyYW5nZSAuTWVzc2FnZXN9fQ0KICAgIDxsaSBjbGFzcz0ibWVzc2FnZSByZWxhdGl2ZSI+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgIDxkaXYgY2xhc3M9ImRhdGEiPnt7SHRtbCAuRGF0YX19PC9kaXY+DQogICAgPC9saT57e2VuZH19DQo8L3VsPlBLBwjJmMidRgEAAEYBAABQSwMEFAAIAAAAAAAA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dENvbnRlbnR9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNudCI+QHt7LkdldENvbnRlbnQuVGl0bGV9fTwvc3Bhbj57e2Vsc2V9fQ0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNudCI+QOaXoOaViDwvc3Bhbj57e2VuZH19e3tpZiBuZSAuU3RhdHVzICJhcHByb3ZlZCJ9fQ0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLWNoZWNrIiBocmVmPSIjIiByZWw9Int7LklkfX0iIHRpdGxlPSLlrqHmoLgiPjxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSI+PC9pPuWuoeaguOS4rTwvYT57e2VuZH19DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSIgdGl0bGU9IuWbnuWkjSI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLWRlbCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Yig6ZmkIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+e3tIdG1sIC5QYXJlbnRNZH19PC9kaXY+e3tlbmR9fQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj57e2VuZH19DQogICAgPHVsIGlkPSJhcnRpY2xlLXBhZ2VyIiBjbGFzcz0icGFnZXIgY29udGFpbmVyOTYwIj57e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgICAgICA8bGkgY2xhc3M9Iml0ZW17e2lmIGVxICQuUGFnZXIuQ3VycmVudCAufX0gY3VycmVudHt7ZW5kfX0iPjxhIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8/cGFnZT17ey59fSI+e3sufX08L2E+PC9saT57e2VuZH19DQogICAgPC91bD4NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9jb21tZW50cy8iIGNsYXNzPSJmb3JtIGNsZWFyIGxlZnQiIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iaXB0IGxlZnQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIiBpZD0iY29tbWVudC1zdWJtaXQiPuWbnuWkjeivhOiuujwvYnV0dG9uPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIiBpZD0iY29tbWVudC1jbG9zZSI+5YWz6Zet5Zue5aSNPC9idXR0b24+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSIwIiBpZD0iY29tbWVudC1wYXJlbnQiIG5hbWU9InBpZCIvPg0KICAgIDwvZm9ybT4NCjwvZGl2Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgnLmMtZGVsJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWIoOmZpOivhOiuuuWwhuS9v+ebuOWFs+WGheWuueaXoOaViCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgIHVybDogIi9hZG1pbi9jb21tZW50cy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NvbW1lbnQtJyArIGlkKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuWIoOmZpOWksei0pSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJy5jLWNoZWNrJykub24oImNsaWNrIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvbmZpcm0oIuWuoeaguOWQjuatpOS9nOiAheWwhuS4jeWGjeagh+iusOWuoeaguCEiKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgdHlwZTogInB1dCIsDQogICAgICAgICAgICAgICAgICAgIHVybDogIi9hZG1pbi9jb21tZW50cy8/aWQ9IiArIGlkLA0KICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NvbW1lbnQtJyArIGlkKS5maW5kKCIuYy1jaGVjayIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5a6h5qC45aSx6LSlIik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnLmMtcmVwbHknKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtJytpZCkuYXBwZW5kKCQoJyNjb21tZW50LWZvcm0nKS5kZXRhY2goKS5zaG93KCkpOw0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtcGFyZW50JykudmFsKGlkKTsNCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2NvbW1lbnQtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgaWYoanNvbi5yZXMpew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Llm57lpI0iKTsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vY29tbWVudHMvIjsNCiAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIGFsZXJ0KCLlm57lpI3lpLHotKUiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgICQoJyNjb21tZW50LWNsb3NlJykub24oImNsaWNrIixmdW5jdGlvbigpew0KICAgICAgICAgICAgJCgnI2NvbW1lbnQtZm9ybScpLmhpZGUoKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LXBhcmVudCcpLnZhbCgwKTsNCiAgICAgICAgICAgICQoJyNjb21tZW50LWNvbnRlbnQnKS52YWwoIiIpOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCECYCO/tDwAA7Q8AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAHZpZXdcYWRtaW5cZWRpdF9hcnRpY2xlLmh0bWw8c3R5bGU+DQogICAgQGltcG9ydCAiL3N0YXRpYy9jc3MvY29kZW1pcnJvci5jc3MiOw0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2hpZ2hsaWdodC5jc3MiOw0KPC9zdHlsZT4NCjxmb3JtIGlkPSJhcnRpY2xlLWZvcm0iIGNsYXNzPSJmb3JtIGNsZWFyIGNvbnRhaW5lciIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiPg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgaWQ9InRpdGxlIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InRpdGxlIiBwbGFjZWhvbGRlcj0i5paH56ug5qCH6aKYIiB2YWx1ZT0ie3suQXJ0aWNsZS5UaXRsZX19Ii8+DQogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBpZD0iY29udGVudCIgY2xhc3M9ImlwdCI+e3tIdG1sIC5BcnRpY2xlLlRleHR9fTwvdGV4dGFyZWE+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVmdCBncmlkLTEtMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXcgbWFya2Rvd24iPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvcm0tdmVydGljYWwgbGVmdCI+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gbGVmdCIgdHlwZT0iYnV0dG9uIiBpZD0iYXR0YWNoLXNob3ciPua3u+WKoOmZhOS7tjwvYnV0dG9uPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3BhbiBmb3I9InNsdWciPuWbuuWumumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2x1ZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2x1ZyIgcmVxdWlyZWQ9InJlcXVpcmVkIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5ZSv5LiA6ZO+5o6lIiB2YWx1ZT0ie3suQXJ0aWNsZS5TbHVnfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7moIfnrb48L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InRhZyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0idGFnIiBwbGFjZWhvbGRlcj0i5paH56ug55qE5qCH562+IiB2YWx1ZT0ie3suQXJ0aWNsZS5UYWdTdHJpbmd9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoInt7aWYgZXEgLkFydGljbGUuU3RhdHVzICJwdWJsaXNoIn19IHNlbGVjdGVke3tlbmR9fT7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCJ7e2lmIGVxIC5BcnRpY2xlLlN0YXR1cyAiZHJhZnQifX0gc2VsZWN0ZWR7e2VuZH19PuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSJ7e2lmIGVxIC5BcnRpY2xlLklzQ29tbWVudCB0cnVlfX0gc2VsZWN0ZWR7e2VuZH19PuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuQXJ0aWNsZS5Jc0NvbW1lbnQgZmFsc2V9fSBzZWxlY3RlZHt7ZW5kfX0+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0ic3VibWl0IHRleHQtcmlnaHQiIGlkPSJhcnRpY2xlLXN1Ym1pdCI+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmOaWh+eroDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgi5bey5L+d5a2Y77yM5Y675p+l55yL77yf6L+Y5piv57un57ut57yW6L6RIikpIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2FydGljbGVzLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpbml0VXBsb2FkKCIjYXJ0aWNsZS1zdWJtaXQiKTsNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhLnOnxbQ0AAG0NAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB2aWV3XGFkbWluXGVkaXRfcGFnZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9Iumhtemdouagh+mimCIgdmFsdWU9Int7LlBhZ2UuVGl0bGV9fSIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPnt7SHRtbCAuUGFnZS5UZXh0fX08L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumhtemdoueahOWUr+S4gOmTvuaOpSIgdmFsdWU9Int7LlBhZ2UuU2x1Z319Ii8+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5L+d5a2Y54q25oCBPC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzdGF0dXMiIGlkPSJzdGF0dXMiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InB1Ymxpc2gie3tpZiBlcSAuUGFnZS5TdGF0dXMgInB1Ymxpc2gifX0gc2VsZWN0ZWR7e2VuZH19PuWFrOW8gDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyYWZ0Int7aWYgZXEgLlBhZ2UuU3RhdHVzICJkcmFmdCJ9fSBzZWxlY3RlZHt7ZW5kfX0+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNDb21tZW50IHRydWV9fSBzZWxlY3RlZHt7ZW5kfX0+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCJ7e2lmIGVxIC5QYWdlLklzQ29tbWVudCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPue9rumhtumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ibGluayIgaWQ9ImlzLWxpbmsiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAie3tpZiBlcSAuUGFnZS5Jc0xpbmtlZCBmYWxzZX19IHNlbGVjdGVke3tlbmR9fT7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxInt7aWYgZXEgLlBhZ2UuSXNMaW5rZWQgdHJ1ZX19IHNlbGVjdGVke3tlbmR9fT7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5paH56ugPC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci1tb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvaGlnaGxpZ2h0Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy91cGxvYWQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50IiksIHsNCiAgICAgICAgICAgIG1vZGU6ICdtYXJrZG93bicsDQogICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwNCiAgICAgICAgICAgIHRoZW1lOiAiZGVmYXVsdCIsDQogICAgICAgICAgICBleHRyYUtleXM6IHsiRW50ZXIiOiAibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0In0NCiAgICAgICAgfSk7DQogICAgICAgIGVkaXRvci5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHN0ciA9IGVkaXRvci5nZXRWYWx1ZSgpOw0KICAgICAgICAgICAgJCgnLnByZXZpZXcnKS5odG1sKG1hcmtlZChzdHIpKS5maW5kKCJwcmUgY29kZSIpLmVhY2goZnVuY3Rpb24gKGksIGUpIHsNCiAgICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEJsb2NrKGUpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICAkKCcjYXJ0aWNsZS1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlcykgew0KICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCLlt7Lkv53lrZjvvIzljrvmn6XnnIvvvJ/ov5jmmK/nu6fnu63nvJbovpEiKSkgew0KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIvYWRtaW4vcGFnZXMvIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCLZ4MjLjDQAA4w0AAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAHZpZXdcYWRtaW5cZmlsZXMuaHRtbDx1bCBpZD0iZmlsZXMtbGlzdCIgY2xhc3M9ImFkbWluIGNvbnRhaW5lcjk2MCBwYWdlciI+DQogICAgPGxpIGNsYXNzPSJmaWxlIiBpZD0iZmlsZXMtYnRuLWxpIj4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ncmVlbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICA8L2xpPnt7cmFuZ2UgLkZpbGVzfX0NCiAgICA8bGkgY2xhc3M9ImZpbGUiIGlkPSJmaWxlLXt7LklkfX0iPg0KICAgICAgICA8c3BhbiBjbGFzcz0idXBsb2FkLXRpbWUiPnt7RGF0ZUludDY0IC5VcGxvYWRUaW1lICJNTS5ERCJ9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9InNpemUiPnt7RmlsZVNpemUgLlNpemV9fTwvc3Bhbj4NCiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnt7Lk5hbWV9fTwvc3Bhbj4NCiAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii97ey5Vcmx9fSIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSIve3suVXJsfX0iPjxpIGNsYXNzPSJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZSI+PC9pPjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImRlbCBmYWRlLW91dCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19IiB0aXRsZT0i5Yig6Zmk6ZmE5Lu2Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlIj48L2k+PC9hPg0KICAgIDwvbGk+e3tlbmR9fQ0KICAgIHt7cmFuZ2UgLlBhZ2VyLlBhZ2VTbGljZX19DQogICAgPGxpIGNsYXNzPSJpdGVte3tpZiBlcSAkLlBhZ2VyLkN1cnJlbnQgLn19IGN1cnJlbnR7e2VuZH19Ij48YSBocmVmPSIvYWRtaW4vZmlsZXMvP3BhZ2U9e3sufX0iPnt7Ln19PC9hPjwvbGk+e3tlbmR9fQ0KPC91bD4NCjxmb3JtIGNsYXNzPSJmb3JtIGhpZGUiIGlkPSJhdHRhY2gtZm9ybSIgYWN0aW9uPSIvYWRtaW4vZmlsZXMvdXBsb2FkLyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8aW5wdXQgaWQ9ImF0dGFjaC11cGxvYWQiIHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICBpbml0VXBsb2FkKCIjYXR0YWNoLXNob3ciKTsNCiAgICAgICAgJCgiLmRlbCIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjb25maXJtKCLliKDpmaTpmYTku7bnm7jlhbPpk77mjqXkvJrlpLHmlYghIikpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHRoaXMpLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiL2FkbWluL2ZpbGVzLz9pZD0iICsgaWQsDQogICAgICAgICAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZmlsZS0nK2lkKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCGLFm/rsBgAA7AYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHZpZXdcYWRtaW5caG9tZS5odG1sPGRpdiBjbGFzcz0iYWRtaW4gY29udGFpbmVyIGNsZWFyIiBpZD0iZGFzaGJvYXJkIj4NCiAgICA8ZGl2IGNsYXNzPSJncmlkLTEtNSBsZWZ0Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0id2VsY29tZSI+DQogICAgICAgICAgICA8aDQ+V2VsY29tZTwvaDQ+DQogICAgICAgICAgICA8cD7mrKLov47lm57mnaXvvIwgPHN0cm9uZz57ey5Vc2VyLk5pY2t9fTwvc3Ryb25nPjwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InF1aWNrLWxpbmsiPg0KICAgICAgICAgICAgPGg0PuW/q+mAn+mTvuaOpTwvaDQ+DQogICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9hcnRpY2xlL3dyaXRlLyI+5pKw5YaZ5paH56ugPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9wYWdlL3dyaXRlLyI+5re75Yqg6aG16Z2iPC9hPjwvbGk+DQogICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ii9hZG1pbi9jb21tZW50cy8iPuafpeeci+WSjOWuoeaguOivhOiuujwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vc2V0dGluZy8iPuS/ruaUuemFjee9rjwvYT48L2xpPg0KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIvYWRtaW4vcHJvZmlsZS8iPuabtOaWsOS4quS6uui1hOaWmTwvYT48L2xpPg0KICAgICAgICAgICAgPC91bD4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTIgbGVmdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5Ij4NCiAgICAgICAgICAgIDxoND7mnIDmlrDmtLvliqg8L2g0Pnt7cmFuZ2UgLk1lc3NhZ2VzfX0NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1zZyByZWxhdGl2ZSB7ey5UeXBlfX0iPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aW1lIj57e0RhdGVJbnQ2NCAuQ3JlYXRlVGltZSAiTU0uREQgSEg6bW0ifX08L3NwYW4+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YSI+e3tIdG1sIC5EYXRhfX08L2Rpdj4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0icmVhZCBhYnNvbHV0ZSIgaHJlZj0iL2FkbWluL21lc3NhZ2UvcmVhZD9pZD17ey5JZH19IiByZWw9Int7LklkfX0iPjxpIGNsYXNzPSJmYSBmYS1jaGVjayI+PC9pPjwvYT4NCiAgICAgICAgICAgIDwvZGl2Pnt7ZW5kfX17e2lmIGx0IChsZW4gLk1lc3NhZ2VzKSAxfX0NCiAgICAgICAgICAgIDxwPuayoeacieaWsOeahOa0u+WKqOS/oeaBrzwvcD4NCiAgICAgICAgICAgIHt7ZW5kfX0NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZ3JpZC0xLTQgcmlnaHQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cyI+DQogICAgICAgICAgICA8aDQ+5pWw5o2u57uf6K6hPC9oND4NCiAgICAgICAgICAgIDxwPuW3sue7j+WPkeW4g+aWh+eroCA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5BcnRpY2xlc319PC9zcGFuPiDnr4fvvIwNCiAgICAgICAgICAgIOmhtemdoiA8c3BhbiBjbGFzcz0ibGJsIGxibC1yZWQiPnt7LlN0YXRpcy5QYWdlc319PC9zcGFuPiDkuKrvvIwgPGJyLz4NCiAgICAgICAgICAgIOaUtuWIsOivhOiuuiA8c3BhbiBjbGFzcz0ibGJsIGxibC1ibHVlIj57ey5TdGF0aXMuQ29tbWVudHN9fTwvc3Bhbj4g5qyh77yMDQogICAgICAgICAgICDkuIrkvKAgPHNwYW4gY2xhc3M9ImxibCBsYmwtZ3JlZW4iPnt7LlN0YXRpcy5GaWxlc319PC9zcGFuPiDkuKrpmYTku7Y8L3A+DQogICAgICAgICAgICA8cD7lvZPliY3nqIvluo/niYjmnKzvvJo8c3Ryb25nPnt7LlN0YXRpcy5WZXJzaW9ufX08L3N0cm9uZz48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJvZmZpY2UiPg0KICAgICAgICAgICAgPGg0PuWumOaWuea2iOaBrzwvaDQ+DQogICAgICAgICAgICA8cD7ov5jmsqHmnInmtojmga88L3A+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0Pg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICAgICAgJCgiLnJlYWQiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7DQogICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICQucG9zdCgkdGhpcy5hdHRyKCJocmVmIiksZnVuY3Rpb24oanNvbil7DQogICAgICAgICAgICAgIGlmKGpzb24ucmVzKXsNCiAgICAgICAgICAgICAgICAgICR0aGlzLnBhcmVudCgpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgIH0pOw0KICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgfSk7DQogICAgfSk7DQo8L3NjcmlwdD5QSwcI9JTc5iAJAAAgCQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxsb2dpbi5odG1sPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+DQogICAgPHRpdGxlPueZu+W9lSAtIEZ4aC5HbzwvdGl0bGU+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9jb21tb24uY3NzIi8+DQogICAgPHN0eWxlPg0KICAgICAgICAjbG9naW4tZm9ybXsNCiAgICAgICAgICAgIHdpZHRoOiAyODBweDsNCiAgICAgICAgICAgIG1hcmdpbjogODBweCBhdXRvOw0KICAgICAgICB9DQogICAgICAgICNsb2dpbi1mb3JtIGgxew0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsNCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxmb3JtIGlkPSJsb2dpbi1mb3JtIiBjbGFzcz0iZm9ybSBmb3JtLXZlcnRpY2FsIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCIgbmFtZT0ibG9naW4tZm9ybSI+DQogICAgPGgxPueZu+W9lSAtIEZ4aC5HbzwvaDE+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsIGZvcj0idXNlciI+55So5oi35ZCNPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQiIGlkPSJ1c2VyIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZD0icmVxdWlyZWQiIG5hbWU9InVzZXIiLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVzZXItaW52YWxpZCI+55So5oi35ZCN5Li65a2X5q+NK+aVsOWtl++8jOmVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9InBhc3N3b3JkIj7nlKjmiLflr4bnoIE8L2xhYmVsPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlwdCIgaWQ9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJwYXNzd29yZCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0icGFzc3dvcmQtaW52YWxpZCI+5a+G56CB6ZW/5bqmNC0yMOS4quWtl+espjwvc3Bhbj4NCiAgICA8L3A+DQogICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7nmbsg5b2VPC9idXR0b24+DQogICAgPHNwYW4gY2xhc3M9InRpcCI+6buY6K6k6K6w5L2P55m76ZmGM+WkqTwvc3Bhbj4NCjwvZm9ybT4NCjxzY3JpcHQgc3JjPSJodHRwOi8vY2RuLnN0YXRpY2ZpbGUub3JnL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iaHR0cDovL2Nkbi5zdGF0aWNmaWxlLm9yZy9qcXVlcnkuZm9ybS8zLjQ2L2pxdWVyeS5mb3JtLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvdmFsaWRhdGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigibG9naW4tZm9ybSIsWw0KICAgICAgICAgICAgeyJuYW1lIjoidXNlciIsInJ1bGVzIjoiYWxwaGFfbnVtZXJpY3xtaW5fbGVuZ3RoWzRdfG1heF9sZW5ndGhbMjBdIn0sDQogICAgICAgICAgICB7Im5hbWUiOiJwYXNzd29yZCIsInJ1bGVzIjoicmVxdWlyZWR8bWluX2xlbmd0aFs0XXxtYXhfbGVuZ3RoWzIwXSJ9DQogICAgICAgIF0sZnVuY3Rpb24oZXJyb3JzLGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCgnLmludmFsaWQnKS5oaWRlKCk7DQogICAgICAgICAgICBpZihlcnJvcnMubGVuZ3RoKXsNCiAgICAgICAgICAgICAgICAkKCIjIitlcnJvcnNbMF0uaWQrIi1pbnZhbGlkIikucmVtb3ZlQ2xhc3MoImhpZGUiKS5zaG93KCk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJCgnI2xvZ2luLWZvcm0nKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLnmbvlvZXplJnor6/vvIzor7fmo4Dmn6XnlKjmiLfmiJblr4bnoIEiKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pDQogICAgfSk7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD5QSwcI1uB4YpAIAACQCAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAdmlld1xhZG1pblxwYWdlcy5odG1sPHVsIGlkPSJhcnRpY2xlLWxpc3QiIGNsYXNzPSJjb250YWluZXI5NjAgYWRtaW4iPg0KICAgIDxsaT4NCiAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSIgaHJlZj0iL2FkbWluL3BhZ2Uvd3JpdGUvIj7mt7vliqDpobXpnaI8L2E+DQogICAgPC9saT57e3JhbmdlIC5QYWdlc319DQogICAgPGxpPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGltZSI+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPjxoNCBjbGFzcz0iaW5saW5lLWJsb2NrIHRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRhcmdldD0iX2JsYW5rIj57ey5UaXRsZX19PC9hPjwvaDQ+e3tpZiBuZSAuU3RhdHVzICJwdWJsaXNoIn19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsYmwgc3RhdHVzIj7ojYnnqL88L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ic2x1ZyI+e3suU2x1Z319PC9zcGFuPnt7aWYgZXEgLklzQ29tbWVudCBmYWxzZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJpcy1jb21tZW50Ij48aSBjbGFzcz0iZmEtY29tbWVudHMgZmEiPjwvaT48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0iY291bnQiPnt7LkNvbW1lbnROdW19fSAvIHt7LkhpdHN9fTwvc3Bhbj4NCiAgICAgICAgPGEgY2xhc3M9ImVkaXQgbGJsIGxibC1ncmVlbiIgaHJlZj0iL2FkbWluL3BhZ2Uve3suSWR9fS8iIHJlbD0ie3suSWR9fSI+57yW6L6RPC9hPg0KICAgICAgICA8YSBjbGFzcz0iZGVsIGxibCBsYmwtcmVkIiBocmVmPSIvYWRtaW4vcGFnZS97ey5JZH19LyIgcmVsPSJ7ey5JZH19Ij7liKDpmaQ8L2E+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHVsIGlkPSJhcnRpY2xlLXBhZ2VyIiBjbGFzcz0icGFnZXIgY29udGFpbmVyOTYwIj57e3JhbmdlIC5QYWdlci5QYWdlU2xpY2V9fQ0KICAgIDxsaSBjbGFzcz0iaXRlbXt7aWYgZXEgJC5QYWdlci5DdXJyZW50IC59fSBjdXJyZW50e3tlbmR9fSI+PGEgaHJlZj0iL2FkbWluL3BhZ2VzLz9wYWdlPXt7Ln19Ij57ey59fTwvYT48L2xpPnt7ZW5kfX0NCjwvdWw+DQo8c2NyaXB0Pg0KICAgICQoIi5kZWwiKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpew0KICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgIGlmKGNvbmZpcm0oIuWIoOmZpOmhtemdouWwhuS9v+ebuOWFs+WGheWuueWkseaViO+8geehruiupO+8nyIpKXsNCiAgICAgICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cigicmVsIik7DQogICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICJ1cmwiOiIvYWRtaW4vcGFnZS8iK2lkKyIvIiwNCiAgICAgICAgICAgICAgICAidHlwZSI6ImRlbGV0ZSIsDQogICAgICAgICAgICAgICAgInN1Y2Nlc3MiOmZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bey5Yig6ZmkIik7DQogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCKgrRkacBgAAnAYAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcYWRtaW5ccGFzc3dvcmQuaHRtbDxmb3JtIGlkPSJwYXNzd29yZCIgY2xhc3M9ImZvcm0gZm9ybS1hbGlnbiBjbGVhciIgYWN0aW9uPSIjIiBuYW1lPSJwYXNzd29yZC1mb3JtIiBtZXRob2Q9InBvc3QiPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9Im9sZCI+5pen5a+G56CBPC9sYWJlbD4NCiAgICAgICAgPGlucHV0IGlkPSJvbGQiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJvbGQiIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7pqozor4Hml6flr4bnoIE8L3NwYW4+PGJyLz4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9Im9sZC1pbnZhbGlkIj7lr4bnoIHplb/luqY0LTIw5Liq5a2X56ymPC9zcGFuPg0KICAgIDwvcD4NCiAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICA8bGFiZWwgZm9yPSJuZXciPuaWsOWvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0ibmV3IiB0eXBlPSJwYXNzd29yZCIgbmFtZT0ibmV3IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz48YnIvPg0KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0ibmV3LWludmFsaWQiPuWvhueggemVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgPC9wPg0KICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgIDxsYWJlbCBmb3I9ImNvbmZpcm0iPuehruiupOWvhueggTwvbGFiZWw+DQogICAgICAgIDxpbnB1dCBpZD0iY29uZmlybSIgdHlwZT0icGFzc3dvcmQiIG5hbWU9ImNvbmZpcm0iIHJlcXVpcmVkPSJyZXF1aXJlZCIgY2xhc3M9ImlwdCIvPjxici8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJjb25maXJtLWludmFsaWQiPuehruiupOWvhueggeS4jeWMuemFjTwvc3Bhbj4NCiAgICA8L3A+DQogICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5L+u5pS5PC9idXR0b24+DQogICAgPC9wPg0KPC9mb3JtPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgIG5ldyBGb3JtVmFsaWRhdG9yKCJwYXNzd29yZC1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJvbGQiLCJydWxlcyI6Im1pbl9sZW5ndGhbMl18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6Im5ldyIsInJ1bGVzIjoibWluX2xlbmd0aFsyXXxtYXhfbGVuZ3RoWzIwXSJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoiY29uZmlybSIsInJ1bGVzIjoicmVxdWlyZWR8bWF0Y2hlc1tuZXddIn0NCiAgICAgICAgXSxmdW5jdGlvbihlcnJvcnMsZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAkKCcuaW52YWxpZCcpLmhpZGUoKTsNCiAgICAgICAgICAgIGlmKGVycm9ycy5sZW5ndGgpew0KICAgICAgICAgICAgICAgICQoIiMiK2Vycm9yc1swXS5pZCsiLWludmFsaWQiKS5yZW1vdmVDbGFzcygiaGlkZSIpLnNob3coKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjcGFzc3dvcmQnKS5hamF4U3VibWl0KGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKCFqc29uLnJlcyl7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIuW3suS/neWtmCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KQ0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCG5xJ4FPBwAATwcAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAHZpZXdcYWRtaW5ccGx1Z2luLmh0bWw8dWwgaWQ9InBsdWdpbi1saXN0IiBjbGFzcz0iY29udGFpbmVyOTYwIGFkbWluIj57e3JhbmdlIC5QbHVnaW5zfX0NCiAgICA8bGkgY2xhc3M9ImNsZWFyIj57e2lmIC5Jc0FjdGl2ZX19DQogICAgICAgIDxzcGFuIGNsYXNzPSJsZWZ0IGxibCBhY3RpdmUgbGJsLWdyZWVuIj4mbmJzcDs8L3NwYW4+e3tlbmR9fQ0KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSBsZWZ0Ij57ey5OYW1lfX08L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uIGxlZnQiPnt7LlZlcnNpb259fTwvc3Bhbj57e2lmIC5IYXNTZXR0aW5nfX0NCiAgICAgICAgPGEgY2xhc3M9InNldHRpbmcgbGVmdCIgaHJlZj0iL2FkbWluL3BsdWdpbnMve3suS2V5fX0vIj7pgInpobk8L2E+e3tlbmR9fXt7aWYgLklzQWN0aXZlfX0NCiAgICAgICAgPGEgY2xhc3M9ImRlYWN0aXZhdGUgbGJsIGxibC1yZWQgcmlnaHQiIGhyZWY9IiMiIHJlbD0ie3suS2V5fX0iPuWwgeWNsDwvYT57e2Vsc2V9fQ0KICAgICAgICA8YSBjbGFzcz0iYWN0aXZhdGUgbGJsIGxibC1ibHVlIHJpZ2h0IiBocmVmPSIjIiByZWw9Int7LktleX19Ij7mv4DmtLs8L2E+e3tlbmR9fQ0KICAgICAgICA8cCBjbGFzcz0iZGVzYyBsZWZ0Ij57ey5EZXNjfX08L3A+DQogICAgPC9saT57e2VuZH19DQo8L3VsPg0KPHNjcmlwdD4NCiAgICAkKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCgiLmRlYWN0aXZhdGUiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOw0KICAgICAgICAgICAgdmFyIHAgPSAkdGhpcy5hdHRyKCJyZWwiKTsNCiAgICAgICAgICAgICQucG9zdCgiIiwgew0KICAgICAgICAgICAgICAgICJhY3Rpb24iOiAiZGVhY3RpdmF0ZSIsDQogICAgICAgICAgICAgICAgInBsdWdpbiI6IHANCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLm9mZigiY2xpY2siKS50ZXh0KCLkuIvmrKHmv4DmtLsiKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5bCB5Y2w5aSx6LSlIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfSk7DQogICAgICAgICQoIi5hY3RpdmF0ZSIpLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgcCA9ICR0aGlzLmF0dHIoInJlbCIpOw0KICAgICAgICAgICAgJC5wb3N0KCIiLCB7DQogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJhY3RpdmF0ZSIsDQogICAgICAgICAgICAgICAgInBsdWdpbiI6IHANCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICAgICAgaWYgKGpzb24ucmVzKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLm9mZigiY2xpY2siKS50ZXh0KCLkuIvmrKHlsIHljbAiKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgi5r+A5rS75aSx6LSlIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwhPcFmhYgYAAGIGAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAB2aWV3XGFkbWluXHBsdWdpbl9zZXR0aW5nLmh0bWw8Zm9ybSBpZD0icGx1Z2luLXNldHRpbmctZm9ybSIgY2xhc3M9ImZvcm0gY29udGFpbmVyOTYwIGFkbWluIiBhY3Rpb249IiMiIG1ldGhvZD0icG9zdCI+DQogICAge3tIdG1sIC5Gb3JtfX0NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsNCiAgICAgICAgJCgnI3BsdWdpbi1zZXR0aW5nLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgIGFsZXJ0KGpzb24ucmVzID8gIuW3suS/neWtmCI6IuS/neWtmOWksei0pSIpOw0KICAgICAgICB9KQ0KICAgIH0pDQo8L3NjcmlwdD5QSwcINCtz1TgBAAA4AQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAdmlld1xhZG1pblxwcm9maWxlLmh0bWw8Zm9ybSBpZD0icHJvZmlsZSIgY2xhc3M9ImFkbWluIGZvcm0gY2xlYXIgZm9ybS1hbGlnbiIgYWN0aW9uPSIjIiBtZXRob2Q9InBvc3QiIG5hbWU9InByb2ZpbGUtZm9ybSI+DQogICAgPGRpdiBjbGFzcz0iYXZhdGFyIGdyaWQtMS00IGxlZnQgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3suVXNlci5BdmF0YXJ9fSIgYWx0PSJ7ey5Vc2VyLk5pY2t9fSIgY2xhc3M9ImZpZWxkIi8+DQogICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAgZmllbGQgaW5saW5lLWJsb2NrIj7lpLTlg4/nlLEgPGEgaHJlZj0iaHR0cDovL2dyYXZhdGFyLmNvbS8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vLWZvbGxvdyI+R3JhdmF0YXI8L2E+IOaPkOS+mzwvc3Bhbj4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLXJlZCBpbmxpbmUtYmxvY2siIGhyZWY9Ii9hZG1pbi9wYXNzd29yZC8iPuS/ruaUueWvhueggTwvYT4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImluZm8gcmlnaHQgZ3JpZC0zLTQiPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0idXNlciI+55m75b2V5ZCNPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0idXNlciIgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgdmFsdWU9Int7LlVzZXIuTmFtZX19IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPueZu+W9leeahOeUqOaIt+WQjTwvc3Bhbj48YnIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9InVzZXItaW52YWxpZCI+55So5oi35ZCN5Li65a2X5q+NK+aVsOWtl++8jOmVv+W6pjQtMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9Im5pY2siPuaYteensDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9Im5pY2siIHR5cGU9InRleHQiIG5hbWU9Im5pY2siIHZhbHVlPSJ7ey5Vc2VyLk5pY2t9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIiBjbGFzcz0iaXB0Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIj7mmL7npLrlnKjliY3lj7DnmoTnp7Dlkbw8L3NwYW4+DQogICAgICAgICAgICA8YnIvPjxzcGFuIGNsYXNzPSJpbnZhbGlkIGxibCBsYmwtcmVkIGhpZGUiIGlkPSJuaWNrLWludmFsaWQiPuaYteensOmVv+W6pjItMjDkuKrlrZfnrKY8L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9ImZpZWxkIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImVtYWlsIj7pgq7nrrE8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJlbWFpbCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiB2YWx1ZT0ie3suVXNlci5FbWFpbH19IiByZXF1aXJlZD0icmVxdWlyZWQiIGNsYXNzPSJpcHQiLz4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXAiPuiBlOezu+mCrueuse+8jOWNgeWIhumHjeimge+8gTwvc3Bhbj4NCiAgICAgICAgICAgIDxici8+PHNwYW4gY2xhc3M9ImludmFsaWQgbGJsIGxibC1yZWQgaGlkZSIgaWQ9ImVtYWlsLWludmFsaWQiPumCrueuseagvOW8j+mUmeivrzwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0idXJsIj7nvZHlnYA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJ1cmwiIHR5cGU9InVybCIgbmFtZT0idXJsIiB2YWx1ZT0ie3suVXNlci5Vcmx9fSIgY2xhc3M9ImlwdCIvPg0KICAgICAgICAgICAgPGJyLz48c3BhbiBjbGFzcz0iaW52YWxpZCBsYmwgbGJsLXJlZCBoaWRlIiBpZD0idXJsLWludmFsaWQiPue9keWdgOagvOW8j+mUmeivrzwvc3Bhbj4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iZmllbGQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQgYmlvIiBuYW1lPSJiaW8iIGlkPSJiaW8iPnt7LlVzZXIuQmlvfX08L3RleHRhcmVhPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJmaWVsZCI+DQogICAgICAgICAgICA8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5L+d5a2Y5L+u5pS5PC9idXR0b24+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCjwvZm9ybT4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbigpew0KICAgICAgICBuZXcgRm9ybVZhbGlkYXRvcigicHJvZmlsZS1mb3JtIixbDQogICAgICAgICAgICB7Im5hbWUiOiJ1c2VyIiwicnVsZXMiOiJhbHBoYV9udW1lcmljfG1pbl9sZW5ndGhbNF18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6Im5pY2siLCJydWxlcyI6Im1pbl9sZW5ndGhbMl18bWF4X2xlbmd0aFsyMF0ifSwNCiAgICAgICAgICAgIHsibmFtZSI6ImVtYWlsIiwicnVsZXMiOiJ2YWxpZF9lbWFpbCJ9LA0KICAgICAgICAgICAgeyJuYW1lIjoidXJsIiwicnVsZXMiOiJ2YWxpZF91cmwifQ0KICAgICAgICBdLGZ1bmN0aW9uKGVycm9ycyxlKXsNCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICQoJy5pbnZhbGlkJykuaGlkZSgpOw0KICAgICAgICAgICAgaWYoZXJyb3JzLmxlbmd0aCl7DQogICAgICAgICAgICAgICAgJCgiIyIrZXJyb3JzWzBdLmlkKyItaW52YWxpZCIpLnJlbW92ZUNsYXNzKCJoaWRlIikuc2hvdygpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoJyNwcm9maWxlJykuYWpheFN1Ym1pdChmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZighanNvbi5yZXMpew0KICAgICAgICAgICAgICAgICAgICBhbGVydChqc29uLm1zZyk7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLlt7Lkv53lrZgiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICB9KTsNCjwvc2NyaXB0PlBLBwgfj6FfAgwAAAIMAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABcAAAB2aWV3XGFkbWluXHNldHRpbmcuaHRtbDx1bCBpZD0ic2V0dGluZy1uYXYiIGNsYXNzPSJjb250YWluZXIgdGV4dC1jZW50ZXIiPg0KICAgIDxsaT48YSBocmVmPSIjZ2VuZXJhbCI+5Z+65pysPC9hPjwvbGk+DQogICAgPGxpPjxhIGhyZWY9IiNuYXYiPuWvvOiIqjwvYT48L2xpPg0KICAgIDxsaT48YSBocmVmPSIjY3VzdG9tIj7oh6rlrprkuYk8L2E+PC9saT4NCjwvdWw+DQo8ZGl2IGlkPSJzZXR0aW5nLXBhbmVscyIgY2xhc3M9ImNvbnRhaW5lciI+DQogICAgPGZvcm0gaWQ9InNldHRpbmctZm9ybSIgY2xhc3M9InNldHRpbmctZm9ybSBmb3JtIGZvcm0tYWxpZ24gc2V0dGluZy1wYW5lbCIgYWN0aW9uPSIvYWRtaW4vc2V0dGluZy8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdXJsIj7nq5nngrnlnLDlnYA8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXVybCIgY2xhc3M9ImlwdCIgdHlwZT0idXJsIiBuYW1lPSJzaXRlX3VybCIgcmVxdWlyZWQ9InJlcXVpcmVkIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3VybGB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtdGl0bGUiPuermeeCueS4u+agh+mimDwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtdGl0bGUiIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNpdGVfdGl0bGUiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV90aXRsZWB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtc3ViLXRpdGxlIj7nq5nngrnlia/moIfpopg8L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXN1Yi10aXRsZSIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9zdWJfdGl0bGUiIHJlcXVpcmVkPSJyZXF1aXJlZCIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9zdWJfdGl0bGVgfX0iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLWtleXdvcmRzIj5NZXRh5YWz6ZSu5a2XPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0ic2l0ZS1rZXl3b3JkcyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9rZXl3b3JkcyIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9rZXl3b3Jkc2B9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9InNpdGUtZGVzYyI+TWV0YeermeeCueS7i+e7jTwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNpdGUtZGVzYyIgY2xhc3M9ImlwdCIgdHlwZT0idGV4dCIgbmFtZT0ic2l0ZV9kZXNjcmlwdGlvbiIgdmFsdWU9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImFydGljbGUtc2l6ZSI+5Y2V6aG15paH56ug5YiX6KGo5pWwPC9sYWJlbD4NCiAgICAgICAgICAgIDxpbnB1dCBpZD0iYXJ0aWNsZS1zaXplIiBjbGFzcz0iaXB0IiB0eXBlPSJudW1iZXIiIG5hbWU9ImFydGljbGVfc2l6ZSIgdmFsdWU9Int7U2V0dGluZyBgYXJ0aWNsZV9zaXplYH19IiBtYXg9IjEwIiBtaW49IjMiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJzaXRlLXRoZW1lIj7kuLvpopjnm67lvZXlkI08L2xhYmVsPg0KICAgICAgICAgICAgPGlucHV0IGlkPSJzaXRlLXRoZW1lIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRlX3RoZW1lIiB2YWx1ZT0ie3tTZXR0aW5nIGBzaXRlX3RoZW1lYH19Ii8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGlwIGJsb2NrIj7kuLvpopjljbPmjIflkJHnmoTmqKHmnb/nm67lvZXvvIzlhbfkvZPlhoXlrrnor7flj4LogIMgZGVmYXVsdCDnm67lvZXvvIjljbMgZGVmYXVsdCDkuLvpopjvvIk8L3NwYW4+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzaXRlX3RoZW1lX2RlZiIgdmFsdWU9ImRlZmF1bHQiLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8bGFiZWwgZm9yPSJnby1tYXJrZG93biI+R2/muLLmn5NNYXJrZG93bjwvbGFiZWw+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImdvLW1hcmtkb3duIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJlbmFibGVfZ29fbWFya2Rvd24iIHZhbHVlPSJ7e1NldHRpbmcgYGVuYWJsZV9nb19tYXJrZG93bmB9fSIvPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBibG9jayI+6buY6K6k5YWz6Zet77yM5L2/55So5YmN56uvbWFya2VkLmpz5riy5p+T77yM5aGrdHJ1ZeaXtuW8gOWQrzwvc3Bhbj4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImVuYWJsZV9nb19tYXJrZG93bl9kZWYiIHZhbHVlPSJmYWxzZSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwPg0KICAgICAgICAgICAgPGxhYmVsPiZuYnNwOzwvbGFiZWw+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmDwvYnV0dG9uPg0KICAgICAgICA8L3A+DQogICAgPC9mb3JtPg0KICAgIDxmb3JtIGlkPSJzZXR0aW5nLW5hdi1mb3JtIiBjbGFzcz0ic2V0dGluZy1mb3JtIGZvcm0gZm9ybS1hbGlnbiBzZXR0aW5nLXBhbmVsIiBhY3Rpb249Ii9hZG1pbi9zZXR0aW5nL25hdi8iIG1ldGhvZD0icG9zdCI+e3tyYW5nZSAuTmF2aWdhdG9yc319DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+5o6S5bqPPC9zcGFuPjxpbnB1dCBjbGFzcz0iaXB0IG9yZGVyIiB0eXBlPSJudW1iZXIiIG5hbWU9Im9yZGVyIiB2YWx1ZT0ie3suT3JkZXJ9fSIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj7mlofmnKw8L3NwYW4+PGlucHV0IGNsYXNzPSJpcHQgdGV4dCIgdHlwZT0idGV4dCIgbmFtZT0idGV4dCIgdmFsdWU9Int7LlRleHR9fSIgcmVxdWlyZWQ9InJlcXVpcmVkIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPuagh+mimDwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgdHlwZT0idGV4dCIgbmFtZT0idGl0bGUiIHZhbHVlPSJ7ey5UaXRsZX19Ii8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPumTvuaOpTwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCBsaW5rIiB0eXBlPSJ0ZXh0IiBuYW1lPSJsaW5rIiB2YWx1ZT0ie3suTGlua319IiByZXF1aXJlZD0icmVxdWlyZWQiLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgPC9wPnt7ZW5kfX0NCiAgICAgICAgPHA+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmDwvYnV0dG9uPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtZ3JlZW4gYWRkIiBocmVmPSIjIiByZWw9IiNuYXYtaXRlbSI+5re75Yqg5LiA6aG5PC9hPg0KICAgICAgICA8L3A+DQogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC90ZW1wbGF0ZSIgaWQ9Im5hdi1pdGVtIj4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPuaOkuW6jzwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCBvcmRlciIgdHlwZT0ibnVtYmVyIiBuYW1lPSJvcmRlciIgdmFsdWU9IjEiLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPuaWh+acrDwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCB0ZXh0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0ZXh0IiB2YWx1ZT0iIiByZXF1aXJlZD0icmVxdWlyZWQiLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPuagh+mimDwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCB0aXRsZSIgdHlwZT0idGV4dCIgbmFtZT0idGl0bGUiIHZhbHVlPSIiLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPumTvuaOpTwvc3Bhbj48aW5wdXQgY2xhc3M9ImlwdCBsaW5rIiB0eXBlPSJ0ZXh0IiBuYW1lPSJsaW5rIiB2YWx1ZT0iIiByZXF1aXJlZD0icmVxdWlyZWQiLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZGVsIiBocmVmPSIjIj48aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2E+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvc2NyaXB0Pg0KICAgIDwvZm9ybT4NCiAgICA8Zm9ybSBpZD0ic2V0dGluZy1jdXN0b20tZm9ybSIgY2xhc3M9InNldHRpbmctZm9ybSBmb3JtIGZvcm0tYWxpZ24gc2V0dGluZy1wYW5lbCIgYWN0aW9uPSIvYWRtaW4vc2V0dGluZy9jdXN0b20vIiBtZXRob2Q9InBvc3QiPnt7cmFuZ2UgJGssJHYgOj0gLkN1c3RvbX19DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IGtleSIgdHlwZT0idGV4dCIgbmFtZT0ia2V5IiB2YWx1ZT0ie3ska319Ii8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgbmFtZT0idmFsdWUiIGNsYXNzPSJpcHQgdmFsdWUiIHR5cGU9InRleHQiIHZhbHVlPSJ7eyR2fX0iLz4NCiAgICAgICAgICAgIDxhIGNsYXNzPSJkZWwiIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4NCiAgICAgICAgPC9wPnt7ZW5kfX0NCiAgICAgICAgPHA+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsdWUiPuS/neWtmDwvYnV0dG9uPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtZ3JlZW4gYWRkIiBocmVmPSIjIiByZWw9IiNjdXN0b20taXRlbSI+5re75Yqg5LiA6aG5PC9hPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRpcCBibG9jayI+5L2/55So5Ye95pWw6Ieq5a6a5LmJ6YWN572u77yM6ZyA6KaB5Yqg5YmN57yAImNfIu+8jOWmgkdldFNldHRpbmcoImNfa2V5Iik8L3NwYW4+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L3RlbXBsYXRlIiBpZD0iY3VzdG9tLWl0ZW0iPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iaXB0IGtleSIgdHlwZT0idGV4dCIgbmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0i5a2X5q615ZCNIi8+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9InZhbHVlIiBjbGFzcz0iaXB0IHZhbHVlIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0i5a2X5q615YC8Ii8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImRlbCIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L3NjcmlwdD4NCiAgICA8L2Zvcm0+DQo8L2Rpdj4NCjxzY3JpcHQgc3JjPSJodHRwOi8vbGlicy5iYWlkdS5jb20vanF1ZXJ5dG9vbHMvMS4yLjcvanF1ZXJ5LnRvb2xzLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICAkKCcjc2V0dGluZy1uYXYnKS50YWJzKCIuc2V0dGluZy1wYW5lbCIpOw0KICAgICAgICAkKCcuc2V0dGluZy1mb3JtJykuYWpheEZvcm0oZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGFsZXJ0KGpzb24ucmVzID8gIuW3suS/neWtmCIgOiBqc29uLm1zZyk7DQogICAgICAgIH0pLm9uKCJjbGljayIsIi5hZGQiLGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5wcmVwZW5kKCQoJCh0aGlzKS5hdHRyKCJyZWwiKSkuaHRtbCgpKTsNCiAgICAgICAgfSkub24oImNsaWNrIiwiLmRlbCIsZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICBpZihjb25maXJtKCLopoHliKDpmaTov5npobnvvJ8iKSl7DQogICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSkNCiAgICB9KQ0KPC9zY3JpcHQ+UEsHCAhDixMQGQAAEBkAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAHZpZXdcYWRtaW5cd3JpdGVfYXJ0aWNsZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9IuaWh+eroOagh+mimCIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPuaSsOWGmeaWh+eroOWGheWuue+8jOaUr+aMgWBtYXJrZG93bmDor63ms5Xpq5jkuq48L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuaWh+eroOeahOWUr+S4gOmTvuaOpSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuagh+etvjwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCBpZD0idGFnIiBjbGFzcz0iaXB0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWciIHBsYWNlaG9sZGVyPSLmlofnq6DnmoTmoIfnrb4iLz4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7kv53lrZjnirbmgIE8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YXR1cyIgaWQ9InN0YXR1cyI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icHVibGlzaCI+5YWs5byAPC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJhZnQiPuiNieeovzwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4+5YWB6K646K+E6K66PC9zcGFuPiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjb21tZW50IiBpZD0iaXMtY29tbWVudCI+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSI+5YWB6K64PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+5YWz6ZetPC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KICAgIDxwIGNsYXNzPSJzdWJtaXQgdGV4dC1yaWdodCIgaWQ9ImFydGljbGUtc3VibWl0Ij4NCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICA8L3A+DQo8L2Zvcm0+DQo8Zm9ybSBjbGFzcz0iZm9ybSBoaWRlIiBpZD0iYXR0YWNoLWZvcm0iIGFjdGlvbj0iL2FkbWluL2ZpbGVzL3VwbG9hZC8iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+DQogICAgPGlucHV0IGlkPSJhdHRhY2gtdXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIi8+DQo8L2Zvcm0+DQo8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvY29kZW1pcnJvci5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3ItbW9kZS5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL21hcmtlZC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2hpZ2hsaWdodC5taW4uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvdXBsb2FkLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQ+DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpLCB7DQogICAgICAgICAgICBtb2RlOiAnbWFya2Rvd24nLA0KICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsDQogICAgICAgICAgICB0aGVtZTogImRlZmF1bHQiLA0KICAgICAgICAgICAgZXh0cmFLZXlzOiB7IkVudGVyIjogIm5ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCJ9DQogICAgICAgIH0pOw0KICAgICAgICBlZGl0b3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzdHIgPSBlZGl0b3IuZ2V0VmFsdWUoKTsNCiAgICAgICAgICAgICQoJy5wcmV2aWV3JykuaHRtbChtYXJrZWQoc3RyKSkuZmluZCgicHJlIGNvZGUiKS5lYWNoKGZ1bmN0aW9uIChpLCBlKSB7DQogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRCbG9jayhlKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgJCgnI2FydGljbGUtZm9ybScpLmFqYXhGb3JtKGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXMpIHsNCiAgICAgICAgICAgICAgICBhbGVydCgi5bey5L+d5a2YIik7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiL2FkbWluL2FydGljbGVzLyI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGFsZXJ0KGpzb24ubXNnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGluaXRVcGxvYWQoIiNhcnRpY2xlLXN1Ym1pdCIpOw0KICAgIH0pOw0KPC9zY3JpcHQ+UEsHCL7KdHwhDAAAIQwAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAHZpZXdcYWRtaW5cd3JpdGVfcGFnZS5odG1sPHN0eWxlPg0KICAgIEBpbXBvcnQgIi9zdGF0aWMvY3NzL2NvZGVtaXJyb3IuY3NzIjsNCiAgICBAaW1wb3J0ICIvc3RhdGljL2Nzcy9oaWdobGlnaHQuY3NzIjsNCjwvc3R5bGU+DQo8Zm9ybSBpZD0iYXJ0aWNsZS1mb3JtIiBjbGFzcz0iZm9ybSBjbGVhciBjb250YWluZXIiIGFjdGlvbj0iIyIgbWV0aG9kPSJwb3N0Ij4NCiAgICA8ZGl2IGNsYXNzPSJsZWZ0IGdyaWQtMS0yIj4NCiAgICAgICAgPGlucHV0IGNsYXNzPSJpcHQgdGl0bGUiIGlkPSJ0aXRsZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQ9InJlcXVpcmVkIiBuYW1lPSJ0aXRsZSIgcGxhY2Vob2xkZXI9Iumhtemdouagh+mimCIvPg0KICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgaWQ9ImNvbnRlbnQiIGNsYXNzPSJpcHQiPuaSsOWGmemhtemdouWGheWuue+8jOaUr+aMgWBtYXJrZG93bmDor63ms5Xpq5jkuq48L3RleHRhcmVhPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImxlZnQgZ3JpZC0xLTIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3IG1hcmtkb3duIj48L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJmb3JtLXZlcnRpY2FsIGxlZnQiPg0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdyZWVuIGxlZnQiIHR5cGU9ImJ1dHRvbiIgaWQ9ImF0dGFjaC1zaG93Ij7mt7vliqDpmYTku7Y8L2J1dHRvbj4NCiAgICAgICAgPHAgY2xhc3M9Iml0ZW0iPg0KICAgICAgICAgICAgPHNwYW4gZm9yPSJzbHVnIj7lm7rlrprpk77mjqU8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8aW5wdXQgaWQ9InNsdWciIGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InNsdWciIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IumhtemdoueahOWUr+S4gOmTvuaOpSIvPg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPuS/neWtmOeKtuaAgTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhdHVzIiBpZD0ic3RhdHVzIj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwdWJsaXNoIj7lhazlvIA8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkcmFmdCI+6I2J56i/PC9vcHRpb24+DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgICAgICA8cCBjbGFzcz0iaXRlbSI+DQogICAgICAgICAgICA8c3Bhbj7lhYHorrjor4Torro8L3NwYW4+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9ImNvbW1lbnQiIGlkPSJpcy1jb21tZW50Ij4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIj7lhYHorrg8L29wdGlvbj4NCiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj7lhbPpl608L29wdGlvbj4NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJpdGVtIj4NCiAgICAgICAgICAgIDxzcGFuPue9rumhtumTvuaOpTwvc3Bhbj4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ibGluayIgaWQ9ImlzLWxpbmsiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPuWFs+mXrTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPuWFgeiuuDwvb3B0aW9uPg0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InN1Ym1pdCB0ZXh0LXJpZ2h0IiBpZD0iYXJ0aWNsZS1zdWJtaXQiPg0KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibHVlIj7kv53lrZjmlofnq6A8L2J1dHRvbj4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KPC9mb3JtPg0KPGZvcm0gY2xhc3M9ImZvcm0gaGlkZSIgaWQ9ImF0dGFjaC1mb3JtIiBhY3Rpb249Ii9hZG1pbi9maWxlcy91cGxvYWQvIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KICAgIDxpbnB1dCBpZD0iYXR0YWNoLXVwbG9hZCIgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIvPg0KPC9mb3JtPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvbGliL2NvZGVtaXJyb3IubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9jb2RlbWlycm9yLW1vZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9tYXJrZWQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2xpYi9oaWdobGlnaHQubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL3VwbG9hZC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KICAgICQoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKSwgew0KICAgICAgICAgICAgbW9kZTogJ21hcmtkb3duJywNCiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLA0KICAgICAgICAgICAgdGhlbWU6ICJkZWZhdWx0IiwNCiAgICAgICAgICAgIGV4dHJhS2V5czogeyJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QifQ0KICAgICAgICB9KTsNCiAgICAgICAgZWRpdG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc3RyID0gZWRpdG9yLmdldFZhbHVlKCk7DQogICAgICAgICAgICAkKCcucHJldmlldycpLmh0bWwobWFya2VkKHN0cikpLmZpbmQoInByZSBjb2RlIikuZWFjaChmdW5jdGlvbiAoaSwgZSkgew0KICAgICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QmxvY2soZSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICAgICQoJyNhcnRpY2xlLWZvcm0nKS5hamF4Rm9ybShmdW5jdGlvbiAoanNvbikgew0K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Zj0ie3suVXJsfX0iIHRhcmdldD0iX2JsYW5rIj57ey5BdXRob3J9fXt7aWYgLklzQWRtaW59fSZuYnNwOyZuYnNwOyhhZG1pbil7e2VuZH19PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTS5ERCBISDptbSJ9fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0ie3suSWR9fSI+PGkgY2xhc3M9ImZhIGZhLXF1b3RlLXJpZ2h0Ij48L2k+PC9hPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj57e2VuZH19e3tlbmR9fQ0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtc2hvdyIgY2xhc3M9InRleHQtY2VudGVyIj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gZW5hYmxlIj7lj5Hooajor4Torro8L2J1dHRvbj57e2Vsc2V9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXJlZCI+5pys5paH5YWz6Zet5LqG6K+E6K66PC9idXR0b24+e3tlbmR9fQ0KICAgIDwvZGl2Pnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBjbGFzcz0iaGlkZSBjbGVhciB0ZXh0LWNlbnRlciBmb3JtIiBhY3Rpb249Ii9jb21tZW50L3t7LkNvbnRlbnQuSWR9fS8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mbyBsZWZ0IHRleHQtcmlnaHQiPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0gYy1hdmF0YXItZmllbGQiPg0KICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIG51bGwiIHNyYz0iL3N0YXRpYy9pbWcvc2l0ZS5wbmciIGFsdD0iIiBpZD0iY29tbWVudC1hdmF0YXIiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibm90LW1lIGJsb2NrIiBocmVmPSIjIj7kuI3mmK/miJE/PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvLWZpZWxkcyBoaWRlIj4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuensOWRvCIgaWQ9ImNvbW1lbnQtYXV0aG9yIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpgq7nrrEiIGlkPSJjb21tZW50LWVtYWlsIi8+IDwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0idXJsIiBwbGFjZWhvbGRlcj0i572R5Z2AIiBpZD0iY29tbWVudC11cmwiLz48L3A+DQogICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjb21tZW50LXBhcmVudCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgbmFtZT0icGlkIi8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtY29udGVudCB0ZXh0LWxlZnQgcmlnaHQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGNhbmNlbC1yZXBseSIgdHlwZT0iYnV0dG9uIj7lj5bmtojlm57lpI08L2J1dHRvbj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9mb3JtPnt7ZW5kfX0NCiAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjb21tZW50LXRwbCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiPg0KICAgICAgICAgICAgPGltZyBjbGFzcz0iYy1hdmF0YXIgbGVmdCIgc3JjPSIiIGFsdD0iIi8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24gbGVmdCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1tZXRhIj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxibCBsYmwtYmx1ZSBjLWF1dGhvciIgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYy10aW1lIj48aSBjbGFzcz0iZmEgZmEtY2xvY2stbyI+PC9pPk5vdzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImMtcmVwbHkiIGhyZWY9IiMiIHJlbD0iIj48aSBjbGFzcz0iZmEgZmEtcXVvdGUtcmlnaHQiPjwvaT48L2E+DQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjLWNoZWNrIj48aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUiPjwvaT7lrqHmoLjkuK3vvIzliLfmlrDlkI7pmpDol488L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImMtY29udGVudCI+PC9zZWN0aW9uPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtcC1tZCBtYXJrZG93biI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9zY3JpcHQ+DQo8L2Rpdj5QSwcIb65vVOIMAADiDAAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAdmlld1xkZWZhdWx0XGVycm9yL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAB2aWV3XGRlZmF1bHRcZXJyb3JcZXJyb3IuaHRtbDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDx0aXRsZT7plJnor6/mj5DnpLo8L3RpdGxlPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvY29tbW9uLmNzcyIvPg0KICAgIDxzdHlsZT5ib2R5e21hcmdpbjogNDBweCAxMDBweH08L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8aDI+5oKo6K6/6Zeu55qE6aG16Z2i5q2j5Zyo5omT556M552hPC9oMj48YnIvPg0KPHA+56iL5bqP5ZGY5q2j5Zyo5Yqq5Yqb5ZSk6YaS77yM6K+356iN5YCZ6K6/6ZeuLi4uPC9wPg0KPHA+PGEgaHJlZj0iLyI+6L+U5Zue6aaW6aG1PC9hPjwvcD4NCjwvYm9keT4NCjwvaHRtbD5QSwcIE4RGUngBAAB4AQAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAdmlld1xkZWZhdWx0XGVycm9yXG5vdGZvdW5kLmh0bWw8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4NCiAgICA8dGl0bGU+6ZSZ6K+v5o+Q56S6PC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2NvbW1vbi5jc3MiLz4NCiAgICA8c3R5bGU+Ym9keXttYXJnaW46IDQwcHggMTAwcHh9PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPuaCqOiuv+mXrueahOmhtemdouemu+WutuWHuui1sDwvaDI+PGJyLz4NCjxwPueoi+W6j+WRmOato+WcqOWbm+WkhOWvu+aJvu+8jOivt+eojeWAmeiuv+mXri4uLjwvcD4NCjxwPjxhIGhyZWY9Ii8iPui/lOWbnummlumhtTwvYT48L3A+DQo8L2JvZHk+DQo8L2h0bWw+UEsHCJD51MB1AQAAdQEAAFBLAwQUAAgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAHZpZXdcZGVmYXVsdFxob21lLmxheW91dDwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIvPg0KICAgIDx0aXRsZT57e2lmIC5UaXRsZX19e3suVGl0bGV9fSAtIHt7ZW5kfX17e1NldHRpbmcgInNpdGVfdGl0bGUifX08L3RpdGxlPg0KICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJ7e1NldHRpbmcgYHNpdGVfa2V5d29yZHNgfX0iLz4NCiAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2Rlc2NyaXB0aW9uYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGeGhHbyBCbG9nIiAvPg0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3Mvc3R5bGUuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRpdGxlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0gLSBSU1MgMi4wIiBocmVmPSIvZmVlZC8iLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAgdGV4dC1jZW50ZXIiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIi8+DQogICAgICAgIDxoMSBpZD0iaGVhZGVyLWgiPjxhIGhyZWY9Ii8iPnt7U2V0dGluZyAic2l0ZV90aXRsZSJ9fTwvYT48L2gxPg0KICAgICAgICA8aDQgaWQ9ImhlYWRlci1zdWIiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgIDwvZGl2Pg0KPC9oZWFkZXI+DQo8bmF2IGlkPSJuYXYiIGNsYXNzPSJjbGVhciB0ZXh0LWNlbnRlciI+DQogICAgPHVsPnt7cmFuZ2UgTmF2aWdhdG9yfX0NCiAgICAgICAgPGxpIGNsYXNzPSJpbmxpbmUtYmxvY2siPjxhIGhyZWY9Int7Lkxpbmt9fSIgdGl0bGU9Int7LlRpdGxlfX0iPnt7LlRleHR9fTwvYT48L2xpPnt7ZW5kfX0NCiAgICA8L3VsPg0KPC9uYXY+DQo8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29udGFpbmVyOTYwIj4NCiAgICB7QENvbnRlbnR9DQo8L2Rpdj4NCjxmb290ZXIgaWQ9ImZvb3RlciIgY2xhc3M9InRleHQtY2VudGVyIj4NCiAgICA8cD4NCiAgICAgICAgPGEgY2xhc3M9IndlaWJvIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX3dlaWJvYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLXdlaWJvIj48L2k+V2VpYm88L2E+DQogICAgICAgIDxhIGNsYXNzPSJnaXQiIGhyZWY9Int7U2V0dGluZyBgY19mb290ZXJfZ2l0aHViYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWdpdGh1YiI+PC9pPkdpdEh1YjwvYT4NCiAgICAgICAgPGEgY2xhc3M9ImVtYWlsIiBocmVmPSJ7e1NldHRpbmcgYGNfZm9vdGVyX2VtYWlsYH19IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWVudmVsb3BlIj48L2k+RW1haWw8L2E+DQogICAgICAgIDxhIGNsYXNzPSJyc3MiIGhyZWY9Ii9mZWVkLyIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1yc3MiPjwvaT5SU1M8L2E+e3tTZXR0aW5nIGBjX2Zvb3Rlcl9nYWAgfCBIdG1sfX0NCiAgICA8L3A+DQogICAgPHNwYW4+R28gwqkgMjAxNCBBbGwgcmlnaHRzIHJlc2VydmVkLiBQcm91ZGx5IFBvd2VyZWQgYnkgRnhoLkdvLjwvc3Bhbj4NCiAgICA8YSBpZD0iZ28tdG9wIiBocmVmPSIjIiBjbGFzcz0ibGJsIGhpZGUgbGJsLWJsdWUiIHRpdGxlPSLlm57liLDpobbpg6giPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy11cCBmYS1sZyI+PC9pPjwvYT4NCjwvZm9vdGVyPg0KPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvaG9tZS5qcyI+PC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0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dGl0bGU9Int7LlRpdGxlfX0iPnt7LlRpdGxlfX08L2E+PC9oMz4NCiAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPg0KICAgICAgICA8cCBjbGFzcz0iaW5mbyBjbGVhciI+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hhcmUgd2VpYm8gaW5saW5lLWJsb2NrIj48aSBjbGFzcz0iZmEgZmEtd2VpYm8gZmEtbGciPjwvaT48L3NwYW4+e3tpZiAuVXNlcn19DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0iYXV0aG9yIGlubGluZS1ibG9jayI+PGkgY2xhc3M9ImZhIGZhLXVzZXIiPjwvaT57ey5Vc2VyLk5pY2t9fTwvc3Bhbj57e2VuZH19DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZSBpbmxpbmUtYmxvY2siPjxpIGNsYXNzPSJmYSBmYS1jbG9jay1vIj48L2k+e3tEYXRlSW50NjQgLkNyZWF0ZVRpbWUgIk1NLkREIn19PC9zcGFuPg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZpZXdzIGlubGluZS1ibG9jayByaWdodCI+6ZiF6K+7Jm5ic3A7Jm5ic3A7PHNwYW4+e3suSGl0c319PC9zcGFuPiZuYnNwOyZuYnNwO+asoTwvc3Bhbj4NCiAgICAgICAgPC9wPnt7ZW5kfX0NCiAgICA8L2FydGljbGU+DQo8L2Rpdj5QSwcIXADO3QQDAAAEAwAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAdmlld1xsaW5nL1BLBwgAAAAAAAAAAAAAAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGxpbmdcYXJ0aWNsZS5odG1sPGRpdiBpZD0iYXJ0aWNsZS1jb250YWluZXIiIGNsYXNzPSJjbGVhciI+DQogICAgPGFydGljbGUgY2xhc3M9ImNsZWFyIGFydGljbGUtc2luZ2xlIHJlbGF0aXZlIHt7LkFydGljbGUuU3RhdHVzfX0iIGlkPSJhcnRpY2xlLXt7LkFydGljbGUuSWR9fSI+e3t3aXRoIC5BcnRpY2xlfX0NCiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSBhYnNvbHV0ZSB0ZXh0LWNlbnRlciI+DQogICAgICAgICAgICA8cCBjbGFzcz0ibGJsIGxibC1ncmVlbiB2aWV3cyBhYnNvbHV0ZSI+e3suSGl0c319PC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+DQogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UaXRsZX19PC9hPjwvaDM+DQogICAgICAgICAgICA8cCBjbGFzcz0idGltZS1pbmZvIj57e2lmIC5Vc2VyfX08c3Ryb25nPnt7LlVzZXIuTmlja319PC9zdHJvbmc+Jm5ic3A7Jm5ic3A7Jm5ic3A7e3tlbmR9feWPkeihqOS6jiZuYnNwOyZuYnNwOyZuYnNwO3t7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJZWVlZIOW5tCBNTSDmnIggREQg5pelIn19PC9wPg0KICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9ImNvbnRlbnQgbWFya2Rvd24iPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPg0KICAgICAgICAgICAgPHAgY2xhc3M9ImluZm8gY2xlYXIiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWcgaW5saW5lLWJsb2NrIj7moIfnrb7vvJp7ey5UYWdTdHJpbmd9fTwvc3Bhbj4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+e3tlbmR9fQ0KICAgIDwvYXJ0aWNsZT4NCiAgICB7e0h0bWwgLkNvbW1lbnRIdG1sfX0NCjwvZGl2PlBLBwgawp19bQMAAG0DAABQSwMEFAAIAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB2aWV3XGxpbmdcY29tbWVudC5odG1sPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9InJlbGF0aXZlIj4NCiAgICA8aDQgaWQ9ImNvbW1lbnQtdGl0bGUiPuaWh+eroOivhOiuujwvaDQ+DQogICAgPGRpdiBjbGFzcz0ibWV0YSBhYnNvbHV0ZSB0ZXh0LWNlbnRlciI+DQogICAgICAgIDxwIGNsYXNzPSJsYmwgbGJsLXJlZCBjb21tZW50cyI+PGEgaHJlZj0ie3suTGlua319I2NvbW1lbnQiPnt7LkNvbnRlbnQuQ29tbWVudE51bX19PC9hPjwvcD4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJjb21tZW50LWxpc3QiPnt7cmFuZ2UgLkNvbW1lbnRzfX17e2lmIC5Jc1ZhbGlkfX0NCiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWVudCBjbGVhciIgaWQ9ImNvbW1lbnQte3suSWR9fSI+DQogICAgICAgICAgICA8aW1nIGNsYXNzPSJjLWF2YXRhciBsZWZ0IiBzcmM9Int7LkF2YXRhcn19IiBhbHQ9Int7LkF1dGhvcn19Ii8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXNlY3Rpb24iPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImMtbWV0YSBjbGVhciI+DQogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJjLXJlcGx5IGxibCByaWdodCIgaHJlZj0iIyIgcmVsPSJ7ey5JZH19Ij7lm57lpI08L2E+DQogICAgICAgICAgICAgICAgICAgIDxwPjxhIGNsYXNzPSJjLWF1dGhvcnt7aWYgLklzQWRtaW59fSBhZG1pbnt7ZW5kfX0iIGhyZWY9Int7LlVybH19IiB0YXJnZXQ9Il9ibGFuayI+e3suQXV0aG9yfX17e2lmIC5Jc0FkbWlufX0mbmJzcDsmbmJzcDsoYWRtaW4pe3tlbmR9fTwvYT48L3A+DQogICAgICAgICAgICAgICAgICAgIDxwPjxzcGFuIGNsYXNzPSJjLXRpbWUiPnt7RGF0ZUludDY0IC5DcmVhdGVUaW1lICJNTSDmnIggREQg5pelIEhIIOaXtiBtbSDliIYifX08L3NwYW4+PC9wPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJjLWNvbnRlbnQiPnt7SHRtbCAuQ29udGVudH19PC9zZWN0aW9uPnt7aWYgLlBhcmVudE1kfX0NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjLXAtbWQgbWFya2Rvd24iPnt7SHRtbCAuUGFyZW50TWR9fTwvZGl2Pnt7ZW5kfX0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj57e2VuZH19e3tlbmR9fQ0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImNvbW1lbnQtc2hvdyIgY2xhc3M9InRleHQtY2VudGVyIj57e2lmIC5Db250ZW50LklzQ29tbWVudH19DQogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tZ3JlZW4gZW5hYmxlIj7lj5Hooajor4Torro8L2J1dHRvbj57e2Vsc2V9fQ0KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXJlZCI+5pys5paH5YWz6Zet5LqG6K+E6K66PC9idXR0b24+e3tlbmR9fQ0KICAgIDwvZGl2Pnt7aWYgLkNvbnRlbnQuSXNDb21tZW50fX0NCiAgICA8Zm9ybSBpZD0iY29tbWVudC1mb3JtIiBjbGFzcz0iaGlkZSBjbGVhciB0ZXh0LWNlbnRlciBmb3JtIiBhY3Rpb249Ii9jb21tZW50L3t7LkNvbnRlbnQuSWR9fS8iIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtaW5mbyBsZWZ0IHRleHQtcmlnaHQiPg0KICAgICAgICAgICAgPHAgY2xhc3M9Iml0ZW0gYy1hdmF0YXItZmllbGQiPg0KICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImMtYXZhdGFyIG51bGwiIHNyYz0iL3N0YXRpYy9pbWcvc2l0ZS5wbmciIGFsdD0iIiBpZD0iY29tbWVudC1hdmF0YXIiLz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibm90LW1lIGJsb2NrIiBocmVmPSIjIj7kuI3mmK/miJE/PC9hPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYy1pbmZvLWZpZWxkcyBoaWRlIj4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHJlcXVpcmVkPSJyZXF1aXJlZCIgcGxhY2Vob2xkZXI9IuensOWRvCIgaWQ9ImNvbW1lbnQtYXV0aG9yIi8+PC9wPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJpdGVtIj48aW5wdXQgY2xhc3M9ImlwdCIgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiByZXF1aXJlZD0icmVxdWlyZWQiIHBsYWNlaG9sZGVyPSLpgq7nrrEiIGlkPSJjb21tZW50LWVtYWlsIi8+IDwvcD4NCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaXRlbSI+PGlucHV0IGNsYXNzPSJpcHQiIHR5cGU9InVybCIgbmFtZT0idXJsIiBwbGFjZWhvbGRlcj0i572R5Z2AIiBpZD0iY29tbWVudC11cmwiLz48L3A+DQogICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjb21tZW50LXBhcmVudCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMCIgbmFtZT0icGlkIi8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImMtY29udGVudCB0ZXh0LWxlZnQgcmlnaHQiPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJpcHQiIG5hbWU9ImNvbnRlbnQiIGlkPSJjb21tZW50LWNvbnRlbnQiIHJlcXVpcmVkPSJyZXF1aXJlZCI+PC90ZXh0YXJlYT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tYmx1ZSI+5Y+R6KGo6K+E6K66PC9idXR0b24+DQogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYmwgbGJsLWdyZWVuIGNhbmNlbC1yZXBseSIgdHlwZT0iYnV0dG9uIj7lj5bmtojlm57lpI08L2J1dHRvbj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9mb3JtPnt7ZW5kfX0NCiAgICA8c2NyaXB0IHR5cGU9InRleHQvdGVtcGxhdGUiIGlkPSJjb21tZW50LXRwbCI+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1lbnQgY2xlYXIiPg0KICAgICAgICAgICAgPGltZyBjbGFz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bnQ9IklFPWVkZ2UiLz4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iLz4NCiAgICA8dGl0bGU+e3tpZiAuVGl0bGV9fXt7LlRpdGxlfX0gLSB7e2VuZH19e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC90aXRsZT4NCiAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ie3tTZXR0aW5nIGBzaXRlX2tleXdvcmRzYH19Ii8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Int7U2V0dGluZyBgc2l0ZV9kZXNjcmlwdGlvbmB9fSIvPg0KICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRnhoR28gQmxvZyIgLz4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2xpbmcuY3NzIi8+DQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vbGlicy5iYWlkdS5jb20vZm9udGF3ZXNvbWUvNC4wLjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+DQogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiIHRpdGxlPSJ7e1NldHRpbmcgYHNpdGVfdGl0bGVgfX0gLSBSU1MgMi4wIiBocmVmPSIvZmVlZC8iLz4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2xpYnMuYmFpZHUuY29tL2pxdWVyeS8xLjguMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvanF1ZXJ5LmZvcm0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL3N0YXRpYy9saWIvbWFya2VkLm1pbi5qcyI+PC9zY3JpcHQ+DQo8L2hlYWQ+DQo8Ym9keT4NCjxoZWFkZXIgaWQ9ImhlYWRlciIgY2xhc3M9ImNsZWFyIj4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXI5NjAiPg0KICAgICAgICA8aW1nIHNyYz0ie3tTZXR0aW5nIGBjX2hvbWVfYXZhdGFyYH19IiBhbHQ9InNpdGUiIGlkPSJoZWFkZXItaW1nIiBjbGFzcz0ibGVmdCIvPg0KICAgICAgICA8aDEgaWQ9ImhlYWRlci1oIiBjbGFzcz0ibGVmdCI+PGEgaHJlZj0iLyI+e3tTZXR0aW5nICJzaXRlX3RpdGxlIn19PC9hPjwvaDE+DQogICAgICAgIDxoNCBpZD0iaGVhZGVyLXN1YiIgY2xhc3M9ImxlZnQiPnt7U2V0dGluZyAic2l0ZV9zdWJfdGl0bGUifX08L2g0Pg0KICAgICAgICA8bmF2IGlkPSJuYXYiIGNsYXNzPSJyaWdodCI+DQogICAgICAgICAgICA8dWw+e3tyYW5nZSBOYXZpZ2F0b3J9fQ0KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5saW5lLWJsb2NrIj48YSBocmVmPSJ7ey5MaW5rfX0iIHRpdGxlPSJ7ey5UaXRsZX19Ij57ey5UZXh0fX08L2E+PC9saT57e2VuZH19DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L25hdj4NCiAgICA8L2Rpdj4NCjwvaGVhZGVyPg0KPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbnRhaW5lcjk2MCI+DQogICAge0BDb250ZW50fQ0KPC9kaXY+DQo8Zm9vdGVyIGlkPSJmb290ZXIiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyOTYwIGNsZWFyIj4NCiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZnQiPkdvIMKpIDIwMTQgQWxsIHJpZ2h0cyByZXNlcnZlZC48L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNzPSJyaWdodCI+UHJvdWRseSBQb3dlcmVkIGJ5IEZ4aC5Hby48L3NwYW4+DQogICAgPC9kaXY+DQogICAgPGEgaWQ9ImdvLXRvcCIgaHJlZj0iIyIgY2xhc3M9ImxibCBoaWRlIGxibC1ibHVlIiB0aXRsZT0i5Zue5Yiw6aG26YOo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dGl0bGU+e3suVGl0bGV9fTwvdGl0bGU+DQogICAgICAgICAgICA8bGluaz57ey5MaW5rfX08L2xpbms+DQogICAgICAgICAgICA8ZGVzY3JpcHRpb24+e3suRGVzY319PC9kZXNjcmlwdGlvbj4NCiAgICAgICAgICAgIDxhdXRob3I+e3suQXV0aG9yfX08L2F1dGhvcj4NCiAgICAgICAgICAgIDxwdWJEYXRlPnt7LkNyZWF0ZWR9fTwvcHViRGF0ZT4NCiAgICAgICAgPC9pdGVtPnt7ZW5kfX0NCiAgICA8L2NoYW5uZWw+DQo8L3Jzcz5QSwcIzvqM7BcCAAAXAgAAUEsDBBQACAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAdmlld1xzaXRlbWFwLnhtbHt7SHRtbCBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz5gfX17e0h0bWwgYDw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9Ii9zdGF0aWMvY3NzL3NpdGVtYXAueHNsIj8+YH19DQo8dXJsc2V0IHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zaXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAuOSBodHRwOi8vd3d3LnNpdGVtYXBzLm9yZy9zY2hlbWFzL3NpdGVtYXAvMC45L3NpdGVtYXAueHNkIiB4bWxucz0iaHR0cDovL3d3dy5zaXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAuOSI+DQogICAgPHVybD4NCiAgICAgICAgPGxvYz57ey5MaW5rfX08L2xvYz4NCiAgICAgICAgPGxhc3Rtb2Q+e3suQ3JlYXRlZH19PC9sYXN0bW9kPg0KICAgICAgICA8Y2hhbmdlZnJlcT5kYWlseTwvY2hhbmdlZnJlcT4NCiAgICAgICAgPHByaW9yaXR5PjEuMDwvcHJpb3JpdHk+DQogICAgPC91cmw+e3tyYW5nZSAuTmF2aWdhdG9yc319DQogICAgPHVybD4NCiAgICAgICAgPGxvYz57ey5MaW5rfX08L2xvYz4N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" \ No newline at end of file diff --git a/app/handler/cmd.go b/app/handler/cmd.go index 7071a97..4a30fa8 100644 --- a/app/handler/cmd.go +++ b/app/handler/cmd.go @@ -62,3 +62,11 @@ func CmdLogs(context *GoInk.Context) { "Logs": cmd.GetLogs(context.App()), }) } + +func CmdMonitor(ctx *GoInk.Context) { + ctx.Layout("admin/cmd") + ctx.Render("admin/cmd/monitor", map[string]interface{}{ + "Title": "系统监控", + "M": cmd.ReadMemStats(), + }) +} diff --git a/app/handler/rss.go b/app/handler/rss.go index 5d21f2c..e6fab24 100644 --- a/app/handler/rss.go +++ b/app/handler/rss.go @@ -23,17 +23,19 @@ func SiteMap(ctx *GoInk.Context) { articleMap[i] = m } - navMap := make([]map[string]string, len(navigators)) - for i, n := range navigators { + navMap := make([]map[string]string, 0) + for _, n := range navigators { m := make(map[string]string) - println(baseUrl + n.Link) + if n.Link == "/" { + continue + } if strings.HasPrefix(n.Link, "/") { m["Link"] = strings.Replace(baseUrl+n.Link, baseUrl+"/", baseUrl, -1) } else { m["Link"] = n.Link } m["Created"] = now - navMap[i] = m + navMap = append(navMap, m) } ctx.ContentType("text/xml") diff --git a/view/admin/admin.layout b/view/admin/admin.layout index 853cf41..54a77ba 100644 --- a/view/admin/admin.layout +++ b/view/admin/admin.layout @@ -34,7 +34,7 @@ 消息 备份 日志 - 系统 + 系统

      Proudly Powered by Fxh.Go

      diff --git a/view/admin/cmd/monitor.html b/view/admin/cmd/monitor.html new file mode 100644 index 0000000..0487356 --- /dev/null +++ b/view/admin/cmd/monitor.html @@ -0,0 +1,10 @@ +
      +

      系统监控

      +
      +
        +
      • Goroutine数量{{.M.NumGoroutine}}
      • +
      • 系统内存分配{{.M.MemSys}}
      • +
      • 实际内存占用{{.M.MemHeap}}
      • +
      • 强制回收极限{{.M.MemGc}}
      • +
      • 上次回收时间{{.M.LastGcTime}} ago
      • +
      \ No newline at end of file diff --git a/view/default/home.layout b/view/default/home.layout index 69c885a..01e3326 100644 --- a/view/default/home.layout +++ b/view/default/home.layout @@ -36,7 +36,7 @@ Weibo GitHub - RSS{{Setting `c_footer_ga` | Html}} + RSS{{Setting `c_footer_ga` | Html}}

      Go © 2014 All rights reserved. Proudly Powered by Fxh.Go. From 4e7c4db1c7cf1b61da97f60ea7ec5f9e1b259cf6 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Mon, 10 Feb 2014 22:50:02 +0800 Subject: [PATCH 30/82] gofmt --- app/cmd/monitor.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/cmd/monitor.go b/app/cmd/monitor.go index cf1fee3..60d7383 100644 --- a/app/cmd/monitor.go +++ b/app/cmd/monitor.go @@ -1,21 +1,21 @@ package cmd import ( - "runtime" + "fmt" "github.com/fuxiaohei/GoBlog/app/utils" + "runtime" "time" - "fmt" ) type monitorStats struct { NumGoroutine int MemAllocated string - MemMalloc string - MemTotal string - MemSys string - MemHeap string - MemGc string - LastGcTime string + MemMalloc string + MemTotal string + MemSys string + MemHeap string + MemGc string + LastGcTime string } func ReadMemStats() *monitorStats { @@ -28,7 +28,7 @@ func ReadMemStats() *monitorStats { ms.MemSys = utils.FileSize(int64(m.Sys)) ms.MemHeap = utils.FileSize(int64(m.HeapAlloc)) ms.MemMalloc = utils.FileSize(int64(m.Mallocs)) - ms.LastGcTime = fmt.Sprintf("%.1fs",float64(time.Now().UnixNano() - int64(m.LastGC))/1000/1000/1000) + ms.LastGcTime = fmt.Sprintf("%.1fs", float64(time.Now().UnixNano()-int64(m.LastGC))/1000/1000/1000) ms.MemGc = utils.FileSize(int64(m.NextGC)) return ms } From cdccc8630ca1a12c7d87e9833dad663573997f2e Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Tue, 11 Feb 2014 20:23:53 +0800 Subject: [PATCH 31/82] update readme --- README.md | 71 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index f3d6e68..0aada76 100644 --- a/README.md +++ b/README.md @@ -1,53 +1,76 @@ #Fxh.Go -A fast and simple blog engine with GoInk framework in Golang. +A fast and simple blog engine with [GoInk](https://github.com/fuxiaohei/GoInk) framework in Golang. -Current version is **0.1.6-beta** on 2014.01.31 +[![Build Status](https://drone.io/github.com/fuxiaohei/GoBlog/status.png)](https://drone.io/github.com/fuxiaohei/GoBlog/latest) +[![GoWalker](https://gowalker.org/api/v1/badge)](https://gowalker.org/github.com/fuxiaohei/GoBlog) + +Current version is **0.2.0-beta** on 2014.02.09 ### Overview -Fxh.Go is a dynamic blog engine written in Golang. It's fast and very simple configs. Fxh.Go persists data into pieces of json files and support compress them as backup zip for next upgrade or installation. +`Fxh.Go` is a dynamic blog engine written in Golang. It's fast and very simple configs. Fxh.Go persists data into pieces of json files and support compress them as backup zip for next upgrade or installation. + +`Fxh.Go` supports markdown contents as articles or pages, ajax comments and dynamic administration. -Fxh.Go supports markdown contents as articles or pages, ajax comments and dynamic administration. +`Fxh.Go` contains two kinds of content as article and page. They can be customized as you want. -Fxh.Go contains two kinds of content as article and page. They can be customized as you want. +### Installation -Documentation is writing. +`Fxh.Go` requires **Go 1.2** or above. -### Requirement +##### Gobuild.io -* >= Golang 1.2 +[Gobuild.io](http://gobuild.io/) can build cross-platform executable file for pure go projects. You can download `Fxh.Go` binary from Gobuild.io. -### Setup +[![Gobuild Download](https://gobuild.io/badge/github.com/shxsun/gobuild/download.png)](http://gobuild.io/github.com/fuxiaohei/GoBlog) -Fxh.Go is written in Golang with support for Windows, Linux and Mac OSX. +##### Manual -The stable release can use `go get` to install: +Use go get command: go get github.com/fuxiaohei/GoBlog -remember set `$GOPATH/bin` to global environment variables. +Then you can find binary file `GoBlog(.exe)` in `$GOPATH/bin`. -The newest sources is in branch develop, you can download and build in manual (not-recommended). +### Run -### Setup +Make a new dir to run `Fxh.Go`: -If installed, `GoBlog` binary file is built in `$GOPATH/bin`. + cd new_dir + Goblog -make a new dir to install Fxh.Go: +Then it will unzip static files in `new_dir` , initialize raw data and start server at `localhost:9001`. - cd empty_dir - Goblog +##### Admin + +Visit `localhost:9000/login/` to enter administrator with username `admin` and password `admin`. You'd better change them after installed successfully. + +##### Deployment + +I prefer to use nginx as proxy. The server section in `nginx.conf`: -then it will unzip static files in `empty_dir` , initialize original data and start server at `localhost:9000` + server { + listen 80; + server_name your_domain; + charset utf-8; + access_log /var/log/nginx/your_domain.access.log; -#### Administration + location / { + proxy_pass http://127.0.0.1:9001; + } -visit `localhost:9000/login/` to enter administrator with username `admin` and password `admin`. You'd better change them after installed successfully. + location /static { + root /var/www/your_domain; # binary file is in this directory + expires 1d; + add_header Cache-Control public; + access_log off; + } + } -### Suggestion and Contribution +### Questions -create issues or pull requests here. +Create issues or pull requests here. ### Products @@ -56,7 +79,7 @@ create issues or pull requests here. ### Thanks -gladly thank for [@Unknwon](https://github.com/Unknwon) on testing and [zip library](https://github.com/Unknwon/cae) support. +* [@Unknwon](https://github.com/Unknwon) on testing and [zip library](https://github.com/Unknwon/cae) support. ### License From 3ddaf72d1fec4f1c8844ee4692c66c7b94d89f8f Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Tue, 11 Feb 2014 20:53:06 +0800 Subject: [PATCH 32/82] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0aada76..efcc6aa 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Current version is **0.2.0-beta** on 2014.02.09 [Gobuild.io](http://gobuild.io/) can build cross-platform executable file for pure go projects. You can download `Fxh.Go` binary from Gobuild.io. -[![Gobuild Download](https://gobuild.io/badge/github.com/shxsun/gobuild/download.png)](http://gobuild.io/github.com/fuxiaohei/GoBlog) +[![Gobuild Download](http://gobuild.io/badge/github.com/shxsun/gobuild/download.png)](http://gobuild.io/github.com/fuxiaohei/GoBlog) ##### Manual From 9ba99761647977da21267cc1681a15ba88cf8fa3 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Tue, 11 Feb 2014 23:00:11 +0800 Subject: [PATCH 33/82] update readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index efcc6aa..c34a619 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ A fast and simple blog engine with [GoInk](https://github.com/fuxiaohei/GoInk) framework in Golang. [![Build Status](https://drone.io/github.com/fuxiaohei/GoBlog/status.png)](https://drone.io/github.com/fuxiaohei/GoBlog/latest) -[![GoWalker](https://gowalker.org/api/v1/badge)](https://gowalker.org/github.com/fuxiaohei/GoBlog) +[![GoWalker](http://b.repl.ca/v1/Go_Walker-API_Documentation-green.png)](http://gowalker.org/github.com/fuxiaohei/GoBlog) Current version is **0.2.0-beta** on 2014.02.09 @@ -23,7 +23,7 @@ Current version is **0.2.0-beta** on 2014.02.09 [Gobuild.io](http://gobuild.io/) can build cross-platform executable file for pure go projects. You can download `Fxh.Go` binary from Gobuild.io. -[![Gobuild Download](http://gobuild.io/badge/github.com/shxsun/gobuild/download.png)](http://gobuild.io/github.com/fuxiaohei/GoBlog) +[![Gobuild Download](http://gobuild.io/badge/github.com/fuxiaohei/GoBlog/download.png)](http://gobuild.io/github.com/fuxiaohei/GoBlog) ##### Manual @@ -44,7 +44,7 @@ Then it will unzip static files in `new_dir` , initialize raw data and start ser ##### Admin -Visit `localhost:9000/login/` to enter administrator with username `admin` and password `admin`. You'd better change them after installed successfully. +Visit `localhost:9001/login/` to enter administrator with username `admin` and password `admin`. You'd better change them after installed successfully. ##### Deployment From e8c92a104acdfd98f8ca53b512ae5068b19c6466 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Tue, 11 Feb 2014 23:03:50 +0800 Subject: [PATCH 34/82] update readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c34a619..f23878b 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ A fast and simple blog engine with [GoInk](https://github.com/fuxiaohei/GoInk) f Current version is **0.2.0-beta** on 2014.02.09 +Development board is in [Trello](https://trello.com/b/7AHrcQL8/fxh-go-with-goink). + ### Overview `Fxh.Go` is a dynamic blog engine written in Golang. It's fast and very simple configs. Fxh.Go persists data into pieces of json files and support compress them as backup zip for next upgrade or installation. From c4bffaa3ca5f64bb75a47aab3dd2e45663b72b21 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Tue, 11 Feb 2014 23:34:29 +0800 Subject: [PATCH 35/82] fix upload page layout bug --- app/handler/upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/handler/upload.go b/app/handler/upload.go index fc09511..0655599 100644 --- a/app/handler/upload.go +++ b/app/handler/upload.go @@ -20,7 +20,7 @@ func AdminFiles(context *GoInk.Context) { return } files, pager := model.GetFileList(context.Int("page"), 10) - context.Layout("admin") + context.Layout("admin/admin") context.Render("admin/files", map[string]interface{}{ "Title": "媒体文件", "Files": files, From e216f8538bd67edccc249fb00baf0aa37ba5b4ea Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sat, 15 Feb 2014 00:12:02 +0800 Subject: [PATCH 36/82] add comment validation when post --- app/handler/home.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/handler/home.go b/app/handler/home.go index a570fee..cf2dc8d 100644 --- a/app/handler/home.go +++ b/app/handler/home.go @@ -143,6 +143,11 @@ func Comment(context *GoInk.Context) { return } data := context.Input() + msg := validateComment(data) + if msg != "" { + Json(context, false).Set("msg", msg).End() + return + } co := new(model.Comment) co.Author = data["user"] co.Email = data["email"] @@ -158,3 +163,16 @@ func Comment(context *GoInk.Context) { model.CreateMessage("comment", co) context.Do("comment_created", co) } + +func validateComment(data map[string]string) string { + if utils.IsEmptyString(data["user"]) || utils.IsEmptyString(data["content"]) { + return "称呼,邮箱,内容必填" + } + if !utils.IsEmail(data["email"]) { + return "邮箱格式错误" + } + if !utils.IsEmptyString(data["url"]) && !utils.IsURL(data["url"]) { + return "网址格式错误" + } + return "" +} From 0156f10100e2c9f64b93cbd74136275ee3190717 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sat, 15 Feb 2014 00:36:30 +0800 Subject: [PATCH 37/82] add backup timer and backup message --- app/cmd.go | 3 +++ app/cmd/backup.go | 28 ++++++++++++++++++++++++++++ app/cmd/init.go | 7 +++++++ app/model/message.go | 10 ++++++++++ 4 files changed, 48 insertions(+) create mode 100644 app/cmd/init.go diff --git a/app/cmd.go b/app/cmd.go index f46de71..1882cb0 100644 --- a/app/cmd.go +++ b/app/cmd.go @@ -32,4 +32,7 @@ func Cmd() { os.Exit(1) return } + + // begin cmd init + cmd.Init(App) } diff --git a/app/cmd/backup.go b/app/cmd/backup.go index fdafd03..876cee3 100644 --- a/app/cmd/backup.go +++ b/app/cmd/backup.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/Unknwon/cae/zip" + "github.com/fuxiaohei/GoBlog/app/model" "github.com/fuxiaohei/GoBlog/app/utils" "github.com/fuxiaohei/GoInk" "os" @@ -12,8 +13,16 @@ import ( var backupDir = "backup" +func init() { + // close zip terminal output + zip.Verbose = false +} + +// DoBackup backups whole files to zip archive. +// If withData is false, it compresses static files to zip archive without data files, config files and install lock file. func DoBackup(app *GoInk.App, withData bool) (string, error) { os.Mkdir(backupDir, os.ModePerm) + // create zip file name from time unix filename := path.Join(backupDir, utils.DateTime(time.Now(), "YYYYMMDDHHmmss")) if withData { filename += ".zip" @@ -26,6 +35,7 @@ func DoBackup(app *GoInk.App, withData bool) (string, error) { } root, _ := os.Getwd() if withData { + // if with data, add install lock file and config file lockFile := path.Join(root, "install.lock") if utils.IsFile(lockFile) { z.AddFile("install.lock", lockFile) @@ -41,6 +51,7 @@ func DoBackup(app *GoInk.App, withData bool) (string, error) { z.AddDir("static/lib", path.Join(root, "static", "lib")) z.AddFile("static/favicon.ico", path.Join(root, "static", "favicon.ico")) if withData { + // if with data, backup data files and uploaded files z.AddDir("data", path.Join(root, "data")) z.AddDir("static/upload", path.Join(root, "static", "upload")) } @@ -53,15 +64,18 @@ func DoBackup(app *GoInk.App, withData bool) (string, error) { return filename, nil } +// RemoveBackupFile removes backup zip file with filename(not filepath). func RemoveBackupFile(file string) { file = path.Join(backupDir, file) os.Remove(file) } +// GetBackupFileAbsPath returns backup zip absolute filepath by filename. func GetBackupFileAbsPath(name string) string { return path.Join(backupDir, name) } +// GetBackupFile returns fileinfo slice of all backup files. func GetBackupFiles() ([]os.FileInfo, error) { fi := make([]os.FileInfo, 0) e := filepath.Walk(backupDir, func(_ string, info os.FileInfo, _ error) error { @@ -75,3 +89,17 @@ func GetBackupFiles() ([]os.FileInfo, error) { }) return fi, e } + +// StartBackupTimer starts backup operation timer for auto backup stuff. +func StartBackupTimer(app *GoInk.App, t int) { + println("backup files after", t, "hours") + time.AfterFunc(time.Duration(t)*time.Hour, func() { + filename, e := DoBackup(app, true) + if e != nil { + model.CreateMessage("backup", "[0]"+e.Error()) + } else { + model.CreateMessage("backup", "[1]"+filename) + } + StartBackupTimer(app, t) + }) +} diff --git a/app/cmd/init.go b/app/cmd/init.go new file mode 100644 index 0000000..02f3be1 --- /dev/null +++ b/app/cmd/init.go @@ -0,0 +1,7 @@ +package cmd + +import "github.com/fuxiaohei/GoInk" + +func Init(app *GoInk.App) { + StartBackupTimer(app, 12) +} diff --git a/app/model/message.go b/app/model/message.go index 69889f4..e1fe916 100644 --- a/app/model/message.go +++ b/app/model/message.go @@ -2,6 +2,7 @@ package model import ( "github.com/fuxiaohei/GoBlog/app/utils" + "strings" "time" ) @@ -14,6 +15,7 @@ var ( func init() { messageGenerator = make(map[string]func(v interface{}) string) messageGenerator["comment"] = generateCommentMessage + messageGenerator["backup"] = generateBackupMessage } type Message struct { @@ -134,6 +136,14 @@ func generateCommentMessage(co interface{}) string { return s } +func generateBackupMessage(co interface{}) string { + str := co.(string) + if strings.HasPrefix(str, "[0]") { + return "备份全站失败: " + strings.TrimPrefix(str, "[0]") + "." + } + return "备份全站到 " + strings.TrimPrefix(str, "[1]") + " 成功." +} + func StartMessageTimer() { time.AfterFunc(time.Duration(90)*time.Minute, func() { println("write messages in 1.5 hour timer") From 00b2e0ee67c61a8e4ed3ceed9a5fdd280acc1610 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sat, 15 Feb 2014 23:23:15 +0800 Subject: [PATCH 38/82] add code comments --- app/model/content.go | 64 +++++++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/app/model/content.go b/app/model/content.go index db2d70b..e80c99d 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -17,6 +17,7 @@ var ( contentsIndex map[string][]int ) +// Content instance, defines content data items. type Content struct { Id int Title string @@ -29,28 +30,35 @@ type Content struct { EditTime int64 UpdateTime int64 + // IsComment opens or closes comment IsComment bool - IsLinked bool + // IsLinked makes pager link as top level link /link.html + IsLinked bool //IsTop bool AuthorId int + // Template makes pager use own template file Template string Type string Status string + + // Format defines the content text format type. Now only support markdown. Format string Comments []*Comment Hits int } -// get content tags in a string. +// TagString returns content tags in a string that's joined by ",". func (cnt *Content) TagString() string { return strings.Join(cnt.Tags, ",") } -// get content link. +// Link returns content link as {type}/{id}/{slug}.html. +// If content isn't published, return "#". +// If content is page and top linked, return {slug}.html as top level link. func (cnt *Content) Link() string { if cnt.Status != "publish" { return "#" @@ -61,7 +69,8 @@ func (cnt *Content) Link() string { return fmt.Sprintf("/%s/%d/%s.html", cnt.Type, cnt.Id, cnt.Slug) } -// get content text. +// Content returns whole content text. +// If enable go-markdown, return markdown-rendered content. func (cnt *Content) Content() string { txt := strings.Replace(cnt.Text, "", "", -1) if GetSetting("enable_go_markdown") == "true" { @@ -70,7 +79,9 @@ func (cnt *Content) Content() string { return txt } -// get content summary. +// Summary returns content summary. +// Summary text means the part before page-break . +// It can be go-markdown rendered. func (cnt *Content) Summary() string { text := strings.Split(cnt.Text, "")[0] if GetSetting("enable_go_markdown") == "true" { @@ -79,7 +90,8 @@ func (cnt *Content) Summary() string { return text } -// get content comments number. +// CommentNum returns content comments number. +// If comment are checking or, its parent are lost, do not count it. func (cnt *Content) CommentNum() int { max := len(cnt.Comments) for _, c := range cnt.Comments { @@ -90,7 +102,8 @@ func (cnt *Content) CommentNum() int { return max } -// change slug and check unique. +// ChangeSlug changes content's slug. +// It checks whether this slug is unique. func (cnt *Content) ChangeSlug(slug string) bool { c2 := GetContentBySlug(slug) if c2 == nil { @@ -104,17 +117,17 @@ func (cnt *Content) ChangeSlug(slug string) bool { return true } -// get content author user. +// User returns content author user instance. func (cnt *Content) User() *User { return GetUserById(cnt.AuthorId) } -// get a content by given id. +// GetContentById gets a content by given id. func GetContentById(id int) *Content { return contents[id] } -// get a content by given slug. +// GetContentBySlug gets a content by given slug. func GetContentBySlug(slug string) *Content { for _, c := range contents { if c.Slug == slug { @@ -124,6 +137,7 @@ func GetContentBySlug(slug string) *Content { return nil } +// GetPublishArticleList gets published article list and pager. func GetPublishArticleList(page, size int) ([]*Content, *utils.Pager) { index := contentsIndex["article-publish"] pager := utils.NewPager(page, size, len(index)) @@ -141,7 +155,7 @@ func GetPublishArticleList(page, size int) ([]*Content, *utils.Pager) { return articles, pager } -// get articles list. +// GetArticleList gets articles list and pager no matter article status. func GetArticleList(page, size int) ([]*Content, *utils.Pager) { index := contentsIndex["article"] pager := utils.NewPager(page, size, len(index)) @@ -155,7 +169,8 @@ func GetArticleList(page, size int) ([]*Content, *utils.Pager) { return articles, pager } -// get pages list. +// GetPageList gets pages list and pager no matter page status. +// In common cases, no need to get a list or pagers for public page. func GetPageList(page, size int) ([]*Content, *utils.Pager) { index := contentsIndex["page"] pager := utils.NewPager(page, size, len(index)) @@ -169,7 +184,8 @@ func GetPageList(page, size int) ([]*Content, *utils.Pager) { return pages, pager } -// create new content. +// CreateContent creates new content. +// t means content type, article or page. func CreateContent(c *Content, t string) (*Content, error) { c2 := GetContentBySlug(c.Slug) if c2 != nil { @@ -190,16 +206,17 @@ func CreateContent(c *Content, t string) (*Content, error) { return c, nil } -// save changed content. +// SaveContent saves changed content. +// It will re-generate related indexes. func SaveContent(c *Content) { c.EditTime = utils.Now() generatePublishArticleIndex() go SyncContent(c) } -// remove a content. -// not delete file, just change status to DELETE. -// it can't be loaded in memory from json. +// RemoveContent removes a content. +// Not delete file really, just change status to DELETE. +// This content can't be loaded in memory from storage json. func RemoveContent(c *Content) { delete(contents, c.Id) for i, id := range contentsIndex[c.Type] { @@ -213,29 +230,30 @@ func RemoveContent(c *Content) { go SyncContent(c) } -// write a content to json. +// SyncContent writes a content to storage json. func SyncContent(c *Content) { key := fmt.Sprintf("content/%s-%d", c.Type, c.Id) Storage.Set(key, c) } -// write all contents to json. +// SyncContents writes all contents to storage json. func SyncContents() { for _, c := range contents { SyncContent(c) } } -// load all contents. -// generate indexes. +// LoadContents loads all contents, then generates indexes. func LoadContents() { contents = make(map[int]*Content) contentsIndex = make(map[string][]int) contentMaxId = 0 articleIndex := make([]int, 0) pageIndex := make([]int, 0) + // walk files in directory filepath.Walk(filepath.Join(Storage.dir, "content"), func(_ string, info os.FileInfo, err error) error { if err == nil { + // ignore dir and sub-dir if info.IsDir() { return nil } @@ -243,6 +261,7 @@ func LoadContents() { file := strings.Replace("content/"+info.Name(), filepath.Ext(info.Name()), "", -1) Storage.Get(file, c) if c.Id > 0 { + // ignore DELETE status if c.Status != "DELETE" { contents[c.Id] = c if c.Type == "article" { @@ -259,6 +278,7 @@ func LoadContents() { } return nil }) + // sort indexes as desc order sort.Sort(sort.Reverse(sort.IntSlice(articleIndex))) sort.Sort(sort.Reverse(sort.IntSlice(pageIndex))) contentsIndex["article"] = articleIndex @@ -277,6 +297,8 @@ func generatePublishArticleIndex() { contentsIndex["article-publish"] = arr } +// StartContentsTimer starts some timers for contents. +// An hour timer is for sync all contents because their hits number are changing. func StartContentsTimer() { time.AfterFunc(time.Duration(1)*time.Hour, func() { println("write contents in 1 hour timer") From 7509a161c458d18b05729cb0e0e4c6233b2276d4 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sun, 16 Feb 2014 15:53:54 +0800 Subject: [PATCH 39/82] article popular list, tagged list support --- app/app.go | 1 + app/model/content.go | 99 ++++++++++++++++++++++++++++++++++++++++---- app/model/storage.go | 19 +++++++++ app/utils/sorter.go | 23 ++++++++++ 4 files changed, 134 insertions(+), 8 deletions(-) create mode 100644 app/utils/sorter.go diff --git a/app/app.go b/app/app.go index c9466e6..a810fb9 100644 --- a/app/app.go +++ b/app/app.go @@ -32,6 +32,7 @@ func init() { App.Config().StringOr("app.static_dir", "static") App.Config().StringOr("app.log_dir", "tmp/log") os.MkdirAll(App.Get("log_dir"), os.ModePerm) + os.MkdirAll("tmp/data", os.ModePerm) App.Config().IntOr("app.upload_size", 1024*1024*10) App.Config().StringOr("app.upload_files", uploadFileSuffix) diff --git a/app/model/content.go b/app/model/content.go index e80c99d..f37efd3 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -146,10 +146,6 @@ func GetPublishArticleList(page, size int) ([]*Content, *utils.Pager) { return articles, pager } for i := pager.Begin; i <= pager.End; i++ { - a := GetContentById(index[i-1]) - if a.Status != "publish" { - continue - } articles = append(articles, GetContentById(index[i-1])) } return articles, pager @@ -297,12 +293,99 @@ func generatePublishArticleIndex() { contentsIndex["article-publish"] = arr } -// StartContentsTimer starts some timers for contents. -// An hour timer is for sync all contents because their hits number are changing. -func StartContentsTimer() { +func startContentSyncTimer() { time.AfterFunc(time.Duration(1)*time.Hour, func() { println("write contents in 1 hour timer") SyncContents() - StartContentsTimer() + startContentSyncTimer() + }) +} + +func generateContentTmpIndexes() { + var ( + popTmp = make([][2]int, 0) + popIndex = make([]int, 0) + tagIndexes = make(map[string][]int) + data = make(map[string][]int) + ) + for _, c := range contents { + if c.Status == "publish" && c.Type == "article" { + // pop temp index + popTmp = append(popTmp, [2]int{c.Id, c.CommentNum()}) + if len(c.Tags) > 0 { + for _, t := range c.Tags { + if tagIndexes[t] == nil { + tagIndexes[t] = make([]int, 0) + } + tagIndexes[t] = append(tagIndexes[t], c.Id) + } + } + } + } + + // sort popular list + utils.SortInt(popTmp) + for _, p := range popTmp { + popIndex = append(popIndex, p[0]) + } + contentsIndex["article-pop"] = popIndex + + // assemble indexes map + data["pop-index"] = popIndex + for tag, index := range tagIndexes { + sort.Sort(sort.Reverse(sort.IntSlice(index))) + data["t-"+tag] = index + contentsIndex["t-"+tag] = index + } + + // write to tmp data + TmpStorage.Set("contents", data) + fmt.Println(data) +} + +// GetPopularArticleList returns popular articles list. +// Popular articles are ordered by comment number. +func GetPopularArticleList(size int) []*Content { + index := contentsIndex["article-pop"] + pager := utils.NewPager(1, size, len(index)) + articles := make([]*Content, 0) + if 1 > pager.Pages { + return articles + } + for i := pager.Begin; i <= pager.End; i++ { + articles = append(articles, GetContentById(index[i-1])) + } + return articles +} + +// GetTaggedArticleList returns tagged articles list. +// These articles contains same one tag. +func GetTaggedArticleList(tag string,page, size int) ([]*Content, *utils.Pager) { + index := contentsIndex["t"+tag] + pager := utils.NewPager(page, size, len(index)) + articles := make([]*Content, 0) + if page > pager.Pages { + return articles, pager + } + for i := pager.Begin; i <= pager.End; i++ { + articles = append(articles, GetContentById(index[i-1])) + } + return articles, pager +} + + +func startContentTmpIndexesTimer() { + time.AfterFunc(time.Duration(6)*time.Hour, func() { + println("write content indexes in 6 hours timer") + generateContentTmpIndexes() + startContentTmpIndexesTimer() }) } + +// StartContentsTimer starts some timers for contents. +// An hour timer is for sync all contents because their hits number are changing. +func StartContentsTimer() { + startContentSyncTimer() + generateContentTmpIndexes() + startContentTmpIndexesTimer() +} diff --git a/app/model/storage.go b/app/model/storage.go index 89539c2..064a0ce 100644 --- a/app/model/storage.go +++ b/app/model/storage.go @@ -11,7 +11,10 @@ import ( var ( appVersion int + // global data storage instance Storage *jsonStorage + // global tmp data storage instance. Temp data are generated for special usages, will not backup. + TmpStorage *jsonStorage ) type jsonStorage struct { @@ -212,6 +215,13 @@ func writeDefaultData() { n3.Title = "好友" n3.Link = "/friends.html" Storage.Set("navigators", []*navItem{n, n2, n3}) + + // write default tmp data + writeDefaultTmpData() +} + +func writeDefaultTmpData(){ + TmpStorage.Set("contents",make(map[string][]int)) } func loadAllData() { @@ -227,16 +237,24 @@ func loadAllData() { LoadFiles() } +// TimeInc returns time step value devided by d int with time unix stamp. func (jss *jsonStorage) TimeInc(d int) int { return int(utils.Now())%d + 1 } +// Init does model initialization. +// If first run, write default data. +// v means app.Version number. It's needed for version data. func Init(v int) { appVersion = v Storage = new(jsonStorage) Storage.Init("data") + TmpStorage = new(jsonStorage) + TmpStorage.dir = "tmp/data" } +// All loads all data from storage to memory. +// Start timers for content, comment and message. func All() { loadAllData() // content timer, save visit hits and comment numbers @@ -247,6 +265,7 @@ func All() { StartMessageTimer() } +// SyncAll writes all current memory data to storage files. func SyncAll() { SyncContents() SyncMessages() diff --git a/app/utils/sorter.go b/app/utils/sorter.go new file mode 100644 index 0000000..2996862 --- /dev/null +++ b/app/utils/sorter.go @@ -0,0 +1,23 @@ + +package utils + +import "sort" + +type intSorter [][2]int + +func (is intSorter) Len() int { + return len(is) +} + +func (is intSorter) Swap(i, j int) { + is[i], is[j] = is[j], is[i] +} + +func (is intSorter) Less(i,j int)bool{ + return is[i][1] > is[j][1] +} + +// Sort [][2]int by the second element of [2]. +func SortInt(s [][2]int){ + sort.Sort(intSorter(s)) +} From 53bb226fae0c4a91bb06ad0efdaa8d5afe080ea2 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sun, 16 Feb 2014 21:20:40 +0800 Subject: [PATCH 40/82] change backup timer to 1 day --- app/cmd/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/cmd/init.go b/app/cmd/init.go index 02f3be1..c9a1cd0 100644 --- a/app/cmd/init.go +++ b/app/cmd/init.go @@ -3,5 +3,5 @@ package cmd import "github.com/fuxiaohei/GoInk" func Init(app *GoInk.App) { - StartBackupTimer(app, 12) + StartBackupTimer(app, 24) } From 4380592aa46c38fd50b1d78e1f5e31b1912407c0 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sun, 16 Feb 2014 21:22:03 +0800 Subject: [PATCH 41/82] change backup timer to 1 day --- static/css/common.css | 2 +- static/css/saber.css | 1 + static/less/common/var.less | 2 +- static/less/saber.less | 118 +++++++++++++++++++++++++++++++++ view/saber/article.html | 16 +++++ view/saber/comment.html | 60 +++++++++++++++++ view/saber/error/error.html | 14 ++++ view/saber/error/notfound.html | 14 ++++ view/saber/home.layout | 44 ++++++++++++ view/saber/index.html | 24 +++++++ view/saber/page.html | 12 ++++ view/saber/sidebar.html | 1 + 12 files changed, 306 insertions(+), 2 deletions(-) create mode 100644 static/css/saber.css create mode 100644 static/less/saber.less create mode 100644 view/saber/article.html create mode 100644 view/saber/comment.html create mode 100644 view/saber/error/error.html create mode 100644 view/saber/error/notfound.html create mode 100644 view/saber/home.layout create mode 100644 view/saber/index.html create mode 100644 view/saber/page.html create mode 100644 view/saber/sidebar.html diff --git a/static/css/common.css b/static/css/common.css index 4eb16be..46008d9 100644 --- a/static/css/common.css +++ b/static/css/common.css @@ -1 +1 @@ -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{width:1200px;margin:auto}.container960{width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px;padding-bottom:12px}.markdown h2{font-size:21px}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6} \ No newline at end of file +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6} \ No newline at end of file diff --git a/static/css/saber.css b/static/css/saber.css new file mode 100644 index 0000000..fb5e4c3 --- /dev/null +++ b/static/css/saber.css @@ -0,0 +1 @@ +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}html,body{background:#f9f9f9}#header{background:#fff;box-shadow:0 0 4px #666;line-height:60px;padding:12px 0 18px 0}#header-img{width:60px;height:60px;margin-right:24px;border-radius:30px}#header-h,#header-sub{padding:0 18px 0 0}#header-sub{font-size:13px;color:#999}#nav{margin-right:-18px}#nav li a{margin-left:24px;padding:0 18px;font-size:15px}#nav li a:hover{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;background-color:#0079bc;color:#fbfbfb;padding:6px 18px}#footer{padding:30px 40px;color:#999}#main{margin:48px auto}#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4}#article-container article{margin-bottom:40px;padding-bottom:40px;border-bottom:1px dashed #bbb;margin-bottom:50px}#article-container .meta .comments{margin-bottom:0;margin-top:8px;margin-right:18px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;padding-bottom:2px}#article-container .meta .comments a{color:#fff;font-size:18px}#article-container .meta .views{top:-8px;left:-12px;padding:2px 6px;line-height:20px;text-align:center;font-size:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container .title{margin-bottom:24px;padding-bottom:24px;border-bottom:1px dashed #ddd;font-size:24px}#article-container .content{margin-top:-12px}#article-container .info{margin-bottom:0;color:#999;font-size:12px}#article-container .info span{border-right:1px dashed #999;padding-right:12px;margin-right:12px}#article-pager a{margin:0}#article-pager a:hover{color:#fbfbfb} \ No newline at end of file diff --git a/static/less/common/var.less b/static/less/common/var.less index 7ec6298..381c536 100644 --- a/static/less/common/var.less +++ b/static/less/common/var.less @@ -33,7 +33,7 @@ .bottom-line(@distance,@color:@gray2,@style:dashed) { margin-bottom: @distance; padding-bottom: @distance; - border-bottom: 1px @style @gray2; + border-bottom: 1px @style @color; } .border-radius (@radius) { diff --git a/static/less/saber.less b/static/less/saber.less new file mode 100644 index 0000000..1cdf71d --- /dev/null +++ b/static/less/saber.less @@ -0,0 +1,118 @@ +@import "common"; + +html, body { + background: @white2; +} + +#header{ + background: #FFF; + box-shadow: 0 0 4px @black2; + line-height: 60px; + padding: 12px 0 18px 0; +} + +#header-img{ + width: 60px; + height: 60px; + margin-right: 24px; + border-radius: 30px; +} + +#header-h,#header-sub{ + padding: 0 18px 0 0; +} + +#header-sub{ + font-size: 13px; + color: @black3; +} + +#nav{ + margin-right: -18px; + li{ + a{ + margin-left: 24px; + padding: 0 18px; + &:hover{ + .lbl; + .lbl-blue; + padding: 6px 18px; + } + font-size: 15px; + } + } +} + +#footer { + padding: 30px 40px; + color: @black3; +} + +#main { + margin: 48px auto; +} + +#go-top { + bottom: 50px; + right: 40px; + position: fixed; + color: @white0; + padding-top: 6px; + padding-bottom: 8px; + opacity: 0.4; +} + +#article-container{ + article{ + .bottom-line(40px,@black4); + margin-bottom: 50px; + } + .meta{ + .comments{ + margin-bottom: 0; + margin-top: 8px; + margin-right: 18px; + font-family: Verdana, Tahoma, '微软雅黑', '宋体', sans-serif; + padding-bottom: 2px; + a{ + color: @white0; + font-size: 18px; + } + } + .views{ + top:-8px; + left: -12px; + padding:2px 6px; + line-height: 20px; + text-align: center; + font-size: 12px; + font-family: Verdana, Tahoma, '微软雅黑', '宋体', sans-serif; + } + } + .title{ + .bottom-line(24px); + font-size: 24px; + } + .content{ + margin-top: -12px; + } + .info{ + margin-bottom: 0; + span{ + border-right: 1px dashed @black3; + padding-right: 12px; + margin-right: 12px; + } + color: @black3; + font-size: 12px; + } +} + +#article-pager{ + a{ + margin: 0; + } + a:hover{ + color: @white1; + } +} \ No newline at end of file diff --git a/view/saber/article.html b/view/saber/article.html new file mode 100644 index 0000000..2e5f9a6 --- /dev/null +++ b/view/saber/article.html @@ -0,0 +1,16 @@ +
      +
      {{with .Article}} +
      +

      {{.Hits}}

      +
      +
      +

      {{.Title}}

      +

      {{if .User}}{{.User.Nick}}   {{end}}发表于   {{DateInt64 .CreateTime "YYYY 年 MM 月 DD 日"}}

      +
      {{Html .Content}}
      +

      + 标签:{{.TagString}} +

      +
      {{end}} +
      + {{Html .CommentHtml}} +
      \ No newline at end of file diff --git a/view/saber/comment.html b/view/saber/comment.html new file mode 100644 index 0000000..9e631d2 --- /dev/null +++ b/view/saber/comment.html @@ -0,0 +1,60 @@ +
      +

      文章评论

      + +
      {{range .Comments}}{{if .IsValid}} +
      + {{.Author}} +
      +
      + 回复 +

      {{.Author}}{{if .IsAdmin}}  (admin){{end}}

      +

      {{DateInt64 .CreateTime "MM 月 DD 日 HH 时 mm 分"}}

      +
      +
      {{Html .Content}}
      {{if .ParentMd}} +
      {{Html .ParentMd}}
      {{end}} +
      +
      {{end}}{{end}} +
      +
      {{if .Content.IsComment}} + {{else}} + {{end}} +
      {{if .Content.IsComment}} +
      +
      +

      + + 不是我? +

      +
      +

      +

      +

      + +
      +
      +
      + + + +
      +
      {{end}} + +
      \ No newline at end of file diff --git a/view/saber/error/error.html b/view/saber/error/error.html new file mode 100644 index 0000000..38d62f7 --- /dev/null +++ b/view/saber/error/error.html @@ -0,0 +1,14 @@ + + + + + 错误提示 + + + + +

      您访问的页面正在打瞌睡


      +

      程序员正在努力唤醒,请稍候访问...

      +

      返回首页

      + + \ No newline at end of file diff --git a/view/saber/error/notfound.html b/view/saber/error/notfound.html new file mode 100644 index 0000000..ca4ca33 --- /dev/null +++ b/view/saber/error/notfound.html @@ -0,0 +1,14 @@ + + + + + 错误提示 + + + + +

      您访问的页面离家出走


      +

      程序员正在四处寻找,请稍候访问...

      +

      返回首页

      + + \ No newline at end of file diff --git a/view/saber/home.layout b/view/saber/home.layout new file mode 100644 index 0000000..7ba8361 --- /dev/null +++ b/view/saber/home.layout @@ -0,0 +1,44 @@ + + + + + + + {{if .Title}}{{.Title}} - {{end}}{{Setting "site_title"}} + + + + + + + + + + + +
      + {@Content} +
      +
      +
      + Go © 2014 All rights reserved. + Proudly Powered by Fxh.Go. +
      + Top + {{Setting `c_footer_ga` | Html}} +
      + + + +{{Html ""}} \ No newline at end of file diff --git a/view/saber/index.html b/view/saber/index.html new file mode 100644 index 0000000..85fbdce --- /dev/null +++ b/view/saber/index.html @@ -0,0 +1,24 @@ +
      {{range .Articles}} +
      +
      +

      {{.CommentNum}}

      +

      {{.Hits}}

      +
      +
      +

      {{.Title}}

      +
      {{Html .Summary}}
      +

      + {{if .User}}{{.User.Nick}}   {{end}}发表于   {{DateInt64 .CreateTime "YYYY 年 MM 月 DD 日"}} + 标签:{{.TagString}} + 继续阅读 +

      +
      +
      {{end}} +
      + {{if .Pager.IsNext}}较旧的文章{{end}} + {{if .Pager.IsPrev}}较新的文章{{end}} +
      +
      +
      + right +
      \ No newline at end of file diff --git a/view/saber/page.html b/view/saber/page.html new file mode 100644 index 0000000..88126a7 --- /dev/null +++ b/view/saber/page.html @@ -0,0 +1,12 @@ +
      +
      {{with .Page}} +
      +

      {{.Hits}}

      +
      +
      +

      {{.Title}}

      +

      {{if .User}}{{.User.Nick}}   {{end}}发表于   {{DateInt64 .CreateTime "YYYY 年 MM 月 DD 日"}}

      +
      {{Html .Content}}
      +
      {{end}} +
      +
      \ No newline at end of file diff --git a/view/saber/sidebar.html b/view/saber/sidebar.html new file mode 100644 index 0000000..f49821e --- /dev/null +++ b/view/saber/sidebar.html @@ -0,0 +1 @@ +sidebar \ No newline at end of file From aba5371a091fe12ae825329712f0b312cdc6e691 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sun, 16 Feb 2014 22:44:05 +0800 Subject: [PATCH 42/82] sidebar template support --- app/handler/cmd.go | 1 + app/handler/func.go | 17 +++++++++++++++++ app/handler/home.go | 10 ++-------- app/model/content.go | 4 +--- static/css/saber.css | 2 +- static/less/saber.less | 22 ++++++++++++++++++++++ view/saber/index.html | 6 ++---- view/saber/sidebar.html | 12 +++++++++++- 8 files changed, 57 insertions(+), 17 deletions(-) diff --git a/app/handler/cmd.go b/app/handler/cmd.go index 4a30fa8..006dc33 100644 --- a/app/handler/cmd.go +++ b/app/handler/cmd.go @@ -15,6 +15,7 @@ func CmdBackup(context *GoInk.Context) { } Json(context, true).Set("file", file).End() context.Do("bakcup_success", file) + model.CreateMessage("backup", "[1]"+file) return } if context.Method == "DELETE" { diff --git a/app/handler/func.go b/app/handler/func.go index a48b8a8..4f946fe 100644 --- a/app/handler/func.go +++ b/app/handler/func.go @@ -11,6 +11,7 @@ type jsonContext struct { data map[string]interface{} } +// Json creates a json context response. func Json(context *GoInk.Context, res bool) *jsonContext { c := new(jsonContext) c.context = context @@ -33,6 +34,7 @@ type themeContext struct { theme string } +// Theme creates themed context response. func Theme(context *GoInk.Context) *themeContext { t := new(themeContext) t.context = context @@ -64,3 +66,18 @@ func (tc *themeContext) Has(tpl string) bool { file := path.Join(tc.theme, tpl) return tc.context.App().View().Has(file) } + +// CommentHtml returns rendered comment template html with own content. +func CommentHtml(context *GoInk.Context, c *model.Content) string { + return Theme(context).Tpl("comment", map[string]interface{}{ + "Content": c, + "Comments": c.Comments, + }) +} + +// SidebarHtml returns rendered sidebar template html. +func SidebarHtml(context *GoInk.Context) string { + return Theme(context).Tpl("sidebar", map[string]interface{}{ + "Popular": model.GetPopularArticleList(4), + }) +} diff --git a/app/handler/home.go b/app/handler/home.go index cf2dc8d..c1273fc 100644 --- a/app/handler/home.go +++ b/app/handler/home.go @@ -64,6 +64,7 @@ func Home(context *GoInk.Context) { Theme(context).Layout("home").Render("index", map[string]interface{}{ "Articles": articles, "Pager": pager, + "SidebarHtml": SidebarHtml(context), }) } @@ -83,7 +84,7 @@ func Article(context *GoInk.Context) { Theme(context).Layout("home").Render("article", map[string]interface{}{ "Title": article.Title, "Article": article, - "CommentHtml": Comments(context, article), + "CommentHtml": CommentHtml(context, article), }) } @@ -125,13 +126,6 @@ func TopPage(context *GoInk.Context) { context.Redirect("/") } -func Comments(context *GoInk.Context, c *model.Content) string { - return Theme(context).Tpl("comment", map[string]interface{}{ - "Content": c, - "Comments": c.Comments, - }) -} - func Comment(context *GoInk.Context) { cid, _ := strconv.Atoi(context.Param("id")) if cid < 1 { diff --git a/app/model/content.go b/app/model/content.go index f37efd3..639b347 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -340,7 +340,6 @@ func generateContentTmpIndexes() { // write to tmp data TmpStorage.Set("contents", data) - fmt.Println(data) } // GetPopularArticleList returns popular articles list. @@ -360,7 +359,7 @@ func GetPopularArticleList(size int) []*Content { // GetTaggedArticleList returns tagged articles list. // These articles contains same one tag. -func GetTaggedArticleList(tag string,page, size int) ([]*Content, *utils.Pager) { +func GetTaggedArticleList(tag string, page, size int) ([]*Content, *utils.Pager) { index := contentsIndex["t"+tag] pager := utils.NewPager(page, size, len(index)) articles := make([]*Content, 0) @@ -373,7 +372,6 @@ func GetTaggedArticleList(tag string,page, size int) ([]*Content, *utils.Pager) return articles, pager } - func startContentTmpIndexesTimer() { time.AfterFunc(time.Duration(6)*time.Hour, func() { println("write content indexes in 6 hours timer") diff --git a/static/css/saber.css b/static/css/saber.css index fb5e4c3..5000560 100644 --- a/static/css/saber.css +++ b/static/css/saber.css @@ -1 +1 @@ -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}html,body{background:#f9f9f9}#header{background:#fff;box-shadow:0 0 4px #666;line-height:60px;padding:12px 0 18px 0}#header-img{width:60px;height:60px;margin-right:24px;border-radius:30px}#header-h,#header-sub{padding:0 18px 0 0}#header-sub{font-size:13px;color:#999}#nav{margin-right:-18px}#nav li a{margin-left:24px;padding:0 18px;font-size:15px}#nav li a:hover{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;background-color:#0079bc;color:#fbfbfb;padding:6px 18px}#footer{padding:30px 40px;color:#999}#main{margin:48px auto}#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4}#article-container article{margin-bottom:40px;padding-bottom:40px;border-bottom:1px dashed #bbb;margin-bottom:50px}#article-container .meta .comments{margin-bottom:0;margin-top:8px;margin-right:18px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;padding-bottom:2px}#article-container .meta .comments a{color:#fff;font-size:18px}#article-container .meta .views{top:-8px;left:-12px;padding:2px 6px;line-height:20px;text-align:center;font-size:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container .title{margin-bottom:24px;padding-bottom:24px;border-bottom:1px dashed #ddd;font-size:24px}#article-container .content{margin-top:-12px}#article-container .info{margin-bottom:0;color:#999;font-size:12px}#article-container .info span{border-right:1px dashed #999;padding-right:12px;margin-right:12px}#article-pager a{margin:0}#article-pager a:hover{color:#fbfbfb} \ No newline at end of file +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}html,body{background:#f9f9f9}#header{background:#fff;box-shadow:0 0 4px #666;line-height:60px;padding:12px 0 18px 0}#header-img{width:60px;height:60px;margin-right:24px;border-radius:30px}#header-h,#header-sub{padding:0 18px 0 0}#header-sub{font-size:13px;color:#999}#nav{margin-right:-18px}#nav li a{margin-left:24px;padding:0 18px;font-size:15px}#nav li a:hover{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;background-color:#0079bc;color:#fbfbfb;padding:6px 18px}#footer{padding:30px 40px;color:#999}#main{margin:48px auto}#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4}#article-container article{margin-bottom:40px;padding-bottom:40px;border-bottom:1px dashed #bbb;margin-bottom:50px}#article-container .meta .comments{margin-bottom:0;margin-top:8px;margin-right:18px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;padding-bottom:2px}#article-container .meta .comments a{color:#fff;font-size:18px}#article-container .meta .views{top:-8px;left:-12px;padding:2px 6px;line-height:20px;text-align:center;font-size:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container .title{margin-bottom:24px;padding-bottom:24px;border-bottom:1px dashed #ddd;font-size:24px}#article-container .content{margin-top:-12px}#article-container .info{margin-bottom:0;color:#999;font-size:12px}#article-container .info span{border-right:1px dashed #999;padding-right:12px;margin-right:12px}#article-pager a{margin:0}#article-pager a:hover{color:#fbfbfb}#article-sidebar .sidebar .title{padding-top:0}#article-sidebar .pop-num{padding:4px;margin-left:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;font-size:12px}#pop-article-sidebar .list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd} \ No newline at end of file diff --git a/static/less/saber.less b/static/less/saber.less index 1cdf71d..4ff8b8b 100644 --- a/static/less/saber.less +++ b/static/less/saber.less @@ -115,4 +115,26 @@ html, body { a:hover{ color: @white1; } +} + +#article-sidebar{ + .sidebar{ + .title{ + padding-top: 0; + } + } + .pop-num{ + padding:4px; + margin-left: 12px; + font-family: Verdana, Tahoma, '微软雅黑', '宋体', sans-serif; + font-size: 12px; + } +} + +#pop-article-sidebar{ + .list{ + li{ + .bottom-line(8px); + } + } } \ No newline at end of file diff --git a/view/saber/index.html b/view/saber/index.html index 85fbdce..5b4abba 100644 --- a/view/saber/index.html +++ b/view/saber/index.html @@ -1,4 +1,4 @@ -
      {{range .Articles}} +
      {{range .Articles}}
      -
      - right -
      \ No newline at end of file +{{Html .SidebarHtml}} \ No newline at end of file diff --git a/view/saber/sidebar.html b/view/saber/sidebar.html index f49821e..c38b53a 100644 --- a/view/saber/sidebar.html +++ b/view/saber/sidebar.html @@ -1 +1,11 @@ -sidebar \ No newline at end of file +
      +
      +
      热评文章
      +
        {{range .Popular}} +
      • + {{.Title}} + {{.CommentNum}} +
      • {{end}} +
      +
      +
      \ No newline at end of file From 1ea8edfe102e6eca0be459cd0fac4985cfd8b273 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sun, 16 Feb 2014 23:01:50 +0800 Subject: [PATCH 43/82] add code comments --- app/model/comment.go | 46 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/app/model/comment.go b/app/model/comment.go index 834892c..6f91cf2 100644 --- a/app/model/comment.go +++ b/app/model/comment.go @@ -13,6 +13,8 @@ var ( commentMaxId int ) +// Comment Reader struct. +// Saving comment reader for visiting wall usage or other statics. type Reader struct { Author string Email string @@ -22,6 +24,7 @@ type Reader struct { Rank int } +// Inc increases Reader's rank. func (r *Reader) Inc() { r.Rank++ if r.Rank > 1 { @@ -29,6 +32,7 @@ func (r *Reader) Inc() { } } +// Dec decreases Reader's rank. func (r *Reader) Dec() { r.Rank-- if r.Rank < 1 { @@ -36,6 +40,7 @@ func (r *Reader) Dec() { } } +// Comment struct defines a comment item data. type Comment struct { Id int Author string @@ -44,14 +49,18 @@ type Comment struct { Avatar string Content string CreateTime int64 - Cid int - Pid int - Status string - Ip string - UserAgent string - IsAdmin bool + // Content id + Cid int + // Parent Comment id + Pid int + Status string + Ip string + UserAgent string + // Is comment of admin + IsAdmin bool } +// ParentMd returns parent comment simple message as markdown text. func (c *Comment) ParentMd() string { if c.Pid < 1 { return "" @@ -65,6 +74,8 @@ func (c *Comment) ParentMd() string { return str } +// ToJson converts comment struct to public json map. +// It can hide some private fields, such as email. func (c *Comment) ToJson() map[string]interface{} { m := make(map[string]interface{}) m["id"] = c.Id @@ -82,6 +93,8 @@ func (c *Comment) ToJson() map[string]interface{} { return m } +// IsValid returns whether this comment is valid to show. +// If this comment is not approved or its parent is missing, return false. func (c *Comment) IsValid() bool { if c.Status != "approved" { return false @@ -94,6 +107,8 @@ func (c *Comment) IsValid() bool { return true } +// IsRemovable returns whether this comment can remove. +// If content or parent comment of this comment is removed, return true. func (c *Comment) IsRemovable() bool { if GetContentById(c.Cid) == nil { return true @@ -106,6 +121,7 @@ func (c *Comment) IsRemovable() bool { return false } +// GetReader returns the reader item of this comment. func (c *Comment) GetReader() *Reader { for _, r := range readers { if r.Email == c.Email { @@ -115,10 +131,12 @@ func (c *Comment) GetReader() *Reader { return nil } +// GetContent returns the content item of this comment. func (c *Comment) GetContent() *Content { return GetContentById(c.Cid) } +// CreateReader creates a reader from a comment. func CreateReader(c *Comment) { r := new(Reader) r.Author = c.Author @@ -131,18 +149,22 @@ func CreateReader(c *Comment) { go SyncReaders() } +// CreateComment creates a comment and links it to the cid content. func CreateComment(cid int, c *Comment) { commentMaxId += Storage.TimeInc(4) c.Id = commentMaxId c.CreateTime = utils.Now() c.Status = "check" c.Cid = cid + // if empty url, use # instead. if c.Url == "" { c.Url = "#" } + // if admin comment, must be approved. if c.IsAdmin { c.Status = "approved" } else { + // if common comment, get reader status for checking status. r := c.GetReader() if r != nil { if r.Active { @@ -161,6 +183,7 @@ func CreateComment(cid int, c *Comment) { go SyncContent(content) } +// SaveComment saves a comment and related updates content and reader data. func SaveComment(c *Comment) { cnt := GetContentById(c.Cid) go SyncContent(cnt) @@ -186,6 +209,7 @@ func removeOneComment(cid int, id int) { } } +// RemoveComment removes a comment by id and updates content iten by cid. func RemoveComment(cid int, id int) { removeOneComment(cid, id) cnt := GetContentById(cid) @@ -195,10 +219,13 @@ func RemoveComment(cid int, id int) { go SyncContent(cnt) } +// GetCommentById returns a comment by id. func GetCommentById(id int) *Comment { return comments[id] } +// GetCommentList returns a comments list and pager. +// This list scans all comments no matter its status. func GetCommentList(page, size int) ([]*Comment, *utils.Pager) { index := commentsIndex pager := utils.NewPager(page, size, len(index)) @@ -212,15 +239,18 @@ func GetCommentList(page, size int) ([]*Comment, *utils.Pager) { return comments, pager } +// SyncReaders writes all readers data. func SyncReaders() { Storage.Set("readers", readers) } +// LoadReaders loads all readers from storage json. func LoadReaders() { readers = make(map[string]*Reader) Storage.Get("readers", &readers) } +// LoadComments loads all comments from contents. func LoadComments() { comments = make(map[int]*Comment) commentsIndex = make([]int, 0) @@ -240,6 +270,8 @@ func LoadComments() { sort.Sort(sort.Reverse(sort.IntSlice(commentsIndex))) } +// UpdateCommentAdmin updates comment author data if admin user data updated. +// It only updates admin comments. func UpdateCommentAdmin(user *User) { for _, co := range comments { if co.IsAdmin { @@ -251,6 +283,7 @@ func UpdateCommentAdmin(user *User) { } } +// RecycleComments cleans removable comments. func RecycleComments() { for _, co := range comments { if co.IsRemovable() { @@ -260,6 +293,7 @@ func RecycleComments() { SyncContents() } +// StartCommentsTimers starts a timer to recycle comments. func StartCommentsTimer() { time.AfterFunc(time.Duration(6)*time.Hour, func() { println("recycle comments in 6 hours timer") From 08dabc420ce6de22501113bbe8fbe0261b40f253 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Sun, 16 Feb 2014 23:33:00 +0800 Subject: [PATCH 44/82] recent comment list in sidebar --- app/handler/func.go | 3 +- app/model/comment.go | 18 ++++++++++ static/css/saber.css | 2 +- static/less/saber.less | 77 ++++++++++++++++++++++++----------------- view/saber/sidebar.html | 9 +++++ 5 files changed, 75 insertions(+), 34 deletions(-) diff --git a/app/handler/func.go b/app/handler/func.go index 4f946fe..cfcaadf 100644 --- a/app/handler/func.go +++ b/app/handler/func.go @@ -78,6 +78,7 @@ func CommentHtml(context *GoInk.Context, c *model.Content) string { // SidebarHtml returns rendered sidebar template html. func SidebarHtml(context *GoInk.Context) string { return Theme(context).Tpl("sidebar", map[string]interface{}{ - "Popular": model.GetPopularArticleList(4), + "Popular": model.GetPopularArticleList(4), + "RecentComment": model.GetCommentRecentList(3), }) } diff --git a/app/model/comment.go b/app/model/comment.go index 6f91cf2..64261c2 100644 --- a/app/model/comment.go +++ b/app/model/comment.go @@ -239,6 +239,24 @@ func GetCommentList(page, size int) ([]*Comment, *utils.Pager) { return comments, pager } +// GetCommentRecentList returns a comments list of recent comments. +// Recent comments are approved and no parent and not admin comment. +// It's ordered by comment id desc. +func GetCommentRecentList(size int) []*Comment { + comments, i := make([]*Comment, 0), 0 + for _, id := range commentsIndex { + if i >= size { + return comments + } + c := GetCommentById(id) + if c.Pid < 1 && c.IsAdmin == false && c.Status == "approved" { + comments = append(comments, c) + i++ + } + } + return comments +} + // SyncReaders writes all readers data. func SyncReaders() { Storage.Set("readers", readers) diff --git a/static/css/saber.css b/static/css/saber.css index 5000560..6a4d8ae 100644 --- a/static/css/saber.css +++ b/static/css/saber.css @@ -1 +1 @@ -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}html,body{background:#f9f9f9}#header{background:#fff;box-shadow:0 0 4px #666;line-height:60px;padding:12px 0 18px 0}#header-img{width:60px;height:60px;margin-right:24px;border-radius:30px}#header-h,#header-sub{padding:0 18px 0 0}#header-sub{font-size:13px;color:#999}#nav{margin-right:-18px}#nav li a{margin-left:24px;padding:0 18px;font-size:15px}#nav li a:hover{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;background-color:#0079bc;color:#fbfbfb;padding:6px 18px}#footer{padding:30px 40px;color:#999}#main{margin:48px auto}#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4}#article-container article{margin-bottom:40px;padding-bottom:40px;border-bottom:1px dashed #bbb;margin-bottom:50px}#article-container .meta .comments{margin-bottom:0;margin-top:8px;margin-right:18px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;padding-bottom:2px}#article-container .meta .comments a{color:#fff;font-size:18px}#article-container .meta .views{top:-8px;left:-12px;padding:2px 6px;line-height:20px;text-align:center;font-size:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container .title{margin-bottom:24px;padding-bottom:24px;border-bottom:1px dashed #ddd;font-size:24px}#article-container .content{margin-top:-12px}#article-container .info{margin-bottom:0;color:#999;font-size:12px}#article-container .info span{border-right:1px dashed #999;padding-right:12px;margin-right:12px}#article-pager a{margin:0}#article-pager a:hover{color:#fbfbfb}#article-sidebar .sidebar .title{padding-top:0}#article-sidebar .pop-num{padding:4px;margin-left:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;font-size:12px}#pop-article-sidebar .list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd} \ No newline at end of file +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}html,body{background:#f9f9f9}#header{background:#fff;box-shadow:0 0 4px #666;line-height:60px;padding:12px 0 18px 0}#header-img{width:60px;height:60px;margin-right:24px;border-radius:30px}#header-h,#header-sub{padding:0 18px 0 0}#header-sub{font-size:13px;color:#999}#nav{margin-right:-18px}#nav li a{margin-left:24px;padding:0 18px;font-size:15px}#nav li a:hover{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;background-color:#0079bc;color:#fbfbfb;padding:6px 18px}#footer{padding:30px 40px;color:#999}#main{margin:48px auto}#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4}#article-container article{margin-bottom:40px;padding-bottom:40px;border-bottom:1px dashed #bbb;margin-bottom:50px}#article-container .meta .comments{margin-bottom:0;margin-top:8px;margin-right:18px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;padding-bottom:2px}#article-container .meta .comments a{color:#fff;font-size:18px}#article-container .meta .views{top:-8px;left:-12px;padding:2px 6px;line-height:20px;text-align:center;font-size:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container .title{margin-bottom:24px;padding-bottom:24px;border-bottom:1px dashed #ddd;font-size:24px}#article-container .content{margin-top:-12px}#article-container .info{margin-bottom:0;color:#999;font-size:12px}#article-container .info span{border-right:1px dashed #999;padding-right:12px;margin-right:12px}#article-pager a{margin:0}#article-pager a:hover{color:#fbfbfb}#article-sidebar .sidebar{margin-bottom:24px}#article-sidebar .sidebar .title{padding-top:0}#pop-article-sidebar .list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#pop-article-sidebar .pop-num{padding:4px;margin-left:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;font-size:12px}#recent-comment-sidebar .list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#recent-comment-sidebar .author{padding:4px 6px;margin-right:6px} \ No newline at end of file diff --git a/static/less/saber.less b/static/less/saber.less index 4ff8b8b..790cab6 100644 --- a/static/less/saber.less +++ b/static/less/saber.less @@ -4,36 +4,36 @@ html, body { background: @white2; } -#header{ +#header { background: #FFF; box-shadow: 0 0 4px @black2; line-height: 60px; padding: 12px 0 18px 0; } -#header-img{ +#header-img { width: 60px; height: 60px; margin-right: 24px; border-radius: 30px; } -#header-h,#header-sub{ +#header-h, #header-sub { padding: 0 18px 0 0; } -#header-sub{ +#header-sub { font-size: 13px; color: @black3; } -#nav{ +#nav { margin-right: -18px; - li{ - a{ + li { + a { margin-left: 24px; padding: 0 18px; - &:hover{ + &:hover { .lbl; .lbl-blue; padding: 6px 18px; @@ -62,43 +62,43 @@ html, body { opacity: 0.4; } -#article-container{ - article{ - .bottom-line(40px,@black4); +#article-container { + article { + .bottom-line(40px, @black4); margin-bottom: 50px; } - .meta{ - .comments{ + .meta { + .comments { margin-bottom: 0; margin-top: 8px; margin-right: 18px; font-family: Verdana, Tahoma, '微软雅黑', '宋体', sans-serif; padding-bottom: 2px; - a{ + a { color: @white0; font-size: 18px; } } - .views{ - top:-8px; + .views { + top: -8px; left: -12px; - padding:2px 6px; + padding: 2px 6px; line-height: 20px; text-align: center; font-size: 12px; font-family: Verdana, Tahoma, '微软雅黑', '宋体', sans-serif; } } - .title{ + .title { .bottom-line(24px); font-size: 24px; } - .content{ + .content { margin-top: -12px; } - .info{ + .info { margin-bottom: 0; - span{ + span { border-right: 1px dashed @black3; padding-right: 12px; margin-right: 12px; @@ -108,33 +108,46 @@ html, body { } } -#article-pager{ - a{ +#article-pager { + a { margin: 0; } - a:hover{ + a:hover { color: @white1; } } -#article-sidebar{ - .sidebar{ - .title{ +#article-sidebar { + .sidebar { + .title { padding-top: 0; } + margin-bottom: 24px; } - .pop-num{ - padding:4px; +} + +#pop-article-sidebar { + .list { + li { + .bottom-line(8px); + } + } + .pop-num { + padding: 4px; margin-left: 12px; font-family: Verdana, Tahoma, '微软雅黑', '宋体', sans-serif; font-size: 12px; } } -#pop-article-sidebar{ - .list{ - li{ +#recent-comment-sidebar { + .list { + li { .bottom-line(8px); } } + .author { + padding: 4px 6px; + margin-right: 6px; + } } \ No newline at end of file diff --git a/view/saber/sidebar.html b/view/saber/sidebar.html index c38b53a..2e0bc2a 100644 --- a/view/saber/sidebar.html +++ b/view/saber/sidebar.html @@ -8,4 +8,13 @@
      热评文章
      {{end}}
    +
    \ No newline at end of file From 4297fd829d27da73114944248f70fa1d380555b5 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Mon, 17 Feb 2014 00:14:06 +0800 Subject: [PATCH 45/82] fix comment content xss --- app/handler/admin.go | 2 +- app/handler/home.go | 9 ++++----- app/model/comment.go | 4 ++++ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/handler/admin.go b/app/handler/admin.go index 9da842e..88de264 100644 --- a/app/handler/admin.go +++ b/app/handler/admin.go @@ -322,7 +322,7 @@ func AdminComments(context *GoInk.Context) { co.Author = user.Nick co.Email = user.Email co.Url = user.Url - co.Content = strings.Replace(utils.Html2str(context.String("content")), "\n", "
    ", -1) + co.Content = context.String("content") co.Avatar = utils.Gravatar(co.Email, "50") co.Pid = pid co.Ip = context.Ip diff --git a/app/handler/home.go b/app/handler/home.go index c1273fc..f522b2f 100644 --- a/app/handler/home.go +++ b/app/handler/home.go @@ -5,7 +5,6 @@ import ( "github.com/fuxiaohei/GoBlog/app/utils" "github.com/fuxiaohei/GoInk" "strconv" - "strings" ) func Login(context *GoInk.Context) { @@ -62,9 +61,9 @@ func Home(context *GoInk.Context) { size, _ := strconv.Atoi(model.GetSetting("article_size")) articles, pager := model.GetPublishArticleList(page, size) Theme(context).Layout("home").Render("index", map[string]interface{}{ - "Articles": articles, - "Pager": pager, - "SidebarHtml": SidebarHtml(context), + "Articles": articles, + "Pager": pager, + "SidebarHtml": SidebarHtml(context), }) } @@ -146,7 +145,7 @@ func Comment(context *GoInk.Context) { co.Author = data["user"] co.Email = data["email"] co.Url = data["url"] - co.Content = strings.Replace(utils.Html2str(data["content"]), "\n", "
    ", -1) + co.Content = data["content"] co.Avatar = utils.Gravatar(co.Email, "50") co.Pid, _ = strconv.Atoi(data["pid"]) co.Ip = context.Ip diff --git a/app/model/comment.go b/app/model/comment.go index 64261c2..a3d878c 100644 --- a/app/model/comment.go +++ b/app/model/comment.go @@ -2,7 +2,9 @@ package model import ( "github.com/fuxiaohei/GoBlog/app/utils" + "html/template" "sort" + "strings" "time" ) @@ -156,6 +158,8 @@ func CreateComment(cid int, c *Comment) { c.CreateTime = utils.Now() c.Status = "check" c.Cid = cid + // escape content + c.Content = strings.Replace(utils.Html2str(template.HTMLEscapeString(c.Content)), "\n", "
    ", -1) // if empty url, use # instead. if c.Url == "" { c.Url = "#" From ff8b0c7e9dd5831b18fd29442110e33cd538735a Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Mon, 17 Feb 2014 20:05:46 +0800 Subject: [PATCH 46/82] remove font-awesome dependency --- static/css/admin.css | 185 +------------------------------------ static/less/admin.less | 14 ++- view/admin/admin.layout | 21 ++--- view/admin/articles.html | 2 +- view/admin/cmd/backup.html | 4 +- view/admin/cmd/log.html | 2 +- view/admin/comments.html | 8 +- view/admin/files.html | 4 +- view/admin/home.html | 2 +- view/admin/pages.html | 2 +- view/admin/setting.html | 8 +- 11 files changed, 33 insertions(+), 219 deletions(-) diff --git a/static/css/admin.css b/static/css/admin.css index f1f932c..9c5f2fb 100644 --- a/static/css/admin.css +++ b/static/css/admin.css @@ -1,184 +1 @@ -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0} -header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block} -audio,canvas,video{display:inline-block} -table{border-collapse:collapse;border-spacing:0} -fieldset,img{border:0} -address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal} -ol,ul{list-style:none} -caption,th{text-align:left} -h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal} -q:before,q:after{content:''} -abbr,acronym{border:0;font-variant:normal} -sup{vertical-align:text-top} -sub{vertical-align:text-bottom} -input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit} -legend{color:#000} -html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb} -a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b} -p{margin-bottom:18px} -h1,h2,h3,h4,h5,h6{padding:12px 0} -h1{font-size:28px} -h2{font-size:24px} -h3{font-size:21px} -h4{font-size:19px} -h5{font-size:16px} -h6{font-size:14px} -.text-left{text-align:left} -.text-right{text-align:right} -.text-center{text-align:center} -.left{float:left} -.right{float:right} -.absolute{position:absolute} -.relative{position:relative} -.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0} -.vertical-middle{vertical-align:middle} -.inline{display:inline} -.inline-block{display:inline-block} -.block{display:block} -.fade-out{opacity:0} -.hide{display:none !important} -.container{max-width:1200px;margin:auto} -.container960{max-width:960px;margin:auto} -.grid-1-2{width:50%} -.grid-1-3{width:33.3333%} -.grid-1-4{width:25%} -.grid-1-5{width:20%} -.grid-1-6{width:16.6666%} -.grid-2-3{width:66.6666%} -.grid-3-4{width:75%} -.grid-3-5{width:60%} -.grid-4-5{width:80%} -.grid-5-6{width:83.3333%} -input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif} -.form legend{font-size:18px;margin-bottom:14px} -.form label{display:inline-block;margin-right:12px} -.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc} -.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal} -.form .field{margin-bottom:24px} -.form .invalid{margin-right:12px} -.form .tip{font-size:13px;color:#999;margin-left:12px} -.form-vertical label{display:block;margin-bottom:8px} -.form-vertical .ipt{width:100%;box-sizing:border-box} -.form-vertical .invalid{margin-right:0;margin-top:6px} -.form-align label{display:inline-block;min-width:60px;text-align:right} -.form-align .invalid{margin-right:0;margin-top:6px} -.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer} -a.btn{line-height:36px;color:#fff} -.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a} -.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b} -.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462} -.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} -.lbl-red{background-color:#e64346;color:#fbfbfb} -a.lbl{line-height:26px} -a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb} -.lbl-blue{background-color:#0079bc;color:#fbfbfb} -a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb} -.lbl-green{background-color:#7ab277;color:#fbfbfb} -a.lbl-green:hover{background-color:#649462;color:#fbfbfb} -.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333} -.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff} -.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb} -.pager .current:hover{background-color:#0079bc} -.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold} -.markdown h1{font-size:24px} -.markdown h2{font-size:21px} -.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd} -.markdown h3{font-size:19px} -.markdown h4{font-size:18px} -.markdown h5{font-size:16px} -.markdown h6{font-size:14px} -.markdown p{margin-bottom:10px} -.markdown ul{list-style:disc inside} -.markdown ol{list-style:decimal inside} -.markdown code{font-family:Consolas,"Courier New",Arial} -.markdown p code{color:#c7383a} -.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0} -.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0} -.markdown ol,.markdown ul{margin:12px 24px} -.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block} -.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px} -.markdown table thead{background:#f6f6f6} -#header{height:39px;background-color:#fff;border-bottom:1px solid #999;line-height:39px;box-shadow:0 0 2px #ccc;-moz-box-shadow:0 0 2px #ccc;-webkit-box-shadow:0 0 2px #ccc}#header .nav>a{display:inline-block;padding:0 18px;border-left:1px solid #ccc;border-right:1px solid #ccc;color:#666;margin-left:-1px}#header .nav>a:hover{border-color:#0079bc;background-color:#0079bc;color:#fbfbfb} -#header .logo{line-height:36px;padding:0 14px 0 0;margin:0;font-size:14px} -#header .nav-item{display:inline-block;padding:0 18px;border-left:1px solid #ccc;border-right:1px solid #ccc;color:#666;margin-right:-1px}#header .nav-item:hover{background-color:#eee} -#header .out{color:#c7383a}#header .out:hover{border-color:#e64346;background-color:#e64346;color:#fbfbfb} -#footer{padding:24px;background:#f6f6f6;border-top:1px solid #ddd;margin-top:30px;color:#999;font-size:12px}#footer p{margin-bottom:0} -#footer a{color:#999;padding:6px 12px}#footer a:hover{border-bottom:1px dashed #bbb} -.admin{margin:24px auto 48px auto} -#profile{width:800px;margin:24px auto 48px auto}#profile .avatar img{width:180px;padding:4px;background-color:#fff;border:1px solid #ddd;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;height:180px} -#profile .ipt{width:280px} -#profile .invalid{margin-left:75px} -#profile .bio{margin-left:75px;height:160px} -#password{width:400px;margin:24px auto 48px auto}#password .invalid{margin-left:75px} -#article-list{margin-bottom:24px}#article-list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#article-list li>*{margin-right:16px} -#article-list li .time,#article-list li .comment{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;color:#999} -#article-list li .comment{color:#649462}#article-list li .comment .fa{margin-right:6px} -#article-list li .is-comment{color:#ff4447}#article-list li .is-comment .fa{margin-right:6px} -#article-list li .del,#article-list li .edit{opacity:0} -#article-list li:hover .del,#article-list li:hover .edit{opacity:1} -#article-list li:first-child h4{padding-top:0} -#article-form{margin:24px auto 48px auto}#article-form input.title{width:100%;box-sizing:border-box;border-bottom:none;margin-bottom:-1px;font-size:18px} -#article-form select{padding:4px 6px} -#article-form .preview{border:1px solid #999;background-color:#fff;box-sizing:border-box;padding:0 12px;height:700px;margin-left:-1px;border-radius:2px;overflow-x:scroll} -#article-form .form-vertical{width:100%;margin-top:18px}#article-form .form-vertical input.ipt{width:300px} -#article-form .form-vertical .item{float:left;margin-right:18px} -#article-form .form-vertical .btn{margin-right:16px} -#article-form .file-progress{padding:0 12px;background:rgba(0,150,223,0.2);color:#666;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;box-sizing:border-box;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} -#article-form .file-progress.err{background:rgba(255,68,71,0.2);color:#aa393c} -#setting-nav{width:1000px;margin-top:24px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#setting-nav li{display:inline-block;margin:0 12px}#setting-nav li a{padding:3px 10px} -#setting-nav li a:hover,#setting-nav li a.current{border-bottom:2px solid #005b9b} -.setting-panel{display:none} -.setting-form{width:820px;margin:24px auto 48px auto}.setting-form .ipt{width:480px} -.setting-form .invalid{margin-left:75px} -.setting-form label{min-width:10em} -.setting-form .tip.block{margin-left:12em} -#setting-custom-form{width:1000px}#setting-custom-form input.key{width:250px} -#setting-custom-form input.value{width:650px} -#setting-custom-form .item{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd} -#setting-custom-form .del{margin-left:12px;color:#e64346} -#setting-custom-form .tip{margin-left:0} -#setting-nav-form{width:1000px}#setting-nav-form .item{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd} -#setting-nav-form span.label{margin-right:6px} -#setting-nav-form input.order{width:2.5em;min-width:0} -#setting-nav-form input.text{width:80px;min-width:0} -#setting-nav-form input.title{width:150px;min-width:0} -#setting-nav-form input.link{width:340px} -#setting-nav-form .del{margin-left:12px;color:#e64346} -#comment-list .c-avatar{width:48px;height:48px;padding:2px;border:1px solid #ccc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;margin-right:18px} -#comment-list .comment{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd} -#comment-list .c-meta>*{margin-right:16px} -#comment-list .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#comment-list .c-time .fa{margin-right:6px} -#comment-list .c-cnt,#comment-list .c-email{color:#999;font-size:12px} -#comment-list .c-reply{color:#999}#comment-list .c-reply:hover{color:#333} -#comment-list .c-author{font-size:13px} -#comment-list .c-author.admin{background-color:#e64346;color:#fbfbfb} -#comment-list .c-p-md{margin-top:8px;font-size:12px;line-height:18px;color:#666} -#comment-list .c-section{max-width:830px} -#comment-list .c-check,#comment-list .c-del{color:#e64346}#comment-list .c-check .fa,#comment-list .c-del .fa{margin-right:6px} -#comment-list .c-check:hover,#comment-list .c-del:hover{color:#aa393c} -#comment-form{padding-top:12px;display:none;margin-left:72px}#comment-form .btn{margin-right:24px} -#comment-content{width:500px;height:80px;margin-right:24px} -#files-list li.file{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#files-list li.file>*{margin-right:16px} -#files-list li.file:hover .del{opacity:1 !important} -#files-list .upload-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} -#files-list .del{color:#e64346} -#files-list .file-progress{padding:0 12px;background:rgba(0,150,223,0.2);color:#666;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;box-sizing:border-box;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} -#files-list .file-progress.err{background:rgba(255,68,71,0.2);color:#aa393c} -#files-list .size{width:4em;display:inline-block} -#plugin-list li{margin-bottom:16px;padding-bottom:16px;border-bottom:1px dashed #ddd}#plugin-list li .desc{margin-bottom:0;width:99%;color:#999} -#plugin-list li a.lbl{padding:0 8px;margin-left:16px} -#plugin-list li .version{color:#507650;margin-left:16px} -#plugin-list li .name{font-size:16px} -#plugin-list li .active{width:12px;height:12px;margin-right:16px;padding:0;margin-top:10px} -#plugin-list li .setting{margin-left:16px} -#plugin-setting-form p.item{clear:both} -#plugin-setting-form label{float:left;min-width:6em;text-align:right;margin-right:2em} -#plugin-setting-form .title{padding-top:0;margin-bottom:18px} -#plugin-setting-form input.ipt{width:600px} -#dashboard .grid-1-5{margin-right:2%} -#dashboard .quick-link li{list-style:inside disc;margin-bottom:6px;padding-bottom:6px;border-bottom:1px dashed #ddd} -#dashboard .stats .lbl{padding:1px 5px;margin:0 3px} -#dashboard .activity .msg{padding:8px 12px;margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd;line-height:24px;font-size:12px}#dashboard .activity .msg .time{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} -#dashboard .activity .msg .data{color:#666;margin-left:1.2em}#dashboard .activity .msg .data p{margin-bottom:0;line-height:24px} -#dashboard .activity .msg .read{top:0;right:12px;opacity:0}#dashboard .activity .msg .read:hover{color:#e64346} -#dashboard .activity .msg:hover{background:rgba(0,150,223,0.06)}#dashboard .activity .msg:hover .read{opacity:1} +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}#header{height:39px;background-color:#fff;border-bottom:1px solid #999;line-height:39px;box-shadow:0 0 2px #ccc;-moz-box-shadow:0 0 2px #ccc;-webkit-box-shadow:0 0 2px #ccc}#header .nav>a{display:inline-block;padding:0 18px;border-left:1px solid #ccc;border-right:1px solid #ccc;color:#666;margin-left:-1px}#header .nav>a:hover{border-color:#0079bc;background-color:#0079bc;color:#fbfbfb}#header .logo{line-height:36px;padding:0 14px 0 0;margin:0;font-size:14px}#header .nav-item{display:inline-block;padding:0 18px;border-left:1px solid #ccc;border-right:1px solid #ccc;color:#666;margin-right:-1px}#header .nav-item:hover{background-color:#eee}#header .out{color:#c7383a}#header .out:hover{border-color:#e64346;background-color:#e64346;color:#fbfbfb}#footer{padding:24px;background:#f6f6f6;border-top:1px solid #ddd;margin-top:30px;color:#999;font-size:12px}#footer p{margin-bottom:0}#footer a{color:#999;padding:6px 12px}#footer a:hover{border-bottom:1px dashed #bbb}.admin{margin:24px auto 48px auto}#profile{width:800px;margin:24px auto 48px auto}#profile .avatar img{width:180px;padding:4px;background-color:#fff;border:1px solid #ddd;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;height:180px}#profile .ipt{width:280px}#profile .invalid{margin-left:75px}#profile .bio{margin-left:75px;height:160px}#password{width:400px;margin:24px auto 48px auto}#password .invalid{margin-left:75px}#article-list{margin-bottom:24px}#article-list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#article-list li>*{margin-right:16px}#article-list li .time,#article-list li .comment{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;color:#999}#article-list li .comment{color:#649462}#article-list li .comment .fa{margin-right:6px}#article-list li .is-comment{color:#ff4447}#article-list li .is-comment .fa{margin-right:6px}#article-list li .del,#article-list li .edit{opacity:0}#article-list li:hover .del,#article-list li:hover .edit{opacity:1}#article-list li:first-child h4{padding-top:0}#article-form{margin:24px auto 48px auto}#article-form input.title{width:100%;box-sizing:border-box;border-bottom:none;margin-bottom:-1px;font-size:18px}#article-form select{padding:4px 6px}#article-form .preview{border:1px solid #999;background-color:#fff;box-sizing:border-box;padding:0 12px;height:700px;margin-left:-1px;border-radius:2px;overflow-x:scroll}#article-form .form-vertical{width:100%;margin-top:18px}#article-form .form-vertical input.ipt{width:300px}#article-form .form-vertical .item{float:left;margin-right:18px}#article-form .form-vertical .btn{margin-right:16px}#article-form .file-progress{padding:0 12px;background:rgba(0,150,223,0.2);color:#666;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;box-sizing:border-box;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}#article-form .file-progress.err{background:rgba(255,68,71,0.2);color:#aa393c}#setting-nav{width:1000px;margin-top:24px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#setting-nav li{display:inline-block;margin:0 12px}#setting-nav li a{padding:3px 10px}#setting-nav li a:hover,#setting-nav li a.current{border-bottom:2px solid #005b9b}.setting-panel{display:none}.setting-form{width:820px;margin:24px auto 48px auto}.setting-form .ipt{width:480px}.setting-form .invalid{margin-left:75px}.setting-form label{min-width:10em}.setting-form .tip.block{margin-left:12em}#setting-custom-form{width:1000px}#setting-custom-form input.key{width:240px}#setting-custom-form input.value{width:640px}#setting-custom-form .item{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#setting-custom-form .del{margin-left:12px;color:#e64346;font-size:12px}#setting-custom-form .tip{margin-left:0}#setting-nav-form{width:1000px}#setting-nav-form .item{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#setting-nav-form span.label{margin-right:6px}#setting-nav-form input.order{width:2.5em;min-width:0}#setting-nav-form input.text{width:80px;min-width:0}#setting-nav-form input.title{width:150px;min-width:0}#setting-nav-form input.link{width:340px}#setting-nav-form .del{margin-left:12px;color:#e64346}#comment-list .c-avatar{width:48px;height:48px;padding:2px;border:1px solid #ccc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;margin-right:18px}#comment-list .comment{margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed #ddd}#comment-list .c-meta>*{margin-right:16px}#comment-list .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#comment-list .c-time .fa{margin-right:6px}#comment-list .c-cnt,#comment-list .c-email{color:#999;font-size:12px}#comment-list .c-author{font-size:13px}#comment-list .c-author.admin{background-color:#e64346;color:#fbfbfb}#comment-list .c-p-md{margin-top:8px;font-size:12px;line-height:18px;color:#666}#comment-list .c-section{max-width:830px}#comment-list .c-check,#comment-list .c-del{color:#e64346}#comment-list .c-check .fa,#comment-list .c-del .fa{margin-right:6px}#comment-list .c-check:hover,#comment-list .c-del:hover{color:#aa393c}#comment-list .c-reply,#comment-list .c-check,#comment-list .c-del{font-size:12px}#comment-form{padding-top:12px;display:none;margin-left:72px}#comment-form .btn{margin-right:24px}#comment-content{width:500px;height:80px;margin-right:24px}#files-list li.file{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#files-list li.file>*{margin-right:16px}#files-list li.file:hover .del{opacity:1 !important}#files-list .upload-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#files-list .del{color:#e64346}#files-list .file-progress{padding:0 12px;background:rgba(0,150,223,0.2);color:#666;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;box-sizing:border-box;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}#files-list .file-progress.err{background:rgba(255,68,71,0.2);color:#aa393c}#files-list .size{width:4em;display:inline-block}#plugin-list li{margin-bottom:16px;padding-bottom:16px;border-bottom:1px dashed #ddd}#plugin-list li .desc{margin-bottom:0;width:99%;color:#999}#plugin-list li a.lbl{padding:0 8px;margin-left:16px}#plugin-list li .version{color:#507650;margin-left:16px}#plugin-list li .name{font-size:16px}#plugin-list li .active{width:12px;height:12px;margin-right:16px;padding:0;margin-top:10px}#plugin-list li .setting{margin-left:16px}#plugin-setting-form p.item{clear:both}#plugin-setting-form label{float:left;min-width:6em;text-align:right;margin-right:2em}#plugin-setting-form .title{padding-top:0;margin-bottom:18px}#plugin-setting-form input.ipt{width:600px}#dashboard .grid-1-5{margin-right:2%}#dashboard .quick-link li{list-style:inside disc;margin-bottom:6px;padding-bottom:6px;border-bottom:1px dashed #ddd}#dashboard .stats .lbl{padding:1px 5px;margin:0 3px}#dashboard .activity .msg{padding:8px 12px;margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd;line-height:24px;font-size:12px}#dashboard .activity .msg .time{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#dashboard .activity .msg .data{color:#666;margin-left:1.2em}#dashboard .activity .msg .data p{margin-bottom:0;line-height:24px}#dashboard .activity .msg .read{top:0;right:12px;opacity:0}#dashboard .activity .msg .read:hover{color:#e64346}#dashboard .activity .msg:hover{background:rgba(0,150,223,0.06)}#dashboard .activity .msg:hover .read{opacity:1} \ No newline at end of file diff --git a/static/less/admin.less b/static/less/admin.less index 04f8f58..0960d54 100644 --- a/static/less/admin.less +++ b/static/less/admin.less @@ -233,10 +233,10 @@ #setting-custom-form{ width: 1000px; input.key{ - width: 250px; + width: 240px; } input.value{ - width: 650px; + width: 640px; } .item{ .bottom-line(12px); @@ -244,6 +244,7 @@ .del{ margin-left: 12px; color: @red1; + font-size: 12px; } .tip{ margin-left: 0; @@ -307,12 +308,6 @@ color: @black3; font-size: 12px; } - .c-reply{ - color: @black3; - &:hover{ - color: @black1; - } - } .c-author{ font-size: 13px; } @@ -337,6 +332,9 @@ color: @red3; } } + .c-reply,.c-check,.c-del{ + font-size: 12px; + } } #comment-form{ diff --git a/view/admin/admin.layout b/view/admin/admin.layout index 54a77ba..e5a6111 100644 --- a/view/admin/admin.layout +++ b/view/admin/admin.layout @@ -4,7 +4,6 @@ {{.Title}} - Fxh.Go - @@ -14,17 +13,17 @@
    - - - + 退出 + + 前台
    {@Content} diff --git a/view/admin/articles.html b/view/admin/articles.html index 45efa6a..847c32f 100644 --- a/view/admin/articles.html +++ b/view/admin/articles.html @@ -6,7 +6,7 @@ {{DateInt64 .CreateTime "MM.DD"}}

    {{.Title}}

    {{if ne .Status "publish"}} 草稿{{end}} {{.Slug}}{{if eq .IsComment false}} - {{end}} + 关评{{end}} {{.CommentNum}} / {{.Hits}} 编辑 删除 diff --git a/view/admin/cmd/backup.html b/view/admin/cmd/backup.html index 0a8bbef..2b632dc 100644 --- a/view/admin/cmd/backup.html +++ b/view/admin/cmd/backup.html @@ -5,9 +5,9 @@

    备份数据

      {{range .Files}}
    • {{DateTime .ModTime "MM.DD HH:mm"}} - {{.Name}} + {{.Name}} 下载 {{FileSize .Size}} - + 删除
    • {{end}}
    @@ -72,7 +72,7 @@

         - + 删除

    {{end}}

         @@ -83,7 +83,7 @@

         - + 删除

    From 6bca46b53c6e30c42f0a304b57bd45917ef39347 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Mon, 17 Feb 2014 20:13:47 +0800 Subject: [PATCH 47/82] add code comments --- app/app.go | 5 +++++ app/cmd.go | 3 +++ app/log.go | 1 + 3 files changed, 9 insertions(+) diff --git a/app/app.go b/app/app.go index a810fb9..673d49b 100644 --- a/app/app.go +++ b/app/app.go @@ -18,7 +18,9 @@ import ( ) var ( + // APP VERSION, as date version VERSION = 20140209 + // Global GoInk application App *GoInk.App staticFileSuffix = ".css,.js,.jpg,.jpeg,.png,.gif,.ico,.xml,.zip,.txt,.html,.otf,.svg,.eot,.woff,.ttf,.doc,.ppt,.xls,.docx,.pptx,.xlsx,.xsl" uploadFileSuffix = ".jpg,.png,.gif,.zip,.txt,.doc,.docx,.xls,.xlsx,.ppt,.pptx" @@ -136,6 +138,8 @@ func catchExit() { } } +// Init starts Fxh.Go application preparation. +// Load models and plugins, update views. func Init() { // init storage @@ -219,6 +223,7 @@ func registerHomeHandler() { App.Get("/", handler.Home) } +// Run begins Fxh.Go http server. func Run() { registerAdminHandler() diff --git a/app/cmd.go b/app/cmd.go index 1882cb0..39904c3 100644 --- a/app/cmd.go +++ b/app/cmd.go @@ -6,6 +6,9 @@ import ( "os" ) +// Cmd starts command line application. +// It captures command line arguments and executes proper operation. +// Some operations will exit application when finished. func Cmd() { args := os.Args if len(args) > 1 { diff --git a/app/log.go b/app/log.go index 65a16a6..89e4bce 100644 --- a/app/log.go +++ b/app/log.go @@ -7,6 +7,7 @@ import ( "path" ) +// LogErrors logs error bytes to tmp/log directory. func LogError(bytes []byte) { dir := App.Config().String("app.log_dir") file := path.Join(dir, utils.DateInt64(utils.Now(), "MMDDHHmmss.log")) From 274dbc9c2fc42a5d380edf9947487d083efe3baf Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Tue, 18 Feb 2014 23:23:26 +0800 Subject: [PATCH 48/82] tag links support --- app/handler/func.go | 1 + app/model/content.go | 32 ++++++++++++++++++++++++++++++++ view/saber/article.html | 2 +- view/saber/index.html | 2 +- view/saber/sidebar.html | 8 ++++++++ 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/app/handler/func.go b/app/handler/func.go index cfcaadf..75f6d49 100644 --- a/app/handler/func.go +++ b/app/handler/func.go @@ -80,5 +80,6 @@ func SidebarHtml(context *GoInk.Context) string { return Theme(context).Tpl("sidebar", map[string]interface{}{ "Popular": model.GetPopularArticleList(4), "RecentComment": model.GetCommentRecentList(3), + "Tags":model.GetContentTags(), }) } diff --git a/app/model/content.go b/app/model/content.go index 639b347..5d74bcf 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "github.com/fuxiaohei/GoBlog/app/utils" + "net/url" "os" "path/filepath" "sort" @@ -15,6 +16,7 @@ var ( contents map[int]*Content contentMaxId int contentsIndex map[string][]int + tags []*Tag ) // Content instance, defines content data items. @@ -56,6 +58,15 @@ func (cnt *Content) TagString() string { return strings.Join(cnt.Tags, ",") } +// GetTags returns tags struct in this content. +func (cnt *Content) GetTags() []*Tag { + tgs := make([]*Tag, len(cnt.Tags)) + for i, t := range cnt.Tags { + tgs[i] = &Tag{Name: t} + } + return tgs +} + // Link returns content link as {type}/{id}/{slug}.html. // If content isn't published, return "#". // If content is page and top linked, return {slug}.html as top level link. @@ -122,6 +133,17 @@ func (cnt *Content) User() *User { return GetUserById(cnt.AuthorId) } +// Content Tag struct. It convert tag string to proper struct or link. +type Tag struct { + Name string + Cid []int +} + +// Link returns tag name url-encoded link. +func (t *Tag) Link() string { + return "/tag/" + url.QueryEscape(t.Name) +} + // GetContentById gets a content by given id. func GetContentById(id int) *Content { return contents[id] @@ -332,16 +354,26 @@ func generateContentTmpIndexes() { // assemble indexes map data["pop-index"] = popIndex + tags = make([]*Tag, 0) for tag, index := range tagIndexes { sort.Sort(sort.Reverse(sort.IntSlice(index))) data["t-"+tag] = index contentsIndex["t-"+tag] = index + t := new(Tag) + t.Name = tag + t.Cid = index + tags = append(tags, t) } // write to tmp data TmpStorage.Set("contents", data) } +// GetContentTags returns all tags. +func GetContentTags() []*Tag { + return tags +} + // GetPopularArticleList returns popular articles list. // Popular articles are ordered by comment number. func GetPopularArticleList(size int) []*Content { diff --git a/view/saber/article.html b/view/saber/article.html index 2e5f9a6..f04ae73 100644 --- a/view/saber/article.html +++ b/view/saber/article.html @@ -8,7 +8,7 @@

    {{.Title}}

    {{if .User}}{{.User.Nick}}   {{end}}发表于   {{DateInt64 .CreateTime "YYYY 年 MM 月 DD 日"}}

    {{Html .Content}}

    - 标签:{{.TagString}} + 标签:{{range .GetTags}}{{.Name}}{{end}}

    {{end}}
    diff --git a/view/saber/index.html b/view/saber/index.html index 5b4abba..96f69e0 100644 --- a/view/saber/index.html +++ b/view/saber/index.html @@ -9,7 +9,7 @@

    {{.Title}}

    {{Html .Summary}}

    {{if .User}}{{.User.Nick}}   {{end}}发表于   {{DateInt64 .CreateTime "YYYY 年 MM 月 DD 日"}} - 标签:{{.TagString}} + 标签:{{range .GetTags}}{{.Name}}{{end}} 继续阅读

    diff --git a/view/saber/sidebar.html b/view/saber/sidebar.html index 2e0bc2a..7325a89 100644 --- a/view/saber/sidebar.html +++ b/view/saber/sidebar.html @@ -17,4 +17,12 @@
    最新评论
    {{end}}
+ \ No newline at end of file From c24390c13af457b38e93f086a6bacedd0a5f8a7e Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Thu, 20 Feb 2014 16:09:28 +0800 Subject: [PATCH 49/82] timer ticker support for timer works --- app/cmd/backup.go | 5 ++- app/model/comment.go | 7 ++--- app/model/content.go | 17 +++------- app/model/message.go | 6 ++-- app/model/storage.go | 14 +++------ app/model/timer.go | 74 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 89 insertions(+), 34 deletions(-) create mode 100644 app/model/timer.go diff --git a/app/cmd/backup.go b/app/cmd/backup.go index 876cee3..38f42f5 100644 --- a/app/cmd/backup.go +++ b/app/cmd/backup.go @@ -92,14 +92,13 @@ func GetBackupFiles() ([]os.FileInfo, error) { // StartBackupTimer starts backup operation timer for auto backup stuff. func StartBackupTimer(app *GoInk.App, t int) { - println("backup files after", t, "hours") - time.AfterFunc(time.Duration(t)*time.Hour, func() { + model.SetTimerFunc("backup-data", 144, func() { filename, e := DoBackup(app, true) if e != nil { model.CreateMessage("backup", "[0]"+e.Error()) } else { model.CreateMessage("backup", "[1]"+filename) } - StartBackupTimer(app, t) + println("backup files in", t, "hours") }) } diff --git a/app/model/comment.go b/app/model/comment.go index a3d878c..01f8a77 100644 --- a/app/model/comment.go +++ b/app/model/comment.go @@ -5,7 +5,6 @@ import ( "html/template" "sort" "strings" - "time" ) var ( @@ -315,11 +314,9 @@ func RecycleComments() { SyncContents() } -// StartCommentsTimers starts a timer to recycle comments. -func StartCommentsTimer() { - time.AfterFunc(time.Duration(6)*time.Hour, func() { +func startCommentsTimer() { + SetTimerFunc("comment-recycle", 36, func() { println("recycle comments in 6 hours timer") RecycleComments() - StartCommentsTimer() }) } diff --git a/app/model/content.go b/app/model/content.go index 5d74bcf..3b711e4 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -9,7 +9,6 @@ import ( "path/filepath" "sort" "strings" - "time" ) var ( @@ -301,7 +300,9 @@ func LoadContents() { sort.Sort(sort.Reverse(sort.IntSlice(pageIndex))) contentsIndex["article"] = articleIndex contentsIndex["page"] = pageIndex + // generate indexes generatePublishArticleIndex() + generateContentTmpIndexes() } func generatePublishArticleIndex() { @@ -316,10 +317,9 @@ func generatePublishArticleIndex() { } func startContentSyncTimer() { - time.AfterFunc(time.Duration(1)*time.Hour, func() { + SetTimerFunc("content-sync", 6, func() { println("write contents in 1 hour timer") SyncContents() - startContentSyncTimer() }) } @@ -405,17 +405,8 @@ func GetTaggedArticleList(tag string, page, size int) ([]*Content, *utils.Pager) } func startContentTmpIndexesTimer() { - time.AfterFunc(time.Duration(6)*time.Hour, func() { + SetTimerFunc("content-indexes", 36, func() { println("write content indexes in 6 hours timer") generateContentTmpIndexes() - startContentTmpIndexesTimer() }) } - -// StartContentsTimer starts some timers for contents. -// An hour timer is for sync all contents because their hits number are changing. -func StartContentsTimer() { - startContentSyncTimer() - generateContentTmpIndexes() - startContentTmpIndexesTimer() -} diff --git a/app/model/message.go b/app/model/message.go index e1fe916..30015b0 100644 --- a/app/model/message.go +++ b/app/model/message.go @@ -3,7 +3,6 @@ package model import ( "github.com/fuxiaohei/GoBlog/app/utils" "strings" - "time" ) var ( @@ -144,11 +143,10 @@ func generateBackupMessage(co interface{}) string { return "备份全站到 " + strings.TrimPrefix(str, "[1]") + " 成功." } -func StartMessageTimer() { - time.AfterFunc(time.Duration(90)*time.Minute, func() { +func startMessageTimer() { + SetTimerFunc("message-sync", 9, func() { println("write messages in 1.5 hour timer") RecycleMessages() SyncMessages() - StartMessageTimer() }) } diff --git a/app/model/storage.go b/app/model/storage.go index 064a0ce..715cdac 100644 --- a/app/model/storage.go +++ b/app/model/storage.go @@ -12,7 +12,7 @@ import ( var ( appVersion int // global data storage instance - Storage *jsonStorage + Storage *jsonStorage // global tmp data storage instance. Temp data are generated for special usages, will not backup. TmpStorage *jsonStorage ) @@ -220,8 +220,8 @@ func writeDefaultData() { writeDefaultTmpData() } -func writeDefaultTmpData(){ - TmpStorage.Set("contents",make(map[string][]int)) +func writeDefaultTmpData() { + TmpStorage.Set("contents", make(map[string][]int)) } func loadAllData() { @@ -257,12 +257,8 @@ func Init(v int) { // Start timers for content, comment and message. func All() { loadAllData() - // content timer, save visit hits and comment numbers - StartContentsTimer() - // comment timer, recycle invalid comments whose parents or contents are removed - StartCommentsTimer() - // message timer, recycle old messages and save read status - StartMessageTimer() + // start model timer, do all timer stuffs + StartModelTimer() } // SyncAll writes all current memory data to storage files. diff --git a/app/model/timer.go b/app/model/timer.go new file mode 100644 index 0000000..4b0749c --- /dev/null +++ b/app/model/timer.go @@ -0,0 +1,74 @@ +package model + +import ( + "time" +) + +type timerFunc struct { + Fn func() + Ticker int +} + +var ( + timerCount int + timerFuncs map[string]*timerFunc +) + +func init() { + timerCount = 0 + timerFuncs = make(map[string]*timerFunc) +} + +// SetTimerFunc adds timer func for time ticker. +// Ticker means step time, after ticker size step passed, do function. +// Name is unique name of func.If set same name func, use the last one. +func SetTimerFunc(name string, ticker int, fn func()) { + tfn := new(timerFunc) + tfn.Fn = fn + tfn.Ticker = ticker + timerFuncs[name] = tfn +} + +// ChangeTimerFunc can change timer func by given name. +// If the func of name is none, do not change anything, print error message. +func ChangeTimerFunc(name string, ticker int, fn func()) { + if _, ok := timerFuncs[name]; ok { + timerFuncs[name].Fn = fn + timerFuncs[name].Ticker = ticker + } else { + println("change invalid timer func : " + name) + } +} + +// DelTimerFunc deletes timer func. +func DelTimerFunc(name string) { + delete(timerFuncs, name) +} + +// StartModelTimer adds models' timer and starts time ticker. +// The default step is 10 min once. +func StartModelTimer() { + // start all timers + startCommentsTimer() + startContentSyncTimer() + startContentTmpIndexesTimer() + startMessageTimer() + // start time ticker + ticker := time.NewTicker(time.Duration(10) * time.Minute) + go doTimers(ticker.C) +} + +func doTimers(c <-chan time.Time) { + for { + <-c + timerCount++ + for _, tfn := range timerFuncs { + if timerCount%tfn.Ticker == 0 { + tfn.Fn() + } + } + if timerCount > 999 { + timerCount = 0 + } + } +} From 7ea10e985e2ac628fc4d87dee634a90992bad8ec Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Thu, 20 Feb 2014 17:17:15 +0800 Subject: [PATCH 50/82] change indexes generation position, fix confusing error --- app/model/content.go | 3 --- app/model/storage.go | 8 ++++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/model/content.go b/app/model/content.go index 3b711e4..427a815 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -300,9 +300,6 @@ func LoadContents() { sort.Sort(sort.Reverse(sort.IntSlice(pageIndex))) contentsIndex["article"] = articleIndex contentsIndex["page"] = pageIndex - // generate indexes - generatePublishArticleIndex() - generateContentTmpIndexes() } func generatePublishArticleIndex() { diff --git a/app/model/storage.go b/app/model/storage.go index 715cdac..1c6a8cc 100644 --- a/app/model/storage.go +++ b/app/model/storage.go @@ -257,10 +257,18 @@ func Init(v int) { // Start timers for content, comment and message. func All() { loadAllData() + // generate indexes + SyncIndexes() // start model timer, do all timer stuffs StartModelTimer() } +func SyncIndexes() { + // generate indexes + generatePublishArticleIndex() + generateContentTmpIndexes() +} + // SyncAll writes all current memory data to storage files. func SyncAll() { SyncContents() From cda8be8e01b3d5d6e60f71a12e862c3b8097d17c Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Thu, 20 Feb 2014 18:01:31 +0800 Subject: [PATCH 51/82] update saber template --- view/saber/article.html | 12 +++++------- view/saber/comment.html | 6 ++---- view/saber/home.layout | 8 ++++++-- view/saber/index.html | 2 +- view/saber/page.html | 12 ++++++------ 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/view/saber/article.html b/view/saber/article.html index f04ae73..0573e56 100644 --- a/view/saber/article.html +++ b/view/saber/article.html @@ -1,14 +1,12 @@ -
+
{{with .Article}} -
-

{{.Hits}}

-
-
+
+ {{.Hits}}

{{.Title}}

-

{{if .User}}{{.User.Nick}}   {{end}}发表于   {{DateInt64 .CreateTime "YYYY 年 MM 月 DD 日"}}

{{Html .Content}}

- 标签:{{range .GetTags}}{{.Name}}{{end}} + {{if .User}}{{.User.Nick}}   {{end}}发表于   {{DateInt64 .CreateTime "YYYY 年 MM 月 DD 日"}} + 标签:{{range .GetTags}}{{.Name}}{{end}}

{{end}}
diff --git a/view/saber/comment.html b/view/saber/comment.html index 9e631d2..307a9eb 100644 --- a/view/saber/comment.html +++ b/view/saber/comment.html @@ -1,8 +1,6 @@ -
+
+ {{.Content.CommentNum}}

文章评论

-
{{range .Comments}}{{if .IsValid}}
{{.Author}} diff --git a/view/saber/home.layout b/view/saber/home.layout index 7ba8361..fa7d9de 100644 --- a/view/saber/home.layout +++ b/view/saber/home.layout @@ -27,13 +27,17 @@
-
+
{@Content}
Go © 2014 All rights reserved. - Proudly Powered by Fxh.Go. + + GitHub     + Feed     + Proudly Powered by Fxh.Go. +
Top {{Setting `c_footer_ga` | Html}} diff --git a/view/saber/index.html b/view/saber/index.html index 96f69e0..0321d5b 100644 --- a/view/saber/index.html +++ b/view/saber/index.html @@ -4,7 +4,7 @@

{{.CommentNum}}

{{.Hits}}

-
+

{{.Title}}

{{Html .Summary}}

diff --git a/view/saber/page.html b/view/saber/page.html index 88126a7..a2da3b7 100644 --- a/view/saber/page.html +++ b/view/saber/page.html @@ -1,12 +1,12 @@ -

+
{{with .Page}} -
-

{{.Hits}}

-
-
+
+ {{.Hits}}

{{.Title}}

-

{{if .User}}{{.User.Nick}}   {{end}}发表于   {{DateInt64 .CreateTime "YYYY 年 MM 月 DD 日"}}

{{Html .Content}}
+

+ {{if .User}}{{.User.Nick}}   {{end}}发表于   {{DateInt64 .CreateTime "YYYY 年 MM 月 DD 日"}} +

{{end}}
\ No newline at end of file From 39ba397c91e0db5ef7fea97fee3f71a73e2c28b2 Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Thu, 20 Feb 2014 18:01:52 +0800 Subject: [PATCH 52/82] update saber template --- static/less/ling.less | 2 +- static/less/saber.less | 127 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 1 deletion(-) diff --git a/static/less/ling.less b/static/less/ling.less index c9e652a..fde3a86 100644 --- a/static/less/ling.less +++ b/static/less/ling.less @@ -124,7 +124,7 @@ html, body { top: 63px; left: -22px; } - .title { + h3.title { font-size: 28px; padding-bottom: 24px; } diff --git a/static/less/saber.less b/static/less/saber.less index 790cab6..7aa7938 100644 --- a/static/less/saber.less +++ b/static/less/saber.less @@ -16,6 +16,7 @@ html, body { height: 60px; margin-right: 24px; border-radius: 30px; + vertical-align: middle; } #header-h, #header-sub { @@ -77,6 +78,8 @@ html, body { a { color: @white0; font-size: 18px; + display: block; + cursor: pointer; } } .views { @@ -87,6 +90,7 @@ html, body { text-align: center; font-size: 12px; font-family: Verdana, Tahoma, '微软雅黑', '宋体', sans-serif; + margin-bottom: 0; } } .title { @@ -106,6 +110,15 @@ html, body { color: @black3; font-size: 12px; } + .article-single{ + h3.title{ + padding-top: 0; + } + .views{ + color: #fff; + font-size: 18px; + } + } } #article-pager { @@ -150,4 +163,118 @@ html, body { padding: 4px 6px; margin-right: 6px; } +} + + +#comment { + h4{ + padding-top: 0; + } + .comments{ + a{ + color: #fff; + font-size: 18px; + } + } +} + +#comment-list { + .comment { + margin-bottom: 32px; + } + .c-avatar { + margin-right: 18px; + .border-radius(4px); + margin-top: 6px; + } + .c-meta { + p { + margin-bottom: 0; + } + .c-time { + color: @black3; + font-family: Verdana, Tahoma, '微软雅黑', '宋体', sans-serif; + } + .c-author { + font-size: 16px; + color: @black1; + display: block; + &:hover { + color: @blue2; + } + } + .c-reply { + color: @white0; + background: @gray2; + padding: 3px 10px; + &:hover { + background-color: @blue1; + } + } + } + .c-content { + padding-top: 4px; + } + .c-check{ + font-size: 13px; + color: @red1; + margin-left: 12px; + } + .c-p-md{ + margin-top: 12px; + font-size: 12px; + line-height: 20px; + color: @black2; + } +} + +#comment-show { + margin-bottom: 32px; +} + +#comment-title { + .bottom-line(20px); +} + +#comment-form{ + width: 80%; + margin: auto; + margin-bottom: 30px; + .c-info{ + width: 26%; + .ipt{ + width: 100%; + box-sizing: border-box; + min-width:0; + } + } + .c-content{ + width: 70%; + } + .c-avatar{ + .border-radius(4px); + margin-top: 6px; + width: 50px; + } + .reply-md{ + margin-bottom: 16px; + font-size: 12px; + line-height: 20px; + color: @black2; + } + .cancel-reply{ + border: none; + &:hover{ + cursor: pointer; + } + margin-left: 18px; + display: none; + } +} + +#comment-content{ + width: 100%; + box-sizing: border-box; + height: 180px; + resize: none; } \ No newline at end of file From 2ab652b3dec453435210de160aa6a9fe595c941b Mon Sep 17 00:00:00 2001 From: FuXiaoHei Date: Thu, 20 Feb 2014 20:00:54 +0800 Subject: [PATCH 53/82] update sidebar function --- app/handler/func.go | 14 +++- app/model/content.go | 5 +- static/css/ling.css | 142 +---------------------------------------- static/css/saber.css | 2 +- static/less/saber.less | 5 ++ view/saber/home.layout | 4 +- 6 files changed, 24 insertions(+), 148 deletions(-) diff --git a/app/handler/func.go b/app/handler/func.go index 75f6d49..eae3441 100644 --- a/app/handler/func.go +++ b/app/handler/func.go @@ -69,7 +69,11 @@ func (tc *themeContext) Has(tpl string) bool { // CommentHtml returns rendered comment template html with own content. func CommentHtml(context *GoInk.Context, c *model.Content) string { - return Theme(context).Tpl("comment", map[string]interface{}{ + thm := Theme(context) + if !thm.Has("comment.html") { + return "" + } + return thm.Tpl("comment", map[string]interface{}{ "Content": c, "Comments": c.Comments, }) @@ -77,9 +81,13 @@ func CommentHtml(context *GoInk.Context, c *model.Content) string { // SidebarHtml returns rendered sidebar template html. func SidebarHtml(context *GoInk.Context) string { - return Theme(context).Tpl("sidebar", map[string]interface{}{ + thm := Theme(context) + if !thm.Has("sidebar.html") { + return "" + } + return thm.Tpl("sidebar", map[string]interface{}{ "Popular": model.GetPopularArticleList(4), "RecentComment": model.GetCommentRecentList(3), - "Tags":model.GetContentTags(), + "Tags": model.GetContentTags(), }) } diff --git a/app/model/content.go b/app/model/content.go index 427a815..39449c9 100644 --- a/app/model/content.go +++ b/app/model/content.go @@ -140,7 +140,7 @@ type Tag struct { // Link returns tag name url-encoded link. func (t *Tag) Link() string { - return "/tag/" + url.QueryEscape(t.Name) + return "/tag/" + url.QueryEscape(strings.Replace(t.Name, ".", "-", -1)) } // GetContentById gets a content by given id. @@ -353,6 +353,9 @@ func generateContentTmpIndexes() { data["pop-index"] = popIndex tags = make([]*Tag, 0) for tag, index := range tagIndexes { + if strings.TrimSpace(tag) == "" { + continue + } sort.Sort(sort.Reverse(sort.IntSlice(index))) data["t-"+tag] = index contentsIndex["t-"+tag] = index diff --git a/static/css/ling.css b/static/css/ling.css index 31a1357..da9a6f6 100644 --- a/static/css/ling.css +++ b/static/css/ling.css @@ -1,141 +1 @@ -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0} -header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block} -audio,canvas,video{display:inline-block} -table{border-collapse:collapse;border-spacing:0} -fieldset,img{border:0} -address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal} -ol,ul{list-style:none} -caption,th{text-align:left} -h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal} -q:before,q:after{content:''} -abbr,acronym{border:0;font-variant:normal} -sup{vertical-align:text-top} -sub{vertical-align:text-bottom} -input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit} -legend{color:#000} -html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb} -a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b} -p{margin-bottom:18px} -h1,h2,h3,h4,h5,h6{padding:12px 0} -h1{font-size:28px} -h2{font-size:24px} -h3{font-size:21px} -h4{font-size:19px} -h5{font-size:16px} -h6{font-size:14px} -.text-left{text-align:left} -.text-right{text-align:right} -.text-center{text-align:center} -.left{float:left} -.right{float:right} -.absolute{position:absolute} -.relative{position:relative} -.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0} -.vertical-middle{vertical-align:middle} -.inline{display:inline} -.inline-block{display:inline-block} -.block{display:block} -.fade-out{opacity:0} -.hide{display:none !important} -.container{max-width:1200px;margin:auto} -.container960{max-width:960px;margin:auto} -.grid-1-2{width:50%} -.grid-1-3{width:33.3333%} -.grid-1-4{width:25%} -.grid-1-5{width:20%} -.grid-1-6{width:16.6666%} -.grid-2-3{width:66.6666%} -.grid-3-4{width:75%} -.grid-3-5{width:60%} -.grid-4-5{width:80%} -.grid-5-6{width:83.3333%} -input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif} -.form legend{font-size:18px;margin-bottom:14px} -.form label{display:inline-block;margin-right:12px} -.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc} -.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal} -.form .field{margin-bottom:24px} -.form .invalid{margin-right:12px} -.form .tip{font-size:13px;color:#999;margin-left:12px} -.form-vertical label{display:block;margin-bottom:8px} -.form-vertical .ipt{width:100%;box-sizing:border-box} -.form-vertical .invalid{margin-right:0;margin-top:6px} -.form-align label{display:inline-block;min-width:60px;text-align:right} -.form-align .invalid{margin-right:0;margin-top:6px} -.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer} -a.btn{line-height:36px;color:#fff} -.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a} -.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b} -.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462} -.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px} -.lbl-red{background-color:#e64346;color:#fbfbfb} -a.lbl{line-height:26px} -a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb} -.lbl-blue{background-color:#0079bc;color:#fbfbfb} -a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb} -.lbl-green{background-color:#7ab277;color:#fbfbfb} -a.lbl-green:hover{background-color:#649462;color:#fbfbfb} -.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333} -.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff} -.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb} -.pager .current:hover{background-color:#0079bc} -.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold} -.markdown h1{font-size:24px} -.markdown h2{font-size:21px} -.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd} -.markdown h3{font-size:19px} -.markdown h4{font-size:18px} -.markdown h5{font-size:16px} -.markdown h6{font-size:14px} -.markdown p{margin-bottom:10px} -.markdown ul{list-style:disc inside} -.markdown ol{list-style:decimal inside} -.markdown code{font-family:Consolas,"Courier New",Arial} -.markdown p code{color:#c7383a} -.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0} -.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0} -.markdown ol,.markdown ul{margin:12px 24px} -.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block} -.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px} -.markdown table thead{background:#f6f6f6} -html,body{background:#f3f3f3} -#header{background:#0093c4;min-width:120px;padding:40px 0 48px 0;color:#fbfbfb}#header a:hover{color:#fff;text-shadow:0 0 3px #333;-moz-text-shadow:0 0 3px #333;-webkit-text-shadow:0 0 3px #333} -#header-img{width:96px;height:96px;border-radius:50px;-moz-border-radius:50px;-webkit-border-radius:50px} -#header-h{line-height:94px;color:#fbfbfb;padding:0;margin-left:24px}#header-h a{color:#fbfbfb} -#header-sub{color:#f3f3f3;margin-left:1.2em;font-size:16px} -#nav{line-height:90px}#nav li{line-height:50px;margin-left:44px}#nav li a{font-size:18px;color:#f3f3f3;display:block}#nav li a:hover{color:#fff;text-shadow:0 0 3px #333;-moz-text-shadow:0 0 3px #333;-webkit-text-shadow:0 0 3px #333} -#footer{padding:30px 40px;color:#999} -#main{margin:30px auto} -#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4} -#article-container{height:100%}#article-container .comments,#article-container .views{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} -#article-container .comments{width:56px;height:56px;border-radius:36px;-moz-border-radius:36px;-webkit-border-radius:36px;line-height:56px;font-size:24px;padding:0;margin-top:40px;margin-left:8px;border:6px solid #fff;box-shadow:0 0 2px #999;-moz-box-shadow:0 0 2px #999;-webkit-box-shadow:0 0 2px #999}#article-container .comments a{color:#fff} -#article-container .comments:hover{box-shadow:0 0 4px #666;-moz-box-shadow:0 0 4px #666;-webkit-box-shadow:0 0 4px #666} -#article-container .views{top:14px;left:0;width:36px;height:36px;line-height:36px;border-radius:30px;-moz-border-radius:30px;-webkit-border-radius:30px;padding:0;border:4px solid #fff;box-shadow:0 0 2px #999;-moz-box-shadow:0 0 2px #999;-webkit-box-shadow:0 0 2px #999} -#article-container .main{margin-left:116px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;box-shadow:0 1px 2px #bbb;-moz-box-shadow:0 1px 2px #bbb;-webkit-box-shadow:0 1px 2px #bbb;background:#fff;padding:18px 24px}#article-container .main:before{content:"";display:block;border:11px solid transparent;border-right-color:#fff;position:absolute;top:63px;left:-22px} -#article-container .main .title{font-size:28px;padding-bottom:24px} -#article-container .main .time-info{color:#999;margin-bottom:20px;padding-bottom:20px;border-bottom:1px dashed #ddd;text-indent:1em;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} -#article-container article{margin-bottom:50px} -#article-container .article-single .main{margin-left:0}#article-container .article-single .main:before{display:none} -#article-container .article-single .meta{right:44px;top:-36px} -#article-container .article-single .views{width:56px;height:56px;border-radius:36px;-moz-border-radius:36px;-webkit-border-radius:36px;line-height:56px;font-size:24px;padding:0;border:6px solid #fff} -#article-container .tag{color:#999} -#article-pager{margin-left:116px}#article-pager .item{margin:0;color:#fff;background:#999;padding:12px 18px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px}#article-pager .item:hover{background:#0079bc} -#comment{border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;box-shadow:0 1px 2px #bbb;-moz-box-shadow:0 1px 2px #bbb;-webkit-box-shadow:0 1px 2px #bbb;background:#fff;padding:18px 24px}#comment .meta{right:-24px;top:-30px}#comment .meta .comments{margin-left:0;margin-top:0} -#comment-list .comment{margin-bottom:32px} -#comment-list .c-avatar{margin-right:18px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;margin-top:6px} -#comment-list .c-meta p{margin-bottom:0} -#comment-list .c-meta .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif} -#comment-list .c-meta .c-author{font-size:16px;color:#333;display:block}#comment-list .c-meta .c-author:hover{color:#005b9b} -#comment-list .c-meta .c-reply{color:#fff;background:#ddd;padding:3px 10px}#comment-list .c-meta .c-reply:hover{background-color:#0079bc} -#comment-list .c-content{padding-top:4px} -#comment-list .c-check{font-size:13px;color:#e64346;margin-left:12px} -#comment-list .c-p-md{margin-top:12px;font-size:12px;line-height:20px;color:#666} -#comment-show{margin-bottom:32px} -#comment-title{margin-bottom:20px;padding-bottom:20px;border-bottom:1px dashed #ddd} -#comment-form{width:80%;margin:auto;margin-bottom:30px}#comment-form .c-info{width:26%}#comment-form .c-info .ipt{width:100%;box-sizing:border-box;min-width:0} -#comment-form .c-content{width:70%} -#comment-form .c-avatar{border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;margin-top:6px;width:50px} -#comment-form .reply-md{margin-bottom:16px;font-size:12px;line-height:20px;color:#666} -#comment-form .cancel-reply{border:none;margin-left:18px;display:none}#comment-form .cancel-reply:hover{cursor:pointer} -#comment-content{width:100%;box-sizing:border-box;height:180px;resize:none} -@media only screen and (max-width:960px){.container960{padding:0 24px;width:auto}}@media only screen and (max-width:760px){.container960{padding:0 24px;width:auto} #article-container .main{margin-left:0} #article-container .meta{display:none} #article-container .main:before{display:none} #comment-form .c-info,#comment-form .c-content{width:100%;float:left} #comment-form .c-info{text-align:left} #nav,#header-h{line-height:50px} #footer span{float:none;text-align:center}}@media only screen and (max-width:560px){.container960{padding:0;width:auto} #header-h{margin-left:0} #header-img{display:none} #comment-form{width:100%} #nav{float:left}#nav li{margin-left:0;margin-right:44px}} +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}html,body{background:#f3f3f3}#header{background:#0093c4;min-width:120px;padding:40px 0 48px 0;color:#fbfbfb}#header a:hover{color:#fff;text-shadow:0 0 3px #333;-moz-text-shadow:0 0 3px #333;-webkit-text-shadow:0 0 3px #333}#header-img{width:96px;height:96px;border-radius:50px;-moz-border-radius:50px;-webkit-border-radius:50px}#header-h{line-height:94px;color:#fbfbfb;padding:0;margin-left:24px}#header-h a{color:#fbfbfb}#header-sub{color:#f3f3f3;margin-left:1.2em;font-size:16px}#nav{line-height:90px}#nav li{line-height:50px;margin-left:44px}#nav li a{font-size:18px;color:#f3f3f3;display:block}#nav li a:hover{color:#fff;text-shadow:0 0 3px #333;-moz-text-shadow:0 0 3px #333;-webkit-text-shadow:0 0 3px #333}#footer{padding:30px 40px;color:#999}#main{margin:30px auto}#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4}#article-container{height:100%}#article-container .comments,#article-container .views{font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container .comments{width:56px;height:56px;border-radius:36px;-moz-border-radius:36px;-webkit-border-radius:36px;line-height:56px;font-size:24px;padding:0;margin-top:40px;margin-left:8px;border:6px solid #fff;box-shadow:0 0 2px #999;-moz-box-shadow:0 0 2px #999;-webkit-box-shadow:0 0 2px #999}#article-container .comments a{color:#fff}#article-container .comments:hover{box-shadow:0 0 4px #666;-moz-box-shadow:0 0 4px #666;-webkit-box-shadow:0 0 4px #666}#article-container .views{top:14px;left:0;width:36px;height:36px;line-height:36px;border-radius:30px;-moz-border-radius:30px;-webkit-border-radius:30px;padding:0;border:4px solid #fff;box-shadow:0 0 2px #999;-moz-box-shadow:0 0 2px #999;-webkit-box-shadow:0 0 2px #999}#article-container .main{margin-left:116px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;box-shadow:0 1px 2px #bbb;-moz-box-shadow:0 1px 2px #bbb;-webkit-box-shadow:0 1px 2px #bbb;background:#fff;padding:18px 24px}#article-container .main:before{content:"";display:block;border:11px solid transparent;border-right-color:#fff;position:absolute;top:63px;left:-22px}#article-container .main h3.title{font-size:28px;padding-bottom:24px}#article-container .main .time-info{color:#999;margin-bottom:20px;padding-bottom:20px;border-bottom:1px dashed #ddd;text-indent:1em;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container article{margin-bottom:50px}#article-container .article-single .main{margin-left:0}#article-container .article-single .main:before{display:none}#article-container .article-single .meta{right:44px;top:-36px}#article-container .article-single .views{width:56px;height:56px;border-radius:36px;-moz-border-radius:36px;-webkit-border-radius:36px;line-height:56px;font-size:24px;padding:0;border:6px solid #fff}#article-container .tag{color:#999}#article-pager{margin-left:116px}#article-pager .item{margin:0;color:#fff;background:#999;padding:12px 18px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px}#article-pager .item:hover{background:#0079bc}#comment{border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;box-shadow:0 1px 2px #bbb;-moz-box-shadow:0 1px 2px #bbb;-webkit-box-shadow:0 1px 2px #bbb;background:#fff;padding:18px 24px}#comment .meta{right:-24px;top:-30px}#comment .meta .comments{margin-left:0;margin-top:0}#comment-list .comment{margin-bottom:32px}#comment-list .c-avatar{margin-right:18px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;margin-top:6px}#comment-list .c-meta p{margin-bottom:0}#comment-list .c-meta .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#comment-list .c-meta .c-author{font-size:16px;color:#333;display:block}#comment-list .c-meta .c-author:hover{color:#005b9b}#comment-list .c-meta .c-reply{color:#fff;background:#ddd;padding:3px 10px}#comment-list .c-meta .c-reply:hover{background-color:#0079bc}#comment-list .c-content{padding-top:4px}#comment-list .c-check{font-size:13px;color:#e64346;margin-left:12px}#comment-list .c-p-md{margin-top:12px;font-size:12px;line-height:20px;color:#666}#comment-show{margin-bottom:32px}#comment-title{margin-bottom:20px;padding-bottom:20px;border-bottom:1px dashed #ddd}#comment-form{width:80%;margin:auto;margin-bottom:30px}#comment-form .c-info{width:26%}#comment-form .c-info .ipt{width:100%;box-sizing:border-box;min-width:0}#comment-form .c-content{width:70%}#comment-form .c-avatar{border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;margin-top:6px;width:50px}#comment-form .reply-md{margin-bottom:16px;font-size:12px;line-height:20px;color:#666}#comment-form .cancel-reply{border:none;margin-left:18px;display:none}#comment-form .cancel-reply:hover{cursor:pointer}#comment-content{width:100%;box-sizing:border-box;height:180px;resize:none}@media only screen and (max-width:960px){.container960{padding:0 24px;width:auto}}@media only screen and (max-width:760px){.container960{padding:0 24px;width:auto}#article-container .main{margin-left:0}#article-container .meta{display:none}#article-container .main:before{display:none}#comment-form .c-info,#comment-form .c-content{width:100%;float:left}#comment-form .c-info{text-align:left}#nav,#header-h{line-height:50px}#footer span{float:none;text-align:center}}@media only screen and (max-width:560px){.container960{padding:0;width:auto}#header-h{margin-left:0}#header-img{display:none}#comment-form{width:100%}#nav{float:left}#nav li{margin-left:0;margin-right:44px}} \ No newline at end of file diff --git a/static/css/saber.css b/static/css/saber.css index 6a4d8ae..4f722e4 100644 --- a/static/css/saber.css +++ b/static/css/saber.css @@ -1 +1 @@ -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}html,body{background:#f9f9f9}#header{background:#fff;box-shadow:0 0 4px #666;line-height:60px;padding:12px 0 18px 0}#header-img{width:60px;height:60px;margin-right:24px;border-radius:30px}#header-h,#header-sub{padding:0 18px 0 0}#header-sub{font-size:13px;color:#999}#nav{margin-right:-18px}#nav li a{margin-left:24px;padding:0 18px;font-size:15px}#nav li a:hover{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;background-color:#0079bc;color:#fbfbfb;padding:6px 18px}#footer{padding:30px 40px;color:#999}#main{margin:48px auto}#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4}#article-container article{margin-bottom:40px;padding-bottom:40px;border-bottom:1px dashed #bbb;margin-bottom:50px}#article-container .meta .comments{margin-bottom:0;margin-top:8px;margin-right:18px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;padding-bottom:2px}#article-container .meta .comments a{color:#fff;font-size:18px}#article-container .meta .views{top:-8px;left:-12px;padding:2px 6px;line-height:20px;text-align:center;font-size:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#article-container .title{margin-bottom:24px;padding-bottom:24px;border-bottom:1px dashed #ddd;font-size:24px}#article-container .content{margin-top:-12px}#article-container .info{margin-bottom:0;color:#999;font-size:12px}#article-container .info span{border-right:1px dashed #999;padding-right:12px;margin-right:12px}#article-pager a{margin:0}#article-pager a:hover{color:#fbfbfb}#article-sidebar .sidebar{margin-bottom:24px}#article-sidebar .sidebar .title{padding-top:0}#pop-article-sidebar .list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#pop-article-sidebar .pop-num{padding:4px;margin-left:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;font-size:12px}#recent-comment-sidebar .list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#recent-comment-sidebar .author{padding:4px 6px;margin-right:6px} \ No newline at end of file +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block}audio,canvas,video{display:inline-block}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}legend{color:#000}html,body{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif;font-size:14px;line-height:30px;color:#333;background-color:#fbfbfb}a{text-decoration:none;color:#0079bc}a:hover{color:#005b9b}p{margin-bottom:18px}h1,h2,h3,h4,h5,h6{padding:12px 0}h1{font-size:28px}h2{font-size:24px}h3{font-size:21px}h4{font-size:19px}h5{font-size:16px}h6{font-size:14px}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.left{float:left}.right{float:right}.absolute{position:absolute}.relative{position:relative}.clear:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.vertical-middle{vertical-align:middle}.inline{display:inline}.inline-block{display:inline-block}.block{display:block}.fade-out{opacity:0}.hide{display:none !important}.container{max-width:1200px;margin:auto}.container960{max-width:960px;margin:auto}.grid-1-2{width:50%}.grid-1-3{width:33.3333%}.grid-1-4{width:25%}.grid-1-5{width:20%}.grid-1-6{width:16.6666%}.grid-2-3{width:66.6666%}.grid-3-4{width:75%}.grid-3-5{width:60%}.grid-4-5{width:80%}.grid-5-6{width:83.3333%}input,textarea,select,button{font-family:Ubuntu,Consolas,"Microsoft YaHei",Verdana,Tahoma,Arial,sans-serif}.form legend{font-size:18px;margin-bottom:14px}.form label{display:inline-block;margin-right:12px}.form .ipt{padding:8px 12px;border:1px solid #999;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;min-width:180px}.form .ipt:focus{border-color:#0079bc}.form .chk{display:inline-block;margin:2px 6px 0 0;line-height:normal}.form .field{margin-bottom:24px}.form .invalid{margin-right:12px}.form .tip{font-size:13px;color:#999;margin-left:12px}.form-vertical label{display:block;margin-bottom:8px}.form-vertical .ipt{width:100%;box-sizing:border-box}.form-vertical .invalid{margin-right:0;margin-top:6px}.form-align label{display:inline-block;min-width:60px;text-align:right}.form-align .invalid{margin-right:0;margin-top:6px}.btn{min-width:120px;height:36px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;outline:none;border:none;margin:0}.btn:hover{background-color:#999;cursor:pointer}a.btn{line-height:36px;color:#fff}.btn-red{background-color:#e64346;color:#fbfbfb}.btn-red:hover{background-color:#c7383a}.btn-blue{background-color:#0079bc;color:#fbfbfb}.btn-blue:hover{background-color:#005b9b}.btn-green{background-color:#7ab277;color:#fbfbfb}.btn-green:hover{background-color:#649462}.lbl{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.lbl-red{background-color:#e64346;color:#fbfbfb}a.lbl{line-height:26px}a.lbl-red:hover{background-color:#c7383a;color:#fbfbfb}.lbl-blue{background-color:#0079bc;color:#fbfbfb}a.lbl-blue:hover{background-color:#005b9b;color:#fbfbfb}.lbl-green{background-color:#7ab277;color:#fbfbfb}a.lbl-green:hover{background-color:#649462;color:#fbfbfb}.pager .item{padding:2px 8px;margin:0 6px;color:#333;display:inline-block;line-height:20px}.pager .item a{color:#333}.pager .item:hover{background-color:#0079bc;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .item:hover a{color:#fff}.pager .current{background-color:#666;color:#fbfbfb;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px}.pager .current a{color:#fbfbfb}.pager .current:hover{background-color:#0079bc}.markdown h1,.markdown h2,.markdown h3,.markdown h4,.markdown h5,.markdown h6{padding:18px 0 9px 0;font-weight:bold}.markdown h1{font-size:24px}.markdown h2{font-size:21px}.markdown h1,.markdown h2{margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed #ddd}.markdown h3{font-size:19px}.markdown h4{font-size:18px}.markdown h5{font-size:16px}.markdown h6{font-size:14px}.markdown p{margin-bottom:10px}.markdown ul{list-style:disc inside}.markdown ol{list-style:decimal inside}.markdown code{font-family:Consolas,"Courier New",Arial}.markdown p code{color:#c7383a}.markdown blockquote{padding:8px 18px;border-left:4px solid #ccc;background-color:#fbfbfb}.markdown blockquote p{margin-bottom:0}.markdown pre code{font-size:12px;line-height:18px !important;padding:8px 18px;display:block;margin:12px 0 18px 0}.markdown ol,.markdown ul{margin:12px 24px}.markdown p img{max-width:99%;height:auto;margin:0 auto;display:block}.markdown table{margin:12px 0;width:98%}.markdown table th,.markdown table td{border:1px solid #ccc;padding:4px 12px}.markdown table thead{background:#f6f6f6}html,body{background:#f9f9f9}#header{background:#fff;box-shadow:0 0 4px #666;line-height:60px;padding:12px 0 18px 0}#header-img{width:60px;height:60px;margin-right:24px;border-radius:30px;vertical-align:middle}#header-h,#header-sub{padding:0 18px 0 0}#header-sub{font-size:13px;color:#999}#nav{margin-right:-18px}#nav li a{margin-left:24px;padding:0 18px;font-size:15px}#nav li a:hover{padding:4px 12px;background-color:#ccc;color:#333;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;background-color:#0079bc;color:#fbfbfb;padding:6px 18px}#footer{padding:30px 40px;color:#999}#main{margin:48px auto}#go-top{bottom:50px;right:40px;position:fixed;color:#fff;padding-top:6px;padding-bottom:8px;opacity:.4}#article-container article{margin-bottom:40px;padding-bottom:40px;border-bottom:1px dashed #bbb;margin-bottom:50px}#article-container .meta .comments{margin-bottom:0;margin-top:8px;margin-right:18px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;padding-bottom:2px}#article-container .meta .comments a{color:#fff;font-size:18px;display:block;cursor:pointer}#article-container .meta .views{top:-8px;left:-12px;padding:2px 6px;line-height:20px;text-align:center;font-size:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;margin-bottom:0}#article-container .title{margin-bottom:24px;padding-bottom:24px;border-bottom:1px dashed #ddd;font-size:24px}#article-container .content{margin-top:-12px}#article-container .info{margin-bottom:0;color:#999;font-size:12px}#article-container .info span{border-right:1px dashed #999;padding-right:12px;margin-right:12px}#article-container .info .tag a{margin-left:4px}#article-container .article-single h3.title{padding-top:0}#article-container .article-single .views{color:#fff;font-size:18px}#article-pager a{margin:0}#article-pager a:hover{color:#fbfbfb}#article-sidebar .sidebar{margin-bottom:24px}#article-sidebar .sidebar .title{padding-top:0}#pop-article-sidebar .list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#pop-article-sidebar .pop-num{padding:4px;margin-left:12px;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif;font-size:12px}#recent-comment-sidebar .list li{margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #ddd}#recent-comment-sidebar .author{padding:4px 6px;margin-right:6px}#comment h4{padding-top:0}#comment .comments a{color:#fff;font-size:18px}#comment-list .comment{margin-bottom:32px}#comment-list .c-avatar{margin-right:18px;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;margin-top:6px}#comment-list .c-meta p{margin-bottom:0}#comment-list .c-meta .c-time{color:#999;font-family:Verdana,Tahoma,'微软雅黑','宋体',sans-serif}#comment-list .c-meta .c-author{font-size:16px;color:#333;display:block}#comment-list .c-meta .c-author:hover{color:#005b9b}#comment-list .c-meta .c-reply{color:#fff;background:#ddd;padding:3px 10px}#comment-list .c-meta .c-reply:hover{background-color:#0079bc}#comment-list .c-content{padding-top:4px}#comment-list .c-check{font-size:13px;color:#e64346;margin-left:12px}#comment-list .c-p-md{margin-top:12px;font-size:12px;line-height:20px;color:#666}#comment-show{margin-bottom:32px}#comment-title{margin-bottom:20px;padding-bottom:20px;border-bottom:1px dashed #ddd}#comment-form{width:80%;margin:auto;margin-bottom:30px}#comment-form .c-info{width:26%}#comment-form .c-info .ipt{width:100%;box-sizing:border-box;min-width:0}#comment-form .c-content{width:70%}#comment-form .c-avatar{border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;margin-top:6px;width:50px}#comment-form .reply-md{margin-bottom:16px;font-size:12px;line-height:20px;color:#666}#comment-form .cancel-reply{border:none;margin-left:18px;display:none}#comment-form .cancel-reply:hover{cursor:pointer}#comment-content{width:100%;box-sizing:border-box;height:180px;resize:none} \ No newline at end of file diff --git a/static/less/saber.less b/static/less/saber.less index 7aa7938..701ebe2 100644 --- a/static/less/saber.less +++ b/static/less/saber.less @@ -109,6 +109,11 @@ html, body { } color: @black3; font-size: 12px; + .tag{ + a{ + margin-left: 4px; + } + } } .article-single{ h3.title{ diff --git a/view/saber/home.layout b/view/saber/home.layout index fa7d9de..1257303 100644 --- a/view/saber/home.layout +++ b/view/saber/home.layout @@ -15,8 +15,8 @@ -